@drincs/pixi-vn 1.5.13 → 1.5.18
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/README.md +8 -3
- package/dist/canvas.cjs +3 -2
- package/dist/canvas.d.cts +46 -105
- package/dist/canvas.d.ts +46 -105
- package/dist/canvas.mjs +3 -2
- package/dist/characters.cjs +2 -1
- package/dist/characters.mjs +2 -1
- package/dist/chunk-46QBDRUK.mjs +2 -0
- package/dist/chunk-52EK6LYW.mjs +2 -0
- package/dist/chunk-INJYRMJ3.mjs +2 -0
- package/dist/{chunk-TTRUPDAB.mjs → chunk-JJFD2BVW.mjs} +2 -1
- package/dist/chunk-JJFD2BVW.mjs.map +1 -0
- package/dist/chunk-OXRIVLY2.mjs +2 -0
- package/dist/chunk-SOFV7YZ5.mjs +2 -0
- package/dist/chunk-XZMYXKAY.mjs +2 -0
- package/dist/core.cjs +1 -0
- package/dist/core.d.cts +399 -0
- package/dist/core.d.ts +399 -0
- package/dist/core.mjs +1 -0
- package/dist/history.cjs +2 -1
- package/dist/history.d.cts +1 -1
- package/dist/history.d.ts +1 -1
- package/dist/history.mjs +2 -1
- package/dist/index.cjs +3 -2
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +9 -10
- package/dist/index.d.ts +9 -10
- package/dist/index.mjs +3 -2
- package/dist/index.mjs.map +1 -0
- package/dist/motion.cjs +2 -0
- package/dist/motion.cjs.map +1 -0
- package/dist/motion.d.cts +96 -0
- package/dist/motion.d.ts +96 -0
- package/dist/motion.mjs +2 -0
- package/dist/motion.mjs.map +1 -0
- package/dist/narration.cjs +3 -2
- package/dist/narration.mjs +3 -2
- package/dist/pixi/browser.js +170 -167
- package/dist/sound.cjs +2 -1
- package/dist/sound.mjs +2 -1
- package/dist/storage.cjs +2 -1
- package/dist/storage.mjs +2 -1
- package/dist/vite-listener.cjs +2 -1
- package/dist/vite-listener.cjs.map +1 -0
- package/dist/vite-listener.mjs +2 -1
- package/dist/vite-listener.mjs.map +1 -0
- package/dist/vite.cjs +2 -1
- package/dist/vite.cjs.map +1 -0
- package/dist/vite.mjs +2 -1
- package/dist/vite.mjs.map +1 -0
- package/package.json +27 -10
- package/dist/chunk-6GO4XVS7.mjs +0 -1
- package/dist/chunk-6IVCTY6P.mjs +0 -1
- package/dist/chunk-GNJIUFU2.mjs +0 -1
- package/dist/chunk-HVEJJGVC.mjs +0 -1
- package/dist/chunk-XDBHD3IV.mjs +0 -1
- package/dist/chunk-XSN6P5JL.mjs +0 -0
- package/dist/unifier.cjs +0 -1
- package/dist/unifier.mjs +0 -1
package/dist/characters.cjs
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
'use strict';require('@drincs/pixi-vn/unifier');var te=Object.defineProperty;var Ht=l=>{throw TypeError(l)};var ee=(l,t,e)=>t in l?te(l,t,{enumerable:true,configurable:true,writable:true,value:e}):l[t]=e;var g=(l,t,e)=>ee(l,typeof t!="symbol"?t+"":t,e),Nt=(l,t,e)=>t.has(l)||Ht("Cannot "+e);var i=(l,t,e)=>(Nt(l,t,"read from private field"),e?e.call(l):t.get(l)),_=(l,t,e)=>t.has(l)?Ht("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(l):t.set(l,e),f=(l,t,e,s)=>(Nt(l,t,"write to private field"),t.set(l,e),e),h=(l,t,e)=>(Nt(l,t,"access private method"),e);var Ct=(l,t,e,s)=>({set _(o){f(l,t,o);},get _(){return i(l,t,s)}});var K;(o=>(o.log=(a,...r)=>console.log(`[Pixi\u2019VN] ${a}`,...r),o.warn=(a,...r)=>console.warn(`[Pixi\u2019VN] ${a}`,...r),o.error=(a,...r)=>console.error(`[Pixi\u2019VN] ${a}`,...r),o.info=(a,...r)=>console.info(`[Pixi\u2019VN] ${a}`,...r)))(K||(K={}));function Ft(l){try{if(typeof l>"u")return l;let t=JSON.stringify(l);return JSON.parse(t)}catch(t){throw K.error("Error creating exportable element",l,t),new Error("[Pixi\u2019VN] Error creating exportable element")}}var ie=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,Jt=new Set,Ut=typeof process=="object"&&process?process:{},qt=(l,t,e,s)=>{typeof Ut.emitWarning=="function"?Ut.emitWarning(l,t,e,s):console.error(`[${e}] ${t}: ${l}`);},Mt=globalThis.AbortController,$t=globalThis.AbortSignal;if(typeof Mt>"u"){$t=class{constructor(){g(this,"onabort");g(this,"_onabort",[]);g(this,"reason");g(this,"aborted",false);}addEventListener(e,s){this._onabort.push(s);}},Mt=class{constructor(){g(this,"signal",new $t);t();}abort(e){if(!this.signal.aborted){this.signal.reason=e,this.signal.aborted=true;for(let s of this.signal._onabort)s(e);this.signal.onabort?.(e);}}};let l=Ut.env?.LRU_CACHE_IGNORE_AC_WARNING!=="1",t=()=>{l&&(l=false,qt("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",t));};}var se=l=>!Jt.has(l);var rt=l=>l&&l===Math.floor(l)&&l>0&&isFinite(l),kt=l=>rt(l)?l<=Math.pow(2,8)?Uint8Array:l<=Math.pow(2,16)?Uint16Array:l<=Math.pow(2,32)?Uint32Array:l<=Number.MAX_SAFE_INTEGER?Dt:null:null,Dt=class extends Array{constructor(l){super(l),this.fill(0);}},tt,pt,re=(tt=class{constructor(t,e){g(this,"heap");g(this,"length");if(!i(tt,pt))throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new e(t),this.length=0;}static create(t){let e=kt(t);if(!e)return [];f(tt,pt,true);let s=new tt(t,e);return f(tt,pt,false),s}push(t){this.heap[this.length++]=t;}pop(){return this.heap[--this.length]}},pt=new WeakMap,_(tt,pt,false),tt),Bt,Xt,j,N,H,lt,$,mt,_t,B,x,X,A,y,d,z,U,F,R,J,C,q,k,P,V,Q,ht,M,St,n,Pt,ct,et,At,W,Zt,ft,Et,xt,ot,at,Vt,It,zt,b,Wt,Ot,nt,Yt,bt,Qt=(bt=class{constructor(t){_(this,n);_(this,j);_(this,N);_(this,H);_(this,lt);_(this,$);_(this,mt);_(this,_t);_(this,B);g(this,"ttl");g(this,"ttlResolution");g(this,"ttlAutopurge");g(this,"updateAgeOnGet");g(this,"updateAgeOnHas");g(this,"allowStale");g(this,"noDisposeOnSet");g(this,"noUpdateTTL");g(this,"maxEntrySize");g(this,"sizeCalculation");g(this,"noDeleteOnFetchRejection");g(this,"noDeleteOnStaleGet");g(this,"allowStaleOnFetchAbort");g(this,"allowStaleOnFetchRejection");g(this,"ignoreFetchAbort");_(this,x);_(this,X);_(this,A);_(this,y);_(this,d);_(this,z);_(this,U);_(this,F);_(this,R);_(this,J);_(this,C);_(this,q);_(this,k);_(this,P);_(this,V);_(this,Q);_(this,ht);_(this,M);_(this,St);_(this,ct,()=>{});_(this,et,()=>{});_(this,At,()=>{});_(this,W,()=>false);_(this,ft,t=>{});_(this,Et,(t,e,s)=>{});_(this,xt,(t,e,s,o)=>{if(s||o)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0});g(this,Bt,"LRUCache");let{max:e=0,ttl:s,ttlResolution:o=1,ttlAutopurge:a,updateAgeOnGet:r,updateAgeOnHas:c,allowStale:u,dispose:S,onInsert:G,disposeAfter:w,noDisposeOnSet:st,noUpdateTTL:Y,maxSize:Z=0,maxEntrySize:T=0,sizeCalculation:E,fetchMethod:m,memoMethod:D,noDeleteOnFetchRejection:L,noDeleteOnStaleGet:I,allowStaleOnFetchRejection:v,allowStaleOnFetchAbort:vt,ignoreFetchAbort:ut,perf:gt}=t;if(gt!==void 0&&typeof gt?.now!="function")throw new TypeError("perf option must have a now() method if specified");if(f(this,B,gt??ie),e!==0&&!rt(e))throw new TypeError("max option must be a nonnegative integer");let dt=e?kt(e):Array;if(!dt)throw new Error("invalid max value: "+e);if(f(this,j,e),f(this,N,Z),this.maxEntrySize=T||i(this,N),this.sizeCalculation=E,this.sizeCalculation){if(!i(this,N)&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(D!==void 0&&typeof D!="function")throw new TypeError("memoMethod must be a function if defined");if(f(this,_t,D),m!==void 0&&typeof m!="function")throw new TypeError("fetchMethod must be a function if specified");if(f(this,mt,m),f(this,ht,!!m),f(this,A,new Map),f(this,y,new Array(e).fill(void 0)),f(this,d,new Array(e).fill(void 0)),f(this,z,new dt(e)),f(this,U,new dt(e)),f(this,F,0),f(this,R,0),f(this,J,re.create(e)),f(this,x,0),f(this,X,0),typeof S=="function"&&f(this,H,S),typeof G=="function"&&f(this,lt,G),typeof w=="function"?(f(this,$,w),f(this,C,[])):(f(this,$,void 0),f(this,C,void 0)),f(this,Q,!!i(this,H)),f(this,St,!!i(this,lt)),f(this,M,!!i(this,$)),this.noDisposeOnSet=!!st,this.noUpdateTTL=!!Y,this.noDeleteOnFetchRejection=!!L,this.allowStaleOnFetchRejection=!!v,this.allowStaleOnFetchAbort=!!vt,this.ignoreFetchAbort=!!ut,this.maxEntrySize!==0){if(i(this,N)!==0&&!rt(i(this,N)))throw new TypeError("maxSize must be a positive integer if specified");if(!rt(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");h(this,n,Zt).call(this);}if(this.allowStale=!!u,this.noDeleteOnStaleGet=!!I,this.updateAgeOnGet=!!r,this.updateAgeOnHas=!!c,this.ttlResolution=rt(o)||o===0?o:1,this.ttlAutopurge=!!a,this.ttl=s||0,this.ttl){if(!rt(this.ttl))throw new TypeError("ttl must be a positive integer if specified");h(this,n,Pt).call(this);}if(i(this,j)===0&&this.ttl===0&&i(this,N)===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!i(this,j)&&!i(this,N)){let Lt="LRU_CACHE_UNBOUNDED";se(Lt)&&(Jt.add(Lt),qt("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",Lt,bt));}}get perf(){return i(this,B)}static unsafeExposeInternals(t){return {starts:i(t,k),ttls:i(t,P),autopurgeTimers:i(t,V),sizes:i(t,q),keyMap:i(t,A),keyList:i(t,y),valList:i(t,d),next:i(t,z),prev:i(t,U),get head(){return i(t,F)},get tail(){return i(t,R)},free:i(t,J),isBackgroundFetch:e=>{var s;return h(s=t,n,b).call(s,e)},backgroundFetch:(e,s,o,a)=>{var r;return h(r=t,n,zt).call(r,e,s,o,a)},moveToTail:e=>{var s;return h(s=t,n,Ot).call(s,e)},indexes:e=>{var s;return h(s=t,n,ot).call(s,e)},rindexes:e=>{var s;return h(s=t,n,at).call(s,e)},isStale:e=>{var s;return i(s=t,W).call(s,e)}}}get max(){return i(this,j)}get maxSize(){return i(this,N)}get calculatedSize(){return i(this,X)}get size(){return i(this,x)}get fetchMethod(){return i(this,mt)}get memoMethod(){return i(this,_t)}get dispose(){return i(this,H)}get onInsert(){return i(this,lt)}get disposeAfter(){return i(this,$)}getRemainingTTL(t){return i(this,A).has(t)?1/0:0}*entries(){for(let t of h(this,n,ot).call(this))i(this,d)[t]!==void 0&&i(this,y)[t]!==void 0&&!h(this,n,b).call(this,i(this,d)[t])&&(yield [i(this,y)[t],i(this,d)[t]]);}*rentries(){for(let t of h(this,n,at).call(this))i(this,d)[t]!==void 0&&i(this,y)[t]!==void 0&&!h(this,n,b).call(this,i(this,d)[t])&&(yield [i(this,y)[t],i(this,d)[t]]);}*keys(){for(let t of h(this,n,ot).call(this)){let e=i(this,y)[t];e!==void 0&&!h(this,n,b).call(this,i(this,d)[t])&&(yield e);}}*rkeys(){for(let t of h(this,n,at).call(this)){let e=i(this,y)[t];e!==void 0&&!h(this,n,b).call(this,i(this,d)[t])&&(yield e);}}*values(){for(let t of h(this,n,ot).call(this))i(this,d)[t]!==void 0&&!h(this,n,b).call(this,i(this,d)[t])&&(yield i(this,d)[t]);}*rvalues(){for(let t of h(this,n,at).call(this))i(this,d)[t]!==void 0&&!h(this,n,b).call(this,i(this,d)[t])&&(yield i(this,d)[t]);}[(Xt=Symbol.iterator,Bt=Symbol.toStringTag,Xt)](){return this.entries()}find(t,e={}){for(let s of h(this,n,ot).call(this)){let o=i(this,d)[s],a=h(this,n,b).call(this,o)?o.__staleWhileFetching:o;if(a!==void 0&&t(a,i(this,y)[s],this))return this.get(i(this,y)[s],e)}}forEach(t,e=this){for(let s of h(this,n,ot).call(this)){let o=i(this,d)[s],a=h(this,n,b).call(this,o)?o.__staleWhileFetching:o;a!==void 0&&t.call(e,a,i(this,y)[s],this);}}rforEach(t,e=this){for(let s of h(this,n,at).call(this)){let o=i(this,d)[s],a=h(this,n,b).call(this,o)?o.__staleWhileFetching:o;a!==void 0&&t.call(e,a,i(this,y)[s],this);}}purgeStale(){let t=false;for(let e of h(this,n,at).call(this,{allowStale:true}))i(this,W).call(this,e)&&(h(this,n,nt).call(this,i(this,y)[e],"expire"),t=true);return t}info(t){let e=i(this,A).get(t);if(e===void 0)return;let s=i(this,d)[e],o=h(this,n,b).call(this,s)?s.__staleWhileFetching:s;if(o===void 0)return;let a={value:o};if(i(this,P)&&i(this,k)){let r=i(this,P)[e],c=i(this,k)[e];if(r&&c){let u=r-(i(this,B).now()-c);a.ttl=u,a.start=Date.now();}}return i(this,q)&&(a.size=i(this,q)[e]),a}dump(){let t=[];for(let e of h(this,n,ot).call(this,{allowStale:true})){let s=i(this,y)[e],o=i(this,d)[e],a=h(this,n,b).call(this,o)?o.__staleWhileFetching:o;if(a===void 0||s===void 0)continue;let r={value:a};if(i(this,P)&&i(this,k)){r.ttl=i(this,P)[e];let c=i(this,B).now()-i(this,k)[e];r.start=Math.floor(Date.now()-c);}i(this,q)&&(r.size=i(this,q)[e]),t.unshift([s,r]);}return t}load(t){this.clear();for(let[e,s]of t){if(s.start){let o=Date.now()-s.start;s.start=i(this,B).now()-o;}this.set(e,s.value,s);}}set(t,e,s={}){var st,Y,Z,T;if(e===void 0)return this.delete(t),this;let{ttl:o=this.ttl,start:a,noDisposeOnSet:r=this.noDisposeOnSet,sizeCalculation:c=this.sizeCalculation,status:u}=s,{noUpdateTTL:S=this.noUpdateTTL}=s,G=i(this,xt).call(this,t,e,s.size||0,c);if(this.maxEntrySize&&G>this.maxEntrySize)return u&&(u.set="miss",u.maxEntrySizeExceeded=true),h(this,n,nt).call(this,t,"set"),this;let w=i(this,x)===0?void 0:i(this,A).get(t);if(w===void 0)w=i(this,x)===0?i(this,R):i(this,J).length!==0?i(this,J).pop():i(this,x)===i(this,j)?h(this,n,It).call(this,false):i(this,x),i(this,y)[w]=t,i(this,d)[w]=e,i(this,A).set(t,w),i(this,z)[i(this,R)]=w,i(this,U)[w]=i(this,R),f(this,R,w),Ct(this,x)._++,i(this,Et).call(this,w,G,u),u&&(u.set="add"),S=false,i(this,St)&&((st=i(this,lt))==null||st.call(this,e,t,"add"));else {h(this,n,Ot).call(this,w);let E=i(this,d)[w];if(e!==E){if(i(this,ht)&&h(this,n,b).call(this,E)){E.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:m}=E;m!==void 0&&!r&&(i(this,Q)&&((Y=i(this,H))==null||Y.call(this,m,t,"set")),i(this,M)&&i(this,C)?.push([m,t,"set"]));}else r||(i(this,Q)&&((Z=i(this,H))==null||Z.call(this,E,t,"set")),i(this,M)&&i(this,C)?.push([E,t,"set"]));if(i(this,ft).call(this,w),i(this,Et).call(this,w,G,u),i(this,d)[w]=e,u){u.set="replace";let m=E&&h(this,n,b).call(this,E)?E.__staleWhileFetching:E;m!==void 0&&(u.oldValue=m);}}else u&&(u.set="update");i(this,St)&&this.onInsert?.(e,t,e===E?"update":"replace");}if(o!==0&&!i(this,P)&&h(this,n,Pt).call(this),i(this,P)&&(S||i(this,At).call(this,w,o,a),u&&i(this,et).call(this,u,w)),!r&&i(this,M)&&i(this,C)){let E=i(this,C),m;for(;m=E?.shift();)(T=i(this,$))==null||T.call(this,...m);}return this}pop(){var t;try{for(;i(this,x);){let e=i(this,d)[i(this,F)];if(h(this,n,It).call(this,!0),h(this,n,b).call(this,e)){if(e.__staleWhileFetching)return e.__staleWhileFetching}else if(e!==void 0)return e}}finally{if(i(this,M)&&i(this,C)){let e=i(this,C),s;for(;s=e?.shift();)(t=i(this,$))==null||t.call(this,...s);}}}has(t,e={}){let{updateAgeOnHas:s=this.updateAgeOnHas,status:o}=e,a=i(this,A).get(t);if(a!==void 0){let r=i(this,d)[a];if(h(this,n,b).call(this,r)&&r.__staleWhileFetching===void 0)return false;if(i(this,W).call(this,a))o&&(o.has="stale",i(this,et).call(this,o,a));else return s&&i(this,ct).call(this,a),o&&(o.has="hit",i(this,et).call(this,o,a)),true}else o&&(o.has="miss");return false}peek(t,e={}){let{allowStale:s=this.allowStale}=e,o=i(this,A).get(t);if(o===void 0||!s&&i(this,W).call(this,o))return;let a=i(this,d)[o];return h(this,n,b).call(this,a)?a.__staleWhileFetching:a}async fetch(t,e={}){let{allowStale:s=this.allowStale,updateAgeOnGet:o=this.updateAgeOnGet,noDeleteOnStaleGet:a=this.noDeleteOnStaleGet,ttl:r=this.ttl,noDisposeOnSet:c=this.noDisposeOnSet,size:u=0,sizeCalculation:S=this.sizeCalculation,noUpdateTTL:G=this.noUpdateTTL,noDeleteOnFetchRejection:w=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:st=this.allowStaleOnFetchRejection,ignoreFetchAbort:Y=this.ignoreFetchAbort,allowStaleOnFetchAbort:Z=this.allowStaleOnFetchAbort,context:T,forceRefresh:E=false,status:m,signal:D}=e;if(!i(this,ht))return m&&(m.fetch="get"),this.get(t,{allowStale:s,updateAgeOnGet:o,noDeleteOnStaleGet:a,status:m});let L={allowStale:s,updateAgeOnGet:o,noDeleteOnStaleGet:a,ttl:r,noDisposeOnSet:c,size:u,sizeCalculation:S,noUpdateTTL:G,noDeleteOnFetchRejection:w,allowStaleOnFetchRejection:st,allowStaleOnFetchAbort:Z,ignoreFetchAbort:Y,status:m,signal:D},I=i(this,A).get(t);if(I===void 0){m&&(m.fetch="miss");let v=h(this,n,zt).call(this,t,I,L,T);return v.__returned=v}else {let v=i(this,d)[I];if(h(this,n,b).call(this,v)){let dt=s&&v.__staleWhileFetching!==void 0;return m&&(m.fetch="inflight",dt&&(m.returnedStale=true)),dt?v.__staleWhileFetching:v.__returned=v}let vt=i(this,W).call(this,I);if(!E&&!vt)return m&&(m.fetch="hit"),h(this,n,Ot).call(this,I),o&&i(this,ct).call(this,I),m&&i(this,et).call(this,m,I),v;let ut=h(this,n,zt).call(this,t,I,L,T),gt=ut.__staleWhileFetching!==void 0&&s;return m&&(m.fetch=vt?"stale":"refresh",gt&&vt&&(m.returnedStale=true)),gt?ut.__staleWhileFetching:ut.__returned=ut}}async forceFetch(t,e={}){let s=await this.fetch(t,e);if(s===void 0)throw new Error("fetch() returned undefined");return s}memo(t,e={}){let s=i(this,_t);if(!s)throw new Error("no memoMethod provided to constructor");let{context:o,forceRefresh:a,...r}=e,c=this.get(t,r);if(!a&&c!==void 0)return c;let u=s(t,c,{options:r,context:o});return this.set(t,u,r),u}get(t,e={}){let{allowStale:s=this.allowStale,updateAgeOnGet:o=this.updateAgeOnGet,noDeleteOnStaleGet:a=this.noDeleteOnStaleGet,status:r}=e,c=i(this,A).get(t);if(c!==void 0){let u=i(this,d)[c],S=h(this,n,b).call(this,u);return r&&i(this,et).call(this,r,c),i(this,W).call(this,c)?(r&&(r.get="stale"),S?(r&&s&&u.__staleWhileFetching!==void 0&&(r.returnedStale=true),s?u.__staleWhileFetching:void 0):(a||h(this,n,nt).call(this,t,"expire"),r&&s&&(r.returnedStale=true),s?u:void 0)):(r&&(r.get="hit"),S?u.__staleWhileFetching:(h(this,n,Ot).call(this,c),o&&i(this,ct).call(this,c),u))}else r&&(r.get="miss");}delete(t){return h(this,n,nt).call(this,t,"delete")}clear(){return h(this,n,Yt).call(this,"delete")}},j=new WeakMap,N=new WeakMap,H=new WeakMap,lt=new WeakMap,$=new WeakMap,mt=new WeakMap,_t=new WeakMap,B=new WeakMap,x=new WeakMap,X=new WeakMap,A=new WeakMap,y=new WeakMap,d=new WeakMap,z=new WeakMap,U=new WeakMap,F=new WeakMap,R=new WeakMap,J=new WeakMap,C=new WeakMap,q=new WeakMap,k=new WeakMap,P=new WeakMap,V=new WeakMap,Q=new WeakMap,ht=new WeakMap,M=new WeakMap,St=new WeakMap,n=new WeakSet,Pt=function(){let t=new Dt(i(this,j)),e=new Dt(i(this,j));f(this,P,t),f(this,k,e);let s=this.ttlAutopurge?new Array(i(this,j)):void 0;f(this,V,s),f(this,At,(r,c,u=i(this,B).now())=>{if(e[r]=c!==0?u:0,t[r]=c,s?.[r]&&(clearTimeout(s[r]),s[r]=void 0),c!==0&&s){let S=setTimeout(()=>{i(this,W).call(this,r)&&h(this,n,nt).call(this,i(this,y)[r],"expire");},c+1);S.unref&&S.unref(),s[r]=S;}}),f(this,ct,r=>{e[r]=t[r]!==0?i(this,B).now():0;}),f(this,et,(r,c)=>{if(t[c]){let u=t[c],S=e[c];if(!u||!S)return;r.ttl=u,r.start=S,r.now=o||a();let G=r.now-S;r.remainingTTL=u-G;}});let o=0,a=()=>{let r=i(this,B).now();if(this.ttlResolution>0){o=r;let c=setTimeout(()=>o=0,this.ttlResolution);c.unref&&c.unref();}return r};this.getRemainingTTL=r=>{let c=i(this,A).get(r);if(c===void 0)return 0;let u=t[c],S=e[c];if(!u||!S)return 1/0;let G=(o||a())-S;return u-G},f(this,W,r=>{let c=e[r],u=t[r];return !!u&&!!c&&(o||a())-c>u});},ct=new WeakMap,et=new WeakMap,At=new WeakMap,W=new WeakMap,Zt=function(){let t=new Dt(i(this,j));f(this,X,0),f(this,q,t),f(this,ft,e=>{f(this,X,i(this,X)-t[e]),t[e]=0;}),f(this,xt,(e,s,o,a)=>{if(h(this,n,b).call(this,s))return 0;if(!rt(o))if(a){if(typeof a!="function")throw new TypeError("sizeCalculation must be a function");if(o=a(s,e),!rt(o))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return o}),f(this,Et,(e,s,o)=>{if(t[e]=s,i(this,N)){let a=i(this,N)-t[e];for(;i(this,X)>a;)h(this,n,It).call(this,true);}f(this,X,i(this,X)+t[e]),o&&(o.entrySize=s,o.totalCalculatedSize=i(this,X));});},ft=new WeakMap,Et=new WeakMap,xt=new WeakMap,ot=function*({allowStale:t=this.allowStale}={}){if(i(this,x))for(let e=i(this,R);!(!h(this,n,Vt).call(this,e)||((t||!i(this,W).call(this,e))&&(yield e),e===i(this,F)));)e=i(this,U)[e];},at=function*({allowStale:t=this.allowStale}={}){if(i(this,x))for(let e=i(this,F);!(!h(this,n,Vt).call(this,e)||((t||!i(this,W).call(this,e))&&(yield e),e===i(this,R)));)e=i(this,z)[e];},Vt=function(t){return t!==void 0&&i(this,A).get(i(this,y)[t])===t},It=function(t){var a;let e=i(this,F),s=i(this,y)[e],o=i(this,d)[e];return i(this,ht)&&h(this,n,b).call(this,o)?o.__abortController.abort(new Error("evicted")):(i(this,Q)||i(this,M))&&(i(this,Q)&&((a=i(this,H))==null||a.call(this,o,s,"evict")),i(this,M)&&i(this,C)?.push([o,s,"evict"])),i(this,ft).call(this,e),i(this,V)?.[e]&&(clearTimeout(i(this,V)[e]),i(this,V)[e]=void 0),t&&(i(this,y)[e]=void 0,i(this,d)[e]=void 0,i(this,J).push(e)),i(this,x)===1?(f(this,F,f(this,R,0)),i(this,J).length=0):f(this,F,i(this,z)[e]),i(this,A).delete(s),Ct(this,x)._--,e},zt=function(t,e,s,o){let a=e===void 0?void 0:i(this,d)[e];if(h(this,n,b).call(this,a))return a;let r=new Mt,{signal:c}=s;c?.addEventListener("abort",()=>r.abort(c.reason),{signal:r.signal});let u={signal:r.signal,options:s,context:o},S=(T,E=false)=>{let{aborted:m}=r.signal,D=s.ignoreFetchAbort&&T!==void 0,L=s.ignoreFetchAbort||!!(s.allowStaleOnFetchAbort&&T!==void 0);if(s.status&&(m&&!E?(s.status.fetchAborted=true,s.status.fetchError=r.signal.reason,D&&(s.status.fetchAbortIgnored=true)):s.status.fetchResolved=true),m&&!D&&!E)return w(r.signal.reason,L);let I=Y,v=i(this,d)[e];return (v===Y||D&&E&&v===void 0)&&(T===void 0?I.__staleWhileFetching!==void 0?i(this,d)[e]=I.__staleWhileFetching:h(this,n,nt).call(this,t,"fetch"):(s.status&&(s.status.fetchUpdated=true),this.set(t,T,u.options))),T},G=T=>(s.status&&(s.status.fetchRejected=true,s.status.fetchError=T),w(T,false)),w=(T,E)=>{let{aborted:m}=r.signal,D=m&&s.allowStaleOnFetchAbort,L=D||s.allowStaleOnFetchRejection,I=L||s.noDeleteOnFetchRejection,v=Y;if(i(this,d)[e]===Y&&(!I||!E&&v.__staleWhileFetching===void 0?h(this,n,nt).call(this,t,"fetch"):D||(i(this,d)[e]=v.__staleWhileFetching)),L)return s.status&&v.__staleWhileFetching!==void 0&&(s.status.returnedStale=true),v.__staleWhileFetching;if(v.__returned===v)throw T},st=(T,E)=>{var D;let m=(D=i(this,mt))==null?void 0:D.call(this,t,a,u);m&&m instanceof Promise&&m.then(L=>T(L===void 0?void 0:L),E),r.signal.addEventListener("abort",()=>{(!s.ignoreFetchAbort||s.allowStaleOnFetchAbort)&&(T(void 0),s.allowStaleOnFetchAbort&&(T=L=>S(L,true)));});};s.status&&(s.status.fetchDispatched=true);let Y=new Promise(st).then(S,G),Z=Object.assign(Y,{__abortController:r,__staleWhileFetching:a,__returned:void 0});return e===void 0?(this.set(t,Z,{...u.options,status:void 0}),e=i(this,A).get(t)):i(this,d)[e]=Z,Z},b=function(t){if(!i(this,ht))return false;let e=t;return !!e&&e instanceof Promise&&e.hasOwnProperty("__staleWhileFetching")&&e.__abortController instanceof Mt},Wt=function(t,e){i(this,U)[e]=t,i(this,z)[t]=e;},Ot=function(t){t!==i(this,R)&&(t===i(this,F)?f(this,F,i(this,z)[t]):h(this,n,Wt).call(this,i(this,U)[t],i(this,z)[t]),h(this,n,Wt).call(this,i(this,R),t),f(this,R,t));},nt=function(t,e){var o,a;let s=false;if(i(this,x)!==0){let r=i(this,A).get(t);if(r!==void 0)if(i(this,V)?.[r]&&(clearTimeout(i(this,V)?.[r]),i(this,V)[r]=void 0),s=true,i(this,x)===1)h(this,n,Yt).call(this,e);else {i(this,ft).call(this,r);let c=i(this,d)[r];if(h(this,n,b).call(this,c)?c.__abortController.abort(new Error("deleted")):(i(this,Q)||i(this,M))&&(i(this,Q)&&((o=i(this,H))==null||o.call(this,c,t,e)),i(this,M)&&i(this,C)?.push([c,t,e])),i(this,A).delete(t),i(this,y)[r]=void 0,i(this,d)[r]=void 0,r===i(this,R))f(this,R,i(this,U)[r]);else if(r===i(this,F))f(this,F,i(this,z)[r]);else {let u=i(this,U)[r];i(this,z)[u]=i(this,z)[r];let S=i(this,z)[r];i(this,U)[S]=i(this,U)[r];}Ct(this,x)._--,i(this,J).push(r);}}if(i(this,M)&&i(this,C)?.length){let r=i(this,C),c;for(;c=r?.shift();)(a=i(this,$))==null||a.call(this,...c);}return s},Yt=function(t){var e,s;for(let o of h(this,n,at).call(this,{allowStale:true})){let a=i(this,d)[o];if(h(this,n,b).call(this,a))a.__abortController.abort(new Error("deleted"));else {let r=i(this,y)[o];i(this,Q)&&((e=i(this,H))==null||e.call(this,a,r,t)),i(this,M)&&i(this,C)?.push([a,r,t]);}}if(i(this,A).clear(),i(this,d).fill(void 0),i(this,y).fill(void 0),i(this,P)&&i(this,k)){i(this,P).fill(0),i(this,k).fill(0);for(let o of i(this,V)??[])o!==void 0&&clearTimeout(o);i(this,V)?.fill(void 0);}if(i(this,q)&&i(this,q).fill(0),f(this,F,0),f(this,R,0),i(this,J).length=0,f(this,X,0),f(this,x,0),i(this,M)&&i(this,C)){let o=i(this,C),a;for(;a=o?.shift();)(s=i(this,$))==null||s.call(this,...a);}},bt);var it=class{constructor(t){g(this,"cache");g(this,"map",new Map);this.cache=new Qt({max:t.cacheSize}),this.map=new Map;}get[Symbol.iterator](){return this.map[Symbol.iterator]}get[Symbol.toStringTag](){return this.map[Symbol.toStringTag]}clear(){return this.cache.clear(),this.map.clear()}delete(t){let e=this.map.delete(t);return e&&this.cache.delete(t),e}get forEach(){return this.map.forEach}get(t){let e=this.cache.get(t);return e||this.map.get(t)}has(t){return this.map.has(t)}set(t,e){return this.map.set(t,e),this.cache.set(t,e),this}get size(){return this.map.size}entries(){return this.map.entries()}keys(){return this.map.keys()}values(){return this.map.values()}};var O=class O{constructor(){}static clearOldTempVariables(t){O.tempStorageDeadlines.forEach((e,s)=>{e>t&&(O.tempStorage.delete(s),O.tempStorageDeadlines.delete(s),O.storage.cache.delete(s));});}static setVariable(t,e){let s=O.tempStorage.has(t);e==null?(O.storage.map.delete(t),!s&&O.storage.cache.delete(t)):(O.storage.map.set(t,e),!s&&O.storage.cache.set(t,e));}static getVariable(t){let e=O.storage.cache.get(t);return e===void 0&&(e=O.tempStorage.get(t)),e===void 0&&(e=O.storage.map.get(t)),e===void 0&&(e=O.default.get(t)),Ft(e)}static removeVariable(t){O.storage.delete(t);}static setFlag(t,e){if(e)this.flags.includes(t)||this.flags.push(t);else {let s=this.flags.indexOf(t);s>-1&&this.flags.splice(s,1);}}static getFlag(t){return this.flags.includes(t)}};g(O,"storage",new it({cacheSize:20})),g(O,"default",new it({cacheSize:20})),g(O,"flags",Array()),g(O,"tempStorage",new Map),g(O,"tempStorageDeadlines",new Map);var p=O;var yt=class{constructor(t,e){g(this,"id");g(this,"categoryId");this.categoryId=t,this.id=e;}setStorageProperty(t,e){let s=p.getVariable(this.categoryId);s||(s={}),s.hasOwnProperty(this.id)||(s[this.id]={}),e==null?s[this.id].hasOwnProperty(t)&&delete s[this.id][t]:s[this.id]={...s[this.id],[t]:e},Object.keys(s[this.id]).length===0&&delete s[this.id],p.setVariable(this.categoryId,s);}getStorageProperty(t,e=this.id){let s=p.getVariable(this.categoryId);if(s&&s.hasOwnProperty(e)&&s[e].hasOwnProperty(t))return s[e][t]}};var jt={CHARACTER_CATEGORY_KEY:"___character___"};var ae="@",wt=class extends yt{constructor(e,s=""){super(jt.CHARACTER_CATEGORY_KEY,e+(s?ae+s:""));g(this,"sourceId");this.sourceId=e;}getStorageProperty(e){let s=super.getStorageProperty(e);return s===void 0&&(s=super.getStorageProperty(e,this.sourceId)),s}};var Gt=class extends wt{constructor(e,s){super(typeof e=="string"?e:e.id,typeof e=="string"?"":e.emotion);g(this,"defaultName");g(this,"defaultSurname");g(this,"defaultAge");g(this,"_icon");g(this,"_color");this.defaultName=s.name,this.defaultSurname=s.surname,this.defaultAge=s.age,this._icon=s.icon,this._color=s.color;}get name(){return this.getStorageProperty("name")||this.defaultName||this.id}set name(e){this.setStorageProperty("name",e);}get surname(){return this.getStorageProperty("surname")||this.defaultSurname}set surname(e){this.setStorageProperty("surname",e);}get age(){return this.getStorageProperty("age")||this.defaultAge}set age(e){this.setStorageProperty("age",e);}get icon(){return this._icon}get color(){return this._color}};var Tt=new it({cacheSize:10}),Kt;(a=>{function l(r){try{let c=Tt.get(r);if(!c){K.warn(`Character "${r}" not found, did you forget to register it with the RegisteredCharacters.add?`);return}return c}catch(c){K.error(`Error while getting Character "${r}"`,c);return}}a.get=l;function t(r){if(Array.isArray(r)){r.forEach(c=>t(c));return}Tt.get(r.id)&&K.info(`Character id "${r.id}" already exists, it will be overwritten`),Tt.set(r.id,r);}a.add=t;function e(){return Array.from(Tt.values())}a.values=e;function s(r){return Tt.has(r)}a.has=s;function o(){return Array.from(Tt.keys())}a.keys=o;})(Kt||(Kt={}));var ne=Kt;exports.CharacterBaseModel=Gt;exports.CharacterStoredClass=wt;exports.RegisteredCharacters=ne;
|
|
1
|
+
'use strict';var core=require('@drincs/pixi-vn/core');var te=Object.defineProperty;var Ht=f=>{throw TypeError(f)};var ee=(f,t,e)=>t in f?te(f,t,{enumerable:true,configurable:true,writable:true,value:e}):f[t]=e;var g=(f,t,e)=>ee(f,typeof t!="symbol"?t+"":t,e),Nt=(f,t,e)=>t.has(f)||Ht("Cannot "+e);var i=(f,t,e)=>(Nt(f,t,"read from private field"),e?e.call(f):t.get(f)),_=(f,t,e)=>t.has(f)?Ht("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(f):t.set(f,e),c=(f,t,e,s)=>(Nt(f,t,"write to private field"),t.set(f,e),e),l=(f,t,e)=>(Nt(f,t,"access private method"),e);var Ct=(f,t,e,s)=>({set _(r){c(f,t,r);},get _(){return i(f,t,s)}});var K;(r=>(r.log=(o,...a)=>console.log(`[Pixi\u2019VN] ${o}`,...a),r.warn=(o,...a)=>console.warn(`[Pixi\u2019VN] ${o}`,...a),r.error=(o,...a)=>console.error(`[Pixi\u2019VN] ${o}`,...a),r.info=(o,...a)=>console.info(`[Pixi\u2019VN] ${o}`,...a)))(K||(K={}));function Ft(f){try{if(typeof f>"u")return f;let t=JSON.stringify(f);return JSON.parse(t)}catch(t){throw K.error("Error creating exportable element",f,t),new core.PixiError("not_json_serializable","Error creating exportable element")}}var se=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,Jt=new Set,Ut=typeof process=="object"&&process?process:{},qt=(f,t,e,s)=>{typeof Ut.emitWarning=="function"?Ut.emitWarning(f,t,e,s):console.error(`[${e}] ${t}: ${f}`);},Mt=globalThis.AbortController,$t=globalThis.AbortSignal;if(typeof Mt>"u"){$t=class{constructor(){g(this,"onabort");g(this,"_onabort",[]);g(this,"reason");g(this,"aborted",false);}addEventListener(e,s){this._onabort.push(s);}},Mt=class{constructor(){g(this,"signal",new $t);t();}abort(e){if(!this.signal.aborted){this.signal.reason=e,this.signal.aborted=true;for(let s of this.signal._onabort)s(e);this.signal.onabort?.(e);}}};let f=Ut.env?.LRU_CACHE_IGNORE_AC_WARNING!=="1",t=()=>{f&&(f=false,qt("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",t));};}var re=f=>!Jt.has(f);var rt=f=>f&&f===Math.floor(f)&&f>0&&isFinite(f),kt=f=>rt(f)?f<=Math.pow(2,8)?Uint8Array:f<=Math.pow(2,16)?Uint16Array:f<=Math.pow(2,32)?Uint32Array:f<=Number.MAX_SAFE_INTEGER?Dt:null:null,Dt=class extends Array{constructor(f){super(f),this.fill(0);}},tt,pt,ae=(tt=class{constructor(t,e){g(this,"heap");g(this,"length");if(!i(tt,pt))throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new e(t),this.length=0;}static create(t){let e=kt(t);if(!e)return [];c(tt,pt,true);let s=new tt(t,e);return c(tt,pt,false),s}push(t){this.heap[this.length++]=t;}pop(){return this.heap[--this.length]}},pt=new WeakMap,_(tt,pt,false),tt),Bt,Xt,j,N,H,lt,$,mt,_t,B,x,X,O,w,d,M,U,D,R,J,C,q,k,P,W,Q,ht,G,St,n,Pt,ft,et,Ot,V,Zt,ut,Et,xt,at,ot,Wt,It,zt,y,Vt,At,nt,Yt,bt,Qt=(bt=class{constructor(t){_(this,n);_(this,j);_(this,N);_(this,H);_(this,lt);_(this,$);_(this,mt);_(this,_t);_(this,B);g(this,"ttl");g(this,"ttlResolution");g(this,"ttlAutopurge");g(this,"updateAgeOnGet");g(this,"updateAgeOnHas");g(this,"allowStale");g(this,"noDisposeOnSet");g(this,"noUpdateTTL");g(this,"maxEntrySize");g(this,"sizeCalculation");g(this,"noDeleteOnFetchRejection");g(this,"noDeleteOnStaleGet");g(this,"allowStaleOnFetchAbort");g(this,"allowStaleOnFetchRejection");g(this,"ignoreFetchAbort");_(this,x);_(this,X);_(this,O);_(this,w);_(this,d);_(this,M);_(this,U);_(this,D);_(this,R);_(this,J);_(this,C);_(this,q);_(this,k);_(this,P);_(this,W);_(this,Q);_(this,ht);_(this,G);_(this,St);_(this,ft,()=>{});_(this,et,()=>{});_(this,Ot,()=>{});_(this,V,()=>false);_(this,ut,t=>{});_(this,Et,(t,e,s)=>{});_(this,xt,(t,e,s,r)=>{if(s||r)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0});g(this,Bt,"LRUCache");let{max:e=0,ttl:s,ttlResolution:r=1,ttlAutopurge:o,updateAgeOnGet:a,updateAgeOnHas:h,allowStale:u,dispose:S,onInsert:F,disposeAfter:E,noDisposeOnSet:st,noUpdateTTL:Y,maxSize:Z=0,maxEntrySize:T=0,sizeCalculation:b,fetchMethod:m,memoMethod:I,noDeleteOnFetchRejection:L,noDeleteOnStaleGet:z,allowStaleOnFetchRejection:v,allowStaleOnFetchAbort:vt,ignoreFetchAbort:ct,perf:gt}=t;if(gt!==void 0&&typeof gt?.now!="function")throw new TypeError("perf option must have a now() method if specified");if(c(this,B,gt??se),e!==0&&!rt(e))throw new TypeError("max option must be a nonnegative integer");let dt=e?kt(e):Array;if(!dt)throw new Error("invalid max value: "+e);if(c(this,j,e),c(this,N,Z),this.maxEntrySize=T||i(this,N),this.sizeCalculation=b,this.sizeCalculation){if(!i(this,N)&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(I!==void 0&&typeof I!="function")throw new TypeError("memoMethod must be a function if defined");if(c(this,_t,I),m!==void 0&&typeof m!="function")throw new TypeError("fetchMethod must be a function if specified");if(c(this,mt,m),c(this,ht,!!m),c(this,O,new Map),c(this,w,new Array(e).fill(void 0)),c(this,d,new Array(e).fill(void 0)),c(this,M,new dt(e)),c(this,U,new dt(e)),c(this,D,0),c(this,R,0),c(this,J,ae.create(e)),c(this,x,0),c(this,X,0),typeof S=="function"&&c(this,H,S),typeof F=="function"&&c(this,lt,F),typeof E=="function"?(c(this,$,E),c(this,C,[])):(c(this,$,void 0),c(this,C,void 0)),c(this,Q,!!i(this,H)),c(this,St,!!i(this,lt)),c(this,G,!!i(this,$)),this.noDisposeOnSet=!!st,this.noUpdateTTL=!!Y,this.noDeleteOnFetchRejection=!!L,this.allowStaleOnFetchRejection=!!v,this.allowStaleOnFetchAbort=!!vt,this.ignoreFetchAbort=!!ct,this.maxEntrySize!==0){if(i(this,N)!==0&&!rt(i(this,N)))throw new TypeError("maxSize must be a positive integer if specified");if(!rt(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");l(this,n,Zt).call(this);}if(this.allowStale=!!u,this.noDeleteOnStaleGet=!!z,this.updateAgeOnGet=!!a,this.updateAgeOnHas=!!h,this.ttlResolution=rt(r)||r===0?r:1,this.ttlAutopurge=!!o,this.ttl=s||0,this.ttl){if(!rt(this.ttl))throw new TypeError("ttl must be a positive integer if specified");l(this,n,Pt).call(this);}if(i(this,j)===0&&this.ttl===0&&i(this,N)===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!i(this,j)&&!i(this,N)){let Lt="LRU_CACHE_UNBOUNDED";re(Lt)&&(Jt.add(Lt),qt("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",Lt,bt));}}get perf(){return i(this,B)}static unsafeExposeInternals(t){return {starts:i(t,k),ttls:i(t,P),autopurgeTimers:i(t,W),sizes:i(t,q),keyMap:i(t,O),keyList:i(t,w),valList:i(t,d),next:i(t,M),prev:i(t,U),get head(){return i(t,D)},get tail(){return i(t,R)},free:i(t,J),isBackgroundFetch:e=>{var s;return l(s=t,n,y).call(s,e)},backgroundFetch:(e,s,r,o)=>{var a;return l(a=t,n,zt).call(a,e,s,r,o)},moveToTail:e=>{var s;return l(s=t,n,At).call(s,e)},indexes:e=>{var s;return l(s=t,n,at).call(s,e)},rindexes:e=>{var s;return l(s=t,n,ot).call(s,e)},isStale:e=>{var s;return i(s=t,V).call(s,e)}}}get max(){return i(this,j)}get maxSize(){return i(this,N)}get calculatedSize(){return i(this,X)}get size(){return i(this,x)}get fetchMethod(){return i(this,mt)}get memoMethod(){return i(this,_t)}get dispose(){return i(this,H)}get onInsert(){return i(this,lt)}get disposeAfter(){return i(this,$)}getRemainingTTL(t){return i(this,O).has(t)?1/0:0}*entries(){for(let t of l(this,n,at).call(this))i(this,d)[t]!==void 0&&i(this,w)[t]!==void 0&&!l(this,n,y).call(this,i(this,d)[t])&&(yield [i(this,w)[t],i(this,d)[t]]);}*rentries(){for(let t of l(this,n,ot).call(this))i(this,d)[t]!==void 0&&i(this,w)[t]!==void 0&&!l(this,n,y).call(this,i(this,d)[t])&&(yield [i(this,w)[t],i(this,d)[t]]);}*keys(){for(let t of l(this,n,at).call(this)){let e=i(this,w)[t];e!==void 0&&!l(this,n,y).call(this,i(this,d)[t])&&(yield e);}}*rkeys(){for(let t of l(this,n,ot).call(this)){let e=i(this,w)[t];e!==void 0&&!l(this,n,y).call(this,i(this,d)[t])&&(yield e);}}*values(){for(let t of l(this,n,at).call(this))i(this,d)[t]!==void 0&&!l(this,n,y).call(this,i(this,d)[t])&&(yield i(this,d)[t]);}*rvalues(){for(let t of l(this,n,ot).call(this))i(this,d)[t]!==void 0&&!l(this,n,y).call(this,i(this,d)[t])&&(yield i(this,d)[t]);}[(Xt=Symbol.iterator,Bt=Symbol.toStringTag,Xt)](){return this.entries()}find(t,e={}){for(let s of l(this,n,at).call(this)){let r=i(this,d)[s],o=l(this,n,y).call(this,r)?r.__staleWhileFetching:r;if(o!==void 0&&t(o,i(this,w)[s],this))return this.get(i(this,w)[s],e)}}forEach(t,e=this){for(let s of l(this,n,at).call(this)){let r=i(this,d)[s],o=l(this,n,y).call(this,r)?r.__staleWhileFetching:r;o!==void 0&&t.call(e,o,i(this,w)[s],this);}}rforEach(t,e=this){for(let s of l(this,n,ot).call(this)){let r=i(this,d)[s],o=l(this,n,y).call(this,r)?r.__staleWhileFetching:r;o!==void 0&&t.call(e,o,i(this,w)[s],this);}}purgeStale(){let t=false;for(let e of l(this,n,ot).call(this,{allowStale:true}))i(this,V).call(this,e)&&(l(this,n,nt).call(this,i(this,w)[e],"expire"),t=true);return t}info(t){let e=i(this,O).get(t);if(e===void 0)return;let s=i(this,d)[e],r=l(this,n,y).call(this,s)?s.__staleWhileFetching:s;if(r===void 0)return;let o={value:r};if(i(this,P)&&i(this,k)){let a=i(this,P)[e],h=i(this,k)[e];if(a&&h){let u=a-(i(this,B).now()-h);o.ttl=u,o.start=Date.now();}}return i(this,q)&&(o.size=i(this,q)[e]),o}dump(){let t=[];for(let e of l(this,n,at).call(this,{allowStale:true})){let s=i(this,w)[e],r=i(this,d)[e],o=l(this,n,y).call(this,r)?r.__staleWhileFetching:r;if(o===void 0||s===void 0)continue;let a={value:o};if(i(this,P)&&i(this,k)){a.ttl=i(this,P)[e];let h=i(this,B).now()-i(this,k)[e];a.start=Math.floor(Date.now()-h);}i(this,q)&&(a.size=i(this,q)[e]),t.unshift([s,a]);}return t}load(t){this.clear();for(let[e,s]of t){if(s.start){let r=Date.now()-s.start;s.start=i(this,B).now()-r;}this.set(e,s.value,s);}}set(t,e,s={}){var st,Y,Z,T;if(e===void 0)return this.delete(t),this;let{ttl:r=this.ttl,start:o,noDisposeOnSet:a=this.noDisposeOnSet,sizeCalculation:h=this.sizeCalculation,status:u}=s,{noUpdateTTL:S=this.noUpdateTTL}=s,F=i(this,xt).call(this,t,e,s.size||0,h);if(this.maxEntrySize&&F>this.maxEntrySize)return u&&(u.set="miss",u.maxEntrySizeExceeded=true),l(this,n,nt).call(this,t,"set"),this;let E=i(this,x)===0?void 0:i(this,O).get(t);if(E===void 0)E=i(this,x)===0?i(this,R):i(this,J).length!==0?i(this,J).pop():i(this,x)===i(this,j)?l(this,n,It).call(this,false):i(this,x),i(this,w)[E]=t,i(this,d)[E]=e,i(this,O).set(t,E),i(this,M)[i(this,R)]=E,i(this,U)[E]=i(this,R),c(this,R,E),Ct(this,x)._++,i(this,Et).call(this,E,F,u),u&&(u.set="add"),S=false,i(this,St)&&((st=i(this,lt))==null||st.call(this,e,t,"add"));else {l(this,n,At).call(this,E);let b=i(this,d)[E];if(e!==b){if(i(this,ht)&&l(this,n,y).call(this,b)){b.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:m}=b;m!==void 0&&!a&&(i(this,Q)&&((Y=i(this,H))==null||Y.call(this,m,t,"set")),i(this,G)&&i(this,C)?.push([m,t,"set"]));}else a||(i(this,Q)&&((Z=i(this,H))==null||Z.call(this,b,t,"set")),i(this,G)&&i(this,C)?.push([b,t,"set"]));if(i(this,ut).call(this,E),i(this,Et).call(this,E,F,u),i(this,d)[E]=e,u){u.set="replace";let m=b&&l(this,n,y).call(this,b)?b.__staleWhileFetching:b;m!==void 0&&(u.oldValue=m);}}else u&&(u.set="update");i(this,St)&&this.onInsert?.(e,t,e===b?"update":"replace");}if(r!==0&&!i(this,P)&&l(this,n,Pt).call(this),i(this,P)&&(S||i(this,Ot).call(this,E,r,o),u&&i(this,et).call(this,u,E)),!a&&i(this,G)&&i(this,C)){let b=i(this,C),m;for(;m=b?.shift();)(T=i(this,$))==null||T.call(this,...m);}return this}pop(){var t;try{for(;i(this,x);){let e=i(this,d)[i(this,D)];if(l(this,n,It).call(this,!0),l(this,n,y).call(this,e)){if(e.__staleWhileFetching)return e.__staleWhileFetching}else if(e!==void 0)return e}}finally{if(i(this,G)&&i(this,C)){let e=i(this,C),s;for(;s=e?.shift();)(t=i(this,$))==null||t.call(this,...s);}}}has(t,e={}){let{updateAgeOnHas:s=this.updateAgeOnHas,status:r}=e,o=i(this,O).get(t);if(o!==void 0){let a=i(this,d)[o];if(l(this,n,y).call(this,a)&&a.__staleWhileFetching===void 0)return false;if(i(this,V).call(this,o))r&&(r.has="stale",i(this,et).call(this,r,o));else return s&&i(this,ft).call(this,o),r&&(r.has="hit",i(this,et).call(this,r,o)),true}else r&&(r.has="miss");return false}peek(t,e={}){let{allowStale:s=this.allowStale}=e,r=i(this,O).get(t);if(r===void 0||!s&&i(this,V).call(this,r))return;let o=i(this,d)[r];return l(this,n,y).call(this,o)?o.__staleWhileFetching:o}async fetch(t,e={}){let{allowStale:s=this.allowStale,updateAgeOnGet:r=this.updateAgeOnGet,noDeleteOnStaleGet:o=this.noDeleteOnStaleGet,ttl:a=this.ttl,noDisposeOnSet:h=this.noDisposeOnSet,size:u=0,sizeCalculation:S=this.sizeCalculation,noUpdateTTL:F=this.noUpdateTTL,noDeleteOnFetchRejection:E=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:st=this.allowStaleOnFetchRejection,ignoreFetchAbort:Y=this.ignoreFetchAbort,allowStaleOnFetchAbort:Z=this.allowStaleOnFetchAbort,context:T,forceRefresh:b=false,status:m,signal:I}=e;if(!i(this,ht))return m&&(m.fetch="get"),this.get(t,{allowStale:s,updateAgeOnGet:r,noDeleteOnStaleGet:o,status:m});let L={allowStale:s,updateAgeOnGet:r,noDeleteOnStaleGet:o,ttl:a,noDisposeOnSet:h,size:u,sizeCalculation:S,noUpdateTTL:F,noDeleteOnFetchRejection:E,allowStaleOnFetchRejection:st,allowStaleOnFetchAbort:Z,ignoreFetchAbort:Y,status:m,signal:I},z=i(this,O).get(t);if(z===void 0){m&&(m.fetch="miss");let v=l(this,n,zt).call(this,t,z,L,T);return v.__returned=v}else {let v=i(this,d)[z];if(l(this,n,y).call(this,v)){let dt=s&&v.__staleWhileFetching!==void 0;return m&&(m.fetch="inflight",dt&&(m.returnedStale=true)),dt?v.__staleWhileFetching:v.__returned=v}let vt=i(this,V).call(this,z);if(!b&&!vt)return m&&(m.fetch="hit"),l(this,n,At).call(this,z),r&&i(this,ft).call(this,z),m&&i(this,et).call(this,m,z),v;let ct=l(this,n,zt).call(this,t,z,L,T),gt=ct.__staleWhileFetching!==void 0&&s;return m&&(m.fetch=vt?"stale":"refresh",gt&&vt&&(m.returnedStale=true)),gt?ct.__staleWhileFetching:ct.__returned=ct}}async forceFetch(t,e={}){let s=await this.fetch(t,e);if(s===void 0)throw new Error("fetch() returned undefined");return s}memo(t,e={}){let s=i(this,_t);if(!s)throw new Error("no memoMethod provided to constructor");let{context:r,forceRefresh:o,...a}=e,h=this.get(t,a);if(!o&&h!==void 0)return h;let u=s(t,h,{options:a,context:r});return this.set(t,u,a),u}get(t,e={}){let{allowStale:s=this.allowStale,updateAgeOnGet:r=this.updateAgeOnGet,noDeleteOnStaleGet:o=this.noDeleteOnStaleGet,status:a}=e,h=i(this,O).get(t);if(h!==void 0){let u=i(this,d)[h],S=l(this,n,y).call(this,u);return a&&i(this,et).call(this,a,h),i(this,V).call(this,h)?(a&&(a.get="stale"),S?(a&&s&&u.__staleWhileFetching!==void 0&&(a.returnedStale=true),s?u.__staleWhileFetching:void 0):(o||l(this,n,nt).call(this,t,"expire"),a&&s&&(a.returnedStale=true),s?u:void 0)):(a&&(a.get="hit"),S?u.__staleWhileFetching:(l(this,n,At).call(this,h),r&&i(this,ft).call(this,h),u))}else a&&(a.get="miss");}delete(t){return l(this,n,nt).call(this,t,"delete")}clear(){return l(this,n,Yt).call(this,"delete")}},j=new WeakMap,N=new WeakMap,H=new WeakMap,lt=new WeakMap,$=new WeakMap,mt=new WeakMap,_t=new WeakMap,B=new WeakMap,x=new WeakMap,X=new WeakMap,O=new WeakMap,w=new WeakMap,d=new WeakMap,M=new WeakMap,U=new WeakMap,D=new WeakMap,R=new WeakMap,J=new WeakMap,C=new WeakMap,q=new WeakMap,k=new WeakMap,P=new WeakMap,W=new WeakMap,Q=new WeakMap,ht=new WeakMap,G=new WeakMap,St=new WeakMap,n=new WeakSet,Pt=function(){let t=new Dt(i(this,j)),e=new Dt(i(this,j));c(this,P,t),c(this,k,e);let s=this.ttlAutopurge?new Array(i(this,j)):void 0;c(this,W,s),c(this,Ot,(h,u,S=i(this,B).now())=>{e[h]=u!==0?S:0,t[h]=u,r(h,u);}),c(this,ft,h=>{e[h]=t[h]!==0?i(this,B).now():0,r(h,t[h]);});let r=this.ttlAutopurge?(h,u)=>{if(s?.[h]&&(clearTimeout(s[h]),s[h]=void 0),u&&u!==0&&s){let S=setTimeout(()=>{i(this,V).call(this,h)&&l(this,n,nt).call(this,i(this,w)[h],"expire");},u+1);S.unref&&S.unref(),s[h]=S;}}:()=>{};c(this,et,(h,u)=>{if(t[u]){let S=t[u],F=e[u];if(!S||!F)return;h.ttl=S,h.start=F,h.now=o||a();let E=h.now-F;h.remainingTTL=S-E;}});let o=0,a=()=>{let h=i(this,B).now();if(this.ttlResolution>0){o=h;let u=setTimeout(()=>o=0,this.ttlResolution);u.unref&&u.unref();}return h};this.getRemainingTTL=h=>{let u=i(this,O).get(h);if(u===void 0)return 0;let S=t[u],F=e[u];if(!S||!F)return 1/0;let E=(o||a())-F;return S-E},c(this,V,h=>{let u=e[h],S=t[h];return !!S&&!!u&&(o||a())-u>S});},ft=new WeakMap,et=new WeakMap,Ot=new WeakMap,V=new WeakMap,Zt=function(){let t=new Dt(i(this,j));c(this,X,0),c(this,q,t),c(this,ut,e=>{c(this,X,i(this,X)-t[e]),t[e]=0;}),c(this,xt,(e,s,r,o)=>{if(l(this,n,y).call(this,s))return 0;if(!rt(r))if(o){if(typeof o!="function")throw new TypeError("sizeCalculation must be a function");if(r=o(s,e),!rt(r))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return r}),c(this,Et,(e,s,r)=>{if(t[e]=s,i(this,N)){let o=i(this,N)-t[e];for(;i(this,X)>o;)l(this,n,It).call(this,true);}c(this,X,i(this,X)+t[e]),r&&(r.entrySize=s,r.totalCalculatedSize=i(this,X));});},ut=new WeakMap,Et=new WeakMap,xt=new WeakMap,at=function*({allowStale:t=this.allowStale}={}){if(i(this,x))for(let e=i(this,R);!(!l(this,n,Wt).call(this,e)||((t||!i(this,V).call(this,e))&&(yield e),e===i(this,D)));)e=i(this,U)[e];},ot=function*({allowStale:t=this.allowStale}={}){if(i(this,x))for(let e=i(this,D);!(!l(this,n,Wt).call(this,e)||((t||!i(this,V).call(this,e))&&(yield e),e===i(this,R)));)e=i(this,M)[e];},Wt=function(t){return t!==void 0&&i(this,O).get(i(this,w)[t])===t},It=function(t){var o;let e=i(this,D),s=i(this,w)[e],r=i(this,d)[e];return i(this,ht)&&l(this,n,y).call(this,r)?r.__abortController.abort(new Error("evicted")):(i(this,Q)||i(this,G))&&(i(this,Q)&&((o=i(this,H))==null||o.call(this,r,s,"evict")),i(this,G)&&i(this,C)?.push([r,s,"evict"])),i(this,ut).call(this,e),i(this,W)?.[e]&&(clearTimeout(i(this,W)[e]),i(this,W)[e]=void 0),t&&(i(this,w)[e]=void 0,i(this,d)[e]=void 0,i(this,J).push(e)),i(this,x)===1?(c(this,D,c(this,R,0)),i(this,J).length=0):c(this,D,i(this,M)[e]),i(this,O).delete(s),Ct(this,x)._--,e},zt=function(t,e,s,r){let o=e===void 0?void 0:i(this,d)[e];if(l(this,n,y).call(this,o))return o;let a=new Mt,{signal:h}=s;h?.addEventListener("abort",()=>a.abort(h.reason),{signal:a.signal});let u={signal:a.signal,options:s,context:r},S=(T,b=false)=>{let{aborted:m}=a.signal,I=s.ignoreFetchAbort&&T!==void 0,L=s.ignoreFetchAbort||!!(s.allowStaleOnFetchAbort&&T!==void 0);if(s.status&&(m&&!b?(s.status.fetchAborted=true,s.status.fetchError=a.signal.reason,I&&(s.status.fetchAbortIgnored=true)):s.status.fetchResolved=true),m&&!I&&!b)return E(a.signal.reason,L);let z=Y,v=i(this,d)[e];return (v===Y||I&&b&&v===void 0)&&(T===void 0?z.__staleWhileFetching!==void 0?i(this,d)[e]=z.__staleWhileFetching:l(this,n,nt).call(this,t,"fetch"):(s.status&&(s.status.fetchUpdated=true),this.set(t,T,u.options))),T},F=T=>(s.status&&(s.status.fetchRejected=true,s.status.fetchError=T),E(T,false)),E=(T,b)=>{let{aborted:m}=a.signal,I=m&&s.allowStaleOnFetchAbort,L=I||s.allowStaleOnFetchRejection,z=L||s.noDeleteOnFetchRejection,v=Y;if(i(this,d)[e]===Y&&(!z||!b&&v.__staleWhileFetching===void 0?l(this,n,nt).call(this,t,"fetch"):I||(i(this,d)[e]=v.__staleWhileFetching)),L)return s.status&&v.__staleWhileFetching!==void 0&&(s.status.returnedStale=true),v.__staleWhileFetching;if(v.__returned===v)throw T},st=(T,b)=>{var I;let m=(I=i(this,mt))==null?void 0:I.call(this,t,o,u);m&&m instanceof Promise&&m.then(L=>T(L===void 0?void 0:L),b),a.signal.addEventListener("abort",()=>{(!s.ignoreFetchAbort||s.allowStaleOnFetchAbort)&&(T(void 0),s.allowStaleOnFetchAbort&&(T=L=>S(L,true)));});};s.status&&(s.status.fetchDispatched=true);let Y=new Promise(st).then(S,F),Z=Object.assign(Y,{__abortController:a,__staleWhileFetching:o,__returned:void 0});return e===void 0?(this.set(t,Z,{...u.options,status:void 0}),e=i(this,O).get(t)):i(this,d)[e]=Z,Z},y=function(t){if(!i(this,ht))return false;let e=t;return !!e&&e instanceof Promise&&e.hasOwnProperty("__staleWhileFetching")&&e.__abortController instanceof Mt},Vt=function(t,e){i(this,U)[e]=t,i(this,M)[t]=e;},At=function(t){t!==i(this,R)&&(t===i(this,D)?c(this,D,i(this,M)[t]):l(this,n,Vt).call(this,i(this,U)[t],i(this,M)[t]),l(this,n,Vt).call(this,i(this,R),t),c(this,R,t));},nt=function(t,e){var r,o;let s=false;if(i(this,x)!==0){let a=i(this,O).get(t);if(a!==void 0)if(i(this,W)?.[a]&&(clearTimeout(i(this,W)?.[a]),i(this,W)[a]=void 0),s=true,i(this,x)===1)l(this,n,Yt).call(this,e);else {i(this,ut).call(this,a);let h=i(this,d)[a];if(l(this,n,y).call(this,h)?h.__abortController.abort(new Error("deleted")):(i(this,Q)||i(this,G))&&(i(this,Q)&&((r=i(this,H))==null||r.call(this,h,t,e)),i(this,G)&&i(this,C)?.push([h,t,e])),i(this,O).delete(t),i(this,w)[a]=void 0,i(this,d)[a]=void 0,a===i(this,R))c(this,R,i(this,U)[a]);else if(a===i(this,D))c(this,D,i(this,M)[a]);else {let u=i(this,U)[a];i(this,M)[u]=i(this,M)[a];let S=i(this,M)[a];i(this,U)[S]=i(this,U)[a];}Ct(this,x)._--,i(this,J).push(a);}}if(i(this,G)&&i(this,C)?.length){let a=i(this,C),h;for(;h=a?.shift();)(o=i(this,$))==null||o.call(this,...h);}return s},Yt=function(t){var e,s;for(let r of l(this,n,ot).call(this,{allowStale:true})){let o=i(this,d)[r];if(l(this,n,y).call(this,o))o.__abortController.abort(new Error("deleted"));else {let a=i(this,w)[r];i(this,Q)&&((e=i(this,H))==null||e.call(this,o,a,t)),i(this,G)&&i(this,C)?.push([o,a,t]);}}if(i(this,O).clear(),i(this,d).fill(void 0),i(this,w).fill(void 0),i(this,P)&&i(this,k)){i(this,P).fill(0),i(this,k).fill(0);for(let r of i(this,W)??[])r!==void 0&&clearTimeout(r);i(this,W)?.fill(void 0);}if(i(this,q)&&i(this,q).fill(0),c(this,D,0),c(this,R,0),i(this,J).length=0,c(this,X,0),c(this,x,0),i(this,G)&&i(this,C)){let r=i(this,C),o;for(;o=r?.shift();)(s=i(this,$))==null||s.call(this,...o);}},bt);var it=class{constructor(t){g(this,"cache");g(this,"map",new Map);this.cache=new Qt({max:t.cacheSize}),this.map=new Map;}get[Symbol.iterator](){return this.map[Symbol.iterator]}get[Symbol.toStringTag](){return this.map[Symbol.toStringTag]}clear(){return this.cache.clear(),this.map.clear()}delete(t){let e=this.map.delete(t);return e&&this.cache.delete(t),e}get forEach(){return this.map.forEach}get(t){let e=this.cache.get(t);return e||this.map.get(t)}has(t){return this.map.has(t)}set(t,e){return this.map.set(t,e),this.cache.set(t,e),this}get size(){return this.map.size}entries(){return this.map.entries()}keys(){return this.map.keys()}values(){return this.map.values()}};var A=class A{constructor(){}static clearOldTempVariables(t){A.tempStorageDeadlines.forEach((e,s)=>{e>t&&(A.tempStorage.delete(s),A.tempStorageDeadlines.delete(s),A.storage.cache.delete(s));});}static setVariable(t,e){let s=A.tempStorage.has(t);e==null?(A.storage.map.delete(t),!s&&A.storage.cache.delete(t)):(A.storage.map.set(t,e),!s&&A.storage.cache.set(t,e));}static getVariable(t){let e=A.storage.cache.get(t);return e===void 0&&(e=A.tempStorage.get(t)),e===void 0&&(e=A.storage.map.get(t)),e===void 0&&(e=A.default.get(t)),Ft(e)}static removeVariable(t){A.storage.delete(t);}static setFlag(t,e){if(e)this.flags.includes(t)||this.flags.push(t);else {let s=this.flags.indexOf(t);s>-1&&this.flags.splice(s,1);}}static getFlag(t){return this.flags.includes(t)}};g(A,"storage",new it({cacheSize:20})),g(A,"default",new it({cacheSize:20})),g(A,"flags",Array()),g(A,"tempStorage",new Map),g(A,"tempStorageDeadlines",new Map);var p=A;var yt=class{constructor(t,e){g(this,"id");g(this,"categoryId");this.categoryId=t,this.id=e;}setStorageProperty(t,e){let s=p.getVariable(this.categoryId);s||(s={}),s.hasOwnProperty(this.id)||(s[this.id]={}),e==null?s[this.id].hasOwnProperty(t)&&delete s[this.id][t]:s[this.id]={...s[this.id],[t]:e},Object.keys(s[this.id]).length===0&&delete s[this.id],p.setVariable(this.categoryId,s);}getStorageProperty(t,e=this.id){let s=p.getVariable(this.categoryId);if(s&&s.hasOwnProperty(e)&&s[e].hasOwnProperty(t))return s[e][t]}};var jt={CHARACTER_CATEGORY_KEY:"___character___"};var ne="@",wt=class extends yt{constructor(e,s=""){super(jt.CHARACTER_CATEGORY_KEY,e+(s?ne+s:""));g(this,"sourceId");this.sourceId=e;}getStorageProperty(e){let s=super.getStorageProperty(e);return s===void 0&&(s=super.getStorageProperty(e,this.sourceId)),s}};var Gt=class extends wt{constructor(e,s){super(typeof e=="string"?e:e.id,typeof e=="string"?"":e.emotion);g(this,"defaultName");g(this,"defaultSurname");g(this,"defaultAge");g(this,"_icon");g(this,"_color");this.defaultName=s.name,this.defaultSurname=s.surname,this.defaultAge=s.age,this._icon=s.icon,this._color=s.color;}get name(){return this.getStorageProperty("name")||this.defaultName||this.id}set name(e){this.setStorageProperty("name",e);}get surname(){return this.getStorageProperty("surname")||this.defaultSurname}set surname(e){this.setStorageProperty("surname",e);}get age(){return this.getStorageProperty("age")||this.defaultAge}set age(e){this.setStorageProperty("age",e);}get icon(){return this._icon}get color(){return this._color}};var Tt=new it({cacheSize:10}),Kt;(o=>{function f(a){try{let h=Tt.get(a);if(!h){K.warn(`Character "${a}" not found, did you forget to register it with the RegisteredCharacters.add?`);return}return h}catch(h){K.error(`Error while getting Character "${a}"`,h);return}}o.get=f;function t(a){if(Array.isArray(a)){a.forEach(h=>t(h));return}Tt.get(a.id)&&K.info(`Character id "${a.id}" already exists, it will be overwritten`),Tt.set(a.id,a);}o.add=t;function e(){return Array.from(Tt.values())}o.values=e;function s(a){return Tt.has(a)}o.has=s;function r(){return Array.from(Tt.keys())}o.keys=r;})(Kt||(Kt={}));var he=Kt;exports.CharacterBaseModel=Gt;exports.CharacterStoredClass=wt;exports.RegisteredCharacters=he;//# sourceMappingURL=characters.cjs.map
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy9sb2ctdXRpbGl0eS50cyIsIi4uL3NyYy91dGlscy9leHBvcnQtdXRpbGl0eS50cyIsIi4uL25vZGVfbW9kdWxlcy9scnUtY2FjaGUvc3JjL2luZGV4LnRzIiwiLi4vc3JjL2NsYXNzZXMvQ2FjaGVkTWFwLnRzIiwiLi4vc3JjL3N0b3JhZ2UvU3RvcmFnZU1hbmFnZXJTdGF0aWMudHMiLCIuLi9zcmMvc3RvcmFnZS9jbGFzc2VzL1N0b3JlZENsYXNzTW9kZWwudHMiLCIuLi9zcmMvc3RvcmFnZS9jb25zdGFudHMudHMiLCIuLi9zcmMvY2hhcmFjdGVycy9jbGFzc2VzL0NoYXJhY3RlclN0b3JlZENsYXNzLnRzIiwiLi4vc3JjL2NoYXJhY3RlcnMvY2xhc3Nlcy9DaGFyYWN0ZXJCYXNlTW9kZWwudHMiLCIuLi9zcmMvY2hhcmFjdGVycy9kZWNvcmF0b3JzL2NoYXJhY3Rlci1kZWNvcmF0b3IudHMiXSwibmFtZXMiOlsibG9nZ2VyIiwibWVzc2FnZSIsIm9wdGlvbmFsUGFyYW1zIiwiY3JlYXRlRXhwb3J0YWJsZUVsZW1lbnQiLCJlbGVtZW50IiwiZWxlbWVudFN0cmluZyIsImUiLCJQaXhpRXJyb3IiLCJkZWZhdWx0UGVyZiIsIndhcm5lZCIsIlBST0NFU1MiLCJlbWl0V2FybmluZyIsIm1zZyIsInR5cGUiLCJjb2RlIiwiZm4iLCJBQyIsIkFTIiwiX19wdWJsaWNGaWVsZCIsIl8iLCJ3YXJuQUNQb2x5ZmlsbCIsInJlYXNvbiIsInByaW50QUNQb2x5ZmlsbFdhcm5pbmciLCJzaG91bGRXYXJuIiwiaXNQb3NJbnQiLCJuIiwiZ2V0VWludEFycmF5IiwibWF4IiwiWmVyb0FycmF5Iiwic2l6ZSIsIl9hIiwiX28iLCJTdGFjayIsIkhlYXBDbHMiLCJfU3RhY2siLCIjY29uc3RydWN0aW5nIiwicyIsIl9fcHJpdmF0ZUFkZCIsIl9iIiwiX2MiLCJfdyIsIl9DIiwiX1MiLCJfTCIsIl9JIiwiX20iLCJfbiIsIl9fIiwiX3MiLCJfaSIsIl90IiwiX3UiLCJfbCIsIl9oIiwiX3IiLCJfeSIsIl9BIiwiX2QiLCJfZyIsIl9UIiwiX3YiLCJfZiIsIl9VIiwiX2NfaW5zdGFuY2VzIiwial9mbiIsIl9SIiwiX3oiLCJfTiIsIl9wIiwiQl9mbiIsIl9XIiwiX00iLCJfUCIsIkZfZm4iLCJPX2ZuIiwiSF9mbiIsInhfZm4iLCJHX2ZuIiwiZV9mbiIsImtfZm4iLCJEX2ZuIiwiRV9mbiIsIlZfZm4iLCJMUlVDYWNoZSIsIm9wdGlvbnMiLCIjbWF4IiwiI21heFNpemUiLCIjZGlzcG9zZSIsIiNvbkluc2VydCIsIiNkaXNwb3NlQWZ0ZXIiLCIjZmV0Y2hNZXRob2QiLCIjbWVtb01ldGhvZCIsIiNwZXJmIiwiI3NpemUiLCIjY2FsY3VsYXRlZFNpemUiLCIja2V5TWFwIiwiI2tleUxpc3QiLCIjdmFsTGlzdCIsIiNuZXh0IiwiI3ByZXYiLCIjaGVhZCIsIiN0YWlsIiwiI2ZyZWUiLCIjZGlzcG9zZWQiLCIjc2l6ZXMiLCIjc3RhcnRzIiwiI3R0bHMiLCIjYXV0b3B1cmdlVGltZXJzIiwiI2hhc0Rpc3Bvc2UiLCIjaGFzRmV0Y2hNZXRob2QiLCIjaGFzRGlzcG9zZUFmdGVyIiwiI2hhc09uSW5zZXJ0IiwiI3VwZGF0ZUl0ZW1BZ2UiLCIjc3RhdHVzVFRMIiwiI3NldEl0ZW1UVEwiLCIjaXNTdGFsZSIsIiNyZW1vdmVJdGVtU2l6ZSIsIiNhZGRJdGVtU2l6ZSIsIl9zdCIsIiNyZXF1aXJlU2l6ZSIsIl9rIiwic2l6ZUNhbGN1bGF0aW9uIiwidHRsIiwidHRsUmVzb2x1dGlvbiIsInR0bEF1dG9wdXJnZSIsInVwZGF0ZUFnZU9uR2V0IiwidXBkYXRlQWdlT25IYXMiLCJhbGxvd1N0YWxlIiwiZGlzcG9zZSIsIm9uSW5zZXJ0IiwiZGlzcG9zZUFmdGVyIiwibm9EaXNwb3NlT25TZXQiLCJub1VwZGF0ZVRUTCIsIm1heFNpemUiLCJtYXhFbnRyeVNpemUiLCJmZXRjaE1ldGhvZCIsIm1lbW9NZXRob2QiLCJub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb24iLCJub0RlbGV0ZU9uU3RhbGVHZXQiLCJhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbiIsImFsbG93U3RhbGVPbkZldGNoQWJvcnQiLCJpZ25vcmVGZXRjaEFib3J0IiwicGVyZiIsIl9fcHJpdmF0ZVNldCIsIlVpbnRBcnJheSIsIl9fcHJpdmF0ZUdldCIsIl9fcHJpdmF0ZU1ldGhvZCIsIiNpbml0aWFsaXplU2l6ZVRyYWNraW5nIiwiI2luaXRpYWxpemVUVExUcmFja2luZyIsIl9MUlVDYWNoZSIsImMiLCJwIiwiI2lzQmFja2dyb3VuZEZldGNoIiwiayIsImluZGV4IiwiY29udGV4dCIsIiNiYWNrZ3JvdW5kRmV0Y2giLCIjbW92ZVRvVGFpbCIsIiNpbmRleGVzIiwiI3JpbmRleGVzIiwia2V5IiwiaSIsImdldE9wdGlvbnMiLCJ2IiwidmFsdWUiLCJ0aGlzcCIsImRlbGV0ZWQiLCIjZGVsZXRlIiwiZW50cnkiLCJzdGFydCIsInJlbWFpbiIsImFyciIsImFnZSIsInNldE9wdGlvbnMiLCJzdGF0dXMiLCIjZXZpY3QiLCJfX3ByaXZhdGVXcmFwcGVyIiwib2xkVmFsIiwib2xkVmFsdWUiLCJkdCIsInRhc2siLCJ2YWwiLCJoYXNPcHRpb25zIiwicGVla09wdGlvbnMiLCJmZXRjaE9wdGlvbnMiLCJmb3JjZVJlZnJlc2giLCJzaWduYWwiLCJzdGFsZSIsImlzU3RhbGUiLCJzdGFsZVZhbCIsIm1lbW9PcHRpb25zIiwidnYiLCJmZXRjaGluZyIsIiNjbGVhciIsInR0bHMiLCJzdGFydHMiLCJwdXJnZVRpbWVycyIsInNldFB1cmdldFRpbWVyIiwidCIsImNhY2hlZE5vdyIsImdldE5vdyIsInNpemVzIiwiI2lzVmFsaWRJbmRleCIsImZyZWUiLCJoZWFkIiwiYWMiLCJmZXRjaE9wdHMiLCJjYiIsInVwZGF0ZUNhY2hlIiwiYWJvcnRlZCIsImlnbm9yZUFib3J0IiwicHJvY2VlZCIsImZldGNoRmFpbCIsImJmIiwidmwiLCJlYiIsImVyIiwiYWxsb3dTdGFsZUFib3J0ZWQiLCJub0RlbGV0ZSIsInBjYWxsIiwicmVzIiwicmVqIiwiZm1wIiwiYiIsIiNjb25uZWN0IiwicGkiLCJuaSIsIkNhY2hlZE1hcCIsIkwiLCJjYWNoZWRWYWx1ZSIsIl9TdG9yYWdlTWFuYWdlclN0YXRpYyIsIm9wZW5lZExhYmVsc051bWJlciIsImRlYWRsaW5lIiwiaXNJblRlbXBTdG9yYWdlIiwicmVzdWx0IiwiU3RvcmFnZU1hbmFnZXJTdGF0aWMiLCJTdG9yZWRDbGFzc01vZGVsIiwiY2F0ZWdvcnlJZCIsImlkIiwicHJvcGVydHlOYW1lIiwic3RvcmFnZVZhbHVlIiwiaWRUb1VzZSIsIlNZU1RFTV9SRVNFUlZFRF9TVE9SQUdFX0tFWVMiLCJFTU9USU9OX1NFUEFSQVRPUiIsIkNoYXJhY3RlclN0b3JlZENsYXNzIiwiZW1vdGlvbiIsIkNoYXJhY3RlckJhc2VNb2RlbCIsInByb3BzIiwicmVnaXN0ZXJlZENoYXJhY3RlcnMiLCJSZWdpc3RlcmVkQ2hhcmFjdGVycyIsImdldCIsImNoYXJhY3RlciIsImFkZCIsInZhbHVlcyIsImhhcyIsImtleXMiLCJjaGFyYWN0ZXJfZGVjb3JhdG9yX2RlZmF1bHQiXSwibWFwcGluZ3MiOiJxcEJBQU8sSUFBVUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsR0FDQUEsQ0FBQUEsQ0FBQSxJQUFNLENBQUNDLENBQUFBLENBQUFBLEdBQWtCQyxJQUNsQyxPQUFBLENBQVEsR0FBQSxDQUFJLGtCQUFhRCxDQUFPLENBQUEsQ0FBQSxDQUFJLEdBQUdDLENBQWMsQ0FBQSxDQUM1Q0YsRUFBQSxJQUFBLENBQU8sQ0FBQ0MsS0FBa0JDLENBQUFBLEdBQ25DLE9BQUEsQ0FBUSxLQUFLLENBQUEsZUFBQSxFQUFhRCxDQUFPLEdBQUksR0FBR0MsQ0FBYyxFQUM3Q0YsQ0FBQUEsQ0FBQSxLQUFBLENBQVEsQ0FBQ0MsQ0FBQUEsQ0FBQUEsR0FBa0JDLENBQUFBLEdBQ3BDLFFBQVEsS0FBQSxDQUFNLENBQUEsZUFBQSxFQUFhRCxDQUFPLENBQUEsQ0FBQSxDQUFJLEdBQUdDLENBQWMsRUFDOUNGLENBQUFBLENBQUEs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QUFBQSxDQUFBLHlCQUdBMkUsQ0FBQUEsQ0FBQUEsSUFBQUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsQ0FDQUMsQ0FBQUEsQ0FBQUEsSUFBQUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsQ0FDQUMsRUFBQUEsSUFBQUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsQ0FDQUMsRUFBQUEsSUFBQUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsQ0FDQUMsRUFBQUEsSUFBQUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsQ0FDQUMsRUFBQUEsSUFBQUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsQ0FDQUMsRUFBQUEsSUFBQUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsQ0FDQUMsRUFBQUEsSUFBQUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsQ0FDQUMsRUFBQUEsSUFBQUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsQ0FDQUMsQ0FBQUEsQ0FBQUEsSUFBQUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsQ0FDQUMsQ0FBQUEsQ0FBQUEsS0FBQUEsQ0FBQUEsQ0FBQUEsQ0FDQUMsQ0FBQUEsQ0FBQUEsS0FBQUEsQ0FBQUEsQ0FBQUEsQ0FDQUMsQ0FBQUEsQ0FBQUEsS0FBQUEsQ0FBQUEsQ0FBQUEsQ0FDQUMsQ0FBQUEsQ0FBQUEsS0FBQUEsQ0FBQUEsQ0FBQUEsQ0FDQUMsQ0FBQUEsQ0FBQUEsS0FBQUEsQ0FBQUEsQ0FBQUEsQ0FFQUMsQ0FBQUEsQ0FBQUEsS0FBQUEsQ0FBQUEsQ0FBQUEsQ0FDQUMsQ0FBQUEsQ0FBQUEsS0FBQUEsRUFBQUEsQ0FBQUEsQ0FDQUMsQ0FBQUEsQ0FBQUEsSUFBQUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsQ0FDQUMsQ0FBQUEsQ0FBQUEsSUFBQUEsQ0FBQUEsSUEyWEFDLENBQUFBLENBQUFBLElBQUFBLENBQUFBLEdBQXlDLElBQUssQ0FBRSxHQUNoREMsQ0FBQUEsQ0FBQUEsSUFBQUEsQ0FBQUEsR0FBaUUsSUFBSyxDQUFFLEdBQ3hFQyxDQUFBQSxDQUFBQSxJQUFBQSxDQUFBQSxHQU1ZLElBQUssQ0FBRSxHQUduQkMsQ0FBQUEsQ0FBQUEsSUFBQUEsQ0FBQUEsRUFBc0MsSUFBTSxLQUFB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NEMsQ0FDeEQsT0FBTyxLQUFBLENBQU0sS0FBS0wsRUFBQUEsQ0FBcUIsTUFBQSxFQUFRLENBQ25ELENBRk9DLEVBQVMsTUFBQSxDQUFBSSxDQUFBQSxDQVNULFNBQVNDLENBQUFBLENBQUloQixDQUFBQSxDQUFxQixDQUNyQyxPQUFPVSxFQUFBQSxDQUFxQixHQUFBLENBQUlWLENBQUUsQ0FDdEMsQ0FGT1csRUFBUyxHQUFBLENBQUFLLENBQUFBLENBUVQsU0FBU0MsQ0FBQUEsRUFBaUIsQ0FDN0IsT0FBTyxLQUFBLENBQU0sSUFBQSxDQUFLUCxHQUFxQixJQUFBLEVBQU0sQ0FDakQsQ0FGT0MsQ0FBQUEsQ0FBUyxLQUFBTSxFQUFBQSxDQUFBQSxFQXpFVk4sRUFBQUEsR0FBQUEsRUFBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQTZFVixJQUFPTyxFQUFBQSxDQUFRUCIsImZpbGUiOiJjaGFyYWN0ZXJzLmNqcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBuYW1lc3BhY2UgbG9nZ2VyIHtcbiAgICBleHBvcnQgY29uc3QgbG9nID0gKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT5cbiAgICAgICAgY29uc29sZS5sb2coYFtQaXhp4oCZVk5dICR7bWVzc2FnZX1gLCAuLi5vcHRpb25hbFBhcmFtcyk7XG4gICAgZXhwb3J0IGNvbnN0IHdhcm4gPSAobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PlxuICAgICAgICBjb25zb2xlLndhcm4oYFtQaXhp4oCZVk5dICR7bWVzc2FnZX1gLCAuLi5vcHRpb25hbFBhcmFtcyk7XG4gICAgZXhwb3J0IGNvbnN0IGVycm9yID0gKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT5cbiAgICAgICAgY29uc29sZS5lcnJvcihgW1BpeGnigJlWTl0gJHttZXNzYWdlfWAsIC4uLm9wdGlvbmFsUGFyYW1zKTtcbiAgICBleHBvcnQgY29uc3QgaW5mbyA9IChtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pID0+XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW1BpeGnigJlWTl0gJHttZXNzYWdlfWAsIC4uLm9wdGlvbmFsUGFyYW1zKTtcbn1cbiIsImltcG9ydCB7IFBpeGlFcnJvciB9IGZyb20gXCJAZHJpbmNzL3BpeGktdm4vY29yZVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nLXV0aWxpdHlcIjtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY3JlYXRlIGEgZGVlcCBjb3B5IG9mIHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBiZSBjb3BpZWRcbiAqIEByZXR1cm5zIFRoZSBjb3BpZWQgZWxlbWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRXhwb3J0YWJsZUVsZW1lbnQ8VD4oZWxlbWVudDogVCk6IFQge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGVsZW1lbnRTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZWxlbWVudFN0cmluZyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoXCJFcnJvciBjcmVhdGluZyBleHBvcnRhYmxlIGVsZW1lbnRcIiwgZWxlbWVudCwgZSk7XG4gICAgICAgIHRocm93IG5ldyBQaXhpRXJyb3IoXCJub3RfanNvbl9zZXJpYWxpemFibGVcIiwgXCJFcnJvciBjcmVhdGluZyBleHBvcnRhYmxlIGVsZW1lbnRcIik7XG4gICAgfVxufVxuIiwiLyoqXG4gKiBAbW9kdWxlIExSVUNhY2hlXG4gKi9cblxuLy8gbW9kdWxlLXByaXZhdGUgbmFtZXMgYW5kIHR5cGVzXG4vLyB0aGlzIHByb3ZpZGVzIHRoZSBkZWZhdWx0IFBlcmYgb2JqZWN0IHNvdXJjZS5cbi8vIGl0IGNhbiBiZSBwYXNzZWQgaW4gdmlhIGNvbmZpZ3VyYXRpb24gdG8gb3ZlcnJpZGUgaXRcbi8vIGZvciBhIHNpbmdsZSBMUlUgb2JqZWN0LlxuZXhwb3J0IHR5cGUgUGVyZiA9IHsgbm93OiAoKSA9PiBudW1iZXIgfVxuY29uc3QgZGVmYXVsdFBlcmY6IFBlcmYgPVxuICAoXG4gICAgdHlwZW9mIHBlcmZvcm1hbmNlID09PSAnb2JqZWN0JyAmJlxuICAgIHBlcmZvcm1hbmNlICYmXG4gICAgdHlwZW9mIHBlcmZvcm1hbmNlLm5vdyA9PT0gJ2Z1bmN0aW9uJ1xuICApID9cbiAgICBwZXJmb3JtYW5jZVxuICA6IERhdGVcblxuY29uc3Qgd2FybmVkID0gbmV3IFNldDxzdHJpbmc+KClcblxuLy8gZWl0aGVyIGEgZnVuY3Rpb24gb3IgYSBjbGFzc1xudHlwZSBGb3JDID0gKCguLi5hOiBhbnlbXSkgPT4gYW55KSB8IHsgbmV3ICguLi5hOiBhbnlbXSk6IGFueSB9XG5cbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xuY29uc3QgUFJPQ0VTUyA9IChcbiAgdHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmICEhcHJvY2VzcyA/XG4gICAgcHJvY2Vzc1xuICA6IHt9KSBhcyB7IFtrOiBzdHJpbmddOiBhbnkgfVxuLyogYzggaWdub3JlIHN0YXJ0ICovXG5cbmNvbnN0IGVtaXRXYXJuaW5nID0gKFxuICBtc2c6IHN0cmluZyxcbiAgdHlwZTogc3RyaW5nLFxuICBjb2RlOiBzdHJpbmcsXG4gIGZuOiBGb3JDLFxuKSA9PiB7XG4gIHR5cGVvZiBQUk9DRVNTLmVtaXRXYXJuaW5nID09PSAnZnVuY3Rpb24nID9cbiAgICBQUk9DRVNTLmVtaXRXYXJuaW5nKG1zZywgdHlwZSwgY29kZSwgZm4pXG4gIDogY29uc29sZS5lcnJvcihgWyR7Y29kZX1dICR7dHlwZX06ICR7bXNnfWApXG59XG5cbmxldCBBQyA9IGdsb2JhbFRoaXMuQWJvcnRDb250cm9sbGVyXG5sZXQgQVMgPSBnbG9iYWxUaGlzLkFib3J0U2lnbmFsXG5cbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xuaWYgKHR5cGVvZiBBQyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgLy9AdHMtaWdub3JlXG4gIEFTID0gY2xhc3MgQWJvcnRTaWduYWwge1xuICAgIG9uYWJvcnQ/OiAoLi4uYTogYW55W10pID0+IGFueVxuICAgIF9vbmFib3J0OiAoKC4uLmE6IGFueVtdKSA9PiBhbnkpW10gPSBbXVxuICAgIHJlYXNvbj86IGFueVxuICAgIGFib3J0ZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICAgIGFkZEV2ZW50TGlzdGVuZXIoXzogc3RyaW5nLCBmbjogKC4uLmE6IGFueVtdKSA9PiBhbnkpIHtcbiAgICAgIHRoaXMuX29uYWJvcnQucHVzaChmbilcbiAgICB9XG4gIH1cbiAgLy9AdHMtaWdub3JlXG4gIEFDID0gY2xhc3MgQWJvcnRDb250cm9sbGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHdhcm5BQ1BvbHlmaWxsKClcbiAgICB9XG4gICAgc2lnbmFsID0gbmV3IEFTKClcbiAgICBhYm9ydChyZWFzb246IGFueSkge1xuICAgICAgaWYgKHRoaXMuc2lnbmFsLmFib3J0ZWQpIHJldHVyblxuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICB0aGlzLnNpZ25hbC5yZWFzb24gPSByZWFzb25cbiAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgdGhpcy5zaWduYWwuYWJvcnRlZCA9IHRydWVcbiAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgZm9yIChjb25zdCBmbiBvZiB0aGlzLnNpZ25hbC5fb25hYm9ydCkge1xuICAgICAgICBmbihyZWFzb24pXG4gICAgICB9XG4gICAgICB0aGlzLnNpZ25hbC5vbmFib3J0Py4ocmVhc29uKVxuICAgIH1cbiAgfVxuICBsZXQgcHJpbnRBQ1BvbHlmaWxsV2FybmluZyA9XG4gICAgUFJPQ0VTUy5lbnY/LkxSVV9DQUNIRV9JR05PUkVfQUNfV0FSTklORyAhPT0gJzEnXG4gIGNvbnN0IHdhcm5BQ1BvbHlmaWxsID0gKCkgPT4ge1xuICAgIGlmICghcHJpbnRBQ1BvbHlmaWxsV2FybmluZykgcmV0dXJuXG4gICAgcHJpbnRBQ1BvbHlmaWxsV2FybmluZyA9IGZhbHNlXG4gICAgZW1pdFdhcm5pbmcoXG4gICAgICAnQWJvcnRDb250cm9sbGVyIGlzIG5vdCBkZWZpbmVkLiBJZiB1c2luZyBscnUtY2FjaGUgaW4gJyArXG4gICAgICAgICdub2RlIDE0LCBsb2FkIGFuIEFib3J0Q29udHJvbGxlciBwb2x5ZmlsbCBmcm9tIHRoZSAnICtcbiAgICAgICAgJ2Bub2RlLWFib3J0LWNvbnRyb2xsZXJgIHBhY2thZ2UuIEEgbWluaW1hbCBwb2x5ZmlsbCBpcyAnICtcbiAgICAgICAgJ3Byb3ZpZGVkIGZvciB1c2UgYnkgTFJVQ2FjaGUuZmV0Y2goKSwgYnV0IGl0IHNob3VsZCBub3QgYmUgJyArXG4gICAgICAgICdyZWxpZWQgdXBvbiBpbiBvdGhlciBjb250ZXh0cyAoZWcsIHBhc3NpbmcgaXQgdG8gb3RoZXIgQVBJcyB0aGF0ICcgK1xuICAgICAgICAndXNlIEFib3J0Q29udHJvbGxlci9BYm9ydFNpZ25hbCBtaWdodCBoYXZlIHVuZGVzaXJhYmxlIGVmZmVjdHMpLiAnICtcbiAgICAgICAgJ1lvdSBtYXkgZGlzYWJsZSB0aGlzIHdpdGggTFJVX0NBQ0hFX0lHTk9SRV9BQ19XQVJOSU5HPTEgaW4gdGhlIGVudi4nLFxuICAgICAgJ05PX0FCT1JUX0NPTlRST0xMRVInLFxuICAgICAgJ0VOT1RTVVAnLFxuICAgICAgd2FybkFDUG9seWZpbGwsXG4gICAgKVxuICB9XG59XG4vKiBjOCBpZ25vcmUgc3RvcCAqL1xuXG5jb25zdCBzaG91bGRXYXJuID0gKGNvZGU6IHN0cmluZykgPT4gIXdhcm5lZC5oYXMoY29kZSlcblxuY29uc3QgVFlQRSA9IFN5bWJvbCgndHlwZScpXG5leHBvcnQgdHlwZSBQb3NJbnQgPSBudW1iZXIgJiB7IFtUWVBFXTogJ1Bvc2l0aXZlIEludGVnZXInIH1cbmV4cG9ydCB0eXBlIEluZGV4ID0gbnVtYmVyICYgeyBbVFlQRV06ICdMUlVDYWNoZSBJbmRleCcgfVxuXG5jb25zdCBpc1Bvc0ludCA9IChuOiBhbnkpOiBuIGlzIFBvc0ludCA9PlxuICBuICYmIG4gPT09IE1hdGguZmxvb3IobikgJiYgbiA+IDAgJiYgaXNGaW5pdGUobilcblxuZXhwb3J0IHR5cGUgVWludEFycmF5ID0gVWludDhBcnJheSB8IFVpbnQxNkFycmF5IHwgVWludDMyQXJyYXlcbmV4cG9ydCB0eXBlIE51bWJlckFycmF5ID0gVWludEFycmF5IHwgbnVtYmVyW11cblxuLyogYzggaWdub3JlIHN0YXJ0ICovXG4vLyBUaGlzIGlzIGEgbGl0dGxlIGJpdCByaWRpY3Vsb3VzLCB0YmguXG4vLyBUaGUgbWF4aW11bSBhcnJheSBsZW5ndGggaXMgMl4zMi0xIG9yIHRoZXJlYWJvdXRzIG9uIG1vc3QgSlMgaW1wbHMuXG4vLyBBbmQgd2VsbCBiZWZvcmUgdGhhdCBwb2ludCwgeW91J3JlIGNhY2hpbmcgdGhlIGVudGlyZSB3b3JsZCwgSSBtZWFuLFxuLy8gdGhhdCdzIH4zMkdCIG9mIGp1c3QgaW50ZWdlcnMgZm9yIHRoZSBuZXh0L3ByZXYgbGlua3MsIHBsdXMgd2hhdGV2ZXJcbi8vIGVsc2UgdG8gaG9sZCB0aGF0IG1hbnkga2V5cyBhbmQgdmFsdWVzLiAgSnVzdCBmaWxsaW5nIHRoZSBtZW1vcnkgd2l0aFxuLy8gemVyb2VzIGF0IGluaXQgdGltZSBpcyBicnV0YWwgd2hlbiB5b3UgZ2V0IHRoYXQgYmlnLlxuLy8gQnV0IHdoeSBub3QgYmUgY29tcGxldGU/XG4vLyBNYXliZSBpbiB0aGUgZnV0dXJlLCB0aGVzZSBsaW1pdHMgd2lsbCBoYXZlIGV4cGFuZGVkLlxuY29uc3QgZ2V0VWludEFycmF5ID0gKG1heDogbnVtYmVyKSA9PlxuICAhaXNQb3NJbnQobWF4KSA/IG51bGxcbiAgOiBtYXggPD0gTWF0aC5wb3coMiwgOCkgPyBVaW50OEFycmF5XG4gIDogbWF4IDw9IE1hdGgucG93KDIsIDE2KSA/IFVpbnQxNkFycmF5XG4gIDogbWF4IDw9IE1hdGgucG93KDIsIDMyKSA/IFVpbnQzMkFycmF5XG4gIDogbWF4IDw9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSID8gWmVyb0FycmF5XG4gIDogbnVsbFxuLyogYzggaWdub3JlIHN0b3AgKi9cblxuY2xhc3MgWmVyb0FycmF5IGV4dGVuZHMgQXJyYXk8bnVtYmVyPiB7XG4gIGNvbnN0cnVjdG9yKHNpemU6IG51bWJlcikge1xuICAgIHN1cGVyKHNpemUpXG4gICAgdGhpcy5maWxsKDApXG4gIH1cbn1cbmV4cG9ydCB0eXBlIHsgWmVyb0FycmF5IH1cbmV4cG9ydCB0eXBlIHsgU3RhY2sgfVxuXG5leHBvcnQgdHlwZSBTdGFja0xpa2UgPSBTdGFjayB8IEluZGV4W11cbmNsYXNzIFN0YWNrIHtcbiAgaGVhcDogTnVtYmVyQXJyYXlcbiAgbGVuZ3RoOiBudW1iZXJcbiAgLy8gcHJpdmF0ZSBjb25zdHJ1Y3RvclxuICBzdGF0aWMgI2NvbnN0cnVjdGluZzogYm9vbGVhbiA9IGZhbHNlXG4gIHN0YXRpYyBjcmVhdGUobWF4OiBudW1iZXIpOiBTdGFja0xpa2Uge1xuICAgIGNvbnN0IEhlYXBDbHMgPSBnZXRVaW50QXJyYXkobWF4KVxuICAgIGlmICghSGVhcENscykgcmV0dXJuIFtdXG4gICAgU3RhY2suI2NvbnN0cnVjdGluZyA9IHRydWVcbiAgICBjb25zdCBzID0gbmV3IFN0YWNrKG1heCwgSGVhcENscylcbiAgICBTdGFjay4jY29uc3RydWN0aW5nID0gZmFsc2VcbiAgICByZXR1cm4gc1xuICB9XG4gIGNvbnN0cnVjdG9yKG1heDogbnVtYmVyLCBIZWFwQ2xzOiB7IG5ldyAobjogbnVtYmVyKTogTnVtYmVyQXJyYXkgfSkge1xuICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgIGlmICghU3RhY2suI2NvbnN0cnVjdGluZykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW5zdGFudGlhdGUgU3RhY2sgdXNpbmcgU3RhY2suY3JlYXRlKG4pJylcbiAgICB9XG4gICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICB0aGlzLmhlYXAgPSBuZXcgSGVhcENscyhtYXgpXG4gICAgdGhpcy5sZW5ndGggPSAwXG4gIH1cbiAgcHVzaChuOiBJbmRleCkge1xuICAgIHRoaXMuaGVhcFt0aGlzLmxlbmd0aCsrXSA9IG5cbiAgfVxuICBwb3AoKTogSW5kZXgge1xuICAgIHJldHVybiB0aGlzLmhlYXBbLS10aGlzLmxlbmd0aF0gYXMgSW5kZXhcbiAgfVxufVxuXG4vKipcbiAqIFByb21pc2UgcmVwcmVzZW50aW5nIGFuIGluLXByb2dyZXNzIHtAbGluayBMUlVDYWNoZSNmZXRjaH0gY2FsbFxuICovXG5leHBvcnQgdHlwZSBCYWNrZ3JvdW5kRmV0Y2g8Vj4gPSBQcm9taXNlPFYgfCB1bmRlZmluZWQ+ICYge1xuICBfX3JldHVybmVkOiBCYWNrZ3JvdW5kRmV0Y2g8Vj4gfCB1bmRlZmluZWRcbiAgX19hYm9ydENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlclxuICBfX3N0YWxlV2hpbGVGZXRjaGluZzogViB8IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgdHlwZSBEaXNwb3NlVGFzazxLLCBWPiA9IFtcbiAgdmFsdWU6IFYsXG4gIGtleTogSyxcbiAgcmVhc29uOiBMUlVDYWNoZS5EaXNwb3NlUmVhc29uLFxuXVxuXG5leHBvcnQgbmFtZXNwYWNlIExSVUNhY2hlIHtcbiAgLyoqXG4gICAqIEFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDAsIHJlZmxlY3RpbmcgdGhlIGNhbGN1bGF0ZWQgc2l6ZSBvZiBpdGVtc1xuICAgKi9cbiAgZXhwb3J0IHR5cGUgU2l6ZSA9IG51bWJlclxuXG4gIC8qKlxuICAgKiBJbnRlZ2VyIGdyZWF0ZXIgdGhhbiAwLCByZXByZXNlbnRpbmcgc29tZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCBvciB0aGVcbiAgICogdGltZSBhdCB3aGljaCBhIFRUTCBzdGFydGVkIGNvdW50aW5nIGZyb20uXG4gICAqL1xuICBleHBvcnQgdHlwZSBNaWxsaXNlY29uZHMgPSBudW1iZXJcblxuICAvKipcbiAgICogQW4gaW50ZWdlciBncmVhdGVyIHRoYW4gMCwgcmVmbGVjdGluZyBhIG51bWJlciBvZiBpdGVtc1xuICAgKi9cbiAgZXhwb3J0IHR5cGUgQ291bnQgPSBudW1iZXJcblxuICAvKipcbiAgICogVGhlIHJlYXNvbiB3aHkgYW4gaXRlbSB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZSwgcGFzc2VkXG4gICAqIHRvIHRoZSB7QGxpbmsgRGlzcG9zZXJ9IG1ldGhvZHMuXG4gICAqXG4gICAqIC0gYGV2aWN0YDogVGhlIGl0ZW0gd2FzIGV2aWN0ZWQgYmVjYXVzZSBpdCBpcyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCxcbiAgICogICBhbmQgdGhlIGNhY2hlIGlzIGZ1bGwuXG4gICAqIC0gYHNldGA6IEEgbmV3IHZhbHVlIHdhcyBzZXQsIG92ZXJ3cml0aW5nIHRoZSBvbGQgdmFsdWUgYmVpbmcgZGlzcG9zZWQuXG4gICAqIC0gYGRlbGV0ZWA6IFRoZSBpdGVtIHdhcyBleHBsaWNpdGx5IGRlbGV0ZWQsIGVpdGhlciBieSBjYWxsaW5nXG4gICAqICAge0BsaW5rIExSVUNhY2hlI2RlbGV0ZX0sIHtAbGluayBMUlVDYWNoZSNjbGVhcn0sIG9yXG4gICAqICAge0BsaW5rIExSVUNhY2hlI3NldH0gd2l0aCBhbiB1bmRlZmluZWQgdmFsdWUuXG4gICAqIC0gYGV4cGlyZWA6IFRoZSBpdGVtIHdhcyByZW1vdmVkIGR1ZSB0byBleGNlZWRpbmcgaXRzIFRUTC5cbiAgICogLSBgZmV0Y2hgOiBBIHtAbGluayBPcHRpb25zQmFzZSNmZXRjaE1ldGhvZH0gb3BlcmF0aW9uIHJldHVybmVkXG4gICAqICAgYHVuZGVmaW5lZGAgb3Igd2FzIGFib3J0ZWQsIGNhdXNpbmcgdGhlIGl0ZW0gdG8gYmUgZGVsZXRlZC5cbiAgICovXG4gIGV4cG9ydCB0eXBlIERpc3Bvc2VSZWFzb24gPVxuICAgIHwgJ2V2aWN0J1xuICAgIHwgJ3NldCdcbiAgICB8ICdkZWxldGUnXG4gICAgfCAnZXhwaXJlJ1xuICAgIHwgJ2ZldGNoJ1xuICAvKipcbiAgICogQSBtZXRob2QgY2FsbGVkIHVwb24gaXRlbSByZW1vdmFsLCBwYXNzZWQgYXMgdGhlXG4gICAqIHtAbGluayBPcHRpb25zQmFzZS5kaXNwb3NlfSBhbmQvb3JcbiAgICoge0BsaW5rIE9wdGlvbnNCYXNlLmRpc3Bvc2VBZnRlcn0gb3B0aW9ucy5cbiAgICovXG4gIGV4cG9ydCB0eXBlIERpc3Bvc2VyPEssIFY+ID0gKFxuICAgIHZhbHVlOiBWLFxuICAgIGtleTogSyxcbiAgICByZWFzb246IERpc3Bvc2VSZWFzb24sXG4gICkgPT4gdm9pZFxuXG4gIC8qKlxuICAgKiBUaGUgcmVhc29uIHdoeSBhbiBpdGVtIHdhcyBhZGRlZCB0byB0aGUgY2FjaGUsIHBhc3NlZFxuICAgKiB0byB0aGUge0BsaW5rIEluc2VydGVyfSBtZXRob2RzLlxuICAgKlxuICAgKiAtIGBhZGRgOiB0aGUgaXRlbSB3YXMgbm90IGZvdW5kIGluIHRoZSBjYWNoZSwgYW5kIHdhcyBhZGRlZFxuICAgKiAtIGB1cGRhdGVgOiB0aGUgaXRlbSB3YXMgaW4gdGhlIGNhY2hlLCB3aXRoIHRoZSBzYW1lIHZhbHVlIHByb3ZpZGVkXG4gICAqIC0gYHJlcGxhY2VgOiB0aGUgaXRlbSB3YXMgaW4gdGhlIGNhY2hlLCBhbmQgcmVwbGFjZWRcbiAgICovXG4gIGV4cG9ydCB0eXBlIEluc2VydFJlYXNvbiA9ICdhZGQnIHwgJ3VwZGF0ZScgfCAncmVwbGFjZSdcblxuICAvKipcbiAgICogQSBtZXRob2QgY2FsbGVkIHVwb24gaXRlbSBpbnNlcnRpb24sIHBhc3NlZCBhcyB0aGVcbiAgICoge0BsaW5rIE9wdGlvbnNCYXNlLmluc2VydH1cbiAgICovXG4gIGV4cG9ydCB0eXBlIEluc2VydGVyPEssIFY+ID0gKFxuICAgIHZhbHVlOiBWLFxuICAgIGtleTogSyxcbiAgICByZWFzb246IEluc2VydFJlYXNvbixcbiAgKSA9PiB2b2lkXG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBlZmZlY3RpdmUgY2FsY3VsYXRlZCBzaXplXG4gICAqIG9mIGFuIGVudHJ5IGluIHRoZSBjYWNoZS5cbiAgICovXG4gIGV4cG9ydCB0eXBlIFNpemVDYWxjdWxhdG9yPEssIFY+ID0gKHZhbHVlOiBWLCBrZXk6IEspID0+IFNpemVcblxuICAvKipcbiAgICogT3B0aW9ucyBwcm92aWRlZCB0byB0aGVcbiAgICoge0BsaW5rIE9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSBmdW5jdGlvbi5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgRmV0Y2hlck9wdGlvbnM8SywgViwgRkMgPSB1bmtub3duPiB7XG4gICAgc2lnbmFsOiBBYm9ydFNpZ25hbFxuICAgIG9wdGlvbnM6IEZldGNoZXJGZXRjaE9wdGlvbnM8SywgViwgRkM+XG4gICAgLyoqXG4gICAgICogT2JqZWN0IHByb3ZpZGVkIGluIHRoZSB7QGxpbmsgRmV0Y2hPcHRpb25zLmNvbnRleHR9IG9wdGlvbiB0b1xuICAgICAqIHtAbGluayBMUlVDYWNoZSNmZXRjaH1cbiAgICAgKi9cbiAgICBjb250ZXh0OiBGQ1xuICB9XG5cbiAgLyoqXG4gICAqIE9jY2FzaW9uYWxseSwgaXQgbWF5IGJlIHVzZWZ1bCB0byB0cmFjayB0aGUgaW50ZXJuYWwgYmVoYXZpb3Igb2YgdGhlXG4gICAqIGNhY2hlLCBwYXJ0aWN1bGFybHkgZm9yIGxvZ2dpbmcsIGRlYnVnZ2luZywgb3IgZm9yIGJlaGF2aW9yIHdpdGhpbiB0aGVcbiAgICogYGZldGNoTWV0aG9kYC4gVG8gZG8gdGhpcywgeW91IGNhbiBwYXNzIGEgYHN0YXR1c2Agb2JqZWN0IHRvIHRoZVxuICAgKiB7QGxpbmsgTFJVQ2FjaGUjZmV0Y2h9LCB7QGxpbmsgTFJVQ2FjaGUjZ2V0fSwge0BsaW5rIExSVUNhY2hlI3NldH0sXG4gICAqIHtAbGluayBMUlVDYWNoZSNtZW1vfSwgYW5kIHtAbGluayBMUlVDYWNoZSNoYXN9IG1ldGhvZHMuXG4gICAqXG4gICAqIFRoZSBgc3RhdHVzYCBvcHRpb24gc2hvdWxkIGJlIGEgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3QuIFRoZSBmb2xsb3dpbmdcbiAgICogZmllbGRzIHdpbGwgYmUgc2V0IG9uIGl0IGFwcHJvcHJpYXRlbHksIGRlcGVuZGluZyBvbiB0aGUgc2l0dWF0aW9uLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBTdGF0dXM8Vj4ge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGF0dXMgb2YgYSBzZXQoKSBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKiAtIGFkZDogdGhlIGl0ZW0gd2FzIG5vdCBmb3VuZCBpbiB0aGUgY2FjaGUsIGFuZCB3YXMgYWRkZWRcbiAgICAgKiAtIHVwZGF0ZTogdGhlIGl0ZW0gd2FzIGluIHRoZSBjYWNoZSwgd2l0aCB0aGUgc2FtZSB2YWx1ZSBwcm92aWRlZFxuICAgICAqIC0gcmVwbGFjZTogdGhlIGl0ZW0gd2FzIGluIHRoZSBjYWNoZSwgYW5kIHJlcGxhY2VkXG4gICAgICogLSBtaXNzOiB0aGUgaXRlbSB3YXMgbm90IGFkZGVkIHRvIHRoZSBjYWNoZSBmb3Igc29tZSByZWFzb25cbiAgICAgKi9cbiAgICBzZXQ/OiAnYWRkJyB8ICd1cGRhdGUnIHwgJ3JlcGxhY2UnIHwgJ21pc3MnXG5cbiAgICAvKipcbiAgICAgKiB0aGUgdHRsIHN0b3JlZCBmb3IgdGhlIGl0ZW0sIG9yIHVuZGVmaW5lZCBpZiB0dGxzIGFyZSBub3QgdXNlZC5cbiAgICAgKi9cbiAgICB0dGw/OiBNaWxsaXNlY29uZHNcblxuICAgIC8qKlxuICAgICAqIHRoZSBzdGFydCB0aW1lIGZvciB0aGUgaXRlbSwgb3IgdW5kZWZpbmVkIGlmIHR0bHMgYXJlIG5vdCB1c2VkLlxuICAgICAqL1xuICAgIHN0YXJ0PzogTWlsbGlzZWNvbmRzXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGltZXN0YW1wIHVzZWQgZm9yIFRUTCBjYWxjdWxhdGlvblxuICAgICAqL1xuICAgIG5vdz86IE1pbGxpc2Vjb25kc1xuXG4gICAgLyoqXG4gICAgICogdGhlIHJlbWFpbmluZyB0dGwgZm9yIHRoZSBpdGVtLCBvciB1bmRlZmluZWQgaWYgdHRscyBhcmUgbm90IHVzZWQuXG4gICAgICovXG4gICAgcmVtYWluaW5nVFRMPzogTWlsbGlzZWNvbmRzXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FsY3VsYXRlZCBzaXplIGZvciB0aGUgaXRlbSwgaWYgc2l6ZXMgYXJlIHVzZWQuXG4gICAgICovXG4gICAgZW50cnlTaXplPzogU2l6ZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIGNhbGN1bGF0ZWQgc2l6ZSBvZiB0aGUgY2FjaGUsIGlmIHNpemVzIGFyZSB1c2VkLlxuICAgICAqL1xuICAgIHRvdGFsQ2FsY3VsYXRlZFNpemU/OiBTaXplXG5cbiAgICAvKipcbiAgICAgKiBBIGZsYWcgaW5kaWNhdGluZyB0aGF0IHRoZSBpdGVtIHdhcyBub3Qgc3RvcmVkLCBkdWUgdG8gZXhjZWVkaW5nIHRoZVxuICAgICAqIHtAbGluayBPcHRpb25zQmFzZS5tYXhFbnRyeVNpemV9XG4gICAgICovXG4gICAgbWF4RW50cnlTaXplRXhjZWVkZWQ/OiB0cnVlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2xkIHZhbHVlLCBzcGVjaWZpZWQgaW4gdGhlIGNhc2Ugb2YgYHNldDondXBkYXRlJ2Agb3JcbiAgICAgKiBgc2V0OidyZXBsYWNlJ2BcbiAgICAgKi9cbiAgICBvbGRWYWx1ZT86IFZcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXN1bHRzIG9mIGEge0BsaW5rIExSVUNhY2hlI2hhc30gb3BlcmF0aW9uXG4gICAgICpcbiAgICAgKiAtIGhpdDogdGhlIGl0ZW0gd2FzIGZvdW5kIGluIHRoZSBjYWNoZVxuICAgICAqIC0gc3RhbGU6IHRoZSBpdGVtIHdhcyBmb3VuZCBpbiB0aGUgY2FjaGUsIGJ1dCBpcyBzdGFsZVxuICAgICAqIC0gbWlzczogdGhlIGl0ZW0gd2FzIG5vdCBmb3VuZCBpbiB0aGUgY2FjaGVcbiAgICAgKi9cbiAgICBoYXM/OiAnaGl0JyB8ICdzdGFsZScgfCAnbWlzcydcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdGF0dXMgb2YgYSB7QGxpbmsgTFJVQ2FjaGUjZmV0Y2h9IG9wZXJhdGlvbi5cbiAgICAgKiBOb3RlIHRoYXQgdGhpcyBjYW4gY2hhbmdlIGFzIHRoZSB1bmRlcmx5aW5nIGZldGNoKCkgbW92ZXMgdGhyb3VnaFxuICAgICAqIHZhcmlvdXMgc3RhdGVzLlxuICAgICAqXG4gICAgICogLSBpbmZsaWdodDogdGhlcmUgaXMgYW5vdGhlciBmZXRjaCgpIGZvciB0aGlzIGtleSB3aGljaCBpcyBpbiBwcm9jZXNzXG4gICAgICogLSBnZXQ6IHRoZXJlIGlzIG5vIHtAbGluayBPcHRpb25zQmFzZS5mZXRjaE1ldGhvZH0sIHNvXG4gICAgICogICB7QGxpbmsgTFJVQ2FjaGUjZ2V0fSB3YXMgY2FsbGVkLlxuICAgICAqIC0gbWlzczogdGhlIGl0ZW0gaXMgbm90IGluIGNhY2hlLCBhbmQgd2lsbCBiZSBmZXRjaGVkLlxuICAgICAqIC0gaGl0OiB0aGUgaXRlbSBpcyBpbiB0aGUgY2FjaGUsIGFuZCB3YXMgcmVzb2x2ZWQgaW1tZWRpYXRlbHkuXG4gICAgICogLSBzdGFsZTogdGhlIGl0ZW0gaXMgaW4gdGhlIGNhY2hlLCBidXQgc3RhbGUuXG4gICAgICogLSByZWZyZXNoOiB0aGUgaXRlbSBpcyBpbiB0aGUgY2FjaGUsIGFuZCBub3Qgc3RhbGUsIGJ1dFxuICAgICAqICAge0BsaW5rIEZldGNoT3B0aW9ucy5mb3JjZVJlZnJlc2h9IHdhcyBzcGVjaWZpZWQuXG4gICAgICovXG4gICAgZmV0Y2g/OiAnZ2V0JyB8ICdpbmZsaWdodCcgfCAnbWlzcycgfCAnaGl0JyB8ICdzdGFsZScgfCAncmVmcmVzaCdcblxuICAgIC8qKlxuICAgICAqIFRoZSB7QGxpbmsgT3B0aW9uc0Jhc2UuZmV0Y2hNZXRob2R9IHdhcyBjYWxsZWRcbiAgICAgKi9cbiAgICBmZXRjaERpc3BhdGNoZWQ/OiB0cnVlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FjaGVkIHZhbHVlIHdhcyB1cGRhdGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvXG4gICAgICoge0BsaW5rIE9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfVxuICAgICAqL1xuICAgIGZldGNoVXBkYXRlZD86IHRydWVcblxuICAgIC8qKlxuICAgICAqIFRoZSByZWFzb24gZm9yIGEgZmV0Y2goKSByZWplY3Rpb24uICBFaXRoZXIgdGhlIGVycm9yIHJhaXNlZCBieSB0aGVcbiAgICAgKiB7QGxpbmsgT3B0aW9uc0Jhc2UuZmV0Y2hNZXRob2R9LCBvciB0aGUgcmVhc29uIGZvciBhblxuICAgICAqIEFib3J0U2lnbmFsLlxuICAgICAqL1xuICAgIGZldGNoRXJyb3I/OiBFcnJvclxuXG4gICAgLyoqXG4gICAgICogVGhlIGZldGNoIHJlY2VpdmVkIGFuIGFib3J0IHNpZ25hbFxuICAgICAqL1xuICAgIGZldGNoQWJvcnRlZD86IHRydWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBhYm9ydCBzaWduYWwgcmVjZWl2ZWQgd2FzIGlnbm9yZWQsIGFuZCB0aGUgZmV0Y2ggd2FzIGFsbG93ZWQgdG9cbiAgICAgKiBjb250aW51ZS5cbiAgICAgKi9cbiAgICBmZXRjaEFib3J0SWdub3JlZD86IHRydWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBmZXRjaE1ldGhvZCBwcm9taXNlIHJlc29sdmVkIHN1Y2Nlc3NmdWxseVxuICAgICAqL1xuICAgIGZldGNoUmVzb2x2ZWQ/OiB0cnVlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZmV0Y2hNZXRob2QgcHJvbWlzZSB3YXMgcmVqZWN0ZWRcbiAgICAgKi9cbiAgICBmZXRjaFJlamVjdGVkPzogdHJ1ZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0YXR1cyBvZiBhIHtAbGluayBMUlVDYWNoZSNnZXR9IG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIC0gZmV0Y2hpbmc6IFRoZSBpdGVtIGlzIGN1cnJlbnRseSBiZWluZyBmZXRjaGVkLiAgSWYgYSBwcmV2aW91cyB2YWx1ZVxuICAgICAqICAgaXMgcHJlc2VudCBhbmQgYWxsb3dlZCwgdGhhdCB3aWxsIGJlIHJldHVybmVkLlxuICAgICAqIC0gc3RhbGU6IFRoZSBpdGVtIGlzIGluIHRoZSBjYWNoZSwgYW5kIGlzIHN0YWxlLlxuICAgICAqIC0gaGl0OiB0aGUgaXRlbSBpcyBpbiB0aGUgY2FjaGVcbiAgICAgKiAtIG1pc3M6IHRoZSBpdGVtIGlzIG5vdCBpbiB0aGUgY2FjaGVcbiAgICAgKi9cbiAgICBnZXQ/OiAnc3RhbGUnIHwgJ2hpdCcgfCAnbWlzcydcblxuICAgIC8qKlxuICAgICAqIEEgZmV0Y2ggb3IgZ2V0IG9wZXJhdGlvbiByZXR1cm5lZCBhIHN0YWxlIHZhbHVlLlxuICAgICAqL1xuICAgIHJldHVybmVkU3RhbGU/OiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogb3B0aW9ucyB3aGljaCBvdmVycmlkZSB0aGUgb3B0aW9ucyBzZXQgaW4gdGhlIExSVUNhY2hlIGNvbnN0cnVjdG9yXG4gICAqIHdoZW4gY2FsbGluZyB7QGxpbmsgTFJVQ2FjaGUjZmV0Y2h9LlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSB1bmlvbiBvZiB7QGxpbmsgR2V0T3B0aW9uc30gYW5kIHtAbGluayBTZXRPcHRpb25zfSwgcGx1c1xuICAgKiB7QGxpbmsgT3B0aW9uc0Jhc2Uubm9EZWxldGVPbkZldGNoUmVqZWN0aW9ufSxcbiAgICoge0BsaW5rIE9wdGlvbnNCYXNlLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9ufSxcbiAgICoge0BsaW5rIEZldGNoT3B0aW9ucy5mb3JjZVJlZnJlc2h9LCBhbmRcbiAgICoge0BsaW5rIEZldGNoZXJPcHRpb25zLmNvbnRleHR9XG4gICAqXG4gICAqIEFueSBvZiB0aGVzZSBtYXkgYmUgbW9kaWZpZWQgaW4gdGhlIHtAbGluayBPcHRpb25zQmFzZS5mZXRjaE1ldGhvZH1cbiAgICogZnVuY3Rpb24sIGJ1dCB0aGUge0BsaW5rIEdldE9wdGlvbnN9IGZpZWxkcyB3aWxsIG9mIGNvdXJzZSBoYXZlIG5vXG4gICAqIGVmZmVjdCwgYXMgdGhlIHtAbGluayBMUlVDYWNoZSNnZXR9IGNhbGwgYWxyZWFkeSBoYXBwZW5lZCBieSB0aGUgdGltZVxuICAgKiB0aGUgZmV0Y2hNZXRob2QgaXMgY2FsbGVkLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBGZXRjaGVyRmV0Y2hPcHRpb25zPEssIFYsIEZDID0gdW5rbm93bj5cbiAgICBleHRlbmRzIFBpY2s8XG4gICAgICBPcHRpb25zQmFzZTxLLCBWLCBGQz4sXG4gICAgICB8ICdhbGxvd1N0YWxlJ1xuICAgICAgfCAndXBkYXRlQWdlT25HZXQnXG4gICAgICB8ICdub0RlbGV0ZU9uU3RhbGVHZXQnXG4gICAgICB8ICdzaXplQ2FsY3VsYXRpb24nXG4gICAgICB8ICd0dGwnXG4gICAgICB8ICdub0Rpc3Bvc2VPblNldCdcbiAgICAgIHwgJ25vVXBkYXRlVFRMJ1xuICAgICAgfCAnbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uJ1xuICAgICAgfCAnYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb24nXG4gICAgICB8ICdpZ25vcmVGZXRjaEFib3J0J1xuICAgICAgfCAnYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCdcbiAgICA+IHtcbiAgICBzdGF0dXM/OiBTdGF0dXM8Vj5cbiAgICBzaXplPzogU2l6ZVxuICB9XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgdGhhdCBtYXkgYmUgcGFzc2VkIHRvIHRoZSB7QGxpbmsgTFJVQ2FjaGUjZmV0Y2h9IG1ldGhvZC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgRmV0Y2hPcHRpb25zPEssIFYsIEZDPlxuICAgIGV4dGVuZHMgRmV0Y2hlckZldGNoT3B0aW9uczxLLCBWLCBGQz4ge1xuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIHRvIGZvcmNlIGEgcmUtbG9hZCBvZiB0aGUgZXhpc3RpbmcgZGF0YSwgZXZlbiBpZiBpdFxuICAgICAqIGlzIG5vdCB5ZXQgc3RhbGUuXG4gICAgICovXG4gICAgZm9yY2VSZWZyZXNoPzogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbnRleHQgcHJvdmlkZWQgdG8gdGhlIHtAbGluayBPcHRpb25zQmFzZS5mZXRjaE1ldGhvZH0gYXNcbiAgICAgKiB0aGUge0BsaW5rIEZldGNoZXJPcHRpb25zLmNvbnRleHR9IHBhcmFtLlxuICAgICAqXG4gICAgICogSWYgdGhlIEZDIHR5cGUgaXMgc3BlY2lmaWVkIGFzIHVua25vd24gKHRoZSBkZWZhdWx0KSxcbiAgICAgKiB1bmRlZmluZWQgb3Igdm9pZCwgdGhlbiB0aGlzIGlzIG9wdGlvbmFsLiAgT3RoZXJ3aXNlLCBpdCB3aWxsXG4gICAgICogYmUgcmVxdWlyZWQuXG4gICAgICovXG4gICAgY29udGV4dD86IEZDXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICBzdGF0dXM/OiBTdGF0dXM8Vj5cbiAgfVxuICAvKipcbiAgICogT3B0aW9ucyBwcm92aWRlZCB0byB7QGxpbmsgTFJVQ2FjaGUjZmV0Y2h9IHdoZW4gdGhlIEZDIHR5cGUgaXMgc29tZXRoaW5nXG4gICAqIG90aGVyIHRoYW4gYHVua25vd25gLCBgdW5kZWZpbmVkYCwgb3IgYHZvaWRgXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEZldGNoT3B0aW9uc1dpdGhDb250ZXh0PEssIFYsIEZDPlxuICAgIGV4dGVuZHMgRmV0Y2hPcHRpb25zPEssIFYsIEZDPiB7XG4gICAgY29udGV4dDogRkNcbiAgfVxuICAvKipcbiAgICogT3B0aW9ucyBwcm92aWRlZCB0byB7QGxpbmsgTFJVQ2FjaGUjZmV0Y2h9IHdoZW4gdGhlIEZDIHR5cGUgaXNcbiAgICogYHVuZGVmaW5lZGAgb3IgYHZvaWRgXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEZldGNoT3B0aW9uc05vQ29udGV4dDxLLCBWPlxuICAgIGV4dGVuZHMgRmV0Y2hPcHRpb25zPEssIFYsIHVuZGVmaW5lZD4ge1xuICAgIGNvbnRleHQ/OiB1bmRlZmluZWRcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgTWVtb09wdGlvbnM8SywgViwgRkMgPSB1bmtub3duPlxuICAgIGV4dGVuZHMgUGljazxcbiAgICAgIE9wdGlvbnNCYXNlPEssIFYsIEZDPixcbiAgICAgIHwgJ2FsbG93U3RhbGUnXG4gICAgICB8ICd1cGRhdGVBZ2VPbkdldCdcbiAgICAgIHwgJ25vRGVsZXRlT25TdGFsZUdldCdcbiAgICAgIHwgJ3NpemVDYWxjdWxhdGlvbidcbiAgICAgIHwgJ3R0bCdcbiAgICAgIHwgJ25vRGlzcG9zZU9uU2V0J1xuICAgICAgfCAnbm9VcGRhdGVUVEwnXG4gICAgICB8ICdub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb24nXG4gICAgICB8ICdhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbidcbiAgICAgIHwgJ2lnbm9yZUZldGNoQWJvcnQnXG4gICAgICB8ICdhbGxvd1N0YWxlT25GZXRjaEFib3J0J1xuICAgID4ge1xuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIHRvIGZvcmNlIGEgcmUtbG9hZCBvZiB0aGUgZXhpc3RpbmcgZGF0YSwgZXZlbiBpZiBpdFxuICAgICAqIGlzIG5vdCB5ZXQgc3RhbGUuXG4gICAgICovXG4gICAgZm9yY2VSZWZyZXNoPzogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbnRleHQgcHJvdmlkZWQgdG8gdGhlIHtAbGluayBPcHRpb25zQmFzZS5tZW1vTWV0aG9kfSBhc1xuICAgICAqIHRoZSB7QGxpbmsgTWVtb2l6ZXJPcHRpb25zLmNvbnRleHR9IHBhcmFtLlxuICAgICAqXG4gICAgICogSWYgdGhlIEZDIHR5cGUgaXMgc3BlY2lmaWVkIGFzIHVua25vd24gKHRoZSBkZWZhdWx0KSxcbiAgICAgKiB1bmRlZmluZWQgb3Igdm9pZCwgdGhlbiB0aGlzIGlzIG9wdGlvbmFsLiAgT3RoZXJ3aXNlLCBpdCB3aWxsXG4gICAgICogYmUgcmVxdWlyZWQuXG4gICAgICovXG4gICAgY29udGV4dD86IEZDXG4gICAgc3RhdHVzPzogU3RhdHVzPFY+XG4gIH1cbiAgLyoqXG4gICAqIE9wdGlvbnMgcHJvdmlkZWQgdG8ge0BsaW5rIExSVUNhY2hlI21lbW99IHdoZW4gdGhlIEZDIHR5cGUgaXMgc29tZXRoaW5nXG4gICAqIG90aGVyIHRoYW4gYHVua25vd25gLCBgdW5kZWZpbmVkYCwgb3IgYHZvaWRgXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIE1lbW9PcHRpb25zV2l0aENvbnRleHQ8SywgViwgRkM+XG4gICAgZXh0ZW5kcyBNZW1vT3B0aW9uczxLLCBWLCBGQz4ge1xuICAgIGNvbnRleHQ6IEZDXG4gIH1cbiAgLyoqXG4gICAqIE9wdGlvbnMgcHJvdmlkZWQgdG8ge0BsaW5rIExSVUNhY2hlI21lbW99IHdoZW4gdGhlIEZDIHR5cGUgaXNcbiAgICogYHVuZGVmaW5lZGAgb3IgYHZvaWRgXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIE1lbW9PcHRpb25zTm9Db250ZXh0PEssIFY+XG4gICAgZXh0ZW5kcyBNZW1vT3B0aW9uczxLLCBWLCB1bmRlZmluZWQ+IHtcbiAgICBjb250ZXh0PzogdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogT3B0aW9ucyBwcm92aWRlZCB0byB0aGVcbiAgICoge0BsaW5rIE9wdGlvbnNCYXNlLm1lbW9NZXRob2R9IGZ1bmN0aW9uLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBNZW1vaXplck9wdGlvbnM8SywgViwgRkMgPSB1bmtub3duPiB7XG4gICAgb3B0aW9uczogTWVtb2l6ZXJNZW1vT3B0aW9uczxLLCBWLCBGQz5cbiAgICAvKipcbiAgICAgKiBPYmplY3QgcHJvdmlkZWQgaW4gdGhlIHtAbGluayBNZW1vT3B0aW9ucy5jb250ZXh0fSBvcHRpb24gdG9cbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUjbWVtb31cbiAgICAgKi9cbiAgICBjb250ZXh0OiBGQ1xuICB9XG5cbiAgLyoqXG4gICAqIG9wdGlvbnMgd2hpY2ggb3ZlcnJpZGUgdGhlIG9wdGlvbnMgc2V0IGluIHRoZSBMUlVDYWNoZSBjb25zdHJ1Y3RvclxuICAgKiB3aGVuIGNhbGxpbmcge0BsaW5rIExSVUNhY2hlI21lbW99LlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSB1bmlvbiBvZiB7QGxpbmsgR2V0T3B0aW9uc30gYW5kIHtAbGluayBTZXRPcHRpb25zfSwgcGx1c1xuICAgKiB7QGxpbmsgTWVtb09wdGlvbnMuZm9yY2VSZWZyZXNofSwgYW5kXG4gICAqIHtAbGluayBNZW1vT3B0aW9ucy5jb250ZXh0fVxuICAgKlxuICAgKiBBbnkgb2YgdGhlc2UgbWF5IGJlIG1vZGlmaWVkIGluIHRoZSB7QGxpbmsgT3B0aW9uc0Jhc2UubWVtb01ldGhvZH1cbiAgICogZnVuY3Rpb24sIGJ1dCB0aGUge0BsaW5rIEdldE9wdGlvbnN9IGZpZWxkcyB3aWxsIG9mIGNvdXJzZSBoYXZlIG5vXG4gICAqIGVmZmVjdCwgYXMgdGhlIHtAbGluayBMUlVDYWNoZSNnZXR9IGNhbGwgYWxyZWFkeSBoYXBwZW5lZCBieSB0aGUgdGltZVxuICAgKiB0aGUgbWVtb01ldGhvZCBpcyBjYWxsZWQuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIE1lbW9pemVyTWVtb09wdGlvbnM8SywgViwgRkMgPSB1bmtub3duPlxuICAgIGV4dGVuZHMgUGljazxcbiAgICAgIE9wdGlvbnNCYXNlPEssIFYsIEZDPixcbiAgICAgIHwgJ2FsbG93U3RhbGUnXG4gICAgICB8ICd1cGRhdGVBZ2VPbkdldCdcbiAgICAgIHwgJ25vRGVsZXRlT25TdGFsZUdldCdcbiAgICAgIHwgJ3NpemVDYWxjdWxhdGlvbidcbiAgICAgIHwgJ3R0bCdcbiAgICAgIHwgJ25vRGlzcG9zZU9uU2V0J1xuICAgICAgfCAnbm9VcGRhdGVUVEwnXG4gICAgPiB7XG4gICAgc3RhdHVzPzogU3RhdHVzPFY+XG4gICAgc2l6ZT86IFNpemVcbiAgICBzdGFydD86IE1pbGxpc2Vjb25kc1xuICB9XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgdGhhdCBtYXkgYmUgcGFzc2VkIHRvIHRoZSB7QGxpbmsgTFJVQ2FjaGUjaGFzfSBtZXRob2QuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEhhc09wdGlvbnM8SywgViwgRkM+XG4gICAgZXh0ZW5kcyBQaWNrPE9wdGlvbnNCYXNlPEssIFYsIEZDPiwgJ3VwZGF0ZUFnZU9uSGFzJz4ge1xuICAgIHN0YXR1cz86IFN0YXR1czxWPlxuICB9XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgdGhhdCBtYXkgYmUgcGFzc2VkIHRvIHRoZSB7QGxpbmsgTFJVQ2FjaGUjZ2V0fSBtZXRob2QuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEdldE9wdGlvbnM8SywgViwgRkM+XG4gICAgZXh0ZW5kcyBQaWNrPFxuICAgICAgT3B0aW9uc0Jhc2U8SywgViwgRkM+LFxuICAgICAgJ2FsbG93U3RhbGUnIHwgJ3VwZGF0ZUFnZU9uR2V0JyB8ICdub0RlbGV0ZU9uU3RhbGVHZXQnXG4gICAgPiB7XG4gICAgc3RhdHVzPzogU3RhdHVzPFY+XG4gIH1cblxuICAvKipcbiAgICogT3B0aW9ucyB0aGF0IG1heSBiZSBwYXNzZWQgdG8gdGhlIHtAbGluayBMUlVDYWNoZSNwZWVrfSBtZXRob2QuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFBlZWtPcHRpb25zPEssIFYsIEZDPlxuICAgIGV4dGVuZHMgUGljazxPcHRpb25zQmFzZTxLLCBWLCBGQz4sICdhbGxvd1N0YWxlJz4ge31cblxuICAvKipcbiAgICogT3B0aW9ucyB0aGF0IG1heSBiZSBwYXNzZWQgdG8gdGhlIHtAbGluayBMUlVDYWNoZSNzZXR9IG1ldGhvZC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgU2V0T3B0aW9uczxLLCBWLCBGQz5cbiAgICBleHRlbmRzIFBpY2s8XG4gICAgICBPcHRpb25zQmFzZTxLLCBWLCBGQz4sXG4gICAgICAnc2l6ZUNhbGN1bGF0aW9uJyB8ICd0dGwnIHwgJ25vRGlzcG9zZU9uU2V0JyB8ICdub1VwZGF0ZVRUTCdcbiAgICA+IHtcbiAgICAvKipcbiAgICAgKiBJZiBzaXplIHRyYWNraW5nIGlzIGVuYWJsZWQsIHRoZW4gc2V0dGluZyBhbiBleHBsaWNpdCBzaXplXG4gICAgICogaW4gdGhlIHtAbGluayBMUlVDYWNoZSNzZXR9IGNhbGwgd2lsbCBwcmV2ZW50IGNhbGxpbmcgdGhlXG4gICAgICoge0BsaW5rIE9wdGlvbnNCYXNlLnNpemVDYWxjdWxhdGlvbn0gZnVuY3Rpb24uXG4gICAgICovXG4gICAgc2l6ZT86IFNpemVcbiAgICAvKipcbiAgICAgKiBJZiBUVEwgdHJhY2tpbmcgaXMgZW5hYmxlZCwgdGhlbiBzZXR0aW5nIGFuIGV4cGxpY2l0IHN0YXJ0XG4gICAgICogdGltZSBpbiB0aGUge0BsaW5rIExSVUNhY2hlI3NldH0gY2FsbCB3aWxsIG92ZXJyaWRlIHRoZVxuICAgICAqIGRlZmF1bHQgdGltZSBmcm9tIGBwZXJmb3JtYW5jZS5ub3coKWAgb3IgYERhdGUubm93KClgLlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IGl0IG11c3QgYmUgYSB2YWxpZCB2YWx1ZSBmb3Igd2hpY2hldmVyIHRpbWUtdHJhY2tpbmdcbiAgICAgKiBtZXRob2QgaXMgaW4gdXNlLlxuICAgICAqL1xuICAgIHN0YXJ0PzogTWlsbGlzZWNvbmRzXG4gICAgc3RhdHVzPzogU3RhdHVzPFY+XG4gIH1cblxuICAvKipcbiAgICogVGhlIHR5cGUgc2lnbmF0dXJlIGZvciB0aGUge0BsaW5rIE9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSBvcHRpb24uXG4gICAqL1xuICBleHBvcnQgdHlwZSBGZXRjaGVyPEssIFYsIEZDID0gdW5rbm93bj4gPSAoXG4gICAga2V5OiBLLFxuICAgIHN0YWxlVmFsdWU6IFYgfCB1bmRlZmluZWQsXG4gICAgb3B0aW9uczogRmV0Y2hlck9wdGlvbnM8SywgViwgRkM+LFxuICApID0+IFByb21pc2U8ViB8IHVuZGVmaW5lZCB8IHZvaWQ+IHwgViB8IHVuZGVmaW5lZCB8IHZvaWRcblxuICAvKipcbiAgICogdGhlIHR5cGUgc2lnbmF0dXJlIGZvciB0aGUge0BsaW5rIE9wdGlvbnNCYXNlLm1lbW9NZXRob2R9IG9wdGlvbi5cbiAgICovXG4gIGV4cG9ydCB0eXBlIE1lbW9pemVyPEssIFYsIEZDID0gdW5rbm93bj4gPSAoXG4gICAga2V5OiBLLFxuICAgIHN0YWxlVmFsdWU6IFYgfCB1bmRlZmluZWQsXG4gICAgb3B0aW9uczogTWVtb2l6ZXJPcHRpb25zPEssIFYsIEZDPixcbiAgKSA9PiBWXG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgd2hpY2ggbWF5IGJlIHBhc3NlZCB0byB0aGUge0BsaW5rIExSVUNhY2hlfSBjb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogTW9zdCBvZiB0aGVzZSBtYXkgYmUgb3ZlcnJpZGRlbiBpbiB0aGUgdmFyaW91cyBvcHRpb25zIHRoYXQgdXNlXG4gICAqIHRoZW0uXG4gICAqXG4gICAqIERlc3BpdGUgYWxsIGJlaW5nIHRlY2huaWNhbGx5IG9wdGlvbmFsLCB0aGUgY29uc3RydWN0b3IgcmVxdWlyZXMgdGhhdFxuICAgKiBhIGNhY2hlIGlzIGF0IG1pbmltdW0gbGltaXRlZCBieSBvbmUgb3IgbW9yZSBvZiB7QGxpbmsgT3B0aW9uc0Jhc2UubWF4fSxcbiAgICoge0BsaW5rIE9wdGlvbnNCYXNlLnR0bH0sIG9yIHtAbGluayBPcHRpb25zQmFzZS5tYXhTaXplfS5cbiAgICpcbiAgICogSWYge0BsaW5rIE9wdGlvbnNCYXNlLnR0bH0gaXMgdXNlZCBhbG9uZSwgdGhlbiBpdCBpcyBzdHJvbmdseSBhZHZpc2VkXG4gICAqIChhbmQgaW4gZmFjdCByZXF1aXJlZCBieSB0aGUgdHlwZSBkZWZpbml0aW9ucyBoZXJlKSB0aGF0IHRoZSBjYWNoZVxuICAgKiBhbHNvIHNldCB7QGxpbmsgT3B0aW9uc0Jhc2UudHRsQXV0b3B1cmdlfSwgdG8gcHJldmVudCBwb3RlbnRpYWxseVxuICAgKiB1bmJvdW5kZWQgc3RvcmFnZS5cbiAgICpcbiAgICogQWxsIG9wdGlvbnMgYXJlIGFsc28gYXZhaWxhYmxlIG9uIHRoZSB7QGxpbmsgTFJVQ2FjaGV9IGluc3RhbmNlLCBtYWtpbmdcbiAgICogaXQgc2FmZSB0byBwYXNzIGFuIExSVUNhY2hlIGluc3RhbmNlIGFzIHRoZSBvcHRpb25zIGFyZ3VtZW1udCB0b1xuICAgKiBtYWtlIGFub3RoZXIgZW1wdHkgY2FjaGUgb2YgdGhlIHNhbWUgdHlwZS5cbiAgICpcbiAgICogU29tZSBvcHRpb25zIGFyZSBtYXJrZWQgYXMgcmVhZC1vbmx5LCBiZWNhdXNlIGNoYW5naW5nIHRoZW0gYWZ0ZXJcbiAgICogaW5zdGFudGlhdGlvbiBpcyBub3Qgc2FmZS4gQ2hhbmdpbmcgYW55IG9mIHRoZSBvdGhlciBvcHRpb25zIHdpbGwgb2ZcbiAgICogY291cnNlIG9ubHkgaGF2ZSBhbiBlZmZlY3Qgb24gc3Vic2VxdWVudCBtZXRob2QgY2FsbHMuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIE9wdGlvbnNCYXNlPEssIFYsIEZDPiB7XG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIHN0b3JlIGluIHRoZSBjYWNoZSBiZWZvcmUgZXZpY3RpbmdcbiAgICAgKiBvbGQgZW50cmllcy4gVGhpcyBpcyByZWFkLW9ubHkgb24gdGhlIHtAbGluayBMUlVDYWNoZX0gaW5zdGFuY2UsXG4gICAgICogYW5kIG1heSBub3QgYmUgb3ZlcnJpZGRlbi5cbiAgICAgKlxuICAgICAqIElmIHNldCwgdGhlbiBzdG9yYWdlIHNwYWNlIHdpbGwgYmUgcHJlLWFsbG9jYXRlZCBhdCBjb25zdHJ1Y3Rpb25cbiAgICAgKiB0aW1lLCBhbmQgdGhlIGNhY2hlIHdpbGwgcGVyZm9ybSBzaWduaWZpY2FudGx5IGZhc3Rlci5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCBzaWduaWZpY2FudGx5IGZld2VyIGl0ZW1zIG1heSBiZSBzdG9yZWQsIGlmXG4gICAgICoge0BsaW5rIE9wdGlvbnNCYXNlLm1heFNpemV9IGFuZC9vciB7QGxpbmsgT3B0aW9uc0Jhc2UudHRsfSBhcmUgYWxzb1xuICAgICAqIHNldC5cbiAgICAgKlxuICAgICAqICoqSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gc2V0IGEgYG1heGAgdG8gcHJldmVudCB1bmJvdW5kZWQgZ3Jvd3RoXG4gICAgICogb2YgdGhlIGNhY2hlLioqXG4gICAgICovXG4gICAgbWF4PzogQ291bnRcblxuICAgIC8qKlxuICAgICAqIE1heCB0aW1lIGluIG1pbGxpc2Vjb25kcyBmb3IgaXRlbXMgdG8gbGl2ZSBpbiBjYWNoZSBiZWZvcmUgdGhleSBhcmVcbiAgICAgKiBjb25zaWRlcmVkIHN0YWxlLiAgTm90ZSB0aGF0IHN0YWxlIGl0ZW1zIGFyZSBOT1QgcHJlZW1wdGl2ZWx5IHJlbW92ZWQgYnlcbiAgICAgKiBkZWZhdWx0LCBhbmQgTUFZIGxpdmUgaW4gdGhlIGNhY2hlLCBjb250cmlidXRpbmcgdG8gaXRzIExSVSBtYXgsIGxvbmdcbiAgICAgKiBhZnRlciB0aGV5IGhhdmUgZXhwaXJlZCwgdW5sZXNzIHtAbGluayBPcHRpb25zQmFzZS50dGxBdXRvcHVyZ2V9IGlzXG4gICAgICogc2V0LlxuICAgICAqXG4gICAgICogSWYgc2V0IHRvIGAwYCAodGhlIGRlZmF1bHQgdmFsdWUpLCB0aGVuIHRoYXQgbWVhbnMgXCJkbyBub3QgdHJhY2tcbiAgICAgKiBUVExcIiwgbm90IFwiZXhwaXJlIGltbWVkaWF0ZWx5XCIuXG4gICAgICpcbiAgICAgKiBBbHNvLCBhcyB0aGlzIGNhY2hlIGlzIG9wdGltaXplZCBmb3IgTFJVL01SVSBvcGVyYXRpb25zLCBzb21lIG9mXG4gICAgICogdGhlIHN0YWxlbmVzcy9UVEwgY2hlY2tzIHdpbGwgcmVkdWNlIHBlcmZvcm1hbmNlLCBhcyB0aGV5IHdpbGwgaW5jdXJcbiAgICAgKiBvdmVyaGVhZCBieSBkZWxldGluZyBpdGVtcy5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbm90IHByaW1hcmlseSBhIFRUTCBjYWNoZSwgYW5kIGRvZXMgbm90IG1ha2Ugc3Ryb25nIFRUTFxuICAgICAqIGd1YXJhbnRlZXMuIFRoZXJlIGlzIG5vIHByZS1lbXB0aXZlIHBydW5pbmcgb2YgZXhwaXJlZCBpdGVtcywgYnV0IHlvdVxuICAgICAqIF9tYXlfIHNldCBhIFRUTCBvbiB0aGUgY2FjaGUsIGFuZCBpdCB3aWxsIHRyZWF0IGV4cGlyZWQgaXRlbXMgYXMgbWlzc2luZ1xuICAgICAqIHdoZW4gdGhleSBhcmUgZmV0Y2hlZCwgYW5kIGRlbGV0ZSB0aGVtLlxuICAgICAqXG4gICAgICogT3B0aW9uYWwsIGJ1dCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgaW4gbXMgaWYgc3BlY2lmaWVkLlxuICAgICAqXG4gICAgICogVGhpcyBtYXkgYmUgb3ZlcnJpZGRlbiBieSBwYXNzaW5nIGFuIG9wdGlvbnMgb2JqZWN0IHRvIGBjYWNoZS5zZXQoKWAuXG4gICAgICpcbiAgICAgKiBBdCBsZWFzdCBvbmUgb2YgYG1heGAsIGBtYXhTaXplYCwgb3IgYFRUTGAgaXMgcmVxdWlyZWQuIFRoaXMgbXVzdCBiZSBhXG4gICAgICogcG9zaXRpdmUgaW50ZWdlciBpZiBzZXQuXG4gICAgICpcbiAgICAgKiBFdmVuIGlmIHR0bCB0cmFja2luZyBpcyBlbmFibGVkLCAqKml0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIHNldCBhXG4gICAgICogYG1heGAgdG8gcHJldmVudCB1bmJvdW5kZWQgZ3Jvd3RoIG9mIHRoZSBjYWNoZS4qKlxuICAgICAqXG4gICAgICogSWYgdHRsIHRyYWNraW5nIGlzIGVuYWJsZWQsIGFuZCBgbWF4YCBhbmQgYG1heFNpemVgIGFyZSBub3Qgc2V0LFxuICAgICAqIGFuZCBgdHRsQXV0b3B1cmdlYCBpcyBub3Qgc2V0LCB0aGVuIGEgd2FybmluZyB3aWxsIGJlIGVtaXR0ZWRcbiAgICAgKiBjYXV0aW9uaW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgZm9yIHVuYm91bmRlZCBtZW1vcnkgY29uc3VtcHRpb24uXG4gICAgICogKFRoZSBUeXBlU2NyaXB0IGRlZmluaXRpb25zIHdpbGwgYWxzbyBkaXNjb3VyYWdlIHRoaXMuKVxuICAgICAqL1xuICAgIHR0bD86IE1pbGxpc2Vjb25kc1xuXG4gICAgLyoqXG4gICAgICogTWluaW11bSBhbW91bnQgb2YgdGltZSBpbiBtcyBpbiB3aGljaCB0byBjaGVjayBmb3Igc3RhbGVuZXNzLlxuICAgICAqIERlZmF1bHRzIHRvIDEsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGN1cnJlbnQgdGltZSBpcyBjaGVja2VkXG4gICAgICogYXQgbW9zdCBvbmNlIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIFNldCB0byAwIHRvIGNoZWNrIHRoZSBjdXJyZW50IHRpbWUgZXZlcnkgdGltZSBzdGFsZW5lc3MgaXMgdGVzdGVkLlxuICAgICAqIChUaGlzIHJlZHVjZXMgcGVyZm9ybWFuY2UsIGFuZCBpcyB0aGVvcmV0aWNhbGx5IHVubmVjZXNzYXJ5LilcbiAgICAgKlxuICAgICAqIFNldHRpbmcgdGhpcyB0byBhIGhpZ2hlciB2YWx1ZSB3aWxsIGltcHJvdmUgcGVyZm9ybWFuY2Ugc29tZXdoYXRcbiAgICAgKiB3aGlsZSB1c2luZyB0dGwgdHJhY2tpbmcsIGFsYmVpdCBhdCB0aGUgZXhwZW5zZSBvZiBrZWVwaW5nIHN0YWxlXG4gICAgICogaXRlbXMgYXJvdW5kIGEgYml0IGxvbmdlciB0aGFuIHRoZWlyIFRUTHMgd291bGQgaW5kaWNhdGUuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdHRsUmVzb2x1dGlvbj86IE1pbGxpc2Vjb25kc1xuXG4gICAgLyoqXG4gICAgICogUHJlZW1wdGl2ZWx5IHJlbW92ZSBzdGFsZSBpdGVtcyBmcm9tIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB0aGlzIG1heSAqc2lnbmlmaWNhbnRseSogZGVncmFkZSBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBpZlxuICAgICAqIHRoZSBjYWNoZSBpcyBzdG9yaW5nIGEgbGFyZ2UgbnVtYmVyIG9mIGl0ZW1zLiBJdCBpcyBhbG1vc3QgYWx3YXlzIGJlc3RcbiAgICAgKiB0byBqdXN0IGxlYXZlIHRoZSBzdGFsZSBpdGVtcyBpbiB0aGUgY2FjaGUsIGFuZCBsZXQgdGhlbSBmYWxsIG91dCBhcyBuZXdcbiAgICAgKiBpdGVtcyBhcmUgYWRkZWQuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgdGhpcyBtZWFucyB0aGF0IHtAbGluayBPcHRpb25zQmFzZS5hbGxvd1N0YWxlfSBpcyBhIGJpdFxuICAgICAqIHBvaW50bGVzcywgYXMgc3RhbGUgaXRlbXMgd2lsbCBiZSBkZWxldGVkIGFsbW9zdCBhcyBzb29uIGFzIHRoZXlcbiAgICAgKiBleHBpcmUuXG4gICAgICpcbiAgICAgKiBVc2Ugd2l0aCBjYXV0aW9uIVxuICAgICAqL1xuICAgIHR0bEF1dG9wdXJnZT86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIFdoZW4gdXNpbmcgdGltZS1leHBpcmluZyBlbnRyaWVzIHdpdGggYHR0bGAsIHNldHRpbmcgdGhpcyB0byBgdHJ1ZWAgd2lsbFxuICAgICAqIG1ha2UgZWFjaCBpdGVtJ3MgYWdlIHJlc2V0IHRvIDAgd2hlbmV2ZXIgaXQgaXMgcmV0cmlldmVkIGZyb20gY2FjaGUgd2l0aFxuICAgICAqIHtAbGluayBMUlVDYWNoZSNnZXR9LCBjYXVzaW5nIGl0IHRvIG5vdCBleHBpcmUuIChJdCBjYW4gc3RpbGwgZmFsbCBvdXRcbiAgICAgKiBvZiBjYWNoZSBiYXNlZCBvbiByZWNlbmN5IG9mIHVzZSwgb2YgY291cnNlLilcbiAgICAgKlxuICAgICAqIEhhcyBubyBlZmZlY3QgaWYge0BsaW5rIE9wdGlvbnNCYXNlLnR0bH0gaXMgbm90IHNldC5cbiAgICAgKlxuICAgICAqIFRoaXMgbWF5IGJlIG92ZXJyaWRkZW4gYnkgcGFzc2luZyBhbiBvcHRpb25zIG9iamVjdCB0byBgY2FjaGUuZ2V0KClgLlxuICAgICAqL1xuICAgIHVwZGF0ZUFnZU9uR2V0PzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hlbiB1c2luZyB0aW1lLWV4cGlyaW5nIGVudHJpZXMgd2l0aCBgdHRsYCwgc2V0dGluZyB0aGlzIHRvIGB0cnVlYCB3aWxsXG4gICAgICogbWFrZSBlYWNoIGl0ZW0ncyBhZ2UgcmVzZXQgdG8gMCB3aGVuZXZlciBpdHMgcHJlc2VuY2UgaW4gdGhlIGNhY2hlIGlzXG4gICAgICogY2hlY2tlZCB3aXRoIHtAbGluayBMUlVDYWNoZSNoYXN9LCBjYXVzaW5nIGl0IHRvIG5vdCBleHBpcmUuIChJdCBjYW5cbiAgICAgKiBzdGlsbCBmYWxsIG91dCBvZiBjYWNoZSBiYXNlZCBvbiByZWNlbmN5IG9mIHVzZSwgb2YgY291cnNlLilcbiAgICAgKlxuICAgICAqIEhhcyBubyBlZmZlY3QgaWYge0BsaW5rIE9wdGlvbnNCYXNlLnR0bH0gaXMgbm90IHNldC5cbiAgICAgKi9cbiAgICB1cGRhdGVBZ2VPbkhhcz86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIEFsbG93IHtAbGluayBMUlVDYWNoZSNnZXR9IGFuZCB7QGxpbmsgTFJVQ2FjaGUjZmV0Y2h9IGNhbGxzIHRvIHJldHVyblxuICAgICAqIHN0YWxlIGRhdGEsIGlmIGF2YWlsYWJsZS5cbiAgICAgKlxuICAgICAqIEJ5IGRlZmF1bHQsIGlmIHlvdSBzZXQgYHR0bGAsIHN0YWxlIGl0ZW1zIHdpbGwgb25seSBiZSBkZWxldGVkIGZyb20gdGhlXG4gICAgICogY2FjaGUgd2hlbiB5b3UgYGdldChrZXkpYC4gVGhhdCBpcywgaXQncyBub3QgcHJlZW1wdGl2ZWx5IHBydW5pbmcgaXRlbXMsXG4gICAgICogdW5sZXNzIHtAbGluayBPcHRpb25zQmFzZS50dGxBdXRvcHVyZ2V9IGlzIHNldC5cbiAgICAgKlxuICAgICAqIElmIHlvdSBzZXQgYGFsbG93U3RhbGU6dHJ1ZWAsIGl0J2xsIHJldHVybiB0aGUgc3RhbGUgdmFsdWUgKmFzIHdlbGwgYXMqXG4gICAgICogZGVsZXRpbmcgaXQuIElmIHlvdSBkb24ndCBzZXQgdGhpcywgdGhlbiBpdCdsbCByZXR1cm4gYHVuZGVmaW5lZGAgd2hlblxuICAgICAqIHlvdSB0cnkgdG8gZ2V0IGEgc3RhbGUgZW50cnkuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgd2hlbiBhIHN0YWxlIGVudHJ5IGlzIGZldGNoZWQsIF9ldmVuIGlmIGl0IGlzIHJldHVybmVkIGR1ZSB0b1xuICAgICAqIGBhbGxvd1N0YWxlYCBiZWluZyBzZXRfLCBpdCBpcyByZW1vdmVkIGZyb20gdGhlIGNhY2hlIGltbWVkaWF0ZWx5LiBZb3VcbiAgICAgKiBjYW4gc3VwcHJlc3MgdGhpcyBiZWhhdmlvciBieSBzZXR0aW5nXG4gICAgICoge0BsaW5rIE9wdGlvbnNCYXNlLm5vRGVsZXRlT25TdGFsZUdldH0sIGVpdGhlciBpbiB0aGUgY29uc3RydWN0b3IsIG9yIGluXG4gICAgICogdGhlIG9wdGlvbnMgcHJvdmlkZWQgdG8ge0BsaW5rIExSVUNhY2hlI2dldH0uXG4gICAgICpcbiAgICAgKiBUaGlzIG1heSBiZSBvdmVycmlkZGVuIGJ5IHBhc3NpbmcgYW4gb3B0aW9ucyBvYmplY3QgdG8gYGNhY2hlLmdldCgpYC5cbiAgICAgKiBUaGUgYGNhY2hlLmhhcygpYCBtZXRob2Qgd2lsbCBhbHdheXMgcmV0dXJuIGBmYWxzZWAgZm9yIHN0YWxlIGl0ZW1zLlxuICAgICAqXG4gICAgICogT25seSByZWxldmFudCBpZiBhIHR0bCBpcyBzZXQuXG4gICAgICovXG4gICAgYWxsb3dTdGFsZT86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIG9uIGl0ZW1zIHdoZW4gdGhleSBhcmUgZHJvcHBlZCBmcm9tIHRoZVxuICAgICAqIGNhY2hlLCBhcyBgZGlzcG9zZSh2YWx1ZSwga2V5LCByZWFzb24pYC5cbiAgICAgKlxuICAgICAqIFRoaXMgY2FuIGJlIGhhbmR5IGlmIHlvdSB3YW50IHRvIGNsb3NlIGZpbGUgZGVzY3JpcHRvcnMgb3IgZG9cbiAgICAgKiBvdGhlciBjbGVhbnVwIHRhc2tzIHdoZW4gaXRlbXMgYXJlIG5vIGxvbmdlciBzdG9yZWQgaW4gdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogKipOT1RFKio6IEl0IGlzIGNhbGxlZCBfYmVmb3JlXyB0aGUgaXRlbSBoYXMgYmVlbiBmdWxseSByZW1vdmVkXG4gICAgICogZnJvbSB0aGUgY2FjaGUsIHNvIGlmIHlvdSB3YW50IHRvIHB1dCBpdCByaWdodCBiYWNrIGluLCB5b3UgbmVlZFxuICAgICAqIHRvIHdhaXQgdW50aWwgdGhlIG5leHQgdGljay4gSWYgeW91IHRyeSB0byBhZGQgaXQgYmFjayBpbiBkdXJpbmdcbiAgICAgKiB0aGUgYGRpc3Bvc2UoKWAgZnVuY3Rpb24gY2FsbCwgaXQgd2lsbCBicmVhayB0aGluZ3MgaW4gc3VidGxlIGFuZFxuICAgICAqIHdlaXJkIHdheXMuXG4gICAgICpcbiAgICAgKiBVbmxpa2Ugc2V2ZXJhbCBvdGhlciBvcHRpb25zLCB0aGlzIG1heSBfbm90XyBiZSBvdmVycmlkZGVuIGJ5XG4gICAgICogcGFzc2luZyBhbiBvcHRpb24gdG8gYHNldCgpYCwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuXG4gICAgICpcbiAgICAgKiBUaGUgYHJlYXNvbmAgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzdHJpbmdzLCBjb3JyZXNwb25kaW5nXG4gICAgICogdG8gdGhlIHJlYXNvbiBmb3IgdGhlIGl0ZW0ncyBkZWxldGlvbjpcbiAgICAgKlxuICAgICAqIC0gYGV2aWN0YCBJdGVtIHdhcyBldmljdGVkIHRvIG1ha2Ugc3BhY2UgZm9yIGEgbmV3IGFkZGl0aW9uXG4gICAgICogLSBgc2V0YCBJdGVtIHdhcyBvdmVyd3JpdHRlbiBieSBhIG5ldyB2YWx1ZVxuICAgICAqIC0gYGV4cGlyZWAgSXRlbSBleHBpcmVkIGl0cyBUVExcbiAgICAgKiAtIGBmZXRjaGAgSXRlbSB3YXMgZGVsZXRlZCBkdWUgdG8gYSBmYWlsZWQgb3IgYWJvcnRlZCBmZXRjaCwgb3IgYVxuICAgICAqICAgZmV0Y2hNZXRob2QgcmV0dXJuaW5nIGB1bmRlZmluZWQuXG4gICAgICogLSBgZGVsZXRlYCBJdGVtIHdhcyByZW1vdmVkIGJ5IGV4cGxpY2l0IGBjYWNoZS5kZWxldGUoa2V5KWAsXG4gICAgICogICBgY2FjaGUuY2xlYXIoKWAsIG9yIGBjYWNoZS5zZXQoa2V5LCB1bmRlZmluZWQpYC5cbiAgICAgKi9cbiAgICBkaXNwb3NlPzogRGlzcG9zZXI8SywgVj5cblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gbmV3IGl0ZW1zIGFyZSBpbnNlcnRlZCBpbnRvIHRoZSBjYWNoZSxcbiAgICAgKiBhcyBgb25JbnNlcnQodmFsdWUsIGtleSwgcmVhc29uKWAuXG4gICAgICpcbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91IG5lZWQgdG8gcGVyZm9ybSBhY3Rpb25zIHdoZW4gYW4gaXRlbSBpc1xuICAgICAqIGFkZGVkLCBzdWNoIGFzIGxvZ2dpbmcgb3IgdHJhY2tpbmcgaW5zZXJ0aW9ucy5cbiAgICAgKlxuICAgICAqIFVubGlrZSBzb21lIG90aGVyIG9wdGlvbnMsIHRoaXMgbWF5IF9ub3RfIGJlIG92ZXJyaWRkZW4gYnkgcGFzc2luZ1xuICAgICAqIGFuIG9wdGlvbiB0byBgc2V0KClgLCBmb3IgcGVyZm9ybWFuY2UgYW5kIGNvbnNpc3RlbmN5IHJlYXNvbnMuXG4gICAgICovXG4gICAgb25JbnNlcnQ/OiBJbnNlcnRlcjxLLCBWPlxuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMge0BsaW5rIE9wdGlvbnNCYXNlLmRpc3Bvc2V9LCBidXQgY2FsbGVkICphZnRlciogdGhlIGVudHJ5XG4gICAgICogaXMgY29tcGxldGVseSByZW1vdmVkIGFuZCB0aGUgY2FjaGUgaXMgb25jZSBhZ2FpbiBpbiBhIGNsZWFuIHN0YXRlLlxuICAgICAqXG4gICAgICogSXQgaXMgc2FmZSB0byBhZGQgYW4gaXRlbSByaWdodCBiYWNrIGludG8gdGhlIGNhY2hlIGF0IHRoaXMgcG9pbnQuXG4gICAgICogSG93ZXZlciwgbm90ZSB0aGF0IGl0IGlzICp2ZXJ5KiBlYXN5IHRvIGluYWR2ZXJ0ZW50bHkgY3JlYXRlIGluZmluaXRlXG4gICAgICogcmVjdXJzaW9uIHRoaXMgd2F5LlxuICAgICAqL1xuICAgIGRpc3Bvc2VBZnRlcj86IERpc3Bvc2VyPEssIFY+XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSB0byBzdXBwcmVzcyBjYWxsaW5nIHRoZVxuICAgICAqIHtAbGluayBPcHRpb25zQmFzZS5kaXNwb3NlfSBmdW5jdGlvbiBpZiB0aGUgZW50cnkga2V5IGlzXG4gICAgICogc3RpbGwgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogVGhpcyBtYXkgYmUgb3ZlcnJpZGRlbiBieSBwYXNzaW5nIGFuIG9wdGlvbnMgb2JqZWN0IHRvXG4gICAgICoge0BsaW5rIExSVUNhY2hlI3NldH0uXG4gICAgICpcbiAgICAgKiBPbmx5IHJlbGV2YW50IGlmIGBkaXNwb3NlYCBvciBgZGlzcG9zZUFmdGVyYCBhcmUgc2V0LlxuICAgICAqL1xuICAgIG5vRGlzcG9zZU9uU2V0PzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogQm9vbGVhbiBmbGFnIHRvIHRlbGwgdGhlIGNhY2hlIHRvIG5vdCB1cGRhdGUgdGhlIFRUTCB3aGVuIHNldHRpbmcgYSBuZXdcbiAgICAgKiB2YWx1ZSBmb3IgYW4gZXhpc3Rpbmcga2V5IChpZSwgd2hlbiB1cGRhdGluZyBhIHZhbHVlIHJhdGhlciB0aGFuXG4gICAgICogaW5zZXJ0aW5nIGEgbmV3IHZhbHVlKS4gIE5vdGUgdGhhdCB0aGUgVFRMIHZhbHVlIGlzIF9hbHdheXNfIHNldCAoaWZcbiAgICAgKiBwcm92aWRlZCkgd2hlbiBhZGRpbmcgYSBuZXcgZW50cnkgaW50byB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBIYXMgbm8gZWZmZWN0IGlmIGEge0BsaW5rIE9wdGlvbnNCYXNlLnR0bH0gaXMgbm90IHNldC5cbiAgICAgKlxuICAgICAqIE1heSBiZSBwYXNzZWQgYXMgYW4gb3B0aW9uIHRvIHtAbGluayBMUlVDYWNoZSNzZXR9LlxuICAgICAqL1xuICAgIG5vVXBkYXRlVFRMPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGEgcG9zaXRpdmUgaW50ZWdlciB0byB0cmFjayB0aGUgc2l6ZXMgb2YgaXRlbXMgYWRkZWQgdG8gdGhlXG4gICAgICogY2FjaGUsIGFuZCBhdXRvbWF0aWNhbGx5IGV2aWN0IGl0ZW1zIGluIG9yZGVyIHRvIHN0YXkgYmVsb3cgdGhpcyBzaXplLlxuICAgICAqIE5vdGUgdGhhdCB0aGlzIG1heSByZXN1bHQgaW4gZmV3ZXIgdGhhbiBgbWF4YCBpdGVtcyBiZWluZyBzdG9yZWQuXG4gICAgICpcbiAgICAgKiBBdHRlbXB0aW5nIHRvIGFkZCBhbiBpdGVtIHRvIHRoZSBjYWNoZSB3aG9zZSBjYWxjdWxhdGVkIHNpemUgaXMgZ3JlYXRlclxuICAgICAqIHRoYXQgdGhpcyBhbW91bnQgd2lsbCBiZSBhIG5vLW9wLiBUaGUgaXRlbSB3aWxsIG5vdCBiZSBjYWNoZWQsIGFuZCBub1xuICAgICAqIG90aGVyIGl0ZW1zIHdpbGwgYmUgZXZpY3RlZC5cbiAgICAgKlxuICAgICAqIE9wdGlvbmFsLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBwcm92aWRlZC5cbiAgICAgKlxuICAgICAqIFNldHMgYG1heEVudHJ5U2l6ZWAgdG8gdGhlIHNhbWUgdmFsdWUsIHVubGVzcyBhIGRpZmZlcmVudCB2YWx1ZSBpc1xuICAgICAqIHByb3ZpZGVkIGZvciBgbWF4RW50cnlTaXplYC5cbiAgICAgKlxuICAgICAqIEF0IGxlYXN0IG9uZSBvZiBgbWF4YCwgYG1heFNpemVgLCBvciBgVFRMYCBpcyByZXF1aXJlZC4gVGhpcyBtdXN0IGJlIGFcbiAgICAgKiBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHNldC5cbiAgICAgKlxuICAgICAqIEV2ZW4gaWYgc2l6ZSB0cmFja2luZyBpcyBlbmFibGVkLCAqKml0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIHNldCBhXG4gICAgICogYG1heGAgdG8gcHJldmVudCB1bmJvdW5kZWQgZ3Jvd3RoIG9mIHRoZSBjYWNoZS4qKlxuICAgICAqXG4gICAgICogTm90ZSBhbHNvIHRoYXQgc2l6ZSB0cmFja2luZyBjYW4gbmVnYXRpdmVseSBpbXBhY3QgcGVyZm9ybWFuY2UsXG4gICAgICogdGhvdWdoIGZvciBtb3N0IGNhc2VzLCBvbmx5IG1pbmltYWxseS5cbiAgICAgKi9cbiAgICBtYXhTaXplPzogU2l6ZVxuXG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gYWxsb3dlZCBzaXplIGZvciBhbnkgc2luZ2xlIGl0ZW0gaW4gdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogSWYgYSBsYXJnZXIgaXRlbSBpcyBwYXNzZWQgdG8ge0BsaW5rIExSVUNhY2hlI3NldH0gb3IgcmV0dXJuZWQgYnkgYVxuICAgICAqIHtAbGluayBPcHRpb25zQmFzZS5mZXRjaE1ldGhvZH0gb3Ige0BsaW5rIE9wdGlvbnNCYXNlLm1lbW9NZXRob2R9LCB0aGVuXG4gICAgICogaXQgd2lsbCBub3QgYmUgc3RvcmVkIGluIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEF0dGVtcHRpbmcgdG8gYWRkIGFuIGl0ZW0gd2hvc2UgY2FsY3VsYXRlZCBzaXplIGlzIGdyZWF0ZXIgdGhhblxuICAgICAqIHRoaXMgYW1vdW50IHdpbGwgbm90IGNhY2hlIHRoZSBpdGVtIG9yIGV2aWN0IGFueSBvbGQgaXRlbXMsIGJ1dFxuICAgICAqIFdJTEwgZGVsZXRlIGFuIGV4aXN0aW5nIHZhbHVlIGlmIG9uZSBpcyBhbHJlYWR5IHByZXNlbnQuXG4gICAgICpcbiAgICAgKiBPcHRpb25hbCwgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgaWYgcHJvdmlkZWQuIERlZmF1bHRzIHRvXG4gICAgICogdGhlIHZhbHVlIG9mIGBtYXhTaXplYCBpZiBwcm92aWRlZC5cbiAgICAgKi9cbiAgICBtYXhFbnRyeVNpemU/OiBTaXplXG5cbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIG51bWJlciBpbmRpY2F0aW5nIHRoZSBpdGVtJ3Mgc2l6ZS5cbiAgICAgKlxuICAgICAqIFJlcXVpcmVzIHtAbGluayBPcHRpb25zQmFzZS5tYXhTaXplfSB0byBiZSBzZXQuXG4gICAgICpcbiAgICAgKiBJZiBub3QgcHJvdmlkZWQsIGFuZCB7QGxpbmsgT3B0aW9uc0Jhc2UubWF4U2l6ZX0gb3JcbiAgICAgKiB7QGxpbmsgT3B0aW9uc0Jhc2UubWF4RW50cnlTaXplfSBhcmUgc2V0LCB0aGVuIGFsbFxuICAgICAqIHtAbGluayBMUlVDYWNoZSNzZXR9IGNhbGxzICoqbXVzdCoqIHByb3ZpZGUgYW4gZXhwbGljaXRcbiAgICAgKiB7QGxpbmsgU2V0T3B0aW9ucy5zaXplfSBvciBzaXplQ2FsY3VsYXRpb24gcGFyYW0uXG4gICAgICovXG4gICAgc2l6ZUNhbGN1bGF0aW9uPzogU2l6ZUNhbGN1bGF0b3I8SywgVj5cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB0aGF0IHByb3ZpZGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3Ige0BsaW5rIExSVUNhY2hlI2ZldGNofVxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBmZXRjaE1ldGhvZChrZXksIHN0YWxlVmFsdWUsIHsgc2lnbmFsLCBvcHRpb25zLCBjb250ZXh0IH0pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBJZiBgZmV0Y2hNZXRob2RgIGlzIG5vdCBwcm92aWRlZCwgdGhlbiBgY2FjaGUuZmV0Y2goa2V5KWAgaXMgZXF1aXZhbGVudFxuICAgICAqIHRvIGBQcm9taXNlLnJlc29sdmUoY2FjaGUuZ2V0KGtleSkpYC5cbiAgICAgKlxuICAgICAqIElmIGF0IGFueSB0aW1lLCBgc2lnbmFsLmFib3J0ZWRgIGlzIHNldCB0byBgdHJ1ZWAsIG9yIGlmIHRoZVxuICAgICAqIGBzaWduYWwub25hYm9ydGAgbWV0aG9kIGlzIGNhbGxlZCwgb3IgaWYgaXQgZW1pdHMgYW4gYCdhYm9ydCdgIGV2ZW50XG4gICAgICogd2hpY2ggeW91IGNhbiBsaXN0ZW4gdG8gd2l0aCBgYWRkRXZlbnRMaXN0ZW5lcmAsIHRoZW4gdGhhdCBtZWFucyB0aGF0XG4gICAgICogdGhlIGZldGNoIHNob3VsZCBiZSBhYmFuZG9uZWQuIFRoaXMgbWF5IGJlIHBhc3NlZCBhbG9uZyB0byBhc3luY1xuICAgICAqIGZ1bmN0aW9ucyBhd2FyZSBvZiBBYm9ydENvbnRyb2xsZXIvQWJvcnRTaWduYWwgYmVoYXZpb3IuXG4gICAgICpcbiAgICAgKiBUaGUgYGZldGNoTWV0aG9kYCBzaG91bGQgKipvbmx5KiogcmV0dXJuIGB1bmRlZmluZWRgIG9yIGEgUHJvbWlzZVxuICAgICAqIHJlc29sdmluZyB0byBgdW5kZWZpbmVkYCBpZiB0aGUgQWJvcnRDb250cm9sbGVyIHNpZ25hbGVkIGFuIGBhYm9ydGBcbiAgICAgKiBldmVudC4gSW4gYWxsIG90aGVyIGNhc2VzLCBpdCBzaG91bGQgcmV0dXJuIG9yIHJlc29sdmUgdG8gYSB2YWx1ZVxuICAgICAqIHN1aXRhYmxlIGZvciBhZGRpbmcgdG8gdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogVGhlIGBvcHRpb25zYCBvYmplY3QgaXMgYSB1bmlvbiBvZiB0aGUgb3B0aW9ucyB0aGF0IG1heSBiZSBwcm92aWRlZCB0b1xuICAgICAqIGBzZXQoKWAgYW5kIGBnZXQoKWAuIElmIHRoZXkgYXJlIG1vZGlmaWVkLCB0aGVuIHRoYXQgd2lsbCByZXN1bHQgaW5cbiAgICAgKiBtb2RpZnlpbmcgdGhlIHNldHRpbmdzIHRvIGBjYWNoZS5zZXQoKWAgd2hlbiB0aGUgdmFsdWUgaXMgcmVzb2x2ZWQsIGFuZFxuICAgICAqIGluIHRoZSBjYXNlIG9mXG4gICAgICoge0BsaW5rIE9wdGlvbnNCYXNlLm5vRGVsZXRlT25GZXRjaFJlamVjdGlvbn0gYW5kXG4gICAgICoge0BsaW5rIE9wdGlvbnNCYXNlLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9ufSwgdGhlIGhhbmRsaW5nIG9mXG4gICAgICogYGZldGNoTWV0aG9kYCBmYWlsdXJlcy5cbiAgICAgKlxuICAgICAqIEZvciBleGFtcGxlLCBhIEROUyBjYWNoZSBtYXkgdXBkYXRlIHRoZSBUVEwgYmFzZWQgb24gdGhlIHZhbHVlIHJldHVybmVkXG4gICAgICogZnJvbSBhIHJlbW90ZSBETlMgc2VydmVyIGJ5IGNoYW5naW5nIGBvcHRpb25zLnR0bGAgaW4gdGhlIGBmZXRjaE1ldGhvZGAuXG4gICAgICovXG4gICAgZmV0Y2hNZXRob2Q/OiBGZXRjaGVyPEssIFYsIEZDPlxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHRoYXQgcHJvdmlkZXMgdGhlIGltcGxlbWVudGF0aW9uIGZvciB7QGxpbmsgTFJVQ2FjaGUjbWVtb31cbiAgICAgKi9cbiAgICBtZW1vTWV0aG9kPzogTWVtb2l6ZXI8SywgViwgRkM+XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSB0byBzdXBwcmVzcyB0aGUgZGVsZXRpb24gb2Ygc3RhbGUgZGF0YSB3aGVuIGFcbiAgICAgKiB7QGxpbmsgT3B0aW9uc0Jhc2UuZmV0Y2hNZXRob2R9IHJldHVybnMgYSByZWplY3RlZCBwcm9taXNlLlxuICAgICAqL1xuICAgIG5vRGVsZXRlT25GZXRjaFJlamVjdGlvbj86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIERvIG5vdCBkZWxldGUgc3RhbGUgaXRlbXMgd2hlbiB0aGV5IGFyZSByZXRyaWV2ZWQgd2l0aFxuICAgICAqIHtAbGluayBMUlVDYWNoZSNnZXR9LlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IHRoZSBgZ2V0YCByZXR1cm4gdmFsdWUgd2lsbCBzdGlsbCBiZSBgdW5kZWZpbmVkYFxuICAgICAqIHVubGVzcyB7QGxpbmsgT3B0aW9uc0Jhc2UuYWxsb3dTdGFsZX0gaXMgdHJ1ZS5cbiAgICAgKlxuICAgICAqIFdoZW4gdXNpbmcgdGltZS1leHBpcmluZyBlbnRyaWVzIHdpdGggYHR0bGAsIGJ5IGRlZmF1bHQgc3RhbGVcbiAgICAgKiBpdGVtcyB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUgd2hlbiB0aGUga2V5IGlzIGFjY2Vzc2VkXG4gICAgICogd2l0aCBgY2FjaGUuZ2V0KClgLlxuICAgICAqXG4gICAgICogU2V0dGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHN0YWxlIGl0ZW1zIHRvIHJlbWFpbiBpbiB0aGUgY2FjaGUsIHVudGlsXG4gICAgICogdGhleSBhcmUgZXhwbGljaXRseSBkZWxldGVkIHdpdGggYGNhY2hlLmRlbGV0ZShrZXkpYCwgb3IgcmV0cmlldmVkIHdpdGhcbiAgICAgKiBgbm9EZWxldGVPblN0YWxlR2V0YCBzZXQgdG8gYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIFRoaXMgbWF5IGJlIG92ZXJyaWRkZW4gYnkgcGFzc2luZyBhbiBvcHRpb25zIG9iamVjdCB0byBgY2FjaGUuZ2V0KClgLlxuICAgICAqXG4gICAgICogT25seSByZWxldmFudCBpZiBhIHR0bCBpcyB1c2VkLlxuICAgICAqL1xuICAgIG5vRGVsZXRlT25TdGFsZUdldD86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIHRvIGFsbG93IHJldHVybmluZyBzdGFsZSBkYXRhIHdoZW4gYVxuICAgICAqIHtAbGluayBPcHRpb25zQmFzZS5mZXRjaE1ldGhvZH0gdGhyb3dzIGFuIGVycm9yIG9yIHJldHVybnMgYSByZWplY3RlZFxuICAgICAqIHByb21pc2UuXG4gICAgICpcbiAgICAgKiBUaGlzIGRpZmZlcnMgZnJvbSB1c2luZyB7QGxpbmsgT3B0aW9uc0Jhc2UuYWxsb3dTdGFsZX0gaW4gdGhhdCBzdGFsZVxuICAgICAqIGRhdGEgd2lsbCBPTkxZIGJlIHJldHVybmVkIGluIHRoZSBjYXNlIHRoYXQgdGhlIHtAbGluayBMUlVDYWNoZSNmZXRjaH1cbiAgICAgKiBmYWlscywgbm90IGFueSBvdGhlciB0aW1lcy5cbiAgICAgKlxuICAgICAqIElmIGEgYGZldGNoTWV0aG9kYCBmYWlscywgYW5kIHRoZXJlIGlzIG5vIHN0YWxlIHZhbHVlIGF2YWlsYWJsZSwgdGhlXG4gICAgICogYGZldGNoKClgIHdpbGwgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYC4gSWUsIGFsbCBgZmV0Y2hNZXRob2RgIGVycm9ycyBhcmVcbiAgICAgKiBzdXBwcmVzc2VkLlxuICAgICAqXG4gICAgICogSW1wbGllcyBgbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uYC5cbiAgICAgKlxuICAgICAqIFRoaXMgbWF5IGJlIHNldCBpbiBjYWxscyB0byBgZmV0Y2goKWAsIG9yIGRlZmF1bHRlZCBvbiB0aGUgY29uc3RydWN0b3IsXG4gICAgICogb3Igb3ZlcnJpZGRlbiBieSBtb2RpZnlpbmcgdGhlIG9wdGlvbnMgb2JqZWN0IGluIHRoZSBgZmV0Y2hNZXRob2RgLlxuICAgICAqL1xuICAgIGFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgdG8gcmV0dXJuIGEgc3RhbGUgdmFsdWUgZnJvbSB0aGUgY2FjaGUgd2hlbiB0aGVcbiAgICAgKiBgQWJvcnRTaWduYWxgIHBhc3NlZCB0byB0aGUge0BsaW5rIE9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSBkaXNwYXRjaGVzXG4gICAgICogYW4gYCdhYm9ydCdgIGV2ZW50LCB3aGV0aGVyIHVzZXItdHJpZ2dlcmVkLCBvciBkdWUgdG8gaW50ZXJuYWwgY2FjaGVcbiAgICAgKiBiZWhhdmlvci5cbiAgICAgKlxuICAgICAqIFVubGVzcyB7QGxpbmsgT3B0aW9uc0Jhc2UuaWdub3JlRmV0Y2hBYm9ydH0gaXMgYWxzbyBzZXQsIHRoZSB1bmRlcmx5aW5nXG4gICAgICoge0BsaW5rIE9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSB3aWxsIHN0aWxsIGJlIGNvbnNpZGVyZWQgY2FuY2VsZWQsIGFuZFxuICAgICAqIGFueSB2YWx1ZSBpdCByZXR1cm5zIHdpbGwgYmUgaWdub3JlZCBhbmQgbm90IGNhY2hlZC5cbiAgICAgKlxuICAgICAqIENhdmVhdDogc2luY2UgZmV0Y2hlcyBhcmUgYWJvcnRlZCB3aGVuIGEgbmV3IHZhbHVlIGlzIGV4cGxpY2l0bHlcbiAgICAgKiBzZXQgaW4gdGhlIGNhY2hlLCB0aGlzIGNhbiBsZWFkIHRvIGZldGNoIHJldHVybmluZyBhIHN0YWxlIHZhbHVlLFxuICAgICAqIHNpbmNlIHRoYXQgd2FzIHRoZSBmYWxsYmFjayB2YWx1ZSBfYXQgdGhlIG1vbWVudCB0aGUgYGZldGNoKClgIHdhc1xuICAgICAqIGluaXRpYXRlZF8sIGV2ZW4gdGhvdWdoIHRoZSBuZXcgdXBkYXRlZCB2YWx1ZSBpcyBub3cgcHJlc2VudCBpblxuICAgICAqIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEZvciBleGFtcGxlOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCBjYWNoZSA9IG5ldyBMUlVDYWNoZTxzdHJpbmcsIGFueT4oe1xuICAgICAqICAgdHRsOiAxMDAsXG4gICAgICogICBmZXRjaE1ldGhvZDogYXN5bmMgKHVybCwgb2xkVmFsdWUsIHsgc2lnbmFsIH0pID0+ICB7XG4gICAgICogICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwgeyBzaWduYWwgfSlcbiAgICAgKiAgICAgcmV0dXJuIGF3YWl0IHJlcy5qc29uKClcbiAgICAgKiAgIH1cbiAgICAgKiB9KVxuICAgICAqIGNhY2hlLnNldCgnaHR0cHM6Ly9leGFtcGxlLmNvbS8nLCB7IHNvbWU6ICdkYXRhJyB9KVxuICAgICAqIC8vIDEwMG1zIGdvIGJ5Li4uXG4gICAgICogY29uc3QgcmVzdWx0ID0gY2FjaGUuZmV0Y2goJ2h0dHBzOi8vZXhhbXBsZS5jb20vJylcbiAgICAgKiBjYWNoZS5zZXQoJ2h0dHBzOi8vZXhhbXBsZS5jb20vJywgeyBvdGhlcjogJ3RoaW5nJyB9KVxuICAgICAqIGNvbnNvbGUubG9nKGF3YWl0IHJlc3VsdCkgLy8geyBzb21lOiAnZGF0YScgfVxuICAgICAqIGNvbnNvbGUubG9nKGNhY2hlLmdldCgnaHR0cHM6Ly9leGFtcGxlLmNvbS8nKSkgLy8geyBvdGhlcjogJ3RoaW5nJyB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydD86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIHRvIGlnbm9yZSB0aGUgYGFib3J0YCBldmVudCBlbWl0dGVkIGJ5IHRoZSBgQWJvcnRTaWduYWxgXG4gICAgICogb2JqZWN0IHBhc3NlZCB0byB7QGxpbmsgT3B0aW9uc0Jhc2UuZmV0Y2hNZXRob2R9LCBhbmQgc3RpbGwgY2FjaGUgdGhlXG4gICAgICogcmVzdWx0aW5nIHJlc29sdXRpb24gdmFsdWUsIGFzIGxvbmcgYXMgaXQgaXMgbm90IGB1bmRlZmluZWRgLlxuICAgICAqXG4gICAgICogV2hlbiB1c2VkIG9uIGl0cyBvd24sIHRoaXMgbWVhbnMgYWJvcnRlZCB7QGxpbmsgTFJVQ2FjaGUjZmV0Y2h9IGNhbGxzXG4gICAgICogYXJlIG5vdCBpbW1lZGlhdGVseSByZXNvbHZlZCBvciByZWplY3RlZCB3aGVuIHRoZXkgYXJlIGFib3J0ZWQsIGFuZFxuICAgICAqIGluc3RlYWQgdGFrZSB0aGUgZnVsbCB0aW1lIHRvIGF3YWl0LlxuICAgICAqXG4gICAgICogV2hlbiB1c2VkIHdpdGgge0BsaW5rIE9wdGlvbnNCYXNlLmFsbG93U3RhbGVPbkZldGNoQWJvcnR9LCBhYm9ydGVkXG4gICAgICoge0BsaW5rIExSVUNhY2hlI2ZldGNofSBjYWxscyB3aWxsIHJlc29sdmUgaW1tZWRpYXRlbHkgdG8gdGhlaXIgc3RhbGVcbiAgICAgKiBjYWNoZWQgdmFsdWUgb3IgYHVuZGVmaW5lZGAsIGFuZCB3aWxsIGNvbnRpbnVlIHRvIHByb2Nlc3MgYW5kIGV2ZW50dWFsbHlcbiAgICAgKiB1cGRhdGUgdGhlIGNhY2hlIHdoZW4gdGhleSByZXNvbHZlLCBhcyBsb25nIGFzIHRoZSByZXN1bHRpbmcgdmFsdWUgaXNcbiAgICAgKiBub3QgYHVuZGVmaW5lZGAsIHRodXMgc3VwcG9ydGluZyBhIFwicmV0dXJuIHN0YWxlIG9uIHRpbWVvdXQgd2hpbGVcbiAgICAgKiByZWZyZXNoaW5nXCIgbWVjaGFuaXNtIGJ5IHBhc3NpbmcgYEFib3J0U2lnbmFsLnRpbWVvdXQobilgIGFzIHRoZSBzaWduYWwuXG4gICAgICpcbiAgICAgKiBGb3IgZXhhbXBsZTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgYyA9IG5ldyBMUlVDYWNoZSh7XG4gICAgICogICB0dGw6IDEwMCxcbiAgICAgKiAgIGlnbm9yZUZldGNoQWJvcnQ6IHRydWUsXG4gICAgICogICBhbGxvd1N0YWxlT25GZXRjaEFib3J0OiB0cnVlLFxuICAgICAqICAgZmV0Y2hNZXRob2Q6IGFzeW5jIChrZXksIG9sZFZhbHVlLCB7IHNpZ25hbCB9KSA9PiB7XG4gICAgICogICAgIC8vIG5vdGU6IGRvIE5PVCBwYXNzIHRoZSBzaWduYWwgdG8gZmV0Y2goKSFcbiAgICAgKiAgICAgLy8gbGV0J3Mgc2F5IHRoaXMgZmV0Y2ggY2FuIHRha2UgYSBsb25nIHRpbWUuXG4gICAgICogICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGBodHRwczovL3Nsb3ctYmFja2VuZC1zZXJ2ZXIvJHtrZXl9YClcbiAgICAgKiAgICAgcmV0dXJuIGF3YWl0IHJlcy5qc29uKClcbiAgICAgKiAgIH0sXG4gICAgICogfSlcbiAgICAgKlxuICAgICAqIC8vIHRoaXMgd2lsbCByZXR1cm4gdGhlIHN0YWxlIHZhbHVlIGFmdGVyIDEwMG1zLCB3aGlsZSBzdGlsbFxuICAgICAqIC8vIHVwZGF0aW5nIGluIHRoZSBiYWNrZ3JvdW5kIGZvciBuZXh0IHRpbWUuXG4gICAgICogY29uc3QgdmFsID0gYXdhaXQgYy5mZXRjaCgna2V5JywgeyBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQoMTAwKSB9KVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogKipOb3RlKio6IHJlZ2FyZGxlc3Mgb2YgdGhpcyBzZXR0aW5nLCBhbiBgYWJvcnRgIGV2ZW50IF9pcyBzdGlsbFxuICAgICAqIGVtaXR0ZWQgb24gdGhlIGBBYm9ydFNpZ25hbGAgb2JqZWN0Xywgc28gbWF5IHJlc3VsdCBpbiBpbnZhbGlkIHJlc3VsdHNcbiAgICAgKiB3aGVuIHBhc3NlZCB0byBvdGhlciB1bmRlcmx5aW5nIEFQSXMgdGhhdCB1c2UgQWJvcnRTaWduYWxzLlxuICAgICAqXG4gICAgICogVGhpcyBtYXkgYmUgb3ZlcnJpZGRlbiBpbiB0aGUge0BsaW5rIE9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSBvciB0aGVcbiAgICAgKiBjYWxsIHRvIHtAbGluayBMUlVDYWNoZSNmZXRjaH0uXG4gICAgICovXG4gICAgaWdub3JlRmV0Y2hBYm9ydD86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIEluIHNvbWUgY2FzZXMsIHlvdSBtYXkgd2FudCB0byBzd2FwIG91dCB0aGUgcGVyZm9ybWFuY2UvRGF0ZSBvYmplY3RcbiAgICAgKiB1c2VkIGZvciBUVEwgdHJhY2tpbmcuIFRoaXMgc2hvdWxkIGFsbW9zdCBjZXJ0YWlubHkgTk9UIGJlIGRvbmUgaW5cbiAgICAgKiBwcm9kdWN0aW9uIGVudmlyb25tZW50cyFcbiAgICAgKlxuICAgICAqIFRoaXMgdmFsdWUgZGVmYXVsdHMgdG8gYGdsb2JhbC5wZXJmb3JtYW5jZWAgaWYgaXQgaGFzIGEgYG5vdygpYCBtZXRob2QsXG4gICAgICogb3IgdGhlIGBnbG9iYWwuRGF0ZWAgb2JqZWN0IG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBwZXJmPzogUGVyZlxuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBPcHRpb25zTWF4TGltaXQ8SywgViwgRkM+XG4gICAgZXh0ZW5kcyBPcHRpb25zQmFzZTxLLCBWLCBGQz4ge1xuICAgIG1heDogQ291bnRcbiAgfVxuICBleHBvcnQgaW50ZXJmYWNlIE9wdGlvbnNUVExMaW1pdDxLLCBWLCBGQz5cbiAgICBleHRlbmRzIE9wdGlvbnNCYXNlPEssIFYsIEZDPiB7XG4gICAgdHRsOiBNaWxsaXNlY29uZHNcbiAgICB0dGxBdXRvcHVyZ2U6IGJvb2xlYW5cbiAgfVxuICBleHBvcnQgaW50ZXJmYWNlIE9wdGlvbnNTaXplTGltaXQ8SywgViwgRkM+XG4gICAgZXh0ZW5kcyBPcHRpb25zQmFzZTxLLCBWLCBGQz4ge1xuICAgIG1heFNpemU6IFNpemVcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdmFsaWQgc2FmZSBvcHRpb25zIGZvciB0aGUge0BsaW5rIExSVUNhY2hlfSBjb25zdHJ1Y3RvclxuICAgKi9cbiAgZXhwb3J0IHR5cGUgT3B0aW9uczxLLCBWLCBGQz4gPVxuICAgIHwgT3B0aW9uc01heExpbWl0PEssIFYsIEZDPlxuICAgIHwgT3B0aW9uc1NpemVMaW1pdDxLLCBWLCBGQz5cbiAgICB8IE9wdGlvbnNUVExMaW1pdDxLLCBWLCBGQz5cblxuICAvKipcbiAgICogRW50cnkgb2JqZWN0cyB1c2VkIGJ5IHtAbGluayBMUlVDYWNoZSNsb2FkfSBhbmQge0BsaW5rIExSVUNhY2hlI2R1bXB9LFxuICAgKiBhbmQgcmV0dXJuZWQgYnkge0BsaW5rIExSVUNhY2hlI2luZm99LlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBFbnRyeTxWPiB7XG4gICAgdmFsdWU6IFZcbiAgICB0dGw/OiBNaWxsaXNlY29uZHNcbiAgICBzaXplPzogU2l6ZVxuICAgIHN0YXJ0PzogTWlsbGlzZWNvbmRzXG4gIH1cbn1cblxuLyoqXG4gKiBEZWZhdWx0IGV4cG9ydCwgdGhlIHRoaW5nIHlvdSdyZSB1c2luZyB0aGlzIG1vZHVsZSB0byBnZXQuXG4gKlxuICogVGhlIGBLYCBhbmQgYFZgIHR5cGVzIGRlZmluZSB0aGUga2V5IGFuZCB2YWx1ZSB0eXBlcywgcmVzcGVjdGl2ZWx5LiBUaGVcbiAqIG9wdGlvbmFsIGBGQ2AgdHlwZSBkZWZpbmVzIHRoZSB0eXBlIG9mIHRoZSBgY29udGV4dGAgb2JqZWN0IHBhc3NlZCB0b1xuICogYGNhY2hlLmZldGNoKClgIGFuZCBgY2FjaGUubWVtbygpYC5cbiAqXG4gKiBLZXlzIGFuZCB2YWx1ZXMgKiptdXN0IG5vdCoqIGJlIGBudWxsYCBvciBgdW5kZWZpbmVkYC5cbiAqXG4gKiBBbGwgcHJvcGVydGllcyBmcm9tIHRoZSBvcHRpb25zIG9iamVjdCAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIGBtYXhgLFxuICogYG1heFNpemVgLCBgZmV0Y2hNZXRob2RgLCBgbWVtb01ldGhvZGAsIGBkaXNwb3NlYCBhbmQgYGRpc3Bvc2VBZnRlcmApIGFyZVxuICogYWRkZWQgYXMgbm9ybWFsIHB1YmxpYyBtZW1iZXJzLiAoVGhlIGxpc3RlZCBvcHRpb25zIGFyZSByZWFkLW9ubHkgZ2V0dGVycy4pXG4gKlxuICogQ2hhbmdpbmcgYW55IG9mIHRoZXNlIHdpbGwgYWx0ZXIgdGhlIGRlZmF1bHRzIGZvciBzdWJzZXF1ZW50IG1ldGhvZCBjYWxscy5cbiAqL1xuZXhwb3J0IGNsYXNzIExSVUNhY2hlPEsgZXh0ZW5kcyB7fSwgViBleHRlbmRzIHt9LCBGQyA9IHVua25vd24+IHtcbiAgLy8gb3B0aW9ucyB0aGF0IGNhbm5vdCBiZSBjaGFuZ2VkIHdpdGhvdXQgZGlzYXN0ZXJcbiAgcmVhZG9ubHkgI21heDogTFJVQ2FjaGUuQ291bnRcbiAgcmVhZG9ubHkgI21heFNpemU6IExSVUNhY2hlLlNpemVcbiAgcmVhZG9ubHkgI2Rpc3Bvc2U/OiBMUlVDYWNoZS5EaXNwb3NlcjxLLCBWPlxuICByZWFkb25seSAjb25JbnNlcnQ/OiBMUlVDYWNoZS5JbnNlcnRlcjxLLCBWPlxuICByZWFkb25seSAjZGlzcG9zZUFmdGVyPzogTFJVQ2FjaGUuRGlzcG9zZXI8SywgVj5cbiAgcmVhZG9ubHkgI2ZldGNoTWV0aG9kPzogTFJVQ2FjaGUuRmV0Y2hlcjxLLCBWLCBGQz5cbiAgcmVhZG9ubHkgI21lbW9NZXRob2Q/OiBMUlVDYWNoZS5NZW1vaXplcjxLLCBWLCBGQz5cbiAgcmVhZG9ubHkgI3BlcmY6IFBlcmZcblxuICAvKipcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnBlcmZ9XG4gICAqL1xuICBnZXQgcGVyZigpIHtcbiAgICByZXR1cm4gdGhpcy4jcGVyZlxuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS50dGx9XG4gICAqL1xuICB0dGw6IExSVUNhY2hlLk1pbGxpc2Vjb25kc1xuXG4gIC8qKlxuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UudHRsUmVzb2x1dGlvbn1cbiAgICovXG4gIHR0bFJlc29sdXRpb246IExSVUNhY2hlLk1pbGxpc2Vjb25kc1xuICAvKipcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnR0bEF1dG9wdXJnZX1cbiAgICovXG4gIHR0bEF1dG9wdXJnZTogYm9vbGVhblxuICAvKipcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnVwZGF0ZUFnZU9uR2V0fVxuICAgKi9cbiAgdXBkYXRlQWdlT25HZXQ6IGJvb2xlYW5cbiAgLyoqXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS51cGRhdGVBZ2VPbkhhc31cbiAgICovXG4gIHVwZGF0ZUFnZU9uSGFzOiBib29sZWFuXG4gIC8qKlxuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuYWxsb3dTdGFsZX1cbiAgICovXG4gIGFsbG93U3RhbGU6IGJvb2xlYW5cblxuICAvKipcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLm5vRGlzcG9zZU9uU2V0fVxuICAgKi9cbiAgbm9EaXNwb3NlT25TZXQ6IGJvb2xlYW5cbiAgLyoqXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5ub1VwZGF0ZVRUTH1cbiAgICovXG4gIG5vVXBkYXRlVFRMOiBib29sZWFuXG4gIC8qKlxuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UubWF4RW50cnlTaXplfVxuICAgKi9cbiAgbWF4RW50cnlTaXplOiBMUlVDYWNoZS5TaXplXG4gIC8qKlxuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2Uuc2l6ZUNhbGN1bGF0aW9ufVxuICAgKi9cbiAgc2l6ZUNhbGN1bGF0aW9uPzogTFJVQ2FjaGUuU2l6ZUNhbGN1bGF0b3I8SywgVj5cbiAgLyoqXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5ub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb259XG4gICAqL1xuICBub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb246IGJvb2xlYW5cbiAgLyoqXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5ub0RlbGV0ZU9uU3RhbGVHZXR9XG4gICAqL1xuICBub0RlbGV0ZU9uU3RhbGVHZXQ6IGJvb2xlYW5cbiAgLyoqXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5hbGxvd1N0YWxlT25GZXRjaEFib3J0fVxuICAgKi9cbiAgYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydDogYm9vbGVhblxuICAvKipcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9ufVxuICAgKi9cbiAgYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb246IGJvb2xlYW5cbiAgLyoqXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5pZ25vcmVGZXRjaEFib3J0fVxuICAgKi9cbiAgaWdub3JlRmV0Y2hBYm9ydDogYm9vbGVhblxuXG4gIC8vIGNvbXB1dGVkIHByb3BlcnRpZXNcbiAgI3NpemU6IExSVUNhY2hlLkNvdW50XG4gICNjYWxjdWxhdGVkU2l6ZTogTFJVQ2FjaGUuU2l6ZVxuICAja2V5TWFwOiBNYXA8SywgSW5kZXg+XG4gICNrZXlMaXN0OiAoSyB8IHVuZGVmaW5lZClbXVxuICAjdmFsTGlzdDogKFYgfCBCYWNrZ3JvdW5kRmV0Y2g8Vj4gfCB1bmRlZmluZWQpW11cbiAgI25leHQ6IE51bWJlckFycmF5XG4gICNwcmV2OiBOdW1iZXJBcnJheVxuICAjaGVhZDogSW5kZXhcbiAgI3RhaWw6IEluZGV4XG4gICNmcmVlOiBTdGFja0xpa2VcbiAgI2Rpc3Bvc2VkPzogRGlzcG9zZVRhc2s8SywgVj5bXVxuICAjc2l6ZXM/OiBaZXJvQXJyYXlcbiAgI3N0YXJ0cz86IFplcm9BcnJheVxuICAjdHRscz86IFplcm9BcnJheVxuICAjYXV0b3B1cmdlVGltZXJzPzogKHVuZGVmaW5lZCB8IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+KVtdXG5cbiAgI2hhc0Rpc3Bvc2U6IGJvb2xlYW5cbiAgI2hhc0ZldGNoTWV0aG9kOiBib29sZWFuXG4gICNoYXNEaXNwb3NlQWZ0ZXI6IGJvb2xlYW5cbiAgI2hhc09uSW5zZXJ0OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIERvIG5vdCBjYWxsIHRoaXMgbWV0aG9kIHVubGVzcyB5b3UgbmVlZCB0byBpbnNwZWN0IHRoZVxuICAgKiBpbm5lciB3b3JraW5ncyBvZiB0aGUgY2FjaGUuICBJZiBhbnl0aGluZyByZXR1cm5lZCBieSB0aGlzXG4gICAqIG9iamVjdCBpcyBtb2RpZmllZCBpbiBhbnkgd2F5LCBzdHJhbmdlIGJyZWFrYWdlIG1heSBvY2N1ci5cbiAgICpcbiAgICogVGhlc2UgZmllbGRzIGFyZSBwcml2YXRlIGZvciBhIHJlYXNvbiFcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBzdGF0aWMgdW5zYWZlRXhwb3NlSW50ZXJuYWxzPFxuICAgIEsgZXh0ZW5kcyB7fSxcbiAgICBWIGV4dGVuZHMge30sXG4gICAgRkMgZXh0ZW5kcyB1bmtub3duID0gdW5rbm93bixcbiAgPihjOiBMUlVDYWNoZTxLLCBWLCBGQz4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gcHJvcGVydGllc1xuICAgICAgc3RhcnRzOiBjLiNzdGFydHMsXG4gICAgICB0dGxzOiBjLiN0dGxzLFxuICAgICAgYXV0b3B1cmdlVGltZXJzOiBjLiNhdXRvcHVyZ2VUaW1lcnMsXG4gICAgICBzaXplczogYy4jc2l6ZXMsXG4gICAgICBrZXlNYXA6IGMuI2tleU1hcCBhcyBNYXA8SywgbnVtYmVyPixcbiAgICAgIGtleUxpc3Q6IGMuI2tleUxpc3QsXG4gICAgICB2YWxMaXN0OiBjLiN2YWxMaXN0LFxuICAgICAgbmV4dDogYy4jbmV4dCxcbiAgICAgIHByZXY6IGMuI3ByZXYsXG4gICAgICBnZXQgaGVhZCgpIHtcbiAgICAgICAgcmV0dXJuIGMuI2hlYWRcbiAgICAgIH0sXG4gICAgICBnZXQgdGFpbCgpIHtcbiAgICAgICAgcmV0dXJuIGMuI3RhaWxcbiAgICAgIH0sXG4gICAgICBmcmVlOiBjLiNmcmVlLFxuICAgICAgLy8gbWV0aG9kc1xuICAgICAgaXNCYWNrZ3JvdW5kRmV0Y2g6IChwOiBhbnkpID0+IGMuI2lzQmFja2dyb3VuZEZldGNoKHApLFxuICAgICAgYmFja2dyb3VuZEZldGNoOiAoXG4gICAgICAgIGs6IEssXG4gICAgICAgIGluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgICAgIG9wdGlvbnM6IExSVUNhY2hlLkZldGNoT3B0aW9uczxLLCBWLCBGQz4sXG4gICAgICAgIGNvbnRleHQ6IGFueSxcbiAgICAgICk6IEJhY2tncm91bmRGZXRjaDxWPiA9PlxuICAgICAgICBjLiNiYWNrZ3JvdW5kRmV0Y2goXG4gICAgICAgICAgayxcbiAgICAgICAgICBpbmRleCBhcyBJbmRleCB8IHVuZGVmaW5lZCxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICksXG4gICAgICBtb3ZlVG9UYWlsOiAoaW5kZXg6IG51bWJlcik6IHZvaWQgPT4gYy4jbW92ZVRvVGFpbChpbmRleCBhcyBJbmRleCksXG4gICAgICBpbmRleGVzOiAob3B0aW9ucz86IHsgYWxsb3dTdGFsZTogYm9vbGVhbiB9KSA9PiBjLiNpbmRleGVzKG9wdGlvbnMpLFxuICAgICAgcmluZGV4ZXM6IChvcHRpb25zPzogeyBhbGxvd1N0YWxlOiBib29sZWFuIH0pID0+XG4gICAgICAgIGMuI3JpbmRleGVzKG9wdGlvbnMpLFxuICAgICAgaXNTdGFsZTogKGluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQpID0+IGMuI2lzU3RhbGUoaW5kZXggYXMgSW5kZXgpLFxuICAgIH1cbiAgfVxuXG4gIC8vIFByb3RlY3RlZCByZWFkLW9ubHkgbWVtYmVyc1xuXG4gIC8qKlxuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UubWF4fSAocmVhZC1vbmx5KVxuICAgKi9cbiAgZ2V0IG1heCgpOiBMUlVDYWNoZS5Db3VudCB7XG4gICAgcmV0dXJuIHRoaXMuI21heFxuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UubWF4U2l6ZX0gKHJlYWQtb25seSlcbiAgICovXG4gIGdldCBtYXhTaXplKCk6IExSVUNhY2hlLkNvdW50IHtcbiAgICByZXR1cm4gdGhpcy4jbWF4U2l6ZVxuICB9XG4gIC8qKlxuICAgKiBUaGUgdG90YWwgY29tcHV0ZWQgc2l6ZSBvZiBpdGVtcyBpbiB0aGUgY2FjaGUgKHJlYWQtb25seSlcbiAgICovXG4gIGdldCBjYWxjdWxhdGVkU2l6ZSgpOiBMUlVDYWNoZS5TaXplIHtcbiAgICByZXR1cm4gdGhpcy4jY2FsY3VsYXRlZFNpemVcbiAgfVxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBpdGVtcyBzdG9yZWQgaW4gdGhlIGNhY2hlIChyZWFkLW9ubHkpXG4gICAqL1xuICBnZXQgc2l6ZSgpOiBMUlVDYWNoZS5Db3VudCB7XG4gICAgcmV0dXJuIHRoaXMuI3NpemVcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSAocmVhZC1vbmx5KVxuICAgKi9cbiAgZ2V0IGZldGNoTWV0aG9kKCk6IExSVUNhY2hlLkZldGNoZXI8SywgViwgRkM+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jZmV0Y2hNZXRob2RcbiAgfVxuICBnZXQgbWVtb01ldGhvZCgpOiBMUlVDYWNoZS5NZW1vaXplcjxLLCBWLCBGQz4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNtZW1vTWV0aG9kXG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5kaXNwb3NlfSAocmVhZC1vbmx5KVxuICAgKi9cbiAgZ2V0IGRpc3Bvc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2Rpc3Bvc2VcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLm9uSW5zZXJ0fSAocmVhZC1vbmx5KVxuICAgKi9cbiAgZ2V0IG9uSW5zZXJ0KCkge1xuICAgIHJldHVybiB0aGlzLiNvbkluc2VydFxuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuZGlzcG9zZUFmdGVyfSAocmVhZC1vbmx5KVxuICAgKi9cbiAgZ2V0IGRpc3Bvc2VBZnRlcigpIHtcbiAgICByZXR1cm4gdGhpcy4jZGlzcG9zZUFmdGVyXG4gIH1cblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBMUlVDYWNoZS5PcHRpb25zPEssIFYsIEZDPiB8IExSVUNhY2hlPEssIFYsIEZDPikge1xuICAgIGNvbnN0IHtcbiAgICAgIG1heCA9IDAsXG4gICAgICB0dGwsXG4gICAgICB0dGxSZXNvbHV0aW9uID0gMSxcbiAgICAgIHR0bEF1dG9wdXJnZSxcbiAgICAgIHVwZGF0ZUFnZU9uR2V0LFxuICAgICAgdXBkYXRlQWdlT25IYXMsXG4gICAgICBhbGxvd1N0YWxlLFxuICAgICAgZGlzcG9zZSxcbiAgICAgIG9uSW5zZXJ0LFxuICAgICAgZGlzcG9zZUFmdGVyLFxuICAgICAgbm9EaXNwb3NlT25TZXQsXG4gICAgICBub1VwZGF0ZVRUTCxcbiAgICAgIG1heFNpemUgPSAwLFxuICAgICAgbWF4RW50cnlTaXplID0gMCxcbiAgICAgIHNpemVDYWxjdWxhdGlvbixcbiAgICAgIGZldGNoTWV0aG9kLFxuICAgICAgbWVtb01ldGhvZCxcbiAgICAgIG5vRGVsZXRlT25GZXRjaFJlamVjdGlvbixcbiAgICAgIG5vRGVsZXRlT25TdGFsZUdldCxcbiAgICAgIGFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uLFxuICAgICAgYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCxcbiAgICAgIGlnbm9yZUZldGNoQWJvcnQsXG4gICAgICBwZXJmLFxuICAgIH0gPSBvcHRpb25zXG5cbiAgICBpZiAocGVyZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHBlcmY/Lm5vdyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICdwZXJmIG9wdGlvbiBtdXN0IGhhdmUgYSBub3coKSBtZXRob2QgaWYgc3BlY2lmaWVkJyxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuI3BlcmYgPSBwZXJmID8/IGRlZmF1bHRQZXJmXG5cbiAgICBpZiAobWF4ICE9PSAwICYmICFpc1Bvc0ludChtYXgpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYXggb3B0aW9uIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyJylcbiAgICB9XG5cbiAgICBjb25zdCBVaW50QXJyYXkgPSBtYXggPyBnZXRVaW50QXJyYXkobWF4KSA6IEFycmF5XG4gICAgaWYgKCFVaW50QXJyYXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBtYXggdmFsdWU6ICcgKyBtYXgpXG4gICAgfVxuXG4gICAgdGhpcy4jbWF4ID0gbWF4XG4gICAgdGhpcy4jbWF4U2l6ZSA9IG1heFNpemVcbiAgICB0aGlzLm1heEVudHJ5U2l6ZSA9IG1heEVudHJ5U2l6ZSB8fCB0aGlzLiNtYXhTaXplXG4gICAgdGhpcy5zaXplQ2FsY3VsYXRpb24gPSBzaXplQ2FsY3VsYXRpb25cbiAgICBpZiAodGhpcy5zaXplQ2FsY3VsYXRpb24pIHtcbiAgICAgIGlmICghdGhpcy4jbWF4U2l6ZSAmJiAhdGhpcy5tYXhFbnRyeVNpemUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnY2Fubm90IHNldCBzaXplQ2FsY3VsYXRpb24gd2l0aG91dCBzZXR0aW5nIG1heFNpemUgb3IgbWF4RW50cnlTaXplJyxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnNpemVDYWxjdWxhdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzaXplQ2FsY3VsYXRpb24gc2V0IHRvIG5vbi1mdW5jdGlvbicpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1lbW9NZXRob2QgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgbWVtb01ldGhvZCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWVtb01ldGhvZCBtdXN0IGJlIGEgZnVuY3Rpb24gaWYgZGVmaW5lZCcpXG4gICAgfVxuICAgIHRoaXMuI21lbW9NZXRob2QgPSBtZW1vTWV0aG9kXG5cbiAgICBpZiAoZmV0Y2hNZXRob2QgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZmV0Y2hNZXRob2QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ZldGNoTWV0aG9kIG11c3QgYmUgYSBmdW5jdGlvbiBpZiBzcGVjaWZpZWQnKVxuICAgIH1cbiAgICB0aGlzLiNmZXRjaE1ldGhvZCA9IGZldGNoTWV0aG9kXG4gICAgdGhpcy4jaGFzRmV0Y2hNZXRob2QgPSAhIWZldGNoTWV0aG9kXG5cbiAgICB0aGlzLiNrZXlNYXAgPSBuZXcgTWFwKClcbiAgICB0aGlzLiNrZXlMaXN0ID0gbmV3IEFycmF5KG1heCkuZmlsbCh1bmRlZmluZWQpXG4gICAgdGhpcy4jdmFsTGlzdCA9IG5ldyBBcnJheShtYXgpLmZpbGwodW5kZWZpbmVkKVxuICAgIHRoaXMuI25leHQgPSBuZXcgVWludEFycmF5KG1heClcbiAgICB0aGlzLiNwcmV2ID0gbmV3IFVpbnRBcnJheShtYXgpXG4gICAgdGhpcy4jaGVhZCA9IDAgYXMgSW5kZXhcbiAgICB0aGlzLiN0YWlsID0gMCBhcyBJbmRleFxuICAgIHRoaXMuI2ZyZWUgPSBTdGFjay5jcmVhdGUobWF4KVxuICAgIHRoaXMuI3NpemUgPSAwXG4gICAgdGhpcy4jY2FsY3VsYXRlZFNpemUgPSAwXG5cbiAgICBpZiAodHlwZW9mIGRpc3Bvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2Rpc3Bvc2UgPSBkaXNwb3NlXG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb25JbnNlcnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI29uSW5zZXJ0ID0gb25JbnNlcnRcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkaXNwb3NlQWZ0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2Rpc3Bvc2VBZnRlciA9IGRpc3Bvc2VBZnRlclxuICAgICAgdGhpcy4jZGlzcG9zZWQgPSBbXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNkaXNwb3NlQWZ0ZXIgPSB1bmRlZmluZWRcbiAgICAgIHRoaXMuI2Rpc3Bvc2VkID0gdW5kZWZpbmVkXG4gICAgfVxuICAgIHRoaXMuI2hhc0Rpc3Bvc2UgPSAhIXRoaXMuI2Rpc3Bvc2VcbiAgICB0aGlzLiNoYXNPbkluc2VydCA9ICEhdGhpcy4jb25JbnNlcnRcbiAgICB0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIgPSAhIXRoaXMuI2Rpc3Bvc2VBZnRlclxuXG4gICAgdGhpcy5ub0Rpc3Bvc2VPblNldCA9ICEhbm9EaXNwb3NlT25TZXRcbiAgICB0aGlzLm5vVXBkYXRlVFRMID0gISFub1VwZGF0ZVRUTFxuICAgIHRoaXMubm9EZWxldGVPbkZldGNoUmVqZWN0aW9uID0gISFub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb25cbiAgICB0aGlzLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uID0gISFhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvblxuICAgIHRoaXMuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCA9ICEhYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydFxuICAgIHRoaXMuaWdub3JlRmV0Y2hBYm9ydCA9ICEhaWdub3JlRmV0Y2hBYm9ydFxuXG4gICAgLy8gTkI6IG1heEVudHJ5U2l6ZSBpcyBzZXQgdG8gbWF4U2l6ZSBpZiBpdCdzIHNldFxuICAgIGlmICh0aGlzLm1heEVudHJ5U2l6ZSAhPT0gMCkge1xuICAgICAgaWYgKHRoaXMuI21heFNpemUgIT09IDApIHtcbiAgICAgICAgaWYgKCFpc1Bvc0ludCh0aGlzLiNtYXhTaXplKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAnbWF4U2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBzcGVjaWZpZWQnLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFpc1Bvc0ludCh0aGlzLm1heEVudHJ5U2l6ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnbWF4RW50cnlTaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHNwZWNpZmllZCcsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHRoaXMuI2luaXRpYWxpemVTaXplVHJhY2tpbmcoKVxuICAgIH1cblxuICAgIHRoaXMuYWxsb3dTdGFsZSA9ICEhYWxsb3dTdGFsZVxuICAgIHRoaXMubm9EZWxldGVPblN0YWxlR2V0ID0gISFub0RlbGV0ZU9uU3RhbGVHZXRcbiAgICB0aGlzLnVwZGF0ZUFnZU9uR2V0ID0gISF1cGRhdGVBZ2VPbkdldFxuICAgIHRoaXMudXBkYXRlQWdlT25IYXMgPSAhIXVwZGF0ZUFnZU9uSGFzXG4gICAgdGhpcy50dGxSZXNvbHV0aW9uID1cbiAgICAgIGlzUG9zSW50KHR0bFJlc29sdXRpb24pIHx8IHR0bFJlc29sdXRpb24gPT09IDAgPyB0dGxSZXNvbHV0aW9uIDogMVxuICAgIHRoaXMudHRsQXV0b3B1cmdlID0gISF0dGxBdXRvcHVyZ2VcbiAgICB0aGlzLnR0bCA9IHR0bCB8fCAwXG4gICAgaWYgKHRoaXMudHRsKSB7XG4gICAgICBpZiAoIWlzUG9zSW50KHRoaXMudHRsKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0dGwgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgaWYgc3BlY2lmaWVkJylcbiAgICAgIH1cbiAgICAgIHRoaXMuI2luaXRpYWxpemVUVExUcmFja2luZygpXG4gICAgfVxuXG4gICAgLy8gZG8gbm90IGFsbG93IGNvbXBsZXRlbHkgdW5ib3VuZGVkIGNhY2hlc1xuICAgIGlmICh0aGlzLiNtYXggPT09IDAgJiYgdGhpcy50dGwgPT09IDAgJiYgdGhpcy4jbWF4U2l6ZSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ0F0IGxlYXN0IG9uZSBvZiBtYXgsIG1heFNpemUsIG9yIHR0bCBpcyByZXF1aXJlZCcsXG4gICAgICApXG4gICAgfVxuICAgIGlmICghdGhpcy50dGxBdXRvcHVyZ2UgJiYgIXRoaXMuI21heCAmJiAhdGhpcy4jbWF4U2l6ZSkge1xuICAgICAgY29uc3QgY29kZSA9ICdMUlVfQ0FDSEVfVU5CT1VOREVEJ1xuICAgICAgaWYgKHNob3VsZFdhcm4oY29kZSkpIHtcbiAgICAgICAgd2FybmVkLmFkZChjb2RlKVxuICAgICAgICBjb25zdCBtc2cgPVxuICAgICAgICAgICdUVEwgY2FjaGluZyB3aXRob3V0IHR0bEF1dG9wdXJnZSwgbWF4LCBvciBtYXhTaXplIGNhbiAnICtcbiAgICAgICAgICAncmVzdWx0IGluIHVuYm91bmRlZCBtZW1vcnkgY29uc3VtcHRpb24uJ1xuICAgICAgICBlbWl0V2FybmluZyhtc2csICdVbmJvdW5kZWRDYWNoZVdhcm5pbmcnLCBjb2RlLCBMUlVDYWNoZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgbXMgbGVmdCBpbiB0aGUgaXRlbSdzIFRUTC4gSWYgaXRlbSBpcyBub3QgaW4gY2FjaGUsXG4gICAqIHJldHVybnMgYDBgLiBSZXR1cm5zIGBJbmZpbml0eWAgaWYgaXRlbSBpcyBpbiBjYWNoZSB3aXRob3V0IGEgZGVmaW5lZCBUVEwuXG4gICAqL1xuICBnZXRSZW1haW5pbmdUVEwoa2V5OiBLKSB7XG4gICAgcmV0dXJuIHRoaXMuI2tleU1hcC5oYXMoa2V5KSA/IEluZmluaXR5IDogMFxuICB9XG5cbiAgI2luaXRpYWxpemVUVExUcmFja2luZygpIHtcbiAgICBjb25zdCB0dGxzID0gbmV3IFplcm9BcnJheSh0aGlzLiNtYXgpXG4gICAgY29uc3Qgc3RhcnRzID0gbmV3IFplcm9BcnJheSh0aGlzLiNtYXgpXG4gICAgdGhpcy4jdHRscyA9IHR0bHNcbiAgICB0aGlzLiNzdGFydHMgPSBzdGFydHNcbiAgICBjb25zdCBwdXJnZVRpbWVycyA9XG4gICAgICB0aGlzLnR0bEF1dG9wdXJnZSA/XG4gICAgICAgIG5ldyBBcnJheTx1bmRlZmluZWQgfCBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0Pj4odGhpcy4jbWF4KVxuICAgICAgOiB1bmRlZmluZWRcbiAgICB0aGlzLiNhdXRvcHVyZ2VUaW1lcnMgPSBwdXJnZVRpbWVyc1xuXG4gICAgdGhpcy4jc2V0SXRlbVRUTCA9IChpbmRleCwgdHRsLCBzdGFydCA9IHRoaXMuI3BlcmYubm93KCkpID0+IHtcbiAgICAgIHN0YXJ0c1tpbmRleF0gPSB0dGwgIT09IDAgPyBzdGFydCA6IDBcbiAgICAgIHR0bHNbaW5kZXhdID0gdHRsXG4gICAgICBzZXRQdXJnZXRUaW1lcihpbmRleCwgdHRsKVxuICAgIH1cblxuICAgIHRoaXMuI3VwZGF0ZUl0ZW1BZ2UgPSBpbmRleCA9PiB7XG4gICAgICBzdGFydHNbaW5kZXhdID0gdHRsc1tpbmRleF0gIT09IDAgPyB0aGlzLiNwZXJmLm5vdygpIDogMFxuICAgICAgc2V0UHVyZ2V0VGltZXIoaW5kZXgsIHR0bHNbaW5kZXhdKVxuICAgIH1cblxuICAgIC8vIGNsZWFyIG91dCB0aGUgcHVyZ2UgdGltZXIgaWYgd2UncmUgc2V0dGluZyBUVEwgdG8gMCwgYW5kXG4gICAgLy8gcHJldmlvdXNseSBoYWQgYSB0dGwgcHVyZ2UgdGltZXIgcnVubmluZywgc28gaXQgZG9lc24ndFxuICAgIC8vIGZpcmUgdW5uZWNlc3NhcmlseS4gRG9uJ3QgbmVlZCB0byBkbyB0aGlzIGlmIHdlJ3JlIG5vdCBkb2luZ1xuICAgIC8vIGF1dG9wdXJnZS5cbiAgICBjb25zdCBzZXRQdXJnZXRUaW1lciA9XG4gICAgICAhdGhpcy50dGxBdXRvcHVyZ2UgP1xuICAgICAgICAoKSA9PiB7fVxuICAgICAgOiAoaW5kZXg6IEluZGV4LCB0dGw/OiBudW1iZXIpID0+IHtcbiAgICAgICAgICBpZiAocHVyZ2VUaW1lcnM/LltpbmRleF0pIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChwdXJnZVRpbWVyc1tpbmRleF0pXG4gICAgICAgICAgICBwdXJnZVRpbWVyc1tpbmRleF0gPSB1bmRlZmluZWRcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR0bCAmJiB0dGwgIT09IDAgJiYgcHVyZ2VUaW1lcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuI2lzU3RhbGUoaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGVsZXRlKHRoaXMuI2tleUxpc3RbaW5kZXhdIGFzIEssICdleHBpcmUnKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0dGwgKyAxKVxuICAgICAgICAgICAgLy8gdW5yZWYoKSBub3Qgc3VwcG9ydGVkIG9uIGFsbCBwbGF0Zm9ybXNcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgaWYgKHQudW5yZWYpIHtcbiAgICAgICAgICAgICAgdC51bnJlZigpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgcHVyZ2VUaW1lcnNbaW5kZXhdID0gdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgdGhpcy4jc3RhdHVzVFRMID0gKHN0YXR1cywgaW5kZXgpID0+IHtcbiAgICAgIGlmICh0dGxzW2luZGV4XSkge1xuICAgICAgICBjb25zdCB0dGwgPSB0dGxzW2luZGV4XVxuICAgICAgICBjb25zdCBzdGFydCA9IHN0YXJ0c1tpbmRleF1cbiAgICAgICAgLyogYzggaWdub3JlIG5leHQgKi9cbiAgICAgICAgaWYgKCF0dGwgfHwgIXN0YXJ0KSByZXR1cm5cbiAgICAgICAgc3RhdHVzLnR0bCA9IHR0bFxuICAgICAgICBzdGF0dXMuc3RhcnQgPSBzdGFydFxuICAgICAgICBzdGF0dXMubm93ID0gY2FjaGVkTm93IHx8IGdldE5vdygpXG4gICAgICAgIGNvbnN0IGFnZSA9IHN0YXR1cy5ub3cgLSBzdGFydFxuICAgICAgICBzdGF0dXMucmVtYWluaW5nVFRMID0gdHRsIC0gYWdlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGVib3VuY2UgY2FsbHMgdG8gcGVyZi5ub3coKSB0byAxcyBzbyB3ZSdyZSBub3QgaGl0dGluZ1xuICAgIC8vIHRoYXQgY29zdGx5IGNhbGwgcmVwZWF0ZWRseS5cbiAgICBsZXQgY2FjaGVkTm93ID0gMFxuICAgIGNvbnN0IGdldE5vdyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IG4gPSB0aGlzLiNwZXJmLm5vdygpXG4gICAgICBpZiAodGhpcy50dGxSZXNvbHV0aW9uID4gMCkge1xuICAgICAgICBjYWNoZWROb3cgPSBuXG4gICAgICAgIGNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IChjYWNoZWROb3cgPSAwKSwgdGhpcy50dGxSZXNvbHV0aW9uKVxuICAgICAgICAvLyBub3QgYXZhaWxhYmxlIG9uIGFsbCBwbGF0Zm9ybXNcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0LnVucmVmKSB7XG4gICAgICAgICAgdC51bnJlZigpXG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgIH1cbiAgICAgIHJldHVybiBuXG4gICAgfVxuXG4gICAgdGhpcy5nZXRSZW1haW5pbmdUVEwgPSBrZXkgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGtleSlcbiAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAwXG4gICAgICB9XG4gICAgICBjb25zdCB0dGwgPSB0dGxzW2luZGV4XVxuICAgICAgY29uc3Qgc3RhcnQgPSBzdGFydHNbaW5kZXhdXG4gICAgICBpZiAoIXR0bCB8fCAhc3RhcnQpIHtcbiAgICAgICAgcmV0dXJuIEluZmluaXR5XG4gICAgICB9XG4gICAgICBjb25zdCBhZ2UgPSAoY2FjaGVkTm93IHx8IGdldE5vdygpKSAtIHN0YXJ0XG4gICAgICByZXR1cm4gdHRsIC0gYWdlXG4gICAgfVxuXG4gICAgdGhpcy4jaXNTdGFsZSA9IGluZGV4ID0+IHtcbiAgICAgIGNvbnN0IHMgPSBzdGFydHNbaW5kZXhdXG4gICAgICBjb25zdCB0ID0gdHRsc1tpbmRleF1cbiAgICAgIHJldHVybiAhIXQgJiYgISFzICYmIChjYWNoZWROb3cgfHwgZ2V0Tm93KCkpIC0gcyA+IHRcbiAgICB9XG4gIH1cblxuICAvLyBjb25kaXRpb25hbGx5IHNldCBwcml2YXRlIG1ldGhvZHMgcmVsYXRlZCB0byBUVExcbiAgI3VwZGF0ZUl0ZW1BZ2U6IChpbmRleDogSW5kZXgpID0+IHZvaWQgPSAoKSA9PiB7fVxuICAjc3RhdHVzVFRMOiAoc3RhdHVzOiBMUlVDYWNoZS5TdGF0dXM8Vj4sIGluZGV4OiBJbmRleCkgPT4gdm9pZCA9ICgpID0+IHt9XG4gICNzZXRJdGVtVFRMOiAoXG4gICAgaW5kZXg6IEluZGV4LFxuICAgIHR0bDogTFJVQ2FjaGUuTWlsbGlzZWNvbmRzLFxuICAgIHN0YXJ0PzogTFJVQ2FjaGUuTWlsbGlzZWNvbmRzLFxuICAgIC8vIGlnbm9yZSBiZWNhdXNlIHdlIG5ldmVyIGNhbGwgdGhpcyBpZiB3ZSdyZSBub3QgYWxyZWFkeSBpbiBUVEwgbW9kZVxuICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICApID0+IHZvaWQgPSAoKSA9PiB7fVxuICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuXG4gICNpc1N0YWxlOiAoaW5kZXg6IEluZGV4KSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2VcblxuICAjaW5pdGlhbGl6ZVNpemVUcmFja2luZygpIHtcbiAgICBjb25zdCBzaXplcyA9IG5ldyBaZXJvQXJyYXkodGhpcy4jbWF4KVxuICAgIHRoaXMuI2NhbGN1bGF0ZWRTaXplID0gMFxuICAgIHRoaXMuI3NpemVzID0gc2l6ZXNcbiAgICB0aGlzLiNyZW1vdmVJdGVtU2l6ZSA9IGluZGV4ID0+IHtcbiAgICAgIHRoaXMuI2NhbGN1bGF0ZWRTaXplIC09IHNpemVzW2luZGV4XSBhcyBudW1iZXJcbiAgICAgIHNpemVzW2luZGV4XSA9IDBcbiAgICB9XG4gICAgdGhpcy4jcmVxdWlyZVNpemUgPSAoaywgdiwgc2l6ZSwgc2l6ZUNhbGN1bGF0aW9uKSA9PiB7XG4gICAgICAvLyBwcm92aXNpb25hbGx5IGFjY2VwdCBiYWNrZ3JvdW5kIGZldGNoZXMuXG4gICAgICAvLyBhY3R1YWwgdmFsdWUgc2l6ZSB3aWxsIGJlIGNoZWNrZWQgd2hlbiB0aGV5IHJldHVybi5cbiAgICAgIGlmICh0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgICByZXR1cm4gMFxuICAgICAgfVxuICAgICAgaWYgKCFpc1Bvc0ludChzaXplKSkge1xuICAgICAgICBpZiAoc2l6ZUNhbGN1bGF0aW9uKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBzaXplQ2FsY3VsYXRpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpemVDYWxjdWxhdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb24nKVxuICAgICAgICAgIH1cbiAgICAgICAgICBzaXplID0gc2l6ZUNhbGN1bGF0aW9uKHYsIGspXG4gICAgICAgICAgaWYgKCFpc1Bvc0ludChzaXplKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgJ3NpemVDYWxjdWxhdGlvbiByZXR1cm4gaW52YWxpZCAoZXhwZWN0IHBvc2l0aXZlIGludGVnZXIpJyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICdpbnZhbGlkIHNpemUgdmFsdWUgKG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcikuICcgK1xuICAgICAgICAgICAgICAnV2hlbiBtYXhTaXplIG9yIG1heEVudHJ5U2l6ZSBpcyB1c2VkLCBzaXplQ2FsY3VsYXRpb24gJyArXG4gICAgICAgICAgICAgICdvciBzaXplIG11c3QgYmUgc2V0LicsXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc2l6ZVxuICAgIH1cbiAgICB0aGlzLiNhZGRJdGVtU2l6ZSA9IChcbiAgICAgIGluZGV4OiBJbmRleCxcbiAgICAgIHNpemU6IExSVUNhY2hlLlNpemUsXG4gICAgICBzdGF0dXM/OiBMUlVDYWNoZS5TdGF0dXM8Vj4sXG4gICAgKSA9PiB7XG4gICAgICBzaXplc1tpbmRleF0gPSBzaXplXG4gICAgICBpZiAodGhpcy4jbWF4U2l6ZSkge1xuICAgICAgICBjb25zdCBtYXhTaXplID0gdGhpcy4jbWF4U2l6ZSAtIChzaXplc1tpbmRleF0gYXMgbnVtYmVyKVxuICAgICAgICB3aGlsZSAodGhpcy4jY2FsY3VsYXRlZFNpemUgPiBtYXhTaXplKSB7XG4gICAgICAgICAgdGhpcy4jZXZpY3QodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy4jY2FsY3VsYXRlZFNpemUgKz0gc2l6ZXNbaW5kZXhdIGFzIG51bWJlclxuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBzdGF0dXMuZW50cnlTaXplID0gc2l6ZVxuICAgICAgICBzdGF0dXMudG90YWxDYWxjdWxhdGVkU2l6ZSA9IHRoaXMuI2NhbGN1bGF0ZWRTaXplXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgI3JlbW92ZUl0ZW1TaXplOiAoaW5kZXg6IEluZGV4KSA9PiB2b2lkID0gX2kgPT4ge31cbiAgI2FkZEl0ZW1TaXplOiAoXG4gICAgaW5kZXg6IEluZGV4LFxuICAgIHNpemU6IExSVUNhY2hlLlNpemUsXG4gICAgc3RhdHVzPzogTFJVQ2FjaGUuU3RhdHVzPFY+LFxuICApID0+IHZvaWQgPSAoX2ksIF9zLCBfc3QpID0+IHt9XG4gICNyZXF1aXJlU2l6ZTogKFxuICAgIGs6IEssXG4gICAgdjogViB8IEJhY2tncm91bmRGZXRjaDxWPixcbiAgICBzaXplPzogTFJVQ2FjaGUuU2l6ZSxcbiAgICBzaXplQ2FsY3VsYXRpb24/OiBMUlVDYWNoZS5TaXplQ2FsY3VsYXRvcjxLLCBWPixcbiAgKSA9PiBMUlVDYWNoZS5TaXplID0gKFxuICAgIF9rOiBLLFxuICAgIF92OiBWIHwgQmFja2dyb3VuZEZldGNoPFY+LFxuICAgIHNpemU/OiBMUlVDYWNoZS5TaXplLFxuICAgIHNpemVDYWxjdWxhdGlvbj86IExSVUNhY2hlLlNpemVDYWxjdWxhdG9yPEssIFY+LFxuICApID0+IHtcbiAgICBpZiAoc2l6ZSB8fCBzaXplQ2FsY3VsYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdjYW5ub3Qgc2V0IHNpemUgd2l0aG91dCBzZXR0aW5nIG1heFNpemUgb3IgbWF4RW50cnlTaXplIG9uIGNhY2hlJyxcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIDBcbiAgfTtcblxuICAqI2luZGV4ZXMoeyBhbGxvd1N0YWxlID0gdGhpcy5hbGxvd1N0YWxlIH0gPSB7fSkge1xuICAgIGlmICh0aGlzLiNzaXplKSB7XG4gICAgICBmb3IgKGxldCBpID0gdGhpcy4jdGFpbDsgdHJ1ZTsgKSB7XG4gICAgICAgIGlmICghdGhpcy4jaXNWYWxpZEluZGV4KGkpKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxsb3dTdGFsZSB8fCAhdGhpcy4jaXNTdGFsZShpKSkge1xuICAgICAgICAgIHlpZWxkIGlcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA9PT0gdGhpcy4jaGVhZCkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaSA9IHRoaXMuI3ByZXZbaV0gYXMgSW5kZXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICojcmluZGV4ZXMoeyBhbGxvd1N0YWxlID0gdGhpcy5hbGxvd1N0YWxlIH0gPSB7fSkge1xuICAgIGlmICh0aGlzLiNzaXplKSB7XG4gICAgICBmb3IgKGxldCBpID0gdGhpcy4jaGVhZDsgdHJ1ZTsgKSB7XG4gICAgICAgIGlmICghdGhpcy4jaXNWYWxpZEluZGV4KGkpKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxsb3dTdGFsZSB8fCAhdGhpcy4jaXNTdGFsZShpKSkge1xuICAgICAgICAgIHlpZWxkIGlcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA9PT0gdGhpcy4jdGFpbCkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaSA9IHRoaXMuI25leHRbaV0gYXMgSW5kZXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICNpc1ZhbGlkSW5kZXgoaW5kZXg6IEluZGV4KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGluZGV4ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuI2tleU1hcC5nZXQodGhpcy4ja2V5TGlzdFtpbmRleF0gYXMgSykgPT09IGluZGV4XG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyBgW2tleSwgdmFsdWVdYCBwYWlycyxcbiAgICogaW4gb3JkZXIgZnJvbSBtb3N0IHJlY2VudGx5IHVzZWQgdG8gbGVhc3QgcmVjZW50bHkgdXNlZC5cbiAgICovXG4gICplbnRyaWVzKCkge1xuICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNpbmRleGVzKCkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy4jdmFsTGlzdFtpXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHRoaXMuI2tleUxpc3RbaV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAhdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godGhpcy4jdmFsTGlzdFtpXSlcbiAgICAgICkge1xuICAgICAgICB5aWVsZCBbdGhpcy4ja2V5TGlzdFtpXSwgdGhpcy4jdmFsTGlzdFtpXV0gYXMgW0ssIFZdXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEludmVyc2Ugb3JkZXIgdmVyc2lvbiBvZiB7QGxpbmsgTFJVQ2FjaGUuZW50cmllc31cbiAgICpcbiAgICogUmV0dXJuIGEgZ2VuZXJhdG9yIHlpZWxkaW5nIGBba2V5LCB2YWx1ZV1gIHBhaXJzLFxuICAgKiBpbiBvcmRlciBmcm9tIGxlYXN0IHJlY2VudGx5IHVzZWQgdG8gbW9zdCByZWNlbnRseSB1c2VkLlxuICAgKi9cbiAgKnJlbnRyaWVzKCkge1xuICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNyaW5kZXhlcygpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuI3ZhbExpc3RbaV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0aGlzLiNrZXlMaXN0W2ldICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgIXRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHRoaXMuI3ZhbExpc3RbaV0pXG4gICAgICApIHtcbiAgICAgICAgeWllbGQgW3RoaXMuI2tleUxpc3RbaV0sIHRoaXMuI3ZhbExpc3RbaV1dXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyB0aGUga2V5cyBpbiB0aGUgY2FjaGUsXG4gICAqIGluIG9yZGVyIGZyb20gbW9zdCByZWNlbnRseSB1c2VkIHRvIGxlYXN0IHJlY2VudGx5IHVzZWQuXG4gICAqL1xuICAqa2V5cygpIHtcbiAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcygpKSB7XG4gICAgICBjb25zdCBrID0gdGhpcy4ja2V5TGlzdFtpXVxuICAgICAgaWYgKGsgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godGhpcy4jdmFsTGlzdFtpXSkpIHtcbiAgICAgICAgeWllbGQga1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZlcnNlIG9yZGVyIHZlcnNpb24gb2Yge0BsaW5rIExSVUNhY2hlLmtleXN9XG4gICAqXG4gICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyB0aGUga2V5cyBpbiB0aGUgY2FjaGUsXG4gICAqIGluIG9yZGVyIGZyb20gbGVhc3QgcmVjZW50bHkgdXNlZCB0byBtb3N0IHJlY2VudGx5IHVzZWQuXG4gICAqL1xuICAqcmtleXMoKSB7XG4gICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI3JpbmRleGVzKCkpIHtcbiAgICAgIGNvbnN0IGsgPSB0aGlzLiNrZXlMaXN0W2ldXG4gICAgICBpZiAoayAhPT0gdW5kZWZpbmVkICYmICF0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh0aGlzLiN2YWxMaXN0W2ldKSkge1xuICAgICAgICB5aWVsZCBrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyB0aGUgdmFsdWVzIGluIHRoZSBjYWNoZSxcbiAgICogaW4gb3JkZXIgZnJvbSBtb3N0IHJlY2VudGx5IHVzZWQgdG8gbGVhc3QgcmVjZW50bHkgdXNlZC5cbiAgICovXG4gICp2YWx1ZXMoKSB7XG4gICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoKSkge1xuICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV1cbiAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQgJiYgIXRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHRoaXMuI3ZhbExpc3RbaV0pKSB7XG4gICAgICAgIHlpZWxkIHRoaXMuI3ZhbExpc3RbaV0gYXMgVlxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZlcnNlIG9yZGVyIHZlcnNpb24gb2Yge0BsaW5rIExSVUNhY2hlLnZhbHVlc31cbiAgICpcbiAgICogUmV0dXJuIGEgZ2VuZXJhdG9yIHlpZWxkaW5nIHRoZSB2YWx1ZXMgaW4gdGhlIGNhY2hlLFxuICAgKiBpbiBvcmRlciBmcm9tIGxlYXN0IHJlY2VudGx5IHVzZWQgdG8gbW9zdCByZWNlbnRseSB1c2VkLlxuICAgKi9cbiAgKnJ2YWx1ZXMoKSB7XG4gICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI3JpbmRleGVzKCkpIHtcbiAgICAgIGNvbnN0IHYgPSB0aGlzLiN2YWxMaXN0W2ldXG4gICAgICBpZiAodiAhPT0gdW5kZWZpbmVkICYmICF0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh0aGlzLiN2YWxMaXN0W2ldKSkge1xuICAgICAgICB5aWVsZCB0aGlzLiN2YWxMaXN0W2ldXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGluZyBvdmVyIHRoZSBjYWNoZSBpdHNlbGYgeWllbGRzIHRoZSBzYW1lIHJlc3VsdHMgYXNcbiAgICoge0BsaW5rIExSVUNhY2hlLmVudHJpZXN9XG4gICAqL1xuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBBIFN0cmluZyB2YWx1ZSB0aGF0IGlzIHVzZWQgaW4gdGhlIGNyZWF0aW9uIG9mIHRoZSBkZWZhdWx0IHN0cmluZ1xuICAgKiBkZXNjcmlwdGlvbiBvZiBhbiBvYmplY3QuIENhbGxlZCBieSB0aGUgYnVpbHQtaW4gbWV0aG9kXG4gICAqIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAgICovXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddID0gJ0xSVUNhY2hlJ1xuXG4gIC8qKlxuICAgKiBGaW5kIGEgdmFsdWUgZm9yIHdoaWNoIHRoZSBzdXBwbGllZCBmbiBtZXRob2QgcmV0dXJucyBhIHRydXRoeSB2YWx1ZSxcbiAgICogc2ltaWxhciB0byBgQXJyYXkuZmluZCgpYC4gZm4gaXMgY2FsbGVkIGFzIGBmbih2YWx1ZSwga2V5LCBjYWNoZSlgLlxuICAgKi9cbiAgZmluZChcbiAgICBmbjogKHY6IFYsIGs6IEssIHNlbGY6IExSVUNhY2hlPEssIFYsIEZDPikgPT4gYm9vbGVhbixcbiAgICBnZXRPcHRpb25zOiBMUlVDYWNoZS5HZXRPcHRpb25zPEssIFYsIEZDPiA9IHt9LFxuICApIHtcbiAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcygpKSB7XG4gICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXVxuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgOiB2XG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgY29udGludWVcbiAgICAgIGlmIChmbih2YWx1ZSwgdGhpcy4ja2V5TGlzdFtpXSBhcyBLLCB0aGlzKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQodGhpcy4ja2V5TGlzdFtpXSBhcyBLLCBnZXRPcHRpb25zKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIHRoZSBzdXBwbGllZCBmdW5jdGlvbiBvbiBlYWNoIGl0ZW0gaW4gdGhlIGNhY2hlLCBpbiBvcmRlciBmcm9tIG1vc3RcbiAgICogcmVjZW50bHkgdXNlZCB0byBsZWFzdCByZWNlbnRseSB1c2VkLlxuICAgKlxuICAgKiBgZm5gIGlzIGNhbGxlZCBhcyBgZm4odmFsdWUsIGtleSwgY2FjaGUpYC5cbiAgICpcbiAgICogSWYgYHRoaXNwYCBpcyBwcm92aWRlZCwgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdGhlIGB0aGlzYC1jb250ZXh0IG9mXG4gICAqIHRoZSBwcm92aWRlZCBvYmplY3QsIG9yIHRoZSBjYWNoZSBpZiBubyBgdGhpc3BgIG9iamVjdCBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogRG9lcyBub3QgdXBkYXRlIGFnZSBvciByZWNlbnR5IG9mIHVzZSwgb3IgaXRlcmF0ZSBvdmVyIHN0YWxlIHZhbHVlcy5cbiAgICovXG4gIGZvckVhY2goXG4gICAgZm46ICh2OiBWLCBrOiBLLCBzZWxmOiBMUlVDYWNoZTxLLCBWLCBGQz4pID0+IGFueSxcbiAgICB0aGlzcDogYW55ID0gdGhpcyxcbiAgKSB7XG4gICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoKSkge1xuICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV1cbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godikgPyB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nIDogdlxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIGNvbnRpbnVlXG4gICAgICBmbi5jYWxsKHRoaXNwLCB2YWx1ZSwgdGhpcy4ja2V5TGlzdFtpXSBhcyBLLCB0aGlzKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc2FtZSBhcyB7QGxpbmsgTFJVQ2FjaGUuZm9yRWFjaH0gYnV0IGl0ZW1zIGFyZSBpdGVyYXRlZCBvdmVyIGluXG4gICAqIHJldmVyc2Ugb3JkZXIuICAoaWUsIGxlc3MgcmVjZW50bHkgdXNlZCBpdGVtcyBhcmUgaXRlcmF0ZWQgb3ZlciBmaXJzdC4pXG4gICAqL1xuICByZm9yRWFjaChcbiAgICBmbjogKHY6IFYsIGs6IEssIHNlbGY6IExSVUNhY2hlPEssIFYsIEZDPikgPT4gYW55LFxuICAgIHRoaXNwOiBhbnkgPSB0aGlzLFxuICApIHtcbiAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jcmluZGV4ZXMoKSkge1xuICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV1cbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godikgPyB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nIDogdlxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIGNvbnRpbnVlXG4gICAgICBmbi5jYWxsKHRoaXNwLCB2YWx1ZSwgdGhpcy4ja2V5TGlzdFtpXSBhcyBLLCB0aGlzKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgYW55IHN0YWxlIGVudHJpZXMuIFJldHVybnMgdHJ1ZSBpZiBhbnl0aGluZyB3YXMgcmVtb3ZlZCxcbiAgICogZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVyZ2VTdGFsZSgpIHtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlXG4gICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI3JpbmRleGVzKHsgYWxsb3dTdGFsZTogdHJ1ZSB9KSkge1xuICAgICAgaWYgKHRoaXMuI2lzU3RhbGUoaSkpIHtcbiAgICAgICAgdGhpcy4jZGVsZXRlKHRoaXMuI2tleUxpc3RbaV0gYXMgSywgJ2V4cGlyZScpXG4gICAgICAgIGRlbGV0ZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkZWxldGVkXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBleHRlbmRlZCBpbmZvIGFib3V0IGEgZ2l2ZW4gZW50cnksIHRvIGdldCBpdHMgdmFsdWUsIHNpemUsIGFuZFxuICAgKiBUVEwgaW5mbyBzaW11bHRhbmVvdXNseS4gUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUga2V5IGlzIG5vdCBwcmVzZW50LlxuICAgKlxuICAgKiBVbmxpa2Uge0BsaW5rIExSVUNhY2hlI2R1bXB9LCB3aGljaCBpcyBkZXNpZ25lZCB0byBiZSBwb3J0YWJsZSBhbmQgc3Vydml2ZVxuICAgKiBzZXJpYWxpemF0aW9uLCB0aGUgYHN0YXJ0YCB2YWx1ZSBpcyBhbHdheXMgdGhlIGN1cnJlbnQgdGltZXN0YW1wLCBhbmQgdGhlXG4gICAqIGB0dGxgIGlzIGEgY2FsY3VsYXRlZCByZW1haW5pbmcgdGltZSB0byBsaXZlIChuZWdhdGl2ZSBpZiBleHBpcmVkKS5cbiAgICpcbiAgICogQWx3YXlzIHJldHVybnMgc3RhbGUgdmFsdWVzLCBpZiB0aGVpciBpbmZvIGlzIGZvdW5kIGluIHRoZSBjYWNoZSwgc28gYmVcbiAgICogc3VyZSB0byBjaGVjayBmb3IgZXhwaXJhdGlvbnMgKGllLCBhIG5lZ2F0aXZlIHtAbGluayBMUlVDYWNoZS5FbnRyeSN0dGx9KVxuICAgKiBpZiByZWxldmFudC5cbiAgICovXG4gIGluZm8oa2V5OiBLKTogTFJVQ2FjaGUuRW50cnk8Vj4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGkgPSB0aGlzLiNrZXlNYXAuZ2V0KGtleSlcbiAgICBpZiAoaSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV1cbiAgICAvKiBjOCBpZ25vcmUgc3RhcnQgLSB0aGlzIGlzbid0IHRlc3RlZCBmb3IgdGhlIGluZm8gZnVuY3Rpb24sXG4gICAgICogYnV0IGl0J3MgdGhlIHNhbWUgbG9naWMgYXMgZm91bmQgaW4gb3RoZXIgcGxhY2VzLiAqL1xuICAgIGNvbnN0IHZhbHVlOiBWIHwgdW5kZWZpbmVkID1cbiAgICAgIHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpID8gdi5fX3N0YWxlV2hpbGVGZXRjaGluZyA6IHZcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIC8qIGM4IGlnbm9yZSBlbmQgKi9cbiAgICBjb25zdCBlbnRyeTogTFJVQ2FjaGUuRW50cnk8Vj4gPSB7IHZhbHVlIH1cbiAgICBpZiAodGhpcy4jdHRscyAmJiB0aGlzLiNzdGFydHMpIHtcbiAgICAgIGNvbnN0IHR0bCA9IHRoaXMuI3R0bHNbaV1cbiAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy4jc3RhcnRzW2ldXG4gICAgICBpZiAodHRsICYmIHN0YXJ0KSB7XG4gICAgICAgIGNvbnN0IHJlbWFpbiA9IHR0bCAtICh0aGlzLiNwZXJmLm5vdygpIC0gc3RhcnQpXG4gICAgICAgIGVudHJ5LnR0bCA9IHJlbWFpblxuICAgICAgICBlbnRyeS5zdGFydCA9IERhdGUubm93KClcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuI3NpemVzKSB7XG4gICAgICBlbnRyeS5zaXplID0gdGhpcy4jc2l6ZXNbaV1cbiAgICB9XG4gICAgcmV0dXJuIGVudHJ5XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIFtrZXksIHtAbGluayBMUlVDYWNoZS5FbnRyeX1dIHR1cGxlcyB3aGljaCBjYW4gYmVcbiAgICogcGFzc2VkIHRvIHtAbGluayBMUlVDYWNoZSNsb2FkfS5cbiAgICpcbiAgICogVGhlIGBzdGFydGAgZmllbGRzIGFyZSBjYWxjdWxhdGVkIHJlbGF0aXZlIHRvIGEgcG9ydGFibGUgYERhdGUubm93KClgXG4gICAqIHRpbWVzdGFtcCwgZXZlbiBpZiBgcGVyZm9ybWFuY2Uubm93KClgIGlzIGF2YWlsYWJsZS5cbiAgICpcbiAgICogU3RhbGUgZW50cmllcyBhcmUgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSBgZHVtcGAsIGV2ZW4gaWZcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmFsbG93U3RhbGV9IGlzIGZhbHNlLlxuICAgKlxuICAgKiBOb3RlOiB0aGlzIHJldHVybnMgYW4gYWN0dWFsIGFycmF5LCBub3QgYSBnZW5lcmF0b3IsIHNvIGl0IGNhbiBiZSBtb3JlXG4gICAqIGVhc2lseSBwYXNzZWQgYXJvdW5kLlxuICAgKi9cbiAgZHVtcCgpIHtcbiAgICBjb25zdCBhcnI6IFtLLCBMUlVDYWNoZS5FbnRyeTxWPl1bXSA9IFtdXG4gICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoeyBhbGxvd1N0YWxlOiB0cnVlIH0pKSB7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLiNrZXlMaXN0W2ldXG4gICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXVxuICAgICAgY29uc3QgdmFsdWU6IFYgfCB1bmRlZmluZWQgPVxuICAgICAgICB0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgOiB2XG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IHVuZGVmaW5lZCkgY29udGludWVcbiAgICAgIGNvbnN0IGVudHJ5OiBMUlVDYWNoZS5FbnRyeTxWPiA9IHsgdmFsdWUgfVxuICAgICAgaWYgKHRoaXMuI3R0bHMgJiYgdGhpcy4jc3RhcnRzKSB7XG4gICAgICAgIGVudHJ5LnR0bCA9IHRoaXMuI3R0bHNbaV1cbiAgICAgICAgLy8gYWx3YXlzIGR1bXAgdGhlIHN0YXJ0IHJlbGF0aXZlIHRvIGEgcG9ydGFibGUgdGltZXN0YW1wXG4gICAgICAgIC8vIGl0J3Mgb2sgZm9yIHRoaXMgdG8gYmUgYSBiaXQgc2xvdywgaXQncyBhIHJhcmUgb3BlcmF0aW9uLlxuICAgICAgICBjb25zdCBhZ2UgPSB0aGlzLiNwZXJmLm5vdygpIC0gKHRoaXMuI3N0YXJ0c1tpXSBhcyBudW1iZXIpXG4gICAgICAgIGVudHJ5LnN0YXJ0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC0gYWdlKVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuI3NpemVzKSB7XG4gICAgICAgIGVudHJ5LnNpemUgPSB0aGlzLiNzaXplc1tpXVxuICAgICAgfVxuICAgICAgYXJyLnVuc2hpZnQoW2tleSwgZW50cnldKVxuICAgIH1cbiAgICByZXR1cm4gYXJyXG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIGNhY2hlIGFuZCBsb2FkIGluIHRoZSBpdGVtcyBpbiBlbnRyaWVzIGluIHRoZSBvcmRlciBsaXN0ZWQuXG4gICAqXG4gICAqIFRoZSBzaGFwZSBvZiB0aGUgcmVzdWx0aW5nIGNhY2hlIG1heSBiZSBkaWZmZXJlbnQgaWYgdGhlIHNhbWUgb3B0aW9ucyBhcmVcbiAgICogbm90IHVzZWQgaW4gYm90aCBjYWNoZXMuXG4gICAqXG4gICAqIFRoZSBgc3RhcnRgIGZpZWxkcyBhcmUgYXNzdW1lZCB0byBiZSBjYWxjdWxhdGVkIHJlbGF0aXZlIHRvIGEgcG9ydGFibGVcbiAgICogYERhdGUubm93KClgIHRpbWVzdGFtcCwgZXZlbiBpZiBgcGVyZm9ybWFuY2Uubm93KClgIGlzIGF2YWlsYWJsZS5cbiAgICovXG4gIGxvYWQoYXJyOiBbSywgTFJVQ2FjaGUuRW50cnk8Vj5dW10pIHtcbiAgICB0aGlzLmNsZWFyKClcbiAgICBmb3IgKGNvbnN0IFtrZXksIGVudHJ5XSBvZiBhcnIpIHtcbiAgICAgIGlmIChlbnRyeS5zdGFydCkge1xuICAgICAgICAvLyBlbnRyeS5zdGFydCBpcyBhIHBvcnRhYmxlIHRpbWVzdGFtcCwgYnV0IHdlIG1heSBiZSB1c2luZ1xuICAgICAgICAvLyBub2RlJ3MgcGVyZm9ybWFuY2Uubm93KCksIHNvIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0LCBzbyB0aGF0XG4gICAgICAgIC8vIHdlIGdldCB0aGUgaW50ZW5kZWQgcmVtYWluaW5nIFRUTCwgbm8gbWF0dGVyIGhvdyBsb25nIGl0J3NcbiAgICAgICAgLy8gYmVlbiBvbiBpY2UuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIGl0J3Mgb2sgZm9yIHRoaXMgdG8gYmUgYSBiaXQgc2xvdywgaXQncyBhIHJhcmUgb3BlcmF0aW9uLlxuICAgICAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gZW50cnkuc3RhcnRcbiAgICAgICAgZW50cnkuc3RhcnQgPSB0aGlzLiNwZXJmLm5vdygpIC0gYWdlXG4gICAgICB9XG4gICAgICB0aGlzLnNldChrZXksIGVudHJ5LnZhbHVlLCBlbnRyeSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgdmFsdWUgdG8gdGhlIGNhY2hlLlxuICAgKlxuICAgKiBOb3RlOiBpZiBgdW5kZWZpbmVkYCBpcyBzcGVjaWZpZWQgYXMgYSB2YWx1ZSwgdGhpcyBpcyBhbiBhbGlhcyBmb3JcbiAgICoge0BsaW5rIExSVUNhY2hlI2RlbGV0ZX1cbiAgICpcbiAgICogRmllbGRzIG9uIHRoZSB7QGxpbmsgTFJVQ2FjaGUuU2V0T3B0aW9uc30gb3B0aW9ucyBwYXJhbSB3aWxsIG92ZXJyaWRlXG4gICAqIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGluIHRoZSBjb25zdHJ1Y3RvciBvcHRpb25zIGZvciB0aGUgc2NvcGVcbiAgICogb2YgdGhpcyBzaW5nbGUgYHNldCgpYCBvcGVyYXRpb24uXG4gICAqXG4gICAqIElmIGBzdGFydGAgaXMgcHJvdmlkZWQsIHRoZW4gdGhhdCB3aWxsIHNldCB0aGUgZWZmZWN0aXZlIHN0YXJ0XG4gICAqIHRpbWUgZm9yIHRoZSBUVEwgY2FsY3VsYXRpb24uIE5vdGUgdGhhdCB0aGlzIG11c3QgYmUgYSBwcmV2aW91c1xuICAgKiB2YWx1ZSBvZiBgcGVyZm9ybWFuY2Uubm93KClgIGlmIHN1cHBvcnRlZCwgb3IgYSBwcmV2aW91cyB2YWx1ZSBvZlxuICAgKiBgRGF0ZS5ub3coKWAgaWYgbm90LlxuICAgKlxuICAgKiBPcHRpb25zIG9iamVjdCBtYXkgYWxzbyBpbmNsdWRlIGBzaXplYCwgd2hpY2ggd2lsbCBwcmV2ZW50XG4gICAqIGNhbGxpbmcgdGhlIGBzaXplQ2FsY3VsYXRpb25gIGZ1bmN0aW9uIGFuZCBqdXN0IHVzZSB0aGUgc3BlY2lmaWVkXG4gICAqIG51bWJlciBpZiBpdCBpcyBhIHBvc2l0aXZlIGludGVnZXIsIGFuZCBgbm9EaXNwb3NlT25TZXRgIHdoaWNoXG4gICAqIHdpbGwgcHJldmVudCBjYWxsaW5nIGEgYGRpc3Bvc2VgIGZ1bmN0aW9uIGluIHRoZSBjYXNlIG9mXG4gICAqIG92ZXJ3cml0ZXMuXG4gICAqXG4gICAqIElmIHRoZSBgc2l6ZWAgKG9yIHJldHVybiB2YWx1ZSBvZiBgc2l6ZUNhbGN1bGF0aW9uYCkgZm9yIGEgZ2l2ZW5cbiAgICogZW50cnkgaXMgZ3JlYXRlciB0aGFuIGBtYXhFbnRyeVNpemVgLCB0aGVuIHRoZSBpdGVtIHdpbGwgbm90IGJlXG4gICAqIGFkZGVkIHRvIHRoZSBjYWNoZS5cbiAgICpcbiAgICogV2lsbCB1cGRhdGUgdGhlIHJlY2VuY3kgb2YgdGhlIGVudHJ5LlxuICAgKlxuICAgKiBJZiB0aGUgdmFsdWUgaXMgYHVuZGVmaW5lZGAsIHRoZW4gdGhpcyBpcyBhbiBhbGlhcyBmb3JcbiAgICogYGNhY2hlLmRlbGV0ZShrZXkpYC4gYHVuZGVmaW5lZGAgaXMgbmV2ZXIgc3RvcmVkIGluIHRoZSBjYWNoZS5cbiAgICovXG4gIHNldChcbiAgICBrOiBLLFxuICAgIHY6IFYgfCBCYWNrZ3JvdW5kRmV0Y2g8Vj4gfCB1bmRlZmluZWQsXG4gICAgc2V0T3B0aW9uczogTFJVQ2FjaGUuU2V0T3B0aW9uczxLLCBWLCBGQz4gPSB7fSxcbiAgKSB7XG4gICAgaWYgKHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kZWxldGUoaylcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIHR0bCA9IHRoaXMudHRsLFxuICAgICAgc3RhcnQsXG4gICAgICBub0Rpc3Bvc2VPblNldCA9IHRoaXMubm9EaXNwb3NlT25TZXQsXG4gICAgICBzaXplQ2FsY3VsYXRpb24gPSB0aGlzLnNpemVDYWxjdWxhdGlvbixcbiAgICAgIHN0YXR1cyxcbiAgICB9ID0gc2V0T3B0aW9uc1xuICAgIGxldCB7IG5vVXBkYXRlVFRMID0gdGhpcy5ub1VwZGF0ZVRUTCB9ID0gc2V0T3B0aW9uc1xuXG4gICAgY29uc3Qgc2l6ZSA9IHRoaXMuI3JlcXVpcmVTaXplKFxuICAgICAgayxcbiAgICAgIHYsXG4gICAgICBzZXRPcHRpb25zLnNpemUgfHwgMCxcbiAgICAgIHNpemVDYWxjdWxhdGlvbixcbiAgICApXG4gICAgLy8gaWYgdGhlIGl0ZW0gZG9lc24ndCBmaXQsIGRvbid0IGRvIGFueXRoaW5nXG4gICAgLy8gTkI6IG1heEVudHJ5U2l6ZSBzZXQgdG8gbWF4U2l6ZSBieSBkZWZhdWx0XG4gICAgaWYgKHRoaXMubWF4RW50cnlTaXplICYmIHNpemUgPiB0aGlzLm1heEVudHJ5U2l6ZSkge1xuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBzdGF0dXMuc2V0ID0gJ21pc3MnXG4gICAgICAgIHN0YXR1cy5tYXhFbnRyeVNpemVFeGNlZWRlZCA9IHRydWVcbiAgICAgIH1cbiAgICAgIC8vIGhhdmUgdG8gZGVsZXRlLCBpbiBjYXNlIHNvbWV0aGluZyBpcyB0aGVyZSBhbHJlYWR5LlxuICAgICAgdGhpcy4jZGVsZXRlKGssICdzZXQnKVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gICAgbGV0IGluZGV4ID0gdGhpcy4jc2l6ZSA9PT0gMCA/IHVuZGVmaW5lZCA6IHRoaXMuI2tleU1hcC5nZXQoaylcbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gYWRkaXRpb25cbiAgICAgIGluZGV4ID0gKFxuICAgICAgICB0aGlzLiNzaXplID09PSAwID8gdGhpcy4jdGFpbFxuICAgICAgICA6IHRoaXMuI2ZyZWUubGVuZ3RoICE9PSAwID8gdGhpcy4jZnJlZS5wb3AoKVxuICAgICAgICA6IHRoaXMuI3NpemUgPT09IHRoaXMuI21heCA/IHRoaXMuI2V2aWN0KGZhbHNlKVxuICAgICAgICA6IHRoaXMuI3NpemUpIGFzIEluZGV4XG4gICAgICB0aGlzLiNrZXlMaXN0W2luZGV4XSA9IGtcbiAgICAgIHRoaXMuI3ZhbExpc3RbaW5kZXhdID0gdlxuICAgICAgdGhpcy4ja2V5TWFwLnNldChrLCBpbmRleClcbiAgICAgIHRoaXMuI25leHRbdGhpcy4jdGFpbF0gPSBpbmRleFxuICAgICAgdGhpcy4jcHJldltpbmRleF0gPSB0aGlzLiN0YWlsXG4gICAgICB0aGlzLiN0YWlsID0gaW5kZXhcbiAgICAgIHRoaXMuI3NpemUrK1xuICAgICAgdGhpcy4jYWRkSXRlbVNpemUoaW5kZXgsIHNpemUsIHN0YXR1cylcbiAgICAgIGlmIChzdGF0dXMpIHN0YXR1cy5zZXQgPSAnYWRkJ1xuICAgICAgbm9VcGRhdGVUVEwgPSBmYWxzZVxuICAgICAgaWYgKHRoaXMuI2hhc09uSW5zZXJ0KSB7XG4gICAgICAgIHRoaXMuI29uSW5zZXJ0Py4odiBhcyBWLCBrLCAnYWRkJylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdXBkYXRlXG4gICAgICB0aGlzLiNtb3ZlVG9UYWlsKGluZGV4KVxuICAgICAgY29uc3Qgb2xkVmFsID0gdGhpcy4jdmFsTGlzdFtpbmRleF0gYXMgViB8IEJhY2tncm91bmRGZXRjaDxWPlxuICAgICAgaWYgKHYgIT09IG9sZFZhbCkge1xuICAgICAgICBpZiAodGhpcy4jaGFzRmV0Y2hNZXRob2QgJiYgdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2gob2xkVmFsKSkge1xuICAgICAgICAgIG9sZFZhbC5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ3JlcGxhY2VkJykpXG4gICAgICAgICAgY29uc3QgeyBfX3N0YWxlV2hpbGVGZXRjaGluZzogcyB9ID0gb2xkVmFsXG4gICAgICAgICAgaWYgKHMgIT09IHVuZGVmaW5lZCAmJiAhbm9EaXNwb3NlT25TZXQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlKSB7XG4gICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2U/LihzIGFzIFYsIGssICdzZXQnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2VBZnRlcikge1xuICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlZD8ucHVzaChbcyBhcyBWLCBrLCAnc2V0J10pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFub0Rpc3Bvc2VPblNldCkge1xuICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlKSB7XG4gICAgICAgICAgICB0aGlzLiNkaXNwb3NlPy4ob2xkVmFsIGFzIFYsIGssICdzZXQnKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyKSB7XG4gICAgICAgICAgICB0aGlzLiNkaXNwb3NlZD8ucHVzaChbb2xkVmFsIGFzIFYsIGssICdzZXQnXSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jcmVtb3ZlSXRlbVNpemUoaW5kZXgpXG4gICAgICAgIHRoaXMuI2FkZEl0ZW1TaXplKGluZGV4LCBzaXplLCBzdGF0dXMpXG4gICAgICAgIHRoaXMuI3ZhbExpc3RbaW5kZXhdID0gdlxuICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgc3RhdHVzLnNldCA9ICdyZXBsYWNlJ1xuICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID1cbiAgICAgICAgICAgIG9sZFZhbCAmJiB0aGlzLiNpc0JhY2tncm91bmRGZXRjaChvbGRWYWwpID9cbiAgICAgICAgICAgICAgb2xkVmFsLl9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgICA6IG9sZFZhbFxuICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkKSBzdGF0dXMub2xkVmFsdWUgPSBvbGRWYWx1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN0YXR1cykge1xuICAgICAgICBzdGF0dXMuc2V0ID0gJ3VwZGF0ZSdcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuI2hhc09uSW5zZXJ0KSB7XG4gICAgICAgIHRoaXMub25JbnNlcnQ/Lih2IGFzIFYsIGssIHYgPT09IG9sZFZhbCA/ICd1cGRhdGUnIDogJ3JlcGxhY2UnKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHRsICE9PSAwICYmICF0aGlzLiN0dGxzKSB7XG4gICAgICB0aGlzLiNpbml0aWFsaXplVFRMVHJhY2tpbmcoKVxuICAgIH1cbiAgICBpZiAodGhpcy4jdHRscykge1xuICAgICAgaWYgKCFub1VwZGF0ZVRUTCkge1xuICAgICAgICB0aGlzLiNzZXRJdGVtVFRMKGluZGV4LCB0dGwsIHN0YXJ0KVxuICAgICAgfVxuICAgICAgaWYgKHN0YXR1cykgdGhpcy4jc3RhdHVzVFRMKHN0YXR1cywgaW5kZXgpXG4gICAgfVxuICAgIGlmICghbm9EaXNwb3NlT25TZXQgJiYgdGhpcy4jaGFzRGlzcG9zZUFmdGVyICYmIHRoaXMuI2Rpc3Bvc2VkKSB7XG4gICAgICBjb25zdCBkdCA9IHRoaXMuI2Rpc3Bvc2VkXG4gICAgICBsZXQgdGFzazogRGlzcG9zZVRhc2s8SywgVj4gfCB1bmRlZmluZWRcbiAgICAgIHdoaWxlICgodGFzayA9IGR0Py5zaGlmdCgpKSkge1xuICAgICAgICB0aGlzLiNkaXNwb3NlQWZ0ZXI/LiguLi50YXNrKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEV2aWN0IHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGl0ZW0sIHJldHVybmluZyBpdHMgdmFsdWUgb3JcbiAgICogYHVuZGVmaW5lZGAgaWYgY2FjaGUgaXMgZW1wdHkuXG4gICAqL1xuICBwb3AoKTogViB8IHVuZGVmaW5lZCB7XG4gICAgdHJ5IHtcbiAgICAgIHdoaWxlICh0aGlzLiNzaXplKSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuI3ZhbExpc3RbdGhpcy4jaGVhZF1cbiAgICAgICAgdGhpcy4jZXZpY3QodHJ1ZSlcbiAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHZhbCkpIHtcbiAgICAgICAgICBpZiAodmFsLl9fc3RhbGVXaGlsZUZldGNoaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsLl9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIgJiYgdGhpcy4jZGlzcG9zZWQpIHtcbiAgICAgICAgY29uc3QgZHQgPSB0aGlzLiNkaXNwb3NlZFxuICAgICAgICBsZXQgdGFzazogRGlzcG9zZVRhc2s8SywgVj4gfCB1bmRlZmluZWRcbiAgICAgICAgd2hpbGUgKCh0YXNrID0gZHQ/LnNoaWZ0KCkpKSB7XG4gICAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyPy4oLi4udGFzaylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICNldmljdChmcmVlOiBib29sZWFuKSB7XG4gICAgY29uc3QgaGVhZCA9IHRoaXMuI2hlYWRcbiAgICBjb25zdCBrID0gdGhpcy4ja2V5TGlzdFtoZWFkXSBhcyBLXG4gICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaGVhZF0gYXMgVlxuICAgIGlmICh0aGlzLiNoYXNGZXRjaE1ldGhvZCAmJiB0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgdi5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ2V2aWN0ZWQnKSlcbiAgICB9IGVsc2UgaWYgKHRoaXMuI2hhc0Rpc3Bvc2UgfHwgdGhpcy4jaGFzRGlzcG9zZUFmdGVyKSB7XG4gICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZSkge1xuICAgICAgICB0aGlzLiNkaXNwb3NlPy4odiwgaywgJ2V2aWN0JylcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW3YsIGssICdldmljdCddKVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLiNyZW1vdmVJdGVtU2l6ZShoZWFkKVxuICAgIGlmICh0aGlzLiNhdXRvcHVyZ2VUaW1lcnM/LltoZWFkXSkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuI2F1dG9wdXJnZVRpbWVyc1toZWFkXSlcbiAgICAgIHRoaXMuI2F1dG9wdXJnZVRpbWVyc1toZWFkXSA9IHVuZGVmaW5lZFxuICAgIH1cbiAgICAvLyBpZiB3ZSBhcmVuJ3QgYWJvdXQgdG8gdXNlIHRoZSBpbmRleCwgdGhlbiBudWxsIHRoZXNlIG91dFxuICAgIGlmIChmcmVlKSB7XG4gICAgICB0aGlzLiNrZXlMaXN0W2hlYWRdID0gdW5kZWZpbmVkXG4gICAgICB0aGlzLiN2YWxMaXN0W2hlYWRdID0gdW5kZWZpbmVkXG4gICAgICB0aGlzLiNmcmVlLnB1c2goaGVhZClcbiAgICB9XG4gICAgaWYgKHRoaXMuI3NpemUgPT09IDEpIHtcbiAgICAgIHRoaXMuI2hlYWQgPSB0aGlzLiN0YWlsID0gMCBhcyBJbmRleFxuICAgICAgdGhpcy4jZnJlZS5sZW5ndGggPSAwXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2hlYWQgPSB0aGlzLiNuZXh0W2hlYWRdIGFzIEluZGV4XG4gICAgfVxuICAgIHRoaXMuI2tleU1hcC5kZWxldGUoaylcbiAgICB0aGlzLiNzaXplLS1cbiAgICByZXR1cm4gaGVhZFxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEga2V5IGlzIGluIHRoZSBjYWNoZSwgd2l0aG91dCB1cGRhdGluZyB0aGUgcmVjZW5jeSBvZiB1c2UuXG4gICAqIFdpbGwgcmV0dXJuIGZhbHNlIGlmIHRoZSBpdGVtIGlzIHN0YWxlLCBldmVuIHRob3VnaCBpdCBpcyB0ZWNobmljYWxseVxuICAgKiBpbiB0aGUgY2FjaGUuXG4gICAqXG4gICAqIENoZWNrIGlmIGEga2V5IGlzIGluIHRoZSBjYWNoZSwgd2l0aG91dCB1cGRhdGluZyB0aGUgcmVjZW5jeSBvZlxuICAgKiB1c2UuIEFnZSBpcyB1cGRhdGVkIGlmIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS51cGRhdGVBZ2VPbkhhc30gaXMgc2V0XG4gICAqIHRvIGB0cnVlYCBpbiBlaXRoZXIgdGhlIG9wdGlvbnMgb3IgdGhlIGNvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBXaWxsIHJldHVybiBgZmFsc2VgIGlmIHRoZSBpdGVtIGlzIHN0YWxlLCBldmVuIHRob3VnaCBpdCBpcyB0ZWNobmljYWxseSBpblxuICAgKiB0aGUgY2FjaGUuIFRoZSBkaWZmZXJlbmNlIGNhbiBiZSBkZXRlcm1pbmVkIChpZiBpdCBtYXR0ZXJzKSBieSB1c2luZyBhXG4gICAqIGBzdGF0dXNgIGFyZ3VtZW50LCBhbmQgaW5zcGVjdGluZyB0aGUgYGhhc2AgZmllbGQuXG4gICAqXG4gICAqIFdpbGwgbm90IHVwZGF0ZSBpdGVtIGFnZSB1bmxlc3NcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnVwZGF0ZUFnZU9uSGFzfSBpcyBzZXQuXG4gICAqL1xuICBoYXMoazogSywgaGFzT3B0aW9uczogTFJVQ2FjaGUuSGFzT3B0aW9uczxLLCBWLCBGQz4gPSB7fSkge1xuICAgIGNvbnN0IHsgdXBkYXRlQWdlT25IYXMgPSB0aGlzLnVwZGF0ZUFnZU9uSGFzLCBzdGF0dXMgfSA9IGhhc09wdGlvbnNcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuI2tleU1hcC5nZXQoaylcbiAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpICYmXG4gICAgICAgIHYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgPT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLiNpc1N0YWxlKGluZGV4KSkge1xuICAgICAgICBpZiAodXBkYXRlQWdlT25IYXMpIHtcbiAgICAgICAgICB0aGlzLiN1cGRhdGVJdGVtQWdlKGluZGV4KVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICBzdGF0dXMuaGFzID0gJ2hpdCdcbiAgICAgICAgICB0aGlzLiNzdGF0dXNUVEwoc3RhdHVzLCBpbmRleClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBlbHNlIGlmIChzdGF0dXMpIHtcbiAgICAgICAgc3RhdHVzLmhhcyA9ICdzdGFsZSdcbiAgICAgICAgdGhpcy4jc3RhdHVzVFRMKHN0YXR1cywgaW5kZXgpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdGF0dXMpIHtcbiAgICAgIHN0YXR1cy5oYXMgPSAnbWlzcydcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogTGlrZSB7QGxpbmsgTFJVQ2FjaGUjZ2V0fSBidXQgZG9lc24ndCB1cGRhdGUgcmVjZW5jeSBvciBkZWxldGUgc3RhbGVcbiAgICogaXRlbXMuXG4gICAqXG4gICAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIGl0ZW0gaXMgc3RhbGUsIHVubGVzc1xuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuYWxsb3dTdGFsZX0gaXMgc2V0LlxuICAgKi9cbiAgcGVlayhrOiBLLCBwZWVrT3B0aW9uczogTFJVQ2FjaGUuUGVla09wdGlvbnM8SywgViwgRkM+ID0ge30pIHtcbiAgICBjb25zdCB7IGFsbG93U3RhbGUgPSB0aGlzLmFsbG93U3RhbGUgfSA9IHBlZWtPcHRpb25zXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspXG4gICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQgfHwgKCFhbGxvd1N0YWxlICYmIHRoaXMuI2lzU3RhbGUoaW5kZXgpKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHYgPSB0aGlzLiN2YWxMaXN0W2luZGV4XVxuICAgIC8vIGVpdGhlciBzdGFsZSBhbmQgYWxsb3dlZCwgb3IgZm9yY2luZyBhIHJlZnJlc2ggb2Ygbm9uLXN0YWxlIHZhbHVlXG4gICAgcmV0dXJuIHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpID8gdi5fX3N0YWxlV2hpbGVGZXRjaGluZyA6IHZcbiAgfVxuXG4gICNiYWNrZ3JvdW5kRmV0Y2goXG4gICAgazogSyxcbiAgICBpbmRleDogSW5kZXggfCB1bmRlZmluZWQsXG4gICAgb3B0aW9uczogTFJVQ2FjaGUuRmV0Y2hPcHRpb25zPEssIFYsIEZDPixcbiAgICBjb250ZXh0OiBhbnksXG4gICk6IEJhY2tncm91bmRGZXRjaDxWPiB7XG4gICAgY29uc3QgdiA9IGluZGV4ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0aGlzLiN2YWxMaXN0W2luZGV4XVxuICAgIGlmICh0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgcmV0dXJuIHZcbiAgICB9XG5cbiAgICBjb25zdCBhYyA9IG5ldyBBQygpXG4gICAgY29uc3QgeyBzaWduYWwgfSA9IG9wdGlvbnNcbiAgICAvLyB3aGVuL2lmIG91ciBBQyBzaWduYWxzLCB0aGVuIHN0b3AgbGlzdGVuaW5nIHRvIHRoZWlycy5cbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4gYWMuYWJvcnQoc2lnbmFsLnJlYXNvbiksIHtcbiAgICAgIHNpZ25hbDogYWMuc2lnbmFsLFxuICAgIH0pXG5cbiAgICBjb25zdCBmZXRjaE9wdHMgPSB7XG4gICAgICBzaWduYWw6IGFjLnNpZ25hbCxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBjb250ZXh0LFxuICAgIH1cblxuICAgIGNvbnN0IGNiID0gKHY6IFYgfCB1bmRlZmluZWQsIHVwZGF0ZUNhY2hlID0gZmFsc2UpOiBWIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgIGNvbnN0IHsgYWJvcnRlZCB9ID0gYWMuc2lnbmFsXG4gICAgICBjb25zdCBpZ25vcmVBYm9ydCA9IG9wdGlvbnMuaWdub3JlRmV0Y2hBYm9ydCAmJiB2ICE9PSB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHByb2NlZWQgPVxuICAgICAgICBvcHRpb25zLmlnbm9yZUZldGNoQWJvcnQgfHxcbiAgICAgICAgISEob3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaEFib3J0ICYmIHYgIT09IHVuZGVmaW5lZClcbiAgICAgIGlmIChvcHRpb25zLnN0YXR1cykge1xuICAgICAgICBpZiAoYWJvcnRlZCAmJiAhdXBkYXRlQ2FjaGUpIHtcbiAgICAgICAgICBvcHRpb25zLnN0YXR1cy5mZXRjaEFib3J0ZWQgPSB0cnVlXG4gICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hFcnJvciA9IGFjLnNpZ25hbC5yZWFzb25cbiAgICAgICAgICBpZiAoaWdub3JlQWJvcnQpIG9wdGlvbnMuc3RhdHVzLmZldGNoQWJvcnRJZ25vcmVkID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMuc3RhdHVzLmZldGNoUmVzb2x2ZWQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChhYm9ydGVkICYmICFpZ25vcmVBYm9ydCAmJiAhdXBkYXRlQ2FjaGUpIHtcbiAgICAgICAgcmV0dXJuIGZldGNoRmFpbChhYy5zaWduYWwucmVhc29uLCBwcm9jZWVkKVxuICAgICAgfVxuICAgICAgLy8gZWl0aGVyIHdlIGRpZG4ndCBhYm9ydCwgYW5kIGFyZSBzdGlsbCBoZXJlLCBvciB3ZSBkaWQsIGFuZCBpZ25vcmVkXG4gICAgICBjb25zdCBiZiA9IHAgYXMgQmFja2dyb3VuZEZldGNoPFY+XG4gICAgICAvLyBpZiBub3RoaW5nIGVsc2UgaGFzIGJlZW4gd3JpdHRlbiB0aGVyZSBidXQgd2UncmUgc2V0IHRvIHVwZGF0ZSB0aGVcbiAgICAgIC8vIGNhY2hlIGFuZCBpZ25vcmUgdGhlIGFib3J0LCBvciBpZiBpdCdzIHN0aWxsIHBlbmRpbmcgb24gdGhpcyBzcGVjaWZpY1xuICAgICAgLy8gYmFja2dyb3VuZCByZXF1ZXN0LCB0aGVuIHdyaXRlIGl0IHRvIHRoZSBjYWNoZS5cbiAgICAgIGNvbnN0IHZsID0gdGhpcy4jdmFsTGlzdFtpbmRleCBhcyBJbmRleF1cbiAgICAgIGlmICh2bCA9PT0gcCB8fCAoaWdub3JlQWJvcnQgJiYgdXBkYXRlQ2FjaGUgJiYgdmwgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChiZi5fX3N0YWxlV2hpbGVGZXRjaGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLiN2YWxMaXN0W2luZGV4IGFzIEluZGV4XSA9IGJmLl9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2RlbGV0ZShrLCAnZmV0Y2gnKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5zdGF0dXMpIG9wdGlvbnMuc3RhdHVzLmZldGNoVXBkYXRlZCA9IHRydWVcbiAgICAgICAgICB0aGlzLnNldChrLCB2LCBmZXRjaE9wdHMub3B0aW9ucylcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZcbiAgICB9XG5cbiAgICBjb25zdCBlYiA9IChlcjogYW55KSA9PiB7XG4gICAgICBpZiAob3B0aW9ucy5zdGF0dXMpIHtcbiAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hSZWplY3RlZCA9IHRydWVcbiAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hFcnJvciA9IGVyXG4gICAgICB9XG4gICAgICAvLyBkbyBub3QgcGFzcyBnbywgZG8gbm90IGNvbGxlY3QgJDIwMFxuICAgICAgcmV0dXJuIGZldGNoRmFpbChlciwgZmFsc2UpXG4gICAgfVxuXG4gICAgY29uc3QgZmV0Y2hGYWlsID0gKGVyOiBhbnksIHByb2NlZWQ6IGJvb2xlYW4pOiBWIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgIGNvbnN0IHsgYWJvcnRlZCB9ID0gYWMuc2lnbmFsXG4gICAgICBjb25zdCBhbGxvd1N0YWxlQWJvcnRlZCA9IGFib3J0ZWQgJiYgb3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaEFib3J0XG4gICAgICBjb25zdCBhbGxvd1N0YWxlID1cbiAgICAgICAgYWxsb3dTdGFsZUFib3J0ZWQgfHwgb3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvblxuICAgICAgY29uc3Qgbm9EZWxldGUgPSBhbGxvd1N0YWxlIHx8IG9wdGlvbnMubm9EZWxldGVPbkZldGNoUmVqZWN0aW9uXG4gICAgICBjb25zdCBiZiA9IHAgYXMgQmFja2dyb3VuZEZldGNoPFY+XG4gICAgICBpZiAodGhpcy4jdmFsTGlzdFtpbmRleCBhcyBJbmRleF0gPT09IHApIHtcbiAgICAgICAgLy8gaWYgd2UgYWxsb3cgc3RhbGUgb24gZmV0Y2ggcmVqZWN0aW9ucywgdGhlbiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0XG4gICAgICAgIC8vIHRoZSBzdGFsZSB2YWx1ZSBpcyBub3QgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZSB3aGVuIHRoZSBmZXRjaCBmYWlscy5cbiAgICAgICAgY29uc3QgZGVsID1cbiAgICAgICAgICAhbm9EZWxldGUgfHwgKCFwcm9jZWVkICYmIGJmLl9fc3RhbGVXaGlsZUZldGNoaW5nID09PSB1bmRlZmluZWQpXG4gICAgICAgIGlmIChkZWwpIHtcbiAgICAgICAgICB0aGlzLiNkZWxldGUoaywgJ2ZldGNoJylcbiAgICAgICAgfSBlbHNlIGlmICghYWxsb3dTdGFsZUFib3J0ZWQpIHtcbiAgICAgICAgICAvLyBzdGlsbCByZXBsYWNlIHRoZSAqcHJvbWlzZSogd2l0aCB0aGUgc3RhbGUgdmFsdWUsXG4gICAgICAgICAgLy8gc2luY2Ugd2UgYXJlIGRvbmUgd2l0aCB0aGUgcHJvbWlzZSBhdCB0aGlzIHBvaW50LlxuICAgICAgICAgIC8vIGxlYXZlIGl0IHVudG91Y2hlZCBpZiB3ZSdyZSBzdGlsbCB3YWl0aW5nIGZvciBhblxuICAgICAgICAgIC8vIGFib3J0ZWQgYmFja2dyb3VuZCBmZXRjaCB0aGF0IGhhc24ndCB5ZXQgcmV0dXJuZWQuXG4gICAgICAgICAgdGhpcy4jdmFsTGlzdFtpbmRleCBhcyBJbmRleF0gPSBiZi5fX3N0YWxlV2hpbGVGZXRjaGluZ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYWxsb3dTdGFsZSkge1xuICAgICAgICBpZiAob3B0aW9ucy5zdGF0dXMgJiYgYmYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG9wdGlvbnMuc3RhdHVzLnJldHVybmVkU3RhbGUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJmLl9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICB9IGVsc2UgaWYgKGJmLl9fcmV0dXJuZWQgPT09IGJmKSB7XG4gICAgICAgIHRocm93IGVyXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGNhbGwgPSAoXG4gICAgICByZXM6ICh2OiBWIHwgdW5kZWZpbmVkKSA9PiB2b2lkLFxuICAgICAgcmVqOiAoZTogYW55KSA9PiB2b2lkLFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgZm1wID0gdGhpcy4jZmV0Y2hNZXRob2Q/LihrLCB2LCBmZXRjaE9wdHMpXG4gICAgICBpZiAoZm1wICYmIGZtcCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgZm1wLnRoZW4odiA9PiByZXModiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdiksIHJlailcbiAgICAgIH1cbiAgICAgIC8vIGlnbm9yZWQsIHdlIGdvIHVudGlsIHdlIGZpbmlzaCwgcmVnYXJkbGVzcy5cbiAgICAgIC8vIGRlZmVyIGNoZWNrIHVudGlsIHdlIGFyZSBhY3R1YWxseSBhYm9ydGluZyxcbiAgICAgIC8vIHNvIGZldGNoTWV0aG9kIGNhbiBvdmVycmlkZS5cbiAgICAgIGFjLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+IHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmlnbm9yZUZldGNoQWJvcnQgfHwgb3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaEFib3J0KSB7XG4gICAgICAgICAgcmVzKHVuZGVmaW5lZClcbiAgICAgICAgICAvLyB3aGVuIGl0IGV2ZW50dWFsbHkgcmVzb2x2ZXMsIHVwZGF0ZSB0aGUgY2FjaGUuXG4gICAgICAgICAgaWYgKG9wdGlvbnMuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCkge1xuICAgICAgICAgICAgcmVzID0gdiA9PiBjYih2LCB0cnVlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zdGF0dXMpIG9wdGlvbnMuc3RhdHVzLmZldGNoRGlzcGF0Y2hlZCA9IHRydWVcbiAgICBjb25zdCBwID0gbmV3IFByb21pc2UocGNhbGwpLnRoZW4oY2IsIGViKVxuICAgIGNvbnN0IGJmOiBCYWNrZ3JvdW5kRmV0Y2g8Vj4gPSBPYmplY3QuYXNzaWduKHAsIHtcbiAgICAgIF9fYWJvcnRDb250cm9sbGVyOiBhYyxcbiAgICAgIF9fc3RhbGVXaGlsZUZldGNoaW5nOiB2LFxuICAgICAgX19yZXR1cm5lZDogdW5kZWZpbmVkLFxuICAgIH0pXG5cbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gaW50ZXJuYWwsIGRvbid0IGV4cG9zZSBzdGF0dXMuXG4gICAgICB0aGlzLnNldChrLCBiZiwgeyAuLi5mZXRjaE9wdHMub3B0aW9ucywgc3RhdHVzOiB1bmRlZmluZWQgfSlcbiAgICAgIGluZGV4ID0gdGhpcy4ja2V5TWFwLmdldChrKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiN2YWxMaXN0W2luZGV4XSA9IGJmXG4gICAgfVxuICAgIHJldHVybiBiZlxuICB9XG5cbiAgI2lzQmFja2dyb3VuZEZldGNoKHA6IGFueSk6IHAgaXMgQmFja2dyb3VuZEZldGNoPFY+IHtcbiAgICBpZiAoIXRoaXMuI2hhc0ZldGNoTWV0aG9kKSByZXR1cm4gZmFsc2VcbiAgICBjb25zdCBiID0gcCBhcyBCYWNrZ3JvdW5kRmV0Y2g8Vj5cbiAgICByZXR1cm4gKFxuICAgICAgISFiICYmXG4gICAgICBiIGluc3RhbmNlb2YgUHJvbWlzZSAmJlxuICAgICAgYi5oYXNPd25Qcm9wZXJ0eSgnX19zdGFsZVdoaWxlRmV0Y2hpbmcnKSAmJlxuICAgICAgYi5fX2Fib3J0Q29udHJvbGxlciBpbnN0YW5jZW9mIEFDXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYW4gYXN5bmNocm9ub3VzIGNhY2hlZCBmZXRjaCB1c2luZyB0aGVcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSBmdW5jdGlvbi5cbiAgICpcbiAgICogSWYgdGhlIHZhbHVlIGlzIGluIHRoZSBjYWNoZSBhbmQgbm90IHN0YWxlLCB0aGVuIHRoZSByZXR1cm5lZFxuICAgKiBQcm9taXNlIHJlc29sdmVzIHRvIHRoZSB2YWx1ZS5cbiAgICpcbiAgICogSWYgbm90IGluIHRoZSBjYWNoZSwgb3IgYmV5b25kIGl0cyBUVEwgc3RhbGVuZXNzLCB0aGVuXG4gICAqIGBmZXRjaE1ldGhvZChrZXksIHN0YWxlVmFsdWUsIHsgb3B0aW9ucywgc2lnbmFsLCBjb250ZXh0IH0pYCBpc1xuICAgKiBjYWxsZWQsIGFuZCB0aGUgdmFsdWUgcmV0dXJuZWQgd2lsbCBiZSBhZGRlZCB0byB0aGUgY2FjaGUgb25jZVxuICAgKiByZXNvbHZlZC5cbiAgICpcbiAgICogSWYgY2FsbGVkIHdpdGggYGFsbG93U3RhbGVgLCBhbmQgYW4gYXN5bmNocm9ub3VzIGZldGNoIGlzXG4gICAqIGN1cnJlbnRseSBpbiBwcm9ncmVzcyB0byByZWxvYWQgYSBzdGFsZSB2YWx1ZSwgdGhlbiB0aGUgZm9ybWVyXG4gICAqIHN0YWxlIHZhbHVlIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAqXG4gICAqIElmIGNhbGxlZCB3aXRoIGBmb3JjZVJlZnJlc2hgLCB0aGVuIHRoZSBjYWNoZWQgaXRlbSB3aWxsIGJlXG4gICAqIHJlLWZldGNoZWQsIGV2ZW4gaWYgaXQgaXMgbm90IHN0YWxlLiBIb3dldmVyLCBpZiBgYWxsb3dTdGFsZWAgaXMgYWxzb1xuICAgKiBzZXQsIHRoZW4gdGhlIG9sZCB2YWx1ZSB3aWxsIHN0aWxsIGJlIHJldHVybmVkLiBUaGlzIGlzIHVzZWZ1bFxuICAgKiBpbiBjYXNlcyB3aGVyZSB5b3Ugd2FudCB0byBmb3JjZSBhIHJlbG9hZCBvZiBhIGNhY2hlZCB2YWx1ZS4gSWZcbiAgICogYSBiYWNrZ3JvdW5kIGZldGNoIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHRoZW4gYGZvcmNlUmVmcmVzaGBcbiAgICogaGFzIG5vIGVmZmVjdC5cbiAgICpcbiAgICogSWYgbXVsdGlwbGUgZmV0Y2hlcyBmb3IgdGhlIHNhbWUga2V5IGFyZSBpc3N1ZWQsIHRoZW4gdGhleSB3aWxsIGFsbCBiZVxuICAgKiBjb2FsZXNjZWQgaW50byBhIHNpbmdsZSBjYWxsIHRvIGZldGNoTWV0aG9kLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhpcyBtZWFucyB0aGF0IGhhbmRsaW5nIG9wdGlvbnMgc3VjaCBhc1xuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydH0sXG4gICAqIHtAbGluayBMUlVDYWNoZS5GZXRjaE9wdGlvbnMuc2lnbmFsfSxcbiAgICogYW5kIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbn0gd2lsbCBiZVxuICAgKiBkZXRlcm1pbmVkIGJ5IHRoZSBGSVJTVCBmZXRjaCgpIGNhbGwgZm9yIGEgZ2l2ZW4ga2V5LlxuICAgKlxuICAgKiBUaGlzIGlzIGEga25vd24gKGZpeGFibGUpIHNob3J0Y29taW5nIHdoaWNoIHdpbGwgYmUgYWRkcmVzZWQgb24gd2hlblxuICAgKiBzb21lb25lIGNvbXBsYWlucyBhYm91dCBpdCwgYXMgdGhlIGZpeCB3b3VsZCBpbnZvbHZlIGFkZGVkIGNvbXBsZXhpdHkgYW5kXG4gICAqIG1heSBub3QgYmUgd29ydGggdGhlIGNvc3RzIGZvciB0aGlzIGVkZ2UgY2FzZS5cbiAgICpcbiAgICogSWYge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoaXMgaXNcbiAgICogZWZmZWN0aXZlbHkgYW4gYWxpYXMgZm9yIGBQcm9taXNlLnJlc29sdmUoY2FjaGUuZ2V0KGtleSkpYC5cbiAgICpcbiAgICogV2hlbiB0aGUgZmV0Y2ggbWV0aG9kIHJlc29sdmVzIHRvIGEgdmFsdWUsIGlmIHRoZSBmZXRjaCBoYXMgbm90XG4gICAqIGJlZW4gYWJvcnRlZCBkdWUgdG8gZGVsZXRpb24sIGV2aWN0aW9uLCBvciBiZWluZyBvdmVyd3JpdHRlbixcbiAgICogdGhlbiBpdCBpcyBhZGRlZCB0byB0aGUgY2FjaGUgdXNpbmcgdGhlIG9wdGlvbnMgcHJvdmlkZWQuXG4gICAqXG4gICAqIElmIHRoZSBrZXkgaXMgZXZpY3RlZCBvciBkZWxldGVkIGJlZm9yZSB0aGUgYGZldGNoTWV0aG9kYFxuICAgKiByZXNvbHZlcywgdGhlbiB0aGUgQWJvcnRTaWduYWwgcGFzc2VkIHRvIHRoZSBgZmV0Y2hNZXRob2RgIHdpbGxcbiAgICogcmVjZWl2ZSBhbiBgYWJvcnRgIGV2ZW50LCBhbmQgdGhlIHByb21pc2UgcmV0dXJuZWQgYnkgYGZldGNoKClgXG4gICAqIHdpbGwgcmVqZWN0IHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGFib3J0LlxuICAgKlxuICAgKiBJZiBhIGBzaWduYWxgIGlzIHBhc3NlZCB0byB0aGUgYGZldGNoKClgIGNhbGwsIHRoZW4gYWJvcnRpbmcgdGhlXG4gICAqIHNpZ25hbCB3aWxsIGFib3J0IHRoZSBmZXRjaCBhbmQgY2F1c2UgdGhlIGBmZXRjaCgpYCBwcm9taXNlIHRvXG4gICAqIHJlamVjdCB3aXRoIHRoZSByZWFzb24gcHJvdmlkZWQuXG4gICAqXG4gICAqICoqU2V0dGluZyBgY29udGV4dGAqKlxuICAgKlxuICAgKiBJZiBhbiBgRkNgIHR5cGUgaXMgc2V0IHRvIGEgdHlwZSBvdGhlciB0aGFuIGB1bmtub3duYCwgYHZvaWRgLCBvclxuICAgKiBgdW5kZWZpbmVkYCBpbiB0aGUge0BsaW5rIExSVUNhY2hlfSBjb25zdHJ1Y3RvciwgdGhlbiBhbGxcbiAgICogY2FsbHMgdG8gYGNhY2hlLmZldGNoKClgIF9tdXN0XyBwcm92aWRlIGEgYGNvbnRleHRgIG9wdGlvbi4gSWZcbiAgICogc2V0IHRvIGB1bmRlZmluZWRgIG9yIGB2b2lkYCwgdGhlbiBjYWxscyB0byBmZXRjaCBfbXVzdCBub3RfXG4gICAqIHByb3ZpZGUgYSBgY29udGV4dGAgb3B0aW9uLlxuICAgKlxuICAgKiBUaGUgYGNvbnRleHRgIHBhcmFtIGFsbG93cyB5b3UgdG8gcHJvdmlkZSBhcmJpdHJhcnkgZGF0YSB0aGF0XG4gICAqIG1pZ2h0IGJlIHJlbGV2YW50IGluIHRoZSBjb3Vyc2Ugb2YgZmV0Y2hpbmcgdGhlIGRhdGEuIEl0IGlzIG9ubHlcbiAgICogcmVsZXZhbnQgZm9yIHRoZSBjb3Vyc2Ugb2YgYSBzaW5nbGUgYGZldGNoKClgIG9wZXJhdGlvbiwgYW5kXG4gICAqIGRpc2NhcmRlZCBhZnRlcndhcmRzLlxuICAgKlxuICAgKiAqKk5vdGU6IGBmZXRjaCgpYCBjYWxscyBhcmUgaW5mbGlnaHQtdW5pcXVlKipcbiAgICpcbiAgICogSWYgeW91IGNhbGwgYGZldGNoKClgIG11bHRpcGxlIHRpbWVzIHdpdGggdGhlIHNhbWUga2V5IHZhbHVlLFxuICAgKiB0aGVuIGV2ZXJ5IGNhbGwgYWZ0ZXIgdGhlIGZpcnN0IHdpbGwgcmVzb2x2ZSBvbiB0aGUgc2FtZVxuICAgKiBwcm9taXNlPHN1cD4xPC9zdXA+LFxuICAgKiBfZXZlbiBpZiB0aGV5IGhhdmUgZGlmZmVyZW50IHNldHRpbmdzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGNoYW5nZVxuICAgKiB0aGUgYmVoYXZpb3Igb2YgdGhlIGZldGNoXywgc3VjaCBhcyBgbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uYFxuICAgKiBvciBgaWdub3JlRmV0Y2hBYm9ydGAuXG4gICAqXG4gICAqIEluIG1vc3QgY2FzZXMsIHRoaXMgaXMgbm90IGEgcHJvYmxlbSAoaW4gZmFjdCwgb25seSBmZXRjaGluZ1xuICAgKiBzb21ldGhpbmcgb25jZSBpcyB3aGF0IHlvdSBwcm9iYWJseSB3YW50LCBpZiB5b3UncmUgY2FjaGluZyBpblxuICAgKiB0aGUgZmlyc3QgcGxhY2UpLiBJZiB5b3UgYXJlIGNoYW5naW5nIHRoZSBmZXRjaCgpIG9wdGlvbnNcbiAgICogZHJhbWF0aWNhbGx5IGJldHdlZW4gcnVucywgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgeW91IG1pZ2h0XG4gICAqIGJlIHRyeWluZyB0byBmaXQgZGl2ZXJnZW50IHNlbWFudGljcyBpbnRvIGEgc2luZ2xlIG9iamVjdCwgYW5kXG4gICAqIHdvdWxkIGJlIGJldHRlciBvZmYgd2l0aCBtdWx0aXBsZSBjYWNoZSBpbnN0YW5jZXMuXG4gICAqXG4gICAqICoqMSoqOiBJZSwgdGhleSdyZSBub3QgdGhlIFwic2FtZSBQcm9taXNlXCIsIGJ1dCB0aGV5IHJlc29sdmUgYXRcbiAgICogdGhlIHNhbWUgdGltZSwgYmVjYXVzZSB0aGV5J3JlIGJvdGggd2FpdGluZyBvbiB0aGUgc2FtZVxuICAgKiB1bmRlcmx5aW5nIGZldGNoTWV0aG9kIHJlc3BvbnNlLlxuICAgKi9cblxuICBmZXRjaChcbiAgICBrOiBLLFxuICAgIGZldGNoT3B0aW9uczogdW5rbm93biBleHRlbmRzIEZDID8gTFJVQ2FjaGUuRmV0Y2hPcHRpb25zPEssIFYsIEZDPlxuICAgIDogRkMgZXh0ZW5kcyB1bmRlZmluZWQgfCB2b2lkID8gTFJVQ2FjaGUuRmV0Y2hPcHRpb25zTm9Db250ZXh0PEssIFY+XG4gICAgOiBMUlVDYWNoZS5GZXRjaE9wdGlvbnNXaXRoQ29udGV4dDxLLCBWLCBGQz4sXG4gICk6IFByb21pc2U8dW5kZWZpbmVkIHwgVj5cblxuICAvLyB0aGlzIG92ZXJsb2FkIG5vdCBhbGxvd2VkIGlmIGNvbnRleHQgaXMgcmVxdWlyZWRcbiAgZmV0Y2goXG4gICAgazogdW5rbm93biBleHRlbmRzIEZDID8gS1xuICAgIDogRkMgZXh0ZW5kcyB1bmRlZmluZWQgfCB2b2lkID8gS1xuICAgIDogbmV2ZXIsXG4gICAgZmV0Y2hPcHRpb25zPzogdW5rbm93biBleHRlbmRzIEZDID8gTFJVQ2FjaGUuRmV0Y2hPcHRpb25zPEssIFYsIEZDPlxuICAgIDogRkMgZXh0ZW5kcyB1bmRlZmluZWQgfCB2b2lkID8gTFJVQ2FjaGUuRmV0Y2hPcHRpb25zTm9Db250ZXh0PEssIFY+XG4gICAgOiBuZXZlcixcbiAgKTogUHJvbWlzZTx1bmRlZmluZWQgfCBWPlxuXG4gIGFzeW5jIGZldGNoKFxuICAgIGs6IEssXG4gICAgZmV0Y2hPcHRpb25zOiBMUlVDYWNoZS5GZXRjaE9wdGlvbnM8SywgViwgRkM+ID0ge30sXG4gICk6IFByb21pc2U8dW5kZWZpbmVkIHwgVj4ge1xuICAgIGNvbnN0IHtcbiAgICAgIC8vIGdldCBvcHRpb25zXG4gICAgICBhbGxvd1N0YWxlID0gdGhpcy5hbGxvd1N0YWxlLFxuICAgICAgdXBkYXRlQWdlT25HZXQgPSB0aGlzLnVwZGF0ZUFnZU9uR2V0LFxuICAgICAgbm9EZWxldGVPblN0YWxlR2V0ID0gdGhpcy5ub0RlbGV0ZU9uU3RhbGVHZXQsXG4gICAgICAvLyBzZXQgb3B0aW9uc1xuICAgICAgdHRsID0gdGhpcy50dGwsXG4gICAgICBub0Rpc3Bvc2VPblNldCA9IHRoaXMubm9EaXNwb3NlT25TZXQsXG4gICAgICBzaXplID0gMCxcbiAgICAgIHNpemVDYWxjdWxhdGlvbiA9IHRoaXMuc2l6ZUNhbGN1bGF0aW9uLFxuICAgICAgbm9VcGRhdGVUVEwgPSB0aGlzLm5vVXBkYXRlVFRMLFxuICAgICAgLy8gZmV0Y2ggZXhjbHVzaXZlIG9wdGlvbnNcbiAgICAgIG5vRGVsZXRlT25GZXRjaFJlamVjdGlvbiA9IHRoaXMubm9EZWxldGVPbkZldGNoUmVqZWN0aW9uLFxuICAgICAgYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb24gPSB0aGlzLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uLFxuICAgICAgaWdub3JlRmV0Y2hBYm9ydCA9IHRoaXMuaWdub3JlRmV0Y2hBYm9ydCxcbiAgICAgIGFsbG93U3RhbGVPbkZldGNoQWJvcnQgPSB0aGlzLmFsbG93U3RhbGVPbkZldGNoQWJvcnQsXG4gICAgICBjb250ZXh0LFxuICAgICAgZm9yY2VSZWZyZXNoID0gZmFsc2UsXG4gICAgICBzdGF0dXMsXG4gICAgICBzaWduYWwsXG4gICAgfSA9IGZldGNoT3B0aW9uc1xuXG4gICAgaWYgKCF0aGlzLiNoYXNGZXRjaE1ldGhvZCkge1xuICAgICAgaWYgKHN0YXR1cykgc3RhdHVzLmZldGNoID0gJ2dldCdcbiAgICAgIHJldHVybiB0aGlzLmdldChrLCB7XG4gICAgICAgIGFsbG93U3RhbGUsXG4gICAgICAgIHVwZGF0ZUFnZU9uR2V0LFxuICAgICAgICBub0RlbGV0ZU9uU3RhbGVHZXQsXG4gICAgICAgIHN0YXR1cyxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIGFsbG93U3RhbGUsXG4gICAgICB1cGRhdGVBZ2VPbkdldCxcbiAgICAgIG5vRGVsZXRlT25TdGFsZUdldCxcbiAgICAgIHR0bCxcbiAgICAgIG5vRGlzcG9zZU9uU2V0LFxuICAgICAgc2l6ZSxcbiAgICAgIHNpemVDYWxjdWxhdGlvbixcbiAgICAgIG5vVXBkYXRlVFRMLFxuICAgICAgbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uLFxuICAgICAgYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb24sXG4gICAgICBhbGxvd1N0YWxlT25GZXRjaEFib3J0LFxuICAgICAgaWdub3JlRmV0Y2hBYm9ydCxcbiAgICAgIHN0YXR1cyxcbiAgICAgIHNpZ25hbCxcbiAgICB9XG5cbiAgICBsZXQgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspXG4gICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChzdGF0dXMpIHN0YXR1cy5mZXRjaCA9ICdtaXNzJ1xuICAgICAgY29uc3QgcCA9IHRoaXMuI2JhY2tncm91bmRGZXRjaChrLCBpbmRleCwgb3B0aW9ucywgY29udGV4dClcbiAgICAgIHJldHVybiAocC5fX3JldHVybmVkID0gcClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW4gY2FjaGUsIG1heWJlIGFscmVhZHkgZmV0Y2hpbmdcbiAgICAgIGNvbnN0IHYgPSB0aGlzLiN2YWxMaXN0W2luZGV4XVxuICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgIGNvbnN0IHN0YWxlID0gYWxsb3dTdGFsZSAmJiB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nICE9PSB1bmRlZmluZWRcbiAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgIHN0YXR1cy5mZXRjaCA9ICdpbmZsaWdodCdcbiAgICAgICAgICBpZiAoc3RhbGUpIHN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGFsZSA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgOiAodi5fX3JldHVybmVkID0gdilcbiAgICAgIH1cblxuICAgICAgLy8gaWYgd2UgZm9yY2UgYSByZWZyZXNoLCB0aGF0IG1lYW5zIGRvIE5PVCBzZXJ2ZSB0aGUgY2FjaGVkIHZhbHVlLFxuICAgICAgLy8gdW5sZXNzIHdlIGFyZSBhbHJlYWR5IGluIHRoZSBwcm9jZXNzIG9mIHJlZnJlc2hpbmcgdGhlIGNhY2hlLlxuICAgICAgY29uc3QgaXNTdGFsZSA9IHRoaXMuI2lzU3RhbGUoaW5kZXgpXG4gICAgICBpZiAoIWZvcmNlUmVmcmVzaCAmJiAhaXNTdGFsZSkge1xuICAgICAgICBpZiAoc3RhdHVzKSBzdGF0dXMuZmV0Y2ggPSAnaGl0J1xuICAgICAgICB0aGlzLiNtb3ZlVG9UYWlsKGluZGV4KVxuICAgICAgICBpZiAodXBkYXRlQWdlT25HZXQpIHtcbiAgICAgICAgICB0aGlzLiN1cGRhdGVJdGVtQWdlKGluZGV4KVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMpIHRoaXMuI3N0YXR1c1RUTChzdGF0dXMsIGluZGV4KVxuICAgICAgICByZXR1cm4gdlxuICAgICAgfVxuXG4gICAgICAvLyBvaywgaXQgaXMgc3RhbGUgb3IgYSBmb3JjZWQgcmVmcmVzaCwgYW5kIG5vdCBhbHJlYWR5IGZldGNoaW5nLlxuICAgICAgLy8gcmVmcmVzaCB0aGUgY2FjaGUuXG4gICAgICBjb25zdCBwID0gdGhpcy4jYmFja2dyb3VuZEZldGNoKGssIGluZGV4LCBvcHRpb25zLCBjb250ZXh0KVxuICAgICAgY29uc3QgaGFzU3RhbGUgPSBwLl9fc3RhbGVXaGlsZUZldGNoaW5nICE9PSB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHN0YWxlVmFsID0gaGFzU3RhbGUgJiYgYWxsb3dTdGFsZVxuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBzdGF0dXMuZmV0Y2ggPSBpc1N0YWxlID8gJ3N0YWxlJyA6ICdyZWZyZXNoJ1xuICAgICAgICBpZiAoc3RhbGVWYWwgJiYgaXNTdGFsZSkgc3RhdHVzLnJldHVybmVkU3RhbGUgPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhbGVWYWwgPyBwLl9fc3RhbGVXaGlsZUZldGNoaW5nIDogKHAuX19yZXR1cm5lZCA9IHApXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluIHNvbWUgY2FzZXMsIGBjYWNoZS5mZXRjaCgpYCBtYXkgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCwgZWl0aGVyIGJlY2F1c2VcbiAgICogYSB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UjZmV0Y2hNZXRob2R9IHdhcyBub3QgcHJvdmlkZWQgKHR1cm5pbmdcbiAgICogYGNhY2hlLmZldGNoKGspYCBpbnRvIGp1c3QgYW4gYXN5bmMgd3JhcHBlciBhcm91bmQgYGNhY2hlLmdldChrKWApIG9yXG4gICAqIGJlY2F1c2UgYGlnbm9yZUZldGNoQWJvcnRgIHdhcyBzcGVjaWZpZWQgKGVpdGhlciB0byB0aGUgY29uc3RydWN0b3Igb3JcbiAgICogaW4gdGhlIHtAbGluayBMUlVDYWNoZS5GZXRjaE9wdGlvbnN9KS4gQWxzbywgdGhlXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5mZXRjaE1ldGhvZH0gbWF5IHJldHVybiBgdW5kZWZpbmVkYCBvciBgdm9pZGAsIG1ha2luZ1xuICAgKiB0aGUgdGVzdCBldmVuIG1vcmUgY29tcGxpY2F0ZWQuXG4gICAqXG4gICAqIEJlY2F1c2UgaW5mZXJyaW5nIHRoZSBjYXNlcyB3aGVyZSBgdW5kZWZpbmVkYCBtaWdodCBiZSByZXR1cm5lZCBhcmUgc29cbiAgICogY3VtYmVyc29tZSwgYnV0IHRlc3RpbmcgZm9yIGB1bmRlZmluZWRgIGNhbiBhbHNvIGJlIGFubm95aW5nLCB0aGlzIG1ldGhvZFxuICAgKiBjYW4gYmUgdXNlZCwgd2hpY2ggd2lsbCByZWplY3QgaWYgYHRoaXMuZmV0Y2goKWAgcmVzb2x2ZXMgdG8gdW5kZWZpbmVkLlxuICAgKi9cbiAgZm9yY2VGZXRjaChcbiAgICBrOiBLLFxuICAgIGZldGNoT3B0aW9uczogdW5rbm93biBleHRlbmRzIEZDID8gTFJVQ2FjaGUuRmV0Y2hPcHRpb25zPEssIFYsIEZDPlxuICAgIDogRkMgZXh0ZW5kcyB1bmRlZmluZWQgfCB2b2lkID8gTFJVQ2FjaGUuRmV0Y2hPcHRpb25zTm9Db250ZXh0PEssIFY+XG4gICAgOiBMUlVDYWNoZS5GZXRjaE9wdGlvbnNXaXRoQ29udGV4dDxLLCBWLCBGQz4sXG4gICk6IFByb21pc2U8Vj5cbiAgLy8gdGhpcyBvdmVybG9hZCBub3QgYWxsb3dlZCBpZiBjb250ZXh0IGlzIHJlcXVpcmVkXG4gIGZvcmNlRmV0Y2goXG4gICAgazogdW5rbm93biBleHRlbmRzIEZDID8gS1xuICAgIDogRkMgZXh0ZW5kcyB1bmRlZmluZWQgfCB2b2lkID8gS1xuICAgIDogbmV2ZXIsXG4gICAgZmV0Y2hPcHRpb25zPzogdW5rbm93biBleHRlbmRzIEZDID8gTFJVQ2FjaGUuRmV0Y2hPcHRpb25zPEssIFYsIEZDPlxuICAgIDogRkMgZXh0ZW5kcyB1bmRlZmluZWQgfCB2b2lkID8gTFJVQ2FjaGUuRmV0Y2hPcHRpb25zTm9Db250ZXh0PEssIFY+XG4gICAgOiBuZXZlcixcbiAgKTogUHJvbWlzZTxWPlxuICBhc3luYyBmb3JjZUZldGNoKFxuICAgIGs6IEssXG4gICAgZmV0Y2hPcHRpb25zOiBMUlVDYWNoZS5GZXRjaE9wdGlvbnM8SywgViwgRkM+ID0ge30sXG4gICk6IFByb21pc2U8Vj4ge1xuICAgIGNvbnN0IHYgPSBhd2FpdCB0aGlzLmZldGNoKFxuICAgICAgayxcbiAgICAgIGZldGNoT3B0aW9ucyBhcyB1bmtub3duIGV4dGVuZHMgRkMgPyBMUlVDYWNoZS5GZXRjaE9wdGlvbnM8SywgViwgRkM+XG4gICAgICA6IEZDIGV4dGVuZHMgdW5kZWZpbmVkIHwgdm9pZCA/IExSVUNhY2hlLkZldGNoT3B0aW9uc05vQ29udGV4dDxLLCBWPlxuICAgICAgOiBMUlVDYWNoZS5GZXRjaE9wdGlvbnNXaXRoQ29udGV4dDxLLCBWLCBGQz4sXG4gICAgKVxuICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcignZmV0Y2goKSByZXR1cm5lZCB1bmRlZmluZWQnKVxuICAgIHJldHVybiB2XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGtleSBpcyBmb3VuZCBpbiB0aGUgY2FjaGUsIHRoZW4gdGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAqIHtAbGluayBMUlVDYWNoZSNnZXR9LiBJZiBub3QsIGluIHRoZSBjYWNoZSwgdGhlbiBjYWxjdWxhdGUgdGhlIHZhbHVlIHVzaW5nXG4gICAqIHRoZSB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UubWVtb01ldGhvZH0sIGFuZCBhZGQgaXQgdG8gdGhlIGNhY2hlLlxuICAgKlxuICAgKiBJZiBhbiBgRkNgIHR5cGUgaXMgc2V0IHRvIGEgdHlwZSBvdGhlciB0aGFuIGB1bmtub3duYCwgYHZvaWRgLCBvclxuICAgKiBgdW5kZWZpbmVkYCBpbiB0aGUgTFJVQ2FjaGUgY29uc3RydWN0b3IsIHRoZW4gYWxsIGNhbGxzIHRvIGBjYWNoZS5tZW1vKClgXG4gICAqIF9tdXN0XyBwcm92aWRlIGEgYGNvbnRleHRgIG9wdGlvbi4gSWYgc2V0IHRvIGB1bmRlZmluZWRgIG9yIGB2b2lkYCwgdGhlblxuICAgKiBjYWxscyB0byBtZW1vIF9tdXN0IG5vdF8gcHJvdmlkZSBhIGBjb250ZXh0YCBvcHRpb24uXG4gICAqXG4gICAqIFRoZSBgY29udGV4dGAgcGFyYW0gYWxsb3dzIHlvdSB0byBwcm92aWRlIGFyYml0cmFyeSBkYXRhIHRoYXQgbWlnaHQgYmVcbiAgICogcmVsZXZhbnQgaW4gdGhlIGNvdXJzZSBvZiBmZXRjaGluZyB0aGUgZGF0YS4gSXQgaXMgb25seSByZWxldmFudCBmb3IgdGhlXG4gICAqIGNvdXJzZSBvZiBhIHNpbmdsZSBgbWVtbygpYCBvcGVyYXRpb24sIGFuZCBkaXNjYXJkZWQgYWZ0ZXJ3YXJkcy5cbiAgICovXG4gIG1lbW8oXG4gICAgazogSyxcbiAgICBtZW1vT3B0aW9uczogdW5rbm93biBleHRlbmRzIEZDID8gTFJVQ2FjaGUuTWVtb09wdGlvbnM8SywgViwgRkM+XG4gICAgOiBGQyBleHRlbmRzIHVuZGVmaW5lZCB8IHZvaWQgPyBMUlVDYWNoZS5NZW1vT3B0aW9uc05vQ29udGV4dDxLLCBWPlxuICAgIDogTFJVQ2FjaGUuTWVtb09wdGlvbnNXaXRoQ29udGV4dDxLLCBWLCBGQz4sXG4gICk6IFZcbiAgLy8gdGhpcyBvdmVybG9hZCBub3QgYWxsb3dlZCBpZiBjb250ZXh0IGlzIHJlcXVpcmVkXG4gIG1lbW8oXG4gICAgazogdW5rbm93biBleHRlbmRzIEZDID8gS1xuICAgIDogRkMgZXh0ZW5kcyB1bmRlZmluZWQgfCB2b2lkID8gS1xuICAgIDogbmV2ZXIsXG4gICAgbWVtb09wdGlvbnM/OiB1bmtub3duIGV4dGVuZHMgRkMgPyBMUlVDYWNoZS5NZW1vT3B0aW9uczxLLCBWLCBGQz5cbiAgICA6IEZDIGV4dGVuZHMgdW5kZWZpbmVkIHwgdm9pZCA/IExSVUNhY2hlLk1lbW9PcHRpb25zTm9Db250ZXh0PEssIFY+XG4gICAgOiBuZXZlcixcbiAgKTogVlxuICBtZW1vKGs6IEssIG1lbW9PcHRpb25zOiBMUlVDYWNoZS5NZW1vT3B0aW9uczxLLCBWLCBGQz4gPSB7fSkge1xuICAgIGNvbnN0IG1lbW9NZXRob2QgPSB0aGlzLiNtZW1vTWV0aG9kXG4gICAgaWYgKCFtZW1vTWV0aG9kKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIG1lbW9NZXRob2QgcHJvdmlkZWQgdG8gY29uc3RydWN0b3InKVxuICAgIH1cbiAgICBjb25zdCB7IGNvbnRleHQsIGZvcmNlUmVmcmVzaCwgLi4ub3B0aW9ucyB9ID0gbWVtb09wdGlvbnNcbiAgICBjb25zdCB2ID0gdGhpcy5nZXQoaywgb3B0aW9ucylcbiAgICBpZiAoIWZvcmNlUmVmcmVzaCAmJiB2ICE9PSB1bmRlZmluZWQpIHJldHVybiB2XG4gICAgY29uc3QgdnYgPSBtZW1vTWV0aG9kKGssIHYsIHtcbiAgICAgIG9wdGlvbnMsXG4gICAgICBjb250ZXh0LFxuICAgIH0gYXMgTFJVQ2FjaGUuTWVtb2l6ZXJPcHRpb25zPEssIFYsIEZDPilcbiAgICB0aGlzLnNldChrLCB2diwgb3B0aW9ucylcbiAgICByZXR1cm4gdnZcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSB2YWx1ZSBmcm9tIHRoZSBjYWNoZS4gV2lsbCB1cGRhdGUgdGhlIHJlY2VuY3kgb2YgdGhlIGNhY2hlXG4gICAqIGVudHJ5IGZvdW5kLlxuICAgKlxuICAgKiBJZiB0aGUga2V5IGlzIG5vdCBmb3VuZCwgZ2V0KCkgd2lsbCByZXR1cm4gYHVuZGVmaW5lZGAuXG4gICAqL1xuICBnZXQoazogSywgZ2V0T3B0aW9uczogTFJVQ2FjaGUuR2V0T3B0aW9uczxLLCBWLCBGQz4gPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFsbG93U3RhbGUgPSB0aGlzLmFsbG93U3RhbGUsXG4gICAgICB1cGRhdGVBZ2VPbkdldCA9IHRoaXMudXBkYXRlQWdlT25HZXQsXG4gICAgICBub0RlbGV0ZU9uU3RhbGVHZXQgPSB0aGlzLm5vRGVsZXRlT25TdGFsZUdldCxcbiAgICAgIHN0YXR1cyxcbiAgICB9ID0gZ2V0T3B0aW9uc1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy4ja2V5TWFwLmdldChrKVxuICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdXG4gICAgICBjb25zdCBmZXRjaGluZyA9IHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHZhbHVlKVxuICAgICAgaWYgKHN0YXR1cykgdGhpcy4jc3RhdHVzVFRMKHN0YXR1cywgaW5kZXgpXG4gICAgICBpZiAodGhpcy4jaXNTdGFsZShpbmRleCkpIHtcbiAgICAgICAgaWYgKHN0YXR1cykgc3RhdHVzLmdldCA9ICdzdGFsZSdcbiAgICAgICAgLy8gZGVsZXRlIG9ubHkgaWYgbm90IGFuIGluLWZsaWdodCBiYWNrZ3JvdW5kIGZldGNoXG4gICAgICAgIGlmICghZmV0Y2hpbmcpIHtcbiAgICAgICAgICBpZiAoIW5vRGVsZXRlT25TdGFsZUdldCkge1xuICAgICAgICAgICAgdGhpcy4jZGVsZXRlKGssICdleHBpcmUnKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3RhdHVzICYmIGFsbG93U3RhbGUpIHN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZVxuICAgICAgICAgIHJldHVybiBhbGxvd1N0YWxlID8gdmFsdWUgOiB1bmRlZmluZWRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBzdGF0dXMgJiZcbiAgICAgICAgICAgIGFsbG93U3RhbGUgJiZcbiAgICAgICAgICAgIHZhbHVlLl9fc3RhbGVXaGlsZUZldGNoaW5nICE9PSB1bmRlZmluZWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWxsb3dTdGFsZSA/IHZhbHVlLl9fc3RhbGVXaGlsZUZldGNoaW5nIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzdGF0dXMpIHN0YXR1cy5nZXQgPSAnaGl0J1xuICAgICAgICAvLyBpZiB3ZSdyZSBjdXJyZW50bHkgZmV0Y2hpbmcgaXQsIHdlIGRvbid0IGFjdHVhbGx5IGhhdmUgaXQgeWV0XG4gICAgICAgIC8vIGl0J3Mgbm90IHN0YWxlLCB3aGljaCBtZWFucyB0aGlzIGlzbid0IGEgc3RhbGVXaGlsZVJlZmV0Y2hpbmcuXG4gICAgICAgIC8vIElmIGl0J3Mgbm90IHN0YWxlLCBhbmQgZmV0Y2hpbmcsIEFORCBoYXMgYSBfX3N0YWxlV2hpbGVGZXRjaGluZ1xuICAgICAgICAvLyB2YWx1ZSwgdGhlbiB0aGF0IG1lYW5zIHRoZSB1c2VyIGZldGNoZWQgd2l0aCB7Zm9yY2VSZWZyZXNoOnRydWV9LFxuICAgICAgICAvLyBzbyBpdCdzIHNhZmUgdG8gcmV0dXJuIHRoYXQgdmFsdWUuXG4gICAgICAgIGlmIChmZXRjaGluZykge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS5fX3N0YWxlV2hpbGVGZXRjaGluZ1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI21vdmVUb1RhaWwoaW5kZXgpXG4gICAgICAgIGlmICh1cGRhdGVBZ2VPbkdldCkge1xuICAgICAgICAgIHRoaXMuI3VwZGF0ZUl0ZW1BZ2UoaW5kZXgpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdGF0dXMpIHtcbiAgICAgIHN0YXR1cy5nZXQgPSAnbWlzcydcbiAgICB9XG4gIH1cblxuICAjY29ubmVjdChwOiBJbmRleCwgbjogSW5kZXgpIHtcbiAgICB0aGlzLiNwcmV2W25dID0gcFxuICAgIHRoaXMuI25leHRbcF0gPSBuXG4gIH1cblxuICAjbW92ZVRvVGFpbChpbmRleDogSW5kZXgpOiB2b2lkIHtcbiAgICAvLyBpZiB0YWlsIGFscmVhZHksIG5vdGhpbmcgdG8gZG9cbiAgICAvLyBpZiBoZWFkLCBtb3ZlIGhlYWQgdG8gbmV4dFtpbmRleF1cbiAgICAvLyBlbHNlXG4gICAgLy8gICBtb3ZlIG5leHRbcHJldltpbmRleF1dIHRvIG5leHRbaW5kZXhdIChoZWFkIGhhcyBubyBwcmV2KVxuICAgIC8vICAgbW92ZSBwcmV2W25leHRbaW5kZXhdXSB0byBwcmV2W2luZGV4XVxuICAgIC8vIHByZXZbaW5kZXhdID0gdGFpbFxuICAgIC8vIG5leHRbdGFpbF0gPSBpbmRleFxuICAgIC8vIHRhaWwgPSBpbmRleFxuICAgIGlmIChpbmRleCAhPT0gdGhpcy4jdGFpbCkge1xuICAgICAgaWYgKGluZGV4ID09PSB0aGlzLiNoZWFkKSB7XG4gICAgICAgIHRoaXMuI2hlYWQgPSB0aGlzLiNuZXh0W2luZGV4XSBhcyBJbmRleFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jY29ubmVjdChcbiAgICAgICAgICB0aGlzLiNwcmV2W2luZGV4XSBhcyBJbmRleCxcbiAgICAgICAgICB0aGlzLiNuZXh0W2luZGV4XSBhcyBJbmRleCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgdGhpcy4jY29ubmVjdCh0aGlzLiN0YWlsLCBpbmRleClcbiAgICAgIHRoaXMuI3RhaWwgPSBpbmRleFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGEga2V5IG91dCBvZiB0aGUgY2FjaGUuXG4gICAqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUga2V5IHdhcyBkZWxldGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBkZWxldGUoazogSykge1xuICAgIHJldHVybiB0aGlzLiNkZWxldGUoaywgJ2RlbGV0ZScpXG4gIH1cblxuICAjZGVsZXRlKGs6IEssIHJlYXNvbjogTFJVQ2FjaGUuRGlzcG9zZVJlYXNvbikge1xuICAgIGxldCBkZWxldGVkID0gZmFsc2VcbiAgICBpZiAodGhpcy4jc2l6ZSAhPT0gMCkge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspXG4gICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodGhpcy4jYXV0b3B1cmdlVGltZXJzPy5baW5kZXhdKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuI2F1dG9wdXJnZVRpbWVycz8uW2luZGV4XSlcbiAgICAgICAgICB0aGlzLiNhdXRvcHVyZ2VUaW1lcnNbaW5kZXhdID0gdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlZCA9IHRydWVcbiAgICAgICAgaWYgKHRoaXMuI3NpemUgPT09IDEpIHtcbiAgICAgICAgICB0aGlzLiNjbGVhcihyZWFzb24pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4jcmVtb3ZlSXRlbVNpemUoaW5kZXgpXG4gICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdXG4gICAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgICAgICB2Ll9fYWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcignZGVsZXRlZCcpKVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaGFzRGlzcG9zZSB8fCB0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlKSB7XG4gICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2U/Lih2IGFzIFYsIGssIHJlYXNvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW3YgYXMgViwgaywgcmVhc29uXSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy4ja2V5TWFwLmRlbGV0ZShrKVxuICAgICAgICAgIHRoaXMuI2tleUxpc3RbaW5kZXhdID0gdW5kZWZpbmVkXG4gICAgICAgICAgdGhpcy4jdmFsTGlzdFtpbmRleF0gPSB1bmRlZmluZWRcbiAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuI3RhaWwpIHtcbiAgICAgICAgICAgIHRoaXMuI3RhaWwgPSB0aGlzLiNwcmV2W2luZGV4XSBhcyBJbmRleFxuICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT09IHRoaXMuI2hlYWQpIHtcbiAgICAgICAgICAgIHRoaXMuI2hlYWQgPSB0aGlzLiNuZXh0W2luZGV4XSBhcyBJbmRleFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwaSA9IHRoaXMuI3ByZXZbaW5kZXhdIGFzIG51bWJlclxuICAgICAgICAgICAgdGhpcy4jbmV4dFtwaV0gPSB0aGlzLiNuZXh0W2luZGV4XSBhcyBudW1iZXJcbiAgICAgICAgICAgIGNvbnN0IG5pID0gdGhpcy4jbmV4dFtpbmRleF0gYXMgbnVtYmVyXG4gICAgICAgICAgICB0aGlzLiNwcmV2W25pXSA9IHRoaXMuI3ByZXZbaW5kZXhdIGFzIG51bWJlclxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLiNzaXplLS1cbiAgICAgICAgICB0aGlzLiNmcmVlLnB1c2goaW5kZXgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2VBZnRlciAmJiB0aGlzLiNkaXNwb3NlZD8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBkdCA9IHRoaXMuI2Rpc3Bvc2VkXG4gICAgICBsZXQgdGFzazogRGlzcG9zZVRhc2s8SywgVj4gfCB1bmRlZmluZWRcbiAgICAgIHdoaWxlICgodGFzayA9IGR0Py5zaGlmdCgpKSkge1xuICAgICAgICB0aGlzLiNkaXNwb3NlQWZ0ZXI/LiguLi50YXNrKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVsZXRlZFxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHRoZSBjYWNoZSBlbnRpcmVseSwgdGhyb3dpbmcgYXdheSBhbGwgdmFsdWVzLlxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2NsZWFyKCdkZWxldGUnKVxuICB9XG4gICNjbGVhcihyZWFzb246IExSVUNhY2hlLkRpc3Bvc2VSZWFzb24pIHtcbiAgICBmb3IgKGNvbnN0IGluZGV4IG9mIHRoaXMuI3JpbmRleGVzKHsgYWxsb3dTdGFsZTogdHJ1ZSB9KSkge1xuICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdXG4gICAgICBpZiAodGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godikpIHtcbiAgICAgICAgdi5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ2RlbGV0ZWQnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGsgPSB0aGlzLiNrZXlMaXN0W2luZGV4XVxuICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZSkge1xuICAgICAgICAgIHRoaXMuI2Rpc3Bvc2U/Lih2IGFzIFYsIGsgYXMgSywgcmVhc29uKVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICB0aGlzLiNkaXNwb3NlZD8ucHVzaChbdiBhcyBWLCBrIGFzIEssIHJlYXNvbl0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNrZXlNYXAuY2xlYXIoKVxuICAgIHRoaXMuI3ZhbExpc3QuZmlsbCh1bmRlZmluZWQpXG4gICAgdGhpcy4ja2V5TGlzdC5maWxsKHVuZGVmaW5lZClcbiAgICBpZiAodGhpcy4jdHRscyAmJiB0aGlzLiNzdGFydHMpIHtcbiAgICAgIHRoaXMuI3R0bHMuZmlsbCgwKVxuICAgICAgdGhpcy4jc3RhcnRzLmZpbGwoMClcbiAgICAgIGZvciAoY29uc3QgdCBvZiB0aGlzLiNhdXRvcHVyZ2VUaW1lcnMgPz8gW10pIHtcbiAgICAgICAgaWYgKHQgIT09IHVuZGVmaW5lZCkgY2xlYXJUaW1lb3V0KHQpXG4gICAgICB9XG4gICAgICB0aGlzLiNhdXRvcHVyZ2VUaW1lcnM/LmZpbGwodW5kZWZpbmVkKVxuICAgIH1cbiAgICBpZiAodGhpcy4jc2l6ZXMpIHtcbiAgICAgIHRoaXMuI3NpemVzLmZpbGwoMClcbiAgICB9XG4gICAgdGhpcy4jaGVhZCA9IDAgYXMgSW5kZXhcbiAgICB0aGlzLiN0YWlsID0gMCBhcyBJbmRleFxuICAgIHRoaXMuI2ZyZWUubGVuZ3RoID0gMFxuICAgIHRoaXMuI2NhbGN1bGF0ZWRTaXplID0gMFxuICAgIHRoaXMuI3NpemUgPSAwXG4gICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2VBZnRlciAmJiB0aGlzLiNkaXNwb3NlZCkge1xuICAgICAgY29uc3QgZHQgPSB0aGlzLiNkaXNwb3NlZFxuICAgICAgbGV0IHRhc2s6IERpc3Bvc2VUYXNrPEssIFY+IHwgdW5kZWZpbmVkXG4gICAgICB3aGlsZSAoKHRhc2sgPSBkdD8uc2hpZnQoKSkpIHtcbiAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyPy4oLi4udGFzaylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IExSVUNhY2hlIH0gZnJvbSBcImxydS1jYWNoZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDYWNoZWRNYXA8SyBleHRlbmRzIHt9LCBWIGV4dGVuZHMge30+IGltcGxlbWVudHMgTWFwPEssIFY+IHtcbiAgICByZWFkb25seSBjYWNoZTogTFJVQ2FjaGU8SywgVj47XG4gICAgcmVhZG9ubHkgbWFwOiBNYXA8SywgVj4gPSBuZXcgTWFwKCk7XG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogeyBjYWNoZVNpemU6IG51bWJlciB9KSB7XG4gICAgICAgIHRoaXMuY2FjaGUgPSBuZXcgTFJVQ2FjaGU8SywgVj4oe1xuICAgICAgICAgICAgbWF4OiBvcHRpb25zLmNhY2hlU2l6ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubWFwID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICBnZXQgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcFtTeW1ib2wuaXRlcmF0b3JdO1xuICAgIH1cbiAgICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcFtTeW1ib2wudG9TdHJpbmdUYWddO1xuICAgIH1cbiAgICBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYWNoZS5jbGVhcigpO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAuY2xlYXIoKTtcbiAgICB9XG4gICAgZGVsZXRlKGtleTogSyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkZWxldGVkID0gdGhpcy5tYXAuZGVsZXRlKGtleSk7XG4gICAgICAgIGlmIChkZWxldGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWxldGVkO1xuICAgIH1cbiAgICBnZXQgZm9yRWFjaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmZvckVhY2g7XG4gICAgfVxuICAgIGdldChrZXk6IEspOiBWIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgY2FjaGVkVmFsdWUgPSB0aGlzLmNhY2hlLmdldChrZXkpO1xuICAgICAgICBpZiAoY2FjaGVkVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5tYXAuZ2V0KGtleSk7XG4gICAgfVxuICAgIGhhcyhrZXk6IEspOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmhhcyhrZXkpO1xuICAgIH1cbiAgICBzZXQoa2V5OiBLLCB2YWx1ZTogVik6IHRoaXMge1xuICAgICAgICB0aGlzLm1hcC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuY2FjaGUuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC5zaXplO1xuICAgIH1cbiAgICBlbnRyaWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAuZW50cmllcygpO1xuICAgIH1cbiAgICBrZXlzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAua2V5cygpO1xuICAgIH1cbiAgICB2YWx1ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC52YWx1ZXMoKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBDYWNoZWRNYXAgfSBmcm9tIFwiLi4vY2xhc3Nlc1wiO1xuaW1wb3J0IHsgY3JlYXRlRXhwb3J0YWJsZUVsZW1lbnQgfSBmcm9tIFwiLi4vdXRpbHMvZXhwb3J0LXV0aWxpdHlcIjtcbmltcG9ydCB7IFN0b3JhZ2VFbGVtZW50VHlwZSB9IGZyb20gXCIuL3R5cGVzL1N0b3JhZ2VFbGVtZW50VHlwZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdG9yYWdlTWFuYWdlclN0YXRpYyB7XG4gICAgc3RhdGljIHN0b3JhZ2UgPSBuZXcgQ2FjaGVkTWFwPHN0cmluZywgYW55Pih7IGNhY2hlU2l6ZTogMjAgfSk7XG4gICAgc3RhdGljIGRlZmF1bHQgPSBuZXcgQ2FjaGVkTWFwPHN0cmluZywgYW55Pih7IGNhY2hlU2l6ZTogMjAgfSk7XG4gICAgc3RhdGljIGZsYWdzID0gQXJyYXk8c3RyaW5nPigpO1xuICAgIHN0YXRpYyB0ZW1wU3RvcmFnZSA9IG5ldyBNYXA8c3RyaW5nLCBTdG9yYWdlRWxlbWVudFR5cGU+KCk7XG4gICAgc3RhdGljIHRlbXBTdG9yYWdlRGVhZGxpbmVzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxuXG4gICAgc3RhdGljIGNsZWFyT2xkVGVtcFZhcmlhYmxlcyhvcGVuZWRMYWJlbHNOdW1iZXI6IG51bWJlcikge1xuICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy50ZW1wU3RvcmFnZURlYWRsaW5lcy5mb3JFYWNoKChkZWFkbGluZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoZGVhZGxpbmUgPiBvcGVuZWRMYWJlbHNOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy50ZW1wU3RvcmFnZS5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy50ZW1wU3RvcmFnZURlYWRsaW5lcy5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy5zdG9yYWdlLmNhY2hlLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2V0VmFyaWFibGUoa2V5OiBzdHJpbmcsIHZhbHVlOiBTdG9yYWdlRWxlbWVudFR5cGUpIHtcbiAgICAgICAgY29uc3QgaXNJblRlbXBTdG9yYWdlID0gU3RvcmFnZU1hbmFnZXJTdGF0aWMudGVtcFN0b3JhZ2UuaGFzKGtleSk7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICBTdG9yYWdlTWFuYWdlclN0YXRpYy5zdG9yYWdlLm1hcC5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgICFpc0luVGVtcFN0b3JhZ2UgJiYgU3RvcmFnZU1hbmFnZXJTdGF0aWMuc3RvcmFnZS5jYWNoZS5kZWxldGUoa2V5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnN0b3JhZ2UubWFwLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICFpc0luVGVtcFN0b3JhZ2UgJiYgU3RvcmFnZU1hbmFnZXJTdGF0aWMuc3RvcmFnZS5jYWNoZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0VmFyaWFibGU8VCBleHRlbmRzIFN0b3JhZ2VFbGVtZW50VHlwZT4oa2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnN0b3JhZ2UuY2FjaGUuZ2V0KGtleSk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gU3RvcmFnZU1hbmFnZXJTdGF0aWMudGVtcFN0b3JhZ2UuZ2V0KGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdG9yYWdlTWFuYWdlclN0YXRpYy5zdG9yYWdlLm1hcC5nZXQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFN0b3JhZ2VNYW5hZ2VyU3RhdGljLmRlZmF1bHQuZ2V0KGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUV4cG9ydGFibGVFbGVtZW50KHJlc3VsdCkgYXMgVDtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVtb3ZlVmFyaWFibGUoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgU3RvcmFnZU1hbmFnZXJTdGF0aWMuc3RvcmFnZS5kZWxldGUoa2V5KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2V0RmxhZyhrZXk6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZmxhZ3MuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmxhZ3MucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5mbGFncy5pbmRleE9mKGtleSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmxhZ3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXRGbGFnKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZsYWdzLmluY2x1ZGVzKGtleSk7XG4gICAgfVxufVxuIiwiaW1wb3J0IFN0b3JhZ2VNYW5hZ2VyU3RhdGljIGZyb20gXCIuLi9TdG9yYWdlTWFuYWdlclN0YXRpY1wiO1xuXG4vKipcbiAqIFN0b3JlZENsYXNzTW9kZWwgaXMgYSBhYnN0cmFjdCBjbGFzcyB0aGF0IGNvbnRhaW5zIHRoZSBtZXRob2RzIHRvIHN0b3JlIGEgY2xhc3MgaW4gdGhlIGdhbWUuXG4gKiBJIHN1Z2dlc3QgeW91IGV4dGVuZCB0aGlzIGNsYXNzIHRvIGNyZWF0ZSB5b3VyIG93biBzdG9yZWQgY2xhc3MuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXhwb3J0IGNsYXNzIENoYXJhY3RlckJhc2VNb2RlbCBleHRlbmRzIFN0b3JlZENsYXNzTW9kZWwgaW1wbGVtZW50cyBDaGFyYWN0ZXJCYXNlTW9kZWxQcm9wcyB7XG4gKiAgICAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgcHJvcHM6IENoYXJhY3RlckJhc2VNb2RlbFByb3BzKSB7XG4gKiAgICAgICAgIHN1cGVyKFwiX19fY2hhcmFjdGVyX19fXCIsIGlkKVxuICogICAgICAgICB0aGlzLmRlZmF1bHROYW1lID0gcHJvcHMubmFtZVxuICogICAgICAgICB0aGlzLmRlZmF1bHRTdXJuYW1lID0gcHJvcHMuc3VybmFtZVxuICogICAgIH1cbiAqICAgICBwcml2YXRlIGRlZmF1bHROYW1lOiBzdHJpbmcgPSBcIlwiXG4gKiAgICAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAqICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RvcmFnZVByb3BlcnR5PHN0cmluZz4oXCJuYW1lXCIpIHx8IHRoaXMuZGVmYXVsdE5hbWVcbiAqICAgICB9XG4gKiAgICAgc2V0IG5hbWUodmFsdWU6IHN0cmluZykge1xuICogICAgICAgICB0aGlzLnNldFN0b3JhZ2VQcm9wZXJ0eTxzdHJpbmc+KFwibmFtZVwiLCB2YWx1ZSlcbiAqICAgICB9XG4gKiAgICAgcHJpdmF0ZSBkZWZhdWx0U3VybmFtZT86IHN0cmluZ1xuICogICAgIGdldCBzdXJuYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gKiAgICAgICAgIHJldHVybiB0aGlzLmdldFN0b3JhZ2VQcm9wZXJ0eTxzdHJpbmc+KFwic3VybmFtZVwiKSB8fCB0aGlzLmRlZmF1bHRTdXJuYW1lXG4gKiAgICAgfVxuICogICAgIHNldCBzdXJuYW1lKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAqICAgICAgICAgdGhpcy5zZXRTdG9yYWdlUHJvcGVydHk8c3RyaW5nPihcInN1cm5hbWVcIiwgdmFsdWUpXG4gKiAgICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0b3JlZENsYXNzTW9kZWwge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBjYXRlZ29yeUlkIFRoZSBpZCBvZiB0aGUgY2F0ZWdvcnkuIEZvciBleGFtcGxlIGlmIHlvdSBhcmUgc3RvcmluZyBhIGNoYXJhY3RlciBjbGFzcywgeW91IGNhbiB1c2UgXCJjaGFyYWN0ZXJzXCIgYXMgY2F0ZWdvcnlJZC4gc28gYWxsIGluc3RhbmNlcyBvZiB0aGUgY2hhcmFjdGVyIGNsYXNzIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBcImNoYXJhY3RlcnNcIiBjYXRlZ29yeS5cbiAgICAgKiBAcGFyYW0gaWQgVGhlIGlkIG9mIGluc3RhbmNlIG9mIHRoZSBjbGFzcy4gVGhpcyBpZCBtdXN0IGJlIHVuaXF1ZSBmb3IgdGhlIGNhdGVnb3J5LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNhdGVnb3J5SWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLmNhdGVnb3J5SWQgPSBjYXRlZ29yeUlkO1xuICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIGlkIG9mIHRoZSBzdG9yZWQgY2xhc3MuIGlzIHVuaXF1ZSBmb3IgdGhpcyBjbGFzcy5cbiAgICAgKi9cbiAgICByZWFkb25seSBpZDogc3RyaW5nO1xuICAgIHByaXZhdGUgY2F0ZWdvcnlJZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBhIHByb3BlcnR5IGluIHRoZSBzdG9yYWdlLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC4gSWYgaXMgdW5kZWZpbmVkLCB0aGUgcHJvcGVydHkgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIHN0b3JhZ2UuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHNldFN0b3JhZ2VQcm9wZXJ0eTxUPihwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IFQgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHN0b3JhZ2VWYWx1ZSA9IFN0b3JhZ2VNYW5hZ2VyU3RhdGljLmdldFZhcmlhYmxlPGFueT4odGhpcy5jYXRlZ29yeUlkKTtcbiAgICAgICAgaWYgKCFzdG9yYWdlVmFsdWUpIHtcbiAgICAgICAgICAgIHN0b3JhZ2VWYWx1ZSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHN0b3JhZ2Ugbm90IGhhdmUgYSBrZXkgd2l0aCB0aGUgaWRcbiAgICAgICAgaWYgKCFzdG9yYWdlVmFsdWUuaGFzT3duUHJvcGVydHkodGhpcy5pZCkpIHtcbiAgICAgICAgICAgIHN0b3JhZ2VWYWx1ZVt0aGlzLmlkXSA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChzdG9yYWdlVmFsdWVbdGhpcy5pZF0uaGFzT3duUHJvcGVydHkocHJvcGVydHlOYW1lKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBzdG9yYWdlVmFsdWVbdGhpcy5pZF1bcHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0b3JhZ2VWYWx1ZVt0aGlzLmlkXSA9IHsgLi4uc3RvcmFnZVZhbHVlW3RoaXMuaWRdLCBbcHJvcGVydHlOYW1lXTogdmFsdWUgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhzdG9yYWdlVmFsdWVbdGhpcy5pZF0pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZGVsZXRlIHN0b3JhZ2VWYWx1ZVt0aGlzLmlkXTtcbiAgICAgICAgfVxuXG4gICAgICAgIFN0b3JhZ2VNYW5hZ2VyU3RhdGljLnNldFZhcmlhYmxlKHRoaXMuY2F0ZWdvcnlJZCwgc3RvcmFnZVZhbHVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGEgcHJvcGVydHkgZnJvbSB0aGUgc3RvcmFnZS5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHBhcmFtIGlkVG9Vc2UgVGhlIGlkIG9mIHRoZSBpbnN0YW5jZSB0byBnZXQgdGhlIHByb3BlcnR5LiBAZGVmYXVsdCB0aGlzLmlkXG4gICAgICogQHJldHVybnMgVGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4gSWYgdGhlIHByb3BlcnR5IGlzIG5vdCBmb3VuZCwgcmV0dXJucyB1bmRlZmluZWQuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldFN0b3JhZ2VQcm9wZXJ0eTxUPihwcm9wZXJ0eU5hbWU6IHN0cmluZywgaWRUb1VzZTogc3RyaW5nID0gdGhpcy5pZCk6IFQgfCB1bmRlZmluZWQge1xuICAgICAgICBsZXQgc3RvcmFnZVZhbHVlID0gU3RvcmFnZU1hbmFnZXJTdGF0aWMuZ2V0VmFyaWFibGU8YW55Pih0aGlzLmNhdGVnb3J5SWQpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBzdG9yYWdlVmFsdWUgJiZcbiAgICAgICAgICAgIHN0b3JhZ2VWYWx1ZS5oYXNPd25Qcm9wZXJ0eShpZFRvVXNlKSAmJlxuICAgICAgICAgICAgc3RvcmFnZVZhbHVlW2lkVG9Vc2VdLmhhc093blByb3BlcnR5KHByb3BlcnR5TmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmFnZVZhbHVlW2lkVG9Vc2VdW3Byb3BlcnR5TmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4iLCJleHBvcnQgY29uc3QgU1lTVEVNX1JFU0VSVkVEX1NUT1JBR0VfS0VZUyA9IHtcbiAgICAvKipcbiAgICAgKiBUaGUga2V5IG9mIHRoZSBjdXJyZW50IGRpYWxvZ3VlIG1lbW9yeVxuICAgICAqL1xuICAgIENVUlJFTlRfRElBTE9HVUVfTUVNT1JZX0tFWTogXCJfX19jdXJyZW50X2RpYWxvZ3VlX21lbW9yeV9fX1wiLFxuICAgIC8qKlxuICAgICAqIFRoZSBrZXkgb2YgdGhlIGxhc3QgZGlhbG9ndWUgYWRkZWQgaW4gdGhlIHN0ZXAgbWVtb3J5XG4gICAgICovXG4gICAgTEFTVF9ESUFMT0dVRV9BRERFRF9JTl9TVEVQX01FTU9SWV9LRVk6IFwiX19fbGFzdF9kaWFsb2d1ZV9hZGRlZF9pbl9zdGVwX21lbW9yeV9fX1wiLFxuICAgIC8qKlxuICAgICAqIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgbWVudSBvcHRpb25zIG1lbW9yeVxuICAgICAqL1xuICAgIENVUlJFTlRfTUVOVV9PUFRJT05TX01FTU9SWV9LRVk6IFwiX19fY3VycmVudF9tZW51X29wdGlvbnNfbWVtb3J5X19fXCIsXG4gICAgLyoqXG4gICAgICogVGhlIGtleSBvZiB0aGUgbGFzdCBtZW51IG9wdGlvbnMgYWRkZWQgaW4gdGhlIHN0ZXAgbWVtb3J5XG4gICAgICovXG4gICAgTEFTVF9NRU5VX09QVElPTlNfQURERURfSU5fU1RFUF9NRU1PUllfS0VZOiBcIl9fX2xhc3RfbWVudV9vcHRpb25zX2FkZGVkX2luX3N0ZXBfbWVtb3J5X19fXCIsXG4gICAgLyoqXG4gICAgICogVGhlIGtleSBvZiB0aGUgaW5wdXQgbWVtb3J5LiBUaGlzIHZhbHVlIGNhbiBiZSByZWFkIGJ5IHBpeGktdm4ganNvbiBpbXBvcnRlclxuICAgICAqL1xuICAgIENVUlJFTlRfSU5QVVRfVkFMVUVfTUVNT1JZX0tFWTogXCJfaW5wdXRfdmFsdWVfXCIsXG4gICAgLyoqXG4gICAgICogVGhlIGtleSBvZiB0aGUgbGFzdCBpbnB1dCBhZGRlZCBpbiB0aGUgc3RlcCBtZW1vcnlcbiAgICAgKi9cbiAgICBMQVNUX0lOUFVUX0FEREVEX0lOX1NURVBfTUVNT1JZX0tFWTogXCJfX19sYXN0X2lucHV0X2FkZGVkX2luX3N0ZXBfbWVtb3J5X19fXCIsXG4gICAgLyoqXG4gICAgICogVGhlIGtleSBvZiB0aGUgY3VycmVudCBpbnB1dCBpbmZvXG4gICAgICovXG4gICAgQ1VSUkVOVF9JTlBVVF9JTkZPX01FTU9SWV9LRVk6IFwiX19fY3VycmVudF9pbnB1dF9pbmZvX21lbW9yeV9fX1wiLFxuICAgIC8qKlxuICAgICAqIFRoZSBrZXkgb2YgdGhlIGNoYXJhY3RlcnMgbWVtb3J5XG4gICAgICovXG4gICAgQ0hBUkFDVEVSX0NBVEVHT1JZX0tFWTogXCJfX19jaGFyYWN0ZXJfX19cIixcbiAgICAvKipcbiAgICAgKiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gYWRkIHRoZSBuZXh0IGRpYWxvZyB0ZXh0IGludG8gdGhlIGN1cnJlbnQgZGlhbG9nIG1lbW9yeS5cbiAgICAgKiBUaGlzIHZhbHVlIHdhcyBhZGRlZCB0byBpbnRyb2R1Y2UgSW5rIEdsdWUgZnVuY3Rpb25hbGl0eSBodHRwczovL2dpdGh1Yi5jb20vaW5rbGUvaW5rL2Jsb2IvbWFzdGVyL0RvY3VtZW50YXRpb24vV3JpdGluZ1dpdGhJbmsubWQjZ2x1ZVxuICAgICAqL1xuICAgIEFERF9ORVhUX0RJQUxPR19URVhUX0lOVE9fVEhFX0NVUlJFTlRfRElBTE9HX0ZMQUdfS0VZOiBcIl9fX2dsdWVfX19cIixcbiAgICAvKipcbiAgICAgKiBUaGUga2V5IG9mIGEgbGlzdCBvZiBhbGwgbGFiZWxzIHRoYXQgaGF2ZSBiZWVuIG9wZW5lZCBkdXJpbmcgdGhlIHByb2dyZXNzaW9uIG9mIHRoZSBzdGVwcy5cbiAgICAgKi9cbiAgICBPUEVORURfTEFCRUxTX0NPVU5URVJfS0VZOiBcIl9fX29wZW5lZF9sYWJlbHNfY291bnRlcl9fX1wiLFxuICAgIC8qKlxuICAgICAqIFRoZSBrZXkgb2YgYSBsaXN0IG9mIGFsbCBjaG9pY2VzIHRoYXQgaGF2ZSBiZWVuIG1hZGUgZHVyaW5nIHRoZSBwcm9ncmVzc2lvbiBvZiB0aGUgc3RlcHMuXG4gICAgICovXG4gICAgQUxMX0NIT0lDRVNfTUFERV9LRVk6IFwiX19fYWxsX2Nob2ljZXNfbWFkZV9fX1wiLFxuICAgIC8qKlxuICAgICAqIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgc3RlcCB0aW1lcyBjb3VudGVyLlxuICAgICAqIFRoaXMgdmFsdWUgd2FzIGFkZGVkIHRvIGludHJvZHVjZSBJbmsgU2VxdWVuY2VzLCBjeWNsZXMgYW5kIG90aGVyIGFsdGVybmF0aXZlcyBodHRwczovL2dpdGh1Yi5jb20vaW5rbGUvaW5rL2Jsb2IvbWFzdGVyL0RvY3VtZW50YXRpb24vV3JpdGluZ1dpdGhJbmsubWQjc2VxdWVuY2VzLWN5Y2xlcy1hbmQtb3RoZXItYWx0ZXJuYXRpdmVzXG4gICAgICovXG4gICAgQ1VSUkVOVF9TVEVQX1RJTUVTX0NPVU5URVJfS0VZOiBcIl9fX2N1cnJlbnRfc3RlcF90aW1lc19jb3VudGVyX19fXCIsXG4gICAgLyoqXG4gICAgICogVGhlIGtleSBvZiB0aGUgbGFzdCBkaWFsb2d1ZSBzdGVwIGdsdWVkIGluIHRoZSBzdGVwIG1lbW9yeVxuICAgICAqL1xuICAgIExBU1RfU1RFUF9HTFVFRDogXCJfX19sYXN0X3N0ZXBfZ2x1ZWRfX19cIixcbn07XG4iLCJpbXBvcnQgeyBTdG9yZWRDbGFzc01vZGVsLCBTWVNURU1fUkVTRVJWRURfU1RPUkFHRV9LRVlTIH0gZnJvbSBcIi4uLy4uL3N0b3JhZ2VcIjtcblxuY29uc3QgRU1PVElPTl9TRVBBUkFUT1IgPSBcIkBcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYXJhY3RlclN0b3JlZENsYXNzIGV4dGVuZHMgU3RvcmVkQ2xhc3NNb2RlbCB7XG4gICAgcHJpdmF0ZSBzb3VyY2VJZDogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIGVtb3Rpb246IHN0cmluZyA9IFwiXCIpIHtcbiAgICAgICAgc3VwZXIoU1lTVEVNX1JFU0VSVkVEX1NUT1JBR0VfS0VZUy5DSEFSQUNURVJfQ0FURUdPUllfS0VZLCBpZCArIChlbW90aW9uID8gRU1PVElPTl9TRVBBUkFUT1IgKyBlbW90aW9uIDogXCJcIikpO1xuICAgICAgICB0aGlzLnNvdXJjZUlkID0gaWQ7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgZ2V0U3RvcmFnZVByb3BlcnR5PFQ+KHByb3BlcnR5TmFtZTogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHN1cGVyLmdldFN0b3JhZ2VQcm9wZXJ0eTxUPihwcm9wZXJ0eU5hbWUpO1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFsdWUgPSBzdXBlci5nZXRTdG9yYWdlUHJvcGVydHk8VD4ocHJvcGVydHlOYW1lLCB0aGlzLnNvdXJjZUlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgZGVmYXVsdCBhcyBSZWdpc3RlcmVkQ2hhcmFjdGVycyB9IGZyb20gXCIuLi9kZWNvcmF0b3JzL2NoYXJhY3Rlci1kZWNvcmF0b3JcIjtcbmltcG9ydCBDaGFyYWN0ZXJCYXNlTW9kZWxQcm9wcyBmcm9tIFwiLi4vaW50ZXJmYWNlcy9DaGFyYWN0ZXJCYXNlTW9kZWxQcm9wc1wiO1xuaW1wb3J0IENoYXJhY3RlclN0b3JlZENsYXNzIGZyb20gXCIuL0NoYXJhY3RlclN0b3JlZENsYXNzXCI7XG5cbi8qKlxuICogQ2hhcmFjdGVyQmFzZU1vZGVsIGlzIGEgY2xhc3MgdGhhdCBpcyB1c2VkIHRvIGNyZWF0ZSBhIGNoYXJhY3RlciBtb2RlbC5cbiAqIFlvdSBtdXN0IHVzZSB0aGUge0BsaW5rIFJlZ2lzdGVyZWRDaGFyYWN0ZXJzLmFkZH0gZnVuY3Rpb24gdG8gc2F2ZSB0aGUgY2hhcmFjdGVyIGluIHRoZSBnYW1lLlxuICogSXQgaXMgcmFjY29tZW5kZWQgdG8gY3JlYXRlIHlvdXIgb3duIGNsYXNzIENoYXJhY3RlciwgcmVhZCBtb3JlIGhlcmU6IGh0dHBzOi8vcGl4aS12bi53ZWIuYXBwL3N0YXJ0L2NoYXJhY3Rlci5odG1sI2N1c3RvbS1jaGFyYWN0ZXJcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBleHBvcnQgY29uc3QgbGlhbSA9IG5ldyBDaGFyYWN0ZXJCYXNlTW9kZWwoJ2xpYW0nLCB7XG4gKiAgICAgbmFtZTogJ0xpYW0nLFxuICogICAgIHN1cm5hbWU6ICdTbWl0aCcsXG4gKiAgICAgYWdlOiAyNSxcbiAqICAgICBpY29uOiBcImh0dHBzOi8vcGl4aWpzLmNvbS9hc3NldHMvZWdnSGVhZC5wbmdcIixcbiAqICAgICBjb2xvcjogXCIjOWUyZTEyXCJcbiAqIH0pO1xuICogZXhwb3J0IGNvbnN0IGFsaWNlID0gbmV3IENoYXJhY3RlckJhc2VNb2RlbCgnYWxpY2UnLCB7XG4gKiAgICAgbmFtZTogJ0FsaWNlJyxcbiAqICAgICBzdXJuYW1lOiAnU21pdGgnLFxuICogICAgIGFnZTogMjUsXG4gKiAgICAgaWNvbjogXCJodHRwczovL3BpeGlqcy5jb20vYXNzZXRzL2VnZ0hlYWQucG5nXCIsXG4gKiAgICAgY29sb3I6IFwiIzllMmUxMlwiXG4gKiB9KTtcbiAqIFJlZ2lzdGVyZWRDaGFyYWN0ZXJzLmFkZChbbGlhbSwgYWxpY2VdKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFyYWN0ZXJCYXNlTW9kZWwgZXh0ZW5kcyBDaGFyYWN0ZXJTdG9yZWRDbGFzcyB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIGlkIFRoZSBpZCBvZiB0aGUgY2hhcmFjdGVyLlxuICAgICAqIEBwYXJhbSBwcm9wcyBUaGUgcHJvcGVydGllcyBvZiB0aGUgY2hhcmFjdGVyLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcgfCB7IGlkOiBzdHJpbmc7IGVtb3Rpb246IHN0cmluZyB9LCBwcm9wczogQ2hhcmFjdGVyQmFzZU1vZGVsUHJvcHMpIHtcbiAgICAgICAgc3VwZXIodHlwZW9mIGlkID09PSBcInN0cmluZ1wiID8gaWQgOiBpZC5pZCwgdHlwZW9mIGlkID09PSBcInN0cmluZ1wiID8gXCJcIiA6IGlkLmVtb3Rpb24pO1xuICAgICAgICB0aGlzLmRlZmF1bHROYW1lID0gcHJvcHMubmFtZTtcbiAgICAgICAgdGhpcy5kZWZhdWx0U3VybmFtZSA9IHByb3BzLnN1cm5hbWU7XG4gICAgICAgIHRoaXMuZGVmYXVsdEFnZSA9IHByb3BzLmFnZTtcbiAgICAgICAgdGhpcy5faWNvbiA9IHByb3BzLmljb247XG4gICAgICAgIHRoaXMuX2NvbG9yID0gcHJvcHMuY29sb3I7XG4gICAgfVxuICAgIHByaXZhdGUgZGVmYXVsdE5hbWU/OiBzdHJpbmc7XG4gICAgLyoqKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBjaGFyYWN0ZXIuXG4gICAgICogSWYgeW91IHNldCB1bmRlZmluZWQsIGl0IHdpbGwgcmV0dXJuIHRoZSBkZWZhdWx0IG5hbWUuXG4gICAgICovXG4gICAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RvcmFnZVByb3BlcnR5PHN0cmluZz4oXCJuYW1lXCIpIHx8IHRoaXMuZGVmYXVsdE5hbWUgfHwgdGhpcy5pZDtcbiAgICB9XG4gICAgc2V0IG5hbWUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnNldFN0b3JhZ2VQcm9wZXJ0eTxzdHJpbmc+KFwibmFtZVwiLCB2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgZGVmYXVsdFN1cm5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIHN1cm5hbWUgb2YgdGhlIGNoYXJhY3Rlci5cbiAgICAgKiBJZiB5b3Ugc2V0IHVuZGVmaW5lZCwgaXQgd2lsbCByZXR1cm4gdGhlIGRlZmF1bHQgc3VybmFtZS5cbiAgICAgKi9cbiAgICBnZXQgc3VybmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTdG9yYWdlUHJvcGVydHk8c3RyaW5nPihcInN1cm5hbWVcIikgfHwgdGhpcy5kZWZhdWx0U3VybmFtZTtcbiAgICB9XG4gICAgc2V0IHN1cm5hbWUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnNldFN0b3JhZ2VQcm9wZXJ0eTxzdHJpbmc+KFwic3VybmFtZVwiLCB2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgZGVmYXVsdEFnZT86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBUaGUgYWdlIG9mIHRoZSBjaGFyYWN0ZXIuXG4gICAgICogSWYgeW91IHNldCB1bmRlZmluZWQsIGl0IHdpbGwgcmV0dXJuIHRoZSBkZWZhdWx0IGFnZS5cbiAgICAgKi9cbiAgICBnZXQgYWdlKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFN0b3JhZ2VQcm9wZXJ0eTxudW1iZXI+KFwiYWdlXCIpIHx8IHRoaXMuZGVmYXVsdEFnZTtcbiAgICB9XG4gICAgc2V0IGFnZSh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2V0U3RvcmFnZVByb3BlcnR5PG51bWJlcj4oXCJhZ2VcIiwgdmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pY29uPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBpY29uIG9mIHRoZSBjaGFyYWN0ZXIuXG4gICAgICovXG4gICAgZ2V0IGljb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ljb247XG4gICAgfVxuICAgIHByaXZhdGUgX2NvbG9yPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBvZiB0aGUgY2hhcmFjdGVyLlxuICAgICAqL1xuICAgIGdldCBjb2xvcigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sb3I7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQ2hhcmFjdGVySW50ZXJmYWNlIH0gZnJvbSBcIkBkcmluY3MvcGl4aS12blwiO1xuaW1wb3J0IHsgQ2FjaGVkTWFwIH0gZnJvbSBcIi4uLy4uL2NsYXNzZXNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi8uLi91dGlscy9sb2ctdXRpbGl0eVwiO1xuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXJlZENoYXJhY3RlcnMgPSBuZXcgQ2FjaGVkTWFwPHN0cmluZywgQ2hhcmFjdGVySW50ZXJmYWNlPih7IGNhY2hlU2l6ZTogMTAgfSk7XG5cbm5hbWVzcGFjZSBSZWdpc3RlcmVkQ2hhcmFjdGVycyB7XG4gICAgLyoqXG4gICAgICogaXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNoYXJhY3RlciBieSB0aGUgaWRcbiAgICAgKiBAcGFyYW0gaWQgaXMgdGhlIGlkIG9mIHRoZSBjaGFyYWN0ZXJcbiAgICAgKiBAcmV0dXJucyB0aGUgY2hhcmFjdGVyXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbGlhbSA9IFJlZ2lzdGVyZWRDaGFyYWN0ZXJzLmdldCgnbGlhbScpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBnZXQ8VCA9IENoYXJhY3RlckludGVyZmFjZT4oaWQ6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IGNoYXJhY3RlciA9IHJlZ2lzdGVyZWRDaGFyYWN0ZXJzLmdldChpZCk7XG4gICAgICAgICAgICBpZiAoIWNoYXJhY3Rlcikge1xuICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgICAgICAgICAgICBgQ2hhcmFjdGVyIFwiJHtpZH1cIiBub3QgZm91bmQsIGRpZCB5b3UgZm9yZ2V0IHRvIHJlZ2lzdGVyIGl0IHdpdGggdGhlIFJlZ2lzdGVyZWRDaGFyYWN0ZXJzLmFkZD9gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2hhcmFjdGVyIGFzIFQ7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgRXJyb3Igd2hpbGUgZ2V0dGluZyBDaGFyYWN0ZXIgXCIke2lkfVwiYCwgZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJcyBhIGZ1bmN0aW9uIHRoYXQgc2F2ZXMgdGhlIGNoYXJhY3Rlci4gSWYgdGhlIGNoYXJhY3RlciBhbHJlYWR5IGV4aXN0cywgaXQgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbiAgICAgKiBAcGFyYW0gY2hhcmFjdGVyIGlzIHRoZSBjaGFyYWN0ZXIgdG8gc2F2ZVxuICAgICAqIEByZXR1cm5zXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogZXhwb3J0IGNvbnN0IGxpYW0gPSBuZXcgQ2hhcmFjdGVyQmFzZU1vZGVsKCdsaWFtJywgeyBuYW1lOiAnTGlhbSd9KTtcbiAgICAgKiBleHBvcnQgY29uc3QgYWxpY2UgPSBuZXcgQ2hhcmFjdGVyQmFzZU1vZGVsKCdhbGljZScsIHsgbmFtZTogJ0FsaWNlJ30pO1xuICAgICAqIFJlZ2lzdGVyZWRDaGFyYWN0ZXJzLmFkZChbbGlhbSwgYWxpY2VdKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gYWRkKGNoYXJhY3RlcjogQ2hhcmFjdGVySW50ZXJmYWNlIHwgQ2hhcmFjdGVySW50ZXJmYWNlW10pIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hhcmFjdGVyKSkge1xuICAgICAgICAgICAgY2hhcmFjdGVyLmZvckVhY2goKGMpID0+IGFkZChjKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlZ2lzdGVyZWRDaGFyYWN0ZXJzLmdldChjaGFyYWN0ZXIuaWQpKSB7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhgQ2hhcmFjdGVyIGlkIFwiJHtjaGFyYWN0ZXIuaWR9XCIgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW5gKTtcbiAgICAgICAgfVxuICAgICAgICByZWdpc3RlcmVkQ2hhcmFjdGVycy5zZXQoY2hhcmFjdGVyLmlkLCBjaGFyYWN0ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGlzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFsbCBjaGFyYWN0ZXJzXG4gICAgICogQHJldHVybnMgYWxsIGNoYXJhY3RlcnNcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBhbGxDaGFyYWN0ZXJzID0gUmVnaXN0ZXJlZENoYXJhY3RlcnMudmFsdWVzKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHZhbHVlczxUIGV4dGVuZHMgQ2hhcmFjdGVySW50ZXJmYWNlPigpOiBUW10ge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShyZWdpc3RlcmVkQ2hhcmFjdGVycy52YWx1ZXMoKSkgYXMgVFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGEgY2hhcmFjdGVyIGlzIHJlZ2lzdGVyZWQuXG4gICAgICogQHBhcmFtIGlkIGlzIHRoZSBpZCBvZiB0aGUgY2hhcmFjdGVyXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgY2hhcmFjdGVyIGV4aXN0cywgZmFsc2Ugb3RoZXJ3aXNlXG4gICAgICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGhhcyhpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiByZWdpc3RlcmVkQ2hhcmFjdGVycy5oYXMoaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhIGxpc3Qgb2YgYWxsIGNoYXJhY3RlciBpZHMgcmVnaXN0ZXJlZC5cbiAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBsYWJlbCBpZHMuXG4gICAgICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGtleXMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShyZWdpc3RlcmVkQ2hhcmFjdGVycy5rZXlzKCkpO1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IFJlZ2lzdGVyZWRDaGFyYWN0ZXJzO1xuIl19
|