@beesolve/lambda-keep-active 1.0.3 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cdk.js +3 -3
- package/dist/lambda/handler.mjs +4 -0
- package/package.json +1 -1
- package/dist/chunk-3cawvvw3.js +0 -5
- package/dist/chunk-4pkw7jk4.js +0 -5
- package/dist/chunk-7bag664c.js +0 -5
- package/dist/chunk-9zmzw25z.js +0 -8
- package/dist/chunk-bh9mv7m6.js +0 -4
- package/dist/chunk-dkk1zwm0.js +0 -5
- package/dist/chunk-dyyrwzgp.js +0 -5
- package/dist/chunk-e9mt878v.js +0 -5
- package/dist/chunk-ekwpcdh4.js +0 -5
- package/dist/chunk-fbbbv2d4.js +0 -16
- package/dist/chunk-ggeka6d3.js +0 -5
- package/dist/chunk-jxb3myh9.js +0 -4
- package/dist/chunk-kvnavsh3.js +0 -5
- package/dist/chunk-m1zv7mtv.js +0 -4
- package/dist/chunk-p85vag28.js +0 -32
- package/dist/chunk-pqhmh7nm.js +0 -4
- package/dist/chunk-r8mj3nq7.js +0 -5
- package/dist/chunk-rea1s8cr.js +0 -4
- package/dist/chunk-rn0z3e77.js +0 -4
- package/dist/chunk-t5j8kj9p.js +0 -11
- package/dist/chunk-whenq5kz.js +0 -5
- package/dist/chunk-x343hkb8.js +0 -5
- package/dist/handler.js +0 -12
package/dist/chunk-fbbbv2d4.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import{L as le}from"./chunk-ekwpcdh4.js";import{N as He,O as be}from"./chunk-whenq5kz.js";import{P as gt}from"./chunk-kvnavsh3.js";import{U as S,W as L}from"./chunk-e9mt878v.js";var Tt=S((Sn)=>{var bt=gt(),gn=(e)=>e[bt.SMITHY_CONTEXT_KEY]||(e[bt.SMITHY_CONTEXT_KEY]={}),Tn=(e)=>{if(typeof e==="function")return e;let t=Promise.resolve(e);return()=>t};Sn.getSmithyContext=gn;Sn.normalizeProvider=Tn});var Ie=S((In)=>{var Mn=le(),St=Tt(),de=(e)=>{if(typeof e==="function")return e();return e},Ne=(e,t,r,n,c)=>({name:t,namespace:e,traits:r,input:n,output:c}),On=(e)=>(t,r)=>async(n)=>{let{response:c}=await t(n),{operationSchema:s}=St.getSmithyContext(r),[,o,i,f,a,u]=s??[];try{let h=await e.protocol.deserializeResponse(Ne(o,i,f,a,u),{...e,...r},c);return{response:c,output:h}}catch(h){if(Object.defineProperty(h,"$response",{value:c,enumerable:!1,writable:!1,configurable:!1}),!("$metadata"in h)){try{h.message+=`
|
|
2
|
-
Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object.`}catch(m){if(!r.logger||r.logger?.constructor?.name==="NoOpLogger")console.warn("Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object.");else r.logger?.warn?.("Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object.")}if(typeof h.$responseBodyText<"u"){if(h.$response)h.$response.body=h.$responseBodyText}try{if(Mn.HttpResponse.isInstance(c)){let{headers:m={}}=c,l=Object.entries(m);h.$metadata={httpStatusCode:c.statusCode,requestId:Be(/^x-[\w-]+-request-?id$/,l),extendedRequestId:Be(/^x-[\w-]+-id-2$/,l),cfId:Be(/^x-[\w-]+-cf-id$/,l)}}}catch(m){}}throw h}},Be=(e,t)=>{return(t.find(([r])=>{return r.match(e)})||[void 0,void 0])[1]},An=(e)=>(t,r)=>async(n)=>{let{operationSchema:c}=St.getSmithyContext(r),[,s,o,i,f,a]=c??[],u=r.endpointV2?.url&&e.urlParser?async()=>e.urlParser(r.endpointV2.url):e.endpoint,h=await e.protocol.serializeRequest(Ne(s,o,i,f,a),n.input,{...e,...r,endpoint:u});return t({...n,request:h})},Et={name:"deserializerMiddleware",step:"deserialize",tags:["DESERIALIZER"],override:!0},$t={name:"serializerMiddleware",step:"serialize",tags:["SERIALIZER"],override:!0};function Rn(e){return{applyToStack:(t)=>{t.add(An(e),$t),t.add(On(e),Et),e.protocol.setSerdeContext(e)}}}class x{name;namespace;traits;static assign(e,t){return Object.assign(e,t)}static[Symbol.hasInstance](e){let t=this.prototype.isPrototypeOf(e);if(!t&&typeof e==="object"&&e!==null)return e.symbol===this.symbol;return t}getName(){return this.namespace+"#"+this.name}}class me extends x{static symbol=Symbol.for("@smithy/lis");name;traits;valueSchema;symbol=me.symbol}var Pn=(e,t,r,n)=>x.assign(new me,{name:t,namespace:e,traits:r,valueSchema:n});class ye extends x{static symbol=Symbol.for("@smithy/map");name;traits;keySchema;valueSchema;symbol=ye.symbol}var Un=(e,t,r,n,c)=>x.assign(new ye,{name:t,namespace:e,traits:r,keySchema:n,valueSchema:c});class pe extends x{static symbol=Symbol.for("@smithy/ope");name;traits;input;output;symbol=pe.symbol}var xn=(e,t,r,n,c)=>x.assign(new pe,{name:t,namespace:e,traits:r,input:n,output:c});class re extends x{static symbol=Symbol.for("@smithy/str");name;traits;memberNames;memberList;symbol=re.symbol}var Cn=(e,t,r,n,c)=>x.assign(new re,{name:t,namespace:e,traits:r,memberNames:n,memberList:c});class we extends re{static symbol=Symbol.for("@smithy/err");ctor;symbol=we.symbol}var Dn=(e,t,r,n,c,s)=>x.assign(new we,{name:t,namespace:e,traits:r,memberNames:n,memberList:c,ctor:null});function te(e){if(typeof e==="object")return e;e=e|0;let t={},r=0;for(let n of["httpLabel","idempotent","idempotencyToken","sensitive","httpPayload","httpResponseCode","httpQueryParams"])if((e>>r++&1)===1)t[n]=1;return t}class q{ref;memberName;static symbol=Symbol.for("@smithy/nor");symbol=q.symbol;name;schema;_isMemberSchema;traits;memberTraits;normalizedTraits;constructor(e,t){this.ref=e,this.memberName=t;let r=[],n=e,c=e;this._isMemberSchema=!1;while(Le(n))r.push(n[1]),n=n[0],c=de(n),this._isMemberSchema=!0;if(r.length>0){this.memberTraits={};for(let s=r.length-1;s>=0;--s){let o=r[s];Object.assign(this.memberTraits,te(o))}}else this.memberTraits=0;if(c instanceof q){let s=this.memberTraits;Object.assign(this,c),this.memberTraits=Object.assign({},s,c.getMemberTraits(),this.getMemberTraits()),this.normalizedTraits=void 0,this.memberName=t??c.memberName;return}if(this.schema=de(c),Mt(this.schema))this.name=`${this.schema[1]}#${this.schema[2]}`,this.traits=this.schema[3];else this.name=this.memberName??String(c),this.traits=0;if(this._isMemberSchema&&!t)throw Error(`@smithy/core/schema - NormalizedSchema member init ${this.getName(!0)} missing member name.`)}static[Symbol.hasInstance](e){let t=this.prototype.isPrototypeOf(e);if(!t&&typeof e==="object"&&e!==null)return e.symbol===this.symbol;return t}static of(e){let t=de(e);if(t instanceof q)return t;if(Le(t)){let[r,n]=t;if(r instanceof q)return Object.assign(r.getMergedTraits(),te(n)),r;throw Error(`@smithy/core/schema - may not init unwrapped member schema=${JSON.stringify(e,null,2)}.`)}return new q(t)}getSchema(){let e=this.schema;if(e[0]===0)return e[4];return e}getName(e=!1){let{name:t}=this;return!e&&t&&t.includes("#")?t.split("#")[1]:t||void 0}getMemberName(){return this.memberName}isMemberSchema(){return this._isMemberSchema}isListSchema(){let e=this.getSchema();return typeof e==="number"?e>=64&&e<128:e[0]===1}isMapSchema(){let e=this.getSchema();return typeof e==="number"?e>=128&&e<=255:e[0]===2}isStructSchema(){let e=this.getSchema();return e[0]===3||e[0]===-3}isBlobSchema(){let e=this.getSchema();return e===21||e===42}isTimestampSchema(){let e=this.getSchema();return typeof e==="number"&&e>=4&&e<=7}isUnitSchema(){return this.getSchema()==="unit"}isDocumentSchema(){return this.getSchema()===15}isStringSchema(){return this.getSchema()===0}isBooleanSchema(){return this.getSchema()===2}isNumericSchema(){return this.getSchema()===1}isBigIntegerSchema(){return this.getSchema()===17}isBigDecimalSchema(){return this.getSchema()===19}isStreaming(){let{streaming:e}=this.getMergedTraits();return!!e||this.getSchema()===42}isIdempotencyToken(){let e=(c)=>(c&4)===4||!!c?.idempotencyToken,{normalizedTraits:t,traits:r,memberTraits:n}=this;return e(t)||e(r)||e(n)}getMergedTraits(){return this.normalizedTraits??(this.normalizedTraits={...this.getOwnTraits(),...this.getMemberTraits()})}getMemberTraits(){return te(this.memberTraits)}getOwnTraits(){return te(this.traits)}getKeySchema(){let[e,t]=[this.isDocumentSchema(),this.isMapSchema()];if(!e&&!t)throw Error(`@smithy/core/schema - cannot get key for non-map: ${this.getName(!0)}`);let r=this.getSchema(),n=e?15:r[4]??0;return ee([n,0],"key")}getValueSchema(){let e=this.getSchema(),[t,r,n]=[this.isDocumentSchema(),this.isMapSchema(),this.isListSchema()],c=typeof e==="number"?63&e:e&&typeof e==="object"&&(r||n)?e[3+e[0]]:t?15:void 0;if(c!=null)return ee([c,0],r?"value":"member");throw Error(`@smithy/core/schema - ${this.getName(!0)} has no value member.`)}getMemberSchema(e){let t=this.getSchema();if(this.isStructSchema()&&t[4].includes(e)){let r=t[4].indexOf(e),n=t[5][r];return ee(Le(n)?n:[n,0],e)}if(this.isDocumentSchema())return ee([15,0],e);throw Error(`@smithy/core/schema - ${this.getName(!0)} has no no member=${e}.`)}getMemberSchemas(){let e={};try{for(let[t,r]of this.structIterator())e[t]=r}catch(t){}return e}getEventStreamMember(){if(this.isStructSchema()){for(let[e,t]of this.structIterator())if(t.isStreaming()&&t.isStructSchema())return e}return""}*structIterator(){if(this.isUnitSchema())return;if(!this.isStructSchema())throw Error("@smithy/core/schema - cannot iterate non-struct schema.");let e=this.getSchema();for(let t=0;t<e[4].length;++t)yield[e[4][t],ee([e[5][t],0],e[4][t])]}}function ee(e,t){if(e instanceof q)return Object.assign(e,{memberName:t,_isMemberSchema:!0});return new q(e,t)}var Le=(e)=>Array.isArray(e)&&e.length===2,Mt=(e)=>Array.isArray(e)&&e.length>=5;class se extends x{static symbol=Symbol.for("@smithy/sim");name;schemaRef;traits;symbol=se.symbol}var Bn=(e,t,r,n)=>x.assign(new se,{name:t,namespace:e,traits:n,schemaRef:r}),Ln=(e,t,r,n)=>x.assign(new se,{name:t,namespace:e,traits:r,schemaRef:n}),Nn={BLOB:21,STREAMING_BLOB:42,BOOLEAN:2,STRING:0,NUMERIC:1,BIG_INTEGER:17,BIG_DECIMAL:19,DOCUMENT:15,TIMESTAMP_DEFAULT:4,TIMESTAMP_DATE_TIME:5,TIMESTAMP_HTTP_DATE:6,TIMESTAMP_EPOCH_SECONDS:7,LIST_MODIFIER:64,MAP_MODIFIER:128};class I{namespace;schemas;exceptions;static registries=new Map;constructor(e,t=new Map,r=new Map){this.namespace=e,this.schemas=t,this.exceptions=r}static for(e){if(!I.registries.has(e))I.registries.set(e,new I(e));return I.registries.get(e)}register(e,t){let r=this.normalizeShapeId(e);I.for(r.split("#")[0]).schemas.set(r,t)}getSchema(e){let t=this.normalizeShapeId(e);if(!this.schemas.has(t))throw Error(`@smithy/core/schema - schema not found for ${t}`);return this.schemas.get(t)}registerError(e,t){let r=e,n=I.for(r[1]);n.schemas.set(r[1]+"#"+r[2],r),n.exceptions.set(r,t)}getErrorCtor(e){let t=e;return I.for(t[1]).exceptions.get(t)}getBaseException(){for(let e of this.exceptions.keys())if(Array.isArray(e)){let[,t,r]=e,n=t+"#"+r;if(n.startsWith("smithy.ts.sdk.synthetic.")&&n.endsWith("ServiceException"))return e}return}find(e){return[...this.schemas.values()].find(e)}clear(){this.schemas.clear(),this.exceptions.clear()}normalizeShapeId(e){if(e.includes("#"))return e;return this.namespace+"#"+e}}In.ErrorSchema=we;In.ListSchema=me;In.MapSchema=ye;In.NormalizedSchema=q;In.OperationSchema=pe;In.SCHEMA=Nn;In.Schema=x;In.SimpleSchema=se;In.StructureSchema=re;In.TypeRegistry=I;In.deref=de;In.deserializerMiddlewareOption=Et;In.error=Dn;In.getSchemaSerdePlugin=Rn;In.isStaticSchema=Mt;In.list=Pn;In.map=Un;In.op=xn;In.operation=Ne;In.serializerMiddlewareOption=$t;In.sim=Bn;In.simAdapter=Ln;In.struct=Cn;In.translateTraits=te});var Rt=S((co)=>{var j=(e,t)=>{let r=[];if(e)r.push(e);if(t)for(let n of t)r.push(n);return r},W=(e,t)=>{return`${e||"anonymous"}${t&&t.length>0?` (a.k.a. ${t.join(",")})`:""}`},qe=()=>{let e=[],t=[],r=!1,n=new Set,c=(h)=>h.sort((d,m)=>Ot[m.step]-Ot[d.step]||At[m.priority||"normal"]-At[d.priority||"normal"]),s=(h)=>{let d=!1,m=(l)=>{let p=j(l.name,l.aliases);if(p.includes(h)){d=!0;for(let y of p)n.delete(y);return!1}return!0};return e=e.filter(m),t=t.filter(m),d},o=(h)=>{let d=!1,m=(l)=>{if(l.middleware===h){d=!0;for(let p of j(l.name,l.aliases))n.delete(p);return!1}return!0};return e=e.filter(m),t=t.filter(m),d},i=(h)=>{return e.forEach((d)=>{h.add(d.middleware,{...d})}),t.forEach((d)=>{h.addRelativeTo(d.middleware,{...d})}),h.identifyOnResolve?.(u.identifyOnResolve()),h},f=(h)=>{let d=[];return h.before.forEach((m)=>{if(m.before.length===0&&m.after.length===0)d.push(m);else d.push(...f(m))}),d.push(h),h.after.reverse().forEach((m)=>{if(m.before.length===0&&m.after.length===0)d.push(m);else d.push(...f(m))}),d},a=(h=!1)=>{let d=[],m=[],l={};return e.forEach((y)=>{let w={...y,before:[],after:[]};for(let b of j(w.name,w.aliases))l[b]=w;d.push(w)}),t.forEach((y)=>{let w={...y,before:[],after:[]};for(let b of j(w.name,w.aliases))l[b]=w;m.push(w)}),m.forEach((y)=>{if(y.toMiddleware){let w=l[y.toMiddleware];if(w===void 0){if(h)return;throw Error(`${y.toMiddleware} is not found when adding ${W(y.name,y.aliases)} middleware ${y.relation} ${y.toMiddleware}`)}if(y.relation==="after")w.after.push(y);if(y.relation==="before")w.before.push(y)}}),c(d).map(f).reduce((y,w)=>{return y.push(...w),y},[])},u={add:(h,d={})=>{let{name:m,override:l,aliases:p}=d,y={step:"initialize",priority:"normal",middleware:h,...d},w=j(m,p);if(w.length>0){if(w.some((b)=>n.has(b))){if(!l)throw Error(`Duplicate middleware name '${W(m,p)}'`);for(let b of w){let T=e.findIndex((E)=>E.name===b||E.aliases?.some((A)=>A===b));if(T===-1)continue;let g=e[T];if(g.step!==y.step||y.priority!==g.priority)throw Error(`"${W(g.name,g.aliases)}" middleware with ${g.priority} priority in ${g.step} step cannot be overridden by "${W(m,p)}" middleware with ${y.priority} priority in ${y.step} step.`);e.splice(T,1)}}for(let b of w)n.add(b)}e.push(y)},addRelativeTo:(h,d)=>{let{name:m,override:l,aliases:p}=d,y={middleware:h,...d},w=j(m,p);if(w.length>0){if(w.some((b)=>n.has(b))){if(!l)throw Error(`Duplicate middleware name '${W(m,p)}'`);for(let b of w){let T=t.findIndex((E)=>E.name===b||E.aliases?.some((A)=>A===b));if(T===-1)continue;let g=t[T];if(g.toMiddleware!==y.toMiddleware||g.relation!==y.relation)throw Error(`"${W(g.name,g.aliases)}" middleware ${g.relation} "${g.toMiddleware}" middleware cannot be overridden by "${W(m,p)}" middleware ${y.relation} "${y.toMiddleware}" middleware.`);t.splice(T,1)}}for(let b of w)n.add(b)}t.push(y)},clone:()=>i(qe()),use:(h)=>{h.applyToStack(u)},remove:(h)=>{if(typeof h==="string")return s(h);else return o(h)},removeByTag:(h)=>{let d=!1,m=(l)=>{let{tags:p,name:y,aliases:w}=l;if(p&&p.includes(h)){let b=j(y,w);for(let T of b)n.delete(T);return d=!0,!1}return!0};return e=e.filter(m),t=t.filter(m),d},concat:(h)=>{let d=i(qe());return d.use(h),d.identifyOnResolve(r||d.identifyOnResolve()||(h.identifyOnResolve?.()??!1)),d},applyToStack:i,identify:()=>{return a(!0).map((h)=>{let d=h.step??h.relation+" "+h.toMiddleware;return W(h.name,h.aliases)+" - "+d})},identifyOnResolve(h){if(typeof h==="boolean")r=h;return r},resolve:(h,d)=>{for(let m of a().map((l)=>l.middleware).reverse())h=m(h,d);if(r)console.log(u.identify());return h}};return u},Ot={initialize:5,serialize:4,build:3,finalizeRequest:2,deserialize:1},At={high:3,normal:2,low:1};co.constructStack=qe});var xt=S((Pt)=>{Object.defineProperty(Pt,"__esModule",{value:!0});Pt.fromBase64=void 0;var ao=He(),ho=/^[A-Za-z0-9+/]*={0,2}$/,uo=(e)=>{if(e.length*3%4!==0)throw TypeError("Incorrect padding on base64 string.");if(!ho.exec(e))throw TypeError("Invalid base64 string.");let t=(0,ao.fromString)(e,"base64");return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)};Pt.fromBase64=uo});var Bt=S((Ct)=>{Object.defineProperty(Ct,"__esModule",{value:!0});Ct.toBase64=void 0;var lo=He(),mo=be(),yo=(e)=>{let t;if(typeof e==="string")t=(0,mo.fromUtf8)(e);else t=e;if(typeof t!=="object"||typeof t.byteOffset!=="number"||typeof t.byteLength!=="number")throw Error("@smithy/util-base64: toBase64 encoder function only accepts string | Uint8Array.");return(0,lo.fromArrayBuffer)(t.buffer,t.byteOffset,t.byteLength).toString("base64")};Ct.toBase64=yo});var z=S((ne)=>{var Lt=xt(),Nt=Bt();Object.keys(Lt).forEach(function(e){if(e!=="default"&&!Object.prototype.hasOwnProperty.call(ne,e))Object.defineProperty(ne,e,{enumerable:!0,get:function(){return Lt[e]}})});Object.keys(Nt).forEach(function(e){if(e!=="default"&&!Object.prototype.hasOwnProperty.call(ne,e))Object.defineProperty(ne,e,{enumerable:!0,get:function(){return Nt[e]}})})});var Fe=S((qt)=>{Object.defineProperty(qt,"__esModule",{value:!0});qt.ChecksumStream=void 0;var po=z(),wo=L("stream");class It extends wo.Duplex{expectedChecksum;checksumSourceLocation;checksum;source;base64Encoder;constructor({expectedChecksum:e,checksum:t,source:r,checksumSourceLocation:n,base64Encoder:c}){super();if(typeof r.pipe==="function")this.source=r;else throw Error(`@smithy/util-stream: unsupported source type ${r?.constructor?.name??r} in ChecksumStream.`);this.base64Encoder=c??po.toBase64,this.expectedChecksum=e,this.checksum=t,this.checksumSourceLocation=n,this.source.pipe(this)}_read(e){}_write(e,t,r){try{this.checksum.update(e),this.push(e)}catch(n){return r(n)}return r()}async _final(e){try{let t=await this.checksum.digest(),r=this.base64Encoder(t);if(this.expectedChecksum!==r)return e(Error(`Checksum mismatch: expected "${this.expectedChecksum}" but received "${r}" in response header "${this.checksumSourceLocation}".`))}catch(t){return e(t)}return this.push(null),e()}}qt.ChecksumStream=It});var J=S((Ft)=>{Object.defineProperty(Ft,"__esModule",{value:!0});Ft.isBlob=Ft.isReadableStream=void 0;var bo=(e)=>typeof ReadableStream==="function"&&(e?.constructor?.name===ReadableStream.name||e instanceof ReadableStream);Ft.isReadableStream=bo;var go=(e)=>{return typeof Blob==="function"&&(e?.constructor?.name===Blob.name||e instanceof Blob)};Ft.isBlob=go});var Yt=S((jt)=>{Object.defineProperty(jt,"__esModule",{value:!0});jt.ChecksumStream=void 0;var So=typeof ReadableStream==="function"?ReadableStream:function(){};class Jt extends So{}jt.ChecksumStream=Jt});var Zt=S((Qt)=>{Object.defineProperty(Qt,"__esModule",{value:!0});Qt.createChecksumStream=void 0;var Eo=z(),$o=J(),Mo=Yt(),Oo=({expectedChecksum:e,checksum:t,source:r,checksumSourceLocation:n,base64Encoder:c})=>{if(!(0,$o.isReadableStream)(r))throw Error(`@smithy/util-stream: unsupported source type ${r?.constructor?.name??r} in ChecksumStream.`);let s=c??Eo.toBase64;if(typeof TransformStream!=="function")throw Error("@smithy/util-stream: unable to instantiate ChecksumStream because API unavailable: ReadableStream/TransformStream.");let o=new TransformStream({start(){},async transform(f,a){t.update(f),a.enqueue(f)},async flush(f){let a=await t.digest(),u=s(a);if(e!==u){let h=Error(`Checksum mismatch: expected "${e}" but received "${u}" in response header "${n}".`);f.error(h)}else f.terminate()}});r.pipeThrough(o);let i=o.readable;return Object.setPrototypeOf(i,Mo.ChecksumStream.prototype),i};Qt.createChecksumStream=Oo});var Vt=S((Gt)=>{Object.defineProperty(Gt,"__esModule",{value:!0});Gt.createChecksumStream=Uo;var Ao=J(),Ro=Fe(),Po=Zt();function Uo(e){if(typeof ReadableStream==="function"&&(0,Ao.isReadableStream)(e.source))return(0,Po.createChecksumStream)(e);return new Ro.ChecksumStream(e)}});var We=S((_t)=>{Object.defineProperty(_t,"__esModule",{value:!0});_t.ByteArrayCollector=void 0;class Kt{allocByteArray;byteLength=0;byteArrays=[];constructor(e){this.allocByteArray=e}push(e){this.byteArrays.push(e),this.byteLength+=e.byteLength}flush(){if(this.byteArrays.length===1){let r=this.byteArrays[0];return this.reset(),r}let e=this.allocByteArray(this.byteLength),t=0;for(let r=0;r<this.byteArrays.length;++r){let n=this.byteArrays[r];e.set(n,t),t+=n.byteLength}return this.reset(),e}reset(){this.byteArrays=[],this.byteLength=0}}_t.ByteArrayCollector=Kt});var nr=S((rr)=>{Object.defineProperty(rr,"__esModule",{value:!0});rr.createBufferedReadable=void 0;rr.createBufferedReadableStream=vt;rr.merge=er;rr.flush=ge;rr.sizeOf=X;rr.modeOf=tr;var Co=We();function vt(e,t,r){let n=e.getReader(),c=!1,s=0,o=["",new Co.ByteArrayCollector((a)=>new Uint8Array(a))],i=-1,f=async(a)=>{let{value:u,done:h}=await n.read(),d=u;if(h){if(i!==-1){let m=ge(o,i);if(X(m)>0)a.enqueue(m)}a.close()}else{let m=tr(d,!1);if(i!==m){if(i>=0)a.enqueue(ge(o,i));i=m}if(i===-1){a.enqueue(d);return}let l=X(d);s+=l;let p=X(o[i]);if(l>=t&&p===0)a.enqueue(d);else{let y=er(o,i,d);if(!c&&s>t*2)c=!0,r?.warn(`@smithy/util-stream - stream chunk size ${l} is below threshold of ${t}, automatically buffering.`);if(y>=t)a.enqueue(ge(o,i));else await f(a)}}};return new ReadableStream({pull:f})}rr.createBufferedReadable=vt;function er(e,t,r){switch(t){case 0:return e[0]+=r,X(e[0]);case 1:case 2:return e[t].push(r),X(e[t])}}function ge(e,t){switch(t){case 0:let r=e[0];return e[0]="",r;case 1:case 2:return e[t].flush()}throw Error(`@smithy/util-stream - invalid index ${t} given to flush()`)}function X(e){return e?.byteLength??e?.length??0}function tr(e,t=!0){if(t&&typeof Buffer<"u"&&e instanceof Buffer)return 2;if(e instanceof Uint8Array)return 1;if(typeof e==="string")return 0;return-1}});var cr=S((ir)=>{Object.defineProperty(ir,"__esModule",{value:!0});ir.createBufferedReadable=Fo;var qo=L("node:stream"),or=We(),H=nr(),Ho=J();function Fo(e,t,r){if((0,Ho.isReadableStream)(e))return(0,H.createBufferedReadableStream)(e,t,r);let n=new qo.Readable({read(){}}),c=!1,s=0,o=["",new or.ByteArrayCollector((f)=>new Uint8Array(f)),new or.ByteArrayCollector((f)=>Buffer.from(new Uint8Array(f)))],i=-1;return e.on("data",(f)=>{let a=(0,H.modeOf)(f,!0);if(i!==a){if(i>=0)n.push((0,H.flush)(o,i));i=a}if(i===-1){n.push(f);return}let u=(0,H.sizeOf)(f);s+=u;let h=(0,H.sizeOf)(o[i]);if(u>=t&&h===0)n.push(f);else{let d=(0,H.merge)(o,i,f);if(!c&&s>t*2)c=!0,r?.warn(`@smithy/util-stream - stream chunk size ${u} is below threshold of ${t}, automatically buffering.`);if(d>=t)n.push((0,H.flush)(o,i))}}),e.on("end",()=>{if(i!==-1){let f=(0,H.flush)(o,i);if((0,H.sizeOf)(f)>0)n.push(f)}n.push(null)}),n}});var hr=S((fr)=>{Object.defineProperty(fr,"__esModule",{value:!0});fr.getAwsChunkedEncodingStream=void 0;var Jo=L("stream"),jo=(e,t)=>{let{base64Encoder:r,bodyLengthChecker:n,checksumAlgorithmFn:c,checksumLocationName:s,streamHasher:o}=t,i=r!==void 0&&c!==void 0&&s!==void 0&&o!==void 0,f=i?o(c,e):void 0,a=new Jo.Readable({read:()=>{}});return e.on("data",(u)=>{let h=n(u)||0;a.push(`${h.toString(16)}\r
|
|
3
|
-
`),a.push(u),a.push(`\r
|
|
4
|
-
`)}),e.on("end",async()=>{if(a.push(`0\r
|
|
5
|
-
`),i){let u=r(await f);a.push(`${s}:${u}\r
|
|
6
|
-
`),a.push(`\r
|
|
7
|
-
`)}a.push(null)}),a};fr.getAwsChunkedEncodingStream=jo});var dr=S((ur)=>{Object.defineProperty(ur,"__esModule",{value:!0});ur.headStream=zo;async function zo(e,t){let r=0,n=[],c=e.getReader(),s=!1;while(!s){let{done:f,value:a}=await c.read();if(a)n.push(a),r+=a?.byteLength??0;if(r>=t)break;s=f}c.releaseLock();let o=new Uint8Array(Math.min(t,r)),i=0;for(let f of n){if(f.byteLength>o.byteLength-i){o.set(f.subarray(0,o.byteLength-i),i);break}else o.set(f,i);i+=f.length}return o}});var pr=S((mr)=>{Object.defineProperty(mr,"__esModule",{value:!0});mr.headStream=void 0;var Qo=L("stream"),Xo=dr(),Zo=J(),Go=(e,t)=>{if((0,Zo.isReadableStream)(e))return(0,Xo.headStream)(e,t);return new Promise((r,n)=>{let c=new lr;c.limit=t,e.pipe(c),e.on("error",(s)=>{c.end(),n(s)}),c.on("error",n),c.on("finish",function(){let s=new Uint8Array(Buffer.concat(this.buffers));r(s)})})};mr.headStream=Go;class lr extends Qo.Writable{buffers=[];limit=1/0;bytesBuffered=0;_write(e,t,r){if(this.buffers.push(e),this.bytesBuffered+=e.byteLength??0,this.bytesBuffered>=this.limit){let n=this.bytesBuffered-this.limit,c=this.buffers[this.buffers.length-1];this.buffers[this.buffers.length-1]=c.subarray(0,c.byteLength-n),this.emit("finish")}r()}}});var br=S((_o)=>{var wr=(e)=>encodeURIComponent(e).replace(/[!'()*]/g,Vo),Vo=(e)=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`,Ko=(e)=>e.split("/").map(wr).join("/");_o.escapeUri=wr;_o.escapeUriPath=Ko});var je=S((ti)=>{var Je=br();function ei(e){let t=[];for(let r of Object.keys(e).sort()){let n=e[r];if(r=Je.escapeUri(r),Array.isArray(n))for(let c=0,s=n.length;c<s;c++)t.push(`${r}=${Je.escapeUri(n[c])}`);else{let c=r;if(n||typeof n==="string")c+=`=${Je.escapeUri(n)}`;t.push(c)}}return t.join("&")}ti.buildQueryString=ei});var xr=S((mi)=>{var Er=le(),$r=je(),Te=L("http"),Se=L("https"),Mr=L("stream"),ze=L("http2"),si=["ECONNRESET","EPIPE","ETIMEDOUT"],Or=(e)=>{let t={};for(let r of Object.keys(e)){let n=e[r];t[r]=Array.isArray(n)?n.join(","):n}return t},U={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:(e)=>clearTimeout(e)},gr=1000,ni=(e,t,r=0)=>{if(!r)return-1;let n=(c)=>{let s=U.setTimeout(()=>{e.destroy(),t(Object.assign(Error(`@smithy/node-http-handler - the request socket did not establish a connection with the server within the configured timeout of ${r} ms.`),{name:"TimeoutError"}))},r-c),o=(i)=>{if(i?.connecting)i.on("connect",()=>{U.clearTimeout(s)});else U.clearTimeout(s)};if(e.socket)o(e.socket);else e.on("socket",o)};if(r<2000)return n(0),0;return U.setTimeout(n.bind(null,gr),gr)},oi=(e,t,r=0,n,c)=>{if(r)return U.setTimeout(()=>{let s=`@smithy/node-http-handler - [${n?"ERROR":"WARN"}] a request has exceeded the configured ${r} ms requestTimeout.`;if(n){let o=Object.assign(Error(s),{name:"TimeoutError",code:"ETIMEDOUT"});e.destroy(o),t(o)}else s+=" Init client requestHandler with throwOnRequestTimeout=true to turn this into an error.",c?.warn?.(s)},r);return-1},ii=3000,ci=(e,{keepAlive:t,keepAliveMsecs:r},n=ii)=>{if(t!==!0)return-1;let c=()=>{if(e.socket)e.socket.setKeepAlive(t,r||0);else e.on("socket",(s)=>{s.setKeepAlive(t,r||0)})};if(n===0)return c(),0;return U.setTimeout(c,n)},Tr=3000,fi=(e,t,r=0)=>{let n=(c)=>{let s=r-c,o=()=>{e.destroy(),t(Object.assign(Error(`@smithy/node-http-handler - the request socket timed out after ${r} ms of inactivity (configured by client requestHandler).`),{name:"TimeoutError"}))};if(e.socket)e.socket.setTimeout(s,o),e.on("close",()=>e.socket?.removeListener("timeout",o));else e.setTimeout(s,o)};if(0<r&&r<6000)return n(0),0;return U.setTimeout(n.bind(null,r===0?0:Tr),Tr)},Sr=6000;async function Ar(e,t,r=Sr,n=!1){let c=t.headers??{},s=c.Expect||c.expect,o=-1,i=!0;if(!n&&s==="100-continue")i=await Promise.race([new Promise((f)=>{o=Number(U.setTimeout(()=>f(!0),Math.max(Sr,r)))}),new Promise((f)=>{e.on("continue",()=>{U.clearTimeout(o),f(!0)}),e.on("response",()=>{U.clearTimeout(o),f(!1)}),e.on("error",()=>{U.clearTimeout(o),f(!1)})})]);if(i)ai(e,t.body)}function ai(e,t){if(t instanceof Mr.Readable){t.pipe(e);return}if(t){if(Buffer.isBuffer(t)||typeof t==="string"){e.end(t);return}let r=t;if(typeof r==="object"&&r.buffer&&typeof r.byteOffset==="number"&&typeof r.byteLength==="number"){e.end(Buffer.from(r.buffer,r.byteOffset,r.byteLength));return}e.end(Buffer.from(t));return}e.end()}var hi=0;class Ee{config;configProvider;socketWarningTimestamp=0;externalAgent=!1;metadata={handlerProtocol:"http/1.1"};static create(e){if(typeof e?.handle==="function")return e;return new Ee(e)}static checkSocketUsage(e,t,r=console){let{sockets:n,requests:c,maxSockets:s}=e;if(typeof s!=="number"||s===1/0)return t;let o=15000;if(Date.now()-o<t)return t;if(n&&c)for(let i in n){let f=n[i]?.length??0,a=c[i]?.length??0;if(f>=s&&a>=2*s)return r?.warn?.(`@smithy/node-http-handler:WARN - socket usage at capacity=${f} and ${a} additional requests are enqueued.
|
|
8
|
-
See https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/node-configuring-maxsockets.html
|
|
9
|
-
or increase socketAcquisitionWarningTimeout=(millis) in the NodeHttpHandler config.`),Date.now()}return t}constructor(e){this.configProvider=new Promise((t,r)=>{if(typeof e==="function")e().then((n)=>{t(this.resolveDefaultConfig(n))}).catch(r);else t(this.resolveDefaultConfig(e))})}resolveDefaultConfig(e){let{requestTimeout:t,connectionTimeout:r,socketTimeout:n,socketAcquisitionWarningTimeout:c,httpAgent:s,httpsAgent:o,throwOnRequestTimeout:i}=e||{},f=!0,a=50;return{connectionTimeout:r,requestTimeout:t,socketTimeout:n,socketAcquisitionWarningTimeout:c,throwOnRequestTimeout:i,httpAgent:(()=>{if(s instanceof Te.Agent||typeof s?.destroy==="function")return this.externalAgent=!0,s;return new Te.Agent({keepAlive:!0,maxSockets:50,...s})})(),httpsAgent:(()=>{if(o instanceof Se.Agent||typeof o?.destroy==="function")return this.externalAgent=!0,o;return new Se.Agent({keepAlive:!0,maxSockets:50,...o})})(),logger:console}}destroy(){this.config?.httpAgent?.destroy(),this.config?.httpsAgent?.destroy()}async handle(e,{abortSignal:t,requestTimeout:r}={}){if(!this.config)this.config=await this.configProvider;return new Promise((n,c)=>{let s=this.config,o=void 0,i=[],f=async($)=>{await o,i.forEach(U.clearTimeout),n($)},a=async($)=>{await o,i.forEach(U.clearTimeout),c($)};if(t?.aborted){let $=Error("Request aborted");$.name="AbortError",a($);return}let u=e.protocol==="https:",h=e.headers??{},d=(h.Expect??h.expect)==="100-continue",m=u?s.httpsAgent:s.httpAgent;if(d&&!this.externalAgent)m=new(u?Se.Agent:Te.Agent)({keepAlive:!1,maxSockets:1/0});i.push(U.setTimeout(()=>{this.socketWarningTimestamp=Ee.checkSocketUsage(m,this.socketWarningTimestamp,s.logger)},s.socketAcquisitionWarningTimeout??(s.requestTimeout??2000)+(s.connectionTimeout??1000)));let l=$r.buildQueryString(e.query||{}),p=void 0;if(e.username!=null||e.password!=null){let $=e.username??"",M=e.password??"";p=`${$}:${M}`}let y=e.path;if(l)y+=`?${l}`;if(e.fragment)y+=`#${e.fragment}`;let w=e.hostname??"";if(w[0]==="["&&w.endsWith("]"))w=e.hostname.slice(1,-1);else w=e.hostname;let b={headers:e.headers,host:w,method:e.method,path:y,port:e.port,agent:m,auth:p},g=(u?Se.request:Te.request)(b,($)=>{let M=new Er.HttpResponse({statusCode:$.statusCode||-1,reason:$.statusMessage,headers:Or($.headers),body:$});f({response:M})});if(g.on("error",($)=>{if(si.includes($.code))a(Object.assign($,{name:"TimeoutError"}));else a($)}),t){let $=()=>{g.destroy();let M=Error("Request aborted");M.name="AbortError",a(M)};if(typeof t.addEventListener==="function"){let M=t;M.addEventListener("abort",$,{once:!0}),g.once("close",()=>M.removeEventListener("abort",$))}else t.onabort=$}let E=r??s.requestTimeout;i.push(ni(g,a,s.connectionTimeout)),i.push(oi(g,a,E,s.throwOnRequestTimeout,s.logger??console)),i.push(fi(g,a,s.socketTimeout));let A=b.agent;if(typeof A==="object"&&"keepAlive"in A)i.push(ci(g,{keepAlive:A.keepAlive,keepAliveMsecs:A.keepAliveMsecs}));o=Ar(g,e,E,this.externalAgent).catch(($)=>{return i.forEach(U.clearTimeout),c($)})})}updateHttpClientConfig(e,t){this.config=void 0,this.configProvider=this.configProvider.then((r)=>{return{...r,[e]:t}})}httpHandlerConfigs(){return this.config??{}}}class Rr{sessions=[];constructor(e){this.sessions=e??[]}poll(){if(this.sessions.length>0)return this.sessions.shift()}offerLast(e){this.sessions.push(e)}contains(e){return this.sessions.includes(e)}remove(e){this.sessions=this.sessions.filter((t)=>t!==e)}[Symbol.iterator](){return this.sessions[Symbol.iterator]()}destroy(e){for(let t of this.sessions)if(t===e){if(!t.destroyed)t.destroy()}}}class Pr{constructor(e){if(this.config=e,this.config.maxConcurrency&&this.config.maxConcurrency<=0)throw RangeError("maxConcurrency must be greater than zero.")}config;sessionCache=new Map;lease(e,t){let r=this.getUrlString(e),n=this.sessionCache.get(r);if(n){let i=n.poll();if(i&&!this.config.disableConcurrency)return i}let c=ze.connect(r);if(this.config.maxConcurrency)c.settings({maxConcurrentStreams:this.config.maxConcurrency},(i)=>{if(i)throw Error("Fail to set maxConcurrentStreams to "+this.config.maxConcurrency+"when creating new session for "+e.destination.toString())});c.unref();let s=()=>{c.destroy(),this.deleteSession(r,c)};if(c.on("goaway",s),c.on("error",s),c.on("frameError",s),c.on("close",()=>this.deleteSession(r,c)),t.requestTimeout)c.setTimeout(t.requestTimeout,s);let o=this.sessionCache.get(r)||new Rr;return o.offerLast(c),this.sessionCache.set(r,o),c}deleteSession(e,t){let r=this.sessionCache.get(e);if(!r)return;if(!r.contains(t))return;r.remove(t),this.sessionCache.set(e,r)}release(e,t){let r=this.getUrlString(e);this.sessionCache.get(r)?.offerLast(t)}destroy(){for(let[e,t]of this.sessionCache){for(let r of t){if(!r.destroyed)r.destroy();t.remove(r)}this.sessionCache.delete(e)}}setMaxConcurrentStreams(e){if(e&&e<=0)throw RangeError("maxConcurrentStreams must be greater than zero.");this.config.maxConcurrency=e}setDisableConcurrentStreams(e){this.config.disableConcurrency=e}getUrlString(e){return e.destination.toString()}}class Ye{config;configProvider;metadata={handlerProtocol:"h2"};connectionManager=new Pr({});static create(e){if(typeof e?.handle==="function")return e;return new Ye(e)}constructor(e){this.configProvider=new Promise((t,r)=>{if(typeof e==="function")e().then((n)=>{t(n||{})}).catch(r);else t(e||{})})}destroy(){this.connectionManager.destroy()}async handle(e,{abortSignal:t,requestTimeout:r}={}){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:n,disableConcurrentStreams:c}=this.config,s=r??n;return new Promise((o,i)=>{let f=!1,a=void 0,u=async(O)=>{await a,o(O)},h=async(O)=>{await a,i(O)};if(t?.aborted){f=!0;let O=Error("Request aborted");O.name="AbortError",h(O);return}let{hostname:d,method:m,port:l,protocol:p,query:y}=e,w="";if(e.username!=null||e.password!=null){let O=e.username??"",B=e.password??"";w=`${O}:${B}@`}let b=`${p}//${w}${d}${l?`:${l}`:""}`,T={destination:new URL(b)},g=this.connectionManager.lease(T,{requestTimeout:this.config?.sessionTimeout,disableConcurrentStreams:c||!1}),E=(O)=>{if(c)this.destroySession(g);f=!0,h(O)},A=$r.buildQueryString(y||{}),$=e.path;if(A)$+=`?${A}`;if(e.fragment)$+=`#${e.fragment}`;let M=g.request({...e.headers,[ze.constants.HTTP2_HEADER_PATH]:$,[ze.constants.HTTP2_HEADER_METHOD]:m});if(g.ref(),M.on("response",(O)=>{let B=new Er.HttpResponse({statusCode:O[":status"]||-1,headers:Or(O),body:M});if(f=!0,u({response:B}),c)g.close(),this.connectionManager.deleteSession(b,g)}),s)M.setTimeout(s,()=>{M.close();let O=Error(`Stream timed out because of no activity for ${s} ms`);O.name="TimeoutError",E(O)});if(t){let O=()=>{M.close();let B=Error("Request aborted");B.name="AbortError",E(B)};if(typeof t.addEventListener==="function"){let B=t;B.addEventListener("abort",O,{once:!0}),M.once("close",()=>B.removeEventListener("abort",O))}else t.onabort=O}M.on("frameError",(O,B,bn)=>{E(Error(`Frame type id ${O} in stream id ${bn} has failed with code ${B}.`))}),M.on("error",E),M.on("aborted",()=>{E(Error(`HTTP/2 stream is abnormally aborted in mid-communication with result code ${M.rstCode}.`))}),M.on("close",()=>{if(g.unref(),c)g.destroy();if(!f)E(Error("Unexpected error: http2 request did not get a response"))}),a=Ar(M,e,s)})}updateHttpClientConfig(e,t){this.config=void 0,this.configProvider=this.configProvider.then((r)=>{return{...r,[e]:t}})}httpHandlerConfigs(){return this.config??{}}destroySession(e){if(!e.destroyed)e.destroy()}}class Ur extends Mr.Writable{bufferedBytes=[];_write(e,t,r){this.bufferedBytes.push(e),r()}}var ui=(e)=>{if(di(e))return li(e);return new Promise((t,r)=>{let n=new Ur;e.pipe(n),e.on("error",(c)=>{n.end(),r(c)}),n.on("error",r),n.on("finish",function(){let c=new Uint8Array(Buffer.concat(this.bufferedBytes));t(c)})})},di=(e)=>typeof ReadableStream==="function"&&e instanceof ReadableStream;async function li(e){let t=[],r=e.getReader(),n=!1,c=0;while(!n){let{done:i,value:f}=await r.read();if(f)t.push(f),c+=f.length;n=i}let s=new Uint8Array(c),o=0;for(let i of t)s.set(i,o),o+=i.length;return s}mi.DEFAULT_REQUEST_TIMEOUT=hi;mi.NodeHttp2Handler=Ye;mi.NodeHttpHandler=Ee;mi.streamCollector=ui});var Br=S((Ai)=>{var Cr=le(),gi=je(),Ti=z();function Dr(e,t){return new Request(e,t)}function Si(e=0){return new Promise((t,r)=>{if(e)setTimeout(()=>{let n=Error(`Request did not complete within ${e} ms`);n.name="TimeoutError",r(n)},e)})}var $e={supported:void 0};class Qe{config;configProvider;static create(e){if(typeof e?.handle==="function")return e;return new Qe(e)}constructor(e){if(typeof e==="function")this.configProvider=e().then((t)=>t||{});else this.config=e??{},this.configProvider=Promise.resolve(this.config);if($e.supported===void 0)$e.supported=Boolean(typeof Request<"u"&&"keepalive"in Dr("https://[::1]"))}destroy(){}async handle(e,{abortSignal:t,requestTimeout:r}={}){if(!this.config)this.config=await this.configProvider;let n=r??this.config.requestTimeout,c=this.config.keepAlive===!0,s=this.config.credentials;if(t?.aborted){let w=Error("Request aborted");return w.name="AbortError",Promise.reject(w)}let o=e.path,i=gi.buildQueryString(e.query||{});if(i)o+=`?${i}`;if(e.fragment)o+=`#${e.fragment}`;let f="";if(e.username!=null||e.password!=null){let w=e.username??"",b=e.password??"";f=`${w}:${b}@`}let{port:a,method:u}=e,h=`${e.protocol}//${f}${e.hostname}${a?`:${a}`:""}${o}`,d=u==="GET"||u==="HEAD"?void 0:e.body,m={body:d,headers:new Headers(e.headers),method:u,credentials:s};if(this.config?.cache)m.cache=this.config.cache;if(d)m.duplex="half";if(typeof AbortController<"u")m.signal=t;if($e.supported)m.keepalive=c;if(typeof this.config.requestInit==="function")Object.assign(m,this.config.requestInit(e));let l=()=>{},p=Dr(h,m),y=[fetch(p).then((w)=>{let b=w.headers,T={};for(let E of b.entries())T[E[0]]=E[1];if(w.body==null)return w.blob().then((E)=>({response:new Cr.HttpResponse({headers:T,reason:w.statusText,statusCode:w.status,body:E})}));return{response:new Cr.HttpResponse({headers:T,reason:w.statusText,statusCode:w.status,body:w.body})}}),Si(n)];if(t)y.push(new Promise((w,b)=>{let T=()=>{let g=Error("Request aborted");g.name="AbortError",b(g)};if(typeof t.addEventListener==="function"){let g=t;g.addEventListener("abort",T,{once:!0}),l=()=>g.removeEventListener("abort",T)}else t.onabort=T}));return Promise.race(y).finally(l)}updateHttpClientConfig(e,t){this.config=void 0,this.configProvider=this.configProvider.then((r)=>{return r[e]=t,r})}httpHandlerConfigs(){return this.config??{}}}var Ei=async(e)=>{if(typeof Blob==="function"&&e instanceof Blob||e.constructor?.name==="Blob"){if(Blob.prototype.arrayBuffer!==void 0)return new Uint8Array(await e.arrayBuffer());return $i(e)}return Mi(e)};async function $i(e){let t=await Oi(e),r=Ti.fromBase64(t);return new Uint8Array(r)}async function Mi(e){let t=[],r=e.getReader(),n=!1,c=0;while(!n){let{done:i,value:f}=await r.read();if(f)t.push(f),c+=f.length;n=i}let s=new Uint8Array(c),o=0;for(let i of t)s.set(i,o),o+=i.length;return s}function Oi(e){return new Promise((t,r)=>{let n=new FileReader;n.onloadend=()=>{if(n.readyState!==2)return r(Error("Reader aborted too early"));let c=n.result??"",s=c.indexOf(","),o=s>-1?s+1:c.length;t(c.substring(o))},n.onabort=()=>r(Error("Read aborted")),n.onerror=()=>r(n.error),n.readAsDataURL(e)})}Ai.FetchHttpHandler=Qe;Ai.keepAliveSupport=$e;Ai.streamCollector=Ei});var Nr=S((Di)=>{var Lr={},Xe={};for(let e=0;e<256;e++){let t=e.toString(16).toLowerCase();if(t.length===1)t=`0${t}`;Lr[e]=t,Xe[t]=e}function xi(e){if(e.length%2!==0)throw Error("Hex encoded strings must have an even number length");let t=new Uint8Array(e.length/2);for(let r=0;r<e.length;r+=2){let n=e.slice(r,r+2).toLowerCase();if(n in Xe)t[r/2]=Xe[n];else throw Error(`Cannot decode unrecognized sequence ${n} as hexadecimal`)}return t}function Ci(e){let t="";for(let r=0;r<e.byteLength;r++)t+=Lr[e[r]];return t}Di.fromHex=xi;Di.toHex=Ci});var Jr=S((Fr)=>{Object.defineProperty(Fr,"__esModule",{value:!0});Fr.sdkStreamMixin=void 0;var Ni=Br(),Ii=z(),qi=Nr(),Hi=be(),Ir=J(),qr="The stream has already been transformed.",Fi=(e)=>{if(!Hr(e)&&!(0,Ir.isReadableStream)(e)){let c=e?.__proto__?.constructor?.name||e;throw Error(`Unexpected stream implementation, expect Blob or ReadableStream, got ${c}`)}let t=!1,r=async()=>{if(t)throw Error(qr);return t=!0,await(0,Ni.streamCollector)(e)},n=(c)=>{if(typeof c.stream!=="function")throw Error(`Cannot transform payload Blob to web stream. Please make sure the Blob.stream() is polyfilled.
|
|
10
|
-
If you are using React Native, this API is not yet supported, see: https://react-native.canny.io/feature-requests/p/fetch-streaming-body`);return c.stream()};return Object.assign(e,{transformToByteArray:r,transformToString:async(c)=>{let s=await r();if(c==="base64")return(0,Ii.toBase64)(s);else if(c==="hex")return(0,qi.toHex)(s);else if(c===void 0||c==="utf8"||c==="utf-8")return(0,Hi.toUtf8)(s);else if(typeof TextDecoder==="function")return new TextDecoder(c).decode(s);else throw Error("TextDecoder is not available, please make sure polyfill is provided.")},transformToWebStream:()=>{if(t)throw Error(qr);if(t=!0,Hr(e))return n(e);else if((0,Ir.isReadableStream)(e))return e;else throw Error(`Cannot transform payload to web stream, got ${e}`)}})};Fr.sdkStreamMixin=Fi;var Hr=(e)=>typeof Blob==="function"&&e instanceof Blob});var Qr=S((zr)=>{Object.defineProperty(zr,"__esModule",{value:!0});zr.sdkStreamMixin=void 0;var Wi=xr(),Ji=He(),Ze=L("stream"),ji=Jr(),jr="The stream has already been transformed.",zi=(e)=>{if(!(e instanceof Ze.Readable))try{return(0,ji.sdkStreamMixin)(e)}catch(n){let c=e?.__proto__?.constructor?.name||e;throw Error(`Unexpected stream implementation, expect Stream.Readable instance, got ${c}`)}let t=!1,r=async()=>{if(t)throw Error(jr);return t=!0,await(0,Wi.streamCollector)(e)};return Object.assign(e,{transformToByteArray:r,transformToString:async(n)=>{let c=await r();if(n===void 0||Buffer.isEncoding(n))return(0,Ji.fromArrayBuffer)(c.buffer,c.byteOffset,c.byteLength).toString(n);else return new TextDecoder(n).decode(c)},transformToWebStream:()=>{if(t)throw Error(jr);if(e.readableFlowing!==null)throw Error("The stream has been consumed by other callbacks.");if(typeof Ze.Readable.toWeb!=="function")throw Error("Readable.toWeb() is not supported. Please ensure a polyfill is available.");return t=!0,Ze.Readable.toWeb(e)}})};zr.sdkStreamMixin=zi});var Zr=S((Xr)=>{Object.defineProperty(Xr,"__esModule",{value:!0});Xr.splitStream=Yi;async function Yi(e){if(typeof e.stream==="function")e=e.stream();return e.tee()}});var _r=S((Kr)=>{Object.defineProperty(Kr,"__esModule",{value:!0});Kr.splitStream=Zi;var Gr=L("stream"),Xi=Zr(),Vr=J();async function Zi(e){if((0,Vr.isReadableStream)(e)||(0,Vr.isBlob)(e))return(0,Xi.splitStream)(e);let t=new Gr.PassThrough,r=new Gr.PassThrough;return e.pipe(t),e.pipe(r),[t,r]}});var fs=S((R)=>{var kr=z(),vr=be(),es=Fe(),ts=Vt(),rs=cr(),ss=hr(),ns=pr(),os=Qr(),is=_r(),cs=J();class oe extends Uint8Array{static fromString(e,t="utf-8"){if(typeof e==="string"){if(t==="base64")return oe.mutate(kr.fromBase64(e));return oe.mutate(vr.fromUtf8(e))}throw Error(`Unsupported conversion from ${typeof e} to Uint8ArrayBlobAdapter.`)}static mutate(e){return Object.setPrototypeOf(e,oe.prototype),e}transformToString(e="utf-8"){if(e==="base64")return kr.toBase64(this);return vr.toUtf8(this)}}R.Uint8ArrayBlobAdapter=oe;Object.keys(es).forEach(function(e){if(e!=="default"&&!Object.prototype.hasOwnProperty.call(R,e))Object.defineProperty(R,e,{enumerable:!0,get:function(){return es[e]}})});Object.keys(ts).forEach(function(e){if(e!=="default"&&!Object.prototype.hasOwnProperty.call(R,e))Object.defineProperty(R,e,{enumerable:!0,get:function(){return ts[e]}})});Object.keys(rs).forEach(function(e){if(e!=="default"&&!Object.prototype.hasOwnProperty.call(R,e))Object.defineProperty(R,e,{enumerable:!0,get:function(){return rs[e]}})});Object.keys(ss).forEach(function(e){if(e!=="default"&&!Object.prototype.hasOwnProperty.call(R,e))Object.defineProperty(R,e,{enumerable:!0,get:function(){return ss[e]}})});Object.keys(ns).forEach(function(e){if(e!=="default"&&!Object.prototype.hasOwnProperty.call(R,e))Object.defineProperty(R,e,{enumerable:!0,get:function(){return ns[e]}})});Object.keys(os).forEach(function(e){if(e!=="default"&&!Object.prototype.hasOwnProperty.call(R,e))Object.defineProperty(R,e,{enumerable:!0,get:function(){return os[e]}})});Object.keys(is).forEach(function(e){if(e!=="default"&&!Object.prototype.hasOwnProperty.call(R,e))Object.defineProperty(R,e,{enumerable:!0,get:function(){return is[e]}})});Object.keys(cs).forEach(function(e){if(e!=="default"&&!Object.prototype.hasOwnProperty.call(R,e))Object.defineProperty(R,e,{enumerable:!0,get:function(){return cs[e]}})})});var qs=S((wh,Ae)=>{var as,hs,us,ds,ls,ms,ys,ps,ws,bs,gs,Ts,Ss,Me,Ge,Es,$s,Ms,Z,Os,As,Rs,Ps,Us,xs,Cs,Ds,Bs,Oe,Ls,Ns,Is;(function(e){var t=typeof global==="object"?global:typeof self==="object"?self:typeof this==="object"?this:{};if(typeof define==="function"&&define.amd)define("tslib",["exports"],function(n){e(r(t,r(n)))});else if(typeof Ae==="object"&&typeof wh==="object")e(r(t,r(wh)));else e(r(t));function r(n,c){if(n!==t)if(typeof Object.create==="function")Object.defineProperty(n,"__esModule",{value:!0});else n.__esModule=!0;return function(s,o){return n[s]=c?c(s,o):o}}})(function(e){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(s,o){s.__proto__=o}||function(s,o){for(var i in o)if(Object.prototype.hasOwnProperty.call(o,i))s[i]=o[i]};as=function(s,o){if(typeof o!=="function"&&o!==null)throw TypeError("Class extends value "+String(o)+" is not a constructor or null");t(s,o);function i(){this.constructor=s}s.prototype=o===null?Object.create(o):(i.prototype=o.prototype,new i)},hs=Object.assign||function(s){for(var o,i=1,f=arguments.length;i<f;i++){o=arguments[i];for(var a in o)if(Object.prototype.hasOwnProperty.call(o,a))s[a]=o[a]}return s},us=function(s,o){var i={};for(var f in s)if(Object.prototype.hasOwnProperty.call(s,f)&&o.indexOf(f)<0)i[f]=s[f];if(s!=null&&typeof Object.getOwnPropertySymbols==="function"){for(var a=0,f=Object.getOwnPropertySymbols(s);a<f.length;a++)if(o.indexOf(f[a])<0&&Object.prototype.propertyIsEnumerable.call(s,f[a]))i[f[a]]=s[f[a]]}return i},ds=function(s,o,i,f){var a=arguments.length,u=a<3?o:f===null?f=Object.getOwnPropertyDescriptor(o,i):f,h;if(typeof Reflect==="object"&&typeof Reflect.decorate==="function")u=Reflect.decorate(s,o,i,f);else for(var d=s.length-1;d>=0;d--)if(h=s[d])u=(a<3?h(u):a>3?h(o,i,u):h(o,i))||u;return a>3&&u&&Object.defineProperty(o,i,u),u},ls=function(s,o){return function(i,f){o(i,f,s)}},ms=function(s,o,i,f,a,u){function h(A){if(A!==void 0&&typeof A!=="function")throw TypeError("Function expected");return A}var d=f.kind,m=d==="getter"?"get":d==="setter"?"set":"value",l=!o&&s?f.static?s:s.prototype:null,p=o||(l?Object.getOwnPropertyDescriptor(l,f.name):{}),y,w=!1;for(var b=i.length-1;b>=0;b--){var T={};for(var g in f)T[g]=g==="access"?{}:f[g];for(var g in f.access)T.access[g]=f.access[g];T.addInitializer=function(A){if(w)throw TypeError("Cannot add initializers after decoration has completed");u.push(h(A||null))};var E=(0,i[b])(d==="accessor"?{get:p.get,set:p.set}:p[m],T);if(d==="accessor"){if(E===void 0)continue;if(E===null||typeof E!=="object")throw TypeError("Object expected");if(y=h(E.get))p.get=y;if(y=h(E.set))p.set=y;if(y=h(E.init))a.unshift(y)}else if(y=h(E))if(d==="field")a.unshift(y);else p[m]=y}if(l)Object.defineProperty(l,f.name,p);w=!0},ys=function(s,o,i){var f=arguments.length>2;for(var a=0;a<o.length;a++)i=f?o[a].call(s,i):o[a].call(s);return f?i:void 0},ps=function(s){return typeof s==="symbol"?s:"".concat(s)},ws=function(s,o,i){if(typeof o==="symbol")o=o.description?"[".concat(o.description,"]"):"";return Object.defineProperty(s,"name",{configurable:!0,value:i?"".concat(i," ",o):o})},bs=function(s,o){if(typeof Reflect==="object"&&typeof Reflect.metadata==="function")return Reflect.metadata(s,o)},gs=function(s,o,i,f){function a(u){return u instanceof i?u:new i(function(h){h(u)})}return new(i||(i=Promise))(function(u,h){function d(p){try{l(f.next(p))}catch(y){h(y)}}function m(p){try{l(f.throw(p))}catch(y){h(y)}}function l(p){p.done?u(p.value):a(p.value).then(d,m)}l((f=f.apply(s,o||[])).next())})},Ts=function(s,o){var i={label:0,sent:function(){if(u[0]&1)throw u[1];return u[1]},trys:[],ops:[]},f,a,u,h=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return h.next=d(0),h.throw=d(1),h.return=d(2),typeof Symbol==="function"&&(h[Symbol.iterator]=function(){return this}),h;function d(l){return function(p){return m([l,p])}}function m(l){if(f)throw TypeError("Generator is already executing.");while(h&&(h=0,l[0]&&(i=0)),i)try{if(f=1,a&&(u=l[0]&2?a.return:l[0]?a.throw||((u=a.return)&&u.call(a),0):a.next)&&!(u=u.call(a,l[1])).done)return u;if(a=0,u)l=[l[0]&2,u.value];switch(l[0]){case 0:case 1:u=l;break;case 4:return i.label++,{value:l[1],done:!1};case 5:i.label++,a=l[1],l=[0];continue;case 7:l=i.ops.pop(),i.trys.pop();continue;default:if((u=i.trys,!(u=u.length>0&&u[u.length-1]))&&(l[0]===6||l[0]===2)){i=0;continue}if(l[0]===3&&(!u||l[1]>u[0]&&l[1]<u[3])){i.label=l[1];break}if(l[0]===6&&i.label<u[1]){i.label=u[1],u=l;break}if(u&&i.label<u[2]){i.label=u[2],i.ops.push(l);break}if(u[2])i.ops.pop();i.trys.pop();continue}l=o.call(s,i)}catch(p){l=[6,p],a=0}finally{f=u=0}if(l[0]&5)throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}},Ss=function(s,o){for(var i in s)if(i!=="default"&&!Object.prototype.hasOwnProperty.call(o,i))Oe(o,s,i)},Oe=Object.create?function(s,o,i,f){if(f===void 0)f=i;var a=Object.getOwnPropertyDescriptor(o,i);if(!a||("get"in a?!o.__esModule:a.writable||a.configurable))a={enumerable:!0,get:function(){return o[i]}};Object.defineProperty(s,f,a)}:function(s,o,i,f){if(f===void 0)f=i;s[f]=o[i]},Me=function(s){var o=typeof Symbol==="function"&&Symbol.iterator,i=o&&s[o],f=0;if(i)return i.call(s);if(s&&typeof s.length==="number")return{next:function(){if(s&&f>=s.length)s=void 0;return{value:s&&s[f++],done:!s}}};throw TypeError(o?"Object is not iterable.":"Symbol.iterator is not defined.")},Ge=function(s,o){var i=typeof Symbol==="function"&&s[Symbol.iterator];if(!i)return s;var f=i.call(s),a,u=[],h;try{while((o===void 0||o-- >0)&&!(a=f.next()).done)u.push(a.value)}catch(d){h={error:d}}finally{try{if(a&&!a.done&&(i=f.return))i.call(f)}finally{if(h)throw h.error}}return u},Es=function(){for(var s=[],o=0;o<arguments.length;o++)s=s.concat(Ge(arguments[o]));return s},$s=function(){for(var s=0,o=0,i=arguments.length;o<i;o++)s+=arguments[o].length;for(var f=Array(s),a=0,o=0;o<i;o++)for(var u=arguments[o],h=0,d=u.length;h<d;h++,a++)f[a]=u[h];return f},Ms=function(s,o,i){if(i||arguments.length===2){for(var f=0,a=o.length,u;f<a;f++)if(u||!(f in o)){if(!u)u=Array.prototype.slice.call(o,0,f);u[f]=o[f]}}return s.concat(u||Array.prototype.slice.call(o))},Z=function(s){return this instanceof Z?(this.v=s,this):new Z(s)},Os=function(s,o,i){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var f=i.apply(s,o||[]),a,u=[];return a=Object.create((typeof AsyncIterator==="function"?AsyncIterator:Object).prototype),d("next"),d("throw"),d("return",h),a[Symbol.asyncIterator]=function(){return this},a;function h(b){return function(T){return Promise.resolve(T).then(b,y)}}function d(b,T){if(f[b]){if(a[b]=function(g){return new Promise(function(E,A){u.push([b,g,E,A])>1||m(b,g)})},T)a[b]=T(a[b])}}function m(b,T){try{l(f[b](T))}catch(g){w(u[0][3],g)}}function l(b){b.value instanceof Z?Promise.resolve(b.value.v).then(p,y):w(u[0][2],b)}function p(b){m("next",b)}function y(b){m("throw",b)}function w(b,T){if(b(T),u.shift(),u.length)m(u[0][0],u[0][1])}},As=function(s){var o,i;return o={},f("next"),f("throw",function(a){throw a}),f("return"),o[Symbol.iterator]=function(){return this},o;function f(a,u){o[a]=s[a]?function(h){return(i=!i)?{value:Z(s[a](h)),done:!1}:u?u(h):h}:u}},Rs=function(s){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var o=s[Symbol.asyncIterator],i;return o?o.call(s):(s=typeof Me==="function"?Me(s):s[Symbol.iterator](),i={},f("next"),f("throw"),f("return"),i[Symbol.asyncIterator]=function(){return this},i);function f(u){i[u]=s[u]&&function(h){return new Promise(function(d,m){h=s[u](h),a(d,m,h.done,h.value)})}}function a(u,h,d,m){Promise.resolve(m).then(function(l){u({value:l,done:d})},h)}},Ps=function(s,o){if(Object.defineProperty)Object.defineProperty(s,"raw",{value:o});else s.raw=o;return s};var r=Object.create?function(s,o){Object.defineProperty(s,"default",{enumerable:!0,value:o})}:function(s,o){s.default=o},n=function(s){return n=Object.getOwnPropertyNames||function(o){var i=[];for(var f in o)if(Object.prototype.hasOwnProperty.call(o,f))i[i.length]=f;return i},n(s)};Us=function(s){if(s&&s.__esModule)return s;var o={};if(s!=null){for(var i=n(s),f=0;f<i.length;f++)if(i[f]!=="default")Oe(o,s,i[f])}return r(o,s),o},xs=function(s){return s&&s.__esModule?s:{default:s}},Cs=function(s,o,i,f){if(i==="a"&&!f)throw TypeError("Private accessor was defined without a getter");if(typeof o==="function"?s!==o||!f:!o.has(s))throw TypeError("Cannot read private member from an object whose class did not declare it");return i==="m"?f:i==="a"?f.call(s):f?f.value:o.get(s)},Ds=function(s,o,i,f,a){if(f==="m")throw TypeError("Private method is not writable");if(f==="a"&&!a)throw TypeError("Private accessor was defined without a setter");if(typeof o==="function"?s!==o||!a:!o.has(s))throw TypeError("Cannot write private member to an object whose class did not declare it");return f==="a"?a.call(s,i):a?a.value=i:o.set(s,i),i},Bs=function(s,o){if(o===null||typeof o!=="object"&&typeof o!=="function")throw TypeError("Cannot use 'in' operator on non-object");return typeof s==="function"?o===s:s.has(o)},Ls=function(s,o,i){if(o!==null&&o!==void 0){if(typeof o!=="object"&&typeof o!=="function")throw TypeError("Object expected.");var f,a;if(i){if(!Symbol.asyncDispose)throw TypeError("Symbol.asyncDispose is not defined.");f=o[Symbol.asyncDispose]}if(f===void 0){if(!Symbol.dispose)throw TypeError("Symbol.dispose is not defined.");if(f=o[Symbol.dispose],i)a=f}if(typeof f!=="function")throw TypeError("Object not disposable.");if(a)f=function(){try{a.call(this)}catch(u){return Promise.reject(u)}};s.stack.push({value:o,dispose:f,async:i})}else if(i)s.stack.push({async:!0});return o};var c=typeof SuppressedError==="function"?SuppressedError:function(s,o,i){var f=Error(i);return f.name="SuppressedError",f.error=s,f.suppressed=o,f};Ns=function(s){function o(u){s.error=s.hasError?new c(u,s.error,"An error was suppressed during disposal."):u,s.hasError=!0}var i,f=0;function a(){while(i=s.stack.pop())try{if(!i.async&&f===1)return f=0,s.stack.push(i),Promise.resolve().then(a);if(i.dispose){var u=i.dispose.call(i.value);if(i.async)return f|=2,Promise.resolve(u).then(a,function(h){return o(h),a()})}else f|=1}catch(h){o(h)}if(f===1)return s.hasError?Promise.reject(s.error):Promise.resolve();if(s.hasError)throw s.error}return a()},Is=function(s,o){if(typeof s==="string"&&/^\.\.?\//.test(s))return s.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i,function(i,f,a,u,h){return f?o?".jsx":".js":a&&(!u||!h)?i:a+u+"."+h.toLowerCase()+"js"});return s},e("__extends",as),e("__assign",hs),e("__rest",us),e("__decorate",ds),e("__param",ls),e("__esDecorate",ms),e("__runInitializers",ys),e("__propKey",ps),e("__setFunctionName",ws),e("__metadata",bs),e("__awaiter",gs),e("__generator",Ts),e("__exportStar",Ss),e("__createBinding",Oe),e("__values",Me),e("__read",Ge),e("__spread",Es),e("__spreadArrays",$s),e("__spreadArray",Ms),e("__await",Z),e("__asyncGenerator",Os),e("__asyncDelegator",As),e("__asyncValues",Rs),e("__makeTemplateObject",Ps),e("__importStar",Us),e("__importDefault",xs),e("__classPrivateFieldGet",Cs),e("__classPrivateFieldSet",Ds),e("__classPrivateFieldIn",Bs),e("__addDisposableResource",Ls),e("__disposeResources",Ns),e("__rewriteRelativeImportExtension",Is)})});var Js=S((Fs)=>{Object.defineProperty(Fs,"__esModule",{value:!0});Fs.randomUUID=void 0;var Ki=qs(),Hs=Ki.__importDefault(L("crypto"));Fs.randomUUID=Hs.default.randomUUID.bind(Hs.default)});var zs=S((ki)=>{var js=Js(),P=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0")),_i=()=>{if(js.randomUUID)return js.randomUUID();let e=new Uint8Array(16);return crypto.getRandomValues(e),e[6]=e[6]&15|64,e[8]=e[8]&63|128,P[e[0]]+P[e[1]]+P[e[2]]+P[e[3]]+"-"+P[e[4]]+P[e[5]]+"-"+P[e[6]]+P[e[7]]+"-"+P[e[8]]+P[e[9]]+"-"+P[e[10]]+P[e[11]]+P[e[12]]+P[e[13]]+P[e[14]]+P[e[15]]};ki.v4=_i});var it=S((ks)=>{var ec=zs(),tc=(e,t,r=(n)=>n)=>e,rc=(e)=>{switch(e){case"true":return!0;case"false":return!1;default:throw Error(`Unable to parse boolean value "${e}"`)}},sc=(e)=>{if(e===null||e===void 0)return;if(typeof e==="number"){if(e===0||e===1)ae.warn(Pe(`Expected boolean, got ${typeof e}: ${e}`));if(e===0)return!1;if(e===1)return!0}if(typeof e==="string"){let t=e.toLowerCase();if(t==="false"||t==="true")ae.warn(Pe(`Expected boolean, got ${typeof e}: ${e}`));if(t==="false")return!1;if(t==="true")return!0}if(typeof e==="boolean")return e;throw TypeError(`Expected boolean, got ${typeof e}: ${e}`)},ce=(e)=>{if(e===null||e===void 0)return;if(typeof e==="string"){let t=parseFloat(e);if(!Number.isNaN(t)){if(String(t)!==String(e))ae.warn(Pe(`Expected number but observed string: ${e}`));return t}}if(typeof e==="number")return e;throw TypeError(`Expected number, got ${typeof e}: ${e}`)},nc=Math.ceil(340282346638528860000000000000000000000),Re=(e)=>{let t=ce(e);if(t!==void 0&&!Number.isNaN(t)&&t!==1/0&&t!==-1/0){if(Math.abs(t)>nc)throw TypeError(`Expected 32-bit float, got ${e}`)}return t},fe=(e)=>{if(e===null||e===void 0)return;if(Number.isInteger(e)&&!Number.isNaN(e))return e;throw TypeError(`Expected integer, got ${typeof e}: ${e}`)},oc=fe,Ke=(e)=>ve(e,32),_e=(e)=>ve(e,16),ke=(e)=>ve(e,8),ve=(e,t)=>{let r=fe(e);if(r!==void 0&&ic(r,t)!==r)throw TypeError(`Expected ${t}-bit integer, got ${e}`);return r},ic=(e,t)=>{switch(t){case 32:return Int32Array.of(e)[0];case 16:return Int16Array.of(e)[0];case 8:return Int8Array.of(e)[0]}},cc=(e,t)=>{if(e===null||e===void 0){if(t)throw TypeError(`Expected a non-null value for ${t}`);throw TypeError("Expected a non-null value")}return e},Qs=(e)=>{if(e===null||e===void 0)return;if(typeof e==="object"&&!Array.isArray(e))return e;let t=Array.isArray(e)?"array":typeof e;throw TypeError(`Expected object, got ${t}: ${e}`)},fc=(e)=>{if(e===null||e===void 0)return;if(typeof e==="string")return e;if(["boolean","number","bigint"].includes(typeof e))return ae.warn(Pe(`Expected string, got ${typeof e}: ${e}`)),String(e);throw TypeError(`Expected string, got ${typeof e}: ${e}`)},ac=(e)=>{if(e===null||e===void 0)return;let t=Qs(e),r=Object.entries(t).filter(([,n])=>n!=null).map(([n])=>n);if(r.length===0)throw TypeError("Unions must have exactly one non-null member. None were found.");if(r.length>1)throw TypeError(`Unions must have exactly one non-null member. Keys ${r} were not null.`);return t},et=(e)=>{if(typeof e=="string")return ce(K(e));return ce(e)},hc=et,Xs=(e)=>{if(typeof e=="string")return Re(K(e));return Re(e)},uc=/(-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?)|(-?Infinity)|(NaN)/g,K=(e)=>{let t=e.match(uc);if(t===null||t[0].length!==e.length)throw TypeError("Expected real number, got implicit NaN");return parseFloat(e)},tt=(e)=>{if(typeof e=="string")return Zs(e);return ce(e)},dc=tt,lc=tt,mc=(e)=>{if(typeof e=="string")return Zs(e);return Re(e)},Zs=(e)=>{switch(e){case"NaN":return NaN;case"Infinity":return 1/0;case"-Infinity":return-1/0;default:throw Error(`Unable to parse float value: ${e}`)}},Gs=(e)=>{if(typeof e==="string")return fe(K(e));return fe(e)},yc=Gs,pc=(e)=>{if(typeof e==="string")return Ke(K(e));return Ke(e)},G=(e)=>{if(typeof e==="string")return _e(K(e));return _e(e)},Vs=(e)=>{if(typeof e==="string")return ke(K(e));return ke(e)},Pe=(e)=>{return String(TypeError(e).stack||e).split(`
|
|
11
|
-
`).slice(0,5).filter((t)=>!t.includes("stackTraceWarning")).join(`
|
|
12
|
-
`)},ae={warn:console.warn},wc=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],rt=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function bc(e){let t=e.getUTCFullYear(),r=e.getUTCMonth(),n=e.getUTCDay(),c=e.getUTCDate(),s=e.getUTCHours(),o=e.getUTCMinutes(),i=e.getUTCSeconds(),f=c<10?`0${c}`:`${c}`,a=s<10?`0${s}`:`${s}`,u=o<10?`0${o}`:`${o}`,h=i<10?`0${i}`:`${i}`;return`${wc[n]}, ${f} ${rt[r]} ${t} ${a}:${u}:${h} GMT`}var gc=new RegExp(/^(\d{4})-(\d{2})-(\d{2})[tT](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?[zZ]$/),Tc=(e)=>{if(e===null||e===void 0)return;if(typeof e!=="string")throw TypeError("RFC-3339 date-times must be expressed as strings");let t=gc.exec(e);if(!t)throw TypeError("Invalid RFC-3339 date-time value");let[r,n,c,s,o,i,f,a]=t,u=G(V(n)),h=N(c,"month",1,12),d=N(s,"day",1,31);return ie(u,h,d,{hours:o,minutes:i,seconds:f,fractionalMilliseconds:a})},Sc=new RegExp(/^(\d{4})-(\d{2})-(\d{2})[tT](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?(([-+]\d{2}\:\d{2})|[zZ])$/),Ec=(e)=>{if(e===null||e===void 0)return;if(typeof e!=="string")throw TypeError("RFC-3339 date-times must be expressed as strings");let t=Sc.exec(e);if(!t)throw TypeError("Invalid RFC-3339 date-time value");let[r,n,c,s,o,i,f,a,u]=t,h=G(V(n)),d=N(c,"month",1,12),m=N(s,"day",1,31),l=ie(h,d,m,{hours:o,minutes:i,seconds:f,fractionalMilliseconds:a});if(u.toUpperCase()!="Z")l.setTime(l.getTime()-Nc(u));return l},$c=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$/),Mc=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$/),Oc=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})$/),Ac=(e)=>{if(e===null||e===void 0)return;if(typeof e!=="string")throw TypeError("RFC-7231 date-times must be expressed as strings");let t=$c.exec(e);if(t){let[r,n,c,s,o,i,f,a]=t;return ie(G(V(s)),Ve(c),N(n,"day",1,31),{hours:o,minutes:i,seconds:f,fractionalMilliseconds:a})}if(t=Mc.exec(e),t){let[r,n,c,s,o,i,f,a]=t;return xc(ie(Pc(s),Ve(c),N(n,"day",1,31),{hours:o,minutes:i,seconds:f,fractionalMilliseconds:a}))}if(t=Oc.exec(e),t){let[r,n,c,s,o,i,f,a]=t;return ie(G(V(a)),Ve(n),N(c.trimLeft(),"day",1,31),{hours:s,minutes:o,seconds:i,fractionalMilliseconds:f})}throw TypeError("Invalid RFC-7231 date-time value")},Rc=(e)=>{if(e===null||e===void 0)return;let t;if(typeof e==="number")t=e;else if(typeof e==="string")t=et(e);else if(typeof e==="object"&&e.tag===1)t=e.value;else throw TypeError("Epoch timestamps must be expressed as floating point numbers or their string representation");if(Number.isNaN(t)||t===1/0||t===-1/0)throw TypeError("Epoch timestamps must be valid, non-Infinite, non-NaN numerics");return new Date(Math.round(t*1000))},ie=(e,t,r,n)=>{let c=t-1;return Dc(e,c,r),new Date(Date.UTC(e,c,r,N(n.hours,"hour",0,23),N(n.minutes,"minute",0,59),N(n.seconds,"seconds",0,60),Lc(n.fractionalMilliseconds)))},Pc=(e)=>{let t=new Date().getUTCFullYear(),r=Math.floor(t/100)*100+G(V(e));if(r<t)return r+100;return r},Uc=1576800000000,xc=(e)=>{if(e.getTime()-new Date().getTime()>Uc)return new Date(Date.UTC(e.getUTCFullYear()-100,e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds()));return e},Ve=(e)=>{let t=rt.indexOf(e);if(t<0)throw TypeError(`Invalid month: ${e}`);return t+1},Cc=[31,28,31,30,31,30,31,31,30,31,30,31],Dc=(e,t,r)=>{let n=Cc[t];if(t===1&&Bc(e))n=29;if(r>n)throw TypeError(`Invalid day for ${rt[t]} in ${e}: ${r}`)},Bc=(e)=>{return e%4===0&&(e%100!==0||e%400===0)},N=(e,t,r,n)=>{let c=Vs(V(e));if(c<r||c>n)throw TypeError(`${t} must be between ${r} and ${n}, inclusive`);return c},Lc=(e)=>{if(e===null||e===void 0)return 0;return Xs("0."+e)*1000},Nc=(e)=>{let t=e[0],r=1;if(t=="+")r=1;else if(t=="-")r=-1;else throw TypeError(`Offset direction, ${t}, must be "+" or "-"`);let n=Number(e.substring(1,3)),c=Number(e.substring(4,6));return r*(n*60+c)*60*1000},V=(e)=>{let t=0;while(t<e.length-1&&e.charAt(t)==="0")t++;if(t===0)return e;return e.slice(t)},Y=function(t){return Object.assign(new String(t),{deserializeJSON(){return JSON.parse(String(t))},toString(){return String(t)},toJSON(){return String(t)}})};Y.from=(e)=>{if(e&&typeof e==="object"&&(e instanceof Y||("deserializeJSON"in e)))return e;else if(typeof e==="string"||Object.getPrototypeOf(e)===String.prototype)return Y(String(e));return Y(JSON.stringify(e))};Y.fromObject=Y.from;function Ic(e){if(e.includes(",")||e.includes('"'))e=`"${e.replace(/"/g,"\\\"")}"`;return e}var st="(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)(?:[ne|u?r]?s?day)?",nt="(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)",ot="(\\d?\\d):(\\d{2}):(\\d{2})(?:\\.(\\d+))?",Ks="(\\d?\\d)",_s="(\\d{4})",qc=new RegExp(/^(\d{4})-(\d\d)-(\d\d)[tT](\d\d):(\d\d):(\d\d)(\.(\d+))?(([-+]\d\d:\d\d)|[zZ])$/),Hc=new RegExp(`^${st}, ${Ks} ${nt} ${_s} ${ot} GMT$`),Fc=new RegExp(`^${st}, ${Ks}-${nt}-(\\d\\d) ${ot} GMT$`),Wc=new RegExp(`^${st} ${nt} ( [1-9]|\\d\\d) ${ot} ${_s}$`),Jc=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],jc=(e)=>{if(e==null)return;let t=NaN;if(typeof e==="number")t=e;else if(typeof e==="string"){if(!/^-?\d*\.?\d+$/.test(e))throw TypeError("parseEpochTimestamp - numeric string invalid.");t=Number.parseFloat(e)}else if(typeof e==="object"&&e.tag===1)t=e.value;if(isNaN(t)||Math.abs(t)===1/0)throw TypeError("Epoch timestamps must be valid finite numbers.");return new Date(Math.round(t*1000))},zc=(e)=>{if(e==null)return;if(typeof e!=="string")throw TypeError("RFC3339 timestamps must be strings");let t=qc.exec(e);if(!t)throw TypeError(`Invalid RFC3339 timestamp format ${e}`);let[,r,n,c,s,o,i,,f,a]=t;F(n,1,12),F(c,1,31),F(s,0,23),F(o,0,59),F(i,0,60);let u=new Date(Date.UTC(Number(r),Number(n)-1,Number(c),Number(s),Number(o),Number(i),Number(f)?Math.round(parseFloat(`0.${f}`)*1000):0));if(u.setUTCFullYear(Number(r)),a.toUpperCase()!="Z"){let[,h,d,m]=/([+-])(\d\d):(\d\d)/.exec(a)||[void 0,"+",0,0],l=h==="-"?1:-1;u.setTime(u.getTime()+l*(Number(d)*60*60*1000+Number(m)*60*1000))}return u},Yc=(e)=>{if(e==null)return;if(typeof e!=="string")throw TypeError("RFC7231 timestamps must be strings.");let t,r,n,c,s,o,i,f;if(f=Hc.exec(e))[,t,r,n,c,s,o,i]=f;else if(f=Fc.exec(e))[,t,r,n,c,s,o,i]=f,n=(Number(n)+1900).toString();else if(f=Wc.exec(e))[,r,t,c,s,o,i,n]=f;if(n&&o){let a=Date.UTC(Number(n),Jc.indexOf(r),Number(t),Number(c),Number(s),Number(o),i?Math.round(parseFloat(`0.${i}`)*1000):0);F(t,1,31),F(c,0,23),F(s,0,59),F(o,0,60);let u=new Date(a);return u.setUTCFullYear(Number(n)),u}throw TypeError(`Invalid RFC7231 date-time value ${e}.`)};function F(e,t,r){let n=Number(e);if(n<t||n>r)throw Error(`Value ${n} out of range [${t}, ${r}]`)}function Qc(e,t,r){if(r<=0||!Number.isInteger(r))throw Error("Invalid number of delimiters ("+r+") for splitEvery.");let n=e.split(t);if(r===1)return n;let c=[],s="";for(let o=0;o<n.length;o++){if(s==="")s=n[o];else s+=t+n[o];if((o+1)%r===0)c.push(s),s=""}if(s!=="")c.push(s);return c}var Xc=(e)=>{let t=e.length,r=[],n=!1,c=void 0,s=0;for(let o=0;o<t;++o){let i=e[o];switch(i){case'"':if(c!=="\\")n=!n;break;case",":if(!n)r.push(e.slice(s,o)),s=o+1;break}c=i}return r.push(e.slice(s)),r.map((o)=>{o=o.trim();let i=o.length;if(i<2)return o;if(o[0]==='"'&&o[i-1]==='"')o=o.slice(1,i-1);return o.replace(/\\"/g,'"')})},Ys=/^-?\d*(\.\d+)?$/;class Ue{string;type;constructor(e,t){if(this.string=e,this.type=t,!Ys.test(e))throw Error('@smithy/core/serde - NumericValue must only contain [0-9], at most one decimal point ".", and an optional negation prefix "-".')}toString(){return this.string}static[Symbol.hasInstance](e){if(!e||typeof e!=="object")return!1;let t=e;return Ue.prototype.isPrototypeOf(e)||t.type==="bigDecimal"&&Ys.test(t.string)}}function Zc(e){return new Ue(String(e),"bigDecimal")}Object.defineProperty(ks,"generateIdempotencyToken",{enumerable:!0,get:function(){return ec.v4}});ks.LazyJsonString=Y;ks.NumericValue=Ue;ks._parseEpochTimestamp=jc;ks._parseRfc3339DateTimeWithOffset=zc;ks._parseRfc7231DateTime=Yc;ks.copyDocumentWithTransform=tc;ks.dateToUtcString=bc;ks.expectBoolean=sc;ks.expectByte=ke;ks.expectFloat32=Re;ks.expectInt=oc;ks.expectInt32=Ke;ks.expectLong=fe;ks.expectNonNull=cc;ks.expectNumber=ce;ks.expectObject=Qs;ks.expectShort=_e;ks.expectString=fc;ks.expectUnion=ac;ks.handleFloat=dc;ks.limitedParseDouble=tt;ks.limitedParseFloat=lc;ks.limitedParseFloat32=mc;ks.logger=ae;ks.nv=Zc;ks.parseBoolean=rc;ks.parseEpochTimestamp=Rc;ks.parseRfc3339DateTime=Tc;ks.parseRfc3339DateTimeWithOffset=Ec;ks.parseRfc7231DateTime=Ac;ks.quoteHeader=Ic;ks.splitEvery=Qc;ks.splitHeader=Xc;ks.strictParseByte=Vs;ks.strictParseDouble=et;ks.strictParseFloat=hc;ks.strictParseFloat32=Xs;ks.strictParseInt=yc;ks.strictParseInt32=pc;ks.strictParseLong=Gs;ks.strictParseShort=G});var nn=S((qf)=>{var xe=fs(),D=Ie(),C=it(),he=le(),Ce=z(),ct=be(),Q=async(e=new Uint8Array,t)=>{if(e instanceof Uint8Array)return xe.Uint8ArrayBlobAdapter.mutate(e);if(!e)return xe.Uint8ArrayBlobAdapter.mutate(new Uint8Array);let r=t.streamCollector(e);return xe.Uint8ArrayBlobAdapter.mutate(await r)};function ue(e){return encodeURIComponent(e).replace(/[!'()*]/g,function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()})}class _{serdeContext;setSerdeContext(e){this.serdeContext=e}}class De extends _{options;constructor(e){super();this.options=e}getRequestType(){return he.HttpRequest}getResponseType(){return he.HttpResponse}setSerdeContext(e){if(this.serdeContext=e,this.serializer.setSerdeContext(e),this.deserializer.setSerdeContext(e),this.getPayloadCodec())this.getPayloadCodec().setSerdeContext(e)}updateServiceEndpoint(e,t){if("url"in t){if(e.protocol=t.url.protocol,e.hostname=t.url.hostname,e.port=t.url.port?Number(t.url.port):void 0,e.path=t.url.pathname,e.fragment=t.url.hash||void 0,e.username=t.url.username||void 0,e.password=t.url.password||void 0,!e.query)e.query={};for(let[r,n]of t.url.searchParams.entries())e.query[r]=n;return e}else return e.protocol=t.protocol,e.hostname=t.hostname,e.port=t.port?Number(t.port):void 0,e.path=t.path,e.query={...t.query},e}setHostPrefix(e,t,r){let n=D.NormalizedSchema.of(t.input),c=D.translateTraits(t.traits??{});if(c.endpoint){let s=c.endpoint?.[0];if(typeof s==="string"){let o=[...n.structIterator()].filter(([,i])=>i.getMergedTraits().hostLabel);for(let[i]of o){let f=r[i];if(typeof f!=="string")throw Error(`@smithy/core/schema - ${i} in input must be a string as hostLabel.`);s=s.replace(`{${i}}`,f)}e.hostname=s+e.hostname}}}deserializeMetadata(e){return{httpStatusCode:e.statusCode,requestId:e.headers["x-amzn-requestid"]??e.headers["x-amzn-request-id"]??e.headers["x-amz-request-id"],extendedRequestId:e.headers["x-amz-id-2"],cfId:e.headers["x-amz-cf-id"]}}async serializeEventStream({eventStream:e,requestSchema:t,initialRequest:r}){return(await this.loadEventStreamCapability()).serializeEventStream({eventStream:e,requestSchema:t,initialRequest:r})}async deserializeEventStream({response:e,responseSchema:t,initialResponseContainer:r}){return(await this.loadEventStreamCapability()).deserializeEventStream({response:e,responseSchema:t,initialResponseContainer:r})}async loadEventStreamCapability(){let{EventStreamSerde:e}=await import("./chunk-jxb3myh9.js");return new e({marshaller:this.getEventStreamMarshaller(),serializer:this.serializer,deserializer:this.deserializer,serdeContext:this.serdeContext,defaultContentType:this.getDefaultContentType()})}getDefaultContentType(){throw Error(`@smithy/core/protocols - ${this.constructor.name} getDefaultContentType() implementation missing.`)}async deserializeHttpMessage(e,t,r,n,c){return[]}getEventStreamMarshaller(){let e=this.serdeContext;if(!e.eventStreamMarshaller)throw Error("@smithy/core - HttpProtocol: eventStreamMarshaller missing in serdeContext.");return e.eventStreamMarshaller}}class vs extends De{async serializeRequest(e,t,r){let n={...t??{}},c=this.serializer,s={},o={},i=await r.endpoint(),f=D.NormalizedSchema.of(e?.input),a=f.getSchema(),u=!1,h,d=new he.HttpRequest({protocol:"",hostname:"",port:void 0,path:"",fragment:void 0,query:s,headers:o,body:void 0});if(i){this.updateServiceEndpoint(d,i),this.setHostPrefix(d,e,n);let m=D.translateTraits(e.traits);if(m.http){d.method=m.http[0];let[l,p]=m.http[1].split("?");if(d.path=="/")d.path=l;else d.path+=l;let y=new URLSearchParams(p??"");Object.assign(s,Object.fromEntries(y))}}for(let[m,l]of f.structIterator()){let p=l.getMergedTraits()??{},y=n[m];if(y==null&&!l.isIdempotencyToken())continue;if(p.httpPayload){if(l.isStreaming())if(l.isStructSchema()){if(n[m])h=await this.serializeEventStream({eventStream:n[m],requestSchema:f})}else h=y;else c.write(l,y),h=c.flush();delete n[m]}else if(p.httpLabel){c.write(l,y);let w=c.flush();if(d.path.includes(`{${m}+}`))d.path=d.path.replace(`{${m}+}`,w.split("/").map(ue).join("/"));else if(d.path.includes(`{${m}}`))d.path=d.path.replace(`{${m}}`,ue(w));delete n[m]}else if(p.httpHeader)c.write(l,y),o[p.httpHeader.toLowerCase()]=String(c.flush()),delete n[m];else if(typeof p.httpPrefixHeaders==="string"){for(let[w,b]of Object.entries(y)){let T=p.httpPrefixHeaders+w;c.write([l.getValueSchema(),{httpHeader:T}],b),o[T.toLowerCase()]=c.flush()}delete n[m]}else if(p.httpQuery||p.httpQueryParams)this.serializeQuery(l,y,s),delete n[m];else u=!0}if(u&&n)c.write(a,n),h=c.flush();return d.headers=o,d.query=s,d.body=h,d}serializeQuery(e,t,r){let n=this.serializer,c=e.getMergedTraits();if(c.httpQueryParams){for(let[s,o]of Object.entries(t))if(!(s in r)){let i=e.getValueSchema();Object.assign(i.getMergedTraits(),{...c,httpQuery:s,httpQueryParams:void 0}),this.serializeQuery(i,o,r)}return}if(e.isListSchema()){let s=!!e.getMergedTraits().sparse,o=[];for(let i of t){n.write([e.getValueSchema(),c],i);let f=n.flush();if(s||f!==void 0)o.push(f)}r[c.httpQuery]=o}else n.write([e,c],t),r[c.httpQuery]=n.flush()}async deserializeResponse(e,t,r){let n=this.deserializer,c=D.NormalizedSchema.of(e.output),s={};if(r.statusCode>=300){let i=await Q(r.body,t);if(i.byteLength>0)Object.assign(s,await n.read(15,i));throw await this.handleError(e,t,r,s,this.deserializeMetadata(r)),Error("@smithy/core/protocols - HTTP Protocol error handler failed to throw.")}for(let i in r.headers){let f=r.headers[i];delete r.headers[i],r.headers[i.toLowerCase()]=f}let o=await this.deserializeHttpMessage(c,t,r,s);if(o.length){let i=await Q(r.body,t);if(i.byteLength>0){let f=await n.read(c,i);for(let a of o)s[a]=f[a]}}else if(o.discardResponseBody)await Q(r.body,t);return s.$metadata=this.deserializeMetadata(r),s}async deserializeHttpMessage(e,t,r,n,c){let s;if(n instanceof Set)s=c;else s=n;let o=!0,i=this.deserializer,f=D.NormalizedSchema.of(e),a=[];for(let[u,h]of f.structIterator()){let d=h.getMemberTraits();if(d.httpPayload){if(o=!1,h.isStreaming())if(h.isStructSchema())s[u]=await this.deserializeEventStream({response:r,responseSchema:f});else s[u]=xe.sdkStreamMixin(r.body);else if(r.body){let l=await Q(r.body,t);if(l.byteLength>0)s[u]=await i.read(h,l)}}else if(d.httpHeader){let m=String(d.httpHeader).toLowerCase(),l=r.headers[m];if(l!=null)if(h.isListSchema()){let p=h.getValueSchema();p.getMergedTraits().httpHeader=m;let y;if(p.isTimestampSchema()&&p.getSchema()===4)y=C.splitEvery(l,",",2);else y=C.splitHeader(l);let w=[];for(let b of y)w.push(await i.read(p,b.trim()));s[u]=w}else s[u]=await i.read(h,l)}else if(d.httpPrefixHeaders!==void 0){s[u]={};for(let[m,l]of Object.entries(r.headers))if(m.startsWith(d.httpPrefixHeaders)){let p=h.getValueSchema();p.getMergedTraits().httpHeader=m,s[u][m.slice(d.httpPrefixHeaders.length)]=await i.read(p,l)}}else if(d.httpResponseCode)s[u]=r.statusCode;else a.push(u)}return a.discardResponseBody=o,a}}class en extends De{async serializeRequest(e,t,r){let n=this.serializer,c={},s={},o=await r.endpoint(),i=D.NormalizedSchema.of(e?.input),f=i.getSchema(),a,u=new he.HttpRequest({protocol:"",hostname:"",port:void 0,path:"/",fragment:void 0,query:c,headers:s,body:void 0});if(o)this.updateServiceEndpoint(u,o),this.setHostPrefix(u,e,t);let h={...t};if(t){let d=i.getEventStreamMember();if(d){if(h[d]){let m={};for(let[l,p]of i.structIterator())if(l!==d&&h[l])n.write(p,h[l]),m[l]=n.flush();a=await this.serializeEventStream({eventStream:h[d],requestSchema:i,initialRequest:m})}}else n.write(f,h),a=n.flush()}return u.headers=s,u.query=c,u.body=a,u.method="POST",u}async deserializeResponse(e,t,r){let n=this.deserializer,c=D.NormalizedSchema.of(e.output),s={};if(r.statusCode>=300){let i=await Q(r.body,t);if(i.byteLength>0)Object.assign(s,await n.read(15,i));throw await this.handleError(e,t,r,s,this.deserializeMetadata(r)),Error("@smithy/core/protocols - RPC Protocol error handler failed to throw.")}for(let i in r.headers){let f=r.headers[i];delete r.headers[i],r.headers[i.toLowerCase()]=f}let o=c.getEventStreamMember();if(o)s[o]=await this.deserializeEventStream({response:r,responseSchema:c,initialResponseContainer:s});else{let i=await Q(r.body,t);if(i.byteLength>0)Object.assign(s,await n.read(c,i))}return s.$metadata=this.deserializeMetadata(r),s}}var tn=(e,t,r,n,c,s)=>{if(t!=null&&t[r]!==void 0){let o=n();if(o.length<=0)throw Error("Empty value provided for input HTTP label: "+r+".");e=e.replace(c,s?o.split("/").map((i)=>ue(i)).join("/"):ue(o))}else throw Error("No value provided for input HTTP label: "+r+".");return e};function If(e,t){return new ft(e,t)}class ft{input;context;query={};method="";headers={};path="";body=null;hostname="";resolvePathStack=[];constructor(e,t){this.input=e,this.context=t}async build(){let{hostname:e,protocol:t="https",port:r,path:n}=await this.context.endpoint();this.path=n;for(let c of this.resolvePathStack)c(this.path);return new he.HttpRequest({protocol:t,hostname:this.hostname||e,port:r,method:this.method,path:this.path,query:this.query,body:this.body,headers:this.headers})}hn(e){return this.hostname=e,this}bp(e){return this.resolvePathStack.push((t)=>{this.path=`${t?.endsWith("/")?t.slice(0,-1):t||""}`+e}),this}p(e,t,r,n){return this.resolvePathStack.push((c)=>{this.path=tn(c,this.input,e,t,r,n)}),this}h(e){return this.headers=e,this}q(e){return this.query=e,this}b(e){return this.body=e,this}m(e){return this.method=e,this}}function at(e,t){if(t.timestampFormat.useTrait){if(e.isTimestampSchema()&&(e.getSchema()===5||e.getSchema()===6||e.getSchema()===7))return e.getSchema()}let{httpLabel:r,httpPrefixHeaders:n,httpHeader:c,httpQuery:s}=e.getMergedTraits();return(t.httpBindings?typeof n==="string"||Boolean(c)?6:Boolean(s)||Boolean(r)?5:void 0:void 0)??t.timestampFormat.default}class ht extends _{settings;constructor(e){super();this.settings=e}read(e,t){let r=D.NormalizedSchema.of(e);if(r.isListSchema())return C.splitHeader(t).map((n)=>this.read(r.getValueSchema(),n));if(r.isBlobSchema())return(this.serdeContext?.base64Decoder??Ce.fromBase64)(t);if(r.isTimestampSchema())switch(at(r,this.settings)){case 5:return C._parseRfc3339DateTimeWithOffset(t);case 6:return C._parseRfc7231DateTime(t);case 7:return C._parseEpochTimestamp(t);default:return console.warn("Missing timestamp format, parsing value with Date constructor:",t),new Date(t)}if(r.isStringSchema()){let n=r.getMergedTraits().mediaType,c=t;if(n){if(r.getMergedTraits().httpHeader)c=this.base64ToUtf8(c);if(n==="application/json"||n.endsWith("+json"))c=C.LazyJsonString.from(c);return c}}if(r.isNumericSchema())return Number(t);if(r.isBigIntegerSchema())return BigInt(t);if(r.isBigDecimalSchema())return new C.NumericValue(t,"bigDecimal");if(r.isBooleanSchema())return String(t).toLowerCase()==="true";return t}base64ToUtf8(e){return(this.serdeContext?.utf8Encoder??ct.toUtf8)((this.serdeContext?.base64Decoder??Ce.fromBase64)(e))}}class rn extends _{codecDeserializer;stringDeserializer;constructor(e,t){super();this.codecDeserializer=e,this.stringDeserializer=new ht(t)}setSerdeContext(e){this.stringDeserializer.setSerdeContext(e),this.codecDeserializer.setSerdeContext(e),this.serdeContext=e}read(e,t){let r=D.NormalizedSchema.of(e),n=r.getMergedTraits(),c=this.serdeContext?.utf8Encoder??ct.toUtf8;if(n.httpHeader||n.httpResponseCode)return this.stringDeserializer.read(r,c(t));if(n.httpPayload){if(r.isBlobSchema()){let s=this.serdeContext?.utf8Decoder??ct.fromUtf8;if(typeof t==="string")return s(t);return t}else if(r.isStringSchema()){if("byteLength"in t)return c(t);return t}}return this.codecDeserializer.read(r,t)}}class ut extends _{settings;stringBuffer="";constructor(e){super();this.settings=e}write(e,t){let r=D.NormalizedSchema.of(e);switch(typeof t){case"object":if(t===null){this.stringBuffer="null";return}if(r.isTimestampSchema()){if(!(t instanceof Date))throw Error(`@smithy/core/protocols - received non-Date value ${t} when schema expected Date in ${r.getName(!0)}`);switch(at(r,this.settings)){case 5:this.stringBuffer=t.toISOString().replace(".000Z","Z");break;case 6:this.stringBuffer=C.dateToUtcString(t);break;case 7:this.stringBuffer=String(t.getTime()/1000);break;default:console.warn("Missing timestamp format, using epoch seconds",t),this.stringBuffer=String(t.getTime()/1000)}return}if(r.isBlobSchema()&&"byteLength"in t){this.stringBuffer=(this.serdeContext?.base64Encoder??Ce.toBase64)(t);return}if(r.isListSchema()&&Array.isArray(t)){let s="";for(let o of t){this.write([r.getValueSchema(),r.getMergedTraits()],o);let i=this.flush(),f=r.getValueSchema().isTimestampSchema()?i:C.quoteHeader(i);if(s!=="")s+=", ";s+=f}this.stringBuffer=s;return}this.stringBuffer=JSON.stringify(t,null,2);break;case"string":let n=r.getMergedTraits().mediaType,c=t;if(n){if(n==="application/json"||n.endsWith("+json"))c=C.LazyJsonString.from(c);if(r.getMergedTraits().httpHeader){this.stringBuffer=(this.serdeContext?.base64Encoder??Ce.toBase64)(c.toString());return}}this.stringBuffer=t;break;default:if(r.isIdempotencyToken())this.stringBuffer=C.generateIdempotencyToken();else this.stringBuffer=String(t)}}flush(){let e=this.stringBuffer;return this.stringBuffer="",e}}class sn{codecSerializer;stringSerializer;buffer;constructor(e,t,r=new ut(t)){this.codecSerializer=e,this.stringSerializer=r}setSerdeContext(e){this.codecSerializer.setSerdeContext(e),this.stringSerializer.setSerdeContext(e)}write(e,t){let r=D.NormalizedSchema.of(e),n=r.getMergedTraits();if(n.httpHeader||n.httpLabel||n.httpQuery){this.stringSerializer.write(r,t),this.buffer=this.stringSerializer.flush();return}return this.codecSerializer.write(r,t)}flush(){if(this.buffer!==void 0){let e=this.buffer;return this.buffer=void 0,e}return this.codecSerializer.flush()}}qf.FromStringShapeDeserializer=ht;qf.HttpBindingProtocol=vs;qf.HttpInterceptingShapeDeserializer=rn;qf.HttpInterceptingShapeSerializer=sn;qf.HttpProtocol=De;qf.RequestBuilder=ft;qf.RpcProtocol=en;qf.SerdeContext=_;qf.ToStringShapeSerializer=ut;qf.collectBody=Q;qf.determineTimestampFormat=at;qf.extendedEncodeURIComponent=ue;qf.requestBuilder=If;qf.resolvedPath=tn});var za=S((v)=>{var fn=Rt(),pt=nn(),lt=gt(),kf=Ie(),on=it();class an{config;middlewareStack=fn.constructStack();initConfig;handlers;constructor(e){this.config=e}send(e,t,r){let n=typeof t!=="function"?t:void 0,c=typeof t==="function"?t:r,s=n===void 0&&this.config.cacheMiddleware===!0,o;if(s){if(!this.handlers)this.handlers=new WeakMap;let i=this.handlers;if(i.has(e.constructor))o=i.get(e.constructor);else o=e.resolveMiddleware(this.middlewareStack,this.config,n),i.set(e.constructor,o)}else delete this.handlers,o=e.resolveMiddleware(this.middlewareStack,this.config,n);if(c)o(e).then((i)=>c(null,i.output),(i)=>c(i)).catch(()=>{});else return o(e).then((i)=>i.output)}destroy(){this.config?.requestHandler?.destroy?.(),delete this.handlers}}var dt="***SensitiveInformation***";function mt(e,t){if(t==null)return t;let r=kf.NormalizedSchema.of(e);if(r.getMergedTraits().sensitive)return dt;if(r.isListSchema()){if(!!r.getValueSchema().getMergedTraits().sensitive)return dt}else if(r.isMapSchema()){if(!!r.getKeySchema().getMergedTraits().sensitive||!!r.getValueSchema().getMergedTraits().sensitive)return dt}else if(r.isStructSchema()&&typeof t==="object"){let n=t,c={};for(let[s,o]of r.structIterator())if(n[s]!=null)c[s]=mt(o,n[s]);return c}return t}class wt{middlewareStack=fn.constructStack();schema;static classBuilder(){return new hn}resolveMiddlewareWithContext(e,t,r,{middlewareFn:n,clientName:c,commandName:s,inputFilterSensitiveLog:o,outputFilterSensitiveLog:i,smithyContext:f,additionalContext:a,CommandCtor:u}){for(let p of n.bind(this)(u,e,t,r))this.middlewareStack.use(p);let h=e.concat(this.middlewareStack),{logger:d}=t,m={logger:d,clientName:c,commandName:s,inputFilterSensitiveLog:o,outputFilterSensitiveLog:i,[lt.SMITHY_CONTEXT_KEY]:{commandInstance:this,...f},...a},{requestHandler:l}=t;return h.resolve((p)=>l.handle(p.request,r||{}),m)}}class hn{_init=()=>{};_ep={};_middlewareFn=()=>[];_commandName="";_clientName="";_additionalContext={};_smithyContext={};_inputFilterSensitiveLog=void 0;_outputFilterSensitiveLog=void 0;_serializer=null;_deserializer=null;_operationSchema;init(e){this._init=e}ep(e){return this._ep=e,this}m(e){return this._middlewareFn=e,this}s(e,t,r={}){return this._smithyContext={service:e,operation:t,...r},this}c(e={}){return this._additionalContext=e,this}n(e,t){return this._clientName=e,this._commandName=t,this}f(e=(r)=>r,t=(r)=>r){return this._inputFilterSensitiveLog=e,this._outputFilterSensitiveLog=t,this}ser(e){return this._serializer=e,this}de(e){return this._deserializer=e,this}sc(e){return this._operationSchema=e,this._smithyContext.operationSchema=e,this}build(){let e=this,t;return t=class extends wt{input;static getEndpointParameterInstructions(){return e._ep}constructor(...[r]){super();this.input=r??{},e._init(this),this.schema=e._operationSchema}resolveMiddleware(r,n,c){let s=e._operationSchema,o=s?.[4]??s?.input,i=s?.[5]??s?.output;return this.resolveMiddlewareWithContext(r,n,c,{CommandCtor:t,middlewareFn:e._middlewareFn,clientName:e._clientName,commandName:e._commandName,inputFilterSensitiveLog:e._inputFilterSensitiveLog??(s?mt.bind(null,o):(f)=>f),outputFilterSensitiveLog:e._outputFilterSensitiveLog??(s?mt.bind(null,i):(f)=>f),smithyContext:e._smithyContext,additionalContext:e._additionalContext})}serialize=e._serializer;deserialize=e._deserializer}}}var vf="***SensitiveInformation***",ea=(e,t)=>{for(let r of Object.keys(e)){let n=e[r],c=async function(o,i,f){let a=new n(o);if(typeof i==="function")this.send(a,i);else if(typeof f==="function"){if(typeof i!=="object")throw Error(`Expected http options but got ${typeof i}`);this.send(a,i||{},f)}else return this.send(a,i)},s=(r[0].toLowerCase()+r.slice(1)).replace(/Command$/,"");t.prototype[s]=c}};class k extends Error{$fault;$response;$retryable;$metadata;constructor(e){super(e.message);Object.setPrototypeOf(this,Object.getPrototypeOf(this).constructor.prototype),this.name=e.name,this.$fault=e.$fault,this.$metadata=e.$metadata}static isInstance(e){if(!e)return!1;let t=e;return k.prototype.isPrototypeOf(t)||Boolean(t.$fault)&&Boolean(t.$metadata)&&(t.$fault==="client"||t.$fault==="server")}static[Symbol.hasInstance](e){if(!e)return!1;let t=e;if(this===k)return k.isInstance(e);if(k.isInstance(e)){if(t.name&&this.name)return this.prototype.isPrototypeOf(e)||t.name===this.name;return this.prototype.isPrototypeOf(e)}return!1}}var un=(e,t={})=>{Object.entries(t).filter(([,n])=>n!==void 0).forEach(([n,c])=>{if(e[n]==null||e[n]==="")e[n]=c});let r=e.message||e.Message||"UnknownError";return e.message=r,delete e.Message,e},dn=({output:e,parsedBody:t,exceptionCtor:r,errorCode:n})=>{let c=ra(e),s=c.httpStatusCode?c.httpStatusCode+"":void 0,o=new r({name:t?.code||t?.Code||n||s||"UnknownError",$fault:"client",$metadata:c});throw un(o,t)},ta=(e)=>{return({output:t,parsedBody:r,errorCode:n})=>{dn({output:t,parsedBody:r,exceptionCtor:e,errorCode:n})}},ra=(e)=>({httpStatusCode:e.statusCode,requestId:e.headers["x-amzn-requestid"]??e.headers["x-amzn-request-id"]??e.headers["x-amz-request-id"],extendedRequestId:e.headers["x-amz-id-2"],cfId:e.headers["x-amz-cf-id"]}),sa=(e)=>{switch(e){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{}}},cn=!1,na=(e)=>{if(e&&!cn&&parseInt(e.substring(1,e.indexOf(".")))<16)cn=!0},oa=(e)=>{let t=[];for(let r in lt.AlgorithmId){let n=lt.AlgorithmId[r];if(e[n]===void 0)continue;t.push({algorithmId:()=>n,checksumConstructor:()=>e[n]})}return{addChecksumAlgorithm(r){t.push(r)},checksumAlgorithms(){return t}}},ia=(e)=>{let t={};return e.checksumAlgorithms().forEach((r)=>{t[r.algorithmId()]=r.checksumConstructor()}),t},ca=(e)=>{return{setRetryStrategy(t){e.retryStrategy=t},retryStrategy(){return e.retryStrategy}}},fa=(e)=>{let t={};return t.retryStrategy=e.retryStrategy(),t},ln=(e)=>{return Object.assign(oa(e),ca(e))},aa=ln,ha=(e)=>{return Object.assign(ia(e),fa(e))},ua=(e)=>Array.isArray(e)?e:[e],mn=(e)=>{for(let r in e)if(e.hasOwnProperty(r)&&e[r]["#text"]!==void 0)e[r]=e[r]["#text"];else if(typeof e[r]==="object"&&e[r]!==null)e[r]=mn(e[r]);return e},da=(e)=>{return e!=null};class yn{trace(){}debug(){}info(){}warn(){}error(){}}function pn(e,t,r){let n,c,s;if(typeof t>"u"&&typeof r>"u")n={},s=e;else if(n=e,typeof t==="function")return c=t,s=r,ya(n,c,s);else s=t;for(let o of Object.keys(s)){if(!Array.isArray(s[o])){n[o]=s[o];continue}wn(n,null,s,o)}return n}var la=(e)=>{let t={};for(let[r,n]of Object.entries(e||{}))t[r]=[,n];return t},ma=(e,t)=>{let r={};for(let n in t)wn(r,e,t,n);return r},ya=(e,t,r)=>{return pn(e,Object.entries(r).reduce((n,[c,s])=>{if(Array.isArray(s))n[c]=s;else if(typeof s==="function")n[c]=[t,s()];else n[c]=[t,s];return n},{}))},wn=(e,t,r,n)=>{if(t!==null){let o=r[n];if(typeof o==="function")o=[,o];let[i=pa,f=wa,a=n]=o;if(typeof i==="function"&&i(t[a])||typeof i!=="function"&&!!i)e[n]=f(t[a]);return}let[c,s]=r[n];if(typeof s==="function"){let o,i=c===void 0&&(o=s())!=null,f=typeof c==="function"&&!!c(void 0)||typeof c!=="function"&&!!c;if(i)e[n]=o;else if(f)e[n]=s()}else{let o=c===void 0&&s!=null,i=typeof c==="function"&&!!c(s)||typeof c!=="function"&&!!c;if(o||i)e[n]=s}},pa=(e)=>e!=null,wa=(e)=>e,ba=(e)=>{if(e!==e)return"NaN";switch(e){case 1/0:return"Infinity";case-1/0:return"-Infinity";default:return e}},ga=(e)=>e.toISOString().replace(".000Z","Z"),yt=(e)=>{if(e==null)return{};if(Array.isArray(e))return e.filter((t)=>t!=null).map(yt);if(typeof e==="object"){let t={};for(let r of Object.keys(e)){if(e[r]==null)continue;t[r]=yt(e[r])}return t}return e};Object.defineProperty(v,"collectBody",{enumerable:!0,get:function(){return pt.collectBody}});Object.defineProperty(v,"extendedEncodeURIComponent",{enumerable:!0,get:function(){return pt.extendedEncodeURIComponent}});Object.defineProperty(v,"resolvedPath",{enumerable:!0,get:function(){return pt.resolvedPath}});v.Client=an;v.Command=wt;v.NoOpLogger=yn;v.SENSITIVE_STRING=vf;v.ServiceException=k;v._json=yt;v.convertMap=la;v.createAggregatedClient=ea;v.decorateServiceException=un;v.emitWarningIfUnsupportedVersion=na;v.getArrayIfSingleItem=ua;v.getDefaultClientConfiguration=aa;v.getDefaultExtensionConfiguration=ln;v.getValueFromTextNode=mn;v.isSerializableHeaderValue=da;v.loadConfigsForDefaultMode=sa;v.map=pn;v.resolveDefaultRuntimeConfig=ha;v.serializeDateTime=ga;v.serializeFloat=ba;v.take=ma;v.throwDefaultError=dn;v.withBaseException=ta;Object.keys(on).forEach(function(e){if(e!=="default"&&!Object.prototype.hasOwnProperty.call(v,e))Object.defineProperty(v,e,{enumerable:!0,get:function(){return on[e]}})})});
|
|
13
|
-
export{Tt as z,z as A,br as B,xr as C,Nr as D,fs as E,Ie as F,qs as G,zs as H,it as I,nn as J,za as K};
|
|
14
|
-
|
|
15
|
-
//# debugId=75B20A675B80B40964756E2164756E21
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC1taWRkbGV3YXJlL2Rpc3QtY2pzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac21pdGh5L2NvcmUvZGlzdC1janMvc3VibW9kdWxlcy9zY2hlbWEvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzbWl0aHkvbWlkZGxld2FyZS1zdGFjay9kaXN0LWNqcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLWJhc2U2NC9kaXN0LWNqcy9mcm9tQmFzZTY0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtYmFzZTY0L2Rpc3QtY2pzL3RvQmFzZTY0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtYmFzZTY0L2Rpc3QtY2pzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtc3RyZWFtL2Rpc3QtY2pzL2NoZWNrc3VtL0NoZWNrc3VtU3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtc3RyZWFtL2Rpc3QtY2pzL3N0cmVhbS10eXBlLWNoZWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtc3RyZWFtL2Rpc3QtY2pzL2NoZWNrc3VtL0NoZWNrc3VtU3RyZWFtLmJyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC1zdHJlYW0vZGlzdC1janMvY2hlY2tzdW0vY3JlYXRlQ2hlY2tzdW1TdHJlYW0uYnJvd3Nlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLXN0cmVhbS9kaXN0LWNqcy9jaGVja3N1bS9jcmVhdGVDaGVja3N1bVN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLXN0cmVhbS9kaXN0LWNqcy9CeXRlQXJyYXlDb2xsZWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC1zdHJlYW0vZGlzdC1janMvY3JlYXRlQnVmZmVyZWRSZWFkYWJsZVN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLXN0cmVhbS9kaXN0LWNqcy9jcmVhdGVCdWZmZXJlZFJlYWRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtc3RyZWFtL2Rpc3QtY2pzL2dldEF3c0NodW5rZWRFbmNvZGluZ1N0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLXN0cmVhbS9kaXN0LWNqcy9oZWFkU3RyZWFtLmJyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC1zdHJlYW0vZGlzdC1janMvaGVhZFN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLXVyaS1lc2NhcGUvZGlzdC1janMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzbWl0aHkvcXVlcnlzdHJpbmctYnVpbGRlci9kaXN0LWNqcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHNtaXRoeS9ub2RlLWh0dHAtaGFuZGxlci9kaXN0LWNqcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHNtaXRoeS9mZXRjaC1odHRwLWhhbmRsZXIvZGlzdC1janMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC1oZXgtZW5jb2RpbmcvZGlzdC1janMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC1zdHJlYW0vZGlzdC1janMvc2RrLXN0cmVhbS1taXhpbi5icm93c2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtc3RyZWFtL2Rpc3QtY2pzL3Nkay1zdHJlYW0tbWl4aW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC1zdHJlYW0vZGlzdC1janMvc3BsaXRTdHJlYW0uYnJvd3Nlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLXN0cmVhbS9kaXN0LWNqcy9zcGxpdFN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLXN0cmVhbS9kaXN0LWNqcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzbWl0aHkvdXVpZC9kaXN0LWNqcy9yYW5kb21VVUlELmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac21pdGh5L3V1aWQvZGlzdC1janMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzbWl0aHkvY29yZS9kaXN0LWNqcy9zdWJtb2R1bGVzL3NlcmRlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac21pdGh5L2NvcmUvZGlzdC1janMvc3VibW9kdWxlcy9wcm90b2NvbHMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzbWl0aHkvc21pdGh5LWNsaWVudC9kaXN0LWNqcy9pbmRleC5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciB0eXBlcyA9IHJlcXVpcmUoJ0BzbWl0aHkvdHlwZXMnKTtcblxuY29uc3QgZ2V0U21pdGh5Q29udGV4dCA9IChjb250ZXh0KSA9PiBjb250ZXh0W3R5cGVzLlNNSVRIWV9DT05URVhUX0tFWV0gfHwgKGNvbnRleHRbdHlwZXMuU01JVEhZX0NPTlRFWFRfS0VZXSA9IHt9KTtcblxuY29uc3Qgbm9ybWFsaXplUHJvdmlkZXIgPSAoaW5wdXQpID0+IHtcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICBjb25zdCBwcm9taXNpZmllZCA9IFByb21pc2UucmVzb2x2ZShpbnB1dCk7XG4gICAgcmV0dXJuICgpID0+IHByb21pc2lmaWVkO1xufTtcblxuZXhwb3J0cy5nZXRTbWl0aHlDb250ZXh0ID0gZ2V0U21pdGh5Q29udGV4dDtcbmV4cG9ydHMubm9ybWFsaXplUHJvdmlkZXIgPSBub3JtYWxpemVQcm92aWRlcjtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcHJvdG9jb2xIdHRwID0gcmVxdWlyZSgnQHNtaXRoeS9wcm90b2NvbC1odHRwJyk7XG52YXIgdXRpbE1pZGRsZXdhcmUgPSByZXF1aXJlKCdAc21pdGh5L3V0aWwtbWlkZGxld2FyZScpO1xuXG5jb25zdCBkZXJlZiA9IChzY2hlbWFSZWYpID0+IHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYVJlZiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBzY2hlbWFSZWYoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNjaGVtYVJlZjtcbn07XG5cbmNvbnN0IG9wZXJhdGlvbiA9IChuYW1lc3BhY2UsIG5hbWUsIHRyYWl0cywgaW5wdXQsIG91dHB1dCkgPT4gKHtcbiAgICBuYW1lLFxuICAgIG5hbWVzcGFjZSxcbiAgICB0cmFpdHMsXG4gICAgaW5wdXQsXG4gICAgb3V0cHV0LFxufSk7XG5cbmNvbnN0IHNjaGVtYURlc2VyaWFsaXphdGlvbk1pZGRsZXdhcmUgPSAoY29uZmlnKSA9PiAobmV4dCwgY29udGV4dCkgPT4gYXN5bmMgKGFyZ3MpID0+IHtcbiAgICBjb25zdCB7IHJlc3BvbnNlIH0gPSBhd2FpdCBuZXh0KGFyZ3MpO1xuICAgIGNvbnN0IHsgb3BlcmF0aW9uU2NoZW1hIH0gPSB1dGlsTWlkZGxld2FyZS5nZXRTbWl0aHlDb250ZXh0KGNvbnRleHQpO1xuICAgIGNvbnN0IFssIG5zLCBuLCB0LCBpLCBvXSA9IG9wZXJhdGlvblNjaGVtYSA/PyBbXTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBhd2FpdCBjb25maWcucHJvdG9jb2wuZGVzZXJpYWxpemVSZXNwb25zZShvcGVyYXRpb24obnMsIG4sIHQsIGksIG8pLCB7XG4gICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICB9LCByZXNwb25zZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgIG91dHB1dDogcGFyc2VkLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVycm9yLCBcIiRyZXNwb25zZVwiLCB7XG4gICAgICAgICAgICB2YWx1ZTogcmVzcG9uc2UsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIShcIiRtZXRhZGF0YVwiIGluIGVycm9yKSkge1xuICAgICAgICAgICAgY29uc3QgaGludCA9IGBEZXNlcmlhbGl6YXRpb24gZXJyb3I6IHRvIHNlZSB0aGUgcmF3IHJlc3BvbnNlLCBpbnNwZWN0IHRoZSBoaWRkZW4gZmllbGQge2Vycm9yfS4kcmVzcG9uc2Ugb24gdGhpcyBvYmplY3QuYDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSArPSBcIlxcbiAgXCIgKyBoaW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQubG9nZ2VyIHx8IGNvbnRleHQubG9nZ2VyPy5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gXCJOb09wTG9nZ2VyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGhpbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5sb2dnZXI/Lndhcm4/LihoaW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVycm9yLiRyZXNwb25zZUJvZHlUZXh0ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yLiRyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvci4kcmVzcG9uc2UuYm9keSA9IGVycm9yLiRyZXNwb25zZUJvZHlUZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3RvY29sSHR0cC5IdHRwUmVzcG9uc2UuaXNJbnN0YW5jZShyZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBoZWFkZXJzID0ge30gfSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJFbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoaGVhZGVycyk7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLiRtZXRhZGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBTdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXNDb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElkOiBmaW5kSGVhZGVyKC9eeC1bXFx3LV0rLXJlcXVlc3QtP2lkJC8sIGhlYWRlckVudHJpZXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kZWRSZXF1ZXN0SWQ6IGZpbmRIZWFkZXIoL154LVtcXHctXSstaWQtMiQvLCBoZWFkZXJFbnRyaWVzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNmSWQ6IGZpbmRIZWFkZXIoL154LVtcXHctXSstY2YtaWQkLywgaGVhZGVyRW50cmllcyksXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG59O1xuY29uc3QgZmluZEhlYWRlciA9IChwYXR0ZXJuLCBoZWFkZXJzKSA9PiB7XG4gICAgcmV0dXJuIChoZWFkZXJzLmZpbmQoKFtrXSkgPT4ge1xuICAgICAgICByZXR1cm4gay5tYXRjaChwYXR0ZXJuKTtcbiAgICB9KSB8fCBbdm9pZCAwLCB2b2lkIDBdKVsxXTtcbn07XG5cbmNvbnN0IHNjaGVtYVNlcmlhbGl6YXRpb25NaWRkbGV3YXJlID0gKGNvbmZpZykgPT4gKG5leHQsIGNvbnRleHQpID0+IGFzeW5jIChhcmdzKSA9PiB7XG4gICAgY29uc3QgeyBvcGVyYXRpb25TY2hlbWEgfSA9IHV0aWxNaWRkbGV3YXJlLmdldFNtaXRoeUNvbnRleHQoY29udGV4dCk7XG4gICAgY29uc3QgWywgbnMsIG4sIHQsIGksIG9dID0gb3BlcmF0aW9uU2NoZW1hID8/IFtdO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gY29udGV4dC5lbmRwb2ludFYyPy51cmwgJiYgY29uZmlnLnVybFBhcnNlclxuICAgICAgICA/IGFzeW5jICgpID0+IGNvbmZpZy51cmxQYXJzZXIoY29udGV4dC5lbmRwb2ludFYyLnVybClcbiAgICAgICAgOiBjb25maWcuZW5kcG9pbnQ7XG4gICAgY29uc3QgcmVxdWVzdCA9IGF3YWl0IGNvbmZpZy5wcm90b2NvbC5zZXJpYWxpemVSZXF1ZXN0KG9wZXJhdGlvbihucywgbiwgdCwgaSwgbyksIGFyZ3MuaW5wdXQsIHtcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICBlbmRwb2ludCxcbiAgICB9KTtcbiAgICByZXR1cm4gbmV4dCh7XG4gICAgICAgIC4uLmFyZ3MsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgfSk7XG59O1xuXG5jb25zdCBkZXNlcmlhbGl6ZXJNaWRkbGV3YXJlT3B0aW9uID0ge1xuICAgIG5hbWU6IFwiZGVzZXJpYWxpemVyTWlkZGxld2FyZVwiLFxuICAgIHN0ZXA6IFwiZGVzZXJpYWxpemVcIixcbiAgICB0YWdzOiBbXCJERVNFUklBTElaRVJcIl0sXG4gICAgb3ZlcnJpZGU6IHRydWUsXG59O1xuY29uc3Qgc2VyaWFsaXplck1pZGRsZXdhcmVPcHRpb24gPSB7XG4gICAgbmFtZTogXCJzZXJpYWxpemVyTWlkZGxld2FyZVwiLFxuICAgIHN0ZXA6IFwic2VyaWFsaXplXCIsXG4gICAgdGFnczogW1wiU0VSSUFMSVpFUlwiXSxcbiAgICBvdmVycmlkZTogdHJ1ZSxcbn07XG5mdW5jdGlvbiBnZXRTY2hlbWFTZXJkZVBsdWdpbihjb25maWcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBhcHBseVRvU3RhY2s6IChjb21tYW5kU3RhY2spID0+IHtcbiAgICAgICAgICAgIGNvbW1hbmRTdGFjay5hZGQoc2NoZW1hU2VyaWFsaXphdGlvbk1pZGRsZXdhcmUoY29uZmlnKSwgc2VyaWFsaXplck1pZGRsZXdhcmVPcHRpb24pO1xuICAgICAgICAgICAgY29tbWFuZFN0YWNrLmFkZChzY2hlbWFEZXNlcmlhbGl6YXRpb25NaWRkbGV3YXJlKGNvbmZpZyksIGRlc2VyaWFsaXplck1pZGRsZXdhcmVPcHRpb24pO1xuICAgICAgICAgICAgY29uZmlnLnByb3RvY29sLnNldFNlcmRlQ29udGV4dChjb25maWcpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5cbmNsYXNzIFNjaGVtYSB7XG4gICAgbmFtZTtcbiAgICBuYW1lc3BhY2U7XG4gICAgdHJhaXRzO1xuICAgIHN0YXRpYyBhc3NpZ24oaW5zdGFuY2UsIHZhbHVlcykge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBPYmplY3QuYXNzaWduKGluc3RhbmNlLCB2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgIH1cbiAgICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0obGhzKSB7XG4gICAgICAgIGNvbnN0IGlzUHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihsaHMpO1xuICAgICAgICBpZiAoIWlzUHJvdG90eXBlICYmIHR5cGVvZiBsaHMgPT09IFwib2JqZWN0XCIgJiYgbGhzICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBsaXN0ID0gbGhzO1xuICAgICAgICAgICAgcmV0dXJuIGxpc3Quc3ltYm9sID09PSB0aGlzLnN5bWJvbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNQcm90b3R5cGU7XG4gICAgfVxuICAgIGdldE5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWVzcGFjZSArIFwiI1wiICsgdGhpcy5uYW1lO1xuICAgIH1cbn1cblxuY2xhc3MgTGlzdFNjaGVtYSBleHRlbmRzIFNjaGVtYSB7XG4gICAgc3RhdGljIHN5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc21pdGh5L2xpc1wiKTtcbiAgICBuYW1lO1xuICAgIHRyYWl0cztcbiAgICB2YWx1ZVNjaGVtYTtcbiAgICBzeW1ib2wgPSBMaXN0U2NoZW1hLnN5bWJvbDtcbn1cbmNvbnN0IGxpc3QgPSAobmFtZXNwYWNlLCBuYW1lLCB0cmFpdHMsIHZhbHVlU2NoZW1hKSA9PiBTY2hlbWEuYXNzaWduKG5ldyBMaXN0U2NoZW1hKCksIHtcbiAgICBuYW1lLFxuICAgIG5hbWVzcGFjZSxcbiAgICB0cmFpdHMsXG4gICAgdmFsdWVTY2hlbWEsXG59KTtcblxuY2xhc3MgTWFwU2NoZW1hIGV4dGVuZHMgU2NoZW1hIHtcbiAgICBzdGF0aWMgc3ltYm9sID0gU3ltYm9sLmZvcihcIkBzbWl0aHkvbWFwXCIpO1xuICAgIG5hbWU7XG4gICAgdHJhaXRzO1xuICAgIGtleVNjaGVtYTtcbiAgICB2YWx1ZVNjaGVtYTtcbiAgICBzeW1ib2wgPSBNYXBTY2hlbWEuc3ltYm9sO1xufVxuY29uc3QgbWFwID0gKG5hbWVzcGFjZSwgbmFtZSwgdHJhaXRzLCBrZXlTY2hlbWEsIHZhbHVlU2NoZW1hKSA9PiBTY2hlbWEuYXNzaWduKG5ldyBNYXBTY2hlbWEoKSwge1xuICAgIG5hbWUsXG4gICAgbmFtZXNwYWNlLFxuICAgIHRyYWl0cyxcbiAgICBrZXlTY2hlbWEsXG4gICAgdmFsdWVTY2hlbWEsXG59KTtcblxuY2xhc3MgT3BlcmF0aW9uU2NoZW1hIGV4dGVuZHMgU2NoZW1hIHtcbiAgICBzdGF0aWMgc3ltYm9sID0gU3ltYm9sLmZvcihcIkBzbWl0aHkvb3BlXCIpO1xuICAgIG5hbWU7XG4gICAgdHJhaXRzO1xuICAgIGlucHV0O1xuICAgIG91dHB1dDtcbiAgICBzeW1ib2wgPSBPcGVyYXRpb25TY2hlbWEuc3ltYm9sO1xufVxuY29uc3Qgb3AgPSAobmFtZXNwYWNlLCBuYW1lLCB0cmFpdHMsIGlucHV0LCBvdXRwdXQpID0+IFNjaGVtYS5hc3NpZ24obmV3IE9wZXJhdGlvblNjaGVtYSgpLCB7XG4gICAgbmFtZSxcbiAgICBuYW1lc3BhY2UsXG4gICAgdHJhaXRzLFxuICAgIGlucHV0LFxuICAgIG91dHB1dCxcbn0pO1xuXG5jbGFzcyBTdHJ1Y3R1cmVTY2hlbWEgZXh0ZW5kcyBTY2hlbWEge1xuICAgIHN0YXRpYyBzeW1ib2wgPSBTeW1ib2wuZm9yKFwiQHNtaXRoeS9zdHJcIik7XG4gICAgbmFtZTtcbiAgICB0cmFpdHM7XG4gICAgbWVtYmVyTmFtZXM7XG4gICAgbWVtYmVyTGlzdDtcbiAgICBzeW1ib2wgPSBTdHJ1Y3R1cmVTY2hlbWEuc3ltYm9sO1xufVxuY29uc3Qgc3RydWN0ID0gKG5hbWVzcGFjZSwgbmFtZSwgdHJhaXRzLCBtZW1iZXJOYW1lcywgbWVtYmVyTGlzdCkgPT4gU2NoZW1hLmFzc2lnbihuZXcgU3RydWN0dXJlU2NoZW1hKCksIHtcbiAgICBuYW1lLFxuICAgIG5hbWVzcGFjZSxcbiAgICB0cmFpdHMsXG4gICAgbWVtYmVyTmFtZXMsXG4gICAgbWVtYmVyTGlzdCxcbn0pO1xuXG5jbGFzcyBFcnJvclNjaGVtYSBleHRlbmRzIFN0cnVjdHVyZVNjaGVtYSB7XG4gICAgc3RhdGljIHN5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc21pdGh5L2VyclwiKTtcbiAgICBjdG9yO1xuICAgIHN5bWJvbCA9IEVycm9yU2NoZW1hLnN5bWJvbDtcbn1cbmNvbnN0IGVycm9yID0gKG5hbWVzcGFjZSwgbmFtZSwgdHJhaXRzLCBtZW1iZXJOYW1lcywgbWVtYmVyTGlzdCwgY3RvcikgPT4gU2NoZW1hLmFzc2lnbihuZXcgRXJyb3JTY2hlbWEoKSwge1xuICAgIG5hbWUsXG4gICAgbmFtZXNwYWNlLFxuICAgIHRyYWl0cyxcbiAgICBtZW1iZXJOYW1lcyxcbiAgICBtZW1iZXJMaXN0LFxuICAgIGN0b3I6IG51bGwsXG59KTtcblxuZnVuY3Rpb24gdHJhbnNsYXRlVHJhaXRzKGluZGljYXRvcikge1xuICAgIGlmICh0eXBlb2YgaW5kaWNhdG9yID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHJldHVybiBpbmRpY2F0b3I7XG4gICAgfVxuICAgIGluZGljYXRvciA9IGluZGljYXRvciB8IDA7XG4gICAgY29uc3QgdHJhaXRzID0ge307XG4gICAgbGV0IGkgPSAwO1xuICAgIGZvciAoY29uc3QgdHJhaXQgb2YgW1xuICAgICAgICBcImh0dHBMYWJlbFwiLFxuICAgICAgICBcImlkZW1wb3RlbnRcIixcbiAgICAgICAgXCJpZGVtcG90ZW5jeVRva2VuXCIsXG4gICAgICAgIFwic2Vuc2l0aXZlXCIsXG4gICAgICAgIFwiaHR0cFBheWxvYWRcIixcbiAgICAgICAgXCJodHRwUmVzcG9uc2VDb2RlXCIsXG4gICAgICAgIFwiaHR0cFF1ZXJ5UGFyYW1zXCIsXG4gICAgXSkge1xuICAgICAgICBpZiAoKChpbmRpY2F0b3IgPj4gaSsrKSAmIDEpID09PSAxKSB7XG4gICAgICAgICAgICB0cmFpdHNbdHJhaXRdID0gMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJhaXRzO1xufVxuXG5jbGFzcyBOb3JtYWxpemVkU2NoZW1hIHtcbiAgICByZWY7XG4gICAgbWVtYmVyTmFtZTtcbiAgICBzdGF0aWMgc3ltYm9sID0gU3ltYm9sLmZvcihcIkBzbWl0aHkvbm9yXCIpO1xuICAgIHN5bWJvbCA9IE5vcm1hbGl6ZWRTY2hlbWEuc3ltYm9sO1xuICAgIG5hbWU7XG4gICAgc2NoZW1hO1xuICAgIF9pc01lbWJlclNjaGVtYTtcbiAgICB0cmFpdHM7XG4gICAgbWVtYmVyVHJhaXRzO1xuICAgIG5vcm1hbGl6ZWRUcmFpdHM7XG4gICAgY29uc3RydWN0b3IocmVmLCBtZW1iZXJOYW1lKSB7XG4gICAgICAgIHRoaXMucmVmID0gcmVmO1xuICAgICAgICB0aGlzLm1lbWJlck5hbWUgPSBtZW1iZXJOYW1lO1xuICAgICAgICBjb25zdCB0cmFpdFN0YWNrID0gW107XG4gICAgICAgIGxldCBfcmVmID0gcmVmO1xuICAgICAgICBsZXQgc2NoZW1hID0gcmVmO1xuICAgICAgICB0aGlzLl9pc01lbWJlclNjaGVtYSA9IGZhbHNlO1xuICAgICAgICB3aGlsZSAoaXNNZW1iZXJTY2hlbWEoX3JlZikpIHtcbiAgICAgICAgICAgIHRyYWl0U3RhY2sucHVzaChfcmVmWzFdKTtcbiAgICAgICAgICAgIF9yZWYgPSBfcmVmWzBdO1xuICAgICAgICAgICAgc2NoZW1hID0gZGVyZWYoX3JlZik7XG4gICAgICAgICAgICB0aGlzLl9pc01lbWJlclNjaGVtYSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyYWl0U3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5tZW1iZXJUcmFpdHMgPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSB0cmFpdFN0YWNrLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJhaXRTZXQgPSB0cmFpdFN0YWNrW2ldO1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5tZW1iZXJUcmFpdHMsIHRyYW5zbGF0ZVRyYWl0cyh0cmFpdFNldCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tZW1iZXJUcmFpdHMgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBOb3JtYWxpemVkU2NoZW1hKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wdXRlZE1lbWJlclRyYWl0cyA9IHRoaXMubWVtYmVyVHJhaXRzO1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBzY2hlbWEpO1xuICAgICAgICAgICAgdGhpcy5tZW1iZXJUcmFpdHMgPSBPYmplY3QuYXNzaWduKHt9LCBjb21wdXRlZE1lbWJlclRyYWl0cywgc2NoZW1hLmdldE1lbWJlclRyYWl0cygpLCB0aGlzLmdldE1lbWJlclRyYWl0cygpKTtcbiAgICAgICAgICAgIHRoaXMubm9ybWFsaXplZFRyYWl0cyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHRoaXMubWVtYmVyTmFtZSA9IG1lbWJlck5hbWUgPz8gc2NoZW1hLm1lbWJlck5hbWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zY2hlbWEgPSBkZXJlZihzY2hlbWEpO1xuICAgICAgICBpZiAoaXNTdGF0aWNTY2hlbWEodGhpcy5zY2hlbWEpKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBgJHt0aGlzLnNjaGVtYVsxXX0jJHt0aGlzLnNjaGVtYVsyXX1gO1xuICAgICAgICAgICAgdGhpcy50cmFpdHMgPSB0aGlzLnNjaGVtYVszXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IHRoaXMubWVtYmVyTmFtZSA/PyBTdHJpbmcoc2NoZW1hKTtcbiAgICAgICAgICAgIHRoaXMudHJhaXRzID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5faXNNZW1iZXJTY2hlbWEgJiYgIW1lbWJlck5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQHNtaXRoeS9jb3JlL3NjaGVtYSAtIE5vcm1hbGl6ZWRTY2hlbWEgbWVtYmVyIGluaXQgJHt0aGlzLmdldE5hbWUodHJ1ZSl9IG1pc3NpbmcgbWVtYmVyIG5hbWUuYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdKGxocykge1xuICAgICAgICBjb25zdCBpc1Byb3RvdHlwZSA9IHRoaXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YobGhzKTtcbiAgICAgICAgaWYgKCFpc1Byb3RvdHlwZSAmJiB0eXBlb2YgbGhzID09PSBcIm9iamVjdFwiICYmIGxocyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgbnMgPSBsaHM7XG4gICAgICAgICAgICByZXR1cm4gbnMuc3ltYm9sID09PSB0aGlzLnN5bWJvbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNQcm90b3R5cGU7XG4gICAgfVxuICAgIHN0YXRpYyBvZihyZWYpIHtcbiAgICAgICAgY29uc3Qgc2MgPSBkZXJlZihyZWYpO1xuICAgICAgICBpZiAoc2MgaW5zdGFuY2VvZiBOb3JtYWxpemVkU2NoZW1hKSB7XG4gICAgICAgICAgICByZXR1cm4gc2M7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTWVtYmVyU2NoZW1hKHNjKSkge1xuICAgICAgICAgICAgY29uc3QgW25zLCB0cmFpdHNdID0gc2M7XG4gICAgICAgICAgICBpZiAobnMgaW5zdGFuY2VvZiBOb3JtYWxpemVkU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihucy5nZXRNZXJnZWRUcmFpdHMoKSwgdHJhbnNsYXRlVHJhaXRzKHRyYWl0cykpO1xuICAgICAgICAgICAgICAgIHJldHVybiBucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQHNtaXRoeS9jb3JlL3NjaGVtYSAtIG1heSBub3QgaW5pdCB1bndyYXBwZWQgbWVtYmVyIHNjaGVtYT0ke0pTT04uc3RyaW5naWZ5KHJlZiwgbnVsbCwgMil9LmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgTm9ybWFsaXplZFNjaGVtYShzYyk7XG4gICAgfVxuICAgIGdldFNjaGVtYSgpIHtcbiAgICAgICAgY29uc3Qgc2MgPSB0aGlzLnNjaGVtYTtcbiAgICAgICAgaWYgKHNjWzBdID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NbNF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjO1xuICAgIH1cbiAgICBnZXROYW1lKHdpdGhOYW1lc3BhY2UgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCB7IG5hbWUgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHNob3J0ID0gIXdpdGhOYW1lc3BhY2UgJiYgbmFtZSAmJiBuYW1lLmluY2x1ZGVzKFwiI1wiKTtcbiAgICAgICAgcmV0dXJuIHNob3J0ID8gbmFtZS5zcGxpdChcIiNcIilbMV0gOiBuYW1lIHx8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0TWVtYmVyTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVtYmVyTmFtZTtcbiAgICB9XG4gICAgaXNNZW1iZXJTY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc01lbWJlclNjaGVtYTtcbiAgICB9XG4gICAgaXNMaXN0U2NoZW1hKCkge1xuICAgICAgICBjb25zdCBzYyA9IHRoaXMuZ2V0U2NoZW1hKCk7XG4gICAgICAgIHJldHVybiB0eXBlb2Ygc2MgPT09IFwibnVtYmVyXCJcbiAgICAgICAgICAgID8gc2MgPj0gNjQgJiYgc2MgPCAxMjhcbiAgICAgICAgICAgIDogc2NbMF0gPT09IDE7XG4gICAgfVxuICAgIGlzTWFwU2NoZW1hKCkge1xuICAgICAgICBjb25zdCBzYyA9IHRoaXMuZ2V0U2NoZW1hKCk7XG4gICAgICAgIHJldHVybiB0eXBlb2Ygc2MgPT09IFwibnVtYmVyXCJcbiAgICAgICAgICAgID8gc2MgPj0gMTI4ICYmIHNjIDw9IDBiMTExMV8xMTExXG4gICAgICAgICAgICA6IHNjWzBdID09PSAyO1xuICAgIH1cbiAgICBpc1N0cnVjdFNjaGVtYSgpIHtcbiAgICAgICAgY29uc3Qgc2MgPSB0aGlzLmdldFNjaGVtYSgpO1xuICAgICAgICByZXR1cm4gKHNjWzBdID09PSAzIHx8XG4gICAgICAgICAgICBzY1swXSA9PT0gLTMpO1xuICAgIH1cbiAgICBpc0Jsb2JTY2hlbWEoKSB7XG4gICAgICAgIGNvbnN0IHNjID0gdGhpcy5nZXRTY2hlbWEoKTtcbiAgICAgICAgcmV0dXJuIHNjID09PSAyMSB8fCBzYyA9PT0gNDI7XG4gICAgfVxuICAgIGlzVGltZXN0YW1wU2NoZW1hKCkge1xuICAgICAgICBjb25zdCBzYyA9IHRoaXMuZ2V0U2NoZW1hKCk7XG4gICAgICAgIHJldHVybiAodHlwZW9mIHNjID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICBzYyA+PSA0ICYmXG4gICAgICAgICAgICBzYyA8PSA3KTtcbiAgICB9XG4gICAgaXNVbml0U2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTY2hlbWEoKSA9PT0gXCJ1bml0XCI7XG4gICAgfVxuICAgIGlzRG9jdW1lbnRTY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNjaGVtYSgpID09PSAxNTtcbiAgICB9XG4gICAgaXNTdHJpbmdTY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNjaGVtYSgpID09PSAwO1xuICAgIH1cbiAgICBpc0Jvb2xlYW5TY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNjaGVtYSgpID09PSAyO1xuICAgIH1cbiAgICBpc051bWVyaWNTY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNjaGVtYSgpID09PSAxO1xuICAgIH1cbiAgICBpc0JpZ0ludGVnZXJTY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNjaGVtYSgpID09PSAxNztcbiAgICB9XG4gICAgaXNCaWdEZWNpbWFsU2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTY2hlbWEoKSA9PT0gMTk7XG4gICAgfVxuICAgIGlzU3RyZWFtaW5nKCkge1xuICAgICAgICBjb25zdCB7IHN0cmVhbWluZyB9ID0gdGhpcy5nZXRNZXJnZWRUcmFpdHMoKTtcbiAgICAgICAgcmV0dXJuICEhc3RyZWFtaW5nIHx8IHRoaXMuZ2V0U2NoZW1hKCkgPT09IDQyO1xuICAgIH1cbiAgICBpc0lkZW1wb3RlbmN5VG9rZW4oKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gKHRyYWl0cykgPT4gKHRyYWl0cyAmIDBiMDEwMCkgPT09IDBiMDEwMCB8fFxuICAgICAgICAgICAgISF0cmFpdHM/LmlkZW1wb3RlbmN5VG9rZW47XG4gICAgICAgIGNvbnN0IHsgbm9ybWFsaXplZFRyYWl0cywgdHJhaXRzLCBtZW1iZXJUcmFpdHMgfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBtYXRjaChub3JtYWxpemVkVHJhaXRzKSB8fCBtYXRjaCh0cmFpdHMpIHx8IG1hdGNoKG1lbWJlclRyYWl0cyk7XG4gICAgfVxuICAgIGdldE1lcmdlZFRyYWl0cygpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLm5vcm1hbGl6ZWRUcmFpdHMgPz9cbiAgICAgICAgICAgICh0aGlzLm5vcm1hbGl6ZWRUcmFpdHMgPSB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5nZXRPd25UcmFpdHMoKSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdldE1lbWJlclRyYWl0cygpLFxuICAgICAgICAgICAgfSkpO1xuICAgIH1cbiAgICBnZXRNZW1iZXJUcmFpdHMoKSB7XG4gICAgICAgIHJldHVybiB0cmFuc2xhdGVUcmFpdHModGhpcy5tZW1iZXJUcmFpdHMpO1xuICAgIH1cbiAgICBnZXRPd25UcmFpdHMoKSB7XG4gICAgICAgIHJldHVybiB0cmFuc2xhdGVUcmFpdHModGhpcy50cmFpdHMpO1xuICAgIH1cbiAgICBnZXRLZXlTY2hlbWEoKSB7XG4gICAgICAgIGNvbnN0IFtpc0RvYywgaXNNYXBdID0gW3RoaXMuaXNEb2N1bWVudFNjaGVtYSgpLCB0aGlzLmlzTWFwU2NoZW1hKCldO1xuICAgICAgICBpZiAoIWlzRG9jICYmICFpc01hcCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBAc21pdGh5L2NvcmUvc2NoZW1hIC0gY2Fubm90IGdldCBrZXkgZm9yIG5vbi1tYXA6ICR7dGhpcy5nZXROYW1lKHRydWUpfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuZ2V0U2NoZW1hKCk7XG4gICAgICAgIGNvbnN0IG1lbWJlclNjaGVtYSA9IGlzRG9jXG4gICAgICAgICAgICA/IDE1XG4gICAgICAgICAgICA6IHNjaGVtYVs0XSA/PyAwO1xuICAgICAgICByZXR1cm4gbWVtYmVyKFttZW1iZXJTY2hlbWEsIDBdLCBcImtleVwiKTtcbiAgICB9XG4gICAgZ2V0VmFsdWVTY2hlbWEoKSB7XG4gICAgICAgIGNvbnN0IHNjID0gdGhpcy5nZXRTY2hlbWEoKTtcbiAgICAgICAgY29uc3QgW2lzRG9jLCBpc01hcCwgaXNMaXN0XSA9IFt0aGlzLmlzRG9jdW1lbnRTY2hlbWEoKSwgdGhpcy5pc01hcFNjaGVtYSgpLCB0aGlzLmlzTGlzdFNjaGVtYSgpXTtcbiAgICAgICAgY29uc3QgbWVtYmVyU2NoZW1hID0gdHlwZW9mIHNjID09PSBcIm51bWJlclwiXG4gICAgICAgICAgICA/IDBiMDAxMV8xMTExICYgc2NcbiAgICAgICAgICAgIDogc2MgJiYgdHlwZW9mIHNjID09PSBcIm9iamVjdFwiICYmIChpc01hcCB8fCBpc0xpc3QpXG4gICAgICAgICAgICAgICAgPyBzY1szICsgc2NbMF1dXG4gICAgICAgICAgICAgICAgOiBpc0RvY1xuICAgICAgICAgICAgICAgICAgICA/IDE1XG4gICAgICAgICAgICAgICAgICAgIDogdm9pZCAwO1xuICAgICAgICBpZiAobWVtYmVyU2NoZW1hICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBtZW1iZXIoW21lbWJlclNjaGVtYSwgMF0sIGlzTWFwID8gXCJ2YWx1ZVwiIDogXCJtZW1iZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBAc21pdGh5L2NvcmUvc2NoZW1hIC0gJHt0aGlzLmdldE5hbWUodHJ1ZSl9IGhhcyBubyB2YWx1ZSBtZW1iZXIuYCk7XG4gICAgfVxuICAgIGdldE1lbWJlclNjaGVtYShtZW1iZXJOYW1lKSB7XG4gICAgICAgIGNvbnN0IHN0cnVjdCA9IHRoaXMuZ2V0U2NoZW1hKCk7XG4gICAgICAgIGlmICh0aGlzLmlzU3RydWN0U2NoZW1hKCkgJiYgc3RydWN0WzRdLmluY2x1ZGVzKG1lbWJlck5hbWUpKSB7XG4gICAgICAgICAgICBjb25zdCBpID0gc3RydWN0WzRdLmluZGV4T2YobWVtYmVyTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBtZW1iZXJTY2hlbWEgPSBzdHJ1Y3RbNV1baV07XG4gICAgICAgICAgICByZXR1cm4gbWVtYmVyKGlzTWVtYmVyU2NoZW1hKG1lbWJlclNjaGVtYSkgPyBtZW1iZXJTY2hlbWEgOiBbbWVtYmVyU2NoZW1hLCAwXSwgbWVtYmVyTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNEb2N1bWVudFNjaGVtYSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVtYmVyKFsxNSwgMF0sIG1lbWJlck5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQHNtaXRoeS9jb3JlL3NjaGVtYSAtICR7dGhpcy5nZXROYW1lKHRydWUpfSBoYXMgbm8gbm8gbWVtYmVyPSR7bWVtYmVyTmFtZX0uYCk7XG4gICAgfVxuICAgIGdldE1lbWJlclNjaGVtYXMoKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IHt9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgdGhpcy5zdHJ1Y3RJdGVyYXRvcigpKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVyW2tdID0gdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoaWdub3JlZCkgeyB9XG4gICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgfVxuICAgIGdldEV2ZW50U3RyZWFtTWVtYmVyKCkge1xuICAgICAgICBpZiAodGhpcy5pc1N0cnVjdFNjaGVtYSgpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFttZW1iZXJOYW1lLCBtZW1iZXJTY2hlbWFdIG9mIHRoaXMuc3RydWN0SXRlcmF0b3IoKSkge1xuICAgICAgICAgICAgICAgIGlmIChtZW1iZXJTY2hlbWEuaXNTdHJlYW1pbmcoKSAmJiBtZW1iZXJTY2hlbWEuaXNTdHJ1Y3RTY2hlbWEoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVtYmVyTmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgICpzdHJ1Y3RJdGVyYXRvcigpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNVbml0U2NoZW1hKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXNTdHJ1Y3RTY2hlbWEoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQHNtaXRoeS9jb3JlL3NjaGVtYSAtIGNhbm5vdCBpdGVyYXRlIG5vbi1zdHJ1Y3Qgc2NoZW1hLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdHJ1Y3QgPSB0aGlzLmdldFNjaGVtYSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cnVjdFs0XS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgeWllbGQgW3N0cnVjdFs0XVtpXSwgbWVtYmVyKFtzdHJ1Y3RbNV1baV0sIDBdLCBzdHJ1Y3RbNF1baV0pXTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIG1lbWJlcihtZW1iZXJTY2hlbWEsIG1lbWJlck5hbWUpIHtcbiAgICBpZiAobWVtYmVyU2NoZW1hIGluc3RhbmNlb2YgTm9ybWFsaXplZFNjaGVtYSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihtZW1iZXJTY2hlbWEsIHtcbiAgICAgICAgICAgIG1lbWJlck5hbWUsXG4gICAgICAgICAgICBfaXNNZW1iZXJTY2hlbWE6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBpbnRlcm5hbEN0b3JBY2Nlc3MgPSBOb3JtYWxpemVkU2NoZW1hO1xuICAgIHJldHVybiBuZXcgaW50ZXJuYWxDdG9yQWNjZXNzKG1lbWJlclNjaGVtYSwgbWVtYmVyTmFtZSk7XG59XG5jb25zdCBpc01lbWJlclNjaGVtYSA9IChzYykgPT4gQXJyYXkuaXNBcnJheShzYykgJiYgc2MubGVuZ3RoID09PSAyO1xuY29uc3QgaXNTdGF0aWNTY2hlbWEgPSAoc2MpID0+IEFycmF5LmlzQXJyYXkoc2MpICYmIHNjLmxlbmd0aCA+PSA1O1xuXG5jbGFzcyBTaW1wbGVTY2hlbWEgZXh0ZW5kcyBTY2hlbWEge1xuICAgIHN0YXRpYyBzeW1ib2wgPSBTeW1ib2wuZm9yKFwiQHNtaXRoeS9zaW1cIik7XG4gICAgbmFtZTtcbiAgICBzY2hlbWFSZWY7XG4gICAgdHJhaXRzO1xuICAgIHN5bWJvbCA9IFNpbXBsZVNjaGVtYS5zeW1ib2w7XG59XG5jb25zdCBzaW0gPSAobmFtZXNwYWNlLCBuYW1lLCBzY2hlbWFSZWYsIHRyYWl0cykgPT4gU2NoZW1hLmFzc2lnbihuZXcgU2ltcGxlU2NoZW1hKCksIHtcbiAgICBuYW1lLFxuICAgIG5hbWVzcGFjZSxcbiAgICB0cmFpdHMsXG4gICAgc2NoZW1hUmVmLFxufSk7XG5jb25zdCBzaW1BZGFwdGVyID0gKG5hbWVzcGFjZSwgbmFtZSwgdHJhaXRzLCBzY2hlbWFSZWYpID0+IFNjaGVtYS5hc3NpZ24obmV3IFNpbXBsZVNjaGVtYSgpLCB7XG4gICAgbmFtZSxcbiAgICBuYW1lc3BhY2UsXG4gICAgdHJhaXRzLFxuICAgIHNjaGVtYVJlZixcbn0pO1xuXG5jb25zdCBTQ0hFTUEgPSB7XG4gICAgQkxPQjogMGIwMDAxXzAxMDEsXG4gICAgU1RSRUFNSU5HX0JMT0I6IDBiMDAxMF8xMDEwLFxuICAgIEJPT0xFQU46IDBiMDAwMF8wMDEwLFxuICAgIFNUUklORzogMGIwMDAwXzAwMDAsXG4gICAgTlVNRVJJQzogMGIwMDAwXzAwMDEsXG4gICAgQklHX0lOVEVHRVI6IDBiMDAwMV8wMDAxLFxuICAgIEJJR19ERUNJTUFMOiAwYjAwMDFfMDAxMSxcbiAgICBET0NVTUVOVDogMGIwMDAwXzExMTEsXG4gICAgVElNRVNUQU1QX0RFRkFVTFQ6IDBiMDAwMF8wMTAwLFxuICAgIFRJTUVTVEFNUF9EQVRFX1RJTUU6IDBiMDAwMF8wMTAxLFxuICAgIFRJTUVTVEFNUF9IVFRQX0RBVEU6IDBiMDAwMF8wMTEwLFxuICAgIFRJTUVTVEFNUF9FUE9DSF9TRUNPTkRTOiAwYjAwMDBfMDExMSxcbiAgICBMSVNUX01PRElGSUVSOiAwYjAxMDBfMDAwMCxcbiAgICBNQVBfTU9ESUZJRVI6IDBiMTAwMF8wMDAwLFxufTtcblxuY2xhc3MgVHlwZVJlZ2lzdHJ5IHtcbiAgICBuYW1lc3BhY2U7XG4gICAgc2NoZW1hcztcbiAgICBleGNlcHRpb25zO1xuICAgIHN0YXRpYyByZWdpc3RyaWVzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0cnVjdG9yKG5hbWVzcGFjZSwgc2NoZW1hcyA9IG5ldyBNYXAoKSwgZXhjZXB0aW9ucyA9IG5ldyBNYXAoKSkge1xuICAgICAgICB0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcbiAgICAgICAgdGhpcy5zY2hlbWFzID0gc2NoZW1hcztcbiAgICAgICAgdGhpcy5leGNlcHRpb25zID0gZXhjZXB0aW9ucztcbiAgICB9XG4gICAgc3RhdGljIGZvcihuYW1lc3BhY2UpIHtcbiAgICAgICAgaWYgKCFUeXBlUmVnaXN0cnkucmVnaXN0cmllcy5oYXMobmFtZXNwYWNlKSkge1xuICAgICAgICAgICAgVHlwZVJlZ2lzdHJ5LnJlZ2lzdHJpZXMuc2V0KG5hbWVzcGFjZSwgbmV3IFR5cGVSZWdpc3RyeShuYW1lc3BhY2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVHlwZVJlZ2lzdHJ5LnJlZ2lzdHJpZXMuZ2V0KG5hbWVzcGFjZSk7XG4gICAgfVxuICAgIHJlZ2lzdGVyKHNoYXBlSWQsIHNjaGVtYSkge1xuICAgICAgICBjb25zdCBxdWFsaWZpZWROYW1lID0gdGhpcy5ub3JtYWxpemVTaGFwZUlkKHNoYXBlSWQpO1xuICAgICAgICBjb25zdCByZWdpc3RyeSA9IFR5cGVSZWdpc3RyeS5mb3IocXVhbGlmaWVkTmFtZS5zcGxpdChcIiNcIilbMF0pO1xuICAgICAgICByZWdpc3RyeS5zY2hlbWFzLnNldChxdWFsaWZpZWROYW1lLCBzY2hlbWEpO1xuICAgIH1cbiAgICBnZXRTY2hlbWEoc2hhcGVJZCkge1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMubm9ybWFsaXplU2hhcGVJZChzaGFwZUlkKTtcbiAgICAgICAgaWYgKCF0aGlzLnNjaGVtYXMuaGFzKGlkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBAc21pdGh5L2NvcmUvc2NoZW1hIC0gc2NoZW1hIG5vdCBmb3VuZCBmb3IgJHtpZH1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zY2hlbWFzLmdldChpZCk7XG4gICAgfVxuICAgIHJlZ2lzdGVyRXJyb3IoZXMsIGN0b3IpIHtcbiAgICAgICAgY29uc3QgJGVycm9yID0gZXM7XG4gICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gVHlwZVJlZ2lzdHJ5LmZvcigkZXJyb3JbMV0pO1xuICAgICAgICByZWdpc3RyeS5zY2hlbWFzLnNldCgkZXJyb3JbMV0gKyBcIiNcIiArICRlcnJvclsyXSwgJGVycm9yKTtcbiAgICAgICAgcmVnaXN0cnkuZXhjZXB0aW9ucy5zZXQoJGVycm9yLCBjdG9yKTtcbiAgICB9XG4gICAgZ2V0RXJyb3JDdG9yKGVzKSB7XG4gICAgICAgIGNvbnN0ICRlcnJvciA9IGVzO1xuICAgICAgICBjb25zdCByZWdpc3RyeSA9IFR5cGVSZWdpc3RyeS5mb3IoJGVycm9yWzFdKTtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5LmV4Y2VwdGlvbnMuZ2V0KCRlcnJvcik7XG4gICAgfVxuICAgIGdldEJhc2VFeGNlcHRpb24oKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXhjZXB0aW9uS2V5IG9mIHRoaXMuZXhjZXB0aW9ucy5rZXlzKCkpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4Y2VwdGlvbktleSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbLCBucywgbmFtZV0gPSBleGNlcHRpb25LZXk7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBucyArIFwiI1wiICsgbmFtZTtcbiAgICAgICAgICAgICAgICBpZiAoaWQuc3RhcnRzV2l0aChcInNtaXRoeS50cy5zZGsuc3ludGhldGljLlwiKSAmJiBpZC5lbmRzV2l0aChcIlNlcnZpY2VFeGNlcHRpb25cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbktleTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZmluZChwcmVkaWNhdGUpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLnNjaGVtYXMudmFsdWVzKCldLmZpbmQocHJlZGljYXRlKTtcbiAgICB9XG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuc2NoZW1hcy5jbGVhcigpO1xuICAgICAgICB0aGlzLmV4Y2VwdGlvbnMuY2xlYXIoKTtcbiAgICB9XG4gICAgbm9ybWFsaXplU2hhcGVJZChzaGFwZUlkKSB7XG4gICAgICAgIGlmIChzaGFwZUlkLmluY2x1ZGVzKFwiI1wiKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNoYXBlSWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZXNwYWNlICsgXCIjXCIgKyBzaGFwZUlkO1xuICAgIH1cbn1cblxuZXhwb3J0cy5FcnJvclNjaGVtYSA9IEVycm9yU2NoZW1hO1xuZXhwb3J0cy5MaXN0U2NoZW1hID0gTGlzdFNjaGVtYTtcbmV4cG9ydHMuTWFwU2NoZW1hID0gTWFwU2NoZW1hO1xuZXhwb3J0cy5Ob3JtYWxpemVkU2NoZW1hID0gTm9ybWFsaXplZFNjaGVtYTtcbmV4cG9ydHMuT3BlcmF0aW9uU2NoZW1hID0gT3BlcmF0aW9uU2NoZW1hO1xuZXhwb3J0cy5TQ0hFTUEgPSBTQ0hFTUE7XG5leHBvcnRzLlNjaGVtYSA9IFNjaGVtYTtcbmV4cG9ydHMuU2ltcGxlU2NoZW1hID0gU2ltcGxlU2NoZW1hO1xuZXhwb3J0cy5TdHJ1Y3R1cmVTY2hlbWEgPSBTdHJ1Y3R1cmVTY2hlbWE7XG5leHBvcnRzLlR5cGVSZWdpc3RyeSA9IFR5cGVSZWdpc3RyeTtcbmV4cG9ydHMuZGVyZWYgPSBkZXJlZjtcbmV4cG9ydHMuZGVzZXJpYWxpemVyTWlkZGxld2FyZU9wdGlvbiA9IGRlc2VyaWFsaXplck1pZGRsZXdhcmVPcHRpb247XG5leHBvcnRzLmVycm9yID0gZXJyb3I7XG5leHBvcnRzLmdldFNjaGVtYVNlcmRlUGx1Z2luID0gZ2V0U2NoZW1hU2VyZGVQbHVnaW47XG5leHBvcnRzLmlzU3RhdGljU2NoZW1hID0gaXNTdGF0aWNTY2hlbWE7XG5leHBvcnRzLmxpc3QgPSBsaXN0O1xuZXhwb3J0cy5tYXAgPSBtYXA7XG5leHBvcnRzLm9wID0gb3A7XG5leHBvcnRzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjtcbmV4cG9ydHMuc2VyaWFsaXplck1pZGRsZXdhcmVPcHRpb24gPSBzZXJpYWxpemVyTWlkZGxld2FyZU9wdGlvbjtcbmV4cG9ydHMuc2ltID0gc2ltO1xuZXhwb3J0cy5zaW1BZGFwdGVyID0gc2ltQWRhcHRlcjtcbmV4cG9ydHMuc3RydWN0ID0gc3RydWN0O1xuZXhwb3J0cy50cmFuc2xhdGVUcmFpdHMgPSB0cmFuc2xhdGVUcmFpdHM7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgZ2V0QWxsQWxpYXNlcyA9IChuYW1lLCBhbGlhc2VzKSA9PiB7XG4gICAgY29uc3QgX2FsaWFzZXMgPSBbXTtcbiAgICBpZiAobmFtZSkge1xuICAgICAgICBfYWxpYXNlcy5wdXNoKG5hbWUpO1xuICAgIH1cbiAgICBpZiAoYWxpYXNlcykge1xuICAgICAgICBmb3IgKGNvbnN0IGFsaWFzIG9mIGFsaWFzZXMpIHtcbiAgICAgICAgICAgIF9hbGlhc2VzLnB1c2goYWxpYXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfYWxpYXNlcztcbn07XG5jb25zdCBnZXRNaWRkbGV3YXJlTmFtZVdpdGhBbGlhc2VzID0gKG5hbWUsIGFsaWFzZXMpID0+IHtcbiAgICByZXR1cm4gYCR7bmFtZSB8fCBcImFub255bW91c1wifSR7YWxpYXNlcyAmJiBhbGlhc2VzLmxlbmd0aCA+IDAgPyBgIChhLmsuYS4gJHthbGlhc2VzLmpvaW4oXCIsXCIpfSlgIDogXCJcIn1gO1xufTtcbmNvbnN0IGNvbnN0cnVjdFN0YWNrID0gKCkgPT4ge1xuICAgIGxldCBhYnNvbHV0ZUVudHJpZXMgPSBbXTtcbiAgICBsZXQgcmVsYXRpdmVFbnRyaWVzID0gW107XG4gICAgbGV0IGlkZW50aWZ5T25SZXNvbHZlID0gZmFsc2U7XG4gICAgY29uc3QgZW50cmllc05hbWVTZXQgPSBuZXcgU2V0KCk7XG4gICAgY29uc3Qgc29ydCA9IChlbnRyaWVzKSA9PiBlbnRyaWVzLnNvcnQoKGEsIGIpID0+IHN0ZXBXZWlnaHRzW2Iuc3RlcF0gLSBzdGVwV2VpZ2h0c1thLnN0ZXBdIHx8XG4gICAgICAgIHByaW9yaXR5V2VpZ2h0c1tiLnByaW9yaXR5IHx8IFwibm9ybWFsXCJdIC0gcHJpb3JpdHlXZWlnaHRzW2EucHJpb3JpdHkgfHwgXCJub3JtYWxcIl0pO1xuICAgIGNvbnN0IHJlbW92ZUJ5TmFtZSA9ICh0b1JlbW92ZSkgPT4ge1xuICAgICAgICBsZXQgaXNSZW1vdmVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGZpbHRlckNiID0gKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhbGlhc2VzID0gZ2V0QWxsQWxpYXNlcyhlbnRyeS5uYW1lLCBlbnRyeS5hbGlhc2VzKTtcbiAgICAgICAgICAgIGlmIChhbGlhc2VzLmluY2x1ZGVzKHRvUmVtb3ZlKSkge1xuICAgICAgICAgICAgICAgIGlzUmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhbGlhcyBvZiBhbGlhc2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIGVudHJpZXNOYW1lU2V0LmRlbGV0ZShhbGlhcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuICAgICAgICBhYnNvbHV0ZUVudHJpZXMgPSBhYnNvbHV0ZUVudHJpZXMuZmlsdGVyKGZpbHRlckNiKTtcbiAgICAgICAgcmVsYXRpdmVFbnRyaWVzID0gcmVsYXRpdmVFbnRyaWVzLmZpbHRlcihmaWx0ZXJDYik7XG4gICAgICAgIHJldHVybiBpc1JlbW92ZWQ7XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVCeVJlZmVyZW5jZSA9ICh0b1JlbW92ZSkgPT4ge1xuICAgICAgICBsZXQgaXNSZW1vdmVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGZpbHRlckNiID0gKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICBpZiAoZW50cnkubWlkZGxld2FyZSA9PT0gdG9SZW1vdmUpIHtcbiAgICAgICAgICAgICAgICBpc1JlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYWxpYXMgb2YgZ2V0QWxsQWxpYXNlcyhlbnRyeS5uYW1lLCBlbnRyeS5hbGlhc2VzKSkge1xuICAgICAgICAgICAgICAgICAgICBlbnRyaWVzTmFtZVNldC5kZWxldGUoYWxpYXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgYWJzb2x1dGVFbnRyaWVzID0gYWJzb2x1dGVFbnRyaWVzLmZpbHRlcihmaWx0ZXJDYik7XG4gICAgICAgIHJlbGF0aXZlRW50cmllcyA9IHJlbGF0aXZlRW50cmllcy5maWx0ZXIoZmlsdGVyQ2IpO1xuICAgICAgICByZXR1cm4gaXNSZW1vdmVkO1xuICAgIH07XG4gICAgY29uc3QgY2xvbmVUbyA9ICh0b1N0YWNrKSA9PiB7XG4gICAgICAgIGFic29sdXRlRW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgdG9TdGFjay5hZGQoZW50cnkubWlkZGxld2FyZSwgeyAuLi5lbnRyeSB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlbGF0aXZlRW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgdG9TdGFjay5hZGRSZWxhdGl2ZVRvKGVudHJ5Lm1pZGRsZXdhcmUsIHsgLi4uZW50cnkgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0b1N0YWNrLmlkZW50aWZ5T25SZXNvbHZlPy4oc3RhY2suaWRlbnRpZnlPblJlc29sdmUoKSk7XG4gICAgICAgIHJldHVybiB0b1N0YWNrO1xuICAgIH07XG4gICAgY29uc3QgZXhwYW5kUmVsYXRpdmVNaWRkbGV3YXJlTGlzdCA9IChmcm9tKSA9PiB7XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkTWlkZGxld2FyZUxpc3QgPSBbXTtcbiAgICAgICAgZnJvbS5iZWZvcmUuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICAgICAgICAgIGlmIChlbnRyeS5iZWZvcmUubGVuZ3RoID09PSAwICYmIGVudHJ5LmFmdGVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGV4cGFuZGVkTWlkZGxld2FyZUxpc3QucHVzaChlbnRyeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBleHBhbmRlZE1pZGRsZXdhcmVMaXN0LnB1c2goLi4uZXhwYW5kUmVsYXRpdmVNaWRkbGV3YXJlTGlzdChlbnRyeSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZXhwYW5kZWRNaWRkbGV3YXJlTGlzdC5wdXNoKGZyb20pO1xuICAgICAgICBmcm9tLmFmdGVyLnJldmVyc2UoKS5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgaWYgKGVudHJ5LmJlZm9yZS5sZW5ndGggPT09IDAgJiYgZW50cnkuYWZ0ZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZXhwYW5kZWRNaWRkbGV3YXJlTGlzdC5wdXNoKGVudHJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGV4cGFuZGVkTWlkZGxld2FyZUxpc3QucHVzaCguLi5leHBhbmRSZWxhdGl2ZU1pZGRsZXdhcmVMaXN0KGVudHJ5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZXhwYW5kZWRNaWRkbGV3YXJlTGlzdDtcbiAgICB9O1xuICAgIGNvbnN0IGdldE1pZGRsZXdhcmVMaXN0ID0gKGRlYnVnID0gZmFsc2UpID0+IHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEFic29sdXRlRW50cmllcyA9IFtdO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkUmVsYXRpdmVFbnRyaWVzID0gW107XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRFbnRyaWVzTmFtZU1hcCA9IHt9O1xuICAgICAgICBhYnNvbHV0ZUVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRFbnRyeSA9IHtcbiAgICAgICAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICAgICAgICBiZWZvcmU6IFtdLFxuICAgICAgICAgICAgICAgIGFmdGVyOiBbXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFsaWFzIG9mIGdldEFsbEFsaWFzZXMobm9ybWFsaXplZEVudHJ5Lm5hbWUsIG5vcm1hbGl6ZWRFbnRyeS5hbGlhc2VzKSkge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRFbnRyaWVzTmFtZU1hcFthbGlhc10gPSBub3JtYWxpemVkRW50cnk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub3JtYWxpemVkQWJzb2x1dGVFbnRyaWVzLnB1c2gobm9ybWFsaXplZEVudHJ5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlbGF0aXZlRW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEVudHJ5ID0ge1xuICAgICAgICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgICAgICAgIGJlZm9yZTogW10sXG4gICAgICAgICAgICAgICAgYWZ0ZXI6IFtdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYWxpYXMgb2YgZ2V0QWxsQWxpYXNlcyhub3JtYWxpemVkRW50cnkubmFtZSwgbm9ybWFsaXplZEVudHJ5LmFsaWFzZXMpKSB7XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZEVudHJpZXNOYW1lTWFwW2FsaWFzXSA9IG5vcm1hbGl6ZWRFbnRyeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vcm1hbGl6ZWRSZWxhdGl2ZUVudHJpZXMucHVzaChub3JtYWxpemVkRW50cnkpO1xuICAgICAgICB9KTtcbiAgICAgICAgbm9ybWFsaXplZFJlbGF0aXZlRW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgaWYgKGVudHJ5LnRvTWlkZGxld2FyZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvTWlkZGxld2FyZSA9IG5vcm1hbGl6ZWRFbnRyaWVzTmFtZU1hcFtlbnRyeS50b01pZGRsZXdhcmVdO1xuICAgICAgICAgICAgICAgIGlmICh0b01pZGRsZXdhcmUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVidWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZW50cnkudG9NaWRkbGV3YXJlfSBpcyBub3QgZm91bmQgd2hlbiBhZGRpbmcgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtnZXRNaWRkbGV3YXJlTmFtZVdpdGhBbGlhc2VzKGVudHJ5Lm5hbWUsIGVudHJ5LmFsaWFzZXMpfSBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBtaWRkbGV3YXJlICR7ZW50cnkucmVsYXRpb259ICR7ZW50cnkudG9NaWRkbGV3YXJlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZW50cnkucmVsYXRpb24gPT09IFwiYWZ0ZXJcIikge1xuICAgICAgICAgICAgICAgICAgICB0b01pZGRsZXdhcmUuYWZ0ZXIucHVzaChlbnRyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlbnRyeS5yZWxhdGlvbiA9PT0gXCJiZWZvcmVcIikge1xuICAgICAgICAgICAgICAgICAgICB0b01pZGRsZXdhcmUuYmVmb3JlLnB1c2goZW50cnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG1haW5DaGFpbiA9IHNvcnQobm9ybWFsaXplZEFic29sdXRlRW50cmllcylcbiAgICAgICAgICAgIC5tYXAoZXhwYW5kUmVsYXRpdmVNaWRkbGV3YXJlTGlzdClcbiAgICAgICAgICAgIC5yZWR1Y2UoKHdob2xlTGlzdCwgZXhwYW5kZWRNaWRkbGV3YXJlTGlzdCkgPT4ge1xuICAgICAgICAgICAgd2hvbGVMaXN0LnB1c2goLi4uZXhwYW5kZWRNaWRkbGV3YXJlTGlzdCk7XG4gICAgICAgICAgICByZXR1cm4gd2hvbGVMaXN0O1xuICAgICAgICB9LCBbXSk7XG4gICAgICAgIHJldHVybiBtYWluQ2hhaW47XG4gICAgfTtcbiAgICBjb25zdCBzdGFjayA9IHtcbiAgICAgICAgYWRkOiAobWlkZGxld2FyZSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IG5hbWUsIG92ZXJyaWRlLCBhbGlhc2VzOiBfYWxpYXNlcyB9ID0gb3B0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgICAgICAgICAgIHN0ZXA6IFwiaW5pdGlhbGl6ZVwiLFxuICAgICAgICAgICAgICAgIHByaW9yaXR5OiBcIm5vcm1hbFwiLFxuICAgICAgICAgICAgICAgIG1pZGRsZXdhcmUsXG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBhbGlhc2VzID0gZ2V0QWxsQWxpYXNlcyhuYW1lLCBfYWxpYXNlcyk7XG4gICAgICAgICAgICBpZiAoYWxpYXNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFsaWFzZXMuc29tZSgoYWxpYXMpID0+IGVudHJpZXNOYW1lU2V0LmhhcyhhbGlhcykpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghb3ZlcnJpZGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSBtaWRkbGV3YXJlIG5hbWUgJyR7Z2V0TWlkZGxld2FyZU5hbWVXaXRoQWxpYXNlcyhuYW1lLCBfYWxpYXNlcyl9J2ApO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFsaWFzIG9mIGFsaWFzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvT3ZlcnJpZGVJbmRleCA9IGFic29sdXRlRW50cmllcy5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBhbGlhcyB8fCBlbnRyeS5hbGlhc2VzPy5zb21lKChhKSA9PiBhID09PSBhbGlhcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRvT3ZlcnJpZGVJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvT3ZlcnJpZGUgPSBhYnNvbHV0ZUVudHJpZXNbdG9PdmVycmlkZUluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b092ZXJyaWRlLnN0ZXAgIT09IGVudHJ5LnN0ZXAgfHwgZW50cnkucHJpb3JpdHkgIT09IHRvT3ZlcnJpZGUucHJpb3JpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwiJHtnZXRNaWRkbGV3YXJlTmFtZVdpdGhBbGlhc2VzKHRvT3ZlcnJpZGUubmFtZSwgdG9PdmVycmlkZS5hbGlhc2VzKX1cIiBtaWRkbGV3YXJlIHdpdGggYCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3RvT3ZlcnJpZGUucHJpb3JpdHl9IHByaW9yaXR5IGluICR7dG9PdmVycmlkZS5zdGVwfSBzdGVwIGNhbm5vdCBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGJlIG92ZXJyaWRkZW4gYnkgXCIke2dldE1pZGRsZXdhcmVOYW1lV2l0aEFsaWFzZXMobmFtZSwgX2FsaWFzZXMpfVwiIG1pZGRsZXdhcmUgd2l0aCBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7ZW50cnkucHJpb3JpdHl9IHByaW9yaXR5IGluICR7ZW50cnkuc3RlcH0gc3RlcC5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlRW50cmllcy5zcGxpY2UodG9PdmVycmlkZUluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFsaWFzIG9mIGFsaWFzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZW50cmllc05hbWVTZXQuYWRkKGFsaWFzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhYnNvbHV0ZUVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFkZFJlbGF0aXZlVG86IChtaWRkbGV3YXJlLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IG5hbWUsIG92ZXJyaWRlLCBhbGlhc2VzOiBfYWxpYXNlcyB9ID0gb3B0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgICAgICAgICAgIG1pZGRsZXdhcmUsXG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBhbGlhc2VzID0gZ2V0QWxsQWxpYXNlcyhuYW1lLCBfYWxpYXNlcyk7XG4gICAgICAgICAgICBpZiAoYWxpYXNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFsaWFzZXMuc29tZSgoYWxpYXMpID0+IGVudHJpZXNOYW1lU2V0LmhhcyhhbGlhcykpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghb3ZlcnJpZGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSBtaWRkbGV3YXJlIG5hbWUgJyR7Z2V0TWlkZGxld2FyZU5hbWVXaXRoQWxpYXNlcyhuYW1lLCBfYWxpYXNlcyl9J2ApO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFsaWFzIG9mIGFsaWFzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvT3ZlcnJpZGVJbmRleCA9IHJlbGF0aXZlRW50cmllcy5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBhbGlhcyB8fCBlbnRyeS5hbGlhc2VzPy5zb21lKChhKSA9PiBhID09PSBhbGlhcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRvT3ZlcnJpZGVJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvT3ZlcnJpZGUgPSByZWxhdGl2ZUVudHJpZXNbdG9PdmVycmlkZUluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b092ZXJyaWRlLnRvTWlkZGxld2FyZSAhPT0gZW50cnkudG9NaWRkbGV3YXJlIHx8IHRvT3ZlcnJpZGUucmVsYXRpb24gIT09IGVudHJ5LnJlbGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcIiR7Z2V0TWlkZGxld2FyZU5hbWVXaXRoQWxpYXNlcyh0b092ZXJyaWRlLm5hbWUsIHRvT3ZlcnJpZGUuYWxpYXNlcyl9XCIgbWlkZGxld2FyZSBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7dG9PdmVycmlkZS5yZWxhdGlvbn0gXCIke3RvT3ZlcnJpZGUudG9NaWRkbGV3YXJlfVwiIG1pZGRsZXdhcmUgY2Fubm90IGJlIG92ZXJyaWRkZW4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBieSBcIiR7Z2V0TWlkZGxld2FyZU5hbWVXaXRoQWxpYXNlcyhuYW1lLCBfYWxpYXNlcyl9XCIgbWlkZGxld2FyZSAke2VudHJ5LnJlbGF0aW9ufSBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFwiJHtlbnRyeS50b01pZGRsZXdhcmV9XCIgbWlkZGxld2FyZS5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlRW50cmllcy5zcGxpY2UodG9PdmVycmlkZUluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFsaWFzIG9mIGFsaWFzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZW50cmllc05hbWVTZXQuYWRkKGFsaWFzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWxhdGl2ZUVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgICAgIH0sXG4gICAgICAgIGNsb25lOiAoKSA9PiBjbG9uZVRvKGNvbnN0cnVjdFN0YWNrKCkpLFxuICAgICAgICB1c2U6IChwbHVnaW4pID0+IHtcbiAgICAgICAgICAgIHBsdWdpbi5hcHBseVRvU3RhY2soc3RhY2spO1xuICAgICAgICB9LFxuICAgICAgICByZW1vdmU6ICh0b1JlbW92ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0b1JlbW92ZSA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVtb3ZlQnlOYW1lKHRvUmVtb3ZlKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVtb3ZlQnlSZWZlcmVuY2UodG9SZW1vdmUpO1xuICAgICAgICB9LFxuICAgICAgICByZW1vdmVCeVRhZzogKHRvUmVtb3ZlKSA9PiB7XG4gICAgICAgICAgICBsZXQgaXNSZW1vdmVkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJDYiA9IChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGFncywgbmFtZSwgYWxpYXNlczogX2FsaWFzZXMgfSA9IGVudHJ5O1xuICAgICAgICAgICAgICAgIGlmICh0YWdzICYmIHRhZ3MuaW5jbHVkZXModG9SZW1vdmUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsaWFzZXMgPSBnZXRBbGxBbGlhc2VzKG5hbWUsIF9hbGlhc2VzKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhbGlhcyBvZiBhbGlhc2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzTmFtZVNldC5kZWxldGUoYWxpYXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlzUmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWJzb2x1dGVFbnRyaWVzID0gYWJzb2x1dGVFbnRyaWVzLmZpbHRlcihmaWx0ZXJDYik7XG4gICAgICAgICAgICByZWxhdGl2ZUVudHJpZXMgPSByZWxhdGl2ZUVudHJpZXMuZmlsdGVyKGZpbHRlckNiKTtcbiAgICAgICAgICAgIHJldHVybiBpc1JlbW92ZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbmNhdDogKGZyb20pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lZCA9IGNsb25lVG8oY29uc3RydWN0U3RhY2soKSk7XG4gICAgICAgICAgICBjbG9uZWQudXNlKGZyb20pO1xuICAgICAgICAgICAgY2xvbmVkLmlkZW50aWZ5T25SZXNvbHZlKGlkZW50aWZ5T25SZXNvbHZlIHx8IGNsb25lZC5pZGVudGlmeU9uUmVzb2x2ZSgpIHx8IChmcm9tLmlkZW50aWZ5T25SZXNvbHZlPy4oKSA/PyBmYWxzZSkpO1xuICAgICAgICAgICAgcmV0dXJuIGNsb25lZDtcbiAgICAgICAgfSxcbiAgICAgICAgYXBwbHlUb1N0YWNrOiBjbG9uZVRvLFxuICAgICAgICBpZGVudGlmeTogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGdldE1pZGRsZXdhcmVMaXN0KHRydWUpLm1hcCgobXcpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGVwID0gbXcuc3RlcCA/P1xuICAgICAgICAgICAgICAgICAgICBtdy5yZWxhdGlvbiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBtdy50b01pZGRsZXdhcmU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldE1pZGRsZXdhcmVOYW1lV2l0aEFsaWFzZXMobXcubmFtZSwgbXcuYWxpYXNlcykgKyBcIiAtIFwiICsgc3RlcDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBpZGVudGlmeU9uUmVzb2x2ZSh0b2dnbGUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdG9nZ2xlID09PSBcImJvb2xlYW5cIilcbiAgICAgICAgICAgICAgICBpZGVudGlmeU9uUmVzb2x2ZSA9IHRvZ2dsZTtcbiAgICAgICAgICAgIHJldHVybiBpZGVudGlmeU9uUmVzb2x2ZTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVzb2x2ZTogKGhhbmRsZXIsIGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbWlkZGxld2FyZSBvZiBnZXRNaWRkbGV3YXJlTGlzdCgpXG4gICAgICAgICAgICAgICAgLm1hcCgoZW50cnkpID0+IGVudHJ5Lm1pZGRsZXdhcmUpXG4gICAgICAgICAgICAgICAgLnJldmVyc2UoKSkge1xuICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBtaWRkbGV3YXJlKGhhbmRsZXIsIGNvbnRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlkZW50aWZ5T25SZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coc3RhY2suaWRlbnRpZnkoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlcjtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiBzdGFjaztcbn07XG5jb25zdCBzdGVwV2VpZ2h0cyA9IHtcbiAgICBpbml0aWFsaXplOiA1LFxuICAgIHNlcmlhbGl6ZTogNCxcbiAgICBidWlsZDogMyxcbiAgICBmaW5hbGl6ZVJlcXVlc3Q6IDIsXG4gICAgZGVzZXJpYWxpemU6IDEsXG59O1xuY29uc3QgcHJpb3JpdHlXZWlnaHRzID0ge1xuICAgIGhpZ2g6IDMsXG4gICAgbm9ybWFsOiAyLFxuICAgIGxvdzogMSxcbn07XG5cbmV4cG9ydHMuY29uc3RydWN0U3RhY2sgPSBjb25zdHJ1Y3RTdGFjaztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZyb21CYXNlNjQgPSB2b2lkIDA7XG5jb25zdCB1dGlsX2J1ZmZlcl9mcm9tXzEgPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLWJ1ZmZlci1mcm9tXCIpO1xuY29uc3QgQkFTRTY0X1JFR0VYID0gL15bQS1aYS16MC05Ky9dKj17MCwyfSQvO1xuY29uc3QgZnJvbUJhc2U2NCA9IChpbnB1dCkgPT4ge1xuICAgIGlmICgoaW5wdXQubGVuZ3RoICogMykgJSA0ICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEluY29ycmVjdCBwYWRkaW5nIG9uIGJhc2U2NCBzdHJpbmcuYCk7XG4gICAgfVxuICAgIGlmICghQkFTRTY0X1JFR0VYLmV4ZWMoaW5wdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYmFzZTY0IHN0cmluZy5gKTtcbiAgICB9XG4gICAgY29uc3QgYnVmZmVyID0gKDAsIHV0aWxfYnVmZmVyX2Zyb21fMS5mcm9tU3RyaW5nKShpbnB1dCwgXCJiYXNlNjRcIik7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ1ZmZlci5idWZmZXIsIGJ1ZmZlci5ieXRlT2Zmc2V0LCBidWZmZXIuYnl0ZUxlbmd0aCk7XG59O1xuZXhwb3J0cy5mcm9tQmFzZTY0ID0gZnJvbUJhc2U2NDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRvQmFzZTY0ID0gdm9pZCAwO1xuY29uc3QgdXRpbF9idWZmZXJfZnJvbV8xID0gcmVxdWlyZShcIkBzbWl0aHkvdXRpbC1idWZmZXItZnJvbVwiKTtcbmNvbnN0IHV0aWxfdXRmOF8xID0gcmVxdWlyZShcIkBzbWl0aHkvdXRpbC11dGY4XCIpO1xuY29uc3QgdG9CYXNlNjQgPSAoX2lucHV0KSA9PiB7XG4gICAgbGV0IGlucHV0O1xuICAgIGlmICh0eXBlb2YgX2lucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlucHV0ID0gKDAsIHV0aWxfdXRmOF8xLmZyb21VdGY4KShfaW5wdXQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaW5wdXQgPSBfaW5wdXQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgaW5wdXQgIT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGlucHV0LmJ5dGVPZmZzZXQgIT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIGlucHV0LmJ5dGVMZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQHNtaXRoeS91dGlsLWJhc2U2NDogdG9CYXNlNjQgZW5jb2RlciBmdW5jdGlvbiBvbmx5IGFjY2VwdHMgc3RyaW5nIHwgVWludDhBcnJheS5cIik7XG4gICAgfVxuICAgIHJldHVybiAoMCwgdXRpbF9idWZmZXJfZnJvbV8xLmZyb21BcnJheUJ1ZmZlcikoaW5wdXQuYnVmZmVyLCBpbnB1dC5ieXRlT2Zmc2V0LCBpbnB1dC5ieXRlTGVuZ3RoKS50b1N0cmluZyhcImJhc2U2NFwiKTtcbn07XG5leHBvcnRzLnRvQmFzZTY0ID0gdG9CYXNlNjQ7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIGZyb21CYXNlNjQgPSByZXF1aXJlKCcuL2Zyb21CYXNlNjQnKTtcbnZhciB0b0Jhc2U2NCA9IHJlcXVpcmUoJy4vdG9CYXNlNjQnKTtcblxuXG5cbk9iamVjdC5rZXlzKGZyb21CYXNlNjQpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcblx0aWYgKGsgIT09ICdkZWZhdWx0JyAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIGspKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgaywge1xuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBmcm9tQmFzZTY0W2tdOyB9XG5cdH0pO1xufSk7XG5PYmplY3Qua2V5cyh0b0Jhc2U2NCkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuXHRpZiAoayAhPT0gJ2RlZmF1bHQnICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgaykpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrLCB7XG5cdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRvQmFzZTY0W2tdOyB9XG5cdH0pO1xufSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5DaGVja3N1bVN0cmVhbSA9IHZvaWQgMDtcbmNvbnN0IHV0aWxfYmFzZTY0XzEgPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLWJhc2U2NFwiKTtcbmNvbnN0IHN0cmVhbV8xID0gcmVxdWlyZShcInN0cmVhbVwiKTtcbmNsYXNzIENoZWNrc3VtU3RyZWFtIGV4dGVuZHMgc3RyZWFtXzEuRHVwbGV4IHtcbiAgICBleHBlY3RlZENoZWNrc3VtO1xuICAgIGNoZWNrc3VtU291cmNlTG9jYXRpb247XG4gICAgY2hlY2tzdW07XG4gICAgc291cmNlO1xuICAgIGJhc2U2NEVuY29kZXI7XG4gICAgY29uc3RydWN0b3IoeyBleHBlY3RlZENoZWNrc3VtLCBjaGVja3N1bSwgc291cmNlLCBjaGVja3N1bVNvdXJjZUxvY2F0aW9uLCBiYXNlNjRFbmNvZGVyLCB9KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlLnBpcGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEBzbWl0aHkvdXRpbC1zdHJlYW06IHVuc3VwcG9ydGVkIHNvdXJjZSB0eXBlICR7c291cmNlPy5jb25zdHJ1Y3Rvcj8ubmFtZSA/PyBzb3VyY2V9IGluIENoZWNrc3VtU3RyZWFtLmApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmFzZTY0RW5jb2RlciA9IGJhc2U2NEVuY29kZXIgPz8gdXRpbF9iYXNlNjRfMS50b0Jhc2U2NDtcbiAgICAgICAgdGhpcy5leHBlY3RlZENoZWNrc3VtID0gZXhwZWN0ZWRDaGVja3N1bTtcbiAgICAgICAgdGhpcy5jaGVja3N1bSA9IGNoZWNrc3VtO1xuICAgICAgICB0aGlzLmNoZWNrc3VtU291cmNlTG9jYXRpb24gPSBjaGVja3N1bVNvdXJjZUxvY2F0aW9uO1xuICAgICAgICB0aGlzLnNvdXJjZS5waXBlKHRoaXMpO1xuICAgIH1cbiAgICBfcmVhZChzaXplKSB7IH1cbiAgICBfd3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5jaGVja3N1bS51cGRhdGUoY2h1bmspO1xuICAgICAgICAgICAgdGhpcy5wdXNoKGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgIH1cbiAgICBhc3luYyBfZmluYWwoY2FsbGJhY2spIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRpZ2VzdCA9IGF3YWl0IHRoaXMuY2hlY2tzdW0uZGlnZXN0KCk7XG4gICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IHRoaXMuYmFzZTY0RW5jb2RlcihkaWdlc3QpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZXhwZWN0ZWRDaGVja3N1bSAhPT0gcmVjZWl2ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKGBDaGVja3N1bSBtaXNtYXRjaDogZXhwZWN0ZWQgXCIke3RoaXMuZXhwZWN0ZWRDaGVja3N1bX1cIiBidXQgcmVjZWl2ZWQgXCIke3JlY2VpdmVkfVwiYCArXG4gICAgICAgICAgICAgICAgICAgIGAgaW4gcmVzcG9uc2UgaGVhZGVyIFwiJHt0aGlzLmNoZWNrc3VtU291cmNlTG9jYXRpb259XCIuYCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wdXNoKG51bGwpO1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICB9XG59XG5leHBvcnRzLkNoZWNrc3VtU3RyZWFtID0gQ2hlY2tzdW1TdHJlYW07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0Jsb2IgPSBleHBvcnRzLmlzUmVhZGFibGVTdHJlYW0gPSB2b2lkIDA7XG5jb25zdCBpc1JlYWRhYmxlU3RyZWFtID0gKHN0cmVhbSkgPT4gdHlwZW9mIFJlYWRhYmxlU3RyZWFtID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAoc3RyZWFtPy5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gUmVhZGFibGVTdHJlYW0ubmFtZSB8fCBzdHJlYW0gaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSk7XG5leHBvcnRzLmlzUmVhZGFibGVTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtO1xuY29uc3QgaXNCbG9iID0gKGJsb2IpID0+IHtcbiAgICByZXR1cm4gdHlwZW9mIEJsb2IgPT09IFwiZnVuY3Rpb25cIiAmJiAoYmxvYj8uY29uc3RydWN0b3I/Lm5hbWUgPT09IEJsb2IubmFtZSB8fCBibG9iIGluc3RhbmNlb2YgQmxvYik7XG59O1xuZXhwb3J0cy5pc0Jsb2IgPSBpc0Jsb2I7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5DaGVja3N1bVN0cmVhbSA9IHZvaWQgMDtcbmNvbnN0IFJlYWRhYmxlU3RyZWFtUmVmID0gdHlwZW9mIFJlYWRhYmxlU3RyZWFtID09PSBcImZ1bmN0aW9uXCIgPyBSZWFkYWJsZVN0cmVhbSA6IGZ1bmN0aW9uICgpIHsgfTtcbmNsYXNzIENoZWNrc3VtU3RyZWFtIGV4dGVuZHMgUmVhZGFibGVTdHJlYW1SZWYge1xufVxuZXhwb3J0cy5DaGVja3N1bVN0cmVhbSA9IENoZWNrc3VtU3RyZWFtO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlQ2hlY2tzdW1TdHJlYW0gPSB2b2lkIDA7XG5jb25zdCB1dGlsX2Jhc2U2NF8xID0gcmVxdWlyZShcIkBzbWl0aHkvdXRpbC1iYXNlNjRcIik7XG5jb25zdCBzdHJlYW1fdHlwZV9jaGVja18xID0gcmVxdWlyZShcIi4uL3N0cmVhbS10eXBlLWNoZWNrXCIpO1xuY29uc3QgQ2hlY2tzdW1TdHJlYW1fYnJvd3Nlcl8xID0gcmVxdWlyZShcIi4vQ2hlY2tzdW1TdHJlYW0uYnJvd3NlclwiKTtcbmNvbnN0IGNyZWF0ZUNoZWNrc3VtU3RyZWFtID0gKHsgZXhwZWN0ZWRDaGVja3N1bSwgY2hlY2tzdW0sIHNvdXJjZSwgY2hlY2tzdW1Tb3VyY2VMb2NhdGlvbiwgYmFzZTY0RW5jb2RlciwgfSkgPT4ge1xuICAgIGlmICghKDAsIHN0cmVhbV90eXBlX2NoZWNrXzEuaXNSZWFkYWJsZVN0cmVhbSkoc291cmNlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEBzbWl0aHkvdXRpbC1zdHJlYW06IHVuc3VwcG9ydGVkIHNvdXJjZSB0eXBlICR7c291cmNlPy5jb25zdHJ1Y3Rvcj8ubmFtZSA/PyBzb3VyY2V9IGluIENoZWNrc3VtU3RyZWFtLmApO1xuICAgIH1cbiAgICBjb25zdCBlbmNvZGVyID0gYmFzZTY0RW5jb2RlciA/PyB1dGlsX2Jhc2U2NF8xLnRvQmFzZTY0O1xuICAgIGlmICh0eXBlb2YgVHJhbnNmb3JtU3RyZWFtICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQHNtaXRoeS91dGlsLXN0cmVhbTogdW5hYmxlIHRvIGluc3RhbnRpYXRlIENoZWNrc3VtU3RyZWFtIGJlY2F1c2UgQVBJIHVuYXZhaWxhYmxlOiBSZWFkYWJsZVN0cmVhbS9UcmFuc2Zvcm1TdHJlYW0uXCIpO1xuICAgIH1cbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHtcbiAgICAgICAgc3RhcnQoKSB7IH0sXG4gICAgICAgIGFzeW5jIHRyYW5zZm9ybShjaHVuaywgY29udHJvbGxlcikge1xuICAgICAgICAgICAgY2hlY2tzdW0udXBkYXRlKGNodW5rKTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShjaHVuayk7XG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIGZsdXNoKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpZ2VzdCA9IGF3YWl0IGNoZWNrc3VtLmRpZ2VzdCgpO1xuICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBlbmNvZGVyKGRpZ2VzdCk7XG4gICAgICAgICAgICBpZiAoZXhwZWN0ZWRDaGVja3N1bSAhPT0gcmVjZWl2ZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgQ2hlY2tzdW0gbWlzbWF0Y2g6IGV4cGVjdGVkIFwiJHtleHBlY3RlZENoZWNrc3VtfVwiIGJ1dCByZWNlaXZlZCBcIiR7cmVjZWl2ZWR9XCJgICtcbiAgICAgICAgICAgICAgICAgICAgYCBpbiByZXNwb25zZSBoZWFkZXIgXCIke2NoZWNrc3VtU291cmNlTG9jYXRpb259XCIuYCk7XG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xuICAgIHNvdXJjZS5waXBlVGhyb3VnaCh0cmFuc2Zvcm0pO1xuICAgIGNvbnN0IHJlYWRhYmxlID0gdHJhbnNmb3JtLnJlYWRhYmxlO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihyZWFkYWJsZSwgQ2hlY2tzdW1TdHJlYW1fYnJvd3Nlcl8xLkNoZWNrc3VtU3RyZWFtLnByb3RvdHlwZSk7XG4gICAgcmV0dXJuIHJlYWRhYmxlO1xufTtcbmV4cG9ydHMuY3JlYXRlQ2hlY2tzdW1TdHJlYW0gPSBjcmVhdGVDaGVja3N1bVN0cmVhbTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUNoZWNrc3VtU3RyZWFtID0gY3JlYXRlQ2hlY2tzdW1TdHJlYW07XG5jb25zdCBzdHJlYW1fdHlwZV9jaGVja18xID0gcmVxdWlyZShcIi4uL3N0cmVhbS10eXBlLWNoZWNrXCIpO1xuY29uc3QgQ2hlY2tzdW1TdHJlYW1fMSA9IHJlcXVpcmUoXCIuL0NoZWNrc3VtU3RyZWFtXCIpO1xuY29uc3QgY3JlYXRlQ2hlY2tzdW1TdHJlYW1fYnJvd3Nlcl8xID0gcmVxdWlyZShcIi4vY3JlYXRlQ2hlY2tzdW1TdHJlYW0uYnJvd3NlclwiKTtcbmZ1bmN0aW9uIGNyZWF0ZUNoZWNrc3VtU3RyZWFtKGluaXQpIHtcbiAgICBpZiAodHlwZW9mIFJlYWRhYmxlU3RyZWFtID09PSBcImZ1bmN0aW9uXCIgJiYgKDAsIHN0cmVhbV90eXBlX2NoZWNrXzEuaXNSZWFkYWJsZVN0cmVhbSkoaW5pdC5zb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiAoMCwgY3JlYXRlQ2hlY2tzdW1TdHJlYW1fYnJvd3Nlcl8xLmNyZWF0ZUNoZWNrc3VtU3RyZWFtKShpbml0KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDaGVja3N1bVN0cmVhbV8xLkNoZWNrc3VtU3RyZWFtKGluaXQpO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQnl0ZUFycmF5Q29sbGVjdG9yID0gdm9pZCAwO1xuY2xhc3MgQnl0ZUFycmF5Q29sbGVjdG9yIHtcbiAgICBhbGxvY0J5dGVBcnJheTtcbiAgICBieXRlTGVuZ3RoID0gMDtcbiAgICBieXRlQXJyYXlzID0gW107XG4gICAgY29uc3RydWN0b3IoYWxsb2NCeXRlQXJyYXkpIHtcbiAgICAgICAgdGhpcy5hbGxvY0J5dGVBcnJheSA9IGFsbG9jQnl0ZUFycmF5O1xuICAgIH1cbiAgICBwdXNoKGJ5dGVBcnJheSkge1xuICAgICAgICB0aGlzLmJ5dGVBcnJheXMucHVzaChieXRlQXJyYXkpO1xuICAgICAgICB0aGlzLmJ5dGVMZW5ndGggKz0gYnl0ZUFycmF5LmJ5dGVMZW5ndGg7XG4gICAgfVxuICAgIGZsdXNoKCkge1xuICAgICAgICBpZiAodGhpcy5ieXRlQXJyYXlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgYnl0ZXMgPSB0aGlzLmJ5dGVBcnJheXNbMF07XG4gICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICByZXR1cm4gYnl0ZXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWdncmVnYXRpb24gPSB0aGlzLmFsbG9jQnl0ZUFycmF5KHRoaXMuYnl0ZUxlbmd0aCk7XG4gICAgICAgIGxldCBjdXJzb3IgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYnl0ZUFycmF5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgY29uc3QgYnl0ZXMgPSB0aGlzLmJ5dGVBcnJheXNbaV07XG4gICAgICAgICAgICBhZ2dyZWdhdGlvbi5zZXQoYnl0ZXMsIGN1cnNvcik7XG4gICAgICAgICAgICBjdXJzb3IgKz0gYnl0ZXMuYnl0ZUxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIHJldHVybiBhZ2dyZWdhdGlvbjtcbiAgICB9XG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuYnl0ZUFycmF5cyA9IFtdO1xuICAgICAgICB0aGlzLmJ5dGVMZW5ndGggPSAwO1xuICAgIH1cbn1cbmV4cG9ydHMuQnl0ZUFycmF5Q29sbGVjdG9yID0gQnl0ZUFycmF5Q29sbGVjdG9yO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlQnVmZmVyZWRSZWFkYWJsZSA9IHZvaWQgMDtcbmV4cG9ydHMuY3JlYXRlQnVmZmVyZWRSZWFkYWJsZVN0cmVhbSA9IGNyZWF0ZUJ1ZmZlcmVkUmVhZGFibGVTdHJlYW07XG5leHBvcnRzLm1lcmdlID0gbWVyZ2U7XG5leHBvcnRzLmZsdXNoID0gZmx1c2g7XG5leHBvcnRzLnNpemVPZiA9IHNpemVPZjtcbmV4cG9ydHMubW9kZU9mID0gbW9kZU9mO1xuY29uc3QgQnl0ZUFycmF5Q29sbGVjdG9yXzEgPSByZXF1aXJlKFwiLi9CeXRlQXJyYXlDb2xsZWN0b3JcIik7XG5mdW5jdGlvbiBjcmVhdGVCdWZmZXJlZFJlYWRhYmxlU3RyZWFtKHVwc3RyZWFtLCBzaXplLCBsb2dnZXIpIHtcbiAgICBjb25zdCByZWFkZXIgPSB1cHN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICBsZXQgc3RyZWFtQnVmZmVyaW5nTG9nZ2VkV2FybmluZyA9IGZhbHNlO1xuICAgIGxldCBieXRlc1NlZW4gPSAwO1xuICAgIGNvbnN0IGJ1ZmZlcnMgPSBbXCJcIiwgbmV3IEJ5dGVBcnJheUNvbGxlY3Rvcl8xLkJ5dGVBcnJheUNvbGxlY3Rvcigoc2l6ZSkgPT4gbmV3IFVpbnQ4QXJyYXkoc2l6ZSkpXTtcbiAgICBsZXQgbW9kZSA9IC0xO1xuICAgIGNvbnN0IHB1bGwgPSBhc3luYyAoY29udHJvbGxlcikgPT4ge1xuICAgICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgICBjb25zdCBjaHVuayA9IHZhbHVlO1xuICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgaWYgKG1vZGUgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVtYWluZGVyID0gZmx1c2goYnVmZmVycywgbW9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKHNpemVPZihyZW1haW5kZXIpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUocmVtYWluZGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjaHVua01vZGUgPSBtb2RlT2YoY2h1bmssIGZhbHNlKTtcbiAgICAgICAgICAgIGlmIChtb2RlICE9PSBjaHVua01vZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAobW9kZSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShmbHVzaChidWZmZXJzLCBtb2RlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1vZGUgPSBjaHVua01vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobW9kZSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmspO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNodW5rU2l6ZSA9IHNpemVPZihjaHVuayk7XG4gICAgICAgICAgICBieXRlc1NlZW4gKz0gY2h1bmtTaXplO1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyU2l6ZSA9IHNpemVPZihidWZmZXJzW21vZGVdKTtcbiAgICAgICAgICAgIGlmIChjaHVua1NpemUgPj0gc2l6ZSAmJiBidWZmZXJTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGNodW5rKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1NpemUgPSBtZXJnZShidWZmZXJzLCBtb2RlLCBjaHVuayk7XG4gICAgICAgICAgICAgICAgaWYgKCFzdHJlYW1CdWZmZXJpbmdMb2dnZWRXYXJuaW5nICYmIGJ5dGVzU2VlbiA+IHNpemUgKiAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbUJ1ZmZlcmluZ0xvZ2dlZFdhcm5pbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXI/Lndhcm4oYEBzbWl0aHkvdXRpbC1zdHJlYW0gLSBzdHJlYW0gY2h1bmsgc2l6ZSAke2NodW5rU2l6ZX0gaXMgYmVsb3cgdGhyZXNob2xkIG9mICR7c2l6ZX0sIGF1dG9tYXRpY2FsbHkgYnVmZmVyaW5nLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobmV3U2l6ZSA+PSBzaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShmbHVzaChidWZmZXJzLCBtb2RlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBwdWxsKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICAgIHB1bGwsXG4gICAgfSk7XG59XG5leHBvcnRzLmNyZWF0ZUJ1ZmZlcmVkUmVhZGFibGUgPSBjcmVhdGVCdWZmZXJlZFJlYWRhYmxlU3RyZWFtO1xuZnVuY3Rpb24gbWVyZ2UoYnVmZmVycywgbW9kZSwgY2h1bmspIHtcbiAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgYnVmZmVyc1swXSArPSBjaHVuaztcbiAgICAgICAgICAgIHJldHVybiBzaXplT2YoYnVmZmVyc1swXSk7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgYnVmZmVyc1ttb2RlXS5wdXNoKGNodW5rKTtcbiAgICAgICAgICAgIHJldHVybiBzaXplT2YoYnVmZmVyc1ttb2RlXSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZmx1c2goYnVmZmVycywgbW9kZSkge1xuICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBjb25zdCBzID0gYnVmZmVyc1swXTtcbiAgICAgICAgICAgIGJ1ZmZlcnNbMF0gPSBcIlwiO1xuICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcnNbbW9kZV0uZmx1c2goKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBAc21pdGh5L3V0aWwtc3RyZWFtIC0gaW52YWxpZCBpbmRleCAke21vZGV9IGdpdmVuIHRvIGZsdXNoKClgKTtcbn1cbmZ1bmN0aW9uIHNpemVPZihjaHVuaykge1xuICAgIHJldHVybiBjaHVuaz8uYnl0ZUxlbmd0aCA/PyBjaHVuaz8ubGVuZ3RoID8/IDA7XG59XG5mdW5jdGlvbiBtb2RlT2YoY2h1bmssIGFsbG93QnVmZmVyID0gdHJ1ZSkge1xuICAgIGlmIChhbGxvd0J1ZmZlciAmJiB0eXBlb2YgQnVmZmVyICE9PSBcInVuZGVmaW5lZFwiICYmIGNodW5rIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBpZiAoY2h1bmsgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVCdWZmZXJlZFJlYWRhYmxlID0gY3JlYXRlQnVmZmVyZWRSZWFkYWJsZTtcbmNvbnN0IG5vZGVfc3RyZWFtXzEgPSByZXF1aXJlKFwibm9kZTpzdHJlYW1cIik7XG5jb25zdCBCeXRlQXJyYXlDb2xsZWN0b3JfMSA9IHJlcXVpcmUoXCIuL0J5dGVBcnJheUNvbGxlY3RvclwiKTtcbmNvbnN0IGNyZWF0ZUJ1ZmZlcmVkUmVhZGFibGVTdHJlYW1fMSA9IHJlcXVpcmUoXCIuL2NyZWF0ZUJ1ZmZlcmVkUmVhZGFibGVTdHJlYW1cIik7XG5jb25zdCBzdHJlYW1fdHlwZV9jaGVja18xID0gcmVxdWlyZShcIi4vc3RyZWFtLXR5cGUtY2hlY2tcIik7XG5mdW5jdGlvbiBjcmVhdGVCdWZmZXJlZFJlYWRhYmxlKHVwc3RyZWFtLCBzaXplLCBsb2dnZXIpIHtcbiAgICBpZiAoKDAsIHN0cmVhbV90eXBlX2NoZWNrXzEuaXNSZWFkYWJsZVN0cmVhbSkodXBzdHJlYW0pKSB7XG4gICAgICAgIHJldHVybiAoMCwgY3JlYXRlQnVmZmVyZWRSZWFkYWJsZVN0cmVhbV8xLmNyZWF0ZUJ1ZmZlcmVkUmVhZGFibGVTdHJlYW0pKHVwc3RyZWFtLCBzaXplLCBsb2dnZXIpO1xuICAgIH1cbiAgICBjb25zdCBkb3duc3RyZWFtID0gbmV3IG5vZGVfc3RyZWFtXzEuUmVhZGFibGUoeyByZWFkKCkgeyB9IH0pO1xuICAgIGxldCBzdHJlYW1CdWZmZXJpbmdMb2dnZWRXYXJuaW5nID0gZmFsc2U7XG4gICAgbGV0IGJ5dGVzU2VlbiA9IDA7XG4gICAgY29uc3QgYnVmZmVycyA9IFtcbiAgICAgICAgXCJcIixcbiAgICAgICAgbmV3IEJ5dGVBcnJheUNvbGxlY3Rvcl8xLkJ5dGVBcnJheUNvbGxlY3Rvcigoc2l6ZSkgPT4gbmV3IFVpbnQ4QXJyYXkoc2l6ZSkpLFxuICAgICAgICBuZXcgQnl0ZUFycmF5Q29sbGVjdG9yXzEuQnl0ZUFycmF5Q29sbGVjdG9yKChzaXplKSA9PiBCdWZmZXIuZnJvbShuZXcgVWludDhBcnJheShzaXplKSkpLFxuICAgIF07XG4gICAgbGV0IG1vZGUgPSAtMTtcbiAgICB1cHN0cmVhbS5vbihcImRhdGFcIiwgKGNodW5rKSA9PiB7XG4gICAgICAgIGNvbnN0IGNodW5rTW9kZSA9ICgwLCBjcmVhdGVCdWZmZXJlZFJlYWRhYmxlU3RyZWFtXzEubW9kZU9mKShjaHVuaywgdHJ1ZSk7XG4gICAgICAgIGlmIChtb2RlICE9PSBjaHVua01vZGUpIHtcbiAgICAgICAgICAgIGlmIChtb2RlID49IDApIHtcbiAgICAgICAgICAgICAgICBkb3duc3RyZWFtLnB1c2goKDAsIGNyZWF0ZUJ1ZmZlcmVkUmVhZGFibGVTdHJlYW1fMS5mbHVzaCkoYnVmZmVycywgbW9kZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbW9kZSA9IGNodW5rTW9kZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kZSA9PT0gLTEpIHtcbiAgICAgICAgICAgIGRvd25zdHJlYW0ucHVzaChjaHVuayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2h1bmtTaXplID0gKDAsIGNyZWF0ZUJ1ZmZlcmVkUmVhZGFibGVTdHJlYW1fMS5zaXplT2YpKGNodW5rKTtcbiAgICAgICAgYnl0ZXNTZWVuICs9IGNodW5rU2l6ZTtcbiAgICAgICAgY29uc3QgYnVmZmVyU2l6ZSA9ICgwLCBjcmVhdGVCdWZmZXJlZFJlYWRhYmxlU3RyZWFtXzEuc2l6ZU9mKShidWZmZXJzW21vZGVdKTtcbiAgICAgICAgaWYgKGNodW5rU2l6ZSA+PSBzaXplICYmIGJ1ZmZlclNpemUgPT09IDApIHtcbiAgICAgICAgICAgIGRvd25zdHJlYW0ucHVzaChjaHVuayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBuZXdTaXplID0gKDAsIGNyZWF0ZUJ1ZmZlcmVkUmVhZGFibGVTdHJlYW1fMS5tZXJnZSkoYnVmZmVycywgbW9kZSwgY2h1bmspO1xuICAgICAgICAgICAgaWYgKCFzdHJlYW1CdWZmZXJpbmdMb2dnZWRXYXJuaW5nICYmIGJ5dGVzU2VlbiA+IHNpemUgKiAyKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtQnVmZmVyaW5nTG9nZ2VkV2FybmluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgbG9nZ2VyPy53YXJuKGBAc21pdGh5L3V0aWwtc3RyZWFtIC0gc3RyZWFtIGNodW5rIHNpemUgJHtjaHVua1NpemV9IGlzIGJlbG93IHRocmVzaG9sZCBvZiAke3NpemV9LCBhdXRvbWF0aWNhbGx5IGJ1ZmZlcmluZy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXdTaXplID49IHNpemUpIHtcbiAgICAgICAgICAgICAgICBkb3duc3RyZWFtLnB1c2goKDAsIGNyZWF0ZUJ1ZmZlcmVkUmVhZGFibGVTdHJlYW1fMS5mbHVzaCkoYnVmZmVycywgbW9kZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgdXBzdHJlYW0ub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICBpZiAobW9kZSAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbmRlciA9ICgwLCBjcmVhdGVCdWZmZXJlZFJlYWRhYmxlU3RyZWFtXzEuZmx1c2gpKGJ1ZmZlcnMsIG1vZGUpO1xuICAgICAgICAgICAgaWYgKCgwLCBjcmVhdGVCdWZmZXJlZFJlYWRhYmxlU3RyZWFtXzEuc2l6ZU9mKShyZW1haW5kZXIpID4gMCkge1xuICAgICAgICAgICAgICAgIGRvd25zdHJlYW0ucHVzaChyZW1haW5kZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRvd25zdHJlYW0ucHVzaChudWxsKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZG93bnN0cmVhbTtcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEF3c0NodW5rZWRFbmNvZGluZ1N0cmVhbSA9IHZvaWQgMDtcbmNvbnN0IHN0cmVhbV8xID0gcmVxdWlyZShcInN0cmVhbVwiKTtcbmNvbnN0IGdldEF3c0NodW5rZWRFbmNvZGluZ1N0cmVhbSA9IChyZWFkYWJsZVN0cmVhbSwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHsgYmFzZTY0RW5jb2RlciwgYm9keUxlbmd0aENoZWNrZXIsIGNoZWNrc3VtQWxnb3JpdGhtRm4sIGNoZWNrc3VtTG9jYXRpb25OYW1lLCBzdHJlYW1IYXNoZXIgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgY2hlY2tzdW1SZXF1aXJlZCA9IGJhc2U2NEVuY29kZXIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBjaGVja3N1bUFsZ29yaXRobUZuICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgY2hlY2tzdW1Mb2NhdGlvbk5hbWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBzdHJlYW1IYXNoZXIgIT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBkaWdlc3QgPSBjaGVja3N1bVJlcXVpcmVkID8gc3RyZWFtSGFzaGVyKGNoZWNrc3VtQWxnb3JpdGhtRm4sIHJlYWRhYmxlU3RyZWFtKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBhd3NDaHVua2VkRW5jb2RpbmdTdHJlYW0gPSBuZXcgc3RyZWFtXzEuUmVhZGFibGUoeyByZWFkOiAoKSA9PiB7IH0gfSk7XG4gICAgcmVhZGFibGVTdHJlYW0ub24oXCJkYXRhXCIsIChkYXRhKSA9PiB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGJvZHlMZW5ndGhDaGVja2VyKGRhdGEpIHx8IDA7XG4gICAgICAgIGF3c0NodW5rZWRFbmNvZGluZ1N0cmVhbS5wdXNoKGAke2xlbmd0aC50b1N0cmluZygxNil9XFxyXFxuYCk7XG4gICAgICAgIGF3c0NodW5rZWRFbmNvZGluZ1N0cmVhbS5wdXNoKGRhdGEpO1xuICAgICAgICBhd3NDaHVua2VkRW5jb2RpbmdTdHJlYW0ucHVzaChcIlxcclxcblwiKTtcbiAgICB9KTtcbiAgICByZWFkYWJsZVN0cmVhbS5vbihcImVuZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3c0NodW5rZWRFbmNvZGluZ1N0cmVhbS5wdXNoKGAwXFxyXFxuYCk7XG4gICAgICAgIGlmIChjaGVja3N1bVJlcXVpcmVkKSB7XG4gICAgICAgICAgICBjb25zdCBjaGVja3N1bSA9IGJhc2U2NEVuY29kZXIoYXdhaXQgZGlnZXN0KTtcbiAgICAgICAgICAgIGF3c0NodW5rZWRFbmNvZGluZ1N0cmVhbS5wdXNoKGAke2NoZWNrc3VtTG9jYXRpb25OYW1lfToke2NoZWNrc3VtfVxcclxcbmApO1xuICAgICAgICAgICAgYXdzQ2h1bmtlZEVuY29kaW5nU3RyZWFtLnB1c2goYFxcclxcbmApO1xuICAgICAgICB9XG4gICAgICAgIGF3c0NodW5rZWRFbmNvZGluZ1N0cmVhbS5wdXNoKG51bGwpO1xuICAgIH0pO1xuICAgIHJldHVybiBhd3NDaHVua2VkRW5jb2RpbmdTdHJlYW07XG59O1xuZXhwb3J0cy5nZXRBd3NDaHVua2VkRW5jb2RpbmdTdHJlYW0gPSBnZXRBd3NDaHVua2VkRW5jb2RpbmdTdHJlYW07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5oZWFkU3RyZWFtID0gaGVhZFN0cmVhbTtcbmFzeW5jIGZ1bmN0aW9uIGhlYWRTdHJlYW0oc3RyZWFtLCBieXRlcykge1xuICAgIGxldCBieXRlTGVuZ3RoQ291bnRlciA9IDA7XG4gICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpO1xuICAgIGxldCBpc0RvbmUgPSBmYWxzZTtcbiAgICB3aGlsZSAoIWlzRG9uZSkge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGNodW5rcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIGJ5dGVMZW5ndGhDb3VudGVyICs9IHZhbHVlPy5ieXRlTGVuZ3RoID8/IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJ5dGVMZW5ndGhDb3VudGVyID49IGJ5dGVzKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpc0RvbmUgPSBkb25lO1xuICAgIH1cbiAgICByZWFkZXIucmVsZWFzZUxvY2soKTtcbiAgICBjb25zdCBjb2xsZWN0ZWQgPSBuZXcgVWludDhBcnJheShNYXRoLm1pbihieXRlcywgYnl0ZUxlbmd0aENvdW50ZXIpKTtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcykge1xuICAgICAgICBpZiAoY2h1bmsuYnl0ZUxlbmd0aCA+IGNvbGxlY3RlZC5ieXRlTGVuZ3RoIC0gb2Zmc2V0KSB7XG4gICAgICAgICAgICBjb2xsZWN0ZWQuc2V0KGNodW5rLnN1YmFycmF5KDAsIGNvbGxlY3RlZC5ieXRlTGVuZ3RoIC0gb2Zmc2V0KSwgb2Zmc2V0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29sbGVjdGVkLnNldChjaHVuaywgb2Zmc2V0KTtcbiAgICAgICAgfVxuICAgICAgICBvZmZzZXQgKz0gY2h1bmsubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4gY29sbGVjdGVkO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaGVhZFN0cmVhbSA9IHZvaWQgMDtcbmNvbnN0IHN0cmVhbV8xID0gcmVxdWlyZShcInN0cmVhbVwiKTtcbmNvbnN0IGhlYWRTdHJlYW1fYnJvd3Nlcl8xID0gcmVxdWlyZShcIi4vaGVhZFN0cmVhbS5icm93c2VyXCIpO1xuY29uc3Qgc3RyZWFtX3R5cGVfY2hlY2tfMSA9IHJlcXVpcmUoXCIuL3N0cmVhbS10eXBlLWNoZWNrXCIpO1xuY29uc3QgaGVhZFN0cmVhbSA9IChzdHJlYW0sIGJ5dGVzKSA9PiB7XG4gICAgaWYgKCgwLCBzdHJlYW1fdHlwZV9jaGVja18xLmlzUmVhZGFibGVTdHJlYW0pKHN0cmVhbSkpIHtcbiAgICAgICAgcmV0dXJuICgwLCBoZWFkU3RyZWFtX2Jyb3dzZXJfMS5oZWFkU3RyZWFtKShzdHJlYW0sIGJ5dGVzKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgY29sbGVjdG9yID0gbmV3IENvbGxlY3RvcigpO1xuICAgICAgICBjb2xsZWN0b3IubGltaXQgPSBieXRlcztcbiAgICAgICAgc3RyZWFtLnBpcGUoY29sbGVjdG9yKTtcbiAgICAgICAgc3RyZWFtLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgICAgY29sbGVjdG9yLmVuZCgpO1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH0pO1xuICAgICAgICBjb2xsZWN0b3Iub24oXCJlcnJvclwiLCByZWplY3QpO1xuICAgICAgICBjb2xsZWN0b3Iub24oXCJmaW5pc2hcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShCdWZmZXIuY29uY2F0KHRoaXMuYnVmZmVycykpO1xuICAgICAgICAgICAgcmVzb2x2ZShieXRlcyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcbmV4cG9ydHMuaGVhZFN0cmVhbSA9IGhlYWRTdHJlYW07XG5jbGFzcyBDb2xsZWN0b3IgZXh0ZW5kcyBzdHJlYW1fMS5Xcml0YWJsZSB7XG4gICAgYnVmZmVycyA9IFtdO1xuICAgIGxpbWl0ID0gSW5maW5pdHk7XG4gICAgYnl0ZXNCdWZmZXJlZCA9IDA7XG4gICAgX3dyaXRlKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5idWZmZXJzLnB1c2goY2h1bmspO1xuICAgICAgICB0aGlzLmJ5dGVzQnVmZmVyZWQgKz0gY2h1bmsuYnl0ZUxlbmd0aCA/PyAwO1xuICAgICAgICBpZiAodGhpcy5ieXRlc0J1ZmZlcmVkID49IHRoaXMubGltaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4Y2VzcyA9IHRoaXMuYnl0ZXNCdWZmZXJlZCAtIHRoaXMubGltaXQ7XG4gICAgICAgICAgICBjb25zdCB0YWlsQnVmZmVyID0gdGhpcy5idWZmZXJzW3RoaXMuYnVmZmVycy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyc1t0aGlzLmJ1ZmZlcnMubGVuZ3RoIC0gMV0gPSB0YWlsQnVmZmVyLnN1YmFycmF5KDAsIHRhaWxCdWZmZXIuYnl0ZUxlbmd0aCAtIGV4Y2Vzcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXQoXCJmaW5pc2hcIik7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgZXNjYXBlVXJpID0gKHVyaSkgPT4gZW5jb2RlVVJJQ29tcG9uZW50KHVyaSkucmVwbGFjZSgvWyEnKCkqXS9nLCBoZXhFbmNvZGUpO1xuY29uc3QgaGV4RW5jb2RlID0gKGMpID0+IGAlJHtjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9YDtcblxuY29uc3QgZXNjYXBlVXJpUGF0aCA9ICh1cmkpID0+IHVyaS5zcGxpdChcIi9cIikubWFwKGVzY2FwZVVyaSkuam9pbihcIi9cIik7XG5cbmV4cG9ydHMuZXNjYXBlVXJpID0gZXNjYXBlVXJpO1xuZXhwb3J0cy5lc2NhcGVVcmlQYXRoID0gZXNjYXBlVXJpUGF0aDtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbFVyaUVzY2FwZSA9IHJlcXVpcmUoJ0BzbWl0aHkvdXRpbC11cmktZXNjYXBlJyk7XG5cbmZ1bmN0aW9uIGJ1aWxkUXVlcnlTdHJpbmcocXVlcnkpIHtcbiAgICBjb25zdCBwYXJ0cyA9IFtdO1xuICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhxdWVyeSkuc29ydCgpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcXVlcnlba2V5XTtcbiAgICAgICAga2V5ID0gdXRpbFVyaUVzY2FwZS5lc2NhcGVVcmkoa2V5KTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaUxlbiA9IHZhbHVlLmxlbmd0aDsgaSA8IGlMZW47IGkrKykge1xuICAgICAgICAgICAgICAgIHBhcnRzLnB1c2goYCR7a2V5fT0ke3V0aWxVcmlFc2NhcGUuZXNjYXBlVXJpKHZhbHVlW2ldKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBxc0VudHJ5ID0ga2V5O1xuICAgICAgICAgICAgaWYgKHZhbHVlIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHFzRW50cnkgKz0gYD0ke3V0aWxVcmlFc2NhcGUuZXNjYXBlVXJpKHZhbHVlKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFydHMucHVzaChxc0VudHJ5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFydHMuam9pbihcIiZcIik7XG59XG5cbmV4cG9ydHMuYnVpbGRRdWVyeVN0cmluZyA9IGJ1aWxkUXVlcnlTdHJpbmc7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIHByb3RvY29sSHR0cCA9IHJlcXVpcmUoJ0BzbWl0aHkvcHJvdG9jb2wtaHR0cCcpO1xudmFyIHF1ZXJ5c3RyaW5nQnVpbGRlciA9IHJlcXVpcmUoJ0BzbWl0aHkvcXVlcnlzdHJpbmctYnVpbGRlcicpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xudmFyIGh0dHAyID0gcmVxdWlyZSgnaHR0cDInKTtcblxuY29uc3QgTk9ERUpTX1RJTUVPVVRfRVJST1JfQ09ERVMgPSBbXCJFQ09OTlJFU0VUXCIsIFwiRVBJUEVcIiwgXCJFVElNRURPVVRcIl07XG5cbmNvbnN0IGdldFRyYW5zZm9ybWVkSGVhZGVycyA9IChoZWFkZXJzKSA9PiB7XG4gICAgY29uc3QgdHJhbnNmb3JtZWRIZWFkZXJzID0ge307XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlclZhbHVlcyA9IGhlYWRlcnNbbmFtZV07XG4gICAgICAgIHRyYW5zZm9ybWVkSGVhZGVyc1tuYW1lXSA9IEFycmF5LmlzQXJyYXkoaGVhZGVyVmFsdWVzKSA/IGhlYWRlclZhbHVlcy5qb2luKFwiLFwiKSA6IGhlYWRlclZhbHVlcztcbiAgICB9XG4gICAgcmV0dXJuIHRyYW5zZm9ybWVkSGVhZGVycztcbn07XG5cbmNvbnN0IHRpbWluZyA9IHtcbiAgICBzZXRUaW1lb3V0OiAoY2IsIG1zKSA9PiBzZXRUaW1lb3V0KGNiLCBtcyksXG4gICAgY2xlYXJUaW1lb3V0OiAodGltZW91dElkKSA9PiBjbGVhclRpbWVvdXQodGltZW91dElkKSxcbn07XG5cbmNvbnN0IERFRkVSX0VWRU5UX0xJU1RFTkVSX1RJTUUkMiA9IDEwMDA7XG5jb25zdCBzZXRDb25uZWN0aW9uVGltZW91dCA9IChyZXF1ZXN0LCByZWplY3QsIHRpbWVvdXRJbk1zID0gMCkgPT4ge1xuICAgIGlmICghdGltZW91dEluTXMpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBjb25zdCByZWdpc3RlclRpbWVvdXQgPSAob2Zmc2V0KSA9PiB7XG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHRpbWluZy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHJlcXVlc3QuZGVzdHJveSgpO1xuICAgICAgICAgICAgcmVqZWN0KE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGBAc21pdGh5L25vZGUtaHR0cC1oYW5kbGVyIC0gdGhlIHJlcXVlc3Qgc29ja2V0IGRpZCBub3QgZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2ZXIgd2l0aGluIHRoZSBjb25maWd1cmVkIHRpbWVvdXQgb2YgJHt0aW1lb3V0SW5Nc30gbXMuYCksIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIlRpbWVvdXRFcnJvclwiLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9LCB0aW1lb3V0SW5NcyAtIG9mZnNldCk7XG4gICAgICAgIGNvbnN0IGRvV2l0aFNvY2tldCA9IChzb2NrZXQpID0+IHtcbiAgICAgICAgICAgIGlmIChzb2NrZXQ/LmNvbm5lY3RpbmcpIHtcbiAgICAgICAgICAgICAgICBzb2NrZXQub24oXCJjb25uZWN0XCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGltaW5nLmNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGltaW5nLmNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAocmVxdWVzdC5zb2NrZXQpIHtcbiAgICAgICAgICAgIGRvV2l0aFNvY2tldChyZXF1ZXN0LnNvY2tldCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXF1ZXN0Lm9uKFwic29ja2V0XCIsIGRvV2l0aFNvY2tldCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGlmICh0aW1lb3V0SW5NcyA8IDIwMDApIHtcbiAgICAgICAgcmVnaXN0ZXJUaW1lb3V0KDApO1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIHRpbWluZy5zZXRUaW1lb3V0KHJlZ2lzdGVyVGltZW91dC5iaW5kKG51bGwsIERFRkVSX0VWRU5UX0xJU1RFTkVSX1RJTUUkMiksIERFRkVSX0VWRU5UX0xJU1RFTkVSX1RJTUUkMik7XG59O1xuXG5jb25zdCBzZXRSZXF1ZXN0VGltZW91dCA9IChyZXEsIHJlamVjdCwgdGltZW91dEluTXMgPSAwLCB0aHJvd09uUmVxdWVzdFRpbWVvdXQsIGxvZ2dlcikgPT4ge1xuICAgIGlmICh0aW1lb3V0SW5Ncykge1xuICAgICAgICByZXR1cm4gdGltaW5nLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1zZyA9IGBAc21pdGh5L25vZGUtaHR0cC1oYW5kbGVyIC0gWyR7dGhyb3dPblJlcXVlc3RUaW1lb3V0ID8gXCJFUlJPUlwiIDogXCJXQVJOXCJ9XSBhIHJlcXVlc3QgaGFzIGV4Y2VlZGVkIHRoZSBjb25maWd1cmVkICR7dGltZW91dEluTXN9IG1zIHJlcXVlc3RUaW1lb3V0LmA7XG4gICAgICAgICAgICBpZiAodGhyb3dPblJlcXVlc3RUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihtc2cpLCB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGltZW91dEVycm9yXCIsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiRVRJTUVET1VUXCIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmVxLmRlc3Ryb3koZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtc2cgKz0gYCBJbml0IGNsaWVudCByZXF1ZXN0SGFuZGxlciB3aXRoIHRocm93T25SZXF1ZXN0VGltZW91dD10cnVlIHRvIHR1cm4gdGhpcyBpbnRvIGFuIGVycm9yLmA7XG4gICAgICAgICAgICAgICAgbG9nZ2VyPy53YXJuPy4obXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGltZW91dEluTXMpO1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG59O1xuXG5jb25zdCBERUZFUl9FVkVOVF9MSVNURU5FUl9USU1FJDEgPSAzMDAwO1xuY29uc3Qgc2V0U29ja2V0S2VlcEFsaXZlID0gKHJlcXVlc3QsIHsga2VlcEFsaXZlLCBrZWVwQWxpdmVNc2VjcyB9LCBkZWZlclRpbWVNcyA9IERFRkVSX0VWRU5UX0xJU1RFTkVSX1RJTUUkMSkgPT4ge1xuICAgIGlmIChrZWVwQWxpdmUgIT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBjb25zdCByZWdpc3Rlckxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICBpZiAocmVxdWVzdC5zb2NrZXQpIHtcbiAgICAgICAgICAgIHJlcXVlc3Quc29ja2V0LnNldEtlZXBBbGl2ZShrZWVwQWxpdmUsIGtlZXBBbGl2ZU1zZWNzIHx8IDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVxdWVzdC5vbihcInNvY2tldFwiLCAoc29ja2V0KSA9PiB7XG4gICAgICAgICAgICAgICAgc29ja2V0LnNldEtlZXBBbGl2ZShrZWVwQWxpdmUsIGtlZXBBbGl2ZU1zZWNzIHx8IDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGlmIChkZWZlclRpbWVNcyA9PT0gMCkge1xuICAgICAgICByZWdpc3Rlckxpc3RlbmVyKCk7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICByZXR1cm4gdGltaW5nLnNldFRpbWVvdXQocmVnaXN0ZXJMaXN0ZW5lciwgZGVmZXJUaW1lTXMpO1xufTtcblxuY29uc3QgREVGRVJfRVZFTlRfTElTVEVORVJfVElNRSA9IDMwMDA7XG5jb25zdCBzZXRTb2NrZXRUaW1lb3V0ID0gKHJlcXVlc3QsIHJlamVjdCwgdGltZW91dEluTXMgPSAwKSA9PiB7XG4gICAgY29uc3QgcmVnaXN0ZXJUaW1lb3V0ID0gKG9mZnNldCkgPT4ge1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gdGltZW91dEluTXMgLSBvZmZzZXQ7XG4gICAgICAgIGNvbnN0IG9uVGltZW91dCA9ICgpID0+IHtcbiAgICAgICAgICAgIHJlcXVlc3QuZGVzdHJveSgpO1xuICAgICAgICAgICAgcmVqZWN0KE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGBAc21pdGh5L25vZGUtaHR0cC1oYW5kbGVyIC0gdGhlIHJlcXVlc3Qgc29ja2V0IHRpbWVkIG91dCBhZnRlciAke3RpbWVvdXRJbk1zfSBtcyBvZiBpbmFjdGl2aXR5IChjb25maWd1cmVkIGJ5IGNsaWVudCByZXF1ZXN0SGFuZGxlcikuYCksIHsgbmFtZTogXCJUaW1lb3V0RXJyb3JcIiB9KSk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChyZXF1ZXN0LnNvY2tldCkge1xuICAgICAgICAgICAgcmVxdWVzdC5zb2NrZXQuc2V0VGltZW91dCh0aW1lb3V0LCBvblRpbWVvdXQpO1xuICAgICAgICAgICAgcmVxdWVzdC5vbihcImNsb3NlXCIsICgpID0+IHJlcXVlc3Quc29ja2V0Py5yZW1vdmVMaXN0ZW5lcihcInRpbWVvdXRcIiwgb25UaW1lb3V0KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXF1ZXN0LnNldFRpbWVvdXQodGltZW91dCwgb25UaW1lb3V0KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgaWYgKDAgPCB0aW1lb3V0SW5NcyAmJiB0aW1lb3V0SW5NcyA8IDYwMDApIHtcbiAgICAgICAgcmVnaXN0ZXJUaW1lb3V0KDApO1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIHRpbWluZy5zZXRUaW1lb3V0KHJlZ2lzdGVyVGltZW91dC5iaW5kKG51bGwsIHRpbWVvdXRJbk1zID09PSAwID8gMCA6IERFRkVSX0VWRU5UX0xJU1RFTkVSX1RJTUUpLCBERUZFUl9FVkVOVF9MSVNURU5FUl9USU1FKTtcbn07XG5cbmNvbnN0IE1JTl9XQUlUX1RJTUUgPSA2XzAwMDtcbmFzeW5jIGZ1bmN0aW9uIHdyaXRlUmVxdWVzdEJvZHkoaHR0cFJlcXVlc3QsIHJlcXVlc3QsIG1heENvbnRpbnVlVGltZW91dE1zID0gTUlOX1dBSVRfVElNRSwgZXh0ZXJuYWxBZ2VudCA9IGZhbHNlKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHJlcXVlc3QuaGVhZGVycyA/PyB7fTtcbiAgICBjb25zdCBleHBlY3QgPSBoZWFkZXJzLkV4cGVjdCB8fCBoZWFkZXJzLmV4cGVjdDtcbiAgICBsZXQgdGltZW91dElkID0gLTE7XG4gICAgbGV0IHNlbmRCb2R5ID0gdHJ1ZTtcbiAgICBpZiAoIWV4dGVybmFsQWdlbnQgJiYgZXhwZWN0ID09PSBcIjEwMC1jb250aW51ZVwiKSB7XG4gICAgICAgIHNlbmRCb2R5ID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGltZW91dElkID0gTnVtYmVyKHRpbWluZy5zZXRUaW1lb3V0KCgpID0+IHJlc29sdmUodHJ1ZSksIE1hdGgubWF4KE1JTl9XQUlUX1RJTUUsIG1heENvbnRpbnVlVGltZW91dE1zKSkpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGh0dHBSZXF1ZXN0Lm9uKFwiY29udGludWVcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aW1pbmcuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaHR0cFJlcXVlc3Qub24oXCJyZXNwb25zZVwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWluZy5jbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaHR0cFJlcXVlc3Qub24oXCJlcnJvclwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWluZy5jbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGlmIChzZW5kQm9keSkge1xuICAgICAgICB3cml0ZUJvZHkoaHR0cFJlcXVlc3QsIHJlcXVlc3QuYm9keSk7XG4gICAgfVxufVxuZnVuY3Rpb24gd3JpdGVCb2R5KGh0dHBSZXF1ZXN0LCBib2R5KSB7XG4gICAgaWYgKGJvZHkgaW5zdGFuY2VvZiBzdHJlYW0uUmVhZGFibGUpIHtcbiAgICAgICAgYm9keS5waXBlKGh0dHBSZXF1ZXN0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoYm9keSkge1xuICAgICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGJvZHkpIHx8IHR5cGVvZiBib2R5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBodHRwUmVxdWVzdC5lbmQoYm9keSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdWludDggPSBib2R5O1xuICAgICAgICBpZiAodHlwZW9mIHVpbnQ4ID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICB1aW50OC5idWZmZXIgJiZcbiAgICAgICAgICAgIHR5cGVvZiB1aW50OC5ieXRlT2Zmc2V0ID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICB0eXBlb2YgdWludDguYnl0ZUxlbmd0aCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgaHR0cFJlcXVlc3QuZW5kKEJ1ZmZlci5mcm9tKHVpbnQ4LmJ1ZmZlciwgdWludDguYnl0ZU9mZnNldCwgdWludDguYnl0ZUxlbmd0aCkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGh0dHBSZXF1ZXN0LmVuZChCdWZmZXIuZnJvbShib2R5KSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaHR0cFJlcXVlc3QuZW5kKCk7XG59XG5cbmNvbnN0IERFRkFVTFRfUkVRVUVTVF9USU1FT1VUID0gMDtcbmNsYXNzIE5vZGVIdHRwSGFuZGxlciB7XG4gICAgY29uZmlnO1xuICAgIGNvbmZpZ1Byb3ZpZGVyO1xuICAgIHNvY2tldFdhcm5pbmdUaW1lc3RhbXAgPSAwO1xuICAgIGV4dGVybmFsQWdlbnQgPSBmYWxzZTtcbiAgICBtZXRhZGF0YSA9IHsgaGFuZGxlclByb3RvY29sOiBcImh0dHAvMS4xXCIgfTtcbiAgICBzdGF0aWMgY3JlYXRlKGluc3RhbmNlT3JPcHRpb25zKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2VPck9wdGlvbnM/LmhhbmRsZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2VPck9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBOb2RlSHR0cEhhbmRsZXIoaW5zdGFuY2VPck9wdGlvbnMpO1xuICAgIH1cbiAgICBzdGF0aWMgY2hlY2tTb2NrZXRVc2FnZShhZ2VudCwgc29ja2V0V2FybmluZ1RpbWVzdGFtcCwgbG9nZ2VyID0gY29uc29sZSkge1xuICAgICAgICBjb25zdCB7IHNvY2tldHMsIHJlcXVlc3RzLCBtYXhTb2NrZXRzIH0gPSBhZ2VudDtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXhTb2NrZXRzICE9PSBcIm51bWJlclwiIHx8IG1heFNvY2tldHMgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICByZXR1cm4gc29ja2V0V2FybmluZ1RpbWVzdGFtcDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnRlcnZhbCA9IDE1XzAwMDtcbiAgICAgICAgaWYgKERhdGUubm93KCkgLSBpbnRlcnZhbCA8IHNvY2tldFdhcm5pbmdUaW1lc3RhbXApIHtcbiAgICAgICAgICAgIHJldHVybiBzb2NrZXRXYXJuaW5nVGltZXN0YW1wO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzb2NrZXRzICYmIHJlcXVlc3RzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9yaWdpbiBpbiBzb2NrZXRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc29ja2V0c0luVXNlID0gc29ja2V0c1tvcmlnaW5dPy5sZW5ndGggPz8gMDtcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0c0VucXVldWVkID0gcmVxdWVzdHNbb3JpZ2luXT8ubGVuZ3RoID8/IDA7XG4gICAgICAgICAgICAgICAgaWYgKHNvY2tldHNJblVzZSA+PSBtYXhTb2NrZXRzICYmIHJlcXVlc3RzRW5xdWV1ZWQgPj0gMiAqIG1heFNvY2tldHMpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyPy53YXJuPy4oYEBzbWl0aHkvbm9kZS1odHRwLWhhbmRsZXI6V0FSTiAtIHNvY2tldCB1c2FnZSBhdCBjYXBhY2l0eT0ke3NvY2tldHNJblVzZX0gYW5kICR7cmVxdWVzdHNFbnF1ZXVlZH0gYWRkaXRpb25hbCByZXF1ZXN0cyBhcmUgZW5xdWV1ZWQuXG5TZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nkay1mb3ItamF2YXNjcmlwdC92My9kZXZlbG9wZXItZ3VpZGUvbm9kZS1jb25maWd1cmluZy1tYXhzb2NrZXRzLmh0bWxcbm9yIGluY3JlYXNlIHNvY2tldEFjcXVpc2l0aW9uV2FybmluZ1RpbWVvdXQ9KG1pbGxpcykgaW4gdGhlIE5vZGVIdHRwSGFuZGxlciBjb25maWcuYCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc29ja2V0V2FybmluZ1RpbWVzdGFtcDtcbiAgICB9XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB0aGlzLmNvbmZpZ1Byb3ZpZGVyID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zKClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKF9vcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5yZXNvbHZlRGVmYXVsdENvbmZpZyhfb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnJlc29sdmVEZWZhdWx0Q29uZmlnKG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlc29sdmVEZWZhdWx0Q29uZmlnKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyByZXF1ZXN0VGltZW91dCwgY29ubmVjdGlvblRpbWVvdXQsIHNvY2tldFRpbWVvdXQsIHNvY2tldEFjcXVpc2l0aW9uV2FybmluZ1RpbWVvdXQsIGh0dHBBZ2VudCwgaHR0cHNBZ2VudCwgdGhyb3dPblJlcXVlc3RUaW1lb3V0LCB9ID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3Qga2VlcEFsaXZlID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgbWF4U29ja2V0cyA9IDUwO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29ubmVjdGlvblRpbWVvdXQsXG4gICAgICAgICAgICByZXF1ZXN0VGltZW91dCxcbiAgICAgICAgICAgIHNvY2tldFRpbWVvdXQsXG4gICAgICAgICAgICBzb2NrZXRBY3F1aXNpdGlvbldhcm5pbmdUaW1lb3V0LFxuICAgICAgICAgICAgdGhyb3dPblJlcXVlc3RUaW1lb3V0LFxuICAgICAgICAgICAgaHR0cEFnZW50OiAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChodHRwQWdlbnQgaW5zdGFuY2VvZiBodHRwLkFnZW50IHx8IHR5cGVvZiBodHRwQWdlbnQ/LmRlc3Ryb3kgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4dGVybmFsQWdlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHR0cEFnZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGh0dHAuQWdlbnQoeyBrZWVwQWxpdmUsIG1heFNvY2tldHMsIC4uLmh0dHBBZ2VudCB9KTtcbiAgICAgICAgICAgIH0pKCksXG4gICAgICAgICAgICBodHRwc0FnZW50OiAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChodHRwc0FnZW50IGluc3RhbmNlb2YgaHR0cHMuQWdlbnQgfHwgdHlwZW9mIGh0dHBzQWdlbnQ/LmRlc3Ryb3kgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4dGVybmFsQWdlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHR0cHNBZ2VudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBodHRwcy5BZ2VudCh7IGtlZXBBbGl2ZSwgbWF4U29ja2V0cywgLi4uaHR0cHNBZ2VudCB9KTtcbiAgICAgICAgICAgIH0pKCksXG4gICAgICAgICAgICBsb2dnZXI6IGNvbnNvbGUsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuY29uZmlnPy5odHRwQWdlbnQ/LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5jb25maWc/Lmh0dHBzQWdlbnQ/LmRlc3Ryb3koKTtcbiAgICB9XG4gICAgYXN5bmMgaGFuZGxlKHJlcXVlc3QsIHsgYWJvcnRTaWduYWwsIHJlcXVlc3RUaW1lb3V0IH0gPSB7fSkge1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZyA9IGF3YWl0IHRoaXMuY29uZmlnUHJvdmlkZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChfcmVzb2x2ZSwgX3JlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgICAgICAgICBsZXQgd3JpdGVSZXF1ZXN0Qm9keVByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCB0aW1lb3V0cyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZSA9IGFzeW5jIChhcmcpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB3cml0ZVJlcXVlc3RCb2R5UHJvbWlzZTtcbiAgICAgICAgICAgICAgICB0aW1lb3V0cy5mb3JFYWNoKHRpbWluZy5jbGVhclRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIF9yZXNvbHZlKGFyZyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgcmVqZWN0ID0gYXN5bmMgKGFyZykgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRlUmVxdWVzdEJvZHlQcm9taXNlO1xuICAgICAgICAgICAgICAgIHRpbWVvdXRzLmZvckVhY2godGltaW5nLmNsZWFyVGltZW91dCk7XG4gICAgICAgICAgICAgICAgX3JlamVjdChhcmcpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChhYm9ydFNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFib3J0RXJyb3IgPSBuZXcgRXJyb3IoXCJSZXF1ZXN0IGFib3J0ZWRcIik7XG4gICAgICAgICAgICAgICAgYWJvcnRFcnJvci5uYW1lID0gXCJBYm9ydEVycm9yXCI7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGFib3J0RXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGlzU1NMID0gcmVxdWVzdC5wcm90b2NvbCA9PT0gXCJodHRwczpcIjtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSByZXF1ZXN0LmhlYWRlcnMgPz8ge307XG4gICAgICAgICAgICBjb25zdCBleHBlY3RDb250aW51ZSA9IChoZWFkZXJzLkV4cGVjdCA/PyBoZWFkZXJzLmV4cGVjdCkgPT09IFwiMTAwLWNvbnRpbnVlXCI7XG4gICAgICAgICAgICBsZXQgYWdlbnQgPSBpc1NTTCA/IGNvbmZpZy5odHRwc0FnZW50IDogY29uZmlnLmh0dHBBZ2VudDtcbiAgICAgICAgICAgIGlmIChleHBlY3RDb250aW51ZSAmJiAhdGhpcy5leHRlcm5hbEFnZW50KSB7XG4gICAgICAgICAgICAgICAgYWdlbnQgPSBuZXcgKGlzU1NMID8gaHR0cHMuQWdlbnQgOiBodHRwLkFnZW50KSh7XG4gICAgICAgICAgICAgICAgICAgIGtlZXBBbGl2ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG1heFNvY2tldHM6IEluZmluaXR5LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGltZW91dHMucHVzaCh0aW1pbmcuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zb2NrZXRXYXJuaW5nVGltZXN0YW1wID0gTm9kZUh0dHBIYW5kbGVyLmNoZWNrU29ja2V0VXNhZ2UoYWdlbnQsIHRoaXMuc29ja2V0V2FybmluZ1RpbWVzdGFtcCwgY29uZmlnLmxvZ2dlcik7XG4gICAgICAgICAgICB9LCBjb25maWcuc29ja2V0QWNxdWlzaXRpb25XYXJuaW5nVGltZW91dCA/PyAoY29uZmlnLnJlcXVlc3RUaW1lb3V0ID8/IDIwMDApICsgKGNvbmZpZy5jb25uZWN0aW9uVGltZW91dCA/PyAxMDAwKSkpO1xuICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBxdWVyeXN0cmluZ0J1aWxkZXIuYnVpbGRRdWVyeVN0cmluZyhyZXF1ZXN0LnF1ZXJ5IHx8IHt9KTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3QudXNlcm5hbWUgIT0gbnVsbCB8fCByZXF1ZXN0LnBhc3N3b3JkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VybmFtZSA9IHJlcXVlc3QudXNlcm5hbWUgPz8gXCJcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXNzd29yZCA9IHJlcXVlc3QucGFzc3dvcmQgPz8gXCJcIjtcbiAgICAgICAgICAgICAgICBhdXRoID0gYCR7dXNlcm5hbWV9OiR7cGFzc3dvcmR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBwYXRoID0gcmVxdWVzdC5wYXRoO1xuICAgICAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgcGF0aCArPSBgPyR7cXVlcnlTdHJpbmd9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0LmZyYWdtZW50KSB7XG4gICAgICAgICAgICAgICAgcGF0aCArPSBgIyR7cmVxdWVzdC5mcmFnbWVudH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGhvc3RuYW1lID0gcmVxdWVzdC5ob3N0bmFtZSA/PyBcIlwiO1xuICAgICAgICAgICAgaWYgKGhvc3RuYW1lWzBdID09PSBcIltcIiAmJiBob3N0bmFtZS5lbmRzV2l0aChcIl1cIikpIHtcbiAgICAgICAgICAgICAgICBob3N0bmFtZSA9IHJlcXVlc3QuaG9zdG5hbWUuc2xpY2UoMSwgLTEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaG9zdG5hbWUgPSByZXF1ZXN0Lmhvc3RuYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgbm9kZUh0dHBzT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiByZXF1ZXN0LmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgaG9zdDogaG9zdG5hbWUsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgICAgIHBvcnQ6IHJlcXVlc3QucG9ydCxcbiAgICAgICAgICAgICAgICBhZ2VudCxcbiAgICAgICAgICAgICAgICBhdXRoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RGdW5jID0gaXNTU0wgPyBodHRwcy5yZXF1ZXN0IDogaHR0cC5yZXF1ZXN0O1xuICAgICAgICAgICAgY29uc3QgcmVxID0gcmVxdWVzdEZ1bmMobm9kZUh0dHBzT3B0aW9ucywgKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGh0dHBSZXNwb25zZSA9IG5ldyBwcm90b2NvbEh0dHAuSHR0cFJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogcmVzLnN0YXR1c0NvZGUgfHwgLTEsXG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbjogcmVzLnN0YXR1c01lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGdldFRyYW5zZm9ybWVkSGVhZGVycyhyZXMuaGVhZGVycyksXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHJlcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHsgcmVzcG9uc2U6IGh0dHBSZXNwb25zZSB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVxLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChOT0RFSlNfVElNRU9VVF9FUlJPUl9DT0RFUy5pbmNsdWRlcyhlcnIuY29kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KE9iamVjdC5hc3NpZ24oZXJyLCB7IG5hbWU6IFwiVGltZW91dEVycm9yXCIgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYWJvcnRTaWduYWwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvbkFib3J0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXEuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhYm9ydEVycm9yID0gbmV3IEVycm9yKFwiUmVxdWVzdCBhYm9ydGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICBhYm9ydEVycm9yLm5hbWUgPSBcIkFib3J0RXJyb3JcIjtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGFib3J0RXJyb3IpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbmFsID0gYWJvcnRTaWduYWw7XG4gICAgICAgICAgICAgICAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXEub25jZShcImNsb3NlXCIsICgpID0+IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRTaWduYWwub25hYm9ydCA9IG9uQWJvcnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZWZmZWN0aXZlUmVxdWVzdFRpbWVvdXQgPSByZXF1ZXN0VGltZW91dCA/PyBjb25maWcucmVxdWVzdFRpbWVvdXQ7XG4gICAgICAgICAgICB0aW1lb3V0cy5wdXNoKHNldENvbm5lY3Rpb25UaW1lb3V0KHJlcSwgcmVqZWN0LCBjb25maWcuY29ubmVjdGlvblRpbWVvdXQpKTtcbiAgICAgICAgICAgIHRpbWVvdXRzLnB1c2goc2V0UmVxdWVzdFRpbWVvdXQocmVxLCByZWplY3QsIGVmZmVjdGl2ZVJlcXVlc3RUaW1lb3V0LCBjb25maWcudGhyb3dPblJlcXVlc3RUaW1lb3V0LCBjb25maWcubG9nZ2VyID8/IGNvbnNvbGUpKTtcbiAgICAgICAgICAgIHRpbWVvdXRzLnB1c2goc2V0U29ja2V0VGltZW91dChyZXEsIHJlamVjdCwgY29uZmlnLnNvY2tldFRpbWVvdXQpKTtcbiAgICAgICAgICAgIGNvbnN0IGh0dHBBZ2VudCA9IG5vZGVIdHRwc09wdGlvbnMuYWdlbnQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGh0dHBBZ2VudCA9PT0gXCJvYmplY3RcIiAmJiBcImtlZXBBbGl2ZVwiIGluIGh0dHBBZ2VudCkge1xuICAgICAgICAgICAgICAgIHRpbWVvdXRzLnB1c2goc2V0U29ja2V0S2VlcEFsaXZlKHJlcSwge1xuICAgICAgICAgICAgICAgICAgICBrZWVwQWxpdmU6IGh0dHBBZ2VudC5rZWVwQWxpdmUsXG4gICAgICAgICAgICAgICAgICAgIGtlZXBBbGl2ZU1zZWNzOiBodHRwQWdlbnQua2VlcEFsaXZlTXNlY3MsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd3JpdGVSZXF1ZXN0Qm9keVByb21pc2UgPSB3cml0ZVJlcXVlc3RCb2R5KHJlcSwgcmVxdWVzdCwgZWZmZWN0aXZlUmVxdWVzdFRpbWVvdXQsIHRoaXMuZXh0ZXJuYWxBZ2VudCkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aW1lb3V0cy5mb3JFYWNoKHRpbWluZy5jbGVhclRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVqZWN0KGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB1cGRhdGVIdHRwQ2xpZW50Q29uZmlnKGtleSwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb25maWcgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuY29uZmlnUHJvdmlkZXIgPSB0aGlzLmNvbmZpZ1Byb3ZpZGVyLnRoZW4oKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICAgICAgW2tleV06IHZhbHVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGh0dHBIYW5kbGVyQ29uZmlncygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnID8/IHt9O1xuICAgIH1cbn1cblxuY2xhc3MgTm9kZUh0dHAyQ29ubmVjdGlvblBvb2wge1xuICAgIHNlc3Npb25zID0gW107XG4gICAgY29uc3RydWN0b3Ioc2Vzc2lvbnMpIHtcbiAgICAgICAgdGhpcy5zZXNzaW9ucyA9IHNlc3Npb25zID8/IFtdO1xuICAgIH1cbiAgICBwb2xsKCkge1xuICAgICAgICBpZiAodGhpcy5zZXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9ucy5zaGlmdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9mZmVyTGFzdChzZXNzaW9uKSB7XG4gICAgICAgIHRoaXMuc2Vzc2lvbnMucHVzaChzZXNzaW9uKTtcbiAgICB9XG4gICAgY29udGFpbnMoc2Vzc2lvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9ucy5pbmNsdWRlcyhzZXNzaW9uKTtcbiAgICB9XG4gICAgcmVtb3ZlKHNlc3Npb24pIHtcbiAgICAgICAgdGhpcy5zZXNzaW9ucyA9IHRoaXMuc2Vzc2lvbnMuZmlsdGVyKChzKSA9PiBzICE9PSBzZXNzaW9uKTtcbiAgICB9XG4gICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlc3Npb25zW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICB9XG4gICAgZGVzdHJveShjb25uZWN0aW9uKSB7XG4gICAgICAgIGZvciAoY29uc3Qgc2Vzc2lvbiBvZiB0aGlzLnNlc3Npb25zKSB7XG4gICAgICAgICAgICBpZiAoc2Vzc2lvbiA9PT0gY29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmICghc2Vzc2lvbi5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBOb2RlSHR0cDJDb25uZWN0aW9uTWFuYWdlciB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgICAgICBpZiAodGhpcy5jb25maWcubWF4Q29uY3VycmVuY3kgJiYgdGhpcy5jb25maWcubWF4Q29uY3VycmVuY3kgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJtYXhDb25jdXJyZW5jeSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25maWc7XG4gICAgc2Vzc2lvbkNhY2hlID0gbmV3IE1hcCgpO1xuICAgIGxlYXNlKHJlcXVlc3RDb250ZXh0LCBjb25uZWN0aW9uQ29uZmlndXJhdGlvbikge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybFN0cmluZyhyZXF1ZXN0Q29udGV4dCk7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nUG9vbCA9IHRoaXMuc2Vzc2lvbkNhY2hlLmdldCh1cmwpO1xuICAgICAgICBpZiAoZXhpc3RpbmdQb29sKSB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ1Nlc3Npb24gPSBleGlzdGluZ1Bvb2wucG9sbCgpO1xuICAgICAgICAgICAgaWYgKGV4aXN0aW5nU2Vzc2lvbiAmJiAhdGhpcy5jb25maWcuZGlzYWJsZUNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nU2Vzc2lvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZXNzaW9uID0gaHR0cDIuY29ubmVjdCh1cmwpO1xuICAgICAgICBpZiAodGhpcy5jb25maWcubWF4Q29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIHNlc3Npb24uc2V0dGluZ3MoeyBtYXhDb25jdXJyZW50U3RyZWFtczogdGhpcy5jb25maWcubWF4Q29uY3VycmVuY3kgfSwgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbCB0byBzZXQgbWF4Q29uY3VycmVudFN0cmVhbXMgdG8gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcubWF4Q29uY3VycmVuY3kgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJ3aGVuIGNyZWF0aW5nIG5ldyBzZXNzaW9uIGZvciBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q29udGV4dC5kZXN0aW5hdGlvbi50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzZXNzaW9uLnVucmVmKCk7XG4gICAgICAgIGNvbnN0IGRlc3Ryb3lTZXNzaW9uQ2IgPSAoKSA9PiB7XG4gICAgICAgICAgICBzZXNzaW9uLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlU2Vzc2lvbih1cmwsIHNlc3Npb24pO1xuICAgICAgICB9O1xuICAgICAgICBzZXNzaW9uLm9uKFwiZ29hd2F5XCIsIGRlc3Ryb3lTZXNzaW9uQ2IpO1xuICAgICAgICBzZXNzaW9uLm9uKFwiZXJyb3JcIiwgZGVzdHJveVNlc3Npb25DYik7XG4gICAgICAgIHNlc3Npb24ub24oXCJmcmFtZUVycm9yXCIsIGRlc3Ryb3lTZXNzaW9uQ2IpO1xuICAgICAgICBzZXNzaW9uLm9uKFwiY2xvc2VcIiwgKCkgPT4gdGhpcy5kZWxldGVTZXNzaW9uKHVybCwgc2Vzc2lvbikpO1xuICAgICAgICBpZiAoY29ubmVjdGlvbkNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXQpIHtcbiAgICAgICAgICAgIHNlc3Npb24uc2V0VGltZW91dChjb25uZWN0aW9uQ29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dCwgZGVzdHJveVNlc3Npb25DYik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29ubmVjdGlvblBvb2wgPSB0aGlzLnNlc3Npb25DYWNoZS5nZXQodXJsKSB8fCBuZXcgTm9kZUh0dHAyQ29ubmVjdGlvblBvb2woKTtcbiAgICAgICAgY29ubmVjdGlvblBvb2wub2ZmZXJMYXN0KHNlc3Npb24pO1xuICAgICAgICB0aGlzLnNlc3Npb25DYWNoZS5zZXQodXJsLCBjb25uZWN0aW9uUG9vbCk7XG4gICAgICAgIHJldHVybiBzZXNzaW9uO1xuICAgIH1cbiAgICBkZWxldGVTZXNzaW9uKGF1dGhvcml0eSwgc2Vzc2lvbikge1xuICAgICAgICBjb25zdCBleGlzdGluZ0Nvbm5lY3Rpb25Qb29sID0gdGhpcy5zZXNzaW9uQ2FjaGUuZ2V0KGF1dGhvcml0eSk7XG4gICAgICAgIGlmICghZXhpc3RpbmdDb25uZWN0aW9uUG9vbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZXhpc3RpbmdDb25uZWN0aW9uUG9vbC5jb250YWlucyhzZXNzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV4aXN0aW5nQ29ubmVjdGlvblBvb2wucmVtb3ZlKHNlc3Npb24pO1xuICAgICAgICB0aGlzLnNlc3Npb25DYWNoZS5zZXQoYXV0aG9yaXR5LCBleGlzdGluZ0Nvbm5lY3Rpb25Qb29sKTtcbiAgICB9XG4gICAgcmVsZWFzZShyZXF1ZXN0Q29udGV4dCwgc2Vzc2lvbikge1xuICAgICAgICBjb25zdCBjYWNoZUtleSA9IHRoaXMuZ2V0VXJsU3RyaW5nKHJlcXVlc3RDb250ZXh0KTtcbiAgICAgICAgdGhpcy5zZXNzaW9uQ2FjaGUuZ2V0KGNhY2hlS2V5KT8ub2ZmZXJMYXN0KHNlc3Npb24pO1xuICAgIH1cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGNvbm5lY3Rpb25Qb29sXSBvZiB0aGlzLnNlc3Npb25DYWNoZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzZXNzaW9uIG9mIGNvbm5lY3Rpb25Qb29sKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzZXNzaW9uLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29ubmVjdGlvblBvb2wucmVtb3ZlKHNlc3Npb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uQ2FjaGUuZGVsZXRlKGtleSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0TWF4Q29uY3VycmVudFN0cmVhbXMobWF4Q29uY3VycmVudFN0cmVhbXMpIHtcbiAgICAgICAgaWYgKG1heENvbmN1cnJlbnRTdHJlYW1zICYmIG1heENvbmN1cnJlbnRTdHJlYW1zIDw9IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwibWF4Q29uY3VycmVudFN0cmVhbXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb25maWcubWF4Q29uY3VycmVuY3kgPSBtYXhDb25jdXJyZW50U3RyZWFtcztcbiAgICB9XG4gICAgc2V0RGlzYWJsZUNvbmN1cnJlbnRTdHJlYW1zKGRpc2FibGVDb25jdXJyZW50U3RyZWFtcykge1xuICAgICAgICB0aGlzLmNvbmZpZy5kaXNhYmxlQ29uY3VycmVuY3kgPSBkaXNhYmxlQ29uY3VycmVudFN0cmVhbXM7XG4gICAgfVxuICAgIGdldFVybFN0cmluZyhyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybiByZXF1ZXN0LmRlc3RpbmF0aW9uLnRvU3RyaW5nKCk7XG4gICAgfVxufVxuXG5jbGFzcyBOb2RlSHR0cDJIYW5kbGVyIHtcbiAgICBjb25maWc7XG4gICAgY29uZmlnUHJvdmlkZXI7XG4gICAgbWV0YWRhdGEgPSB7IGhhbmRsZXJQcm90b2NvbDogXCJoMlwiIH07XG4gICAgY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgTm9kZUh0dHAyQ29ubmVjdGlvbk1hbmFnZXIoe30pO1xuICAgIHN0YXRpYyBjcmVhdGUoaW5zdGFuY2VPck9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZU9yT3B0aW9ucz8uaGFuZGxlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZU9yT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IE5vZGVIdHRwMkhhbmRsZXIoaW5zdGFuY2VPck9wdGlvbnMpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuY29uZmlnUHJvdmlkZXIgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMoKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigob3B0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG9wdHMgfHwge30pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShvcHRpb25zIHx8IHt9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgICBhc3luYyBoYW5kbGUocmVxdWVzdCwgeyBhYm9ydFNpZ25hbCwgcmVxdWVzdFRpbWVvdXQgfSA9IHt9KSB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnID0gYXdhaXQgdGhpcy5jb25maWdQcm92aWRlcjtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuc2V0RGlzYWJsZUNvbmN1cnJlbnRTdHJlYW1zKHRoaXMuY29uZmlnLmRpc2FibGVDb25jdXJyZW50U3RyZWFtcyB8fCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5jb25maWcubWF4Q29uY3VycmVudFN0cmVhbXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLnNldE1heENvbmN1cnJlbnRTdHJlYW1zKHRoaXMuY29uZmlnLm1heENvbmN1cnJlbnRTdHJlYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHJlcXVlc3RUaW1lb3V0OiBjb25maWdSZXF1ZXN0VGltZW91dCwgZGlzYWJsZUNvbmN1cnJlbnRTdHJlYW1zIH0gPSB0aGlzLmNvbmZpZztcbiAgICAgICAgY29uc3QgZWZmZWN0aXZlUmVxdWVzdFRpbWVvdXQgPSByZXF1ZXN0VGltZW91dCA/PyBjb25maWdSZXF1ZXN0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChfcmVzb2x2ZSwgX3JlamVjdCkgPT4ge1xuICAgICAgICAgICAgbGV0IGZ1bGZpbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IHdyaXRlUmVxdWVzdEJvZHlQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZSA9IGFzeW5jIChhcmcpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB3cml0ZVJlcXVlc3RCb2R5UHJvbWlzZTtcbiAgICAgICAgICAgICAgICBfcmVzb2x2ZShhcmcpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHJlamVjdCA9IGFzeW5jIChhcmcpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB3cml0ZVJlcXVlc3RCb2R5UHJvbWlzZTtcbiAgICAgICAgICAgICAgICBfcmVqZWN0KGFyZyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGFib3J0U2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgZnVsZmlsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBhYm9ydEVycm9yID0gbmV3IEVycm9yKFwiUmVxdWVzdCBhYm9ydGVkXCIpO1xuICAgICAgICAgICAgICAgIGFib3J0RXJyb3IubmFtZSA9IFwiQWJvcnRFcnJvclwiO1xuICAgICAgICAgICAgICAgIHJlamVjdChhYm9ydEVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IGhvc3RuYW1lLCBtZXRob2QsIHBvcnQsIHByb3RvY29sLCBxdWVyeSB9ID0gcmVxdWVzdDtcbiAgICAgICAgICAgIGxldCBhdXRoID0gXCJcIjtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0LnVzZXJuYW1lICE9IG51bGwgfHwgcmVxdWVzdC5wYXNzd29yZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXNlcm5hbWUgPSByZXF1ZXN0LnVzZXJuYW1lID8/IFwiXCI7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFzc3dvcmQgPSByZXF1ZXN0LnBhc3N3b3JkID8/IFwiXCI7XG4gICAgICAgICAgICAgICAgYXV0aCA9IGAke3VzZXJuYW1lfToke3Bhc3N3b3JkfUBgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXV0aG9yaXR5ID0gYCR7cHJvdG9jb2x9Ly8ke2F1dGh9JHtob3N0bmFtZX0ke3BvcnQgPyBgOiR7cG9ydH1gIDogXCJcIn1gO1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdENvbnRleHQgPSB7IGRlc3RpbmF0aW9uOiBuZXcgVVJMKGF1dGhvcml0eSkgfTtcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmxlYXNlKHJlcXVlc3RDb250ZXh0LCB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdFRpbWVvdXQ6IHRoaXMuY29uZmlnPy5zZXNzaW9uVGltZW91dCxcbiAgICAgICAgICAgICAgICBkaXNhYmxlQ29uY3VycmVudFN0cmVhbXM6IGRpc2FibGVDb25jdXJyZW50U3RyZWFtcyB8fCBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgcmVqZWN0V2l0aERlc3Ryb3kgPSAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRpc2FibGVDb25jdXJyZW50U3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3lTZXNzaW9uKHNlc3Npb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdWxmaWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcXVlcnlzdHJpbmdCdWlsZGVyLmJ1aWxkUXVlcnlTdHJpbmcocXVlcnkgfHwge30pO1xuICAgICAgICAgICAgbGV0IHBhdGggPSByZXF1ZXN0LnBhdGg7XG4gICAgICAgICAgICBpZiAocXVlcnlTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICBwYXRoICs9IGA/JHtxdWVyeVN0cmluZ31gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3QuZnJhZ21lbnQpIHtcbiAgICAgICAgICAgICAgICBwYXRoICs9IGAjJHtyZXF1ZXN0LmZyYWdtZW50fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXEgPSBzZXNzaW9uLnJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgIC4uLnJlcXVlc3QuaGVhZGVycyxcbiAgICAgICAgICAgICAgICBbaHR0cDIuY29uc3RhbnRzLkhUVFAyX0hFQURFUl9QQVRIXTogcGF0aCxcbiAgICAgICAgICAgICAgICBbaHR0cDIuY29uc3RhbnRzLkhUVFAyX0hFQURFUl9NRVRIT0RdOiBtZXRob2QsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNlc3Npb24ucmVmKCk7XG4gICAgICAgICAgICByZXEub24oXCJyZXNwb25zZVwiLCAoaGVhZGVycykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGh0dHBSZXNwb25zZSA9IG5ldyBwcm90b2NvbEh0dHAuSHR0cFJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogaGVhZGVyc1tcIjpzdGF0dXNcIl0gfHwgLTEsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGdldFRyYW5zZm9ybWVkSGVhZGVycyhoZWFkZXJzKSxcbiAgICAgICAgICAgICAgICAgICAgYm9keTogcmVxLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZ1bGZpbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7IHJlc3BvbnNlOiBodHRwUmVzcG9uc2UgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGRpc2FibGVDb25jdXJyZW50U3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZGVsZXRlU2Vzc2lvbihhdXRob3JpdHksIHNlc3Npb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGVmZmVjdGl2ZVJlcXVlc3RUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgcmVxLnNldFRpbWVvdXQoZWZmZWN0aXZlUmVxdWVzdFRpbWVvdXQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVxLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRFcnJvciA9IG5ldyBFcnJvcihgU3RyZWFtIHRpbWVkIG91dCBiZWNhdXNlIG9mIG5vIGFjdGl2aXR5IGZvciAke2VmZmVjdGl2ZVJlcXVlc3RUaW1lb3V0fSBtc2ApO1xuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0RXJyb3IubmFtZSA9IFwiVGltZW91dEVycm9yXCI7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdFdpdGhEZXN0cm95KHRpbWVvdXRFcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWJvcnRTaWduYWwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvbkFib3J0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXEuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWJvcnRFcnJvciA9IG5ldyBFcnJvcihcIlJlcXVlc3QgYWJvcnRlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRFcnJvci5uYW1lID0gXCJBYm9ydEVycm9yXCI7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdFdpdGhEZXN0cm95KGFib3J0RXJyb3IpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbmFsID0gYWJvcnRTaWduYWw7XG4gICAgICAgICAgICAgICAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXEub25jZShcImNsb3NlXCIsICgpID0+IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRTaWduYWwub25hYm9ydCA9IG9uQWJvcnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVxLm9uKFwiZnJhbWVFcnJvclwiLCAodHlwZSwgY29kZSwgaWQpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3RXaXRoRGVzdHJveShuZXcgRXJyb3IoYEZyYW1lIHR5cGUgaWQgJHt0eXBlfSBpbiBzdHJlYW0gaWQgJHtpZH0gaGFzIGZhaWxlZCB3aXRoIGNvZGUgJHtjb2RlfS5gKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlcS5vbihcImVycm9yXCIsIHJlamVjdFdpdGhEZXN0cm95KTtcbiAgICAgICAgICAgIHJlcS5vbihcImFib3J0ZWRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdFdpdGhEZXN0cm95KG5ldyBFcnJvcihgSFRUUC8yIHN0cmVhbSBpcyBhYm5vcm1hbGx5IGFib3J0ZWQgaW4gbWlkLWNvbW11bmljYXRpb24gd2l0aCByZXN1bHQgY29kZSAke3JlcS5yc3RDb2RlfS5gKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlcS5vbihcImNsb3NlXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uLnVucmVmKCk7XG4gICAgICAgICAgICAgICAgaWYgKGRpc2FibGVDb25jdXJyZW50U3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFmdWxmaWxsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0V2l0aERlc3Ryb3kobmV3IEVycm9yKFwiVW5leHBlY3RlZCBlcnJvcjogaHR0cDIgcmVxdWVzdCBkaWQgbm90IGdldCBhIHJlc3BvbnNlXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHdyaXRlUmVxdWVzdEJvZHlQcm9taXNlID0gd3JpdGVSZXF1ZXN0Qm9keShyZXEsIHJlcXVlc3QsIGVmZmVjdGl2ZVJlcXVlc3RUaW1lb3V0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHVwZGF0ZUh0dHBDbGllbnRDb25maWcoa2V5LCB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5jb25maWdQcm92aWRlciA9IHRoaXMuY29uZmlnUHJvdmlkZXIudGhlbigoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgICAgICAgICBba2V5XTogdmFsdWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaHR0cEhhbmRsZXJDb25maWdzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcgPz8ge307XG4gICAgfVxuICAgIGRlc3Ryb3lTZXNzaW9uKHNlc3Npb24pIHtcbiAgICAgICAgaWYgKCFzZXNzaW9uLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgc2Vzc2lvbi5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIENvbGxlY3RvciBleHRlbmRzIHN0cmVhbS5Xcml0YWJsZSB7XG4gICAgYnVmZmVyZWRCeXRlcyA9IFtdO1xuICAgIF93cml0ZShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuYnVmZmVyZWRCeXRlcy5wdXNoKGNodW5rKTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG59XG5cbmNvbnN0IHN0cmVhbUNvbGxlY3RvciA9IChzdHJlYW0pID0+IHtcbiAgICBpZiAoaXNSZWFkYWJsZVN0cmVhbUluc3RhbmNlKHN0cmVhbSkpIHtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3RSZWFkYWJsZVN0cmVhbShzdHJlYW0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBjb2xsZWN0b3IgPSBuZXcgQ29sbGVjdG9yKCk7XG4gICAgICAgIHN0cmVhbS5waXBlKGNvbGxlY3Rvcik7XG4gICAgICAgIHN0cmVhbS5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbGxlY3Rvci5lbmQoKTtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29sbGVjdG9yLm9uKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICAgICAgY29sbGVjdG9yLm9uKFwiZmluaXNoXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmNvbmNhdCh0aGlzLmJ1ZmZlcmVkQnl0ZXMpKTtcbiAgICAgICAgICAgIHJlc29sdmUoYnl0ZXMpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5jb25zdCBpc1JlYWRhYmxlU3RyZWFtSW5zdGFuY2UgPSAoc3RyZWFtKSA9PiB0eXBlb2YgUmVhZGFibGVTdHJlYW0gPT09IFwiZnVuY3Rpb25cIiAmJiBzdHJlYW0gaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbTtcbmFzeW5jIGZ1bmN0aW9uIGNvbGxlY3RSZWFkYWJsZVN0cmVhbShzdHJlYW0pIHtcbiAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgbGV0IGlzRG9uZSA9IGZhbHNlO1xuICAgIGxldCBsZW5ndGggPSAwO1xuICAgIHdoaWxlICghaXNEb25lKSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgY2h1bmtzLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgbGVuZ3RoICs9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBpc0RvbmUgPSBkb25lO1xuICAgIH1cbiAgICBjb25zdCBjb2xsZWN0ZWQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzKSB7XG4gICAgICAgIGNvbGxlY3RlZC5zZXQoY2h1bmssIG9mZnNldCk7XG4gICAgICAgIG9mZnNldCArPSBjaHVuay5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiBjb2xsZWN0ZWQ7XG59XG5cbmV4cG9ydHMuREVGQVVMVF9SRVFVRVNUX1RJTUVPVVQgPSBERUZBVUxUX1JFUVVFU1RfVElNRU9VVDtcbmV4cG9ydHMuTm9kZUh0dHAySGFuZGxlciA9IE5vZGVIdHRwMkhhbmRsZXI7XG5leHBvcnRzLk5vZGVIdHRwSGFuZGxlciA9IE5vZGVIdHRwSGFuZGxlcjtcbmV4cG9ydHMuc3RyZWFtQ29sbGVjdG9yID0gc3RyZWFtQ29sbGVjdG9yO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciBwcm90b2NvbEh0dHAgPSByZXF1aXJlKCdAc21pdGh5L3Byb3RvY29sLWh0dHAnKTtcbnZhciBxdWVyeXN0cmluZ0J1aWxkZXIgPSByZXF1aXJlKCdAc21pdGh5L3F1ZXJ5c3RyaW5nLWJ1aWxkZXInKTtcbnZhciB1dGlsQmFzZTY0ID0gcmVxdWlyZSgnQHNtaXRoeS91dGlsLWJhc2U2NCcpO1xuXG5mdW5jdGlvbiBjcmVhdGVSZXF1ZXN0KHVybCwgcmVxdWVzdE9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodXJsLCByZXF1ZXN0T3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RUaW1lb3V0KHRpbWVvdXRJbk1zID0gMCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmICh0aW1lb3V0SW5Ncykge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZW91dEVycm9yID0gbmV3IEVycm9yKGBSZXF1ZXN0IGRpZCBub3QgY29tcGxldGUgd2l0aGluICR7dGltZW91dEluTXN9IG1zYCk7XG4gICAgICAgICAgICAgICAgdGltZW91dEVycm9yLm5hbWUgPSBcIlRpbWVvdXRFcnJvclwiO1xuICAgICAgICAgICAgICAgIHJlamVjdCh0aW1lb3V0RXJyb3IpO1xuICAgICAgICAgICAgfSwgdGltZW91dEluTXMpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmNvbnN0IGtlZXBBbGl2ZVN1cHBvcnQgPSB7XG4gICAgc3VwcG9ydGVkOiB1bmRlZmluZWQsXG59O1xuY2xhc3MgRmV0Y2hIdHRwSGFuZGxlciB7XG4gICAgY29uZmlnO1xuICAgIGNvbmZpZ1Byb3ZpZGVyO1xuICAgIHN0YXRpYyBjcmVhdGUoaW5zdGFuY2VPck9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZU9yT3B0aW9ucz8uaGFuZGxlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZU9yT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEZldGNoSHR0cEhhbmRsZXIoaW5zdGFuY2VPck9wdGlvbnMpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ1Byb3ZpZGVyID0gb3B0aW9ucygpLnRoZW4oKG9wdHMpID0+IG9wdHMgfHwge30pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb25maWcgPSBvcHRpb25zID8/IHt9O1xuICAgICAgICAgICAgdGhpcy5jb25maWdQcm92aWRlciA9IFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtlZXBBbGl2ZVN1cHBvcnQuc3VwcG9ydGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGtlZXBBbGl2ZVN1cHBvcnQuc3VwcG9ydGVkID0gQm9vbGVhbih0eXBlb2YgUmVxdWVzdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBcImtlZXBhbGl2ZVwiIGluIGNyZWF0ZVJlcXVlc3QoXCJodHRwczovL1s6OjFdXCIpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkZXN0cm95KCkge1xuICAgIH1cbiAgICBhc3luYyBoYW5kbGUocmVxdWVzdCwgeyBhYm9ydFNpZ25hbCwgcmVxdWVzdFRpbWVvdXQ6IHJlcXVlc3RUaW1lb3V0JDEgfSA9IHt9KSB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnID0gYXdhaXQgdGhpcy5jb25maWdQcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXF1ZXN0VGltZW91dEluTXMgPSByZXF1ZXN0VGltZW91dCQxID8/IHRoaXMuY29uZmlnLnJlcXVlc3RUaW1lb3V0O1xuICAgICAgICBjb25zdCBrZWVwQWxpdmUgPSB0aGlzLmNvbmZpZy5rZWVwQWxpdmUgPT09IHRydWU7XG4gICAgICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdGhpcy5jb25maWcuY3JlZGVudGlhbHM7XG4gICAgICAgIGlmIChhYm9ydFNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgICAgY29uc3QgYWJvcnRFcnJvciA9IG5ldyBFcnJvcihcIlJlcXVlc3QgYWJvcnRlZFwiKTtcbiAgICAgICAgICAgIGFib3J0RXJyb3IubmFtZSA9IFwiQWJvcnRFcnJvclwiO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGFib3J0RXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwYXRoID0gcmVxdWVzdC5wYXRoO1xuICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IHF1ZXJ5c3RyaW5nQnVpbGRlci5idWlsZFF1ZXJ5U3RyaW5nKHJlcXVlc3QucXVlcnkgfHwge30pO1xuICAgICAgICBpZiAocXVlcnlTdHJpbmcpIHtcbiAgICAgICAgICAgIHBhdGggKz0gYD8ke3F1ZXJ5U3RyaW5nfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcXVlc3QuZnJhZ21lbnQpIHtcbiAgICAgICAgICAgIHBhdGggKz0gYCMke3JlcXVlc3QuZnJhZ21lbnR9YDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYXV0aCA9IFwiXCI7XG4gICAgICAgIGlmIChyZXF1ZXN0LnVzZXJuYW1lICE9IG51bGwgfHwgcmVxdWVzdC5wYXNzd29yZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCB1c2VybmFtZSA9IHJlcXVlc3QudXNlcm5hbWUgPz8gXCJcIjtcbiAgICAgICAgICAgIGNvbnN0IHBhc3N3b3JkID0gcmVxdWVzdC5wYXNzd29yZCA/PyBcIlwiO1xuICAgICAgICAgICAgYXV0aCA9IGAke3VzZXJuYW1lfToke3Bhc3N3b3JkfUBgO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgcG9ydCwgbWV0aG9kIH0gPSByZXF1ZXN0O1xuICAgICAgICBjb25zdCB1cmwgPSBgJHtyZXF1ZXN0LnByb3RvY29sfS8vJHthdXRofSR7cmVxdWVzdC5ob3N0bmFtZX0ke3BvcnQgPyBgOiR7cG9ydH1gIDogXCJcIn0ke3BhdGh9YDtcbiAgICAgICAgY29uc3QgYm9keSA9IG1ldGhvZCA9PT0gXCJHRVRcIiB8fCBtZXRob2QgPT09IFwiSEVBRFwiID8gdW5kZWZpbmVkIDogcmVxdWVzdC5ib2R5O1xuICAgICAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyhyZXF1ZXN0LmhlYWRlcnMpLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICBjcmVkZW50aWFscyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnPy5jYWNoZSkge1xuICAgICAgICAgICAgcmVxdWVzdE9wdGlvbnMuY2FjaGUgPSB0aGlzLmNvbmZpZy5jYWNoZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm9keSkge1xuICAgICAgICAgICAgcmVxdWVzdE9wdGlvbnMuZHVwbGV4ID0gXCJoYWxmXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBBYm9ydENvbnRyb2xsZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zLnNpZ25hbCA9IGFib3J0U2lnbmFsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZWVwQWxpdmVTdXBwb3J0LnN1cHBvcnRlZCkge1xuICAgICAgICAgICAgcmVxdWVzdE9wdGlvbnMua2VlcGFsaXZlID0ga2VlcEFsaXZlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWcucmVxdWVzdEluaXQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihyZXF1ZXN0T3B0aW9ucywgdGhpcy5jb25maWcucmVxdWVzdEluaXQocmVxdWVzdCkpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZW1vdmVTaWduYWxFdmVudExpc3RlbmVyID0gKCkgPT4geyB9O1xuICAgICAgICBjb25zdCBmZXRjaFJlcXVlc3QgPSBjcmVhdGVSZXF1ZXN0KHVybCwgcmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICBjb25zdCByYWNlT2ZQcm9taXNlcyA9IFtcbiAgICAgICAgICAgIGZldGNoKGZldGNoUmVxdWVzdCkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZXRjaEhlYWRlcnMgPSByZXNwb25zZS5oZWFkZXJzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkSGVhZGVycyA9IHt9O1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFpciBvZiBmZXRjaEhlYWRlcnMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkSGVhZGVyc1twYWlyWzBdXSA9IHBhaXJbMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGhhc1JlYWRhYmxlU3RyZWFtID0gcmVzcG9uc2UuYm9keSAhPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNSZWFkYWJsZVN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuYmxvYigpLnRoZW4oKGJvZHkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZTogbmV3IHByb3RvY29sSHR0cC5IdHRwUmVzcG9uc2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRyYW5zZm9ybWVkSGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZTogbmV3IHByb3RvY29sSHR0cC5IdHRwUmVzcG9uc2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdHJhbnNmb3JtZWRIZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogcmVzcG9uc2UuYm9keSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcmVxdWVzdFRpbWVvdXQocmVxdWVzdFRpbWVvdXRJbk1zKSxcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKGFib3J0U2lnbmFsKSB7XG4gICAgICAgICAgICByYWNlT2ZQcm9taXNlcy5wdXNoKG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvbkFib3J0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhYm9ydEVycm9yID0gbmV3IEVycm9yKFwiUmVxdWVzdCBhYm9ydGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICBhYm9ydEVycm9yLm5hbWUgPSBcIkFib3J0RXJyb3JcIjtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGFib3J0RXJyb3IpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbmFsID0gYWJvcnRTaWduYWw7XG4gICAgICAgICAgICAgICAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVTaWduYWxFdmVudExpc3RlbmVyID0gKCkgPT4gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsLm9uYWJvcnQgPSBvbkFib3J0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yYWNlKHJhY2VPZlByb21pc2VzKS5maW5hbGx5KHJlbW92ZVNpZ25hbEV2ZW50TGlzdGVuZXIpO1xuICAgIH1cbiAgICB1cGRhdGVIdHRwQ2xpZW50Q29uZmlnKGtleSwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb25maWcgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuY29uZmlnUHJvdmlkZXIgPSB0aGlzLmNvbmZpZ1Byb3ZpZGVyLnRoZW4oKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgY29uZmlnW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBodHRwSGFuZGxlckNvbmZpZ3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZyA/PyB7fTtcbiAgICB9XG59XG5cbmNvbnN0IHN0cmVhbUNvbGxlY3RvciA9IGFzeW5jIChzdHJlYW0pID0+IHtcbiAgICBpZiAoKHR5cGVvZiBCbG9iID09PSBcImZ1bmN0aW9uXCIgJiYgc3RyZWFtIGluc3RhbmNlb2YgQmxvYikgfHwgc3RyZWFtLmNvbnN0cnVjdG9yPy5uYW1lID09PSBcIkJsb2JcIikge1xuICAgICAgICBpZiAoQmxvYi5wcm90b3R5cGUuYXJyYXlCdWZmZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGF3YWl0IHN0cmVhbS5hcnJheUJ1ZmZlcigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sbGVjdEJsb2Ioc3RyZWFtKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbGxlY3RTdHJlYW0oc3RyZWFtKTtcbn07XG5hc3luYyBmdW5jdGlvbiBjb2xsZWN0QmxvYihibG9iKSB7XG4gICAgY29uc3QgYmFzZTY0ID0gYXdhaXQgcmVhZFRvQmFzZTY0KGJsb2IpO1xuICAgIGNvbnN0IGFycmF5QnVmZmVyID0gdXRpbEJhc2U2NC5mcm9tQmFzZTY0KGJhc2U2NCk7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGNvbGxlY3RTdHJlYW0oc3RyZWFtKSB7XG4gICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpO1xuICAgIGxldCBpc0RvbmUgPSBmYWxzZTtcbiAgICBsZXQgbGVuZ3RoID0gMDtcbiAgICB3aGlsZSAoIWlzRG9uZSkge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGNodW5rcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIGxlbmd0aCArPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgaXNEb25lID0gZG9uZTtcbiAgICB9XG4gICAgY29uc3QgY29sbGVjdGVkID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcykge1xuICAgICAgICBjb2xsZWN0ZWQuc2V0KGNodW5rLCBvZmZzZXQpO1xuICAgICAgICBvZmZzZXQgKz0gY2h1bmsubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4gY29sbGVjdGVkO1xufVxuZnVuY3Rpb24gcmVhZFRvQmFzZTY0KGJsb2IpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlYWRlci5yZWFkeVN0YXRlICE9PSAyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoXCJSZWFkZXIgYWJvcnRlZCB0b28gZWFybHlcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gKHJlYWRlci5yZXN1bHQgPz8gXCJcIik7XG4gICAgICAgICAgICBjb25zdCBjb21tYUluZGV4ID0gcmVzdWx0LmluZGV4T2YoXCIsXCIpO1xuICAgICAgICAgICAgY29uc3QgZGF0YU9mZnNldCA9IGNvbW1hSW5kZXggPiAtMSA/IGNvbW1hSW5kZXggKyAxIDogcmVzdWx0Lmxlbmd0aDtcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LnN1YnN0cmluZyhkYXRhT2Zmc2V0KSk7XG4gICAgICAgIH07XG4gICAgICAgIHJlYWRlci5vbmFib3J0ID0gKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihcIlJlYWQgYWJvcnRlZFwiKSk7XG4gICAgICAgIHJlYWRlci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlYWRlci5lcnJvcik7XG4gICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xuICAgIH0pO1xufVxuXG5leHBvcnRzLkZldGNoSHR0cEhhbmRsZXIgPSBGZXRjaEh0dHBIYW5kbGVyO1xuZXhwb3J0cy5rZWVwQWxpdmVTdXBwb3J0ID0ga2VlcEFsaXZlU3VwcG9ydDtcbmV4cG9ydHMuc3RyZWFtQ29sbGVjdG9yID0gc3RyZWFtQ29sbGVjdG9yO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IFNIT1JUX1RPX0hFWCA9IHt9O1xuY29uc3QgSEVYX1RPX1NIT1JUID0ge307XG5mb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gICAgbGV0IGVuY29kZWRCeXRlID0gaS50b1N0cmluZygxNikudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoZW5jb2RlZEJ5dGUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGVuY29kZWRCeXRlID0gYDAke2VuY29kZWRCeXRlfWA7XG4gICAgfVxuICAgIFNIT1JUX1RPX0hFWFtpXSA9IGVuY29kZWRCeXRlO1xuICAgIEhFWF9UT19TSE9SVFtlbmNvZGVkQnl0ZV0gPSBpO1xufVxuZnVuY3Rpb24gZnJvbUhleChlbmNvZGVkKSB7XG4gICAgaWYgKGVuY29kZWQubGVuZ3RoICUgMiAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJIZXggZW5jb2RlZCBzdHJpbmdzIG11c3QgaGF2ZSBhbiBldmVuIG51bWJlciBsZW5ndGhcIik7XG4gICAgfVxuICAgIGNvbnN0IG91dCA9IG5ldyBVaW50OEFycmF5KGVuY29kZWQubGVuZ3RoIC8gMik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbmNvZGVkLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIGNvbnN0IGVuY29kZWRCeXRlID0gZW5jb2RlZC5zbGljZShpLCBpICsgMikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGVuY29kZWRCeXRlIGluIEhFWF9UT19TSE9SVCkge1xuICAgICAgICAgICAgb3V0W2kgLyAyXSA9IEhFWF9UT19TSE9SVFtlbmNvZGVkQnl0ZV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBkZWNvZGUgdW5yZWNvZ25pemVkIHNlcXVlbmNlICR7ZW5jb2RlZEJ5dGV9IGFzIGhleGFkZWNpbWFsYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbn1cbmZ1bmN0aW9uIHRvSGV4KGJ5dGVzKSB7XG4gICAgbGV0IG91dCA9IFwiXCI7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcy5ieXRlTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgb3V0ICs9IFNIT1JUX1RPX0hFWFtieXRlc1tpXV07XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydHMuZnJvbUhleCA9IGZyb21IZXg7XG5leHBvcnRzLnRvSGV4ID0gdG9IZXg7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZGtTdHJlYW1NaXhpbiA9IHZvaWQgMDtcbmNvbnN0IGZldGNoX2h0dHBfaGFuZGxlcl8xID0gcmVxdWlyZShcIkBzbWl0aHkvZmV0Y2gtaHR0cC1oYW5kbGVyXCIpO1xuY29uc3QgdXRpbF9iYXNlNjRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3V0aWwtYmFzZTY0XCIpO1xuY29uc3QgdXRpbF9oZXhfZW5jb2RpbmdfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3V0aWwtaGV4LWVuY29kaW5nXCIpO1xuY29uc3QgdXRpbF91dGY4XzEgPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLXV0ZjhcIik7XG5jb25zdCBzdHJlYW1fdHlwZV9jaGVja18xID0gcmVxdWlyZShcIi4vc3RyZWFtLXR5cGUtY2hlY2tcIik7XG5jb25zdCBFUlJfTVNHX1NUUkVBTV9IQVNfQkVFTl9UUkFOU0ZPUk1FRCA9IFwiVGhlIHN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIHRyYW5zZm9ybWVkLlwiO1xuY29uc3Qgc2RrU3RyZWFtTWl4aW4gPSAoc3RyZWFtKSA9PiB7XG4gICAgaWYgKCFpc0Jsb2JJbnN0YW5jZShzdHJlYW0pICYmICEoMCwgc3RyZWFtX3R5cGVfY2hlY2tfMS5pc1JlYWRhYmxlU3RyZWFtKShzdHJlYW0pKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBzdHJlYW0/Ll9fcHJvdG9fXz8uY29uc3RydWN0b3I/Lm5hbWUgfHwgc3RyZWFtO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc3RyZWFtIGltcGxlbWVudGF0aW9uLCBleHBlY3QgQmxvYiBvciBSZWFkYWJsZVN0cmVhbSwgZ290ICR7bmFtZX1gKTtcbiAgICB9XG4gICAgbGV0IHRyYW5zZm9ybWVkID0gZmFsc2U7XG4gICAgY29uc3QgdHJhbnNmb3JtVG9CeXRlQXJyYXkgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICh0cmFuc2Zvcm1lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUl9NU0dfU1RSRUFNX0hBU19CRUVOX1RSQU5TRk9STUVEKTtcbiAgICAgICAgfVxuICAgICAgICB0cmFuc2Zvcm1lZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBhd2FpdCAoMCwgZmV0Y2hfaHR0cF9oYW5kbGVyXzEuc3RyZWFtQ29sbGVjdG9yKShzdHJlYW0pO1xuICAgIH07XG4gICAgY29uc3QgYmxvYlRvV2ViU3RyZWFtID0gKGJsb2IpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBibG9iLnN0cmVhbSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgdHJhbnNmb3JtIHBheWxvYWQgQmxvYiB0byB3ZWIgc3RyZWFtLiBQbGVhc2UgbWFrZSBzdXJlIHRoZSBCbG9iLnN0cmVhbSgpIGlzIHBvbHlmaWxsZWQuXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiSWYgeW91IGFyZSB1c2luZyBSZWFjdCBOYXRpdmUsIHRoaXMgQVBJIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLCBzZWU6IGh0dHBzOi8vcmVhY3QtbmF0aXZlLmNhbm55LmlvL2ZlYXR1cmUtcmVxdWVzdHMvcC9mZXRjaC1zdHJlYW1pbmctYm9keVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmxvYi5zdHJlYW0oKTtcbiAgICB9O1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHN0cmVhbSwge1xuICAgICAgICB0cmFuc2Zvcm1Ub0J5dGVBcnJheTogdHJhbnNmb3JtVG9CeXRlQXJyYXksXG4gICAgICAgIHRyYW5zZm9ybVRvU3RyaW5nOiBhc3luYyAoZW5jb2RpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZiA9IGF3YWl0IHRyYW5zZm9ybVRvQnl0ZUFycmF5KCk7XG4gICAgICAgICAgICBpZiAoZW5jb2RpbmcgPT09IFwiYmFzZTY0XCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIHV0aWxfYmFzZTY0XzEudG9CYXNlNjQpKGJ1Zik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChlbmNvZGluZyA9PT0gXCJoZXhcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgdXRpbF9oZXhfZW5jb2RpbmdfMS50b0hleCkoYnVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQgfHwgZW5jb2RpbmcgPT09IFwidXRmOFwiIHx8IGVuY29kaW5nID09PSBcInV0Zi04XCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIHV0aWxfdXRmOF8xLnRvVXRmOCkoYnVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBUZXh0RGVjb2RlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcihlbmNvZGluZykuZGVjb2RlKGJ1Zik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUZXh0RGVjb2RlciBpcyBub3QgYXZhaWxhYmxlLCBwbGVhc2UgbWFrZSBzdXJlIHBvbHlmaWxsIGlzIHByb3ZpZGVkLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdHJhbnNmb3JtVG9XZWJTdHJlYW06ICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1lZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJfTVNHX1NUUkVBTV9IQVNfQkVFTl9UUkFOU0ZPUk1FRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoaXNCbG9iSW5zdGFuY2Uoc3RyZWFtKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBibG9iVG9XZWJTdHJlYW0oc3RyZWFtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCgwLCBzdHJlYW1fdHlwZV9jaGVja18xLmlzUmVhZGFibGVTdHJlYW0pKHN0cmVhbSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgdHJhbnNmb3JtIHBheWxvYWQgdG8gd2ViIHN0cmVhbSwgZ290ICR7c3RyZWFtfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xufTtcbmV4cG9ydHMuc2RrU3RyZWFtTWl4aW4gPSBzZGtTdHJlYW1NaXhpbjtcbmNvbnN0IGlzQmxvYkluc3RhbmNlID0gKHN0cmVhbSkgPT4gdHlwZW9mIEJsb2IgPT09IFwiZnVuY3Rpb25cIiAmJiBzdHJlYW0gaW5zdGFuY2VvZiBCbG9iO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2RrU3RyZWFtTWl4aW4gPSB2b2lkIDA7XG5jb25zdCBub2RlX2h0dHBfaGFuZGxlcl8xID0gcmVxdWlyZShcIkBzbWl0aHkvbm9kZS1odHRwLWhhbmRsZXJcIik7XG5jb25zdCB1dGlsX2J1ZmZlcl9mcm9tXzEgPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLWJ1ZmZlci1mcm9tXCIpO1xuY29uc3Qgc3RyZWFtXzEgPSByZXF1aXJlKFwic3RyZWFtXCIpO1xuY29uc3Qgc2RrX3N0cmVhbV9taXhpbl9icm93c2VyXzEgPSByZXF1aXJlKFwiLi9zZGstc3RyZWFtLW1peGluLmJyb3dzZXJcIik7XG5jb25zdCBFUlJfTVNHX1NUUkVBTV9IQVNfQkVFTl9UUkFOU0ZPUk1FRCA9IFwiVGhlIHN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIHRyYW5zZm9ybWVkLlwiO1xuY29uc3Qgc2RrU3RyZWFtTWl4aW4gPSAoc3RyZWFtKSA9PiB7XG4gICAgaWYgKCEoc3RyZWFtIGluc3RhbmNlb2Ygc3RyZWFtXzEuUmVhZGFibGUpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gKDAsIHNka19zdHJlYW1fbWl4aW5fYnJvd3Nlcl8xLnNka1N0cmVhbU1peGluKShzdHJlYW0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gc3RyZWFtPy5fX3Byb3RvX18/LmNvbnN0cnVjdG9yPy5uYW1lIHx8IHN0cmVhbTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBzdHJlYW0gaW1wbGVtZW50YXRpb24sIGV4cGVjdCBTdHJlYW0uUmVhZGFibGUgaW5zdGFuY2UsIGdvdCAke25hbWV9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IHRyYW5zZm9ybWVkID0gZmFsc2U7XG4gICAgY29uc3QgdHJhbnNmb3JtVG9CeXRlQXJyYXkgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICh0cmFuc2Zvcm1lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUl9NU0dfU1RSRUFNX0hBU19CRUVOX1RSQU5TRk9STUVEKTtcbiAgICAgICAgfVxuICAgICAgICB0cmFuc2Zvcm1lZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBhd2FpdCAoMCwgbm9kZV9odHRwX2hhbmRsZXJfMS5zdHJlYW1Db2xsZWN0b3IpKHN0cmVhbSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihzdHJlYW0sIHtcbiAgICAgICAgdHJhbnNmb3JtVG9CeXRlQXJyYXksXG4gICAgICAgIHRyYW5zZm9ybVRvU3RyaW5nOiBhc3luYyAoZW5jb2RpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZiA9IGF3YWl0IHRyYW5zZm9ybVRvQnl0ZUFycmF5KCk7XG4gICAgICAgICAgICBpZiAoZW5jb2RpbmcgPT09IHVuZGVmaW5lZCB8fCBCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIHV0aWxfYnVmZmVyX2Zyb21fMS5mcm9tQXJyYXlCdWZmZXIpKGJ1Zi5idWZmZXIsIGJ1Zi5ieXRlT2Zmc2V0LCBidWYuYnl0ZUxlbmd0aCkudG9TdHJpbmcoZW5jb2RpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcihlbmNvZGluZyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlKGJ1Zik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zZm9ybVRvV2ViU3RyZWFtOiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodHJhbnNmb3JtZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJSX01TR19TVFJFQU1fSEFTX0JFRU5fVFJBTlNGT1JNRUQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0cmVhbS5yZWFkYWJsZUZsb3dpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgc3RyZWFtIGhhcyBiZWVuIGNvbnN1bWVkIGJ5IG90aGVyIGNhbGxiYWNrcy5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0cmVhbV8xLlJlYWRhYmxlLnRvV2ViICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZWFkYWJsZS50b1dlYigpIGlzIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSBlbnN1cmUgYSBwb2x5ZmlsbCBpcyBhdmFpbGFibGUuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJhbnNmb3JtZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHN0cmVhbV8xLlJlYWRhYmxlLnRvV2ViKHN0cmVhbSk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59O1xuZXhwb3J0cy5zZGtTdHJlYW1NaXhpbiA9IHNka1N0cmVhbU1peGluO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3BsaXRTdHJlYW0gPSBzcGxpdFN0cmVhbTtcbmFzeW5jIGZ1bmN0aW9uIHNwbGl0U3RyZWFtKHN0cmVhbSkge1xuICAgIGlmICh0eXBlb2Ygc3RyZWFtLnN0cmVhbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHN0cmVhbSA9IHN0cmVhbS5zdHJlYW0oKTtcbiAgICB9XG4gICAgY29uc3QgcmVhZGFibGVTdHJlYW0gPSBzdHJlYW07XG4gICAgcmV0dXJuIHJlYWRhYmxlU3RyZWFtLnRlZSgpO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3BsaXRTdHJlYW0gPSBzcGxpdFN0cmVhbTtcbmNvbnN0IHN0cmVhbV8xID0gcmVxdWlyZShcInN0cmVhbVwiKTtcbmNvbnN0IHNwbGl0U3RyZWFtX2Jyb3dzZXJfMSA9IHJlcXVpcmUoXCIuL3NwbGl0U3RyZWFtLmJyb3dzZXJcIik7XG5jb25zdCBzdHJlYW1fdHlwZV9jaGVja18xID0gcmVxdWlyZShcIi4vc3RyZWFtLXR5cGUtY2hlY2tcIik7XG5hc3luYyBmdW5jdGlvbiBzcGxpdFN0cmVhbShzdHJlYW0pIHtcbiAgICBpZiAoKDAsIHN0cmVhbV90eXBlX2NoZWNrXzEuaXNSZWFkYWJsZVN0cmVhbSkoc3RyZWFtKSB8fCAoMCwgc3RyZWFtX3R5cGVfY2hlY2tfMS5pc0Jsb2IpKHN0cmVhbSkpIHtcbiAgICAgICAgcmV0dXJuICgwLCBzcGxpdFN0cmVhbV9icm93c2VyXzEuc3BsaXRTdHJlYW0pKHN0cmVhbSk7XG4gICAgfVxuICAgIGNvbnN0IHN0cmVhbTEgPSBuZXcgc3RyZWFtXzEuUGFzc1Rocm91Z2goKTtcbiAgICBjb25zdCBzdHJlYW0yID0gbmV3IHN0cmVhbV8xLlBhc3NUaHJvdWdoKCk7XG4gICAgc3RyZWFtLnBpcGUoc3RyZWFtMSk7XG4gICAgc3RyZWFtLnBpcGUoc3RyZWFtMik7XG4gICAgcmV0dXJuIFtzdHJlYW0xLCBzdHJlYW0yXTtcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbEJhc2U2NCA9IHJlcXVpcmUoJ0BzbWl0aHkvdXRpbC1iYXNlNjQnKTtcbnZhciB1dGlsVXRmOCA9IHJlcXVpcmUoJ0BzbWl0aHkvdXRpbC11dGY4Jyk7XG52YXIgQ2hlY2tzdW1TdHJlYW0gPSByZXF1aXJlKCcuL2NoZWNrc3VtL0NoZWNrc3VtU3RyZWFtJyk7XG52YXIgY3JlYXRlQ2hlY2tzdW1TdHJlYW0gPSByZXF1aXJlKCcuL2NoZWNrc3VtL2NyZWF0ZUNoZWNrc3VtU3RyZWFtJyk7XG52YXIgY3JlYXRlQnVmZmVyZWRSZWFkYWJsZSA9IHJlcXVpcmUoJy4vY3JlYXRlQnVmZmVyZWRSZWFkYWJsZScpO1xudmFyIGdldEF3c0NodW5rZWRFbmNvZGluZ1N0cmVhbSA9IHJlcXVpcmUoJy4vZ2V0QXdzQ2h1bmtlZEVuY29kaW5nU3RyZWFtJyk7XG52YXIgaGVhZFN0cmVhbSA9IHJlcXVpcmUoJy4vaGVhZFN0cmVhbScpO1xudmFyIHNka1N0cmVhbU1peGluID0gcmVxdWlyZSgnLi9zZGstc3RyZWFtLW1peGluJyk7XG52YXIgc3BsaXRTdHJlYW0gPSByZXF1aXJlKCcuL3NwbGl0U3RyZWFtJyk7XG52YXIgc3RyZWFtVHlwZUNoZWNrID0gcmVxdWlyZSgnLi9zdHJlYW0tdHlwZS1jaGVjaycpO1xuXG5jbGFzcyBVaW50OEFycmF5QmxvYkFkYXB0ZXIgZXh0ZW5kcyBVaW50OEFycmF5IHtcbiAgICBzdGF0aWMgZnJvbVN0cmluZyhzb3VyY2UsIGVuY29kaW5nID0gXCJ1dGYtOFwiKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBpZiAoZW5jb2RpbmcgPT09IFwiYmFzZTY0XCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gVWludDhBcnJheUJsb2JBZGFwdGVyLm11dGF0ZSh1dGlsQmFzZTY0LmZyb21CYXNlNjQoc291cmNlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gVWludDhBcnJheUJsb2JBZGFwdGVyLm11dGF0ZSh1dGlsVXRmOC5mcm9tVXRmOChzb3VyY2UpKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGNvbnZlcnNpb24gZnJvbSAke3R5cGVvZiBzb3VyY2V9IHRvIFVpbnQ4QXJyYXlCbG9iQWRhcHRlci5gKTtcbiAgICB9XG4gICAgc3RhdGljIG11dGF0ZShzb3VyY2UpIHtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHNvdXJjZSwgVWludDhBcnJheUJsb2JBZGFwdGVyLnByb3RvdHlwZSk7XG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgfVxuICAgIHRyYW5zZm9ybVRvU3RyaW5nKGVuY29kaW5nID0gXCJ1dGYtOFwiKSB7XG4gICAgICAgIGlmIChlbmNvZGluZyA9PT0gXCJiYXNlNjRcIikge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWxCYXNlNjQudG9CYXNlNjQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHV0aWxVdGY4LnRvVXRmOCh0aGlzKTtcbiAgICB9XG59XG5cbmV4cG9ydHMuVWludDhBcnJheUJsb2JBZGFwdGVyID0gVWludDhBcnJheUJsb2JBZGFwdGVyO1xuT2JqZWN0LmtleXMoQ2hlY2tzdW1TdHJlYW0pLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICBpZiAoayAhPT0gJ2RlZmF1bHQnICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgaykpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQ2hlY2tzdW1TdHJlYW1ba107IH1cbiAgICB9KTtcbn0pO1xuT2JqZWN0LmtleXMoY3JlYXRlQ2hlY2tzdW1TdHJlYW0pLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICBpZiAoayAhPT0gJ2RlZmF1bHQnICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgaykpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY3JlYXRlQ2hlY2tzdW1TdHJlYW1ba107IH1cbiAgICB9KTtcbn0pO1xuT2JqZWN0LmtleXMoY3JlYXRlQnVmZmVyZWRSZWFkYWJsZSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgIGlmIChrICE9PSAnZGVmYXVsdCcgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBrKSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGssIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVCdWZmZXJlZFJlYWRhYmxlW2tdOyB9XG4gICAgfSk7XG59KTtcbk9iamVjdC5rZXlzKGdldEF3c0NodW5rZWRFbmNvZGluZ1N0cmVhbSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgIGlmIChrICE9PSAnZGVmYXVsdCcgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBrKSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGssIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZXRBd3NDaHVua2VkRW5jb2RpbmdTdHJlYW1ba107IH1cbiAgICB9KTtcbn0pO1xuT2JqZWN0LmtleXMoaGVhZFN0cmVhbSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgIGlmIChrICE9PSAnZGVmYXVsdCcgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBrKSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGssIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBoZWFkU3RyZWFtW2tdOyB9XG4gICAgfSk7XG59KTtcbk9iamVjdC5rZXlzKHNka1N0cmVhbU1peGluKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgaWYgKGsgIT09ICdkZWZhdWx0JyAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIGspKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgaywge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNka1N0cmVhbU1peGluW2tdOyB9XG4gICAgfSk7XG59KTtcbk9iamVjdC5rZXlzKHNwbGl0U3RyZWFtKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgaWYgKGsgIT09ICdkZWZhdWx0JyAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIGspKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgaywge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNwbGl0U3RyZWFtW2tdOyB9XG4gICAgfSk7XG59KTtcbk9iamVjdC5rZXlzKHN0cmVhbVR5cGVDaGVjaykuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgIGlmIChrICE9PSAnZGVmYXVsdCcgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBrKSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGssIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdHJlYW1UeXBlQ2hlY2tba107IH1cbiAgICB9KTtcbn0pO1xuIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIGdsb2JhbCwgZGVmaW5lLCBTeW1ib2wsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgSXRlcmF0b3IgKi9cclxudmFyIF9fZXh0ZW5kcztcclxudmFyIF9fYXNzaWduO1xyXG52YXIgX19yZXN0O1xyXG52YXIgX19kZWNvcmF0ZTtcclxudmFyIF9fcGFyYW07XHJcbnZhciBfX2VzRGVjb3JhdGU7XHJcbnZhciBfX3J1bkluaXRpYWxpemVycztcclxudmFyIF9fcHJvcEtleTtcclxudmFyIF9fc2V0RnVuY3Rpb25OYW1lO1xyXG52YXIgX19tZXRhZGF0YTtcclxudmFyIF9fYXdhaXRlcjtcclxudmFyIF9fZ2VuZXJhdG9yO1xyXG52YXIgX19leHBvcnRTdGFyO1xyXG52YXIgX192YWx1ZXM7XHJcbnZhciBfX3JlYWQ7XHJcbnZhciBfX3NwcmVhZDtcclxudmFyIF9fc3ByZWFkQXJyYXlzO1xyXG52YXIgX19zcHJlYWRBcnJheTtcclxudmFyIF9fYXdhaXQ7XHJcbnZhciBfX2FzeW5jR2VuZXJhdG9yO1xyXG52YXIgX19hc3luY0RlbGVnYXRvcjtcclxudmFyIF9fYXN5bmNWYWx1ZXM7XHJcbnZhciBfX21ha2VUZW1wbGF0ZU9iamVjdDtcclxudmFyIF9faW1wb3J0U3RhcjtcclxudmFyIF9faW1wb3J0RGVmYXVsdDtcclxudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQ7XHJcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0O1xyXG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZEluO1xyXG52YXIgX19jcmVhdGVCaW5kaW5nO1xyXG52YXIgX19hZGREaXNwb3NhYmxlUmVzb3VyY2U7XHJcbnZhciBfX2Rpc3Bvc2VSZXNvdXJjZXM7XHJcbnZhciBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbjtcclxuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XHJcbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0eXBlb2YgdGhpcyA9PT0gXCJvYmplY3RcIiA/IHRoaXMgOiB7fTtcclxuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xyXG4gICAgICAgIGRlZmluZShcInRzbGliXCIsIFtcImV4cG9ydHNcIl0sIGZ1bmN0aW9uIChleHBvcnRzKSB7IGZhY3RvcnkoY3JlYXRlRXhwb3J0ZXIocm9vdCwgY3JlYXRlRXhwb3J0ZXIoZXhwb3J0cykpKTsgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIGZhY3RvcnkoY3JlYXRlRXhwb3J0ZXIocm9vdCwgY3JlYXRlRXhwb3J0ZXIobW9kdWxlLmV4cG9ydHMpKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBmYWN0b3J5KGNyZWF0ZUV4cG9ydGVyKHJvb3QpKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGNyZWF0ZUV4cG9ydGVyKGV4cG9ydHMsIHByZXZpb3VzKSB7XHJcbiAgICAgICAgaWYgKGV4cG9ydHMgIT09IHJvb3QpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChpZCwgdikgeyByZXR1cm4gZXhwb3J0c1tpZF0gPSBwcmV2aW91cyA/IHByZXZpb3VzKGlkLCB2KSA6IHY7IH07XHJcbiAgICB9XHJcbn0pXHJcbihmdW5jdGlvbiAoZXhwb3J0ZXIpIHtcclxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcblxyXG4gICAgX19leHRlbmRzID0gZnVuY3Rpb24gKGQsIGIpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH07XHJcblxyXG4gICAgX19yZXN0ID0gZnVuY3Rpb24gKHMsIGUpIHtcclxuICAgICAgICB2YXIgdCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgICAgICB0W3BdID0gc1twXTtcclxuICAgICAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2RlY29yYXRlID0gZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICAgICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICAgICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxuICAgIH07XHJcblxyXG4gICAgX19wYXJhbSA9IGZ1bmN0aW9uIChwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxuICAgIH07XHJcblxyXG4gICAgX19lc0RlY29yYXRlID0gZnVuY3Rpb24gKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XHJcbiAgICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcclxuICAgICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcclxuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcclxuICAgICAgICB2YXIgXywgZG9uZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0ge307XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcclxuICAgICAgICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xyXG4gICAgICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcclxuICAgICAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XHJcbiAgICAgICAgZG9uZSA9IHRydWU7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fcnVuSW5pdGlhbGl6ZXJzID0gZnVuY3Rpb24gKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcclxuICAgICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3Byb3BLZXkgPSBmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgeCA9PT0gXCJzeW1ib2xcIiA/IHggOiBcIlwiLmNvbmNhdCh4KTtcclxuICAgIH07XHJcblxyXG4gICAgX19zZXRGdW5jdGlvbk5hbWUgPSBmdW5jdGlvbiAoZiwgbmFtZSwgcHJlZml4KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgXCJuYW1lXCIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gXCJcIi5jb25jYXQocHJlZml4LCBcIiBcIiwgbmFtZSkgOiBuYW1lIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX21ldGFkYXRhID0gZnVuY3Rpb24gKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxuICAgIH07XHJcblxyXG4gICAgX19hd2FpdGVyID0gZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fZ2VuZXJhdG9yID0gZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgICAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcclxuICAgICAgICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgICAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgX19leHBvcnRTdGFyID0gZnVuY3Rpb24obSwgbykge1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxuICAgIH07XHJcblxyXG4gICAgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xyXG4gICAgICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgICAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbiAgICB9KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICAgICAgb1trMl0gPSBtW2tdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgX192YWx1ZXMgPSBmdW5jdGlvbiAobykge1xyXG4gICAgICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICAgICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICAgICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fcmVhZCA9IGZ1bmN0aW9uIChvLCBuKSB7XHJcbiAgICAgICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICAgICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcjtcclxuICAgIH07XHJcblxyXG4gICAgLyoqIEBkZXByZWNhdGVkICovXHJcbiAgICBfX3NwcmVhZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgICAgIHJldHVybiBhcjtcclxuICAgIH07XHJcblxyXG4gICAgLyoqIEBkZXByZWNhdGVkICovXHJcbiAgICBfX3NwcmVhZEFycmF5cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICAgICAgcltrXSA9IGFbal07XHJcbiAgICAgICAgcmV0dXJuIHI7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fc3ByZWFkQXJyYXkgPSBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcclxuICAgICAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xyXG4gICAgICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2F3YWl0ID0gZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxuICAgIH07XHJcblxyXG4gICAgX19hc3luY0dlbmVyYXRvciA9IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgICAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICAgICAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgICAgICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxuICAgIH07XHJcblxyXG4gICAgX19hc3luY0RlbGVnYXRvciA9IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgICAgdmFyIGksIHA7XHJcbiAgICAgICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgICAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG4gICAgfTtcclxuXHJcbiAgICBfX2FzeW5jVmFsdWVzID0gZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICAgICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgICAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbiAgICB9O1xyXG5cclxuICAgIF9fbWFrZVRlbXBsYXRlT2JqZWN0ID0gZnVuY3Rpb24gKGNvb2tlZCwgcmF3KSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgICAgICByZXR1cm4gY29va2VkO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG4gICAgfSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICAgICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgb3duS2V5cyA9IGZ1bmN0aW9uKG8pIHtcclxuICAgICAgICBvd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICAgICAgdmFyIGFyID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XHJcbiAgICAgICAgICAgIHJldHVybiBhcjtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBvd25LZXlzKG8pO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2ltcG9ydFN0YXIgPSBmdW5jdGlvbiAobW9kKSB7XHJcbiAgICAgICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgICAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICAgICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcclxuICAgICAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG5cclxuICAgIF9faW1wb3J0RGVmYXVsdCA9IGZ1bmN0aW9uIChtb2QpIHtcclxuICAgICAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcclxuICAgIH07XHJcblxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCA9IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgICAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICAgICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxuICAgIH07XHJcblxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCA9IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgICAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4gPSBmdW5jdGlvbiAoc3RhdGUsIHJlY2VpdmVyKSB7XHJcbiAgICAgICAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcclxuICAgIH07XHJcblxyXG4gICAgX19hZGREaXNwb3NhYmxlUmVzb3VyY2UgPSBmdW5jdGlvbiAoZW52LCB2YWx1ZSwgYXN5bmMpIHtcclxuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHZvaWQgMCkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkLlwiKTtcclxuICAgICAgICAgICAgdmFyIGRpc3Bvc2UsIGlubmVyO1xyXG4gICAgICAgICAgICBpZiAoYXN5bmMpIHtcclxuICAgICAgICAgICAgICAgIGlmICghU3ltYm9sLmFzeW5jRGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0Rpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgICAgICAgICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkaXNwb3NlID09PSB2b2lkIDApIHtcclxuICAgICAgICAgICAgICAgIGlmICghU3ltYm9sLmRpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuZGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICAgICAgICAgICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmRpc3Bvc2VdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFzeW5jKSBpbm5lciA9IGRpc3Bvc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBkaXNwb3NlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3Qgbm90IGRpc3Bvc2FibGUuXCIpO1xyXG4gICAgICAgICAgICBpZiAoaW5uZXIpIGRpc3Bvc2UgPSBmdW5jdGlvbigpIHsgdHJ5IHsgaW5uZXIuY2FsbCh0aGlzKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7IH0gfTtcclxuICAgICAgICAgICAgZW52LnN0YWNrLnB1c2goeyB2YWx1ZTogdmFsdWUsIGRpc3Bvc2U6IGRpc3Bvc2UsIGFzeW5jOiBhc3luYyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYXN5bmMpIHtcclxuICAgICAgICAgICAgZW52LnN0YWNrLnB1c2goeyBhc3luYzogdHJ1ZSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgX1N1cHByZXNzZWRFcnJvciA9IHR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xyXG4gICAgICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgICAgIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fZGlzcG9zZVJlc291cmNlcyA9IGZ1bmN0aW9uIChlbnYpIHtcclxuICAgICAgICBmdW5jdGlvbiBmYWlsKGUpIHtcclxuICAgICAgICAgICAgZW52LmVycm9yID0gZW52Lmhhc0Vycm9yID8gbmV3IF9TdXBwcmVzc2VkRXJyb3IoZSwgZW52LmVycm9yLCBcIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC5cIikgOiBlO1xyXG4gICAgICAgICAgICBlbnYuaGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgciwgcyA9IDA7XHJcbiAgICAgICAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgICAgICAgICAgd2hpbGUgKHIgPSBlbnYuc3RhY2sucG9wKCkpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyLmFzeW5jICYmIHMgPT09IDEpIHJldHVybiBzID0gMCwgZW52LnN0YWNrLnB1c2gociksIFByb21pc2UucmVzb2x2ZSgpLnRoZW4obmV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHIuZGlzcG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gci5kaXNwb3NlLmNhbGwoci52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLmFzeW5jKSByZXR1cm4gcyB8PSAyLCBQcm9taXNlLnJlc29sdmUocmVzdWx0KS50aGVuKG5leHQsIGZ1bmN0aW9uKGUpIHsgZmFpbChlKTsgcmV0dXJuIG5leHQoKTsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgcyB8PSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBmYWlsKGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzID09PSAxKSByZXR1cm4gZW52Lmhhc0Vycm9yID8gUHJvbWlzZS5yZWplY3QoZW52LmVycm9yKSA6IFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICBpZiAoZW52Lmhhc0Vycm9yKSB0aHJvdyBlbnYuZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXh0KCk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uID0gZnVuY3Rpb24gKHBhdGgsIHByZXNlcnZlSnN4KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoID09PSBcInN0cmluZ1wiICYmIC9eXFwuXFwuP1xcLy8udGVzdChwYXRoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXC4odHN4KSR8KCg/OlxcLmQpPykoKD86XFwuW14uL10rPyk/KVxcLihbY21dPyl0cyQvaSwgZnVuY3Rpb24gKG0sIHRzeCwgZCwgZXh0LCBjbSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRzeCA/IHByZXNlcnZlSnN4ID8gXCIuanN4XCIgOiBcIi5qc1wiIDogZCAmJiAoIWV4dCB8fCAhY20pID8gbSA6IChkICsgZXh0ICsgXCIuXCIgKyBjbS50b0xvd2VyQ2FzZSgpICsgXCJqc1wiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgfTtcclxuXHJcbiAgICBleHBvcnRlcihcIl9fZXh0ZW5kc1wiLCBfX2V4dGVuZHMpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2Fzc2lnblwiLCBfX2Fzc2lnbik7XHJcbiAgICBleHBvcnRlcihcIl9fcmVzdFwiLCBfX3Jlc3QpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2RlY29yYXRlXCIsIF9fZGVjb3JhdGUpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3BhcmFtXCIsIF9fcGFyYW0pO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2VzRGVjb3JhdGVcIiwgX19lc0RlY29yYXRlKTtcclxuICAgIGV4cG9ydGVyKFwiX19ydW5Jbml0aWFsaXplcnNcIiwgX19ydW5Jbml0aWFsaXplcnMpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3Byb3BLZXlcIiwgX19wcm9wS2V5KTtcclxuICAgIGV4cG9ydGVyKFwiX19zZXRGdW5jdGlvbk5hbWVcIiwgX19zZXRGdW5jdGlvbk5hbWUpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX21ldGFkYXRhXCIsIF9fbWV0YWRhdGEpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2F3YWl0ZXJcIiwgX19hd2FpdGVyKTtcclxuICAgIGV4cG9ydGVyKFwiX19nZW5lcmF0b3JcIiwgX19nZW5lcmF0b3IpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2V4cG9ydFN0YXJcIiwgX19leHBvcnRTdGFyKTtcclxuICAgIGV4cG9ydGVyKFwiX19jcmVhdGVCaW5kaW5nXCIsIF9fY3JlYXRlQmluZGluZyk7XHJcbiAgICBleHBvcnRlcihcIl9fdmFsdWVzXCIsIF9fdmFsdWVzKTtcclxuICAgIGV4cG9ydGVyKFwiX19yZWFkXCIsIF9fcmVhZCk7XHJcbiAgICBleHBvcnRlcihcIl9fc3ByZWFkXCIsIF9fc3ByZWFkKTtcclxuICAgIGV4cG9ydGVyKFwiX19zcHJlYWRBcnJheXNcIiwgX19zcHJlYWRBcnJheXMpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3NwcmVhZEFycmF5XCIsIF9fc3ByZWFkQXJyYXkpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2F3YWl0XCIsIF9fYXdhaXQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2FzeW5jR2VuZXJhdG9yXCIsIF9fYXN5bmNHZW5lcmF0b3IpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2FzeW5jRGVsZWdhdG9yXCIsIF9fYXN5bmNEZWxlZ2F0b3IpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2FzeW5jVmFsdWVzXCIsIF9fYXN5bmNWYWx1ZXMpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX21ha2VUZW1wbGF0ZU9iamVjdFwiLCBfX21ha2VUZW1wbGF0ZU9iamVjdCk7XHJcbiAgICBleHBvcnRlcihcIl9faW1wb3J0U3RhclwiLCBfX2ltcG9ydFN0YXIpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2ltcG9ydERlZmF1bHRcIiwgX19pbXBvcnREZWZhdWx0KTtcclxuICAgIGV4cG9ydGVyKFwiX19jbGFzc1ByaXZhdGVGaWVsZEdldFwiLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KTtcclxuICAgIGV4cG9ydGVyKFwiX19jbGFzc1ByaXZhdGVGaWVsZFNldFwiLCBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KTtcclxuICAgIGV4cG9ydGVyKFwiX19jbGFzc1ByaXZhdGVGaWVsZEluXCIsIF9fY2xhc3NQcml2YXRlRmllbGRJbik7XHJcbiAgICBleHBvcnRlcihcIl9fYWRkRGlzcG9zYWJsZVJlc291cmNlXCIsIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlKTtcclxuICAgIGV4cG9ydGVyKFwiX19kaXNwb3NlUmVzb3VyY2VzXCIsIF9fZGlzcG9zZVJlc291cmNlcyk7XHJcbiAgICBleHBvcnRlcihcIl9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uXCIsIF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uKTtcclxufSk7XHJcblxyXG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcclxuICAgIF9fZXh0ZW5kczogX19leHRlbmRzLFxyXG4gICAgX19hc3NpZ246IF9fYXNzaWduLFxyXG4gICAgX19yZXN0OiBfX3Jlc3QsXHJcbiAgICBfX2RlY29yYXRlOiBfX2RlY29yYXRlLFxyXG4gICAgX19wYXJhbTogX19wYXJhbSxcclxuICAgIF9fZXNEZWNvcmF0ZTogX19lc0RlY29yYXRlLFxyXG4gICAgX19ydW5Jbml0aWFsaXplcnM6IF9fcnVuSW5pdGlhbGl6ZXJzLFxyXG4gICAgX19wcm9wS2V5OiBfX3Byb3BLZXksXHJcbiAgICBfX3NldEZ1bmN0aW9uTmFtZTogX19zZXRGdW5jdGlvbk5hbWUsXHJcbiAgICBfX21ldGFkYXRhOiBfX21ldGFkYXRhLFxyXG4gICAgX19hd2FpdGVyOiBfX2F3YWl0ZXIsXHJcbiAgICBfX2dlbmVyYXRvcjogX19nZW5lcmF0b3IsXHJcbiAgICBfX2V4cG9ydFN0YXI6IF9fZXhwb3J0U3RhcixcclxuICAgIF9fY3JlYXRlQmluZGluZzogX19jcmVhdGVCaW5kaW5nLFxyXG4gICAgX192YWx1ZXM6IF9fdmFsdWVzLFxyXG4gICAgX19yZWFkOiBfX3JlYWQsXHJcbiAgICBfX3NwcmVhZDogX19zcHJlYWQsXHJcbiAgICBfX3NwcmVhZEFycmF5czogX19zcHJlYWRBcnJheXMsXHJcbiAgICBfX3NwcmVhZEFycmF5OiBfX3NwcmVhZEFycmF5LFxyXG4gICAgX19hd2FpdDogX19hd2FpdCxcclxuICAgIF9fYXN5bmNHZW5lcmF0b3I6IF9fYXN5bmNHZW5lcmF0b3IsXHJcbiAgICBfX2FzeW5jRGVsZWdhdG9yOiBfX2FzeW5jRGVsZWdhdG9yLFxyXG4gICAgX19hc3luY1ZhbHVlczogX19hc3luY1ZhbHVlcyxcclxuICAgIF9fbWFrZVRlbXBsYXRlT2JqZWN0OiBfX21ha2VUZW1wbGF0ZU9iamVjdCxcclxuICAgIF9faW1wb3J0U3RhcjogX19pbXBvcnRTdGFyLFxyXG4gICAgX19pbXBvcnREZWZhdWx0OiBfX2ltcG9ydERlZmF1bHQsXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0OiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0LFxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldDogX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRJbjogX19jbGFzc1ByaXZhdGVGaWVsZEluLFxyXG4gICAgX19hZGREaXNwb3NhYmxlUmVzb3VyY2U6IF9fYWRkRGlzcG9zYWJsZVJlc291cmNlLFxyXG4gICAgX19kaXNwb3NlUmVzb3VyY2VzOiBfX2Rpc3Bvc2VSZXNvdXJjZXMsXHJcbiAgICBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbjogX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24sXHJcbn0pO1xyXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yYW5kb21VVUlEID0gdm9pZCAwO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbmNvbnN0IGNyeXB0b18xID0gdHNsaWJfMS5fX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImNyeXB0b1wiKSk7XG5leHBvcnRzLnJhbmRvbVVVSUQgPSBjcnlwdG9fMS5kZWZhdWx0LnJhbmRvbVVVSUQuYmluZChjcnlwdG9fMS5kZWZhdWx0KTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmFuZG9tVVVJRCA9IHJlcXVpcmUoJy4vcmFuZG9tVVVJRCcpO1xuXG5jb25zdCBkZWNpbWFsVG9IZXggPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNTYgfSwgKF8sIGkpID0+IGkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKSk7XG5jb25zdCB2NCA9ICgpID0+IHtcbiAgICBpZiAocmFuZG9tVVVJRC5yYW5kb21VVUlEKSB7XG4gICAgICAgIHJldHVybiByYW5kb21VVUlELnJhbmRvbVVVSUQoKTtcbiAgICB9XG4gICAgY29uc3Qgcm5kcyA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHJuZHMpO1xuICAgIHJuZHNbNl0gPSAocm5kc1s2XSAmIDB4MGYpIHwgMHg0MDtcbiAgICBybmRzWzhdID0gKHJuZHNbOF0gJiAweDNmKSB8IDB4ODA7XG4gICAgcmV0dXJuIChkZWNpbWFsVG9IZXhbcm5kc1swXV0gK1xuICAgICAgICBkZWNpbWFsVG9IZXhbcm5kc1sxXV0gK1xuICAgICAgICBkZWNpbWFsVG9IZXhbcm5kc1syXV0gK1xuICAgICAgICBkZWNpbWFsVG9IZXhbcm5kc1szXV0gK1xuICAgICAgICBcIi1cIiArXG4gICAgICAgIGRlY2ltYWxUb0hleFtybmRzWzRdXSArXG4gICAgICAgIGRlY2ltYWxUb0hleFtybmRzWzVdXSArXG4gICAgICAgIFwiLVwiICtcbiAgICAgICAgZGVjaW1hbFRvSGV4W3JuZHNbNl1dICtcbiAgICAgICAgZGVjaW1hbFRvSGV4W3JuZHNbN11dICtcbiAgICAgICAgXCItXCIgK1xuICAgICAgICBkZWNpbWFsVG9IZXhbcm5kc1s4XV0gK1xuICAgICAgICBkZWNpbWFsVG9IZXhbcm5kc1s5XV0gK1xuICAgICAgICBcIi1cIiArXG4gICAgICAgIGRlY2ltYWxUb0hleFtybmRzWzEwXV0gK1xuICAgICAgICBkZWNpbWFsVG9IZXhbcm5kc1sxMV1dICtcbiAgICAgICAgZGVjaW1hbFRvSGV4W3JuZHNbMTJdXSArXG4gICAgICAgIGRlY2ltYWxUb0hleFtybmRzWzEzXV0gK1xuICAgICAgICBkZWNpbWFsVG9IZXhbcm5kc1sxNF1dICtcbiAgICAgICAgZGVjaW1hbFRvSGV4W3JuZHNbMTVdXSk7XG59O1xuXG5leHBvcnRzLnY0ID0gdjQ7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIHV1aWQgPSByZXF1aXJlKCdAc21pdGh5L3V1aWQnKTtcblxuY29uc3QgY29weURvY3VtZW50V2l0aFRyYW5zZm9ybSA9IChzb3VyY2UsIHNjaGVtYVJlZiwgdHJhbnNmb3JtID0gKF8pID0+IF8pID0+IHNvdXJjZTtcblxuY29uc3QgcGFyc2VCb29sZWFuID0gKHZhbHVlKSA9PiB7XG4gICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICBjYXNlIFwidHJ1ZVwiOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGNhc2UgXCJmYWxzZVwiOlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGFyc2UgYm9vbGVhbiB2YWx1ZSBcIiR7dmFsdWV9XCJgKTtcbiAgICB9XG59O1xuY29uc3QgZXhwZWN0Qm9vbGVhbiA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSAwIHx8IHZhbHVlID09PSAxKSB7XG4gICAgICAgICAgICBsb2dnZXIud2FybihzdGFja1RyYWNlV2FybmluZyhgRXhwZWN0ZWQgYm9vbGVhbiwgZ290ICR7dHlwZW9mIHZhbHVlfTogJHt2YWx1ZX1gKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnN0IGxvd2VyID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGxvd2VyID09PSBcImZhbHNlXCIgfHwgbG93ZXIgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICBsb2dnZXIud2FybihzdGFja1RyYWNlV2FybmluZyhgRXhwZWN0ZWQgYm9vbGVhbiwgZ290ICR7dHlwZW9mIHZhbHVlfTogJHt2YWx1ZX1gKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXIgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIGJvb2xlYW4sIGdvdCAke3R5cGVvZiB2YWx1ZX06ICR7dmFsdWV9YCk7XG59O1xuY29uc3QgZXhwZWN0TnVtYmVyID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4ocGFyc2VkKSkge1xuICAgICAgICAgICAgaWYgKFN0cmluZyhwYXJzZWQpICE9PSBTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oc3RhY2tUcmFjZVdhcm5pbmcoYEV4cGVjdGVkIG51bWJlciBidXQgb2JzZXJ2ZWQgc3RyaW5nOiAke3ZhbHVlfWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIG51bWJlciwgZ290ICR7dHlwZW9mIHZhbHVlfTogJHt2YWx1ZX1gKTtcbn07XG5jb25zdCBNQVhfRkxPQVQgPSBNYXRoLmNlaWwoMiAqKiAxMjcgKiAoMiAtIDIgKiogLTIzKSk7XG5jb25zdCBleHBlY3RGbG9hdDMyID0gKHZhbHVlKSA9PiB7XG4gICAgY29uc3QgZXhwZWN0ZWQgPSBleHBlY3ROdW1iZXIodmFsdWUpO1xuICAgIGlmIChleHBlY3RlZCAhPT0gdW5kZWZpbmVkICYmICFOdW1iZXIuaXNOYU4oZXhwZWN0ZWQpICYmIGV4cGVjdGVkICE9PSBJbmZpbml0eSAmJiBleHBlY3RlZCAhPT0gLUluZmluaXR5KSB7XG4gICAgICAgIGlmIChNYXRoLmFicyhleHBlY3RlZCkgPiBNQVhfRkxPQVQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIDMyLWJpdCBmbG9hdCwgZ290ICR7dmFsdWV9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGV4cGVjdGVkO1xufTtcbmNvbnN0IGV4cGVjdExvbmcgPSAodmFsdWUpID0+IHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgJiYgIU51bWJlci5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBpbnRlZ2VyLCBnb3QgJHt0eXBlb2YgdmFsdWV9OiAke3ZhbHVlfWApO1xufTtcbmNvbnN0IGV4cGVjdEludCA9IGV4cGVjdExvbmc7XG5jb25zdCBleHBlY3RJbnQzMiA9ICh2YWx1ZSkgPT4gZXhwZWN0U2l6ZWRJbnQodmFsdWUsIDMyKTtcbmNvbnN0IGV4cGVjdFNob3J0ID0gKHZhbHVlKSA9PiBleHBlY3RTaXplZEludCh2YWx1ZSwgMTYpO1xuY29uc3QgZXhwZWN0Qnl0ZSA9ICh2YWx1ZSkgPT4gZXhwZWN0U2l6ZWRJbnQodmFsdWUsIDgpO1xuY29uc3QgZXhwZWN0U2l6ZWRJbnQgPSAodmFsdWUsIHNpemUpID0+IHtcbiAgICBjb25zdCBleHBlY3RlZCA9IGV4cGVjdExvbmcodmFsdWUpO1xuICAgIGlmIChleHBlY3RlZCAhPT0gdW5kZWZpbmVkICYmIGNhc3RJbnQoZXhwZWN0ZWQsIHNpemUpICE9PSBleHBlY3RlZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAke3NpemV9LWJpdCBpbnRlZ2VyLCBnb3QgJHt2YWx1ZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cGVjdGVkO1xufTtcbmNvbnN0IGNhc3RJbnQgPSAodmFsdWUsIHNpemUpID0+IHtcbiAgICBzd2l0Y2ggKHNpemUpIHtcbiAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgIHJldHVybiBJbnQzMkFycmF5Lm9mKHZhbHVlKVswXTtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgIHJldHVybiBJbnQxNkFycmF5Lm9mKHZhbHVlKVswXTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgcmV0dXJuIEludDhBcnJheS5vZih2YWx1ZSlbMF07XG4gICAgfVxufTtcbmNvbnN0IGV4cGVjdE5vbk51bGwgPSAodmFsdWUsIGxvY2F0aW9uKSA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGxvY2F0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBhIG5vbi1udWxsIHZhbHVlIGZvciAke2xvY2F0aW9ufWApO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIG5vbi1udWxsIHZhbHVlXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59O1xuY29uc3QgZXhwZWN0T2JqZWN0ID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBjb25zdCByZWNlaXZlZFR5cGUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IFwiYXJyYXlcIiA6IHR5cGVvZiB2YWx1ZTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBvYmplY3QsIGdvdCAke3JlY2VpdmVkVHlwZX06ICR7dmFsdWV9YCk7XG59O1xuY29uc3QgZXhwZWN0U3RyaW5nID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChbXCJib29sZWFuXCIsIFwibnVtYmVyXCIsIFwiYmlnaW50XCJdLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSkpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oc3RhY2tUcmFjZVdhcm5pbmcoYEV4cGVjdGVkIHN0cmluZywgZ290ICR7dHlwZW9mIHZhbHVlfTogJHt2YWx1ZX1gKSk7XG4gICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBzdHJpbmcsIGdvdCAke3R5cGVvZiB2YWx1ZX06ICR7dmFsdWV9YCk7XG59O1xuY29uc3QgZXhwZWN0VW5pb24gPSAodmFsdWUpID0+IHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBhc09iamVjdCA9IGV4cGVjdE9iamVjdCh2YWx1ZSk7XG4gICAgY29uc3Qgc2V0S2V5cyA9IE9iamVjdC5lbnRyaWVzKGFzT2JqZWN0KVxuICAgICAgICAuZmlsdGVyKChbLCB2XSkgPT4gdiAhPSBudWxsKVxuICAgICAgICAubWFwKChba10pID0+IGspO1xuICAgIGlmIChzZXRLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBVbmlvbnMgbXVzdCBoYXZlIGV4YWN0bHkgb25lIG5vbi1udWxsIG1lbWJlci4gTm9uZSB3ZXJlIGZvdW5kLmApO1xuICAgIH1cbiAgICBpZiAoc2V0S2V5cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuaW9ucyBtdXN0IGhhdmUgZXhhY3RseSBvbmUgbm9uLW51bGwgbWVtYmVyLiBLZXlzICR7c2V0S2V5c30gd2VyZSBub3QgbnVsbC5gKTtcbiAgICB9XG4gICAgcmV0dXJuIGFzT2JqZWN0O1xufTtcbmNvbnN0IHN0cmljdFBhcnNlRG91YmxlID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBleHBlY3ROdW1iZXIocGFyc2VOdW1iZXIodmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cGVjdE51bWJlcih2YWx1ZSk7XG59O1xuY29uc3Qgc3RyaWN0UGFyc2VGbG9hdCA9IHN0cmljdFBhcnNlRG91YmxlO1xuY29uc3Qgc3RyaWN0UGFyc2VGbG9hdDMyID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBleHBlY3RGbG9hdDMyKHBhcnNlTnVtYmVyKHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiBleHBlY3RGbG9hdDMyKHZhbHVlKTtcbn07XG5jb25zdCBOVU1CRVJfUkVHRVggPSAvKC0/KD86MHxbMS05XVxcZCopKD86XFwuXFxkKyk/KD86W2VFXVsrLV0/XFxkKyk/KXwoLT9JbmZpbml0eSl8KE5hTikvZztcbmNvbnN0IHBhcnNlTnVtYmVyID0gKHZhbHVlKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHZhbHVlLm1hdGNoKE5VTUJFUl9SRUdFWCk7XG4gICAgaWYgKG1hdGNoZXMgPT09IG51bGwgfHwgbWF0Y2hlc1swXS5sZW5ndGggIT09IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCByZWFsIG51bWJlciwgZ290IGltcGxpY2l0IE5hTmApO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG59O1xuY29uc3QgbGltaXRlZFBhcnNlRG91YmxlID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0U3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cGVjdE51bWJlcih2YWx1ZSk7XG59O1xuY29uc3QgaGFuZGxlRmxvYXQgPSBsaW1pdGVkUGFyc2VEb3VibGU7XG5jb25zdCBsaW1pdGVkUGFyc2VGbG9hdCA9IGxpbWl0ZWRQYXJzZURvdWJsZTtcbmNvbnN0IGxpbWl0ZWRQYXJzZUZsb2F0MzIgPSAodmFsdWUpID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXRTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gZXhwZWN0RmxvYXQzMih2YWx1ZSk7XG59O1xuY29uc3QgcGFyc2VGbG9hdFN0cmluZyA9ICh2YWx1ZSkgPT4ge1xuICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgY2FzZSBcIk5hTlwiOlxuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgY2FzZSBcIkluZmluaXR5XCI6XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgICAgIGNhc2UgXCItSW5maW5pdHlcIjpcbiAgICAgICAgICAgIHJldHVybiAtSW5maW5pdHk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSBmbG9hdCB2YWx1ZTogJHt2YWx1ZX1gKTtcbiAgICB9XG59O1xuY29uc3Qgc3RyaWN0UGFyc2VMb25nID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gZXhwZWN0TG9uZyhwYXJzZU51bWJlcih2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gZXhwZWN0TG9uZyh2YWx1ZSk7XG59O1xuY29uc3Qgc3RyaWN0UGFyc2VJbnQgPSBzdHJpY3RQYXJzZUxvbmc7XG5jb25zdCBzdHJpY3RQYXJzZUludDMyID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gZXhwZWN0SW50MzIocGFyc2VOdW1iZXIodmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cGVjdEludDMyKHZhbHVlKTtcbn07XG5jb25zdCBzdHJpY3RQYXJzZVNob3J0ID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gZXhwZWN0U2hvcnQocGFyc2VOdW1iZXIodmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cGVjdFNob3J0KHZhbHVlKTtcbn07XG5jb25zdCBzdHJpY3RQYXJzZUJ5dGUgPSAodmFsdWUpID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBleHBlY3RCeXRlKHBhcnNlTnVtYmVyKHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiBleHBlY3RCeXRlKHZhbHVlKTtcbn07XG5jb25zdCBzdGFja1RyYWNlV2FybmluZyA9IChtZXNzYWdlKSA9PiB7XG4gICAgcmV0dXJuIFN0cmluZyhuZXcgVHlwZUVycm9yKG1lc3NhZ2UpLnN0YWNrIHx8IG1lc3NhZ2UpXG4gICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAuc2xpY2UoMCwgNSlcbiAgICAgICAgLmZpbHRlcigocykgPT4gIXMuaW5jbHVkZXMoXCJzdGFja1RyYWNlV2FybmluZ1wiKSlcbiAgICAgICAgLmpvaW4oXCJcXG5cIik7XG59O1xuY29uc3QgbG9nZ2VyID0ge1xuICAgIHdhcm46IGNvbnNvbGUud2Fybixcbn07XG5cbmNvbnN0IERBWVMgPSBbXCJTdW5cIiwgXCJNb25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIl07XG5jb25zdCBNT05USFMgPSBbXCJKYW5cIiwgXCJGZWJcIiwgXCJNYXJcIiwgXCJBcHJcIiwgXCJNYXlcIiwgXCJKdW5cIiwgXCJKdWxcIiwgXCJBdWdcIiwgXCJTZXBcIiwgXCJPY3RcIiwgXCJOb3ZcIiwgXCJEZWNcIl07XG5mdW5jdGlvbiBkYXRlVG9VdGNTdHJpbmcoZGF0ZSkge1xuICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgY29uc3QgbW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgY29uc3QgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICBjb25zdCBkYXlPZk1vbnRoSW50ID0gZGF0ZS5nZXRVVENEYXRlKCk7XG4gICAgY29uc3QgaG91cnNJbnQgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgY29uc3QgbWludXRlc0ludCA9IGRhdGUuZ2V0VVRDTWludXRlcygpO1xuICAgIGNvbnN0IHNlY29uZHNJbnQgPSBkYXRlLmdldFVUQ1NlY29uZHMoKTtcbiAgICBjb25zdCBkYXlPZk1vbnRoU3RyaW5nID0gZGF5T2ZNb250aEludCA8IDEwID8gYDAke2RheU9mTW9udGhJbnR9YCA6IGAke2RheU9mTW9udGhJbnR9YDtcbiAgICBjb25zdCBob3Vyc1N0cmluZyA9IGhvdXJzSW50IDwgMTAgPyBgMCR7aG91cnNJbnR9YCA6IGAke2hvdXJzSW50fWA7XG4gICAgY29uc3QgbWludXRlc1N0cmluZyA9IG1pbnV0ZXNJbnQgPCAxMCA/IGAwJHttaW51dGVzSW50fWAgOiBgJHttaW51dGVzSW50fWA7XG4gICAgY29uc3Qgc2Vjb25kc1N0cmluZyA9IHNlY29uZHNJbnQgPCAxMCA/IGAwJHtzZWNvbmRzSW50fWAgOiBgJHtzZWNvbmRzSW50fWA7XG4gICAgcmV0dXJuIGAke0RBWVNbZGF5T2ZXZWVrXX0sICR7ZGF5T2ZNb250aFN0cmluZ30gJHtNT05USFNbbW9udGhdfSAke3llYXJ9ICR7aG91cnNTdHJpbmd9OiR7bWludXRlc1N0cmluZ306JHtzZWNvbmRzU3RyaW5nfSBHTVRgO1xufVxuY29uc3QgUkZDMzMzOSA9IG5ldyBSZWdFeHAoL14oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KVt0VF0oXFxkezJ9KTooXFxkezJ9KTooXFxkezJ9KSg/OlxcLihcXGQrKSk/W3paXSQvKTtcbmNvbnN0IHBhcnNlUmZjMzMzOURhdGVUaW1lID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUkZDLTMzMzkgZGF0ZS10aW1lcyBtdXN0IGJlIGV4cHJlc3NlZCBhcyBzdHJpbmdzXCIpO1xuICAgIH1cbiAgICBjb25zdCBtYXRjaCA9IFJGQzMzMzkuZXhlYyh2YWx1ZSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBSRkMtMzMzOSBkYXRlLXRpbWUgdmFsdWVcIik7XG4gICAgfVxuICAgIGNvbnN0IFtfLCB5ZWFyU3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VycywgbWludXRlcywgc2Vjb25kcywgZnJhY3Rpb25hbE1pbGxpc2Vjb25kc10gPSBtYXRjaDtcbiAgICBjb25zdCB5ZWFyID0gc3RyaWN0UGFyc2VTaG9ydChzdHJpcExlYWRpbmdaZXJvZXMoeWVhclN0cikpO1xuICAgIGNvbnN0IG1vbnRoID0gcGFyc2VEYXRlVmFsdWUobW9udGhTdHIsIFwibW9udGhcIiwgMSwgMTIpO1xuICAgIGNvbnN0IGRheSA9IHBhcnNlRGF0ZVZhbHVlKGRheVN0ciwgXCJkYXlcIiwgMSwgMzEpO1xuICAgIHJldHVybiBidWlsZERhdGUoeWVhciwgbW9udGgsIGRheSwgeyBob3VycywgbWludXRlcywgc2Vjb25kcywgZnJhY3Rpb25hbE1pbGxpc2Vjb25kcyB9KTtcbn07XG5jb25zdCBSRkMzMzM5X1dJVEhfT0ZGU0VUJDEgPSBuZXcgUmVnRXhwKC9eKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSlbdFRdKFxcZHsyfSk6KFxcZHsyfSk6KFxcZHsyfSkoPzpcXC4oXFxkKykpPygoWy0rXVxcZHsyfVxcOlxcZHsyfSl8W3paXSkkLyk7XG5jb25zdCBwYXJzZVJmYzMzMzlEYXRlVGltZVdpdGhPZmZzZXQgPSAodmFsdWUpID0+IHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJSRkMtMzMzOSBkYXRlLXRpbWVzIG11c3QgYmUgZXhwcmVzc2VkIGFzIHN0cmluZ3NcIik7XG4gICAgfVxuICAgIGNvbnN0IG1hdGNoID0gUkZDMzMzOV9XSVRIX09GRlNFVCQxLmV4ZWModmFsdWUpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgUkZDLTMzMzkgZGF0ZS10aW1lIHZhbHVlXCIpO1xuICAgIH1cbiAgICBjb25zdCBbXywgeWVhclN0ciwgbW9udGhTdHIsIGRheVN0ciwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGZyYWN0aW9uYWxNaWxsaXNlY29uZHMsIG9mZnNldFN0cl0gPSBtYXRjaDtcbiAgICBjb25zdCB5ZWFyID0gc3RyaWN0UGFyc2VTaG9ydChzdHJpcExlYWRpbmdaZXJvZXMoeWVhclN0cikpO1xuICAgIGNvbnN0IG1vbnRoID0gcGFyc2VEYXRlVmFsdWUobW9udGhTdHIsIFwibW9udGhcIiwgMSwgMTIpO1xuICAgIGNvbnN0IGRheSA9IHBhcnNlRGF0ZVZhbHVlKGRheVN0ciwgXCJkYXlcIiwgMSwgMzEpO1xuICAgIGNvbnN0IGRhdGUgPSBidWlsZERhdGUoeWVhciwgbW9udGgsIGRheSwgeyBob3VycywgbWludXRlcywgc2Vjb25kcywgZnJhY3Rpb25hbE1pbGxpc2Vjb25kcyB9KTtcbiAgICBpZiAob2Zmc2V0U3RyLnRvVXBwZXJDYXNlKCkgIT0gXCJaXCIpIHtcbiAgICAgICAgZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpIC0gcGFyc2VPZmZzZXRUb01pbGxpc2Vjb25kcyhvZmZzZXRTdHIpKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGU7XG59O1xuY29uc3QgSU1GX0ZJWERBVEUkMSA9IG5ldyBSZWdFeHAoL14oPzpNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLCAoXFxkezJ9KSAoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpIChcXGR7NH0pIChcXGR7MSwyfSk6KFxcZHsyfSk6KFxcZHsyfSkoPzpcXC4oXFxkKykpPyBHTVQkLyk7XG5jb25zdCBSRkNfODUwX0RBVEUkMSA9IG5ldyBSZWdFeHAoL14oPzpNb25kYXl8VHVlc2RheXxXZWRuZXNkYXl8VGh1cnNkYXl8RnJpZGF5fFNhdHVyZGF5fFN1bmRheSksIChcXGR7Mn0pLShKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYyktKFxcZHsyfSkgKFxcZHsxLDJ9KTooXFxkezJ9KTooXFxkezJ9KSg/OlxcLihcXGQrKSk/IEdNVCQvKTtcbmNvbnN0IEFTQ19USU1FJDEgPSBuZXcgUmVnRXhwKC9eKD86TW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSAoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpICggWzEtOV18XFxkezJ9KSAoXFxkezEsMn0pOihcXGR7Mn0pOihcXGR7Mn0pKD86XFwuKFxcZCspKT8gKFxcZHs0fSkkLyk7XG5jb25zdCBwYXJzZVJmYzcyMzFEYXRlVGltZSA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJGQy03MjMxIGRhdGUtdGltZXMgbXVzdCBiZSBleHByZXNzZWQgYXMgc3RyaW5nc1wiKTtcbiAgICB9XG4gICAgbGV0IG1hdGNoID0gSU1GX0ZJWERBVEUkMS5leGVjKHZhbHVlKTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgW18sIGRheVN0ciwgbW9udGhTdHIsIHllYXJTdHIsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBmcmFjdGlvbmFsTWlsbGlzZWNvbmRzXSA9IG1hdGNoO1xuICAgICAgICByZXR1cm4gYnVpbGREYXRlKHN0cmljdFBhcnNlU2hvcnQoc3RyaXBMZWFkaW5nWmVyb2VzKHllYXJTdHIpKSwgcGFyc2VNb250aEJ5U2hvcnROYW1lKG1vbnRoU3RyKSwgcGFyc2VEYXRlVmFsdWUoZGF5U3RyLCBcImRheVwiLCAxLCAzMSksIHsgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGZyYWN0aW9uYWxNaWxsaXNlY29uZHMgfSk7XG4gICAgfVxuICAgIG1hdGNoID0gUkZDXzg1MF9EQVRFJDEuZXhlYyh2YWx1ZSk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IFtfLCBkYXlTdHIsIG1vbnRoU3RyLCB5ZWFyU3RyLCBob3VycywgbWludXRlcywgc2Vjb25kcywgZnJhY3Rpb25hbE1pbGxpc2Vjb25kc10gPSBtYXRjaDtcbiAgICAgICAgcmV0dXJuIGFkanVzdFJmYzg1MFllYXIoYnVpbGREYXRlKHBhcnNlVHdvRGlnaXRZZWFyKHllYXJTdHIpLCBwYXJzZU1vbnRoQnlTaG9ydE5hbWUobW9udGhTdHIpLCBwYXJzZURhdGVWYWx1ZShkYXlTdHIsIFwiZGF5XCIsIDEsIDMxKSwge1xuICAgICAgICAgICAgaG91cnMsXG4gICAgICAgICAgICBtaW51dGVzLFxuICAgICAgICAgICAgc2Vjb25kcyxcbiAgICAgICAgICAgIGZyYWN0aW9uYWxNaWxsaXNlY29uZHMsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgbWF0Y2ggPSBBU0NfVElNRSQxLmV4ZWModmFsdWUpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBbXywgbW9udGhTdHIsIGRheVN0ciwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGZyYWN0aW9uYWxNaWxsaXNlY29uZHMsIHllYXJTdHJdID0gbWF0Y2g7XG4gICAgICAgIHJldHVybiBidWlsZERhdGUoc3RyaWN0UGFyc2VTaG9ydChzdHJpcExlYWRpbmdaZXJvZXMoeWVhclN0cikpLCBwYXJzZU1vbnRoQnlTaG9ydE5hbWUobW9udGhTdHIpLCBwYXJzZURhdGVWYWx1ZShkYXlTdHIudHJpbUxlZnQoKSwgXCJkYXlcIiwgMSwgMzEpLCB7IGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBmcmFjdGlvbmFsTWlsbGlzZWNvbmRzIH0pO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBSRkMtNzIzMSBkYXRlLXRpbWUgdmFsdWVcIik7XG59O1xuY29uc3QgcGFyc2VFcG9jaFRpbWVzdGFtcCA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGxldCB2YWx1ZUFzRG91YmxlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgdmFsdWVBc0RvdWJsZSA9IHZhbHVlO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdmFsdWVBc0RvdWJsZSA9IHN0cmljdFBhcnNlRG91YmxlKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlLnRhZyA9PT0gMSkge1xuICAgICAgICB2YWx1ZUFzRG91YmxlID0gdmFsdWUudmFsdWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXBvY2ggdGltZXN0YW1wcyBtdXN0IGJlIGV4cHJlc3NlZCBhcyBmbG9hdGluZyBwb2ludCBudW1iZXJzIG9yIHRoZWlyIHN0cmluZyByZXByZXNlbnRhdGlvblwiKTtcbiAgICB9XG4gICAgaWYgKE51bWJlci5pc05hTih2YWx1ZUFzRG91YmxlKSB8fCB2YWx1ZUFzRG91YmxlID09PSBJbmZpbml0eSB8fCB2YWx1ZUFzRG91YmxlID09PSAtSW5maW5pdHkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkVwb2NoIHRpbWVzdGFtcHMgbXVzdCBiZSB2YWxpZCwgbm9uLUluZmluaXRlLCBub24tTmFOIG51bWVyaWNzXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUoTWF0aC5yb3VuZCh2YWx1ZUFzRG91YmxlICogMTAwMCkpO1xufTtcbmNvbnN0IGJ1aWxkRGF0ZSA9ICh5ZWFyLCBtb250aCwgZGF5LCB0aW1lKSA9PiB7XG4gICAgY29uc3QgYWRqdXN0ZWRNb250aCA9IG1vbnRoIC0gMTtcbiAgICB2YWxpZGF0ZURheU9mTW9udGgoeWVhciwgYWRqdXN0ZWRNb250aCwgZGF5KTtcbiAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgYWRqdXN0ZWRNb250aCwgZGF5LCBwYXJzZURhdGVWYWx1ZSh0aW1lLmhvdXJzLCBcImhvdXJcIiwgMCwgMjMpLCBwYXJzZURhdGVWYWx1ZSh0aW1lLm1pbnV0ZXMsIFwibWludXRlXCIsIDAsIDU5KSwgcGFyc2VEYXRlVmFsdWUodGltZS5zZWNvbmRzLCBcInNlY29uZHNcIiwgMCwgNjApLCBwYXJzZU1pbGxpc2Vjb25kcyh0aW1lLmZyYWN0aW9uYWxNaWxsaXNlY29uZHMpKSk7XG59O1xuY29uc3QgcGFyc2VUd29EaWdpdFllYXIgPSAodmFsdWUpID0+IHtcbiAgICBjb25zdCB0aGlzWWVhciA9IG5ldyBEYXRlKCkuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICBjb25zdCB2YWx1ZUluVGhpc0NlbnR1cnkgPSBNYXRoLmZsb29yKHRoaXNZZWFyIC8gMTAwKSAqIDEwMCArIHN0cmljdFBhcnNlU2hvcnQoc3RyaXBMZWFkaW5nWmVyb2VzKHZhbHVlKSk7XG4gICAgaWYgKHZhbHVlSW5UaGlzQ2VudHVyeSA8IHRoaXNZZWFyKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZUluVGhpc0NlbnR1cnkgKyAxMDA7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZUluVGhpc0NlbnR1cnk7XG59O1xuY29uc3QgRklGVFlfWUVBUlNfSU5fTUlMTElTID0gNTAgKiAzNjUgKiAyNCAqIDYwICogNjAgKiAxMDAwO1xuY29uc3QgYWRqdXN0UmZjODUwWWVhciA9IChpbnB1dCkgPT4ge1xuICAgIGlmIChpbnB1dC5nZXRUaW1lKCkgLSBuZXcgRGF0ZSgpLmdldFRpbWUoKSA+IEZJRlRZX1lFQVJTX0lOX01JTExJUykge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoaW5wdXQuZ2V0VVRDRnVsbFllYXIoKSAtIDEwMCwgaW5wdXQuZ2V0VVRDTW9udGgoKSwgaW5wdXQuZ2V0VVRDRGF0ZSgpLCBpbnB1dC5nZXRVVENIb3VycygpLCBpbnB1dC5nZXRVVENNaW51dGVzKCksIGlucHV0LmdldFVUQ1NlY29uZHMoKSwgaW5wdXQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGlucHV0O1xufTtcbmNvbnN0IHBhcnNlTW9udGhCeVNob3J0TmFtZSA9ICh2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IG1vbnRoSWR4ID0gTU9OVEhTLmluZGV4T2YodmFsdWUpO1xuICAgIGlmIChtb250aElkeCA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBtb250aDogJHt2YWx1ZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIG1vbnRoSWR4ICsgMTtcbn07XG5jb25zdCBEQVlTX0lOX01PTlRIID0gWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdO1xuY29uc3QgdmFsaWRhdGVEYXlPZk1vbnRoID0gKHllYXIsIG1vbnRoLCBkYXkpID0+IHtcbiAgICBsZXQgbWF4RGF5cyA9IERBWVNfSU5fTU9OVEhbbW9udGhdO1xuICAgIGlmIChtb250aCA9PT0gMSAmJiBpc0xlYXBZZWFyKHllYXIpKSB7XG4gICAgICAgIG1heERheXMgPSAyOTtcbiAgICB9XG4gICAgaWYgKGRheSA+IG1heERheXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBkYXkgZm9yICR7TU9OVEhTW21vbnRoXX0gaW4gJHt5ZWFyfTogJHtkYXl9YCk7XG4gICAgfVxufTtcbmNvbnN0IGlzTGVhcFllYXIgPSAoeWVhcikgPT4ge1xuICAgIHJldHVybiB5ZWFyICUgNCA9PT0gMCAmJiAoeWVhciAlIDEwMCAhPT0gMCB8fCB5ZWFyICUgNDAwID09PSAwKTtcbn07XG5jb25zdCBwYXJzZURhdGVWYWx1ZSA9ICh2YWx1ZSwgdHlwZSwgbG93ZXIsIHVwcGVyKSA9PiB7XG4gICAgY29uc3QgZGF0ZVZhbCA9IHN0cmljdFBhcnNlQnl0ZShzdHJpcExlYWRpbmdaZXJvZXModmFsdWUpKTtcbiAgICBpZiAoZGF0ZVZhbCA8IGxvd2VyIHx8IGRhdGVWYWwgPiB1cHBlcikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3R5cGV9IG11c3QgYmUgYmV0d2VlbiAke2xvd2VyfSBhbmQgJHt1cHBlcn0sIGluY2x1c2l2ZWApO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZVZhbDtcbn07XG5jb25zdCBwYXJzZU1pbGxpc2Vjb25kcyA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICByZXR1cm4gc3RyaWN0UGFyc2VGbG9hdDMyKFwiMC5cIiArIHZhbHVlKSAqIDEwMDA7XG59O1xuY29uc3QgcGFyc2VPZmZzZXRUb01pbGxpc2Vjb25kcyA9ICh2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IGRpcmVjdGlvblN0ciA9IHZhbHVlWzBdO1xuICAgIGxldCBkaXJlY3Rpb24gPSAxO1xuICAgIGlmIChkaXJlY3Rpb25TdHIgPT0gXCIrXCIpIHtcbiAgICAgICAgZGlyZWN0aW9uID0gMTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZGlyZWN0aW9uU3RyID09IFwiLVwiKSB7XG4gICAgICAgIGRpcmVjdGlvbiA9IC0xO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgT2Zmc2V0IGRpcmVjdGlvbiwgJHtkaXJlY3Rpb25TdHJ9LCBtdXN0IGJlIFwiK1wiIG9yIFwiLVwiYCk7XG4gICAgfVxuICAgIGNvbnN0IGhvdXIgPSBOdW1iZXIodmFsdWUuc3Vic3RyaW5nKDEsIDMpKTtcbiAgICBjb25zdCBtaW51dGUgPSBOdW1iZXIodmFsdWUuc3Vic3RyaW5nKDQsIDYpKTtcbiAgICByZXR1cm4gZGlyZWN0aW9uICogKGhvdXIgKiA2MCArIG1pbnV0ZSkgKiA2MCAqIDEwMDA7XG59O1xuY29uc3Qgc3RyaXBMZWFkaW5nWmVyb2VzID0gKHZhbHVlKSA9PiB7XG4gICAgbGV0IGlkeCA9IDA7XG4gICAgd2hpbGUgKGlkeCA8IHZhbHVlLmxlbmd0aCAtIDEgJiYgdmFsdWUuY2hhckF0KGlkeCkgPT09IFwiMFwiKSB7XG4gICAgICAgIGlkeCsrO1xuICAgIH1cbiAgICBpZiAoaWR4ID09PSAwKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlLnNsaWNlKGlkeCk7XG59O1xuXG5jb25zdCBMYXp5SnNvblN0cmluZyA9IGZ1bmN0aW9uIExhenlKc29uU3RyaW5nKHZhbCkge1xuICAgIGNvbnN0IHN0ciA9IE9iamVjdC5hc3NpZ24obmV3IFN0cmluZyh2YWwpLCB7XG4gICAgICAgIGRlc2VyaWFsaXplSlNPTigpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKFN0cmluZyh2YWwpKTtcbiAgICAgICAgfSxcbiAgICAgICAgdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIHRvSlNPTigpIHtcbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gc3RyO1xufTtcbkxhenlKc29uU3RyaW5nLmZyb20gPSAob2JqZWN0KSA9PiB7XG4gICAgaWYgKG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0ID09PSBcIm9iamVjdFwiICYmIChvYmplY3QgaW5zdGFuY2VvZiBMYXp5SnNvblN0cmluZyB8fCBcImRlc2VyaWFsaXplSlNPTlwiIGluIG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdCA9PT0gXCJzdHJpbmdcIiB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KSA9PT0gU3RyaW5nLnByb3RvdHlwZSkge1xuICAgICAgICByZXR1cm4gTGF6eUpzb25TdHJpbmcoU3RyaW5nKG9iamVjdCkpO1xuICAgIH1cbiAgICByZXR1cm4gTGF6eUpzb25TdHJpbmcoSlNPTi5zdHJpbmdpZnkob2JqZWN0KSk7XG59O1xuTGF6eUpzb25TdHJpbmcuZnJvbU9iamVjdCA9IExhenlKc29uU3RyaW5nLmZyb207XG5cbmZ1bmN0aW9uIHF1b3RlSGVhZGVyKHBhcnQpIHtcbiAgICBpZiAocGFydC5pbmNsdWRlcyhcIixcIikgfHwgcGFydC5pbmNsdWRlcygnXCInKSkge1xuICAgICAgICBwYXJ0ID0gYFwiJHtwYXJ0LnJlcGxhY2UoL1wiL2csICdcXFxcXCInKX1cImA7XG4gICAgfVxuICAgIHJldHVybiBwYXJ0O1xufVxuXG5jb25zdCBkZGQgPSBgKD86TW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSg/OltuZXx1P3JdP3M/ZGF5KT9gO1xuY29uc3QgbW1tID0gYChKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylgO1xuY29uc3QgdGltZSA9IGAoXFxcXGQ/XFxcXGQpOihcXFxcZHsyfSk6KFxcXFxkezJ9KSg/OlxcXFwuKFxcXFxkKykpP2A7XG5jb25zdCBkYXRlID0gYChcXFxcZD9cXFxcZClgO1xuY29uc3QgeWVhciA9IGAoXFxcXGR7NH0pYDtcbmNvbnN0IFJGQzMzMzlfV0lUSF9PRkZTRVQgPSBuZXcgUmVnRXhwKC9eKFxcZHs0fSktKFxcZFxcZCktKFxcZFxcZClbdFRdKFxcZFxcZCk6KFxcZFxcZCk6KFxcZFxcZCkoXFwuKFxcZCspKT8oKFstK11cXGRcXGQ6XFxkXFxkKXxbelpdKSQvKTtcbmNvbnN0IElNRl9GSVhEQVRFID0gbmV3IFJlZ0V4cChgXiR7ZGRkfSwgJHtkYXRlfSAke21tbX0gJHt5ZWFyfSAke3RpbWV9IEdNVCRgKTtcbmNvbnN0IFJGQ184NTBfREFURSA9IG5ldyBSZWdFeHAoYF4ke2RkZH0sICR7ZGF0ZX0tJHttbW19LShcXFxcZFxcXFxkKSAke3RpbWV9IEdNVCRgKTtcbmNvbnN0IEFTQ19USU1FID0gbmV3IFJlZ0V4cChgXiR7ZGRkfSAke21tbX0gKCBbMS05XXxcXFxcZFxcXFxkKSAke3RpbWV9ICR7eWVhcn0kYCk7XG5jb25zdCBtb250aHMgPSBbXCJKYW5cIiwgXCJGZWJcIiwgXCJNYXJcIiwgXCJBcHJcIiwgXCJNYXlcIiwgXCJKdW5cIiwgXCJKdWxcIiwgXCJBdWdcIiwgXCJTZXBcIiwgXCJPY3RcIiwgXCJOb3ZcIiwgXCJEZWNcIl07XG5jb25zdCBfcGFyc2VFcG9jaFRpbWVzdGFtcCA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIGxldCBudW0gPSBOYU47XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBudW0gPSB2YWx1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICghL14tP1xcZCpcXC4/XFxkKyQvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBwYXJzZUVwb2NoVGltZXN0YW1wIC0gbnVtZXJpYyBzdHJpbmcgaW52YWxpZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBudW0gPSBOdW1iZXIucGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZS50YWcgPT09IDEpIHtcbiAgICAgICAgbnVtID0gdmFsdWUudmFsdWU7XG4gICAgfVxuICAgIGlmIChpc05hTihudW0pIHx8IE1hdGguYWJzKG51bSkgPT09IEluZmluaXR5KSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJFcG9jaCB0aW1lc3RhbXBzIG11c3QgYmUgdmFsaWQgZmluaXRlIG51bWJlcnMuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUoTWF0aC5yb3VuZChudW0gKiAxMDAwKSk7XG59O1xuY29uc3QgX3BhcnNlUmZjMzMzOURhdGVUaW1lV2l0aE9mZnNldCA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJGQzMzMzkgdGltZXN0YW1wcyBtdXN0IGJlIHN0cmluZ3NcIik7XG4gICAgfVxuICAgIGNvbnN0IG1hdGNoZXMgPSBSRkMzMzM5X1dJVEhfT0ZGU0VULmV4ZWModmFsdWUpO1xuICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIFJGQzMzMzkgdGltZXN0YW1wIGZvcm1hdCAke3ZhbHVlfWApO1xuICAgIH1cbiAgICBjb25zdCBbLCB5ZWFyU3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VycywgbWludXRlcywgc2Vjb25kcywgLCBtcywgb2Zmc2V0U3RyXSA9IG1hdGNoZXM7XG4gICAgcmFuZ2UobW9udGhTdHIsIDEsIDEyKTtcbiAgICByYW5nZShkYXlTdHIsIDEsIDMxKTtcbiAgICByYW5nZShob3VycywgMCwgMjMpO1xuICAgIHJhbmdlKG1pbnV0ZXMsIDAsIDU5KTtcbiAgICByYW5nZShzZWNvbmRzLCAwLCA2MCk7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKE51bWJlcih5ZWFyU3RyKSwgTnVtYmVyKG1vbnRoU3RyKSAtIDEsIE51bWJlcihkYXlTdHIpLCBOdW1iZXIoaG91cnMpLCBOdW1iZXIobWludXRlcyksIE51bWJlcihzZWNvbmRzKSwgTnVtYmVyKG1zKSA/IE1hdGgucm91bmQocGFyc2VGbG9hdChgMC4ke21zfWApICogMTAwMCkgOiAwKSk7XG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcihOdW1iZXIoeWVhclN0cikpO1xuICAgIGlmIChvZmZzZXRTdHIudG9VcHBlckNhc2UoKSAhPSBcIlpcIikge1xuICAgICAgICBjb25zdCBbLCBzaWduLCBvZmZzZXRILCBvZmZzZXRNXSA9IC8oWystXSkoXFxkXFxkKTooXFxkXFxkKS8uZXhlYyhvZmZzZXRTdHIpIHx8IFt2b2lkIDAsIFwiK1wiLCAwLCAwXTtcbiAgICAgICAgY29uc3Qgc2NhbGFyID0gc2lnbiA9PT0gXCItXCIgPyAxIDogLTE7XG4gICAgICAgIGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArIHNjYWxhciAqIChOdW1iZXIob2Zmc2V0SCkgKiA2MCAqIDYwICogMTAwMCArIE51bWJlcihvZmZzZXRNKSAqIDYwICogMTAwMCkpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZTtcbn07XG5jb25zdCBfcGFyc2VSZmM3MjMxRGF0ZVRpbWUgPSAodmFsdWUpID0+IHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJSRkM3MjMxIHRpbWVzdGFtcHMgbXVzdCBiZSBzdHJpbmdzLlwiKTtcbiAgICB9XG4gICAgbGV0IGRheTtcbiAgICBsZXQgbW9udGg7XG4gICAgbGV0IHllYXI7XG4gICAgbGV0IGhvdXI7XG4gICAgbGV0IG1pbnV0ZTtcbiAgICBsZXQgc2Vjb25kO1xuICAgIGxldCBmcmFjdGlvbjtcbiAgICBsZXQgbWF0Y2hlcztcbiAgICBpZiAoKG1hdGNoZXMgPSBJTUZfRklYREFURS5leGVjKHZhbHVlKSkpIHtcbiAgICAgICAgWywgZGF5LCBtb250aCwgeWVhciwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZyYWN0aW9uXSA9IG1hdGNoZXM7XG4gICAgfVxuICAgIGVsc2UgaWYgKChtYXRjaGVzID0gUkZDXzg1MF9EQVRFLmV4ZWModmFsdWUpKSkge1xuICAgICAgICBbLCBkYXksIG1vbnRoLCB5ZWFyLCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhY3Rpb25dID0gbWF0Y2hlcztcbiAgICAgICAgeWVhciA9IChOdW1iZXIoeWVhcikgKyAxOTAwKS50b1N0cmluZygpO1xuICAgIH1cbiAgICBlbHNlIGlmICgobWF0Y2hlcyA9IEFTQ19USU1FLmV4ZWModmFsdWUpKSkge1xuICAgICAgICBbLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhY3Rpb24sIHllYXJdID0gbWF0Y2hlcztcbiAgICB9XG4gICAgaWYgKHllYXIgJiYgc2Vjb25kKSB7XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IERhdGUuVVRDKE51bWJlcih5ZWFyKSwgbW9udGhzLmluZGV4T2YobW9udGgpLCBOdW1iZXIoZGF5KSwgTnVtYmVyKGhvdXIpLCBOdW1iZXIobWludXRlKSwgTnVtYmVyKHNlY29uZCksIGZyYWN0aW9uID8gTWF0aC5yb3VuZChwYXJzZUZsb2F0KGAwLiR7ZnJhY3Rpb259YCkgKiAxMDAwKSA6IDApO1xuICAgICAgICByYW5nZShkYXksIDEsIDMxKTtcbiAgICAgICAgcmFuZ2UoaG91ciwgMCwgMjMpO1xuICAgICAgICByYW5nZShtaW51dGUsIDAsIDU5KTtcbiAgICAgICAgcmFuZ2Uoc2Vjb25kLCAwLCA2MCk7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0aW1lc3RhbXApO1xuICAgICAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKE51bWJlcih5ZWFyKSk7XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIFJGQzcyMzEgZGF0ZS10aW1lIHZhbHVlICR7dmFsdWV9LmApO1xufTtcbmZ1bmN0aW9uIHJhbmdlKHYsIG1pbiwgbWF4KSB7XG4gICAgY29uc3QgX3YgPSBOdW1iZXIodik7XG4gICAgaWYgKF92IDwgbWluIHx8IF92ID4gbWF4KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgJHtfdn0gb3V0IG9mIHJhbmdlIFske21pbn0sICR7bWF4fV1gKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNwbGl0RXZlcnkodmFsdWUsIGRlbGltaXRlciwgbnVtRGVsaW1pdGVycykge1xuICAgIGlmIChudW1EZWxpbWl0ZXJzIDw9IDAgfHwgIU51bWJlci5pc0ludGVnZXIobnVtRGVsaW1pdGVycykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBudW1iZXIgb2YgZGVsaW1pdGVycyAoXCIgKyBudW1EZWxpbWl0ZXJzICsgXCIpIGZvciBzcGxpdEV2ZXJ5LlwiKTtcbiAgICB9XG4gICAgY29uc3Qgc2VnbWVudHMgPSB2YWx1ZS5zcGxpdChkZWxpbWl0ZXIpO1xuICAgIGlmIChudW1EZWxpbWl0ZXJzID09PSAxKSB7XG4gICAgICAgIHJldHVybiBzZWdtZW50cztcbiAgICB9XG4gICAgY29uc3QgY29tcG91bmRTZWdtZW50cyA9IFtdO1xuICAgIGxldCBjdXJyZW50U2VnbWVudCA9IFwiXCI7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY3VycmVudFNlZ21lbnQgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIGN1cnJlbnRTZWdtZW50ID0gc2VnbWVudHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50U2VnbWVudCArPSBkZWxpbWl0ZXIgKyBzZWdtZW50c1tpXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGkgKyAxKSAlIG51bURlbGltaXRlcnMgPT09IDApIHtcbiAgICAgICAgICAgIGNvbXBvdW5kU2VnbWVudHMucHVzaChjdXJyZW50U2VnbWVudCk7XG4gICAgICAgICAgICBjdXJyZW50U2VnbWVudCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGN1cnJlbnRTZWdtZW50ICE9PSBcIlwiKSB7XG4gICAgICAgIGNvbXBvdW5kU2VnbWVudHMucHVzaChjdXJyZW50U2VnbWVudCk7XG4gICAgfVxuICAgIHJldHVybiBjb21wb3VuZFNlZ21lbnRzO1xufVxuXG5jb25zdCBzcGxpdEhlYWRlciA9ICh2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IHogPSB2YWx1ZS5sZW5ndGg7XG4gICAgY29uc3QgdmFsdWVzID0gW107XG4gICAgbGV0IHdpdGhpblF1b3RlcyA9IGZhbHNlO1xuICAgIGxldCBwcmV2Q2hhciA9IHVuZGVmaW5lZDtcbiAgICBsZXQgYW5jaG9yID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHo7ICsraSkge1xuICAgICAgICBjb25zdCBjaGFyID0gdmFsdWVbaV07XG4gICAgICAgIHN3aXRjaCAoY2hhcikge1xuICAgICAgICAgICAgY2FzZSBgXCJgOlxuICAgICAgICAgICAgICAgIGlmIChwcmV2Q2hhciAhPT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgd2l0aGluUXVvdGVzID0gIXdpdGhpblF1b3RlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiLFwiOlxuICAgICAgICAgICAgICAgIGlmICghd2l0aGluUXVvdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlLnNsaWNlKGFuY2hvciwgaSkpO1xuICAgICAgICAgICAgICAgICAgICBhbmNob3IgPSBpICsgMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcHJldkNoYXIgPSBjaGFyO1xuICAgIH1cbiAgICB2YWx1ZXMucHVzaCh2YWx1ZS5zbGljZShhbmNob3IpKTtcbiAgICByZXR1cm4gdmFsdWVzLm1hcCgodikgPT4ge1xuICAgICAgICB2ID0gdi50cmltKCk7XG4gICAgICAgIGNvbnN0IHogPSB2Lmxlbmd0aDtcbiAgICAgICAgaWYgKHogPCAyKSB7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodlswXSA9PT0gYFwiYCAmJiB2W3ogLSAxXSA9PT0gYFwiYCkge1xuICAgICAgICAgICAgdiA9IHYuc2xpY2UoMSwgeiAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2LnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKTtcbiAgICB9KTtcbn07XG5cbmNvbnN0IGZvcm1hdCA9IC9eLT9cXGQqKFxcLlxcZCspPyQvO1xuY2xhc3MgTnVtZXJpY1ZhbHVlIHtcbiAgICBzdHJpbmc7XG4gICAgdHlwZTtcbiAgICBjb25zdHJ1Y3RvcihzdHJpbmcsIHR5cGUpIHtcbiAgICAgICAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIGlmICghZm9ybWF0LnRlc3Qoc3RyaW5nKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBAc21pdGh5L2NvcmUvc2VyZGUgLSBOdW1lcmljVmFsdWUgbXVzdCBvbmx5IGNvbnRhaW4gWzAtOV0sIGF0IG1vc3Qgb25lIGRlY2ltYWwgcG9pbnQgXCIuXCIsIGFuZCBhbiBvcHRpb25hbCBuZWdhdGlvbiBwcmVmaXggXCItXCIuYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmluZztcbiAgICB9XG4gICAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdKG9iamVjdCkge1xuICAgICAgICBpZiAoIW9iamVjdCB8fCB0eXBlb2Ygb2JqZWN0ICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgX252ID0gb2JqZWN0O1xuICAgICAgICByZXR1cm4gTnVtZXJpY1ZhbHVlLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKG9iamVjdCkgfHwgKF9udi50eXBlID09PSBcImJpZ0RlY2ltYWxcIiAmJiBmb3JtYXQudGVzdChfbnYuc3RyaW5nKSk7XG4gICAgfVxufVxuZnVuY3Rpb24gbnYoaW5wdXQpIHtcbiAgICByZXR1cm4gbmV3IE51bWVyaWNWYWx1ZShTdHJpbmcoaW5wdXQpLCBcImJpZ0RlY2ltYWxcIik7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdlbmVyYXRlSWRlbXBvdGVuY3lUb2tlblwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHV1aWQudjQ7IH1cbn0pO1xuZXhwb3J0cy5MYXp5SnNvblN0cmluZyA9IExhenlKc29uU3RyaW5nO1xuZXhwb3J0cy5OdW1lcmljVmFsdWUgPSBOdW1lcmljVmFsdWU7XG5leHBvcnRzLl9wYXJzZUVwb2NoVGltZXN0YW1wID0gX3BhcnNlRXBvY2hUaW1lc3RhbXA7XG5leHBvcnRzLl9wYXJzZVJmYzMzMzlEYXRlVGltZVdpdGhPZmZzZXQgPSBfcGFyc2VSZmMzMzM5RGF0ZVRpbWVXaXRoT2Zmc2V0O1xuZXhwb3J0cy5fcGFyc2VSZmM3MjMxRGF0ZVRpbWUgPSBfcGFyc2VSZmM3MjMxRGF0ZVRpbWU7XG5leHBvcnRzLmNvcHlEb2N1bWVudFdpdGhUcmFuc2Zvcm0gPSBjb3B5RG9jdW1lbnRXaXRoVHJhbnNmb3JtO1xuZXhwb3J0cy5kYXRlVG9VdGNTdHJpbmcgPSBkYXRlVG9VdGNTdHJpbmc7XG5leHBvcnRzLmV4cGVjdEJvb2xlYW4gPSBleHBlY3RCb29sZWFuO1xuZXhwb3J0cy5leHBlY3RCeXRlID0gZXhwZWN0Qnl0ZTtcbmV4cG9ydHMuZXhwZWN0RmxvYXQzMiA9IGV4cGVjdEZsb2F0MzI7XG5leHBvcnRzLmV4cGVjdEludCA9IGV4cGVjdEludDtcbmV4cG9ydHMuZXhwZWN0SW50MzIgPSBleHBlY3RJbnQzMjtcbmV4cG9ydHMuZXhwZWN0TG9uZyA9IGV4cGVjdExvbmc7XG5leHBvcnRzLmV4cGVjdE5vbk51bGwgPSBleHBlY3ROb25OdWxsO1xuZXhwb3J0cy5leHBlY3ROdW1iZXIgPSBleHBlY3ROdW1iZXI7XG5leHBvcnRzLmV4cGVjdE9iamVjdCA9IGV4cGVjdE9iamVjdDtcbmV4cG9ydHMuZXhwZWN0U2hvcnQgPSBleHBlY3RTaG9ydDtcbmV4cG9ydHMuZXhwZWN0U3RyaW5nID0gZXhwZWN0U3RyaW5nO1xuZXhwb3J0cy5leHBlY3RVbmlvbiA9IGV4cGVjdFVuaW9uO1xuZXhwb3J0cy5oYW5kbGVGbG9hdCA9IGhhbmRsZUZsb2F0O1xuZXhwb3J0cy5saW1pdGVkUGFyc2VEb3VibGUgPSBsaW1pdGVkUGFyc2VEb3VibGU7XG5leHBvcnRzLmxpbWl0ZWRQYXJzZUZsb2F0ID0gbGltaXRlZFBhcnNlRmxvYXQ7XG5leHBvcnRzLmxpbWl0ZWRQYXJzZUZsb2F0MzIgPSBsaW1pdGVkUGFyc2VGbG9hdDMyO1xuZXhwb3J0cy5sb2dnZXIgPSBsb2dnZXI7XG5leHBvcnRzLm52ID0gbnY7XG5leHBvcnRzLnBhcnNlQm9vbGVhbiA9IHBhcnNlQm9vbGVhbjtcbmV4cG9ydHMucGFyc2VFcG9jaFRpbWVzdGFtcCA9IHBhcnNlRXBvY2hUaW1lc3RhbXA7XG5leHBvcnRzLnBhcnNlUmZjMzMzOURhdGVUaW1lID0gcGFyc2VSZmMzMzM5RGF0ZVRpbWU7XG5leHBvcnRzLnBhcnNlUmZjMzMzOURhdGVUaW1lV2l0aE9mZnNldCA9IHBhcnNlUmZjMzMzOURhdGVUaW1lV2l0aE9mZnNldDtcbmV4cG9ydHMucGFyc2VSZmM3MjMxRGF0ZVRpbWUgPSBwYXJzZVJmYzcyMzFEYXRlVGltZTtcbmV4cG9ydHMucXVvdGVIZWFkZXIgPSBxdW90ZUhlYWRlcjtcbmV4cG9ydHMuc3BsaXRFdmVyeSA9IHNwbGl0RXZlcnk7XG5leHBvcnRzLnNwbGl0SGVhZGVyID0gc3BsaXRIZWFkZXI7XG5leHBvcnRzLnN0cmljdFBhcnNlQnl0ZSA9IHN0cmljdFBhcnNlQnl0ZTtcbmV4cG9ydHMuc3RyaWN0UGFyc2VEb3VibGUgPSBzdHJpY3RQYXJzZURvdWJsZTtcbmV4cG9ydHMuc3RyaWN0UGFyc2VGbG9hdCA9IHN0cmljdFBhcnNlRmxvYXQ7XG5leHBvcnRzLnN0cmljdFBhcnNlRmxvYXQzMiA9IHN0cmljdFBhcnNlRmxvYXQzMjtcbmV4cG9ydHMuc3RyaWN0UGFyc2VJbnQgPSBzdHJpY3RQYXJzZUludDtcbmV4cG9ydHMuc3RyaWN0UGFyc2VJbnQzMiA9IHN0cmljdFBhcnNlSW50MzI7XG5leHBvcnRzLnN0cmljdFBhcnNlTG9uZyA9IHN0cmljdFBhcnNlTG9uZztcbmV4cG9ydHMuc3RyaWN0UGFyc2VTaG9ydCA9IHN0cmljdFBhcnNlU2hvcnQ7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxTdHJlYW0gPSByZXF1aXJlKCdAc21pdGh5L3V0aWwtc3RyZWFtJyk7XG52YXIgc2NoZW1hID0gcmVxdWlyZSgnQHNtaXRoeS9jb3JlL3NjaGVtYScpO1xudmFyIHNlcmRlID0gcmVxdWlyZSgnQHNtaXRoeS9jb3JlL3NlcmRlJyk7XG52YXIgcHJvdG9jb2xIdHRwID0gcmVxdWlyZSgnQHNtaXRoeS9wcm90b2NvbC1odHRwJyk7XG52YXIgdXRpbEJhc2U2NCA9IHJlcXVpcmUoJ0BzbWl0aHkvdXRpbC1iYXNlNjQnKTtcbnZhciB1dGlsVXRmOCA9IHJlcXVpcmUoJ0BzbWl0aHkvdXRpbC11dGY4Jyk7XG5cbmNvbnN0IGNvbGxlY3RCb2R5ID0gYXN5bmMgKHN0cmVhbUJvZHkgPSBuZXcgVWludDhBcnJheSgpLCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKHN0cmVhbUJvZHkgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgIHJldHVybiB1dGlsU3RyZWFtLlVpbnQ4QXJyYXlCbG9iQWRhcHRlci5tdXRhdGUoc3RyZWFtQm9keSk7XG4gICAgfVxuICAgIGlmICghc3RyZWFtQm9keSkge1xuICAgICAgICByZXR1cm4gdXRpbFN0cmVhbS5VaW50OEFycmF5QmxvYkFkYXB0ZXIubXV0YXRlKG5ldyBVaW50OEFycmF5KCkpO1xuICAgIH1cbiAgICBjb25zdCBmcm9tQ29udGV4dCA9IGNvbnRleHQuc3RyZWFtQ29sbGVjdG9yKHN0cmVhbUJvZHkpO1xuICAgIHJldHVybiB1dGlsU3RyZWFtLlVpbnQ4QXJyYXlCbG9iQWRhcHRlci5tdXRhdGUoYXdhaXQgZnJvbUNvbnRleHQpO1xufTtcblxuZnVuY3Rpb24gZXh0ZW5kZWRFbmNvZGVVUklDb21wb25lbnQoc3RyKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpKl0vZywgZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgcmV0dXJuIFwiJVwiICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuICAgIH0pO1xufVxuXG5jbGFzcyBTZXJkZUNvbnRleHQge1xuICAgIHNlcmRlQ29udGV4dDtcbiAgICBzZXRTZXJkZUNvbnRleHQoc2VyZGVDb250ZXh0KSB7XG4gICAgICAgIHRoaXMuc2VyZGVDb250ZXh0ID0gc2VyZGVDb250ZXh0O1xuICAgIH1cbn1cblxuY2xhc3MgSHR0cFByb3RvY29sIGV4dGVuZHMgU2VyZGVDb250ZXh0IHtcbiAgICBvcHRpb25zO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG4gICAgZ2V0UmVxdWVzdFR5cGUoKSB7XG4gICAgICAgIHJldHVybiBwcm90b2NvbEh0dHAuSHR0cFJlcXVlc3Q7XG4gICAgfVxuICAgIGdldFJlc3BvbnNlVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHByb3RvY29sSHR0cC5IdHRwUmVzcG9uc2U7XG4gICAgfVxuICAgIHNldFNlcmRlQ29udGV4dChzZXJkZUNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5zZXJkZUNvbnRleHQgPSBzZXJkZUNvbnRleHQ7XG4gICAgICAgIHRoaXMuc2VyaWFsaXplci5zZXRTZXJkZUNvbnRleHQoc2VyZGVDb250ZXh0KTtcbiAgICAgICAgdGhpcy5kZXNlcmlhbGl6ZXIuc2V0U2VyZGVDb250ZXh0KHNlcmRlQ29udGV4dCk7XG4gICAgICAgIGlmICh0aGlzLmdldFBheWxvYWRDb2RlYygpKSB7XG4gICAgICAgICAgICB0aGlzLmdldFBheWxvYWRDb2RlYygpLnNldFNlcmRlQ29udGV4dChzZXJkZUNvbnRleHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZVNlcnZpY2VFbmRwb2ludChyZXF1ZXN0LCBlbmRwb2ludCkge1xuICAgICAgICBpZiAoXCJ1cmxcIiBpbiBlbmRwb2ludCkge1xuICAgICAgICAgICAgcmVxdWVzdC5wcm90b2NvbCA9IGVuZHBvaW50LnVybC5wcm90b2NvbDtcbiAgICAgICAgICAgIHJlcXVlc3QuaG9zdG5hbWUgPSBlbmRwb2ludC51cmwuaG9zdG5hbWU7XG4gICAgICAgICAgICByZXF1ZXN0LnBvcnQgPSBlbmRwb2ludC51cmwucG9ydCA/IE51bWJlcihlbmRwb2ludC51cmwucG9ydCkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXF1ZXN0LnBhdGggPSBlbmRwb2ludC51cmwucGF0aG5hbWU7XG4gICAgICAgICAgICByZXF1ZXN0LmZyYWdtZW50ID0gZW5kcG9pbnQudXJsLmhhc2ggfHwgdm9pZCAwO1xuICAgICAgICAgICAgcmVxdWVzdC51c2VybmFtZSA9IGVuZHBvaW50LnVybC51c2VybmFtZSB8fCB2b2lkIDA7XG4gICAgICAgICAgICByZXF1ZXN0LnBhc3N3b3JkID0gZW5kcG9pbnQudXJsLnBhc3N3b3JkIHx8IHZvaWQgMDtcbiAgICAgICAgICAgIGlmICghcmVxdWVzdC5xdWVyeSkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QucXVlcnkgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIGVuZHBvaW50LnVybC5zZWFyY2hQYXJhbXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5xdWVyeVtrXSA9IHY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlcXVlc3QucHJvdG9jb2wgPSBlbmRwb2ludC5wcm90b2NvbDtcbiAgICAgICAgICAgIHJlcXVlc3QuaG9zdG5hbWUgPSBlbmRwb2ludC5ob3N0bmFtZTtcbiAgICAgICAgICAgIHJlcXVlc3QucG9ydCA9IGVuZHBvaW50LnBvcnQgPyBOdW1iZXIoZW5kcG9pbnQucG9ydCkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXF1ZXN0LnBhdGggPSBlbmRwb2ludC5wYXRoO1xuICAgICAgICAgICAgcmVxdWVzdC5xdWVyeSA9IHtcbiAgICAgICAgICAgICAgICAuLi5lbmRwb2ludC5xdWVyeSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRIb3N0UHJlZml4KHJlcXVlc3QsIG9wZXJhdGlvblNjaGVtYSwgaW5wdXQpIHtcbiAgICAgICAgY29uc3QgaW5wdXROcyA9IHNjaGVtYS5Ob3JtYWxpemVkU2NoZW1hLm9mKG9wZXJhdGlvblNjaGVtYS5pbnB1dCk7XG4gICAgICAgIGNvbnN0IG9wVHJhaXRzID0gc2NoZW1hLnRyYW5zbGF0ZVRyYWl0cyhvcGVyYXRpb25TY2hlbWEudHJhaXRzID8/IHt9KTtcbiAgICAgICAgaWYgKG9wVHJhaXRzLmVuZHBvaW50KSB7XG4gICAgICAgICAgICBsZXQgaG9zdFByZWZpeCA9IG9wVHJhaXRzLmVuZHBvaW50Py5bMF07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGhvc3RQcmVmaXggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBob3N0TGFiZWxJbnB1dHMgPSBbLi4uaW5wdXROcy5zdHJ1Y3RJdGVyYXRvcigpXS5maWx0ZXIoKFssIG1lbWJlcl0pID0+IG1lbWJlci5nZXRNZXJnZWRUcmFpdHMoKS5ob3N0TGFiZWwpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW25hbWVdIG9mIGhvc3RMYWJlbElucHV0cykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXBsYWNlbWVudCA9IGlucHV0W25hbWVdO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlcGxhY2VtZW50ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEBzbWl0aHkvY29yZS9zY2hlbWEgLSAke25hbWV9IGluIGlucHV0IG11c3QgYmUgYSBzdHJpbmcgYXMgaG9zdExhYmVsLmApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGhvc3RQcmVmaXggPSBob3N0UHJlZml4LnJlcGxhY2UoYHske25hbWV9fWAsIHJlcGxhY2VtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5ob3N0bmFtZSA9IGhvc3RQcmVmaXggKyByZXF1ZXN0Lmhvc3RuYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGRlc2VyaWFsaXplTWV0YWRhdGEob3V0cHV0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBodHRwU3RhdHVzQ29kZTogb3V0cHV0LnN0YXR1c0NvZGUsXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IG91dHB1dC5oZWFkZXJzW1wieC1hbXpuLXJlcXVlc3RpZFwiXSA/PyBvdXRwdXQuaGVhZGVyc1tcIngtYW16bi1yZXF1ZXN0LWlkXCJdID8/IG91dHB1dC5oZWFkZXJzW1wieC1hbXotcmVxdWVzdC1pZFwiXSxcbiAgICAgICAgICAgIGV4dGVuZGVkUmVxdWVzdElkOiBvdXRwdXQuaGVhZGVyc1tcIngtYW16LWlkLTJcIl0sXG4gICAgICAgICAgICBjZklkOiBvdXRwdXQuaGVhZGVyc1tcIngtYW16LWNmLWlkXCJdLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBzZXJpYWxpemVFdmVudFN0cmVhbSh7IGV2ZW50U3RyZWFtLCByZXF1ZXN0U2NoZW1hLCBpbml0aWFsUmVxdWVzdCwgfSkge1xuICAgICAgICBjb25zdCBldmVudFN0cmVhbVNlcmRlID0gYXdhaXQgdGhpcy5sb2FkRXZlbnRTdHJlYW1DYXBhYmlsaXR5KCk7XG4gICAgICAgIHJldHVybiBldmVudFN0cmVhbVNlcmRlLnNlcmlhbGl6ZUV2ZW50U3RyZWFtKHtcbiAgICAgICAgICAgIGV2ZW50U3RyZWFtLFxuICAgICAgICAgICAgcmVxdWVzdFNjaGVtYSxcbiAgICAgICAgICAgIGluaXRpYWxSZXF1ZXN0LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgZGVzZXJpYWxpemVFdmVudFN0cmVhbSh7IHJlc3BvbnNlLCByZXNwb25zZVNjaGVtYSwgaW5pdGlhbFJlc3BvbnNlQ29udGFpbmVyLCB9KSB7XG4gICAgICAgIGNvbnN0IGV2ZW50U3RyZWFtU2VyZGUgPSBhd2FpdCB0aGlzLmxvYWRFdmVudFN0cmVhbUNhcGFiaWxpdHkoKTtcbiAgICAgICAgcmV0dXJuIGV2ZW50U3RyZWFtU2VyZGUuZGVzZXJpYWxpemVFdmVudFN0cmVhbSh7XG4gICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgIHJlc3BvbnNlU2NoZW1hLFxuICAgICAgICAgICAgaW5pdGlhbFJlc3BvbnNlQ29udGFpbmVyLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgbG9hZEV2ZW50U3RyZWFtQ2FwYWJpbGl0eSgpIHtcbiAgICAgICAgY29uc3QgeyBFdmVudFN0cmVhbVNlcmRlIH0gPSBhd2FpdCBpbXBvcnQoJ0BzbWl0aHkvY29yZS9ldmVudC1zdHJlYW1zJyk7XG4gICAgICAgIHJldHVybiBuZXcgRXZlbnRTdHJlYW1TZXJkZSh7XG4gICAgICAgICAgICBtYXJzaGFsbGVyOiB0aGlzLmdldEV2ZW50U3RyZWFtTWFyc2hhbGxlcigpLFxuICAgICAgICAgICAgc2VyaWFsaXplcjogdGhpcy5zZXJpYWxpemVyLFxuICAgICAgICAgICAgZGVzZXJpYWxpemVyOiB0aGlzLmRlc2VyaWFsaXplcixcbiAgICAgICAgICAgIHNlcmRlQ29udGV4dDogdGhpcy5zZXJkZUNvbnRleHQsXG4gICAgICAgICAgICBkZWZhdWx0Q29udGVudFR5cGU6IHRoaXMuZ2V0RGVmYXVsdENvbnRlbnRUeXBlKCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXREZWZhdWx0Q29udGVudFR5cGUoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQHNtaXRoeS9jb3JlL3Byb3RvY29scyAtICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBnZXREZWZhdWx0Q29udGVudFR5cGUoKSBpbXBsZW1lbnRhdGlvbiBtaXNzaW5nLmApO1xuICAgIH1cbiAgICBhc3luYyBkZXNlcmlhbGl6ZUh0dHBNZXNzYWdlKHNjaGVtYSwgY29udGV4dCwgcmVzcG9uc2UsIGFyZzQsIGFyZzUpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBnZXRFdmVudFN0cmVhbU1hcnNoYWxsZXIoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnNlcmRlQ29udGV4dDtcbiAgICAgICAgaWYgKCFjb250ZXh0LmV2ZW50U3RyZWFtTWFyc2hhbGxlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQHNtaXRoeS9jb3JlIC0gSHR0cFByb3RvY29sOiBldmVudFN0cmVhbU1hcnNoYWxsZXIgbWlzc2luZyBpbiBzZXJkZUNvbnRleHQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZXh0LmV2ZW50U3RyZWFtTWFyc2hhbGxlcjtcbiAgICB9XG59XG5cbmNsYXNzIEh0dHBCaW5kaW5nUHJvdG9jb2wgZXh0ZW5kcyBIdHRwUHJvdG9jb2wge1xuICAgIGFzeW5jIHNlcmlhbGl6ZVJlcXVlc3Qob3BlcmF0aW9uU2NoZW1hLCBfaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB7XG4gICAgICAgICAgICAuLi4oX2lucHV0ID8/IHt9KSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplciA9IHRoaXMuc2VyaWFsaXplcjtcbiAgICAgICAgY29uc3QgcXVlcnkgPSB7fTtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHt9O1xuICAgICAgICBjb25zdCBlbmRwb2ludCA9IGF3YWl0IGNvbnRleHQuZW5kcG9pbnQoKTtcbiAgICAgICAgY29uc3QgbnMgPSBzY2hlbWEuTm9ybWFsaXplZFNjaGVtYS5vZihvcGVyYXRpb25TY2hlbWE/LmlucHV0KTtcbiAgICAgICAgY29uc3Qgc2NoZW1hJDEgPSBucy5nZXRTY2hlbWEoKTtcbiAgICAgICAgbGV0IGhhc05vbkh0dHBCaW5kaW5nTWVtYmVyID0gZmFsc2U7XG4gICAgICAgIGxldCBwYXlsb2FkO1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IHByb3RvY29sSHR0cC5IdHRwUmVxdWVzdCh7XG4gICAgICAgICAgICBwcm90b2NvbDogXCJcIixcbiAgICAgICAgICAgIGhvc3RuYW1lOiBcIlwiLFxuICAgICAgICAgICAgcG9ydDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcGF0aDogXCJcIixcbiAgICAgICAgICAgIGZyYWdtZW50OiB1bmRlZmluZWQsXG4gICAgICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgYm9keTogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGVuZHBvaW50KSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlcnZpY2VFbmRwb2ludChyZXF1ZXN0LCBlbmRwb2ludCk7XG4gICAgICAgICAgICB0aGlzLnNldEhvc3RQcmVmaXgocmVxdWVzdCwgb3BlcmF0aW9uU2NoZW1hLCBpbnB1dCk7XG4gICAgICAgICAgICBjb25zdCBvcFRyYWl0cyA9IHNjaGVtYS50cmFuc2xhdGVUcmFpdHMob3BlcmF0aW9uU2NoZW1hLnRyYWl0cyk7XG4gICAgICAgICAgICBpZiAob3BUcmFpdHMuaHR0cCkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QubWV0aG9kID0gb3BUcmFpdHMuaHR0cFswXTtcbiAgICAgICAgICAgICAgICBjb25zdCBbcGF0aCwgc2VhcmNoXSA9IG9wVHJhaXRzLmh0dHBbMV0uc3BsaXQoXCI/XCIpO1xuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LnBhdGggPT0gXCIvXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5wYXRoID0gcGF0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QucGF0aCArPSBwYXRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB0cmFpdFNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoc2VhcmNoID8/IFwiXCIpO1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocXVlcnksIE9iamVjdC5mcm9tRW50cmllcyh0cmFpdFNlYXJjaFBhcmFtcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW21lbWJlck5hbWUsIG1lbWJlck5zXSBvZiBucy5zdHJ1Y3RJdGVyYXRvcigpKSB7XG4gICAgICAgICAgICBjb25zdCBtZW1iZXJUcmFpdHMgPSBtZW1iZXJOcy5nZXRNZXJnZWRUcmFpdHMoKSA/PyB7fTtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0TWVtYmVyVmFsdWUgPSBpbnB1dFttZW1iZXJOYW1lXTtcbiAgICAgICAgICAgIGlmIChpbnB1dE1lbWJlclZhbHVlID09IG51bGwgJiYgIW1lbWJlck5zLmlzSWRlbXBvdGVuY3lUb2tlbigpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVtYmVyVHJhaXRzLmh0dHBQYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNTdHJlYW1pbmcgPSBtZW1iZXJOcy5pc1N0cmVhbWluZygpO1xuICAgICAgICAgICAgICAgIGlmIChpc1N0cmVhbWluZykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0V2ZW50U3RyZWFtID0gbWVtYmVyTnMuaXNTdHJ1Y3RTY2hlbWEoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRXZlbnRTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFttZW1iZXJOYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQgPSBhd2FpdCB0aGlzLnNlcmlhbGl6ZUV2ZW50U3RyZWFtKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRTdHJlYW06IGlucHV0W21lbWJlck5hbWVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0U2NoZW1hOiBucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQgPSBpbnB1dE1lbWJlclZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVyLndyaXRlKG1lbWJlck5zLCBpbnB1dE1lbWJlclZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCA9IHNlcmlhbGl6ZXIuZmx1c2goKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVsZXRlIGlucHV0W21lbWJlck5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWVtYmVyVHJhaXRzLmh0dHBMYWJlbCkge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXIud3JpdGUobWVtYmVyTnMsIGlucHV0TWVtYmVyVmFsdWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gc2VyaWFsaXplci5mbHVzaCgpO1xuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LnBhdGguaW5jbHVkZXMoYHske21lbWJlck5hbWV9K31gKSkge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnBhdGggPSByZXF1ZXN0LnBhdGgucmVwbGFjZShgeyR7bWVtYmVyTmFtZX0rfWAsIHJlcGxhY2VtZW50LnNwbGl0KFwiL1wiKS5tYXAoZXh0ZW5kZWRFbmNvZGVVUklDb21wb25lbnQpLmpvaW4oXCIvXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVxdWVzdC5wYXRoLmluY2x1ZGVzKGB7JHttZW1iZXJOYW1lfX1gKSkge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnBhdGggPSByZXF1ZXN0LnBhdGgucmVwbGFjZShgeyR7bWVtYmVyTmFtZX19YCwgZXh0ZW5kZWRFbmNvZGVVUklDb21wb25lbnQocmVwbGFjZW1lbnQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVsZXRlIGlucHV0W21lbWJlck5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWVtYmVyVHJhaXRzLmh0dHBIZWFkZXIpIHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVyLndyaXRlKG1lbWJlck5zLCBpbnB1dE1lbWJlclZhbHVlKTtcbiAgICAgICAgICAgICAgICBoZWFkZXJzW21lbWJlclRyYWl0cy5odHRwSGVhZGVyLnRvTG93ZXJDYXNlKCldID0gU3RyaW5nKHNlcmlhbGl6ZXIuZmx1c2goKSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGlucHV0W21lbWJlck5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG1lbWJlclRyYWl0cy5odHRwUHJlZml4SGVhZGVycyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhpbnB1dE1lbWJlclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbWFsZ2FtID0gbWVtYmVyVHJhaXRzLmh0dHBQcmVmaXhIZWFkZXJzICsga2V5O1xuICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVyLndyaXRlKFttZW1iZXJOcy5nZXRWYWx1ZVNjaGVtYSgpLCB7IGh0dHBIZWFkZXI6IGFtYWxnYW0gfV0sIHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbYW1hbGdhbS50b0xvd2VyQ2FzZSgpXSA9IHNlcmlhbGl6ZXIuZmx1c2goKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVsZXRlIGlucHV0W21lbWJlck5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWVtYmVyVHJhaXRzLmh0dHBRdWVyeSB8fCBtZW1iZXJUcmFpdHMuaHR0cFF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJpYWxpemVRdWVyeShtZW1iZXJOcywgaW5wdXRNZW1iZXJWYWx1ZSwgcXVlcnkpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBpbnB1dFttZW1iZXJOYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGhhc05vbkh0dHBCaW5kaW5nTWVtYmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzTm9uSHR0cEJpbmRpbmdNZW1iZXIgJiYgaW5wdXQpIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZXIud3JpdGUoc2NoZW1hJDEsIGlucHV0KTtcbiAgICAgICAgICAgIHBheWxvYWQgPSBzZXJpYWxpemVyLmZsdXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgcmVxdWVzdC5xdWVyeSA9IHF1ZXJ5O1xuICAgICAgICByZXF1ZXN0LmJvZHkgPSBwYXlsb2FkO1xuICAgICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICB9XG4gICAgc2VyaWFsaXplUXVlcnkobnMsIGRhdGEsIHF1ZXJ5KSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZXIgPSB0aGlzLnNlcmlhbGl6ZXI7XG4gICAgICAgIGNvbnN0IHRyYWl0cyA9IG5zLmdldE1lcmdlZFRyYWl0cygpO1xuICAgICAgICBpZiAodHJhaXRzLmh0dHBRdWVyeVBhcmFtcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoa2V5IGluIHF1ZXJ5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZVNjaGVtYSA9IG5zLmdldFZhbHVlU2NoZW1hKCk7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odmFsdWVTY2hlbWEuZ2V0TWVyZ2VkVHJhaXRzKCksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRyYWl0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBRdWVyeToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cFF1ZXJ5UGFyYW1zOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcmlhbGl6ZVF1ZXJ5KHZhbHVlU2NoZW1hLCB2YWwsIHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5zLmlzTGlzdFNjaGVtYSgpKSB7XG4gICAgICAgICAgICBjb25zdCBzcGFyc2UgPSAhIW5zLmdldE1lcmdlZFRyYWl0cygpLnNwYXJzZTtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVyLndyaXRlKFtucy5nZXRWYWx1ZVNjaGVtYSgpLCB0cmFpdHNdLCBpdGVtKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXJpYWxpemFibGUgPSBzZXJpYWxpemVyLmZsdXNoKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNwYXJzZSB8fCBzZXJpYWxpemFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBidWZmZXIucHVzaChzZXJpYWxpemFibGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXJ5W3RyYWl0cy5odHRwUXVlcnldID0gYnVmZmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2VyaWFsaXplci53cml0ZShbbnMsIHRyYWl0c10sIGRhdGEpO1xuICAgICAgICAgICAgcXVlcnlbdHJhaXRzLmh0dHBRdWVyeV0gPSBzZXJpYWxpemVyLmZsdXNoKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZGVzZXJpYWxpemVSZXNwb25zZShvcGVyYXRpb25TY2hlbWEsIGNvbnRleHQsIHJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IGRlc2VyaWFsaXplciA9IHRoaXMuZGVzZXJpYWxpemVyO1xuICAgICAgICBjb25zdCBucyA9IHNjaGVtYS5Ob3JtYWxpemVkU2NoZW1hLm9mKG9wZXJhdGlvblNjaGVtYS5vdXRwdXQpO1xuICAgICAgICBjb25zdCBkYXRhT2JqZWN0ID0ge307XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICAgICAgY29uc3QgYnl0ZXMgPSBhd2FpdCBjb2xsZWN0Qm9keShyZXNwb25zZS5ib2R5LCBjb250ZXh0KTtcbiAgICAgICAgICAgIGlmIChieXRlcy5ieXRlTGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGF0YU9iamVjdCwgYXdhaXQgZGVzZXJpYWxpemVyLnJlYWQoMTUsIGJ5dGVzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUVycm9yKG9wZXJhdGlvblNjaGVtYSwgY29udGV4dCwgcmVzcG9uc2UsIGRhdGFPYmplY3QsIHRoaXMuZGVzZXJpYWxpemVNZXRhZGF0YShyZXNwb25zZSkpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQHNtaXRoeS9jb3JlL3Byb3RvY29scyAtIEhUVFAgUHJvdG9jb2wgZXJyb3IgaGFuZGxlciBmYWlsZWQgdG8gdGhyb3cuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgaGVhZGVyIGluIHJlc3BvbnNlLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVzcG9uc2UuaGVhZGVyc1toZWFkZXJdO1xuICAgICAgICAgICAgZGVsZXRlIHJlc3BvbnNlLmhlYWRlcnNbaGVhZGVyXTtcbiAgICAgICAgICAgIHJlc3BvbnNlLmhlYWRlcnNbaGVhZGVyLnRvTG93ZXJDYXNlKCldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm9uSHR0cEJpbmRpbmdNZW1iZXJzID0gYXdhaXQgdGhpcy5kZXNlcmlhbGl6ZUh0dHBNZXNzYWdlKG5zLCBjb250ZXh0LCByZXNwb25zZSwgZGF0YU9iamVjdCk7XG4gICAgICAgIGlmIChub25IdHRwQmluZGluZ01lbWJlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBieXRlcyA9IGF3YWl0IGNvbGxlY3RCb2R5KHJlc3BvbnNlLmJvZHksIGNvbnRleHQpO1xuICAgICAgICAgICAgaWYgKGJ5dGVzLmJ5dGVMZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YUZyb21Cb2R5ID0gYXdhaXQgZGVzZXJpYWxpemVyLnJlYWQobnMsIGJ5dGVzKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiBub25IdHRwQmluZGluZ01lbWJlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YU9iamVjdFttZW1iZXJdID0gZGF0YUZyb21Cb2R5W21lbWJlcl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vbkh0dHBCaW5kaW5nTWVtYmVycy5kaXNjYXJkUmVzcG9uc2VCb2R5KSB7XG4gICAgICAgICAgICBhd2FpdCBjb2xsZWN0Qm9keShyZXNwb25zZS5ib2R5LCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LiRtZXRhZGF0YSA9IHRoaXMuZGVzZXJpYWxpemVNZXRhZGF0YShyZXNwb25zZSk7XG4gICAgICAgIHJldHVybiBkYXRhT2JqZWN0O1xuICAgIH1cbiAgICBhc3luYyBkZXNlcmlhbGl6ZUh0dHBNZXNzYWdlKHNjaGVtYSQxLCBjb250ZXh0LCByZXNwb25zZSwgYXJnNCwgYXJnNSkge1xuICAgICAgICBsZXQgZGF0YU9iamVjdDtcbiAgICAgICAgaWYgKGFyZzQgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgICAgICAgIGRhdGFPYmplY3QgPSBhcmc1O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGF0YU9iamVjdCA9IGFyZzQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRpc2NhcmRSZXNwb25zZUJvZHkgPSB0cnVlO1xuICAgICAgICBjb25zdCBkZXNlcmlhbGl6ZXIgPSB0aGlzLmRlc2VyaWFsaXplcjtcbiAgICAgICAgY29uc3QgbnMgPSBzY2hlbWEuTm9ybWFsaXplZFNjaGVtYS5vZihzY2hlbWEkMSk7XG4gICAgICAgIGNvbnN0IG5vbkh0dHBCaW5kaW5nTWVtYmVycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IFttZW1iZXJOYW1lLCBtZW1iZXJTY2hlbWFdIG9mIG5zLnN0cnVjdEl0ZXJhdG9yKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lbWJlclRyYWl0cyA9IG1lbWJlclNjaGVtYS5nZXRNZW1iZXJUcmFpdHMoKTtcbiAgICAgICAgICAgIGlmIChtZW1iZXJUcmFpdHMuaHR0cFBheWxvYWQpIHtcbiAgICAgICAgICAgICAgICBkaXNjYXJkUmVzcG9uc2VCb2R5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNTdHJlYW1pbmcgPSBtZW1iZXJTY2hlbWEuaXNTdHJlYW1pbmcoKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNTdHJlYW1pbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNFdmVudFN0cmVhbSA9IG1lbWJlclNjaGVtYS5pc1N0cnVjdFNjaGVtYSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNFdmVudFN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU9iamVjdFttZW1iZXJOYW1lXSA9IGF3YWl0IHRoaXMuZGVzZXJpYWxpemVFdmVudFN0cmVhbSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VTY2hlbWE6IG5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhT2JqZWN0W21lbWJlck5hbWVdID0gdXRpbFN0cmVhbS5zZGtTdHJlYW1NaXhpbihyZXNwb25zZS5ib2R5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZS5ib2R5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gYXdhaXQgY29sbGVjdEJvZHkocmVzcG9uc2UuYm9keSwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChieXRlcy5ieXRlTGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU9iamVjdFttZW1iZXJOYW1lXSA9IGF3YWl0IGRlc2VyaWFsaXplci5yZWFkKG1lbWJlclNjaGVtYSwgYnl0ZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWVtYmVyVHJhaXRzLmh0dHBIZWFkZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBTdHJpbmcobWVtYmVyVHJhaXRzLmh0dHBIZWFkZXIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZXNwb25zZS5oZWFkZXJzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKG51bGwgIT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lbWJlclNjaGVtYS5pc0xpc3RTY2hlbWEoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGVhZGVyTGlzdFZhbHVlU2NoZW1hID0gbWVtYmVyU2NoZW1hLmdldFZhbHVlU2NoZW1hKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJMaXN0VmFsdWVTY2hlbWEuZ2V0TWVyZ2VkVHJhaXRzKCkuaHR0cEhlYWRlciA9IGtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWN0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFkZXJMaXN0VmFsdWVTY2hlbWEuaXNUaW1lc3RhbXBTY2hlbWEoKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlckxpc3RWYWx1ZVNjaGVtYS5nZXRTY2hlbWEoKSA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zID0gc2VyZGUuc3BsaXRFdmVyeSh2YWx1ZSwgXCIsXCIsIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMgPSBzZXJkZS5zcGxpdEhlYWRlcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXN0ID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0LnB1c2goYXdhaXQgZGVzZXJpYWxpemVyLnJlYWQoaGVhZGVyTGlzdFZhbHVlU2NoZW1hLCBzZWN0aW9uLnRyaW0oKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU9iamVjdFttZW1iZXJOYW1lXSA9IGxpc3Q7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhT2JqZWN0W21lbWJlck5hbWVdID0gYXdhaXQgZGVzZXJpYWxpemVyLnJlYWQobWVtYmVyU2NoZW1hLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtZW1iZXJUcmFpdHMuaHR0cFByZWZpeEhlYWRlcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGRhdGFPYmplY3RbbWVtYmVyTmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtoZWFkZXIsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGVhZGVyLnN0YXJ0c1dpdGgobWVtYmVyVHJhaXRzLmh0dHBQcmVmaXhIZWFkZXJzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWVTY2hlbWEgPSBtZW1iZXJTY2hlbWEuZ2V0VmFsdWVTY2hlbWEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlU2NoZW1hLmdldE1lcmdlZFRyYWl0cygpLmh0dHBIZWFkZXIgPSBoZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhT2JqZWN0W21lbWJlck5hbWVdW2hlYWRlci5zbGljZShtZW1iZXJUcmFpdHMuaHR0cFByZWZpeEhlYWRlcnMubGVuZ3RoKV0gPSBhd2FpdCBkZXNlcmlhbGl6ZXIucmVhZCh2YWx1ZVNjaGVtYSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWVtYmVyVHJhaXRzLmh0dHBSZXNwb25zZUNvZGUpIHtcbiAgICAgICAgICAgICAgICBkYXRhT2JqZWN0W21lbWJlck5hbWVdID0gcmVzcG9uc2Uuc3RhdHVzQ29kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG5vbkh0dHBCaW5kaW5nTWVtYmVycy5wdXNoKG1lbWJlck5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5vbkh0dHBCaW5kaW5nTWVtYmVycy5kaXNjYXJkUmVzcG9uc2VCb2R5ID0gZGlzY2FyZFJlc3BvbnNlQm9keTtcbiAgICAgICAgcmV0dXJuIG5vbkh0dHBCaW5kaW5nTWVtYmVycztcbiAgICB9XG59XG5cbmNsYXNzIFJwY1Byb3RvY29sIGV4dGVuZHMgSHR0cFByb3RvY29sIHtcbiAgICBhc3luYyBzZXJpYWxpemVSZXF1ZXN0KG9wZXJhdGlvblNjaGVtYSwgaW5wdXQsIGNvbnRleHQpIHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplciA9IHRoaXMuc2VyaWFsaXplcjtcbiAgICAgICAgY29uc3QgcXVlcnkgPSB7fTtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHt9O1xuICAgICAgICBjb25zdCBlbmRwb2ludCA9IGF3YWl0IGNvbnRleHQuZW5kcG9pbnQoKTtcbiAgICAgICAgY29uc3QgbnMgPSBzY2hlbWEuTm9ybWFsaXplZFNjaGVtYS5vZihvcGVyYXRpb25TY2hlbWE/LmlucHV0KTtcbiAgICAgICAgY29uc3Qgc2NoZW1hJDEgPSBucy5nZXRTY2hlbWEoKTtcbiAgICAgICAgbGV0IHBheWxvYWQ7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgcHJvdG9jb2xIdHRwLkh0dHBSZXF1ZXN0KHtcbiAgICAgICAgICAgIHByb3RvY29sOiBcIlwiLFxuICAgICAgICAgICAgaG9zdG5hbWU6IFwiXCIsXG4gICAgICAgICAgICBwb3J0OiB1bmRlZmluZWQsXG4gICAgICAgICAgICBwYXRoOiBcIi9cIixcbiAgICAgICAgICAgIGZyYWdtZW50OiB1bmRlZmluZWQsXG4gICAgICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgYm9keTogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGVuZHBvaW50KSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlcnZpY2VFbmRwb2ludChyZXF1ZXN0LCBlbmRwb2ludCk7XG4gICAgICAgICAgICB0aGlzLnNldEhvc3RQcmVmaXgocmVxdWVzdCwgb3BlcmF0aW9uU2NoZW1hLCBpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgX2lucHV0ID0ge1xuICAgICAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgY29uc3QgZXZlbnRTdHJlYW1NZW1iZXIgPSBucy5nZXRFdmVudFN0cmVhbU1lbWJlcigpO1xuICAgICAgICAgICAgaWYgKGV2ZW50U3RyZWFtTWVtYmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9pbnB1dFtldmVudFN0cmVhbU1lbWJlcl0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5pdGlhbFJlcXVlc3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbbWVtYmVyTmFtZSwgbWVtYmVyU2NoZW1hXSBvZiBucy5zdHJ1Y3RJdGVyYXRvcigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVtYmVyTmFtZSAhPT0gZXZlbnRTdHJlYW1NZW1iZXIgJiYgX2lucHV0W21lbWJlck5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplci53cml0ZShtZW1iZXJTY2hlbWEsIF9pbnB1dFttZW1iZXJOYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFJlcXVlc3RbbWVtYmVyTmFtZV0gPSBzZXJpYWxpemVyLmZsdXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCA9IGF3YWl0IHRoaXMuc2VyaWFsaXplRXZlbnRTdHJlYW0oe1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRTdHJlYW06IF9pbnB1dFtldmVudFN0cmVhbU1lbWJlcl0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0U2NoZW1hOiBucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVyLndyaXRlKHNjaGVtYSQxLCBfaW5wdXQpO1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBzZXJpYWxpemVyLmZsdXNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgcmVxdWVzdC5xdWVyeSA9IHF1ZXJ5O1xuICAgICAgICByZXF1ZXN0LmJvZHkgPSBwYXlsb2FkO1xuICAgICAgICByZXF1ZXN0Lm1ldGhvZCA9IFwiUE9TVFwiO1xuICAgICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICB9XG4gICAgYXN5bmMgZGVzZXJpYWxpemVSZXNwb25zZShvcGVyYXRpb25TY2hlbWEsIGNvbnRleHQsIHJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IGRlc2VyaWFsaXplciA9IHRoaXMuZGVzZXJpYWxpemVyO1xuICAgICAgICBjb25zdCBucyA9IHNjaGVtYS5Ob3JtYWxpemVkU2NoZW1hLm9mKG9wZXJhdGlvblNjaGVtYS5vdXRwdXQpO1xuICAgICAgICBjb25zdCBkYXRhT2JqZWN0ID0ge307XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgICAgICAgY29uc3QgYnl0ZXMgPSBhd2FpdCBjb2xsZWN0Qm9keShyZXNwb25zZS5ib2R5LCBjb250ZXh0KTtcbiAgICAgICAgICAgIGlmIChieXRlcy5ieXRlTGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGF0YU9iamVjdCwgYXdhaXQgZGVzZXJpYWxpemVyLnJlYWQoMTUsIGJ5dGVzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUVycm9yKG9wZXJhdGlvblNjaGVtYSwgY29udGV4dCwgcmVzcG9uc2UsIGRhdGFPYmplY3QsIHRoaXMuZGVzZXJpYWxpemVNZXRhZGF0YShyZXNwb25zZSkpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQHNtaXRoeS9jb3JlL3Byb3RvY29scyAtIFJQQyBQcm90b2NvbCBlcnJvciBoYW5kbGVyIGZhaWxlZCB0byB0aHJvdy5cIik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBoZWFkZXIgaW4gcmVzcG9uc2UuaGVhZGVycykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZXNwb25zZS5oZWFkZXJzW2hlYWRlcl07XG4gICAgICAgICAgICBkZWxldGUgcmVzcG9uc2UuaGVhZGVyc1toZWFkZXJdO1xuICAgICAgICAgICAgcmVzcG9uc2UuaGVhZGVyc1toZWFkZXIudG9Mb3dlckNhc2UoKV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBldmVudFN0cmVhbU1lbWJlciA9IG5zLmdldEV2ZW50U3RyZWFtTWVtYmVyKCk7XG4gICAgICAgIGlmIChldmVudFN0cmVhbU1lbWJlcikge1xuICAgICAgICAgICAgZGF0YU9iamVjdFtldmVudFN0cmVhbU1lbWJlcl0gPSBhd2FpdCB0aGlzLmRlc2VyaWFsaXplRXZlbnRTdHJlYW0oe1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlU2NoZW1hOiBucyxcbiAgICAgICAgICAgICAgICBpbml0aWFsUmVzcG9uc2VDb250YWluZXI6IGRhdGFPYmplY3QsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gYXdhaXQgY29sbGVjdEJvZHkocmVzcG9uc2UuYm9keSwgY29udGV4dCk7XG4gICAgICAgICAgICBpZiAoYnl0ZXMuYnl0ZUxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGRhdGFPYmplY3QsIGF3YWl0IGRlc2VyaWFsaXplci5yZWFkKG5zLCBieXRlcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRhdGFPYmplY3QuJG1ldGFkYXRhID0gdGhpcy5kZXNlcmlhbGl6ZU1ldGFkYXRhKHJlc3BvbnNlKTtcbiAgICAgICAgcmV0dXJuIGRhdGFPYmplY3Q7XG4gICAgfVxufVxuXG5jb25zdCByZXNvbHZlZFBhdGggPSAocmVzb2x2ZWRQYXRoLCBpbnB1dCwgbWVtYmVyTmFtZSwgbGFiZWxWYWx1ZVByb3ZpZGVyLCB1cmlMYWJlbCwgaXNHcmVlZHlMYWJlbCkgPT4ge1xuICAgIGlmIChpbnB1dCAhPSBudWxsICYmIGlucHV0W21lbWJlck5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgbGFiZWxWYWx1ZSA9IGxhYmVsVmFsdWVQcm92aWRlcigpO1xuICAgICAgICBpZiAobGFiZWxWYWx1ZS5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW1wdHkgdmFsdWUgcHJvdmlkZWQgZm9yIGlucHV0IEhUVFAgbGFiZWw6IFwiICsgbWVtYmVyTmFtZSArIFwiLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlZFBhdGggPSByZXNvbHZlZFBhdGgucmVwbGFjZSh1cmlMYWJlbCwgaXNHcmVlZHlMYWJlbFxuICAgICAgICAgICAgPyBsYWJlbFZhbHVlXG4gICAgICAgICAgICAgICAgLnNwbGl0KFwiL1wiKVxuICAgICAgICAgICAgICAgIC5tYXAoKHNlZ21lbnQpID0+IGV4dGVuZGVkRW5jb2RlVVJJQ29tcG9uZW50KHNlZ21lbnQpKVxuICAgICAgICAgICAgICAgIC5qb2luKFwiL1wiKVxuICAgICAgICAgICAgOiBleHRlbmRlZEVuY29kZVVSSUNvbXBvbmVudChsYWJlbFZhbHVlKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YWx1ZSBwcm92aWRlZCBmb3IgaW5wdXQgSFRUUCBsYWJlbDogXCIgKyBtZW1iZXJOYW1lICsgXCIuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb2x2ZWRQYXRoO1xufTtcblxuZnVuY3Rpb24gcmVxdWVzdEJ1aWxkZXIoaW5wdXQsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3RCdWlsZGVyKGlucHV0LCBjb250ZXh0KTtcbn1cbmNsYXNzIFJlcXVlc3RCdWlsZGVyIHtcbiAgICBpbnB1dDtcbiAgICBjb250ZXh0O1xuICAgIHF1ZXJ5ID0ge307XG4gICAgbWV0aG9kID0gXCJcIjtcbiAgICBoZWFkZXJzID0ge307XG4gICAgcGF0aCA9IFwiXCI7XG4gICAgYm9keSA9IG51bGw7XG4gICAgaG9zdG5hbWUgPSBcIlwiO1xuICAgIHJlc29sdmVQYXRoU3RhY2sgPSBbXTtcbiAgICBjb25zdHJ1Y3RvcihpbnB1dCwgY29udGV4dCkge1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgfVxuICAgIGFzeW5jIGJ1aWxkKCkge1xuICAgICAgICBjb25zdCB7IGhvc3RuYW1lLCBwcm90b2NvbCA9IFwiaHR0cHNcIiwgcG9ydCwgcGF0aDogYmFzZVBhdGggfSA9IGF3YWl0IHRoaXMuY29udGV4dC5lbmRwb2ludCgpO1xuICAgICAgICB0aGlzLnBhdGggPSBiYXNlUGF0aDtcbiAgICAgICAgZm9yIChjb25zdCByZXNvbHZlUGF0aCBvZiB0aGlzLnJlc29sdmVQYXRoU3RhY2spIHtcbiAgICAgICAgICAgIHJlc29sdmVQYXRoKHRoaXMucGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBwcm90b2NvbEh0dHAuSHR0cFJlcXVlc3Qoe1xuICAgICAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgICAgICBob3N0bmFtZTogdGhpcy5ob3N0bmFtZSB8fCBob3N0bmFtZSxcbiAgICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgICBtZXRob2Q6IHRoaXMubWV0aG9kLFxuICAgICAgICAgICAgcGF0aDogdGhpcy5wYXRoLFxuICAgICAgICAgICAgcXVlcnk6IHRoaXMucXVlcnksXG4gICAgICAgICAgICBib2R5OiB0aGlzLmJvZHksXG4gICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBobihob3N0bmFtZSkge1xuICAgICAgICB0aGlzLmhvc3RuYW1lID0gaG9zdG5hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBicCh1cmlMYWJlbCkge1xuICAgICAgICB0aGlzLnJlc29sdmVQYXRoU3RhY2sucHVzaCgoYmFzZVBhdGgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGF0aCA9IGAke2Jhc2VQYXRoPy5lbmRzV2l0aChcIi9cIikgPyBiYXNlUGF0aC5zbGljZSgwLCAtMSkgOiBiYXNlUGF0aCB8fCBcIlwifWAgKyB1cmlMYWJlbDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBwKG1lbWJlck5hbWUsIGxhYmVsVmFsdWVQcm92aWRlciwgdXJpTGFiZWwsIGlzR3JlZWR5TGFiZWwpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlUGF0aFN0YWNrLnB1c2goKHBhdGgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGF0aCA9IHJlc29sdmVkUGF0aChwYXRoLCB0aGlzLmlucHV0LCBtZW1iZXJOYW1lLCBsYWJlbFZhbHVlUHJvdmlkZXIsIHVyaUxhYmVsLCBpc0dyZWVkeUxhYmVsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBoKGhlYWRlcnMpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHEocXVlcnkpIHtcbiAgICAgICAgdGhpcy5xdWVyeSA9IHF1ZXJ5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYihib2R5KSB7XG4gICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBtKG1ldGhvZCkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmVUaW1lc3RhbXBGb3JtYXQobnMsIHNldHRpbmdzKSB7XG4gICAgaWYgKHNldHRpbmdzLnRpbWVzdGFtcEZvcm1hdC51c2VUcmFpdCkge1xuICAgICAgICBpZiAobnMuaXNUaW1lc3RhbXBTY2hlbWEoKSAmJlxuICAgICAgICAgICAgKG5zLmdldFNjaGVtYSgpID09PSA1IHx8XG4gICAgICAgICAgICAgICAgbnMuZ2V0U2NoZW1hKCkgPT09IDYgfHxcbiAgICAgICAgICAgICAgICBucy5nZXRTY2hlbWEoKSA9PT0gNykpIHtcbiAgICAgICAgICAgIHJldHVybiBucy5nZXRTY2hlbWEoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB7IGh0dHBMYWJlbCwgaHR0cFByZWZpeEhlYWRlcnMsIGh0dHBIZWFkZXIsIGh0dHBRdWVyeSB9ID0gbnMuZ2V0TWVyZ2VkVHJhaXRzKCk7XG4gICAgY29uc3QgYmluZGluZ0Zvcm1hdCA9IHNldHRpbmdzLmh0dHBCaW5kaW5nc1xuICAgICAgICA/IHR5cGVvZiBodHRwUHJlZml4SGVhZGVycyA9PT0gXCJzdHJpbmdcIiB8fCBCb29sZWFuKGh0dHBIZWFkZXIpXG4gICAgICAgICAgICA/IDZcbiAgICAgICAgICAgIDogQm9vbGVhbihodHRwUXVlcnkpIHx8IEJvb2xlYW4oaHR0cExhYmVsKVxuICAgICAgICAgICAgICAgID8gNVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBiaW5kaW5nRm9ybWF0ID8/IHNldHRpbmdzLnRpbWVzdGFtcEZvcm1hdC5kZWZhdWx0O1xufVxuXG5jbGFzcyBGcm9tU3RyaW5nU2hhcGVEZXNlcmlhbGl6ZXIgZXh0ZW5kcyBTZXJkZUNvbnRleHQge1xuICAgIHNldHRpbmdzO1xuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgICB9XG4gICAgcmVhZChfc2NoZW1hLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IG5zID0gc2NoZW1hLk5vcm1hbGl6ZWRTY2hlbWEub2YoX3NjaGVtYSk7XG4gICAgICAgIGlmIChucy5pc0xpc3RTY2hlbWEoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNlcmRlLnNwbGl0SGVhZGVyKGRhdGEpLm1hcCgoaXRlbSkgPT4gdGhpcy5yZWFkKG5zLmdldFZhbHVlU2NoZW1hKCksIGl0ZW0pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobnMuaXNCbG9iU2NoZW1hKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5zZXJkZUNvbnRleHQ/LmJhc2U2NERlY29kZXIgPz8gdXRpbEJhc2U2NC5mcm9tQmFzZTY0KShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobnMuaXNUaW1lc3RhbXBTY2hlbWEoKSkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gZGV0ZXJtaW5lVGltZXN0YW1wRm9ybWF0KG5zLCB0aGlzLnNldHRpbmdzKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VyZGUuX3BhcnNlUmZjMzMzOURhdGVUaW1lV2l0aE9mZnNldChkYXRhKTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXJkZS5fcGFyc2VSZmM3MjMxRGF0ZVRpbWUoZGF0YSk7XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VyZGUuX3BhcnNlRXBvY2hUaW1lc3RhbXAoZGF0YSk7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiTWlzc2luZyB0aW1lc3RhbXAgZm9ybWF0LCBwYXJzaW5nIHZhbHVlIHdpdGggRGF0ZSBjb25zdHJ1Y3RvcjpcIiwgZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobnMuaXNTdHJpbmdTY2hlbWEoKSkge1xuICAgICAgICAgICAgY29uc3QgbWVkaWFUeXBlID0gbnMuZ2V0TWVyZ2VkVHJhaXRzKCkubWVkaWFUeXBlO1xuICAgICAgICAgICAgbGV0IGludGVybWVkaWF0ZVZhbHVlID0gZGF0YTtcbiAgICAgICAgICAgIGlmIChtZWRpYVR5cGUpIHtcbiAgICAgICAgICAgICAgICBpZiAobnMuZ2V0TWVyZ2VkVHJhaXRzKCkuaHR0cEhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICBpbnRlcm1lZGlhdGVWYWx1ZSA9IHRoaXMuYmFzZTY0VG9VdGY4KGludGVybWVkaWF0ZVZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgaXNKc29uID0gbWVkaWFUeXBlID09PSBcImFwcGxpY2F0aW9uL2pzb25cIiB8fCBtZWRpYVR5cGUuZW5kc1dpdGgoXCIranNvblwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNKc29uKSB7XG4gICAgICAgICAgICAgICAgICAgIGludGVybWVkaWF0ZVZhbHVlID0gc2VyZGUuTGF6eUpzb25TdHJpbmcuZnJvbShpbnRlcm1lZGlhdGVWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm1lZGlhdGVWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobnMuaXNOdW1lcmljU2NoZW1hKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5zLmlzQmlnSW50ZWdlclNjaGVtYSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gQmlnSW50KGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChucy5pc0JpZ0RlY2ltYWxTY2hlbWEoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBzZXJkZS5OdW1lcmljVmFsdWUoZGF0YSwgXCJiaWdEZWNpbWFsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChucy5pc0Jvb2xlYW5TY2hlbWEoKSkge1xuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhkYXRhKS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgYmFzZTY0VG9VdGY4KGJhc2U2NFN0cmluZykge1xuICAgICAgICByZXR1cm4gKHRoaXMuc2VyZGVDb250ZXh0Py51dGY4RW5jb2RlciA/PyB1dGlsVXRmOC50b1V0ZjgpKCh0aGlzLnNlcmRlQ29udGV4dD8uYmFzZTY0RGVjb2RlciA/PyB1dGlsQmFzZTY0LmZyb21CYXNlNjQpKGJhc2U2NFN0cmluZykpO1xuICAgIH1cbn1cblxuY2xhc3MgSHR0cEludGVyY2VwdGluZ1NoYXBlRGVzZXJpYWxpemVyIGV4dGVuZHMgU2VyZGVDb250ZXh0IHtcbiAgICBjb2RlY0Rlc2VyaWFsaXplcjtcbiAgICBzdHJpbmdEZXNlcmlhbGl6ZXI7XG4gICAgY29uc3RydWN0b3IoY29kZWNEZXNlcmlhbGl6ZXIsIGNvZGVjU2V0dGluZ3MpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5jb2RlY0Rlc2VyaWFsaXplciA9IGNvZGVjRGVzZXJpYWxpemVyO1xuICAgICAgICB0aGlzLnN0cmluZ0Rlc2VyaWFsaXplciA9IG5ldyBGcm9tU3RyaW5nU2hhcGVEZXNlcmlhbGl6ZXIoY29kZWNTZXR0aW5ncyk7XG4gICAgfVxuICAgIHNldFNlcmRlQ29udGV4dChzZXJkZUNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5zdHJpbmdEZXNlcmlhbGl6ZXIuc2V0U2VyZGVDb250ZXh0KHNlcmRlQ29udGV4dCk7XG4gICAgICAgIHRoaXMuY29kZWNEZXNlcmlhbGl6ZXIuc2V0U2VyZGVDb250ZXh0KHNlcmRlQ29udGV4dCk7XG4gICAgICAgIHRoaXMuc2VyZGVDb250ZXh0ID0gc2VyZGVDb250ZXh0O1xuICAgIH1cbiAgICByZWFkKHNjaGVtYSQxLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IG5zID0gc2NoZW1hLk5vcm1hbGl6ZWRTY2hlbWEub2Yoc2NoZW1hJDEpO1xuICAgICAgICBjb25zdCB0cmFpdHMgPSBucy5nZXRNZXJnZWRUcmFpdHMoKTtcbiAgICAgICAgY29uc3QgdG9TdHJpbmcgPSB0aGlzLnNlcmRlQ29udGV4dD8udXRmOEVuY29kZXIgPz8gdXRpbFV0ZjgudG9VdGY4O1xuICAgICAgICBpZiAodHJhaXRzLmh0dHBIZWFkZXIgfHwgdHJhaXRzLmh0dHBSZXNwb25zZUNvZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmluZ0Rlc2VyaWFsaXplci5yZWFkKG5zLCB0b1N0cmluZyhkYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyYWl0cy5odHRwUGF5bG9hZCkge1xuICAgICAgICAgICAgaWYgKG5zLmlzQmxvYlNjaGVtYSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9CeXRlcyA9IHRoaXMuc2VyZGVDb250ZXh0Py51dGY4RGVjb2RlciA/PyB1dGlsVXRmOC5mcm9tVXRmODtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvQnl0ZXMoZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobnMuaXNTdHJpbmdTY2hlbWEoKSkge1xuICAgICAgICAgICAgICAgIGlmIChcImJ5dGVMZW5ndGhcIiBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b1N0cmluZyhkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29kZWNEZXNlcmlhbGl6ZXIucmVhZChucywgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBUb1N0cmluZ1NoYXBlU2VyaWFsaXplciBleHRlbmRzIFNlcmRlQ29udGV4dCB7XG4gICAgc2V0dGluZ3M7XG4gICAgc3RyaW5nQnVmZmVyID0gXCJcIjtcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgfVxuICAgIHdyaXRlKHNjaGVtYSQxLCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBucyA9IHNjaGVtYS5Ob3JtYWxpemVkU2NoZW1hLm9mKHNjaGVtYSQxKTtcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJpbmdCdWZmZXIgPSBcIm51bGxcIjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobnMuaXNUaW1lc3RhbXBTY2hlbWEoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEBzbWl0aHkvY29yZS9wcm90b2NvbHMgLSByZWNlaXZlZCBub24tRGF0ZSB2YWx1ZSAke3ZhbHVlfSB3aGVuIHNjaGVtYSBleHBlY3RlZCBEYXRlIGluICR7bnMuZ2V0TmFtZSh0cnVlKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXQgPSBkZXRlcm1pbmVUaW1lc3RhbXBGb3JtYXQobnMsIHRoaXMuc2V0dGluZ3MpO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyaW5nQnVmZmVyID0gdmFsdWUudG9JU09TdHJpbmcoKS5yZXBsYWNlKFwiLjAwMFpcIiwgXCJaXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyaW5nQnVmZmVyID0gc2VyZGUuZGF0ZVRvVXRjU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmluZ0J1ZmZlciA9IFN0cmluZyh2YWx1ZS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiTWlzc2luZyB0aW1lc3RhbXAgZm9ybWF0LCB1c2luZyBlcG9jaCBzZWNvbmRzXCIsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmluZ0J1ZmZlciA9IFN0cmluZyh2YWx1ZS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChucy5pc0Jsb2JTY2hlbWEoKSAmJiBcImJ5dGVMZW5ndGhcIiBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmluZ0J1ZmZlciA9ICh0aGlzLnNlcmRlQ29udGV4dD8uYmFzZTY0RW5jb2RlciA/PyB1dGlsQmFzZTY0LnRvQmFzZTY0KSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5zLmlzTGlzdFNjaGVtYSgpICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBidWZmZXIgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGUoW25zLmdldFZhbHVlU2NoZW1hKCksIG5zLmdldE1lcmdlZFRyYWl0cygpXSwgaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJJdGVtID0gdGhpcy5mbHVzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IG5zLmdldFZhbHVlU2NoZW1hKCkuaXNUaW1lc3RhbXBTY2hlbWEoKSA/IGhlYWRlckl0ZW0gOiBzZXJkZS5xdW90ZUhlYWRlcihoZWFkZXJJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXIgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gXCIsIFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IHNlcmlhbGl6ZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJpbmdCdWZmZXIgPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdHJpbmdCdWZmZXIgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgMik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgY29uc3QgbWVkaWFUeXBlID0gbnMuZ2V0TWVyZ2VkVHJhaXRzKCkubWVkaWFUeXBlO1xuICAgICAgICAgICAgICAgIGxldCBpbnRlcm1lZGlhdGVWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChtZWRpYVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNKc29uID0gbWVkaWFUeXBlID09PSBcImFwcGxpY2F0aW9uL2pzb25cIiB8fCBtZWRpYVR5cGUuZW5kc1dpdGgoXCIranNvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzSnNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJtZWRpYXRlVmFsdWUgPSBzZXJkZS5MYXp5SnNvblN0cmluZy5mcm9tKGludGVybWVkaWF0ZVZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobnMuZ2V0TWVyZ2VkVHJhaXRzKCkuaHR0cEhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJpbmdCdWZmZXIgPSAodGhpcy5zZXJkZUNvbnRleHQ/LmJhc2U2NEVuY29kZXIgPz8gdXRpbEJhc2U2NC50b0Jhc2U2NCkoaW50ZXJtZWRpYXRlVmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdHJpbmdCdWZmZXIgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKG5zLmlzSWRlbXBvdGVuY3lUb2tlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyaW5nQnVmZmVyID0gc2VyZGUuZ2VuZXJhdGVJZGVtcG90ZW5jeVRva2VuKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmluZ0J1ZmZlciA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZsdXNoKCkge1xuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLnN0cmluZ0J1ZmZlcjtcbiAgICAgICAgdGhpcy5zdHJpbmdCdWZmZXIgPSBcIlwiO1xuICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgIH1cbn1cblxuY2xhc3MgSHR0cEludGVyY2VwdGluZ1NoYXBlU2VyaWFsaXplciB7XG4gICAgY29kZWNTZXJpYWxpemVyO1xuICAgIHN0cmluZ1NlcmlhbGl6ZXI7XG4gICAgYnVmZmVyO1xuICAgIGNvbnN0cnVjdG9yKGNvZGVjU2VyaWFsaXplciwgY29kZWNTZXR0aW5ncywgc3RyaW5nU2VyaWFsaXplciA9IG5ldyBUb1N0cmluZ1NoYXBlU2VyaWFsaXplcihjb2RlY1NldHRpbmdzKSkge1xuICAgICAgICB0aGlzLmNvZGVjU2VyaWFsaXplciA9IGNvZGVjU2VyaWFsaXplcjtcbiAgICAgICAgdGhpcy5zdHJpbmdTZXJpYWxpemVyID0gc3RyaW5nU2VyaWFsaXplcjtcbiAgICB9XG4gICAgc2V0U2VyZGVDb250ZXh0KHNlcmRlQ29udGV4dCkge1xuICAgICAgICB0aGlzLmNvZGVjU2VyaWFsaXplci5zZXRTZXJkZUNvbnRleHQoc2VyZGVDb250ZXh0KTtcbiAgICAgICAgdGhpcy5zdHJpbmdTZXJpYWxpemVyLnNldFNlcmRlQ29udGV4dChzZXJkZUNvbnRleHQpO1xuICAgIH1cbiAgICB3cml0ZShzY2hlbWEkMSwgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgbnMgPSBzY2hlbWEuTm9ybWFsaXplZFNjaGVtYS5vZihzY2hlbWEkMSk7XG4gICAgICAgIGNvbnN0IHRyYWl0cyA9IG5zLmdldE1lcmdlZFRyYWl0cygpO1xuICAgICAgICBpZiAodHJhaXRzLmh0dHBIZWFkZXIgfHwgdHJhaXRzLmh0dHBMYWJlbCB8fCB0cmFpdHMuaHR0cFF1ZXJ5KSB7XG4gICAgICAgICAgICB0aGlzLnN0cmluZ1NlcmlhbGl6ZXIud3JpdGUobnMsIHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gdGhpcy5zdHJpbmdTZXJpYWxpemVyLmZsdXNoKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29kZWNTZXJpYWxpemVyLndyaXRlKG5zLCB2YWx1ZSk7XG4gICAgfVxuICAgIGZsdXNoKCkge1xuICAgICAgICBpZiAodGhpcy5idWZmZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5idWZmZXI7XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29kZWNTZXJpYWxpemVyLmZsdXNoKCk7XG4gICAgfVxufVxuXG5leHBvcnRzLkZyb21TdHJpbmdTaGFwZURlc2VyaWFsaXplciA9IEZyb21TdHJpbmdTaGFwZURlc2VyaWFsaXplcjtcbmV4cG9ydHMuSHR0cEJpbmRpbmdQcm90b2NvbCA9IEh0dHBCaW5kaW5nUHJvdG9jb2w7XG5leHBvcnRzLkh0dHBJbnRlcmNlcHRpbmdTaGFwZURlc2VyaWFsaXplciA9IEh0dHBJbnRlcmNlcHRpbmdTaGFwZURlc2VyaWFsaXplcjtcbmV4cG9ydHMuSHR0cEludGVyY2VwdGluZ1NoYXBlU2VyaWFsaXplciA9IEh0dHBJbnRlcmNlcHRpbmdTaGFwZVNlcmlhbGl6ZXI7XG5leHBvcnRzLkh0dHBQcm90b2NvbCA9IEh0dHBQcm90b2NvbDtcbmV4cG9ydHMuUmVxdWVzdEJ1aWxkZXIgPSBSZXF1ZXN0QnVpbGRlcjtcbmV4cG9ydHMuUnBjUHJvdG9jb2wgPSBScGNQcm90b2NvbDtcbmV4cG9ydHMuU2VyZGVDb250ZXh0ID0gU2VyZGVDb250ZXh0O1xuZXhwb3J0cy5Ub1N0cmluZ1NoYXBlU2VyaWFsaXplciA9IFRvU3RyaW5nU2hhcGVTZXJpYWxpemVyO1xuZXhwb3J0cy5jb2xsZWN0Qm9keSA9IGNvbGxlY3RCb2R5O1xuZXhwb3J0cy5kZXRlcm1pbmVUaW1lc3RhbXBGb3JtYXQgPSBkZXRlcm1pbmVUaW1lc3RhbXBGb3JtYXQ7XG5leHBvcnRzLmV4dGVuZGVkRW5jb2RlVVJJQ29tcG9uZW50ID0gZXh0ZW5kZWRFbmNvZGVVUklDb21wb25lbnQ7XG5leHBvcnRzLnJlcXVlc3RCdWlsZGVyID0gcmVxdWVzdEJ1aWxkZXI7XG5leHBvcnRzLnJlc29sdmVkUGF0aCA9IHJlc29sdmVkUGF0aDtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgbWlkZGxld2FyZVN0YWNrID0gcmVxdWlyZSgnQHNtaXRoeS9taWRkbGV3YXJlLXN0YWNrJyk7XG52YXIgcHJvdG9jb2xzID0gcmVxdWlyZSgnQHNtaXRoeS9jb3JlL3Byb3RvY29scycpO1xudmFyIHR5cGVzID0gcmVxdWlyZSgnQHNtaXRoeS90eXBlcycpO1xudmFyIHNjaGVtYSA9IHJlcXVpcmUoJ0BzbWl0aHkvY29yZS9zY2hlbWEnKTtcbnZhciBzZXJkZSA9IHJlcXVpcmUoJ0BzbWl0aHkvY29yZS9zZXJkZScpO1xuXG5jbGFzcyBDbGllbnQge1xuICAgIGNvbmZpZztcbiAgICBtaWRkbGV3YXJlU3RhY2sgPSBtaWRkbGV3YXJlU3RhY2suY29uc3RydWN0U3RhY2soKTtcbiAgICBpbml0Q29uZmlnO1xuICAgIGhhbmRsZXJzO1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB9XG4gICAgc2VuZChjb21tYW5kLCBvcHRpb25zT3JDYiwgY2IpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zT3JDYiAhPT0gXCJmdW5jdGlvblwiID8gb3B0aW9uc09yQ2IgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gdHlwZW9mIG9wdGlvbnNPckNiID09PSBcImZ1bmN0aW9uXCIgPyBvcHRpb25zT3JDYiA6IGNiO1xuICAgICAgICBjb25zdCB1c2VIYW5kbGVyQ2FjaGUgPSBvcHRpb25zID09PSB1bmRlZmluZWQgJiYgdGhpcy5jb25maWcuY2FjaGVNaWRkbGV3YXJlID09PSB0cnVlO1xuICAgICAgICBsZXQgaGFuZGxlcjtcbiAgICAgICAgaWYgKHVzZUhhbmRsZXJDYWNoZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmhhbmRsZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVycyA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnM7XG4gICAgICAgICAgICBpZiAoaGFuZGxlcnMuaGFzKGNvbW1hbmQuY29uc3RydWN0b3IpKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlciA9IGhhbmRsZXJzLmdldChjb21tYW5kLmNvbnN0cnVjdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBjb21tYW5kLnJlc29sdmVNaWRkbGV3YXJlKHRoaXMubWlkZGxld2FyZVN0YWNrLCB0aGlzLmNvbmZpZywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaGFuZGxlcnMuc2V0KGNvbW1hbmQuY29uc3RydWN0b3IsIGhhbmRsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuaGFuZGxlcnM7XG4gICAgICAgICAgICBoYW5kbGVyID0gY29tbWFuZC5yZXNvbHZlTWlkZGxld2FyZSh0aGlzLm1pZGRsZXdhcmVTdGFjaywgdGhpcy5jb25maWcsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgaGFuZGxlcihjb21tYW5kKVxuICAgICAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IGNhbGxiYWNrKG51bGwsIHJlc3VsdC5vdXRwdXQpLCAoZXJyKSA9PiBjYWxsYmFjayhlcnIpKVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7IH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXIoY29tbWFuZCkudGhlbigocmVzdWx0KSA9PiByZXN1bHQub3V0cHV0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkZXN0cm95KCkge1xuICAgICAgICB0aGlzLmNvbmZpZz8ucmVxdWVzdEhhbmRsZXI/LmRlc3Ryb3k/LigpO1xuICAgICAgICBkZWxldGUgdGhpcy5oYW5kbGVycztcbiAgICB9XG59XG5cbmNvbnN0IFNFTlNJVElWRV9TVFJJTkckMSA9IFwiKioqU2Vuc2l0aXZlSW5mb3JtYXRpb24qKipcIjtcbmZ1bmN0aW9uIHNjaGVtYUxvZ0ZpbHRlcihzY2hlbWEkMSwgZGF0YSkge1xuICAgIGlmIChkYXRhID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGNvbnN0IG5zID0gc2NoZW1hLk5vcm1hbGl6ZWRTY2hlbWEub2Yoc2NoZW1hJDEpO1xuICAgIGlmIChucy5nZXRNZXJnZWRUcmFpdHMoKS5zZW5zaXRpdmUpIHtcbiAgICAgICAgcmV0dXJuIFNFTlNJVElWRV9TVFJJTkckMTtcbiAgICB9XG4gICAgaWYgKG5zLmlzTGlzdFNjaGVtYSgpKSB7XG4gICAgICAgIGNvbnN0IGlzU2Vuc2l0aXZlID0gISFucy5nZXRWYWx1ZVNjaGVtYSgpLmdldE1lcmdlZFRyYWl0cygpLnNlbnNpdGl2ZTtcbiAgICAgICAgaWYgKGlzU2Vuc2l0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm4gU0VOU0lUSVZFX1NUUklORyQxO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKG5zLmlzTWFwU2NoZW1hKCkpIHtcbiAgICAgICAgY29uc3QgaXNTZW5zaXRpdmUgPSAhIW5zLmdldEtleVNjaGVtYSgpLmdldE1lcmdlZFRyYWl0cygpLnNlbnNpdGl2ZSB8fCAhIW5zLmdldFZhbHVlU2NoZW1hKCkuZ2V0TWVyZ2VkVHJhaXRzKCkuc2Vuc2l0aXZlO1xuICAgICAgICBpZiAoaXNTZW5zaXRpdmUpIHtcbiAgICAgICAgICAgIHJldHVybiBTRU5TSVRJVkVfU1RSSU5HJDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAobnMuaXNTdHJ1Y3RTY2hlbWEoKSAmJiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBjb25zdCBvYmplY3QgPSBkYXRhO1xuICAgICAgICBjb25zdCBuZXdPYmplY3QgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBbbWVtYmVyLCBtZW1iZXJOc10gb2YgbnMuc3RydWN0SXRlcmF0b3IoKSkge1xuICAgICAgICAgICAgaWYgKG9iamVjdFttZW1iZXJdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBuZXdPYmplY3RbbWVtYmVyXSA9IHNjaGVtYUxvZ0ZpbHRlcihtZW1iZXJOcywgb2JqZWN0W21lbWJlcl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdPYmplY3Q7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xufVxuXG5jbGFzcyBDb21tYW5kIHtcbiAgICBtaWRkbGV3YXJlU3RhY2sgPSBtaWRkbGV3YXJlU3RhY2suY29uc3RydWN0U3RhY2soKTtcbiAgICBzY2hlbWE7XG4gICAgc3RhdGljIGNsYXNzQnVpbGRlcigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDbGFzc0J1aWxkZXIoKTtcbiAgICB9XG4gICAgcmVzb2x2ZU1pZGRsZXdhcmVXaXRoQ29udGV4dChjbGllbnRTdGFjaywgY29uZmlndXJhdGlvbiwgb3B0aW9ucywgeyBtaWRkbGV3YXJlRm4sIGNsaWVudE5hbWUsIGNvbW1hbmROYW1lLCBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZywgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nLCBzbWl0aHlDb250ZXh0LCBhZGRpdGlvbmFsQ29udGV4dCwgQ29tbWFuZEN0b3IsIH0pIHtcbiAgICAgICAgZm9yIChjb25zdCBtdyBvZiBtaWRkbGV3YXJlRm4uYmluZCh0aGlzKShDb21tYW5kQ3RvciwgY2xpZW50U3RhY2ssIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UobXcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY2xpZW50U3RhY2suY29uY2F0KHRoaXMubWlkZGxld2FyZVN0YWNrKTtcbiAgICAgICAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IGhhbmRsZXJFeGVjdXRpb25Db250ZXh0ID0ge1xuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgY2xpZW50TmFtZSxcbiAgICAgICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICAgICAgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2csXG4gICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2csXG4gICAgICAgICAgICBbdHlwZXMuU01JVEhZX0NPTlRFWFRfS0VZXToge1xuICAgICAgICAgICAgICAgIGNvbW1hbmRJbnN0YW5jZTogdGhpcyxcbiAgICAgICAgICAgICAgICAuLi5zbWl0aHlDb250ZXh0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC4uLmFkZGl0aW9uYWxDb250ZXh0LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RIYW5kbGVyIH0gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gc3RhY2sucmVzb2x2ZSgocmVxdWVzdCkgPT4gcmVxdWVzdEhhbmRsZXIuaGFuZGxlKHJlcXVlc3QucmVxdWVzdCwgb3B0aW9ucyB8fCB7fSksIGhhbmRsZXJFeGVjdXRpb25Db250ZXh0KTtcbiAgICB9XG59XG5jbGFzcyBDbGFzc0J1aWxkZXIge1xuICAgIF9pbml0ID0gKCkgPT4geyB9O1xuICAgIF9lcCA9IHt9O1xuICAgIF9taWRkbGV3YXJlRm4gPSAoKSA9PiBbXTtcbiAgICBfY29tbWFuZE5hbWUgPSBcIlwiO1xuICAgIF9jbGllbnROYW1lID0gXCJcIjtcbiAgICBfYWRkaXRpb25hbENvbnRleHQgPSB7fTtcbiAgICBfc21pdGh5Q29udGV4dCA9IHt9O1xuICAgIF9pbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyA9IHVuZGVmaW5lZDtcbiAgICBfb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nID0gdW5kZWZpbmVkO1xuICAgIF9zZXJpYWxpemVyID0gbnVsbDtcbiAgICBfZGVzZXJpYWxpemVyID0gbnVsbDtcbiAgICBfb3BlcmF0aW9uU2NoZW1hO1xuICAgIGluaXQoY2IpIHtcbiAgICAgICAgdGhpcy5faW5pdCA9IGNiO1xuICAgIH1cbiAgICBlcChlbmRwb2ludFBhcmFtZXRlckluc3RydWN0aW9ucykge1xuICAgICAgICB0aGlzLl9lcCA9IGVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgbShtaWRkbGV3YXJlU3VwcGxpZXIpIHtcbiAgICAgICAgdGhpcy5fbWlkZGxld2FyZUZuID0gbWlkZGxld2FyZVN1cHBsaWVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcyhzZXJ2aWNlLCBvcGVyYXRpb24sIHNtaXRoeUNvbnRleHQgPSB7fSkge1xuICAgICAgICB0aGlzLl9zbWl0aHlDb250ZXh0ID0ge1xuICAgICAgICAgICAgc2VydmljZSxcbiAgICAgICAgICAgIG9wZXJhdGlvbixcbiAgICAgICAgICAgIC4uLnNtaXRoeUNvbnRleHQsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBjKGFkZGl0aW9uYWxDb250ZXh0ID0ge30pIHtcbiAgICAgICAgdGhpcy5fYWRkaXRpb25hbENvbnRleHQgPSBhZGRpdGlvbmFsQ29udGV4dDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG4oY2xpZW50TmFtZSwgY29tbWFuZE5hbWUpIHtcbiAgICAgICAgdGhpcy5fY2xpZW50TmFtZSA9IGNsaWVudE5hbWU7XG4gICAgICAgIHRoaXMuX2NvbW1hbmROYW1lID0gY29tbWFuZE5hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBmKGlucHV0RmlsdGVyID0gKF8pID0+IF8sIG91dHB1dEZpbHRlciA9IChfKSA9PiBfKSB7XG4gICAgICAgIHRoaXMuX2lucHV0RmlsdGVyU2Vuc2l0aXZlTG9nID0gaW5wdXRGaWx0ZXI7XG4gICAgICAgIHRoaXMuX291dHB1dEZpbHRlclNlbnNpdGl2ZUxvZyA9IG91dHB1dEZpbHRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHNlcihzZXJpYWxpemVyKSB7XG4gICAgICAgIHRoaXMuX3NlcmlhbGl6ZXIgPSBzZXJpYWxpemVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGUoZGVzZXJpYWxpemVyKSB7XG4gICAgICAgIHRoaXMuX2Rlc2VyaWFsaXplciA9IGRlc2VyaWFsaXplcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHNjKG9wZXJhdGlvbikge1xuICAgICAgICB0aGlzLl9vcGVyYXRpb25TY2hlbWEgPSBvcGVyYXRpb247XG4gICAgICAgIHRoaXMuX3NtaXRoeUNvbnRleHQub3BlcmF0aW9uU2NoZW1hID0gb3BlcmF0aW9uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYnVpbGQoKSB7XG4gICAgICAgIGNvbnN0IGNsb3N1cmUgPSB0aGlzO1xuICAgICAgICBsZXQgQ29tbWFuZFJlZjtcbiAgICAgICAgcmV0dXJuIChDb21tYW5kUmVmID0gY2xhc3MgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICAgICAgICAgIGlucHV0O1xuICAgICAgICAgICAgc3RhdGljIGdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbG9zdXJlLl9lcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKC4uLltpbnB1dF0pIHtcbiAgICAgICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dCA/PyB7fTtcbiAgICAgICAgICAgICAgICBjbG9zdXJlLl9pbml0KHRoaXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2NoZW1hID0gY2xvc3VyZS5fb3BlcmF0aW9uU2NoZW1hO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZU1pZGRsZXdhcmUoc3RhY2ssIGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcCA9IGNsb3N1cmUuX29wZXJhdGlvblNjaGVtYTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IG9wPy5bNF0gPz8gb3A/LmlucHV0O1xuICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IG9wPy5bNV0gPz8gb3A/Lm91dHB1dDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNvbHZlTWlkZGxld2FyZVdpdGhDb250ZXh0KHN0YWNrLCBjb25maWd1cmF0aW9uLCBvcHRpb25zLCB7XG4gICAgICAgICAgICAgICAgICAgIENvbW1hbmRDdG9yOiBDb21tYW5kUmVmLFxuICAgICAgICAgICAgICAgICAgICBtaWRkbGV3YXJlRm46IGNsb3N1cmUuX21pZGRsZXdhcmVGbixcbiAgICAgICAgICAgICAgICAgICAgY2xpZW50TmFtZTogY2xvc3VyZS5fY2xpZW50TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZE5hbWU6IGNsb3N1cmUuX2NvbW1hbmROYW1lLFxuICAgICAgICAgICAgICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZzogY2xvc3VyZS5faW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2cgPz8gKG9wID8gc2NoZW1hTG9nRmlsdGVyLmJpbmQobnVsbCwgaW5wdXQpIDogKF8pID0+IF8pLFxuICAgICAgICAgICAgICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2c6IGNsb3N1cmUuX291dHB1dEZpbHRlclNlbnNpdGl2ZUxvZyA/PyAob3AgPyBzY2hlbWFMb2dGaWx0ZXIuYmluZChudWxsLCBvdXRwdXQpIDogKF8pID0+IF8pLFxuICAgICAgICAgICAgICAgICAgICBzbWl0aHlDb250ZXh0OiBjbG9zdXJlLl9zbWl0aHlDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsQ29udGV4dDogY2xvc3VyZS5fYWRkaXRpb25hbENvbnRleHQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXJpYWxpemUgPSBjbG9zdXJlLl9zZXJpYWxpemVyO1xuICAgICAgICAgICAgZGVzZXJpYWxpemUgPSBjbG9zdXJlLl9kZXNlcmlhbGl6ZXI7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuY29uc3QgU0VOU0lUSVZFX1NUUklORyA9IFwiKioqU2Vuc2l0aXZlSW5mb3JtYXRpb24qKipcIjtcblxuY29uc3QgY3JlYXRlQWdncmVnYXRlZENsaWVudCA9IChjb21tYW5kcywgQ2xpZW50KSA9PiB7XG4gICAgZm9yIChjb25zdCBjb21tYW5kIG9mIE9iamVjdC5rZXlzKGNvbW1hbmRzKSkge1xuICAgICAgICBjb25zdCBDb21tYW5kQ3RvciA9IGNvbW1hbmRzW2NvbW1hbmRdO1xuICAgICAgICBjb25zdCBtZXRob2RJbXBsID0gYXN5bmMgZnVuY3Rpb24gKGFyZ3MsIG9wdGlvbnNPckNiLCBjYikge1xuICAgICAgICAgICAgY29uc3QgY29tbWFuZCA9IG5ldyBDb21tYW5kQ3RvcihhcmdzKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yQ2IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VuZChjb21tYW5kLCBvcHRpb25zT3JDYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgY2IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yQ2IgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgaHR0cCBvcHRpb25zIGJ1dCBnb3QgJHt0eXBlb2Ygb3B0aW9uc09yQ2J9YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKGNvbW1hbmQsIG9wdGlvbnNPckNiIHx8IHt9LCBjYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZW5kKGNvbW1hbmQsIG9wdGlvbnNPckNiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IChjb21tYW5kWzBdLnRvTG93ZXJDYXNlKCkgKyBjb21tYW5kLnNsaWNlKDEpKS5yZXBsYWNlKC9Db21tYW5kJC8sIFwiXCIpO1xuICAgICAgICBDbGllbnQucHJvdG90eXBlW21ldGhvZE5hbWVdID0gbWV0aG9kSW1wbDtcbiAgICB9XG59O1xuXG5jbGFzcyBTZXJ2aWNlRXhjZXB0aW9uIGV4dGVuZHMgRXJyb3Ige1xuICAgICRmYXVsdDtcbiAgICAkcmVzcG9uc2U7XG4gICAgJHJldHJ5YWJsZTtcbiAgICAkbWV0YWRhdGE7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBzdXBlcihvcHRpb25zLm1lc3NhZ2UpO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yLnByb3RvdHlwZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IG9wdGlvbnMubmFtZTtcbiAgICAgICAgdGhpcy4kZmF1bHQgPSBvcHRpb25zLiRmYXVsdDtcbiAgICAgICAgdGhpcy4kbWV0YWRhdGEgPSBvcHRpb25zLiRtZXRhZGF0YTtcbiAgICB9XG4gICAgc3RhdGljIGlzSW5zdGFuY2UodmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiAoU2VydmljZUV4Y2VwdGlvbi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihjYW5kaWRhdGUpIHx8XG4gICAgICAgICAgICAoQm9vbGVhbihjYW5kaWRhdGUuJGZhdWx0KSAmJlxuICAgICAgICAgICAgICAgIEJvb2xlYW4oY2FuZGlkYXRlLiRtZXRhZGF0YSkgJiZcbiAgICAgICAgICAgICAgICAoY2FuZGlkYXRlLiRmYXVsdCA9PT0gXCJjbGllbnRcIiB8fCBjYW5kaWRhdGUuJGZhdWx0ID09PSBcInNlcnZlclwiKSkpO1xuICAgIH1cbiAgICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0oaW5zdGFuY2UpIHtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gaW5zdGFuY2U7XG4gICAgICAgIGlmICh0aGlzID09PSBTZXJ2aWNlRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gU2VydmljZUV4Y2VwdGlvbi5pc0luc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoU2VydmljZUV4Y2VwdGlvbi5pc0luc3RhbmNlKGluc3RhbmNlKSkge1xuICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS5uYW1lICYmIHRoaXMubmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGluc3RhbmNlKSB8fCBjYW5kaWRhdGUubmFtZSA9PT0gdGhpcy5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoaW5zdGFuY2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5jb25zdCBkZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24gPSAoZXhjZXB0aW9uLCBhZGRpdGlvbnMgPSB7fSkgPT4ge1xuICAgIE9iamVjdC5lbnRyaWVzKGFkZGl0aW9ucylcbiAgICAgICAgLmZpbHRlcigoWywgdl0pID0+IHYgIT09IHVuZGVmaW5lZClcbiAgICAgICAgLmZvckVhY2goKFtrLCB2XSkgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uW2tdID09IHVuZGVmaW5lZCB8fCBleGNlcHRpb25ba10gPT09IFwiXCIpIHtcbiAgICAgICAgICAgIGV4Y2VwdGlvbltrXSA9IHY7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBtZXNzYWdlID0gZXhjZXB0aW9uLm1lc3NhZ2UgfHwgZXhjZXB0aW9uLk1lc3NhZ2UgfHwgXCJVbmtub3duRXJyb3JcIjtcbiAgICBleGNlcHRpb24ubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgZGVsZXRlIGV4Y2VwdGlvbi5NZXNzYWdlO1xuICAgIHJldHVybiBleGNlcHRpb247XG59O1xuXG5jb25zdCB0aHJvd0RlZmF1bHRFcnJvciA9ICh7IG91dHB1dCwgcGFyc2VkQm9keSwgZXhjZXB0aW9uQ3RvciwgZXJyb3JDb2RlIH0pID0+IHtcbiAgICBjb25zdCAkbWV0YWRhdGEgPSBkZXNlcmlhbGl6ZU1ldGFkYXRhKG91dHB1dCk7XG4gICAgY29uc3Qgc3RhdHVzQ29kZSA9ICRtZXRhZGF0YS5odHRwU3RhdHVzQ29kZSA/ICRtZXRhZGF0YS5odHRwU3RhdHVzQ29kZSArIFwiXCIgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBuZXcgZXhjZXB0aW9uQ3Rvcih7XG4gICAgICAgIG5hbWU6IHBhcnNlZEJvZHk/LmNvZGUgfHwgcGFyc2VkQm9keT8uQ29kZSB8fCBlcnJvckNvZGUgfHwgc3RhdHVzQ29kZSB8fCBcIlVua25vd25FcnJvclwiLFxuICAgICAgICAkZmF1bHQ6IFwiY2xpZW50XCIsXG4gICAgICAgICRtZXRhZGF0YSxcbiAgICB9KTtcbiAgICB0aHJvdyBkZWNvcmF0ZVNlcnZpY2VFeGNlcHRpb24ocmVzcG9uc2UsIHBhcnNlZEJvZHkpO1xufTtcbmNvbnN0IHdpdGhCYXNlRXhjZXB0aW9uID0gKEV4Y2VwdGlvbkN0b3IpID0+IHtcbiAgICByZXR1cm4gKHsgb3V0cHV0LCBwYXJzZWRCb2R5LCBlcnJvckNvZGUgfSkgPT4ge1xuICAgICAgICB0aHJvd0RlZmF1bHRFcnJvcih7IG91dHB1dCwgcGFyc2VkQm9keSwgZXhjZXB0aW9uQ3RvcjogRXhjZXB0aW9uQ3RvciwgZXJyb3JDb2RlIH0pO1xuICAgIH07XG59O1xuY29uc3QgZGVzZXJpYWxpemVNZXRhZGF0YSA9IChvdXRwdXQpID0+ICh7XG4gICAgaHR0cFN0YXR1c0NvZGU6IG91dHB1dC5zdGF0dXNDb2RlLFxuICAgIHJlcXVlc3RJZDogb3V0cHV0LmhlYWRlcnNbXCJ4LWFtem4tcmVxdWVzdGlkXCJdID8/IG91dHB1dC5oZWFkZXJzW1wieC1hbXpuLXJlcXVlc3QtaWRcIl0gPz8gb3V0cHV0LmhlYWRlcnNbXCJ4LWFtei1yZXF1ZXN0LWlkXCJdLFxuICAgIGV4dGVuZGVkUmVxdWVzdElkOiBvdXRwdXQuaGVhZGVyc1tcIngtYW16LWlkLTJcIl0sXG4gICAgY2ZJZDogb3V0cHV0LmhlYWRlcnNbXCJ4LWFtei1jZi1pZFwiXSxcbn0pO1xuXG5jb25zdCBsb2FkQ29uZmlnc0ZvckRlZmF1bHRNb2RlID0gKG1vZGUpID0+IHtcbiAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgY2FzZSBcInN0YW5kYXJkXCI6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJldHJ5TW9kZTogXCJzdGFuZGFyZFwiLFxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25UaW1lb3V0OiAzMTAwLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBcImluLXJlZ2lvblwiOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByZXRyeU1vZGU6IFwic3RhbmRhcmRcIixcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uVGltZW91dDogMTEwMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJjcm9zcy1yZWdpb25cIjpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcmV0cnlNb2RlOiBcInN0YW5kYXJkXCIsXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvblRpbWVvdXQ6IDMxMDAsXG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwibW9iaWxlXCI6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJldHJ5TW9kZTogXCJzdGFuZGFyZFwiLFxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25UaW1lb3V0OiAzMDAwMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgfVxufTtcblxubGV0IHdhcm5pbmdFbWl0dGVkID0gZmFsc2U7XG5jb25zdCBlbWl0V2FybmluZ0lmVW5zdXBwb3J0ZWRWZXJzaW9uID0gKHZlcnNpb24pID0+IHtcbiAgICBpZiAodmVyc2lvbiAmJiAhd2FybmluZ0VtaXR0ZWQgJiYgcGFyc2VJbnQodmVyc2lvbi5zdWJzdHJpbmcoMSwgdmVyc2lvbi5pbmRleE9mKFwiLlwiKSkpIDwgMTYpIHtcbiAgICAgICAgd2FybmluZ0VtaXR0ZWQgPSB0cnVlO1xuICAgIH1cbn07XG5cbmNvbnN0IGdldENoZWNrc3VtQ29uZmlndXJhdGlvbiA9IChydW50aW1lQ29uZmlnKSA9PiB7XG4gICAgY29uc3QgY2hlY2tzdW1BbGdvcml0aG1zID0gW107XG4gICAgZm9yIChjb25zdCBpZCBpbiB0eXBlcy5BbGdvcml0aG1JZCkge1xuICAgICAgICBjb25zdCBhbGdvcml0aG1JZCA9IHR5cGVzLkFsZ29yaXRobUlkW2lkXTtcbiAgICAgICAgaWYgKHJ1bnRpbWVDb25maWdbYWxnb3JpdGhtSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNoZWNrc3VtQWxnb3JpdGhtcy5wdXNoKHtcbiAgICAgICAgICAgIGFsZ29yaXRobUlkOiAoKSA9PiBhbGdvcml0aG1JZCxcbiAgICAgICAgICAgIGNoZWNrc3VtQ29uc3RydWN0b3I6ICgpID0+IHJ1bnRpbWVDb25maWdbYWxnb3JpdGhtSWRdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWRkQ2hlY2tzdW1BbGdvcml0aG0oYWxnbykge1xuICAgICAgICAgICAgY2hlY2tzdW1BbGdvcml0aG1zLnB1c2goYWxnbyk7XG4gICAgICAgIH0sXG4gICAgICAgIGNoZWNrc3VtQWxnb3JpdGhtcygpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVja3N1bUFsZ29yaXRobXM7XG4gICAgICAgIH0sXG4gICAgfTtcbn07XG5jb25zdCByZXNvbHZlQ2hlY2tzdW1SdW50aW1lQ29uZmlnID0gKGNsaWVudENvbmZpZykgPT4ge1xuICAgIGNvbnN0IHJ1bnRpbWVDb25maWcgPSB7fTtcbiAgICBjbGllbnRDb25maWcuY2hlY2tzdW1BbGdvcml0aG1zKCkuZm9yRWFjaCgoY2hlY2tzdW1BbGdvcml0aG0pID0+IHtcbiAgICAgICAgcnVudGltZUNvbmZpZ1tjaGVja3N1bUFsZ29yaXRobS5hbGdvcml0aG1JZCgpXSA9IGNoZWNrc3VtQWxnb3JpdGhtLmNoZWNrc3VtQ29uc3RydWN0b3IoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcnVudGltZUNvbmZpZztcbn07XG5cbmNvbnN0IGdldFJldHJ5Q29uZmlndXJhdGlvbiA9IChydW50aW1lQ29uZmlnKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2V0UmV0cnlTdHJhdGVneShyZXRyeVN0cmF0ZWd5KSB7XG4gICAgICAgICAgICBydW50aW1lQ29uZmlnLnJldHJ5U3RyYXRlZ3kgPSByZXRyeVN0cmF0ZWd5O1xuICAgICAgICB9LFxuICAgICAgICByZXRyeVN0cmF0ZWd5KCkge1xuICAgICAgICAgICAgcmV0dXJuIHJ1bnRpbWVDb25maWcucmV0cnlTdHJhdGVneTtcbiAgICAgICAgfSxcbiAgICB9O1xufTtcbmNvbnN0IHJlc29sdmVSZXRyeVJ1bnRpbWVDb25maWcgPSAocmV0cnlTdHJhdGVneUNvbmZpZ3VyYXRpb24pID0+IHtcbiAgICBjb25zdCBydW50aW1lQ29uZmlnID0ge307XG4gICAgcnVudGltZUNvbmZpZy5yZXRyeVN0cmF0ZWd5ID0gcmV0cnlTdHJhdGVneUNvbmZpZ3VyYXRpb24ucmV0cnlTdHJhdGVneSgpO1xuICAgIHJldHVybiBydW50aW1lQ29uZmlnO1xufTtcblxuY29uc3QgZ2V0RGVmYXVsdEV4dGVuc2lvbkNvbmZpZ3VyYXRpb24gPSAocnVudGltZUNvbmZpZykgPT4ge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKGdldENoZWNrc3VtQ29uZmlndXJhdGlvbihydW50aW1lQ29uZmlnKSwgZ2V0UmV0cnlDb25maWd1cmF0aW9uKHJ1bnRpbWVDb25maWcpKTtcbn07XG5jb25zdCBnZXREZWZhdWx0Q2xpZW50Q29uZmlndXJhdGlvbiA9IGdldERlZmF1bHRFeHRlbnNpb25Db25maWd1cmF0aW9uO1xuY29uc3QgcmVzb2x2ZURlZmF1bHRSdW50aW1lQ29uZmlnID0gKGNvbmZpZykgPT4ge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHJlc29sdmVDaGVja3N1bVJ1bnRpbWVDb25maWcoY29uZmlnKSwgcmVzb2x2ZVJldHJ5UnVudGltZUNvbmZpZyhjb25maWcpKTtcbn07XG5cbmNvbnN0IGdldEFycmF5SWZTaW5nbGVJdGVtID0gKG1heUJlQXJyYXkpID0+IEFycmF5LmlzQXJyYXkobWF5QmVBcnJheSkgPyBtYXlCZUFycmF5IDogW21heUJlQXJyYXldO1xuXG5jb25zdCBnZXRWYWx1ZUZyb21UZXh0Tm9kZSA9IChvYmopID0+IHtcbiAgICBjb25zdCB0ZXh0Tm9kZU5hbWUgPSBcIiN0ZXh0XCI7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSAmJiBvYmpba2V5XVt0ZXh0Tm9kZU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gb2JqW2tleV1bdGV4dE5vZGVOYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqW2tleV0gPT09IFwib2JqZWN0XCIgJiYgb2JqW2tleV0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gZ2V0VmFsdWVGcm9tVGV4dE5vZGUob2JqW2tleV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG59O1xuXG5jb25zdCBpc1NlcmlhbGl6YWJsZUhlYWRlclZhbHVlID0gKHZhbHVlKSA9PiB7XG4gICAgcmV0dXJuIHZhbHVlICE9IG51bGw7XG59O1xuXG5jbGFzcyBOb09wTG9nZ2VyIHtcbiAgICB0cmFjZSgpIHsgfVxuICAgIGRlYnVnKCkgeyB9XG4gICAgaW5mbygpIHsgfVxuICAgIHdhcm4oKSB7IH1cbiAgICBlcnJvcigpIHsgfVxufVxuXG5mdW5jdGlvbiBtYXAoYXJnMCwgYXJnMSwgYXJnMikge1xuICAgIGxldCB0YXJnZXQ7XG4gICAgbGV0IGZpbHRlcjtcbiAgICBsZXQgaW5zdHJ1Y3Rpb25zO1xuICAgIGlmICh0eXBlb2YgYXJnMSA9PT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgYXJnMiA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICB0YXJnZXQgPSB7fTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25zID0gYXJnMDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRhcmdldCA9IGFyZzA7XG4gICAgICAgIGlmICh0eXBlb2YgYXJnMSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBmaWx0ZXIgPSBhcmcxO1xuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zID0gYXJnMjtcbiAgICAgICAgICAgIHJldHVybiBtYXBXaXRoRmlsdGVyKHRhcmdldCwgZmlsdGVyLCBpbnN0cnVjdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zID0gYXJnMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhpbnN0cnVjdGlvbnMpKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpbnN0cnVjdGlvbnNba2V5XSkpIHtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gaW5zdHJ1Y3Rpb25zW2tleV07XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBhcHBseUluc3RydWN0aW9uKHRhcmdldCwgbnVsbCwgaW5zdHJ1Y3Rpb25zLCBrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuY29uc3QgY29udmVydE1hcCA9ICh0YXJnZXQpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh0YXJnZXQgfHwge30pKSB7XG4gICAgICAgIG91dHB1dFtrXSA9IFssIHZdO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xufTtcbmNvbnN0IHRha2UgPSAoc291cmNlLCBpbnN0cnVjdGlvbnMpID0+IHtcbiAgICBjb25zdCBvdXQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBpbnN0cnVjdGlvbnMpIHtcbiAgICAgICAgYXBwbHlJbnN0cnVjdGlvbihvdXQsIHNvdXJjZSwgaW5zdHJ1Y3Rpb25zLCBrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xufTtcbmNvbnN0IG1hcFdpdGhGaWx0ZXIgPSAodGFyZ2V0LCBmaWx0ZXIsIGluc3RydWN0aW9ucykgPT4ge1xuICAgIHJldHVybiBtYXAodGFyZ2V0LCBPYmplY3QuZW50cmllcyhpbnN0cnVjdGlvbnMpLnJlZHVjZSgoX2luc3RydWN0aW9ucywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgX2luc3RydWN0aW9uc1trZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBfaW5zdHJ1Y3Rpb25zW2tleV0gPSBbZmlsdGVyLCB2YWx1ZSgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIF9pbnN0cnVjdGlvbnNba2V5XSA9IFtmaWx0ZXIsIHZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX2luc3RydWN0aW9ucztcbiAgICB9LCB7fSkpO1xufTtcbmNvbnN0IGFwcGx5SW5zdHJ1Y3Rpb24gPSAodGFyZ2V0LCBzb3VyY2UsIGluc3RydWN0aW9ucywgdGFyZ2V0S2V5KSA9PiB7XG4gICAgaWYgKHNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICBsZXQgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnNbdGFyZ2V0S2V5XTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnN0cnVjdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBpbnN0cnVjdGlvbiA9IFssIGluc3RydWN0aW9uXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBbZmlsdGVyID0gbm9uTnVsbGlzaCwgdmFsdWVGbiA9IHBhc3MsIHNvdXJjZUtleSA9IHRhcmdldEtleV0gPSBpbnN0cnVjdGlvbjtcbiAgICAgICAgaWYgKCh0eXBlb2YgZmlsdGVyID09PSBcImZ1bmN0aW9uXCIgJiYgZmlsdGVyKHNvdXJjZVtzb3VyY2VLZXldKSkgfHwgKHR5cGVvZiBmaWx0ZXIgIT09IFwiZnVuY3Rpb25cIiAmJiAhIWZpbHRlcikpIHtcbiAgICAgICAgICAgIHRhcmdldFt0YXJnZXRLZXldID0gdmFsdWVGbihzb3VyY2Vbc291cmNlS2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgW2ZpbHRlciwgdmFsdWVdID0gaW5zdHJ1Y3Rpb25zW3RhcmdldEtleV07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGxldCBfdmFsdWU7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXJQYXNzZWQgPSBmaWx0ZXIgPT09IHVuZGVmaW5lZCAmJiAoX3ZhbHVlID0gdmFsdWUoKSkgIT0gbnVsbDtcbiAgICAgICAgY29uc3QgY3VzdG9tRmlsdGVyUGFzc2VkID0gKHR5cGVvZiBmaWx0ZXIgPT09IFwiZnVuY3Rpb25cIiAmJiAhIWZpbHRlcih2b2lkIDApKSB8fCAodHlwZW9mIGZpbHRlciAhPT0gXCJmdW5jdGlvblwiICYmICEhZmlsdGVyKTtcbiAgICAgICAgaWYgKGRlZmF1bHRGaWx0ZXJQYXNzZWQpIHtcbiAgICAgICAgICAgIHRhcmdldFt0YXJnZXRLZXldID0gX3ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGN1c3RvbUZpbHRlclBhc3NlZCkge1xuICAgICAgICAgICAgdGFyZ2V0W3RhcmdldEtleV0gPSB2YWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBkZWZhdWx0RmlsdGVyUGFzc2VkID0gZmlsdGVyID09PSB1bmRlZmluZWQgJiYgdmFsdWUgIT0gbnVsbDtcbiAgICAgICAgY29uc3QgY3VzdG9tRmlsdGVyUGFzc2VkID0gKHR5cGVvZiBmaWx0ZXIgPT09IFwiZnVuY3Rpb25cIiAmJiAhIWZpbHRlcih2YWx1ZSkpIHx8ICh0eXBlb2YgZmlsdGVyICE9PSBcImZ1bmN0aW9uXCIgJiYgISFmaWx0ZXIpO1xuICAgICAgICBpZiAoZGVmYXVsdEZpbHRlclBhc3NlZCB8fCBjdXN0b21GaWx0ZXJQYXNzZWQpIHtcbiAgICAgICAgICAgIHRhcmdldFt0YXJnZXRLZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59O1xuY29uc3Qgbm9uTnVsbGlzaCA9IChfKSA9PiBfICE9IG51bGw7XG5jb25zdCBwYXNzID0gKF8pID0+IF87XG5cbmNvbnN0IHNlcmlhbGl6ZUZsb2F0ID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gXCJOYU5cIjtcbiAgICB9XG4gICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICBjYXNlIEluZmluaXR5OlxuICAgICAgICAgICAgcmV0dXJuIFwiSW5maW5pdHlcIjtcbiAgICAgICAgY2FzZSAtSW5maW5pdHk6XG4gICAgICAgICAgICByZXR1cm4gXCItSW5maW5pdHlcIjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59O1xuY29uc3Qgc2VyaWFsaXplRGF0ZVRpbWUgPSAoZGF0ZSkgPT4gZGF0ZS50b0lTT1N0cmluZygpLnJlcGxhY2UoXCIuMDAwWlwiLCBcIlpcIik7XG5cbmNvbnN0IF9qc29uID0gKG9iaikgPT4ge1xuICAgIGlmIChvYmogPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG9iai5maWx0ZXIoKF8pID0+IF8gIT0gbnVsbCkubWFwKF9qc29uKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgICAgICAgIGlmIChvYmpba2V5XSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXJnZXRba2V5XSA9IF9qc29uKG9ialtrZXldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29sbGVjdEJvZHlcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm90b2NvbHMuY29sbGVjdEJvZHk7IH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXh0ZW5kZWRFbmNvZGVVUklDb21wb25lbnRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm90b2NvbHMuZXh0ZW5kZWRFbmNvZGVVUklDb21wb25lbnQ7IH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVzb2x2ZWRQYXRoXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJvdG9jb2xzLnJlc29sdmVkUGF0aDsgfVxufSk7XG5leHBvcnRzLkNsaWVudCA9IENsaWVudDtcbmV4cG9ydHMuQ29tbWFuZCA9IENvbW1hbmQ7XG5leHBvcnRzLk5vT3BMb2dnZXIgPSBOb09wTG9nZ2VyO1xuZXhwb3J0cy5TRU5TSVRJVkVfU1RSSU5HID0gU0VOU0lUSVZFX1NUUklORztcbmV4cG9ydHMuU2VydmljZUV4Y2VwdGlvbiA9IFNlcnZpY2VFeGNlcHRpb247XG5leHBvcnRzLl9qc29uID0gX2pzb247XG5leHBvcnRzLmNvbnZlcnRNYXAgPSBjb252ZXJ0TWFwO1xuZXhwb3J0cy5jcmVhdGVBZ2dyZWdhdGVkQ2xpZW50ID0gY3JlYXRlQWdncmVnYXRlZENsaWVudDtcbmV4cG9ydHMuZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uID0gZGVjb3JhdGVTZXJ2aWNlRXhjZXB0aW9uO1xuZXhwb3J0cy5lbWl0V2FybmluZ0lmVW5zdXBwb3J0ZWRWZXJzaW9uID0gZW1pdFdhcm5pbmdJZlVuc3VwcG9ydGVkVmVyc2lvbjtcbmV4cG9ydHMuZ2V0QXJyYXlJZlNpbmdsZUl0ZW0gPSBnZXRBcnJheUlmU2luZ2xlSXRlbTtcbmV4cG9ydHMuZ2V0RGVmYXVsdENsaWVudENvbmZpZ3VyYXRpb24gPSBnZXREZWZhdWx0Q2xpZW50Q29uZmlndXJhdGlvbjtcbmV4cG9ydHMuZ2V0RGVmYXVsdEV4dGVuc2lvbkNvbmZpZ3VyYXRpb24gPSBnZXREZWZhdWx0RXh0ZW5zaW9uQ29uZmlndXJhdGlvbjtcbmV4cG9ydHMuZ2V0VmFsdWVGcm9tVGV4dE5vZGUgPSBnZXRWYWx1ZUZyb21UZXh0Tm9kZTtcbmV4cG9ydHMuaXNTZXJpYWxpemFibGVIZWFkZXJWYWx1ZSA9IGlzU2VyaWFsaXphYmxlSGVhZGVyVmFsdWU7XG5leHBvcnRzLmxvYWRDb25maWdzRm9yRGVmYXVsdE1vZGUgPSBsb2FkQ29uZmlnc0ZvckRlZmF1bHRNb2RlO1xuZXhwb3J0cy5tYXAgPSBtYXA7XG5leHBvcnRzLnJlc29sdmVEZWZhdWx0UnVudGltZUNvbmZpZyA9IHJlc29sdmVEZWZhdWx0UnVudGltZUNvbmZpZztcbmV4cG9ydHMuc2VyaWFsaXplRGF0ZVRpbWUgPSBzZXJpYWxpemVEYXRlVGltZTtcbmV4cG9ydHMuc2VyaWFsaXplRmxvYXQgPSBzZXJpYWxpemVGbG9hdDtcbmV4cG9ydHMudGFrZSA9IHRha2U7XG5leHBvcnRzLnRocm93RGVmYXVsdEVycm9yID0gdGhyb3dEZWZhdWx0RXJyb3I7XG5leHBvcnRzLndpdGhCYXNlRXhjZXB0aW9uID0gd2l0aEJhc2VFeGNlcHRpb247XG5PYmplY3Qua2V5cyhzZXJkZSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgIGlmIChrICE9PSAnZGVmYXVsdCcgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBrKSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGssIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXJkZVtrXTsgfVxuICAgIH0pO1xufSk7XG4iCiAgXSwKICAibWFwcGluZ3MiOiAib05BRUEsRkFBSSxFQUVFLEhBQW1CLENBQUMsSUFBWSxFQUFRLEdBQU0sc0JBQXdCLEVBQVEsR0FBTSxvQkFBc0IsQ0FBQyxHQUUzRyxHQUFvQixDQUFDLElBQVUsQ0FDakMsR0FBSSxPQUFPLElBQVUsV0FDakIsT0FBTyxFQUNYLElBQU0sRUFBYyxRQUFRLFFBQVEsQ0FBSyxFQUN6QyxNQUFPLElBQU0sR0FHVCxvQkFBbUIsR0FDbkIscUJBQW9CLHFCQ1o1QixJQUFJLFFBQ0EsUUFFRSxHQUFRLENBQUMsSUFBYyxDQUN6QixHQUFJLE9BQU8sSUFBYyxXQUNyQixPQUFPLEVBQVUsRUFFckIsT0FBTyxHQUdMLEdBQVksQ0FBQyxFQUFXLEVBQU0sRUFBUSxFQUFPLEtBQVksQ0FDM0QsT0FDQSxZQUNBLFNBQ0EsUUFDQSxRQUNKLEdBRU0sR0FBa0MsQ0FBQyxJQUFXLENBQUMsRUFBTSxJQUFZLE1BQU8sSUFBUyxDQUNuRixJQUFRLFlBQWEsTUFBTSxFQUFLLENBQUksR0FDNUIsbUJBQW9CLEdBQWUsaUJBQWlCLENBQU8sSUFDMUQsRUFBSSxFQUFHLEVBQUcsRUFBRyxHQUFLLEdBQW1CLENBQUMsRUFDL0MsR0FBSSxDQUNBLElBQU0sRUFBUyxNQUFNLEVBQU8sU0FBUyxvQkFBb0IsR0FBVSxFQUFJLEVBQUcsRUFBRyxFQUFHLENBQUMsRUFBRyxJQUM3RSxLQUNBLENBQ1AsRUFBRyxDQUFRLEVBQ1gsTUFBTyxDQUNILFdBQ0EsT0FBUSxDQUNaLEVB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RSxPQUFPLElBQUksUUFBUSxRQUFTLENBQUMsRUFBRyxFQUFHLENBQUUsRUFBRSxLQUFLLENBQUMsRUFBRyxFQUFHLEVBQUcsQ0FBQyxDQUFDLEVBQUksR0FBSyxFQUFPLEVBQUcsQ0FBQyxFQUFJLEdBQVUsRUFBRyxFQUFFLEdBQUssRUFBRSxFQUFFLEVBQUUsR0FDbEssU0FBUyxDQUFNLENBQUMsRUFBRyxFQUFHLENBQUUsR0FBSSxDQUFFLEVBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFLLE1BQU8sRUFBRyxDQUFFLEVBQU8sRUFBRSxHQUFHLEdBQUksQ0FBQyxHQUM1RSxTQUFTLENBQUksQ0FBQyxFQUFHLENBQUUsRUFBRSxpQkFBaUIsRUFBVSxRQUFRLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQVMsQ0FBTSxFQUFJLEVBQU8sRUFBRSxHQUFHLEdBQUksQ0FBQyxFQUNwSCxTQUFTLENBQU8sQ0FBQyxFQUFPLENBQUUsRUFBTyxPQUFRLENBQUssRUFDOUMsU0FBUyxDQUFNLENBQUMsRUFBTyxDQUFFLEVBQU8sUUFBUyxDQUFLLEVBQzlDLFNBQVMsQ0FBTSxDQUFDLEVBQUcsRUFBRyxDQUFFLEdBQUksRUFBRSxDQUFDLEVBQUcsRUFBRSxNQUFNLEVBQUcsRUFBRSxPQUFRLEVBQU8sRUFBRSxHQUFHLEdBQUksRUFBRSxHQUFHLEVBQUUsSUFHbEYsR0FBbUIsUUFBUyxDQUFDLEVBQUcsQ0FDNUIsSUFBSSxFQUFHLEVBQ1AsT0FBTyxFQUFJLENBQUMsRUFBRyxFQUFLLE1BQU0sRUFBRyxFQUFLLFFBQVMsUUFBUyxDQUFDLEVBQUcsQ0FBRSxNQUFNLEVBQUksRUFBRyxFQUFLLFFBQVEsRUFBRyxFQUFFLE9BQU8sVUFBWSxRQUFTLEVBQUcsQ0FBRSxPQUFPLE1BQVMsRUFDMUksU0FBUyxDQUFJLENBQUMsRUFBRyxFQUFHLENBQUUsRUFBRSxHQUFLLEVBQUUsR0FBSyxRQUFTLENBQUMsRUFBRyxDQUFFLE9BQVEsRUFBSSxDQUFDLEdBQUssQ0FBRSxNQUFPLEVBQVEsRUFBRSxHQUFHLENB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
|