@sockethub/client 5.0.0-alpha.9 → 5.0.0-beta.0

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.
@@ -1,19 +1,32 @@
1
- var y=Object.create;var{getPrototypeOf:k,defineProperty:h,getOwnPropertyNames:p}=Object;var j=Object.prototype.hasOwnProperty;var b=(z,B,D)=>{D=z!=null?y(k(z)):{};let G=B||!z||!z.__esModule?h(D,"default",{value:z,enumerable:!0}):D;for(let W of p(z))if(!j.call(G,W))h(G,W,{get:()=>z[W],enumerable:!0});return G};var l=(z,B)=>()=>(B||z((B={exports:{}}).exports,B),B.exports);var u=l((n,A)=>{var v=Object.prototype.hasOwnProperty,Z="~";function I(){}if(Object.create){if(I.prototype=Object.create(null),!new I().__proto__)Z=!1}function m(z,B,D){this.fn=z,this.context=B,this.once=D||!1}function P(z,B,D,G,W){if(typeof D!=="function")throw TypeError("The listener must be a function");var R=new m(D,G||z,W),Q=Z?Z+B:B;if(!z._events[Q])z._events[Q]=R,z._eventsCount++;else if(!z._events[Q].fn)z._events[Q].push(R);else z._events[Q]=[z._events[Q],R];return z}function L(z,B){if(--z._eventsCount===0)z._events=new I;else delete z._events[B]}function Y(){this._events=new I,this._eventsCount=0}Y.prototype.eventNames=function(){var B=[],D,G;if(this._eventsCount===0)return B;for(G in D=this._events)if(v.call(D,G))B.push(Z?G.slice(1):G);if(Object.getOwnPropertySymbols)return B.concat(Object.getOwnPropertySymbols(D));return B};Y.prototype.listeners=function(B){var D=Z?Z+B:B,G=this._events[D];if(!G)return[];if(G.fn)return[G.fn];for(var W=0,R=G.length,Q=Array(R);W<R;W++)Q[W]=G[W].fn;return Q};Y.prototype.listenerCount=function(B){var D=Z?Z+B:B,G=this._events[D];if(!G)return 0;if(G.fn)return 1;return G.length};Y.prototype.emit=function(B,D,G,W,R,Q){var $=Z?Z+B:B;if(!this._events[$])return!1;var J=this._events[$],K=arguments.length,T,X;if(J.fn){if(J.once)this.removeListener(B,J.fn,void 0,!0);switch(K){case 1:return J.fn.call(J.context),!0;case 2:return J.fn.call(J.context,D),!0;case 3:return J.fn.call(J.context,D,G),!0;case 4:return J.fn.call(J.context,D,G,W),!0;case 5:return J.fn.call(J.context,D,G,W,R),!0;case 6:return J.fn.call(J.context,D,G,W,R,Q),!0}for(X=1,T=Array(K-1);X<K;X++)T[X-1]=arguments[X];J.fn.apply(J.context,T)}else{var E=J.length,F;for(X=0;X<E;X++){if(J[X].once)this.removeListener(B,J[X].fn,void 0,!0);switch(K){case 1:J[X].fn.call(J[X].context);break;case 2:J[X].fn.call(J[X].context,D);break;case 3:J[X].fn.call(J[X].context,D,G);break;case 4:J[X].fn.call(J[X].context,D,G,W);break;default:if(!T)for(F=1,T=Array(K-1);F<K;F++)T[F-1]=arguments[F];J[X].fn.apply(J[X].context,T)}}}return!0};Y.prototype.on=function(B,D,G){return P(this,B,D,G,!1)};Y.prototype.once=function(B,D,G){return P(this,B,D,G,!0)};Y.prototype.removeListener=function(B,D,G,W){var R=Z?Z+B:B;if(!this._events[R])return this;if(!D)return L(this,R),this;var Q=this._events[R];if(Q.fn){if(Q.fn===D&&(!W||Q.once)&&(!G||Q.context===G))L(this,R)}else{for(var $=0,J=[],K=Q.length;$<K;$++)if(Q[$].fn!==D||W&&!Q[$].once||G&&Q[$].context!==G)J.push(Q[$]);if(J.length)this._events[R]=J.length===1?J[0]:J;else L(this,R)}return this};Y.prototype.removeAllListeners=function(B){var D;if(B){if(D=Z?Z+B:B,this._events[D])L(this,D)}else this._events=new I,this._eventsCount=0;return this};Y.prototype.off=Y.prototype.removeListener;Y.prototype.addListener=Y.prototype.on;Y.prefixed=Z;Y.EventEmitter=Y;if(typeof A<"u")A.exports=Y});var f=b(u(),1);var M=f.default;/*!
2
- * activity-streams
3
- * https://github.com/silverbucket/activity-streams
4
- *
5
- * Developed and Maintained by:
6
- * Nick Jennings <nick@silverbucket.net>
7
- *
8
- * activity-streams is released under the MIT (see LICENSE).
9
- *
10
- * You don't have to do anything special to choose one license or the other
11
- * and you don't have to notify anyone which license you are using.
12
- * Please see the corresponding license file for details of these licenses.
13
- * You are free to use, modify and distribute this software, but all copyright
14
- * information must remain.
15
- *
16
- */var q=new M,V={stream:["id","type","actor","target","object","context","context","published","error"],object:["id","type","context","alias","attachedTo","attachment","attributedTo","attributedWith","condition","content","contentMap","context","contextOf","name","endTime","generator","generatorOf","group","icon","image","inReplyTo","members","memberOf","message","location","locationOf","objectOf","originOf","presence","preview","previewOf","provider","providerOf","published","rating","relationship","resultOf","replies","role","scope","scopeOf","startTime","status","summary","topic","tag","tagOf","targetOf","title","titleMap","updated","url","xmpp:stanza-id"]},O={"@id":"id","@type":"type",verb:"type",displayName:"name",objectType:"type",platform:"context"},x={actor:{primary:"id",props:V},target:{primary:"id",props:V},object:{primary:"content",props:V}},_=new Map,C={},N=!1,U=!0,d=[];function c(z,B){if(C[z]instanceof Object){if(C[z].includes(B))return!0}return!1}function a(z,B){return z[O[B]]=z[B],delete z[B],z}function S(z,B,D=!1){if(B===null)throw Error(`ActivityStreams validation failed: the "${z}" property is null. Example: { id: "user@example.com", type: "person" }`);if(B===void 0)throw Error(`ActivityStreams validation failed: the "${z}" property is undefined. Example: { id: "user@example.com", type: "person" }`);if(typeof B==="string")throw Error(`ActivityStreams validation failed: the "${z}" property received string "${B}" but expected an object. Use: { id: "${B}", type: "person" }`);if(typeof B!=="object"||Array.isArray(B)){let R=Array.isArray(B)?"array":typeof B,Q=String(B);throw Error(`ActivityStreams validation failed: the "${z}" property must be an object, received ${R} (${Q}). Example: { id: "user@example.com", type: "person" }`)}if(D&&!B.id)throw Error(`ActivityStreams validation failed: the "${z}" property requires an 'id' property. Example: { id: "user@example.com", type: "person" }`);let W=Object.keys(B).filter((R)=>{return!V[z].includes(R)});for(let R of W){let Q=B;if(O[R]){Q=a(Q,R);continue}if(c(Q.type,R))continue;if(!d.includes(Q.type)){console.log(Q);let $=typeof Q[R]==="string"?`"${Q[R]}"`:String(Q[R]),J=`ActivityStreams validation failed: property "${R}" with value ${$} is not allowed on the "${z}" object of type "${Q.type}".`;if(N)throw Error(J);if(U)console.warn(J)}}}function g(z){return z}function r(z){let B={};for(let D of Object.keys(z))if(typeof z[D]==="string")B[D]=_.get(z[D])||z[D];else if(Array.isArray(z[D])){B[D]=[];for(let G of z[D])if(typeof G==="string")B[D].push(_.get(G)||G)}else B[D]=z[D];for(let D of Object.keys(x))if(typeof B[D]==="string"){let G=x[D].primary,W={};W[G]=B[D],B[D]=W}return B}function s(z){if(S("stream",z),typeof z.object==="object")S("object",z.object);let B=r(z);return q.emit("activity-stream",B),B}var o={create:(z)=>{S("object",z,!0);let B=g(z);return _.set(B.id,B),q.emit("activity-object-create",B),B},delete:(z)=>{let B=_.delete(z);if(B)q.emit("activity-object-delete",z);return B},get:(z,B)=>{let D=_.get(z);if(!D){if(!B)return z;D={id:z}}return g(D)},list:()=>_.keys()};function w(z={}){d=z?.specialObjs||[],N=typeof z.failOnUnknownObjectProperties==="boolean"?z.failOnUnknownObjectProperties:N,U=typeof z.warnOnUnknownObjectProperties==="boolean"?z.warnOnUnknownObjectProperties:U;for(let B of Object.keys(z.customProps||{}))if(typeof z.customProps[B]==="object")C[B]=z.customProps[B];return{Stream:s,Object:o,on:(B,D)=>q.on(B,D),once:(B,D)=>q.once(B,D),off:(B,D)=>q.off(B,D)}}((z)=>{z.ASFactor=w})(typeof window==="object"?window:{});class H{events={credentials:new Map,"activity-object":new Map,connect:new Map,join:new Map};_socket;ActivityStreams;socket;debug=!0;constructor(z){if(!z)throw Error("SockethubClient requires a socket.io instance");this._socket=z,this.socket=this.createPublicEmitter(),this.registerSocketIOHandlers(),this.initActivityStreams(),this.ActivityStreams.on("activity-object-create",(B)=>{z.emit("activity-object",B,(D)=>{if(D)console.error("failed to create activity-object ",D);else this.eventActivityObject(B)})}),z.on("activity-object",(B)=>{this.ActivityStreams.Object.create(B)})}initActivityStreams(){this.ActivityStreams=w({specialObjs:["credentials"]})}clearCredentials(){this.events.credentials.clear()}createPublicEmitter(){let z=new M;return z._emit=z.emit,z.emit=(B,D,G)=>{if(B==="credentials")this.eventCredentials(D);else if(B==="activity-object")this.eventActivityObject(D);else if(B==="message")this.eventMessage(D);this._socket.emit(B,D,G)},z.connected=!1,z.disconnect=()=>{this._socket.disconnect()},z.connect=()=>{this._socket.connect()},z}eventActivityObject(z){if(z.id)this.events["activity-object"].set(z.id,z)}eventCredentials(z){if(z.object&&z.object.type==="credentials"){let B=z.actor.id||z.actor;this.events.credentials.set(B,z)}}eventMessage(z){if(!this._socket.connected)return;let B=H.getKey(z);if(z.type==="join"||z.type==="connect")this.events[z.type].set(B,z);else if(z.type==="leave")this.events.join.delete(B);else if(z.type==="disconnect")this.events.connect.delete(B)}static getKey(z){let B=z.actor?.id||z.actor;if(!B)throw Error(`actor property not present for message type: ${z?.type}`);let D=z.target?z.target.id||z.target:"";return`${B}-${D}`}log(z,B){if(this.debug)console.log(z,B)}registerSocketIOHandlers(){let z=(B)=>{return async(D)=>{if(B==="connect")this.socket.id=this._socket.id,this.socket.connected=!0,this.replay("activity-object",this.events["activity-object"]),this.replay("credentials",this.events.credentials),this.replay("message",this.events.connect),this.replay("message",this.events.join);else if(B==="disconnect")this.socket.connected=!1;this.socket._emit(B,D)}};this._socket.on("connect",z("connect")),this._socket.on("connect_error",z("connect_error")),this._socket.on("disconnect",z("disconnect")),this._socket.on("message",(B)=>{this.socket._emit("message",this.ActivityStreams.Stream(B))})}hasActorId(z){return"actor"in z&&z.actor!==null&&typeof z.actor==="object"&&"id"in z.actor&&typeof z.actor.id==="string"}replay(z,B){for(let D of B.values()){let G=this.ActivityStreams.Stream(D),W=G?.id;if(this.hasActorId(G))W=G.actor.id;this.log(`replaying ${z} for ${W}`),this._socket.emit(z,G)}}}((z)=>{z.SockethubClient=H})(typeof window==="object"?window:{});export{H as default};
1
+ (()=>{var u$=Object.create;var{getPrototypeOf:l$,defineProperty:Gn,getOwnPropertyNames:rd,getOwnPropertyDescriptor:d$}=Object,Ra=Object.prototype.hasOwnProperty;function sd(e){return this[e]}var f$,p$,Jn=(e,t,r)=>{var s=e!=null&&typeof e==="object";if(s){var n=t?f$??=new WeakMap:p$??=new WeakMap,i=n.get(e);if(i)return i}r=e!=null?u$(l$(e)):{};let o=t||!e||!e.__esModule||!Ra.call(e,"default")?Gn(r,"default",{value:e,enumerable:!0}):r;if(e&&typeof e==="object"||typeof e==="function"){for(let a of rd(e))if(!Ra.call(o,a))Gn(o,a,{get:sd.bind(e,a),enumerable:!0})}if(s)n.set(e,o);return o},nd=(e)=>{var t=(td??=new WeakMap).get(e),r;if(t)return t;if(t=Gn({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function"){for(var s of rd(e))if(!Ra.call(t,s))Gn(t,s,{get:sd.bind(e,s),enumerable:!(r=d$(e,s))||r.enumerable})}return td.set(e,t),t},td,b=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var m$=(e)=>e;function h$(e,t){this[e]=m$.bind(null,t)}var y$=(e,t)=>{for(var r in t)Gn(e,r,{get:t[r],enumerable:!0,configurable:!0,set:h$.bind(t,r)})};var g$=(e,t,r)=>()=>{if(e)try{t=e(e=0)}catch(s){r=[s]}if(r)throw r[0];return t};var Bn=b(function(ce){Object.defineProperty(ce,"__esModule",{value:!0});ce.regexpCode=ce.getEsmExportName=ce.getProperty=ce.safeStringify=ce.stringify=ce.strConcat=ce.addCodeArg=ce.str=ce._=ce.nil=ce._Code=ce.Name=ce.IDENTIFIER=ce._CodeOrName=void 0;class Ni{}ce._CodeOrName=Ni;ce.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class Ls extends Ni{constructor(e){super();if(!ce.IDENTIFIER.test(e))throw Error("CodeGen: name must be a valid identifier");this.str=e}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}ce.Name=Ls;class Dt extends Ni{constructor(e){super();this._items=typeof e==="string"?[e]:e}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;let e=this._items[0];return e===""||e==='""'}get str(){var e;return(e=this._str)!==null&&e!==void 0?e:this._str=this._items.reduce((t,r)=>`${t}${r}`,"")}get names(){var e;return(e=this._names)!==null&&e!==void 0?e:this._names=this._items.reduce((t,r)=>{if(r instanceof Ls)t[r.str]=(t[r.str]||0)+1;return t},{})}}ce._Code=Dt;ce.nil=new Dt("");function pd(e,...t){let r=[e[0]],s=0;while(s<t.length)za(r,t[s]),r.push(e[++s]);return new Dt(r)}ce._=pd;var Ua=new Dt("+");function md(e,...t){let r=[Qn(e[0])],s=0;while(s<t.length)r.push(Ua),za(r,t[s]),r.push(Ua,Qn(e[++s]));return P$(r),new Dt(r)}ce.str=md;function za(e,t){if(t instanceof Dt)e.push(...t._items);else if(t instanceof Ls)e.push(t);else e.push(R$(t))}ce.addCodeArg=za;function P$(e){let t=1;while(t<e.length-1){if(e[t]===Ua){let r=E$(e[t-1],e[t+1]);if(r!==void 0){e.splice(t-1,3,r);continue}e[t++]="+"}t++}}function E$(e,t){if(t==='""')return e;if(e==='""')return t;if(typeof e=="string"){if(t instanceof Ls||e[e.length-1]!=='"')return;if(typeof t!="string")return`${e.slice(0,-1)}${t}"`;if(t[0]==='"')return e.slice(0,-1)+t.slice(1);return}if(typeof t=="string"&&t[0]==='"'&&!(e instanceof Ls))return`"${e}${t.slice(1)}`;return}function k$(e,t){return t.emptyStr()?e:e.emptyStr()?t:md`${e}${t}`}ce.strConcat=k$;function R$(e){return typeof e=="number"||typeof e=="boolean"||e===null?e:Qn(Array.isArray(e)?e.join(","):e)}function I$(e){return new Dt(Qn(e))}ce.stringify=I$;function Qn(e){return JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}ce.safeStringify=Qn;function O$(e){return typeof e=="string"&&ce.IDENTIFIER.test(e)?new Dt(`.${e}`):pd`[${e}]`}ce.getProperty=O$;function T$(e){if(typeof e=="string"&&ce.IDENTIFIER.test(e))return new Dt(`${e}`);throw Error(`CodeGen: invalid export name: ${e}, use explicit $id name mapping`)}ce.getEsmExportName=T$;function x$(e){return new Dt(e.toString())}ce.regexpCode=x$});var Ha=b(function(dt){Object.defineProperty(dt,"__esModule",{value:!0});dt.ValueScope=dt.ValueScopeName=dt.Scope=dt.varKinds=dt.UsedValueState=void 0;var $e=Bn();class hd extends Error{constructor(e){super(`CodeGen: "code" for ${e} not defined`);this.value=e.value}}var qi;(function(e){e[e.Started=0]="Started",e[e.Completed=1]="Completed"})(qi||(dt.UsedValueState=qi={}));dt.varKinds={const:new $e.Name("const"),let:new $e.Name("let"),var:new $e.Name("var")};class Fa{constructor({prefixes:e,parent:t}={}){this._names={},this._prefixes=e,this._parent=t}toName(e){return e instanceof $e.Name?e:this.name(e)}name(e){return new $e.Name(this._newName(e))}_newName(e){let t=this._names[e]||this._nameGroup(e);return`${e}${t.index++}`}_nameGroup(e){var t,r;if(((r=(t=this._parent)===null||t===void 0?void 0:t._prefixes)===null||r===void 0?void 0:r.has(e))||this._prefixes&&!this._prefixes.has(e))throw Error(`CodeGen: prefix "${e}" is not allowed in this scope`);return this._names[e]={prefix:e,index:0}}}dt.Scope=Fa;class La extends $e.Name{constructor(e,t){super(t);this.prefix=e}setValue(e,{property:t,itemIndex:r}){this.value=e,this.scopePath=$e._`.${new $e.Name(t)}[${r}]`}}dt.ValueScopeName=La;var A$=$e._`\n`;class yd extends Fa{constructor(e){super(e);this._values={},this._scope=e.scope,this.opts={...e,_n:e.lines?A$:$e.nil}}get(){return this._scope}name(e){return new La(e,this._newName(e))}value(e,t){var r;if(t.ref===void 0)throw Error("CodeGen: ref must be passed in value");let s=this.toName(e),{prefix:n}=s,i=(r=t.key)!==null&&r!==void 0?r:t.ref,o=this._values[n];if(o){let u=o.get(i);if(u)return u}else o=this._values[n]=new Map;o.set(i,s);let a=this._scope[n]||(this._scope[n]=[]),c=a.length;return a[c]=t.ref,s.setValue(t,{property:n,itemIndex:c}),s}getValue(e,t){let r=this._values[e];if(!r)return;return r.get(t)}scopeRefs(e,t=this._values){return this._reduceValues(t,(r)=>{if(r.scopePath===void 0)throw Error(`CodeGen: name "${r}" has no value`);return $e._`${e}${r.scopePath}`})}scopeCode(e=this._values,t,r){return this._reduceValues(e,(s)=>{if(s.value===void 0)throw Error(`CodeGen: name "${s}" has no value`);return s.value.code},t,r)}_reduceValues(e,t,r={},s){let n=$e.nil;for(let i in e){let o=e[i];if(!o)continue;let a=r[i]=r[i]||new Map;o.forEach((c)=>{if(a.has(c))return;a.set(c,qi.Started);let u=t(c);if(u){let l=this.opts.es5?dt.varKinds.var:dt.varKinds.const;n=$e._`${n}${l} ${c} = ${u};${this.opts._n}`}else if(u=s===null||s===void 0?void 0:s(c))n=$e._`${n}${u}${this.opts._n}`;else throw new hd(c);a.set(c,qi.Completed)})}return n}}dt.ValueScope=yd});var ee=b(function(B){Object.defineProperty(B,"__esModule",{value:!0});B.or=B.and=B.not=B.CodeGen=B.operators=B.varKinds=B.ValueScopeName=B.ValueScope=B.Scope=B.Name=B.regexpCode=B.stringify=B.getProperty=B.nil=B.strConcat=B.str=B._=void 0;var A=Bn(),Ce=Ha(),xr=Bn();Object.defineProperty(B,"_",{enumerable:!0,get:function(){return xr._}});Object.defineProperty(B,"str",{enumerable:!0,get:function(){return xr.str}});Object.defineProperty(B,"strConcat",{enumerable:!0,get:function(){return xr.strConcat}});Object.defineProperty(B,"nil",{enumerable:!0,get:function(){return xr.nil}});Object.defineProperty(B,"getProperty",{enumerable:!0,get:function(){return xr.getProperty}});Object.defineProperty(B,"stringify",{enumerable:!0,get:function(){return xr.stringify}});Object.defineProperty(B,"regexpCode",{enumerable:!0,get:function(){return xr.regexpCode}});Object.defineProperty(B,"Name",{enumerable:!0,get:function(){return xr.Name}});var Fi=Ha();Object.defineProperty(B,"Scope",{enumerable:!0,get:function(){return Fi.Scope}});Object.defineProperty(B,"ValueScope",{enumerable:!0,get:function(){return Fi.ValueScope}});Object.defineProperty(B,"ValueScopeName",{enumerable:!0,get:function(){return Fi.ValueScopeName}});Object.defineProperty(B,"varKinds",{enumerable:!0,get:function(){return Fi.varKinds}});B.operators={GT:new A._Code(">"),GTE:new A._Code(">="),LT:new A._Code("<"),LTE:new A._Code("<="),EQ:new A._Code("==="),NEQ:new A._Code("!=="),NOT:new A._Code("!"),OR:new A._Code("||"),AND:new A._Code("&&"),ADD:new A._Code("+")};class Ar{optimizeNodes(){return this}optimizeNames(e,t){return this}}class gd extends Ar{constructor(e,t,r){super();this.varKind=e,this.name=t,this.rhs=r}render({es5:e,_n:t}){let r=e?Ce.varKinds.var:this.varKind,s=this.rhs===void 0?"":` = ${this.rhs}`;return`${r} ${this.name}${s};`+t}optimizeNames(e,t){if(!e[this.name.str])return;if(this.rhs)this.rhs=Ks(this.rhs,e,t);return this}get names(){return this.rhs instanceof A._CodeOrName?this.rhs.names:{}}}class Ja extends Ar{constructor(e,t,r){super();this.lhs=e,this.rhs=t,this.sideEffects=r}render({_n:e}){return`${this.lhs} = ${this.rhs};`+e}optimizeNames(e,t){if(this.lhs instanceof A.Name&&!e[this.lhs.str]&&!this.sideEffects)return;return this.rhs=Ks(this.rhs,e,t),this}get names(){let e=this.lhs instanceof A.Name?{}:{...this.lhs.names};return zi(e,this.rhs)}}class vd extends Ja{constructor(e,t,r,s){super(e,r,s);this.op=t}render({_n:e}){return`${this.lhs} ${this.op}= ${this.rhs};`+e}}class $d extends Ar{constructor(e){super();this.label=e,this.names={}}render({_n:e}){return`${this.label}:`+e}}class _d extends Ar{constructor(e){super();this.label=e,this.names={}}render({_n:e}){return`break${this.label?` ${this.label}`:""};`+e}}class wd extends Ar{constructor(e){super();this.error=e}render({_n:e}){return`throw ${this.error};`+e}get names(){return this.error.names}}class bd extends Ar{constructor(e){super();this.code=e}render({_n:e}){return`${this.code};`+e}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(e,t){return this.code=Ks(this.code,e,t),this}get names(){return this.code instanceof A._CodeOrName?this.code.names:{}}}class Li extends Ar{constructor(e=[]){super();this.nodes=e}render(e){return this.nodes.reduce((t,r)=>t+r.render(e),"")}optimizeNodes(){let{nodes:e}=this,t=e.length;while(t--){let r=e[t].optimizeNodes();if(Array.isArray(r))e.splice(t,1,...r);else if(r)e[t]=r;else e.splice(t,1)}return e.length>0?this:void 0}optimizeNames(e,t){let{nodes:r}=this,s=r.length;while(s--){let n=r[s];if(n.optimizeNames(e,t))continue;j$(e,n.names),r.splice(s,1)}return r.length>0?this:void 0}get names(){return this.nodes.reduce((e,t)=>Ss(e,t.names),{})}}class jr extends Li{render(e){return"{"+e._n+super.render(e)+"}"+e._n}}class Sd extends Li{}class Xn extends jr{}Xn.kind="else";class Er extends jr{constructor(e,t){super(t);this.condition=e}render(e){let t=`if(${this.condition})`+super.render(e);if(this.else)t+="else "+this.else.render(e);return t}optimizeNodes(){super.optimizeNodes();let e=this.condition;if(e===!0)return this.nodes;let t=this.else;if(t){let r=t.optimizeNodes();t=this.else=Array.isArray(r)?new Xn(r):r}if(t){if(e===!1)return t instanceof Er?t:t.nodes;if(this.nodes.length)return this;return new Er(Id(e),t instanceof Er?[t]:t.nodes)}if(e===!1||!this.nodes.length)return;return this}optimizeNames(e,t){var r;if(this.else=(r=this.else)===null||r===void 0?void 0:r.optimizeNames(e,t),!(super.optimizeNames(e,t)||this.else))return;return this.condition=Ks(this.condition,e,t),this}get names(){let e=super.names;if(zi(e,this.condition),this.else)Ss(e,this.else.names);return e}}Er.kind="if";class Hs extends jr{}Hs.kind="for";class Pd extends Hs{constructor(e){super();this.iteration=e}render(e){return`for(${this.iteration})`+super.render(e)}optimizeNames(e,t){if(!super.optimizeNames(e,t))return;return this.iteration=Ks(this.iteration,e,t),this}get names(){return Ss(super.names,this.iteration.names)}}class Ed extends Hs{constructor(e,t,r,s){super();this.varKind=e,this.name=t,this.from=r,this.to=s}render(e){let t=e.es5?Ce.varKinds.var:this.varKind,{name:r,from:s,to:n}=this;return`for(${t} ${r}=${s}; ${r}<${n}; ${r}++)`+super.render(e)}get names(){let e=zi(super.names,this.from);return zi(e,this.to)}}class Ka extends Hs{constructor(e,t,r,s){super();this.loop=e,this.varKind=t,this.name=r,this.iterable=s}render(e){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(e)}optimizeNames(e,t){if(!super.optimizeNames(e,t))return;return this.iterable=Ks(this.iterable,e,t),this}get names(){return Ss(super.names,this.iterable.names)}}class Di extends jr{constructor(e,t,r){super();this.name=e,this.args=t,this.async=r}render(e){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(e)}}Di.kind="func";class Mi extends Li{render(e){return"return "+super.render(e)}}Mi.kind="return";class kd extends jr{render(e){let t="try"+super.render(e);if(this.catch)t+=this.catch.render(e);if(this.finally)t+=this.finally.render(e);return t}optimizeNodes(){var e,t;return super.optimizeNodes(),(e=this.catch)===null||e===void 0||e.optimizeNodes(),(t=this.finally)===null||t===void 0||t.optimizeNodes(),this}optimizeNames(e,t){var r,s;return super.optimizeNames(e,t),(r=this.catch)===null||r===void 0||r.optimizeNames(e,t),(s=this.finally)===null||s===void 0||s.optimizeNames(e,t),this}get names(){let e=super.names;if(this.catch)Ss(e,this.catch.names);if(this.finally)Ss(e,this.finally.names);return e}}class Vi extends jr{constructor(e){super();this.error=e}render(e){return`catch(${this.error})`+super.render(e)}}Vi.kind="catch";class Ui extends jr{render(e){return"finally"+super.render(e)}}Ui.kind="finally";class Rd{constructor(e,t={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...t,_n:t.lines?`
2
+ `:""},this._extScope=e,this._scope=new Ce.Scope({parent:e}),this._nodes=[new Sd]}toString(){return this._root.render(this.opts)}name(e){return this._scope.name(e)}scopeName(e){return this._extScope.name(e)}scopeValue(e,t){let r=this._extScope.value(e,t);return(this._values[r.prefix]||(this._values[r.prefix]=new Set)).add(r),r}getScopeValue(e,t){return this._extScope.getValue(e,t)}scopeRefs(e){return this._extScope.scopeRefs(e,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(e,t,r,s){let n=this._scope.toName(t);if(r!==void 0&&s)this._constants[n.str]=r;return this._leafNode(new gd(e,n,r)),n}const(e,t,r){return this._def(Ce.varKinds.const,e,t,r)}let(e,t,r){return this._def(Ce.varKinds.let,e,t,r)}var(e,t,r){return this._def(Ce.varKinds.var,e,t,r)}assign(e,t,r){return this._leafNode(new Ja(e,t,r))}add(e,t){return this._leafNode(new vd(e,B.operators.ADD,t))}code(e){if(typeof e=="function")e();else if(e!==A.nil)this._leafNode(new bd(e));return this}object(...e){let t=["{"];for(let[r,s]of e){if(t.length>1)t.push(",");if(t.push(r),r!==s||this.opts.es5)t.push(":"),A.addCodeArg(t,s)}return t.push("}"),new A._Code(t)}if(e,t,r){if(this._blockNode(new Er(e)),t&&r)this.code(t).else().code(r).endIf();else if(t)this.code(t).endIf();else if(r)throw Error('CodeGen: "else" body without "then" body');return this}elseIf(e){return this._elseNode(new Er(e))}else(){return this._elseNode(new Xn)}endIf(){return this._endBlockNode(Er,Xn)}_for(e,t){if(this._blockNode(e),t)this.code(t).endFor();return this}for(e,t){return this._for(new Pd(e),t)}forRange(e,t,r,s,n=this.opts.es5?Ce.varKinds.var:Ce.varKinds.let){let i=this._scope.toName(e);return this._for(new Ed(n,i,t,r),()=>s(i))}forOf(e,t,r,s=Ce.varKinds.const){let n=this._scope.toName(e);if(this.opts.es5){let i=t instanceof A.Name?t:this.var("_arr",t);return this.forRange("_i",0,A._`${i}.length`,(o)=>{this.var(n,A._`${i}[${o}]`),r(n)})}return this._for(new Ka("of",s,n,t),()=>r(n))}forIn(e,t,r,s=this.opts.es5?Ce.varKinds.var:Ce.varKinds.const){if(this.opts.ownProperties)return this.forOf(e,A._`Object.keys(${t})`,r);let n=this._scope.toName(e);return this._for(new Ka("in",s,n,t),()=>r(n))}endFor(){return this._endBlockNode(Hs)}label(e){return this._leafNode(new $d(e))}break(e){return this._leafNode(new _d(e))}return(e){let t=new Mi;if(this._blockNode(t),this.code(e),t.nodes.length!==1)throw Error('CodeGen: "return" should have one node');return this._endBlockNode(Mi)}try(e,t,r){if(!t&&!r)throw Error('CodeGen: "try" without "catch" and "finally"');let s=new kd;if(this._blockNode(s),this.code(e),t){let n=this.name("e");this._currNode=s.catch=new Vi(n),t(n)}if(r)this._currNode=s.finally=new Ui,this.code(r);return this._endBlockNode(Vi,Ui)}throw(e){return this._leafNode(new wd(e))}block(e,t){if(this._blockStarts.push(this._nodes.length),e)this.code(e).endBlock(t);return this}endBlock(e){let t=this._blockStarts.pop();if(t===void 0)throw Error("CodeGen: not in self-balancing block");let r=this._nodes.length-t;if(r<0||e!==void 0&&r!==e)throw Error(`CodeGen: wrong number of nodes: ${r} vs ${e} expected`);return this._nodes.length=t,this}func(e,t=A.nil,r,s){if(this._blockNode(new Di(e,t,r)),s)this.code(s).endFunc();return this}endFunc(){return this._endBlockNode(Di)}optimize(e=1){while(e-- >0)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(e){return this._currNode.nodes.push(e),this}_blockNode(e){this._currNode.nodes.push(e),this._nodes.push(e)}_endBlockNode(e,t){let r=this._currNode;if(r instanceof e||t&&r instanceof t)return this._nodes.pop(),this;throw Error(`CodeGen: not in block "${t?`${e.kind}/${t.kind}`:e.kind}"`)}_elseNode(e){let t=this._currNode;if(!(t instanceof Er))throw Error('CodeGen: "else" without "if"');return this._currNode=t.else=e,this}get _root(){return this._nodes[0]}get _currNode(){let e=this._nodes;return e[e.length-1]}set _currNode(e){let t=this._nodes;t[t.length-1]=e}}B.CodeGen=Rd;function Ss(e,t){for(let r in t)e[r]=(e[r]||0)+(t[r]||0);return e}function zi(e,t){return t instanceof A._CodeOrName?Ss(e,t.names):e}function Ks(e,t,r){if(e instanceof A.Name)return s(e);if(!n(e))return e;return new A._Code(e._items.reduce((i,o)=>{if(o instanceof A.Name)o=s(o);if(o instanceof A._Code)i.push(...o._items);else i.push(o);return i},[]));function s(i){let o=r[i.str];if(o===void 0||t[i.str]!==1)return i;return delete t[i.str],o}function n(i){return i instanceof A._Code&&i._items.some((o)=>o instanceof A.Name&&t[o.str]===1&&r[o.str]!==void 0)}}function j$(e,t){for(let r in t)e[r]=(e[r]||0)-(t[r]||0)}function Id(e){return typeof e=="boolean"||typeof e=="number"||e===null?!e:A._`!${Ga(e)}`}B.not=Id;var C$=Od(B.operators.AND);function N$(...e){return e.reduce(C$)}B.and=N$;var q$=Od(B.operators.OR);function D$(...e){return e.reduce(q$)}B.or=D$;function Od(e){return(t,r)=>t===A.nil?r:r===A.nil?t:A._`${Ga(t)} ${e} ${Ga(r)}`}function Ga(e){return e instanceof A.Name?e:A._`(${e})`}});var ne=b(function(te){Object.defineProperty(te,"__esModule",{value:!0});te.checkStrictMode=te.getErrorPath=te.Type=te.useFunc=te.setEvaluated=te.evaluatedPropsToName=te.mergeEvaluated=te.eachItem=te.unescapeJsonPointer=te.escapeJsonPointer=te.escapeFragment=te.unescapeFragment=te.schemaRefOrVal=te.schemaHasRulesButRef=te.schemaHasRules=te.checkUnknownRules=te.alwaysValidSchema=te.toHash=void 0;var V=ee(),Ad=Bn();function M$(e){let t={};for(let r of e)t[r]=!0;return t}te.toHash=M$;function V$(e,t){if(typeof t=="boolean")return t;if(Object.keys(t).length===0)return!0;return jd(e,t),!Cd(t,e.self.RULES.all)}te.alwaysValidSchema=V$;function jd(e,t=e.schema){let{opts:r,self:s}=e;if(!r.strictSchema)return;if(typeof t==="boolean")return;let n=s.RULES.keywords;for(let i in t)if(!n[i])Dd(e,`unknown keyword: "${i}"`)}te.checkUnknownRules=jd;function Cd(e,t){if(typeof e=="boolean")return!e;for(let r in e)if(t[r])return!0;return!1}te.schemaHasRules=Cd;function U$(e,t){if(typeof e=="boolean")return!e;for(let r in e)if(r!=="$ref"&&t.all[r])return!0;return!1}te.schemaHasRulesButRef=U$;function z$({topSchemaRef:e,schemaPath:t},r,s,n){if(!n){if(typeof r=="number"||typeof r=="boolean")return r;if(typeof r=="string")return V._`${r}`}return V._`${e}${t}${V.getProperty(s)}`}te.schemaRefOrVal=z$;function F$(e){return Nd(decodeURIComponent(e))}te.unescapeFragment=F$;function L$(e){return encodeURIComponent(Qa(e))}te.escapeFragment=L$;function Qa(e){if(typeof e=="number")return`${e}`;return e.replace(/~/g,"~0").replace(/\//g,"~1")}te.escapeJsonPointer=Qa;function Nd(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}te.unescapeJsonPointer=Nd;function H$(e,t){if(Array.isArray(e))for(let r of e)t(r);else t(e)}te.eachItem=H$;function Td({mergeNames:e,mergeToName:t,mergeValues:r,resultToName:s}){return(n,i,o,a)=>{let c=o===void 0?i:o instanceof V.Name?(i instanceof V.Name?e(n,i,o):t(n,i,o),o):i instanceof V.Name?(t(n,o,i),i):r(i,o);return a===V.Name&&!(c instanceof V.Name)?s(n,c):c}}te.mergeEvaluated={props:Td({mergeNames:(e,t,r)=>e.if(V._`${r} !== true && ${t} !== undefined`,()=>{e.if(V._`${t} === true`,()=>e.assign(r,!0),()=>e.assign(r,V._`${r} || {}`).code(V._`Object.assign(${r}, ${t})`))}),mergeToName:(e,t,r)=>e.if(V._`${r} !== true`,()=>{if(t===!0)e.assign(r,!0);else e.assign(r,V._`${r} || {}`),Ba(e,r,t)}),mergeValues:(e,t)=>e===!0?!0:{...e,...t},resultToName:qd}),items:Td({mergeNames:(e,t,r)=>e.if(V._`${r} !== true && ${t} !== undefined`,()=>e.assign(r,V._`${t} === true ? true : ${r} > ${t} ? ${r} : ${t}`)),mergeToName:(e,t,r)=>e.if(V._`${r} !== true`,()=>e.assign(r,t===!0?!0:V._`${r} > ${t} ? ${r} : ${t}`)),mergeValues:(e,t)=>e===!0?!0:Math.max(e,t),resultToName:(e,t)=>e.var("items",t)})};function qd(e,t){if(t===!0)return e.var("props",!0);let r=e.var("props",V._`{}`);if(t!==void 0)Ba(e,r,t);return r}te.evaluatedPropsToName=qd;function Ba(e,t,r){Object.keys(r).forEach((s)=>e.assign(V._`${t}${V.getProperty(s)}`,!0))}te.setEvaluated=Ba;var xd={};function K$(e,t){return e.scopeValue("func",{ref:t,code:xd[t.code]||(xd[t.code]=new Ad._Code(t.code))})}te.useFunc=K$;var Wa;(function(e){e[e.Num=0]="Num",e[e.Str=1]="Str"})(Wa||(te.Type=Wa={}));function G$(e,t,r){if(e instanceof V.Name){let s=t===Wa.Num;return r?s?V._`"[" + ${e} + "]"`:V._`"['" + ${e} + "']"`:s?V._`"/" + ${e}`:V._`"/" + ${e}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return r?V.getProperty(e).toString():"/"+Qa(e)}te.getErrorPath=G$;function Dd(e,t,r=e.opts.strictSchema){if(!r)return;if(t=`strict mode: ${t}`,r===!0)throw Error(t);e.self.logger.warn(t)}te.checkStrictMode=Dd});var kr=b(function(Xa){Object.defineProperty(Xa,"__esModule",{value:!0});var fe=ee(),J$={data:new fe.Name("data"),valCxt:new fe.Name("valCxt"),instancePath:new fe.Name("instancePath"),parentData:new fe.Name("parentData"),parentDataProperty:new fe.Name("parentDataProperty"),rootData:new fe.Name("rootData"),dynamicAnchors:new fe.Name("dynamicAnchors"),vErrors:new fe.Name("vErrors"),errors:new fe.Name("errors"),this:new fe.Name("this"),self:new fe.Name("self"),scope:new fe.Name("scope"),json:new fe.Name("json"),jsonPos:new fe.Name("jsonPos"),jsonLen:new fe.Name("jsonLen"),jsonPart:new fe.Name("jsonPart")};Xa.default=J$});var Zn=b(function(tt){Object.defineProperty(tt,"__esModule",{value:!0});tt.extendErrors=tt.resetErrorsCount=tt.reportExtraError=tt.reportError=tt.keyword$DataError=tt.keywordError=void 0;var N=ee(),Cr=ne(),ot=kr();tt.keywordError={message:({keyword:e})=>N.str`must pass "${e}" keyword validation`};tt.keyword$DataError={message:({keyword:e,schemaType:t})=>t?N.str`"${e}" keyword must be ${t} ($data)`:N.str`"${e}" keyword is invalid ($data)`};function W$(e,t=tt.keywordError,r,s){let{it:n}=e,{gen:i,compositeRule:o,allErrors:a}=n,c=Ud(e,t,r);if(s!==null&&s!==void 0?s:o||a)Md(i,c);else Vd(n,N._`[${c}]`)}tt.reportError=W$;function Q$(e,t=tt.keywordError,r){let{it:s}=e,{gen:n,compositeRule:i,allErrors:o}=s,a=Ud(e,t,r);if(Md(n,a),!(i||o))Vd(s,ot.default.vErrors)}tt.reportExtraError=Q$;function B$(e,t){e.assign(ot.default.errors,t),e.if(N._`${ot.default.vErrors} !== null`,()=>e.if(t,()=>e.assign(N._`${ot.default.vErrors}.length`,t),()=>e.assign(ot.default.vErrors,null)))}tt.resetErrorsCount=B$;function X$({gen:e,keyword:t,schemaValue:r,data:s,errsCount:n,it:i}){if(n===void 0)throw Error("ajv implementation error");let o=e.name("err");e.forRange("i",n,ot.default.errors,(a)=>{if(e.const(o,N._`${ot.default.vErrors}[${a}]`),e.if(N._`${o}.instancePath === undefined`,()=>e.assign(N._`${o}.instancePath`,N.strConcat(ot.default.instancePath,i.errorPath))),e.assign(N._`${o}.schemaPath`,N.str`${i.errSchemaPath}/${t}`),i.opts.verbose)e.assign(N._`${o}.schema`,r),e.assign(N._`${o}.data`,s)})}tt.extendErrors=X$;function Md(e,t){let r=e.const("err",t);e.if(N._`${ot.default.vErrors} === null`,()=>e.assign(ot.default.vErrors,N._`[${r}]`),N._`${ot.default.vErrors}.push(${r})`),e.code(N._`${ot.default.errors}++`)}function Vd(e,t){let{gen:r,validateName:s,schemaEnv:n}=e;if(n.$async)r.throw(N._`new ${e.ValidationError}(${t})`);else r.assign(N._`${s}.errors`,t),r.return(!1)}var Ps={keyword:new N.Name("keyword"),schemaPath:new N.Name("schemaPath"),params:new N.Name("params"),propertyName:new N.Name("propertyName"),message:new N.Name("message"),schema:new N.Name("schema"),parentSchema:new N.Name("parentSchema")};function Ud(e,t,r){let{createErrors:s}=e.it;if(s===!1)return N._`{}`;return Z$(e,t,r)}function Z$(e,t,r={}){let{gen:s,it:n}=e,i=[Y$(n,r),e_(e,r)];return t_(e,t,i),s.object(...i)}function Y$({errorPath:e},{instancePath:t}){let r=t?N.str`${e}${Cr.getErrorPath(t,Cr.Type.Str)}`:e;return[ot.default.instancePath,N.strConcat(ot.default.instancePath,r)]}function e_({keyword:e,it:{errSchemaPath:t}},{schemaPath:r,parentSchema:s}){let n=s?t:N.str`${t}/${e}`;if(r)n=N.str`${n}${Cr.getErrorPath(r,Cr.Type.Str)}`;return[Ps.schemaPath,n]}function t_(e,{params:t,message:r},s){let{keyword:n,data:i,schemaValue:o,it:a}=e,{opts:c,propertyName:u,topSchemaRef:l,schemaPath:d}=a;if(s.push([Ps.keyword,n],[Ps.params,typeof t=="function"?t(e):t||N._`{}`]),c.messages)s.push([Ps.message,typeof r=="function"?r(e):r]);if(c.verbose)s.push([Ps.schema,o],[Ps.parentSchema,N._`${l}${d}`],[ot.default.data,i]);if(u)s.push([Ps.propertyName,u])}});var Hd=b(function(Gs){Object.defineProperty(Gs,"__esModule",{value:!0});Gs.boolOrEmptySchema=Gs.topBoolOrEmptySchema=void 0;var zd=Zn(),Fd=ee(),r_=kr(),s_={message:"boolean schema is false"};function n_(e){let{gen:t,schema:r,validateName:s}=e;if(r===!1)Ld(e,!1);else if(typeof r=="object"&&r.$async===!0)t.return(r_.default.data);else t.assign(Fd._`${s}.errors`,null),t.return(!0)}Gs.topBoolOrEmptySchema=n_;function i_(e,t){let{gen:r,schema:s}=e;if(s===!1)r.var(t,!1),Ld(e);else r.var(t,!0)}Gs.boolOrEmptySchema=i_;function Ld(e,t){let{gen:r,data:s}=e;zd.reportError({gen:r,keyword:"false schema",data:s,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:e},s_,void 0,t)}});var Za=b(function(Js){Object.defineProperty(Js,"__esModule",{value:!0});Js.getRules=Js.isJSONType=void 0;var o_=["string","number","integer","boolean","null","object","array"],a_=new Set(o_);function c_(e){return typeof e=="string"&&a_.has(e)}Js.isJSONType=c_;function u_(){let e={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...e,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},e.number,e.string,e.array,e.object],post:{rules:[]},all:{},keywords:{}}}Js.getRules=u_});var Ya=b(function(Nr){Object.defineProperty(Nr,"__esModule",{value:!0});Nr.shouldUseRule=Nr.shouldUseGroup=Nr.schemaHasRulesForType=void 0;function l_({schema:e,self:t},r){let s=t.RULES.types[r];return s&&s!==!0&&Kd(e,s)}Nr.schemaHasRulesForType=l_;function Kd(e,t){return t.rules.some((r)=>Gd(e,r))}Nr.shouldUseGroup=Kd;function Gd(e,t){var r;return e[t.keyword]!==void 0||((r=t.definition.implements)===null||r===void 0?void 0:r.some((s)=>e[s]!==void 0))}Nr.shouldUseRule=Gd});var Yn=b(function(rt){Object.defineProperty(rt,"__esModule",{value:!0});rt.reportTypeError=rt.checkDataTypes=rt.checkDataType=rt.coerceAndCheckDataType=rt.getJSONTypes=rt.getSchemaTypes=rt.DataType=void 0;var Jd=Za(),Wd=Ya(),Qd=Zn(),T=ee(),Hi=ne(),Ws;(function(e){e[e.Correct=0]="Correct",e[e.Wrong=1]="Wrong"})(Ws||(rt.DataType=Ws={}));function d_(e){let t=Bd(e.type);if(t.includes("null")){if(e.nullable===!1)throw Error("type: null contradicts nullable: false")}else{if(!t.length&&e.nullable!==void 0)throw Error('"nullable" cannot be used without "type"');if(e.nullable===!0)t.push("null")}return t}rt.getSchemaTypes=d_;function Bd(e){let t=Array.isArray(e)?e:e?[e]:[];if(t.every(Jd.isJSONType))return t;throw Error("type must be JSONType or JSONType[]: "+t.join(","))}rt.getJSONTypes=Bd;function f_(e,t){let{gen:r,data:s,opts:n}=e,i=p_(t,n.coerceTypes),o=t.length>0&&!(i.length===0&&t.length===1&&Wd.schemaHasRulesForType(e,t[0]));if(o){let a=tc(t,s,n.strictNumbers,Ws.Wrong);r.if(a,()=>{if(i.length)m_(e,t,i);else rc(e)})}return o}rt.coerceAndCheckDataType=f_;var Xd=new Set(["string","number","integer","boolean","null"]);function p_(e,t){return t?e.filter((r)=>Xd.has(r)||t==="array"&&r==="array"):[]}function m_(e,t,r){let{gen:s,data:n,opts:i}=e,o=s.let("dataType",T._`typeof ${n}`),a=s.let("coerced",T._`undefined`);if(i.coerceTypes==="array")s.if(T._`${o} == 'object' && Array.isArray(${n}) && ${n}.length == 1`,()=>s.assign(n,T._`${n}[0]`).assign(o,T._`typeof ${n}`).if(tc(t,n,i.strictNumbers),()=>s.assign(a,n)));s.if(T._`${a} !== undefined`);for(let u of r)if(Xd.has(u)||u==="array"&&i.coerceTypes==="array")c(u);s.else(),rc(e),s.endIf(),s.if(T._`${a} !== undefined`,()=>{s.assign(n,a),h_(e,a)});function c(u){switch(u){case"string":s.elseIf(T._`${o} == "number" || ${o} == "boolean"`).assign(a,T._`"" + ${n}`).elseIf(T._`${n} === null`).assign(a,T._`""`);return;case"number":s.elseIf(T._`${o} == "boolean" || ${n} === null
3
+ || (${o} == "string" && ${n} && ${n} == +${n})`).assign(a,T._`+${n}`);return;case"integer":s.elseIf(T._`${o} === "boolean" || ${n} === null
4
+ || (${o} === "string" && ${n} && ${n} == +${n} && !(${n} % 1))`).assign(a,T._`+${n}`);return;case"boolean":s.elseIf(T._`${n} === "false" || ${n} === 0 || ${n} === null`).assign(a,!1).elseIf(T._`${n} === "true" || ${n} === 1`).assign(a,!0);return;case"null":s.elseIf(T._`${n} === "" || ${n} === 0 || ${n} === false`),s.assign(a,null);return;case"array":s.elseIf(T._`${o} === "string" || ${o} === "number"
5
+ || ${o} === "boolean" || ${n} === null`).assign(a,T._`[${n}]`)}}}function h_({gen:e,parentData:t,parentDataProperty:r},s){e.if(T._`${t} !== undefined`,()=>e.assign(T._`${t}[${r}]`,s))}function ec(e,t,r,s=Ws.Correct){let n=s===Ws.Correct?T.operators.EQ:T.operators.NEQ,i;switch(e){case"null":return T._`${t} ${n} null`;case"array":i=T._`Array.isArray(${t})`;break;case"object":i=T._`${t} && typeof ${t} == "object" && !Array.isArray(${t})`;break;case"integer":i=o(T._`!(${t} % 1) && !isNaN(${t})`);break;case"number":i=o();break;default:return T._`typeof ${t} ${n} ${e}`}return s===Ws.Correct?i:T.not(i);function o(a=T.nil){return T.and(T._`typeof ${t} == "number"`,a,r?T._`isFinite(${t})`:T.nil)}}rt.checkDataType=ec;function tc(e,t,r,s){if(e.length===1)return ec(e[0],t,r,s);let n,i=Hi.toHash(e);if(i.array&&i.object){let o=T._`typeof ${t} != "object"`;n=i.null?o:T._`!${t} || ${o}`,delete i.null,delete i.array,delete i.object}else n=T.nil;if(i.number)delete i.integer;for(let o in i)n=T.and(n,ec(o,t,r,s));return n}rt.checkDataTypes=tc;var y_={message:({schema:e})=>`must be ${e}`,params:({schema:e,schemaValue:t})=>typeof e=="string"?T._`{type: ${e}}`:T._`{type: ${t}}`};function rc(e){let t=g_(e);Qd.reportError(t,y_)}rt.reportTypeError=rc;function g_(e){let{gen:t,data:r,schema:s}=e,n=Hi.schemaRefOrVal(e,s,"type");return{gen:t,keyword:"type",data:r,schema:s.type,schemaCode:n,schemaValue:n,parentSchema:s,params:{},it:e}}});var ef=b(function(Ki){Object.defineProperty(Ki,"__esModule",{value:!0});Ki.assignDefaults=void 0;var Et=ee(),Yd=ne();function v_(e,t){let{properties:r,items:s}=e.schema;if(t==="object"&&r)for(let n in r)Zd(e,n,r[n].default);else if(t==="array"&&Array.isArray(s))s.forEach((n,i)=>Zd(e,i,n.default))}Ki.assignDefaults=v_;function Zd(e,t,r){let{gen:s,compositeRule:n,data:i,opts:o}=e;if(r===void 0)return;let a=Et._`${i}${Et.getProperty(t)}`;if(n){Yd.checkStrictMode(e,`default is ignored for: ${a}`);return}let c=Et._`${a} === undefined`;if(o.useDefaults==="empty")c=Et._`${c} || ${a} === null || ${a} === ""`;s.if(c,Et._`${a} = ${Et.stringify(r)}`)}});var kt=b(function(_e){Object.defineProperty(_e,"__esModule",{value:!0});_e.validateUnion=_e.validateArray=_e.usePattern=_e.callValidateCode=_e.schemaProperties=_e.allSchemaProperties=_e.noPropertyInData=_e.propertyInData=_e.isOwnProperty=_e.hasPropFunc=_e.reportMissingProp=_e.checkMissingProp=_e.checkReportMissingProp=void 0;var z=ee(),Qs=ne(),qr=kr(),tf=ne();function $_(e,t){let{gen:r,data:s,it:n}=e;r.if(nc(r,s,t,n.opts.ownProperties),()=>{e.setParams({missingProperty:z._`${t}`},!0),e.error()})}_e.checkReportMissingProp=$_;function __({gen:e,data:t,it:{opts:r}},s,n){return z.or(...s.map((i)=>z.and(nc(e,t,i,r.ownProperties),z._`${n} = ${i}`)))}_e.checkMissingProp=__;function w_(e,t){e.setParams({missingProperty:t},!0),e.error()}_e.reportMissingProp=w_;function rf(e){return e.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:z._`Object.prototype.hasOwnProperty`})}_e.hasPropFunc=rf;function sc(e,t,r){return z._`${rf(e)}.call(${t}, ${r})`}_e.isOwnProperty=sc;function b_(e,t,r,s){let n=z._`${t}${z.getProperty(r)} !== undefined`;return s?z._`${n} && ${sc(e,t,r)}`:n}_e.propertyInData=b_;function nc(e,t,r,s){let n=z._`${t}${z.getProperty(r)} === undefined`;return s?z.or(n,z.not(sc(e,t,r))):n}_e.noPropertyInData=nc;function sf(e){return e?Object.keys(e).filter((t)=>t!=="__proto__"):[]}_e.allSchemaProperties=sf;function S_(e,t){return sf(t).filter((r)=>!Qs.alwaysValidSchema(e,t[r]))}_e.schemaProperties=S_;function P_({schemaCode:e,data:t,it:{gen:r,topSchemaRef:s,schemaPath:n,errorPath:i},it:o},a,c,u){let l=u?z._`${e}, ${t}, ${s}${n}`:t,d=[[qr.default.instancePath,z.strConcat(qr.default.instancePath,i)],[qr.default.parentData,o.parentData],[qr.default.parentDataProperty,o.parentDataProperty],[qr.default.rootData,qr.default.rootData]];if(o.opts.dynamicRef)d.push([qr.default.dynamicAnchors,qr.default.dynamicAnchors]);let v=z._`${l}, ${r.object(...d)}`;return c!==z.nil?z._`${a}.call(${c}, ${v})`:z._`${a}(${v})`}_e.callValidateCode=P_;var E_=z._`new RegExp`;function k_({gen:e,it:{opts:t}},r){let s=t.unicodeRegExp?"u":"",{regExp:n}=t.code,i=n(r,s);return e.scopeValue("pattern",{key:i.toString(),ref:i,code:z._`${n.code==="new RegExp"?E_:tf.useFunc(e,n)}(${r}, ${s})`})}_e.usePattern=k_;function R_(e){let{gen:t,data:r,keyword:s,it:n}=e,i=t.name("valid");if(n.allErrors){let a=t.let("valid",!0);return o(()=>t.assign(a,!1)),a}return t.var(i,!0),o(()=>t.break()),i;function o(a){let c=t.const("len",z._`${r}.length`);t.forRange("i",0,c,(u)=>{e.subschema({keyword:s,dataProp:u,dataPropType:Qs.Type.Num},i),t.if(z.not(i),a)})}}_e.validateArray=R_;function I_(e){let{gen:t,schema:r,keyword:s,it:n}=e;if(!Array.isArray(r))throw Error("ajv implementation error");if(r.some((c)=>Qs.alwaysValidSchema(n,c))&&!n.opts.unevaluated)return;let o=t.let("valid",!1),a=t.name("_valid");t.block(()=>r.forEach((c,u)=>{let l=e.subschema({keyword:s,schemaProp:u,compositeRule:!0},a);if(t.assign(o,z._`${o} || ${a}`),!e.mergeValidEvaluated(l,a))t.if(z.not(o))})),e.result(o,()=>e.reset(),()=>e.error(!0))}_e.validateUnion=I_});var uf=b(function(Ht){Object.defineProperty(Ht,"__esModule",{value:!0});Ht.validateKeywordUsage=Ht.validSchemaType=Ht.funcKeywordCode=Ht.macroKeywordCode=void 0;var ye=ee(),Es=kr(),of=kt(),af=Zn();function O_(e,t){let{gen:r,keyword:s,schema:n,parentSchema:i,it:o}=e,a=t.macro.call(o.self,n,i,o),c=cf(r,s,a);if(o.opts.validateSchema!==!1)o.self.validateSchema(a,!0);let u=r.name("valid");e.subschema({schema:a,schemaPath:ye.nil,errSchemaPath:`${o.errSchemaPath}/${s}`,topSchemaRef:c,compositeRule:!0},u),e.pass(u,()=>e.error(!0))}Ht.macroKeywordCode=O_;function T_(e,t){var r;let{gen:s,keyword:n,schema:i,parentSchema:o,$data:a,it:c}=e;A_(c,t);let u=!a&&t.compile?t.compile.call(c.self,i,o,c):t.validate,l=cf(s,n,u),d=s.let("valid");e.block$data(d,v),e.ok((r=t.valid)!==null&&r!==void 0?r:d);function v(){if(t.errors===!1){if(p(),t.modifying)nf(e);_(()=>e.error())}else{let w=t.async?m():h();if(t.modifying)nf(e);_(()=>x_(e,w))}}function m(){let w=s.let("ruleErrs",null);return s.try(()=>p(ye._`await `),(I)=>s.assign(d,!1).if(ye._`${I} instanceof ${c.ValidationError}`,()=>s.assign(w,ye._`${I}.errors`),()=>s.throw(I))),w}function h(){let w=ye._`${l}.errors`;return s.assign(w,null),p(ye.nil),w}function p(w=t.async?ye._`await `:ye.nil){let I=c.opts.passContext?Es.default.this:Es.default.self,O=!(("compile"in t)&&!a||t.schema===!1);s.assign(d,ye._`${w}${of.callValidateCode(e,l,I,O)}`,t.modifying)}function _(w){var I;s.if(ye.not((I=t.valid)!==null&&I!==void 0?I:d),w)}}Ht.funcKeywordCode=T_;function nf(e){let{gen:t,data:r,it:s}=e;t.if(s.parentData,()=>t.assign(r,ye._`${s.parentData}[${s.parentDataProperty}]`))}function x_(e,t){let{gen:r}=e;r.if(ye._`Array.isArray(${t})`,()=>{r.assign(Es.default.vErrors,ye._`${Es.default.vErrors} === null ? ${t} : ${Es.default.vErrors}.concat(${t})`).assign(Es.default.errors,ye._`${Es.default.vErrors}.length`),af.extendErrors(e)},()=>e.error())}function A_({schemaEnv:e},t){if(t.async&&!e.$async)throw Error("async keyword in sync schema")}function cf(e,t,r){if(r===void 0)throw Error(`keyword "${t}" failed to compile`);return e.scopeValue("keyword",typeof r=="function"?{ref:r}:{ref:r,code:ye.stringify(r)})}function j_(e,t,r=!1){return!t.length||t.some((s)=>s==="array"?Array.isArray(e):s==="object"?e&&typeof e=="object"&&!Array.isArray(e):typeof e==s||r&&typeof e>"u")}Ht.validSchemaType=j_;function C_({schema:e,opts:t,self:r,errSchemaPath:s},n,i){if(Array.isArray(n.keyword)?!n.keyword.includes(i):n.keyword!==i)throw Error("ajv implementation error");let o=n.dependencies;if(o===null||o===void 0?void 0:o.some((a)=>!Object.prototype.hasOwnProperty.call(e,a)))throw Error(`parent schema must have dependencies of ${i}: ${o.join(",")}`);if(n.validateSchema){if(!n.validateSchema(e[i])){let c=`keyword "${i}" value is invalid at path "${s}": `+r.errorsText(n.validateSchema.errors);if(t.validateSchema==="log")r.logger.error(c);else throw Error(c)}}}Ht.validateKeywordUsage=C_});var lf=b(function(Dr){Object.defineProperty(Dr,"__esModule",{value:!0});Dr.extendSubschemaMode=Dr.extendSubschemaData=Dr.getSubschema=void 0;var Ge=ee(),Gi=ne();function N_(e,{keyword:t,schemaProp:r,schema:s,schemaPath:n,errSchemaPath:i,topSchemaRef:o}){if(t!==void 0&&s!==void 0)throw Error('both "keyword" and "schema" passed, only one allowed');if(t!==void 0){let a=e.schema[t];return r===void 0?{schema:a,schemaPath:Ge._`${e.schemaPath}${Ge.getProperty(t)}`,errSchemaPath:`${e.errSchemaPath}/${t}`}:{schema:a[r],schemaPath:Ge._`${e.schemaPath}${Ge.getProperty(t)}${Ge.getProperty(r)}`,errSchemaPath:`${e.errSchemaPath}/${t}/${Gi.escapeFragment(r)}`}}if(s!==void 0){if(n===void 0||i===void 0||o===void 0)throw Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:s,schemaPath:n,topSchemaRef:o,errSchemaPath:i}}throw Error('either "keyword" or "schema" must be passed')}Dr.getSubschema=N_;function q_(e,t,{dataProp:r,dataPropType:s,data:n,dataTypes:i,propertyName:o}){if(n!==void 0&&r!==void 0)throw Error('both "data" and "dataProp" passed, only one allowed');let{gen:a}=t;if(r!==void 0){let{errorPath:u,dataPathArr:l,opts:d}=t,v=a.let("data",Ge._`${t.data}${Ge.getProperty(r)}`,!0);c(v),e.errorPath=Ge.str`${u}${Gi.getErrorPath(r,s,d.jsPropertySyntax)}`,e.parentDataProperty=Ge._`${r}`,e.dataPathArr=[...l,e.parentDataProperty]}if(n!==void 0){let u=n instanceof Ge.Name?n:a.let("data",n,!0);if(c(u),o!==void 0)e.propertyName=o}if(i)e.dataTypes=i;function c(u){e.data=u,e.dataLevel=t.dataLevel+1,e.dataTypes=[],t.definedProperties=new Set,e.parentData=t.data,e.dataNames=[...t.dataNames,u]}}Dr.extendSubschemaData=q_;function D_(e,{jtdDiscriminator:t,jtdMetadata:r,compositeRule:s,createErrors:n,allErrors:i}){if(s!==void 0)e.compositeRule=s;if(n!==void 0)e.createErrors=n;if(i!==void 0)e.allErrors=i;e.jtdDiscriminator=t,e.jtdMetadata=r}Dr.extendSubschemaMode=D_});var ei=b(function(fI,df){df.exports=function e(t,r){if(t===r)return!0;if(t&&r&&typeof t=="object"&&typeof r=="object"){if(t.constructor!==r.constructor)return!1;var s,n,i;if(Array.isArray(t)){if(s=t.length,s!=r.length)return!1;for(n=s;n--!==0;)if(!e(t[n],r[n]))return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if(i=Object.keys(t),s=i.length,s!==Object.keys(r).length)return!1;for(n=s;n--!==0;)if(!Object.prototype.hasOwnProperty.call(r,i[n]))return!1;for(n=s;n--!==0;){var o=i[n];if(!e(t[o],r[o]))return!1}return!0}return t!==t&&r!==r}});var ic=b(function(pI,ff){var Mr=ff.exports=function(e,t,r){if(typeof t=="function")r=t,t={};r=t.cb||r;var s=typeof r=="function"?r:r.pre||function(){},n=r.post||function(){};Ji(t,s,n,e,"",e)};Mr.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0};Mr.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0};Mr.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0};Mr.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function Ji(e,t,r,s,n,i,o,a,c,u){if(s&&typeof s=="object"&&!Array.isArray(s)){t(s,n,i,o,a,c,u);for(var l in s){var d=s[l];if(Array.isArray(d)){if(l in Mr.arrayKeywords)for(var v=0;v<d.length;v++)Ji(e,t,r,d[v],n+"/"+l+"/"+v,i,n,l,s,v)}else if(l in Mr.propsKeywords){if(d&&typeof d=="object")for(var m in d)Ji(e,t,r,d[m],n+"/"+l+"/"+M_(m),i,n,l,s,m)}else if(l in Mr.keywords||e.allKeys&&!(l in Mr.skipKeywords))Ji(e,t,r,d,n+"/"+l,i,n,l,s)}r(s,n,i,o,a,c,u)}}function M_(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}});var ti=b(function(ft){Object.defineProperty(ft,"__esModule",{value:!0});ft.getSchemaRefs=ft.resolveUrl=ft.normalizeId=ft._getFullPath=ft.getFullPath=ft.inlineRef=void 0;var pf=ne(),V_=ei(),U_=ic(),z_=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);function F_(e,t=!0){if(typeof e=="boolean")return!0;if(t===!0)return!oc(e);if(!t)return!1;return mf(e)<=t}ft.inlineRef=F_;var L_=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function oc(e){for(let t in e){if(L_.has(t))return!0;let r=e[t];if(Array.isArray(r)&&r.some(oc))return!0;if(typeof r=="object"&&oc(r))return!0}return!1}function mf(e){let t=0;for(let r in e){if(r==="$ref")return 1/0;if(t++,z_.has(r))continue;if(typeof e[r]=="object")pf.eachItem(e[r],(s)=>t+=mf(s));if(t===1/0)return 1/0}return t}function hf(e,t="",r){if(r!==!1)t=Bs(t);let s=e.parse(t);return yf(e,s)}ft.getFullPath=hf;function yf(e,t){return e.serialize(t).split("#")[0]+"#"}ft._getFullPath=yf;var H_=/#\/?$/;function Bs(e){return e?e.replace(H_,""):""}ft.normalizeId=Bs;function K_(e,t,r){return r=Bs(r),e.resolve(t,r)}ft.resolveUrl=K_;var G_=/^[a-z_][-a-z0-9._]*$/i;function J_(e,t){if(typeof e=="boolean")return{};let{schemaId:r,uriResolver:s}=this.opts,n=Bs(e[r]||t),i={"":n},o=hf(s,n,!1),a={},c=new Set;return U_(e,{allKeys:!0},(d,v,m,h)=>{if(h===void 0)return;let p=o+v,_=i[h];if(typeof d[r]=="string")_=w.call(this,d[r]);I.call(this,d.$anchor),I.call(this,d.$dynamicAnchor),i[v]=_;function w(O){let D=this.opts.uriResolver.resolve;if(O=Bs(_?D(_,O):O),c.has(O))throw l(O);c.add(O);let S=this.refs[O];if(typeof S=="string")S=this.refs[S];if(typeof S=="object")u(d,S.schema,O);else if(O!==Bs(p))if(O[0]==="#")u(d,a[O],O),a[O]=d;else this.refs[O]=p;return O}function I(O){if(typeof O=="string"){if(!G_.test(O))throw Error(`invalid anchor "${O}"`);w.call(this,`#${O}`)}}}),a;function u(d,v,m){if(v!==void 0&&!V_(d,v))throw l(m)}function l(d){return Error(`reference "${d}" resolves to more than one schema`)}}ft.getSchemaRefs=J_});var ri=b(function(Vr){Object.defineProperty(Vr,"__esModule",{value:!0});Vr.getData=Vr.KeywordCxt=Vr.validateFunctionCode=void 0;var Qi=Hd(),Wi=Yn(),Zs=Ya(),Ur=Yn(),_f=ef(),Gt=uf(),Xs=lf(),k=ee(),L=kr(),wf=ti(),Qe=ne(),Kt=Zn();function W_(e){if(Pf(e)){if(Ef(e),Sf(e)){X_(e);return}}bf(e,()=>Qi.topBoolOrEmptySchema(e))}Vr.validateFunctionCode=W_;function bf({gen:e,validateName:t,schema:r,schemaEnv:s,opts:n},i){if(n.code.es5)e.func(t,k._`${L.default.data}, ${L.default.valCxt}`,s.$async,()=>{e.code(k._`"use strict"; ${gf(r,n)}`),B_(e,n),e.code(i)});else e.func(t,k._`${L.default.data}, ${Q_(n)}`,s.$async,()=>e.code(gf(r,n)).code(i))}function Q_(e){return k._`{${L.default.instancePath}="", ${L.default.parentData}, ${L.default.parentDataProperty}, ${L.default.rootData}=${L.default.data}${e.dynamicRef?k._`, ${L.default.dynamicAnchors}={}`:k.nil}}={}`}function B_(e,t){e.if(L.default.valCxt,()=>{if(e.var(L.default.instancePath,k._`${L.default.valCxt}.${L.default.instancePath}`),e.var(L.default.parentData,k._`${L.default.valCxt}.${L.default.parentData}`),e.var(L.default.parentDataProperty,k._`${L.default.valCxt}.${L.default.parentDataProperty}`),e.var(L.default.rootData,k._`${L.default.valCxt}.${L.default.rootData}`),t.dynamicRef)e.var(L.default.dynamicAnchors,k._`${L.default.valCxt}.${L.default.dynamicAnchors}`)},()=>{if(e.var(L.default.instancePath,k._`""`),e.var(L.default.parentData,k._`undefined`),e.var(L.default.parentDataProperty,k._`undefined`),e.var(L.default.rootData,L.default.data),t.dynamicRef)e.var(L.default.dynamicAnchors,k._`{}`)})}function X_(e){let{schema:t,opts:r,gen:s}=e;bf(e,()=>{if(r.$comment&&t.$comment)Rf(e);if(rw(e),s.let(L.default.vErrors,null),s.let(L.default.errors,0),r.unevaluated)Z_(e);kf(e),iw(e)});return}function Z_(e){let{gen:t,validateName:r}=e;e.evaluated=t.const("evaluated",k._`${r}.evaluated`),t.if(k._`${e.evaluated}.dynamicProps`,()=>t.assign(k._`${e.evaluated}.props`,k._`undefined`)),t.if(k._`${e.evaluated}.dynamicItems`,()=>t.assign(k._`${e.evaluated}.items`,k._`undefined`))}function gf(e,t){let r=typeof e=="object"&&e[t.schemaId];return r&&(t.code.source||t.code.process)?k._`/*# sourceURL=${r} */`:k.nil}function Y_(e,t){if(Pf(e)){if(Ef(e),Sf(e)){ew(e,t);return}}Qi.boolOrEmptySchema(e,t)}function Sf({schema:e,self:t}){if(typeof e=="boolean")return!e;for(let r in e)if(t.RULES.all[r])return!0;return!1}function Pf(e){return typeof e.schema!="boolean"}function ew(e,t){let{schema:r,gen:s,opts:n}=e;if(n.$comment&&r.$comment)Rf(e);sw(e),nw(e);let i=s.const("_errs",L.default.errors);kf(e,i),s.var(t,k._`${i} === ${L.default.errors}`)}function Ef(e){Qe.checkUnknownRules(e),tw(e)}function kf(e,t){if(e.opts.jtd)return vf(e,[],!1,t);let r=Wi.getSchemaTypes(e.schema),s=Wi.coerceAndCheckDataType(e,r);vf(e,r,!s,t)}function tw(e){let{schema:t,errSchemaPath:r,opts:s,self:n}=e;if(t.$ref&&s.ignoreKeywordsWithRef&&Qe.schemaHasRulesButRef(t,n.RULES))n.logger.warn(`$ref: keywords ignored in schema at path "${r}"`)}function rw(e){let{schema:t,opts:r}=e;if(t.default!==void 0&&r.useDefaults&&r.strictSchema)Qe.checkStrictMode(e,"default is ignored in the schema root")}function sw(e){let t=e.schema[e.opts.schemaId];if(t)e.baseId=wf.resolveUrl(e.opts.uriResolver,e.baseId,t)}function nw(e){if(e.schema.$async&&!e.schemaEnv.$async)throw Error("async schema in sync schema")}function Rf({gen:e,schemaEnv:t,schema:r,errSchemaPath:s,opts:n}){let i=r.$comment;if(n.$comment===!0)e.code(k._`${L.default.self}.logger.log(${i})`);else if(typeof n.$comment=="function"){let o=k.str`${s}/$comment`,a=e.scopeValue("root",{ref:t.root});e.code(k._`${L.default.self}.opts.$comment(${i}, ${o}, ${a}.schema)`)}}function iw(e){let{gen:t,schemaEnv:r,validateName:s,ValidationError:n,opts:i}=e;if(r.$async)t.if(k._`${L.default.errors} === 0`,()=>t.return(L.default.data),()=>t.throw(k._`new ${n}(${L.default.vErrors})`));else{if(t.assign(k._`${s}.errors`,L.default.vErrors),i.unevaluated)ow(e);t.return(k._`${L.default.errors} === 0`)}}function ow({gen:e,evaluated:t,props:r,items:s}){if(r instanceof k.Name)e.assign(k._`${t}.props`,r);if(s instanceof k.Name)e.assign(k._`${t}.items`,s)}function vf(e,t,r,s){let{gen:n,schema:i,data:o,allErrors:a,opts:c,self:u}=e,{RULES:l}=u;if(i.$ref&&(c.ignoreKeywordsWithRef||!Qe.schemaHasRulesButRef(i,l))){n.block(()=>Of(e,"$ref",l.all.$ref.definition));return}if(!c.jtd)aw(e,t);n.block(()=>{for(let v of l.rules)d(v);d(l.post)});function d(v){if(!Zs.shouldUseGroup(i,v))return;if(v.type){if(n.if(Ur.checkDataType(v.type,o,c.strictNumbers)),$f(e,v),t.length===1&&t[0]===v.type&&r)n.else(),Ur.reportTypeError(e);n.endIf()}else $f(e,v);if(!a)n.if(k._`${L.default.errors} === ${s||0}`)}}function $f(e,t){let{gen:r,schema:s,opts:{useDefaults:n}}=e;if(n)_f.assignDefaults(e,t.type);r.block(()=>{for(let i of t.rules)if(Zs.shouldUseRule(s,i))Of(e,i.keyword,i.definition,t.type)})}function aw(e,t){if(e.schemaEnv.meta||!e.opts.strictTypes)return;if(cw(e,t),!e.opts.allowUnionTypes)uw(e,t);lw(e,e.dataTypes)}function cw(e,t){if(!t.length)return;if(!e.dataTypes.length){e.dataTypes=t;return}t.forEach((r)=>{if(!If(e.dataTypes,r))ac(e,`type "${r}" not allowed by context "${e.dataTypes.join(",")}"`)}),fw(e,t)}function uw(e,t){if(t.length>1&&!(t.length===2&&t.includes("null")))ac(e,"use allowUnionTypes to allow union type keyword")}function lw(e,t){let r=e.self.RULES.all;for(let s in r){let n=r[s];if(typeof n=="object"&&Zs.shouldUseRule(e.schema,n)){let{type:i}=n.definition;if(i.length&&!i.some((o)=>dw(t,o)))ac(e,`missing type "${i.join(",")}" for keyword "${s}"`)}}}function dw(e,t){return e.includes(t)||t==="number"&&e.includes("integer")}function If(e,t){return e.includes(t)||t==="integer"&&e.includes("number")}function fw(e,t){let r=[];for(let s of e.dataTypes)if(If(t,s))r.push(s);else if(t.includes("integer")&&s==="number")r.push("integer");e.dataTypes=r}function ac(e,t){let r=e.schemaEnv.baseId+e.errSchemaPath;t+=` at "${r}" (strictTypes)`,Qe.checkStrictMode(e,t,e.opts.strictTypes)}class cc{constructor(e,t,r){if(Gt.validateKeywordUsage(e,t,r),this.gen=e.gen,this.allErrors=e.allErrors,this.keyword=r,this.data=e.data,this.schema=e.schema[r],this.$data=t.$data&&e.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=Qe.schemaRefOrVal(e,this.schema,r,this.$data),this.schemaType=t.schemaType,this.parentSchema=e.schema,this.params={},this.it=e,this.def=t,this.$data)this.schemaCode=e.gen.const("vSchema",Tf(this.$data,e));else if(this.schemaCode=this.schemaValue,!Gt.validSchemaType(this.schema,t.schemaType,t.allowUndefined))throw Error(`${r} value must be ${JSON.stringify(t.schemaType)}`);if("code"in t?t.trackErrors:t.errors!==!1)this.errsCount=e.gen.const("_errs",L.default.errors)}result(e,t,r){this.failResult(k.not(e),t,r)}failResult(e,t,r){if(this.gen.if(e),r)r();else this.error();if(t){if(this.gen.else(),t(),this.allErrors)this.gen.endIf()}else if(this.allErrors)this.gen.endIf();else this.gen.else()}pass(e,t){this.failResult(k.not(e),void 0,t)}fail(e){if(e===void 0){if(this.error(),!this.allErrors)this.gen.if(!1);return}if(this.gen.if(e),this.error(),this.allErrors)this.gen.endIf();else this.gen.else()}fail$data(e){if(!this.$data)return this.fail(e);let{schemaCode:t}=this;this.fail(k._`${t} !== undefined && (${k.or(this.invalid$data(),e)})`)}error(e,t,r){if(t){this.setParams(t),this._error(e,r),this.setParams({});return}this._error(e,r)}_error(e,t){(e?Kt.reportExtraError:Kt.reportError)(this,this.def.error,t)}$dataError(){Kt.reportError(this,this.def.$dataError||Kt.keyword$DataError)}reset(){if(this.errsCount===void 0)throw Error('add "trackErrors" to keyword definition');Kt.resetErrorsCount(this.gen,this.errsCount)}ok(e){if(!this.allErrors)this.gen.if(e)}setParams(e,t){if(t)Object.assign(this.params,e);else this.params=e}block$data(e,t,r=k.nil){this.gen.block(()=>{this.check$data(e,r),t()})}check$data(e=k.nil,t=k.nil){if(!this.$data)return;let{gen:r,schemaCode:s,schemaType:n,def:i}=this;if(r.if(k.or(k._`${s} === undefined`,t)),e!==k.nil)r.assign(e,!0);if(n.length||i.validateSchema){if(r.elseIf(this.invalid$data()),this.$dataError(),e!==k.nil)r.assign(e,!1)}r.else()}invalid$data(){let{gen:e,schemaCode:t,schemaType:r,def:s,it:n}=this;return k.or(i(),o());function i(){if(r.length){if(!(t instanceof k.Name))throw Error("ajv implementation error");let a=Array.isArray(r)?r:[r];return k._`${Ur.checkDataTypes(a,t,n.opts.strictNumbers,Ur.DataType.Wrong)}`}return k.nil}function o(){if(s.validateSchema){let a=e.scopeValue("validate$data",{ref:s.validateSchema});return k._`!${a}(${t})`}return k.nil}}subschema(e,t){let r=Xs.getSubschema(this.it,e);Xs.extendSubschemaData(r,this.it,e),Xs.extendSubschemaMode(r,e);let s={...this.it,...r,items:void 0,props:void 0};return Y_(s,t),s}mergeEvaluated(e,t){let{it:r,gen:s}=this;if(!r.opts.unevaluated)return;if(r.props!==!0&&e.props!==void 0)r.props=Qe.mergeEvaluated.props(s,e.props,r.props,t);if(r.items!==!0&&e.items!==void 0)r.items=Qe.mergeEvaluated.items(s,e.items,r.items,t)}mergeValidEvaluated(e,t){let{it:r,gen:s}=this;if(r.opts.unevaluated&&(r.props!==!0||r.items!==!0))return s.if(t,()=>this.mergeEvaluated(e,k.Name)),!0}}Vr.KeywordCxt=cc;function Of(e,t,r,s){let n=new cc(e,r,t);if("code"in r)r.code(n,s);else if(n.$data&&r.validate)Gt.funcKeywordCode(n,r);else if("macro"in r)Gt.macroKeywordCode(n,r);else if(r.compile||r.validate)Gt.funcKeywordCode(n,r)}var pw=/^\/(?:[^~]|~0|~1)*$/,mw=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function Tf(e,{dataLevel:t,dataNames:r,dataPathArr:s}){let n,i;if(e==="")return L.default.rootData;if(e[0]==="/"){if(!pw.test(e))throw Error(`Invalid JSON-pointer: ${e}`);n=e,i=L.default.rootData}else{let u=mw.exec(e);if(!u)throw Error(`Invalid JSON-pointer: ${e}`);let l=+u[1];if(n=u[2],n==="#"){if(l>=t)throw Error(c("property/index",l));return s[t-l]}if(l>t)throw Error(c("data",l));if(i=r[t-l],!n)return i}let o=i,a=n.split("/");for(let u of a)if(u)i=k._`${i}${k.getProperty(Qe.unescapeJsonPointer(u))}`,o=k._`${o} && ${i}`;return o;function c(u,l){return`Cannot access ${u} ${l} levels up, current level is ${t}`}}Vr.getData=Tf});var Bi=b(function(uc){Object.defineProperty(uc,"__esModule",{value:!0});class xf extends Error{constructor(e){super("validation failed");this.errors=e,this.ajv=this.validation=!0}}uc.default=xf});var si=b(function(lc){Object.defineProperty(lc,"__esModule",{value:!0});var Ys=ti();class Af extends Error{constructor(e,t,r,s){super(s||`can't resolve reference ${r} from id ${t}`);this.missingRef=Ys.resolveUrl(e,t,r),this.missingSchema=Ys.normalizeId(Ys.getFullPath(e,this.missingRef))}}lc.default=Af});var Yi=b(function(Rt){Object.defineProperty(Rt,"__esModule",{value:!0});Rt.resolveSchema=Rt.getCompilingSchema=Rt.resolveRef=Rt.compileSchema=Rt.SchemaEnv=void 0;var Ne=ee(),hw=Bi(),ks=kr(),qe=ti(),Xi=ne(),jf=ri();class ni{constructor(e){var t;this.refs={},this.dynamicAnchors={};let r;if(typeof e.schema=="object")r=e.schema;this.schema=e.schema,this.schemaId=e.schemaId,this.root=e.root||this,this.baseId=(t=e.baseId)!==null&&t!==void 0?t:qe.normalizeId(r===null||r===void 0?void 0:r[e.schemaId||"$id"]),this.schemaPath=e.schemaPath,this.localRefs=e.localRefs,this.meta=e.meta,this.$async=r===null||r===void 0?void 0:r.$async,this.refs={}}}Rt.SchemaEnv=ni;function fc(e){let t=Cf.call(this,e);if(t)return t;let r=qe.getFullPath(this.opts.uriResolver,e.root.baseId),{es5:s,lines:n}=this.opts.code,{ownProperties:i}=this.opts,o=new Ne.CodeGen(this.scope,{es5:s,lines:n,ownProperties:i}),a;if(e.$async)a=o.scopeValue("Error",{ref:hw.default,code:Ne._`require("ajv/dist/runtime/validation_error").default`});let c=o.scopeName("validate");e.validateName=c;let u={gen:o,allErrors:this.opts.allErrors,data:ks.default.data,parentData:ks.default.parentData,parentDataProperty:ks.default.parentDataProperty,dataNames:[ks.default.data],dataPathArr:[Ne.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:o.scopeValue("schema",this.opts.code.source===!0?{ref:e.schema,code:Ne.stringify(e.schema)}:{ref:e.schema}),validateName:c,ValidationError:a,schema:e.schema,schemaEnv:e,rootId:r,baseId:e.baseId||r,schemaPath:Ne.nil,errSchemaPath:e.schemaPath||(this.opts.jtd?"":"#"),errorPath:Ne._`""`,opts:this.opts,self:this},l;try{this._compilations.add(e),jf.validateFunctionCode(u),o.optimize(this.opts.code.optimize);let d=o.toString();if(l=`${o.scopeRefs(ks.default.scope)}return ${d}`,this.opts.code.process)l=this.opts.code.process(l,e);let m=Function(`${ks.default.self}`,`${ks.default.scope}`,l)(this,this.scope.get());if(this.scope.value(c,{ref:m}),m.errors=null,m.schema=e.schema,m.schemaEnv=e,e.$async)m.$async=!0;if(this.opts.code.source===!0)m.source={validateName:c,validateCode:d,scopeValues:o._values};if(this.opts.unevaluated){let{props:h,items:p}=u;if(m.evaluated={props:h instanceof Ne.Name?void 0:h,items:p instanceof Ne.Name?void 0:p,dynamicProps:h instanceof Ne.Name,dynamicItems:p instanceof Ne.Name},m.source)m.source.evaluated=Ne.stringify(m.evaluated)}return e.validate=m,e}catch(d){if(delete e.validate,delete e.validateName,l)this.logger.error("Error compiling schema, function code:",l);throw d}finally{this._compilations.delete(e)}}Rt.compileSchema=fc;function yw(e,t,r){var s;r=qe.resolveUrl(this.opts.uriResolver,t,r);let n=e.refs[r];if(n)return n;let i=$w.call(this,e,r);if(i===void 0){let o=(s=e.localRefs)===null||s===void 0?void 0:s[r],{schemaId:a}=this.opts;if(o)i=new ni({schema:o,schemaId:a,root:e,baseId:t})}if(i===void 0)return;return e.refs[r]=gw.call(this,i)}Rt.resolveRef=yw;function gw(e){if(qe.inlineRef(e.schema,this.opts.inlineRefs))return e.schema;return e.validate?e:fc.call(this,e)}function Cf(e){for(let t of this._compilations)if(vw(t,e))return t}Rt.getCompilingSchema=Cf;function vw(e,t){return e.schema===t.schema&&e.root===t.root&&e.baseId===t.baseId}function $w(e,t){let r;while(typeof(r=this.refs[t])=="string")t=r;return r||this.schemas[t]||Zi.call(this,e,t)}function Zi(e,t){let r=this.opts.uriResolver.parse(t),s=qe._getFullPath(this.opts.uriResolver,r),n=qe.getFullPath(this.opts.uriResolver,e.baseId,void 0);if(Object.keys(e.schema).length>0&&s===n)return dc.call(this,r,e);let i=qe.normalizeId(s),o=this.refs[i]||this.schemas[i];if(typeof o=="string"){let a=Zi.call(this,e,o);if(typeof(a===null||a===void 0?void 0:a.schema)!=="object")return;return dc.call(this,r,a)}if(typeof(o===null||o===void 0?void 0:o.schema)!=="object")return;if(!o.validate)fc.call(this,o);if(i===qe.normalizeId(t)){let{schema:a}=o,{schemaId:c}=this.opts,u=a[c];if(u)n=qe.resolveUrl(this.opts.uriResolver,n,u);return new ni({schema:a,schemaId:c,root:e,baseId:n})}return dc.call(this,r,o)}Rt.resolveSchema=Zi;var _w=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function dc(e,{baseId:t,schema:r,root:s}){var n;if(((n=e.fragment)===null||n===void 0?void 0:n[0])!=="/")return;for(let a of e.fragment.slice(1).split("/")){if(typeof r==="boolean")return;let c=r[Xi.unescapeFragment(a)];if(c===void 0)return;r=c;let u=typeof r==="object"&&r[this.opts.schemaId];if(!_w.has(a)&&u)t=qe.resolveUrl(this.opts.uriResolver,t,u)}let i;if(typeof r!="boolean"&&r.$ref&&!Xi.schemaHasRulesButRef(r,this.RULES)){let a=qe.resolveUrl(this.opts.uriResolver,t,r.$ref);i=Zi.call(this,s,a)}let{schemaId:o}=this.opts;if(i=i||new ni({schema:r,schemaId:o,root:s,baseId:t}),i.schema!==i.root.schema)return i;return}});var Nf=b(function($I,ww){ww.exports={$id:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description:"Meta-schema for $data reference (JSON AnySchema extension proposal)",type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1}});var mc=b(function(_I,Vf){var bw=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu),Df=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);function pc(e){let t="",r=0,s=0;for(s=0;s<e.length;s++){if(r=e[s].charCodeAt(0),r===48)continue;if(!(r>=48&&r<=57||r>=65&&r<=70||r>=97&&r<=102))return"";t+=e[s];break}for(s+=1;s<e.length;s++){if(r=e[s].charCodeAt(0),!(r>=48&&r<=57||r>=65&&r<=70||r>=97&&r<=102))return"";t+=e[s]}return t}var Sw=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);function qf(e){return e.length=0,!0}function Pw(e,t,r){if(e.length){let s=pc(e);if(s!=="")t.push(s);else return r.error=!0,!1;e.length=0}return!0}function Ew(e){let t=0,r={error:!1,address:"",zone:""},s=[],n=[],i=!1,o=!1,a=Pw;for(let c=0;c<e.length;c++){let u=e[c];if(u==="["||u==="]")continue;if(u===":"){if(i===!0)o=!0;if(!a(n,s,r))break;if(++t>7){r.error=!0;break}if(c>0&&e[c-1]===":")i=!0;s.push(":");continue}else if(u==="%"){if(!a(n,s,r))break;a=qf}else{n.push(u);continue}}if(n.length)if(a===qf)r.zone=n.join("");else if(o)s.push(n.join(""));else s.push(pc(n));return r.address=s.join(""),r}function Mf(e){if(kw(e,":")<2)return{host:e,isIPV6:!1};let t=Ew(e);if(!t.error){let{address:r,address:s}=t;if(t.zone)r+="%"+t.zone,s+="%25"+t.zone;return{host:r,isIPV6:!0,escapedHost:s}}else return{host:e,isIPV6:!1}}function kw(e,t){let r=0;for(let s=0;s<e.length;s++)if(e[s]===t)r++;return r}function Rw(e){let t=e,r=[],s=-1,n=0;while(n=t.length){if(n===1)if(t===".")break;else if(t==="/"){r.push("/");break}else{r.push(t);break}else if(n===2){if(t[0]==="."){if(t[1]===".")break;else if(t[1]==="/"){t=t.slice(2);continue}}else if(t[0]==="/"){if(t[1]==="."||t[1]==="/"){r.push("/");break}}}else if(n===3){if(t==="/.."){if(r.length!==0)r.pop();r.push("/");break}}if(t[0]==="."){if(t[1]==="."){if(t[2]==="/"){t=t.slice(3);continue}}else if(t[1]==="/"){t=t.slice(2);continue}}else if(t[0]==="/"){if(t[1]==="."){if(t[2]==="/"){t=t.slice(2);continue}else if(t[2]==="."){if(t[3]==="/"){if(t=t.slice(3),r.length!==0)r.pop();continue}}}}if((s=t.indexOf("/",1))===-1){r.push(t);break}else r.push(t.slice(0,s)),t=t.slice(s)}return r.join("")}function Iw(e,t){let r=t!==!0?escape:unescape;if(e.scheme!==void 0)e.scheme=r(e.scheme);if(e.userinfo!==void 0)e.userinfo=r(e.userinfo);if(e.host!==void 0)e.host=r(e.host);if(e.path!==void 0)e.path=r(e.path);if(e.query!==void 0)e.query=r(e.query);if(e.fragment!==void 0)e.fragment=r(e.fragment);return e}function Ow(e){let t=[];if(e.userinfo!==void 0)t.push(e.userinfo),t.push("@");if(e.host!==void 0){let r=unescape(e.host);if(!Df(r)){let s=Mf(r);if(s.isIPV6===!0)r=`[${s.escapedHost}]`;else r=e.host}t.push(r)}if(typeof e.port==="number"||typeof e.port==="string")t.push(":"),t.push(String(e.port));return t.length?t.join(""):void 0}Vf.exports={nonSimpleDomain:Sw,recomposeAuthority:Ow,normalizeComponentEncoding:Iw,removeDotSegments:Rw,isIPv4:Df,isUUID:bw,normalizeIPv6:Mf,stringArrayToHexStripped:pc}});var Hf=b(function(wI,Lf){var{isUUID:Tw}=mc(),xw=/([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu,Aw=["http","https","ws","wss","urn","urn:uuid"];function jw(e){return Aw.indexOf(e)!==-1}function hc(e){if(e.secure===!0)return!0;else if(e.secure===!1)return!1;else if(e.scheme)return e.scheme.length===3&&(e.scheme[0]==="w"||e.scheme[0]==="W")&&(e.scheme[1]==="s"||e.scheme[1]==="S")&&(e.scheme[2]==="s"||e.scheme[2]==="S");else return!1}function Uf(e){if(!e.host)e.error=e.error||"HTTP URIs must have a host.";return e}function zf(e){let t=String(e.scheme).toLowerCase()==="https";if(e.port===(t?443:80)||e.port==="")e.port=void 0;if(!e.path)e.path="/";return e}function Cw(e){return e.secure=hc(e),e.resourceName=(e.path||"/")+(e.query?"?"+e.query:""),e.path=void 0,e.query=void 0,e}function Nw(e){if(e.port===(hc(e)?443:80)||e.port==="")e.port=void 0;if(typeof e.secure==="boolean")e.scheme=e.secure?"wss":"ws",e.secure=void 0;if(e.resourceName){let[t,r]=e.resourceName.split("?");e.path=t&&t!=="/"?t:void 0,e.query=r,e.resourceName=void 0}return e.fragment=void 0,e}function qw(e,t){if(!e.path)return e.error="URN can not be parsed",e;let r=e.path.match(xw);if(r){let s=t.scheme||e.scheme||"urn";e.nid=r[1].toLowerCase(),e.nss=r[2];let n=`${s}:${t.nid||e.nid}`,i=yc(n);if(e.path=void 0,i)e=i.parse(e,t)}else e.error=e.error||"URN can not be parsed.";return e}function Dw(e,t){if(e.nid===void 0)throw Error("URN without nid cannot be serialized");let r=t.scheme||e.scheme||"urn",s=e.nid.toLowerCase(),n=`${r}:${t.nid||s}`,i=yc(n);if(i)e=i.serialize(e,t);let o=e,a=e.nss;return o.path=`${s||t.nid}:${a}`,t.skipEscape=!0,o}function Mw(e,t){let r=e;if(r.uuid=r.nss,r.nss=void 0,!t.tolerant&&(!r.uuid||!Tw(r.uuid)))r.error=r.error||"UUID is not valid.";return r}function Vw(e){let t=e;return t.nss=(e.uuid||"").toLowerCase(),t}var Ff={scheme:"http",domainHost:!0,parse:Uf,serialize:zf},Uw={scheme:"https",domainHost:Ff.domainHost,parse:Uf,serialize:zf},eo={scheme:"ws",domainHost:!0,parse:Cw,serialize:Nw},zw={scheme:"wss",domainHost:eo.domainHost,parse:eo.parse,serialize:eo.serialize},Fw={scheme:"urn",parse:qw,serialize:Dw,skipNormalize:!0},Lw={scheme:"urn:uuid",parse:Mw,serialize:Vw,skipNormalize:!0},to={http:Ff,https:Uw,ws:eo,wss:zw,urn:Fw,"urn:uuid":Lw};Object.setPrototypeOf(to,null);function yc(e){return e&&(to[e]||to[e.toLowerCase()])||void 0}Lf.exports={wsIsSecure:hc,SCHEMES:to,isValidSchemeName:jw,getSchemeHandler:yc}});var Jf=b(function(bI,so){var{normalizeIPv6:Hw,removeDotSegments:ii,recomposeAuthority:Kw,normalizeComponentEncoding:ro,isIPv4:Gw,nonSimpleDomain:Jw}=mc(),{SCHEMES:Ww,getSchemeHandler:Kf}=Hf();function Qw(e,t){if(typeof e==="string")e=Jt(Rr(e,t),t);else if(typeof e==="object")e=Rr(Jt(e,t),t);return e}function Bw(e,t,r){let s=r?Object.assign({scheme:"null"},r):{scheme:"null"},n=Gf(Rr(e,s),Rr(t,s),s,!0);return s.skipEscape=!0,Jt(n,s)}function Gf(e,t,r,s){let n={};if(!s)e=Rr(Jt(e,r),r),t=Rr(Jt(t,r),r);if(r=r||{},!r.tolerant&&t.scheme)n.scheme=t.scheme,n.userinfo=t.userinfo,n.host=t.host,n.port=t.port,n.path=ii(t.path||""),n.query=t.query;else{if(t.userinfo!==void 0||t.host!==void 0||t.port!==void 0)n.userinfo=t.userinfo,n.host=t.host,n.port=t.port,n.path=ii(t.path||""),n.query=t.query;else{if(!t.path)if(n.path=e.path,t.query!==void 0)n.query=t.query;else n.query=e.query;else{if(t.path[0]==="/")n.path=ii(t.path);else{if((e.userinfo!==void 0||e.host!==void 0||e.port!==void 0)&&!e.path)n.path="/"+t.path;else if(!e.path)n.path=t.path;else n.path=e.path.slice(0,e.path.lastIndexOf("/")+1)+t.path;n.path=ii(n.path)}n.query=t.query}n.userinfo=e.userinfo,n.host=e.host,n.port=e.port}n.scheme=e.scheme}return n.fragment=t.fragment,n}function Xw(e,t,r){if(typeof e==="string")e=unescape(e),e=Jt(ro(Rr(e,r),!0),{...r,skipEscape:!0});else if(typeof e==="object")e=Jt(ro(e,!0),{...r,skipEscape:!0});if(typeof t==="string")t=unescape(t),t=Jt(ro(Rr(t,r),!0),{...r,skipEscape:!0});else if(typeof t==="object")t=Jt(ro(t,!0),{...r,skipEscape:!0});return e.toLowerCase()===t.toLowerCase()}function Jt(e,t){let r={host:e.host,scheme:e.scheme,userinfo:e.userinfo,port:e.port,path:e.path,query:e.query,nid:e.nid,nss:e.nss,uuid:e.uuid,fragment:e.fragment,reference:e.reference,resourceName:e.resourceName,secure:e.secure,error:""},s=Object.assign({},t),n=[],i=Kf(s.scheme||r.scheme);if(i&&i.serialize)i.serialize(r,s);if(r.path!==void 0)if(!s.skipEscape){if(r.path=escape(r.path),r.scheme!==void 0)r.path=r.path.split("%3A").join(":")}else r.path=unescape(r.path);if(s.reference!=="suffix"&&r.scheme)n.push(r.scheme,":");let o=Kw(r);if(o!==void 0){if(s.reference!=="suffix")n.push("//");if(n.push(o),r.path&&r.path[0]!=="/")n.push("/")}if(r.path!==void 0){let a=r.path;if(!s.absolutePath&&(!i||!i.absolutePath))a=ii(a);if(o===void 0&&a[0]==="/"&&a[1]==="/")a="/%2F"+a.slice(2);n.push(a)}if(r.query!==void 0)n.push("?",r.query);if(r.fragment!==void 0)n.push("#",r.fragment);return n.join("")}var Zw=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;function Rr(e,t){let r=Object.assign({},t),s={scheme:void 0,userinfo:void 0,host:"",port:void 0,path:"",query:void 0,fragment:void 0},n=!1;if(r.reference==="suffix")if(r.scheme)e=r.scheme+":"+e;else e="//"+e;let i=e.match(Zw);if(i){if(s.scheme=i[1],s.userinfo=i[3],s.host=i[4],s.port=parseInt(i[5],10),s.path=i[6]||"",s.query=i[7],s.fragment=i[8],isNaN(s.port))s.port=i[5];if(s.host)if(Gw(s.host)===!1){let c=Hw(s.host);s.host=c.host.toLowerCase(),n=c.isIPV6}else n=!0;if(s.scheme===void 0&&s.userinfo===void 0&&s.host===void 0&&s.port===void 0&&s.query===void 0&&!s.path)s.reference="same-document";else if(s.scheme===void 0)s.reference="relative";else if(s.fragment===void 0)s.reference="absolute";else s.reference="uri";if(r.reference&&r.reference!=="suffix"&&r.reference!==s.reference)s.error=s.error||"URI is not a "+r.reference+" reference.";let o=Kf(r.scheme||s.scheme);if(!r.unicodeSupport&&(!o||!o.unicodeSupport)){if(s.host&&(r.domainHost||o&&o.domainHost)&&n===!1&&Jw(s.host))try{s.host=URL.domainToASCII(s.host.toLowerCase())}catch(a){s.error=s.error||"Host's domain name can not be converted to ASCII: "+a}}if(!o||o&&!o.skipNormalize){if(e.indexOf("%")!==-1){if(s.scheme!==void 0)s.scheme=unescape(s.scheme);if(s.host!==void 0)s.host=unescape(s.host)}if(s.path)s.path=escape(unescape(s.path));if(s.fragment)s.fragment=encodeURI(decodeURIComponent(s.fragment))}if(o&&o.parse)o.parse(s,r)}else s.error=s.error||"URI can not be parsed.";return s}var gc={SCHEMES:Ww,normalize:Qw,resolve:Bw,resolveComponent:Gf,equal:Xw,serialize:Jt,parse:Rr};so.exports=gc;so.exports.default=gc;so.exports.fastUri=gc});var Qf=b(function(vc){Object.defineProperty(vc,"__esModule",{value:!0});var Wf=Jf();Wf.code='require("ajv/dist/runtime/uri").default';vc.default=Wf});var ip=b(function(Xe){Object.defineProperty(Xe,"__esModule",{value:!0});Xe.CodeGen=Xe.Name=Xe.nil=Xe.stringify=Xe.str=Xe._=Xe.KeywordCxt=void 0;var Yw=ri();Object.defineProperty(Xe,"KeywordCxt",{enumerable:!0,get:function(){return Yw.KeywordCxt}});var tn=ee();Object.defineProperty(Xe,"_",{enumerable:!0,get:function(){return tn._}});Object.defineProperty(Xe,"str",{enumerable:!0,get:function(){return tn.str}});Object.defineProperty(Xe,"stringify",{enumerable:!0,get:function(){return tn.stringify}});Object.defineProperty(Xe,"nil",{enumerable:!0,get:function(){return tn.nil}});Object.defineProperty(Xe,"Name",{enumerable:!0,get:function(){return tn.Name}});Object.defineProperty(Xe,"CodeGen",{enumerable:!0,get:function(){return tn.CodeGen}});var e0=Bi(),ep=si(),tp=Za(),Wt=Yi(),rp=ee(),Qt=ti(),zr=Yn(),en=ne(),Bf=Nf(),t0=Qf(),sp=(e,t)=>new RegExp(e,t);sp.code="new RegExp";var r0=["removeAdditional","useDefaults","coerceTypes"],s0=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),n0={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},i0={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},Xf=200;function o0(e){var t,r,s,n,i,o,a,c,u,l,d,v,m,h,p,_,w,I,O,D,S,M,Y,Q,me;let re=e.strict,Le=(t=e.code)===null||t===void 0?void 0:t.optimize,Ee=Le===!0||Le===void 0?1:Le||0,We=(s=(r=e.code)===null||r===void 0?void 0:r.regExp)!==null&&s!==void 0?s:sp,it=(n=e.uriResolver)!==null&&n!==void 0?n:t0.default;return{strictSchema:(o=(i=e.strictSchema)!==null&&i!==void 0?i:re)!==null&&o!==void 0?o:!0,strictNumbers:(c=(a=e.strictNumbers)!==null&&a!==void 0?a:re)!==null&&c!==void 0?c:!0,strictTypes:(l=(u=e.strictTypes)!==null&&u!==void 0?u:re)!==null&&l!==void 0?l:"log",strictTuples:(v=(d=e.strictTuples)!==null&&d!==void 0?d:re)!==null&&v!==void 0?v:"log",strictRequired:(h=(m=e.strictRequired)!==null&&m!==void 0?m:re)!==null&&h!==void 0?h:!1,code:e.code?{...e.code,optimize:Ee,regExp:We}:{optimize:Ee,regExp:We},loopRequired:(p=e.loopRequired)!==null&&p!==void 0?p:Xf,loopEnum:(_=e.loopEnum)!==null&&_!==void 0?_:Xf,meta:(w=e.meta)!==null&&w!==void 0?w:!0,messages:(I=e.messages)!==null&&I!==void 0?I:!0,inlineRefs:(O=e.inlineRefs)!==null&&O!==void 0?O:!0,schemaId:(D=e.schemaId)!==null&&D!==void 0?D:"$id",addUsedSchema:(S=e.addUsedSchema)!==null&&S!==void 0?S:!0,validateSchema:(M=e.validateSchema)!==null&&M!==void 0?M:!0,validateFormats:(Y=e.validateFormats)!==null&&Y!==void 0?Y:!0,unicodeRegExp:(Q=e.unicodeRegExp)!==null&&Q!==void 0?Q:!0,int32range:(me=e.int32range)!==null&&me!==void 0?me:!0,uriResolver:it}}class no{constructor(e={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,e=this.opts={...e,...o0(e)};let{es5:t,lines:r}=this.opts.code;this.scope=new rp.ValueScope({scope:{},prefixes:s0,es5:t,lines:r}),this.logger=f0(e.logger);let s=e.validateFormats;if(e.validateFormats=!1,this.RULES=tp.getRules(),Zf.call(this,n0,e,"NOT SUPPORTED"),Zf.call(this,i0,e,"DEPRECATED","warn"),this._metaOpts=l0.call(this),e.formats)c0.call(this);if(this._addVocabularies(),this._addDefaultMetaSchema(),e.keywords)u0.call(this,e.keywords);if(typeof e.meta=="object")this.addMetaSchema(e.meta);a0.call(this),e.validateFormats=s}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){let{$data:e,meta:t,schemaId:r}=this.opts,s=Bf;if(r==="id")s={...Bf},s.id=s.$id,delete s.$id;if(t&&e)this.addMetaSchema(s,s[r],!1)}defaultMeta(){let{meta:e,schemaId:t}=this.opts;return this.opts.defaultMeta=typeof e=="object"?e[t]||e:void 0}validate(e,t){let r;if(typeof e=="string"){if(r=this.getSchema(e),!r)throw Error(`no schema with key or ref "${e}"`)}else r=this.compile(e);let s=r(t);if(!("$async"in r))this.errors=r.errors;return s}compile(e,t){let r=this._addSchema(e,t);return r.validate||this._compileSchemaEnv(r)}compileAsync(e,t){if(typeof this.opts.loadSchema!="function")throw Error("options.loadSchema should be a function");let{loadSchema:r}=this.opts;return s.call(this,e,t);async function s(u,l){await n.call(this,u.$schema);let d=this._addSchema(u,l);return d.validate||i.call(this,d)}async function n(u){if(u&&!this.getSchema(u))await s.call(this,{$ref:u},!0)}async function i(u){try{return this._compileSchemaEnv(u)}catch(l){if(!(l instanceof ep.default))throw l;return o.call(this,l),await a.call(this,l.missingSchema),i.call(this,u)}}function o({missingSchema:u,missingRef:l}){if(this.refs[u])throw Error(`AnySchema ${u} is loaded but ${l} cannot be resolved`)}async function a(u){let l=await c.call(this,u);if(!this.refs[u])await n.call(this,l.$schema);if(!this.refs[u])this.addSchema(l,u,t)}async function c(u){let l=this._loading[u];if(l)return l;try{return await(this._loading[u]=r(u))}finally{delete this._loading[u]}}}addSchema(e,t,r,s=this.opts.validateSchema){if(Array.isArray(e)){for(let i of e)this.addSchema(i,void 0,r,s);return this}let n;if(typeof e==="object"){let{schemaId:i}=this.opts;if(n=e[i],n!==void 0&&typeof n!="string")throw Error(`schema ${i} must be string`)}return t=Qt.normalizeId(t||n),this._checkUnique(t),this.schemas[t]=this._addSchema(e,r,t,s,!0),this}addMetaSchema(e,t,r=this.opts.validateSchema){return this.addSchema(e,t,!0,r),this}validateSchema(e,t){if(typeof e=="boolean")return!0;let r;if(r=e.$schema,r!==void 0&&typeof r!="string")throw Error("$schema must be a string");if(r=r||this.opts.defaultMeta||this.defaultMeta(),!r)return this.logger.warn("meta-schema not available"),this.errors=null,!0;let s=this.validate(r,e);if(!s&&t){let n="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(n);else throw Error(n)}return s}getSchema(e){let t;while(typeof(t=Yf.call(this,e))=="string")e=t;if(t===void 0){let{schemaId:r}=this.opts,s=new Wt.SchemaEnv({schema:{},schemaId:r});if(t=Wt.resolveSchema.call(this,s,e),!t)return;this.refs[e]=t}return t.validate||this._compileSchemaEnv(t)}removeSchema(e){if(e instanceof RegExp)return this._removeAllSchemas(this.schemas,e),this._removeAllSchemas(this.refs,e),this;switch(typeof e){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{let t=Yf.call(this,e);if(typeof t=="object")this._cache.delete(t.schema);return delete this.schemas[e],delete this.refs[e],this}case"object":{let t=e;this._cache.delete(t);let r=e[this.opts.schemaId];if(r)r=Qt.normalizeId(r),delete this.schemas[r],delete this.refs[r];return this}default:throw Error("ajv.removeSchema: invalid parameter")}}addVocabulary(e){for(let t of e)this.addKeyword(t);return this}addKeyword(e,t){let r;if(typeof e=="string"){if(r=e,typeof t=="object")this.logger.warn("these parameters are deprecated, see docs for addKeyword"),t.keyword=r}else if(typeof e=="object"&&t===void 0){if(t=e,r=t.keyword,Array.isArray(r)&&!r.length)throw Error("addKeywords: keyword must be string or non-empty array")}else throw Error("invalid addKeywords parameters");if(m0.call(this,r,t),!t)return en.eachItem(r,(n)=>$c.call(this,n)),this;y0.call(this,t);let s={...t,type:zr.getJSONTypes(t.type),schemaType:zr.getJSONTypes(t.schemaType)};return en.eachItem(r,s.type.length===0?(n)=>$c.call(this,n,s):(n)=>s.type.forEach((i)=>$c.call(this,n,s,i))),this}getKeyword(e){let t=this.RULES.all[e];return typeof t=="object"?t.definition:!!t}removeKeyword(e){let{RULES:t}=this;delete t.keywords[e],delete t.all[e];for(let r of t.rules){let s=r.rules.findIndex((n)=>n.keyword===e);if(s>=0)r.rules.splice(s,1)}return this}addFormat(e,t){if(typeof t=="string")t=new RegExp(t);return this.formats[e]=t,this}errorsText(e=this.errors,{separator:t=", ",dataVar:r="data"}={}){if(!e||e.length===0)return"No errors";return e.map((s)=>`${r}${s.instancePath} ${s.message}`).reduce((s,n)=>s+t+n)}$dataMetaSchema(e,t){let r=this.RULES.all;e=JSON.parse(JSON.stringify(e));for(let s of t){let n=s.split("/").slice(1),i=e;for(let o of n)i=i[o];for(let o in r){let a=r[o];if(typeof a!="object")continue;let{$data:c}=a.definition,u=i[o];if(c&&u)i[o]=np(u)}}return e}_removeAllSchemas(e,t){for(let r in e){let s=e[r];if(!t||t.test(r)){if(typeof s=="string")delete e[r];else if(s&&!s.meta)this._cache.delete(s.schema),delete e[r]}}}_addSchema(e,t,r,s=this.opts.validateSchema,n=this.opts.addUsedSchema){let i,{schemaId:o}=this.opts;if(typeof e=="object")i=e[o];else if(this.opts.jtd)throw Error("schema must be object");else if(typeof e!="boolean")throw Error("schema must be object or boolean");let a=this._cache.get(e);if(a!==void 0)return a;r=Qt.normalizeId(i||r);let c=Qt.getSchemaRefs.call(this,e,r);if(a=new Wt.SchemaEnv({schema:e,schemaId:o,meta:t,baseId:r,localRefs:c}),this._cache.set(a.schema,a),n&&!r.startsWith("#")){if(r)this._checkUnique(r);this.refs[r]=a}if(s)this.validateSchema(e,!0);return a}_checkUnique(e){if(this.schemas[e]||this.refs[e])throw Error(`schema with key or id "${e}" already exists`)}_compileSchemaEnv(e){if(e.meta)this._compileMetaSchema(e);else Wt.compileSchema.call(this,e);if(!e.validate)throw Error("ajv implementation error");return e.validate}_compileMetaSchema(e){let t=this.opts;this.opts=this._metaOpts;try{Wt.compileSchema.call(this,e)}finally{this.opts=t}}}no.ValidationError=e0.default;no.MissingRefError=ep.default;Xe.default=no;function Zf(e,t,r,s="error"){for(let n in e){let i=n;if(i in t)this.logger[s](`${r}: option ${n}. ${e[i]}`)}}function Yf(e){return e=Qt.normalizeId(e),this.schemas[e]||this.refs[e]}function a0(){let e=this.opts.schemas;if(!e)return;if(Array.isArray(e))this.addSchema(e);else for(let t in e)this.addSchema(e[t],t)}function c0(){for(let e in this.opts.formats){let t=this.opts.formats[e];if(t)this.addFormat(e,t)}}function u0(e){if(Array.isArray(e)){this.addVocabulary(e);return}this.logger.warn("keywords option as map is deprecated, pass array");for(let t in e){let r=e[t];if(!r.keyword)r.keyword=t;this.addKeyword(r)}}function l0(){let e={...this.opts};for(let t of r0)delete e[t];return e}var d0={log(){},warn(){},error(){}};function f0(e){if(e===!1)return d0;if(e===void 0)return console;if(e.log&&e.warn&&e.error)return e;throw Error("logger must implement log, warn and error methods")}var p0=/^[a-z_$][a-z0-9_$:-]*$/i;function m0(e,t){let{RULES:r}=this;if(en.eachItem(e,(s)=>{if(r.keywords[s])throw Error(`Keyword ${s} is already defined`);if(!p0.test(s))throw Error(`Keyword ${s} has invalid name`)}),!t)return;if(t.$data&&!(("code"in t)||("validate"in t)))throw Error('$data keyword must have "code" or "validate" function')}function $c(e,t,r){var s;let n=t===null||t===void 0?void 0:t.post;if(r&&n)throw Error('keyword with "post" flag cannot have "type"');let{RULES:i}=this,o=n?i.post:i.rules.find(({type:c})=>c===r);if(!o)o={type:r,rules:[]},i.rules.push(o);if(i.keywords[e]=!0,!t)return;let a={keyword:e,definition:{...t,type:zr.getJSONTypes(t.type),schemaType:zr.getJSONTypes(t.schemaType)}};if(t.before)h0.call(this,o,a,t.before);else o.rules.push(a);i.all[e]=a,(s=t.implements)===null||s===void 0||s.forEach((c)=>this.addKeyword(c))}function h0(e,t,r){let s=e.rules.findIndex((n)=>n.keyword===r);if(s>=0)e.rules.splice(s,0,t);else e.rules.push(t),this.logger.warn(`rule ${r} is not defined`)}function y0(e){let{metaSchema:t}=e;if(t===void 0)return;if(e.$data&&this.opts.$data)t=np(t);e.validateSchema=this.compile(t,!0)}var g0={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function np(e){return{anyOf:[e,g0]}}});var op=b(function(_c){Object.defineProperty(_c,"__esModule",{value:!0});var v0={keyword:"id",code(){throw Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};_c.default=v0});var cp=b(function(Rs){Object.defineProperty(Rs,"__esModule",{value:!0});Rs.callRef=Rs.getValidate=void 0;var $0=si(),oo=kt(),we=ee(),rn=kr(),ao=Yi(),Fr=ne(),_0={keyword:"$ref",schemaType:"string",code(e){let{gen:t,schema:r,it:s}=e,{baseId:n,schemaEnv:i,validateName:o,opts:a,self:c}=s,{root:u}=i;if((r==="#"||r==="#/")&&n===u.baseId)return d();let l=ao.resolveRef.call(c,u,n,r);if(l===void 0)throw new $0.default(s.opts.uriResolver,n,r);if(l instanceof ao.SchemaEnv)return v(l);return m(l);function d(){if(i===u)return io(e,o,i,i.$async);let h=t.scopeValue("root",{ref:u});return io(e,we._`${h}.validate`,u,u.$async)}function v(h){let p=ap(e,h);io(e,p,h,h.$async)}function m(h){let p=t.scopeValue("schema",a.code.source===!0?{ref:h,code:we.stringify(h)}:{ref:h}),_=t.name("valid"),w=e.subschema({schema:h,dataTypes:[],schemaPath:we.nil,topSchemaRef:p,errSchemaPath:r},_);e.mergeEvaluated(w),e.ok(_)}}};function ap(e,t){let{gen:r}=e;return t.validate?r.scopeValue("validate",{ref:t.validate}):we._`${r.scopeValue("wrapper",{ref:t})}.validate`}Rs.getValidate=ap;function io(e,t,r,s){let{gen:n,it:i}=e,{allErrors:o,schemaEnv:a,opts:c}=i,u=c.passContext?rn.default.this:we.nil;if(s)l();else d();function l(){if(!a.$async)throw Error("async schema referenced by sync schema");let h=n.let("valid");n.try(()=>{if(n.code(we._`await ${oo.callValidateCode(e,t,u)}`),m(t),!o)n.assign(h,!0)},(p)=>{if(n.if(we._`!(${p} instanceof ${i.ValidationError})`,()=>n.throw(p)),v(p),!o)n.assign(h,!1)}),e.ok(h)}function d(){e.result(oo.callValidateCode(e,t,u),()=>m(t),()=>v(t))}function v(h){let p=we._`${h}.errors`;n.assign(rn.default.vErrors,we._`${rn.default.vErrors} === null ? ${p} : ${rn.default.vErrors}.concat(${p})`),n.assign(rn.default.errors,we._`${rn.default.vErrors}.length`)}function m(h){var p;if(!i.opts.unevaluated)return;let _=(p=r===null||r===void 0?void 0:r.validate)===null||p===void 0?void 0:p.evaluated;if(i.props!==!0)if(_&&!_.dynamicProps){if(_.props!==void 0)i.props=Fr.mergeEvaluated.props(n,_.props,i.props)}else{let w=n.var("props",we._`${h}.evaluated.props`);i.props=Fr.mergeEvaluated.props(n,w,i.props,we.Name)}if(i.items!==!0)if(_&&!_.dynamicItems){if(_.items!==void 0)i.items=Fr.mergeEvaluated.items(n,_.items,i.items)}else{let w=n.var("items",we._`${h}.evaluated.items`);i.items=Fr.mergeEvaluated.items(n,w,i.items,we.Name)}}}Rs.callRef=io;Rs.default=_0});var up=b(function(wc){Object.defineProperty(wc,"__esModule",{value:!0});var w0=op(),b0=cp(),S0=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",w0.default,b0.default];wc.default=S0});var lp=b(function(bc){Object.defineProperty(bc,"__esModule",{value:!0});var Hr=ee(),Lr=Hr.operators,co={maximum:{okStr:"<=",ok:Lr.LTE,fail:Lr.GT},minimum:{okStr:">=",ok:Lr.GTE,fail:Lr.LT},exclusiveMaximum:{okStr:"<",ok:Lr.LT,fail:Lr.GTE},exclusiveMinimum:{okStr:">",ok:Lr.GT,fail:Lr.LTE}},P0={message:({keyword:e,schemaCode:t})=>Hr.str`must be ${co[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>Hr._`{comparison: ${co[e].okStr}, limit: ${t}}`},E0={keyword:Object.keys(co),type:"number",schemaType:"number",$data:!0,error:P0,code(e){let{keyword:t,data:r,schemaCode:s}=e;e.fail$data(Hr._`${r} ${co[t].fail} ${s} || isNaN(${r})`)}};bc.default=E0});var dp=b(function(Sc){Object.defineProperty(Sc,"__esModule",{value:!0});var Bt=ee(),k0={message:({schemaCode:e})=>Bt.str`must be multiple of ${e}`,params:({schemaCode:e})=>Bt._`{multipleOf: ${e}}`},R0={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:k0,code(e){let{gen:t,data:r,schemaCode:s,it:n}=e,i=n.opts.multipleOfPrecision,o=t.let("res"),a=i?Bt._`Math.abs(Math.round(${o}) - ${o}) > 1e-${i}`:Bt._`${o} !== parseInt(${o})`;e.fail$data(Bt._`(${s} === 0 || (${o} = ${r}/${s}, ${a}))`)}};Sc.default=R0});var pp=b(function(Pc){Object.defineProperty(Pc,"__esModule",{value:!0});function fp(e){let t=e.length,r=0,s=0,n;while(s<t)if(r++,n=e.charCodeAt(s++),n>=55296&&n<=56319&&s<t){if(n=e.charCodeAt(s),(n&64512)===56320)s++}return r}Pc.default=fp;fp.code='require("ajv/dist/runtime/ucs2length").default'});var hp=b(function(Ec){Object.defineProperty(Ec,"__esModule",{value:!0});var pt=ee(),mp=ne(),I0=pp(),O0={message({keyword:e,schemaCode:t}){return pt.str`must NOT have ${e==="maxLength"?"more":"fewer"} than ${t} characters`},params:({schemaCode:e})=>pt._`{limit: ${e}}`},T0={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:O0,code(e){let{keyword:t,data:r,schemaCode:s,it:n}=e,i=t==="maxLength"?pt.operators.GT:pt.operators.LT,o=n.opts.unicode===!1?pt._`${r}.length`:pt._`${mp.useFunc(e.gen,I0.default)}(${r})`;e.fail$data(pt._`${o} ${i} ${s}`)}};Ec.default=T0});var vp=b(function(kc){Object.defineProperty(kc,"__esModule",{value:!0});var yp=kt(),gp=ne(),It=ee(),x0={message:({schemaCode:e})=>It.str`must match pattern "${e}"`,params:({schemaCode:e})=>It._`{pattern: ${e}}`},A0={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:x0,code(e){let{gen:t,data:r,$data:s,schema:n,schemaCode:i,it:o}=e,a=o.opts.unicodeRegExp?"u":"";if(s){let{regExp:c}=o.opts.code,u=c.code==="new RegExp"?It._`new RegExp`:gp.useFunc(t,c),l=t.let("valid");t.try(()=>t.assign(l,It._`${u}(${i}, ${a}).test(${r})`),()=>t.assign(l,!1)),e.fail$data(It._`!${l}`)}else{let c=yp.usePattern(e,n);e.fail$data(It._`!${c}.test(${r})`)}}};kc.default=A0});var $p=b(function(Rc){Object.defineProperty(Rc,"__esModule",{value:!0});var Xt=ee(),j0={message({keyword:e,schemaCode:t}){return Xt.str`must NOT have ${e==="maxProperties"?"more":"fewer"} than ${t} properties`},params:({schemaCode:e})=>Xt._`{limit: ${e}}`},C0={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:j0,code(e){let{keyword:t,data:r,schemaCode:s}=e,n=t==="maxProperties"?Xt.operators.GT:Xt.operators.LT;e.fail$data(Xt._`Object.keys(${r}).length ${n} ${s}`)}};Rc.default=C0});var wp=b(function(Ic){Object.defineProperty(Ic,"__esModule",{value:!0});var Zt=kt(),Yt=ee(),_p=ne(),N0={message:({params:{missingProperty:e}})=>Yt.str`must have required property '${e}'`,params:({params:{missingProperty:e}})=>Yt._`{missingProperty: ${e}}`},q0={keyword:"required",type:"object",schemaType:"array",$data:!0,error:N0,code(e){let{gen:t,schema:r,schemaCode:s,data:n,$data:i,it:o}=e,{opts:a}=o;if(!i&&r.length===0)return;let c=r.length>=a.loopRequired;if(o.allErrors)u();else l();if(a.strictRequired){let m=e.parentSchema.properties,{definedProperties:h}=e.it;for(let p of r)if((m===null||m===void 0?void 0:m[p])===void 0&&!h.has(p)){let _=o.schemaEnv.baseId+o.errSchemaPath,w=`required property "${p}" is not defined at "${_}" (strictRequired)`;_p.checkStrictMode(o,w,o.opts.strictRequired)}}function u(){if(c||i)e.block$data(Yt.nil,d);else for(let m of r)Zt.checkReportMissingProp(e,m)}function l(){let m=t.let("missing");if(c||i){let h=t.let("valid",!0);e.block$data(h,()=>v(m,h)),e.ok(h)}else t.if(Zt.checkMissingProp(e,r,m)),Zt.reportMissingProp(e,m),t.else()}function d(){t.forOf("prop",s,(m)=>{e.setParams({missingProperty:m}),t.if(Zt.noPropertyInData(t,n,m,a.ownProperties),()=>e.error())})}function v(m,h){e.setParams({missingProperty:m}),t.forOf(m,s,()=>{t.assign(h,Zt.propertyInData(t,n,m,a.ownProperties)),t.if(Yt.not(h),()=>{e.error(),t.break()})},Yt.nil)}}};Ic.default=q0});var bp=b(function(Oc){Object.defineProperty(Oc,"__esModule",{value:!0});var er=ee(),D0={message({keyword:e,schemaCode:t}){return er.str`must NOT have ${e==="maxItems"?"more":"fewer"} than ${t} items`},params:({schemaCode:e})=>er._`{limit: ${e}}`},M0={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:D0,code(e){let{keyword:t,data:r,schemaCode:s}=e,n=t==="maxItems"?er.operators.GT:er.operators.LT;e.fail$data(er._`${r}.length ${n} ${s}`)}};Oc.default=M0});var uo=b(function(Tc){Object.defineProperty(Tc,"__esModule",{value:!0});var Sp=ei();Sp.code='require("ajv/dist/runtime/equal").default';Tc.default=Sp});var Ep=b(function(xc){Object.defineProperty(xc,"__esModule",{value:!0});var sn=Yn(),ie=ee(),Pp=ne(),V0=uo(),U0={message:({params:{i:e,j:t}})=>ie.str`must NOT have duplicate items (items ## ${t} and ${e} are identical)`,params:({params:{i:e,j:t}})=>ie._`{i: ${e}, j: ${t}}`},z0={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:U0,code(e){let{gen:t,data:r,$data:s,schema:n,parentSchema:i,schemaCode:o,it:a}=e;if(!s&&!n)return;let c=t.let("valid"),u=i.items?sn.getSchemaTypes(i.items):[];e.block$data(c,l,ie._`${o} === false`),e.ok(c);function l(){let h=t.let("i",ie._`${r}.length`),p=t.let("j");e.setParams({i:h,j:p}),t.assign(c,!0),t.if(ie._`${h} > 1`,()=>(d()?v:m)(h,p))}function d(){return u.length>0&&!u.some((h)=>h==="object"||h==="array")}function v(h,p){let _=t.name("item"),w=sn.checkDataTypes(u,_,a.opts.strictNumbers,sn.DataType.Wrong),I=t.const("indices",ie._`{}`);t.for(ie._`;${h}--;`,()=>{if(t.let(_,ie._`${r}[${h}]`),t.if(w,ie._`continue`),u.length>1)t.if(ie._`typeof ${_} == "string"`,ie._`${_} += "_"`);t.if(ie._`typeof ${I}[${_}] == "number"`,()=>{t.assign(p,ie._`${I}[${_}]`),e.error(),t.assign(c,!1).break()}).code(ie._`${I}[${_}] = ${h}`)})}function m(h,p){let _=Pp.useFunc(t,V0.default),w=t.name("outer");t.label(w).for(ie._`;${h}--;`,()=>t.for(ie._`${p} = ${h}; ${p}--;`,()=>t.if(ie._`${_}(${r}[${h}], ${r}[${p}])`,()=>{e.error(),t.assign(c,!1).break(w)})))}}};xc.default=z0});var Rp=b(function(Ac){Object.defineProperty(Ac,"__esModule",{value:!0});var nn=ee(),kp=ne(),F0=uo(),L0={message:"must be equal to constant",params:({schemaCode:e})=>nn._`{allowedValue: ${e}}`},H0={keyword:"const",$data:!0,error:L0,code(e){let{gen:t,data:r,$data:s,schemaCode:n,schema:i}=e;if(s||i&&typeof i=="object")e.fail$data(nn._`!${kp.useFunc(t,F0.default)}(${r}, ${n})`);else e.fail(nn._`${i} !== ${r}`)}};Ac.default=H0});var Op=b(function(jc){Object.defineProperty(jc,"__esModule",{value:!0});var tr=ee(),Ip=ne(),K0=uo(),G0={message:"must be equal to one of the allowed values",params:({schemaCode:e})=>tr._`{allowedValues: ${e}}`},J0={keyword:"enum",schemaType:"array",$data:!0,error:G0,code(e){let{gen:t,data:r,$data:s,schema:n,schemaCode:i,it:o}=e;if(!s&&n.length===0)throw Error("enum must have non-empty array");let a=n.length>=o.opts.loopEnum,c,u=()=>c!==null&&c!==void 0?c:c=Ip.useFunc(t,K0.default),l;if(a||s)l=t.let("valid"),e.block$data(l,d);else{if(!Array.isArray(n))throw Error("ajv implementation error");let m=t.const("vSchema",i);l=tr.or(...n.map((h,p)=>v(m,p)))}e.pass(l);function d(){t.assign(l,!1),t.forOf("v",i,(m)=>t.if(tr._`${u()}(${r}, ${m})`,()=>t.assign(l,!0).break()))}function v(m,h){let p=n[h];return typeof p==="object"&&p!==null?tr._`${u()}(${r}, ${m}[${h}])`:tr._`${r} === ${p}`}}};jc.default=J0});var Tp=b(function(Cc){Object.defineProperty(Cc,"__esModule",{value:!0});var W0=lp(),Q0=dp(),B0=hp(),X0=vp(),Z0=$p(),Y0=wp(),eb=bp(),tb=Ep(),rb=Rp(),sb=Op(),nb=[W0.default,Q0.default,B0.default,X0.default,Z0.default,Y0.default,eb.default,tb.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},rb.default,sb.default];Cc.default=nb});var Nc=b(function(oi){Object.defineProperty(oi,"__esModule",{value:!0});oi.validateAdditionalItems=void 0;var mt=ee(),on=ne(),ib={message:({params:{len:e}})=>mt.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>mt._`{limit: ${e}}`},ob={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:ib,code(e){let{parentSchema:t,it:r}=e,{items:s}=t;if(!Array.isArray(s)){on.checkStrictMode(r,'"additionalItems" is ignored when "items" is not an array of schemas');return}xp(e,s)}};function xp(e,t){let{gen:r,schema:s,data:n,keyword:i,it:o}=e;o.items=!0;let a=r.const("len",mt._`${n}.length`);if(s===!1)e.setParams({len:t.length}),e.pass(mt._`${a} <= ${t.length}`);else if(typeof s=="object"&&!on.alwaysValidSchema(o,s)){let u=r.var("valid",mt._`${a} <= ${t.length}`);r.if(mt.not(u),()=>c(u)),e.ok(u)}function c(u){r.forRange("i",t.length,a,(l)=>{if(e.subschema({keyword:i,dataProp:l,dataPropType:on.Type.Num},u),!o.allErrors)r.if(mt.not(u),()=>r.break())})}}oi.validateAdditionalItems=xp;oi.default=ob});var qc=b(function(ai){Object.defineProperty(ai,"__esModule",{value:!0});ai.validateTuple=void 0;var lo=ee(),Kr=ne(),Ap=kt(),ab={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(e){let{schema:t,it:r}=e;if(Array.isArray(t))return jp(e,"additionalItems",t);if(r.items=!0,Kr.alwaysValidSchema(r,t))return;e.ok(Ap.validateArray(e))}};function jp(e,t,r=e.schema){let{gen:s,parentSchema:n,data:i,keyword:o,it:a}=e;if(l(n),a.opts.unevaluated&&r.length&&a.items!==!0)a.items=Kr.mergeEvaluated.items(s,r.length,a.items);let c=s.name("valid"),u=s.const("len",lo._`${i}.length`);r.forEach((d,v)=>{if(Kr.alwaysValidSchema(a,d))return;s.if(lo._`${u} > ${v}`,()=>e.subschema({keyword:o,schemaProp:v,dataProp:v},c)),e.ok(c)});function l(d){let{opts:v,errSchemaPath:m}=a,h=r.length,p=h===d.minItems&&(h===d.maxItems||d[t]===!1);if(v.strictTuples&&!p){let _=`"${o}" is ${h}-tuple, but minItems or maxItems/${t} are not specified or different at path "${m}"`;Kr.checkStrictMode(a,_,v.strictTuples)}}}ai.validateTuple=jp;ai.default=ab});var Np=b(function(Dc){Object.defineProperty(Dc,"__esModule",{value:!0});var Cp=qc(),cb={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:(e)=>Cp.validateTuple(e,"items")};Dc.default=cb});var Vp=b(function(Mc){Object.defineProperty(Mc,"__esModule",{value:!0});var fo=ee(),qp=ne(),Dp=kt(),Mp=Nc(),ub={message:({params:{len:e}})=>fo.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>fo._`{limit: ${e}}`},lb={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:ub,code(e){let{schema:t,parentSchema:r,it:s}=e,{prefixItems:n}=r;if(s.items=!0,qp.alwaysValidSchema(s,t))return;if(n)Mp.validateAdditionalItems(e,n);else e.ok(Dp.validateArray(e))}};Mc.default=lb});var Up=b(function(Vc){Object.defineProperty(Vc,"__esModule",{value:!0});var Oe=ee(),Gr=ne(),db={message:({params:{min:e,max:t}})=>t===void 0?Oe.str`must contain at least ${e} valid item(s)`:Oe.str`must contain at least ${e} and no more than ${t} valid item(s)`,params:({params:{min:e,max:t}})=>t===void 0?Oe._`{minContains: ${e}}`:Oe._`{minContains: ${e}, maxContains: ${t}}`},fb={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:db,code(e){let{gen:t,schema:r,parentSchema:s,data:n,it:i}=e,o,a,{minContains:c,maxContains:u}=s;if(i.opts.next)o=c===void 0?1:c,a=u;else o=1;let l=t.const("len",Oe._`${n}.length`);if(e.setParams({min:o,max:a}),a===void 0&&o===0){Gr.checkStrictMode(i,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(a!==void 0&&o>a){Gr.checkStrictMode(i,'"minContains" > "maxContains" is always invalid'),e.fail();return}if(Gr.alwaysValidSchema(i,r)){let p=Oe._`${l} >= ${o}`;if(a!==void 0)p=Oe._`${p} && ${l} <= ${a}`;e.pass(p);return}i.items=!0;let d=t.name("valid");if(a===void 0&&o===1)m(d,()=>t.if(d,()=>t.break()));else if(o===0){if(t.let(d,!0),a!==void 0)t.if(Oe._`${n}.length > 0`,v)}else t.let(d,!1),v();e.result(d,()=>e.reset());function v(){let p=t.name("_valid"),_=t.let("count",0);m(p,()=>t.if(p,()=>h(_)))}function m(p,_){t.forRange("i",0,l,(w)=>{e.subschema({keyword:"contains",dataProp:w,dataPropType:Gr.Type.Num,compositeRule:!0},p),_()})}function h(p){if(t.code(Oe._`${p}++`),a===void 0)t.if(Oe._`${p} >= ${o}`,()=>t.assign(d,!0).break());else if(t.if(Oe._`${p} > ${a}`,()=>t.assign(d,!1).break()),o===1)t.assign(d,!0);else t.if(Oe._`${p} >= ${o}`,()=>t.assign(d,!0))}}};Vc.default=fb});var Hp=b(function(sr){Object.defineProperty(sr,"__esModule",{value:!0});sr.validateSchemaDeps=sr.validatePropertyDeps=sr.error=void 0;var an=ee(),zp=ne(),rr=kt();sr.error={message:({params:{property:e,depsCount:t,deps:r}})=>an.str`must have ${t===1?"property":"properties"} ${r} when property ${e} is present`,params:({params:{property:e,depsCount:t,deps:r,missingProperty:s}})=>an._`{property: ${e},
6
+ missingProperty: ${s},
7
+ depsCount: ${t},
8
+ deps: ${r}}`};var pb={keyword:"dependencies",type:"object",schemaType:"object",error:sr.error,code(e){let[t,r]=mb(e);Fp(e,t),Lp(e,r)}};function mb({schema:e}){let t={},r={};for(let s in e){if(s==="__proto__")continue;let n=Array.isArray(e[s])?t:r;n[s]=e[s]}return[t,r]}function Fp(e,t=e.schema){let{gen:r,data:s,it:n}=e;if(Object.keys(t).length===0)return;let i=r.let("missing");for(let o in t){let a=t[o];if(a.length===0)continue;let c=rr.propertyInData(r,s,o,n.opts.ownProperties);if(e.setParams({property:o,depsCount:a.length,deps:a.join(", ")}),n.allErrors)r.if(c,()=>{for(let u of a)rr.checkReportMissingProp(e,u)});else r.if(an._`${c} && (${rr.checkMissingProp(e,a,i)})`),rr.reportMissingProp(e,i),r.else()}}sr.validatePropertyDeps=Fp;function Lp(e,t=e.schema){let{gen:r,data:s,keyword:n,it:i}=e,o=r.name("valid");for(let a in t){if(zp.alwaysValidSchema(i,t[a]))continue;r.if(rr.propertyInData(r,s,a,i.opts.ownProperties),()=>{let c=e.subschema({keyword:n,schemaProp:a},o);e.mergeValidEvaluated(c,o)},()=>r.var(o,!0)),e.ok(o)}}sr.validateSchemaDeps=Lp;sr.default=pb});var Gp=b(function(Uc){Object.defineProperty(Uc,"__esModule",{value:!0});var po=ee(),Kp=ne(),hb={message:"property name must be valid",params:({params:e})=>po._`{propertyName: ${e.propertyName}}`},yb={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:hb,code(e){let{gen:t,schema:r,data:s,it:n}=e;if(Kp.alwaysValidSchema(n,r))return;let i=t.name("valid");t.forIn("key",s,(o)=>{e.setParams({propertyName:o}),e.subschema({keyword:"propertyNames",data:o,dataTypes:["string"],propertyName:o,compositeRule:!0},i),t.if(po.not(i),()=>{if(e.error(!0),!n.allErrors)t.break()})}),e.ok(i)}};Uc.default=yb});var Fc=b(function(zc){Object.defineProperty(zc,"__esModule",{value:!0});var Jr=kt(),De=ee(),gb=kr(),Wr=ne(),vb={message:"must NOT have additional properties",params:({params:e})=>De._`{additionalProperty: ${e.additionalProperty}}`},$b={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:vb,code(e){let{gen:t,schema:r,parentSchema:s,data:n,errsCount:i,it:o}=e;if(!i)throw Error("ajv implementation error");let{allErrors:a,opts:c}=o;if(o.props=!0,c.removeAdditional!=="all"&&Wr.alwaysValidSchema(o,r))return;let u=Jr.allSchemaProperties(s.properties),l=Jr.allSchemaProperties(s.patternProperties);d(),e.ok(De._`${i} === ${gb.default.errors}`);function d(){t.forIn("key",n,(_)=>{if(!u.length&&!l.length)h(_);else t.if(v(_),()=>h(_))})}function v(_){let w;if(u.length>8){let I=Wr.schemaRefOrVal(o,s.properties,"properties");w=Jr.isOwnProperty(t,I,_)}else if(u.length)w=De.or(...u.map((I)=>De._`${_} === ${I}`));else w=De.nil;if(l.length)w=De.or(w,...l.map((I)=>De._`${Jr.usePattern(e,I)}.test(${_})`));return De.not(w)}function m(_){t.code(De._`delete ${n}[${_}]`)}function h(_){if(c.removeAdditional==="all"||c.removeAdditional&&r===!1){m(_);return}if(r===!1){if(e.setParams({additionalProperty:_}),e.error(),!a)t.break();return}if(typeof r=="object"&&!Wr.alwaysValidSchema(o,r)){let w=t.name("valid");if(c.removeAdditional==="failing")p(_,w,!1),t.if(De.not(w),()=>{e.reset(),m(_)});else if(p(_,w),!a)t.if(De.not(w),()=>t.break())}}function p(_,w,I){let O={keyword:"additionalProperties",dataProp:_,dataPropType:Wr.Type.Str};if(I===!1)Object.assign(O,{compositeRule:!0,createErrors:!1,allErrors:!1});e.subschema(O,w)}}};zc.default=$b});var Qp=b(function(Lc){Object.defineProperty(Lc,"__esModule",{value:!0});var Wp=ri(),mo=kt(),cn=ne(),Jp=Fc(),_b={keyword:"properties",type:"object",schemaType:"object",code(e){let{gen:t,schema:r,parentSchema:s,data:n,it:i}=e;if(i.opts.removeAdditional==="all"&&s.additionalProperties===void 0)Jp.default.code(new Wp.KeywordCxt(i,Jp.default,"additionalProperties"));let o=mo.allSchemaProperties(r);for(let d of o)i.definedProperties.add(d);if(i.opts.unevaluated&&o.length&&i.props!==!0)i.props=cn.mergeEvaluated.props(t,cn.toHash(o),i.props);let a=o.filter((d)=>!cn.alwaysValidSchema(i,r[d]));if(a.length===0)return;let c=t.name("valid");for(let d of a){if(u(d))l(d);else{if(t.if(mo.propertyInData(t,n,d,i.opts.ownProperties)),l(d),!i.allErrors)t.else().var(c,!0);t.endIf()}e.it.definedProperties.add(d),e.ok(c)}function u(d){return i.opts.useDefaults&&!i.compositeRule&&r[d].default!==void 0}function l(d){e.subschema({keyword:"properties",schemaProp:d,dataProp:d},c)}}};Lc.default=_b});var Bp=b(function(Hc){Object.defineProperty(Hc,"__esModule",{value:!0});var ho=kt(),Qr=ee(),yo=ne(),go=ne(),wb={keyword:"patternProperties",type:"object",schemaType:"object",code(e){let{gen:t,schema:r,data:s,parentSchema:n,it:i}=e,{opts:o}=i,a=ho.allSchemaProperties(r),c=a.filter((p)=>yo.alwaysValidSchema(i,r[p]));if(a.length===0||c.length===a.length&&(!i.opts.unevaluated||i.props===!0))return;let u=o.strictSchema&&!o.allowMatchingProperties&&n.properties,l=t.name("valid");if(i.props!==!0&&!(i.props instanceof Qr.Name))i.props=go.evaluatedPropsToName(t,i.props);let{props:d}=i;v();function v(){for(let p of a){if(u)m(p);if(i.allErrors)h(p);else t.var(l,!0),h(p),t.if(l)}}function m(p){for(let _ in u)if(new RegExp(p).test(_))yo.checkStrictMode(i,`property ${_} matches pattern ${p} (use allowMatchingProperties)`)}function h(p){t.forIn("key",s,(_)=>{t.if(Qr._`${ho.usePattern(e,p)}.test(${_})`,()=>{let w=c.includes(p);if(!w)e.subschema({keyword:"patternProperties",schemaProp:p,dataProp:_,dataPropType:go.Type.Str},l);if(i.opts.unevaluated&&d!==!0)t.assign(Qr._`${d}[${_}]`,!0);else if(!w&&!i.allErrors)t.if(Qr.not(l),()=>t.break())})})}}};Hc.default=wb});var Zp=b(function(Kc){Object.defineProperty(Kc,"__esModule",{value:!0});var Xp=ne(),bb={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(e){let{gen:t,schema:r,it:s}=e;if(Xp.alwaysValidSchema(s,r)){e.fail();return}let n=t.name("valid");e.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},n),e.failResult(n,()=>e.reset(),()=>e.error())},error:{message:"must NOT be valid"}};Kc.default=bb});var em=b(function(Gc){Object.defineProperty(Gc,"__esModule",{value:!0});var Yp=kt(),Sb={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:Yp.validateUnion,error:{message:"must match a schema in anyOf"}};Gc.default=Sb});var rm=b(function(Jc){Object.defineProperty(Jc,"__esModule",{value:!0});var Br=ee(),tm=ne(),Pb={message:"must match exactly one schema in oneOf",params:({params:e})=>Br._`{passingSchemas: ${e.passing}}`},Eb={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:Pb,code(e){let{gen:t,schema:r,parentSchema:s,it:n}=e;if(!Array.isArray(r))throw Error("ajv implementation error");if(n.opts.discriminator&&s.discriminator)return;let i=r,o=t.let("valid",!1),a=t.let("passing",null),c=t.name("_valid");e.setParams({passing:a}),t.block(u),e.result(o,()=>e.reset(),()=>e.error(!0));function u(){i.forEach((l,d)=>{let v;if(tm.alwaysValidSchema(n,l))t.var(c,!0);else v=e.subschema({keyword:"oneOf",schemaProp:d,compositeRule:!0},c);if(d>0)t.if(Br._`${c} && ${o}`).assign(o,!1).assign(a,Br._`[${a}, ${d}]`).else();t.if(c,()=>{if(t.assign(o,!0),t.assign(a,d),v)e.mergeEvaluated(v,Br.Name)})})}}};Jc.default=Eb});var nm=b(function(Wc){Object.defineProperty(Wc,"__esModule",{value:!0});var sm=ne(),kb={keyword:"allOf",schemaType:"array",code(e){let{gen:t,schema:r,it:s}=e;if(!Array.isArray(r))throw Error("ajv implementation error");let n=t.name("valid");r.forEach((i,o)=>{if(sm.alwaysValidSchema(s,i))return;let a=e.subschema({keyword:"allOf",schemaProp:o},n);e.ok(n),e.mergeEvaluated(a)})}};Wc.default=kb});var om=b(function(Qc){Object.defineProperty(Qc,"__esModule",{value:!0});var Xr=ee(),vo=ne(),Rb={message:({params:e})=>Xr.str`must match "${e.ifClause}" schema`,params:({params:e})=>Xr._`{failingKeyword: ${e.ifClause}}`},Ib={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:Rb,code(e){let{gen:t,parentSchema:r,it:s}=e;if(r.then===void 0&&r.else===void 0)vo.checkStrictMode(s,'"if" without "then" and "else" is ignored');let n=im(s,"then"),i=im(s,"else");if(!n&&!i)return;let o=t.let("valid",!0),a=t.name("_valid");if(c(),e.reset(),n&&i){let l=t.let("ifClause");e.setParams({ifClause:l}),t.if(a,u("then",l),u("else",l))}else if(n)t.if(a,u("then"));else t.if(Xr.not(a),u("else"));e.pass(o,()=>e.error(!0));function c(){let l=e.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},a);e.mergeEvaluated(l)}function u(l,d){return()=>{let v=e.subschema({keyword:l},a);if(t.assign(o,a),e.mergeValidEvaluated(v,o),d)t.assign(d,Xr._`${l}`);else e.setParams({ifClause:l})}}}};function im(e,t){let r=e.schema[t];return r!==void 0&&!vo.alwaysValidSchema(e,r)}Qc.default=Ib});var cm=b(function(Bc){Object.defineProperty(Bc,"__esModule",{value:!0});var am=ne(),Ob={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:e,parentSchema:t,it:r}){if(t.if===void 0)am.checkStrictMode(r,`"${e}" without "if" is ignored`)}};Bc.default=Ob});var um=b(function(Xc){Object.defineProperty(Xc,"__esModule",{value:!0});var Tb=Nc(),xb=Np(),Ab=qc(),jb=Vp(),Cb=Up(),Nb=Hp(),qb=Gp(),Db=Fc(),Mb=Qp(),Vb=Bp(),Ub=Zp(),zb=em(),Fb=rm(),Lb=nm(),Hb=om(),Kb=cm();function Gb(e=!1){let t=[Ub.default,zb.default,Fb.default,Lb.default,Hb.default,Kb.default,qb.default,Db.default,Nb.default,Mb.default,Vb.default];if(e)t.push(xb.default,jb.default);else t.push(Tb.default,Ab.default);return t.push(Cb.default),t}Xc.default=Gb});var lm=b(function(Zc){Object.defineProperty(Zc,"__esModule",{value:!0});var K=ee(),Jb={message:({schemaCode:e})=>K.str`must match format "${e}"`,params:({schemaCode:e})=>K._`{format: ${e}}`},Wb={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:Jb,code(e,t){let{gen:r,data:s,$data:n,schema:i,schemaCode:o,it:a}=e,{opts:c,errSchemaPath:u,schemaEnv:l,self:d}=a;if(!c.validateFormats)return;if(n)v();else m();function v(){let h=r.scopeValue("formats",{ref:d.formats,code:c.code.formats}),p=r.const("fDef",K._`${h}[${o}]`),_=r.let("fType"),w=r.let("format");r.if(K._`typeof ${p} == "object" && !(${p} instanceof RegExp)`,()=>r.assign(_,K._`${p}.type || "string"`).assign(w,K._`${p}.validate`),()=>r.assign(_,K._`"string"`).assign(w,p)),e.fail$data(K.or(I(),O()));function I(){if(c.strictSchema===!1)return K.nil;return K._`${o} && !${w}`}function O(){let D=l.$async?K._`(${p}.async ? await ${w}(${s}) : ${w}(${s}))`:K._`${w}(${s})`,S=K._`(typeof ${w} == "function" ? ${D} : ${w}.test(${s}))`;return K._`${w} && ${w} !== true && ${_} === ${t} && !${S}`}}function m(){let h=d.formats[i];if(!h){I();return}if(h===!0)return;let[p,_,w]=O(h);if(p===t)e.pass(D());function I(){if(c.strictSchema===!1){d.logger.warn(S());return}throw Error(S());function S(){return`unknown format "${i}" ignored in schema at path "${u}"`}}function O(S){let M=S instanceof RegExp?K.regexpCode(S):c.code.formats?K._`${c.code.formats}${K.getProperty(i)}`:void 0,Y=r.scopeValue("formats",{key:i,ref:S,code:M});if(typeof S=="object"&&!(S instanceof RegExp))return[S.type||"string",S.validate,K._`${Y}.validate`];return["string",S,Y]}function D(){if(typeof h=="object"&&!(h instanceof RegExp)&&h.async){if(!l.$async)throw Error("async format in sync schema");return K._`await ${w}(${s})`}return typeof _=="function"?K._`${w}(${s})`:K._`${w}.test(${s})`}}}};Zc.default=Wb});var dm=b(function(Yc){Object.defineProperty(Yc,"__esModule",{value:!0});var Qb=lm(),Bb=[Qb.default];Yc.default=Bb});var fm=b(function(un){Object.defineProperty(un,"__esModule",{value:!0});un.contentVocabulary=un.metadataVocabulary=void 0;un.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];un.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]});var pm=b(function(eu){Object.defineProperty(eu,"__esModule",{value:!0});var Xb=up(),Zb=Tp(),Yb=um(),eS=dm(),$o=fm(),tS=[Xb.default,Zb.default,(0,Yb.default)(),eS.default,$o.metadataVocabulary,$o.contentVocabulary];eu.default=tS});var hm=b(function(_o){Object.defineProperty(_o,"__esModule",{value:!0});_o.DiscrError=void 0;var mm;(function(e){e.Tag="tag",e.Mapping="mapping"})(mm||(_o.DiscrError=mm={}))});var gm=b(function(tu){Object.defineProperty(tu,"__esModule",{value:!0});var Ot=ee(),ln=hm(),wo=Yi(),rS=si(),ym=ne(),sS={message:({params:{discrError:e,tagName:t}})=>e===ln.DiscrError.Tag?`tag "${t}" must be string`:`value of tag "${t}" must be in oneOf`,params:({params:{discrError:e,tag:t,tagName:r}})=>Ot._`{error: ${e}, tag: ${r}, tagValue: ${t}}`},nS={keyword:"discriminator",type:"object",schemaType:"object",error:sS,code(e){let{gen:t,data:r,schema:s,parentSchema:n,it:i}=e,{oneOf:o}=n;if(!i.opts.discriminator)throw Error("discriminator: requires discriminator option");let a=s.propertyName;if(typeof a!="string")throw Error("discriminator: requires propertyName");if(s.mapping)throw Error("discriminator: mapping is not supported");if(!o)throw Error("discriminator: requires oneOf keyword");let c=t.let("valid",!1),u=t.const("tag",Ot._`${r}${Ot.getProperty(a)}`);t.if(Ot._`typeof ${u} == "string"`,()=>l(),()=>e.error(!1,{discrError:ln.DiscrError.Tag,tag:u,tagName:a})),e.ok(c);function l(){let m=v();t.if(!1);for(let h in m)t.elseIf(Ot._`${u} === ${h}`),t.assign(c,d(m[h]));t.else(),e.error(!1,{discrError:ln.DiscrError.Mapping,tag:u,tagName:a}),t.endIf()}function d(m){let h=t.name("valid"),p=e.subschema({keyword:"oneOf",schemaProp:m},h);return e.mergeEvaluated(p,Ot.Name),h}function v(){var m;let h={},p=w(n),_=!0;for(let D=0;D<o.length;D++){let S=o[D];if((S===null||S===void 0?void 0:S.$ref)&&!ym.schemaHasRulesButRef(S,i.self.RULES)){let Y=S.$ref;if(S=wo.resolveRef.call(i.self,i.schemaEnv.root,i.baseId,Y),S instanceof wo.SchemaEnv)S=S.schema;if(S===void 0)throw new rS.default(i.opts.uriResolver,i.baseId,Y)}let M=(m=S===null||S===void 0?void 0:S.properties)===null||m===void 0?void 0:m[a];if(typeof M!="object")throw Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${a}"`);_=_&&(p||w(S)),I(M,D)}if(!_)throw Error(`discriminator: "${a}" must be required`);return h;function w({required:D}){return Array.isArray(D)&&D.includes(a)}function I(D,S){if(D.const)O(D.const,S);else if(D.enum)for(let M of D.enum)O(M,S);else throw Error(`discriminator: "properties/${a}" must have "const" or "enum"`)}function O(D,S){if(typeof D!="string"||D in h)throw Error(`discriminator: "${a}" values must be unique strings`);h[D]=S}}}};tu.default=nS});var vm=b(function(lO,iS){iS.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}});var su=b(function(Re,ru){Object.defineProperty(Re,"__esModule",{value:!0});Re.MissingRefError=Re.ValidationError=Re.CodeGen=Re.Name=Re.nil=Re.stringify=Re.str=Re._=Re.KeywordCxt=Re.Ajv=void 0;var oS=ip(),aS=pm(),cS=gm(),$m=vm(),uS=["/properties"],bo="http://json-schema.org/draft-07/schema";class ci extends oS.default{_addVocabularies(){if(super._addVocabularies(),aS.default.forEach((e)=>this.addVocabulary(e)),this.opts.discriminator)this.addKeyword(cS.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let e=this.opts.$data?this.$dataMetaSchema($m,uS):$m;this.addMetaSchema(e,bo,!1),this.refs["http://json-schema.org/schema"]=bo}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(bo)?bo:void 0)}}Re.Ajv=ci;ru.exports=Re=ci;ru.exports.Ajv=ci;Object.defineProperty(Re,"__esModule",{value:!0});Re.default=ci;var lS=ri();Object.defineProperty(Re,"KeywordCxt",{enumerable:!0,get:function(){return lS.KeywordCxt}});var dn=ee();Object.defineProperty(Re,"_",{enumerable:!0,get:function(){return dn._}});Object.defineProperty(Re,"str",{enumerable:!0,get:function(){return dn.str}});Object.defineProperty(Re,"stringify",{enumerable:!0,get:function(){return dn.stringify}});Object.defineProperty(Re,"nil",{enumerable:!0,get:function(){return dn.nil}});Object.defineProperty(Re,"Name",{enumerable:!0,get:function(){return dn.Name}});Object.defineProperty(Re,"CodeGen",{enumerable:!0,get:function(){return dn.CodeGen}});var dS=Bi();Object.defineProperty(Re,"ValidationError",{enumerable:!0,get:function(){return dS.default}});var fS=si();Object.defineProperty(Re,"MissingRefError",{enumerable:!0,get:function(){return fS.default}})});var Om=b(function(nr){Object.defineProperty(nr,"__esModule",{value:!0});nr.formatNames=nr.fastFormats=nr.fullFormats=void 0;function fn(e,t){return{validate:e,compare:t}}nr.fullFormats={date:fn(km,cu),time:fn(Rm,uu),"date-time":fn(vS,Im),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:wS,"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,url:/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i,regex:IS,uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte:bS,int32:{type:"number",validate:ES},int64:{type:"number",validate:kS},float:{type:"number",validate:Em},double:{type:"number",validate:Em},password:!0,binary:!0};nr.fastFormats={...nr.fullFormats,date:fn(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,cu),time:fn(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,uu),"date-time":fn(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,Im),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i};nr.formatNames=Object.keys(nr.fullFormats);function hS(e){return e%4===0&&(e%100!==0||e%400===0)}var yS=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,gS=[0,31,28,31,30,31,30,31,31,30,31,30,31];function km(e){let t=yS.exec(e);if(!t)return!1;let r=+t[1],s=+t[2],n=+t[3];return s>=1&&s<=12&&n>=1&&n<=(s===2&&hS(r)?29:gS[s])}function cu(e,t){if(!(e&&t))return;if(e>t)return 1;if(e<t)return-1;return 0}var ou=/^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d(?::?\d\d)?)?$/i;function Rm(e,t){let r=ou.exec(e);if(!r)return!1;let s=+r[1],n=+r[2],i=+r[3],o=r[5];return(s<=23&&n<=59&&i<=59||s===23&&n===59&&i===60)&&(!t||o!=="")}function uu(e,t){if(!(e&&t))return;let r=ou.exec(e),s=ou.exec(t);if(!(r&&s))return;if(e=r[1]+r[2]+r[3]+(r[4]||""),t=s[1]+s[2]+s[3]+(s[4]||""),e>t)return 1;if(e<t)return-1;return 0}var au=/t|\s/i;function vS(e){let t=e.split(au);return t.length===2&&km(t[0])&&Rm(t[1],!0)}function Im(e,t){if(!(e&&t))return;let[r,s]=e.split(au),[n,i]=t.split(au),o=cu(r,n);if(o===void 0)return;return o||uu(s,i)}var $S=/\/|:/,_S=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;function wS(e){return $S.test(e)&&_S.test(e)}var Pm=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;function bS(e){return Pm.lastIndex=0,Pm.test(e)}var SS=-2147483648,PS=2147483647;function ES(e){return Number.isInteger(e)&&e<=PS&&e>=SS}function kS(e){return Number.isInteger(e)}function Em(){return!0}var RS=/[^\\]\\Z/;function IS(e){if(RS.test(e))return!1;try{return new RegExp(e),!0}catch(t){return!1}}});var li=b(function(ue){Object.defineProperty(ue,"__esModule",{value:!0});ue.regexpCode=ue.getEsmExportName=ue.getProperty=ue.safeStringify=ue.stringify=ue.strConcat=ue.addCodeArg=ue.str=ue._=ue.nil=ue._Code=ue.Name=ue.IDENTIFIER=ue._CodeOrName=void 0;class So{}ue._CodeOrName=So;ue.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class pn extends So{constructor(e){super();if(!ue.IDENTIFIER.test(e))throw Error("CodeGen: name must be a valid identifier");this.str=e}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}ue.Name=pn;class Mt extends So{constructor(e){super();this._items=typeof e==="string"?[e]:e}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;let e=this._items[0];return e===""||e==='""'}get str(){var e;return(e=this._str)!==null&&e!==void 0?e:this._str=this._items.reduce((t,r)=>`${t}${r}`,"")}get names(){var e;return(e=this._names)!==null&&e!==void 0?e:this._names=this._items.reduce((t,r)=>{if(r instanceof pn)t[r.str]=(t[r.str]||0)+1;return t},{})}}ue._Code=Mt;ue.nil=new Mt("");function Tm(e,...t){let r=[e[0]],s=0;while(s<t.length)du(r,t[s]),r.push(e[++s]);return new Mt(r)}ue._=Tm;var lu=new Mt("+");function xm(e,...t){let r=[ui(e[0])],s=0;while(s<t.length)r.push(lu),du(r,t[s]),r.push(lu,ui(e[++s]));return OS(r),new Mt(r)}ue.str=xm;function du(e,t){if(t instanceof Mt)e.push(...t._items);else if(t instanceof pn)e.push(t);else e.push(AS(t))}ue.addCodeArg=du;function OS(e){let t=1;while(t<e.length-1){if(e[t]===lu){let r=TS(e[t-1],e[t+1]);if(r!==void 0){e.splice(t-1,3,r);continue}e[t++]="+"}t++}}function TS(e,t){if(t==='""')return e;if(e==='""')return t;if(typeof e=="string"){if(t instanceof pn||e[e.length-1]!=='"')return;if(typeof t!="string")return`${e.slice(0,-1)}${t}"`;if(t[0]==='"')return e.slice(0,-1)+t.slice(1);return}if(typeof t=="string"&&t[0]==='"'&&!(e instanceof pn))return`"${e}${t.slice(1)}`;return}function xS(e,t){return t.emptyStr()?e:e.emptyStr()?t:xm`${e}${t}`}ue.strConcat=xS;function AS(e){return typeof e=="number"||typeof e=="boolean"||e===null?e:ui(Array.isArray(e)?e.join(","):e)}function jS(e){return new Mt(ui(e))}ue.stringify=jS;function ui(e){return JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}ue.safeStringify=ui;function CS(e){return typeof e=="string"&&ue.IDENTIFIER.test(e)?new Mt(`.${e}`):Tm`[${e}]`}ue.getProperty=CS;function NS(e){if(typeof e=="string"&&ue.IDENTIFIER.test(e))return new Mt(`${e}`);throw Error(`CodeGen: invalid export name: ${e}, use explicit $id name mapping`)}ue.getEsmExportName=NS;function qS(e){return new Mt(e.toString())}ue.regexpCode=qS});var hu=b(function(at){Object.defineProperty(at,"__esModule",{value:!0});at.ValueScope=at.ValueScopeName=at.Scope=at.varKinds=at.UsedValueState=void 0;var be=li();class Am extends Error{constructor(e){super(`CodeGen: "code" for ${e} not defined`);this.value=e.value}}var fu;(function(e){e[e.Started=0]="Started",e[e.Completed=1]="Completed"})(fu=at.UsedValueState||(at.UsedValueState={}));at.varKinds={const:new be.Name("const"),let:new be.Name("let"),var:new be.Name("var")};class pu{constructor({prefixes:e,parent:t}={}){this._names={},this._prefixes=e,this._parent=t}toName(e){return e instanceof be.Name?e:this.name(e)}name(e){return new be.Name(this._newName(e))}_newName(e){let t=this._names[e]||this._nameGroup(e);return`${e}${t.index++}`}_nameGroup(e){var t,r;if(((r=(t=this._parent)===null||t===void 0?void 0:t._prefixes)===null||r===void 0?void 0:r.has(e))||this._prefixes&&!this._prefixes.has(e))throw Error(`CodeGen: prefix "${e}" is not allowed in this scope`);return this._names[e]={prefix:e,index:0}}}at.Scope=pu;class mu extends be.Name{constructor(e,t){super(t);this.prefix=e}setValue(e,{property:t,itemIndex:r}){this.value=e,this.scopePath=be._`.${new be.Name(t)}[${r}]`}}at.ValueScopeName=mu;var DS=be._`\n`;class jm extends pu{constructor(e){super(e);this._values={},this._scope=e.scope,this.opts={...e,_n:e.lines?DS:be.nil}}get(){return this._scope}name(e){return new mu(e,this._newName(e))}value(e,t){var r;if(t.ref===void 0)throw Error("CodeGen: ref must be passed in value");let s=this.toName(e),{prefix:n}=s,i=(r=t.key)!==null&&r!==void 0?r:t.ref,o=this._values[n];if(o){let u=o.get(i);if(u)return u}else o=this._values[n]=new Map;o.set(i,s);let a=this._scope[n]||(this._scope[n]=[]),c=a.length;return a[c]=t.ref,s.setValue(t,{property:n,itemIndex:c}),s}getValue(e,t){let r=this._values[e];if(!r)return;return r.get(t)}scopeRefs(e,t=this._values){return this._reduceValues(t,(r)=>{if(r.scopePath===void 0)throw Error(`CodeGen: name "${r}" has no value`);return be._`${e}${r.scopePath}`})}scopeCode(e=this._values,t,r){return this._reduceValues(e,(s)=>{if(s.value===void 0)throw Error(`CodeGen: name "${s}" has no value`);return s.value.code},t,r)}_reduceValues(e,t,r={},s){let n=be.nil;for(let i in e){let o=e[i];if(!o)continue;let a=r[i]=r[i]||new Map;o.forEach((c)=>{if(a.has(c))return;a.set(c,fu.Started);let u=t(c);if(u){let l=this.opts.es5?at.varKinds.var:at.varKinds.const;n=be._`${n}${l} ${c} = ${u};${this.opts._n}`}else if(u=s===null||s===void 0?void 0:s(c))n=be._`${n}${u}${this.opts._n}`;else throw new Am(c);a.set(c,fu.Completed)})}return n}}at.ValueScope=jm});var W=b(function(X){Object.defineProperty(X,"__esModule",{value:!0});X.or=X.and=X.not=X.CodeGen=X.operators=X.varKinds=X.ValueScopeName=X.ValueScope=X.Scope=X.Name=X.regexpCode=X.stringify=X.getProperty=X.nil=X.strConcat=X.str=X._=void 0;var j=li(),Me=hu(),Zr=li();Object.defineProperty(X,"_",{enumerable:!0,get:function(){return Zr._}});Object.defineProperty(X,"str",{enumerable:!0,get:function(){return Zr.str}});Object.defineProperty(X,"strConcat",{enumerable:!0,get:function(){return Zr.strConcat}});Object.defineProperty(X,"nil",{enumerable:!0,get:function(){return Zr.nil}});Object.defineProperty(X,"getProperty",{enumerable:!0,get:function(){return Zr.getProperty}});Object.defineProperty(X,"stringify",{enumerable:!0,get:function(){return Zr.stringify}});Object.defineProperty(X,"regexpCode",{enumerable:!0,get:function(){return Zr.regexpCode}});Object.defineProperty(X,"Name",{enumerable:!0,get:function(){return Zr.Name}});var Oo=hu();Object.defineProperty(X,"Scope",{enumerable:!0,get:function(){return Oo.Scope}});Object.defineProperty(X,"ValueScope",{enumerable:!0,get:function(){return Oo.ValueScope}});Object.defineProperty(X,"ValueScopeName",{enumerable:!0,get:function(){return Oo.ValueScopeName}});Object.defineProperty(X,"varKinds",{enumerable:!0,get:function(){return Oo.varKinds}});X.operators={GT:new j._Code(">"),GTE:new j._Code(">="),LT:new j._Code("<"),LTE:new j._Code("<="),EQ:new j._Code("==="),NEQ:new j._Code("!=="),NOT:new j._Code("!"),OR:new j._Code("||"),AND:new j._Code("&&"),ADD:new j._Code("+")};class Yr{optimizeNodes(){return this}optimizeNames(e,t){return this}}class Cm extends Yr{constructor(e,t,r){super();this.varKind=e,this.name=t,this.rhs=r}render({es5:e,_n:t}){let r=e?Me.varKinds.var:this.varKind,s=this.rhs===void 0?"":` = ${this.rhs}`;return`${r} ${this.name}${s};`+t}optimizeNames(e,t){if(!e[this.name.str])return;if(this.rhs)this.rhs=hn(this.rhs,e,t);return this}get names(){return this.rhs instanceof j._CodeOrName?this.rhs.names:{}}}class vu extends Yr{constructor(e,t,r){super();this.lhs=e,this.rhs=t,this.sideEffects=r}render({_n:e}){return`${this.lhs} = ${this.rhs};`+e}optimizeNames(e,t){if(this.lhs instanceof j.Name&&!e[this.lhs.str]&&!this.sideEffects)return;return this.rhs=hn(this.rhs,e,t),this}get names(){let e=this.lhs instanceof j.Name?{}:{...this.lhs.names};return Io(e,this.rhs)}}class Nm extends vu{constructor(e,t,r,s){super(e,r,s);this.op=t}render({_n:e}){return`${this.lhs} ${this.op}= ${this.rhs};`+e}}class qm extends Yr{constructor(e){super();this.label=e,this.names={}}render({_n:e}){return`${this.label}:`+e}}class Dm extends Yr{constructor(e){super();this.label=e,this.names={}}render({_n:e}){return`break${this.label?` ${this.label}`:""};`+e}}class Mm extends Yr{constructor(e){super();this.error=e}render({_n:e}){return`throw ${this.error};`+e}get names(){return this.error.names}}class Vm extends Yr{constructor(e){super();this.code=e}render({_n:e}){return`${this.code};`+e}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(e,t){return this.code=hn(this.code,e,t),this}get names(){return this.code instanceof j._CodeOrName?this.code.names:{}}}class To extends Yr{constructor(e=[]){super();this.nodes=e}render(e){return this.nodes.reduce((t,r)=>t+r.render(e),"")}optimizeNodes(){let{nodes:e}=this,t=e.length;while(t--){let r=e[t].optimizeNodes();if(Array.isArray(r))e.splice(t,1,...r);else if(r)e[t]=r;else e.splice(t,1)}return e.length>0?this:void 0}optimizeNames(e,t){let{nodes:r}=this,s=r.length;while(s--){let n=r[s];if(n.optimizeNames(e,t))continue;MS(e,n.names),r.splice(s,1)}return r.length>0?this:void 0}get names(){return this.nodes.reduce((e,t)=>Is(e,t.names),{})}}class es extends To{render(e){return"{"+e._n+super.render(e)+"}"+e._n}}class Um extends To{}class di extends es{}di.kind="else";class Ir extends es{constructor(e,t){super(t);this.condition=e}render(e){let t=`if(${this.condition})`+super.render(e);if(this.else)t+="else "+this.else.render(e);return t}optimizeNodes(){super.optimizeNodes();let e=this.condition;if(e===!0)return this.nodes;let t=this.else;if(t){let r=t.optimizeNodes();t=this.else=Array.isArray(r)?new di(r):r}if(t){if(e===!1)return t instanceof Ir?t:t.nodes;if(this.nodes.length)return this;return new Ir(Km(e),t instanceof Ir?[t]:t.nodes)}if(e===!1||!this.nodes.length)return;return this}optimizeNames(e,t){var r;if(this.else=(r=this.else)===null||r===void 0?void 0:r.optimizeNames(e,t),!(super.optimizeNames(e,t)||this.else))return;return this.condition=hn(this.condition,e,t),this}get names(){let e=super.names;if(Io(e,this.condition),this.else)Is(e,this.else.names);return e}}Ir.kind="if";class mn extends es{}mn.kind="for";class zm extends mn{constructor(e){super();this.iteration=e}render(e){return`for(${this.iteration})`+super.render(e)}optimizeNames(e,t){if(!super.optimizeNames(e,t))return;return this.iteration=hn(this.iteration,e,t),this}get names(){return Is(super.names,this.iteration.names)}}class Fm extends mn{constructor(e,t,r,s){super();this.varKind=e,this.name=t,this.from=r,this.to=s}render(e){let t=e.es5?Me.varKinds.var:this.varKind,{name:r,from:s,to:n}=this;return`for(${t} ${r}=${s}; ${r}<${n}; ${r}++)`+super.render(e)}get names(){let e=Io(super.names,this.from);return Io(e,this.to)}}class yu extends mn{constructor(e,t,r,s){super();this.loop=e,this.varKind=t,this.name=r,this.iterable=s}render(e){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(e)}optimizeNames(e,t){if(!super.optimizeNames(e,t))return;return this.iterable=hn(this.iterable,e,t),this}get names(){return Is(super.names,this.iterable.names)}}class Po extends es{constructor(e,t,r){super();this.name=e,this.args=t,this.async=r}render(e){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(e)}}Po.kind="func";class Eo extends To{render(e){return"return "+super.render(e)}}Eo.kind="return";class Lm extends es{render(e){let t="try"+super.render(e);if(this.catch)t+=this.catch.render(e);if(this.finally)t+=this.finally.render(e);return t}optimizeNodes(){var e,t;return super.optimizeNodes(),(e=this.catch)===null||e===void 0||e.optimizeNodes(),(t=this.finally)===null||t===void 0||t.optimizeNodes(),this}optimizeNames(e,t){var r,s;return super.optimizeNames(e,t),(r=this.catch)===null||r===void 0||r.optimizeNames(e,t),(s=this.finally)===null||s===void 0||s.optimizeNames(e,t),this}get names(){let e=super.names;if(this.catch)Is(e,this.catch.names);if(this.finally)Is(e,this.finally.names);return e}}class ko extends es{constructor(e){super();this.error=e}render(e){return`catch(${this.error})`+super.render(e)}}ko.kind="catch";class Ro extends es{render(e){return"finally"+super.render(e)}}Ro.kind="finally";class Hm{constructor(e,t={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...t,_n:t.lines?`
9
+ `:""},this._extScope=e,this._scope=new Me.Scope({parent:e}),this._nodes=[new Um]}toString(){return this._root.render(this.opts)}name(e){return this._scope.name(e)}scopeName(e){return this._extScope.name(e)}scopeValue(e,t){let r=this._extScope.value(e,t);return(this._values[r.prefix]||(this._values[r.prefix]=new Set)).add(r),r}getScopeValue(e,t){return this._extScope.getValue(e,t)}scopeRefs(e){return this._extScope.scopeRefs(e,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(e,t,r,s){let n=this._scope.toName(t);if(r!==void 0&&s)this._constants[n.str]=r;return this._leafNode(new Cm(e,n,r)),n}const(e,t,r){return this._def(Me.varKinds.const,e,t,r)}let(e,t,r){return this._def(Me.varKinds.let,e,t,r)}var(e,t,r){return this._def(Me.varKinds.var,e,t,r)}assign(e,t,r){return this._leafNode(new vu(e,t,r))}add(e,t){return this._leafNode(new Nm(e,X.operators.ADD,t))}code(e){if(typeof e=="function")e();else if(e!==j.nil)this._leafNode(new Vm(e));return this}object(...e){let t=["{"];for(let[r,s]of e){if(t.length>1)t.push(",");if(t.push(r),r!==s||this.opts.es5)t.push(":"),j.addCodeArg(t,s)}return t.push("}"),new j._Code(t)}if(e,t,r){if(this._blockNode(new Ir(e)),t&&r)this.code(t).else().code(r).endIf();else if(t)this.code(t).endIf();else if(r)throw Error('CodeGen: "else" body without "then" body');return this}elseIf(e){return this._elseNode(new Ir(e))}else(){return this._elseNode(new di)}endIf(){return this._endBlockNode(Ir,di)}_for(e,t){if(this._blockNode(e),t)this.code(t).endFor();return this}for(e,t){return this._for(new zm(e),t)}forRange(e,t,r,s,n=this.opts.es5?Me.varKinds.var:Me.varKinds.let){let i=this._scope.toName(e);return this._for(new Fm(n,i,t,r),()=>s(i))}forOf(e,t,r,s=Me.varKinds.const){let n=this._scope.toName(e);if(this.opts.es5){let i=t instanceof j.Name?t:this.var("_arr",t);return this.forRange("_i",0,j._`${i}.length`,(o)=>{this.var(n,j._`${i}[${o}]`),r(n)})}return this._for(new yu("of",s,n,t),()=>r(n))}forIn(e,t,r,s=this.opts.es5?Me.varKinds.var:Me.varKinds.const){if(this.opts.ownProperties)return this.forOf(e,j._`Object.keys(${t})`,r);let n=this._scope.toName(e);return this._for(new yu("in",s,n,t),()=>r(n))}endFor(){return this._endBlockNode(mn)}label(e){return this._leafNode(new qm(e))}break(e){return this._leafNode(new Dm(e))}return(e){let t=new Eo;if(this._blockNode(t),this.code(e),t.nodes.length!==1)throw Error('CodeGen: "return" should have one node');return this._endBlockNode(Eo)}try(e,t,r){if(!t&&!r)throw Error('CodeGen: "try" without "catch" and "finally"');let s=new Lm;if(this._blockNode(s),this.code(e),t){let n=this.name("e");this._currNode=s.catch=new ko(n),t(n)}if(r)this._currNode=s.finally=new Ro,this.code(r);return this._endBlockNode(ko,Ro)}throw(e){return this._leafNode(new Mm(e))}block(e,t){if(this._blockStarts.push(this._nodes.length),e)this.code(e).endBlock(t);return this}endBlock(e){let t=this._blockStarts.pop();if(t===void 0)throw Error("CodeGen: not in self-balancing block");let r=this._nodes.length-t;if(r<0||e!==void 0&&r!==e)throw Error(`CodeGen: wrong number of nodes: ${r} vs ${e} expected`);return this._nodes.length=t,this}func(e,t=j.nil,r,s){if(this._blockNode(new Po(e,t,r)),s)this.code(s).endFunc();return this}endFunc(){return this._endBlockNode(Po)}optimize(e=1){while(e-- >0)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(e){return this._currNode.nodes.push(e),this}_blockNode(e){this._currNode.nodes.push(e),this._nodes.push(e)}_endBlockNode(e,t){let r=this._currNode;if(r instanceof e||t&&r instanceof t)return this._nodes.pop(),this;throw Error(`CodeGen: not in block "${t?`${e.kind}/${t.kind}`:e.kind}"`)}_elseNode(e){let t=this._currNode;if(!(t instanceof Ir))throw Error('CodeGen: "else" without "if"');return this._currNode=t.else=e,this}get _root(){return this._nodes[0]}get _currNode(){let e=this._nodes;return e[e.length-1]}set _currNode(e){let t=this._nodes;t[t.length-1]=e}}X.CodeGen=Hm;function Is(e,t){for(let r in t)e[r]=(e[r]||0)+(t[r]||0);return e}function Io(e,t){return t instanceof j._CodeOrName?Is(e,t.names):e}function hn(e,t,r){if(e instanceof j.Name)return s(e);if(!n(e))return e;return new j._Code(e._items.reduce((i,o)=>{if(o instanceof j.Name)o=s(o);if(o instanceof j._Code)i.push(...o._items);else i.push(o);return i},[]));function s(i){let o=r[i.str];if(o===void 0||t[i.str]!==1)return i;return delete t[i.str],o}function n(i){return i instanceof j._Code&&i._items.some((o)=>o instanceof j.Name&&t[o.str]===1&&r[o.str]!==void 0)}}function MS(e,t){for(let r in t)e[r]=(e[r]||0)-(t[r]||0)}function Km(e){return typeof e=="boolean"||typeof e=="number"||e===null?!e:j._`!${gu(e)}`}X.not=Km;var VS=Gm(X.operators.AND);function US(...e){return e.reduce(VS)}X.and=US;var zS=Gm(X.operators.OR);function FS(...e){return e.reduce(zS)}X.or=FS;function Gm(e){return(t,r)=>t===j.nil?r:r===j.nil?t:j._`${gu(t)} ${e} ${gu(r)}`}function gu(e){return e instanceof j.Name?e:j._`(${e})`}});var le=b(function(Z){Object.defineProperty(Z,"__esModule",{value:!0});Z.checkStrictMode=Z.getErrorPath=Z.Type=Z.useFunc=Z.setEvaluated=Z.evaluatedPropsToName=Z.mergeEvaluated=Z.eachItem=Z.unescapeJsonPointer=Z.escapeJsonPointer=Z.escapeFragment=Z.unescapeFragment=Z.schemaRefOrVal=Z.schemaHasRulesButRef=Z.schemaHasRules=Z.checkUnknownRules=Z.alwaysValidSchema=Z.toHash=void 0;var U=W(),Qm=li();function LS(e){let t={};for(let r of e)t[r]=!0;return t}Z.toHash=LS;function HS(e,t){if(typeof t=="boolean")return t;if(Object.keys(t).length===0)return!0;return Bm(e,t),!Xm(t,e.self.RULES.all)}Z.alwaysValidSchema=HS;function Bm(e,t=e.schema){let{opts:r,self:s}=e;if(!r.strictSchema)return;if(typeof t==="boolean")return;let n=s.RULES.keywords;for(let i in t)if(!n[i])th(e,`unknown keyword: "${i}"`)}Z.checkUnknownRules=Bm;function Xm(e,t){if(typeof e=="boolean")return!e;for(let r in e)if(t[r])return!0;return!1}Z.schemaHasRules=Xm;function KS(e,t){if(typeof e=="boolean")return!e;for(let r in e)if(r!=="$ref"&&t.all[r])return!0;return!1}Z.schemaHasRulesButRef=KS;function GS({topSchemaRef:e,schemaPath:t},r,s,n){if(!n){if(typeof r=="number"||typeof r=="boolean")return r;if(typeof r=="string")return U._`${r}`}return U._`${e}${t}${U.getProperty(s)}`}Z.schemaRefOrVal=GS;function JS(e){return Zm(decodeURIComponent(e))}Z.unescapeFragment=JS;function WS(e){return encodeURIComponent($u(e))}Z.escapeFragment=WS;function $u(e){if(typeof e=="number")return`${e}`;return e.replace(/~/g,"~0").replace(/\//g,"~1")}Z.escapeJsonPointer=$u;function Zm(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}Z.unescapeJsonPointer=Zm;function QS(e,t){if(Array.isArray(e))for(let r of e)t(r);else t(e)}Z.eachItem=QS;function Jm({mergeNames:e,mergeToName:t,mergeValues:r,resultToName:s}){return(n,i,o,a)=>{let c=o===void 0?i:o instanceof U.Name?(i instanceof U.Name?e(n,i,o):t(n,i,o),o):i instanceof U.Name?(t(n,o,i),i):r(i,o);return a===U.Name&&!(c instanceof U.Name)?s(n,c):c}}Z.mergeEvaluated={props:Jm({mergeNames:(e,t,r)=>e.if(U._`${r} !== true && ${t} !== undefined`,()=>{e.if(U._`${t} === true`,()=>e.assign(r,!0),()=>e.assign(r,U._`${r} || {}`).code(U._`Object.assign(${r}, ${t})`))}),mergeToName:(e,t,r)=>e.if(U._`${r} !== true`,()=>{if(t===!0)e.assign(r,!0);else e.assign(r,U._`${r} || {}`),_u(e,r,t)}),mergeValues:(e,t)=>e===!0?!0:{...e,...t},resultToName:Ym}),items:Jm({mergeNames:(e,t,r)=>e.if(U._`${r} !== true && ${t} !== undefined`,()=>e.assign(r,U._`${t} === true ? true : ${r} > ${t} ? ${r} : ${t}`)),mergeToName:(e,t,r)=>e.if(U._`${r} !== true`,()=>e.assign(r,t===!0?!0:U._`${r} > ${t} ? ${r} : ${t}`)),mergeValues:(e,t)=>e===!0?!0:Math.max(e,t),resultToName:(e,t)=>e.var("items",t)})};function Ym(e,t){if(t===!0)return e.var("props",!0);let r=e.var("props",U._`{}`);if(t!==void 0)_u(e,r,t);return r}Z.evaluatedPropsToName=Ym;function _u(e,t,r){Object.keys(r).forEach((s)=>e.assign(U._`${t}${U.getProperty(s)}`,!0))}Z.setEvaluated=_u;var Wm={};function BS(e,t){return e.scopeValue("func",{ref:t,code:Wm[t.code]||(Wm[t.code]=new Qm._Code(t.code))})}Z.useFunc=BS;var eh;(function(e){e[e.Num=0]="Num",e[e.Str=1]="Str"})(eh=Z.Type||(Z.Type={}));function XS(e,t,r){if(e instanceof U.Name){let s=t===eh.Num;return r?s?U._`"[" + ${e} + "]"`:U._`"['" + ${e} + "']"`:s?U._`"/" + ${e}`:U._`"/" + ${e}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return r?U.getProperty(e).toString():"/"+$u(e)}Z.getErrorPath=XS;function th(e,t,r=e.opts.strictSchema){if(!r)return;if(t=`strict mode: ${t}`,r===!0)throw Error(t);e.self.logger.warn(t)}Z.checkStrictMode=th});var Or=b(function(wu){Object.defineProperty(wu,"__esModule",{value:!0});var pe=W(),ZS={data:new pe.Name("data"),valCxt:new pe.Name("valCxt"),instancePath:new pe.Name("instancePath"),parentData:new pe.Name("parentData"),parentDataProperty:new pe.Name("parentDataProperty"),rootData:new pe.Name("rootData"),dynamicAnchors:new pe.Name("dynamicAnchors"),vErrors:new pe.Name("vErrors"),errors:new pe.Name("errors"),this:new pe.Name("this"),self:new pe.Name("self"),scope:new pe.Name("scope"),json:new pe.Name("json"),jsonPos:new pe.Name("jsonPos"),jsonLen:new pe.Name("jsonLen"),jsonPart:new pe.Name("jsonPart")};wu.default=ZS});var fi=b(function(st){Object.defineProperty(st,"__esModule",{value:!0});st.extendErrors=st.resetErrorsCount=st.reportExtraError=st.reportError=st.keyword$DataError=st.keywordError=void 0;var q=W(),ts=le(),ct=Or();st.keywordError={message:({keyword:e})=>q.str`must pass "${e}" keyword validation`};st.keyword$DataError={message:({keyword:e,schemaType:t})=>t?q.str`"${e}" keyword must be ${t} ($data)`:q.str`"${e}" keyword is invalid ($data)`};function YS(e,t=st.keywordError,r,s){let{it:n}=e,{gen:i,compositeRule:o,allErrors:a}=n,c=nh(e,t,r);if(s!==null&&s!==void 0?s:o||a)rh(i,c);else sh(n,q._`[${c}]`)}st.reportError=YS;function eP(e,t=st.keywordError,r){let{it:s}=e,{gen:n,compositeRule:i,allErrors:o}=s,a=nh(e,t,r);if(rh(n,a),!(i||o))sh(s,ct.default.vErrors)}st.reportExtraError=eP;function tP(e,t){e.assign(ct.default.errors,t),e.if(q._`${ct.default.vErrors} !== null`,()=>e.if(t,()=>e.assign(q._`${ct.default.vErrors}.length`,t),()=>e.assign(ct.default.vErrors,null)))}st.resetErrorsCount=tP;function rP({gen:e,keyword:t,schemaValue:r,data:s,errsCount:n,it:i}){if(n===void 0)throw Error("ajv implementation error");let o=e.name("err");e.forRange("i",n,ct.default.errors,(a)=>{if(e.const(o,q._`${ct.default.vErrors}[${a}]`),e.if(q._`${o}.instancePath === undefined`,()=>e.assign(q._`${o}.instancePath`,q.strConcat(ct.default.instancePath,i.errorPath))),e.assign(q._`${o}.schemaPath`,q.str`${i.errSchemaPath}/${t}`),i.opts.verbose)e.assign(q._`${o}.schema`,r),e.assign(q._`${o}.data`,s)})}st.extendErrors=rP;function rh(e,t){let r=e.const("err",t);e.if(q._`${ct.default.vErrors} === null`,()=>e.assign(ct.default.vErrors,q._`[${r}]`),q._`${ct.default.vErrors}.push(${r})`),e.code(q._`${ct.default.errors}++`)}function sh(e,t){let{gen:r,validateName:s,schemaEnv:n}=e;if(n.$async)r.throw(q._`new ${e.ValidationError}(${t})`);else r.assign(q._`${s}.errors`,t),r.return(!1)}var Os={keyword:new q.Name("keyword"),schemaPath:new q.Name("schemaPath"),params:new q.Name("params"),propertyName:new q.Name("propertyName"),message:new q.Name("message"),schema:new q.Name("schema"),parentSchema:new q.Name("parentSchema")};function nh(e,t,r){let{createErrors:s}=e.it;if(s===!1)return q._`{}`;return sP(e,t,r)}function sP(e,t,r={}){let{gen:s,it:n}=e,i=[nP(n,r),iP(e,r)];return oP(e,t,i),s.object(...i)}function nP({errorPath:e},{instancePath:t}){let r=t?q.str`${e}${ts.getErrorPath(t,ts.Type.Str)}`:e;return[ct.default.instancePath,q.strConcat(ct.default.instancePath,r)]}function iP({keyword:e,it:{errSchemaPath:t}},{schemaPath:r,parentSchema:s}){let n=s?t:q.str`${t}/${e}`;if(r)n=q.str`${n}${ts.getErrorPath(r,ts.Type.Str)}`;return[Os.schemaPath,n]}function oP(e,{params:t,message:r},s){let{keyword:n,data:i,schemaValue:o,it:a}=e,{opts:c,propertyName:u,topSchemaRef:l,schemaPath:d}=a;if(s.push([Os.keyword,n],[Os.params,typeof t=="function"?t(e):t||q._`{}`]),c.messages)s.push([Os.message,typeof r=="function"?r(e):r]);if(c.verbose)s.push([Os.schema,o],[Os.parentSchema,q._`${l}${d}`],[ct.default.data,i]);if(u)s.push([Os.propertyName,u])}});var ch=b(function(yn){Object.defineProperty(yn,"__esModule",{value:!0});yn.boolOrEmptySchema=yn.topBoolOrEmptySchema=void 0;var ih=fi(),oh=W(),aP=Or(),cP={message:"boolean schema is false"};function uP(e){let{gen:t,schema:r,validateName:s}=e;if(r===!1)ah(e,!1);else if(typeof r=="object"&&r.$async===!0)t.return(aP.default.data);else t.assign(oh._`${s}.errors`,null),t.return(!0)}yn.topBoolOrEmptySchema=uP;function lP(e,t){let{gen:r,schema:s}=e;if(s===!1)r.var(t,!1),ah(e);else r.var(t,!0)}yn.boolOrEmptySchema=lP;function ah(e,t){let{gen:r,data:s}=e;ih.reportError({gen:r,keyword:"false schema",data:s,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:e},cP,void 0,t)}});var bu=b(function(gn){Object.defineProperty(gn,"__esModule",{value:!0});gn.getRules=gn.isJSONType=void 0;var dP=["string","number","integer","boolean","null","object","array"],fP=new Set(dP);function pP(e){return typeof e=="string"&&fP.has(e)}gn.isJSONType=pP;function mP(){let e={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...e,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},e.number,e.string,e.array,e.object],post:{rules:[]},all:{},keywords:{}}}gn.getRules=mP});var Su=b(function(rs){Object.defineProperty(rs,"__esModule",{value:!0});rs.shouldUseRule=rs.shouldUseGroup=rs.schemaHasRulesForType=void 0;function hP({schema:e,self:t},r){let s=t.RULES.types[r];return s&&s!==!0&&uh(e,s)}rs.schemaHasRulesForType=hP;function uh(e,t){return t.rules.some((r)=>lh(e,r))}rs.shouldUseGroup=uh;function lh(e,t){var r;return e[t.keyword]!==void 0||((r=t.definition.implements)===null||r===void 0?void 0:r.some((s)=>e[s]!==void 0))}rs.shouldUseRule=lh});var mi=b(function(Ze){Object.defineProperty(Ze,"__esModule",{value:!0});Ze.reportTypeError=Ze.checkDataTypes=Ze.checkDataType=Ze.coerceAndCheckDataType=Ze.getJSONTypes=Ze.getSchemaTypes=Ze.DataType=void 0;var dh=bu(),fh=Su(),ph=fi(),x=W(),xo=le(),pi;(function(e){e[e.Correct=0]="Correct",e[e.Wrong=1]="Wrong"})(pi=Ze.DataType||(Ze.DataType={}));function yP(e){let t=mh(e.type);if(t.includes("null")){if(e.nullable===!1)throw Error("type: null contradicts nullable: false")}else{if(!t.length&&e.nullable!==void 0)throw Error('"nullable" cannot be used without "type"');if(e.nullable===!0)t.push("null")}return t}Ze.getSchemaTypes=yP;function mh(e){let t=Array.isArray(e)?e:e?[e]:[];if(t.every(dh.isJSONType))return t;throw Error("type must be JSONType or JSONType[]: "+t.join(","))}Ze.getJSONTypes=mh;function gP(e,t){let{gen:r,data:s,opts:n}=e,i=vP(t,n.coerceTypes),o=t.length>0&&!(i.length===0&&t.length===1&&fh.schemaHasRulesForType(e,t[0]));if(o){let a=Eu(t,s,n.strictNumbers,pi.Wrong);r.if(a,()=>{if(i.length)$P(e,t,i);else ku(e)})}return o}Ze.coerceAndCheckDataType=gP;var hh=new Set(["string","number","integer","boolean","null"]);function vP(e,t){return t?e.filter((r)=>hh.has(r)||t==="array"&&r==="array"):[]}function $P(e,t,r){let{gen:s,data:n,opts:i}=e,o=s.let("dataType",x._`typeof ${n}`),a=s.let("coerced",x._`undefined`);if(i.coerceTypes==="array")s.if(x._`${o} == 'object' && Array.isArray(${n}) && ${n}.length == 1`,()=>s.assign(n,x._`${n}[0]`).assign(o,x._`typeof ${n}`).if(Eu(t,n,i.strictNumbers),()=>s.assign(a,n)));s.if(x._`${a} !== undefined`);for(let u of r)if(hh.has(u)||u==="array"&&i.coerceTypes==="array")c(u);s.else(),ku(e),s.endIf(),s.if(x._`${a} !== undefined`,()=>{s.assign(n,a),_P(e,a)});function c(u){switch(u){case"string":s.elseIf(x._`${o} == "number" || ${o} == "boolean"`).assign(a,x._`"" + ${n}`).elseIf(x._`${n} === null`).assign(a,x._`""`);return;case"number":s.elseIf(x._`${o} == "boolean" || ${n} === null
10
+ || (${o} == "string" && ${n} && ${n} == +${n})`).assign(a,x._`+${n}`);return;case"integer":s.elseIf(x._`${o} === "boolean" || ${n} === null
11
+ || (${o} === "string" && ${n} && ${n} == +${n} && !(${n} % 1))`).assign(a,x._`+${n}`);return;case"boolean":s.elseIf(x._`${n} === "false" || ${n} === 0 || ${n} === null`).assign(a,!1).elseIf(x._`${n} === "true" || ${n} === 1`).assign(a,!0);return;case"null":s.elseIf(x._`${n} === "" || ${n} === 0 || ${n} === false`),s.assign(a,null);return;case"array":s.elseIf(x._`${o} === "string" || ${o} === "number"
12
+ || ${o} === "boolean" || ${n} === null`).assign(a,x._`[${n}]`)}}}function _P({gen:e,parentData:t,parentDataProperty:r},s){e.if(x._`${t} !== undefined`,()=>e.assign(x._`${t}[${r}]`,s))}function Pu(e,t,r,s=pi.Correct){let n=s===pi.Correct?x.operators.EQ:x.operators.NEQ,i;switch(e){case"null":return x._`${t} ${n} null`;case"array":i=x._`Array.isArray(${t})`;break;case"object":i=x._`${t} && typeof ${t} == "object" && !Array.isArray(${t})`;break;case"integer":i=o(x._`!(${t} % 1) && !isNaN(${t})`);break;case"number":i=o();break;default:return x._`typeof ${t} ${n} ${e}`}return s===pi.Correct?i:x.not(i);function o(a=x.nil){return x.and(x._`typeof ${t} == "number"`,a,r?x._`isFinite(${t})`:x.nil)}}Ze.checkDataType=Pu;function Eu(e,t,r,s){if(e.length===1)return Pu(e[0],t,r,s);let n,i=xo.toHash(e);if(i.array&&i.object){let o=x._`typeof ${t} != "object"`;n=i.null?o:x._`!${t} || ${o}`,delete i.null,delete i.array,delete i.object}else n=x.nil;if(i.number)delete i.integer;for(let o in i)n=x.and(n,Pu(o,t,r,s));return n}Ze.checkDataTypes=Eu;var wP={message:({schema:e})=>`must be ${e}`,params:({schema:e,schemaValue:t})=>typeof e=="string"?x._`{type: ${e}}`:x._`{type: ${t}}`};function ku(e){let t=bP(e);ph.reportError(t,wP)}Ze.reportTypeError=ku;function bP(e){let{gen:t,data:r,schema:s}=e,n=xo.schemaRefOrVal(e,s,"type");return{gen:t,keyword:"type",data:r,schema:s.type,schemaCode:n,schemaValue:n,parentSchema:s,params:{},it:e}}});var vh=b(function(Ao){Object.defineProperty(Ao,"__esModule",{value:!0});Ao.assignDefaults=void 0;var Tt=W(),gh=le();function SP(e,t){let{properties:r,items:s}=e.schema;if(t==="object"&&r)for(let n in r)yh(e,n,r[n].default);else if(t==="array"&&Array.isArray(s))s.forEach((n,i)=>yh(e,i,n.default))}Ao.assignDefaults=SP;function yh(e,t,r){let{gen:s,compositeRule:n,data:i,opts:o}=e;if(r===void 0)return;let a=Tt._`${i}${Tt.getProperty(t)}`;if(n){gh.checkStrictMode(e,`default is ignored for: ${a}`);return}let c=Tt._`${a} === undefined`;if(o.useDefaults==="empty")c=Tt._`${c} || ${a} === null || ${a} === ""`;s.if(c,Tt._`${a} = ${Tt.stringify(r)}`)}});var xt=b(function(Se){Object.defineProperty(Se,"__esModule",{value:!0});Se.validateUnion=Se.validateArray=Se.usePattern=Se.callValidateCode=Se.schemaProperties=Se.allSchemaProperties=Se.noPropertyInData=Se.propertyInData=Se.isOwnProperty=Se.hasPropFunc=Se.reportMissingProp=Se.checkMissingProp=Se.checkReportMissingProp=void 0;var F=W(),vn=le(),ss=Or(),$h=le();function PP(e,t){let{gen:r,data:s,it:n}=e;r.if(Iu(r,s,t,n.opts.ownProperties),()=>{e.setParams({missingProperty:F._`${t}`},!0),e.error()})}Se.checkReportMissingProp=PP;function EP({gen:e,data:t,it:{opts:r}},s,n){return F.or(...s.map((i)=>F.and(Iu(e,t,i,r.ownProperties),F._`${n} = ${i}`)))}Se.checkMissingProp=EP;function kP(e,t){e.setParams({missingProperty:t},!0),e.error()}Se.reportMissingProp=kP;function _h(e){return e.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:F._`Object.prototype.hasOwnProperty`})}Se.hasPropFunc=_h;function Ru(e,t,r){return F._`${_h(e)}.call(${t}, ${r})`}Se.isOwnProperty=Ru;function RP(e,t,r,s){let n=F._`${t}${F.getProperty(r)} !== undefined`;return s?F._`${n} && ${Ru(e,t,r)}`:n}Se.propertyInData=RP;function Iu(e,t,r,s){let n=F._`${t}${F.getProperty(r)} === undefined`;return s?F.or(n,F.not(Ru(e,t,r))):n}Se.noPropertyInData=Iu;function wh(e){return e?Object.keys(e).filter((t)=>t!=="__proto__"):[]}Se.allSchemaProperties=wh;function IP(e,t){return wh(t).filter((r)=>!vn.alwaysValidSchema(e,t[r]))}Se.schemaProperties=IP;function OP({schemaCode:e,data:t,it:{gen:r,topSchemaRef:s,schemaPath:n,errorPath:i},it:o},a,c,u){let l=u?F._`${e}, ${t}, ${s}${n}`:t,d=[[ss.default.instancePath,F.strConcat(ss.default.instancePath,i)],[ss.default.parentData,o.parentData],[ss.default.parentDataProperty,o.parentDataProperty],[ss.default.rootData,ss.default.rootData]];if(o.opts.dynamicRef)d.push([ss.default.dynamicAnchors,ss.default.dynamicAnchors]);let v=F._`${l}, ${r.object(...d)}`;return c!==F.nil?F._`${a}.call(${c}, ${v})`:F._`${a}(${v})`}Se.callValidateCode=OP;var TP=F._`new RegExp`;function xP({gen:e,it:{opts:t}},r){let s=t.unicodeRegExp?"u":"",{regExp:n}=t.code,i=n(r,s);return e.scopeValue("pattern",{key:i.toString(),ref:i,code:F._`${n.code==="new RegExp"?TP:$h.useFunc(e,n)}(${r}, ${s})`})}Se.usePattern=xP;function AP(e){let{gen:t,data:r,keyword:s,it:n}=e,i=t.name("valid");if(n.allErrors){let a=t.let("valid",!0);return o(()=>t.assign(a,!1)),a}return t.var(i,!0),o(()=>t.break()),i;function o(a){let c=t.const("len",F._`${r}.length`);t.forRange("i",0,c,(u)=>{e.subschema({keyword:s,dataProp:u,dataPropType:vn.Type.Num},i),t.if(F.not(i),a)})}}Se.validateArray=AP;function jP(e){let{gen:t,schema:r,keyword:s,it:n}=e;if(!Array.isArray(r))throw Error("ajv implementation error");if(r.some((c)=>vn.alwaysValidSchema(n,c))&&!n.opts.unevaluated)return;let o=t.let("valid",!1),a=t.name("_valid");t.block(()=>r.forEach((c,u)=>{let l=e.subschema({keyword:s,schemaProp:u,compositeRule:!0},a);if(t.assign(o,F._`${o} || ${a}`),!e.mergeValidEvaluated(l,a))t.if(F.not(o))})),e.result(o,()=>e.reset(),()=>e.error(!0))}Se.validateUnion=jP});var kh=b(function(ir){Object.defineProperty(ir,"__esModule",{value:!0});ir.validateKeywordUsage=ir.validSchemaType=ir.funcKeywordCode=ir.macroKeywordCode=void 0;var ge=W(),Ts=Or(),Sh=xt(),Ph=fi();function CP(e,t){let{gen:r,keyword:s,schema:n,parentSchema:i,it:o}=e,a=t.macro.call(o.self,n,i,o),c=Eh(r,s,a);if(o.opts.validateSchema!==!1)o.self.validateSchema(a,!0);let u=r.name("valid");e.subschema({schema:a,schemaPath:ge.nil,errSchemaPath:`${o.errSchemaPath}/${s}`,topSchemaRef:c,compositeRule:!0},u),e.pass(u,()=>e.error(!0))}ir.macroKeywordCode=CP;function NP(e,t){var r;let{gen:s,keyword:n,schema:i,parentSchema:o,$data:a,it:c}=e;DP(c,t);let u=!a&&t.compile?t.compile.call(c.self,i,o,c):t.validate,l=Eh(s,n,u),d=s.let("valid");e.block$data(d,v),e.ok((r=t.valid)!==null&&r!==void 0?r:d);function v(){if(t.errors===!1){if(p(),t.modifying)bh(e);_(()=>e.error())}else{let w=t.async?m():h();if(t.modifying)bh(e);_(()=>qP(e,w))}}function m(){let w=s.let("ruleErrs",null);return s.try(()=>p(ge._`await `),(I)=>s.assign(d,!1).if(ge._`${I} instanceof ${c.ValidationError}`,()=>s.assign(w,ge._`${I}.errors`),()=>s.throw(I))),w}function h(){let w=ge._`${l}.errors`;return s.assign(w,null),p(ge.nil),w}function p(w=t.async?ge._`await `:ge.nil){let I=c.opts.passContext?Ts.default.this:Ts.default.self,O=!(("compile"in t)&&!a||t.schema===!1);s.assign(d,ge._`${w}${Sh.callValidateCode(e,l,I,O)}`,t.modifying)}function _(w){var I;s.if(ge.not((I=t.valid)!==null&&I!==void 0?I:d),w)}}ir.funcKeywordCode=NP;function bh(e){let{gen:t,data:r,it:s}=e;t.if(s.parentData,()=>t.assign(r,ge._`${s.parentData}[${s.parentDataProperty}]`))}function qP(e,t){let{gen:r}=e;r.if(ge._`Array.isArray(${t})`,()=>{r.assign(Ts.default.vErrors,ge._`${Ts.default.vErrors} === null ? ${t} : ${Ts.default.vErrors}.concat(${t})`).assign(Ts.default.errors,ge._`${Ts.default.vErrors}.length`),Ph.extendErrors(e)},()=>e.error())}function DP({schemaEnv:e},t){if(t.async&&!e.$async)throw Error("async keyword in sync schema")}function Eh(e,t,r){if(r===void 0)throw Error(`keyword "${t}" failed to compile`);return e.scopeValue("keyword",typeof r=="function"?{ref:r}:{ref:r,code:ge.stringify(r)})}function MP(e,t,r=!1){return!t.length||t.some((s)=>s==="array"?Array.isArray(e):s==="object"?e&&typeof e=="object"&&!Array.isArray(e):typeof e==s||r&&typeof e>"u")}ir.validSchemaType=MP;function VP({schema:e,opts:t,self:r,errSchemaPath:s},n,i){if(Array.isArray(n.keyword)?!n.keyword.includes(i):n.keyword!==i)throw Error("ajv implementation error");let o=n.dependencies;if(o===null||o===void 0?void 0:o.some((a)=>!Object.prototype.hasOwnProperty.call(e,a)))throw Error(`parent schema must have dependencies of ${i}: ${o.join(",")}`);if(n.validateSchema){if(!n.validateSchema(e[i])){let c=`keyword "${i}" value is invalid at path "${s}": `+r.errorsText(n.validateSchema.errors);if(t.validateSchema==="log")r.logger.error(c);else throw Error(c)}}}ir.validateKeywordUsage=VP});var Rh=b(function(ns){Object.defineProperty(ns,"__esModule",{value:!0});ns.extendSubschemaMode=ns.extendSubschemaData=ns.getSubschema=void 0;var Je=W(),jo=le();function UP(e,{keyword:t,schemaProp:r,schema:s,schemaPath:n,errSchemaPath:i,topSchemaRef:o}){if(t!==void 0&&s!==void 0)throw Error('both "keyword" and "schema" passed, only one allowed');if(t!==void 0){let a=e.schema[t];return r===void 0?{schema:a,schemaPath:Je._`${e.schemaPath}${Je.getProperty(t)}`,errSchemaPath:`${e.errSchemaPath}/${t}`}:{schema:a[r],schemaPath:Je._`${e.schemaPath}${Je.getProperty(t)}${Je.getProperty(r)}`,errSchemaPath:`${e.errSchemaPath}/${t}/${jo.escapeFragment(r)}`}}if(s!==void 0){if(n===void 0||i===void 0||o===void 0)throw Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:s,schemaPath:n,topSchemaRef:o,errSchemaPath:i}}throw Error('either "keyword" or "schema" must be passed')}ns.getSubschema=UP;function zP(e,t,{dataProp:r,dataPropType:s,data:n,dataTypes:i,propertyName:o}){if(n!==void 0&&r!==void 0)throw Error('both "data" and "dataProp" passed, only one allowed');let{gen:a}=t;if(r!==void 0){let{errorPath:u,dataPathArr:l,opts:d}=t,v=a.let("data",Je._`${t.data}${Je.getProperty(r)}`,!0);c(v),e.errorPath=Je.str`${u}${jo.getErrorPath(r,s,d.jsPropertySyntax)}`,e.parentDataProperty=Je._`${r}`,e.dataPathArr=[...l,e.parentDataProperty]}if(n!==void 0){let u=n instanceof Je.Name?n:a.let("data",n,!0);if(c(u),o!==void 0)e.propertyName=o}if(i)e.dataTypes=i;function c(u){e.data=u,e.dataLevel=t.dataLevel+1,e.dataTypes=[],t.definedProperties=new Set,e.parentData=t.data,e.dataNames=[...t.dataNames,u]}}ns.extendSubschemaData=zP;function FP(e,{jtdDiscriminator:t,jtdMetadata:r,compositeRule:s,createErrors:n,allErrors:i}){if(s!==void 0)e.compositeRule=s;if(n!==void 0)e.createErrors=n;if(i!==void 0)e.allErrors=i;e.jtdDiscriminator=t,e.jtdMetadata=r}ns.extendSubschemaMode=FP});var hi=b(function(ht){Object.defineProperty(ht,"__esModule",{value:!0});ht.getSchemaRefs=ht.resolveUrl=ht.normalizeId=ht._getFullPath=ht.getFullPath=ht.inlineRef=void 0;var Ih=le(),LP=ei(),HP=ic(),KP=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);function GP(e,t=!0){if(typeof e=="boolean")return!0;if(t===!0)return!Ou(e);if(!t)return!1;return Oh(e)<=t}ht.inlineRef=GP;var JP=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function Ou(e){for(let t in e){if(JP.has(t))return!0;let r=e[t];if(Array.isArray(r)&&r.some(Ou))return!0;if(typeof r=="object"&&Ou(r))return!0}return!1}function Oh(e){let t=0;for(let r in e){if(r==="$ref")return 1/0;if(t++,KP.has(r))continue;if(typeof e[r]=="object")Ih.eachItem(e[r],(s)=>t+=Oh(s));if(t===1/0)return 1/0}return t}function Th(e,t="",r){if(r!==!1)t=$n(t);let s=e.parse(t);return xh(e,s)}ht.getFullPath=Th;function xh(e,t){return e.serialize(t).split("#")[0]+"#"}ht._getFullPath=xh;var WP=/#\/?$/;function $n(e){return e?e.replace(WP,""):""}ht.normalizeId=$n;function QP(e,t,r){return r=$n(r),e.resolve(t,r)}ht.resolveUrl=QP;var BP=/^[a-z_][-a-z0-9._]*$/i;function XP(e,t){if(typeof e=="boolean")return{};let{schemaId:r,uriResolver:s}=this.opts,n=$n(e[r]||t),i={"":n},o=Th(s,n,!1),a={},c=new Set;return HP(e,{allKeys:!0},(d,v,m,h)=>{if(h===void 0)return;let p=o+v,_=i[h];if(typeof d[r]=="string")_=w.call(this,d[r]);I.call(this,d.$anchor),I.call(this,d.$dynamicAnchor),i[v]=_;function w(O){let D=this.opts.uriResolver.resolve;if(O=$n(_?D(_,O):O),c.has(O))throw l(O);c.add(O);let S=this.refs[O];if(typeof S=="string")S=this.refs[S];if(typeof S=="object")u(d,S.schema,O);else if(O!==$n(p))if(O[0]==="#")u(d,a[O],O),a[O]=d;else this.refs[O]=p;return O}function I(O){if(typeof O=="string"){if(!BP.test(O))throw Error(`invalid anchor "${O}"`);w.call(this,`#${O}`)}}}),a;function u(d,v,m){if(v!==void 0&&!LP(d,v))throw l(m)}function l(d){return Error(`reference "${d}" resolves to more than one schema`)}}ht.getSchemaRefs=XP});var yi=b(function(is){Object.defineProperty(is,"__esModule",{value:!0});is.getData=is.KeywordCxt=is.validateFunctionCode=void 0;var No=ch(),Co=mi(),wn=Su(),os=mi(),Nh=vh(),ar=kh(),_n=Rh(),R=W(),H=Or(),qh=hi(),Be=le(),or=fi();function ZP(e){if(Vh(e)){if(Uh(e),Mh(e)){tE(e);return}}Dh(e,()=>No.topBoolOrEmptySchema(e))}is.validateFunctionCode=ZP;function Dh({gen:e,validateName:t,schema:r,schemaEnv:s,opts:n},i){if(n.code.es5)e.func(t,R._`${H.default.data}, ${H.default.valCxt}`,s.$async,()=>{e.code(R._`"use strict"; ${Ah(r,n)}`),eE(e,n),e.code(i)});else e.func(t,R._`${H.default.data}, ${YP(n)}`,s.$async,()=>e.code(Ah(r,n)).code(i))}function YP(e){return R._`{${H.default.instancePath}="", ${H.default.parentData}, ${H.default.parentDataProperty}, ${H.default.rootData}=${H.default.data}${e.dynamicRef?R._`, ${H.default.dynamicAnchors}={}`:R.nil}}={}`}function eE(e,t){e.if(H.default.valCxt,()=>{if(e.var(H.default.instancePath,R._`${H.default.valCxt}.${H.default.instancePath}`),e.var(H.default.parentData,R._`${H.default.valCxt}.${H.default.parentData}`),e.var(H.default.parentDataProperty,R._`${H.default.valCxt}.${H.default.parentDataProperty}`),e.var(H.default.rootData,R._`${H.default.valCxt}.${H.default.rootData}`),t.dynamicRef)e.var(H.default.dynamicAnchors,R._`${H.default.valCxt}.${H.default.dynamicAnchors}`)},()=>{if(e.var(H.default.instancePath,R._`""`),e.var(H.default.parentData,R._`undefined`),e.var(H.default.parentDataProperty,R._`undefined`),e.var(H.default.rootData,H.default.data),t.dynamicRef)e.var(H.default.dynamicAnchors,R._`{}`)})}function tE(e){let{schema:t,opts:r,gen:s}=e;Dh(e,()=>{if(r.$comment&&t.$comment)Fh(e);if(oE(e),s.let(H.default.vErrors,null),s.let(H.default.errors,0),r.unevaluated)rE(e);zh(e),uE(e)});return}function rE(e){let{gen:t,validateName:r}=e;e.evaluated=t.const("evaluated",R._`${r}.evaluated`),t.if(R._`${e.evaluated}.dynamicProps`,()=>t.assign(R._`${e.evaluated}.props`,R._`undefined`)),t.if(R._`${e.evaluated}.dynamicItems`,()=>t.assign(R._`${e.evaluated}.items`,R._`undefined`))}function Ah(e,t){let r=typeof e=="object"&&e[t.schemaId];return r&&(t.code.source||t.code.process)?R._`/*# sourceURL=${r} */`:R.nil}function sE(e,t){if(Vh(e)){if(Uh(e),Mh(e)){nE(e,t);return}}No.boolOrEmptySchema(e,t)}function Mh({schema:e,self:t}){if(typeof e=="boolean")return!e;for(let r in e)if(t.RULES.all[r])return!0;return!1}function Vh(e){return typeof e.schema!="boolean"}function nE(e,t){let{schema:r,gen:s,opts:n}=e;if(n.$comment&&r.$comment)Fh(e);aE(e),cE(e);let i=s.const("_errs",H.default.errors);zh(e,i),s.var(t,R._`${i} === ${H.default.errors}`)}function Uh(e){Be.checkUnknownRules(e),iE(e)}function zh(e,t){if(e.opts.jtd)return jh(e,[],!1,t);let r=Co.getSchemaTypes(e.schema),s=Co.coerceAndCheckDataType(e,r);jh(e,r,!s,t)}function iE(e){let{schema:t,errSchemaPath:r,opts:s,self:n}=e;if(t.$ref&&s.ignoreKeywordsWithRef&&Be.schemaHasRulesButRef(t,n.RULES))n.logger.warn(`$ref: keywords ignored in schema at path "${r}"`)}function oE(e){let{schema:t,opts:r}=e;if(t.default!==void 0&&r.useDefaults&&r.strictSchema)Be.checkStrictMode(e,"default is ignored in the schema root")}function aE(e){let t=e.schema[e.opts.schemaId];if(t)e.baseId=qh.resolveUrl(e.opts.uriResolver,e.baseId,t)}function cE(e){if(e.schema.$async&&!e.schemaEnv.$async)throw Error("async schema in sync schema")}function Fh({gen:e,schemaEnv:t,schema:r,errSchemaPath:s,opts:n}){let i=r.$comment;if(n.$comment===!0)e.code(R._`${H.default.self}.logger.log(${i})`);else if(typeof n.$comment=="function"){let o=R.str`${s}/$comment`,a=e.scopeValue("root",{ref:t.root});e.code(R._`${H.default.self}.opts.$comment(${i}, ${o}, ${a}.schema)`)}}function uE(e){let{gen:t,schemaEnv:r,validateName:s,ValidationError:n,opts:i}=e;if(r.$async)t.if(R._`${H.default.errors} === 0`,()=>t.return(H.default.data),()=>t.throw(R._`new ${n}(${H.default.vErrors})`));else{if(t.assign(R._`${s}.errors`,H.default.vErrors),i.unevaluated)lE(e);t.return(R._`${H.default.errors} === 0`)}}function lE({gen:e,evaluated:t,props:r,items:s}){if(r instanceof R.Name)e.assign(R._`${t}.props`,r);if(s instanceof R.Name)e.assign(R._`${t}.items`,s)}function jh(e,t,r,s){let{gen:n,schema:i,data:o,allErrors:a,opts:c,self:u}=e,{RULES:l}=u;if(i.$ref&&(c.ignoreKeywordsWithRef||!Be.schemaHasRulesButRef(i,l))){n.block(()=>Hh(e,"$ref",l.all.$ref.definition));return}if(!c.jtd)dE(e,t);n.block(()=>{for(let v of l.rules)d(v);d(l.post)});function d(v){if(!wn.shouldUseGroup(i,v))return;if(v.type){if(n.if(os.checkDataType(v.type,o,c.strictNumbers)),Ch(e,v),t.length===1&&t[0]===v.type&&r)n.else(),os.reportTypeError(e);n.endIf()}else Ch(e,v);if(!a)n.if(R._`${H.default.errors} === ${s||0}`)}}function Ch(e,t){let{gen:r,schema:s,opts:{useDefaults:n}}=e;if(n)Nh.assignDefaults(e,t.type);r.block(()=>{for(let i of t.rules)if(wn.shouldUseRule(s,i))Hh(e,i.keyword,i.definition,t.type)})}function dE(e,t){if(e.schemaEnv.meta||!e.opts.strictTypes)return;if(fE(e,t),!e.opts.allowUnionTypes)pE(e,t);mE(e,e.dataTypes)}function fE(e,t){if(!t.length)return;if(!e.dataTypes.length){e.dataTypes=t;return}t.forEach((r)=>{if(!Lh(e.dataTypes,r))Tu(e,`type "${r}" not allowed by context "${e.dataTypes.join(",")}"`)}),yE(e,t)}function pE(e,t){if(t.length>1&&!(t.length===2&&t.includes("null")))Tu(e,"use allowUnionTypes to allow union type keyword")}function mE(e,t){let r=e.self.RULES.all;for(let s in r){let n=r[s];if(typeof n=="object"&&wn.shouldUseRule(e.schema,n)){let{type:i}=n.definition;if(i.length&&!i.some((o)=>hE(t,o)))Tu(e,`missing type "${i.join(",")}" for keyword "${s}"`)}}}function hE(e,t){return e.includes(t)||t==="number"&&e.includes("integer")}function Lh(e,t){return e.includes(t)||t==="integer"&&e.includes("number")}function yE(e,t){let r=[];for(let s of e.dataTypes)if(Lh(t,s))r.push(s);else if(t.includes("integer")&&s==="number")r.push("integer");e.dataTypes=r}function Tu(e,t){let r=e.schemaEnv.baseId+e.errSchemaPath;t+=` at "${r}" (strictTypes)`,Be.checkStrictMode(e,t,e.opts.strictTypes)}class xu{constructor(e,t,r){if(ar.validateKeywordUsage(e,t,r),this.gen=e.gen,this.allErrors=e.allErrors,this.keyword=r,this.data=e.data,this.schema=e.schema[r],this.$data=t.$data&&e.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=Be.schemaRefOrVal(e,this.schema,r,this.$data),this.schemaType=t.schemaType,this.parentSchema=e.schema,this.params={},this.it=e,this.def=t,this.$data)this.schemaCode=e.gen.const("vSchema",Kh(this.$data,e));else if(this.schemaCode=this.schemaValue,!ar.validSchemaType(this.schema,t.schemaType,t.allowUndefined))throw Error(`${r} value must be ${JSON.stringify(t.schemaType)}`);if("code"in t?t.trackErrors:t.errors!==!1)this.errsCount=e.gen.const("_errs",H.default.errors)}result(e,t,r){this.failResult(R.not(e),t,r)}failResult(e,t,r){if(this.gen.if(e),r)r();else this.error();if(t){if(this.gen.else(),t(),this.allErrors)this.gen.endIf()}else if(this.allErrors)this.gen.endIf();else this.gen.else()}pass(e,t){this.failResult(R.not(e),void 0,t)}fail(e){if(e===void 0){if(this.error(),!this.allErrors)this.gen.if(!1);return}if(this.gen.if(e),this.error(),this.allErrors)this.gen.endIf();else this.gen.else()}fail$data(e){if(!this.$data)return this.fail(e);let{schemaCode:t}=this;this.fail(R._`${t} !== undefined && (${R.or(this.invalid$data(),e)})`)}error(e,t,r){if(t){this.setParams(t),this._error(e,r),this.setParams({});return}this._error(e,r)}_error(e,t){(e?or.reportExtraError:or.reportError)(this,this.def.error,t)}$dataError(){or.reportError(this,this.def.$dataError||or.keyword$DataError)}reset(){if(this.errsCount===void 0)throw Error('add "trackErrors" to keyword definition');or.resetErrorsCount(this.gen,this.errsCount)}ok(e){if(!this.allErrors)this.gen.if(e)}setParams(e,t){if(t)Object.assign(this.params,e);else this.params=e}block$data(e,t,r=R.nil){this.gen.block(()=>{this.check$data(e,r),t()})}check$data(e=R.nil,t=R.nil){if(!this.$data)return;let{gen:r,schemaCode:s,schemaType:n,def:i}=this;if(r.if(R.or(R._`${s} === undefined`,t)),e!==R.nil)r.assign(e,!0);if(n.length||i.validateSchema){if(r.elseIf(this.invalid$data()),this.$dataError(),e!==R.nil)r.assign(e,!1)}r.else()}invalid$data(){let{gen:e,schemaCode:t,schemaType:r,def:s,it:n}=this;return R.or(i(),o());function i(){if(r.length){if(!(t instanceof R.Name))throw Error("ajv implementation error");let a=Array.isArray(r)?r:[r];return R._`${os.checkDataTypes(a,t,n.opts.strictNumbers,os.DataType.Wrong)}`}return R.nil}function o(){if(s.validateSchema){let a=e.scopeValue("validate$data",{ref:s.validateSchema});return R._`!${a}(${t})`}return R.nil}}subschema(e,t){let r=_n.getSubschema(this.it,e);_n.extendSubschemaData(r,this.it,e),_n.extendSubschemaMode(r,e);let s={...this.it,...r,items:void 0,props:void 0};return sE(s,t),s}mergeEvaluated(e,t){let{it:r,gen:s}=this;if(!r.opts.unevaluated)return;if(r.props!==!0&&e.props!==void 0)r.props=Be.mergeEvaluated.props(s,e.props,r.props,t);if(r.items!==!0&&e.items!==void 0)r.items=Be.mergeEvaluated.items(s,e.items,r.items,t)}mergeValidEvaluated(e,t){let{it:r,gen:s}=this;if(r.opts.unevaluated&&(r.props!==!0||r.items!==!0))return s.if(t,()=>this.mergeEvaluated(e,R.Name)),!0}}is.KeywordCxt=xu;function Hh(e,t,r,s){let n=new xu(e,r,t);if("code"in r)r.code(n,s);else if(n.$data&&r.validate)ar.funcKeywordCode(n,r);else if("macro"in r)ar.macroKeywordCode(n,r);else if(r.compile||r.validate)ar.funcKeywordCode(n,r)}var gE=/^\/(?:[^~]|~0|~1)*$/,vE=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function Kh(e,{dataLevel:t,dataNames:r,dataPathArr:s}){let n,i;if(e==="")return H.default.rootData;if(e[0]==="/"){if(!gE.test(e))throw Error(`Invalid JSON-pointer: ${e}`);n=e,i=H.default.rootData}else{let u=vE.exec(e);if(!u)throw Error(`Invalid JSON-pointer: ${e}`);let l=+u[1];if(n=u[2],n==="#"){if(l>=t)throw Error(c("property/index",l));return s[t-l]}if(l>t)throw Error(c("data",l));if(i=r[t-l],!n)return i}let o=i,a=n.split("/");for(let u of a)if(u)i=R._`${i}${R.getProperty(Be.unescapeJsonPointer(u))}`,o=R._`${o} && ${i}`;return o;function c(u,l){return`Cannot access ${u} ${l} levels up, current level is ${t}`}}is.getData=Kh});var qo=b(function(Au){Object.defineProperty(Au,"__esModule",{value:!0});class Gh extends Error{constructor(e){super("validation failed");this.errors=e,this.ajv=this.validation=!0}}Au.default=Gh});var Do=b(function(ju){Object.defineProperty(ju,"__esModule",{value:!0});var bn=hi();class Jh extends Error{constructor(e,t,r,s){super(s||`can't resolve reference ${r} from id ${t}`);this.missingRef=bn.resolveUrl(e,t,r),this.missingSchema=bn.normalizeId(bn.getFullPath(e,this.missingRef))}}ju.default=Jh});var Uo=b(function(At){Object.defineProperty(At,"__esModule",{value:!0});At.resolveSchema=At.getCompilingSchema=At.resolveRef=At.compileSchema=At.SchemaEnv=void 0;var Ve=W(),$E=qo(),xs=Or(),Ue=hi(),Mo=le(),Wh=yi();class gi{constructor(e){var t;this.refs={},this.dynamicAnchors={};let r;if(typeof e.schema=="object")r=e.schema;this.schema=e.schema,this.schemaId=e.schemaId,this.root=e.root||this,this.baseId=(t=e.baseId)!==null&&t!==void 0?t:Ue.normalizeId(r===null||r===void 0?void 0:r[e.schemaId||"$id"]),this.schemaPath=e.schemaPath,this.localRefs=e.localRefs,this.meta=e.meta,this.$async=r===null||r===void 0?void 0:r.$async,this.refs={}}}At.SchemaEnv=gi;function Nu(e){let t=Qh.call(this,e);if(t)return t;let r=Ue.getFullPath(this.opts.uriResolver,e.root.baseId),{es5:s,lines:n}=this.opts.code,{ownProperties:i}=this.opts,o=new Ve.CodeGen(this.scope,{es5:s,lines:n,ownProperties:i}),a;if(e.$async)a=o.scopeValue("Error",{ref:$E.default,code:Ve._`require("ajv/dist/runtime/validation_error").default`});let c=o.scopeName("validate");e.validateName=c;let u={gen:o,allErrors:this.opts.allErrors,data:xs.default.data,parentData:xs.default.parentData,parentDataProperty:xs.default.parentDataProperty,dataNames:[xs.default.data],dataPathArr:[Ve.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:o.scopeValue("schema",this.opts.code.source===!0?{ref:e.schema,code:Ve.stringify(e.schema)}:{ref:e.schema}),validateName:c,ValidationError:a,schema:e.schema,schemaEnv:e,rootId:r,baseId:e.baseId||r,schemaPath:Ve.nil,errSchemaPath:e.schemaPath||(this.opts.jtd?"":"#"),errorPath:Ve._`""`,opts:this.opts,self:this},l;try{this._compilations.add(e),Wh.validateFunctionCode(u),o.optimize(this.opts.code.optimize);let d=o.toString();if(l=`${o.scopeRefs(xs.default.scope)}return ${d}`,this.opts.code.process)l=this.opts.code.process(l,e);let m=Function(`${xs.default.self}`,`${xs.default.scope}`,l)(this,this.scope.get());if(this.scope.value(c,{ref:m}),m.errors=null,m.schema=e.schema,m.schemaEnv=e,e.$async)m.$async=!0;if(this.opts.code.source===!0)m.source={validateName:c,validateCode:d,scopeValues:o._values};if(this.opts.unevaluated){let{props:h,items:p}=u;if(m.evaluated={props:h instanceof Ve.Name?void 0:h,items:p instanceof Ve.Name?void 0:p,dynamicProps:h instanceof Ve.Name,dynamicItems:p instanceof Ve.Name},m.source)m.source.evaluated=Ve.stringify(m.evaluated)}return e.validate=m,e}catch(d){if(delete e.validate,delete e.validateName,l)this.logger.error("Error compiling schema, function code:",l);throw d}finally{this._compilations.delete(e)}}At.compileSchema=Nu;function _E(e,t,r){var s;r=Ue.resolveUrl(this.opts.uriResolver,t,r);let n=e.refs[r];if(n)return n;let i=SE.call(this,e,r);if(i===void 0){let o=(s=e.localRefs)===null||s===void 0?void 0:s[r],{schemaId:a}=this.opts;if(o)i=new gi({schema:o,schemaId:a,root:e,baseId:t})}if(i===void 0)return;return e.refs[r]=wE.call(this,i)}At.resolveRef=_E;function wE(e){if(Ue.inlineRef(e.schema,this.opts.inlineRefs))return e.schema;return e.validate?e:Nu.call(this,e)}function Qh(e){for(let t of this._compilations)if(bE(t,e))return t}At.getCompilingSchema=Qh;function bE(e,t){return e.schema===t.schema&&e.root===t.root&&e.baseId===t.baseId}function SE(e,t){let r;while(typeof(r=this.refs[t])=="string")t=r;return r||this.schemas[t]||Vo.call(this,e,t)}function Vo(e,t){let r=this.opts.uriResolver.parse(t),s=Ue._getFullPath(this.opts.uriResolver,r),n=Ue.getFullPath(this.opts.uriResolver,e.baseId,void 0);if(Object.keys(e.schema).length>0&&s===n)return Cu.call(this,r,e);let i=Ue.normalizeId(s),o=this.refs[i]||this.schemas[i];if(typeof o=="string"){let a=Vo.call(this,e,o);if(typeof(a===null||a===void 0?void 0:a.schema)!=="object")return;return Cu.call(this,r,a)}if(typeof(o===null||o===void 0?void 0:o.schema)!=="object")return;if(!o.validate)Nu.call(this,o);if(i===Ue.normalizeId(t)){let{schema:a}=o,{schemaId:c}=this.opts,u=a[c];if(u)n=Ue.resolveUrl(this.opts.uriResolver,n,u);return new gi({schema:a,schemaId:c,root:e,baseId:n})}return Cu.call(this,r,o)}At.resolveSchema=Vo;var PE=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function Cu(e,{baseId:t,schema:r,root:s}){var n;if(((n=e.fragment)===null||n===void 0?void 0:n[0])!=="/")return;for(let a of e.fragment.slice(1).split("/")){if(typeof r==="boolean")return;let c=r[Mo.unescapeFragment(a)];if(c===void 0)return;r=c;let u=typeof r==="object"&&r[this.opts.schemaId];if(!PE.has(a)&&u)t=Ue.resolveUrl(this.opts.uriResolver,t,u)}let i;if(typeof r!="boolean"&&r.$ref&&!Mo.schemaHasRulesButRef(r,this.RULES)){let a=Ue.resolveUrl(this.opts.uriResolver,t,r.$ref);i=Vo.call(this,s,a)}let{schemaId:o}=this.opts;if(i=i||new gi({schema:r,schemaId:o,root:s,baseId:t}),i.schema!==i.root.schema)return i;return}});var Bh=b(function(CO,EE){EE.exports={$id:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description:"Meta-schema for $data reference (JSON AnySchema extension proposal)",type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1}});var Fo=b(function(zo,Xh){(function(e,t){typeof zo==="object"&&typeof Xh<"u"?t(zo):typeof define==="function"&&define.amd?define(["exports"],t):t(e.URI=e.URI||{})})(zo,function(e){function t(){for(var y=arguments.length,f=Array(y),g=0;g<y;g++)f[g]=arguments[g];if(f.length>1){f[0]=f[0].slice(0,-1);var P=f.length-1;for(var E=1;E<P;++E)f[E]=f[E].slice(1,-1);return f[P]=f[P].slice(1),f.join("")}else return f[0]}function r(y){return"(?:"+y+")"}function s(y){return y===void 0?"undefined":y===null?"null":Object.prototype.toString.call(y).split(" ").pop().split("]").shift().toLowerCase()}function n(y){return y.toUpperCase()}function i(y){return y!==void 0&&y!==null?y instanceof Array?y:typeof y.length!=="number"||y.split||y.setInterval||y.call?[y]:Array.prototype.slice.call(y):[]}function o(y,f){var g=y;if(f)for(var P in f)g[P]=f[P];return g}function a(y){var f="[A-Za-z]",g="[\\x0D]",P="[0-9]",E="[\\x22]",C=t(P,"[A-Fa-f]"),J="[\\x0A]",ae="[\\x20]",he=r(r("%[EFef]"+C+"%"+C+C+"%"+C+C)+"|"+r("%[89A-Fa-f]"+C+"%"+C+C)+"|"+r("%"+C+C)),He="[\\:\\/\\?\\#\\[\\]\\@]",se="[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]",xe=t(He,se),Ke=y?"[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]":"[]",Ie=y?"[\\uE000-\\uF8FF]":"[]",de=t(f,P,"[\\-\\.\\_\\~]",Ke),Ae=r(f+t(f,P,"[\\+\\-\\.]")+"*"),ve=r(r(he+"|"+t(de,se,"[\\:]"))+"*"),_s=r(r("25[0-5]")+"|"+r("2[0-4]"+P)+"|"+r("1"+P+P)+"|"+r("[1-9]"+P)+"|"+P),$t=r(r("25[0-5]")+"|"+r("2[0-4]"+P)+"|"+r("1"+P+P)+"|"+r("0?[1-9]"+P)+"|0?0?"+P),St=r($t+"\\."+$t+"\\."+$t+"\\."+$t),ke=r(C+"{1,4}"),_t=r(r(ke+"\\:"+ke)+"|"+St),Pt=r(r(ke+"\\:")+"{6}"+_t),Lt=r("\\:\\:"+r(ke+"\\:")+"{5}"+_t),ws=r(r(ke)+"?\\:\\:"+r(ke+"\\:")+"{4}"+_t),br=r(r(r(ke+"\\:")+"{0,1}"+ke)+"?\\:\\:"+r(ke+"\\:")+"{3}"+_t),zn=r(r(r(ke+"\\:")+"{0,2}"+ke)+"?\\:\\:"+r(ke+"\\:")+"{2}"+_t),Oi=r(r(r(ke+"\\:")+"{0,3}"+ke)+"?\\:\\:"+ke+"\\:"+_t),Ti=r(r(r(ke+"\\:")+"{0,4}"+ke)+"?\\:\\:"+_t),Ds=r(r(r(ke+"\\:")+"{0,5}"+ke)+"?\\:\\:"+ke),Ms=r(r(r(ke+"\\:")+"{0,6}"+ke)+"?\\:\\:"),Sr=r([Pt,Lt,ws,br,zn,Oi,Ti,Ds,Ms].join("|")),Vs=r(r(de+"|"+he)+"+"),Ea=r(Sr+"\\%25"+Vs),bs=r(Sr+r("\\%25|\\%(?!"+C+"{2})")+Vs),r$=r("[vV]"+C+"+\\."+t(de,se,"[\\:]")+"+"),s$=r("\\["+r(bs+"|"+Sr+"|"+r$)+"\\]"),Xl=r(r(he+"|"+t(de,se))+"*"),Fn=r(s$+"|"+St+"(?!"+Xl+")|"+Xl),Ln=r(P+"*"),Zl=r(r(ve+"@")+"?"+Fn+r("\\:"+Ln)+"?"),Hn=r(he+"|"+t(de,se,"[\\:\\@]")),n$=r(Hn+"*"),Yl=r(Hn+"+"),i$=r(r(he+"|"+t(de,se,"[\\@]"))+"+"),Pr=r(r("\\/"+n$)+"*"),Us=r("\\/"+r(Yl+Pr)+"?"),ka=r(i$+Pr),xi=r(Yl+Pr),zs="(?!"+Hn+")",AR=r(Pr+"|"+Us+"|"+ka+"|"+xi+"|"+zs),Fs=r(r(Hn+"|"+t("[\\/\\?]",Ie))+"*"),Kn=r(r(Hn+"|[\\/\\?]")+"*"),ed=r(r("\\/\\/"+Zl+Pr)+"|"+Us+"|"+xi+"|"+zs),o$=r(Ae+"\\:"+ed+r("\\?"+Fs)+"?"+r("\\#"+Kn)+"?"),a$=r(r("\\/\\/"+Zl+Pr)+"|"+Us+"|"+ka+"|"+zs),c$=r(a$+r("\\?"+Fs)+"?"+r("\\#"+Kn)+"?"),jR=r(o$+"|"+c$),CR=r(Ae+"\\:"+ed+r("\\?"+Fs)+"?"),NR="^("+Ae+")\\:"+r(r("\\/\\/("+r("("+ve+")@")+"?("+Fn+")"+r("\\:("+Ln+")")+"?)")+"?("+Pr+"|"+Us+"|"+xi+"|"+zs+")")+r("\\?("+Fs+")")+"?"+r("\\#("+Kn+")")+"?$",qR="^(){0}"+r(r("\\/\\/("+r("("+ve+")@")+"?("+Fn+")"+r("\\:("+Ln+")")+"?)")+"?("+Pr+"|"+Us+"|"+ka+"|"+zs+")")+r("\\?("+Fs+")")+"?"+r("\\#("+Kn+")")+"?$",DR="^("+Ae+")\\:"+r(r("\\/\\/("+r("("+ve+")@")+"?("+Fn+")"+r("\\:("+Ln+")")+"?)")+"?("+Pr+"|"+Us+"|"+xi+"|"+zs+")")+r("\\?("+Fs+")")+"?$",MR="^"+r("\\#("+Kn+")")+"?$",VR="^"+r("("+ve+")@")+"?("+Fn+")"+r("\\:("+Ln+")")+"?$";return{NOT_SCHEME:new RegExp(t("[^]",f,P,"[\\+\\-\\.]"),"g"),NOT_USERINFO:new RegExp(t("[^\\%\\:]",de,se),"g"),NOT_HOST:new RegExp(t("[^\\%\\[\\]\\:]",de,se),"g"),NOT_PATH:new RegExp(t("[^\\%\\/\\:\\@]",de,se),"g"),NOT_PATH_NOSCHEME:new RegExp(t("[^\\%\\/\\@]",de,se),"g"),NOT_QUERY:new RegExp(t("[^\\%]",de,se,"[\\:\\@\\/\\?]",Ie),"g"),NOT_FRAGMENT:new RegExp(t("[^\\%]",de,se,"[\\:\\@\\/\\?]"),"g"),ESCAPE:new RegExp(t("[^]",de,se),"g"),UNRESERVED:new RegExp(de,"g"),OTHER_CHARS:new RegExp(t("[^\\%]",de,xe),"g"),PCT_ENCODED:new RegExp(he,"g"),IPV4ADDRESS:new RegExp("^("+St+")$"),IPV6ADDRESS:new RegExp("^\\[?("+Sr+")"+r(r("\\%25|\\%(?!"+C+"{2})")+"("+Vs+")")+"?\\]?$")}}var c=a(!1),u=a(!0),l=function(){function y(f,g){var P=[],E=!0,C=!1,J=void 0;try{for(var ae=f[Symbol.iterator](),he;!(E=(he=ae.next()).done);E=!0)if(P.push(he.value),g&&P.length===g)break}catch(He){C=!0,J=He}finally{try{if(!E&&ae.return)ae.return()}finally{if(C)throw J}}return P}return function(f,g){if(Array.isArray(f))return f;else if(Symbol.iterator in Object(f))return y(f,g);else throw TypeError("Invalid attempt to destructure non-iterable instance")}}(),d=function(y){if(Array.isArray(y)){for(var f=0,g=Array(y.length);f<y.length;f++)g[f]=y[f];return g}else return Array.from(y)},v=2147483647,m=36,h=1,p=26,_=38,w=700,I=72,O=128,D="-",S=/^xn--/,M=/[^\0-\x7E]/,Y=/[\x2E\u3002\uFF0E\uFF61]/g,Q={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},me=m-h,re=Math.floor,Le=String.fromCharCode;function Ee(y){throw RangeError(Q[y])}function We(y,f){var g=[],P=y.length;while(P--)g[P]=f(y[P]);return g}function it(y,f){var g=y.split("@"),P="";if(g.length>1)P=g[0]+"@",y=g[1];y=y.replace(Y,".");var E=y.split("."),C=We(E,f).join(".");return P+C}function lt(y){var f=[],g=0,P=y.length;while(g<P){var E=y.charCodeAt(g++);if(E>=55296&&E<=56319&&g<P){var C=y.charCodeAt(g++);if((C&64512)==56320)f.push(((E&1023)<<10)+(C&1023)+65536);else f.push(E),g--}else f.push(E)}return f}var Nt=function(f){return String.fromCodePoint.apply(String,d(f))},qt=function(f){if(f-48<10)return f-22;if(f-65<26)return f-65;if(f-97<26)return f-97;return m},Vt=function(f,g){return f+22+75*(f<26)-((g!=0)<<5)},Tr=function(f,g,P){var E=0;f=P?re(f/w):f>>1,f+=re(f/g);for(;f>me*p>>1;E+=m)f=re(f/me);return re(E+(me+1)*f/(f+_))},Mn=function(f){var g=[],P=f.length,E=0,C=O,J=I,ae=f.lastIndexOf(D);if(ae<0)ae=0;for(var he=0;he<ae;++he){if(f.charCodeAt(he)>=128)Ee("not-basic");g.push(f.charCodeAt(he))}for(var He=ae>0?ae+1:0;He<P;){var se=E;for(var xe=1,Ke=m;;Ke+=m){if(He>=P)Ee("invalid-input");var Ie=qt(f.charCodeAt(He++));if(Ie>=m||Ie>re((v-E)/xe))Ee("overflow");E+=Ie*xe;var de=Ke<=J?h:Ke>=J+p?p:Ke-J;if(Ie<de)break;var Ae=m-de;if(xe>re(v/Ae))Ee("overflow");xe*=Ae}var ve=g.length+1;if(J=Tr(E-se,ve,se==0),re(E/ve)>v-C)Ee("overflow");C+=re(E/ve),E%=ve,g.splice(E++,0,C)}return String.fromCodePoint.apply(String,g)},Dl=function(f){var g=[];f=lt(f);var P=f.length,E=O,C=0,J=I,ae=!0,he=!1,He=void 0;try{for(var se=f[Symbol.iterator](),xe;!(ae=(xe=se.next()).done);ae=!0){var Ke=xe.value;if(Ke<128)g.push(Le(Ke))}}catch(bs){he=!0,He=bs}finally{try{if(!ae&&se.return)se.return()}finally{if(he)throw He}}var Ie=g.length,de=Ie;if(Ie)g.push(D);while(de<P){var Ae=v,ve=!0,_s=!1,$t=void 0;try{for(var St=f[Symbol.iterator](),ke;!(ve=(ke=St.next()).done);ve=!0){var _t=ke.value;if(_t>=E&&_t<Ae)Ae=_t}}catch(bs){_s=!0,$t=bs}finally{try{if(!ve&&St.return)St.return()}finally{if(_s)throw $t}}var Pt=de+1;if(Ae-E>re((v-C)/Pt))Ee("overflow");C+=(Ae-E)*Pt,E=Ae;var Lt=!0,ws=!1,br=void 0;try{for(var zn=f[Symbol.iterator](),Oi;!(Lt=(Oi=zn.next()).done);Lt=!0){var Ti=Oi.value;if(Ti<E&&++C>v)Ee("overflow");if(Ti==E){var Ds=C;for(var Ms=m;;Ms+=m){var Sr=Ms<=J?h:Ms>=J+p?p:Ms-J;if(Ds<Sr)break;var Vs=Ds-Sr,Ea=m-Sr;g.push(Le(Vt(Sr+Vs%Ea,0))),Ds=re(Vs/Ea)}g.push(Le(Vt(Ds,0))),J=Tr(C,Pt,de==Ie),C=0,++de}}}catch(bs){ws=!0,br=bs}finally{try{if(!Lt&&zn.return)zn.return()}finally{if(ws)throw br}}++C,++E}return g.join("")},Cv=function(f){return it(f,function(g){return S.test(g)?Mn(g.slice(4).toLowerCase()):g})},Nv=function(f){return it(f,function(g){return M.test(g)?"xn--"+Dl(g):g})},js={version:"2.1.0",ucs2:{decode:lt,encode:Nt},decode:Mn,encode:Dl,toASCII:Nv,toUnicode:Cv},bt={};function Ut(y){var f=y.charCodeAt(0),g=void 0;if(f<16)g="%0"+f.toString(16).toUpperCase();else if(f<128)g="%"+f.toString(16).toUpperCase();else if(f<2048)g="%"+(f>>6|192).toString(16).toUpperCase()+"%"+(f&63|128).toString(16).toUpperCase();else g="%"+(f>>12|224).toString(16).toUpperCase()+"%"+(f>>6&63|128).toString(16).toUpperCase()+"%"+(f&63|128).toString(16).toUpperCase();return g}function Cs(y){var f="",g=0,P=y.length;while(g<P){var E=parseInt(y.substr(g+1,2),16);if(E<128)f+=String.fromCharCode(E),g+=3;else if(E>=194&&E<224){if(P-g>=6){var C=parseInt(y.substr(g+4,2),16);f+=String.fromCharCode((E&31)<<6|C&63)}else f+=y.substr(g,6);g+=6}else if(E>=224){if(P-g>=9){var J=parseInt(y.substr(g+4,2),16),ae=parseInt(y.substr(g+7,2),16);f+=String.fromCharCode((E&15)<<12|(J&63)<<6|ae&63)}else f+=y.substr(g,9);g+=9}else f+=y.substr(g,3),g+=3}return f}function wa(y,f){function g(P){var E=Cs(P);return!E.match(f.UNRESERVED)?P:E}if(y.scheme)y.scheme=String(y.scheme).replace(f.PCT_ENCODED,g).toLowerCase().replace(f.NOT_SCHEME,"");if(y.userinfo!==void 0)y.userinfo=String(y.userinfo).replace(f.PCT_ENCODED,g).replace(f.NOT_USERINFO,Ut).replace(f.PCT_ENCODED,n);if(y.host!==void 0)y.host=String(y.host).replace(f.PCT_ENCODED,g).toLowerCase().replace(f.NOT_HOST,Ut).replace(f.PCT_ENCODED,n);if(y.path!==void 0)y.path=String(y.path).replace(f.PCT_ENCODED,g).replace(y.scheme?f.NOT_PATH:f.NOT_PATH_NOSCHEME,Ut).replace(f.PCT_ENCODED,n);if(y.query!==void 0)y.query=String(y.query).replace(f.PCT_ENCODED,g).replace(f.NOT_QUERY,Ut).replace(f.PCT_ENCODED,n);if(y.fragment!==void 0)y.fragment=String(y.fragment).replace(f.PCT_ENCODED,g).replace(f.NOT_FRAGMENT,Ut).replace(f.PCT_ENCODED,n);return y}function ba(y){return y.replace(/^0*(.*)/,"$1")||"0"}function Sa(y,f){var g=y.match(f.IPV4ADDRESS)||[],P=l(g,2),E=P[1];if(E)return E.split(".").map(ba).join(".");else return y}function Ml(y,f){var g=y.match(f.IPV6ADDRESS)||[],P=l(g,3),E=P[1],C=P[2];if(E){var J=E.toLowerCase().split("::").reverse(),ae=l(J,2),he=ae[0],He=ae[1],se=He?He.split(":").map(ba):[],xe=he.split(":").map(ba),Ke=f.IPV4ADDRESS.test(xe[xe.length-1]),Ie=Ke?7:8,de=xe.length-Ie,Ae=Array(Ie);for(var ve=0;ve<Ie;++ve)Ae[ve]=se[ve]||xe[de+ve]||"";if(Ke)Ae[Ie-1]=Sa(Ae[Ie-1],f);var _s=Ae.reduce(function(Pt,Lt,ws){if(!Lt||Lt==="0"){var br=Pt[Pt.length-1];if(br&&br.index+br.length===ws)br.length++;else Pt.push({index:ws,length:1})}return Pt},[]),$t=_s.sort(function(Pt,Lt){return Lt.length-Pt.length})[0],St=void 0;if($t&&$t.length>1){var ke=Ae.slice(0,$t.index),_t=Ae.slice($t.index+$t.length);St=ke.join(":")+"::"+_t.join(":")}else St=Ae.join(":");if(C)St+="%"+C;return St}else return y}var qv=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i,Dv="".match(/(){0}/)[1]===void 0;function _r(y){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},g={},P=f.iri!==!1?u:c;if(f.reference==="suffix")y=(f.scheme?f.scheme+":":"")+"//"+y;var E=y.match(qv);if(E){if(Dv){if(g.scheme=E[1],g.userinfo=E[3],g.host=E[4],g.port=parseInt(E[5],10),g.path=E[6]||"",g.query=E[7],g.fragment=E[8],isNaN(g.port))g.port=E[5]}else if(g.scheme=E[1]||void 0,g.userinfo=y.indexOf("@")!==-1?E[3]:void 0,g.host=y.indexOf("//")!==-1?E[4]:void 0,g.port=parseInt(E[5],10),g.path=E[6]||"",g.query=y.indexOf("?")!==-1?E[7]:void 0,g.fragment=y.indexOf("#")!==-1?E[8]:void 0,isNaN(g.port))g.port=y.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?E[4]:void 0;if(g.host)g.host=Ml(Sa(g.host,P),P);if(g.scheme===void 0&&g.userinfo===void 0&&g.host===void 0&&g.port===void 0&&!g.path&&g.query===void 0)g.reference="same-document";else if(g.scheme===void 0)g.reference="relative";else if(g.fragment===void 0)g.reference="absolute";else g.reference="uri";if(f.reference&&f.reference!=="suffix"&&f.reference!==g.reference)g.error=g.error||"URI is not a "+f.reference+" reference.";var C=bt[(f.scheme||g.scheme||"").toLowerCase()];if(!f.unicodeSupport&&(!C||!C.unicodeSupport)){if(g.host&&(f.domainHost||C&&C.domainHost))try{g.host=js.toASCII(g.host.replace(P.PCT_ENCODED,Cs).toLowerCase())}catch(J){g.error=g.error||"Host's domain name can not be converted to ASCII via punycode: "+J}wa(g,c)}else wa(g,P);if(C&&C.parse)C.parse(g,f)}else g.error=g.error||"URI can not be parsed.";return g}function Mv(y,f){var g=f.iri!==!1?u:c,P=[];if(y.userinfo!==void 0)P.push(y.userinfo),P.push("@");if(y.host!==void 0)P.push(Ml(Sa(String(y.host),g),g).replace(g.IPV6ADDRESS,function(E,C,J){return"["+C+(J?"%25"+J:"")+"]"}));if(typeof y.port==="number"||typeof y.port==="string")P.push(":"),P.push(String(y.port));return P.length?P.join(""):void 0}var Vl=/^\.\.?\//,Ul=/^\/\.(\/|$)/,zl=/^\/\.\.(\/|$)/,Vv=/^\/?(?:.|\n)*?(?=\/|$)/;function Ns(y){var f=[];while(y.length)if(y.match(Vl))y=y.replace(Vl,"");else if(y.match(Ul))y=y.replace(Ul,"/");else if(y.match(zl))y=y.replace(zl,"/"),f.pop();else if(y==="."||y==="..")y="";else{var g=y.match(Vv);if(g){var P=g[0];y=y.slice(P.length),f.push(P)}else throw Error("Unexpected dot segment condition")}return f.join("")}function zt(y){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},g=f.iri?u:c,P=[],E=bt[(f.scheme||y.scheme||"").toLowerCase()];if(E&&E.serialize)E.serialize(y,f);if(y.host){if(g.IPV6ADDRESS.test(y.host));else if(f.domainHost||E&&E.domainHost)try{y.host=!f.iri?js.toASCII(y.host.replace(g.PCT_ENCODED,Cs).toLowerCase()):js.toUnicode(y.host)}catch(ae){y.error=y.error||"Host's domain name can not be converted to "+(!f.iri?"ASCII":"Unicode")+" via punycode: "+ae}}if(wa(y,g),f.reference!=="suffix"&&y.scheme)P.push(y.scheme),P.push(":");var C=Mv(y,f);if(C!==void 0){if(f.reference!=="suffix")P.push("//");if(P.push(C),y.path&&y.path.charAt(0)!=="/")P.push("/")}if(y.path!==void 0){var J=y.path;if(!f.absolutePath&&(!E||!E.absolutePath))J=Ns(J);if(C===void 0)J=J.replace(/^\/\//,"/%2F");P.push(J)}if(y.query!==void 0)P.push("?"),P.push(y.query);if(y.fragment!==void 0)P.push("#"),P.push(y.fragment);return P.join("")}function Fl(y,f){var g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},P=arguments[3],E={};if(!P)y=_r(zt(y,g),g),f=_r(zt(f,g),g);if(g=g||{},!g.tolerant&&f.scheme)E.scheme=f.scheme,E.userinfo=f.userinfo,E.host=f.host,E.port=f.port,E.path=Ns(f.path||""),E.query=f.query;else{if(f.userinfo!==void 0||f.host!==void 0||f.port!==void 0)E.userinfo=f.userinfo,E.host=f.host,E.port=f.port,E.path=Ns(f.path||""),E.query=f.query;else{if(!f.path)if(E.path=y.path,f.query!==void 0)E.query=f.query;else E.query=y.query;else{if(f.path.charAt(0)==="/")E.path=Ns(f.path);else{if((y.userinfo!==void 0||y.host!==void 0||y.port!==void 0)&&!y.path)E.path="/"+f.path;else if(!y.path)E.path=f.path;else E.path=y.path.slice(0,y.path.lastIndexOf("/")+1)+f.path;E.path=Ns(E.path)}E.query=f.query}E.userinfo=y.userinfo,E.host=y.host,E.port=y.port}E.scheme=y.scheme}return E.fragment=f.fragment,E}function Uv(y,f,g){var P=o({scheme:"null"},g);return zt(Fl(_r(y,P),_r(f,P),P,!0),P)}function zv(y,f){if(typeof y==="string")y=zt(_r(y,f),f);else if(s(y)==="object")y=_r(zt(y,f),f);return y}function Fv(y,f,g){if(typeof y==="string")y=zt(_r(y,g),g);else if(s(y)==="object")y=zt(y,g);if(typeof f==="string")f=zt(_r(f,g),g);else if(s(f)==="object")f=zt(f,g);return y===f}function Lv(y,f){return y&&y.toString().replace(!f||!f.iri?c.ESCAPE:u.ESCAPE,Ut)}function wr(y,f){return y&&y.toString().replace(!f||!f.iri?c.PCT_ENCODED:u.PCT_ENCODED,Cs)}var Vn={scheme:"http",domainHost:!0,parse:function(f,g){if(!f.host)f.error=f.error||"HTTP URIs must have a host.";return f},serialize:function(f,g){var P=String(f.scheme).toLowerCase()==="https";if(f.port===(P?443:80)||f.port==="")f.port=void 0;if(!f.path)f.path="/";return f}},Ll={scheme:"https",domainHost:Vn.domainHost,parse:Vn.parse,serialize:Vn.serialize};function Hl(y){return typeof y.secure==="boolean"?y.secure:String(y.scheme).toLowerCase()==="wss"}var Un={scheme:"ws",domainHost:!0,parse:function(f,g){var P=f;return P.secure=Hl(P),P.resourceName=(P.path||"/")+(P.query?"?"+P.query:""),P.path=void 0,P.query=void 0,P},serialize:function(f,g){if(f.port===(Hl(f)?443:80)||f.port==="")f.port=void 0;if(typeof f.secure==="boolean")f.scheme=f.secure?"wss":"ws",f.secure=void 0;if(f.resourceName){var P=f.resourceName.split("?"),E=l(P,2),C=E[0],J=E[1];f.path=C&&C!=="/"?C:void 0,f.query=J,f.resourceName=void 0}return f.fragment=void 0,f}},Kl={scheme:"wss",domainHost:Un.domainHost,parse:Un.parse,serialize:Un.serialize},Hv={},Kv=!0,Gl="[A-Za-z0-9\\-\\.\\_\\~"+(Kv?"\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF":"")+"]",Ft="[0-9A-Fa-f]",Gv=r(r("%[EFef]"+Ft+"%"+Ft+Ft+"%"+Ft+Ft)+"|"+r("%[89A-Fa-f]"+Ft+"%"+Ft+Ft)+"|"+r("%"+Ft+Ft)),Jv="[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]",Wv="[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",Qv=t(Wv,"[\\\"\\\\]"),Bv="[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]",Xv=new RegExp(Gl,"g"),qs=new RegExp(Gv,"g"),Zv=new RegExp(t("[^]",Jv,"[\\.]","[\\\"]",Qv),"g"),Jl=new RegExp(t("[^]",Gl,Bv),"g"),Yv=Jl;function Pa(y){var f=Cs(y);return!f.match(Xv)?y:f}var Wl={scheme:"mailto",parse:function(f,g){var P=f,E=P.to=P.path?P.path.split(","):[];if(P.path=void 0,P.query){var C=!1,J={},ae=P.query.split("&");for(var he=0,He=ae.length;he<He;++he){var se=ae[he].split("=");switch(se[0]){case"to":var xe=se[1].split(",");for(var Ke=0,Ie=xe.length;Ke<Ie;++Ke)E.push(xe[Ke]);break;case"subject":P.subject=wr(se[1],g);break;case"body":P.body=wr(se[1],g);break;default:C=!0,J[wr(se[0],g)]=wr(se[1],g);break}}if(C)P.headers=J}P.query=void 0;for(var de=0,Ae=E.length;de<Ae;++de){var ve=E[de].split("@");if(ve[0]=wr(ve[0]),!g.unicodeSupport)try{ve[1]=js.toASCII(wr(ve[1],g).toLowerCase())}catch(_s){P.error=P.error||"Email address's domain name can not be converted to ASCII via punycode: "+_s}else ve[1]=wr(ve[1],g).toLowerCase();E[de]=ve.join("@")}return P},serialize:function(f,g){var P=f,E=i(f.to);if(E){for(var C=0,J=E.length;C<J;++C){var ae=String(E[C]),he=ae.lastIndexOf("@"),He=ae.slice(0,he).replace(qs,Pa).replace(qs,n).replace(Zv,Ut),se=ae.slice(he+1);try{se=!g.iri?js.toASCII(wr(se,g).toLowerCase()):js.toUnicode(se)}catch(de){P.error=P.error||"Email address's domain name can not be converted to "+(!g.iri?"ASCII":"Unicode")+" via punycode: "+de}E[C]=He+"@"+se}P.path=E.join(",")}var xe=f.headers=f.headers||{};if(f.subject)xe.subject=f.subject;if(f.body)xe.body=f.body;var Ke=[];for(var Ie in xe)if(xe[Ie]!==Hv[Ie])Ke.push(Ie.replace(qs,Pa).replace(qs,n).replace(Jl,Ut)+"="+xe[Ie].replace(qs,Pa).replace(qs,n).replace(Yv,Ut));if(Ke.length)P.query=Ke.join("&");return P}},e$=/^([^\:]+)\:(.*)/,Ql={scheme:"urn",parse:function(f,g){var P=f.path&&f.path.match(e$),E=f;if(P){var C=g.scheme||E.scheme||"urn",J=P[1].toLowerCase(),ae=P[2],he=C+":"+(g.nid||J),He=bt[he];if(E.nid=J,E.nss=ae,E.path=void 0,He)E=He.parse(E,g)}else E.error=E.error||"URN can not be parsed.";return E},serialize:function(f,g){var P=g.scheme||f.scheme||"urn",E=f.nid,C=P+":"+(g.nid||E),J=bt[C];if(J)f=J.serialize(f,g);var ae=f,he=f.nss;return ae.path=(E||g.nid)+":"+he,ae}},t$=/^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/,Bl={scheme:"urn:uuid",parse:function(f,g){var P=f;if(P.uuid=P.nss,P.nss=void 0,!g.tolerant&&(!P.uuid||!P.uuid.match(t$)))P.error=P.error||"UUID is not valid.";return P},serialize:function(f,g){var P=f;return P.nss=(f.uuid||"").toLowerCase(),P}};bt[Vn.scheme]=Vn,bt[Ll.scheme]=Ll,bt[Un.scheme]=Un,bt[Kl.scheme]=Kl,bt[Wl.scheme]=Wl,bt[Ql.scheme]=Ql,bt[Bl.scheme]=Bl,e.SCHEMES=bt,e.pctEncChar=Ut,e.pctDecChars=Cs,e.parse=_r,e.removeDotSegments=Ns,e.serialize=zt,e.resolveComponents=Fl,e.resolve=Uv,e.normalize=zv,e.equal=Fv,e.escapeComponent=Lv,e.unescapeComponent=wr,Object.defineProperty(e,"__esModule",{value:!0})})});var Yh=b(function(qu){Object.defineProperty(qu,"__esModule",{value:!0});var Zh=Fo();Zh.code='require("ajv/dist/runtime/uri").default';qu.default=Zh});var uy=b(function(Ye){Object.defineProperty(Ye,"__esModule",{value:!0});Ye.CodeGen=Ye.Name=Ye.nil=Ye.stringify=Ye.str=Ye._=Ye.KeywordCxt=void 0;var kE=yi();Object.defineProperty(Ye,"KeywordCxt",{enumerable:!0,get:function(){return kE.KeywordCxt}});var Pn=W();Object.defineProperty(Ye,"_",{enumerable:!0,get:function(){return Pn._}});Object.defineProperty(Ye,"str",{enumerable:!0,get:function(){return Pn.str}});Object.defineProperty(Ye,"stringify",{enumerable:!0,get:function(){return Pn.stringify}});Object.defineProperty(Ye,"nil",{enumerable:!0,get:function(){return Pn.nil}});Object.defineProperty(Ye,"Name",{enumerable:!0,get:function(){return Pn.Name}});Object.defineProperty(Ye,"CodeGen",{enumerable:!0,get:function(){return Pn.CodeGen}});var RE=qo(),ny=Do(),iy=bu(),cr=Uo(),oy=W(),ur=hi(),as=mi(),Sn=le(),ey=Bh(),IE=Yh(),ay=(e,t)=>new RegExp(e,t);ay.code="new RegExp";var OE=["removeAdditional","useDefaults","coerceTypes"],TE=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),xE={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},AE={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},ty=200;function jE(e){var t,r,s,n,i,o,a,c,u,l,d,v,m,h,p,_,w,I,O,D,S,M,Y,Q,me;let re=e.strict,Le=(t=e.code)===null||t===void 0?void 0:t.optimize,Ee=Le===!0||Le===void 0?1:Le||0,We=(s=(r=e.code)===null||r===void 0?void 0:r.regExp)!==null&&s!==void 0?s:ay,it=(n=e.uriResolver)!==null&&n!==void 0?n:IE.default;return{strictSchema:(o=(i=e.strictSchema)!==null&&i!==void 0?i:re)!==null&&o!==void 0?o:!0,strictNumbers:(c=(a=e.strictNumbers)!==null&&a!==void 0?a:re)!==null&&c!==void 0?c:!0,strictTypes:(l=(u=e.strictTypes)!==null&&u!==void 0?u:re)!==null&&l!==void 0?l:"log",strictTuples:(v=(d=e.strictTuples)!==null&&d!==void 0?d:re)!==null&&v!==void 0?v:"log",strictRequired:(h=(m=e.strictRequired)!==null&&m!==void 0?m:re)!==null&&h!==void 0?h:!1,code:e.code?{...e.code,optimize:Ee,regExp:We}:{optimize:Ee,regExp:We},loopRequired:(p=e.loopRequired)!==null&&p!==void 0?p:ty,loopEnum:(_=e.loopEnum)!==null&&_!==void 0?_:ty,meta:(w=e.meta)!==null&&w!==void 0?w:!0,messages:(I=e.messages)!==null&&I!==void 0?I:!0,inlineRefs:(O=e.inlineRefs)!==null&&O!==void 0?O:!0,schemaId:(D=e.schemaId)!==null&&D!==void 0?D:"$id",addUsedSchema:(S=e.addUsedSchema)!==null&&S!==void 0?S:!0,validateSchema:(M=e.validateSchema)!==null&&M!==void 0?M:!0,validateFormats:(Y=e.validateFormats)!==null&&Y!==void 0?Y:!0,unicodeRegExp:(Q=e.unicodeRegExp)!==null&&Q!==void 0?Q:!0,int32range:(me=e.int32range)!==null&&me!==void 0?me:!0,uriResolver:it}}class Lo{constructor(e={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,e=this.opts={...e,...jE(e)};let{es5:t,lines:r}=this.opts.code;this.scope=new oy.ValueScope({scope:{},prefixes:TE,es5:t,lines:r}),this.logger=VE(e.logger);let s=e.validateFormats;if(e.validateFormats=!1,this.RULES=iy.getRules(),ry.call(this,xE,e,"NOT SUPPORTED"),ry.call(this,AE,e,"DEPRECATED","warn"),this._metaOpts=DE.call(this),e.formats)NE.call(this);if(this._addVocabularies(),this._addDefaultMetaSchema(),e.keywords)qE.call(this,e.keywords);if(typeof e.meta=="object")this.addMetaSchema(e.meta);CE.call(this),e.validateFormats=s}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){let{$data:e,meta:t,schemaId:r}=this.opts,s=ey;if(r==="id")s={...ey},s.id=s.$id,delete s.$id;if(t&&e)this.addMetaSchema(s,s[r],!1)}defaultMeta(){let{meta:e,schemaId:t}=this.opts;return this.opts.defaultMeta=typeof e=="object"?e[t]||e:void 0}validate(e,t){let r;if(typeof e=="string"){if(r=this.getSchema(e),!r)throw Error(`no schema with key or ref "${e}"`)}else r=this.compile(e);let s=r(t);if(!("$async"in r))this.errors=r.errors;return s}compile(e,t){let r=this._addSchema(e,t);return r.validate||this._compileSchemaEnv(r)}compileAsync(e,t){if(typeof this.opts.loadSchema!="function")throw Error("options.loadSchema should be a function");let{loadSchema:r}=this.opts;return s.call(this,e,t);async function s(u,l){await n.call(this,u.$schema);let d=this._addSchema(u,l);return d.validate||i.call(this,d)}async function n(u){if(u&&!this.getSchema(u))await s.call(this,{$ref:u},!0)}async function i(u){try{return this._compileSchemaEnv(u)}catch(l){if(!(l instanceof ny.default))throw l;return o.call(this,l),await a.call(this,l.missingSchema),i.call(this,u)}}function o({missingSchema:u,missingRef:l}){if(this.refs[u])throw Error(`AnySchema ${u} is loaded but ${l} cannot be resolved`)}async function a(u){let l=await c.call(this,u);if(!this.refs[u])await n.call(this,l.$schema);if(!this.refs[u])this.addSchema(l,u,t)}async function c(u){let l=this._loading[u];if(l)return l;try{return await(this._loading[u]=r(u))}finally{delete this._loading[u]}}}addSchema(e,t,r,s=this.opts.validateSchema){if(Array.isArray(e)){for(let i of e)this.addSchema(i,void 0,r,s);return this}let n;if(typeof e==="object"){let{schemaId:i}=this.opts;if(n=e[i],n!==void 0&&typeof n!="string")throw Error(`schema ${i} must be string`)}return t=ur.normalizeId(t||n),this._checkUnique(t),this.schemas[t]=this._addSchema(e,r,t,s,!0),this}addMetaSchema(e,t,r=this.opts.validateSchema){return this.addSchema(e,t,!0,r),this}validateSchema(e,t){if(typeof e=="boolean")return!0;let r;if(r=e.$schema,r!==void 0&&typeof r!="string")throw Error("$schema must be a string");if(r=r||this.opts.defaultMeta||this.defaultMeta(),!r)return this.logger.warn("meta-schema not available"),this.errors=null,!0;let s=this.validate(r,e);if(!s&&t){let n="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(n);else throw Error(n)}return s}getSchema(e){let t;while(typeof(t=sy.call(this,e))=="string")e=t;if(t===void 0){let{schemaId:r}=this.opts,s=new cr.SchemaEnv({schema:{},schemaId:r});if(t=cr.resolveSchema.call(this,s,e),!t)return;this.refs[e]=t}return t.validate||this._compileSchemaEnv(t)}removeSchema(e){if(e instanceof RegExp)return this._removeAllSchemas(this.schemas,e),this._removeAllSchemas(this.refs,e),this;switch(typeof e){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{let t=sy.call(this,e);if(typeof t=="object")this._cache.delete(t.schema);return delete this.schemas[e],delete this.refs[e],this}case"object":{let t=e;this._cache.delete(t);let r=e[this.opts.schemaId];if(r)r=ur.normalizeId(r),delete this.schemas[r],delete this.refs[r];return this}default:throw Error("ajv.removeSchema: invalid parameter")}}addVocabulary(e){for(let t of e)this.addKeyword(t);return this}addKeyword(e,t){let r;if(typeof e=="string"){if(r=e,typeof t=="object")this.logger.warn("these parameters are deprecated, see docs for addKeyword"),t.keyword=r}else if(typeof e=="object"&&t===void 0){if(t=e,r=t.keyword,Array.isArray(r)&&!r.length)throw Error("addKeywords: keyword must be string or non-empty array")}else throw Error("invalid addKeywords parameters");if(zE.call(this,r,t),!t)return Sn.eachItem(r,(n)=>Du.call(this,n)),this;LE.call(this,t);let s={...t,type:as.getJSONTypes(t.type),schemaType:as.getJSONTypes(t.schemaType)};return Sn.eachItem(r,s.type.length===0?(n)=>Du.call(this,n,s):(n)=>s.type.forEach((i)=>Du.call(this,n,s,i))),this}getKeyword(e){let t=this.RULES.all[e];return typeof t=="object"?t.definition:!!t}removeKeyword(e){let{RULES:t}=this;delete t.keywords[e],delete t.all[e];for(let r of t.rules){let s=r.rules.findIndex((n)=>n.keyword===e);if(s>=0)r.rules.splice(s,1)}return this}addFormat(e,t){if(typeof t=="string")t=new RegExp(t);return this.formats[e]=t,this}errorsText(e=this.errors,{separator:t=", ",dataVar:r="data"}={}){if(!e||e.length===0)return"No errors";return e.map((s)=>`${r}${s.instancePath} ${s.message}`).reduce((s,n)=>s+t+n)}$dataMetaSchema(e,t){let r=this.RULES.all;e=JSON.parse(JSON.stringify(e));for(let s of t){let n=s.split("/").slice(1),i=e;for(let o of n)i=i[o];for(let o in r){let a=r[o];if(typeof a!="object")continue;let{$data:c}=a.definition,u=i[o];if(c&&u)i[o]=cy(u)}}return e}_removeAllSchemas(e,t){for(let r in e){let s=e[r];if(!t||t.test(r)){if(typeof s=="string")delete e[r];else if(s&&!s.meta)this._cache.delete(s.schema),delete e[r]}}}_addSchema(e,t,r,s=this.opts.validateSchema,n=this.opts.addUsedSchema){let i,{schemaId:o}=this.opts;if(typeof e=="object")i=e[o];else if(this.opts.jtd)throw Error("schema must be object");else if(typeof e!="boolean")throw Error("schema must be object or boolean");let a=this._cache.get(e);if(a!==void 0)return a;r=ur.normalizeId(i||r);let c=ur.getSchemaRefs.call(this,e,r);if(a=new cr.SchemaEnv({schema:e,schemaId:o,meta:t,baseId:r,localRefs:c}),this._cache.set(a.schema,a),n&&!r.startsWith("#")){if(r)this._checkUnique(r);this.refs[r]=a}if(s)this.validateSchema(e,!0);return a}_checkUnique(e){if(this.schemas[e]||this.refs[e])throw Error(`schema with key or id "${e}" already exists`)}_compileSchemaEnv(e){if(e.meta)this._compileMetaSchema(e);else cr.compileSchema.call(this,e);if(!e.validate)throw Error("ajv implementation error");return e.validate}_compileMetaSchema(e){let t=this.opts;this.opts=this._metaOpts;try{cr.compileSchema.call(this,e)}finally{this.opts=t}}}Ye.default=Lo;Lo.ValidationError=RE.default;Lo.MissingRefError=ny.default;function ry(e,t,r,s="error"){for(let n in e){let i=n;if(i in t)this.logger[s](`${r}: option ${n}. ${e[i]}`)}}function sy(e){return e=ur.normalizeId(e),this.schemas[e]||this.refs[e]}function CE(){let e=this.opts.schemas;if(!e)return;if(Array.isArray(e))this.addSchema(e);else for(let t in e)this.addSchema(e[t],t)}function NE(){for(let e in this.opts.formats){let t=this.opts.formats[e];if(t)this.addFormat(e,t)}}function qE(e){if(Array.isArray(e)){this.addVocabulary(e);return}this.logger.warn("keywords option as map is deprecated, pass array");for(let t in e){let r=e[t];if(!r.keyword)r.keyword=t;this.addKeyword(r)}}function DE(){let e={...this.opts};for(let t of OE)delete e[t];return e}var ME={log(){},warn(){},error(){}};function VE(e){if(e===!1)return ME;if(e===void 0)return console;if(e.log&&e.warn&&e.error)return e;throw Error("logger must implement log, warn and error methods")}var UE=/^[a-z_$][a-z0-9_$:-]*$/i;function zE(e,t){let{RULES:r}=this;if(Sn.eachItem(e,(s)=>{if(r.keywords[s])throw Error(`Keyword ${s} is already defined`);if(!UE.test(s))throw Error(`Keyword ${s} has invalid name`)}),!t)return;if(t.$data&&!(("code"in t)||("validate"in t)))throw Error('$data keyword must have "code" or "validate" function')}function Du(e,t,r){var s;let n=t===null||t===void 0?void 0:t.post;if(r&&n)throw Error('keyword with "post" flag cannot have "type"');let{RULES:i}=this,o=n?i.post:i.rules.find(({type:c})=>c===r);if(!o)o={type:r,rules:[]},i.rules.push(o);if(i.keywords[e]=!0,!t)return;let a={keyword:e,definition:{...t,type:as.getJSONTypes(t.type),schemaType:as.getJSONTypes(t.schemaType)}};if(t.before)FE.call(this,o,a,t.before);else o.rules.push(a);i.all[e]=a,(s=t.implements)===null||s===void 0||s.forEach((c)=>this.addKeyword(c))}function FE(e,t,r){let s=e.rules.findIndex((n)=>n.keyword===r);if(s>=0)e.rules.splice(s,0,t);else e.rules.push(t),this.logger.warn(`rule ${r} is not defined`)}function LE(e){let{metaSchema:t}=e;if(t===void 0)return;if(e.$data&&this.opts.$data)t=cy(t);e.validateSchema=this.compile(t,!0)}var HE={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function cy(e){return{anyOf:[e,HE]}}});var ly=b(function(Mu){Object.defineProperty(Mu,"__esModule",{value:!0});var KE={keyword:"id",code(){throw Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};Mu.default=KE});var fy=b(function(As){Object.defineProperty(As,"__esModule",{value:!0});As.callRef=As.getValidate=void 0;var GE=Do(),Ko=xt(),Pe=W(),En=Or(),Go=Uo(),cs=le(),JE={keyword:"$ref",schemaType:"string",code(e){let{gen:t,schema:r,it:s}=e,{baseId:n,schemaEnv:i,validateName:o,opts:a,self:c}=s,{root:u}=i;if((r==="#"||r==="#/")&&n===u.baseId)return d();let l=Go.resolveRef.call(c,u,n,r);if(l===void 0)throw new GE.default(s.opts.uriResolver,n,r);if(l instanceof Go.SchemaEnv)return v(l);return m(l);function d(){if(i===u)return Ho(e,o,i,i.$async);let h=t.scopeValue("root",{ref:u});return Ho(e,Pe._`${h}.validate`,u,u.$async)}function v(h){let p=dy(e,h);Ho(e,p,h,h.$async)}function m(h){let p=t.scopeValue("schema",a.code.source===!0?{ref:h,code:Pe.stringify(h)}:{ref:h}),_=t.name("valid"),w=e.subschema({schema:h,dataTypes:[],schemaPath:Pe.nil,topSchemaRef:p,errSchemaPath:r},_);e.mergeEvaluated(w),e.ok(_)}}};function dy(e,t){let{gen:r}=e;return t.validate?r.scopeValue("validate",{ref:t.validate}):Pe._`${r.scopeValue("wrapper",{ref:t})}.validate`}As.getValidate=dy;function Ho(e,t,r,s){let{gen:n,it:i}=e,{allErrors:o,schemaEnv:a,opts:c}=i,u=c.passContext?En.default.this:Pe.nil;if(s)l();else d();function l(){if(!a.$async)throw Error("async schema referenced by sync schema");let h=n.let("valid");n.try(()=>{if(n.code(Pe._`await ${Ko.callValidateCode(e,t,u)}`),m(t),!o)n.assign(h,!0)},(p)=>{if(n.if(Pe._`!(${p} instanceof ${i.ValidationError})`,()=>n.throw(p)),v(p),!o)n.assign(h,!1)}),e.ok(h)}function d(){e.result(Ko.callValidateCode(e,t,u),()=>m(t),()=>v(t))}function v(h){let p=Pe._`${h}.errors`;n.assign(En.default.vErrors,Pe._`${En.default.vErrors} === null ? ${p} : ${En.default.vErrors}.concat(${p})`),n.assign(En.default.errors,Pe._`${En.default.vErrors}.length`)}function m(h){var p;if(!i.opts.unevaluated)return;let _=(p=r===null||r===void 0?void 0:r.validate)===null||p===void 0?void 0:p.evaluated;if(i.props!==!0)if(_&&!_.dynamicProps){if(_.props!==void 0)i.props=cs.mergeEvaluated.props(n,_.props,i.props)}else{let w=n.var("props",Pe._`${h}.evaluated.props`);i.props=cs.mergeEvaluated.props(n,w,i.props,Pe.Name)}if(i.items!==!0)if(_&&!_.dynamicItems){if(_.items!==void 0)i.items=cs.mergeEvaluated.items(n,_.items,i.items)}else{let w=n.var("items",Pe._`${h}.evaluated.items`);i.items=cs.mergeEvaluated.items(n,w,i.items,Pe.Name)}}}As.callRef=Ho;As.default=JE});var py=b(function(Vu){Object.defineProperty(Vu,"__esModule",{value:!0});var WE=ly(),QE=fy(),BE=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",WE.default,QE.default];Vu.default=BE});var my=b(function(Uu){Object.defineProperty(Uu,"__esModule",{value:!0});var ls=W(),us=ls.operators,Jo={maximum:{okStr:"<=",ok:us.LTE,fail:us.GT},minimum:{okStr:">=",ok:us.GTE,fail:us.LT},exclusiveMaximum:{okStr:"<",ok:us.LT,fail:us.GTE},exclusiveMinimum:{okStr:">",ok:us.GT,fail:us.LTE}},XE={message:({keyword:e,schemaCode:t})=>ls.str`must be ${Jo[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>ls._`{comparison: ${Jo[e].okStr}, limit: ${t}}`},ZE={keyword:Object.keys(Jo),type:"number",schemaType:"number",$data:!0,error:XE,code(e){let{keyword:t,data:r,schemaCode:s}=e;e.fail$data(ls._`${r} ${Jo[t].fail} ${s} || isNaN(${r})`)}};Uu.default=ZE});var hy=b(function(zu){Object.defineProperty(zu,"__esModule",{value:!0});var lr=W(),YE={message:({schemaCode:e})=>lr.str`must be multiple of ${e}`,params:({schemaCode:e})=>lr._`{multipleOf: ${e}}`},e1={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:YE,code(e){let{gen:t,data:r,schemaCode:s,it:n}=e,i=n.opts.multipleOfPrecision,o=t.let("res"),a=i?lr._`Math.abs(Math.round(${o}) - ${o}) > 1e-${i}`:lr._`${o} !== parseInt(${o})`;e.fail$data(lr._`(${s} === 0 || (${o} = ${r}/${s}, ${a}))`)}};zu.default=e1});var gy=b(function(Fu){Object.defineProperty(Fu,"__esModule",{value:!0});function yy(e){let t=e.length,r=0,s=0,n;while(s<t)if(r++,n=e.charCodeAt(s++),n>=55296&&n<=56319&&s<t){if(n=e.charCodeAt(s),(n&64512)===56320)s++}return r}Fu.default=yy;yy.code='require("ajv/dist/runtime/ucs2length").default'});var $y=b(function(Lu){Object.defineProperty(Lu,"__esModule",{value:!0});var yt=W(),vy=le(),t1=gy(),r1={message({keyword:e,schemaCode:t}){return yt.str`must NOT have ${e==="maxLength"?"more":"fewer"} than ${t} characters`},params:({schemaCode:e})=>yt._`{limit: ${e}}`},s1={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:r1,code(e){let{keyword:t,data:r,schemaCode:s,it:n}=e,i=t==="maxLength"?yt.operators.GT:yt.operators.LT,o=n.opts.unicode===!1?yt._`${r}.length`:yt._`${vy.useFunc(e.gen,t1.default)}(${r})`;e.fail$data(yt._`${o} ${i} ${s}`)}};Lu.default=s1});var wy=b(function(Hu){Object.defineProperty(Hu,"__esModule",{value:!0});var _y=xt(),ds=W(),n1={message:({schemaCode:e})=>ds.str`must match pattern "${e}"`,params:({schemaCode:e})=>ds._`{pattern: ${e}}`},i1={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:n1,code(e){let{data:t,$data:r,schema:s,schemaCode:n,it:i}=e,o=i.opts.unicodeRegExp?"u":"",a=r?ds._`(new RegExp(${n}, ${o}))`:_y.usePattern(e,s);e.fail$data(ds._`!${a}.test(${t})`)}};Hu.default=i1});var by=b(function(Ku){Object.defineProperty(Ku,"__esModule",{value:!0});var dr=W(),o1={message({keyword:e,schemaCode:t}){return dr.str`must NOT have ${e==="maxProperties"?"more":"fewer"} than ${t} properties`},params:({schemaCode:e})=>dr._`{limit: ${e}}`},a1={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:o1,code(e){let{keyword:t,data:r,schemaCode:s}=e,n=t==="maxProperties"?dr.operators.GT:dr.operators.LT;e.fail$data(dr._`Object.keys(${r}).length ${n} ${s}`)}};Ku.default=a1});var Py=b(function(Gu){Object.defineProperty(Gu,"__esModule",{value:!0});var fr=xt(),pr=W(),Sy=le(),c1={message:({params:{missingProperty:e}})=>pr.str`must have required property '${e}'`,params:({params:{missingProperty:e}})=>pr._`{missingProperty: ${e}}`},u1={keyword:"required",type:"object",schemaType:"array",$data:!0,error:c1,code(e){let{gen:t,schema:r,schemaCode:s,data:n,$data:i,it:o}=e,{opts:a}=o;if(!i&&r.length===0)return;let c=r.length>=a.loopRequired;if(o.allErrors)u();else l();if(a.strictRequired){let m=e.parentSchema.properties,{definedProperties:h}=e.it;for(let p of r)if((m===null||m===void 0?void 0:m[p])===void 0&&!h.has(p)){let _=o.schemaEnv.baseId+o.errSchemaPath,w=`required property "${p}" is not defined at "${_}" (strictRequired)`;Sy.checkStrictMode(o,w,o.opts.strictRequired)}}function u(){if(c||i)e.block$data(pr.nil,d);else for(let m of r)fr.checkReportMissingProp(e,m)}function l(){let m=t.let("missing");if(c||i){let h=t.let("valid",!0);e.block$data(h,()=>v(m,h)),e.ok(h)}else t.if(fr.checkMissingProp(e,r,m)),fr.reportMissingProp(e,m),t.else()}function d(){t.forOf("prop",s,(m)=>{e.setParams({missingProperty:m}),t.if(fr.noPropertyInData(t,n,m,a.ownProperties),()=>e.error())})}function v(m,h){e.setParams({missingProperty:m}),t.forOf(m,s,()=>{t.assign(h,fr.propertyInData(t,n,m,a.ownProperties)),t.if(pr.not(h),()=>{e.error(),t.break()})},pr.nil)}}};Gu.default=u1});var Ey=b(function(Ju){Object.defineProperty(Ju,"__esModule",{value:!0});var mr=W(),l1={message({keyword:e,schemaCode:t}){return mr.str`must NOT have ${e==="maxItems"?"more":"fewer"} than ${t} items`},params:({schemaCode:e})=>mr._`{limit: ${e}}`},d1={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:l1,code(e){let{keyword:t,data:r,schemaCode:s}=e,n=t==="maxItems"?mr.operators.GT:mr.operators.LT;e.fail$data(mr._`${r}.length ${n} ${s}`)}};Ju.default=d1});var Wo=b(function(Wu){Object.defineProperty(Wu,"__esModule",{value:!0});var ky=ei();ky.code='require("ajv/dist/runtime/equal").default';Wu.default=ky});var Iy=b(function(Qu){Object.defineProperty(Qu,"__esModule",{value:!0});var kn=mi(),oe=W(),Ry=le(),f1=Wo(),p1={message:({params:{i:e,j:t}})=>oe.str`must NOT have duplicate items (items ## ${t} and ${e} are identical)`,params:({params:{i:e,j:t}})=>oe._`{i: ${e}, j: ${t}}`},m1={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:p1,code(e){let{gen:t,data:r,$data:s,schema:n,parentSchema:i,schemaCode:o,it:a}=e;if(!s&&!n)return;let c=t.let("valid"),u=i.items?kn.getSchemaTypes(i.items):[];e.block$data(c,l,oe._`${o} === false`),e.ok(c);function l(){let h=t.let("i",oe._`${r}.length`),p=t.let("j");e.setParams({i:h,j:p}),t.assign(c,!0),t.if(oe._`${h} > 1`,()=>(d()?v:m)(h,p))}function d(){return u.length>0&&!u.some((h)=>h==="object"||h==="array")}function v(h,p){let _=t.name("item"),w=kn.checkDataTypes(u,_,a.opts.strictNumbers,kn.DataType.Wrong),I=t.const("indices",oe._`{}`);t.for(oe._`;${h}--;`,()=>{if(t.let(_,oe._`${r}[${h}]`),t.if(w,oe._`continue`),u.length>1)t.if(oe._`typeof ${_} == "string"`,oe._`${_} += "_"`);t.if(oe._`typeof ${I}[${_}] == "number"`,()=>{t.assign(p,oe._`${I}[${_}]`),e.error(),t.assign(c,!1).break()}).code(oe._`${I}[${_}] = ${h}`)})}function m(h,p){let _=Ry.useFunc(t,f1.default),w=t.name("outer");t.label(w).for(oe._`;${h}--;`,()=>t.for(oe._`${p} = ${h}; ${p}--;`,()=>t.if(oe._`${_}(${r}[${h}], ${r}[${p}])`,()=>{e.error(),t.assign(c,!1).break(w)})))}}};Qu.default=m1});var Ty=b(function(Bu){Object.defineProperty(Bu,"__esModule",{value:!0});var Rn=W(),Oy=le(),h1=Wo(),y1={message:"must be equal to constant",params:({schemaCode:e})=>Rn._`{allowedValue: ${e}}`},g1={keyword:"const",$data:!0,error:y1,code(e){let{gen:t,data:r,$data:s,schemaCode:n,schema:i}=e;if(s||i&&typeof i=="object")e.fail$data(Rn._`!${Oy.useFunc(t,h1.default)}(${r}, ${n})`);else e.fail(Rn._`${i} !== ${r}`)}};Bu.default=g1});var Ay=b(function(Xu){Object.defineProperty(Xu,"__esModule",{value:!0});var hr=W(),xy=le(),v1=Wo(),$1={message:"must be equal to one of the allowed values",params:({schemaCode:e})=>hr._`{allowedValues: ${e}}`},_1={keyword:"enum",schemaType:"array",$data:!0,error:$1,code(e){let{gen:t,data:r,$data:s,schema:n,schemaCode:i,it:o}=e;if(!s&&n.length===0)throw Error("enum must have non-empty array");let a=n.length>=o.opts.loopEnum,c,u=()=>c!==null&&c!==void 0?c:c=xy.useFunc(t,v1.default),l;if(a||s)l=t.let("valid"),e.block$data(l,d);else{if(!Array.isArray(n))throw Error("ajv implementation error");let m=t.const("vSchema",i);l=hr.or(...n.map((h,p)=>v(m,p)))}e.pass(l);function d(){t.assign(l,!1),t.forOf("v",i,(m)=>t.if(hr._`${u()}(${r}, ${m})`,()=>t.assign(l,!0).break()))}function v(m,h){let p=n[h];return typeof p==="object"&&p!==null?hr._`${u()}(${r}, ${m}[${h}])`:hr._`${r} === ${p}`}}};Xu.default=_1});var jy=b(function(Zu){Object.defineProperty(Zu,"__esModule",{value:!0});var w1=my(),b1=hy(),S1=$y(),P1=wy(),E1=by(),k1=Py(),R1=Ey(),I1=Iy(),O1=Ty(),T1=Ay(),x1=[w1.default,b1.default,S1.default,P1.default,E1.default,k1.default,R1.default,I1.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},O1.default,T1.default];Zu.default=x1});var Yu=b(function(vi){Object.defineProperty(vi,"__esModule",{value:!0});vi.validateAdditionalItems=void 0;var gt=W(),In=le(),A1={message:({params:{len:e}})=>gt.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>gt._`{limit: ${e}}`},j1={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:A1,code(e){let{parentSchema:t,it:r}=e,{items:s}=t;if(!Array.isArray(s)){In.checkStrictMode(r,'"additionalItems" is ignored when "items" is not an array of schemas');return}Cy(e,s)}};function Cy(e,t){let{gen:r,schema:s,data:n,keyword:i,it:o}=e;o.items=!0;let a=r.const("len",gt._`${n}.length`);if(s===!1)e.setParams({len:t.length}),e.pass(gt._`${a} <= ${t.length}`);else if(typeof s=="object"&&!In.alwaysValidSchema(o,s)){let u=r.var("valid",gt._`${a} <= ${t.length}`);r.if(gt.not(u),()=>c(u)),e.ok(u)}function c(u){r.forRange("i",t.length,a,(l)=>{if(e.subschema({keyword:i,dataProp:l,dataPropType:In.Type.Num},u),!o.allErrors)r.if(gt.not(u),()=>r.break())})}}vi.validateAdditionalItems=Cy;vi.default=j1});var el=b(function($i){Object.defineProperty($i,"__esModule",{value:!0});$i.validateTuple=void 0;var Qo=W(),fs=le(),Ny=xt(),C1={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(e){let{schema:t,it:r}=e;if(Array.isArray(t))return qy(e,"additionalItems",t);if(r.items=!0,fs.alwaysValidSchema(r,t))return;e.ok(Ny.validateArray(e))}};function qy(e,t,r=e.schema){let{gen:s,parentSchema:n,data:i,keyword:o,it:a}=e;if(l(n),a.opts.unevaluated&&r.length&&a.items!==!0)a.items=fs.mergeEvaluated.items(s,r.length,a.items);let c=s.name("valid"),u=s.const("len",Qo._`${i}.length`);r.forEach((d,v)=>{if(fs.alwaysValidSchema(a,d))return;s.if(Qo._`${u} > ${v}`,()=>e.subschema({keyword:o,schemaProp:v,dataProp:v},c)),e.ok(c)});function l(d){let{opts:v,errSchemaPath:m}=a,h=r.length,p=h===d.minItems&&(h===d.maxItems||d[t]===!1);if(v.strictTuples&&!p){let _=`"${o}" is ${h}-tuple, but minItems or maxItems/${t} are not specified or different at path "${m}"`;fs.checkStrictMode(a,_,v.strictTuples)}}}$i.validateTuple=qy;$i.default=C1});var My=b(function(tl){Object.defineProperty(tl,"__esModule",{value:!0});var Dy=el(),N1={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:(e)=>Dy.validateTuple(e,"items")};tl.default=N1});var Fy=b(function(rl){Object.defineProperty(rl,"__esModule",{value:!0});var Bo=W(),Vy=le(),Uy=xt(),zy=Yu(),q1={message:({params:{len:e}})=>Bo.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>Bo._`{limit: ${e}}`},D1={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:q1,code(e){let{schema:t,parentSchema:r,it:s}=e,{prefixItems:n}=r;if(s.items=!0,Vy.alwaysValidSchema(s,t))return;if(n)zy.validateAdditionalItems(e,n);else e.ok(Uy.validateArray(e))}};rl.default=D1});var Ly=b(function(sl){Object.defineProperty(sl,"__esModule",{value:!0});var Te=W(),ps=le(),M1={message:({params:{min:e,max:t}})=>t===void 0?Te.str`must contain at least ${e} valid item(s)`:Te.str`must contain at least ${e} and no more than ${t} valid item(s)`,params:({params:{min:e,max:t}})=>t===void 0?Te._`{minContains: ${e}}`:Te._`{minContains: ${e}, maxContains: ${t}}`},V1={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:M1,code(e){let{gen:t,schema:r,parentSchema:s,data:n,it:i}=e,o,a,{minContains:c,maxContains:u}=s;if(i.opts.next)o=c===void 0?1:c,a=u;else o=1;let l=t.const("len",Te._`${n}.length`);if(e.setParams({min:o,max:a}),a===void 0&&o===0){ps.checkStrictMode(i,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(a!==void 0&&o>a){ps.checkStrictMode(i,'"minContains" > "maxContains" is always invalid'),e.fail();return}if(ps.alwaysValidSchema(i,r)){let p=Te._`${l} >= ${o}`;if(a!==void 0)p=Te._`${p} && ${l} <= ${a}`;e.pass(p);return}i.items=!0;let d=t.name("valid");if(a===void 0&&o===1)m(d,()=>t.if(d,()=>t.break()));else if(o===0){if(t.let(d,!0),a!==void 0)t.if(Te._`${n}.length > 0`,v)}else t.let(d,!1),v();e.result(d,()=>e.reset());function v(){let p=t.name("_valid"),_=t.let("count",0);m(p,()=>t.if(p,()=>h(_)))}function m(p,_){t.forRange("i",0,l,(w)=>{e.subschema({keyword:"contains",dataProp:w,dataPropType:ps.Type.Num,compositeRule:!0},p),_()})}function h(p){if(t.code(Te._`${p}++`),a===void 0)t.if(Te._`${p} >= ${o}`,()=>t.assign(d,!0).break());else if(t.if(Te._`${p} > ${a}`,()=>t.assign(d,!1).break()),o===1)t.assign(d,!0);else t.if(Te._`${p} >= ${o}`,()=>t.assign(d,!0))}}};sl.default=V1});var Jy=b(function(gr){Object.defineProperty(gr,"__esModule",{value:!0});gr.validateSchemaDeps=gr.validatePropertyDeps=gr.error=void 0;var On=W(),Hy=le(),yr=xt();gr.error={message:({params:{property:e,depsCount:t,deps:r}})=>On.str`must have ${t===1?"property":"properties"} ${r} when property ${e} is present`,params:({params:{property:e,depsCount:t,deps:r,missingProperty:s}})=>On._`{property: ${e},
13
+ missingProperty: ${s},
14
+ depsCount: ${t},
15
+ deps: ${r}}`};var U1={keyword:"dependencies",type:"object",schemaType:"object",error:gr.error,code(e){let[t,r]=z1(e);Ky(e,t),Gy(e,r)}};function z1({schema:e}){let t={},r={};for(let s in e){if(s==="__proto__")continue;let n=Array.isArray(e[s])?t:r;n[s]=e[s]}return[t,r]}function Ky(e,t=e.schema){let{gen:r,data:s,it:n}=e;if(Object.keys(t).length===0)return;let i=r.let("missing");for(let o in t){let a=t[o];if(a.length===0)continue;let c=yr.propertyInData(r,s,o,n.opts.ownProperties);if(e.setParams({property:o,depsCount:a.length,deps:a.join(", ")}),n.allErrors)r.if(c,()=>{for(let u of a)yr.checkReportMissingProp(e,u)});else r.if(On._`${c} && (${yr.checkMissingProp(e,a,i)})`),yr.reportMissingProp(e,i),r.else()}}gr.validatePropertyDeps=Ky;function Gy(e,t=e.schema){let{gen:r,data:s,keyword:n,it:i}=e,o=r.name("valid");for(let a in t){if(Hy.alwaysValidSchema(i,t[a]))continue;r.if(yr.propertyInData(r,s,a,i.opts.ownProperties),()=>{let c=e.subschema({keyword:n,schemaProp:a},o);e.mergeValidEvaluated(c,o)},()=>r.var(o,!0)),e.ok(o)}}gr.validateSchemaDeps=Gy;gr.default=U1});var Qy=b(function(nl){Object.defineProperty(nl,"__esModule",{value:!0});var Xo=W(),Wy=le(),F1={message:"property name must be valid",params:({params:e})=>Xo._`{propertyName: ${e.propertyName}}`},L1={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:F1,code(e){let{gen:t,schema:r,data:s,it:n}=e;if(Wy.alwaysValidSchema(n,r))return;let i=t.name("valid");t.forIn("key",s,(o)=>{e.setParams({propertyName:o}),e.subschema({keyword:"propertyNames",data:o,dataTypes:["string"],propertyName:o,compositeRule:!0},i),t.if(Xo.not(i),()=>{if(e.error(!0),!n.allErrors)t.break()})}),e.ok(i)}};nl.default=L1});var ol=b(function(il){Object.defineProperty(il,"__esModule",{value:!0});var ms=xt(),ze=W(),H1=Or(),hs=le(),K1={message:"must NOT have additional properties",params:({params:e})=>ze._`{additionalProperty: ${e.additionalProperty}}`},G1={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:K1,code(e){let{gen:t,schema:r,parentSchema:s,data:n,errsCount:i,it:o}=e;if(!i)throw Error("ajv implementation error");let{allErrors:a,opts:c}=o;if(o.props=!0,c.removeAdditional!=="all"&&hs.alwaysValidSchema(o,r))return;let u=ms.allSchemaProperties(s.properties),l=ms.allSchemaProperties(s.patternProperties);d(),e.ok(ze._`${i} === ${H1.default.errors}`);function d(){t.forIn("key",n,(_)=>{if(!u.length&&!l.length)h(_);else t.if(v(_),()=>h(_))})}function v(_){let w;if(u.length>8){let I=hs.schemaRefOrVal(o,s.properties,"properties");w=ms.isOwnProperty(t,I,_)}else if(u.length)w=ze.or(...u.map((I)=>ze._`${_} === ${I}`));else w=ze.nil;if(l.length)w=ze.or(w,...l.map((I)=>ze._`${ms.usePattern(e,I)}.test(${_})`));return ze.not(w)}function m(_){t.code(ze._`delete ${n}[${_}]`)}function h(_){if(c.removeAdditional==="all"||c.removeAdditional&&r===!1){m(_);return}if(r===!1){if(e.setParams({additionalProperty:_}),e.error(),!a)t.break();return}if(typeof r=="object"&&!hs.alwaysValidSchema(o,r)){let w=t.name("valid");if(c.removeAdditional==="failing")p(_,w,!1),t.if(ze.not(w),()=>{e.reset(),m(_)});else if(p(_,w),!a)t.if(ze.not(w),()=>t.break())}}function p(_,w,I){let O={keyword:"additionalProperties",dataProp:_,dataPropType:hs.Type.Str};if(I===!1)Object.assign(O,{compositeRule:!0,createErrors:!1,allErrors:!1});e.subschema(O,w)}}};il.default=G1});var Zy=b(function(al){Object.defineProperty(al,"__esModule",{value:!0});var Xy=yi(),Zo=xt(),Tn=le(),By=ol(),J1={keyword:"properties",type:"object",schemaType:"object",code(e){let{gen:t,schema:r,parentSchema:s,data:n,it:i}=e;if(i.opts.removeAdditional==="all"&&s.additionalProperties===void 0)By.default.code(new Xy.KeywordCxt(i,By.default,"additionalProperties"));let o=Zo.allSchemaProperties(r);for(let d of o)i.definedProperties.add(d);if(i.opts.unevaluated&&o.length&&i.props!==!0)i.props=Tn.mergeEvaluated.props(t,Tn.toHash(o),i.props);let a=o.filter((d)=>!Tn.alwaysValidSchema(i,r[d]));if(a.length===0)return;let c=t.name("valid");for(let d of a){if(u(d))l(d);else{if(t.if(Zo.propertyInData(t,n,d,i.opts.ownProperties)),l(d),!i.allErrors)t.else().var(c,!0);t.endIf()}e.it.definedProperties.add(d),e.ok(c)}function u(d){return i.opts.useDefaults&&!i.compositeRule&&r[d].default!==void 0}function l(d){e.subschema({keyword:"properties",schemaProp:d,dataProp:d},c)}}};al.default=J1});var Yy=b(function(cl){Object.defineProperty(cl,"__esModule",{value:!0});var Yo=xt(),ys=W(),ea=le(),ta=le(),W1={keyword:"patternProperties",type:"object",schemaType:"object",code(e){let{gen:t,schema:r,data:s,parentSchema:n,it:i}=e,{opts:o}=i,a=Yo.allSchemaProperties(r),c=a.filter((p)=>ea.alwaysValidSchema(i,r[p]));if(a.length===0||c.length===a.length&&(!i.opts.unevaluated||i.props===!0))return;let u=o.strictSchema&&!o.allowMatchingProperties&&n.properties,l=t.name("valid");if(i.props!==!0&&!(i.props instanceof ys.Name))i.props=ta.evaluatedPropsToName(t,i.props);let{props:d}=i;v();function v(){for(let p of a){if(u)m(p);if(i.allErrors)h(p);else t.var(l,!0),h(p),t.if(l)}}function m(p){for(let _ in u)if(new RegExp(p).test(_))ea.checkStrictMode(i,`property ${_} matches pattern ${p} (use allowMatchingProperties)`)}function h(p){t.forIn("key",s,(_)=>{t.if(ys._`${Yo.usePattern(e,p)}.test(${_})`,()=>{let w=c.includes(p);if(!w)e.subschema({keyword:"patternProperties",schemaProp:p,dataProp:_,dataPropType:ta.Type.Str},l);if(i.opts.unevaluated&&d!==!0)t.assign(ys._`${d}[${_}]`,!0);else if(!w&&!i.allErrors)t.if(ys.not(l),()=>t.break())})})}}};cl.default=W1});var tg=b(function(ul){Object.defineProperty(ul,"__esModule",{value:!0});var eg=le(),Q1={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(e){let{gen:t,schema:r,it:s}=e;if(eg.alwaysValidSchema(s,r)){e.fail();return}let n=t.name("valid");e.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},n),e.failResult(n,()=>e.reset(),()=>e.error())},error:{message:"must NOT be valid"}};ul.default=Q1});var sg=b(function(ll){Object.defineProperty(ll,"__esModule",{value:!0});var rg=xt(),B1={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:rg.validateUnion,error:{message:"must match a schema in anyOf"}};ll.default=B1});var ig=b(function(dl){Object.defineProperty(dl,"__esModule",{value:!0});var gs=W(),ng=le(),X1={message:"must match exactly one schema in oneOf",params:({params:e})=>gs._`{passingSchemas: ${e.passing}}`},Z1={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:X1,code(e){let{gen:t,schema:r,parentSchema:s,it:n}=e;if(!Array.isArray(r))throw Error("ajv implementation error");if(n.opts.discriminator&&s.discriminator)return;let i=r,o=t.let("valid",!1),a=t.let("passing",null),c=t.name("_valid");e.setParams({passing:a}),t.block(u),e.result(o,()=>e.reset(),()=>e.error(!0));function u(){i.forEach((l,d)=>{let v;if(ng.alwaysValidSchema(n,l))t.var(c,!0);else v=e.subschema({keyword:"oneOf",schemaProp:d,compositeRule:!0},c);if(d>0)t.if(gs._`${c} && ${o}`).assign(o,!1).assign(a,gs._`[${a}, ${d}]`).else();t.if(c,()=>{if(t.assign(o,!0),t.assign(a,d),v)e.mergeEvaluated(v,gs.Name)})})}}};dl.default=Z1});var ag=b(function(fl){Object.defineProperty(fl,"__esModule",{value:!0});var og=le(),Y1={keyword:"allOf",schemaType:"array",code(e){let{gen:t,schema:r,it:s}=e;if(!Array.isArray(r))throw Error("ajv implementation error");let n=t.name("valid");r.forEach((i,o)=>{if(og.alwaysValidSchema(s,i))return;let a=e.subschema({keyword:"allOf",schemaProp:o},n);e.ok(n),e.mergeEvaluated(a)})}};fl.default=Y1});var ug=b(function(pl){Object.defineProperty(pl,"__esModule",{value:!0});var vs=W(),ra=le(),ek={message:({params:e})=>vs.str`must match "${e.ifClause}" schema`,params:({params:e})=>vs._`{failingKeyword: ${e.ifClause}}`},tk={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:ek,code(e){let{gen:t,parentSchema:r,it:s}=e;if(r.then===void 0&&r.else===void 0)ra.checkStrictMode(s,'"if" without "then" and "else" is ignored');let n=cg(s,"then"),i=cg(s,"else");if(!n&&!i)return;let o=t.let("valid",!0),a=t.name("_valid");if(c(),e.reset(),n&&i){let l=t.let("ifClause");e.setParams({ifClause:l}),t.if(a,u("then",l),u("else",l))}else if(n)t.if(a,u("then"));else t.if(vs.not(a),u("else"));e.pass(o,()=>e.error(!0));function c(){let l=e.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},a);e.mergeEvaluated(l)}function u(l,d){return()=>{let v=e.subschema({keyword:l},a);if(t.assign(o,a),e.mergeValidEvaluated(v,o),d)t.assign(d,vs._`${l}`);else e.setParams({ifClause:l})}}}};function cg(e,t){let r=e.schema[t];return r!==void 0&&!ra.alwaysValidSchema(e,r)}pl.default=tk});var dg=b(function(ml){Object.defineProperty(ml,"__esModule",{value:!0});var lg=le(),rk={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:e,parentSchema:t,it:r}){if(t.if===void 0)lg.checkStrictMode(r,`"${e}" without "if" is ignored`)}};ml.default=rk});var fg=b(function(hl){Object.defineProperty(hl,"__esModule",{value:!0});var sk=Yu(),nk=My(),ik=el(),ok=Fy(),ak=Ly(),ck=Jy(),uk=Qy(),lk=ol(),dk=Zy(),fk=Yy(),pk=tg(),mk=sg(),hk=ig(),yk=ag(),gk=ug(),vk=dg();function $k(e=!1){let t=[pk.default,mk.default,hk.default,yk.default,gk.default,vk.default,uk.default,lk.default,ck.default,dk.default,fk.default];if(e)t.push(nk.default,ok.default);else t.push(sk.default,ik.default);return t.push(ak.default),t}hl.default=$k});var pg=b(function(yl){Object.defineProperty(yl,"__esModule",{value:!0});var G=W(),_k={message:({schemaCode:e})=>G.str`must match format "${e}"`,params:({schemaCode:e})=>G._`{format: ${e}}`},wk={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:_k,code(e,t){let{gen:r,data:s,$data:n,schema:i,schemaCode:o,it:a}=e,{opts:c,errSchemaPath:u,schemaEnv:l,self:d}=a;if(!c.validateFormats)return;if(n)v();else m();function v(){let h=r.scopeValue("formats",{ref:d.formats,code:c.code.formats}),p=r.const("fDef",G._`${h}[${o}]`),_=r.let("fType"),w=r.let("format");r.if(G._`typeof ${p} == "object" && !(${p} instanceof RegExp)`,()=>r.assign(_,G._`${p}.type || "string"`).assign(w,G._`${p}.validate`),()=>r.assign(_,G._`"string"`).assign(w,p)),e.fail$data(G.or(I(),O()));function I(){if(c.strictSchema===!1)return G.nil;return G._`${o} && !${w}`}function O(){let D=l.$async?G._`(${p}.async ? await ${w}(${s}) : ${w}(${s}))`:G._`${w}(${s})`,S=G._`(typeof ${w} == "function" ? ${D} : ${w}.test(${s}))`;return G._`${w} && ${w} !== true && ${_} === ${t} && !${S}`}}function m(){let h=d.formats[i];if(!h){I();return}if(h===!0)return;let[p,_,w]=O(h);if(p===t)e.pass(D());function I(){if(c.strictSchema===!1){d.logger.warn(S());return}throw Error(S());function S(){return`unknown format "${i}" ignored in schema at path "${u}"`}}function O(S){let M=S instanceof RegExp?G.regexpCode(S):c.code.formats?G._`${c.code.formats}${G.getProperty(i)}`:void 0,Y=r.scopeValue("formats",{key:i,ref:S,code:M});if(typeof S=="object"&&!(S instanceof RegExp))return[S.type||"string",S.validate,G._`${Y}.validate`];return["string",S,Y]}function D(){if(typeof h=="object"&&!(h instanceof RegExp)&&h.async){if(!l.$async)throw Error("async format in sync schema");return G._`await ${w}(${s})`}return typeof _=="function"?G._`${w}(${s})`:G._`${w}.test(${s})`}}}};yl.default=wk});var mg=b(function(gl){Object.defineProperty(gl,"__esModule",{value:!0});var bk=pg(),Sk=[bk.default];gl.default=Sk});var hg=b(function(xn){Object.defineProperty(xn,"__esModule",{value:!0});xn.contentVocabulary=xn.metadataVocabulary=void 0;xn.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];xn.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]});var yg=b(function(vl){Object.defineProperty(vl,"__esModule",{value:!0});var Pk=py(),Ek=jy(),kk=fg(),Rk=mg(),sa=hg(),Ik=[Pk.default,Ek.default,(0,kk.default)(),Rk.default,sa.metadataVocabulary,sa.contentVocabulary];vl.default=Ik});var gg=b(function(_i){Object.defineProperty(_i,"__esModule",{value:!0});_i.DiscrError=void 0;var Ok;(function(e){e.Tag="tag",e.Mapping="mapping"})(Ok=_i.DiscrError||(_i.DiscrError={}))});var $g=b(function($l){Object.defineProperty($l,"__esModule",{value:!0});var jt=W(),An=gg(),na=Uo(),vg=le(),Tk={message:({params:{discrError:e,tagName:t}})=>e===An.DiscrError.Tag?`tag "${t}" must be string`:`value of tag "${t}" must be in oneOf`,params:({params:{discrError:e,tag:t,tagName:r}})=>jt._`{error: ${e}, tag: ${r}, tagValue: ${t}}`},xk={keyword:"discriminator",type:"object",schemaType:"object",error:Tk,code(e){let{gen:t,data:r,schema:s,parentSchema:n,it:i}=e,{oneOf:o}=n;if(!i.opts.discriminator)throw Error("discriminator: requires discriminator option");let a=s.propertyName;if(typeof a!="string")throw Error("discriminator: requires propertyName");if(s.mapping)throw Error("discriminator: mapping is not supported");if(!o)throw Error("discriminator: requires oneOf keyword");let c=t.let("valid",!1),u=t.const("tag",jt._`${r}${jt.getProperty(a)}`);t.if(jt._`typeof ${u} == "string"`,()=>l(),()=>e.error(!1,{discrError:An.DiscrError.Tag,tag:u,tagName:a})),e.ok(c);function l(){let m=v();t.if(!1);for(let h in m)t.elseIf(jt._`${u} === ${h}`),t.assign(c,d(m[h]));t.else(),e.error(!1,{discrError:An.DiscrError.Mapping,tag:u,tagName:a}),t.endIf()}function d(m){let h=t.name("valid"),p=e.subschema({keyword:"oneOf",schemaProp:m},h);return e.mergeEvaluated(p,jt.Name),h}function v(){var m;let h={},p=w(n),_=!0;for(let D=0;D<o.length;D++){let S=o[D];if((S===null||S===void 0?void 0:S.$ref)&&!vg.schemaHasRulesButRef(S,i.self.RULES)){if(S=na.resolveRef.call(i.self,i.schemaEnv.root,i.baseId,S===null||S===void 0?void 0:S.$ref),S instanceof na.SchemaEnv)S=S.schema}let M=(m=S===null||S===void 0?void 0:S.properties)===null||m===void 0?void 0:m[a];if(typeof M!="object")throw Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${a}"`);_=_&&(p||w(S)),I(M,D)}if(!_)throw Error(`discriminator: "${a}" must be required`);return h;function w({required:D}){return Array.isArray(D)&&D.includes(a)}function I(D,S){if(D.const)O(D.const,S);else if(D.enum)for(let M of D.enum)O(M,S);else throw Error(`discriminator: "properties/${a}" must have "const" or "enum"`)}function O(D,S){if(typeof D!="string"||D in h)throw Error(`discriminator: "${a}" values must be unique strings`);h[D]=S}}}};$l.default=xk});var _g=b(function(bT,Ak){Ak.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}});var Sg=b(function(je,bg){Object.defineProperty(je,"__esModule",{value:!0});je.MissingRefError=je.ValidationError=je.CodeGen=je.Name=je.nil=je.stringify=je.str=je._=je.KeywordCxt=void 0;var jk=uy(),Ck=yg(),Nk=$g(),wg=_g(),qk=["/properties"],ia="http://json-schema.org/draft-07/schema";class _l extends jk.default{_addVocabularies(){if(super._addVocabularies(),Ck.default.forEach((e)=>this.addVocabulary(e)),this.opts.discriminator)this.addKeyword(Nk.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let e=this.opts.$data?this.$dataMetaSchema(wg,qk):wg;this.addMetaSchema(e,ia,!1),this.refs["http://json-schema.org/schema"]=ia}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(ia)?ia:void 0)}}bg.exports=je=_l;Object.defineProperty(je,"__esModule",{value:!0});je.default=_l;var Dk=yi();Object.defineProperty(je,"KeywordCxt",{enumerable:!0,get:function(){return Dk.KeywordCxt}});var jn=W();Object.defineProperty(je,"_",{enumerable:!0,get:function(){return jn._}});Object.defineProperty(je,"str",{enumerable:!0,get:function(){return jn.str}});Object.defineProperty(je,"stringify",{enumerable:!0,get:function(){return jn.stringify}});Object.defineProperty(je,"nil",{enumerable:!0,get:function(){return jn.nil}});Object.defineProperty(je,"Name",{enumerable:!0,get:function(){return jn.Name}});Object.defineProperty(je,"CodeGen",{enumerable:!0,get:function(){return jn.CodeGen}});var Mk=qo();Object.defineProperty(je,"ValidationError",{enumerable:!0,get:function(){return Mk.default}});var Vk=Do();Object.defineProperty(je,"MissingRefError",{enumerable:!0,get:function(){return Vk.default}})});var Eg=b(function(Cn){Object.defineProperty(Cn,"__esModule",{value:!0});Cn.formatLimitDefinition=void 0;var Pg=Sg(),Fe=W(),$s=Fe.operators,oa={formatMaximum:{okStr:"<=",ok:$s.LTE,fail:$s.GT},formatMinimum:{okStr:">=",ok:$s.GTE,fail:$s.LT},formatExclusiveMaximum:{okStr:"<",ok:$s.LT,fail:$s.GTE},formatExclusiveMinimum:{okStr:">",ok:$s.GT,fail:$s.LTE}},Uk={message:({keyword:e,schemaCode:t})=>Fe.str`should be ${oa[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>Fe._`{comparison: ${oa[e].okStr}, limit: ${t}}`};Cn.formatLimitDefinition={keyword:Object.keys(oa),type:"string",schemaType:"string",$data:!0,error:Uk,code(e){let{gen:t,data:r,schemaCode:s,keyword:n,it:i}=e,{opts:o,self:a}=i;if(!o.validateFormats)return;let c=new Pg.KeywordCxt(i,a.RULES.all.format.definition,"format");if(c.$data)u();else l();function u(){let v=t.scopeValue("formats",{ref:a.formats,code:o.code.formats}),m=t.const("fmt",Fe._`${v}[${c.schemaCode}]`);e.fail$data(Fe.or(Fe._`typeof ${m} != "object"`,Fe._`${m} instanceof RegExp`,Fe._`typeof ${m}.compare != "function"`,d(m)))}function l(){let v=c.schema,m=a.formats[v];if(!m||m===!0)return;if(typeof m!="object"||m instanceof RegExp||typeof m.compare!="function")throw Error(`"${n}": format "${v}" does not define "compare" function`);let h=t.scopeValue("formats",{key:v,ref:m,code:o.code.formats?Fe._`${o.code.formats}${Fe.getProperty(v)}`:void 0});e.fail$data(d(h))}function d(v){return Fe._`${v}.compare(${r}, ${s}) ${oa[n].fail} 0`}},dependencies:["format"]};var zk=(e)=>(e.addKeyword(Cn.formatLimitDefinition),e);Cn.default=zk});var Og=b(function(wi,Ig){Object.defineProperty(wi,"__esModule",{value:!0});var Ct=Om(),Fk=Eg(),Nn=W(),kg=new Nn.Name("fullFormats"),Lk=new Nn.Name("fastFormats"),wl=(e,t={keywords:!0})=>{if(Array.isArray(t))return Rg(e,t,Ct.fullFormats,kg),e;let[r,s]=t.mode==="fast"?[Ct.fastFormats,Lk]:[Ct.fullFormats,kg],n=t.formats||Ct.formatNames;if(Rg(e,n,r,s),t.keywords)Fk.default(e);return e};wl.get=(e,t="full")=>{let s=(t==="fast"?Ct.fastFormats:Ct.fullFormats)[e];if(!s)throw Error(`Unknown format "${e}"`);return s};function Rg(e,t,r,s){var n,i;(n=(i=e.opts.code).formats)!==null&&n!==void 0||(i.formats=Nn._`require("ajv-formats/dist/formats").${s}`);for(let o of t)e.addFormat(o,r[o])}Ig.exports=wi=wl;Object.defineProperty(wi,"__esModule",{value:!0});wi.default=wl});var xg=b(function(Tg,aa){(function(e,t){if(typeof aa==="object"&&aa.exports)aa.exports=t();else e.nearley=t()})(Tg,function(){function e(c,u,l){return this.id=++e.highestId,this.name=c,this.symbols=u,this.postprocess=l,this}e.highestId=0,e.prototype.toString=function(c){var u=typeof c>"u"?this.symbols.map(a).join(" "):this.symbols.slice(0,c).map(a).join(" ")+" ● "+this.symbols.slice(c).map(a).join(" ");return this.name+" → "+u};function t(c,u,l,d){this.rule=c,this.dot=u,this.reference=l,this.data=[],this.wantedBy=d,this.isComplete=this.dot===c.symbols.length}t.prototype.toString=function(){return"{"+this.rule.toString(this.dot)+"}, from: "+(this.reference||0)},t.prototype.nextState=function(c){var u=new t(this.rule,this.dot+1,this.reference,this.wantedBy);if(u.left=this,u.right=c,u.isComplete)u.data=u.build(),u.right=void 0;return u},t.prototype.build=function(){var c=[],u=this;do c.push(u.right.data),u=u.left;while(u.left);return c.reverse(),c},t.prototype.finish=function(){if(this.rule.postprocess)this.data=this.rule.postprocess(this.data,this.reference,i.fail)};function r(c,u){this.grammar=c,this.index=u,this.states=[],this.wants={},this.scannable=[],this.completed={}}r.prototype.process=function(c){var u=this.states,l=this.wants,d=this.completed;for(var v=0;v<u.length;v++){var m=u[v];if(m.isComplete){if(m.finish(),m.data!==i.fail){var h=m.wantedBy;for(var p=h.length;p--;){var _=h[p];this.complete(_,m)}if(m.reference===this.index){var w=m.rule.name;(this.completed[w]=this.completed[w]||[]).push(m)}}}else{var w=m.rule.symbols[m.dot];if(typeof w!=="string"){this.scannable.push(m);continue}if(l[w]){if(l[w].push(m),d.hasOwnProperty(w)){var I=d[w];for(var p=0;p<I.length;p++){var O=I[p];this.complete(m,O)}}}else l[w]=[m],this.predict(w)}}},r.prototype.predict=function(c){var u=this.grammar.byName[c]||[];for(var l=0;l<u.length;l++){var d=u[l],v=this.wants[c],m=new t(d,0,this.index,v);this.states.push(m)}},r.prototype.complete=function(c,u){var l=c.nextState(u);this.states.push(l)};function s(c,u){this.rules=c,this.start=u||this.rules[0].name;var l=this.byName={};this.rules.forEach(function(d){if(!l.hasOwnProperty(d.name))l[d.name]=[];l[d.name].push(d)})}s.fromCompiled=function(d,u){var l=d.Lexer;if(d.ParserStart)u=d.ParserStart,d=d.ParserRules;var d=d.map(function(m){return new e(m.name,m.symbols,m.postprocess)}),v=new s(d,u);return v.lexer=l,v};function n(){this.reset("")}n.prototype.reset=function(c,u){this.buffer=c,this.index=0,this.line=u?u.line:1,this.lastLineBreak=u?-u.col:0},n.prototype.next=function(){if(this.index<this.buffer.length){var c=this.buffer[this.index++];if(c===`
16
+ `)this.line+=1,this.lastLineBreak=this.index;return{value:c}}},n.prototype.save=function(){return{line:this.line,col:this.index-this.lastLineBreak}},n.prototype.formatError=function(c,u){var l=this.buffer;if(typeof l==="string"){var d=l.split(`
17
+ `).slice(Math.max(0,this.line-5),this.line),v=l.indexOf(`
18
+ `,this.index);if(v===-1)v=l.length;var m=this.index-this.lastLineBreak,h=String(this.line).length;return u+=" at line "+this.line+" col "+m+`:
17
19
 
18
- //# debugId=1DFFF494E87E2AF364756E2164756E21
19
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjMvaW5kZXgubWpzIiwgIi4uL2FjdGl2aXR5LXN0cmVhbXMvc3JjL2FjdGl2aXR5LXN0cmVhbXMudHMiLCAic3JjL3NvY2tldGh1Yi1jbGllbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAsIHByZWZpeCA9ICd+JztcblxuLyoqXG4gKiBDb25zdHJ1Y3RvciB0byBjcmVhdGUgYSBzdG9yYWdlIGZvciBvdXIgYEVFYCBvYmplY3RzLlxuICogQW4gYEV2ZW50c2AgaW5zdGFuY2UgaXMgYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFdmVudHMoKSB7fVxuXG4vL1xuLy8gV2UgdHJ5IHRvIG5vdCBpbmhlcml0IGZyb20gYE9iamVjdC5wcm90b3R5cGVgLiBJbiBzb21lIGVuZ2luZXMgY3JlYXRpbmcgYW5cbi8vIGluc3RhbmNlIGluIHRoaXMgd2F5IGlzIGZhc3RlciB0aGFuIGNhbGxpbmcgYE9iamVjdC5jcmVhdGUobnVsbClgIGRpcmVjdGx5LlxuLy8gSWYgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIG5vdCBzdXBwb3J0ZWQgd2UgcHJlZml4IHRoZSBldmVudCBuYW1lcyB3aXRoIGFcbi8vIGNoYXJhY3RlciB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbHQtaW4gb2JqZWN0IHByb3BlcnRpZXMgYXJlIG5vdFxuLy8gb3ZlcnJpZGRlbiBvciB1c2VkIGFzIGFuIGF0dGFjayB2ZWN0b3IuXG4vL1xuaWYgKE9iamVjdC5jcmVhdGUpIHtcbiAgRXZlbnRzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgLy9cbiAgLy8gVGhpcyBoYWNrIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBgX19wcm90b19fYCBwcm9wZXJ0eSBpcyBzdGlsbCBpbmhlcml0ZWQgaW5cbiAgLy8gc29tZSBvbGQgYnJvd3NlcnMgbGlrZSBBbmRyb2lkIDQsIGlQaG9uZSA1LjEsIE9wZXJhIDExIGFuZCBTYWZhcmkgNS5cbiAgLy9cbiAgaWYgKCFuZXcgRXZlbnRzKCkuX19wcm90b19fKSBwcmVmaXggPSBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRhdGlvbiBvZiBhIHNpbmdsZSBldmVudCBsaXN0ZW5lci5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHBhcmFtIHtCb29sZWFufSBbb25jZT1mYWxzZV0gU3BlY2lmeSBpZiB0aGUgbGlzdGVuZXIgaXMgYSBvbmUtdGltZSBsaXN0ZW5lci5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBlbWl0dGVyIFJlZmVyZW5jZSB0byB0aGUgYEV2ZW50RW1pdHRlcmAgaW5zdGFuY2UuXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIFNwZWNpZnkgaWYgdGhlIGxpc3RlbmVyIGlzIGEgb25lLXRpbWUgbGlzdGVuZXIuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYWRkTGlzdGVuZXIoZW1pdHRlciwgZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgZW1pdHRlciwgb25jZSlcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCFlbWl0dGVyLl9ldmVudHNbZXZ0XSkgZW1pdHRlci5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lciwgZW1pdHRlci5fZXZlbnRzQ291bnQrKztcbiAgZWxzZSBpZiAoIWVtaXR0ZXIuX2V2ZW50c1tldnRdLmZuKSBlbWl0dGVyLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZ0XSA9IFtlbWl0dGVyLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJdO1xuXG4gIHJldHVybiBlbWl0dGVyO1xufVxuXG4vKipcbiAqIENsZWFyIGV2ZW50IGJ5IG5hbWUuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldnQgVGhlIEV2ZW50IG5hbWUuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjbGVhckV2ZW50KGVtaXR0ZXIsIGV2dCkge1xuICBpZiAoLS1lbWl0dGVyLl9ldmVudHNDb3VudCA9PT0gMCkgZW1pdHRlci5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICBlbHNlIGRlbGV0ZSBlbWl0dGVyLl9ldmVudHNbZXZ0XTtcbn1cblxuLyoqXG4gKiBNaW5pbWFsIGBFdmVudEVtaXR0ZXJgIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBgRXZlbnRFbWl0dGVyYCBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG59XG5cbi8qKlxuICogUmV0dXJuIGFuIGFycmF5IGxpc3RpbmcgdGhlIGV2ZW50cyBmb3Igd2hpY2ggdGhlIGVtaXR0ZXIgaGFzIHJlZ2lzdGVyZWRcbiAqIGxpc3RlbmVycy5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZXZlbnROYW1lcyA9IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gIHZhciBuYW1lcyA9IFtdXG4gICAgLCBldmVudHNcbiAgICAsIG5hbWU7XG5cbiAgaWYgKHRoaXMuX2V2ZW50c0NvdW50ID09PSAwKSByZXR1cm4gbmFtZXM7XG5cbiAgZm9yIChuYW1lIGluIChldmVudHMgPSB0aGlzLl9ldmVudHMpKSB7XG4gICAgaWYgKGhhcy5jYWxsKGV2ZW50cywgbmFtZSkpIG5hbWVzLnB1c2gocHJlZml4ID8gbmFtZS5zbGljZSgxKSA6IG5hbWUpO1xuICB9XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICByZXR1cm4gbmFtZXMuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZXZlbnRzKSk7XG4gIH1cblxuICByZXR1cm4gbmFtZXM7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0FycmF5fSBUaGUgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50XG4gICAgLCBoYW5kbGVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmICghaGFuZGxlcnMpIHJldHVybiBbXTtcbiAgaWYgKGhhbmRsZXJzLmZuKSByZXR1cm4gW2hhbmRsZXJzLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGhhbmRsZXJzLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGhhbmRsZXJzW2ldLmZuO1xuICB9XG5cbiAgcmV0dXJuIGVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBsaXN0ZW5lcnMgbGlzdGVuaW5nIHRvIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWJlciBvZiBsaXN0ZW5lcnMuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uIGxpc3RlbmVyQ291bnQoZXZlbnQpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmICghbGlzdGVuZXJzKSByZXR1cm4gMDtcbiAgaWYgKGxpc3RlbmVycy5mbikgcmV0dXJuIDE7XG4gIHJldHVybiBsaXN0ZW5lcnMubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBDYWxscyBlYWNoIG9mIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBldmVudCBoYWQgbGlzdGVuZXJzLCBlbHNlIGBmYWxzZWAuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQoZXZlbnQsIGExLCBhMiwgYTMsIGE0LCBhNSkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVycy5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICBjYXNlIDE6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCksIHRydWU7XG4gICAgICBjYXNlIDI6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEpLCB0cnVlO1xuICAgICAgY2FzZSAzOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiksIHRydWU7XG4gICAgICBjYXNlIDQ6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMyksIHRydWU7XG4gICAgICBjYXNlIDU6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQpLCB0cnVlO1xuICAgICAgY2FzZSA2OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0LCBhNSksIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgIH1cblxuICAgIGxpc3RlbmVycy5mbi5hcHBseShsaXN0ZW5lcnMuY29udGV4dCwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGhcbiAgICAgICwgajtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGxpc3RlbmVyc1tpXS5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnNbaV0uZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICAgIGNhc2UgMTogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQpOyBicmVhaztcbiAgICAgICAgY2FzZSAyOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEpOyBicmVhaztcbiAgICAgICAgY2FzZSAzOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEsIGEyKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgNDogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMiwgYTMpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IFtjb250ZXh0PXRoaXNdIFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICByZXR1cm4gYWRkTGlzdGVuZXIodGhpcywgZXZlbnQsIGZuLCBjb250ZXh0LCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG9uZS10aW1lIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICByZXR1cm4gYWRkTGlzdGVuZXIodGhpcywgZXZlbnQsIGZuLCBjb250ZXh0LCB0cnVlKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBsaXN0ZW5lcnMgb2YgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBPbmx5IHJlbW92ZSB0aGUgbGlzdGVuZXJzIHRoYXQgbWF0Y2ggdGhpcyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBPbmx5IHJlbW92ZSB0aGUgbGlzdGVuZXJzIHRoYXQgaGF2ZSB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25lLXRpbWUgbGlzdGVuZXJzLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHJldHVybiB0aGlzO1xuICBpZiAoIWZuKSB7XG4gICAgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICBpZiAoXG4gICAgICBsaXN0ZW5lcnMuZm4gPT09IGZuICYmXG4gICAgICAoIW9uY2UgfHwgbGlzdGVuZXJzLm9uY2UpICYmXG4gICAgICAoIWNvbnRleHQgfHwgbGlzdGVuZXJzLmNvbnRleHQgPT09IGNvbnRleHQpXG4gICAgKSB7XG4gICAgICBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwLCBldmVudHMgPSBbXSwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm4gfHxcbiAgICAgICAgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKSB8fFxuICAgICAgICAoY29udGV4dCAmJiBsaXN0ZW5lcnNbaV0uY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vXG4gICAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAgIC8vXG4gICAgaWYgKGV2ZW50cy5sZW5ndGgpIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgICBlbHNlIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycywgb3IgdGhvc2Ugb2YgdGhlIHNwZWNpZmllZCBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gW2V2ZW50XSBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dDtcblxuICBpZiAoZXZlbnQpIHtcbiAgICBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuICAgIGlmICh0aGlzLl9ldmVudHNbZXZ0XSkgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gQWxsb3cgYEV2ZW50RW1pdHRlcmAgdG8gYmUgaW1wb3J0ZWQgYXMgbW9kdWxlIG5hbWVzcGFjZS5cbi8vXG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwKICAgICJpbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJy4vaW5kZXguanMnXG5cbmV4cG9ydCB7IEV2ZW50RW1pdHRlciB9XG5leHBvcnQgZGVmYXVsdCBFdmVudEVtaXR0ZXJcbiIsCiAgICAiLyohXG4gKiBhY3Rpdml0eS1zdHJlYW1zXG4gKiAgIGh0dHBzOi8vZ2l0aHViLmNvbS9zaWx2ZXJidWNrZXQvYWN0aXZpdHktc3RyZWFtc1xuICpcbiAqIERldmVsb3BlZCBhbmQgTWFpbnRhaW5lZCBieTpcbiAqICAgTmljayBKZW5uaW5ncyA8bmlja0BzaWx2ZXJidWNrZXQubmV0PlxuICpcbiAqIGFjdGl2aXR5LXN0cmVhbXMgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCAoc2VlIExJQ0VOU0UpLlxuICpcbiAqIFlvdSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgdG8gY2hvb3NlIG9uZSBsaWNlbnNlIG9yIHRoZSBvdGhlclxuICogYW5kIHlvdSBkb24ndCBoYXZlIHRvIG5vdGlmeSBhbnlvbmUgd2hpY2ggbGljZW5zZSB5b3UgYXJlIHVzaW5nLlxuICogUGxlYXNlIHNlZSB0aGUgY29ycmVzcG9uZGluZyBsaWNlbnNlIGZpbGUgZm9yIGRldGFpbHMgb2YgdGhlc2UgbGljZW5zZXMuXG4gKiBZb3UgYXJlIGZyZWUgdG8gdXNlLCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSwgYnV0IGFsbCBjb3B5cmlnaHRcbiAqIGluZm9ybWF0aW9uIG11c3QgcmVtYWluLlxuICpcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFjdGl2aXR5T2JqZWN0LCBBY3Rpdml0eVN0cmVhbSB9IGZyb20gXCJAc29ja2V0aHViL3NjaGVtYXNcIjtcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50ZW1pdHRlcjNcIjtcblxuY29uc3QgZWUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5jb25zdCBiYXNlUHJvcHMgPSB7XG4gICAgc3RyZWFtOiBbXG4gICAgICAgIFwiaWRcIixcbiAgICAgICAgXCJ0eXBlXCIsXG4gICAgICAgIFwiYWN0b3JcIixcbiAgICAgICAgXCJ0YXJnZXRcIixcbiAgICAgICAgXCJvYmplY3RcIixcbiAgICAgICAgXCJjb250ZXh0XCIsXG4gICAgICAgIFwiY29udGV4dFwiLFxuICAgICAgICBcInB1Ymxpc2hlZFwiLFxuICAgICAgICBcImVycm9yXCIsXG4gICAgXSxcbiAgICBvYmplY3Q6IFtcbiAgICAgICAgXCJpZFwiLFxuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJjb250ZXh0XCIsXG4gICAgICAgIFwiYWxpYXNcIixcbiAgICAgICAgXCJhdHRhY2hlZFRvXCIsXG4gICAgICAgIFwiYXR0YWNobWVudFwiLFxuICAgICAgICBcImF0dHJpYnV0ZWRUb1wiLFxuICAgICAgICBcImF0dHJpYnV0ZWRXaXRoXCIsXG4gICAgICAgIFwiY29uZGl0aW9uXCIsXG4gICAgICAgIFwiY29udGVudFwiLFxuICAgICAgICBcImNvbnRlbnRNYXBcIixcbiAgICAgICAgXCJjb250ZXh0XCIsXG4gICAgICAgIFwiY29udGV4dE9mXCIsXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcImVuZFRpbWVcIixcbiAgICAgICAgXCJnZW5lcmF0b3JcIixcbiAgICAgICAgXCJnZW5lcmF0b3JPZlwiLFxuICAgICAgICBcImdyb3VwXCIsXG4gICAgICAgIFwiaWNvblwiLFxuICAgICAgICBcImltYWdlXCIsXG4gICAgICAgIFwiaW5SZXBseVRvXCIsXG4gICAgICAgIFwibWVtYmVyc1wiLFxuICAgICAgICBcIm1lbWJlck9mXCIsXG4gICAgICAgIFwibWVzc2FnZVwiLFxuICAgICAgICBcImxvY2F0aW9uXCIsXG4gICAgICAgIFwibG9jYXRpb25PZlwiLFxuICAgICAgICBcIm9iamVjdE9mXCIsXG4gICAgICAgIFwib3JpZ2luT2ZcIixcbiAgICAgICAgXCJwcmVzZW5jZVwiLFxuICAgICAgICBcInByZXZpZXdcIixcbiAgICAgICAgXCJwcmV2aWV3T2ZcIixcbiAgICAgICAgXCJwcm92aWRlclwiLFxuICAgICAgICBcInByb3ZpZGVyT2ZcIixcbiAgICAgICAgXCJwdWJsaXNoZWRcIixcbiAgICAgICAgXCJyYXRpbmdcIixcbiAgICAgICAgXCJyZWxhdGlvbnNoaXBcIixcbiAgICAgICAgXCJyZXN1bHRPZlwiLFxuICAgICAgICBcInJlcGxpZXNcIixcbiAgICAgICAgXCJyb2xlXCIsXG4gICAgICAgIFwic2NvcGVcIixcbiAgICAgICAgXCJzY29wZU9mXCIsXG4gICAgICAgIFwic3RhcnRUaW1lXCIsXG4gICAgICAgIFwic3RhdHVzXCIsXG4gICAgICAgIFwic3VtbWFyeVwiLFxuICAgICAgICBcInRvcGljXCIsXG4gICAgICAgIFwidGFnXCIsXG4gICAgICAgIFwidGFnT2ZcIixcbiAgICAgICAgXCJ0YXJnZXRPZlwiLFxuICAgICAgICBcInRpdGxlXCIsXG4gICAgICAgIFwidGl0bGVNYXBcIixcbiAgICAgICAgXCJ1cGRhdGVkXCIsXG4gICAgICAgIFwidXJsXCIsXG4gICAgICAgIFwieG1wcDpzdGFuemEtaWRcIixcbiAgICBdLFxufTtcbmNvbnN0IHJlbmFtZSA9IHtcbiAgICBcIkBpZFwiOiBcImlkXCIsXG4gICAgXCJAdHlwZVwiOiBcInR5cGVcIixcbiAgICB2ZXJiOiBcInR5cGVcIixcbiAgICBkaXNwbGF5TmFtZTogXCJuYW1lXCIsXG4gICAgb2JqZWN0VHlwZTogXCJ0eXBlXCIsXG4gICAgcGxhdGZvcm06IFwiY29udGV4dFwiLFxufTtcbmNvbnN0IGV4cGFuZCA9IHtcbiAgICBhY3Rvcjoge1xuICAgICAgICBwcmltYXJ5OiBcImlkXCIsXG4gICAgICAgIHByb3BzOiBiYXNlUHJvcHMsXG4gICAgfSxcbiAgICB0YXJnZXQ6IHtcbiAgICAgICAgcHJpbWFyeTogXCJpZFwiLFxuICAgICAgICBwcm9wczogYmFzZVByb3BzLFxuICAgIH0sXG4gICAgb2JqZWN0OiB7XG4gICAgICAgIHByaW1hcnk6IFwiY29udGVudFwiLFxuICAgICAgICBwcm9wczogYmFzZVByb3BzLFxuICAgIH0sXG59O1xuXG50eXBlIEN1c3RvbVByb3BzID0ge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3QgfCBzdHJpbmdbXTtcbn07XG5cbmNvbnN0IG9ianMgPSBuZXcgTWFwKCk7XG5jb25zdCBjdXN0b21Qcm9wczogQ3VzdG9tUHJvcHMgPSB7fTtcblxubGV0IGZhaWxPblVua25vd25PYmplY3RQcm9wZXJ0aWVzID0gZmFsc2U7XG5sZXQgd2Fybk9uVW5rbm93bk9iamVjdFByb3BlcnRpZXMgPSB0cnVlO1xubGV0IHNwZWNpYWxPYmpzID0gW107IC8vIHRoZSBvYmplY3RzIGRvbid0IGdldCByZWplY3RlZCBmb3IgYmFkIHByb3BzXG5cbmZ1bmN0aW9uIG1hdGNoZXNDdXN0b21Qcm9wKHR5cGU6IHN0cmluZywga2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoY3VzdG9tUHJvcHNbdHlwZV0gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gY3VzdG9tUHJvcHNbdHlwZV0gYXMgc3RyaW5nW107XG4gICAgICAgIGlmIChvYmouaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiByZW5hbWVQcm9wPFQ+KG9iajogVCwga2V5OiBzdHJpbmcpOiBUIHtcbiAgICBvYmpbcmVuYW1lW2tleV1dID0gb2JqW2tleV07XG4gICAgZGVsZXRlIG9ialtrZXldO1xuICAgIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlT2JqZWN0PFQ+KHR5cGU6IHN0cmluZywgaW5jb21pbmdPYmo6IFQsIHJlcXVpcmVJZCA9IGZhbHNlKSB7XG4gICAgLy8gSW5wdXQgdmFsaWRhdGlvbiB3aXRoIGNsZWFyIGVycm9yIG1lc3NhZ2VzXG4gICAgaWYgKGluY29taW5nT2JqID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBBY3Rpdml0eVN0cmVhbXMgdmFsaWRhdGlvbiBmYWlsZWQ6IHRoZSBcIiR7dHlwZX1cIiBwcm9wZXJ0eSBpcyBudWxsLiBFeGFtcGxlOiB7IGlkOiBcInVzZXJAZXhhbXBsZS5jb21cIiwgdHlwZTogXCJwZXJzb25cIiB9YCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoaW5jb21pbmdPYmogPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQWN0aXZpdHlTdHJlYW1zIHZhbGlkYXRpb24gZmFpbGVkOiB0aGUgXCIke3R5cGV9XCIgcHJvcGVydHkgaXMgdW5kZWZpbmVkLiBFeGFtcGxlOiB7IGlkOiBcInVzZXJAZXhhbXBsZS5jb21cIiwgdHlwZTogXCJwZXJzb25cIiB9YCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluY29taW5nT2JqID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBBY3Rpdml0eVN0cmVhbXMgdmFsaWRhdGlvbiBmYWlsZWQ6IHRoZSBcIiR7dHlwZX1cIiBwcm9wZXJ0eSByZWNlaXZlZCBzdHJpbmcgXCIke2luY29taW5nT2JqfVwiIGJ1dCBleHBlY3RlZCBhbiBvYmplY3QuIFVzZTogeyBpZDogXCIke2luY29taW5nT2JqfVwiLCB0eXBlOiBcInBlcnNvblwiIH1gLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5jb21pbmdPYmogIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShpbmNvbWluZ09iaikpIHtcbiAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gQXJyYXkuaXNBcnJheShpbmNvbWluZ09iailcbiAgICAgICAgICAgID8gXCJhcnJheVwiXG4gICAgICAgICAgICA6IHR5cGVvZiBpbmNvbWluZ09iajtcbiAgICAgICAgY29uc3QgcmVjZWl2ZWRWYWx1ZSA9IFN0cmluZyhpbmNvbWluZ09iaik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBBY3Rpdml0eVN0cmVhbXMgdmFsaWRhdGlvbiBmYWlsZWQ6IHRoZSBcIiR7dHlwZX1cIiBwcm9wZXJ0eSBtdXN0IGJlIGFuIG9iamVjdCwgcmVjZWl2ZWQgJHtyZWNlaXZlZFR5cGV9ICgke3JlY2VpdmVkVmFsdWV9KS4gRXhhbXBsZTogeyBpZDogXCJ1c2VyQGV4YW1wbGUuY29tXCIsIHR5cGU6IFwicGVyc29uXCIgfWAsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUmVxdWlyZSAnaWQnIHByb3BlcnR5IHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQgKGUuZy4sIE9iamVjdC5jcmVhdGUoKSlcbiAgICBjb25zdCBvYmogPSBpbmNvbWluZ09iaiBhcyBBY3Rpdml0eU9iamVjdDtcbiAgICBpZiAocmVxdWlyZUlkICYmICFvYmouaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEFjdGl2aXR5U3RyZWFtcyB2YWxpZGF0aW9uIGZhaWxlZDogdGhlIFwiJHt0eXBlfVwiIHByb3BlcnR5IHJlcXVpcmVzIGFuICdpZCcgcHJvcGVydHkuIEV4YW1wbGU6IHsgaWQ6IFwidXNlckBleGFtcGxlLmNvbVwiLCB0eXBlOiBcInBlcnNvblwiIH1gLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHVua25vd25LZXlzID0gT2JqZWN0LmtleXMoaW5jb21pbmdPYmopLmZpbHRlcihcbiAgICAgICAgKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gIWJhc2VQcm9wc1t0eXBlXS5pbmNsdWRlcyhrZXkpO1xuICAgICAgICB9LFxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiB1bmtub3duS2V5cykge1xuICAgICAgICBsZXQgYW86IEFjdGl2aXR5T2JqZWN0ID0gaW5jb21pbmdPYmogYXMgQWN0aXZpdHlPYmplY3Q7XG4gICAgICAgIGlmIChyZW5hbWVba2V5XSkge1xuICAgICAgICAgICAgLy8gcmVuYW1lIHByb3BlcnR5IGluc3RlYWQgb2YgZmFpbFxuICAgICAgICAgICAgYW8gPSByZW5hbWVQcm9wKGFvLCBrZXkpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF0Y2hlc0N1c3RvbVByb3AoYW8udHlwZSwga2V5KSkge1xuICAgICAgICAgICAgLy8gY3VzdG9tIHByb3BlcnR5IG1hdGNoZXMsIGNvbnRpbnVlXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3BlY2lhbE9ianMuaW5jbHVkZXMoYW8udHlwZSkpIHtcbiAgICAgICAgICAgIC8vIG5vdCBkZWZpbmVkIGFzIGEgc3BlY2lhbCBwcm9wXG4gICAgICAgICAgICAvLyBkb24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCBpdCwgc28gdGhyb3cgZXJyb3JcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGFvKTtcbiAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVmFsdWUgPVxuICAgICAgICAgICAgICAgIHR5cGVvZiBhb1trZXldID09PSBcInN0cmluZ1wiID8gYFwiJHthb1trZXldfVwiYCA6IFN0cmluZyhhb1trZXldKTtcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IGBBY3Rpdml0eVN0cmVhbXMgdmFsaWRhdGlvbiBmYWlsZWQ6IHByb3BlcnR5IFwiJHtrZXl9XCIgd2l0aCB2YWx1ZSAke3JlY2VpdmVkVmFsdWV9IGlzIG5vdCBhbGxvd2VkIG9uIHRoZSBcIiR7dHlwZX1cIiBvYmplY3Qgb2YgdHlwZSBcIiR7YW8udHlwZX1cIi5gO1xuICAgICAgICAgICAgaWYgKGZhaWxPblVua25vd25PYmplY3RQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAod2Fybk9uVW5rbm93bk9iamVjdFByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5zdXJlUHJvcHMob2JqOiBBY3Rpdml0eU9iamVjdCk6IEFjdGl2aXR5T2JqZWN0IHtcbiAgICAvLyBlbnN1cmUgdGhlIG5hbWUgcHJvcGVydHksIHdoaWNoIGNhbiBnZW5lcmFsbHkgYmUgaW5mZXJyZWQgZnJvbSB0aGUgaWRcbiAgICAvLyBuYW1lID0gb2JqLm1hdGNoKC8oPyg/XFx3Kyk6XFwvXFwvKSg/Oi4rQCk/KC4rPykoPzpcXC98JCkvKVsxXVxuICAgIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZFN0cmVhbShtZXRhOiBBY3Rpdml0eVN0cmVhbSkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1ldGEpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbWV0YVtrZXldID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBzdHJlYW1ba2V5XSA9IG9ianMuZ2V0KG1ldGFba2V5XSkgfHwgbWV0YVtrZXldO1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobWV0YVtrZXldKSkge1xuICAgICAgICAgICAgc3RyZWFtW2tleV0gPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgbWV0YVtrZXldKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW1ba2V5XS5wdXNoKG9ianMuZ2V0KGVudHJ5KSB8fCBlbnRyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyZWFtW2tleV0gPSBtZXRhW2tleV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBvbmx5IGV4cGFuZCBzdHJpbmcgaW50byBvYmplY3RzIGlmIHRoZXkgYXJlIGluIHRoZSBleHBhbmQgbGlzdFxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGV4cGFuZCkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdHJlYW1ba2V5XSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gZXhwYW5kW2tleV0ucHJpbWFyeTtcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgICAgICAgb2JqW2lkeF0gPSBzdHJlYW1ba2V5XTtcbiAgICAgICAgICAgIHN0cmVhbVtrZXldID0gb2JqO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdHJlYW07XG59XG5cbmZ1bmN0aW9uIFN0cmVhbShcbiAgICBtZXRhOiBBY3Rpdml0eVN0cmVhbSxcbik6IEFjdGl2aXR5U3RyZWFtIHwgQWN0aXZpdHlPYmplY3QgfCBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4ge1xuICAgIHZhbGlkYXRlT2JqZWN0KFwic3RyZWFtXCIsIG1ldGEpO1xuICAgIGlmICh0eXBlb2YgbWV0YS5vYmplY3QgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdmFsaWRhdGVPYmplY3QoXCJvYmplY3RcIiwgbWV0YS5vYmplY3QpO1xuICAgIH1cbiAgICBjb25zdCBzdHJlYW0gPSBleHBhbmRTdHJlYW0obWV0YSk7XG4gICAgZWUuZW1pdChcImFjdGl2aXR5LXN0cmVhbVwiLCBzdHJlYW0pO1xuICAgIHJldHVybiBzdHJlYW07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aXZpdHlPYmplY3RNYW5hZ2VyIHtcbiAgICBjcmVhdGUob2JqOiB1bmtub3duKTogdW5rbm93bjtcbiAgICBkZWxldGUoaWQ6IHN0cmluZyk6IGJvb2xlYW47XG4gICAgbGlzdCgpOiBJdGVyYWJsZUl0ZXJhdG9yPHVua25vd24+O1xuICAgIGdldChpZDogc3RyaW5nLCBleHBhbmQ/OiBib29sZWFuKTogdW5rbm93bjtcbn1cblxuY29uc3QgX09iamVjdDogQWN0aXZpdHlPYmplY3RNYW5hZ2VyID0ge1xuICAgIGNyZWF0ZTogKG9iajogQWN0aXZpdHlPYmplY3QpID0+IHtcbiAgICAgICAgdmFsaWRhdGVPYmplY3QoXCJvYmplY3RcIiwgb2JqLCB0cnVlKTsgLy8gcmVxdWlyZSBJRCBmb3IgT2JqZWN0LmNyZWF0ZSgpXG4gICAgICAgIGNvbnN0IGFvID0gZW5zdXJlUHJvcHMob2JqKTtcbiAgICAgICAgb2Jqcy5zZXQoYW8uaWQsIGFvKTtcbiAgICAgICAgZWUuZW1pdChcImFjdGl2aXR5LW9iamVjdC1jcmVhdGVcIiwgYW8pO1xuICAgICAgICByZXR1cm4gYW87XG4gICAgfSxcblxuICAgIGRlbGV0ZTogKGlkKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG9ianMuZGVsZXRlKGlkKTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgZWUuZW1pdChcImFjdGl2aXR5LW9iamVjdC1kZWxldGVcIiwgaWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGdldDogKGlkLCBleHBhbmQpID0+IHtcbiAgICAgICAgbGV0IG9iaiA9IG9ianMuZ2V0KGlkKTtcbiAgICAgICAgaWYgKCFvYmopIHtcbiAgICAgICAgICAgIGlmICghZXhwYW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2JqID0geyBpZDogaWQgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW5zdXJlUHJvcHMob2JqKTtcbiAgICB9LFxuXG4gICAgbGlzdDogKCk6IEl0ZXJhYmxlSXRlcmF0b3I8dW5rbm93bj4gPT4gb2Jqcy5rZXlzKCksXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEFTRmFjdG9yeU9wdGlvbnMge1xuICAgIHNwZWNpYWxPYmpzPzogQXJyYXk8c3RyaW5nPjtcbiAgICBmYWlsT25Vbmtub3duT2JqZWN0UHJvcGVydGllcz86IGJvb2xlYW47XG4gICAgd2Fybk9uVW5rbm93bk9iamVjdFByb3BlcnRpZXM/OiBib29sZWFuO1xuICAgIGN1c3RvbVByb3BzPzogQ3VzdG9tUHJvcHM7XG59XG5cbnR5cGUgRXZlbnRDYWxsYmFjayA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVNNYW5hZ2VyIHtcbiAgICBTdHJlYW0obWV0YTogdW5rbm93bik6IEFjdGl2aXR5U3RyZWFtIHwgQWN0aXZpdHlPYmplY3Q7XG4gICAgT2JqZWN0OiBBY3Rpdml0eU9iamVjdE1hbmFnZXI7XG4gICAgb24oZXZlbnQ6IHN0cmluZywgZnVuYzogRXZlbnRDYWxsYmFjayk6IHZvaWQ7XG4gICAgb25jZShldmVudDogc3RyaW5nLCBmdW5jOiBFdmVudENhbGxiYWNrKTogdm9pZDtcbiAgICBvZmYoZXZlbnQ6IHN0cmluZywgZnVuYzogRXZlbnRDYWxsYmFjayk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBU0ZhY3Rvcnkob3B0czogQVNGYWN0b3J5T3B0aW9ucyA9IHt9KTogQVNNYW5hZ2VyIHtcbiAgICBzcGVjaWFsT2JqcyA9IG9wdHM/LnNwZWNpYWxPYmpzIHx8IFtdO1xuICAgIGZhaWxPblVua25vd25PYmplY3RQcm9wZXJ0aWVzID1cbiAgICAgICAgdHlwZW9mIG9wdHMuZmFpbE9uVW5rbm93bk9iamVjdFByb3BlcnRpZXMgPT09IFwiYm9vbGVhblwiXG4gICAgICAgICAgICA/IG9wdHMuZmFpbE9uVW5rbm93bk9iamVjdFByb3BlcnRpZXNcbiAgICAgICAgICAgIDogZmFpbE9uVW5rbm93bk9iamVjdFByb3BlcnRpZXM7XG4gICAgd2Fybk9uVW5rbm93bk9iamVjdFByb3BlcnRpZXMgPVxuICAgICAgICB0eXBlb2Ygb3B0cy53YXJuT25Vbmtub3duT2JqZWN0UHJvcGVydGllcyA9PT0gXCJib29sZWFuXCJcbiAgICAgICAgICAgID8gb3B0cy53YXJuT25Vbmtub3duT2JqZWN0UHJvcGVydGllc1xuICAgICAgICAgICAgOiB3YXJuT25Vbmtub3duT2JqZWN0UHJvcGVydGllcztcbiAgICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIE9iamVjdC5rZXlzKG9wdHMuY3VzdG9tUHJvcHMgfHwge30pKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5jdXN0b21Qcm9wc1twcm9wTmFtZV0gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGN1c3RvbVByb3BzW3Byb3BOYW1lXSA9IG9wdHMuY3VzdG9tUHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgU3RyZWFtOiBTdHJlYW0sXG4gICAgICAgIE9iamVjdDogX09iamVjdCxcbiAgICAgICAgb246IChldmVudCwgZnVuYykgPT4gZWUub24oZXZlbnQsIGZ1bmMpLFxuICAgICAgICBvbmNlOiAoZXZlbnQsIGZ1bmMpID0+IGVlLm9uY2UoZXZlbnQsIGZ1bmMpLFxuICAgICAgICBvZmY6IChldmVudCwgZnVuY05hbWUpID0+IGVlLm9mZihldmVudCwgZnVuY05hbWUpLFxuICAgIH0gYXMgQVNNYW5hZ2VyO1xufVxuXG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IDxleHBsYW5hdGlvbj5cbigoZ2xvYmFsOiBhbnkpID0+IHtcbiAgICBnbG9iYWwuQVNGYWN0b3IgPSBBU0ZhY3Rvcnk7XG59KSh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDoge30pO1xuIiwKICAgICJpbXBvcnQgeyBBU0ZhY3RvcnksIHR5cGUgQVNNYW5hZ2VyIH0gZnJvbSBcIkBzb2NrZXRodWIvYWN0aXZpdHktc3RyZWFtc1wiO1xuaW1wb3J0IHR5cGUge1xuICAgIEFjdGl2aXR5T2JqZWN0LFxuICAgIEFjdGl2aXR5U3RyZWFtLFxuICAgIEJhc2VBY3Rpdml0eU9iamVjdCxcbn0gZnJvbSBcIkBzb2NrZXRodWIvc2NoZW1hc1wiO1xuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiZXZlbnRlbWl0dGVyM1wiO1xuaW1wb3J0IHR5cGUgeyBTb2NrZXQgfSBmcm9tIFwic29ja2V0LmlvLWNsaWVudFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TWFwcGluZyB7XG4gICAgY3JlZGVudGlhbHM6IE1hcDxzdHJpbmcsIEFjdGl2aXR5U3RyZWFtPjtcbiAgICBcImFjdGl2aXR5LW9iamVjdFwiOiBNYXA8c3RyaW5nLCBCYXNlQWN0aXZpdHlPYmplY3Q+O1xuICAgIGNvbm5lY3Q6IE1hcDxzdHJpbmcsIEFjdGl2aXR5U3RyZWFtPjtcbiAgICBqb2luOiBNYXA8c3RyaW5nLCBBY3Rpdml0eVN0cmVhbT47XG59XG5cbmludGVyZmFjZSBDdXN0b21FbWl0dGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgICBfZW1pdChzOiBzdHJpbmcsIG86IHVua25vd24sIGM/OiB1bmtub3duKTogdm9pZDtcbiAgICBjb25uZWN0KCk6IHZvaWQ7XG4gICAgZGlzY29ubmVjdCgpOiB2b2lkO1xuICAgIGNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNvY2tldGh1YkNsaWVudCAtIENsaWVudCBsaWJyYXJ5IGZvciBTb2NrZXRodWIgcHJvdG9jb2wgZ2F0ZXdheVxuICpcbiAqIEEgSmF2YVNjcmlwdCBjbGllbnQgZm9yIGNvbm5lY3RpbmcgdG8gU29ja2V0aHViIHNlcnZlcnMuIFByb3ZpZGVzIGEgaGlnaC1sZXZlbFxuICogQVBJIGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgQWN0aXZpdHlTdHJlYW1zIG1lc3NhZ2VzIG92ZXIgU29ja2V0LklPLCB3aXRoXG4gKiBhdXRvbWF0aWMgc3RhdGUgbWFuYWdlbWVudCBhbmQgcmVjb25uZWN0aW9uIGhhbmRsaW5nLlxuICpcbiAqIFNvY2tldGh1YiBhY3RzIGFzIGEgcHJvdG9jb2wgZ2F0ZXdheSwgdHJhbnNsYXRpbmcgQWN0aXZpdHlTdHJlYW1zIG1lc3NhZ2VzIGludG9cbiAqIHZhcmlvdXMgcHJvdG9jb2xzIChYTVBQLCBJUkMsIFJTUywgZXRjLikuIFRoaXMgY2xpZW50IGhhbmRsZXMgdGhlIGNvbW11bmljYXRpb25cbiAqIHdpdGggdGhlIFNvY2tldGh1YiBzZXJ2ZXIsIGluY2x1ZGluZyBjcmVkZW50aWFsIG1hbmFnZW1lbnQsIGNvbm5lY3Rpb24gc3RhdGUsXG4gKiBhbmQgYXV0b21hdGljIHJlY29ubmVjdGlvbi5cbiAqXG4gKiAjIyBBdXRvbWF0aWMgUmVjb25uZWN0aW9uICYgU3RhdGUgUmVwbGF5XG4gKlxuICogVGhpcyBjbGllbnQgYXV0b21hdGljYWxseSBoYW5kbGVzIHRyYW5zaWVudCBuZXR3b3JrIGRpc2Nvbm5lY3Rpb25zIGJ5IHN0b3JpbmdcbiAqIGNvbm5lY3Rpb24gc3RhdGUgaW4gbWVtb3J5IGFuZCByZXBsYXlpbmcgaXQgd2hlbiB0aGUgc29ja2V0IHJlY29ubmVjdHMuXG4gKlxuICogIyMjIFNlY3VyaXR5IE1vZGVsXG4gKlxuICogKipTdG9yYWdlIExvY2F0aW9uOioqXG4gKiAtIEFsbCBjcmVkZW50aWFscyBhbmQgc3RhdGUgYXJlIHN0b3JlZCBPTkxZIGluIEphdmFTY3JpcHQgbWVtb3J5IChoZWFwKVxuICogLSBOb3RoaW5nIGlzIHBlcnNpc3RlZCB0byBsb2NhbFN0b3JhZ2UsIHNlc3Npb25TdG9yYWdlLCBjb29raWVzLCBvciBkaXNrXG4gKiAtIE1lbW9yeSBpcyBjbGVhcmVkIHdoZW4gdGhlIGJyb3dzZXIgdGFiIGNsb3NlcyBvciBwYWdlIHJlZnJlc2hlc1xuICpcbiAqICoqUmVwbGF5IFRyaWdnZXJzOioqXG4gKiAtIEF1dG9tYXRpYyByZXBsYXkgb2NjdXJzIG9uIFNvY2tldC5JTyByZWNvbm5lY3Rpb24gZXZlbnRzXG4gKiAtIFR5cGljYWxseSB0cmlnZ2VyZWQgYnkgYnJpZWYgbmV0d29yayBpbnRlcnJ1cHRpb25zIChXaUZpIHN3aXRjaGluZywgbW9iaWxlIG5ldHdvcmsgYmxpcHMpXG4gKiAtIERvZXMgTk9UIG9jY3VyIG9uIHBhZ2UgcmVmcmVzaCAobmV3IFNvY2tldGh1YkNsaWVudCBpbnN0YW5jZSA9IGVtcHR5IHN0YXRlKVxuICpcbiAqICoqU2VydmVyIFJlc3RhcnQgQmVoYXZpb3I6KipcbiAqIC0gSWYgc2VydmVyIHJlc3RhcnRzLCBjbGllbnQgc29ja2V0IHdpbGwgcmVjb25uZWN0IGFuZCByZXBsYXkgY3JlZGVudGlhbHNcbiAqIC0gU2VydmVyIG11c3QgaGFuZGxlIHJlcGxheWVkIGNyZWRlbnRpYWxzIGFwcHJvcHJpYXRlbHkgKHZhbGlkYXRlLCByZWplY3Qgc3RhbGUgc2Vzc2lvbnMsIGV0Yy4pXG4gKiAtIEFwcGxpY2F0aW9ucyBzaG91bGQgaW1wbGVtZW50IHByb3BlciBzZXNzaW9uIHZhbGlkYXRpb24gc2VydmVyLXNpZGVcbiAqXG4gKiAqKkxpZmV0aW1lOioqXG4gKiAtIENyZWRlbnRpYWxzIGV4aXN0IG9ubHkgZHVyaW5nIHRoZSBicm93c2VyIHRhYidzIGxpZmV0aW1lXG4gKiAtIENsZWFyZWQgb24gcGFnZSByZWxvYWQsIHRhYiBjbG9zZSwgb3IgbWFudWFsIGRpc2Nvbm5lY3RcbiAqIC0gTm90IGFjY2Vzc2libGUgYWNyb3NzIHRhYnMgb3IgYWZ0ZXIgYnJvd3NlciByZXN0YXJ0XG4gKlxuICogKipXaGF0IEdldHMgUmVwbGF5ZWQ6KipcbiAqIC0gQ3JlZGVudGlhbHMgKHVzZXJuYW1lL3Bhc3N3b3JkL3Rva2VucyBzZW50IHZpYSBjcmVkZW50aWFscyBldmVudClcbiAqIC0gQWN0aXZpdHkgT2JqZWN0cyAoYWN0b3IgZGVmaW5pdGlvbnMpXG4gKiAtIENvbm5lY3QgY29tbWFuZHMgKHBsYXRmb3JtIGNvbm5lY3Rpb25zKVxuICogLSBKb2luIGNvbW1hbmRzIChyb29tL2NoYW5uZWwgam9pbnMpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENyZWF0ZSBjbGllbnRcbiAqIGNvbnN0IHNvY2tldCA9IGlvKCdodHRwOi8vbG9jYWxob3N0OjEwNTUwJyk7XG4gKiBjb25zdCBjbGllbnQgPSBuZXcgU29ja2V0aHViQ2xpZW50KHNvY2tldCk7XG4gKlxuICogLy8gU2VuZCBjcmVkZW50aWFscyAtIHRoZXNlIHdpbGwgYmUgcmVwbGF5ZWQgb24gcmVjb25uZWN0aW9uXG4gKiBjbGllbnQuc29ja2V0LmVtaXQoJ2NyZWRlbnRpYWxzJywge1xuICogICBhY3RvcjogJ3VzZXJAZXhhbXBsZS5jb20nLFxuICogICBvYmplY3Q6IHsgdXNlcm5hbWU6ICd1c2VyJywgcGFzc3dvcmQ6ICdwYXNzJyB9XG4gKiB9KTtcbiAqXG4gKiAvLyBJZiBuZXR3b3JrIGRpc2Nvbm5lY3RzIGFuZCByZWNvbm5lY3RzLCBjcmVkZW50aWFscyBhcmUgYXV0b21hdGljYWxseSByZXBsYXllZFxuICogLy8gSWYgcGFnZSByZWZyZXNoZXMsIGNyZWRlbnRpYWxzIGFyZSBsb3N0IGFuZCBtdXN0IGJlIHJlc2VudFxuICogYGBgXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNvY2tldGh1YkNsaWVudCB7XG4gICAgLyoqXG4gICAgICogSW4tbWVtb3J5IHN0b3JhZ2UgZm9yIGNsaWVudCBzdGF0ZSB0aGF0IHNob3VsZCBiZSByZXBsYXllZCBvbiByZWNvbm5lY3Rpb24uXG4gICAgICpcbiAgICAgKiBTZWN1cml0eTogU3RvcmVkIE9OTFkgaW4gSmF2YVNjcmlwdCBoZWFwIG1lbW9yeS4gTmV2ZXIgcGVyc2lzdGVkIHRvIGRpc2ssXG4gICAgICogbG9jYWxTdG9yYWdlLCBvciBhbnkgcGVybWFuZW50IHN0b3JhZ2UuIENsZWFyZWQgb24gcGFnZSByZWxvYWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBldmVudHM6IEV2ZW50TWFwcGluZyA9IHtcbiAgICAgICAgY3JlZGVudGlhbHM6IG5ldyBNYXAoKSxcbiAgICAgICAgXCJhY3Rpdml0eS1vYmplY3RcIjogbmV3IE1hcCgpLFxuICAgICAgICBjb25uZWN0OiBuZXcgTWFwKCksXG4gICAgICAgIGpvaW46IG5ldyBNYXAoKSxcbiAgICB9O1xuICAgIHByaXZhdGUgX3NvY2tldDogU29ja2V0O1xuICAgIHB1YmxpYyBBY3Rpdml0eVN0cmVhbXM6IEFTTWFuYWdlcjtcbiAgICBwdWJsaWMgc29ja2V0OiBDdXN0b21FbWl0dGVyO1xuICAgIHB1YmxpYyBkZWJ1ZyA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3Rvcihzb2NrZXQ6IFNvY2tldCkge1xuICAgICAgICBpZiAoIXNvY2tldCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU29ja2V0aHViQ2xpZW50IHJlcXVpcmVzIGEgc29ja2V0LmlvIGluc3RhbmNlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NvY2tldCA9IHNvY2tldDtcblxuICAgICAgICB0aGlzLnNvY2tldCA9IHRoaXMuY3JlYXRlUHVibGljRW1pdHRlcigpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyU29ja2V0SU9IYW5kbGVycygpO1xuICAgICAgICB0aGlzLmluaXRBY3Rpdml0eVN0cmVhbXMoKTtcblxuICAgICAgICB0aGlzLkFjdGl2aXR5U3RyZWFtcy5vbihcbiAgICAgICAgICAgIFwiYWN0aXZpdHktb2JqZWN0LWNyZWF0ZVwiLFxuICAgICAgICAgICAgKG9iajogQWN0aXZpdHlPYmplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBzb2NrZXQuZW1pdChcImFjdGl2aXR5LW9iamVjdFwiLCBvYmosIChlcnI6IG5ldmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJmYWlsZWQgdG8gY3JlYXRlIGFjdGl2aXR5LW9iamVjdCBcIiwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRBY3Rpdml0eU9iamVjdChvYmopO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgICAgIHNvY2tldC5vbihcImFjdGl2aXR5LW9iamVjdFwiLCAob2JqKSA9PiB7XG4gICAgICAgICAgICB0aGlzLkFjdGl2aXR5U3RyZWFtcy5PYmplY3QuY3JlYXRlKG9iaik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluaXRBY3Rpdml0eVN0cmVhbXMoKSB7XG4gICAgICAgIHRoaXMuQWN0aXZpdHlTdHJlYW1zID0gQVNGYWN0b3J5KHsgc3BlY2lhbE9ianM6IFtcImNyZWRlbnRpYWxzXCJdIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIHN0b3JlZCBjcmVkZW50aWFscyB0byBwcmV2ZW50IGF1dG9tYXRpYyByZXBsYXkgb24gcmVjb25uZWN0aW9uLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhbGwgc3RvcmVkIGNyZWRlbnRpYWxzIGZyb20gbWVtb3J5LiBVc2VmdWwgZm9yXG4gICAgICogc2VjdXJpdHktc2Vuc2l0aXZlIGFwcGxpY2F0aW9ucyB0aGF0IHdhbnQgdG8gcHJldmVudCBhdXRvbWF0aWMgY3JlZGVudGlhbFxuICAgICAqIHJlcGxheSB3aGVuIHRoZSBzb2NrZXQgcmVjb25uZWN0cy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIENsZWFyIGNyZWRlbnRpYWxzIG9uIGRpc2Nvbm5lY3RcbiAgICAgKiBzYy5zb2NrZXQub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICogICBzYy5jbGVhckNyZWRlbnRpYWxzKCk7XG4gICAgICogfSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNsZWFyQ3JlZGVudGlhbHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXZlbnRzLmNyZWRlbnRpYWxzLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVQdWJsaWNFbWl0dGVyKCk6IEN1c3RvbUVtaXR0ZXIge1xuICAgICAgICBjb25zdCBzb2NrZXQgPSBuZXcgRXZlbnRFbWl0dGVyKCkgYXMgQ3VzdG9tRW1pdHRlcjtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHNvY2tldC5fZW1pdCA9IHNvY2tldC5lbWl0O1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgc29ja2V0LmVtaXQgPSAoZXZlbnQsIGNvbnRlbnQsIGNhbGxiYWNrKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQgPT09IFwiY3JlZGVudGlhbHNcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRDcmVkZW50aWFscyhjb250ZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09IFwiYWN0aXZpdHktb2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50QWN0aXZpdHlPYmplY3QoY29udGVudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50ID09PSBcIm1lc3NhZ2VcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRNZXNzYWdlKGNvbnRlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fc29ja2V0LmVtaXQoZXZlbnQgYXMgc3RyaW5nLCBjb250ZW50LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIHNvY2tldC5jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgc29ja2V0LmRpc2Nvbm5lY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zb2NrZXQuZGlzY29ubmVjdCgpO1xuICAgICAgICB9O1xuICAgICAgICBzb2NrZXQuY29ubmVjdCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NvY2tldC5jb25uZWN0KCk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzb2NrZXQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBldmVudEFjdGl2aXR5T2JqZWN0KGNvbnRlbnQ6IEFjdGl2aXR5T2JqZWN0KSB7XG4gICAgICAgIGlmIChjb250ZW50LmlkKSB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50c1tcImFjdGl2aXR5LW9iamVjdFwiXS5zZXQoY29udGVudC5pZCwgY29udGVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGV2ZW50Q3JlZGVudGlhbHMoY29udGVudDogQWN0aXZpdHlTdHJlYW0pIHtcbiAgICAgICAgaWYgKGNvbnRlbnQub2JqZWN0ICYmIGNvbnRlbnQub2JqZWN0LnR5cGUgPT09IFwiY3JlZGVudGlhbHNcIikge1xuICAgICAgICAgICAgY29uc3Qga2V5OiBzdHJpbmcgPVxuICAgICAgICAgICAgICAgIGNvbnRlbnQuYWN0b3IuaWQgfHwgKGNvbnRlbnQuYWN0b3IgYXMgdW5rbm93biBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgdGhpcy5ldmVudHMuY3JlZGVudGlhbHMuc2V0KGtleSwgY29udGVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGV2ZW50TWVzc2FnZShjb250ZW50OiBCYXNlQWN0aXZpdHlPYmplY3QpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zb2NrZXQuY29ubmVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZWl0aGVyIHN0b3JlcyBvciBkZWxldGUgdGhlIHNwZWNpZmllZCBjb250ZW50IG9udG8gdGhlIHN0b3JlZEpvaW5zIG1hcCxcbiAgICAgICAgLy8gZm9yIHJlcGx5IG9uY2Ugd2UncmUgYmFjayBvbmxpbmUuXG4gICAgICAgIGNvbnN0IGtleSA9IFNvY2tldGh1YkNsaWVudC5nZXRLZXkoY29udGVudCBhcyBBY3Rpdml0eVN0cmVhbSk7XG4gICAgICAgIGlmIChjb250ZW50LnR5cGUgPT09IFwiam9pblwiIHx8IGNvbnRlbnQudHlwZSA9PT0gXCJjb25uZWN0XCIpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzW2NvbnRlbnQudHlwZV0uc2V0KGtleSwgY29udGVudCBhcyBBY3Rpdml0eVN0cmVhbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGVudC50eXBlID09PSBcImxlYXZlXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzLmpvaW4uZGVsZXRlKGtleSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGVudC50eXBlID09PSBcImRpc2Nvbm5lY3RcIikge1xuICAgICAgICAgICAgdGhpcy5ldmVudHMuY29ubmVjdC5kZWxldGUoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldEtleShjb250ZW50OiBBY3Rpdml0eVN0cmVhbSkge1xuICAgICAgICBjb25zdCBhY3RvciA9IGNvbnRlbnQuYWN0b3I/LmlkIHx8IGNvbnRlbnQuYWN0b3I7XG4gICAgICAgIGlmICghYWN0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgYWN0b3IgcHJvcGVydHkgbm90IHByZXNlbnQgZm9yIG1lc3NhZ2UgdHlwZTogJHtjb250ZW50Py50eXBlfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGNvbnRlbnQudGFyZ2V0XG4gICAgICAgICAgICA/IGNvbnRlbnQudGFyZ2V0LmlkIHx8IGNvbnRlbnQudGFyZ2V0XG4gICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgIHJldHVybiBgJHthY3Rvcn0tJHt0YXJnZXR9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvZyhtc2c6IHN0cmluZywgb2JqPzogdW5rbm93bikge1xuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgY29uc29sZS5sb2cobXNnLCBvYmopO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlclNvY2tldElPSGFuZGxlcnMoKSB7XG4gICAgICAgIC8vIG1pZGRsZXdhcmUgZm9yIGV2ZW50cyB3aGljaCBkb24ndCBkZWFsIGluIEFTIG9iamVjdHNcbiAgICAgICAgY29uc3QgY2FsbEhhbmRsZXIgPSAoZXZlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jIChvYmo/OiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50ID09PSBcImNvbm5lY3RcIikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5pZCA9IHRoaXMuX3NvY2tldC5pZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQuY29ubmVjdGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQXV0b21hdGljIHN0YXRlIHJlcGxheSBvbiByZWNvbm5lY3Rpb24uXG4gICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAqIFdoZW4gU29ja2V0LklPIHJlY29ubmVjdHMgYWZ0ZXIgYSBuZXR3b3JrIGludGVycnVwdGlvbiwgd2UgYXV0b21hdGljYWxseVxuICAgICAgICAgICAgICAgICAgICAgKiByZXBsYXkgYWxsIHN0b3JlZCBzdGF0ZSB0byByZXN0b3JlIHRoZSBzZXNzaW9uIHNlYW1sZXNzbHk6XG4gICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAqIDEuIEFjdGl2aXR5IE9iamVjdHMgKGFjdG9yIGRlZmluaXRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgKiAyLiBDcmVkZW50aWFscyAoYXV0aGVudGljYXRpb24pXG4gICAgICAgICAgICAgICAgICAgICAqIDMuIENvbm5lY3QgY29tbWFuZHMgKHBsYXRmb3JtIGNvbm5lY3Rpb25zKVxuICAgICAgICAgICAgICAgICAgICAgKiA0LiBKb2luIGNvbW1hbmRzIChyb29tL2NoYW5uZWwgbWVtYmVyc2hpcHMpXG4gICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAqIFRoaXMgYWxsb3dzIHRoZSBjbGllbnQgdG8gc3Vydml2ZSBicmllZiBuZXR3b3JrIGJsaXBzIHdpdGhvdXQgcmVxdWlyaW5nXG4gICAgICAgICAgICAgICAgICAgICAqIHVzZXIgaW50ZXJ2ZW50aW9uLiBIb3dldmVyLCB0aGUgc2VydmVyIG11c3QgcHJvcGVybHkgdmFsaWRhdGUgcmVwbGF5ZWRcbiAgICAgICAgICAgICAgICAgICAgICogY3JlZGVudGlhbHMgYXMgdGhleSBtYXkgYmUgc3RhbGUgb3IgcmV2b2tlZC5cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVwbGF5KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhY3Rpdml0eS1vYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRzW1wiYWN0aXZpdHktb2JqZWN0XCJdLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcGxheShcImNyZWRlbnRpYWxzXCIsIHRoaXMuZXZlbnRzLmNyZWRlbnRpYWxzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXBsYXkoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRzLmNvbm5lY3QpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcGxheShcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudHMuam9pbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudCA9PT0gXCJkaXNjb25uZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQuY29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KGV2ZW50LCBvYmopO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyByZWdpc3RlciBmb3IgZXZlbnRzIHRoYXQgZ2l2ZSB1cyBpbmZvcm1hdGlvbiBvbiBjb25uZWN0aW9uIHN0YXR1c1xuICAgICAgICB0aGlzLl9zb2NrZXQub24oXCJjb25uZWN0XCIsIGNhbGxIYW5kbGVyKFwiY29ubmVjdFwiKSk7XG4gICAgICAgIHRoaXMuX3NvY2tldC5vbihcImNvbm5lY3RfZXJyb3JcIiwgY2FsbEhhbmRsZXIoXCJjb25uZWN0X2Vycm9yXCIpKTtcbiAgICAgICAgdGhpcy5fc29ja2V0Lm9uKFwiZGlzY29ubmVjdFwiLCBjYWxsSGFuZGxlcihcImRpc2Nvbm5lY3RcIikpO1xuXG4gICAgICAgIC8vIHVzZSBhcyBtaWRkbGV3YXJlIHRvIHJlY2VpdmUgaW5jb21pbmcgU29ja2V0aHViIG1lc3NhZ2VzIGFuZCB1bnBhY2sgdGhlbVxuICAgICAgICAvLyB1c2luZyB0aGUgQWN0aXZpdHlTdHJlYW1zIGxpYnJhcnkgYmVmb3JlIHBhc3NpbmcgdGhlbSBhbG9uZyB0byB0aGUgYXBwLlxuICAgICAgICB0aGlzLl9zb2NrZXQub24oXCJtZXNzYWdlXCIsIChvYmopID0+IHtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KFwibWVzc2FnZVwiLCB0aGlzLkFjdGl2aXR5U3RyZWFtcy5TdHJlYW0ob2JqKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIGFuIEFjdGl2aXR5U3RyZWFtIHdpdGggYSB2YWxpZCBhY3Rvci5pZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGhhc0FjdG9ySWQoXG4gICAgICAgIG9iajogQWN0aXZpdHlTdHJlYW0gfCBBY3Rpdml0eU9iamVjdCxcbiAgICApOiBvYmogaXMgQWN0aXZpdHlTdHJlYW0ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgXCJhY3RvclwiIGluIG9iaiAmJlxuICAgICAgICAgICAgb2JqLmFjdG9yICE9PSBudWxsICYmXG4gICAgICAgICAgICB0eXBlb2Ygb2JqLmFjdG9yID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBcImlkXCIgaW4gb2JqLmFjdG9yICYmXG4gICAgICAgICAgICB0eXBlb2Ygb2JqLmFjdG9yLmlkID09PSBcInN0cmluZ1wiXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwbGF5cyBwcmV2aW91c2x5IHNlbnQgZXZlbnRzIHRvIHRoZSBzZXJ2ZXIgYWZ0ZXIgcmVjb25uZWN0aW9uLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgU29ja2V0LklPIGNvbm5lY3Rpb24gaXNcbiAgICAgKiByZS1lc3RhYmxpc2hlZCBhZnRlciBhIHRyYW5zaWVudCBuZXR3b3JrIGludGVycnVwdGlvbi4gSXQgcmVzZW5kc1xuICAgICAqIGNyZWRlbnRpYWxzIGFuZCBjb25uZWN0aW9uIHN0YXRlIHNvIHRoZSB1c2VyIGRvZXNuJ3QgbmVlZCB0byBtYW51YWxseVxuICAgICAqIHJlLWF1dGhlbnRpY2F0ZSBvciByZWpvaW4gY2hhbm5lbHMuXG4gICAgICpcbiAgICAgKiBTZWN1cml0eSBjb25zaWRlcmF0aW9uczpcbiAgICAgKiAtIE9ubHkgcmVwbGF5cyBldmVudHMgc3RvcmVkIGluIG1lbW9yeSBkdXJpbmcgdGhpcyBzZXNzaW9uXG4gICAgICogLSBEb2VzIG5vdCByZXBsYXkgYWZ0ZXIgcGFnZSByZWZyZXNoIChtZW1vcnkgY2xlYXJlZClcbiAgICAgKiAtIFNlcnZlciBzaG91bGQgdmFsaWRhdGUgcmVwbGF5ZWQgY3JlZGVudGlhbHMgKG1heSBiZSBzdGFsZS9yZXZva2VkKVxuICAgICAqXG4gICAgICogQHBhcmFtIG5hbWUgLSBFdmVudCBuYW1lIHRvIGVtaXQgKFwiY3JlZGVudGlhbHNcIiwgXCJhY3Rpdml0eS1vYmplY3RcIiwgXCJtZXNzYWdlXCIpXG4gICAgICogQHBhcmFtIGFzTWFwIC0gTWFwIG9mIGV2ZW50cyB0byByZXBsYXlcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlcGxheShcbiAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICBhc01hcDogTWFwPHN0cmluZywgQWN0aXZpdHlTdHJlYW0gfCBCYXNlQWN0aXZpdHlPYmplY3Q+LFxuICAgICkge1xuICAgICAgICBmb3IgKGNvbnN0IG9iaiBvZiBhc01hcC52YWx1ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWRPYmogPSB0aGlzLkFjdGl2aXR5U3RyZWFtcy5TdHJlYW0ob2JqKTtcbiAgICAgICAgICAgIGxldCBpZCA9IGV4cGFuZGVkT2JqPy5pZDtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0FjdG9ySWQoZXhwYW5kZWRPYmopKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBleHBhbmRlZE9iai5hY3Rvci5pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubG9nKGByZXBsYXlpbmcgJHtuYW1lfSBmb3IgJHtpZH1gKTtcbiAgICAgICAgICAgIHRoaXMuX3NvY2tldC5lbWl0KG5hbWUsIGV4cGFuZGVkT2JqKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiA8ZXhwbGFuYXRpb24+XG4oKGdsb2JhbDogYW55KSA9PiB7XG4gICAgZ2xvYmFsLlNvY2tldGh1YkNsaWVudCA9IFNvY2tldGh1YkNsaWVudDtcbiAgICAvLyBAdHMtaWdub3JlXG59KSh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDoge30pO1xuIgogIF0sCiAgIm1hcHBpbmdzIjogInFZQUVBLElBQUksRUFBTSxPQUFPLFVBQVUsZUFDdkIsRUFBUyxJQVNiLFNBQVMsQ0FBTSxFQUFHLEVBU2xCLEdBQUksT0FBTyxRQU9ULEdBTkEsRUFBTyxVQUFZLE9BQU8sT0FBTyxJQUFJLEVBTWpDLENBQUMsSUFBSSxFQUFPLEVBQUUsVUFBVyxFQUFTLEdBWXhDLFNBQVMsQ0FBRSxDQUFDLEVBQUksRUFBUyxFQUFNLENBQzdCLEtBQUssR0FBSyxFQUNWLEtBQUssUUFBVSxFQUNmLEtBQUssS0FBTyxHQUFRLEdBY3RCLFNBQVMsQ0FBVyxDQUFDLEVBQVMsRUFBTyxFQUFJLEVBQVMsRUFBTSxDQUN0RCxH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QUFLLFFBQVEsR0FBRyxVQUFXLENBQUMsSUFBUSxDQUNoQyxLQUFLLE9BQU8sTUFBTSxVQUFXLEtBQUssZ0JBQWdCLE9BQU8sQ0FBRyxDQUFDLEVBQ2hFLEVBTUcsVUFBVSxDQUNkLEVBQ3FCLENBQ3JCLE1BQ0ksVUFBVyxHQUNYLEVBQUksUUFBVSxNQUNkLE9BQU8sRUFBSSxRQUFVLFVBQ3JCLE9BQVEsRUFBSSxPQUNaLE9BQU8sRUFBSSxNQUFNLEtBQU8sU0FvQnhCLE1BQU0sQ0FDVixFQUNBLEVBQ0YsQ0FDRSxRQUFXLEtBQU8sRUFBTSxPQUFPLEVBQUcsQ0FDOUIsSUFBTSxFQUFjLEtBQUssZ0JBQWdCLE9BQU8sQ0FBRyxFQUMvQyxFQUFLLEdBQWEsR0FDdEIsR0FBSSxLQUFLLFdBQVcsQ0FBVyxFQUMzQixFQUFLLEVBQVksTUFBTSxHQUUzQixLQUFLLElBQUksYUFBYSxTQUFZLEdBQUksRUFDdEMsS0FBSyxRQUFRLEtBQUssRUFBTSxDQUFXLEdBRy9DLEVBR0MsQ0FBQyxJQUFnQixDQUNkLEVBQU8sZ0JBQWtCLElBRTFCLE9BQU8sU0FBVyxTQUFXLE9BQVMsQ0FBQyxDQUFDIiwKICAiZGVidWdJZCI6ICIxREZGRjQ5NEU4N0UyQUYzNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
20
+ `,u+=d.map(function(_,w){return p(this.line-d.length+w+1,h)+" "+_},this).join(`
21
+ `),u+=`
22
+ `+p("",h+m)+`^
23
+ `,u}else return u+" at index "+(this.index-1);function p(_,w){var I=String(_);return Array(w-I.length+1).join(" ")+I}};function i(c,u,l){if(c instanceof s)var d=c,l=u;else var d=s.fromCompiled(c,u);this.grammar=d,this.options={keepHistory:!1,lexer:d.lexer||new n};for(var v in l||{})this.options[v]=l[v];this.lexer=this.options.lexer,this.lexerState=void 0;var m=new r(d,0),h=this.table=[m];m.wants[d.start]=[],m.predict(d.start),m.process(),this.current=0}i.fail={},i.prototype.feed=function(c){var u=this.lexer;u.reset(c,this.lexerState);var l;while(!0){try{if(l=u.next(),!l)break}catch(M){var h=new r(this.grammar,this.current+1);this.table.push(h);var d=Error(this.reportLexerError(M));throw d.offset=this.current,d.token=M.token,d}var v=this.table[this.current];if(!this.options.keepHistory)delete this.table[this.current-1];var m=this.current+1,h=new r(this.grammar,m);this.table.push(h);var p=l.text!==void 0?l.text:l.value,_=u.constructor===n?l.value:l,w=v.scannable;for(var I=w.length;I--;){var O=w[I],D=O.rule.symbols[O.dot];if(D.test?D.test(_):D.type?D.type===l.type:D.literal===p){var S=O.nextState({data:_,token:l,isToken:!0,reference:m-1});h.states.push(S)}}if(h.process(),h.states.length===0){var d=Error(this.reportError(l));throw d.offset=this.current,d.token=l,d}if(this.options.keepHistory)v.lexerState=u.save();this.current++}if(v)this.lexerState=u.save();return this.results=this.finish(),this},i.prototype.reportLexerError=function(c){var u,l,d=c.token;if(d)u="input "+JSON.stringify(d.text[0])+" (lexer error)",l=this.lexer.formatError(d,"Syntax error");else u="input (lexer error)",l=c.message;return this.reportErrorCommon(l,u)},i.prototype.reportError=function(c){var u=(c.type?c.type+" token: ":"")+JSON.stringify(c.value!==void 0?c.value:c),l=this.lexer.formatError(c,"Syntax error");return this.reportErrorCommon(l,u)},i.prototype.reportErrorCommon=function(c,u){var l=[];l.push(c);var d=this.table.length-2,v=this.table[d],m=v.states.filter(function(p){var _=p.rule.symbols[p.dot];return _&&typeof _!=="string"});if(m.length===0)l.push("Unexpected "+u+`. I did not expect any more input. Here is the state of my parse table:
24
+ `),this.displayStateStack(v.states,l);else{l.push("Unexpected "+u+`. Instead, I was expecting to see one of the following:
25
+ `);var h=m.map(function(p){return this.buildFirstStateStack(p,[])||[p]},this);h.forEach(function(p){var _=p[0],w=_.rule.symbols[_.dot],I=this.getSymbolDisplay(w);l.push("A "+I+" based on:"),this.displayStateStack(p,l)},this)}return l.push(""),l.join(`
26
+ `)},i.prototype.displayStateStack=function(c,u){var l,d=0;for(var v=0;v<c.length;v++){var m=c[v],h=m.rule.toString(m.dot);if(h===l)d++;else{if(d>0)u.push(" ^ "+d+" more lines identical to this");d=0,u.push(" "+h)}l=h}},i.prototype.getSymbolDisplay=function(c){return o(c)},i.prototype.buildFirstStateStack=function(c,u){if(u.indexOf(c)!==-1)return null;if(c.wantedBy.length===0)return[c];var l=c.wantedBy[0],d=[c].concat(u),v=this.buildFirstStateStack(l,d);if(v===null)return null;return[c].concat(v)},i.prototype.save=function(){var c=this.table[this.current];return c.lexerState=this.lexerState,c},i.prototype.restore=function(c){var u=c.index;this.current=u,this.table[u]=c,this.table.splice(u+1),this.lexerState=c.lexerState,this.results=this.finish()},i.prototype.rewind=function(c){if(!this.options.keepHistory)throw Error("set option `keepHistory` to enable rewinding");this.restore(this.table[c])},i.prototype.finish=function(){var c=[],u=this.grammar.start,l=this.table[this.table.length-1];return l.states.forEach(function(d){if(d.rule.name===u&&d.dot===d.rule.symbols.length&&d.reference===0&&d.data!==i.fail)c.push(d)}),c.map(function(d){return d.data})};function o(c){var u=typeof c;if(u==="string")return c;else if(u==="object")if(c.literal)return JSON.stringify(c.literal);else if(c instanceof RegExp)return"character matching "+c;else if(c.type)return c.type+" token";else if(c.test)return"token matching "+String(c.test);else throw Error("Unknown symbol type: "+c)}function a(c){var u=typeof c;if(u==="string")return c;else if(u==="object")if(c.literal)return JSON.stringify(c.literal);else if(c instanceof RegExp)return c.toString();else if(c.type)return"%"+c.type;else if(c.test)return"<"+String(c.test)+">";else throw Error("Unknown symbol type: "+c)}return{Parser:i,Grammar:s,Rule:e}})});var jg=b(function(bl){Object.defineProperty(bl,"__esModule",{value:!0});function et(e){return e[0]}var Ag=(e)=>[].concat(...e.map((t)=>Array.isArray(t)?Ag(t):t));function qn(e){if(e){if(Array.isArray(e))return Ag(e).join("");return e}return""}var Hk={Lexer:void 0,ParserRules:[{name:"Reverse_path",symbols:["Path"]},{name:"Reverse_path$string$1",symbols:[{literal:"<"},{literal:">"}],postprocess:(e)=>e.join("")},{name:"Reverse_path",symbols:["Reverse_path$string$1"]},{name:"Forward_path$subexpression$1$subexpression$1",symbols:[{literal:"<"},/[pP]/,/[oO]/,/[sS]/,/[tT]/,/[mM]/,/[aA]/,/[sS]/,/[tT]/,/[eE]/,/[rR]/,{literal:"@"}],postprocess:function(e){return e.join("")}},{name:"Forward_path$subexpression$1",symbols:["Forward_path$subexpression$1$subexpression$1","Domain",{literal:">"}]},{name:"Forward_path",symbols:["Forward_path$subexpression$1"]},{name:"Forward_path$subexpression$2",symbols:[{literal:"<"},/[pP]/,/[oO]/,/[sS]/,/[tT]/,/[mM]/,/[aA]/,/[sS]/,/[tT]/,/[eE]/,/[rR]/,{literal:">"}],postprocess:function(e){return e.join("")}},{name:"Forward_path",symbols:["Forward_path$subexpression$2"]},{name:"Forward_path",symbols:["Path"]},{name:"Path$ebnf$1$subexpression$1",symbols:["A_d_l",{literal:":"}]},{name:"Path$ebnf$1",symbols:["Path$ebnf$1$subexpression$1"],postprocess:et},{name:"Path$ebnf$1",symbols:[],postprocess:()=>null},{name:"Path",symbols:[{literal:"<"},"Path$ebnf$1","Mailbox",{literal:">"}]},{name:"A_d_l$ebnf$1",symbols:[]},{name:"A_d_l$ebnf$1$subexpression$1",symbols:[{literal:","},"At_domain"]},{name:"A_d_l$ebnf$1",symbols:["A_d_l$ebnf$1","A_d_l$ebnf$1$subexpression$1"],postprocess:(e)=>e[0].concat([e[1]])},{name:"A_d_l",symbols:["At_domain","A_d_l$ebnf$1"]},{name:"At_domain",symbols:[{literal:"@"},"Domain"]},{name:"Domain$ebnf$1",symbols:[]},{name:"Domain$ebnf$1$subexpression$1",symbols:[{literal:"."},"sub_domain"]},{name:"Domain$ebnf$1",symbols:["Domain$ebnf$1","Domain$ebnf$1$subexpression$1"],postprocess:(e)=>e[0].concat([e[1]])},{name:"Domain",symbols:["sub_domain","Domain$ebnf$1"]},{name:"sub_domain",symbols:["U_label"]},{name:"Let_dig",symbols:["ALPHA_DIGIT"],postprocess:et},{name:"Ldh_str$ebnf$1",symbols:[]},{name:"Ldh_str$ebnf$1",symbols:["Ldh_str$ebnf$1","ALPHA_DIG_DASH"],postprocess:(e)=>e[0].concat([e[1]])},{name:"Ldh_str",symbols:["Ldh_str$ebnf$1","Let_dig"]},{name:"U_Let_dig",symbols:["ALPHA_DIGIT_U"],postprocess:et},{name:"U_Ldh_str$ebnf$1",symbols:[]},{name:"U_Ldh_str$ebnf$1",symbols:["U_Ldh_str$ebnf$1","ALPHA_DIG_DASH_U"],postprocess:(e)=>e[0].concat([e[1]])},{name:"U_Ldh_str",symbols:["U_Ldh_str$ebnf$1","U_Let_dig"]},{name:"U_label$ebnf$1$subexpression$1",symbols:["U_Ldh_str"]},{name:"U_label$ebnf$1",symbols:["U_label$ebnf$1$subexpression$1"],postprocess:et},{name:"U_label$ebnf$1",symbols:[],postprocess:()=>null},{name:"U_label",symbols:["U_Let_dig","U_label$ebnf$1"]},{name:"address_literal$subexpression$1",symbols:["IPv4_address_literal"]},{name:"address_literal$subexpression$1",symbols:["IPv6_address_literal"]},{name:"address_literal$subexpression$1",symbols:["General_address_literal"]},{name:"address_literal",symbols:[{literal:"["},"address_literal$subexpression$1",{literal:"]"}]},{name:"non_local_part",symbols:["Domain"],postprocess:function(e){return{DomainName:qn(e[0])}}},{name:"non_local_part",symbols:["address_literal"],postprocess:function(e){return{AddressLiteral:qn(e[0])}}},{name:"Mailbox",symbols:["Local_part",{literal:"@"},"non_local_part"],postprocess:function(e){return{localPart:qn(e[0]),domainPart:qn(e[2])}}},{name:"Local_part",symbols:["Dot_string"],postprocess:function(e){return{DotString:qn(e[0])}}},{name:"Local_part",symbols:["Quoted_string"],postprocess:function(e){return{QuotedString:qn(e[0])}}},{name:"Dot_string$ebnf$1",symbols:[]},{name:"Dot_string$ebnf$1$subexpression$1",symbols:[{literal:"."},"Atom"]},{name:"Dot_string$ebnf$1",symbols:["Dot_string$ebnf$1","Dot_string$ebnf$1$subexpression$1"],postprocess:(e)=>e[0].concat([e[1]])},{name:"Dot_string",symbols:["Atom","Dot_string$ebnf$1"]},{name:"Atom$ebnf$1",symbols:[/[0-9A-Za-z!#$%&'*+\-/=?^_`{|}~\u0080-\uFFFF/]/]},{name:"Atom$ebnf$1",symbols:["Atom$ebnf$1",/[0-9A-Za-z!#$%&'*+\-/=?^_`{|}~\u0080-\uFFFF/]/],postprocess:(e)=>e[0].concat([e[1]])},{name:"Atom",symbols:["Atom$ebnf$1"]},{name:"Quoted_string$ebnf$1",symbols:[]},{name:"Quoted_string$ebnf$1",symbols:["Quoted_string$ebnf$1","QcontentSMTP"],postprocess:(e)=>e[0].concat([e[1]])},{name:"Quoted_string",symbols:["DQUOTE","Quoted_string$ebnf$1","DQUOTE"]},{name:"QcontentSMTP",symbols:["qtextSMTP"]},{name:"QcontentSMTP",symbols:["quoted_pairSMTP"]},{name:"quoted_pairSMTP",symbols:[{literal:"\\"},/[\x20-\x7e]/]},{name:"qtextSMTP",symbols:[/[\x20-\x21\x23-\x5b\x5d-\x7e\u0080-\uFFFF]/],postprocess:et},{name:"IPv4_address_literal$macrocall$2",symbols:[{literal:"."},"Snum"]},{name:"IPv4_address_literal$macrocall$1",symbols:["IPv4_address_literal$macrocall$2","IPv4_address_literal$macrocall$2","IPv4_address_literal$macrocall$2"]},{name:"IPv4_address_literal",symbols:["Snum","IPv4_address_literal$macrocall$1"]},{name:"IPv6_address_literal$subexpression$1",symbols:[/[iI]/,/[pP]/,/[vV]/,{literal:"6"},{literal:":"}],postprocess:function(e){return e.join("")}},{name:"IPv6_address_literal",symbols:["IPv6_address_literal$subexpression$1","IPv6_addr"]},{name:"General_address_literal$ebnf$1",symbols:["dcontent"]},{name:"General_address_literal$ebnf$1",symbols:["General_address_literal$ebnf$1","dcontent"],postprocess:(e)=>e[0].concat([e[1]])},{name:"General_address_literal",symbols:["Standardized_tag",{literal:":"},"General_address_literal$ebnf$1"]},{name:"Standardized_tag",symbols:["Ldh_str"]},{name:"dcontent",symbols:[/[\x21-\x5a\x5e-\x7e]/],postprocess:et},{name:"Snum",symbols:["DIGIT"]},{name:"Snum$subexpression$1",symbols:[/[1-9]/,"DIGIT"]},{name:"Snum",symbols:["Snum$subexpression$1"]},{name:"Snum$subexpression$2",symbols:[{literal:"1"},"DIGIT","DIGIT"]},{name:"Snum",symbols:["Snum$subexpression$2"]},{name:"Snum$subexpression$3",symbols:[{literal:"2"},/[0-4]/,"DIGIT"]},{name:"Snum",symbols:["Snum$subexpression$3"]},{name:"Snum$subexpression$4",symbols:[{literal:"2"},{literal:"5"},/[0-5]/]},{name:"Snum",symbols:["Snum$subexpression$4"]},{name:"IPv6_addr",symbols:["IPv6_full"]},{name:"IPv6_addr",symbols:["IPv6_comp"]},{name:"IPv6_addr",symbols:["IPv6v4_full"]},{name:"IPv6_addr",symbols:["IPv6v4_comp"]},{name:"IPv6_hex",symbols:["HEXDIG"]},{name:"IPv6_hex$subexpression$1",symbols:["HEXDIG","HEXDIG"]},{name:"IPv6_hex",symbols:["IPv6_hex$subexpression$1"]},{name:"IPv6_hex$subexpression$2",symbols:["HEXDIG","HEXDIG","HEXDIG"]},{name:"IPv6_hex",symbols:["IPv6_hex$subexpression$2"]},{name:"IPv6_hex$subexpression$3",symbols:["HEXDIG","HEXDIG","HEXDIG","HEXDIG"]},{name:"IPv6_hex",symbols:["IPv6_hex$subexpression$3"]},{name:"IPv6_full$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6_full$macrocall$1",symbols:["IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2"]},{name:"IPv6_full",symbols:["IPv6_hex","IPv6_full$macrocall$1"]},{name:"IPv6_comp$ebnf$1$subexpression$1$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6_comp$ebnf$1$subexpression$1$macrocall$1",symbols:["IPv6_comp$ebnf$1$subexpression$1$macrocall$2","IPv6_comp$ebnf$1$subexpression$1$macrocall$2","IPv6_comp$ebnf$1$subexpression$1$macrocall$2","IPv6_comp$ebnf$1$subexpression$1$macrocall$2","IPv6_comp$ebnf$1$subexpression$1$macrocall$2"]},{name:"IPv6_comp$ebnf$1$subexpression$1",symbols:["IPv6_hex","IPv6_comp$ebnf$1$subexpression$1$macrocall$1"]},{name:"IPv6_comp$ebnf$1",symbols:["IPv6_comp$ebnf$1$subexpression$1"],postprocess:et},{name:"IPv6_comp$ebnf$1",symbols:[],postprocess:()=>null},{name:"IPv6_comp$string$1",symbols:[{literal:":"},{literal:":"}],postprocess:(e)=>e.join("")},{name:"IPv6_comp$ebnf$2$subexpression$1$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6_comp$ebnf$2$subexpression$1$macrocall$1",symbols:["IPv6_comp$ebnf$2$subexpression$1$macrocall$2","IPv6_comp$ebnf$2$subexpression$1$macrocall$2","IPv6_comp$ebnf$2$subexpression$1$macrocall$2","IPv6_comp$ebnf$2$subexpression$1$macrocall$2","IPv6_comp$ebnf$2$subexpression$1$macrocall$2"]},{name:"IPv6_comp$ebnf$2$subexpression$1",symbols:["IPv6_hex","IPv6_comp$ebnf$2$subexpression$1$macrocall$1"]},{name:"IPv6_comp$ebnf$2",symbols:["IPv6_comp$ebnf$2$subexpression$1"],postprocess:et},{name:"IPv6_comp$ebnf$2",symbols:[],postprocess:()=>null},{name:"IPv6_comp",symbols:["IPv6_comp$ebnf$1","IPv6_comp$string$1","IPv6_comp$ebnf$2"]},{name:"IPv6v4_full$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6v4_full$macrocall$1",symbols:["IPv6v4_full$macrocall$2","IPv6v4_full$macrocall$2","IPv6v4_full$macrocall$2","IPv6v4_full$macrocall$2","IPv6v4_full$macrocall$2"]},{name:"IPv6v4_full",symbols:["IPv6_hex","IPv6v4_full$macrocall$1",{literal:":"},"IPv4_address_literal"]},{name:"IPv6v4_comp$ebnf$1$subexpression$1$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6v4_comp$ebnf$1$subexpression$1$macrocall$1",symbols:["IPv6v4_comp$ebnf$1$subexpression$1$macrocall$2","IPv6v4_comp$ebnf$1$subexpression$1$macrocall$2","IPv6v4_comp$ebnf$1$subexpression$1$macrocall$2"]},{name:"IPv6v4_comp$ebnf$1$subexpression$1",symbols:["IPv6_hex","IPv6v4_comp$ebnf$1$subexpression$1$macrocall$1"]},{name:"IPv6v4_comp$ebnf$1",symbols:["IPv6v4_comp$ebnf$1$subexpression$1"],postprocess:et},{name:"IPv6v4_comp$ebnf$1",symbols:[],postprocess:()=>null},{name:"IPv6v4_comp$string$1",symbols:[{literal:":"},{literal:":"}],postprocess:(e)=>e.join("")},{name:"IPv6v4_comp$ebnf$2$subexpression$1$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6v4_comp$ebnf$2$subexpression$1$macrocall$1",symbols:["IPv6v4_comp$ebnf$2$subexpression$1$macrocall$2","IPv6v4_comp$ebnf$2$subexpression$1$macrocall$2","IPv6v4_comp$ebnf$2$subexpression$1$macrocall$2"]},{name:"IPv6v4_comp$ebnf$2$subexpression$1",symbols:["IPv6_hex","IPv6v4_comp$ebnf$2$subexpression$1$macrocall$1",{literal:":"}]},{name:"IPv6v4_comp$ebnf$2",symbols:["IPv6v4_comp$ebnf$2$subexpression$1"],postprocess:et},{name:"IPv6v4_comp$ebnf$2",symbols:[],postprocess:()=>null},{name:"IPv6v4_comp",symbols:["IPv6v4_comp$ebnf$1","IPv6v4_comp$string$1","IPv6v4_comp$ebnf$2","IPv4_address_literal"]},{name:"DIGIT",symbols:[/[0-9]/],postprocess:et},{name:"ALPHA_DIGIT_U",symbols:[/[0-9A-Za-z\u0080-\uFFFF]/],postprocess:et},{name:"ALPHA_DIGIT",symbols:[/[0-9A-Za-z]/],postprocess:et},{name:"ALPHA_DIG_DASH",symbols:[/[-0-9A-Za-z]/],postprocess:et},{name:"ALPHA_DIG_DASH_U",symbols:[/[-0-9A-Za-z\u0080-\uFFFF]/],postprocess:et},{name:"HEXDIG",symbols:[/[0-9A-Fa-f]/],postprocess:et},{name:"DQUOTE",symbols:[{literal:'"'}],postprocess:et}],ParserStart:"Reverse_path"};bl.default=Hk});var ua=b(function(vt){var Kk=vt&&vt.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(vt,"__esModule",{value:!0});vt.canonicalize=vt.canonicalize_quoted_string=vt.normalize=vt.normalize_dot_string=vt.parse=void 0;var ca=xg(),Cg=Kk(jg());Cg.default.ParserStart="Mailbox";var Gk=ca.Grammar.fromCompiled(Cg.default);function Sl(e){if(e.length>986)throw Error("address too long");let r=new ca.Parser(Gk);if(r.feed(e),r.results.length!==1)throw Error("address parsing failed: ambiguous grammar");let s=e.lastIndexOf("@"),n=e.substring(s+1);if(n[0]!=="["){if(n.length>253)throw Error("domain too long");let i=n.split(".");if(i.length<2)throw Error("domain not fully qualified");if(i[i.length-1].length<2)throw Error("top level domain label too short");if(i.sort(function(o,a){return a.length-o.length}),i[0].length>63)throw Error("domain label too long")}return r.results[0]}vt.parse=Sl;function Ng(e){return function(){let s=e.indexOf("+");if(s===-1)return e;return e.substr(0,s)}().replace(/\./g,"").toLowerCase()}vt.normalize_dot_string=Ng;function Jk(e){var t,r;let s=Sl(e),n=(t=s.domainPart.AddressLiteral)!==null&&t!==void 0?t:s.domainPart.DomainName.toLowerCase();return`${(r=s.localPart.QuotedString)!==null&&r!==void 0?r:Ng(s.localPart.DotString)}@${n}`}vt.normalize=Jk;function qg(e){return`"${e.substr(1).substr(0,e.length-2).replace(/(?:\\(.))/g,"$1").replace(/(?:(["\\]))/g,"\\$1")}"`}vt.canonicalize_quoted_string=qg;function Wk(e){var t;let r=Sl(e),s=(t=r.domainPart.AddressLiteral)!==null&&t!==void 0?t:r.domainPart.DomainName.toLowerCase();return`${r.localPart.QuotedString?qg(r.localPart.QuotedString):r.localPart.DotString}@${s}`}vt.canonicalize=Wk});var Kg=b(function(kT,Hg){var la=Object.prototype.hasOwnProperty,Lg=Object.prototype.toString,{defineProperty:Dg,getOwnPropertyDescriptor:Mg}=Object,Vg=function(t){if(typeof Array.isArray==="function")return Array.isArray(t);return Lg.call(t)==="[object Array]"},Ug=function(t){if(!t||Lg.call(t)!=="[object Object]")return!1;var r=la.call(t,"constructor"),s=t.constructor&&t.constructor.prototype&&la.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!r&&!s)return!1;var n;for(n in t);return typeof n>"u"||la.call(t,n)},zg=function(t,r){if(Dg&&r.name==="__proto__")Dg(t,r.name,{enumerable:!0,configurable:!0,value:r.newValue,writable:!0});else t[r.name]=r.newValue},Fg=function(t,r){if(r==="__proto__"){if(!la.call(t,r))return;else if(Mg)return Mg(t,r).value}return t[r]};Hg.exports=function e(){var t,r,s,n,i,o,a=arguments[0],c=1,u=arguments.length,l=!1;if(typeof a==="boolean")l=a,a=arguments[1]||{},c=2;if(a==null||typeof a!=="object"&&typeof a!=="function")a={};for(;c<u;++c)if(t=arguments[c],t!=null){for(r in t)if(s=Fg(a,r),n=Fg(t,r),a!==n){if(l&&n&&(Ug(n)||(i=Vg(n)))){if(i)i=!1,o=s&&Vg(s)?s:[];else o=s&&Ug(s)?s:{};zg(a,{name:r,newValue:e(l,o,n)})}else if(typeof n<"u")zg(a,{name:r,newValue:n})}}return a}});var Gg=b(function(RT,Qk){Qk.exports=[{scheme:"aaa",description:"Diameter Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6733"}]},{scheme:"aaas",description:"Diameter Protocol with Secure Transport",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6733"}]},{scheme:"about",description:"about",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6694"}]},{scheme:"acap",description:"application configuration access protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2244"}]},{scheme:"acct",description:"acct",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7565"}]},{scheme:"cap",description:"Calendar Access Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4324"}]},{scheme:"cid",description:"content identifier",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2392"}]},{scheme:"coap",description:"coap",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7252"}]},{scheme:"coaps",description:"coaps",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7252"}]},{scheme:"crid",description:"TV-Anytime Content Reference Identifier",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4078"}]},{scheme:"data",description:"data",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2397"}]},{scheme:"dav",description:"dav",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4918"}]},{scheme:"dict",description:"dictionary service protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2229"}]},{scheme:"dns",description:"Domain Name System",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4501"}]},{scheme:"example",description:"example",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7595"}]},{scheme:"file",description:"Host-specific file names",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc1738"}]},{scheme:"ftp",description:"File Transfer Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc1738"}]},{scheme:"geo",description:"Geographic Locations",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5870"}]},{scheme:"go",description:"go",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3368"}]},{scheme:"gopher",description:"The Gopher Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4266"}]},{scheme:"h323",description:"H.323",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3508"}]},{scheme:"http",description:"Hypertext Transfer Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7230"}]},{scheme:"https",description:"Hypertext Transfer Protocol Secure",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7230"}]},{scheme:"iax",description:"Inter-Asterisk eXchange Version 2",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5456"}]},{scheme:"icap",description:"Internet Content Adaptation Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3507"}]},{scheme:"im",description:"Instant Messaging",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3860"}]},{scheme:"imap",description:"internet message access protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5092"}]},{scheme:"info",description:`Information Assets with Identifiers in Public Namespaces.
27
+ (section 3) defines an "info" registry
28
+ of public namespaces, which is maintained by NISO and can be accessed
29
+ from .`,reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4452"}]},{scheme:"ipp",description:"Internet Printing Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3510"}]},{scheme:"ipps",description:"Internet Printing Protocol over HTTPS",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7472"}]},{scheme:"iris",description:"Internet Registry Information Service",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3981"}]},{scheme:"iris.beep",description:"iris.beep",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3983"}]},{scheme:"iris.lwz",description:"iris.lwz",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4993"}]},{scheme:"iris.xpc",description:"iris.xpc",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4992"}]},{scheme:"iris.xpcs",description:"iris.xpcs",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4992"}]},{scheme:"jabber",description:"jabber",reference:[],template:"http://www.iana.org/assignments/uri-schemes/perm/jabber"},{scheme:"ldap",description:"Lightweight Directory Access Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4516"}]},{scheme:"mailto",description:"Electronic mail address",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6068"}]},{scheme:"mid",description:"message identifier",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2392"}]},{scheme:"msrp",description:"Message Session Relay Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4975"}]},{scheme:"msrps",description:"Message Session Relay Protocol Secure",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4975"}]},{scheme:"mtqp",description:"Message Tracking Query Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3887"}]},{scheme:"mupdate",description:"Mailbox Update (MUPDATE) Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3656"}]},{scheme:"news",description:"USENET news",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5538"}]},{scheme:"nfs",description:"network file system protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2224"}]},{scheme:"ni",description:"ni",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6920"}]},{scheme:"nih",description:"nih",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6920"}]},{scheme:"nntp",description:"USENET news using NNTP access",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5538"}]},{scheme:"opaquelocktoken",description:"opaquelocktokent",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4918"}]},{scheme:"pkcs11",description:"PKCS#11",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7512"}]},{scheme:"pop",description:"Post Office Protocol v3",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2384"}]},{scheme:"pres",description:"Presence",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3859"}]},{scheme:"reload",description:"reload",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6940"}]},{scheme:"rtsp",description:"Real-time Streaming Protocol (RTSP)",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2326"},{type:"draft",href:"http://www.iana.org/go/RFC-ietf-mmusic-rfc2326bis-40"}]},{scheme:"rtsps",description:"Real-time Streaming Protocol (RTSP) over TLS",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2326"},{type:"draft",href:"http://www.iana.org/go/RFC-ietf-mmusic-rfc2326bis-40"}]},{scheme:"rtspu",description:"Real-time Streaming Protocol (RTSP) over unreliable datagram transport",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2326"}]},{scheme:"service",description:"service location",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2609"}]},{scheme:"session",description:"session",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6787"}]},{scheme:"shttp",description:"Secure Hypertext Transfer Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2660"}]},{scheme:"sieve",description:"ManageSieve Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5804"}]},{scheme:"sip",description:"session initiation protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3261"}]},{scheme:"sips",description:"secure session initiation protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3261"}]},{scheme:"sms",description:"Short Message Service",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5724"}]},{scheme:"snmp",description:"Simple Network Management Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4088"}]},{scheme:"soap.beep",description:"soap.beep",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4227"}]},{scheme:"soap.beeps",description:"soap.beeps",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4227"}]},{scheme:"stun",description:"stun",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7064"}]},{scheme:"stuns",description:"stuns",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7064"}]},{scheme:"tag",description:"tag",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4151"}]},{scheme:"tel",description:"telephone",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3966"}]},{scheme:"telnet",description:"Reference to interactive sessions",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4248"}]},{scheme:"tftp",description:"Trivial File Transfer Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3617"}]},{scheme:"thismessage",description:"multipart/related relative reference resolution",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2557"}],template:"http://www.iana.org/assignments/uri-schemes/perm/thismessage"},{scheme:"tip",description:"Transaction Internet Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2371"}]},{scheme:"tn3270",description:"Interactive 3270 emulation sessions",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6270"}]},{scheme:"turn",description:"turn",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7065"}]},{scheme:"turns",description:"turns",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7065"}]},{scheme:"tv",description:"TV Broadcasts",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2838"}]},{scheme:"urn",description:"Uniform Resource Names",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2141"},{type:"registry",href:"http://www.iana.org/assignments/urn-namespaces"}]},{scheme:"vemmi",description:"versatile multimedia interface",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2122"}]},{scheme:"vnc",description:"Remote Framebuffer Protocol",reference:[{type:"draft",href:"http://www.iana.org/go/RFC-warden-appsawg-vnc-scheme-10"}]},{scheme:"ws",description:"WebSocket connections",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6455"}]},{scheme:"wss",description:"Encrypted WebSocket connections",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6455"}]},{scheme:"xcon",description:"xcon",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6501"}]},{scheme:"xcon-userid",description:"xcon-userid",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6501"}]},{scheme:"xmlrpc.beep",description:"xmlrpc.beep",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3529"}]},{scheme:"xmlrpc.beeps",description:"xmlrpc.beeps",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3529"}]},{scheme:"xmpp",description:"Extensible Messaging and Presence Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5122"}]},{scheme:"z39.50r",description:"Z39.50 Retrieval",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2056"}]},{scheme:"z39.50s",description:"Z39.50 Session",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2056"}]}]});var Jg=b(function(IT,Bk){Bk.exports=[{scheme:"acr",description:"acr",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/acr"},{scheme:"adiumxtra",description:"adiumxtra",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/adiumxtra"},{scheme:"afp",description:"afp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/afp"},{scheme:"afs",description:"Andrew File System global file names",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc1738"}]},{scheme:"aim",description:"aim",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/aim"},{scheme:"appdata",description:"appdata",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/appdata"},{scheme:"apt",description:"apt",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/apt"},{scheme:"attachment",description:"attachment",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/attachment"},{scheme:"aw",description:"aw",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/aw"},{scheme:"barion",description:"barion",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/barion"},{scheme:"beshare",description:"beshare",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/beshare"},{scheme:"bitcoin",description:"bitcoin",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/bitcoin"},{scheme:"blob",description:"blob",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/blob"},{scheme:"bolo",description:"bolo",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/bolo"},{scheme:"callto",description:"callto",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/callto"},{scheme:"chrome",description:"chrome",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/chrome"},{scheme:"chrome-extension",description:"chrome-extension",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/chrome-extension"},{scheme:"com-eventbrite-attendee",description:"com-eventbrite-attendee",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/com-eventbrite-attendee"},{scheme:"content",description:"content",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/content"},{scheme:"cvs",description:"cvs",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/cvs"},{scheme:"dis",description:"dis",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/dis"},{scheme:"dlna-playcontainer",description:"dlna-playcontainer",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/dlna-playcontainer"},{scheme:"dlna-playsingle",description:"dlna-playsingle",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/dlna-playsingle"},{scheme:"dntp",description:"dntp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/dntp"},{scheme:"dtn",description:"DTNRG research and development",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5050"}]},{scheme:"dvb",description:"dvb",reference:[{type:"draft",href:"http://www.iana.org/go/draft-mcroberts-uri-dvb"}]},{scheme:"ed2k",description:"ed2k",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ed2k"},{scheme:"facetime",description:"facetime",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/facetime"},{scheme:"feed",description:"feed",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/feed"},{scheme:"feedready",description:"feedready",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/feedready"},{scheme:"finger",description:"finger",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/finger"},{scheme:"fish",description:"fish",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/fish"},{scheme:"gg",description:"gg",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/gg"},{scheme:"git",description:"git",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/git"},{scheme:"gizmoproject",description:"gizmoproject",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/gizmoproject"},{scheme:"gtalk",description:"gtalk",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/gtalk"},{scheme:"ham",description:"ham",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7046"}]},{scheme:"hcp",description:"hcp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/hcp"},{scheme:"icon",description:"icon",reference:[{type:"draft",href:"http://www.iana.org/go/draft-lafayette-icon-uri-scheme"}]},{scheme:"iotdisco",description:"iotdisco",reference:[{type:"uri",href:"http://www.iana.org/assignments/uri-schemes/prov/iotdisco.pdf"}],template:"http://www.iana.org/assignments/uri-schemes/prov/iotdisco"},{scheme:"ipn",description:"ipn",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6260"}]},{scheme:"irc",description:"irc",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/irc"},{scheme:"irc6",description:"irc6",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/irc6"},{scheme:"ircs",description:"ircs",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ircs"},{scheme:"isostore",description:"isostore",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/isostore"},{scheme:"itms",description:"itms",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/itms"},{scheme:"jar",description:"jar",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/jar"},{scheme:"jms",description:"Java Message Service",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6167"}]},{scheme:"keyparc",description:"keyparc",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/keyparc"},{scheme:"lastfm",description:"lastfm",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/lastfm"},{scheme:"ldaps",description:"ldaps",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ldaps"},{scheme:"magnet",description:"magnet",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/magnet"},{scheme:"maps",description:"maps",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/maps"},{scheme:"market",description:"market",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/market"},{scheme:"message",description:"message",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/message"},{scheme:"mms",description:"mms",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/mms"},{scheme:"ms-access",description:"ms-access",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-access"},{scheme:"ms-drive-to",description:"ms-drive-to",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-drive-to"},{scheme:"ms-enrollment",description:"ms-enrollment",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-enrollment"},{scheme:"ms-excel",description:"ms-excel",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-excel"},{scheme:"ms-getoffice",description:"ms-getoffice",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-getoffice"},{scheme:"ms-help",description:"ms-help",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-help"},{scheme:"ms-infopath",description:"ms-infopath",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-infopath"},{scheme:"ms-media-stream-id",description:"ms-media-stream-id",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-media-stream-id"},{scheme:"ms-powerpoint",description:"ms-powerpoint",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-powerpoint"},{scheme:"ms-project",description:"ms-project",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-project"},{scheme:"ms-publisher",description:"ms-publisher",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-publisher"},{scheme:"ms-search-repair",description:"ms-search-repair",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-search-repair"},{scheme:"ms-secondary-screen-controller",description:"ms-secondary-screen-controller",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-secondary-screen-controller"},{scheme:"ms-secondary-screen-setup",description:"ms-secondary-screen-setup",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-secondary-screen-setup"},{scheme:"ms-settings",description:"ms-settings",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings"},{scheme:"ms-settings-airplanemode",description:"ms-settings-airplanemode",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-airplanemode"},{scheme:"ms-settings-bluetooth",description:"ms-settings-bluetooth",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-bluetooth"},{scheme:"ms-settings-camera",description:"ms-settings-camera",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-camera"},{scheme:"ms-settings-cellular",description:"ms-settings-cellular",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-cellular"},{scheme:"ms-settings-cloudstorage",description:"ms-settings-cloudstorage",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-cloudstorage"},{scheme:"ms-settings-connectabledevices",description:"ms-settings-connectabledevices",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-connectabledevices"},{scheme:"ms-settings-displays-topology",description:"ms-settings-displays-topology",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-displays-topology"},{scheme:"ms-settings-emailandaccounts",description:"ms-settings-emailandaccounts",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-emailandaccounts"},{scheme:"ms-settings-language",description:"ms-settings-language",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-language"},{scheme:"ms-settings-location",description:"ms-settings-location",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-location"},{scheme:"ms-settings-lock",description:"ms-settings-lock",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-lock"},{scheme:"ms-settings-nfctransactions",description:"ms-settings-nfctransactions",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-nfctransactions"},{scheme:"ms-settings-notifications",description:"ms-settings-notifications",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-notifications"},{scheme:"ms-settings-power",description:"ms-settings-power",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-power"},{scheme:"ms-settings-privacy",description:"ms-settings-privacy",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-privacy"},{scheme:"ms-settings-proximity",description:"ms-settings-proximity",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-proximity"},{scheme:"ms-settings-screenrotation",description:"ms-settings-screenrotation",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-screenrotation"},{scheme:"ms-settings-wifi",description:"ms-settings-wifi",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-wifi"},{scheme:"ms-settings-workplace",description:"ms-settings-workplace",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-workplace"},{scheme:"ms-spd",description:"ms-spd",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-spd"},{scheme:"ms-transit-to",description:"ms-transit-to",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-transit-to"},{scheme:"ms-visio",description:"ms-visio",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-visio"},{scheme:"ms-walk-to",description:"ms-walk-to",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-walk-to"},{scheme:"ms-word",description:"ms-word",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-word"},{scheme:"msnim",description:"msnim",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/msnim"},{scheme:"mumble",description:"mumble",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/mumble"},{scheme:"mvn",description:"mvn",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/mvn"},{scheme:"notes",description:"notes",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/notes"},{scheme:"oid",description:"oid",reference:[{type:"draft",href:"http://www.iana.org/go/draft-larmouth-oid-iri"}],template:"http://www.iana.org/assignments/uri-schemes/prov/oid"},{scheme:"palm",description:"palm",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/palm"},{scheme:"paparazzi",description:"paparazzi",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/paparazzi"},{scheme:"platform",description:"platform",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/platform"},{scheme:"proxy",description:"proxy",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/proxy"},{scheme:"psyc",description:"psyc",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/psyc"},{scheme:"query",description:"query",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/query"},{scheme:"redis",description:"redis",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/redis"},{scheme:"rediss",description:"rediss",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/rediss"},{scheme:"res",description:"res",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/res"},{scheme:"resource",description:"resource",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/resource"},{scheme:"rmi",description:"rmi",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/rmi"},{scheme:"rsync",description:"rsync",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5781"}]},{scheme:"rtmfp",description:"rtmfp",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7425"}],template:"http://www.iana.org/assignments/uri-schemes/prov/rtmfp"},{scheme:"rtmp",description:"rtmp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/rtmp"},{scheme:"secondlife",description:"query",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/secondlife"},{scheme:"sftp",description:"query",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/sftp"},{scheme:"sgn",description:"sgn",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/sgn"},{scheme:"skype",description:"skype",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/skype"},{scheme:"smb",description:"smb",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/smb"},{scheme:"smtp",description:"smtp",reference:[{type:"draft",href:"http://www.iana.org/go/draft-melnikov-smime-msa-to-mda"}],template:"http://www.iana.org/assignments/uri-schemes/prov/smtp"},{scheme:"soldat",description:"soldat",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/soldat"},{scheme:"spotify",description:"spotify",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/spotify"},{scheme:"ssh",description:"ssh",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ssh"},{scheme:"steam",description:"steam",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/steam"},{scheme:"submit",description:"submit",reference:[{type:"draft",href:"http://www.iana.org/go/draft-melnikov-smime-msa-to-mda"}],template:"http://www.iana.org/assignments/uri-schemes/prov/submit"},{scheme:"svn",description:"svn",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/svn"},{scheme:"teamspeak",description:"teamspeak",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/teamspeak"},{scheme:"teliaeid",description:"teliaeid",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/teliaeid"},{scheme:"things",description:"things",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/things"},{scheme:"tool",description:"tool",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/tool"},{scheme:"udp",description:"udp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/udp"},{scheme:"unreal",description:"unreal",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/unreal"},{scheme:"ut2004",description:"ut2004",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ut2004"},{scheme:"v-event",description:"v-event",reference:[{type:"draft",href:"http://www.iana.org/go/draft-menderico-v-event-uri"}],template:"http://www.iana.org/assignments/uri-schemes/prov/v-event"},{scheme:"ventrilo",description:"ventrilo",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ventrilo"},{scheme:"view-source",description:"view-source",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/view-source"},{scheme:"webcal",description:"webcal",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/webcal"},{scheme:"wpid",description:"wpid",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/wpid"},{scheme:"wtai",description:"wtai",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/wtai"},{scheme:"wyciwyg",description:"wyciwyg",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/wyciwyg"},{scheme:"xfire",description:"xfire",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/xfire"},{scheme:"xri",description:"xri",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/xri"},{scheme:"ymsgr",description:"ymsgr",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ymsgr"}]});var Wg=b(function(OT,Xk){Xk.exports=[{scheme:"fax",description:"fax",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2806"},{type:"rfc",href:"http://www.iana.org/go/rfc3966"}]},{scheme:"filesystem",description:"filesystem",reference:[],template:"http://www.iana.org/assignments/uri-schemes/historic/filesystem"},{scheme:"mailserver",description:"Access to data available from mail servers",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6196"}]},{scheme:"modem",description:"modem",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2806"},{type:"rfc",href:"http://www.iana.org/go/rfc3966"}]},{scheme:"pack",description:"pack",reference:[{type:"draft",href:"http://www.iana.org/go/draft-shur-pack-uri-scheme"}],template:"http://www.iana.org/assignments/uri-schemes/historic/pack"},{scheme:"prospero",description:"Prospero Directory Service",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4157"}]},{scheme:"snews",description:"NNTP over SSL/TLS",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5538"}]},{scheme:"videotex",description:"videotex",reference:[{type:"draft",href:"http://www.iana.org/go/draft-mavrakis-videotex-url-spec"},{type:"rfc",href:"http://www.iana.org/go/rfc2122"},{type:"rfc",href:"http://www.iana.org/go/rfc3986"}],template:"http://www.iana.org/assignments/uri-schemes/historic/videotex"},{scheme:"wais",description:"Wide Area Information Servers",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4156"}]},{scheme:"z39.50",description:"Z39.50 information access",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc1738"},{type:"rfc",href:"http://www.iana.org/go/rfc2056"}]}]});var Qg=b(function(TT,Zk){Zk.exports=[{scheme:"android-app"},{scheme:"webpack"},{scheme:"s3",description:"Amazon Web Services S3 bucket"},{scheme:"gs",description:"Google Cloud Storage"},{scheme:"mqtt",description:"Message Queuing Telemetry Transport Protocol"},{scheme:"modbus+tcp",description:"Modbus over TCP"}]});var El=b(function(xT,Bg){var Pl=Kg(),bi={permanent:Gg(),provosional:Jg(),historical:Wg()},da={};Object.keys(bi).forEach(function(e){bi[e].forEach(function(t){da[t.scheme]=Pl(t,{type:e})})});bi.unofficial=Qg().filter(function(e){return!da[e.scheme]});bi.unofficial.forEach(function(e){da[e.scheme]=Pl(e,{type:"unofficial"})});Bg.exports=Pl(bi,{allByName:da})});var Yg=b(function(AT,Zg){var{parse:Yk}=Fo(),{addressParser:eR}=ua(),Xg=El();function tR(e){try{return eR(e),!0}catch(t){return!1}}Zg.exports=(e)=>{let t=Yk(e);if(t.scheme==="mailto"&&t.to.every(tR))return!0;if(t.reference==="absolute"&&Xg.allByName[t.scheme])return!0;return!1}});var tv=b(function(jT,ev){ev.exports=/^P(?!$)(\d+(?:\.\d+)?Y)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?W)?(\d+(?:\.\d+)?D)?(T(?=\d)(\d+(?:\.\d+)?H)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?S)?)?$/});var sv=b(function(CT,rv){var{parse:rR}=ua();rv.exports=(e)=>{try{return rR(e),!0}catch(t){return!1}}});var fR={};function kl(e){return this[e]}function lR(e,t){this[e]=uR.bind(null,t)}var sR,nR,Si,nv,fa,iR=(e,t,r)=>{var s=t&&typeof t==="object"||typeof t==="function"?nv(t):[];for(let n of s)if(!fa.call(e,n)&&n!=="default")Si(e,n,{get:kl.bind(t,n),enumerable:!0});if(r){for(let n of s)if(!fa.call(r,n)&&n!=="default")Si(r,n,{get:kl.bind(t,n),enumerable:!0});return r}},oR,aR,iv=(e,t,r)=>{var s=e!=null&&typeof e==="object";if(s){var n=t?oR??=new WeakMap:aR??=new WeakMap,i=n.get(e);if(i)return i}r=e!=null?sR(nR(e)):{};let o=t||!e||!e.__esModule||!fa.call(e,"default")?Si(r,"default",{value:e,enumerable:!0}):r;if(e&&typeof e==="object"||typeof e==="function"){for(let a of nv(e))if(!fa.call(o,a))Si(o,a,{get:kl.bind(e,a),enumerable:!0})}if(s)n.set(e,o);return o},cR=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),uR=(e)=>e,dR=(e,t)=>{for(var r in t)Si(e,r,{get:t[r],enumerable:!0,configurable:!0,set:lR.bind(t,r)})},ov,av,cv,NT;var uv=g$(()=>{sR=Object.create,{getPrototypeOf:nR,defineProperty:Si,getOwnPropertyNames:nv}=Object,fa=Object.prototype.hasOwnProperty;ov=cR(function(e,t){var r=/^xn--/,s=/[^\0-\x7F]/,n=/[\x2E\u3002\uFF0E\uFF61]/g,i={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},o=Math.floor,a=String.fromCharCode;function c(S){throw RangeError(i[S])}function u(S,M){let Y=[],Q=S.length;while(Q--)Y[Q]=M(S[Q]);return Y}function l(S,M){let Y=S.split("@"),Q="";if(Y.length>1)Q=Y[0]+"@",S=Y[1];S=S.replace(n,".");let me=S.split("."),re=u(me,M).join(".");return Q+re}function d(S){let M=[],Y=0,Q=S.length;while(Y<Q){let me=S.charCodeAt(Y++);if(me>=55296&&me<=56319&&Y<Q){let re=S.charCodeAt(Y++);if((re&64512)==56320)M.push(((me&1023)<<10)+(re&1023)+65536);else M.push(me),Y--}else M.push(me)}return M}var v=(S)=>String.fromCodePoint(...S),m=function(S){if(S>=48&&S<58)return 26+(S-48);if(S>=65&&S<91)return S-65;if(S>=97&&S<123)return S-97;return 36},h=function(S,M){return S+22+75*(S<26)-((M!=0)<<5)},p=function(S,M,Y){let Q=0;S=Y?o(S/700):S>>1,S+=o(S/M);for(;S>455;Q+=36)S=o(S/35);return o(Q+36*S/(S+38))},_=function(S){let M=[],Y=S.length,Q=0,me=128,re=72,Le=S.lastIndexOf("-");if(Le<0)Le=0;for(let Ee=0;Ee<Le;++Ee){if(S.charCodeAt(Ee)>=128)c("not-basic");M.push(S.charCodeAt(Ee))}for(let Ee=Le>0?Le+1:0;Ee<Y;){let We=Q;for(let lt=1,Nt=36;;Nt+=36){if(Ee>=Y)c("invalid-input");let qt=m(S.charCodeAt(Ee++));if(qt>=36)c("invalid-input");if(qt>o((2147483647-Q)/lt))c("overflow");Q+=qt*lt;let Vt=Nt<=re?1:Nt>=re+26?26:Nt-re;if(qt<Vt)break;let Tr=36-Vt;if(lt>o(2147483647/Tr))c("overflow");lt*=Tr}let it=M.length+1;if(re=p(Q-We,it,We==0),o(Q/it)>2147483647-me)c("overflow");me+=o(Q/it),Q%=it,M.splice(Q++,0,me)}return String.fromCodePoint(...M)},w=function(S){let M=[];S=d(S);let Y=S.length,Q=128,me=0,re=72;for(let We of S)if(We<128)M.push(a(We));let Le=M.length,Ee=Le;if(Le)M.push("-");while(Ee<Y){let We=2147483647;for(let lt of S)if(lt>=Q&&lt<We)We=lt;let it=Ee+1;if(We-Q>o((2147483647-me)/it))c("overflow");me+=(We-Q)*it,Q=We;for(let lt of S){if(lt<Q&&++me>2147483647)c("overflow");if(lt===Q){let Nt=me;for(let qt=36;;qt+=36){let Vt=qt<=re?1:qt>=re+26?26:qt-re;if(Nt<Vt)break;let Tr=Nt-Vt,Mn=36-Vt;M.push(a(h(Vt+Tr%Mn,0))),Nt=o(Tr/Mn)}M.push(a(h(Nt,0))),re=p(me,it,Ee===Le),me=0,++Ee}}++me,++Q}return M.join("")},I=function(S){return l(S,function(M){return r.test(M)?_(M.slice(4).toLowerCase()):M})},O=function(S){return l(S,function(M){return s.test(M)?"xn--"+w(M):M})},D={version:"2.3.1",ucs2:{decode:d,encode:v},decode:_,encode:w,toASCII:O,toUnicode:I};t.exports=D}),av={};dR(av,{default:()=>cv.default});iR(av,iv(ov()));cv=iv(ov()),NT=cv.default});var dv=b(function(qT,lv){var{toASCII:pR}=(uv(),nd(fR)),mR=/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i;lv.exports=(e)=>{let t=pR(e);return t.replace(/\.$/,"").length<=253&&mR.test(t)}});var pv=b(function(DT,fv){var{parse:hR}=Fo(),{addressParser:yR}=ua(),pa=El();function gR(e){try{return yR(e),!0}catch(t){return!1}}fv.exports=(e)=>{let t=hR(e);if(t.scheme==="mailto"&&t.to.every(gR))return!0;if(t.reference==="absolute"&&t.path!==void 0&&pa.allByName[t.scheme])return!0;if(t.scheme&&!pa.allByName[t.scheme])return!1;return t.path!==void 0&&(t.reference==="relative"||t.reference==="same-document"||t.reference==="uri")}});var mv=b(function(MT,Dn){MT.iri=Yg();MT.duration=tv();MT["idn-email"]=sv();MT["idn-hostname"]=dv();MT["iri-reference"]=pv()});var gv=b(function(VT,yv){var hv=mv();yv.exports=(e,t={})=>{let r=Object.keys(hv),s=r;if(t.formats){if(!Array.isArray(t.formats))throw Error("options.formats must be an array");s=t.formats}return r.filter((n)=>s.includes(n)).forEach((n)=>{e.addFormat(n,hv[n])}),e}});var kv=b(function(hx,Al){var IR=Object.prototype.hasOwnProperty,ut="~";function Ri(){}if(Object.create){if(Ri.prototype=Object.create(null),!new Ri().__proto__)ut=!1}function OR(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function Ev(e,t,r,s,n){if(typeof r!=="function")throw TypeError("The listener must be a function");var i=new OR(r,s||e,n),o=ut?ut+t:t;if(!e._events[o])e._events[o]=i,e._eventsCount++;else if(!e._events[o].fn)e._events[o].push(i);else e._events[o]=[e._events[o],i];return e}function ya(e,t){if(--e._eventsCount===0)e._events=new Ri;else delete e._events[t]}function nt(){this._events=new Ri,this._eventsCount=0}nt.prototype.eventNames=function(){var t=[],r,s;if(this._eventsCount===0)return t;for(s in r=this._events)if(IR.call(r,s))t.push(ut?s.slice(1):s);if(Object.getOwnPropertySymbols)return t.concat(Object.getOwnPropertySymbols(r));return t};nt.prototype.listeners=function(t){var r=ut?ut+t:t,s=this._events[r];if(!s)return[];if(s.fn)return[s.fn];for(var n=0,i=s.length,o=Array(i);n<i;n++)o[n]=s[n].fn;return o};nt.prototype.listenerCount=function(t){var r=ut?ut+t:t,s=this._events[r];if(!s)return 0;if(s.fn)return 1;return s.length};nt.prototype.emit=function(t,r,s,n,i,o){var a=ut?ut+t:t;if(!this._events[a])return!1;var c=this._events[a],u=arguments.length,l,d;if(c.fn){if(c.once)this.removeListener(t,c.fn,void 0,!0);switch(u){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,r),!0;case 3:return c.fn.call(c.context,r,s),!0;case 4:return c.fn.call(c.context,r,s,n),!0;case 5:return c.fn.call(c.context,r,s,n,i),!0;case 6:return c.fn.call(c.context,r,s,n,i,o),!0}for(d=1,l=Array(u-1);d<u;d++)l[d-1]=arguments[d];c.fn.apply(c.context,l)}else{var v=c.length,m;for(d=0;d<v;d++){if(c[d].once)this.removeListener(t,c[d].fn,void 0,!0);switch(u){case 1:c[d].fn.call(c[d].context);break;case 2:c[d].fn.call(c[d].context,r);break;case 3:c[d].fn.call(c[d].context,r,s);break;case 4:c[d].fn.call(c[d].context,r,s,n);break;default:if(!l)for(m=1,l=Array(u-1);m<u;m++)l[m-1]=arguments[m];c[d].fn.apply(c[d].context,l)}}}return!0};nt.prototype.on=function(t,r,s){return Ev(this,t,r,s,!1)};nt.prototype.once=function(t,r,s){return Ev(this,t,r,s,!0)};nt.prototype.removeListener=function(t,r,s,n){var i=ut?ut+t:t;if(!this._events[i])return this;if(!r)return ya(this,i),this;var o=this._events[i];if(o.fn){if(o.fn===r&&(!n||o.once)&&(!s||o.context===s))ya(this,i)}else{for(var a=0,c=[],u=o.length;a<u;a++)if(o[a].fn!==r||n&&!o[a].once||s&&o[a].context!==s)c.push(o[a]);if(c.length)this._events[i]=c.length===1?c[0]:c;else ya(this,i)}return this};nt.prototype.removeAllListeners=function(t){var r;if(t){if(r=ut?ut+t:t,this._events[r])ya(this,r)}else this._events=new Ri,this._eventsCount=0;return this};nt.prototype.off=nt.prototype.removeListener;nt.prototype.addListener=nt.prototype.on;nt.prefixed=ut;nt.EventEmitter=nt;if(typeof Al<"u")Al.exports=nt});var xR={};y$(xR,{DiscoveryError:()=>wt,default:()=>Ii,discoverSockethub:()=>ga,resolveEndpoint:()=>va});var Ia="https://www.w3.org/ns/activitystreams",Oa="https://sockethub.org/ns/context/v1.jsonld";var Ta="error",xa="https://sockethub.org/ns/context/platform/error/v1.jsonld",Aa="sockethub:internal",ja="https://sockethub.org/ns/context/platform/sockethub:internal/v1.jsonld",Ca=new Map,id=new Map,od=new Map;function v$(e){if(!Array.isArray(e))return[];return e.filter((t)=>typeof t==="string")}function $$(e){return v$(e["@context"])}function Na(e,t,r,s){Ca.set(t,e),id.set(t,r),od.set(t,s)}function Wn(e){let r=$$(e).filter((s)=>Ca.has(s));if(r.length!==1)return null;return r[0]}function qa(e){return Ca.get(e)}function ad(e){return id.get(e)}function cd(e){return od.get(e)}var Ai={feed:{required:["id","type"],additionalProperties:!0,properties:{type:{enum:["feed"]},id:{type:"string",format:"iri"},name:{type:"string"},description:{type:"string"},author:{type:"string"},favicon:{type:"string"}}},person:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string"},type:{enum:["person"]},name:{type:"string"}}},room:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string"},type:{enum:["room"]},name:{type:"string"}}},service:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string"},type:{enum:["service"]},name:{type:"string"}}},platform:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string"},type:{enum:["platform"]},name:{type:"string"}}},website:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string",format:"iri"},type:{enum:["website"]},name:{type:"string"}}},address:{required:["type"],additionalProperties:!1,properties:{type:{enum:["address"]}}},calendar:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string",format:"iri"},type:{enum:["calendar"]},name:{type:"string"},components:{type:"array",items:{enum:["event","task"]}}}},addressBook:{required:["id","type"],additionalProperties:!1,properties:{id:{type:"string",format:"iri"},type:{enum:["addressBook"]}}}};var Da=Object.keys(Ai),ji=["person","room","service","feed","website","platform"],Ci=["person","room","service","feed","website","platform","address","calendar","addressBook"],ud=ji.map((e)=>({$ref:`#/definitions/type/${e}`})),ld=Ci.map((e)=>({$ref:`#/definitions/type/${e}`}));var _$={type:"array",minItems:3,maxItems:3,items:{type:"string"},allOf:[{contains:{const:Ia}},{contains:{const:Oa}}]},w$={type:"string"},Ma={$id:"https://sockethub.org/schemas/v/activity-stream.json",description:"Schema for Sockethub Activity Streams",type:"object",required:["@context","type","actor"],additionalProperties:!1,properties:{"@context":_$,id:{type:"string"},type:w$,actor:{type:"object",oneOf:ud},target:{type:"object",oneOf:ld},object:{type:"object"},published:{type:"string",format:"date-time"}},definitions:{type:Ai}};var dd={name:"@sockethub/schemas",description:"JSON schema files for validating Sockethub Activity Streams",version:"3.0.0-beta.0",type:"module",private:!1,author:"Nick Jennings <nick@silverbucket.net>",license:"MIT",publishConfig:{access:"public"},main:"dist/index.js",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js",default:"./dist/index.js"},"./context":{types:"./dist/context.d.ts",import:"./dist/context.js",default:"./dist/context.js"},"./object-types":{types:"./dist/object-types.d.ts",import:"./dist/object-types.js",default:"./dist/object-types.js"},"./service-descriptor":{types:"./dist/service-descriptor.d.ts",bun:"./src/service-descriptor.ts",import:"./dist/service-descriptor.js",default:"./dist/service-descriptor.js"},"./schemas/json/sockethub-config.json":{default:"./dist/schemas/json/sockethub-config.json"},"./schemas/json/service-descriptor.json":{default:"./dist/schemas/json/service-descriptor.json"}},files:["dist/"],engines:{node:">=20"},keywords:["sockethub","sockethub schema","activity streams","activity objects","sockethub platforms"],repository:{type:"git",url:"git+https://github.com/sockethub/sockethub.git",directory:"packages/schemas"},homepage:"https://github.com/sockethub/sockethub/tree/master/packages/schemas",devDependencies:{"@types/bun":"latest"},scripts:{build:"bun ./scripts/export-json-schema.ts && bun ./scripts/export-canonical-assets.ts && bun build src/index.ts src/object-types.ts --outdir dist --target node --format esm --sourcemap=external && bun build src/context.ts src/activity-stream-helper.ts src/service-descriptor.ts --outdir dist --target browser --format esm --sourcemap=external",clean:"rm -rf dist","clean:deps":"rm -rf node_modules"},dependencies:{ajv:"^8.17.1","ajv-formats":"^2.1.1","ajv-formats-draft2019":"^1.6.1"},gitHead:"75002ae8f15d7679bd58a9327f5a1d7eeaffa237",types:"./dist/index.d.ts"};function fd(e,t){return e.replace("/v/",`/${t}/`)}var Va={$id:"https://sockethub.org/schemas/v/sockethub-config.json",description:"Sockethub Config Schema",type:"object",required:["platforms"],additionalProperties:!1,properties:{$schema:{type:"string"},examples:{type:"boolean",default:!0,description:"Enable the examples pages served at [host]:[port]/examples"},about:{type:"object",additionalProperties:!1,description:"Details about this deployment shown on the root info page",properties:{name:{type:"string",default:"",description:"Display name of this Sockethub instance"},description:{type:"string",default:"",description:"Short description of who this instance is for"},contact:{type:"string",default:"",description:"Operator contact (email address or URL)"},links:{type:"array",default:[],description:"Extra links (privacy policy, terms, website) shown on the info page",items:{type:"object",additionalProperties:!1,required:["label","url"],properties:{label:{type:"string",minLength:1},url:{type:"string",pattern:"^https?://"}}}},showVersion:{type:"boolean",default:!1,description:"Show the exact server version on the info page (off by default to limit fingerprinting)"},showUptime:{type:"boolean",default:!1,description:"Show the process uptime on the info page (off by default: it reveals when the server last restarted)"}}},logging:{type:"object",additionalProperties:!1,properties:{level:{type:"string",enum:["error","warn","info","debug"],default:"info"},fileLevel:{type:"string",enum:["error","warn","info","debug"],default:"debug"},file:{type:"string",default:"sockethub.log"}}},platforms:{type:"array",items:{type:"string"},description:"Platform packages to load",default:["@sockethub/platform-carddav","@sockethub/platform-caldav","@sockethub/platform-dummy","@sockethub/platform-feeds","@sockethub/platform-irc","@sockethub/platform-metadata","@sockethub/platform-xmpp"]},packageConfig:{type:"object",default:{},description:"Per-platform config keyed by package name, validated against each platform's config schema and forwarded to its child process",properties:{"@sockethub/platform-carddav":{type:"object",additionalProperties:!1,properties:{connectTimeoutMs:{type:"integer",minimum:1},allowPrivateAddresses:{type:"boolean"},allowInsecureHttp:{type:"boolean"},concurrency:{type:"integer",minimum:1}}},"@sockethub/platform-caldav":{type:"object",additionalProperties:!1,properties:{connectTimeoutMs:{type:"integer",minimum:1},allowPrivateAddresses:{type:"boolean"},allowInsecureHttp:{type:"boolean"},concurrency:{type:"integer",minimum:1}}},"@sockethub/platform-dummy":{type:"object",additionalProperties:!1,properties:{greeting:{type:"string",default:"Hello"}}},"@sockethub/platform-feeds":{type:"object",additionalProperties:!1,properties:{connectTimeoutMs:{type:"number"},allowPrivateAddresses:{type:"boolean"},concurrency:{type:"integer",minimum:1}}},"@sockethub/platform-irc":{type:"object",additionalProperties:!1,properties:{connectTimeoutMs:{type:"number"}}},"@sockethub/platform-xmpp":{type:"object",additionalProperties:!1,properties:{connectTimeoutMs:{type:"number"}}},"@sockethub/platform-metadata":{type:"object",additionalProperties:!1,properties:{allowPrivateAddresses:{type:"boolean"},concurrency:{type:"integer",minimum:1}}}}},credentials:{type:"object",additionalProperties:!1,properties:{ttlMs:{type:"number",minimum:0,default:604800000,description:"Sliding TTL in milliseconds for per-session encrypted credential keys in Redis, refreshed on every save and read. A backstop against keys orphaned by crashes; sessions normally delete their key on disconnect. "+"Size generously — idle sessions do not refresh it. "+"0 disables expiry."}}},credentialCheck:{type:"object",additionalProperties:!1,properties:{reconnectIpSource:{type:"string",enum:["socket","proxy"],default:"socket"},proxyHeader:{type:"string",default:"x-forwarded-for"}}},public:{type:"object",additionalProperties:!1,properties:{protocol:{type:"string",default:"http"},host:{type:"string",default:"localhost"},port:{type:"number",default:10550},path:{type:"string",default:"/"}}},rateLimiter:{type:"object",additionalProperties:!1,properties:{windowMs:{type:"number",default:1000},maxRequests:{type:"number",default:100},blockDurationMs:{type:"number",default:5000},maxConnectionsPerIp:{type:"number",minimum:0,default:20,description:"Maximum concurrent socket connections per client IP. The per-event rate limiter is keyed by socket id, so without a connection cap a client can bypass it by opening more sockets. 0 disables the cap."}}},limits:{type:"object",additionalProperties:!1,properties:{maxPlatformInstances:{type:"number",minimum:0,default:100,description:"Upper bound on concurrently running platform instances (child processes). Each persistent-platform actor forks its own process, so an unbounded count is a resource exhaustion risk on public instances. 0 disables the cap."}}},redis:{type:"object",additionalProperties:!1,properties:{url:{type:"string",default:"redis://127.0.0.1:6379"},connectTimeout:{type:"number",default:1e4,description:"Connection timeout in milliseconds"},disconnectTimeout:{type:"number",default:5000,description:"Disconnect timeout in milliseconds"},maxRetriesPerRequest:{type:["number","null"],default:null,description:"Maximum number of retries per request (null for BullMQ default)"}}},sentry:{type:"object",additionalProperties:!1,properties:{dsn:{type:"string",default:""},environment:{type:"string",default:"production"},release:{type:"string",default:""},enableLogs:{type:"boolean",default:!1},logLevels:{type:"array",items:{type:"string",enum:["debug","info","warn","error"]},default:["warn","error"]},enableMetrics:{type:"boolean",default:!0},tracesSampleRate:{type:"number",minimum:0,maximum:1,default:0.1},profileSessionSampleRate:{type:"number",minimum:0,maximum:1,default:0},sendDefaultPii:{type:"boolean",default:!1}}},sockethub:{type:"object",additionalProperties:!1,properties:{port:{type:"number",default:10550},host:{type:"string",default:"localhost"},path:{type:"string",default:"/sockethub"},maxPayloadBytes:{type:"integer",minimum:1,default:262144,description:"Maximum size in bytes of a single Socket.IO message."},trustProxy:{type:["boolean","number","string"],default:!1,description:"Express 'trust proxy' setting, deciding whether 'x-forwarded-for' is believed when determining a client's IP for HTTP rate limiting. false trusts no proxy; a number trusts that many hops; a string takes an address, subnet or preset ('loopback'). Only enable behind a reverse proxy that overwrites the header. When left false while credentialCheck.reconnectIpSource is 'proxy' and credentialCheck.proxyHeader is 'x-forwarded-for', one hop is trusted so both paths agree; a custom proxyHeader requires setting this explicitly."},cors:{type:"object",additionalProperties:!1,properties:{origin:{type:"string",default:"*",description:"Allowed CORS origin(s) for socket.io connections and the HTTP actions endpoint. '*' allows any website to connect visitors' browsers to this instance; public deployments should set an explicit origin or comma-separated list of origins."}}}}},httpActions:{type:"object",additionalProperties:!1,properties:{enabled:{type:"boolean",default:!1,description:"Enable the HTTP actions endpoint"},path:{type:"string",default:"/sockethub-http"},requireRequestId:{type:"boolean",default:!0},maxMessagesPerRequest:{type:"number",minimum:1,default:20},maxPayloadBytes:{type:"number",minimum:1,default:262144},idempotencyTtlMs:{type:"number",minimum:0,default:300000},requestTimeoutMs:{type:"number",minimum:0,default:30000},idleTimeoutMs:{type:"number",minimum:0,default:15000}}},platformHeartbeat:{type:"object",additionalProperties:!1,properties:{intervalMs:{type:"number",default:5000},timeoutMs:{type:"number",default:15000}}}}},S$=fd(Va.$id,dd.version);var Sm=Jn(su(),1);var _m={type:"integer",minimum:0},pS={type:"string",minLength:1},wm={type:"string",pattern:"^/(?![/\\\\])[^\\s\\\\]*$"},nu={$id:"https://sockethub.org/schemas/v/service-descriptor.json",description:"Sockethub service descriptor",type:"object",required:["name","apiVersion","platforms"],additionalProperties:!0,properties:{name:{const:"sockethub"},apiVersion:_m,endpoints:{type:"object",required:["socketIO"],additionalProperties:!0,properties:{socketIO:wm,httpActions:wm}},platforms:{type:"array",items:{type:"object",required:["id","apiVersion"],additionalProperties:!0,properties:{id:pS,apiVersion:_m}}}}};var mS=new Sm.default({strictTypes:!1,allErrors:!0}),bm;function iu(e){return bm??=mS.compile(nu),bm(e)}var _v=Jn(su(),1),wv=Jn(Og(),1),bv=Jn(gv(),1);function vR(e){let t=`${e.instancePath?e.instancePath:"activity stream"}: ${e.message}`;if(e.keyword==="additionalProperties")t+=`: ${e.params.additionalProperty}`;else if(e.keyword==="enum")t+=`: ${e.params.allowedValues.join(", ")}`;return t}function Pi(e){let t=[];if(e?.type)t.push(e.type);let r=e;for(let s in r){let n=r[s];if(n&&typeof n==="object"&&"type"in n)t.push(...Pi(n))}return t}function $R(e){let t=e.schemaPath.match(/#\/\w+\/\w+\/([\w-]+)\//);return t?t[1]:void 0}function _R(e){let t=e.instancePath.match(/\/(\w+)/);return t?t[1]:void 0}function wR(e,t){let r=$R(e),s=_R(e);if(!s)return-1;let n=t[s];if(!n)return-1;if(!r||!n.includes(r))return-1;return e.instancePath.split("/").length}function bR(e){if(!Array.isArray(e["@context"]))return{actor:[],target:[],object:Pi(e)};let t=e;return{actor:Pi(t.actor),target:Pi(t.target),object:t.object?Pi(t.object):[]}}function Rl(e,t,r){let s=bR(e),n=0,i=-1;for(let o=0;o<t.length;o++){let a=wR(t[o],s);if(a>i)i=a,n=o}return i>=0?vR(t[n]):PR(t[t.length-1],r)}function SR(e,t){if(!t?.excludeTypes||t.excludeTypes.length===0)return e;let r=new Set(t.excludeTypes);return e.filter((s)=>!r.has(s))}function PR(e,t){let r;if(e.keyword==="oneOf"){let s=e.instancePath.split("/")[1],n=s==="actor"?ji:s==="target"?Ci:Da,i=SR(n,t),o=i.length>0?i:n;r=`${e.instancePath}: ${e.message}: ${o.join(", ")}`}else r=`${e.instancePath?e.instancePath:"activity stream"}: ${e.message}`;if("additionalProperty"in e.params)r+=`: ${e.params.additionalProperty}`;return r}var vr=new _v.default({strictTypes:!1,allErrors:!0});wv.default(vr);bv.default(vr);var $r="https://sockethub.org/schemas/v0",Il={},kR={},vv=!1;Il[`${$r}/activity-stream`]=Ma;for(let e in Il)vr.addSchema(Il[e],e);function $v(e,t){Na(e,t,`${$r}/context/${e}/messages`,`${$r}/context/${e}/credentials`);let r=`${$r}/context/${e}/messages`;if(!vr.getSchema(r))vr.addSchema({},r);let s=`${$r}/context/${e}/credentials`;if(!vr.getSchema(s))vr.addSchema({},s)}function Sv(){if(vv)return;$v(Ta,xa),$v(Aa,ja),vv=!0}Sv();function ma(e,t){let r=vr.getSchema(e);if(!r)return`schema ${e} not found`;if(!r(t)){let n=Rl(t,r.errors,kR);if(Array.isArray(t["@context"])){let i=Wn(t);if(i){let o=qa(i);if(o)n=`[${o}] ${n}`}}return n}return""}function Ol(e){let t=ma(`${$r}/activity-stream`,e);if(t)return t;let r=Wn(e);if(!r)return"activity streams must have exactly one registered platform context URL in @context";let s=ad(r);if(!s)return`platform context URL ${r} does not have a registered message schema`;return ma(s,e)}function Tl(e){if(!Array.isArray(e["@context"]))return"credential activity streams must have an @context set";if(e.type!=="credentials")return"credential activity streams must have credentials set as type";let t=ma(`${$r}/activity-stream`,e);if(t)return t;let r=Wn(e);if(!r)return"credential activity streams must have exactly one registered platform context URL in @context";let s=cd(r);if(!s)return`platform context URL ${r} does not have a registered credentials schema`;return ma(s,e)}function ha(e,t){let r=`${$r}/context/${t}`;if(!vr.getSchema(r))vr.addSchema(e,r)}function xl(e,t){Na(e,t,`${$r}/context/${e}/messages`,`${$r}/context/${e}/credentials`)}function Ei(e){let t=Wn(e);if(!t)return null;return qa(t)??null}var Pv={actor:"id",target:"id",object:"content"};function RR(e,t){if(typeof e==="string")return{[t]:e};if(Array.isArray(e))return e.map((r)=>{if(typeof r==="string")return{id:r};return r});return e}function ki(e){let t={...e};for(let r of Object.keys(Pv))if(r in t)t[r]=RR(t[r],Pv[r]);return t}var Rv=Jn(kv(),1);var Iv=Rv.default;var TR=/^v?(\d+)(?:\.\d+){0,2}(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;function jl(e){return!!e&&typeof e==="object"&&!Array.isArray(e)}function Ov(e){return typeof e==="number"&&Number.isSafeInteger(e)&&e>=0}function Tv(e){if(!e||typeof e!=="object")return;let{apiVersion:t,version:r}=e;if(Ov(t))return t;if(typeof r==="string"){let s=TR.exec(r.trim()),n=s?Number(s[1]):void 0;if(Ov(n))return n}return}function xv(e){if(!e||typeof e!=="object")return;let t=e,r=t.contexts?.as,s=t.contexts?.sockethub;if(typeof r!=="string"||typeof s!=="string"||!Array.isArray(t.platforms))return;let n=Tv(t);if(n===void 0)return;let i=new Map;for(let o of t.platforms){if(!o||typeof o!=="object"||typeof o.id!=="string"||typeof o.contextUrl!=="string"||typeof o.contextVersion!=="string"||typeof o.schemaVersion!=="string")continue;let a=Tv(o);if(a===void 0)continue;let c=jl(o.schemas)?o.schemas:{};i.set(o.id,{id:o.id,apiVersion:a,contextUrl:o.contextUrl,contextVersion:o.contextVersion,schemaVersion:o.schemaVersion,types:Array.isArray(o.types)?o.types.filter((u)=>typeof u==="string"):[],schemas:{credentials:jl(c.credentials)?c.credentials:void 0,messages:jl(c.messages)?c.messages:void 0}})}return{apiVersion:n,asContextUrl:r,sockethubContextUrl:s,platforms:i}}function Av(e){xl(e.id,e.contextUrl);try{if(e.schemas.credentials)ha(e.schemas.credentials,`${e.id}/credentials`);if(e.schemas.messages)ha(e.schemas.messages,`${e.id}/messages`)}catch(t){let r=t instanceof Error?t.message:String(t);console.warn(`[SockethubClient] Failed to register schemas for platform ${e.id}: ${r}`)}}class wt extends Error{constructor(e,t){super(e,t);this.name="DiscoveryError"}}async function ga(e,t={}){let r;try{r=new URL(e)}catch(u){throw new wt(`Sockethub discovery needs an absolute base URL, got ${JSON.stringify(e)}`,{cause:u})}if(r.protocol!=="http:"&&r.protocol!=="https:")throw new wt(`Sockethub discovery needs an http(s) base URL, got ${JSON.stringify(e)}`);let s=t.fetch??globalThis.fetch;if(typeof s!=="function")throw new wt("Sockethub discovery needs fetch(); pass one in the options");let n=new AbortController,i=t.discoveryTimeoutMs??1e4,o=setTimeout(()=>n.abort(),i),a=()=>n.signal.aborted,c;try{let u;try{u=await s(r.href,{headers:{accept:"application/json"},signal:n.signal})}catch(l){let d=a()?`timed out after ${i}ms`:l instanceof Error?l.message:String(l);throw new wt(`Sockethub discovery failed: could not reach ${r.href} (${d})`,{cause:l})}if(!u.ok)throw new wt(`Sockethub discovery failed: ${r.href} answered ${u.status}`);try{c=await u.json()}catch(l){throw new wt(a()?`Sockethub discovery failed: ${r.href} timed out after ${i}ms while sending the descriptor`:`Sockethub discovery failed: ${r.href} did not return JSON; is it a Sockethub server?`,{cause:l})}}finally{clearTimeout(o)}if(!iu(c))throw new wt(`Sockethub discovery failed: ${r.href} did not return a valid service descriptor`);return c}function va(e,t){let r=new URL(t,e);if(r.origin!==new URL(e).origin)throw new wt(`Sockethub discovery failed: endpoint path ${JSON.stringify(t)} resolves to ${r.origin}, not ${e}`);return r.href}async function jv(e){if(e)return e;let t=globalThis.io;if(typeof t==="function")return t;try{let r=await import("socket.io-client");if(typeof r.io==="function")return r.io}catch{}throw Error("SockethubClient.connect() needs socket.io-client: install it, load /socket.io.js, or pass `io` in the options")}function $a(e){return typeof e==="object"&&e!==null&&"error"in e&&Boolean(e.error)}function _a(e){return"actor"in e&&e.actor!==null&&typeof e.actor==="object"&&"id"in e.actor&&typeof e.actor.id==="string"}function Nl(e){return e?.type==="update"&&e.object?.type==="address"&&_a(e)&&typeof e.target==="object"&&typeof e.target?.id==="string"&&e.target.id!==e.actor.id}function Cl(e){let t=e.actor?.id||e.actor;if(!t)throw Error(`actor property not present for message type: ${e?.type}`);let r=e.target?e.target.id||e.target:"";return`${Ei(e)??""}:${t}-${r}`}class ql{events={credentials:new Map,connect:new Map,join:new Map};recordCredentials(e){if(e.object&&e.object.type==="credentials")this.events.credentials.set(Cl(e),e)}recordMessage(e){let t=Cl(e);if(e.type==="join"||e.type==="connect")this.events[e.type].set(t,e);else if(e.type==="leave")this.events.join.delete(t);else if(e.type==="disconnect")this.events.connect.delete(t)}moveActor(e){let t=e.actor.id,r=e.target,s=r.id,n=typeof r.name==="string"?r.name:void 0,i=Ei(e)??"",o=[];for(let a of Object.values(this.events))for(let[c,u]of[...a]){if(!_a(u)||u.actor.id!==t||(Ei(u)??"")!==i)continue;let l={...u,actor:{...u.actor,id:s,...n?{name:n}:{}}};a.delete(c),a.set(Cl(l),l),o.push([t,s])}return o}}class Ii{replayStore=new ql;_socket;socket;debug=!0;descriptor;serverOrigin;endpointUrl(e){let t=this.descriptor?.endpoints?.[e];if(!this.serverOrigin||!t)return;return va(this.serverOrigin,t)}options;platformRegistry=new Map;asContextUrl;sockethubContextUrl;apiVersion;initState="idle";hasReadyOnce=!1;initCycle;initTokenCounter=0;initTimeoutTimer;waitingWarningTimer;waitingWarningIntervalMs=1e4;readyWaiters=[];outboundQueue=[];outboundSequence=0;registryFingerprint;latestReadyInfo;static async connect(e,t={}){let{io:r,socketOptions:s,fetch:n,discoveryTimeoutMs:i,...o}=t,a=await ga(e,{fetch:n,discoveryTimeoutMs:i}),c=a.endpoints?.socketIO;if(!c)throw new wt(`Sockethub discovery failed: ${e} does not advertise a Socket.IO endpoint (older server?); pass a socket to the constructor instead`);let u=new URL(e).origin,d=(await jv(r))(u,{...s,path:c});return new Ii(d,o,{descriptor:a,serverOrigin:u})}constructor(e,t={},r){if(!e)throw Error("SockethubClient requires a socket.io instance");if(this._socket=e,this.descriptor=r?.descriptor,this.serverOrigin=r?.serverOrigin,this.options={initTimeoutMs:t.initTimeoutMs??5000,maxQueuedOutbound:t.maxQueuedOutbound??1000,maxQueuedAgeMs:t.maxQueuedAgeMs??30000},this.socket=this.createPublicEmitter(),this.registerSocketIOHandlers(),this._socket.connected)this.socket.connected=!0,this.socket.id=this._socket.id,this.socket._emit("connect"),this.startInitialization("initial-connect",!0)}clearCredentials(){this.replayStore.events.credentials.clear()}getRegisteredPlatforms(){return Array.from(this.platformRegistry.values()).map((e)=>({...e,types:[...e.types],schemas:{...e.schemas}}))}isSchemasReady(){return this.isReady()}isReady(){return this.initState==="ready"}getInitState(){return this.initState}getRegisteredBaseContexts(){if(!this.asContextUrl||!this.sockethubContextUrl)throw Error("Schema registry not loaded yet. Wait for client ready state after connect.");return{as:this.asContextUrl,sockethub:this.sockethubContextUrl}}getPlatformSchema(e,t="messages"){let r=e?.trim();if(!r)return;return this.platformRegistry.get(r)?.schemas?.[t]}async waitForSchemas(e=2000){return await this.ready(e),this.buildPlatformRegistryPayload()}ready(e=this.options.initTimeoutMs){if(this.isReady()&&this.latestReadyInfo)return Promise.resolve(this.latestReadyInfo);return new Promise((t,r)=>{let s={resolve:t,reject:r};if(e>0)s.timer=setTimeout(()=>{this.readyWaiters=this.readyWaiters.filter((n)=>n!==s),r(Error(`SockethubClient ready() timed out after ${e}ms`))},e);if(this.readyWaiters.push(s),this.socket.connected&&this.initState==="idle")this.startInitialization(this.hasReadyOnce?"reconnect":"initial-connect",!0)})}validateActivity(e){if(e.type==="credentials")return Tl(e);return Ol(e)}contextFor(e){if(typeof e!=="string"||e.trim().length===0)throw Error("SockethubClient.contextFor(platform) requires a non-empty platform string");if(!this.asContextUrl||!this.sockethubContextUrl)throw Error("Schema registry not loaded yet. Wait for client ready state after connect.");let t=e.trim(),r=this.platformRegistry.get(t);if(!r){let s=Array.from(this.platformRegistry.keys()).sort();throw Error(`unknown platform '${t}'. Registered platforms: ${s.join(", ")}`)}return[this.asContextUrl,this.sockethubContextUrl,r.contextUrl]}createPublicEmitter(){let e=new Iv;return e._emit=e.emit,e.emit=(t,r,s)=>{this.handlePublicEmit(t,r,s)},e.connected=!1,e.disconnect=()=>{this._socket.disconnect()},e.connect=()=>{this._socket.connect()},e}requestSchemaRegistry(){if(!("io"in this._socket))return;this._socket.emit("schemas",this.registryFingerprint,(t)=>{this.handleSchemasPayload(t)})}applyPlatformRegistry(e){let t=xv(e);if(!t)return;this.apiVersion=t.apiVersion,this.asContextUrl=t.asContextUrl,this.sockethubContextUrl=t.sockethubContextUrl,this.platformRegistry=t.platforms;for(let n of t.platforms.values())Av(n);let r=this.buildPlatformRegistryPayload(),s=e;return this.registryFingerprint=typeof s.fingerprint==="string"?s.fingerprint:void 0,this.socket._emit("schemas",r),r}buildPlatformRegistryPayload(){return{apiVersion:this.apiVersion,contexts:this.asContextUrl&&this.sockethubContextUrl?{as:this.asContextUrl,sockethub:this.sockethubContextUrl}:void 0,platforms:this.getRegisteredPlatforms()}}buildReadyInfo(e){if(this.apiVersion===void 0||!this.asContextUrl||!this.sockethubContextUrl)return;return{state:"ready",reason:e,apiVersion:this.apiVersion,contexts:{as:this.asContextUrl,sockethub:this.sockethubContextUrl},platforms:this.getRegisteredPlatforms().map((t)=>({id:t.id,apiVersion:t.apiVersion,contextUrl:t.contextUrl,contextVersion:t.contextVersion,schemaVersion:t.schemaVersion,types:[...t.types]}))}}resolveReadyWaiters(e){let t=this.readyWaiters;this.readyWaiters=[];for(let r of t){if(r.timer)clearTimeout(r.timer);r.resolve(e)}}rejectReadyWaiters(e){let t=this.readyWaiters;this.readyWaiters=[];for(let r of t){if(r.timer)clearTimeout(r.timer);r.reject(e)}}emitInitError(e,t,r){this.socket._emit("init_error",{error:e,phase:t,retrying:r})}emitClientError(e,t,r){if(typeof t==="function"){t({error:r});return}this.socket._emit("client_error",{event:e,error:r})}clearInitTimers(){if(this.initTimeoutTimer)clearTimeout(this.initTimeoutTimer),this.initTimeoutTimer=void 0;if(this.waitingWarningTimer)clearInterval(this.waitingWarningTimer),this.waitingWarningTimer=void 0}startWaitingWarnings(){if(this.waitingWarningTimer)return;this.waitingWarningTimer=setInterval(()=>{if(this.isReady()||this.initState==="closed"){this.clearInitTimers();return}let e=this.outboundQueue.length,t=this.outboundQueue[0],r=t?((Date.now()-t.enqueuedAt)/1000).toFixed(1):"0.0";console.warn(`[SockethubClient] Still waiting for schemas; queued outbound messages: ${e}; oldest queued age: ${r}s.`)},this.waitingWarningIntervalMs)}startInitialization(e,t){if(!this.socket.connected||this.initState==="closed")return;let r=++this.initTokenCounter;this.initCycle={token:r,reason:e,startedAt:Date.now(),replayOnReady:t,timedOut:!1},this.initState="initializing",this.clearInitTimers(),this.initTimeoutTimer=setTimeout(()=>{if(!this.initCycle||this.initCycle.token!==r)return;this.initCycle.timedOut=!0,this.initState="init_error";let s=`Initialization timed out after ${this.options.initTimeoutMs}ms waiting for schemas`;console.warn(`[SockethubClient] ${s}; queued outbound messages: ${this.outboundQueue.length}. Waiting for schemas event from server.`),this.emitInitError(s,"timeout",!1),this.startWaitingWarnings()},this.options.initTimeoutMs);try{this.requestSchemaRegistry()}catch(s){this.initState="init_error";let n=s instanceof Error?s.message:String(s);this.emitInitError(n,"schemas-request",!1),this.startWaitingWarnings()}}markReady(e){let t=this.initCycle,r=Boolean(t?.replayOnReady);this.initCycle=void 0,this.clearInitTimers(),this.initState="ready",this.hasReadyOnce=!0;let s=this.buildReadyInfo(e);if(!s){let n=Error("Failed to build ready payload");this.initState="init_error",this.emitInitError(n.message,"schemas-apply",!0),this.rejectReadyWaiters(n);return}if(this.socket._emit("ready",s),this.latestReadyInfo=s,this.resolveReadyWaiters(s),r){let{credentials:n,connect:i,join:o}=this.replayStore.events;this.replay("credentials",n),this.replay("message",i),this.replay("message",o)}this.flushOutboundQueue()}handleSchemasPayload(e){if(!e||typeof e!=="object")return;if(e.unchanged===!0){if(typeof this.registryFingerprint==="string"&&this.platformRegistry.size>0){if(this.initCycle)this.markReady(this.initCycle.reason);else if(this.initState!=="ready")this.markReady("schemas-update");return}}let t=e.fingerprint;if(this.initState==="ready"&&!this.initCycle&&t&&t===this.registryFingerprint)return;if(this.initState==="ready"&&!this.initCycle)this.initState="initializing";if(!this.applyPlatformRegistry(e)){this.initState="init_error",this.emitInitError("Received invalid schemas payload from server","schemas-apply",!0),this.startWaitingWarnings();return}if(this.initCycle){this.markReady(this.initCycle.reason);return}this.markReady("schemas-update")}handlePublicEmit(e,t,r){let s={event:e,content:t,callback:r,enqueuedAt:Date.now(),sequence:this.outboundSequence++};if(!this.isReady()){this.enqueueOutbound(s);return}this.sendOutbound(s)}enqueueOutbound(e){if(this.outboundQueue.push(e),this.outboundQueue.length<=this.options.maxQueuedOutbound)return;let t=this.outboundQueue.shift();if(!t)return;this.emitClientError(t.event,t.callback,"SockethubClient queue overflow before ready")}flushOutboundQueue(){if(!this.isReady()||this.outboundQueue.length===0)return;let e=Date.now(),t=this.outboundQueue.sort((r,s)=>r.sequence-s.sequence);this.outboundQueue=[];for(let r of t){if(e-r.enqueuedAt>this.options.maxQueuedAgeMs){this.emitClientError(r.event,r.callback,`SockethubClient queued message expired after ${this.options.maxQueuedAgeMs}ms before initialization`);continue}this.sendOutbound(r)}}sendOutbound(e){let t=e.content;try{if(e.event==="credentials"||e.event==="message"){if(t=ki(e.content),t&&typeof t==="object"){let s=t;if(e.event==="credentials"&&!s.type)s.type="credentials";if(s.actor&&typeof s.actor==="object"&&!s.actor.type)s.actor.type="person"}if(this.platformRegistry.size>0){let s=this.validateActivity(t);if(s){this.emitClientError(e.event,e.callback,`SockethubClient validation failed: ${s}`);return}}}let r=e.callback;if(e.event==="credentials")this.replayStore.recordCredentials(t);else if(e.event==="message"){if(this._socket.connected)this.replayStore.recordMessage(t);r=this.rememberRequestedRename(t,r)}this._socket.emit(e.event,t,r)}catch(r){let s=r instanceof Error?r.message:String(r);this.emitClientError(e.event,e.callback,s)}}log(e,t){if(this.debug)console.log(e,t)}registerSocketIOHandlers(){this._socket.on("connect",()=>{this.socket.id=this._socket.id,this.socket.connected=!0,this.socket._emit("connect"),this.startInitialization(this.hasReadyOnce?"reconnect":"initial-connect",!0)}),this._socket.on("connect_error",(e)=>{this.socket._emit("connect_error",e)}),this._socket.on("disconnect",(e)=>{if(this.socket.connected=!1,this.initState!=="closed")this.initState="idle";this.clearInitTimers(),this.socket._emit("disconnect",e)}),this._socket.on("schemas",(e)=>{this.handleSchemasPayload(e)}),this._socket.on("message",(e)=>{let t=ki(e);this.followActorRename(t),this.socket._emit("message",t)})}followActorRename(e){if($a(e))return;if(Nl(e))this.moveReplayState(e)}rememberRequestedRename(e,t){if(!Nl(e))return t;return(...r)=>{let[s,n]=r;if(!(s instanceof Error||$a(s)||$a(n)))this.moveReplayState(e);if(typeof t==="function")t(...r)}}moveReplayState(e){for(let[t,r]of this.replayStore.moveActor(e))this.log(`replay state moved from ${t} to ${r}`)}replay(e,t){for(let r of t.values()){let s=ki(r),n=s?.id;if(_a(s)){let i=s.actor;n=typeof i==="string"?i:i.id}this.log(`replaying ${e} for ${n}`),this._socket.emit(e,s)}}}((e)=>{e.SockethubClient=Ii})(typeof globalThis==="object"?globalThis:{});})();
30
+
31
+ //# debugId=8A43503188550B0E64756E2164756E21
32
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvY29kZWdlbi9jb2RlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL2NvZGVnZW4vc2NvcGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvY29kZWdlbi9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL25hbWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL2Vycm9ycy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS92YWxpZGF0ZS9ib29sU2NoZW1hLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3J1bGVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2FwcGxpY2FiaWxpdHkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvZGVmYXVsdHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9jb2RlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2tleXdvcmQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvc3Vic2NoZW1hLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9mYXN0LWRlZXAtZXF1YWwvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLXRyYXZlcnNlL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3Jlc29sdmUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3J1bnRpbWUvdmFsaWRhdGlvbl9lcnJvci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9yZWZfZXJyb3IuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtdXJpL2xpYi91dGlscy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvZmFzdC11cmkvbGliL3NjaGVtZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtdXJpL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL3VyaS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29yZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvcmUvaWQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9jb3JlL3JlZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvcmUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0TnVtYmVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9tdWx0aXBsZU9mLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL3VjczJsZW5ndGguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0TGVuZ3RoLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9wYXR0ZXJuLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9saW1pdFByb3BlcnRpZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL3JlcXVpcmVkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9saW1pdEl0ZW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL2VxdWFsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi91bmlxdWVJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vY29uc3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2VudW0uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9hZGRpdGlvbmFsSXRlbXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2l0ZW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9wcmVmaXhJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvaXRlbXMyMDIwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9jb250YWlucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvZGVwZW5kZW5jaWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9wcm9wZXJ0eU5hbWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9hZGRpdGlvbmFsUHJvcGVydGllcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvcHJvcGVydGllcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvcGF0dGVyblByb3BlcnRpZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL25vdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvYW55T2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL29uZU9mLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9hbGxPZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvaWYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL3RoZW5FbHNlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2Zvcm1hdC9mb3JtYXQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9mb3JtYXQvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9tZXRhZGF0YS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2RyYWZ0Ny5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2Rpc2NyaW1pbmF0b3IvdHlwZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9kaXNjcmltaW5hdG9yL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9hanYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL2Rpc3QvZm9ybWF0cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvY29kZWdlbi9jb2RlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9jb2RlZ2VuL3Njb3BlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9jb2RlZ2VuL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9uYW1lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvZXJyb3JzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS92YWxpZGF0ZS9ib29sU2NoZW1hLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9ydWxlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvYXBwbGljYWJpbGl0eS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2RlZmF1bHRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvZGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2tleXdvcmQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL3N1YnNjaGVtYS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvcmVzb2x2ZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3IuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3JlZl9lcnJvci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3VyaS1qcy9kaXN0L2VzNS91cmkuYWxsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvcnVudGltZS91cmkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb3JlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvcmUvaWQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvY29yZS9yZWYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvY29yZS9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0TnVtYmVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vbXVsdGlwbGVPZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3J1bnRpbWUvdWNzMmxlbmd0aC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0TGVuZ3RoLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vcGF0dGVybi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0UHJvcGVydGllcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL3JlcXVpcmVkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vbGltaXRJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3J1bnRpbWUvZXF1YWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi91bmlxdWVJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2NvbnN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vZW51bS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvYWRkaXRpb25hbEl0ZW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvaXRlbXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9wcmVmaXhJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2l0ZW1zMjAyMC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2NvbnRhaW5zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvZGVwZW5kZW5jaWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvcHJvcGVydHlOYW1lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2FkZGl0aW9uYWxQcm9wZXJ0aWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvcHJvcGVydGllcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL3BhdHRlcm5Qcm9wZXJ0aWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3Ivbm90LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvYW55T2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9vbmVPZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2FsbE9mLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvaWYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci90aGVuRWxzZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2Zvcm1hdC9mb3JtYXQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvZm9ybWF0L2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL21ldGFkYXRhLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2RyYWZ0Ny5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9kaXNjcmltaW5hdG9yL3R5cGVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2Rpc2NyaW1pbmF0b3IvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9hanYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL2Rpc3QvbGltaXQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL2Rpc3QvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL25lYXJsZXkvbGliL25lYXJsZXkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3NtdHAtYWRkcmVzcy1wYXJzZXIvZGlzdC9saWIvZ3JhbW1hci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc210cC1hZGRyZXNzLXBhcnNlci9kaXN0L2xpYi9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvZXh0ZW5kL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zY2hlbWVzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy1kcmFmdDIwMTkvZm9ybWF0cy9pcmkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzLWRyYWZ0MjAxOS9mb3JtYXRzL2R1cmF0aW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy1kcmFmdDIwMTkvZm9ybWF0cy9pZG4tZW1haWwuanMiLCAibm9kZTpwdW55Y29kZSIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMtZHJhZnQyMDE5L2Zvcm1hdHMvaWRuLWhvc3RuYW1lLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy1kcmFmdDIwMTkvZm9ybWF0cy9pcmktcmVmZXJlbmNlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy1kcmFmdDIwMTkvZm9ybWF0cy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMtZHJhZnQyMDE5L2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwgIi4uL3NjaGVtYXMvc3JjL2NvbnRleHQudHMiLCAiLi4vc2NoZW1hcy9zcmMvaGVscGVycy9vYmplY3RzLnRzIiwgIi4uL3NjaGVtYXMvc3JjL3NjaGVtYXMvYWN0aXZpdHktc3RyZWFtLnRzIiwgIi4uL3NjaGVtYXMvc3JjL3NjaGVtYS1pZC50cyIsICIuLi9zY2hlbWFzL3NyYy9zY2hlbWFzL3NvY2tldGh1Yi1jb25maWcudHMiLCAiLi4vc2NoZW1hcy9zcmMvc2VydmljZS1kZXNjcmlwdG9yLnRzIiwgIi4uL3NjaGVtYXMvc3JjL3NjaGVtYXMvc2VydmljZS1kZXNjcmlwdG9yLnRzIiwgIi4uL3NjaGVtYXMvc3JjL3ZhbGlkYXRvci50cyIsICIuLi9zY2hlbWFzL3NyYy9oZWxwZXJzL2Vycm9yLXBhcnNlci50cyIsICIuLi9zY2hlbWFzL3NyYy9hY3Rpdml0eS1zdHJlYW0taGVscGVyLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4Lm1qcyIsICJzcmMvY2xpZW50LXJlZ2lzdHJ5LnRzIiwgInNyYy9kaXNjb3ZlcnkudHMiLCAic3JjL3JlcGxheS1zdG9yZS50cyIsICJzcmMvc29ja2V0aHViLWNsaWVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVnZXhwQ29kZSA9IGV4cG9ydHMuZ2V0RXNtRXhwb3J0TmFtZSA9IGV4cG9ydHMuZ2V0UHJvcGVydHkgPSBleHBvcnRzLnNhZmVTdHJpbmdpZnkgPSBleHBvcnRzLnN0cmluZ2lmeSA9IGV4cG9ydHMuc3RyQ29uY2F0ID0gZXhwb3J0cy5hZGRDb2RlQXJnID0gZXhwb3J0cy5zdHIgPSBleHBvcnRzLl8gPSBleHBvcnRzLm5pbCA9IGV4cG9ydHMuX0NvZGUgPSBleHBvcnRzLk5hbWUgPSBleHBvcnRzLklERU5USUZJRVIgPSBleHBvcnRzLl9Db2RlT3JOYW1lID0gdm9pZCAwO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHRyYW5lb3VzLWNsYXNzXG5jbGFzcyBfQ29kZU9yTmFtZSB7XG59XG5leHBvcnRzLl9Db2RlT3JOYW1lID0gX0NvZGVPck5hbWU7XG5leHBvcnRzLklERU5USUZJRVIgPSAvXlthLXokX11bYS16JF8wLTldKiQvaTtcbmNsYXNzIE5hbWUgZXh0ZW5kcyBfQ29kZU9yTmFtZSB7XG4gICAgY29uc3RydWN0b3Iocykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBpZiAoIWV4cG9ydHMuSURFTlRJRklFUi50ZXN0KHMpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29kZUdlbjogbmFtZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllclwiKTtcbiAgICAgICAgdGhpcy5zdHIgPSBzO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyO1xuICAgIH1cbiAgICBlbXB0eVN0cigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiB7IFt0aGlzLnN0cl06IDEgfTtcbiAgICB9XG59XG5leHBvcnRzLk5hbWUgPSBOYW1lO1xuY2xhc3MgX0NvZGUgZXh0ZW5kcyBfQ29kZU9yTmFtZSB7XG4gICAgY29uc3RydWN0b3IoY29kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9pdGVtcyA9IHR5cGVvZiBjb2RlID09PSBcInN0cmluZ1wiID8gW2NvZGVdIDogY29kZTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cjtcbiAgICB9XG4gICAgZW1wdHlTdHIoKSB7XG4gICAgICAgIGlmICh0aGlzLl9pdGVtcy5sZW5ndGggPiAxKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5faXRlbXNbMF07XG4gICAgICAgIHJldHVybiBpdGVtID09PSBcIlwiIHx8IGl0ZW0gPT09ICdcIlwiJztcbiAgICB9XG4gICAgZ2V0IHN0cigpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMuX3N0cikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKHRoaXMuX3N0ciA9IHRoaXMuX2l0ZW1zLnJlZHVjZSgocywgYykgPT4gYCR7c30ke2N9YCwgXCJcIikpKTtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5fbmFtZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICh0aGlzLl9uYW1lcyA9IHRoaXMuX2l0ZW1zLnJlZHVjZSgobmFtZXMsIGMpID0+IHtcbiAgICAgICAgICAgIGlmIChjIGluc3RhbmNlb2YgTmFtZSlcbiAgICAgICAgICAgICAgICBuYW1lc1tjLnN0cl0gPSAobmFtZXNbYy5zdHJdIHx8IDApICsgMTtcbiAgICAgICAgICAgIHJldHVybiBuYW1lcztcbiAgICAgICAgfSwge30pKSk7XG4gICAgfVxufVxuZXhwb3J0cy5fQ29kZSA9IF9Db2RlO1xuZXhwb3J0cy5uaWwgPSBuZXcgX0NvZGUoXCJcIik7XG5mdW5jdGlvbiBfKHN0cnMsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBjb2RlID0gW3N0cnNbMF1dO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGFkZENvZGVBcmcoY29kZSwgYXJnc1tpXSk7XG4gICAgICAgIGNvZGUucHVzaChzdHJzWysraV0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IF9Db2RlKGNvZGUpO1xufVxuZXhwb3J0cy5fID0gXztcbmNvbnN0IHBsdXMgPSBuZXcgX0NvZGUoXCIrXCIpO1xuZnVuY3Rpb24gc3RyKHN0cnMsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBleHByID0gW3NhZmVTdHJpbmdpZnkoc3Ryc1swXSldO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGV4cHIucHVzaChwbHVzKTtcbiAgICAgICAgYWRkQ29kZUFyZyhleHByLCBhcmdzW2ldKTtcbiAgICAgICAgZXhwci5wdXNoKHBsdXMsIHNhZmVTdHJpbmdpZnkoc3Ryc1srK2ldKSk7XG4gICAgfVxuICAgIG9wdGltaXplKGV4cHIpO1xuICAgIHJldHVybiBuZXcgX0NvZGUoZXhwcik7XG59XG5leHBvcnRzLnN0ciA9IHN0cjtcbmZ1bmN0aW9uIGFkZENvZGVBcmcoY29kZSwgYXJnKSB7XG4gICAgaWYgKGFyZyBpbnN0YW5jZW9mIF9Db2RlKVxuICAgICAgICBjb2RlLnB1c2goLi4uYXJnLl9pdGVtcyk7XG4gICAgZWxzZSBpZiAoYXJnIGluc3RhbmNlb2YgTmFtZSlcbiAgICAgICAgY29kZS5wdXNoKGFyZyk7XG4gICAgZWxzZVxuICAgICAgICBjb2RlLnB1c2goaW50ZXJwb2xhdGUoYXJnKSk7XG59XG5leHBvcnRzLmFkZENvZGVBcmcgPSBhZGRDb2RlQXJnO1xuZnVuY3Rpb24gb3B0aW1pemUoZXhwcikge1xuICAgIGxldCBpID0gMTtcbiAgICB3aGlsZSAoaSA8IGV4cHIubGVuZ3RoIC0gMSkge1xuICAgICAgICBpZiAoZXhwcltpXSA9PT0gcGx1cykge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gbWVyZ2VFeHBySXRlbXMoZXhwcltpIC0gMV0sIGV4cHJbaSArIDFdKTtcbiAgICAgICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGV4cHIuc3BsaWNlKGkgLSAxLCAzLCByZXMpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXhwcltpKytdID0gXCIrXCI7XG4gICAgICAgIH1cbiAgICAgICAgaSsrO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1lcmdlRXhwckl0ZW1zKGEsIGIpIHtcbiAgICBpZiAoYiA9PT0gJ1wiXCInKVxuICAgICAgICByZXR1cm4gYTtcbiAgICBpZiAoYSA9PT0gJ1wiXCInKVxuICAgICAgICByZXR1cm4gYjtcbiAgICBpZiAodHlwZW9mIGEgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAoYiBpbnN0YW5jZW9mIE5hbWUgfHwgYVthLmxlbmd0aCAtIDFdICE9PSAnXCInKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodHlwZW9mIGIgIT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHJldHVybiBgJHthLnNsaWNlKDAsIC0xKX0ke2J9XCJgO1xuICAgICAgICBpZiAoYlswXSA9PT0gJ1wiJylcbiAgICAgICAgICAgIHJldHVybiBhLnNsaWNlKDAsIC0xKSArIGIuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBiID09IFwic3RyaW5nXCIgJiYgYlswXSA9PT0gJ1wiJyAmJiAhKGEgaW5zdGFuY2VvZiBOYW1lKSlcbiAgICAgICAgcmV0dXJuIGBcIiR7YX0ke2Iuc2xpY2UoMSl9YDtcbiAgICByZXR1cm47XG59XG5mdW5jdGlvbiBzdHJDb25jYXQoYzEsIGMyKSB7XG4gICAgcmV0dXJuIGMyLmVtcHR5U3RyKCkgPyBjMSA6IGMxLmVtcHR5U3RyKCkgPyBjMiA6IHN0ciBgJHtjMX0ke2MyfWA7XG59XG5leHBvcnRzLnN0ckNvbmNhdCA9IHN0ckNvbmNhdDtcbi8vIFRPRE8gZG8gbm90IGFsbG93IGFycmF5cyBoZXJlXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZSh4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB4ID09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHggPT0gXCJib29sZWFuXCIgfHwgeCA9PT0gbnVsbFxuICAgICAgICA/IHhcbiAgICAgICAgOiBzYWZlU3RyaW5naWZ5KEFycmF5LmlzQXJyYXkoeCkgPyB4LmpvaW4oXCIsXCIpIDogeCk7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnkoeCkge1xuICAgIHJldHVybiBuZXcgX0NvZGUoc2FmZVN0cmluZ2lmeSh4KSk7XG59XG5leHBvcnRzLnN0cmluZ2lmeSA9IHN0cmluZ2lmeTtcbmZ1bmN0aW9uIHNhZmVTdHJpbmdpZnkoeCkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh4KVxuICAgICAgICAucmVwbGFjZSgvXFx1MjAyOC9nLCBcIlxcXFx1MjAyOFwiKVxuICAgICAgICAucmVwbGFjZSgvXFx1MjAyOS9nLCBcIlxcXFx1MjAyOVwiKTtcbn1cbmV4cG9ydHMuc2FmZVN0cmluZ2lmeSA9IHNhZmVTdHJpbmdpZnk7XG5mdW5jdGlvbiBnZXRQcm9wZXJ0eShrZXkpIHtcbiAgICByZXR1cm4gdHlwZW9mIGtleSA9PSBcInN0cmluZ1wiICYmIGV4cG9ydHMuSURFTlRJRklFUi50ZXN0KGtleSkgPyBuZXcgX0NvZGUoYC4ke2tleX1gKSA6IF8gYFske2tleX1dYDtcbn1cbmV4cG9ydHMuZ2V0UHJvcGVydHkgPSBnZXRQcm9wZXJ0eTtcbi8vRG9lcyBiZXN0IGVmZm9ydCB0byBmb3JtYXQgdGhlIG5hbWUgcHJvcGVybHlcbmZ1bmN0aW9uIGdldEVzbUV4cG9ydE5hbWUoa2V5KSB7XG4gICAgaWYgKHR5cGVvZiBrZXkgPT0gXCJzdHJpbmdcIiAmJiBleHBvcnRzLklERU5USUZJRVIudGVzdChrZXkpKSB7XG4gICAgICAgIHJldHVybiBuZXcgX0NvZGUoYCR7a2V5fWApO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IGludmFsaWQgZXhwb3J0IG5hbWU6ICR7a2V5fSwgdXNlIGV4cGxpY2l0ICRpZCBuYW1lIG1hcHBpbmdgKTtcbn1cbmV4cG9ydHMuZ2V0RXNtRXhwb3J0TmFtZSA9IGdldEVzbUV4cG9ydE5hbWU7XG5mdW5jdGlvbiByZWdleHBDb2RlKHJ4KSB7XG4gICAgcmV0dXJuIG5ldyBfQ29kZShyeC50b1N0cmluZygpKTtcbn1cbmV4cG9ydHMucmVnZXhwQ29kZSA9IHJlZ2V4cENvZGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb2RlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlZhbHVlU2NvcGUgPSBleHBvcnRzLlZhbHVlU2NvcGVOYW1lID0gZXhwb3J0cy5TY29wZSA9IGV4cG9ydHMudmFyS2luZHMgPSBleHBvcnRzLlVzZWRWYWx1ZVN0YXRlID0gdm9pZCAwO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4vY29kZVwiKTtcbmNsYXNzIFZhbHVlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobmFtZSkge1xuICAgICAgICBzdXBlcihgQ29kZUdlbjogXCJjb2RlXCIgZm9yICR7bmFtZX0gbm90IGRlZmluZWRgKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5hbWUudmFsdWU7XG4gICAgfVxufVxudmFyIFVzZWRWYWx1ZVN0YXRlO1xuKGZ1bmN0aW9uIChVc2VkVmFsdWVTdGF0ZSkge1xuICAgIFVzZWRWYWx1ZVN0YXRlW1VzZWRWYWx1ZVN0YXRlW1wiU3RhcnRlZFwiXSA9IDBdID0gXCJTdGFydGVkXCI7XG4gICAgVXNlZFZhbHVlU3RhdGVbVXNlZFZhbHVlU3RhdGVbXCJDb21wbGV0ZWRcIl0gPSAxXSA9IFwiQ29tcGxldGVkXCI7XG59KShVc2VkVmFsdWVTdGF0ZSB8fCAoZXhwb3J0cy5Vc2VkVmFsdWVTdGF0ZSA9IFVzZWRWYWx1ZVN0YXRlID0ge30pKTtcbmV4cG9ydHMudmFyS2luZHMgPSB7XG4gICAgY29uc3Q6IG5ldyBjb2RlXzEuTmFtZShcImNvbnN0XCIpLFxuICAgIGxldDogbmV3IGNvZGVfMS5OYW1lKFwibGV0XCIpLFxuICAgIHZhcjogbmV3IGNvZGVfMS5OYW1lKFwidmFyXCIpLFxufTtcbmNsYXNzIFNjb3BlIHtcbiAgICBjb25zdHJ1Y3Rvcih7IHByZWZpeGVzLCBwYXJlbnQgfSA9IHt9KSB7XG4gICAgICAgIHRoaXMuX25hbWVzID0ge307XG4gICAgICAgIHRoaXMuX3ByZWZpeGVzID0gcHJlZml4ZXM7XG4gICAgICAgIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcbiAgICB9XG4gICAgdG9OYW1lKG5hbWVPclByZWZpeCkge1xuICAgICAgICByZXR1cm4gbmFtZU9yUHJlZml4IGluc3RhbmNlb2YgY29kZV8xLk5hbWUgPyBuYW1lT3JQcmVmaXggOiB0aGlzLm5hbWUobmFtZU9yUHJlZml4KTtcbiAgICB9XG4gICAgbmFtZShwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBjb2RlXzEuTmFtZSh0aGlzLl9uZXdOYW1lKHByZWZpeCkpO1xuICAgIH1cbiAgICBfbmV3TmFtZShwcmVmaXgpIHtcbiAgICAgICAgY29uc3QgbmcgPSB0aGlzLl9uYW1lc1twcmVmaXhdIHx8IHRoaXMuX25hbWVHcm91cChwcmVmaXgpO1xuICAgICAgICByZXR1cm4gYCR7cHJlZml4fSR7bmcuaW5kZXgrK31gO1xuICAgIH1cbiAgICBfbmFtZUdyb3VwKHByZWZpeCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAoKChfYiA9IChfYSA9IHRoaXMuX3BhcmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLl9wcmVmaXhlcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmhhcyhwcmVmaXgpKSB8fCAodGhpcy5fcHJlZml4ZXMgJiYgIXRoaXMuX3ByZWZpeGVzLmhhcyhwcmVmaXgpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBwcmVmaXggXCIke3ByZWZpeH1cIiBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIHNjb3BlYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh0aGlzLl9uYW1lc1twcmVmaXhdID0geyBwcmVmaXgsIGluZGV4OiAwIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuU2NvcGUgPSBTY29wZTtcbmNsYXNzIFZhbHVlU2NvcGVOYW1lIGV4dGVuZHMgY29kZV8xLk5hbWUge1xuICAgIGNvbnN0cnVjdG9yKHByZWZpeCwgbmFtZVN0cikge1xuICAgICAgICBzdXBlcihuYW1lU3RyKTtcbiAgICAgICAgdGhpcy5wcmVmaXggPSBwcmVmaXg7XG4gICAgfVxuICAgIHNldFZhbHVlKHZhbHVlLCB7IHByb3BlcnR5LCBpdGVtSW5kZXggfSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2NvcGVQYXRoID0gKDAsIGNvZGVfMS5fKSBgLiR7bmV3IGNvZGVfMS5OYW1lKHByb3BlcnR5KX1bJHtpdGVtSW5kZXh9XWA7XG4gICAgfVxufVxuZXhwb3J0cy5WYWx1ZVNjb3BlTmFtZSA9IFZhbHVlU2NvcGVOYW1lO1xuY29uc3QgbGluZSA9ICgwLCBjb2RlXzEuXykgYFxcbmA7XG5jbGFzcyBWYWx1ZVNjb3BlIGV4dGVuZHMgU2NvcGUge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIob3B0cyk7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IHt9O1xuICAgICAgICB0aGlzLl9zY29wZSA9IG9wdHMuc2NvcGU7XG4gICAgICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgX246IG9wdHMubGluZXMgPyBsaW5lIDogY29kZV8xLm5pbCB9O1xuICAgIH1cbiAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zY29wZTtcbiAgICB9XG4gICAgbmFtZShwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWYWx1ZVNjb3BlTmFtZShwcmVmaXgsIHRoaXMuX25ld05hbWUocHJlZml4KSk7XG4gICAgfVxuICAgIHZhbHVlKG5hbWVPclByZWZpeCwgdmFsdWUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodmFsdWUucmVmID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2RlR2VuOiByZWYgbXVzdCBiZSBwYXNzZWQgaW4gdmFsdWVcIik7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnRvTmFtZShuYW1lT3JQcmVmaXgpO1xuICAgICAgICBjb25zdCB7IHByZWZpeCB9ID0gbmFtZTtcbiAgICAgICAgY29uc3QgdmFsdWVLZXkgPSAoX2EgPSB2YWx1ZS5rZXkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHZhbHVlLnJlZjtcbiAgICAgICAgbGV0IHZzID0gdGhpcy5fdmFsdWVzW3ByZWZpeF07XG4gICAgICAgIGlmICh2cykge1xuICAgICAgICAgICAgY29uc3QgX25hbWUgPSB2cy5nZXQodmFsdWVLZXkpO1xuICAgICAgICAgICAgaWYgKF9uYW1lKVxuICAgICAgICAgICAgICAgIHJldHVybiBfbmFtZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZzID0gdGhpcy5fdmFsdWVzW3ByZWZpeF0gPSBuZXcgTWFwKCk7XG4gICAgICAgIH1cbiAgICAgICAgdnMuc2V0KHZhbHVlS2V5LCBuYW1lKTtcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuX3Njb3BlW3ByZWZpeF0gfHwgKHRoaXMuX3Njb3BlW3ByZWZpeF0gPSBbXSk7XG4gICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHMubGVuZ3RoO1xuICAgICAgICBzW2l0ZW1JbmRleF0gPSB2YWx1ZS5yZWY7XG4gICAgICAgIG5hbWUuc2V0VmFsdWUodmFsdWUsIHsgcHJvcGVydHk6IHByZWZpeCwgaXRlbUluZGV4IH0pO1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgZ2V0VmFsdWUocHJlZml4LCBrZXlPclJlZikge1xuICAgICAgICBjb25zdCB2cyA9IHRoaXMuX3ZhbHVlc1twcmVmaXhdO1xuICAgICAgICBpZiAoIXZzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICByZXR1cm4gdnMuZ2V0KGtleU9yUmVmKTtcbiAgICB9XG4gICAgc2NvcGVSZWZzKHNjb3BlTmFtZSwgdmFsdWVzID0gdGhpcy5fdmFsdWVzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWR1Y2VWYWx1ZXModmFsdWVzLCAobmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5hbWUuc2NvcGVQYXRoID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBuYW1lIFwiJHtuYW1lfVwiIGhhcyBubyB2YWx1ZWApO1xuICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlXzEuXykgYCR7c2NvcGVOYW1lfSR7bmFtZS5zY29wZVBhdGh9YDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNjb3BlQ29kZSh2YWx1ZXMgPSB0aGlzLl92YWx1ZXMsIHVzZWRWYWx1ZXMsIGdldENvZGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZHVjZVZhbHVlcyh2YWx1ZXMsIChuYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAobmFtZS52YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29kZUdlbjogbmFtZSBcIiR7bmFtZX1cIiBoYXMgbm8gdmFsdWVgKTtcbiAgICAgICAgICAgIHJldHVybiBuYW1lLnZhbHVlLmNvZGU7XG4gICAgICAgIH0sIHVzZWRWYWx1ZXMsIGdldENvZGUpO1xuICAgIH1cbiAgICBfcmVkdWNlVmFsdWVzKHZhbHVlcywgdmFsdWVDb2RlLCB1c2VkVmFsdWVzID0ge30sIGdldENvZGUpIHtcbiAgICAgICAgbGV0IGNvZGUgPSBjb2RlXzEubmlsO1xuICAgICAgICBmb3IgKGNvbnN0IHByZWZpeCBpbiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZzID0gdmFsdWVzW3ByZWZpeF07XG4gICAgICAgICAgICBpZiAoIXZzKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgbmFtZVNldCA9ICh1c2VkVmFsdWVzW3ByZWZpeF0gPSB1c2VkVmFsdWVzW3ByZWZpeF0gfHwgbmV3IE1hcCgpKTtcbiAgICAgICAgICAgIHZzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobmFtZVNldC5oYXMobmFtZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBuYW1lU2V0LnNldChuYW1lLCBVc2VkVmFsdWVTdGF0ZS5TdGFydGVkKTtcbiAgICAgICAgICAgICAgICBsZXQgYyA9IHZhbHVlQ29kZShuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoYykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWYgPSB0aGlzLm9wdHMuZXM1ID8gZXhwb3J0cy52YXJLaW5kcy52YXIgOiBleHBvcnRzLnZhcktpbmRzLmNvbnN0O1xuICAgICAgICAgICAgICAgICAgICBjb2RlID0gKDAsIGNvZGVfMS5fKSBgJHtjb2RlfSR7ZGVmfSAke25hbWV9ID0gJHtjfTske3RoaXMub3B0cy5fbn1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICgoYyA9IGdldENvZGUgPT09IG51bGwgfHwgZ2V0Q29kZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZ2V0Q29kZShuYW1lKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZSA9ICgwLCBjb2RlXzEuXykgYCR7Y29kZX0ke2N9JHt0aGlzLm9wdHMuX259YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWx1ZUVycm9yKG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuYW1lU2V0LnNldChuYW1lLCBVc2VkVmFsdWVTdGF0ZS5Db21wbGV0ZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgfVxufVxuZXhwb3J0cy5WYWx1ZVNjb3BlID0gVmFsdWVTY29wZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjb3BlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm9yID0gZXhwb3J0cy5hbmQgPSBleHBvcnRzLm5vdCA9IGV4cG9ydHMuQ29kZUdlbiA9IGV4cG9ydHMub3BlcmF0b3JzID0gZXhwb3J0cy52YXJLaW5kcyA9IGV4cG9ydHMuVmFsdWVTY29wZU5hbWUgPSBleHBvcnRzLlZhbHVlU2NvcGUgPSBleHBvcnRzLlNjb3BlID0gZXhwb3J0cy5OYW1lID0gZXhwb3J0cy5yZWdleHBDb2RlID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLmdldFByb3BlcnR5ID0gZXhwb3J0cy5uaWwgPSBleHBvcnRzLnN0ckNvbmNhdCA9IGV4cG9ydHMuc3RyID0gZXhwb3J0cy5fID0gdm9pZCAwO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4vY29kZVwiKTtcbmNvbnN0IHNjb3BlXzEgPSByZXF1aXJlKFwiLi9zY29wZVwiKTtcbnZhciBjb2RlXzIgPSByZXF1aXJlKFwiLi9jb2RlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLl87IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5zdHI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJDb25jYXRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5zdHJDb25jYXQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJuaWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5uaWw7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRQcm9wZXJ0eVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLmdldFByb3BlcnR5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5naWZ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIuc3RyaW5naWZ5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVnZXhwQ29kZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLnJlZ2V4cENvZGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIuTmFtZTsgfSB9KTtcbnZhciBzY29wZV8yID0gcmVxdWlyZShcIi4vc2NvcGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTY29wZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2NvcGVfMi5TY29wZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlZhbHVlU2NvcGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjb3BlXzIuVmFsdWVTY29wZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlZhbHVlU2NvcGVOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzY29wZV8yLlZhbHVlU2NvcGVOYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmFyS2luZHNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjb3BlXzIudmFyS2luZHM7IH0gfSk7XG5leHBvcnRzLm9wZXJhdG9ycyA9IHtcbiAgICBHVDogbmV3IGNvZGVfMS5fQ29kZShcIj5cIiksXG4gICAgR1RFOiBuZXcgY29kZV8xLl9Db2RlKFwiPj1cIiksXG4gICAgTFQ6IG5ldyBjb2RlXzEuX0NvZGUoXCI8XCIpLFxuICAgIExURTogbmV3IGNvZGVfMS5fQ29kZShcIjw9XCIpLFxuICAgIEVROiBuZXcgY29kZV8xLl9Db2RlKFwiPT09XCIpLFxuICAgIE5FUTogbmV3IGNvZGVfMS5fQ29kZShcIiE9PVwiKSxcbiAgICBOT1Q6IG5ldyBjb2RlXzEuX0NvZGUoXCIhXCIpLFxuICAgIE9SOiBuZXcgY29kZV8xLl9Db2RlKFwifHxcIiksXG4gICAgQU5EOiBuZXcgY29kZV8xLl9Db2RlKFwiJiZcIiksXG4gICAgQUREOiBuZXcgY29kZV8xLl9Db2RlKFwiK1wiKSxcbn07XG5jbGFzcyBOb2RlIHtcbiAgICBvcHRpbWl6ZU5vZGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhfbmFtZXMsIF9jb25zdGFudHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuY2xhc3MgRGVmIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IodmFyS2luZCwgbmFtZSwgcmhzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudmFyS2luZCA9IHZhcktpbmQ7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMucmhzID0gcmhzO1xuICAgIH1cbiAgICByZW5kZXIoeyBlczUsIF9uIH0pIHtcbiAgICAgICAgY29uc3QgdmFyS2luZCA9IGVzNSA/IHNjb3BlXzEudmFyS2luZHMudmFyIDogdGhpcy52YXJLaW5kO1xuICAgICAgICBjb25zdCByaHMgPSB0aGlzLnJocyA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IGAgPSAke3RoaXMucmhzfWA7XG4gICAgICAgIHJldHVybiBgJHt2YXJLaW5kfSAke3RoaXMubmFtZX0ke3Joc307YCArIF9uO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgaWYgKCFuYW1lc1t0aGlzLm5hbWUuc3RyXSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMucmhzKVxuICAgICAgICAgICAgdGhpcy5yaHMgPSBvcHRpbWl6ZUV4cHIodGhpcy5yaHMsIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yaHMgaW5zdGFuY2VvZiBjb2RlXzEuX0NvZGVPck5hbWUgPyB0aGlzLnJocy5uYW1lcyA6IHt9O1xuICAgIH1cbn1cbmNsYXNzIEFzc2lnbiBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKGxocywgcmhzLCBzaWRlRWZmZWN0cykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxocyA9IGxocztcbiAgICAgICAgdGhpcy5yaHMgPSByaHM7XG4gICAgICAgIHRoaXMuc2lkZUVmZmVjdHMgPSBzaWRlRWZmZWN0cztcbiAgICB9XG4gICAgcmVuZGVyKHsgX24gfSkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5saHN9ID0gJHt0aGlzLnJoc307YCArIF9uO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgaWYgKHRoaXMubGhzIGluc3RhbmNlb2YgY29kZV8xLk5hbWUgJiYgIW5hbWVzW3RoaXMubGhzLnN0cl0gJiYgIXRoaXMuc2lkZUVmZmVjdHMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMucmhzID0gb3B0aW1pemVFeHByKHRoaXMucmhzLCBuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgY29uc3QgbmFtZXMgPSB0aGlzLmxocyBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lID8ge30gOiB7IC4uLnRoaXMubGhzLm5hbWVzIH07XG4gICAgICAgIHJldHVybiBhZGRFeHByTmFtZXMobmFtZXMsIHRoaXMucmhzKTtcbiAgICB9XG59XG5jbGFzcyBBc3NpZ25PcCBleHRlbmRzIEFzc2lnbiB7XG4gICAgY29uc3RydWN0b3IobGhzLCBvcCwgcmhzLCBzaWRlRWZmZWN0cykge1xuICAgICAgICBzdXBlcihsaHMsIHJocywgc2lkZUVmZmVjdHMpO1xuICAgICAgICB0aGlzLm9wID0gb3A7XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGhzfSAke3RoaXMub3B9PSAke3RoaXMucmhzfTtgICsgX247XG4gICAgfVxufVxuY2xhc3MgTGFiZWwgZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihsYWJlbCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxhYmVsID0gbGFiZWw7XG4gICAgICAgIHRoaXMubmFtZXMgPSB7fTtcbiAgICB9XG4gICAgcmVuZGVyKHsgX24gfSkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5sYWJlbH06YCArIF9uO1xuICAgIH1cbn1cbmNsYXNzIEJyZWFrIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IobGFiZWwpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xuICAgICAgICB0aGlzLm5hbWVzID0ge307XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsID8gYCAke3RoaXMubGFiZWx9YCA6IFwiXCI7XG4gICAgICAgIHJldHVybiBgYnJlYWske2xhYmVsfTtgICsgX247XG4gICAgfVxufVxuY2xhc3MgVGhyb3cgZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihlcnJvcikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgcmV0dXJuIGB0aHJvdyAke3RoaXMuZXJyb3J9O2AgKyBfbjtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lcnJvci5uYW1lcztcbiAgICB9XG59XG5jbGFzcyBBbnlDb2RlIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IoY29kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIH1cbiAgICByZW5kZXIoeyBfbiB9KSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvZGV9O2AgKyBfbjtcbiAgICB9XG4gICAgb3B0aW1pemVOb2RlcygpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29kZX1gID8gdGhpcyA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIHRoaXMuY29kZSA9IG9wdGltaXplRXhwcih0aGlzLmNvZGUsIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2RlIGluc3RhbmNlb2YgY29kZV8xLl9Db2RlT3JOYW1lID8gdGhpcy5jb2RlLm5hbWVzIDoge307XG4gICAgfVxufVxuY2xhc3MgUGFyZW50Tm9kZSBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKG5vZGVzID0gW10pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5ub2RlcyA9IG5vZGVzO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2Rlcy5yZWR1Y2UoKGNvZGUsIG4pID0+IGNvZGUgKyBuLnJlbmRlcihvcHRzKSwgXCJcIik7XG4gICAgfVxuICAgIG9wdGltaXplTm9kZXMoKSB7XG4gICAgICAgIGNvbnN0IHsgbm9kZXMgfSA9IHRoaXM7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBuID0gbm9kZXNbaV0ub3B0aW1pemVOb2RlcygpO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobikpXG4gICAgICAgICAgICAgICAgbm9kZXMuc3BsaWNlKGksIDEsIC4uLm4pO1xuICAgICAgICAgICAgZWxzZSBpZiAobilcbiAgICAgICAgICAgICAgICBub2Rlc1tpXSA9IG47XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgbm9kZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2Rlcy5sZW5ndGggPiAwID8gdGhpcyA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIGNvbnN0IHsgbm9kZXMgfSA9IHRoaXM7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAvLyBpdGVyYXRpbmcgYmFja3dhcmRzIGltcHJvdmVzIDEtcGFzcyBvcHRpbWl6YXRpb25cbiAgICAgICAgICAgIGNvbnN0IG4gPSBub2Rlc1tpXTtcbiAgICAgICAgICAgIGlmIChuLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBzdWJ0cmFjdE5hbWVzKG5hbWVzLCBuLm5hbWVzKTtcbiAgICAgICAgICAgIG5vZGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZXMubGVuZ3RoID4gMCA/IHRoaXMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZXMucmVkdWNlKChuYW1lcywgbikgPT4gYWRkTmFtZXMobmFtZXMsIG4ubmFtZXMpLCB7fSk7XG4gICAgfVxufVxuY2xhc3MgQmxvY2tOb2RlIGV4dGVuZHMgUGFyZW50Tm9kZSB7XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIFwie1wiICsgb3B0cy5fbiArIHN1cGVyLnJlbmRlcihvcHRzKSArIFwifVwiICsgb3B0cy5fbjtcbiAgICB9XG59XG5jbGFzcyBSb290IGV4dGVuZHMgUGFyZW50Tm9kZSB7XG59XG5jbGFzcyBFbHNlIGV4dGVuZHMgQmxvY2tOb2RlIHtcbn1cbkVsc2Uua2luZCA9IFwiZWxzZVwiO1xuY2xhc3MgSWYgZXh0ZW5kcyBCbG9ja05vZGUge1xuICAgIGNvbnN0cnVjdG9yKGNvbmRpdGlvbiwgbm9kZXMpIHtcbiAgICAgICAgc3VwZXIobm9kZXMpO1xuICAgICAgICB0aGlzLmNvbmRpdGlvbiA9IGNvbmRpdGlvbjtcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgbGV0IGNvZGUgPSBgaWYoJHt0aGlzLmNvbmRpdGlvbn0pYCArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICAgICAgaWYgKHRoaXMuZWxzZSlcbiAgICAgICAgICAgIGNvZGUgKz0gXCJlbHNlIFwiICsgdGhpcy5lbHNlLnJlbmRlcihvcHRzKTtcbiAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgfVxuICAgIG9wdGltaXplTm9kZXMoKSB7XG4gICAgICAgIHN1cGVyLm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgY29uc3QgY29uZCA9IHRoaXMuY29uZGl0aW9uO1xuICAgICAgICBpZiAoY29uZCA9PT0gdHJ1ZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5vZGVzOyAvLyBlbHNlIGlzIGlnbm9yZWQgaGVyZVxuICAgICAgICBsZXQgZSA9IHRoaXMuZWxzZTtcbiAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5zID0gZS5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgICAgICBlID0gdGhpcy5lbHNlID0gQXJyYXkuaXNBcnJheShucykgPyBuZXcgRWxzZShucykgOiBucztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgaWYgKGNvbmQgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgSWYgPyBlIDogZS5ub2RlcztcbiAgICAgICAgICAgIGlmICh0aGlzLm5vZGVzLmxlbmd0aClcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBuZXcgSWYobm90KGNvbmQpLCBlIGluc3RhbmNlb2YgSWYgPyBbZV0gOiBlLm5vZGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZCA9PT0gZmFsc2UgfHwgIXRoaXMubm9kZXMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuZWxzZSA9IChfYSA9IHRoaXMuZWxzZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIGlmICghKHN1cGVyLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykgfHwgdGhpcy5lbHNlKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5jb25kaXRpb24gPSBvcHRpbWl6ZUV4cHIodGhpcy5jb25kaXRpb24sIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICBjb25zdCBuYW1lcyA9IHN1cGVyLm5hbWVzO1xuICAgICAgICBhZGRFeHByTmFtZXMobmFtZXMsIHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgaWYgKHRoaXMuZWxzZSlcbiAgICAgICAgICAgIGFkZE5hbWVzKG5hbWVzLCB0aGlzLmVsc2UubmFtZXMpO1xuICAgICAgICByZXR1cm4gbmFtZXM7XG4gICAgfVxufVxuSWYua2luZCA9IFwiaWZcIjtcbmNsYXNzIEZvciBleHRlbmRzIEJsb2NrTm9kZSB7XG59XG5Gb3Iua2luZCA9IFwiZm9yXCI7XG5jbGFzcyBGb3JMb29wIGV4dGVuZHMgRm9yIHtcbiAgICBjb25zdHJ1Y3RvcihpdGVyYXRpb24pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pdGVyYXRpb24gPSBpdGVyYXRpb247XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiBgZm9yKCR7dGhpcy5pdGVyYXRpb259KWAgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICBpZiAoIXN1cGVyLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaXRlcmF0aW9uID0gb3B0aW1pemVFeHByKHRoaXMuaXRlcmF0aW9uLCBuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIGFkZE5hbWVzKHN1cGVyLm5hbWVzLCB0aGlzLml0ZXJhdGlvbi5uYW1lcyk7XG4gICAgfVxufVxuY2xhc3MgRm9yUmFuZ2UgZXh0ZW5kcyBGb3Ige1xuICAgIGNvbnN0cnVjdG9yKHZhcktpbmQsIG5hbWUsIGZyb20sIHRvKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudmFyS2luZCA9IHZhcktpbmQ7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuZnJvbSA9IGZyb207XG4gICAgICAgIHRoaXMudG8gPSB0bztcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgY29uc3QgdmFyS2luZCA9IG9wdHMuZXM1ID8gc2NvcGVfMS52YXJLaW5kcy52YXIgOiB0aGlzLnZhcktpbmQ7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgZnJvbSwgdG8gfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBgZm9yKCR7dmFyS2luZH0gJHtuYW1lfT0ke2Zyb219OyAke25hbWV9PCR7dG99OyAke25hbWV9KyspYCArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICBjb25zdCBuYW1lcyA9IGFkZEV4cHJOYW1lcyhzdXBlci5uYW1lcywgdGhpcy5mcm9tKTtcbiAgICAgICAgcmV0dXJuIGFkZEV4cHJOYW1lcyhuYW1lcywgdGhpcy50byk7XG4gICAgfVxufVxuY2xhc3MgRm9ySXRlciBleHRlbmRzIEZvciB7XG4gICAgY29uc3RydWN0b3IobG9vcCwgdmFyS2luZCwgbmFtZSwgaXRlcmFibGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5sb29wID0gbG9vcDtcbiAgICAgICAgdGhpcy52YXJLaW5kID0gdmFyS2luZDtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5pdGVyYWJsZSA9IGl0ZXJhYmxlO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gYGZvcigke3RoaXMudmFyS2luZH0gJHt0aGlzLm5hbWV9ICR7dGhpcy5sb29wfSAke3RoaXMuaXRlcmFibGV9KWAgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICBpZiAoIXN1cGVyLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaXRlcmFibGUgPSBvcHRpbWl6ZUV4cHIodGhpcy5pdGVyYWJsZSwgbmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiBhZGROYW1lcyhzdXBlci5uYW1lcywgdGhpcy5pdGVyYWJsZS5uYW1lcyk7XG4gICAgfVxufVxuY2xhc3MgRnVuYyBleHRlbmRzIEJsb2NrTm9kZSB7XG4gICAgY29uc3RydWN0b3IobmFtZSwgYXJncywgYXN5bmMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5hcmdzID0gYXJncztcbiAgICAgICAgdGhpcy5hc3luYyA9IGFzeW5jO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICBjb25zdCBfYXN5bmMgPSB0aGlzLmFzeW5jID8gXCJhc3luYyBcIiA6IFwiXCI7XG4gICAgICAgIHJldHVybiBgJHtfYXN5bmN9ZnVuY3Rpb24gJHt0aGlzLm5hbWV9KCR7dGhpcy5hcmdzfSlgICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbn1cbkZ1bmMua2luZCA9IFwiZnVuY1wiO1xuY2xhc3MgUmV0dXJuIGV4dGVuZHMgUGFyZW50Tm9kZSB7XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIFwicmV0dXJuIFwiICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbn1cblJldHVybi5raW5kID0gXCJyZXR1cm5cIjtcbmNsYXNzIFRyeSBleHRlbmRzIEJsb2NrTm9kZSB7XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgbGV0IGNvZGUgPSBcInRyeVwiICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgICAgICBpZiAodGhpcy5jYXRjaClcbiAgICAgICAgICAgIGNvZGUgKz0gdGhpcy5jYXRjaC5yZW5kZXIob3B0cyk7XG4gICAgICAgIGlmICh0aGlzLmZpbmFsbHkpXG4gICAgICAgICAgICBjb2RlICs9IHRoaXMuZmluYWxseS5yZW5kZXIob3B0cyk7XG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5vZGVzKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBzdXBlci5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgIChfYSA9IHRoaXMuY2F0Y2gpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgIChfYiA9IHRoaXMuZmluYWxseSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBzdXBlci5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICAoX2EgPSB0aGlzLmNhdGNoKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgKF9iID0gdGhpcy5maW5hbGx5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgY29uc3QgbmFtZXMgPSBzdXBlci5uYW1lcztcbiAgICAgICAgaWYgKHRoaXMuY2F0Y2gpXG4gICAgICAgICAgICBhZGROYW1lcyhuYW1lcywgdGhpcy5jYXRjaC5uYW1lcyk7XG4gICAgICAgIGlmICh0aGlzLmZpbmFsbHkpXG4gICAgICAgICAgICBhZGROYW1lcyhuYW1lcywgdGhpcy5maW5hbGx5Lm5hbWVzKTtcbiAgICAgICAgcmV0dXJuIG5hbWVzO1xuICAgIH1cbn1cbmNsYXNzIENhdGNoIGV4dGVuZHMgQmxvY2tOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihlcnJvcikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiBgY2F0Y2goJHt0aGlzLmVycm9yfSlgICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbn1cbkNhdGNoLmtpbmQgPSBcImNhdGNoXCI7XG5jbGFzcyBGaW5hbGx5IGV4dGVuZHMgQmxvY2tOb2RlIHtcbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gXCJmaW5hbGx5XCIgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxufVxuRmluYWxseS5raW5kID0gXCJmaW5hbGx5XCI7XG5jbGFzcyBDb2RlR2VuIHtcbiAgICBjb25zdHJ1Y3RvcihleHRTY29wZSwgb3B0cyA9IHt9KSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IHt9O1xuICAgICAgICB0aGlzLl9ibG9ja1N0YXJ0cyA9IFtdO1xuICAgICAgICB0aGlzLl9jb25zdGFudHMgPSB7fTtcbiAgICAgICAgdGhpcy5vcHRzID0geyAuLi5vcHRzLCBfbjogb3B0cy5saW5lcyA/IFwiXFxuXCIgOiBcIlwiIH07XG4gICAgICAgIHRoaXMuX2V4dFNjb3BlID0gZXh0U2NvcGU7XG4gICAgICAgIHRoaXMuX3Njb3BlID0gbmV3IHNjb3BlXzEuU2NvcGUoeyBwYXJlbnQ6IGV4dFNjb3BlIH0pO1xuICAgICAgICB0aGlzLl9ub2RlcyA9IFtuZXcgUm9vdCgpXTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb290LnJlbmRlcih0aGlzLm9wdHMpO1xuICAgIH1cbiAgICAvLyByZXR1cm5zIHVuaXF1ZSBuYW1lIGluIHRoZSBpbnRlcm5hbCBzY29wZVxuICAgIG5hbWUocHJlZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zY29wZS5uYW1lKHByZWZpeCk7XG4gICAgfVxuICAgIC8vIHJlc2VydmVzIHVuaXF1ZSBuYW1lIGluIHRoZSBleHRlcm5hbCBzY29wZVxuICAgIHNjb3BlTmFtZShwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dFNjb3BlLm5hbWUocHJlZml4KTtcbiAgICB9XG4gICAgLy8gcmVzZXJ2ZXMgdW5pcXVlIG5hbWUgaW4gdGhlIGV4dGVybmFsIHNjb3BlIGFuZCBhc3NpZ25zIHZhbHVlIHRvIGl0XG4gICAgc2NvcGVWYWx1ZShwcmVmaXhPck5hbWUsIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9leHRTY29wZS52YWx1ZShwcmVmaXhPck5hbWUsIHZhbHVlKTtcbiAgICAgICAgY29uc3QgdnMgPSB0aGlzLl92YWx1ZXNbbmFtZS5wcmVmaXhdIHx8ICh0aGlzLl92YWx1ZXNbbmFtZS5wcmVmaXhdID0gbmV3IFNldCgpKTtcbiAgICAgICAgdnMuYWRkKG5hbWUpO1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgZ2V0U2NvcGVWYWx1ZShwcmVmaXgsIGtleU9yUmVmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHRTY29wZS5nZXRWYWx1ZShwcmVmaXgsIGtleU9yUmVmKTtcbiAgICB9XG4gICAgLy8gcmV0dXJuIGNvZGUgdGhhdCBhc3NpZ25zIHZhbHVlcyBpbiB0aGUgZXh0ZXJuYWwgc2NvcGUgdG8gdGhlIG5hbWVzIHRoYXQgYXJlIHVzZWQgaW50ZXJuYWxseVxuICAgIC8vIChzYW1lIG5hbWVzIHRoYXQgd2VyZSByZXR1cm5lZCBieSBnZW4uc2NvcGVOYW1lIG9yIGdlbi5zY29wZVZhbHVlKVxuICAgIHNjb3BlUmVmcyhzY29wZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dFNjb3BlLnNjb3BlUmVmcyhzY29wZU5hbWUsIHRoaXMuX3ZhbHVlcyk7XG4gICAgfVxuICAgIHNjb3BlQ29kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dFNjb3BlLnNjb3BlQ29kZSh0aGlzLl92YWx1ZXMpO1xuICAgIH1cbiAgICBfZGVmKHZhcktpbmQsIG5hbWVPclByZWZpeCwgcmhzLCBjb25zdGFudCkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5fc2NvcGUudG9OYW1lKG5hbWVPclByZWZpeCk7XG4gICAgICAgIGlmIChyaHMgIT09IHVuZGVmaW5lZCAmJiBjb25zdGFudClcbiAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50c1tuYW1lLnN0cl0gPSByaHM7XG4gICAgICAgIHRoaXMuX2xlYWZOb2RlKG5ldyBEZWYodmFyS2luZCwgbmFtZSwgcmhzKSk7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgICAvLyBgY29uc3RgIGRlY2xhcmF0aW9uIChgdmFyYCBpbiBlczUgbW9kZSlcbiAgICBjb25zdChuYW1lT3JQcmVmaXgsIHJocywgX2NvbnN0YW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYoc2NvcGVfMS52YXJLaW5kcy5jb25zdCwgbmFtZU9yUHJlZml4LCByaHMsIF9jb25zdGFudCk7XG4gICAgfVxuICAgIC8vIGBsZXRgIGRlY2xhcmF0aW9uIHdpdGggb3B0aW9uYWwgYXNzaWdubWVudCAoYHZhcmAgaW4gZXM1IG1vZGUpXG4gICAgbGV0KG5hbWVPclByZWZpeCwgcmhzLCBfY29uc3RhbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZihzY29wZV8xLnZhcktpbmRzLmxldCwgbmFtZU9yUHJlZml4LCByaHMsIF9jb25zdGFudCk7XG4gICAgfVxuICAgIC8vIGB2YXJgIGRlY2xhcmF0aW9uIHdpdGggb3B0aW9uYWwgYXNzaWdubWVudFxuICAgIHZhcihuYW1lT3JQcmVmaXgsIHJocywgX2NvbnN0YW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYoc2NvcGVfMS52YXJLaW5kcy52YXIsIG5hbWVPclByZWZpeCwgcmhzLCBfY29uc3RhbnQpO1xuICAgIH1cbiAgICAvLyBhc3NpZ25tZW50IGNvZGVcbiAgICBhc3NpZ24obGhzLCByaHMsIHNpZGVFZmZlY3RzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgQXNzaWduKGxocywgcmhzLCBzaWRlRWZmZWN0cykpO1xuICAgIH1cbiAgICAvLyBgKz1gIGNvZGVcbiAgICBhZGQobGhzLCByaHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYWZOb2RlKG5ldyBBc3NpZ25PcChsaHMsIGV4cG9ydHMub3BlcmF0b3JzLkFERCwgcmhzKSk7XG4gICAgfVxuICAgIC8vIGFwcGVuZHMgcGFzc2VkIFNhZmVFeHByIHRvIGNvZGUgb3IgZXhlY3V0ZXMgQmxvY2tcbiAgICBjb2RlKGMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIGMoKTtcbiAgICAgICAgZWxzZSBpZiAoYyAhPT0gY29kZV8xLm5pbClcbiAgICAgICAgICAgIHRoaXMuX2xlYWZOb2RlKG5ldyBBbnlDb2RlKGMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIHJldHVybnMgY29kZSBmb3Igb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSBwYXNzZWQgYXJndW1lbnQgbGlzdCBvZiBrZXktdmFsdWUgcGFpcnNcbiAgICBvYmplY3QoLi4ua2V5VmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IGNvZGUgPSBbXCJ7XCJdO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBrZXlWYWx1ZXMpIHtcbiAgICAgICAgICAgIGlmIChjb2RlLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICAgICAgY29kZS5wdXNoKFwiLFwiKTtcbiAgICAgICAgICAgIGNvZGUucHVzaChrZXkpO1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gdmFsdWUgfHwgdGhpcy5vcHRzLmVzNSkge1xuICAgICAgICAgICAgICAgIGNvZGUucHVzaChcIjpcIik7XG4gICAgICAgICAgICAgICAgKDAsIGNvZGVfMS5hZGRDb2RlQXJnKShjb2RlLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29kZS5wdXNoKFwifVwiKTtcbiAgICAgICAgcmV0dXJuIG5ldyBjb2RlXzEuX0NvZGUoY29kZSk7XG4gICAgfVxuICAgIC8vIGBpZmAgY2xhdXNlIChvciBzdGF0ZW1lbnQgaWYgYHRoZW5Cb2R5YCBhbmQsIG9wdGlvbmFsbHksIGBlbHNlQm9keWAgYXJlIHBhc3NlZClcbiAgICBpZihjb25kaXRpb24sIHRoZW5Cb2R5LCBlbHNlQm9keSkge1xuICAgICAgICB0aGlzLl9ibG9ja05vZGUobmV3IElmKGNvbmRpdGlvbikpO1xuICAgICAgICBpZiAodGhlbkJvZHkgJiYgZWxzZUJvZHkpIHtcbiAgICAgICAgICAgIHRoaXMuY29kZSh0aGVuQm9keSkuZWxzZSgpLmNvZGUoZWxzZUJvZHkpLmVuZElmKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhlbkJvZHkpIHtcbiAgICAgICAgICAgIHRoaXMuY29kZSh0aGVuQm9keSkuZW5kSWYoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChlbHNlQm9keSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiBcImVsc2VcIiBib2R5IHdpdGhvdXQgXCJ0aGVuXCIgYm9keScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBgZWxzZSBpZmAgY2xhdXNlIC0gaW52YWxpZCB3aXRob3V0IGBpZmAgb3IgYWZ0ZXIgYGVsc2VgIGNsYXVzZXNcbiAgICBlbHNlSWYoY29uZGl0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbHNlTm9kZShuZXcgSWYoY29uZGl0aW9uKSk7XG4gICAgfVxuICAgIC8vIGBlbHNlYCBjbGF1c2UgLSBvbmx5IHZhbGlkIGFmdGVyIGBpZmAgb3IgYGVsc2UgaWZgIGNsYXVzZXNcbiAgICBlbHNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWxzZU5vZGUobmV3IEVsc2UoKSk7XG4gICAgfVxuICAgIC8vIGVuZCBgaWZgIHN0YXRlbWVudCAobmVlZGVkIGlmIGdlbi5pZiB3YXMgdXNlZCBvbmx5IHdpdGggY29uZGl0aW9uKVxuICAgIGVuZElmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKElmLCBFbHNlKTtcbiAgICB9XG4gICAgX2Zvcihub2RlLCBmb3JCb2R5KSB7XG4gICAgICAgIHRoaXMuX2Jsb2NrTm9kZShub2RlKTtcbiAgICAgICAgaWYgKGZvckJvZHkpXG4gICAgICAgICAgICB0aGlzLmNvZGUoZm9yQm9keSkuZW5kRm9yKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBhIGdlbmVyaWMgYGZvcmAgY2xhdXNlIChvciBzdGF0ZW1lbnQgaWYgYGZvckJvZHlgIGlzIHBhc3NlZClcbiAgICBmb3IoaXRlcmF0aW9uLCBmb3JCb2R5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3IobmV3IEZvckxvb3AoaXRlcmF0aW9uKSwgZm9yQm9keSk7XG4gICAgfVxuICAgIC8vIGBmb3JgIHN0YXRlbWVudCBmb3IgYSByYW5nZSBvZiB2YWx1ZXNcbiAgICBmb3JSYW5nZShuYW1lT3JQcmVmaXgsIGZyb20sIHRvLCBmb3JCb2R5LCB2YXJLaW5kID0gdGhpcy5vcHRzLmVzNSA/IHNjb3BlXzEudmFyS2luZHMudmFyIDogc2NvcGVfMS52YXJLaW5kcy5sZXQpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuX3Njb3BlLnRvTmFtZShuYW1lT3JQcmVmaXgpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9yKG5ldyBGb3JSYW5nZSh2YXJLaW5kLCBuYW1lLCBmcm9tLCB0byksICgpID0+IGZvckJvZHkobmFtZSkpO1xuICAgIH1cbiAgICAvLyBgZm9yLW9mYCBzdGF0ZW1lbnQgKGluIGVzNSBtb2RlIHJlcGxhY2Ugd2l0aCBhIG5vcm1hbCBmb3IgbG9vcClcbiAgICBmb3JPZihuYW1lT3JQcmVmaXgsIGl0ZXJhYmxlLCBmb3JCb2R5LCB2YXJLaW5kID0gc2NvcGVfMS52YXJLaW5kcy5jb25zdCkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5fc2NvcGUudG9OYW1lKG5hbWVPclByZWZpeCk7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZXM1KSB7XG4gICAgICAgICAgICBjb25zdCBhcnIgPSBpdGVyYWJsZSBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lID8gaXRlcmFibGUgOiB0aGlzLnZhcihcIl9hcnJcIiwgaXRlcmFibGUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9yUmFuZ2UoXCJfaVwiLCAwLCAoMCwgY29kZV8xLl8pIGAke2Fycn0ubGVuZ3RoYCwgKGkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhcihuYW1lLCAoMCwgY29kZV8xLl8pIGAke2Fycn1bJHtpfV1gKTtcbiAgICAgICAgICAgICAgICBmb3JCb2R5KG5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvcihuZXcgRm9ySXRlcihcIm9mXCIsIHZhcktpbmQsIG5hbWUsIGl0ZXJhYmxlKSwgKCkgPT4gZm9yQm9keShuYW1lKSk7XG4gICAgfVxuICAgIC8vIGBmb3ItaW5gIHN0YXRlbWVudC5cbiAgICAvLyBXaXRoIG9wdGlvbiBgb3duUHJvcGVydGllc2AgcmVwbGFjZWQgd2l0aCBhIGBmb3Itb2ZgIGxvb3AgZm9yIG9iamVjdCBrZXlzXG4gICAgZm9ySW4obmFtZU9yUHJlZml4LCBvYmosIGZvckJvZHksIHZhcktpbmQgPSB0aGlzLm9wdHMuZXM1ID8gc2NvcGVfMS52YXJLaW5kcy52YXIgOiBzY29wZV8xLnZhcktpbmRzLmNvbnN0KSB7XG4gICAgICAgIGlmICh0aGlzLm9wdHMub3duUHJvcGVydGllcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9yT2YobmFtZU9yUHJlZml4LCAoMCwgY29kZV8xLl8pIGBPYmplY3Qua2V5cygke29ian0pYCwgZm9yQm9keSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuX3Njb3BlLnRvTmFtZShuYW1lT3JQcmVmaXgpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9yKG5ldyBGb3JJdGVyKFwiaW5cIiwgdmFyS2luZCwgbmFtZSwgb2JqKSwgKCkgPT4gZm9yQm9keShuYW1lKSk7XG4gICAgfVxuICAgIC8vIGVuZCBgZm9yYCBsb29wXG4gICAgZW5kRm9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKEZvcik7XG4gICAgfVxuICAgIC8vIGBsYWJlbGAgc3RhdGVtZW50XG4gICAgbGFiZWwobGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYWZOb2RlKG5ldyBMYWJlbChsYWJlbCkpO1xuICAgIH1cbiAgICAvLyBgYnJlYWtgIHN0YXRlbWVudFxuICAgIGJyZWFrKGxhYmVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgQnJlYWsobGFiZWwpKTtcbiAgICB9XG4gICAgLy8gYHJldHVybmAgc3RhdGVtZW50XG4gICAgcmV0dXJuKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgUmV0dXJuKCk7XG4gICAgICAgIHRoaXMuX2Jsb2NrTm9kZShub2RlKTtcbiAgICAgICAgdGhpcy5jb2RlKHZhbHVlKTtcbiAgICAgICAgaWYgKG5vZGUubm9kZXMubGVuZ3RoICE9PSAxKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiBcInJldHVyblwiIHNob3VsZCBoYXZlIG9uZSBub2RlJyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoUmV0dXJuKTtcbiAgICB9XG4gICAgLy8gYHRyeWAgc3RhdGVtZW50XG4gICAgdHJ5KHRyeUJvZHksIGNhdGNoQ29kZSwgZmluYWxseUNvZGUpIHtcbiAgICAgICAgaWYgKCFjYXRjaENvZGUgJiYgIWZpbmFsbHlDb2RlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiBcInRyeVwiIHdpdGhvdXQgXCJjYXRjaFwiIGFuZCBcImZpbmFsbHlcIicpO1xuICAgICAgICBjb25zdCBub2RlID0gbmV3IFRyeSgpO1xuICAgICAgICB0aGlzLl9ibG9ja05vZGUobm9kZSk7XG4gICAgICAgIHRoaXMuY29kZSh0cnlCb2R5KTtcbiAgICAgICAgaWYgKGNhdGNoQ29kZSkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLm5hbWUoXCJlXCIpO1xuICAgICAgICAgICAgdGhpcy5fY3Vyck5vZGUgPSBub2RlLmNhdGNoID0gbmV3IENhdGNoKGVycm9yKTtcbiAgICAgICAgICAgIGNhdGNoQ29kZShlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbmFsbHlDb2RlKSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyTm9kZSA9IG5vZGUuZmluYWxseSA9IG5ldyBGaW5hbGx5KCk7XG4gICAgICAgICAgICB0aGlzLmNvZGUoZmluYWxseUNvZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoQ2F0Y2gsIEZpbmFsbHkpO1xuICAgIH1cbiAgICAvLyBgdGhyb3dgIHN0YXRlbWVudFxuICAgIHRocm93KGVycm9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgVGhyb3coZXJyb3IpKTtcbiAgICB9XG4gICAgLy8gc3RhcnQgc2VsZi1iYWxhbmNpbmcgYmxvY2tcbiAgICBibG9jayhib2R5LCBub2RlQ291bnQpIHtcbiAgICAgICAgdGhpcy5fYmxvY2tTdGFydHMucHVzaCh0aGlzLl9ub2Rlcy5sZW5ndGgpO1xuICAgICAgICBpZiAoYm9keSlcbiAgICAgICAgICAgIHRoaXMuY29kZShib2R5KS5lbmRCbG9jayhub2RlQ291bnQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gZW5kIHRoZSBjdXJyZW50IHNlbGYtYmFsYW5jaW5nIGJsb2NrXG4gICAgZW5kQmxvY2sobm9kZUNvdW50KSB7XG4gICAgICAgIGNvbnN0IGxlbiA9IHRoaXMuX2Jsb2NrU3RhcnRzLnBvcCgpO1xuICAgICAgICBpZiAobGVuID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2RlR2VuOiBub3QgaW4gc2VsZi1iYWxhbmNpbmcgYmxvY2tcIik7XG4gICAgICAgIGNvbnN0IHRvQ2xvc2UgPSB0aGlzLl9ub2Rlcy5sZW5ndGggLSBsZW47XG4gICAgICAgIGlmICh0b0Nsb3NlIDwgMCB8fCAobm9kZUNvdW50ICE9PSB1bmRlZmluZWQgJiYgdG9DbG9zZSAhPT0gbm9kZUNvdW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiB3cm9uZyBudW1iZXIgb2Ygbm9kZXM6ICR7dG9DbG9zZX0gdnMgJHtub2RlQ291bnR9IGV4cGVjdGVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbm9kZXMubGVuZ3RoID0gbGVuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gYGZ1bmN0aW9uYCBoZWFkaW5nIChvciBkZWZpbml0aW9uIGlmIGZ1bmNCb2R5IGlzIHBhc3NlZClcbiAgICBmdW5jKG5hbWUsIGFyZ3MgPSBjb2RlXzEubmlsLCBhc3luYywgZnVuY0JvZHkpIHtcbiAgICAgICAgdGhpcy5fYmxvY2tOb2RlKG5ldyBGdW5jKG5hbWUsIGFyZ3MsIGFzeW5jKSk7XG4gICAgICAgIGlmIChmdW5jQm9keSlcbiAgICAgICAgICAgIHRoaXMuY29kZShmdW5jQm9keSkuZW5kRnVuYygpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gZW5kIGZ1bmN0aW9uIGRlZmluaXRpb25cbiAgICBlbmRGdW5jKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKEZ1bmMpO1xuICAgIH1cbiAgICBvcHRpbWl6ZShuID0gMSkge1xuICAgICAgICB3aGlsZSAobi0tID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fcm9vdC5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgICAgICB0aGlzLl9yb290Lm9wdGltaXplTmFtZXModGhpcy5fcm9vdC5uYW1lcywgdGhpcy5fY29uc3RhbnRzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfbGVhZk5vZGUobm9kZSkge1xuICAgICAgICB0aGlzLl9jdXJyTm9kZS5ub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgX2Jsb2NrTm9kZShub2RlKSB7XG4gICAgICAgIHRoaXMuX2N1cnJOb2RlLm5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgIHRoaXMuX25vZGVzLnB1c2gobm9kZSk7XG4gICAgfVxuICAgIF9lbmRCbG9ja05vZGUoTjEsIE4yKSB7XG4gICAgICAgIGNvbnN0IG4gPSB0aGlzLl9jdXJyTm9kZTtcbiAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBOMSB8fCAoTjIgJiYgbiBpbnN0YW5jZW9mIE4yKSkge1xuICAgICAgICAgICAgdGhpcy5fbm9kZXMucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IG5vdCBpbiBibG9jayBcIiR7TjIgPyBgJHtOMS5raW5kfS8ke04yLmtpbmR9YCA6IE4xLmtpbmR9XCJgKTtcbiAgICB9XG4gICAgX2Vsc2VOb2RlKG5vZGUpIHtcbiAgICAgICAgY29uc3QgbiA9IHRoaXMuX2N1cnJOb2RlO1xuICAgICAgICBpZiAoIShuIGluc3RhbmNlb2YgSWYpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZGVHZW46IFwiZWxzZVwiIHdpdGhvdXQgXCJpZlwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3Vyck5vZGUgPSBuLmVsc2UgPSBub2RlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IF9yb290KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNbMF07XG4gICAgfVxuICAgIGdldCBfY3Vyck5vZGUoKSB7XG4gICAgICAgIGNvbnN0IG5zID0gdGhpcy5fbm9kZXM7XG4gICAgICAgIHJldHVybiBuc1tucy5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgc2V0IF9jdXJyTm9kZShub2RlKSB7XG4gICAgICAgIGNvbnN0IG5zID0gdGhpcy5fbm9kZXM7XG4gICAgICAgIG5zW25zLmxlbmd0aCAtIDFdID0gbm9kZTtcbiAgICB9XG59XG5leHBvcnRzLkNvZGVHZW4gPSBDb2RlR2VuO1xuZnVuY3Rpb24gYWRkTmFtZXMobmFtZXMsIGZyb20pIHtcbiAgICBmb3IgKGNvbnN0IG4gaW4gZnJvbSlcbiAgICAgICAgbmFtZXNbbl0gPSAobmFtZXNbbl0gfHwgMCkgKyAoZnJvbVtuXSB8fCAwKTtcbiAgICByZXR1cm4gbmFtZXM7XG59XG5mdW5jdGlvbiBhZGRFeHByTmFtZXMobmFtZXMsIGZyb20pIHtcbiAgICByZXR1cm4gZnJvbSBpbnN0YW5jZW9mIGNvZGVfMS5fQ29kZU9yTmFtZSA/IGFkZE5hbWVzKG5hbWVzLCBmcm9tLm5hbWVzKSA6IG5hbWVzO1xufVxuZnVuY3Rpb24gb3B0aW1pemVFeHByKGV4cHIsIG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICBpZiAoZXhwciBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lKVxuICAgICAgICByZXR1cm4gcmVwbGFjZU5hbWUoZXhwcik7XG4gICAgaWYgKCFjYW5PcHRpbWl6ZShleHByKSlcbiAgICAgICAgcmV0dXJuIGV4cHI7XG4gICAgcmV0dXJuIG5ldyBjb2RlXzEuX0NvZGUoZXhwci5faXRlbXMucmVkdWNlKChpdGVtcywgYykgPT4ge1xuICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lKVxuICAgICAgICAgICAgYyA9IHJlcGxhY2VOYW1lKGMpO1xuICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIGNvZGVfMS5fQ29kZSlcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goLi4uYy5faXRlbXMpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBpdGVtcy5wdXNoKGMpO1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSwgW10pKTtcbiAgICBmdW5jdGlvbiByZXBsYWNlTmFtZShuKSB7XG4gICAgICAgIGNvbnN0IGMgPSBjb25zdGFudHNbbi5zdHJdO1xuICAgICAgICBpZiAoYyA9PT0gdW5kZWZpbmVkIHx8IG5hbWVzW24uc3RyXSAhPT0gMSlcbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICBkZWxldGUgbmFtZXNbbi5zdHJdO1xuICAgICAgICByZXR1cm4gYztcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FuT3B0aW1pemUoZSkge1xuICAgICAgICByZXR1cm4gKGUgaW5zdGFuY2VvZiBjb2RlXzEuX0NvZGUgJiZcbiAgICAgICAgICAgIGUuX2l0ZW1zLnNvbWUoKGMpID0+IGMgaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSAmJiBuYW1lc1tjLnN0cl0gPT09IDEgJiYgY29uc3RhbnRzW2Muc3RyXSAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxufVxuZnVuY3Rpb24gc3VidHJhY3ROYW1lcyhuYW1lcywgZnJvbSkge1xuICAgIGZvciAoY29uc3QgbiBpbiBmcm9tKVxuICAgICAgICBuYW1lc1tuXSA9IChuYW1lc1tuXSB8fCAwKSAtIChmcm9tW25dIHx8IDApO1xufVxuZnVuY3Rpb24gbm90KHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHggPT0gXCJib29sZWFuXCIgfHwgdHlwZW9mIHggPT0gXCJudW1iZXJcIiB8fCB4ID09PSBudWxsID8gIXggOiAoMCwgY29kZV8xLl8pIGAhJHtwYXIoeCl9YDtcbn1cbmV4cG9ydHMubm90ID0gbm90O1xuY29uc3QgYW5kQ29kZSA9IG1hcHBlbmQoZXhwb3J0cy5vcGVyYXRvcnMuQU5EKTtcbi8vIGJvb2xlYW4gQU5EICgmJikgZXhwcmVzc2lvbiB3aXRoIHRoZSBwYXNzZWQgYXJndW1lbnRzXG5mdW5jdGlvbiBhbmQoLi4uYXJncykge1xuICAgIHJldHVybiBhcmdzLnJlZHVjZShhbmRDb2RlKTtcbn1cbmV4cG9ydHMuYW5kID0gYW5kO1xuY29uc3Qgb3JDb2RlID0gbWFwcGVuZChleHBvcnRzLm9wZXJhdG9ycy5PUik7XG4vLyBib29sZWFuIE9SICh8fCkgZXhwcmVzc2lvbiB3aXRoIHRoZSBwYXNzZWQgYXJndW1lbnRzXG5mdW5jdGlvbiBvciguLi5hcmdzKSB7XG4gICAgcmV0dXJuIGFyZ3MucmVkdWNlKG9yQ29kZSk7XG59XG5leHBvcnRzLm9yID0gb3I7XG5mdW5jdGlvbiBtYXBwZW5kKG9wKSB7XG4gICAgcmV0dXJuICh4LCB5KSA9PiAoeCA9PT0gY29kZV8xLm5pbCA/IHkgOiB5ID09PSBjb2RlXzEubmlsID8geCA6ICgwLCBjb2RlXzEuXykgYCR7cGFyKHgpfSAke29wfSAke3Bhcih5KX1gKTtcbn1cbmZ1bmN0aW9uIHBhcih4KSB7XG4gICAgcmV0dXJuIHggaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSA/IHggOiAoMCwgY29kZV8xLl8pIGAoJHt4fSlgO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2hlY2tTdHJpY3RNb2RlID0gZXhwb3J0cy5nZXRFcnJvclBhdGggPSBleHBvcnRzLlR5cGUgPSBleHBvcnRzLnVzZUZ1bmMgPSBleHBvcnRzLnNldEV2YWx1YXRlZCA9IGV4cG9ydHMuZXZhbHVhdGVkUHJvcHNUb05hbWUgPSBleHBvcnRzLm1lcmdlRXZhbHVhdGVkID0gZXhwb3J0cy5lYWNoSXRlbSA9IGV4cG9ydHMudW5lc2NhcGVKc29uUG9pbnRlciA9IGV4cG9ydHMuZXNjYXBlSnNvblBvaW50ZXIgPSBleHBvcnRzLmVzY2FwZUZyYWdtZW50ID0gZXhwb3J0cy51bmVzY2FwZUZyYWdtZW50ID0gZXhwb3J0cy5zY2hlbWFSZWZPclZhbCA9IGV4cG9ydHMuc2NoZW1hSGFzUnVsZXNCdXRSZWYgPSBleHBvcnRzLnNjaGVtYUhhc1J1bGVzID0gZXhwb3J0cy5jaGVja1Vua25vd25SdWxlcyA9IGV4cG9ydHMuYWx3YXlzVmFsaWRTY2hlbWEgPSBleHBvcnRzLnRvSGFzaCA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuL2NvZGVnZW5cIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi9jb2RlZ2VuL2NvZGVcIik7XG4vLyBUT0RPIHJlZmFjdG9yIHRvIHVzZSBTZXRcbmZ1bmN0aW9uIHRvSGFzaChhcnIpIHtcbiAgICBjb25zdCBoYXNoID0ge307XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGFycilcbiAgICAgICAgaGFzaFtpdGVtXSA9IHRydWU7XG4gICAgcmV0dXJuIGhhc2g7XG59XG5leHBvcnRzLnRvSGFzaCA9IHRvSGFzaDtcbmZ1bmN0aW9uIGFsd2F5c1ZhbGlkU2NoZW1hKGl0LCBzY2hlbWEpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICBpZiAoT2JqZWN0LmtleXMoc2NoZW1hKS5sZW5ndGggPT09IDApXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGNoZWNrVW5rbm93blJ1bGVzKGl0LCBzY2hlbWEpO1xuICAgIHJldHVybiAhc2NoZW1hSGFzUnVsZXMoc2NoZW1hLCBpdC5zZWxmLlJVTEVTLmFsbCk7XG59XG5leHBvcnRzLmFsd2F5c1ZhbGlkU2NoZW1hID0gYWx3YXlzVmFsaWRTY2hlbWE7XG5mdW5jdGlvbiBjaGVja1Vua25vd25SdWxlcyhpdCwgc2NoZW1hID0gaXQuc2NoZW1hKSB7XG4gICAgY29uc3QgeyBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICBpZiAoIW9wdHMuc3RyaWN0U2NoZW1hKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgcnVsZXMgPSBzZWxmLlJVTEVTLmtleXdvcmRzO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSkge1xuICAgICAgICBpZiAoIXJ1bGVzW2tleV0pXG4gICAgICAgICAgICBjaGVja1N0cmljdE1vZGUoaXQsIGB1bmtub3duIGtleXdvcmQ6IFwiJHtrZXl9XCJgKTtcbiAgICB9XG59XG5leHBvcnRzLmNoZWNrVW5rbm93blJ1bGVzID0gY2hlY2tVbmtub3duUnVsZXM7XG5mdW5jdGlvbiBzY2hlbWFIYXNSdWxlcyhzY2hlbWEsIHJ1bGVzKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiAhc2NoZW1hO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSlcbiAgICAgICAgaWYgKHJ1bGVzW2tleV0pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLnNjaGVtYUhhc1J1bGVzID0gc2NoZW1hSGFzUnVsZXM7XG5mdW5jdGlvbiBzY2hlbWFIYXNSdWxlc0J1dFJlZihzY2hlbWEsIFJVTEVTKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiAhc2NoZW1hO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSlcbiAgICAgICAgaWYgKGtleSAhPT0gXCIkcmVmXCIgJiYgUlVMRVMuYWxsW2tleV0pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLnNjaGVtYUhhc1J1bGVzQnV0UmVmID0gc2NoZW1hSGFzUnVsZXNCdXRSZWY7XG5mdW5jdGlvbiBzY2hlbWFSZWZPclZhbCh7IHRvcFNjaGVtYVJlZiwgc2NoZW1hUGF0aCB9LCBzY2hlbWEsIGtleXdvcmQsICRkYXRhKSB7XG4gICAgaWYgKCEkZGF0YSkge1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcIm51bWJlclwiIHx8IHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hfWA7XG4gICAgfVxuICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke3RvcFNjaGVtYVJlZn0ke3NjaGVtYVBhdGh9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShrZXl3b3JkKX1gO1xufVxuZXhwb3J0cy5zY2hlbWFSZWZPclZhbCA9IHNjaGVtYVJlZk9yVmFsO1xuZnVuY3Rpb24gdW5lc2NhcGVGcmFnbWVudChzdHIpIHtcbiAgICByZXR1cm4gdW5lc2NhcGVKc29uUG9pbnRlcihkZWNvZGVVUklDb21wb25lbnQoc3RyKSk7XG59XG5leHBvcnRzLnVuZXNjYXBlRnJhZ21lbnQgPSB1bmVzY2FwZUZyYWdtZW50O1xuZnVuY3Rpb24gZXNjYXBlRnJhZ21lbnQoc3RyKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlc2NhcGVKc29uUG9pbnRlcihzdHIpKTtcbn1cbmV4cG9ydHMuZXNjYXBlRnJhZ21lbnQgPSBlc2NhcGVGcmFnbWVudDtcbmZ1bmN0aW9uIGVzY2FwZUpzb25Qb2ludGVyKHN0cikge1xuICAgIGlmICh0eXBlb2Ygc3RyID09IFwibnVtYmVyXCIpXG4gICAgICAgIHJldHVybiBgJHtzdHJ9YDtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL34vZywgXCJ+MFwiKS5yZXBsYWNlKC9cXC8vZywgXCJ+MVwiKTtcbn1cbmV4cG9ydHMuZXNjYXBlSnNvblBvaW50ZXIgPSBlc2NhcGVKc29uUG9pbnRlcjtcbmZ1bmN0aW9uIHVuZXNjYXBlSnNvblBvaW50ZXIoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9+MS9nLCBcIi9cIikucmVwbGFjZSgvfjAvZywgXCJ+XCIpO1xufVxuZXhwb3J0cy51bmVzY2FwZUpzb25Qb2ludGVyID0gdW5lc2NhcGVKc29uUG9pbnRlcjtcbmZ1bmN0aW9uIGVhY2hJdGVtKHhzLCBmKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoeHMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgeCBvZiB4cylcbiAgICAgICAgICAgIGYoeCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmKHhzKTtcbiAgICB9XG59XG5leHBvcnRzLmVhY2hJdGVtID0gZWFjaEl0ZW07XG5mdW5jdGlvbiBtYWtlTWVyZ2VFdmFsdWF0ZWQoeyBtZXJnZU5hbWVzLCBtZXJnZVRvTmFtZSwgbWVyZ2VWYWx1ZXMsIHJlc3VsdFRvTmFtZSwgfSkge1xuICAgIHJldHVybiAoZ2VuLCBmcm9tLCB0bywgdG9OYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRvID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gZnJvbVxuICAgICAgICAgICAgOiB0byBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lXG4gICAgICAgICAgICAgICAgPyAoZnJvbSBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lID8gbWVyZ2VOYW1lcyhnZW4sIGZyb20sIHRvKSA6IG1lcmdlVG9OYW1lKGdlbiwgZnJvbSwgdG8pLCB0bylcbiAgICAgICAgICAgICAgICA6IGZyb20gaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZVxuICAgICAgICAgICAgICAgICAgICA/IChtZXJnZVRvTmFtZShnZW4sIHRvLCBmcm9tKSwgZnJvbSlcbiAgICAgICAgICAgICAgICAgICAgOiBtZXJnZVZhbHVlcyhmcm9tLCB0byk7XG4gICAgICAgIHJldHVybiB0b05hbWUgPT09IGNvZGVnZW5fMS5OYW1lICYmICEocmVzIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUpID8gcmVzdWx0VG9OYW1lKGdlbiwgcmVzKSA6IHJlcztcbiAgICB9O1xufVxuZXhwb3J0cy5tZXJnZUV2YWx1YXRlZCA9IHtcbiAgICBwcm9wczogbWFrZU1lcmdlRXZhbHVhdGVkKHtcbiAgICAgICAgbWVyZ2VOYW1lczogKGdlbiwgZnJvbSwgdG8pID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke3RvfSAhPT0gdHJ1ZSAmJiAke2Zyb219ICE9PSB1bmRlZmluZWRgLCAoKSA9PiB7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtmcm9tfSA9PT0gdHJ1ZWAsICgpID0+IGdlbi5hc3NpZ24odG8sIHRydWUpLCAoKSA9PiBnZW4uYXNzaWduKHRvLCAoMCwgY29kZWdlbl8xLl8pIGAke3RvfSB8fCB7fWApLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgT2JqZWN0LmFzc2lnbigke3RvfSwgJHtmcm9tfSlgKSk7XG4gICAgICAgIH0pLFxuICAgICAgICBtZXJnZVRvTmFtZTogKGdlbiwgZnJvbSwgdG8pID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke3RvfSAhPT0gdHJ1ZWAsICgpID0+IHtcbiAgICAgICAgICAgIGlmIChmcm9tID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih0bywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHRvLCAoMCwgY29kZWdlbl8xLl8pIGAke3RvfSB8fCB7fWApO1xuICAgICAgICAgICAgICAgIHNldEV2YWx1YXRlZChnZW4sIHRvLCBmcm9tKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIG1lcmdlVmFsdWVzOiAoZnJvbSwgdG8pID0+IChmcm9tID09PSB0cnVlID8gdHJ1ZSA6IHsgLi4uZnJvbSwgLi4udG8gfSksXG4gICAgICAgIHJlc3VsdFRvTmFtZTogZXZhbHVhdGVkUHJvcHNUb05hbWUsXG4gICAgfSksXG4gICAgaXRlbXM6IG1ha2VNZXJnZUV2YWx1YXRlZCh7XG4gICAgICAgIG1lcmdlTmFtZXM6IChnZW4sIGZyb20sIHRvKSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHt0b30gIT09IHRydWUgJiYgJHtmcm9tfSAhPT0gdW5kZWZpbmVkYCwgKCkgPT4gZ2VuLmFzc2lnbih0bywgKDAsIGNvZGVnZW5fMS5fKSBgJHtmcm9tfSA9PT0gdHJ1ZSA/IHRydWUgOiAke3RvfSA+ICR7ZnJvbX0gPyAke3RvfSA6ICR7ZnJvbX1gKSksXG4gICAgICAgIG1lcmdlVG9OYW1lOiAoZ2VuLCBmcm9tLCB0bykgPT4gZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7dG99ICE9PSB0cnVlYCwgKCkgPT4gZ2VuLmFzc2lnbih0bywgZnJvbSA9PT0gdHJ1ZSA/IHRydWUgOiAoMCwgY29kZWdlbl8xLl8pIGAke3RvfSA+ICR7ZnJvbX0gPyAke3RvfSA6ICR7ZnJvbX1gKSksXG4gICAgICAgIG1lcmdlVmFsdWVzOiAoZnJvbSwgdG8pID0+IChmcm9tID09PSB0cnVlID8gdHJ1ZSA6IE1hdGgubWF4KGZyb20sIHRvKSksXG4gICAgICAgIHJlc3VsdFRvTmFtZTogKGdlbiwgaXRlbXMpID0+IGdlbi52YXIoXCJpdGVtc1wiLCBpdGVtcyksXG4gICAgfSksXG59O1xuZnVuY3Rpb24gZXZhbHVhdGVkUHJvcHNUb05hbWUoZ2VuLCBwcykge1xuICAgIGlmIChwcyA9PT0gdHJ1ZSlcbiAgICAgICAgcmV0dXJuIGdlbi52YXIoXCJwcm9wc1wiLCB0cnVlKTtcbiAgICBjb25zdCBwcm9wcyA9IGdlbi52YXIoXCJwcm9wc1wiLCAoMCwgY29kZWdlbl8xLl8pIGB7fWApO1xuICAgIGlmIChwcyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBzZXRFdmFsdWF0ZWQoZ2VuLCBwcm9wcywgcHMpO1xuICAgIHJldHVybiBwcm9wcztcbn1cbmV4cG9ydHMuZXZhbHVhdGVkUHJvcHNUb05hbWUgPSBldmFsdWF0ZWRQcm9wc1RvTmFtZTtcbmZ1bmN0aW9uIHNldEV2YWx1YXRlZChnZW4sIHByb3BzLCBwcykge1xuICAgIE9iamVjdC5rZXlzKHBzKS5mb3JFYWNoKChwKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7cHJvcHN9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShwKX1gLCB0cnVlKSk7XG59XG5leHBvcnRzLnNldEV2YWx1YXRlZCA9IHNldEV2YWx1YXRlZDtcbmNvbnN0IHNuaXBwZXRzID0ge307XG5mdW5jdGlvbiB1c2VGdW5jKGdlbiwgZikge1xuICAgIHJldHVybiBnZW4uc2NvcGVWYWx1ZShcImZ1bmNcIiwge1xuICAgICAgICByZWY6IGYsXG4gICAgICAgIGNvZGU6IHNuaXBwZXRzW2YuY29kZV0gfHwgKHNuaXBwZXRzW2YuY29kZV0gPSBuZXcgY29kZV8xLl9Db2RlKGYuY29kZSkpLFxuICAgIH0pO1xufVxuZXhwb3J0cy51c2VGdW5jID0gdXNlRnVuYztcbnZhciBUeXBlO1xuKGZ1bmN0aW9uIChUeXBlKSB7XG4gICAgVHlwZVtUeXBlW1wiTnVtXCJdID0gMF0gPSBcIk51bVwiO1xuICAgIFR5cGVbVHlwZVtcIlN0clwiXSA9IDFdID0gXCJTdHJcIjtcbn0pKFR5cGUgfHwgKGV4cG9ydHMuVHlwZSA9IFR5cGUgPSB7fSkpO1xuZnVuY3Rpb24gZ2V0RXJyb3JQYXRoKGRhdGFQcm9wLCBkYXRhUHJvcFR5cGUsIGpzUHJvcGVydHlTeW50YXgpIHtcbiAgICAvLyBsZXQgcGF0aFxuICAgIGlmIChkYXRhUHJvcCBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKSB7XG4gICAgICAgIGNvbnN0IGlzTnVtYmVyID0gZGF0YVByb3BUeXBlID09PSBUeXBlLk51bTtcbiAgICAgICAgcmV0dXJuIGpzUHJvcGVydHlTeW50YXhcbiAgICAgICAgICAgID8gaXNOdW1iZXJcbiAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYFwiW1wiICsgJHtkYXRhUHJvcH0gKyBcIl1cImBcbiAgICAgICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYFwiWydcIiArICR7ZGF0YVByb3B9ICsgXCInXVwiYFxuICAgICAgICAgICAgOiBpc051bWJlclxuICAgICAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5fKSBgXCIvXCIgKyAke2RhdGFQcm9wfWBcbiAgICAgICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYFwiL1wiICsgJHtkYXRhUHJvcH0ucmVwbGFjZSgvfi9nLCBcIn4wXCIpLnJlcGxhY2UoL1xcXFwvL2csIFwifjFcIilgOyAvLyBUT0RPIG1heWJlIHVzZSBnbG9iYWwgZXNjYXBlUG9pbnRlclxuICAgIH1cbiAgICByZXR1cm4ganNQcm9wZXJ0eVN5bnRheCA/ICgwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKGRhdGFQcm9wKS50b1N0cmluZygpIDogXCIvXCIgKyBlc2NhcGVKc29uUG9pbnRlcihkYXRhUHJvcCk7XG59XG5leHBvcnRzLmdldEVycm9yUGF0aCA9IGdldEVycm9yUGF0aDtcbmZ1bmN0aW9uIGNoZWNrU3RyaWN0TW9kZShpdCwgbXNnLCBtb2RlID0gaXQub3B0cy5zdHJpY3RTY2hlbWEpIHtcbiAgICBpZiAoIW1vZGUpXG4gICAgICAgIHJldHVybjtcbiAgICBtc2cgPSBgc3RyaWN0IG1vZGU6ICR7bXNnfWA7XG4gICAgaWYgKG1vZGUgPT09IHRydWUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgIGl0LnNlbGYubG9nZ2VyLndhcm4obXNnKTtcbn1cbmV4cG9ydHMuY2hlY2tTdHJpY3RNb2RlID0gY2hlY2tTdHJpY3RNb2RlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzID0ge1xuICAgIC8vIHZhbGlkYXRpb24gZnVuY3Rpb24gYXJndW1lbnRzXG4gICAgZGF0YTogbmV3IGNvZGVnZW5fMS5OYW1lKFwiZGF0YVwiKSwgLy8gZGF0YSBwYXNzZWQgdG8gdmFsaWRhdGlvbiBmdW5jdGlvblxuICAgIC8vIGFyZ3MgcGFzc2VkIGZyb20gcmVmZXJlbmNpbmcgc2NoZW1hXG4gICAgdmFsQ3h0OiBuZXcgY29kZWdlbl8xLk5hbWUoXCJ2YWxDeHRcIiksIC8vIHZhbGlkYXRpb24vZGF0YSBjb250ZXh0IC0gc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5LCBpdCBpcyBkZXN0cnVjdHVyZWQgdG8gdGhlIG5hbWVzIGJlbG93XG4gICAgaW5zdGFuY2VQYXRoOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJpbnN0YW5jZVBhdGhcIiksXG4gICAgcGFyZW50RGF0YTogbmV3IGNvZGVnZW5fMS5OYW1lKFwicGFyZW50RGF0YVwiKSxcbiAgICBwYXJlbnREYXRhUHJvcGVydHk6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInBhcmVudERhdGFQcm9wZXJ0eVwiKSxcbiAgICByb290RGF0YTogbmV3IGNvZGVnZW5fMS5OYW1lKFwicm9vdERhdGFcIiksIC8vIHJvb3QgZGF0YSAtIHNhbWUgYXMgdGhlIGRhdGEgcGFzc2VkIHRvIHRoZSBmaXJzdC90b3AgdmFsaWRhdGlvbiBmdW5jdGlvblxuICAgIGR5bmFtaWNBbmNob3JzOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJkeW5hbWljQW5jaG9yc1wiKSwgLy8gdXNlZCB0byBzdXBwb3J0IHJlY3Vyc2l2ZVJlZiBhbmQgZHluYW1pY1JlZlxuICAgIC8vIGZ1bmN0aW9uIHNjb3BlZCB2YXJpYWJsZXNcbiAgICB2RXJyb3JzOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJ2RXJyb3JzXCIpLCAvLyBudWxsIG9yIGFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3JzXG4gICAgZXJyb3JzOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJlcnJvcnNcIiksIC8vIGNvdW50ZXIgb2YgdmFsaWRhdGlvbiBlcnJvcnNcbiAgICB0aGlzOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJ0aGlzXCIpLFxuICAgIC8vIFwiZ2xvYmFsc1wiXG4gICAgc2VsZjogbmV3IGNvZGVnZW5fMS5OYW1lKFwic2VsZlwiKSxcbiAgICBzY29wZTogbmV3IGNvZGVnZW5fMS5OYW1lKFwic2NvcGVcIiksXG4gICAgLy8gSlREIHNlcmlhbGl6ZS9wYXJzZSBuYW1lIGZvciBKU09OIHN0cmluZyBhbmQgcG9zaXRpb25cbiAgICBqc29uOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJqc29uXCIpLFxuICAgIGpzb25Qb3M6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImpzb25Qb3NcIiksXG4gICAganNvbkxlbjogbmV3IGNvZGVnZW5fMS5OYW1lKFwianNvbkxlblwiKSxcbiAgICBqc29uUGFydDogbmV3IGNvZGVnZW5fMS5OYW1lKFwianNvblBhcnRcIiksXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gbmFtZXM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1uYW1lcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leHRlbmRFcnJvcnMgPSBleHBvcnRzLnJlc2V0RXJyb3JzQ291bnQgPSBleHBvcnRzLnJlcG9ydEV4dHJhRXJyb3IgPSBleHBvcnRzLnJlcG9ydEVycm9yID0gZXhwb3J0cy5rZXl3b3JkJERhdGFFcnJvciA9IGV4cG9ydHMua2V5d29yZEVycm9yID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4vbmFtZXNcIik7XG5leHBvcnRzLmtleXdvcmRFcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBrZXl3b3JkIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBwYXNzIFwiJHtrZXl3b3JkfVwiIGtleXdvcmQgdmFsaWRhdGlvbmAsXG59O1xuZXhwb3J0cy5rZXl3b3JkJERhdGFFcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBrZXl3b3JkLCBzY2hlbWFUeXBlIH0pID0+IHNjaGVtYVR5cGVcbiAgICAgICAgPyAoMCwgY29kZWdlbl8xLnN0cikgYFwiJHtrZXl3b3JkfVwiIGtleXdvcmQgbXVzdCBiZSAke3NjaGVtYVR5cGV9ICgkZGF0YSlgXG4gICAgICAgIDogKDAsIGNvZGVnZW5fMS5zdHIpIGBcIiR7a2V5d29yZH1cIiBrZXl3b3JkIGlzIGludmFsaWQgKCRkYXRhKWAsXG59O1xuZnVuY3Rpb24gcmVwb3J0RXJyb3IoY3h0LCBlcnJvciA9IGV4cG9ydHMua2V5d29yZEVycm9yLCBlcnJvclBhdGhzLCBvdmVycmlkZUFsbEVycm9ycykge1xuICAgIGNvbnN0IHsgaXQgfSA9IGN4dDtcbiAgICBjb25zdCB7IGdlbiwgY29tcG9zaXRlUnVsZSwgYWxsRXJyb3JzIH0gPSBpdDtcbiAgICBjb25zdCBlcnJPYmogPSBlcnJvck9iamVjdENvZGUoY3h0LCBlcnJvciwgZXJyb3JQYXRocyk7XG4gICAgaWYgKG92ZXJyaWRlQWxsRXJyb3JzICE9PSBudWxsICYmIG92ZXJyaWRlQWxsRXJyb3JzICE9PSB2b2lkIDAgPyBvdmVycmlkZUFsbEVycm9ycyA6IChjb21wb3NpdGVSdWxlIHx8IGFsbEVycm9ycykpIHtcbiAgICAgICAgYWRkRXJyb3IoZ2VuLCBlcnJPYmopO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuRXJyb3JzKGl0LCAoMCwgY29kZWdlbl8xLl8pIGBbJHtlcnJPYmp9XWApO1xuICAgIH1cbn1cbmV4cG9ydHMucmVwb3J0RXJyb3IgPSByZXBvcnRFcnJvcjtcbmZ1bmN0aW9uIHJlcG9ydEV4dHJhRXJyb3IoY3h0LCBlcnJvciA9IGV4cG9ydHMua2V5d29yZEVycm9yLCBlcnJvclBhdGhzKSB7XG4gICAgY29uc3QgeyBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IHsgZ2VuLCBjb21wb3NpdGVSdWxlLCBhbGxFcnJvcnMgfSA9IGl0O1xuICAgIGNvbnN0IGVyck9iaiA9IGVycm9yT2JqZWN0Q29kZShjeHQsIGVycm9yLCBlcnJvclBhdGhzKTtcbiAgICBhZGRFcnJvcihnZW4sIGVyck9iaik7XG4gICAgaWYgKCEoY29tcG9zaXRlUnVsZSB8fCBhbGxFcnJvcnMpKSB7XG4gICAgICAgIHJldHVybkVycm9ycyhpdCwgbmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMpO1xuICAgIH1cbn1cbmV4cG9ydHMucmVwb3J0RXh0cmFFcnJvciA9IHJlcG9ydEV4dHJhRXJyb3I7XG5mdW5jdGlvbiByZXNldEVycm9yc0NvdW50KGdlbiwgZXJyc0NvdW50KSB7XG4gICAgZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQuZXJyb3JzLCBlcnJzQ291bnQpO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSAhPT0gbnVsbGAsICgpID0+IGdlbi5pZihlcnJzQ291bnQsICgpID0+IGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30ubGVuZ3RoYCwgZXJyc0NvdW50KSwgKCkgPT4gZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQudkVycm9ycywgbnVsbCkpKTtcbn1cbmV4cG9ydHMucmVzZXRFcnJvcnNDb3VudCA9IHJlc2V0RXJyb3JzQ291bnQ7XG5mdW5jdGlvbiBleHRlbmRFcnJvcnMoeyBnZW4sIGtleXdvcmQsIHNjaGVtYVZhbHVlLCBkYXRhLCBlcnJzQ291bnQsIGl0LCB9KSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGVycnNDb3VudCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgY29uc3QgZXJyID0gZ2VuLm5hbWUoXCJlcnJcIik7XG4gICAgZ2VuLmZvclJhbmdlKFwiaVwiLCBlcnJzQ291bnQsIG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMsIChpKSA9PiB7XG4gICAgICAgIGdlbi5jb25zdChlcnIsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9WyR7aX1dYCk7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uaW5zdGFuY2VQYXRoID09PSB1bmRlZmluZWRgLCAoKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyfS5pbnN0YW5jZVBhdGhgLCAoMCwgY29kZWdlbl8xLnN0ckNvbmNhdCkobmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgaXQuZXJyb3JQYXRoKSkpO1xuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyfS5zY2hlbWFQYXRoYCwgKDAsIGNvZGVnZW5fMS5zdHIpIGAke2l0LmVyclNjaGVtYVBhdGh9LyR7a2V5d29yZH1gKTtcbiAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uc2NoZW1hYCwgc2NoZW1hVmFsdWUpO1xuICAgICAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uZGF0YWAsIGRhdGEpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLmV4dGVuZEVycm9ycyA9IGV4dGVuZEVycm9ycztcbmZ1bmN0aW9uIGFkZEVycm9yKGdlbiwgZXJyT2JqKSB7XG4gICAgY29uc3QgZXJyID0gZ2VuLmNvbnN0KFwiZXJyXCIsIGVyck9iaik7XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9ID09PSBudWxsYCwgKCkgPT4gZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQudkVycm9ycywgKDAsIGNvZGVnZW5fMS5fKSBgWyR7ZXJyfV1gKSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30ucHVzaCgke2Vycn0pYCk7XG4gICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfSsrYCk7XG59XG5mdW5jdGlvbiByZXR1cm5FcnJvcnMoaXQsIGVycnMpIHtcbiAgICBjb25zdCB7IGdlbiwgdmFsaWRhdGVOYW1lLCBzY2hlbWFFbnYgfSA9IGl0O1xuICAgIGlmIChzY2hlbWFFbnYuJGFzeW5jKSB7XG4gICAgICAgIGdlbi50aHJvdygoMCwgY29kZWdlbl8xLl8pIGBuZXcgJHtpdC5WYWxpZGF0aW9uRXJyb3J9KCR7ZXJyc30pYCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7dmFsaWRhdGVOYW1lfS5lcnJvcnNgLCBlcnJzKTtcbiAgICAgICAgZ2VuLnJldHVybihmYWxzZSk7XG4gICAgfVxufVxuY29uc3QgRSA9IHtcbiAgICBrZXl3b3JkOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJrZXl3b3JkXCIpLFxuICAgIHNjaGVtYVBhdGg6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInNjaGVtYVBhdGhcIiksIC8vIGFsc28gdXNlZCBpbiBKVEQgZXJyb3JzXG4gICAgcGFyYW1zOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwYXJhbXNcIiksXG4gICAgcHJvcGVydHlOYW1lOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwcm9wZXJ0eU5hbWVcIiksXG4gICAgbWVzc2FnZTogbmV3IGNvZGVnZW5fMS5OYW1lKFwibWVzc2FnZVwiKSxcbiAgICBzY2hlbWE6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInNjaGVtYVwiKSxcbiAgICBwYXJlbnRTY2hlbWE6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInBhcmVudFNjaGVtYVwiKSxcbn07XG5mdW5jdGlvbiBlcnJvck9iamVjdENvZGUoY3h0LCBlcnJvciwgZXJyb3JQYXRocykge1xuICAgIGNvbnN0IHsgY3JlYXRlRXJyb3JzIH0gPSBjeHQuaXQ7XG4gICAgaWYgKGNyZWF0ZUVycm9ycyA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGB7fWA7XG4gICAgcmV0dXJuIGVycm9yT2JqZWN0KGN4dCwgZXJyb3IsIGVycm9yUGF0aHMpO1xufVxuZnVuY3Rpb24gZXJyb3JPYmplY3QoY3h0LCBlcnJvciwgZXJyb3JQYXRocyA9IHt9KSB7XG4gICAgY29uc3QgeyBnZW4sIGl0IH0gPSBjeHQ7XG4gICAgY29uc3Qga2V5VmFsdWVzID0gW1xuICAgICAgICBlcnJvckluc3RhbmNlUGF0aChpdCwgZXJyb3JQYXRocyksXG4gICAgICAgIGVycm9yU2NoZW1hUGF0aChjeHQsIGVycm9yUGF0aHMpLFxuICAgIF07XG4gICAgZXh0cmFFcnJvclByb3BzKGN4dCwgZXJyb3IsIGtleVZhbHVlcyk7XG4gICAgcmV0dXJuIGdlbi5vYmplY3QoLi4ua2V5VmFsdWVzKTtcbn1cbmZ1bmN0aW9uIGVycm9ySW5zdGFuY2VQYXRoKHsgZXJyb3JQYXRoIH0sIHsgaW5zdGFuY2VQYXRoIH0pIHtcbiAgICBjb25zdCBpbnN0UGF0aCA9IGluc3RhbmNlUGF0aFxuICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtlcnJvclBhdGh9JHsoMCwgdXRpbF8xLmdldEVycm9yUGF0aCkoaW5zdGFuY2VQYXRoLCB1dGlsXzEuVHlwZS5TdHIpfWBcbiAgICAgICAgOiBlcnJvclBhdGg7XG4gICAgcmV0dXJuIFtuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCAoMCwgY29kZWdlbl8xLnN0ckNvbmNhdCkobmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgaW5zdFBhdGgpXTtcbn1cbmZ1bmN0aW9uIGVycm9yU2NoZW1hUGF0aCh7IGtleXdvcmQsIGl0OiB7IGVyclNjaGVtYVBhdGggfSB9LCB7IHNjaGVtYVBhdGgsIHBhcmVudFNjaGVtYSB9KSB7XG4gICAgbGV0IHNjaFBhdGggPSBwYXJlbnRTY2hlbWEgPyBlcnJTY2hlbWFQYXRoIDogKDAsIGNvZGVnZW5fMS5zdHIpIGAke2VyclNjaGVtYVBhdGh9LyR7a2V5d29yZH1gO1xuICAgIGlmIChzY2hlbWFQYXRoKSB7XG4gICAgICAgIHNjaFBhdGggPSAoMCwgY29kZWdlbl8xLnN0cikgYCR7c2NoUGF0aH0keygwLCB1dGlsXzEuZ2V0RXJyb3JQYXRoKShzY2hlbWFQYXRoLCB1dGlsXzEuVHlwZS5TdHIpfWA7XG4gICAgfVxuICAgIHJldHVybiBbRS5zY2hlbWFQYXRoLCBzY2hQYXRoXTtcbn1cbmZ1bmN0aW9uIGV4dHJhRXJyb3JQcm9wcyhjeHQsIHsgcGFyYW1zLCBtZXNzYWdlIH0sIGtleVZhbHVlcykge1xuICAgIGNvbnN0IHsga2V5d29yZCwgZGF0YSwgc2NoZW1hVmFsdWUsIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgeyBvcHRzLCBwcm9wZXJ0eU5hbWUsIHRvcFNjaGVtYVJlZiwgc2NoZW1hUGF0aCB9ID0gaXQ7XG4gICAga2V5VmFsdWVzLnB1c2goW0Uua2V5d29yZCwga2V5d29yZF0sIFtFLnBhcmFtcywgdHlwZW9mIHBhcmFtcyA9PSBcImZ1bmN0aW9uXCIgPyBwYXJhbXMoY3h0KSA6IHBhcmFtcyB8fCAoMCwgY29kZWdlbl8xLl8pIGB7fWBdKTtcbiAgICBpZiAob3B0cy5tZXNzYWdlcykge1xuICAgICAgICBrZXlWYWx1ZXMucHVzaChbRS5tZXNzYWdlLCB0eXBlb2YgbWVzc2FnZSA9PSBcImZ1bmN0aW9uXCIgPyBtZXNzYWdlKGN4dCkgOiBtZXNzYWdlXSk7XG4gICAgfVxuICAgIGlmIChvcHRzLnZlcmJvc2UpIHtcbiAgICAgICAga2V5VmFsdWVzLnB1c2goW0Uuc2NoZW1hLCBzY2hlbWFWYWx1ZV0sIFtFLnBhcmVudFNjaGVtYSwgKDAsIGNvZGVnZW5fMS5fKSBgJHt0b3BTY2hlbWFSZWZ9JHtzY2hlbWFQYXRofWBdLCBbbmFtZXNfMS5kZWZhdWx0LmRhdGEsIGRhdGFdKTtcbiAgICB9XG4gICAgaWYgKHByb3BlcnR5TmFtZSlcbiAgICAgICAga2V5VmFsdWVzLnB1c2goW0UucHJvcGVydHlOYW1lLCBwcm9wZXJ0eU5hbWVdKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9ycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ib29sT3JFbXB0eVNjaGVtYSA9IGV4cG9ydHMudG9wQm9vbE9yRW1wdHlTY2hlbWEgPSB2b2lkIDA7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9lcnJvcnNcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vbmFtZXNcIik7XG5jb25zdCBib29sRXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJib29sZWFuIHNjaGVtYSBpcyBmYWxzZVwiLFxufTtcbmZ1bmN0aW9uIHRvcEJvb2xPckVtcHR5U2NoZW1hKGl0KSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgdmFsaWRhdGVOYW1lIH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICBmYWxzZVNjaGVtYUVycm9yKGl0LCBmYWxzZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIiAmJiBzY2hlbWEuJGFzeW5jID09PSB0cnVlKSB7XG4gICAgICAgIGdlbi5yZXR1cm4obmFtZXNfMS5kZWZhdWx0LmRhdGEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke3ZhbGlkYXRlTmFtZX0uZXJyb3JzYCwgbnVsbCk7XG4gICAgICAgIGdlbi5yZXR1cm4odHJ1ZSk7XG4gICAgfVxufVxuZXhwb3J0cy50b3BCb29sT3JFbXB0eVNjaGVtYSA9IHRvcEJvb2xPckVtcHR5U2NoZW1hO1xuZnVuY3Rpb24gYm9vbE9yRW1wdHlTY2hlbWEoaXQsIHZhbGlkKSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSB9ID0gaXQ7XG4gICAgaWYgKHNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZ2VuLnZhcih2YWxpZCwgZmFsc2UpOyAvLyBUT0RPIHZhclxuICAgICAgICBmYWxzZVNjaGVtYUVycm9yKGl0KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdlbi52YXIodmFsaWQsIHRydWUpOyAvLyBUT0RPIHZhclxuICAgIH1cbn1cbmV4cG9ydHMuYm9vbE9yRW1wdHlTY2hlbWEgPSBib29sT3JFbXB0eVNjaGVtYTtcbmZ1bmN0aW9uIGZhbHNlU2NoZW1hRXJyb3IoaXQsIG92ZXJyaWRlQWxsRXJyb3JzKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEgfSA9IGl0O1xuICAgIC8vIFRPRE8gbWF5YmUgc29tZSBvdGhlciBpbnRlcmZhY2Ugc2hvdWxkIGJlIHVzZWQgZm9yIG5vbi1rZXl3b3JkIHZhbGlkYXRpb24gZXJyb3JzLi4uXG4gICAgY29uc3QgY3h0ID0ge1xuICAgICAgICBnZW4sXG4gICAgICAgIGtleXdvcmQ6IFwiZmFsc2Ugc2NoZW1hXCIsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHNjaGVtYTogZmFsc2UsXG4gICAgICAgIHNjaGVtYUNvZGU6IGZhbHNlLFxuICAgICAgICBzY2hlbWFWYWx1ZTogZmFsc2UsXG4gICAgICAgIHBhcmFtczoge30sXG4gICAgICAgIGl0LFxuICAgIH07XG4gICAgKDAsIGVycm9yc18xLnJlcG9ydEVycm9yKShjeHQsIGJvb2xFcnJvciwgdW5kZWZpbmVkLCBvdmVycmlkZUFsbEVycm9ycyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ib29sU2NoZW1hLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJ1bGVzID0gZXhwb3J0cy5pc0pTT05UeXBlID0gdm9pZCAwO1xuY29uc3QgX2pzb25UeXBlcyA9IFtcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcImludGVnZXJcIiwgXCJib29sZWFuXCIsIFwibnVsbFwiLCBcIm9iamVjdFwiLCBcImFycmF5XCJdO1xuY29uc3QganNvblR5cGVzID0gbmV3IFNldChfanNvblR5cGVzKTtcbmZ1bmN0aW9uIGlzSlNPTlR5cGUoeCkge1xuICAgIHJldHVybiB0eXBlb2YgeCA9PSBcInN0cmluZ1wiICYmIGpzb25UeXBlcy5oYXMoeCk7XG59XG5leHBvcnRzLmlzSlNPTlR5cGUgPSBpc0pTT05UeXBlO1xuZnVuY3Rpb24gZ2V0UnVsZXMoKSB7XG4gICAgY29uc3QgZ3JvdXBzID0ge1xuICAgICAgICBudW1iZXI6IHsgdHlwZTogXCJudW1iZXJcIiwgcnVsZXM6IFtdIH0sXG4gICAgICAgIHN0cmluZzogeyB0eXBlOiBcInN0cmluZ1wiLCBydWxlczogW10gfSxcbiAgICAgICAgYXJyYXk6IHsgdHlwZTogXCJhcnJheVwiLCBydWxlczogW10gfSxcbiAgICAgICAgb2JqZWN0OiB7IHR5cGU6IFwib2JqZWN0XCIsIHJ1bGVzOiBbXSB9LFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZXM6IHsgLi4uZ3JvdXBzLCBpbnRlZ2VyOiB0cnVlLCBib29sZWFuOiB0cnVlLCBudWxsOiB0cnVlIH0sXG4gICAgICAgIHJ1bGVzOiBbeyBydWxlczogW10gfSwgZ3JvdXBzLm51bWJlciwgZ3JvdXBzLnN0cmluZywgZ3JvdXBzLmFycmF5LCBncm91cHMub2JqZWN0XSxcbiAgICAgICAgcG9zdDogeyBydWxlczogW10gfSxcbiAgICAgICAgYWxsOiB7fSxcbiAgICAgICAga2V5d29yZHM6IHt9LFxuICAgIH07XG59XG5leHBvcnRzLmdldFJ1bGVzID0gZ2V0UnVsZXM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ydWxlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zaG91bGRVc2VSdWxlID0gZXhwb3J0cy5zaG91bGRVc2VHcm91cCA9IGV4cG9ydHMuc2NoZW1hSGFzUnVsZXNGb3JUeXBlID0gdm9pZCAwO1xuZnVuY3Rpb24gc2NoZW1hSGFzUnVsZXNGb3JUeXBlKHsgc2NoZW1hLCBzZWxmIH0sIHR5cGUpIHtcbiAgICBjb25zdCBncm91cCA9IHNlbGYuUlVMRVMudHlwZXNbdHlwZV07XG4gICAgcmV0dXJuIGdyb3VwICYmIGdyb3VwICE9PSB0cnVlICYmIHNob3VsZFVzZUdyb3VwKHNjaGVtYSwgZ3JvdXApO1xufVxuZXhwb3J0cy5zY2hlbWFIYXNSdWxlc0ZvclR5cGUgPSBzY2hlbWFIYXNSdWxlc0ZvclR5cGU7XG5mdW5jdGlvbiBzaG91bGRVc2VHcm91cChzY2hlbWEsIGdyb3VwKSB7XG4gICAgcmV0dXJuIGdyb3VwLnJ1bGVzLnNvbWUoKHJ1bGUpID0+IHNob3VsZFVzZVJ1bGUoc2NoZW1hLCBydWxlKSk7XG59XG5leHBvcnRzLnNob3VsZFVzZUdyb3VwID0gc2hvdWxkVXNlR3JvdXA7XG5mdW5jdGlvbiBzaG91bGRVc2VSdWxlKHNjaGVtYSwgcnVsZSkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKHNjaGVtYVtydWxlLmtleXdvcmRdICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgKChfYSA9IHJ1bGUuZGVmaW5pdGlvbi5pbXBsZW1lbnRzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc29tZSgoa3dkKSA9PiBzY2hlbWFba3dkXSAhPT0gdW5kZWZpbmVkKSkpO1xufVxuZXhwb3J0cy5zaG91bGRVc2VSdWxlID0gc2hvdWxkVXNlUnVsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwcGxpY2FiaWxpdHkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVwb3J0VHlwZUVycm9yID0gZXhwb3J0cy5jaGVja0RhdGFUeXBlcyA9IGV4cG9ydHMuY2hlY2tEYXRhVHlwZSA9IGV4cG9ydHMuY29lcmNlQW5kQ2hlY2tEYXRhVHlwZSA9IGV4cG9ydHMuZ2V0SlNPTlR5cGVzID0gZXhwb3J0cy5nZXRTY2hlbWFUeXBlcyA9IGV4cG9ydHMuRGF0YVR5cGUgPSB2b2lkIDA7XG5jb25zdCBydWxlc18xID0gcmVxdWlyZShcIi4uL3J1bGVzXCIpO1xuY29uc3QgYXBwbGljYWJpbGl0eV8xID0gcmVxdWlyZShcIi4vYXBwbGljYWJpbGl0eVwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL2Vycm9yc1wiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG52YXIgRGF0YVR5cGU7XG4oZnVuY3Rpb24gKERhdGFUeXBlKSB7XG4gICAgRGF0YVR5cGVbRGF0YVR5cGVbXCJDb3JyZWN0XCJdID0gMF0gPSBcIkNvcnJlY3RcIjtcbiAgICBEYXRhVHlwZVtEYXRhVHlwZVtcIldyb25nXCJdID0gMV0gPSBcIldyb25nXCI7XG59KShEYXRhVHlwZSB8fCAoZXhwb3J0cy5EYXRhVHlwZSA9IERhdGFUeXBlID0ge30pKTtcbmZ1bmN0aW9uIGdldFNjaGVtYVR5cGVzKHNjaGVtYSkge1xuICAgIGNvbnN0IHR5cGVzID0gZ2V0SlNPTlR5cGVzKHNjaGVtYS50eXBlKTtcbiAgICBjb25zdCBoYXNOdWxsID0gdHlwZXMuaW5jbHVkZXMoXCJudWxsXCIpO1xuICAgIGlmIChoYXNOdWxsKSB7XG4gICAgICAgIGlmIChzY2hlbWEubnVsbGFibGUgPT09IGZhbHNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHlwZTogbnVsbCBjb250cmFkaWN0cyBudWxsYWJsZTogZmFsc2VcIik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoIXR5cGVzLmxlbmd0aCAmJiBzY2hlbWEubnVsbGFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIm51bGxhYmxlXCIgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBcInR5cGVcIicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY2hlbWEubnVsbGFibGUgPT09IHRydWUpXG4gICAgICAgICAgICB0eXBlcy5wdXNoKFwibnVsbFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVzO1xufVxuZXhwb3J0cy5nZXRTY2hlbWFUeXBlcyA9IGdldFNjaGVtYVR5cGVzO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZWR1bmRhbnQtdHlwZS1jb25zdGl0dWVudHNcbmZ1bmN0aW9uIGdldEpTT05UeXBlcyh0cykge1xuICAgIGNvbnN0IHR5cGVzID0gQXJyYXkuaXNBcnJheSh0cykgPyB0cyA6IHRzID8gW3RzXSA6IFtdO1xuICAgIGlmICh0eXBlcy5ldmVyeShydWxlc18xLmlzSlNPTlR5cGUpKVxuICAgICAgICByZXR1cm4gdHlwZXM7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidHlwZSBtdXN0IGJlIEpTT05UeXBlIG9yIEpTT05UeXBlW106IFwiICsgdHlwZXMuam9pbihcIixcIikpO1xufVxuZXhwb3J0cy5nZXRKU09OVHlwZXMgPSBnZXRKU09OVHlwZXM7XG5mdW5jdGlvbiBjb2VyY2VBbmRDaGVja0RhdGFUeXBlKGl0LCB0eXBlcykge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBvcHRzIH0gPSBpdDtcbiAgICBjb25zdCBjb2VyY2VUbyA9IGNvZXJjZVRvVHlwZXModHlwZXMsIG9wdHMuY29lcmNlVHlwZXMpO1xuICAgIGNvbnN0IGNoZWNrVHlwZXMgPSB0eXBlcy5sZW5ndGggPiAwICYmXG4gICAgICAgICEoY29lcmNlVG8ubGVuZ3RoID09PSAwICYmIHR5cGVzLmxlbmd0aCA9PT0gMSAmJiAoMCwgYXBwbGljYWJpbGl0eV8xLnNjaGVtYUhhc1J1bGVzRm9yVHlwZSkoaXQsIHR5cGVzWzBdKSk7XG4gICAgaWYgKGNoZWNrVHlwZXMpIHtcbiAgICAgICAgY29uc3Qgd3JvbmdUeXBlID0gY2hlY2tEYXRhVHlwZXModHlwZXMsIGRhdGEsIG9wdHMuc3RyaWN0TnVtYmVycywgRGF0YVR5cGUuV3JvbmcpO1xuICAgICAgICBnZW4uaWYod3JvbmdUeXBlLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29lcmNlVG8ubGVuZ3RoKVxuICAgICAgICAgICAgICAgIGNvZXJjZURhdGEoaXQsIHR5cGVzLCBjb2VyY2VUbyk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmVwb3J0VHlwZUVycm9yKGl0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjaGVja1R5cGVzO1xufVxuZXhwb3J0cy5jb2VyY2VBbmRDaGVja0RhdGFUeXBlID0gY29lcmNlQW5kQ2hlY2tEYXRhVHlwZTtcbmNvbnN0IENPRVJDSUJMRSA9IG5ldyBTZXQoW1wic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwiaW50ZWdlclwiLCBcImJvb2xlYW5cIiwgXCJudWxsXCJdKTtcbmZ1bmN0aW9uIGNvZXJjZVRvVHlwZXModHlwZXMsIGNvZXJjZVR5cGVzKSB7XG4gICAgcmV0dXJuIGNvZXJjZVR5cGVzXG4gICAgICAgID8gdHlwZXMuZmlsdGVyKCh0KSA9PiBDT0VSQ0lCTEUuaGFzKHQpIHx8IChjb2VyY2VUeXBlcyA9PT0gXCJhcnJheVwiICYmIHQgPT09IFwiYXJyYXlcIikpXG4gICAgICAgIDogW107XG59XG5mdW5jdGlvbiBjb2VyY2VEYXRhKGl0LCB0eXBlcywgY29lcmNlVG8pIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwgb3B0cyB9ID0gaXQ7XG4gICAgY29uc3QgZGF0YVR5cGUgPSBnZW4ubGV0KFwiZGF0YVR5cGVcIiwgKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZGF0YX1gKTtcbiAgICBjb25zdCBjb2VyY2VkID0gZ2VuLmxldChcImNvZXJjZWRcIiwgKDAsIGNvZGVnZW5fMS5fKSBgdW5kZWZpbmVkYCk7XG4gICAgaWYgKG9wdHMuY29lcmNlVHlwZXMgPT09IFwiYXJyYXlcIikge1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhVHlwZX0gPT0gJ29iamVjdCcgJiYgQXJyYXkuaXNBcnJheSgke2RhdGF9KSAmJiAke2RhdGF9Lmxlbmd0aCA9PSAxYCwgKCkgPT4gZ2VuXG4gICAgICAgICAgICAuYXNzaWduKGRhdGEsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX1bMF1gKVxuICAgICAgICAgICAgLmFzc2lnbihkYXRhVHlwZSwgKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZGF0YX1gKVxuICAgICAgICAgICAgLmlmKGNoZWNrRGF0YVR5cGVzKHR5cGVzLCBkYXRhLCBvcHRzLnN0cmljdE51bWJlcnMpLCAoKSA9PiBnZW4uYXNzaWduKGNvZXJjZWQsIGRhdGEpKSk7XG4gICAgfVxuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2NvZXJjZWR9ICE9PSB1bmRlZmluZWRgKTtcbiAgICBmb3IgKGNvbnN0IHQgb2YgY29lcmNlVG8pIHtcbiAgICAgICAgaWYgKENPRVJDSUJMRS5oYXModCkgfHwgKHQgPT09IFwiYXJyYXlcIiAmJiBvcHRzLmNvZXJjZVR5cGVzID09PSBcImFycmF5XCIpKSB7XG4gICAgICAgICAgICBjb2VyY2VTcGVjaWZpY1R5cGUodCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2VuLmVsc2UoKTtcbiAgICByZXBvcnRUeXBlRXJyb3IoaXQpO1xuICAgIGdlbi5lbmRJZigpO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2NvZXJjZWR9ICE9PSB1bmRlZmluZWRgLCAoKSA9PiB7XG4gICAgICAgIGdlbi5hc3NpZ24oZGF0YSwgY29lcmNlZCk7XG4gICAgICAgIGFzc2lnblBhcmVudERhdGEoaXQsIGNvZXJjZWQpO1xuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGNvZXJjZVNwZWNpZmljVHlwZSh0KSB7XG4gICAgICAgIHN3aXRjaCAodCkge1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YVR5cGV9ID09IFwibnVtYmVyXCIgfHwgJHtkYXRhVHlwZX0gPT0gXCJib29sZWFuXCJgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsICgwLCBjb2RlZ2VuXzEuXykgYFwiXCIgKyAke2RhdGF9YClcbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ID09PSBudWxsYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCAoMCwgY29kZWdlbl8xLl8pIGBcIlwiYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YVR5cGV9ID09IFwiYm9vbGVhblwiIHx8ICR7ZGF0YX0gPT09IG51bGxcbiAgICAgICAgICAgICAgfHwgKCR7ZGF0YVR5cGV9ID09IFwic3RyaW5nXCIgJiYgJHtkYXRhfSAmJiAke2RhdGF9ID09ICske2RhdGF9KWApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgKDAsIGNvZGVnZW5fMS5fKSBgKyR7ZGF0YX1gKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIFwiaW50ZWdlclwiOlxuICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YVR5cGV9ID09PSBcImJvb2xlYW5cIiB8fCAke2RhdGF9ID09PSBudWxsXG4gICAgICAgICAgICAgIHx8ICgke2RhdGFUeXBlfSA9PT0gXCJzdHJpbmdcIiAmJiAke2RhdGF9ICYmICR7ZGF0YX0gPT0gKyR7ZGF0YX0gJiYgISgke2RhdGF9ICUgMSkpYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCAoMCwgY29kZWdlbl8xLl8pIGArJHtkYXRhfWApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSA9PT0gXCJmYWxzZVwiIHx8ICR7ZGF0YX0gPT09IDAgfHwgJHtkYXRhfSA9PT0gbnVsbGApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSA9PT0gXCJ0cnVlXCIgfHwgJHtkYXRhfSA9PT0gMWApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcIm51bGxcIjpcbiAgICAgICAgICAgICAgICBnZW4uZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gPT09IFwiXCIgfHwgJHtkYXRhfSA9PT0gMCB8fCAke2RhdGF9ID09PSBmYWxzZWApO1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24oY29lcmNlZCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhVHlwZX0gPT09IFwic3RyaW5nXCIgfHwgJHtkYXRhVHlwZX0gPT09IFwibnVtYmVyXCJcbiAgICAgICAgICAgICAgfHwgJHtkYXRhVHlwZX0gPT09IFwiYm9vbGVhblwiIHx8ICR7ZGF0YX0gPT09IG51bGxgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsICgwLCBjb2RlZ2VuXzEuXykgYFske2RhdGF9XWApO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gYXNzaWduUGFyZW50RGF0YSh7IGdlbiwgcGFyZW50RGF0YSwgcGFyZW50RGF0YVByb3BlcnR5IH0sIGV4cHIpIHtcbiAgICAvLyBUT0RPIHVzZSBnZW4ucHJvcGVydHlcbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtwYXJlbnREYXRhfSAhPT0gdW5kZWZpbmVkYCwgKCkgPT4gZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke3BhcmVudERhdGF9WyR7cGFyZW50RGF0YVByb3BlcnR5fV1gLCBleHByKSk7XG59XG5mdW5jdGlvbiBjaGVja0RhdGFUeXBlKGRhdGFUeXBlLCBkYXRhLCBzdHJpY3ROdW1zLCBjb3JyZWN0ID0gRGF0YVR5cGUuQ29ycmVjdCkge1xuICAgIGNvbnN0IEVRID0gY29ycmVjdCA9PT0gRGF0YVR5cGUuQ29ycmVjdCA/IGNvZGVnZW5fMS5vcGVyYXRvcnMuRVEgOiBjb2RlZ2VuXzEub3BlcmF0b3JzLk5FUTtcbiAgICBsZXQgY29uZDtcbiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7XG4gICAgICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSAke0VRfSBudWxsYDtcbiAgICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgICAgICBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgQXJyYXkuaXNBcnJheSgke2RhdGF9KWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgY29uZCA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gJiYgdHlwZW9mICR7ZGF0YX0gPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSgke2RhdGF9KWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImludGVnZXJcIjpcbiAgICAgICAgICAgIGNvbmQgPSBudW1Db25kKCgwLCBjb2RlZ2VuXzEuXykgYCEoJHtkYXRhfSAlIDEpICYmICFpc05hTigke2RhdGF9KWApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgIGNvbmQgPSBudW1Db25kKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtkYXRhfSAke0VRfSAke2RhdGFUeXBlfWA7XG4gICAgfVxuICAgIHJldHVybiBjb3JyZWN0ID09PSBEYXRhVHlwZS5Db3JyZWN0ID8gY29uZCA6ICgwLCBjb2RlZ2VuXzEubm90KShjb25kKTtcbiAgICBmdW5jdGlvbiBudW1Db25kKF9jb25kID0gY29kZWdlbl8xLm5pbCkge1xuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5hbmQpKCgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2RhdGF9ID09IFwibnVtYmVyXCJgLCBfY29uZCwgc3RyaWN0TnVtcyA/ICgwLCBjb2RlZ2VuXzEuXykgYGlzRmluaXRlKCR7ZGF0YX0pYCA6IGNvZGVnZW5fMS5uaWwpO1xuICAgIH1cbn1cbmV4cG9ydHMuY2hlY2tEYXRhVHlwZSA9IGNoZWNrRGF0YVR5cGU7XG5mdW5jdGlvbiBjaGVja0RhdGFUeXBlcyhkYXRhVHlwZXMsIGRhdGEsIHN0cmljdE51bXMsIGNvcnJlY3QpIHtcbiAgICBpZiAoZGF0YVR5cGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gY2hlY2tEYXRhVHlwZShkYXRhVHlwZXNbMF0sIGRhdGEsIHN0cmljdE51bXMsIGNvcnJlY3QpO1xuICAgIH1cbiAgICBsZXQgY29uZDtcbiAgICBjb25zdCB0eXBlcyA9ICgwLCB1dGlsXzEudG9IYXNoKShkYXRhVHlwZXMpO1xuICAgIGlmICh0eXBlcy5hcnJheSAmJiB0eXBlcy5vYmplY3QpIHtcbiAgICAgICAgY29uc3Qgbm90T2JqID0gKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZGF0YX0gIT0gXCJvYmplY3RcImA7XG4gICAgICAgIGNvbmQgPSB0eXBlcy5udWxsID8gbm90T2JqIDogKDAsIGNvZGVnZW5fMS5fKSBgISR7ZGF0YX0gfHwgJHtub3RPYmp9YDtcbiAgICAgICAgZGVsZXRlIHR5cGVzLm51bGw7XG4gICAgICAgIGRlbGV0ZSB0eXBlcy5hcnJheTtcbiAgICAgICAgZGVsZXRlIHR5cGVzLm9iamVjdDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbmQgPSBjb2RlZ2VuXzEubmlsO1xuICAgIH1cbiAgICBpZiAodHlwZXMubnVtYmVyKVxuICAgICAgICBkZWxldGUgdHlwZXMuaW50ZWdlcjtcbiAgICBmb3IgKGNvbnN0IHQgaW4gdHlwZXMpXG4gICAgICAgIGNvbmQgPSAoMCwgY29kZWdlbl8xLmFuZCkoY29uZCwgY2hlY2tEYXRhVHlwZSh0LCBkYXRhLCBzdHJpY3ROdW1zLCBjb3JyZWN0KSk7XG4gICAgcmV0dXJuIGNvbmQ7XG59XG5leHBvcnRzLmNoZWNrRGF0YVR5cGVzID0gY2hlY2tEYXRhVHlwZXM7XG5jb25zdCB0eXBlRXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgc2NoZW1hIH0pID0+IGBtdXN0IGJlICR7c2NoZW1hfWAsXG4gICAgcGFyYW1zOiAoeyBzY2hlbWEsIHNjaGVtYVZhbHVlIH0pID0+IHR5cGVvZiBzY2hlbWEgPT0gXCJzdHJpbmdcIiA/ICgwLCBjb2RlZ2VuXzEuXykgYHt0eXBlOiAke3NjaGVtYX19YCA6ICgwLCBjb2RlZ2VuXzEuXykgYHt0eXBlOiAke3NjaGVtYVZhbHVlfX1gLFxufTtcbmZ1bmN0aW9uIHJlcG9ydFR5cGVFcnJvcihpdCkge1xuICAgIGNvbnN0IGN4dCA9IGdldFR5cGVFcnJvckNvbnRleHQoaXQpO1xuICAgICgwLCBlcnJvcnNfMS5yZXBvcnRFcnJvcikoY3h0LCB0eXBlRXJyb3IpO1xufVxuZXhwb3J0cy5yZXBvcnRUeXBlRXJyb3IgPSByZXBvcnRUeXBlRXJyb3I7XG5mdW5jdGlvbiBnZXRUeXBlRXJyb3JDb250ZXh0KGl0KSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIHNjaGVtYSB9ID0gaXQ7XG4gICAgY29uc3Qgc2NoZW1hQ29kZSA9ICgwLCB1dGlsXzEuc2NoZW1hUmVmT3JWYWwpKGl0LCBzY2hlbWEsIFwidHlwZVwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBnZW4sXG4gICAgICAgIGtleXdvcmQ6IFwidHlwZVwiLFxuICAgICAgICBkYXRhLFxuICAgICAgICBzY2hlbWE6IHNjaGVtYS50eXBlLFxuICAgICAgICBzY2hlbWFDb2RlLFxuICAgICAgICBzY2hlbWFWYWx1ZTogc2NoZW1hQ29kZSxcbiAgICAgICAgcGFyZW50U2NoZW1hOiBzY2hlbWEsXG4gICAgICAgIHBhcmFtczoge30sXG4gICAgICAgIGl0LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhVHlwZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hc3NpZ25EZWZhdWx0cyA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG5mdW5jdGlvbiBhc3NpZ25EZWZhdWx0cyhpdCwgdHkpIHtcbiAgICBjb25zdCB7IHByb3BlcnRpZXMsIGl0ZW1zIH0gPSBpdC5zY2hlbWE7XG4gICAgaWYgKHR5ID09PSBcIm9iamVjdFwiICYmIHByb3BlcnRpZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcHJvcGVydGllcykge1xuICAgICAgICAgICAgYXNzaWduRGVmYXVsdChpdCwga2V5LCBwcm9wZXJ0aWVzW2tleV0uZGVmYXVsdCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHkgPT09IFwiYXJyYXlcIiAmJiBBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICBpdGVtcy5mb3JFYWNoKChzY2gsIGkpID0+IGFzc2lnbkRlZmF1bHQoaXQsIGksIHNjaC5kZWZhdWx0KSk7XG4gICAgfVxufVxuZXhwb3J0cy5hc3NpZ25EZWZhdWx0cyA9IGFzc2lnbkRlZmF1bHRzO1xuZnVuY3Rpb24gYXNzaWduRGVmYXVsdChpdCwgcHJvcCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgY29uc3QgeyBnZW4sIGNvbXBvc2l0ZVJ1bGUsIGRhdGEsIG9wdHMgfSA9IGl0O1xuICAgIGlmIChkZWZhdWx0VmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGNoaWxkRGF0YSA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHByb3ApfWA7XG4gICAgaWYgKGNvbXBvc2l0ZVJ1bGUpIHtcbiAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBgZGVmYXVsdCBpcyBpZ25vcmVkIGZvcjogJHtjaGlsZERhdGF9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGNvbmRpdGlvbiA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7Y2hpbGREYXRhfSA9PT0gdW5kZWZpbmVkYDtcbiAgICBpZiAob3B0cy51c2VEZWZhdWx0cyA9PT0gXCJlbXB0eVwiKSB7XG4gICAgICAgIGNvbmRpdGlvbiA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7Y29uZGl0aW9ufSB8fCAke2NoaWxkRGF0YX0gPT09IG51bGwgfHwgJHtjaGlsZERhdGF9ID09PSBcIlwiYDtcbiAgICB9XG4gICAgLy8gYCR7Y2hpbGREYXRhfSA9PT0gdW5kZWZpbmVkYCArXG4gICAgLy8gKG9wdHMudXNlRGVmYXVsdHMgPT09IFwiZW1wdHlcIiA/IGAgfHwgJHtjaGlsZERhdGF9ID09PSBudWxsIHx8ICR7Y2hpbGREYXRhfSA9PT0gXCJcImAgOiBcIlwiKVxuICAgIGdlbi5pZihjb25kaXRpb24sICgwLCBjb2RlZ2VuXzEuXykgYCR7Y2hpbGREYXRhfSA9ICR7KDAsIGNvZGVnZW5fMS5zdHJpbmdpZnkpKGRlZmF1bHRWYWx1ZSl9YCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWZhdWx0cy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YWxpZGF0ZVVuaW9uID0gZXhwb3J0cy52YWxpZGF0ZUFycmF5ID0gZXhwb3J0cy51c2VQYXR0ZXJuID0gZXhwb3J0cy5jYWxsVmFsaWRhdGVDb2RlID0gZXhwb3J0cy5zY2hlbWFQcm9wZXJ0aWVzID0gZXhwb3J0cy5hbGxTY2hlbWFQcm9wZXJ0aWVzID0gZXhwb3J0cy5ub1Byb3BlcnR5SW5EYXRhID0gZXhwb3J0cy5wcm9wZXJ0eUluRGF0YSA9IGV4cG9ydHMuaXNPd25Qcm9wZXJ0eSA9IGV4cG9ydHMuaGFzUHJvcEZ1bmMgPSBleHBvcnRzLnJlcG9ydE1pc3NpbmdQcm9wID0gZXhwb3J0cy5jaGVja01pc3NpbmdQcm9wID0gZXhwb3J0cy5jaGVja1JlcG9ydE1pc3NpbmdQcm9wID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uL2NvbXBpbGUvbmFtZXNcIik7XG5jb25zdCB1dGlsXzIgPSByZXF1aXJlKFwiLi4vY29tcGlsZS91dGlsXCIpO1xuZnVuY3Rpb24gY2hlY2tSZXBvcnRNaXNzaW5nUHJvcChjeHQsIHByb3ApIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwgaXQgfSA9IGN4dDtcbiAgICBnZW4uaWYobm9Qcm9wZXJ0eUluRGF0YShnZW4sIGRhdGEsIHByb3AsIGl0Lm9wdHMub3duUHJvcGVydGllcyksICgpID0+IHtcbiAgICAgICAgY3h0LnNldFBhcmFtcyh7IG1pc3NpbmdQcm9wZXJ0eTogKDAsIGNvZGVnZW5fMS5fKSBgJHtwcm9wfWAgfSwgdHJ1ZSk7XG4gICAgICAgIGN4dC5lcnJvcigpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5jaGVja1JlcG9ydE1pc3NpbmdQcm9wID0gY2hlY2tSZXBvcnRNaXNzaW5nUHJvcDtcbmZ1bmN0aW9uIGNoZWNrTWlzc2luZ1Byb3AoeyBnZW4sIGRhdGEsIGl0OiB7IG9wdHMgfSB9LCBwcm9wZXJ0aWVzLCBtaXNzaW5nKSB7XG4gICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEub3IpKC4uLnByb3BlcnRpZXMubWFwKChwcm9wKSA9PiAoMCwgY29kZWdlbl8xLmFuZCkobm9Qcm9wZXJ0eUluRGF0YShnZW4sIGRhdGEsIHByb3AsIG9wdHMub3duUHJvcGVydGllcyksICgwLCBjb2RlZ2VuXzEuXykgYCR7bWlzc2luZ30gPSAke3Byb3B9YCkpKTtcbn1cbmV4cG9ydHMuY2hlY2tNaXNzaW5nUHJvcCA9IGNoZWNrTWlzc2luZ1Byb3A7XG5mdW5jdGlvbiByZXBvcnRNaXNzaW5nUHJvcChjeHQsIG1pc3NpbmcpIHtcbiAgICBjeHQuc2V0UGFyYW1zKHsgbWlzc2luZ1Byb3BlcnR5OiBtaXNzaW5nIH0sIHRydWUpO1xuICAgIGN4dC5lcnJvcigpO1xufVxuZXhwb3J0cy5yZXBvcnRNaXNzaW5nUHJvcCA9IHJlcG9ydE1pc3NpbmdQcm9wO1xuZnVuY3Rpb24gaGFzUHJvcEZ1bmMoZ2VuKSB7XG4gICAgcmV0dXJuIGdlbi5zY29wZVZhbHVlKFwiZnVuY1wiLCB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICAgICAgcmVmOiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFxuICAgICAgICBjb2RlOiAoMCwgY29kZWdlbl8xLl8pIGBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5YCxcbiAgICB9KTtcbn1cbmV4cG9ydHMuaGFzUHJvcEZ1bmMgPSBoYXNQcm9wRnVuYztcbmZ1bmN0aW9uIGlzT3duUHJvcGVydHkoZ2VuLCBkYXRhLCBwcm9wZXJ0eSkge1xuICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke2hhc1Byb3BGdW5jKGdlbil9LmNhbGwoJHtkYXRhfSwgJHtwcm9wZXJ0eX0pYDtcbn1cbmV4cG9ydHMuaXNPd25Qcm9wZXJ0eSA9IGlzT3duUHJvcGVydHk7XG5mdW5jdGlvbiBwcm9wZXJ0eUluRGF0YShnZW4sIGRhdGEsIHByb3BlcnR5LCBvd25Qcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgY29uZCA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHByb3BlcnR5KX0gIT09IHVuZGVmaW5lZGA7XG4gICAgcmV0dXJuIG93blByb3BlcnRpZXMgPyAoMCwgY29kZWdlbl8xLl8pIGAke2NvbmR9ICYmICR7aXNPd25Qcm9wZXJ0eShnZW4sIGRhdGEsIHByb3BlcnR5KX1gIDogY29uZDtcbn1cbmV4cG9ydHMucHJvcGVydHlJbkRhdGEgPSBwcm9wZXJ0eUluRGF0YTtcbmZ1bmN0aW9uIG5vUHJvcGVydHlJbkRhdGEoZ2VuLCBkYXRhLCBwcm9wZXJ0eSwgb3duUHJvcGVydGllcykge1xuICAgIGNvbnN0IGNvbmQgPSAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShwcm9wZXJ0eSl9ID09PSB1bmRlZmluZWRgO1xuICAgIHJldHVybiBvd25Qcm9wZXJ0aWVzID8gKDAsIGNvZGVnZW5fMS5vcikoY29uZCwgKDAsIGNvZGVnZW5fMS5ub3QpKGlzT3duUHJvcGVydHkoZ2VuLCBkYXRhLCBwcm9wZXJ0eSkpKSA6IGNvbmQ7XG59XG5leHBvcnRzLm5vUHJvcGVydHlJbkRhdGEgPSBub1Byb3BlcnR5SW5EYXRhO1xuZnVuY3Rpb24gYWxsU2NoZW1hUHJvcGVydGllcyhzY2hlbWFNYXApIHtcbiAgICByZXR1cm4gc2NoZW1hTWFwID8gT2JqZWN0LmtleXMoc2NoZW1hTWFwKS5maWx0ZXIoKHApID0+IHAgIT09IFwiX19wcm90b19fXCIpIDogW107XG59XG5leHBvcnRzLmFsbFNjaGVtYVByb3BlcnRpZXMgPSBhbGxTY2hlbWFQcm9wZXJ0aWVzO1xuZnVuY3Rpb24gc2NoZW1hUHJvcGVydGllcyhpdCwgc2NoZW1hTWFwKSB7XG4gICAgcmV0dXJuIGFsbFNjaGVtYVByb3BlcnRpZXMoc2NoZW1hTWFwKS5maWx0ZXIoKHApID0+ICEoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hTWFwW3BdKSk7XG59XG5leHBvcnRzLnNjaGVtYVByb3BlcnRpZXMgPSBzY2hlbWFQcm9wZXJ0aWVzO1xuZnVuY3Rpb24gY2FsbFZhbGlkYXRlQ29kZSh7IHNjaGVtYUNvZGUsIGRhdGEsIGl0OiB7IGdlbiwgdG9wU2NoZW1hUmVmLCBzY2hlbWFQYXRoLCBlcnJvclBhdGggfSwgaXQgfSwgZnVuYywgY29udGV4dCwgcGFzc1NjaGVtYSkge1xuICAgIGNvbnN0IGRhdGFBbmRTY2hlbWEgPSBwYXNzU2NoZW1hID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWFDb2RlfSwgJHtkYXRhfSwgJHt0b3BTY2hlbWFSZWZ9JHtzY2hlbWFQYXRofWAgOiBkYXRhO1xuICAgIGNvbnN0IHZhbEN4dCA9IFtcbiAgICAgICAgW25hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsICgwLCBjb2RlZ2VuXzEuc3RyQ29uY2F0KShuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCBlcnJvclBhdGgpXSxcbiAgICAgICAgW25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhLCBpdC5wYXJlbnREYXRhXSxcbiAgICAgICAgW25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksIGl0LnBhcmVudERhdGFQcm9wZXJ0eV0sXG4gICAgICAgIFtuYW1lc18xLmRlZmF1bHQucm9vdERhdGEsIG5hbWVzXzEuZGVmYXVsdC5yb290RGF0YV0sXG4gICAgXTtcbiAgICBpZiAoaXQub3B0cy5keW5hbWljUmVmKVxuICAgICAgICB2YWxDeHQucHVzaChbbmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzLCBuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnNdKTtcbiAgICBjb25zdCBhcmdzID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhQW5kU2NoZW1hfSwgJHtnZW4ub2JqZWN0KC4uLnZhbEN4dCl9YDtcbiAgICByZXR1cm4gY29udGV4dCAhPT0gY29kZWdlbl8xLm5pbCA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZnVuY30uY2FsbCgke2NvbnRleHR9LCAke2FyZ3N9KWAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2Z1bmN9KCR7YXJnc30pYDtcbn1cbmV4cG9ydHMuY2FsbFZhbGlkYXRlQ29kZSA9IGNhbGxWYWxpZGF0ZUNvZGU7XG5jb25zdCBuZXdSZWdFeHAgPSAoMCwgY29kZWdlbl8xLl8pIGBuZXcgUmVnRXhwYDtcbmZ1bmN0aW9uIHVzZVBhdHRlcm4oeyBnZW4sIGl0OiB7IG9wdHMgfSB9LCBwYXR0ZXJuKSB7XG4gICAgY29uc3QgdSA9IG9wdHMudW5pY29kZVJlZ0V4cCA/IFwidVwiIDogXCJcIjtcbiAgICBjb25zdCB7IHJlZ0V4cCB9ID0gb3B0cy5jb2RlO1xuICAgIGNvbnN0IHJ4ID0gcmVnRXhwKHBhdHRlcm4sIHUpO1xuICAgIHJldHVybiBnZW4uc2NvcGVWYWx1ZShcInBhdHRlcm5cIiwge1xuICAgICAgICBrZXk6IHJ4LnRvU3RyaW5nKCksXG4gICAgICAgIHJlZjogcngsXG4gICAgICAgIGNvZGU6ICgwLCBjb2RlZ2VuXzEuXykgYCR7cmVnRXhwLmNvZGUgPT09IFwibmV3IFJlZ0V4cFwiID8gbmV3UmVnRXhwIDogKDAsIHV0aWxfMi51c2VGdW5jKShnZW4sIHJlZ0V4cCl9KCR7cGF0dGVybn0sICR7dX0pYCxcbiAgICB9KTtcbn1cbmV4cG9ydHMudXNlUGF0dGVybiA9IHVzZVBhdHRlcm47XG5mdW5jdGlvbiB2YWxpZGF0ZUFycmF5KGN4dCkge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBrZXl3b3JkLCBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICBpZiAoaXQuYWxsRXJyb3JzKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkQXJyID0gZ2VuLmxldChcInZhbGlkXCIsIHRydWUpO1xuICAgICAgICB2YWxpZGF0ZUl0ZW1zKCgpID0+IGdlbi5hc3NpZ24odmFsaWRBcnIsIGZhbHNlKSk7XG4gICAgICAgIHJldHVybiB2YWxpZEFycjtcbiAgICB9XG4gICAgZ2VuLnZhcih2YWxpZCwgdHJ1ZSk7XG4gICAgdmFsaWRhdGVJdGVtcygoKSA9PiBnZW4uYnJlYWsoKSk7XG4gICAgcmV0dXJuIHZhbGlkO1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlSXRlbXMobm90VmFsaWQpIHtcbiAgICAgICAgY29uc3QgbGVuID0gZ2VuLmNvbnN0KFwibGVuXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoYCk7XG4gICAgICAgIGdlbi5mb3JSYW5nZShcImlcIiwgMCwgbGVuLCAoaSkgPT4ge1xuICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAga2V5d29yZCxcbiAgICAgICAgICAgICAgICBkYXRhUHJvcDogaSxcbiAgICAgICAgICAgICAgICBkYXRhUHJvcFR5cGU6IHV0aWxfMS5UeXBlLk51bSxcbiAgICAgICAgICAgIH0sIHZhbGlkKTtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCBub3RWYWxpZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVBcnJheSA9IHZhbGlkYXRlQXJyYXk7XG5mdW5jdGlvbiB2YWxpZGF0ZVVuaW9uKGN4dCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICBjb25zdCBhbHdheXNWYWxpZCA9IHNjaGVtYS5zb21lKChzY2gpID0+ICgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2gpKTtcbiAgICBpZiAoYWx3YXlzVmFsaWQgJiYgIWl0Lm9wdHMudW5ldmFsdWF0ZWQpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCBmYWxzZSk7XG4gICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICBnZW4uYmxvY2soKCkgPT4gc2NoZW1hLmZvckVhY2goKF9zY2gsIGkpID0+IHtcbiAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICBrZXl3b3JkLFxuICAgICAgICAgICAgc2NoZW1hUHJvcDogaSxcbiAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgIH0sIHNjaFZhbGlkKTtcbiAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZH0gfHwgJHtzY2hWYWxpZH1gKTtcbiAgICAgICAgY29uc3QgbWVyZ2VkID0gY3h0Lm1lcmdlVmFsaWRFdmFsdWF0ZWQoc2NoQ3h0LCBzY2hWYWxpZCk7XG4gICAgICAgIC8vIGNhbiBzaG9ydC1jaXJjdWl0IGlmIGB1bmV2YWx1YXRlZFByb3BlcnRpZXMvSXRlbXNgIG5vdCBzdXBwb3J0ZWQgKG9wdHMudW5ldmFsdWF0ZWQgIT09IHRydWUpXG4gICAgICAgIC8vIG9yIGlmIGFsbCBwcm9wZXJ0aWVzIGFuZCBpdGVtcyB3ZXJlIGV2YWx1YXRlZCAoaXQucHJvcHMgPT09IHRydWUgJiYgaXQuaXRlbXMgPT09IHRydWUpXG4gICAgICAgIGlmICghbWVyZ2VkKVxuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCkpO1xuICAgIH0pKTtcbiAgICBjeHQucmVzdWx0KHZhbGlkLCAoKSA9PiBjeHQucmVzZXQoKSwgKCkgPT4gY3h0LmVycm9yKHRydWUpKTtcbn1cbmV4cG9ydHMudmFsaWRhdGVVbmlvbiA9IHZhbGlkYXRlVW5pb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb2RlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlS2V5d29yZFVzYWdlID0gZXhwb3J0cy52YWxpZFNjaGVtYVR5cGUgPSBleHBvcnRzLmZ1bmNLZXl3b3JkQ29kZSA9IGV4cG9ydHMubWFjcm9LZXl3b3JkQ29kZSA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb2RlZ2VuXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuLi9uYW1lc1wiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi8uLi92b2NhYnVsYXJpZXMvY29kZVwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL2Vycm9yc1wiKTtcbmZ1bmN0aW9uIG1hY3JvS2V5d29yZENvZGUoY3h0LCBkZWYpIHtcbiAgICBjb25zdCB7IGdlbiwga2V5d29yZCwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgbWFjcm9TY2hlbWEgPSBkZWYubWFjcm8uY2FsbChpdC5zZWxmLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQpO1xuICAgIGNvbnN0IHNjaGVtYVJlZiA9IHVzZUtleXdvcmQoZ2VuLCBrZXl3b3JkLCBtYWNyb1NjaGVtYSk7XG4gICAgaWYgKGl0Lm9wdHMudmFsaWRhdGVTY2hlbWEgIT09IGZhbHNlKVxuICAgICAgICBpdC5zZWxmLnZhbGlkYXRlU2NoZW1hKG1hY3JvU2NoZW1hLCB0cnVlKTtcbiAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgIHNjaGVtYTogbWFjcm9TY2hlbWEsXG4gICAgICAgIHNjaGVtYVBhdGg6IGNvZGVnZW5fMS5uaWwsXG4gICAgICAgIGVyclNjaGVtYVBhdGg6IGAke2l0LmVyclNjaGVtYVBhdGh9LyR7a2V5d29yZH1gLFxuICAgICAgICB0b3BTY2hlbWFSZWY6IHNjaGVtYVJlZixcbiAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICB9LCB2YWxpZCk7XG4gICAgY3h0LnBhc3ModmFsaWQsICgpID0+IGN4dC5lcnJvcih0cnVlKSk7XG59XG5leHBvcnRzLm1hY3JvS2V5d29yZENvZGUgPSBtYWNyb0tleXdvcmRDb2RlO1xuZnVuY3Rpb24gZnVuY0tleXdvcmRDb2RlKGN4dCwgZGVmKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHsgZ2VuLCBrZXl3b3JkLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgJGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgY2hlY2tBc3luY0tleXdvcmQoaXQsIGRlZik7XG4gICAgY29uc3QgdmFsaWRhdGUgPSAhJGRhdGEgJiYgZGVmLmNvbXBpbGUgPyBkZWYuY29tcGlsZS5jYWxsKGl0LnNlbGYsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCkgOiBkZWYudmFsaWRhdGU7XG4gICAgY29uc3QgdmFsaWRhdGVSZWYgPSB1c2VLZXl3b3JkKGdlbiwga2V5d29yZCwgdmFsaWRhdGUpO1xuICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIpO1xuICAgIGN4dC5ibG9jayRkYXRhKHZhbGlkLCB2YWxpZGF0ZUtleXdvcmQpO1xuICAgIGN4dC5vaygoX2EgPSBkZWYudmFsaWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHZhbGlkKTtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUtleXdvcmQoKSB7XG4gICAgICAgIGlmIChkZWYuZXJyb3JzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYXNzaWduVmFsaWQoKTtcbiAgICAgICAgICAgIGlmIChkZWYubW9kaWZ5aW5nKVxuICAgICAgICAgICAgICAgIG1vZGlmeURhdGEoY3h0KTtcbiAgICAgICAgICAgIHJlcG9ydEVycnMoKCkgPT4gY3h0LmVycm9yKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcnVsZUVycnMgPSBkZWYuYXN5bmMgPyB2YWxpZGF0ZUFzeW5jKCkgOiB2YWxpZGF0ZVN5bmMoKTtcbiAgICAgICAgICAgIGlmIChkZWYubW9kaWZ5aW5nKVxuICAgICAgICAgICAgICAgIG1vZGlmeURhdGEoY3h0KTtcbiAgICAgICAgICAgIHJlcG9ydEVycnMoKCkgPT4gYWRkRXJycyhjeHQsIHJ1bGVFcnJzKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVBc3luYygpIHtcbiAgICAgICAgY29uc3QgcnVsZUVycnMgPSBnZW4ubGV0KFwicnVsZUVycnNcIiwgbnVsbCk7XG4gICAgICAgIGdlbi50cnkoKCkgPT4gYXNzaWduVmFsaWQoKDAsIGNvZGVnZW5fMS5fKSBgYXdhaXQgYCksIChlKSA9PiBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSkuaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtlfSBpbnN0YW5jZW9mICR7aXQuVmFsaWRhdGlvbkVycm9yfWAsICgpID0+IGdlbi5hc3NpZ24ocnVsZUVycnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZX0uZXJyb3JzYCksICgpID0+IGdlbi50aHJvdyhlKSkpO1xuICAgICAgICByZXR1cm4gcnVsZUVycnM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlU3luYygpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVFcnJzID0gKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZGF0ZVJlZn0uZXJyb3JzYDtcbiAgICAgICAgZ2VuLmFzc2lnbih2YWxpZGF0ZUVycnMsIG51bGwpO1xuICAgICAgICBhc3NpZ25WYWxpZChjb2RlZ2VuXzEubmlsKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlRXJycztcbiAgICB9XG4gICAgZnVuY3Rpb24gYXNzaWduVmFsaWQoX2F3YWl0ID0gZGVmLmFzeW5jID8gKDAsIGNvZGVnZW5fMS5fKSBgYXdhaXQgYCA6IGNvZGVnZW5fMS5uaWwpIHtcbiAgICAgICAgY29uc3QgcGFzc0N4dCA9IGl0Lm9wdHMucGFzc0NvbnRleHQgPyBuYW1lc18xLmRlZmF1bHQudGhpcyA6IG5hbWVzXzEuZGVmYXVsdC5zZWxmO1xuICAgICAgICBjb25zdCBwYXNzU2NoZW1hID0gISgoXCJjb21waWxlXCIgaW4gZGVmICYmICEkZGF0YSkgfHwgZGVmLnNjaGVtYSA9PT0gZmFsc2UpO1xuICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCAoMCwgY29kZWdlbl8xLl8pIGAke19hd2FpdH0keygwLCBjb2RlXzEuY2FsbFZhbGlkYXRlQ29kZSkoY3h0LCB2YWxpZGF0ZVJlZiwgcGFzc0N4dCwgcGFzc1NjaGVtYSl9YCwgZGVmLm1vZGlmeWluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcG9ydEVycnMoZXJyb3JzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSgoX2EgPSBkZWYudmFsaWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHZhbGlkKSwgZXJyb3JzKTtcbiAgICB9XG59XG5leHBvcnRzLmZ1bmNLZXl3b3JkQ29kZSA9IGZ1bmNLZXl3b3JkQ29kZTtcbmZ1bmN0aW9uIG1vZGlmeURhdGEoY3h0KSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgZ2VuLmlmKGl0LnBhcmVudERhdGEsICgpID0+IGdlbi5hc3NpZ24oZGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5wYXJlbnREYXRhfVske2l0LnBhcmVudERhdGFQcm9wZXJ0eX1dYCkpO1xufVxuZnVuY3Rpb24gYWRkRXJycyhjeHQsIGVycnMpIHtcbiAgICBjb25zdCB7IGdlbiB9ID0gY3h0O1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGBBcnJheS5pc0FycmF5KCR7ZXJyc30pYCwgKCkgPT4ge1xuICAgICAgICBnZW5cbiAgICAgICAgICAgIC5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9ID09PSBudWxsID8gJHtlcnJzfSA6ICR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9LmNvbmNhdCgke2VycnN9KWApXG4gICAgICAgICAgICAuYXNzaWduKG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9Lmxlbmd0aGApO1xuICAgICAgICAoMCwgZXJyb3JzXzEuZXh0ZW5kRXJyb3JzKShjeHQpO1xuICAgIH0sICgpID0+IGN4dC5lcnJvcigpKTtcbn1cbmZ1bmN0aW9uIGNoZWNrQXN5bmNLZXl3b3JkKHsgc2NoZW1hRW52IH0sIGRlZikge1xuICAgIGlmIChkZWYuYXN5bmMgJiYgIXNjaGVtYUVudi4kYXN5bmMpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFzeW5jIGtleXdvcmQgaW4gc3luYyBzY2hlbWFcIik7XG59XG5mdW5jdGlvbiB1c2VLZXl3b3JkKGdlbiwga2V5d29yZCwgcmVzdWx0KSB7XG4gICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGtleXdvcmQgXCIke2tleXdvcmR9XCIgZmFpbGVkIHRvIGNvbXBpbGVgKTtcbiAgICByZXR1cm4gZ2VuLnNjb3BlVmFsdWUoXCJrZXl3b3JkXCIsIHR5cGVvZiByZXN1bHQgPT0gXCJmdW5jdGlvblwiID8geyByZWY6IHJlc3VsdCB9IDogeyByZWY6IHJlc3VsdCwgY29kZTogKDAsIGNvZGVnZW5fMS5zdHJpbmdpZnkpKHJlc3VsdCkgfSk7XG59XG5mdW5jdGlvbiB2YWxpZFNjaGVtYVR5cGUoc2NoZW1hLCBzY2hlbWFUeXBlLCBhbGxvd1VuZGVmaW5lZCA9IGZhbHNlKSB7XG4gICAgLy8gVE9ETyBhZGQgdGVzdHNcbiAgICByZXR1cm4gKCFzY2hlbWFUeXBlLmxlbmd0aCB8fFxuICAgICAgICBzY2hlbWFUeXBlLnNvbWUoKHN0KSA9PiBzdCA9PT0gXCJhcnJheVwiXG4gICAgICAgICAgICA/IEFycmF5LmlzQXJyYXkoc2NoZW1hKVxuICAgICAgICAgICAgOiBzdCA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgICAgID8gc2NoZW1hICYmIHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShzY2hlbWEpXG4gICAgICAgICAgICAgICAgOiB0eXBlb2Ygc2NoZW1hID09IHN0IHx8IChhbGxvd1VuZGVmaW5lZCAmJiB0eXBlb2Ygc2NoZW1hID09IFwidW5kZWZpbmVkXCIpKSk7XG59XG5leHBvcnRzLnZhbGlkU2NoZW1hVHlwZSA9IHZhbGlkU2NoZW1hVHlwZTtcbmZ1bmN0aW9uIHZhbGlkYXRlS2V5d29yZFVzYWdlKHsgc2NoZW1hLCBvcHRzLCBzZWxmLCBlcnJTY2hlbWFQYXRoIH0sIGRlZiwga2V5d29yZCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRlZi5rZXl3b3JkKSA/ICFkZWYua2V5d29yZC5pbmNsdWRlcyhrZXl3b3JkKSA6IGRlZi5rZXl3b3JkICE9PSBrZXl3b3JkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICB9XG4gICAgY29uc3QgZGVwcyA9IGRlZi5kZXBlbmRlbmNpZXM7XG4gICAgaWYgKGRlcHMgPT09IG51bGwgfHwgZGVwcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVwcy5zb21lKChrd2QpID0+ICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2NoZW1hLCBrd2QpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHBhcmVudCBzY2hlbWEgbXVzdCBoYXZlIGRlcGVuZGVuY2llcyBvZiAke2tleXdvcmR9OiAke2RlcHMuam9pbihcIixcIil9YCk7XG4gICAgfVxuICAgIGlmIChkZWYudmFsaWRhdGVTY2hlbWEpIHtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBkZWYudmFsaWRhdGVTY2hlbWEoc2NoZW1hW2tleXdvcmRdKTtcbiAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gYGtleXdvcmQgXCIke2tleXdvcmR9XCIgdmFsdWUgaXMgaW52YWxpZCBhdCBwYXRoIFwiJHtlcnJTY2hlbWFQYXRofVwiOiBgICtcbiAgICAgICAgICAgICAgICBzZWxmLmVycm9yc1RleHQoZGVmLnZhbGlkYXRlU2NoZW1hLmVycm9ycyk7XG4gICAgICAgICAgICBpZiAob3B0cy52YWxpZGF0ZVNjaGVtYSA9PT0gXCJsb2dcIilcbiAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcihtc2cpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZUtleXdvcmRVc2FnZSA9IHZhbGlkYXRlS2V5d29yZFVzYWdlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9a2V5d29yZC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leHRlbmRTdWJzY2hlbWFNb2RlID0gZXhwb3J0cy5leHRlbmRTdWJzY2hlbWFEYXRhID0gZXhwb3J0cy5nZXRTdWJzY2hlbWEgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xuZnVuY3Rpb24gZ2V0U3Vic2NoZW1hKGl0LCB7IGtleXdvcmQsIHNjaGVtYVByb3AsIHNjaGVtYSwgc2NoZW1hUGF0aCwgZXJyU2NoZW1hUGF0aCwgdG9wU2NoZW1hUmVmIH0pIHtcbiAgICBpZiAoa2V5d29yZCAhPT0gdW5kZWZpbmVkICYmIHNjaGVtYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYm90aCBcImtleXdvcmRcIiBhbmQgXCJzY2hlbWFcIiBwYXNzZWQsIG9ubHkgb25lIGFsbG93ZWQnKTtcbiAgICB9XG4gICAgaWYgKGtleXdvcmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBzY2ggPSBpdC5zY2hlbWFba2V5d29yZF07XG4gICAgICAgIHJldHVybiBzY2hlbWFQcm9wID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoLFxuICAgICAgICAgICAgICAgIHNjaGVtYVBhdGg6ICgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuc2NoZW1hUGF0aH0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKGtleXdvcmQpfWAsXG4gICAgICAgICAgICAgICAgZXJyU2NoZW1hUGF0aDogYCR7aXQuZXJyU2NoZW1hUGF0aH0vJHtrZXl3b3JkfWAsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaFtzY2hlbWFQcm9wXSxcbiAgICAgICAgICAgICAgICBzY2hlbWFQYXRoOiAoMCwgY29kZWdlbl8xLl8pIGAke2l0LnNjaGVtYVBhdGh9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShrZXl3b3JkKX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHNjaGVtYVByb3ApfWAsXG4gICAgICAgICAgICAgICAgZXJyU2NoZW1hUGF0aDogYCR7aXQuZXJyU2NoZW1hUGF0aH0vJHtrZXl3b3JkfS8keygwLCB1dGlsXzEuZXNjYXBlRnJhZ21lbnQpKHNjaGVtYVByb3ApfWAsXG4gICAgICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoc2NoZW1hICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHNjaGVtYVBhdGggPT09IHVuZGVmaW5lZCB8fCBlcnJTY2hlbWFQYXRoID09PSB1bmRlZmluZWQgfHwgdG9wU2NoZW1hUmVmID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJzY2hlbWFQYXRoXCIsIFwiZXJyU2NoZW1hUGF0aFwiIGFuZCBcInRvcFNjaGVtYVJlZlwiIGFyZSByZXF1aXJlZCB3aXRoIFwic2NoZW1hXCInKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgc2NoZW1hUGF0aCxcbiAgICAgICAgICAgIHRvcFNjaGVtYVJlZixcbiAgICAgICAgICAgIGVyclNjaGVtYVBhdGgsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignZWl0aGVyIFwia2V5d29yZFwiIG9yIFwic2NoZW1hXCIgbXVzdCBiZSBwYXNzZWQnKTtcbn1cbmV4cG9ydHMuZ2V0U3Vic2NoZW1hID0gZ2V0U3Vic2NoZW1hO1xuZnVuY3Rpb24gZXh0ZW5kU3Vic2NoZW1hRGF0YShzdWJzY2hlbWEsIGl0LCB7IGRhdGFQcm9wLCBkYXRhUHJvcFR5cGU6IGRwVHlwZSwgZGF0YSwgZGF0YVR5cGVzLCBwcm9wZXJ0eU5hbWUgfSkge1xuICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQgJiYgZGF0YVByb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JvdGggXCJkYXRhXCIgYW5kIFwiZGF0YVByb3BcIiBwYXNzZWQsIG9ubHkgb25lIGFsbG93ZWQnKTtcbiAgICB9XG4gICAgY29uc3QgeyBnZW4gfSA9IGl0O1xuICAgIGlmIChkYXRhUHJvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHsgZXJyb3JQYXRoLCBkYXRhUGF0aEFyciwgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGNvbnN0IG5leHREYXRhID0gZ2VuLmxldChcImRhdGFcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5kYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoZGF0YVByb3ApfWAsIHRydWUpO1xuICAgICAgICBkYXRhQ29udGV4dFByb3BzKG5leHREYXRhKTtcbiAgICAgICAgc3Vic2NoZW1hLmVycm9yUGF0aCA9ICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtlcnJvclBhdGh9JHsoMCwgdXRpbF8xLmdldEVycm9yUGF0aCkoZGF0YVByb3AsIGRwVHlwZSwgb3B0cy5qc1Byb3BlcnR5U3ludGF4KX1gO1xuICAgICAgICBzdWJzY2hlbWEucGFyZW50RGF0YVByb3BlcnR5ID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhUHJvcH1gO1xuICAgICAgICBzdWJzY2hlbWEuZGF0YVBhdGhBcnIgPSBbLi4uZGF0YVBhdGhBcnIsIHN1YnNjaGVtYS5wYXJlbnREYXRhUHJvcGVydHldO1xuICAgIH1cbiAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG5leHREYXRhID0gZGF0YSBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lID8gZGF0YSA6IGdlbi5sZXQoXCJkYXRhXCIsIGRhdGEsIHRydWUpOyAvLyByZXBsYWNlYWJsZSBpZiB1c2VkIG9uY2U/XG4gICAgICAgIGRhdGFDb250ZXh0UHJvcHMobmV4dERhdGEpO1xuICAgICAgICBpZiAocHJvcGVydHlOYW1lICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBzdWJzY2hlbWEucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lO1xuICAgICAgICAvLyBUT0RPIHNvbWV0aGluZyBpcyBwb3NzaWJseSB3cm9uZyBoZXJlIHdpdGggbm90IGNoYW5naW5nIHBhcmVudERhdGFQcm9wZXJ0eSBhbmQgbm90IGFwcGVuZGluZyBkYXRhUGF0aEFyclxuICAgIH1cbiAgICBpZiAoZGF0YVR5cGVzKVxuICAgICAgICBzdWJzY2hlbWEuZGF0YVR5cGVzID0gZGF0YVR5cGVzO1xuICAgIGZ1bmN0aW9uIGRhdGFDb250ZXh0UHJvcHMoX25leHREYXRhKSB7XG4gICAgICAgIHN1YnNjaGVtYS5kYXRhID0gX25leHREYXRhO1xuICAgICAgICBzdWJzY2hlbWEuZGF0YUxldmVsID0gaXQuZGF0YUxldmVsICsgMTtcbiAgICAgICAgc3Vic2NoZW1hLmRhdGFUeXBlcyA9IFtdO1xuICAgICAgICBpdC5kZWZpbmVkUHJvcGVydGllcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgc3Vic2NoZW1hLnBhcmVudERhdGEgPSBpdC5kYXRhO1xuICAgICAgICBzdWJzY2hlbWEuZGF0YU5hbWVzID0gWy4uLml0LmRhdGFOYW1lcywgX25leHREYXRhXTtcbiAgICB9XG59XG5leHBvcnRzLmV4dGVuZFN1YnNjaGVtYURhdGEgPSBleHRlbmRTdWJzY2hlbWFEYXRhO1xuZnVuY3Rpb24gZXh0ZW5kU3Vic2NoZW1hTW9kZShzdWJzY2hlbWEsIHsganRkRGlzY3JpbWluYXRvciwganRkTWV0YWRhdGEsIGNvbXBvc2l0ZVJ1bGUsIGNyZWF0ZUVycm9ycywgYWxsRXJyb3JzIH0pIHtcbiAgICBpZiAoY29tcG9zaXRlUnVsZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBzdWJzY2hlbWEuY29tcG9zaXRlUnVsZSA9IGNvbXBvc2l0ZVJ1bGU7XG4gICAgaWYgKGNyZWF0ZUVycm9ycyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBzdWJzY2hlbWEuY3JlYXRlRXJyb3JzID0gY3JlYXRlRXJyb3JzO1xuICAgIGlmIChhbGxFcnJvcnMgIT09IHVuZGVmaW5lZClcbiAgICAgICAgc3Vic2NoZW1hLmFsbEVycm9ycyA9IGFsbEVycm9ycztcbiAgICBzdWJzY2hlbWEuanRkRGlzY3JpbWluYXRvciA9IGp0ZERpc2NyaW1pbmF0b3I7IC8vIG5vdCBpbmhlcml0ZWRcbiAgICBzdWJzY2hlbWEuanRkTWV0YWRhdGEgPSBqdGRNZXRhZGF0YTsgLy8gbm90IGluaGVyaXRlZFxufVxuZXhwb3J0cy5leHRlbmRTdWJzY2hlbWFNb2RlID0gZXh0ZW5kU3Vic2NoZW1hTW9kZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN1YnNjaGVtYS5qcy5tYXAiLAogICAgIid1c2Ugc3RyaWN0JztcblxuLy8gZG8gbm90IGVkaXQgLmpzIGZpbGVzIGRpcmVjdGx5IC0gZWRpdCBzcmMvaW5kZXguanN0XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGVxdWFsKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuXG4gIGlmIChhICYmIGIgJiYgdHlwZW9mIGEgPT0gJ29iamVjdCcgJiYgdHlwZW9mIGIgPT0gJ29iamVjdCcpIHtcbiAgICBpZiAoYS5jb25zdHJ1Y3RvciAhPT0gYi5jb25zdHJ1Y3RvcikgcmV0dXJuIGZhbHNlO1xuXG4gICAgdmFyIGxlbmd0aCwgaSwga2V5cztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSAhPT0gMDspXG4gICAgICAgIGlmICghZXF1YWwoYVtpXSwgYltpXSkpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuXG5cbiAgICBpZiAoYS5jb25zdHJ1Y3RvciA9PT0gUmVnRXhwKSByZXR1cm4gYS5zb3VyY2UgPT09IGIuc291cmNlICYmIGEuZmxhZ3MgPT09IGIuZmxhZ3M7XG4gICAgaWYgKGEudmFsdWVPZiAhPT0gT2JqZWN0LnByb3RvdHlwZS52YWx1ZU9mKSByZXR1cm4gYS52YWx1ZU9mKCkgPT09IGIudmFsdWVPZigpO1xuICAgIGlmIChhLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKSByZXR1cm4gYS50b1N0cmluZygpID09PSBiLnRvU3RyaW5nKCk7XG5cbiAgICBrZXlzID0gT2JqZWN0LmtleXMoYSk7XG4gICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgaWYgKGxlbmd0aCAhPT0gT2JqZWN0LmtleXMoYikubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSAhPT0gMDspXG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBrZXlzW2ldKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKCFlcXVhbChhW2tleV0sIGJba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIHRydWUgaWYgYm90aCBOYU4sIGZhbHNlIG90aGVyd2lzZVxuICByZXR1cm4gYSE9PWEgJiYgYiE9PWI7XG59O1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciB0cmF2ZXJzZSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNjaGVtYSwgb3B0cywgY2IpIHtcbiAgLy8gTGVnYWN5IHN1cHBvcnQgZm9yIHYwLjMuMSBhbmQgZWFybGllci5cbiAgaWYgKHR5cGVvZiBvcHRzID09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IG9wdHM7XG4gICAgb3B0cyA9IHt9O1xuICB9XG5cbiAgY2IgPSBvcHRzLmNiIHx8IGNiO1xuICB2YXIgcHJlID0gKHR5cGVvZiBjYiA9PSAnZnVuY3Rpb24nKSA/IGNiIDogY2IucHJlIHx8IGZ1bmN0aW9uKCkge307XG4gIHZhciBwb3N0ID0gY2IucG9zdCB8fCBmdW5jdGlvbigpIHt9O1xuXG4gIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaGVtYSwgJycsIHNjaGVtYSk7XG59O1xuXG5cbnRyYXZlcnNlLmtleXdvcmRzID0ge1xuICBhZGRpdGlvbmFsSXRlbXM6IHRydWUsXG4gIGl0ZW1zOiB0cnVlLFxuICBjb250YWluczogdHJ1ZSxcbiAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUsXG4gIHByb3BlcnR5TmFtZXM6IHRydWUsXG4gIG5vdDogdHJ1ZSxcbiAgaWY6IHRydWUsXG4gIHRoZW46IHRydWUsXG4gIGVsc2U6IHRydWVcbn07XG5cbnRyYXZlcnNlLmFycmF5S2V5d29yZHMgPSB7XG4gIGl0ZW1zOiB0cnVlLFxuICBhbGxPZjogdHJ1ZSxcbiAgYW55T2Y6IHRydWUsXG4gIG9uZU9mOiB0cnVlXG59O1xuXG50cmF2ZXJzZS5wcm9wc0tleXdvcmRzID0ge1xuICAkZGVmczogdHJ1ZSxcbiAgZGVmaW5pdGlvbnM6IHRydWUsXG4gIHByb3BlcnRpZXM6IHRydWUsXG4gIHBhdHRlcm5Qcm9wZXJ0aWVzOiB0cnVlLFxuICBkZXBlbmRlbmNpZXM6IHRydWVcbn07XG5cbnRyYXZlcnNlLnNraXBLZXl3b3JkcyA9IHtcbiAgZGVmYXVsdDogdHJ1ZSxcbiAgZW51bTogdHJ1ZSxcbiAgY29uc3Q6IHRydWUsXG4gIHJlcXVpcmVkOiB0cnVlLFxuICBtYXhpbXVtOiB0cnVlLFxuICBtaW5pbXVtOiB0cnVlLFxuICBleGNsdXNpdmVNYXhpbXVtOiB0cnVlLFxuICBleGNsdXNpdmVNaW5pbXVtOiB0cnVlLFxuICBtdWx0aXBsZU9mOiB0cnVlLFxuICBtYXhMZW5ndGg6IHRydWUsXG4gIG1pbkxlbmd0aDogdHJ1ZSxcbiAgcGF0dGVybjogdHJ1ZSxcbiAgZm9ybWF0OiB0cnVlLFxuICBtYXhJdGVtczogdHJ1ZSxcbiAgbWluSXRlbXM6IHRydWUsXG4gIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICBtYXhQcm9wZXJ0aWVzOiB0cnVlLFxuICBtaW5Qcm9wZXJ0aWVzOiB0cnVlXG59O1xuXG5cbmZ1bmN0aW9uIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaGVtYSwganNvblB0ciwgcm9vdFNjaGVtYSwgcGFyZW50SnNvblB0ciwgcGFyZW50S2V5d29yZCwgcGFyZW50U2NoZW1hLCBrZXlJbmRleCkge1xuICBpZiAoc2NoZW1hICYmIHR5cGVvZiBzY2hlbWEgPT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgIHByZShzY2hlbWEsIGpzb25QdHIsIHJvb3RTY2hlbWEsIHBhcmVudEpzb25QdHIsIHBhcmVudEtleXdvcmQsIHBhcmVudFNjaGVtYSwga2V5SW5kZXgpO1xuICAgIGZvciAodmFyIGtleSBpbiBzY2hlbWEpIHtcbiAgICAgIHZhciBzY2ggPSBzY2hlbWFba2V5XTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaCkpIHtcbiAgICAgICAgaWYgKGtleSBpbiB0cmF2ZXJzZS5hcnJheUtleXdvcmRzKSB7XG4gICAgICAgICAgZm9yICh2YXIgaT0wOyBpPHNjaC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaFtpXSwganNvblB0ciArICcvJyArIGtleSArICcvJyArIGksIHJvb3RTY2hlbWEsIGpzb25QdHIsIGtleSwgc2NoZW1hLCBpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChrZXkgaW4gdHJhdmVyc2UucHJvcHNLZXl3b3Jkcykge1xuICAgICAgICBpZiAoc2NoICYmIHR5cGVvZiBzY2ggPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHNjaClcbiAgICAgICAgICAgIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaFtwcm9wXSwganNvblB0ciArICcvJyArIGtleSArICcvJyArIGVzY2FwZUpzb25QdHIocHJvcCksIHJvb3RTY2hlbWEsIGpzb25QdHIsIGtleSwgc2NoZW1hLCBwcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChrZXkgaW4gdHJhdmVyc2Uua2V5d29yZHMgfHwgKG9wdHMuYWxsS2V5cyAmJiAhKGtleSBpbiB0cmF2ZXJzZS5za2lwS2V5d29yZHMpKSkge1xuICAgICAgICBfdHJhdmVyc2Uob3B0cywgcHJlLCBwb3N0LCBzY2gsIGpzb25QdHIgKyAnLycgKyBrZXksIHJvb3RTY2hlbWEsIGpzb25QdHIsIGtleSwgc2NoZW1hKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcG9zdChzY2hlbWEsIGpzb25QdHIsIHJvb3RTY2hlbWEsIHBhcmVudEpzb25QdHIsIHBhcmVudEtleXdvcmQsIHBhcmVudFNjaGVtYSwga2V5SW5kZXgpO1xuICB9XG59XG5cblxuZnVuY3Rpb24gZXNjYXBlSnNvblB0cihzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9+L2csICd+MCcpLnJlcGxhY2UoL1xcLy9nLCAnfjEnKTtcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFNjaGVtYVJlZnMgPSBleHBvcnRzLnJlc29sdmVVcmwgPSBleHBvcnRzLm5vcm1hbGl6ZUlkID0gZXhwb3J0cy5fZ2V0RnVsbFBhdGggPSBleHBvcnRzLmdldEZ1bGxQYXRoID0gZXhwb3J0cy5pbmxpbmVSZWYgPSB2b2lkIDA7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuY29uc3QgZXF1YWwgPSByZXF1aXJlKFwiZmFzdC1kZWVwLWVxdWFsXCIpO1xuY29uc3QgdHJhdmVyc2UgPSByZXF1aXJlKFwianNvbi1zY2hlbWEtdHJhdmVyc2VcIik7XG4vLyBUT0RPIHJlZmFjdG9yIHRvIHVzZSBrZXl3b3JkIGRlZmluaXRpb25zXG5jb25zdCBTSU1QTEVfSU5MSU5FRCA9IG5ldyBTZXQoW1xuICAgIFwidHlwZVwiLFxuICAgIFwiZm9ybWF0XCIsXG4gICAgXCJwYXR0ZXJuXCIsXG4gICAgXCJtYXhMZW5ndGhcIixcbiAgICBcIm1pbkxlbmd0aFwiLFxuICAgIFwibWF4UHJvcGVydGllc1wiLFxuICAgIFwibWluUHJvcGVydGllc1wiLFxuICAgIFwibWF4SXRlbXNcIixcbiAgICBcIm1pbkl0ZW1zXCIsXG4gICAgXCJtYXhpbXVtXCIsXG4gICAgXCJtaW5pbXVtXCIsXG4gICAgXCJ1bmlxdWVJdGVtc1wiLFxuICAgIFwibXVsdGlwbGVPZlwiLFxuICAgIFwicmVxdWlyZWRcIixcbiAgICBcImVudW1cIixcbiAgICBcImNvbnN0XCIsXG5dKTtcbmZ1bmN0aW9uIGlubGluZVJlZihzY2hlbWEsIGxpbWl0ID0gdHJ1ZSkge1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAobGltaXQgPT09IHRydWUpXG4gICAgICAgIHJldHVybiAhaGFzUmVmKHNjaGVtYSk7XG4gICAgaWYgKCFsaW1pdClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBjb3VudEtleXMoc2NoZW1hKSA8PSBsaW1pdDtcbn1cbmV4cG9ydHMuaW5saW5lUmVmID0gaW5saW5lUmVmO1xuY29uc3QgUkVGX0tFWVdPUkRTID0gbmV3IFNldChbXG4gICAgXCIkcmVmXCIsXG4gICAgXCIkcmVjdXJzaXZlUmVmXCIsXG4gICAgXCIkcmVjdXJzaXZlQW5jaG9yXCIsXG4gICAgXCIkZHluYW1pY1JlZlwiLFxuICAgIFwiJGR5bmFtaWNBbmNob3JcIixcbl0pO1xuZnVuY3Rpb24gaGFzUmVmKHNjaGVtYSkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSkge1xuICAgICAgICBpZiAoUkVGX0tFWVdPUkRTLmhhcyhrZXkpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IHNjaCA9IHNjaGVtYVtrZXldO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2gpICYmIHNjaC5zb21lKGhhc1JlZikpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2ggPT0gXCJvYmplY3RcIiAmJiBoYXNSZWYoc2NoKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBjb3VudEtleXMoc2NoZW1hKSB7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCIkcmVmXCIpXG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIGlmIChTSU1QTEVfSU5MSU5FRC5oYXMoa2V5KSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYVtrZXldID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuZWFjaEl0ZW0pKHNjaGVtYVtrZXldLCAoc2NoKSA9PiAoY291bnQgKz0gY291bnRLZXlzKHNjaCkpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY291bnQgPT09IEluZmluaXR5KVxuICAgICAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuICAgIH1cbiAgICByZXR1cm4gY291bnQ7XG59XG5mdW5jdGlvbiBnZXRGdWxsUGF0aChyZXNvbHZlciwgaWQgPSBcIlwiLCBub3JtYWxpemUpIHtcbiAgICBpZiAobm9ybWFsaXplICE9PSBmYWxzZSlcbiAgICAgICAgaWQgPSBub3JtYWxpemVJZChpZCk7XG4gICAgY29uc3QgcCA9IHJlc29sdmVyLnBhcnNlKGlkKTtcbiAgICByZXR1cm4gX2dldEZ1bGxQYXRoKHJlc29sdmVyLCBwKTtcbn1cbmV4cG9ydHMuZ2V0RnVsbFBhdGggPSBnZXRGdWxsUGF0aDtcbmZ1bmN0aW9uIF9nZXRGdWxsUGF0aChyZXNvbHZlciwgcCkge1xuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSByZXNvbHZlci5zZXJpYWxpemUocCk7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWQuc3BsaXQoXCIjXCIpWzBdICsgXCIjXCI7XG59XG5leHBvcnRzLl9nZXRGdWxsUGF0aCA9IF9nZXRGdWxsUGF0aDtcbmNvbnN0IFRSQUlMSU5HX1NMQVNIX0hBU0ggPSAvI1xcLz8kLztcbmZ1bmN0aW9uIG5vcm1hbGl6ZUlkKGlkKSB7XG4gICAgcmV0dXJuIGlkID8gaWQucmVwbGFjZShUUkFJTElOR19TTEFTSF9IQVNILCBcIlwiKSA6IFwiXCI7XG59XG5leHBvcnRzLm5vcm1hbGl6ZUlkID0gbm9ybWFsaXplSWQ7XG5mdW5jdGlvbiByZXNvbHZlVXJsKHJlc29sdmVyLCBiYXNlSWQsIGlkKSB7XG4gICAgaWQgPSBub3JtYWxpemVJZChpZCk7XG4gICAgcmV0dXJuIHJlc29sdmVyLnJlc29sdmUoYmFzZUlkLCBpZCk7XG59XG5leHBvcnRzLnJlc29sdmVVcmwgPSByZXNvbHZlVXJsO1xuY29uc3QgQU5DSE9SID0gL15bYS16X11bLWEtejAtOS5fXSokL2k7XG5mdW5jdGlvbiBnZXRTY2hlbWFSZWZzKHNjaGVtYSwgYmFzZUlkKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiB7fTtcbiAgICBjb25zdCB7IHNjaGVtYUlkLCB1cmlSZXNvbHZlciB9ID0gdGhpcy5vcHRzO1xuICAgIGNvbnN0IHNjaElkID0gbm9ybWFsaXplSWQoc2NoZW1hW3NjaGVtYUlkXSB8fCBiYXNlSWQpO1xuICAgIGNvbnN0IGJhc2VJZHMgPSB7IFwiXCI6IHNjaElkIH07XG4gICAgY29uc3QgcGF0aFByZWZpeCA9IGdldEZ1bGxQYXRoKHVyaVJlc29sdmVyLCBzY2hJZCwgZmFsc2UpO1xuICAgIGNvbnN0IGxvY2FsUmVmcyA9IHt9O1xuICAgIGNvbnN0IHNjaGVtYVJlZnMgPSBuZXcgU2V0KCk7XG4gICAgdHJhdmVyc2Uoc2NoZW1hLCB7IGFsbEtleXM6IHRydWUgfSwgKHNjaCwganNvblB0ciwgXywgcGFyZW50SnNvblB0cikgPT4ge1xuICAgICAgICBpZiAocGFyZW50SnNvblB0ciA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGhQcmVmaXggKyBqc29uUHRyO1xuICAgICAgICBsZXQgaW5uZXJCYXNlSWQgPSBiYXNlSWRzW3BhcmVudEpzb25QdHJdO1xuICAgICAgICBpZiAodHlwZW9mIHNjaFtzY2hlbWFJZF0gPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIGlubmVyQmFzZUlkID0gYWRkUmVmLmNhbGwodGhpcywgc2NoW3NjaGVtYUlkXSk7XG4gICAgICAgIGFkZEFuY2hvci5jYWxsKHRoaXMsIHNjaC4kYW5jaG9yKTtcbiAgICAgICAgYWRkQW5jaG9yLmNhbGwodGhpcywgc2NoLiRkeW5hbWljQW5jaG9yKTtcbiAgICAgICAgYmFzZUlkc1tqc29uUHRyXSA9IGlubmVyQmFzZUlkO1xuICAgICAgICBmdW5jdGlvbiBhZGRSZWYocmVmKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgICAgICAgICBjb25zdCBfcmVzb2x2ZSA9IHRoaXMub3B0cy51cmlSZXNvbHZlci5yZXNvbHZlO1xuICAgICAgICAgICAgcmVmID0gbm9ybWFsaXplSWQoaW5uZXJCYXNlSWQgPyBfcmVzb2x2ZShpbm5lckJhc2VJZCwgcmVmKSA6IHJlZik7XG4gICAgICAgICAgICBpZiAoc2NoZW1hUmVmcy5oYXMocmVmKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBhbWJpZ3VvcyhyZWYpO1xuICAgICAgICAgICAgc2NoZW1hUmVmcy5hZGQocmVmKTtcbiAgICAgICAgICAgIGxldCBzY2hPclJlZiA9IHRoaXMucmVmc1tyZWZdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hPclJlZiA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgIHNjaE9yUmVmID0gdGhpcy5yZWZzW3NjaE9yUmVmXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoT3JSZWYgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIGNoZWNrQW1iaWd1b3NSZWYoc2NoLCBzY2hPclJlZi5zY2hlbWEsIHJlZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZWYgIT09IG5vcm1hbGl6ZUlkKGZ1bGxQYXRoKSkge1xuICAgICAgICAgICAgICAgIGlmIChyZWZbMF0gPT09IFwiI1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrQW1iaWd1b3NSZWYoc2NoLCBsb2NhbFJlZnNbcmVmXSwgcmVmKTtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxSZWZzW3JlZl0gPSBzY2g7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnNbcmVmXSA9IGZ1bGxQYXRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZWY7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWRkQW5jaG9yKGFuY2hvcikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBhbmNob3IgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGlmICghQU5DSE9SLnRlc3QoYW5jaG9yKSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGFuY2hvciBcIiR7YW5jaG9yfVwiYCk7XG4gICAgICAgICAgICAgICAgYWRkUmVmLmNhbGwodGhpcywgYCMke2FuY2hvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBsb2NhbFJlZnM7XG4gICAgZnVuY3Rpb24gY2hlY2tBbWJpZ3Vvc1JlZihzY2gxLCBzY2gyLCByZWYpIHtcbiAgICAgICAgaWYgKHNjaDIgIT09IHVuZGVmaW5lZCAmJiAhZXF1YWwoc2NoMSwgc2NoMikpXG4gICAgICAgICAgICB0aHJvdyBhbWJpZ3VvcyhyZWYpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhbWJpZ3VvcyhyZWYpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihgcmVmZXJlbmNlIFwiJHtyZWZ9XCIgcmVzb2x2ZXMgdG8gbW9yZSB0aGFuIG9uZSBzY2hlbWFgKTtcbiAgICB9XG59XG5leHBvcnRzLmdldFNjaGVtYVJlZnMgPSBnZXRTY2hlbWFSZWZzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzb2x2ZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXREYXRhID0gZXhwb3J0cy5LZXl3b3JkQ3h0ID0gZXhwb3J0cy52YWxpZGF0ZUZ1bmN0aW9uQ29kZSA9IHZvaWQgMDtcbmNvbnN0IGJvb2xTY2hlbWFfMSA9IHJlcXVpcmUoXCIuL2Jvb2xTY2hlbWFcIik7XG5jb25zdCBkYXRhVHlwZV8xID0gcmVxdWlyZShcIi4vZGF0YVR5cGVcIik7XG5jb25zdCBhcHBsaWNhYmlsaXR5XzEgPSByZXF1aXJlKFwiLi9hcHBsaWNhYmlsaXR5XCIpO1xuY29uc3QgZGF0YVR5cGVfMiA9IHJlcXVpcmUoXCIuL2RhdGFUeXBlXCIpO1xuY29uc3QgZGVmYXVsdHNfMSA9IHJlcXVpcmUoXCIuL2RlZmF1bHRzXCIpO1xuY29uc3Qga2V5d29yZF8xID0gcmVxdWlyZShcIi4va2V5d29yZFwiKTtcbmNvbnN0IHN1YnNjaGVtYV8xID0gcmVxdWlyZShcIi4vc3Vic2NoZW1hXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uL25hbWVzXCIpO1xuY29uc3QgcmVzb2x2ZV8xID0gcmVxdWlyZShcIi4uL3Jlc29sdmVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vdXRpbFwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL2Vycm9yc1wiKTtcbi8vIHNjaGVtYSBjb21waWxhdGlvbiAtIGdlbmVyYXRlcyB2YWxpZGF0aW9uIGZ1bmN0aW9uLCBzdWJzY2hlbWFDb2RlIChiZWxvdykgaXMgdXNlZCBmb3Igc3Vic2NoZW1hc1xuZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbkNvZGUoaXQpIHtcbiAgICBpZiAoaXNTY2hlbWFPYmooaXQpKSB7XG4gICAgICAgIGNoZWNrS2V5d29yZHMoaXQpO1xuICAgICAgICBpZiAoc2NoZW1hQ3h0SGFzUnVsZXMoaXQpKSB7XG4gICAgICAgICAgICB0b3BTY2hlbWFPYmpDb2RlKGl0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YWxpZGF0ZUZ1bmN0aW9uKGl0LCAoKSA9PiAoMCwgYm9vbFNjaGVtYV8xLnRvcEJvb2xPckVtcHR5U2NoZW1hKShpdCkpO1xufVxuZXhwb3J0cy52YWxpZGF0ZUZ1bmN0aW9uQ29kZSA9IHZhbGlkYXRlRnVuY3Rpb25Db2RlO1xuZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbih7IGdlbiwgdmFsaWRhdGVOYW1lLCBzY2hlbWEsIHNjaGVtYUVudiwgb3B0cyB9LCBib2R5KSB7XG4gICAgaWYgKG9wdHMuY29kZS5lczUpIHtcbiAgICAgICAgZ2VuLmZ1bmModmFsaWRhdGVOYW1lLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5kYXRhfSwgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fWAsIHNjaGVtYUVudi4kYXN5bmMsICgpID0+IHtcbiAgICAgICAgICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYFwidXNlIHN0cmljdFwiOyAke2Z1bmNTb3VyY2VVcmwoc2NoZW1hLCBvcHRzKX1gKTtcbiAgICAgICAgICAgIGRlc3RydWN0dXJlVmFsQ3h0RVM1KGdlbiwgb3B0cyk7XG4gICAgICAgICAgICBnZW4uY29kZShib2R5KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4uZnVuYyh2YWxpZGF0ZU5hbWUsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LmRhdGF9LCAke2Rlc3RydWN0dXJlVmFsQ3h0KG9wdHMpfWAsIHNjaGVtYUVudi4kYXN5bmMsICgpID0+IGdlbi5jb2RlKGZ1bmNTb3VyY2VVcmwoc2NoZW1hLCBvcHRzKSkuY29kZShib2R5KSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVzdHJ1Y3R1cmVWYWxDeHQob3B0cykge1xuICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGB7JHtuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRofT1cIlwiLCAke25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhfSwgJHtuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5fSwgJHtuYW1lc18xLmRlZmF1bHQucm9vdERhdGF9PSR7bmFtZXNfMS5kZWZhdWx0LmRhdGF9JHtvcHRzLmR5bmFtaWNSZWYgPyAoMCwgY29kZWdlbl8xLl8pIGAsICR7bmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzfT17fWAgOiBjb2RlZ2VuXzEubmlsfX09e31gO1xufVxuZnVuY3Rpb24gZGVzdHJ1Y3R1cmVWYWxDeHRFUzUoZ2VuLCBvcHRzKSB7XG4gICAgZ2VuLmlmKG5hbWVzXzEuZGVmYXVsdC52YWxDeHQsICgpID0+IHtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52YWxDeHR9LiR7bmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aH1gKTtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fS4ke25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhfWApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZhbEN4dH0uJHtuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5fWApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5yb290RGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fS4ke25hbWVzXzEuZGVmYXVsdC5yb290RGF0YX1gKTtcbiAgICAgICAgaWYgKG9wdHMuZHluYW1pY1JlZilcbiAgICAgICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52YWxDeHR9LiR7bmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzfWApO1xuICAgIH0sICgpID0+IHtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCAoMCwgY29kZWdlbl8xLl8pIGBcIlwiYCk7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGEsICgwLCBjb2RlZ2VuXzEuXykgYHVuZGVmaW5lZGApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksICgwLCBjb2RlZ2VuXzEuXykgYHVuZGVmaW5lZGApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5yb290RGF0YSwgbmFtZXNfMS5kZWZhdWx0LmRhdGEpO1xuICAgICAgICBpZiAob3B0cy5keW5hbWljUmVmKVxuICAgICAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnMsICgwLCBjb2RlZ2VuXzEuXykgYHt9YCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0b3BTY2hlbWFPYmpDb2RlKGl0KSB7XG4gICAgY29uc3QgeyBzY2hlbWEsIG9wdHMsIGdlbiB9ID0gaXQ7XG4gICAgdmFsaWRhdGVGdW5jdGlvbihpdCwgKCkgPT4ge1xuICAgICAgICBpZiAob3B0cy4kY29tbWVudCAmJiBzY2hlbWEuJGNvbW1lbnQpXG4gICAgICAgICAgICBjb21tZW50S2V5d29yZChpdCk7XG4gICAgICAgIGNoZWNrTm9EZWZhdWx0KGl0KTtcbiAgICAgICAgZ2VuLmxldChuYW1lc18xLmRlZmF1bHQudkVycm9ycywgbnVsbCk7XG4gICAgICAgIGdlbi5sZXQobmFtZXNfMS5kZWZhdWx0LmVycm9ycywgMCk7XG4gICAgICAgIGlmIChvcHRzLnVuZXZhbHVhdGVkKVxuICAgICAgICAgICAgcmVzZXRFdmFsdWF0ZWQoaXQpO1xuICAgICAgICB0eXBlQW5kS2V5d29yZHMoaXQpO1xuICAgICAgICByZXR1cm5SZXN1bHRzKGl0KTtcbiAgICB9KTtcbiAgICByZXR1cm47XG59XG5mdW5jdGlvbiByZXNldEV2YWx1YXRlZChpdCkge1xuICAgIC8vIFRPRE8gbWF5YmUgc29tZSBob29rIHRvIGV4ZWN1dGUgaXQgaW4gdGhlIGVuZCB0byBjaGVjayB3aGV0aGVyIHByb3BzL2l0ZW1zIGFyZSBOYW1lLCBhcyBpbiBhc3NpZ25FdmFsdWF0ZWRcbiAgICBjb25zdCB7IGdlbiwgdmFsaWRhdGVOYW1lIH0gPSBpdDtcbiAgICBpdC5ldmFsdWF0ZWQgPSBnZW4uY29uc3QoXCJldmFsdWF0ZWRcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZGF0ZU5hbWV9LmV2YWx1YXRlZGApO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2l0LmV2YWx1YXRlZH0uZHluYW1pY1Byb3BzYCwgKCkgPT4gZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2l0LmV2YWx1YXRlZH0ucHJvcHNgLCAoMCwgY29kZWdlbl8xLl8pIGB1bmRlZmluZWRgKSk7XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuZXZhbHVhdGVkfS5keW5hbWljSXRlbXNgLCAoKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuZXZhbHVhdGVkfS5pdGVtc2AsICgwLCBjb2RlZ2VuXzEuXykgYHVuZGVmaW5lZGApKTtcbn1cbmZ1bmN0aW9uIGZ1bmNTb3VyY2VVcmwoc2NoZW1hLCBvcHRzKSB7XG4gICAgY29uc3Qgc2NoSWQgPSB0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIgJiYgc2NoZW1hW29wdHMuc2NoZW1hSWRdO1xuICAgIHJldHVybiBzY2hJZCAmJiAob3B0cy5jb2RlLnNvdXJjZSB8fCBvcHRzLmNvZGUucHJvY2VzcykgPyAoMCwgY29kZWdlbl8xLl8pIGAvKiMgc291cmNlVVJMPSR7c2NoSWR9ICovYCA6IGNvZGVnZW5fMS5uaWw7XG59XG4vLyBzY2hlbWEgY29tcGlsYXRpb24gLSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgdG8gZ2VuZXJhdGUgY29kZSBmb3Igc3ViLXNjaGVtYXNcbmZ1bmN0aW9uIHN1YnNjaGVtYUNvZGUoaXQsIHZhbGlkKSB7XG4gICAgaWYgKGlzU2NoZW1hT2JqKGl0KSkge1xuICAgICAgICBjaGVja0tleXdvcmRzKGl0KTtcbiAgICAgICAgaWYgKHNjaGVtYUN4dEhhc1J1bGVzKGl0KSkge1xuICAgICAgICAgICAgc3ViU2NoZW1hT2JqQ29kZShpdCwgdmFsaWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgICgwLCBib29sU2NoZW1hXzEuYm9vbE9yRW1wdHlTY2hlbWEpKGl0LCB2YWxpZCk7XG59XG5mdW5jdGlvbiBzY2hlbWFDeHRIYXNSdWxlcyh7IHNjaGVtYSwgc2VsZiB9KSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiAhc2NoZW1hO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSlcbiAgICAgICAgaWYgKHNlbGYuUlVMRVMuYWxsW2tleV0pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpc1NjaGVtYU9iaihpdCkge1xuICAgIHJldHVybiB0eXBlb2YgaXQuc2NoZW1hICE9IFwiYm9vbGVhblwiO1xufVxuZnVuY3Rpb24gc3ViU2NoZW1hT2JqQ29kZShpdCwgdmFsaWQpIHtcbiAgICBjb25zdCB7IHNjaGVtYSwgZ2VuLCBvcHRzIH0gPSBpdDtcbiAgICBpZiAob3B0cy4kY29tbWVudCAmJiBzY2hlbWEuJGNvbW1lbnQpXG4gICAgICAgIGNvbW1lbnRLZXl3b3JkKGl0KTtcbiAgICB1cGRhdGVDb250ZXh0KGl0KTtcbiAgICBjaGVja0FzeW5jU2NoZW1hKGl0KTtcbiAgICBjb25zdCBlcnJzQ291bnQgPSBnZW4uY29uc3QoXCJfZXJyc1wiLCBuYW1lc18xLmRlZmF1bHQuZXJyb3JzKTtcbiAgICB0eXBlQW5kS2V5d29yZHMoaXQsIGVycnNDb3VudCk7XG4gICAgLy8gVE9ETyB2YXJcbiAgICBnZW4udmFyKHZhbGlkLCAoMCwgY29kZWdlbl8xLl8pIGAke2VycnNDb3VudH0gPT09ICR7bmFtZXNfMS5kZWZhdWx0LmVycm9yc31gKTtcbn1cbmZ1bmN0aW9uIGNoZWNrS2V5d29yZHMoaXQpIHtcbiAgICAoMCwgdXRpbF8xLmNoZWNrVW5rbm93blJ1bGVzKShpdCk7XG4gICAgY2hlY2tSZWZzQW5kS2V5d29yZHMoaXQpO1xufVxuZnVuY3Rpb24gdHlwZUFuZEtleXdvcmRzKGl0LCBlcnJzQ291bnQpIHtcbiAgICBpZiAoaXQub3B0cy5qdGQpXG4gICAgICAgIHJldHVybiBzY2hlbWFLZXl3b3JkcyhpdCwgW10sIGZhbHNlLCBlcnJzQ291bnQpO1xuICAgIGNvbnN0IHR5cGVzID0gKDAsIGRhdGFUeXBlXzEuZ2V0U2NoZW1hVHlwZXMpKGl0LnNjaGVtYSk7XG4gICAgY29uc3QgY2hlY2tlZFR5cGVzID0gKDAsIGRhdGFUeXBlXzEuY29lcmNlQW5kQ2hlY2tEYXRhVHlwZSkoaXQsIHR5cGVzKTtcbiAgICBzY2hlbWFLZXl3b3JkcyhpdCwgdHlwZXMsICFjaGVja2VkVHlwZXMsIGVycnNDb3VudCk7XG59XG5mdW5jdGlvbiBjaGVja1JlZnNBbmRLZXl3b3JkcyhpdCkge1xuICAgIGNvbnN0IHsgc2NoZW1hLCBlcnJTY2hlbWFQYXRoLCBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hLiRyZWYgJiYgb3B0cy5pZ25vcmVLZXl3b3Jkc1dpdGhSZWYgJiYgKDAsIHV0aWxfMS5zY2hlbWFIYXNSdWxlc0J1dFJlZikoc2NoZW1hLCBzZWxmLlJVTEVTKSkge1xuICAgICAgICBzZWxmLmxvZ2dlci53YXJuKGAkcmVmOiBrZXl3b3JkcyBpZ25vcmVkIGluIHNjaGVtYSBhdCBwYXRoIFwiJHtlcnJTY2hlbWFQYXRofVwiYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gY2hlY2tOb0RlZmF1bHQoaXQpIHtcbiAgICBjb25zdCB7IHNjaGVtYSwgb3B0cyB9ID0gaXQ7XG4gICAgaWYgKHNjaGVtYS5kZWZhdWx0ICE9PSB1bmRlZmluZWQgJiYgb3B0cy51c2VEZWZhdWx0cyAmJiBvcHRzLnN0cmljdFNjaGVtYSkge1xuICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIFwiZGVmYXVsdCBpcyBpZ25vcmVkIGluIHRoZSBzY2hlbWEgcm9vdFwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiB1cGRhdGVDb250ZXh0KGl0KSB7XG4gICAgY29uc3Qgc2NoSWQgPSBpdC5zY2hlbWFbaXQub3B0cy5zY2hlbWFJZF07XG4gICAgaWYgKHNjaElkKVxuICAgICAgICBpdC5iYXNlSWQgPSAoMCwgcmVzb2x2ZV8xLnJlc29sdmVVcmwpKGl0Lm9wdHMudXJpUmVzb2x2ZXIsIGl0LmJhc2VJZCwgc2NoSWQpO1xufVxuZnVuY3Rpb24gY2hlY2tBc3luY1NjaGVtYShpdCkge1xuICAgIGlmIChpdC5zY2hlbWEuJGFzeW5jICYmICFpdC5zY2hlbWFFbnYuJGFzeW5jKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhc3luYyBzY2hlbWEgaW4gc3luYyBzY2hlbWFcIik7XG59XG5mdW5jdGlvbiBjb21tZW50S2V5d29yZCh7IGdlbiwgc2NoZW1hRW52LCBzY2hlbWEsIGVyclNjaGVtYVBhdGgsIG9wdHMgfSkge1xuICAgIGNvbnN0IG1zZyA9IHNjaGVtYS4kY29tbWVudDtcbiAgICBpZiAob3B0cy4kY29tbWVudCA9PT0gdHJ1ZSkge1xuICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5zZWxmfS5sb2dnZXIubG9nKCR7bXNnfSlgKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIG9wdHMuJGNvbW1lbnQgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYVBhdGggPSAoMCwgY29kZWdlbl8xLnN0cikgYCR7ZXJyU2NoZW1hUGF0aH0vJGNvbW1lbnRgO1xuICAgICAgICBjb25zdCByb290TmFtZSA9IGdlbi5zY29wZVZhbHVlKFwicm9vdFwiLCB7IHJlZjogc2NoZW1hRW52LnJvb3QgfSk7XG4gICAgICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnNlbGZ9Lm9wdHMuJGNvbW1lbnQoJHttc2d9LCAke3NjaGVtYVBhdGh9LCAke3Jvb3ROYW1lfS5zY2hlbWEpYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmV0dXJuUmVzdWx0cyhpdCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWFFbnYsIHZhbGlkYXRlTmFtZSwgVmFsaWRhdGlvbkVycm9yLCBvcHRzIH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hRW52LiRhc3luYykge1xuICAgICAgICAvLyBUT0RPIGFzc2lnbiB1bmV2YWx1YXRlZFxuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfSA9PT0gMGAsICgpID0+IGdlbi5yZXR1cm4obmFtZXNfMS5kZWZhdWx0LmRhdGEpLCAoKSA9PiBnZW4udGhyb3coKDAsIGNvZGVnZW5fMS5fKSBgbmV3ICR7VmFsaWRhdGlvbkVycm9yfSgke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSlgKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7dmFsaWRhdGVOYW1lfS5lcnJvcnNgLCBuYW1lc18xLmRlZmF1bHQudkVycm9ycyk7XG4gICAgICAgIGlmIChvcHRzLnVuZXZhbHVhdGVkKVxuICAgICAgICAgICAgYXNzaWduRXZhbHVhdGVkKGl0KTtcbiAgICAgICAgZ2VuLnJldHVybigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5lcnJvcnN9ID09PSAwYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gYXNzaWduRXZhbHVhdGVkKHsgZ2VuLCBldmFsdWF0ZWQsIHByb3BzLCBpdGVtcyB9KSB7XG4gICAgaWYgKHByb3BzIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUpXG4gICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtldmFsdWF0ZWR9LnByb3BzYCwgcHJvcHMpO1xuICAgIGlmIChpdGVtcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKVxuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXZhbHVhdGVkfS5pdGVtc2AsIGl0ZW1zKTtcbn1cbmZ1bmN0aW9uIHNjaGVtYUtleXdvcmRzKGl0LCB0eXBlcywgdHlwZUVycm9ycywgZXJyc0NvdW50KSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgZGF0YSwgYWxsRXJyb3JzLCBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICBjb25zdCB7IFJVTEVTIH0gPSBzZWxmO1xuICAgIGlmIChzY2hlbWEuJHJlZiAmJiAob3B0cy5pZ25vcmVLZXl3b3Jkc1dpdGhSZWYgfHwgISgwLCB1dGlsXzEuc2NoZW1hSGFzUnVsZXNCdXRSZWYpKHNjaGVtYSwgUlVMRVMpKSkge1xuICAgICAgICBnZW4uYmxvY2soKCkgPT4ga2V5d29yZENvZGUoaXQsIFwiJHJlZlwiLCBSVUxFUy5hbGwuJHJlZi5kZWZpbml0aW9uKSk7IC8vIFRPRE8gdHlwZWNhc3RcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIW9wdHMuanRkKVxuICAgICAgICBjaGVja1N0cmljdFR5cGVzKGl0LCB0eXBlcyk7XG4gICAgZ2VuLmJsb2NrKCgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiBSVUxFUy5ydWxlcylcbiAgICAgICAgICAgIGdyb3VwS2V5d29yZHMoZ3JvdXApO1xuICAgICAgICBncm91cEtleXdvcmRzKFJVTEVTLnBvc3QpO1xuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGdyb3VwS2V5d29yZHMoZ3JvdXApIHtcbiAgICAgICAgaWYgKCEoMCwgYXBwbGljYWJpbGl0eV8xLnNob3VsZFVzZUdyb3VwKShzY2hlbWEsIGdyb3VwKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGdyb3VwLnR5cGUpIHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgZGF0YVR5cGVfMi5jaGVja0RhdGFUeXBlKShncm91cC50eXBlLCBkYXRhLCBvcHRzLnN0cmljdE51bWJlcnMpKTtcbiAgICAgICAgICAgIGl0ZXJhdGVLZXl3b3JkcyhpdCwgZ3JvdXApO1xuICAgICAgICAgICAgaWYgKHR5cGVzLmxlbmd0aCA9PT0gMSAmJiB0eXBlc1swXSA9PT0gZ3JvdXAudHlwZSAmJiB0eXBlRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgZ2VuLmVsc2UoKTtcbiAgICAgICAgICAgICAgICAoMCwgZGF0YVR5cGVfMi5yZXBvcnRUeXBlRXJyb3IpKGl0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdlbi5lbmRJZigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaXRlcmF0ZUtleXdvcmRzKGl0LCBncm91cCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETyBtYWtlIGl0IFwib2tcIiBjYWxsP1xuICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5lcnJvcnN9ID09PSAke2VycnNDb3VudCB8fCAwfWApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGl0ZXJhdGVLZXl3b3JkcyhpdCwgZ3JvdXApIHtcbiAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBvcHRzOiB7IHVzZURlZmF1bHRzIH0sIH0gPSBpdDtcbiAgICBpZiAodXNlRGVmYXVsdHMpXG4gICAgICAgICgwLCBkZWZhdWx0c18xLmFzc2lnbkRlZmF1bHRzKShpdCwgZ3JvdXAudHlwZSk7XG4gICAgZ2VuLmJsb2NrKCgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIGdyb3VwLnJ1bGVzKSB7XG4gICAgICAgICAgICBpZiAoKDAsIGFwcGxpY2FiaWxpdHlfMS5zaG91bGRVc2VSdWxlKShzY2hlbWEsIHJ1bGUpKSB7XG4gICAgICAgICAgICAgICAga2V5d29yZENvZGUoaXQsIHJ1bGUua2V5d29yZCwgcnVsZS5kZWZpbml0aW9uLCBncm91cC50eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gY2hlY2tTdHJpY3RUeXBlcyhpdCwgdHlwZXMpIHtcbiAgICBpZiAoaXQuc2NoZW1hRW52Lm1ldGEgfHwgIWl0Lm9wdHMuc3RyaWN0VHlwZXMpXG4gICAgICAgIHJldHVybjtcbiAgICBjaGVja0NvbnRleHRUeXBlcyhpdCwgdHlwZXMpO1xuICAgIGlmICghaXQub3B0cy5hbGxvd1VuaW9uVHlwZXMpXG4gICAgICAgIGNoZWNrTXVsdGlwbGVUeXBlcyhpdCwgdHlwZXMpO1xuICAgIGNoZWNrS2V5d29yZFR5cGVzKGl0LCBpdC5kYXRhVHlwZXMpO1xufVxuZnVuY3Rpb24gY2hlY2tDb250ZXh0VHlwZXMoaXQsIHR5cGVzKSB7XG4gICAgaWYgKCF0eXBlcy5sZW5ndGgpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoIWl0LmRhdGFUeXBlcy5sZW5ndGgpIHtcbiAgICAgICAgaXQuZGF0YVR5cGVzID0gdHlwZXM7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHlwZXMuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgICBpZiAoIWluY2x1ZGVzVHlwZShpdC5kYXRhVHlwZXMsIHQpKSB7XG4gICAgICAgICAgICBzdHJpY3RUeXBlc0Vycm9yKGl0LCBgdHlwZSBcIiR7dH1cIiBub3QgYWxsb3dlZCBieSBjb250ZXh0IFwiJHtpdC5kYXRhVHlwZXMuam9pbihcIixcIil9XCJgKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIG5hcnJvd1NjaGVtYVR5cGVzKGl0LCB0eXBlcyk7XG59XG5mdW5jdGlvbiBjaGVja011bHRpcGxlVHlwZXMoaXQsIHRzKSB7XG4gICAgaWYgKHRzLmxlbmd0aCA+IDEgJiYgISh0cy5sZW5ndGggPT09IDIgJiYgdHMuaW5jbHVkZXMoXCJudWxsXCIpKSkge1xuICAgICAgICBzdHJpY3RUeXBlc0Vycm9yKGl0LCBcInVzZSBhbGxvd1VuaW9uVHlwZXMgdG8gYWxsb3cgdW5pb24gdHlwZSBrZXl3b3JkXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNoZWNrS2V5d29yZFR5cGVzKGl0LCB0cykge1xuICAgIGNvbnN0IHJ1bGVzID0gaXQuc2VsZi5SVUxFUy5hbGw7XG4gICAgZm9yIChjb25zdCBrZXl3b3JkIGluIHJ1bGVzKSB7XG4gICAgICAgIGNvbnN0IHJ1bGUgPSBydWxlc1trZXl3b3JkXTtcbiAgICAgICAgaWYgKHR5cGVvZiBydWxlID09IFwib2JqZWN0XCIgJiYgKDAsIGFwcGxpY2FiaWxpdHlfMS5zaG91bGRVc2VSdWxlKShpdC5zY2hlbWEsIHJ1bGUpKSB7XG4gICAgICAgICAgICBjb25zdCB7IHR5cGUgfSA9IHJ1bGUuZGVmaW5pdGlvbjtcbiAgICAgICAgICAgIGlmICh0eXBlLmxlbmd0aCAmJiAhdHlwZS5zb21lKCh0KSA9PiBoYXNBcHBsaWNhYmxlVHlwZSh0cywgdCkpKSB7XG4gICAgICAgICAgICAgICAgc3RyaWN0VHlwZXNFcnJvcihpdCwgYG1pc3NpbmcgdHlwZSBcIiR7dHlwZS5qb2luKFwiLFwiKX1cIiBmb3Iga2V5d29yZCBcIiR7a2V5d29yZH1cImApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gaGFzQXBwbGljYWJsZVR5cGUoc2NoVHMsIGt3ZFQpIHtcbiAgICByZXR1cm4gc2NoVHMuaW5jbHVkZXMoa3dkVCkgfHwgKGt3ZFQgPT09IFwibnVtYmVyXCIgJiYgc2NoVHMuaW5jbHVkZXMoXCJpbnRlZ2VyXCIpKTtcbn1cbmZ1bmN0aW9uIGluY2x1ZGVzVHlwZSh0cywgdCkge1xuICAgIHJldHVybiB0cy5pbmNsdWRlcyh0KSB8fCAodCA9PT0gXCJpbnRlZ2VyXCIgJiYgdHMuaW5jbHVkZXMoXCJudW1iZXJcIikpO1xufVxuZnVuY3Rpb24gbmFycm93U2NoZW1hVHlwZXMoaXQsIHdpdGhUeXBlcykge1xuICAgIGNvbnN0IHRzID0gW107XG4gICAgZm9yIChjb25zdCB0IG9mIGl0LmRhdGFUeXBlcykge1xuICAgICAgICBpZiAoaW5jbHVkZXNUeXBlKHdpdGhUeXBlcywgdCkpXG4gICAgICAgICAgICB0cy5wdXNoKHQpO1xuICAgICAgICBlbHNlIGlmICh3aXRoVHlwZXMuaW5jbHVkZXMoXCJpbnRlZ2VyXCIpICYmIHQgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICB0cy5wdXNoKFwiaW50ZWdlclwiKTtcbiAgICB9XG4gICAgaXQuZGF0YVR5cGVzID0gdHM7XG59XG5mdW5jdGlvbiBzdHJpY3RUeXBlc0Vycm9yKGl0LCBtc2cpIHtcbiAgICBjb25zdCBzY2hlbWFQYXRoID0gaXQuc2NoZW1hRW52LmJhc2VJZCArIGl0LmVyclNjaGVtYVBhdGg7XG4gICAgbXNnICs9IGAgYXQgXCIke3NjaGVtYVBhdGh9XCIgKHN0cmljdFR5cGVzKWA7XG4gICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBtc2csIGl0Lm9wdHMuc3RyaWN0VHlwZXMpO1xufVxuY2xhc3MgS2V5d29yZEN4dCB7XG4gICAgY29uc3RydWN0b3IoaXQsIGRlZiwga2V5d29yZCkge1xuICAgICAgICAoMCwga2V5d29yZF8xLnZhbGlkYXRlS2V5d29yZFVzYWdlKShpdCwgZGVmLCBrZXl3b3JkKTtcbiAgICAgICAgdGhpcy5nZW4gPSBpdC5nZW47XG4gICAgICAgIHRoaXMuYWxsRXJyb3JzID0gaXQuYWxsRXJyb3JzO1xuICAgICAgICB0aGlzLmtleXdvcmQgPSBrZXl3b3JkO1xuICAgICAgICB0aGlzLmRhdGEgPSBpdC5kYXRhO1xuICAgICAgICB0aGlzLnNjaGVtYSA9IGl0LnNjaGVtYVtrZXl3b3JkXTtcbiAgICAgICAgdGhpcy4kZGF0YSA9IGRlZi4kZGF0YSAmJiBpdC5vcHRzLiRkYXRhICYmIHRoaXMuc2NoZW1hICYmIHRoaXMuc2NoZW1hLiRkYXRhO1xuICAgICAgICB0aGlzLnNjaGVtYVZhbHVlID0gKDAsIHV0aWxfMS5zY2hlbWFSZWZPclZhbCkoaXQsIHRoaXMuc2NoZW1hLCBrZXl3b3JkLCB0aGlzLiRkYXRhKTtcbiAgICAgICAgdGhpcy5zY2hlbWFUeXBlID0gZGVmLnNjaGVtYVR5cGU7XG4gICAgICAgIHRoaXMucGFyZW50U2NoZW1hID0gaXQuc2NoZW1hO1xuICAgICAgICB0aGlzLnBhcmFtcyA9IHt9O1xuICAgICAgICB0aGlzLml0ID0gaXQ7XG4gICAgICAgIHRoaXMuZGVmID0gZGVmO1xuICAgICAgICBpZiAodGhpcy4kZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5zY2hlbWFDb2RlID0gaXQuZ2VuLmNvbnN0KFwidlNjaGVtYVwiLCBnZXREYXRhKHRoaXMuJGRhdGEsIGl0KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNjaGVtYUNvZGUgPSB0aGlzLnNjaGVtYVZhbHVlO1xuICAgICAgICAgICAgaWYgKCEoMCwga2V5d29yZF8xLnZhbGlkU2NoZW1hVHlwZSkodGhpcy5zY2hlbWEsIGRlZi5zY2hlbWFUeXBlLCBkZWYuYWxsb3dVbmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2tleXdvcmR9IHZhbHVlIG11c3QgYmUgJHtKU09OLnN0cmluZ2lmeShkZWYuc2NoZW1hVHlwZSl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwiY29kZVwiIGluIGRlZiA/IGRlZi50cmFja0Vycm9ycyA6IGRlZi5lcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLmVycnNDb3VudCA9IGl0Lmdlbi5jb25zdChcIl9lcnJzXCIsIG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlc3VsdChjb25kaXRpb24sIHN1Y2Nlc3NBY3Rpb24sIGZhaWxBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5mYWlsUmVzdWx0KCgwLCBjb2RlZ2VuXzEubm90KShjb25kaXRpb24pLCBzdWNjZXNzQWN0aW9uLCBmYWlsQWN0aW9uKTtcbiAgICB9XG4gICAgZmFpbFJlc3VsdChjb25kaXRpb24sIHN1Y2Nlc3NBY3Rpb24sIGZhaWxBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5nZW4uaWYoY29uZGl0aW9uKTtcbiAgICAgICAgaWYgKGZhaWxBY3Rpb24pXG4gICAgICAgICAgICBmYWlsQWN0aW9uKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuZXJyb3IoKTtcbiAgICAgICAgaWYgKHN1Y2Nlc3NBY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZ2VuLmVsc2UoKTtcbiAgICAgICAgICAgIHN1Y2Nlc3NBY3Rpb24oKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbEVycm9ycylcbiAgICAgICAgICAgICAgICB0aGlzLmdlbi5lbmRJZigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuLmVuZElmKCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5nZW4uZWxzZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHBhc3MoY29uZGl0aW9uLCBmYWlsQWN0aW9uKSB7XG4gICAgICAgIHRoaXMuZmFpbFJlc3VsdCgoMCwgY29kZWdlbl8xLm5vdCkoY29uZGl0aW9uKSwgdW5kZWZpbmVkLCBmYWlsQWN0aW9uKTtcbiAgICB9XG4gICAgZmFpbChjb25kaXRpb24pIHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yKCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuLmlmKGZhbHNlKTsgLy8gdGhpcyBicmFuY2ggd2lsbCBiZSByZW1vdmVkIGJ5IGdlbi5vcHRpbWl6ZVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2VuLmlmKGNvbmRpdGlvbik7XG4gICAgICAgIHRoaXMuZXJyb3IoKTtcbiAgICAgICAgaWYgKHRoaXMuYWxsRXJyb3JzKVxuICAgICAgICAgICAgdGhpcy5nZW4uZW5kSWYoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5nZW4uZWxzZSgpO1xuICAgIH1cbiAgICBmYWlsJGRhdGEoY29uZGl0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy4kZGF0YSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZhaWwoY29uZGl0aW9uKTtcbiAgICAgICAgY29uc3QgeyBzY2hlbWFDb2RlIH0gPSB0aGlzO1xuICAgICAgICB0aGlzLmZhaWwoKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWFDb2RlfSAhPT0gdW5kZWZpbmVkICYmICgkeygwLCBjb2RlZ2VuXzEub3IpKHRoaXMuaW52YWxpZCRkYXRhKCksIGNvbmRpdGlvbil9KWApO1xuICAgIH1cbiAgICBlcnJvcihhcHBlbmQsIGVycm9yUGFyYW1zLCBlcnJvclBhdGhzKSB7XG4gICAgICAgIGlmIChlcnJvclBhcmFtcykge1xuICAgICAgICAgICAgdGhpcy5zZXRQYXJhbXMoZXJyb3JQYXJhbXMpO1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoYXBwZW5kLCBlcnJvclBhdGhzKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UGFyYW1zKHt9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lcnJvcihhcHBlbmQsIGVycm9yUGF0aHMpO1xuICAgIH1cbiAgICBfZXJyb3IoYXBwZW5kLCBlcnJvclBhdGhzKSB7XG4gICAgICAgIDtcbiAgICAgICAgKGFwcGVuZCA/IGVycm9yc18xLnJlcG9ydEV4dHJhRXJyb3IgOiBlcnJvcnNfMS5yZXBvcnRFcnJvcikodGhpcywgdGhpcy5kZWYuZXJyb3IsIGVycm9yUGF0aHMpO1xuICAgIH1cbiAgICAkZGF0YUVycm9yKCkge1xuICAgICAgICAoMCwgZXJyb3JzXzEucmVwb3J0RXJyb3IpKHRoaXMsIHRoaXMuZGVmLiRkYXRhRXJyb3IgfHwgZXJyb3JzXzEua2V5d29yZCREYXRhRXJyb3IpO1xuICAgIH1cbiAgICByZXNldCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXJyc0NvdW50ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FkZCBcInRyYWNrRXJyb3JzXCIgdG8ga2V5d29yZCBkZWZpbml0aW9uJyk7XG4gICAgICAgICgwLCBlcnJvcnNfMS5yZXNldEVycm9yc0NvdW50KSh0aGlzLmdlbiwgdGhpcy5lcnJzQ291bnQpO1xuICAgIH1cbiAgICBvayhjb25kKSB7XG4gICAgICAgIGlmICghdGhpcy5hbGxFcnJvcnMpXG4gICAgICAgICAgICB0aGlzLmdlbi5pZihjb25kKTtcbiAgICB9XG4gICAgc2V0UGFyYW1zKG9iaiwgYXNzaWduKSB7XG4gICAgICAgIGlmIChhc3NpZ24pXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMucGFyYW1zLCBvYmopO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnBhcmFtcyA9IG9iajtcbiAgICB9XG4gICAgYmxvY2skZGF0YSh2YWxpZCwgY29kZUJsb2NrLCAkZGF0YVZhbGlkID0gY29kZWdlbl8xLm5pbCkge1xuICAgICAgICB0aGlzLmdlbi5ibG9jaygoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrJGRhdGEodmFsaWQsICRkYXRhVmFsaWQpO1xuICAgICAgICAgICAgY29kZUJsb2NrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjaGVjayRkYXRhKHZhbGlkID0gY29kZWdlbl8xLm5pbCwgJGRhdGFWYWxpZCA9IGNvZGVnZW5fMS5uaWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLiRkYXRhKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hQ29kZSwgc2NoZW1hVHlwZSwgZGVmIH0gPSB0aGlzO1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5vcikoKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWFDb2RlfSA9PT0gdW5kZWZpbmVkYCwgJGRhdGFWYWxpZCkpO1xuICAgICAgICBpZiAodmFsaWQgIT09IGNvZGVnZW5fMS5uaWwpXG4gICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgaWYgKHNjaGVtYVR5cGUubGVuZ3RoIHx8IGRlZi52YWxpZGF0ZVNjaGVtYSkge1xuICAgICAgICAgICAgZ2VuLmVsc2VJZih0aGlzLmludmFsaWQkZGF0YSgpKTtcbiAgICAgICAgICAgIHRoaXMuJGRhdGFFcnJvcigpO1xuICAgICAgICAgICAgaWYgKHZhbGlkICE9PSBjb2RlZ2VuXzEubmlsKVxuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBnZW4uZWxzZSgpO1xuICAgIH1cbiAgICBpbnZhbGlkJGRhdGEoKSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWFDb2RlLCBzY2hlbWFUeXBlLCBkZWYsIGl0IH0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5vcikod3JvbmckRGF0YVR5cGUoKSwgaW52YWxpZCREYXRhU2NoZW1hKCkpO1xuICAgICAgICBmdW5jdGlvbiB3cm9uZyREYXRhVHlwZSgpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWFUeXBlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmICghKHNjaGVtYUNvZGUgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSkpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdCA9IEFycmF5LmlzQXJyYXkoc2NoZW1hVHlwZSkgPyBzY2hlbWFUeXBlIDogW3NjaGVtYVR5cGVdO1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAkeygwLCBkYXRhVHlwZV8yLmNoZWNrRGF0YVR5cGVzKShzdCwgc2NoZW1hQ29kZSwgaXQub3B0cy5zdHJpY3ROdW1iZXJzLCBkYXRhVHlwZV8yLkRhdGFUeXBlLldyb25nKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvZGVnZW5fMS5uaWw7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaW52YWxpZCREYXRhU2NoZW1hKCkge1xuICAgICAgICAgICAgaWYgKGRlZi52YWxpZGF0ZVNjaGVtYSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlU2NoZW1hUmVmID0gZ2VuLnNjb3BlVmFsdWUoXCJ2YWxpZGF0ZSRkYXRhXCIsIHsgcmVmOiBkZWYudmFsaWRhdGVTY2hlbWEgfSk7IC8vIFRPRE8gdmFsdWUuY29kZSBmb3Igc3RhbmRhbG9uZVxuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAhJHt2YWxpZGF0ZVNjaGVtYVJlZn0oJHtzY2hlbWFDb2RlfSlgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvZGVnZW5fMS5uaWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3Vic2NoZW1hKGFwcGwsIHZhbGlkKSB7XG4gICAgICAgIGNvbnN0IHN1YnNjaGVtYSA9ICgwLCBzdWJzY2hlbWFfMS5nZXRTdWJzY2hlbWEpKHRoaXMuaXQsIGFwcGwpO1xuICAgICAgICAoMCwgc3Vic2NoZW1hXzEuZXh0ZW5kU3Vic2NoZW1hRGF0YSkoc3Vic2NoZW1hLCB0aGlzLml0LCBhcHBsKTtcbiAgICAgICAgKDAsIHN1YnNjaGVtYV8xLmV4dGVuZFN1YnNjaGVtYU1vZGUpKHN1YnNjaGVtYSwgYXBwbCk7XG4gICAgICAgIGNvbnN0IG5leHRDb250ZXh0ID0geyAuLi50aGlzLml0LCAuLi5zdWJzY2hlbWEsIGl0ZW1zOiB1bmRlZmluZWQsIHByb3BzOiB1bmRlZmluZWQgfTtcbiAgICAgICAgc3Vic2NoZW1hQ29kZShuZXh0Q29udGV4dCwgdmFsaWQpO1xuICAgICAgICByZXR1cm4gbmV4dENvbnRleHQ7XG4gICAgfVxuICAgIG1lcmdlRXZhbHVhdGVkKHNjaGVtYUN4dCwgdG9OYW1lKSB7XG4gICAgICAgIGNvbnN0IHsgaXQsIGdlbiB9ID0gdGhpcztcbiAgICAgICAgaWYgKCFpdC5vcHRzLnVuZXZhbHVhdGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoaXQucHJvcHMgIT09IHRydWUgJiYgc2NoZW1hQ3h0LnByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGl0LnByb3BzID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLnByb3BzKGdlbiwgc2NoZW1hQ3h0LnByb3BzLCBpdC5wcm9wcywgdG9OYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXQuaXRlbXMgIT09IHRydWUgJiYgc2NoZW1hQ3h0Lml0ZW1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGl0Lml0ZW1zID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLml0ZW1zKGdlbiwgc2NoZW1hQ3h0Lml0ZW1zLCBpdC5pdGVtcywgdG9OYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtZXJnZVZhbGlkRXZhbHVhdGVkKHNjaGVtYUN4dCwgdmFsaWQpIHtcbiAgICAgICAgY29uc3QgeyBpdCwgZ2VuIH0gPSB0aGlzO1xuICAgICAgICBpZiAoaXQub3B0cy51bmV2YWx1YXRlZCAmJiAoaXQucHJvcHMgIT09IHRydWUgfHwgaXQuaXRlbXMgIT09IHRydWUpKSB7XG4gICAgICAgICAgICBnZW4uaWYodmFsaWQsICgpID0+IHRoaXMubWVyZ2VFdmFsdWF0ZWQoc2NoZW1hQ3h0LCBjb2RlZ2VuXzEuTmFtZSkpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLktleXdvcmRDeHQgPSBLZXl3b3JkQ3h0O1xuZnVuY3Rpb24ga2V5d29yZENvZGUoaXQsIGtleXdvcmQsIGRlZiwgcnVsZVR5cGUpIHtcbiAgICBjb25zdCBjeHQgPSBuZXcgS2V5d29yZEN4dChpdCwgZGVmLCBrZXl3b3JkKTtcbiAgICBpZiAoXCJjb2RlXCIgaW4gZGVmKSB7XG4gICAgICAgIGRlZi5jb2RlKGN4dCwgcnVsZVR5cGUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChjeHQuJGRhdGEgJiYgZGVmLnZhbGlkYXRlKSB7XG4gICAgICAgICgwLCBrZXl3b3JkXzEuZnVuY0tleXdvcmRDb2RlKShjeHQsIGRlZik7XG4gICAgfVxuICAgIGVsc2UgaWYgKFwibWFjcm9cIiBpbiBkZWYpIHtcbiAgICAgICAgKDAsIGtleXdvcmRfMS5tYWNyb0tleXdvcmRDb2RlKShjeHQsIGRlZik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGRlZi5jb21waWxlIHx8IGRlZi52YWxpZGF0ZSkge1xuICAgICAgICAoMCwga2V5d29yZF8xLmZ1bmNLZXl3b3JkQ29kZSkoY3h0LCBkZWYpO1xuICAgIH1cbn1cbmNvbnN0IEpTT05fUE9JTlRFUiA9IC9eXFwvKD86W15+XXx+MHx+MSkqJC87XG5jb25zdCBSRUxBVElWRV9KU09OX1BPSU5URVIgPSAvXihbMC05XSspKCN8XFwvKD86W15+XXx+MHx+MSkqKT8kLztcbmZ1bmN0aW9uIGdldERhdGEoJGRhdGEsIHsgZGF0YUxldmVsLCBkYXRhTmFtZXMsIGRhdGFQYXRoQXJyIH0pIHtcbiAgICBsZXQganNvblBvaW50ZXI7XG4gICAgbGV0IGRhdGE7XG4gICAgaWYgKCRkYXRhID09PSBcIlwiKVxuICAgICAgICByZXR1cm4gbmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhO1xuICAgIGlmICgkZGF0YVswXSA9PT0gXCIvXCIpIHtcbiAgICAgICAgaWYgKCFKU09OX1BPSU5URVIudGVzdCgkZGF0YSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgSlNPTi1wb2ludGVyOiAkeyRkYXRhfWApO1xuICAgICAgICBqc29uUG9pbnRlciA9ICRkYXRhO1xuICAgICAgICBkYXRhID0gbmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IFJFTEFUSVZFX0pTT05fUE9JTlRFUi5leGVjKCRkYXRhKTtcbiAgICAgICAgaWYgKCFtYXRjaGVzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEpTT04tcG9pbnRlcjogJHskZGF0YX1gKTtcbiAgICAgICAgY29uc3QgdXAgPSArbWF0Y2hlc1sxXTtcbiAgICAgICAganNvblBvaW50ZXIgPSBtYXRjaGVzWzJdO1xuICAgICAgICBpZiAoanNvblBvaW50ZXIgPT09IFwiI1wiKSB7XG4gICAgICAgICAgICBpZiAodXAgPj0gZGF0YUxldmVsKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyhcInByb3BlcnR5L2luZGV4XCIsIHVwKSk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YVBhdGhBcnJbZGF0YUxldmVsIC0gdXBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cCA+IGRhdGFMZXZlbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyhcImRhdGFcIiwgdXApKTtcbiAgICAgICAgZGF0YSA9IGRhdGFOYW1lc1tkYXRhTGV2ZWwgLSB1cF07XG4gICAgICAgIGlmICghanNvblBvaW50ZXIpXG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgbGV0IGV4cHIgPSBkYXRhO1xuICAgIGNvbnN0IHNlZ21lbnRzID0ganNvblBvaW50ZXIuc3BsaXQoXCIvXCIpO1xuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cykge1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgICAgZGF0YSA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKCgwLCB1dGlsXzEudW5lc2NhcGVKc29uUG9pbnRlcikoc2VnbWVudCkpfWA7XG4gICAgICAgICAgICBleHByID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtleHByfSAmJiAke2RhdGF9YDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXhwcjtcbiAgICBmdW5jdGlvbiBlcnJvck1zZyhwb2ludGVyVHlwZSwgdXApIHtcbiAgICAgICAgcmV0dXJuIGBDYW5ub3QgYWNjZXNzICR7cG9pbnRlclR5cGV9ICR7dXB9IGxldmVscyB1cCwgY3VycmVudCBsZXZlbCBpcyAke2RhdGFMZXZlbH1gO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0RGF0YSA9IGdldERhdGE7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGVycm9ycykge1xuICAgICAgICBzdXBlcihcInZhbGlkYXRpb24gZmFpbGVkXCIpO1xuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICAgICAgdGhpcy5hanYgPSB0aGlzLnZhbGlkYXRpb24gPSB0cnVlO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFZhbGlkYXRpb25FcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZhbGlkYXRpb25fZXJyb3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHJlc29sdmVfMSA9IHJlcXVpcmUoXCIuL3Jlc29sdmVcIik7XG5jbGFzcyBNaXNzaW5nUmVmRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IocmVzb2x2ZXIsIGJhc2VJZCwgcmVmLCBtc2cpIHtcbiAgICAgICAgc3VwZXIobXNnIHx8IGBjYW4ndCByZXNvbHZlIHJlZmVyZW5jZSAke3JlZn0gZnJvbSBpZCAke2Jhc2VJZH1gKTtcbiAgICAgICAgdGhpcy5taXNzaW5nUmVmID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKShyZXNvbHZlciwgYmFzZUlkLCByZWYpO1xuICAgICAgICB0aGlzLm1pc3NpbmdTY2hlbWEgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKSgoMCwgcmVzb2x2ZV8xLmdldEZ1bGxQYXRoKShyZXNvbHZlciwgdGhpcy5taXNzaW5nUmVmKSk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gTWlzc2luZ1JlZkVycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVmX2Vycm9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVTY2hlbWEgPSBleHBvcnRzLmdldENvbXBpbGluZ1NjaGVtYSA9IGV4cG9ydHMucmVzb2x2ZVJlZiA9IGV4cG9ydHMuY29tcGlsZVNjaGVtYSA9IGV4cG9ydHMuU2NoZW1hRW52ID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29kZWdlblwiKTtcbmNvbnN0IHZhbGlkYXRpb25fZXJyb3JfMSA9IHJlcXVpcmUoXCIuLi9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3JcIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4vbmFtZXNcIik7XG5jb25zdCByZXNvbHZlXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcbmNvbnN0IHZhbGlkYXRlXzEgPSByZXF1aXJlKFwiLi92YWxpZGF0ZVwiKTtcbmNsYXNzIFNjaGVtYUVudiB7XG4gICAgY29uc3RydWN0b3IoZW52KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5yZWZzID0ge307XG4gICAgICAgIHRoaXMuZHluYW1pY0FuY2hvcnMgPSB7fTtcbiAgICAgICAgbGV0IHNjaGVtYTtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnYuc2NoZW1hID09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICBzY2hlbWEgPSBlbnYuc2NoZW1hO1xuICAgICAgICB0aGlzLnNjaGVtYSA9IGVudi5zY2hlbWE7XG4gICAgICAgIHRoaXMuc2NoZW1hSWQgPSBlbnYuc2NoZW1hSWQ7XG4gICAgICAgIHRoaXMucm9vdCA9IGVudi5yb290IHx8IHRoaXM7XG4gICAgICAgIHRoaXMuYmFzZUlkID0gKF9hID0gZW52LmJhc2VJZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoc2NoZW1hID09PSBudWxsIHx8IHNjaGVtYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoZW1hW2Vudi5zY2hlbWFJZCB8fCBcIiRpZFwiXSk7XG4gICAgICAgIHRoaXMuc2NoZW1hUGF0aCA9IGVudi5zY2hlbWFQYXRoO1xuICAgICAgICB0aGlzLmxvY2FsUmVmcyA9IGVudi5sb2NhbFJlZnM7XG4gICAgICAgIHRoaXMubWV0YSA9IGVudi5tZXRhO1xuICAgICAgICB0aGlzLiRhc3luYyA9IHNjaGVtYSA9PT0gbnVsbCB8fCBzY2hlbWEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaGVtYS4kYXN5bmM7XG4gICAgICAgIHRoaXMucmVmcyA9IHt9O1xuICAgIH1cbn1cbmV4cG9ydHMuU2NoZW1hRW52ID0gU2NoZW1hRW52O1xuLy8gbGV0IGNvZGVTaXplID0gMFxuLy8gbGV0IG5vZGVDb3VudCA9IDBcbi8vIENvbXBpbGVzIHNjaGVtYSBpbiBTY2hlbWFFbnZcbmZ1bmN0aW9uIGNvbXBpbGVTY2hlbWEoc2NoKSB7XG4gICAgLy8gVE9ETyByZWZhY3RvciAtIHJlbW92ZSBjb21waWxhdGlvbnNcbiAgICBjb25zdCBfc2NoID0gZ2V0Q29tcGlsaW5nU2NoZW1hLmNhbGwodGhpcywgc2NoKTtcbiAgICBpZiAoX3NjaClcbiAgICAgICAgcmV0dXJuIF9zY2g7XG4gICAgY29uc3Qgcm9vdElkID0gKDAsIHJlc29sdmVfMS5nZXRGdWxsUGF0aCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCBzY2gucm9vdC5iYXNlSWQpOyAvLyBUT0RPIGlmIGdldEZ1bGxQYXRoIHJlbW92ZWQgMSB0ZXN0cyBmYWlsc1xuICAgIGNvbnN0IHsgZXM1LCBsaW5lcyB9ID0gdGhpcy5vcHRzLmNvZGU7XG4gICAgY29uc3QgeyBvd25Qcm9wZXJ0aWVzIH0gPSB0aGlzLm9wdHM7XG4gICAgY29uc3QgZ2VuID0gbmV3IGNvZGVnZW5fMS5Db2RlR2VuKHRoaXMuc2NvcGUsIHsgZXM1LCBsaW5lcywgb3duUHJvcGVydGllcyB9KTtcbiAgICBsZXQgX1ZhbGlkYXRpb25FcnJvcjtcbiAgICBpZiAoc2NoLiRhc3luYykge1xuICAgICAgICBfVmFsaWRhdGlvbkVycm9yID0gZ2VuLnNjb3BlVmFsdWUoXCJFcnJvclwiLCB7XG4gICAgICAgICAgICByZWY6IHZhbGlkYXRpb25fZXJyb3JfMS5kZWZhdWx0LFxuICAgICAgICAgICAgY29kZTogKDAsIGNvZGVnZW5fMS5fKSBgcmVxdWlyZShcImFqdi9kaXN0L3J1bnRpbWUvdmFsaWRhdGlvbl9lcnJvclwiKS5kZWZhdWx0YCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkYXRlTmFtZSA9IGdlbi5zY29wZU5hbWUoXCJ2YWxpZGF0ZVwiKTtcbiAgICBzY2gudmFsaWRhdGVOYW1lID0gdmFsaWRhdGVOYW1lO1xuICAgIGNvbnN0IHNjaGVtYUN4dCA9IHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBhbGxFcnJvcnM6IHRoaXMub3B0cy5hbGxFcnJvcnMsXG4gICAgICAgIGRhdGE6IG5hbWVzXzEuZGVmYXVsdC5kYXRhLFxuICAgICAgICBwYXJlbnREYXRhOiBuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YSxcbiAgICAgICAgcGFyZW50RGF0YVByb3BlcnR5OiBuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5LFxuICAgICAgICBkYXRhTmFtZXM6IFtuYW1lc18xLmRlZmF1bHQuZGF0YV0sXG4gICAgICAgIGRhdGFQYXRoQXJyOiBbY29kZWdlbl8xLm5pbF0sIC8vIFRPRE8gY2FuIGl0cyBsZW5ndGggYmUgdXNlZCBhcyBkYXRhTGV2ZWwgaWYgbmlsIGlzIHJlbW92ZWQ/XG4gICAgICAgIGRhdGFMZXZlbDogMCxcbiAgICAgICAgZGF0YVR5cGVzOiBbXSxcbiAgICAgICAgZGVmaW5lZFByb3BlcnRpZXM6IG5ldyBTZXQoKSxcbiAgICAgICAgdG9wU2NoZW1hUmVmOiBnZW4uc2NvcGVWYWx1ZShcInNjaGVtYVwiLCB0aGlzLm9wdHMuY29kZS5zb3VyY2UgPT09IHRydWVcbiAgICAgICAgICAgID8geyByZWY6IHNjaC5zY2hlbWEsIGNvZGU6ICgwLCBjb2RlZ2VuXzEuc3RyaW5naWZ5KShzY2guc2NoZW1hKSB9XG4gICAgICAgICAgICA6IHsgcmVmOiBzY2guc2NoZW1hIH0pLFxuICAgICAgICB2YWxpZGF0ZU5hbWUsXG4gICAgICAgIFZhbGlkYXRpb25FcnJvcjogX1ZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgc2NoZW1hOiBzY2guc2NoZW1hLFxuICAgICAgICBzY2hlbWFFbnY6IHNjaCxcbiAgICAgICAgcm9vdElkLFxuICAgICAgICBiYXNlSWQ6IHNjaC5iYXNlSWQgfHwgcm9vdElkLFxuICAgICAgICBzY2hlbWFQYXRoOiBjb2RlZ2VuXzEubmlsLFxuICAgICAgICBlcnJTY2hlbWFQYXRoOiBzY2guc2NoZW1hUGF0aCB8fCAodGhpcy5vcHRzLmp0ZCA/IFwiXCIgOiBcIiNcIiksXG4gICAgICAgIGVycm9yUGF0aDogKDAsIGNvZGVnZW5fMS5fKSBgXCJcImAsXG4gICAgICAgIG9wdHM6IHRoaXMub3B0cyxcbiAgICAgICAgc2VsZjogdGhpcyxcbiAgICB9O1xuICAgIGxldCBzb3VyY2VDb2RlO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuX2NvbXBpbGF0aW9ucy5hZGQoc2NoKTtcbiAgICAgICAgKDAsIHZhbGlkYXRlXzEudmFsaWRhdGVGdW5jdGlvbkNvZGUpKHNjaGVtYUN4dCk7XG4gICAgICAgIGdlbi5vcHRpbWl6ZSh0aGlzLm9wdHMuY29kZS5vcHRpbWl6ZSk7XG4gICAgICAgIC8vIGdlbi5vcHRpbWl6ZSgxKVxuICAgICAgICBjb25zdCB2YWxpZGF0ZUNvZGUgPSBnZW4udG9TdHJpbmcoKTtcbiAgICAgICAgc291cmNlQ29kZSA9IGAke2dlbi5zY29wZVJlZnMobmFtZXNfMS5kZWZhdWx0LnNjb3BlKX1yZXR1cm4gJHt2YWxpZGF0ZUNvZGV9YDtcbiAgICAgICAgLy8gY29uc29sZS5sb2coKGNvZGVTaXplICs9IHNvdXJjZUNvZGUubGVuZ3RoKSwgKG5vZGVDb3VudCArPSBnZW4ubm9kZUNvdW50KSlcbiAgICAgICAgaWYgKHRoaXMub3B0cy5jb2RlLnByb2Nlc3MpXG4gICAgICAgICAgICBzb3VyY2VDb2RlID0gdGhpcy5vcHRzLmNvZGUucHJvY2Vzcyhzb3VyY2VDb2RlLCBzY2gpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlxcblxcblxcbiAqKiogXFxuXCIsIHNvdXJjZUNvZGUpXG4gICAgICAgIGNvbnN0IG1ha2VWYWxpZGF0ZSA9IG5ldyBGdW5jdGlvbihgJHtuYW1lc18xLmRlZmF1bHQuc2VsZn1gLCBgJHtuYW1lc18xLmRlZmF1bHQuc2NvcGV9YCwgc291cmNlQ29kZSk7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlID0gbWFrZVZhbGlkYXRlKHRoaXMsIHRoaXMuc2NvcGUuZ2V0KCkpO1xuICAgICAgICB0aGlzLnNjb3BlLnZhbHVlKHZhbGlkYXRlTmFtZSwgeyByZWY6IHZhbGlkYXRlIH0pO1xuICAgICAgICB2YWxpZGF0ZS5lcnJvcnMgPSBudWxsO1xuICAgICAgICB2YWxpZGF0ZS5zY2hlbWEgPSBzY2guc2NoZW1hO1xuICAgICAgICB2YWxpZGF0ZS5zY2hlbWFFbnYgPSBzY2g7XG4gICAgICAgIGlmIChzY2guJGFzeW5jKVxuICAgICAgICAgICAgdmFsaWRhdGUuJGFzeW5jID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5jb2RlLnNvdXJjZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdmFsaWRhdGUuc291cmNlID0geyB2YWxpZGF0ZU5hbWUsIHZhbGlkYXRlQ29kZSwgc2NvcGVWYWx1ZXM6IGdlbi5fdmFsdWVzIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0cy51bmV2YWx1YXRlZCkge1xuICAgICAgICAgICAgY29uc3QgeyBwcm9wcywgaXRlbXMgfSA9IHNjaGVtYUN4dDtcbiAgICAgICAgICAgIHZhbGlkYXRlLmV2YWx1YXRlZCA9IHtcbiAgICAgICAgICAgICAgICBwcm9wczogcHJvcHMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSA/IHVuZGVmaW5lZCA6IHByb3BzLFxuICAgICAgICAgICAgICAgIGl0ZW1zOiBpdGVtcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lID8gdW5kZWZpbmVkIDogaXRlbXMsXG4gICAgICAgICAgICAgICAgZHluYW1pY1Byb3BzOiBwcm9wcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lLFxuICAgICAgICAgICAgICAgIGR5bmFtaWNJdGVtczogaXRlbXMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodmFsaWRhdGUuc291cmNlKVxuICAgICAgICAgICAgICAgIHZhbGlkYXRlLnNvdXJjZS5ldmFsdWF0ZWQgPSAoMCwgY29kZWdlbl8xLnN0cmluZ2lmeSkodmFsaWRhdGUuZXZhbHVhdGVkKTtcbiAgICAgICAgfVxuICAgICAgICBzY2gudmFsaWRhdGUgPSB2YWxpZGF0ZTtcbiAgICAgICAgcmV0dXJuIHNjaDtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZGVsZXRlIHNjaC52YWxpZGF0ZTtcbiAgICAgICAgZGVsZXRlIHNjaC52YWxpZGF0ZU5hbWU7XG4gICAgICAgIGlmIChzb3VyY2VDb2RlKVxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXCJFcnJvciBjb21waWxpbmcgc2NoZW1hLCBmdW5jdGlvbiBjb2RlOlwiLCBzb3VyY2VDb2RlKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJcXG5cXG5cXG4gKioqIFxcblwiLCBzb3VyY2VDb2RlLCB0aGlzLm9wdHMpXG4gICAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0aGlzLl9jb21waWxhdGlvbnMuZGVsZXRlKHNjaCk7XG4gICAgfVxufVxuZXhwb3J0cy5jb21waWxlU2NoZW1hID0gY29tcGlsZVNjaGVtYTtcbmZ1bmN0aW9uIHJlc29sdmVSZWYocm9vdCwgYmFzZUlkLCByZWYpIHtcbiAgICB2YXIgX2E7XG4gICAgcmVmID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgcmVmKTtcbiAgICBjb25zdCBzY2hPckZ1bmMgPSByb290LnJlZnNbcmVmXTtcbiAgICBpZiAoc2NoT3JGdW5jKVxuICAgICAgICByZXR1cm4gc2NoT3JGdW5jO1xuICAgIGxldCBfc2NoID0gcmVzb2x2ZS5jYWxsKHRoaXMsIHJvb3QsIHJlZik7XG4gICAgaWYgKF9zY2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSAoX2EgPSByb290LmxvY2FsUmVmcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW3JlZl07IC8vIFRPRE8gbWF5YmUgbG9jYWxSZWZzIHNob3VsZCBob2xkIFNjaGVtYUVudlxuICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIGlmIChzY2hlbWEpXG4gICAgICAgICAgICBfc2NoID0gbmV3IFNjaGVtYUVudih7IHNjaGVtYSwgc2NoZW1hSWQsIHJvb3QsIGJhc2VJZCB9KTtcbiAgICB9XG4gICAgaWYgKF9zY2ggPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuO1xuICAgIHJldHVybiAocm9vdC5yZWZzW3JlZl0gPSBpbmxpbmVPckNvbXBpbGUuY2FsbCh0aGlzLCBfc2NoKSk7XG59XG5leHBvcnRzLnJlc29sdmVSZWYgPSByZXNvbHZlUmVmO1xuZnVuY3Rpb24gaW5saW5lT3JDb21waWxlKHNjaCkge1xuICAgIGlmICgoMCwgcmVzb2x2ZV8xLmlubGluZVJlZikoc2NoLnNjaGVtYSwgdGhpcy5vcHRzLmlubGluZVJlZnMpKVxuICAgICAgICByZXR1cm4gc2NoLnNjaGVtYTtcbiAgICByZXR1cm4gc2NoLnZhbGlkYXRlID8gc2NoIDogY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHNjaCk7XG59XG4vLyBJbmRleCBvZiBzY2hlbWEgY29tcGlsYXRpb24gaW4gdGhlIGN1cnJlbnRseSBjb21waWxlZCBsaXN0XG5mdW5jdGlvbiBnZXRDb21waWxpbmdTY2hlbWEoc2NoRW52KSB7XG4gICAgZm9yIChjb25zdCBzY2ggb2YgdGhpcy5fY29tcGlsYXRpb25zKSB7XG4gICAgICAgIGlmIChzYW1lU2NoZW1hRW52KHNjaCwgc2NoRW52KSlcbiAgICAgICAgICAgIHJldHVybiBzY2g7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDb21waWxpbmdTY2hlbWEgPSBnZXRDb21waWxpbmdTY2hlbWE7XG5mdW5jdGlvbiBzYW1lU2NoZW1hRW52KHMxLCBzMikge1xuICAgIHJldHVybiBzMS5zY2hlbWEgPT09IHMyLnNjaGVtYSAmJiBzMS5yb290ID09PSBzMi5yb290ICYmIHMxLmJhc2VJZCA9PT0gczIuYmFzZUlkO1xufVxuLy8gcmVzb2x2ZSBhbmQgY29tcGlsZSB0aGUgcmVmZXJlbmNlcyAoJHJlZilcbi8vIFRPRE8gcmV0dXJucyBBbnlTY2hlbWFPYmplY3QgKGlmIHRoZSBzY2hlbWEgY2FuIGJlIGlubGluZWQpIG9yIHZhbGlkYXRpb24gZnVuY3Rpb25cbmZ1bmN0aW9uIHJlc29sdmUocm9vdCwgLy8gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJvb3Qgc2NoZW1hIGZvciB0aGUgY3VycmVudCBzY2hlbWFcbnJlZiAvLyByZWZlcmVuY2UgdG8gcmVzb2x2ZVxuKSB7XG4gICAgbGV0IHNjaDtcbiAgICB3aGlsZSAodHlwZW9mIChzY2ggPSB0aGlzLnJlZnNbcmVmXSkgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgcmVmID0gc2NoO1xuICAgIHJldHVybiBzY2ggfHwgdGhpcy5zY2hlbWFzW3JlZl0gfHwgcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIHJlZik7XG59XG4vLyBSZXNvbHZlIHNjaGVtYSwgaXRzIHJvb3QgYW5kIGJhc2VJZFxuZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYShyb290LCAvLyByb290IG9iamVjdCB3aXRoIHByb3BlcnRpZXMgc2NoZW1hLCByZWZzIFRPRE8gYmVsb3cgU2NoZW1hRW52IGlzIGFzc2lnbmVkIHRvIGl0XG5yZWYgLy8gcmVmZXJlbmNlIHRvIHJlc29sdmVcbikge1xuICAgIGNvbnN0IHAgPSB0aGlzLm9wdHMudXJpUmVzb2x2ZXIucGFyc2UocmVmKTtcbiAgICBjb25zdCByZWZQYXRoID0gKDAsIHJlc29sdmVfMS5fZ2V0RnVsbFBhdGgpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgcCk7XG4gICAgbGV0IGJhc2VJZCA9ICgwLCByZXNvbHZlXzEuZ2V0RnVsbFBhdGgpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgcm9vdC5iYXNlSWQsIHVuZGVmaW5lZCk7XG4gICAgLy8gVE9ETyBgT2JqZWN0LmtleXMocm9vdC5zY2hlbWEpLmxlbmd0aCA+IDBgIHNob3VsZCBub3QgYmUgbmVlZGVkIC0gYnV0IHJlbW92aW5nIGJyZWFrcyAyIHRlc3RzXG4gICAgaWYgKE9iamVjdC5rZXlzKHJvb3Quc2NoZW1hKS5sZW5ndGggPiAwICYmIHJlZlBhdGggPT09IGJhc2VJZCkge1xuICAgICAgICByZXR1cm4gZ2V0SnNvblBvaW50ZXIuY2FsbCh0aGlzLCBwLCByb290KTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKShyZWZQYXRoKTtcbiAgICBjb25zdCBzY2hPclJlZiA9IHRoaXMucmVmc1tpZF0gfHwgdGhpcy5zY2hlbWFzW2lkXTtcbiAgICBpZiAodHlwZW9mIHNjaE9yUmVmID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29uc3Qgc2NoID0gcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIHNjaE9yUmVmKTtcbiAgICAgICAgaWYgKHR5cGVvZiAoc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLnNjaGVtYSkgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHJldHVybiBnZXRKc29uUG9pbnRlci5jYWxsKHRoaXMsIHAsIHNjaCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgKHNjaE9yUmVmID09PSBudWxsIHx8IHNjaE9yUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2hPclJlZi5zY2hlbWEpICE9PSBcIm9iamVjdFwiKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKCFzY2hPclJlZi52YWxpZGF0ZSlcbiAgICAgICAgY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHNjaE9yUmVmKTtcbiAgICBpZiAoaWQgPT09ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKHJlZikpIHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHNjaE9yUmVmO1xuICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIGNvbnN0IHNjaElkID0gc2NoZW1hW3NjaGVtYUlkXTtcbiAgICAgICAgaWYgKHNjaElkKVxuICAgICAgICAgICAgYmFzZUlkID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgc2NoSWQpO1xuICAgICAgICByZXR1cm4gbmV3IFNjaGVtYUVudih7IHNjaGVtYSwgc2NoZW1hSWQsIHJvb3QsIGJhc2VJZCB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGdldEpzb25Qb2ludGVyLmNhbGwodGhpcywgcCwgc2NoT3JSZWYpO1xufVxuZXhwb3J0cy5yZXNvbHZlU2NoZW1hID0gcmVzb2x2ZVNjaGVtYTtcbmNvbnN0IFBSRVZFTlRfU0NPUEVfQ0hBTkdFID0gbmV3IFNldChbXG4gICAgXCJwcm9wZXJ0aWVzXCIsXG4gICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiLFxuICAgIFwiZW51bVwiLFxuICAgIFwiZGVwZW5kZW5jaWVzXCIsXG4gICAgXCJkZWZpbml0aW9uc1wiLFxuXSk7XG5mdW5jdGlvbiBnZXRKc29uUG9pbnRlcihwYXJzZWRSZWYsIHsgYmFzZUlkLCBzY2hlbWEsIHJvb3QgfSkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoKChfYSA9IHBhcnNlZFJlZi5mcmFnbWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSAhPT0gXCIvXCIpXG4gICAgICAgIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFyc2VkUmVmLmZyYWdtZW50LnNsaWNlKDEpLnNwbGl0KFwiL1wiKSkge1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHBhcnRTY2hlbWEgPSBzY2hlbWFbKDAsIHV0aWxfMS51bmVzY2FwZUZyYWdtZW50KShwYXJ0KV07XG4gICAgICAgIGlmIChwYXJ0U2NoZW1hID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHNjaGVtYSA9IHBhcnRTY2hlbWE7XG4gICAgICAgIC8vIFRPRE8gUFJFVkVOVF9TQ09QRV9DSEFOR0UgY291bGQgYmUgZGVmaW5lZCBpbiBrZXl3b3JkIGRlZj9cbiAgICAgICAgY29uc3Qgc2NoSWQgPSB0eXBlb2Ygc2NoZW1hID09PSBcIm9iamVjdFwiICYmIHNjaGVtYVt0aGlzLm9wdHMuc2NoZW1hSWRdO1xuICAgICAgICBpZiAoIVBSRVZFTlRfU0NPUEVfQ0hBTkdFLmhhcyhwYXJ0KSAmJiBzY2hJZCkge1xuICAgICAgICAgICAgYmFzZUlkID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgc2NoSWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBlbnY7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgIT0gXCJib29sZWFuXCIgJiYgc2NoZW1hLiRyZWYgJiYgISgwLCB1dGlsXzEuc2NoZW1hSGFzUnVsZXNCdXRSZWYpKHNjaGVtYSwgdGhpcy5SVUxFUykpIHtcbiAgICAgICAgY29uc3QgJHJlZiA9ICgwLCByZXNvbHZlXzEucmVzb2x2ZVVybCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCBiYXNlSWQsIHNjaGVtYS4kcmVmKTtcbiAgICAgICAgZW52ID0gcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsICRyZWYpO1xuICAgIH1cbiAgICAvLyBldmVuIHRob3VnaCByZXNvbHV0aW9uIGZhaWxlZCB3ZSBuZWVkIHRvIHJldHVybiBTY2hlbWFFbnYgdG8gdGhyb3cgZXhjZXB0aW9uXG4gICAgLy8gc28gdGhhdCBjb21waWxlQXN5bmMgbG9hZHMgbWlzc2luZyBzY2hlbWEuXG4gICAgY29uc3QgeyBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgIGVudiA9IGVudiB8fCBuZXcgU2NoZW1hRW52KHsgc2NoZW1hLCBzY2hlbWFJZCwgcm9vdCwgYmFzZUlkIH0pO1xuICAgIGlmIChlbnYuc2NoZW1hICE9PSBlbnYucm9vdC5zY2hlbWEpXG4gICAgICAgIHJldHVybiBlbnY7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qKiBAdHlwZSB7KHZhbHVlOiBzdHJpbmcpID0+IGJvb2xlYW59ICovXG5jb25zdCBpc1VVSUQgPSBSZWdFeHAucHJvdG90eXBlLnRlc3QuYmluZCgvXltcXGRhLWZdezh9LVtcXGRhLWZdezR9LVtcXGRhLWZdezR9LVtcXGRhLWZdezR9LVtcXGRhLWZdezEyfSQvaXUpXG5cbi8qKiBAdHlwZSB7KHZhbHVlOiBzdHJpbmcpID0+IGJvb2xlYW59ICovXG5jb25zdCBpc0lQdjQgPSBSZWdFeHAucHJvdG90eXBlLnRlc3QuYmluZCgvXig/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGR7Mn18WzEtOV1cXGR8XFxkKVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkezJ9fFsxLTldXFxkfFxcZCkkL3UpXG5cbi8qKlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBpbnB1dFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc3RyaW5nQXJyYXlUb0hleFN0cmlwcGVkIChpbnB1dCkge1xuICBsZXQgYWNjID0gJydcbiAgbGV0IGNvZGUgPSAwXG4gIGxldCBpID0gMFxuXG4gIGZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGNvZGUgPSBpbnB1dFtpXS5jaGFyQ29kZUF0KDApXG4gICAgaWYgKGNvZGUgPT09IDQ4KSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoISgoY29kZSA+PSA0OCAmJiBjb2RlIDw9IDU3KSB8fCAoY29kZSA+PSA2NSAmJiBjb2RlIDw9IDcwKSB8fCAoY29kZSA+PSA5NyAmJiBjb2RlIDw9IDEwMikpKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgYWNjICs9IGlucHV0W2ldXG4gICAgYnJlYWtcbiAgfVxuXG4gIGZvciAoaSArPSAxOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICBjb2RlID0gaW5wdXRbaV0uY2hhckNvZGVBdCgwKVxuICAgIGlmICghKChjb2RlID49IDQ4ICYmIGNvZGUgPD0gNTcpIHx8IChjb2RlID49IDY1ICYmIGNvZGUgPD0gNzApIHx8IChjb2RlID49IDk3ICYmIGNvZGUgPD0gMTAyKSkpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBhY2MgKz0gaW5wdXRbaV1cbiAgfVxuICByZXR1cm4gYWNjXG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gR2V0SVBWNlJlc3VsdFxuICogQHByb3BlcnR5IHtib29sZWFufSBlcnJvciAtIEluZGljYXRlcyBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgSVB2NiBhZGRyZXNzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFkZHJlc3MgLSBUaGUgcGFyc2VkIElQdjYgYWRkcmVzcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbem9uZV0gLSBUaGUgem9uZSBpZGVudGlmaWVyLCBpZiBwcmVzZW50LlxuICovXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3Qgbm9uU2ltcGxlRG9tYWluID0gUmVnRXhwLnByb3RvdHlwZS50ZXN0LmJpbmQoL1teIVwiJCYnKCkqKyxcXC0uOz1fYGEtent9fl0vdSlcblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGJ1ZmZlclxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbnN1bWVJc1pvbmUgKGJ1ZmZlcikge1xuICBidWZmZXIubGVuZ3RoID0gMFxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gYnVmZmVyXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGFkZHJlc3NcbiAqIEBwYXJhbSB7R2V0SVBWNlJlc3VsdH0gb3V0cHV0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29uc3VtZUhleHRldHMgKGJ1ZmZlciwgYWRkcmVzcywgb3V0cHV0KSB7XG4gIGlmIChidWZmZXIubGVuZ3RoKSB7XG4gICAgY29uc3QgaGV4ID0gc3RyaW5nQXJyYXlUb0hleFN0cmlwcGVkKGJ1ZmZlcilcbiAgICBpZiAoaGV4ICE9PSAnJykge1xuICAgICAgYWRkcmVzcy5wdXNoKGhleClcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0LmVycm9yID0gdHJ1ZVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGJ1ZmZlci5sZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEByZXR1cm5zIHtHZXRJUFY2UmVzdWx0fVxuICovXG5mdW5jdGlvbiBnZXRJUFY2IChpbnB1dCkge1xuICBsZXQgdG9rZW5Db3VudCA9IDBcbiAgY29uc3Qgb3V0cHV0ID0geyBlcnJvcjogZmFsc2UsIGFkZHJlc3M6ICcnLCB6b25lOiAnJyB9XG4gIC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn0gKi9cbiAgY29uc3QgYWRkcmVzcyA9IFtdXG4gIC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn0gKi9cbiAgY29uc3QgYnVmZmVyID0gW11cbiAgbGV0IGVuZGlwdjZFbmNvdW50ZXJlZCA9IGZhbHNlXG4gIGxldCBlbmRJcHY2ID0gZmFsc2VcblxuICBsZXQgY29uc3VtZSA9IGNvbnN1bWVIZXh0ZXRzXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGN1cnNvciA9IGlucHV0W2ldXG4gICAgaWYgKGN1cnNvciA9PT0gJ1snIHx8IGN1cnNvciA9PT0gJ10nKSB7IGNvbnRpbnVlIH1cbiAgICBpZiAoY3Vyc29yID09PSAnOicpIHtcbiAgICAgIGlmIChlbmRpcHY2RW5jb3VudGVyZWQgPT09IHRydWUpIHtcbiAgICAgICAgZW5kSXB2NiA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmICghY29uc3VtZShidWZmZXIsIGFkZHJlc3MsIG91dHB1dCkpIHsgYnJlYWsgfVxuICAgICAgaWYgKCsrdG9rZW5Db3VudCA+IDcpIHtcbiAgICAgICAgLy8gbm90IHZhbGlkXG4gICAgICAgIG91dHB1dC5lcnJvciA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGlmIChpID4gMCAmJiBpbnB1dFtpIC0gMV0gPT09ICc6Jykge1xuICAgICAgICBlbmRpcHY2RW5jb3VudGVyZWQgPSB0cnVlXG4gICAgICB9XG4gICAgICBhZGRyZXNzLnB1c2goJzonKVxuICAgICAgY29udGludWVcbiAgICB9IGVsc2UgaWYgKGN1cnNvciA9PT0gJyUnKSB7XG4gICAgICBpZiAoIWNvbnN1bWUoYnVmZmVyLCBhZGRyZXNzLCBvdXRwdXQpKSB7IGJyZWFrIH1cbiAgICAgIC8vIHN3aXRjaCB0byB6b25lIGRldGVjdGlvblxuICAgICAgY29uc3VtZSA9IGNvbnN1bWVJc1pvbmVcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmZmVyLnB1c2goY3Vyc29yKVxuICAgICAgY29udGludWVcbiAgICB9XG4gIH1cbiAgaWYgKGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoY29uc3VtZSA9PT0gY29uc3VtZUlzWm9uZSkge1xuICAgICAgb3V0cHV0LnpvbmUgPSBidWZmZXIuam9pbignJylcbiAgICB9IGVsc2UgaWYgKGVuZElwdjYpIHtcbiAgICAgIGFkZHJlc3MucHVzaChidWZmZXIuam9pbignJykpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZHJlc3MucHVzaChzdHJpbmdBcnJheVRvSGV4U3RyaXBwZWQoYnVmZmVyKSlcbiAgICB9XG4gIH1cbiAgb3V0cHV0LmFkZHJlc3MgPSBhZGRyZXNzLmpvaW4oJycpXG4gIHJldHVybiBvdXRwdXRcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBOb3JtYWxpemVJUHY2UmVzdWx0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gaG9zdCAtIFRoZSBub3JtYWxpemVkIGhvc3QuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2VzY2FwZWRIb3N0XSAtIFRoZSBlc2NhcGVkIGhvc3QuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzSVBWNiAtIEluZGljYXRlcyBpZiB0aGUgaG9zdCBpcyBhbiBJUHY2IGFkZHJlc3MuXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaG9zdFxuICogQHJldHVybnMge05vcm1hbGl6ZUlQdjZSZXN1bHR9XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUlQdjYgKGhvc3QpIHtcbiAgaWYgKGZpbmRUb2tlbihob3N0LCAnOicpIDwgMikgeyByZXR1cm4geyBob3N0LCBpc0lQVjY6IGZhbHNlIH0gfVxuICBjb25zdCBpcHY2ID0gZ2V0SVBWNihob3N0KVxuXG4gIGlmICghaXB2Ni5lcnJvcikge1xuICAgIGxldCBuZXdIb3N0ID0gaXB2Ni5hZGRyZXNzXG4gICAgbGV0IGVzY2FwZWRIb3N0ID0gaXB2Ni5hZGRyZXNzXG4gICAgaWYgKGlwdjYuem9uZSkge1xuICAgICAgbmV3SG9zdCArPSAnJScgKyBpcHY2LnpvbmVcbiAgICAgIGVzY2FwZWRIb3N0ICs9ICclMjUnICsgaXB2Ni56b25lXG4gICAgfVxuICAgIHJldHVybiB7IGhvc3Q6IG5ld0hvc3QsIGlzSVBWNjogdHJ1ZSwgZXNjYXBlZEhvc3QgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IGhvc3QsIGlzSVBWNjogZmFsc2UgfVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBmaW5kVG9rZW4gKHN0ciwgdG9rZW4pIHtcbiAgbGV0IGluZCA9IDBcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3RyW2ldID09PSB0b2tlbikgaW5kKytcbiAgfVxuICByZXR1cm4gaW5kXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKlxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzM5ODYjc2VjdGlvbi01LjIuNFxuICovXG5mdW5jdGlvbiByZW1vdmVEb3RTZWdtZW50cyAocGF0aCkge1xuICBsZXQgaW5wdXQgPSBwYXRoXG4gIGNvbnN0IG91dHB1dCA9IFtdXG4gIGxldCBuZXh0U2xhc2ggPSAtMVxuICBsZXQgbGVuID0gMFxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25kLWFzc2lnblxuICB3aGlsZSAobGVuID0gaW5wdXQubGVuZ3RoKSB7XG4gICAgaWYgKGxlbiA9PT0gMSkge1xuICAgICAgaWYgKGlucHV0ID09PSAnLicpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09ICcvJykge1xuICAgICAgICBvdXRwdXQucHVzaCgnLycpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXQucHVzaChpbnB1dClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGxlbiA9PT0gMikge1xuICAgICAgaWYgKGlucHV0WzBdID09PSAnLicpIHtcbiAgICAgICAgaWYgKGlucHV0WzFdID09PSAnLicpIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0WzFdID09PSAnLycpIHtcbiAgICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDIpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpbnB1dFswXSA9PT0gJy8nKSB7XG4gICAgICAgIGlmIChpbnB1dFsxXSA9PT0gJy4nIHx8IGlucHV0WzFdID09PSAnLycpIHtcbiAgICAgICAgICBvdXRwdXQucHVzaCgnLycpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobGVuID09PSAzKSB7XG4gICAgICBpZiAoaW5wdXQgPT09ICcvLi4nKSB7XG4gICAgICAgIGlmIChvdXRwdXQubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgb3V0cHV0LnBvcCgpXG4gICAgICAgIH1cbiAgICAgICAgb3V0cHV0LnB1c2goJy8nKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaW5wdXRbMF0gPT09ICcuJykge1xuICAgICAgaWYgKGlucHV0WzFdID09PSAnLicpIHtcbiAgICAgICAgaWYgKGlucHV0WzJdID09PSAnLycpIHtcbiAgICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDMpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpbnB1dFsxXSA9PT0gJy8nKSB7XG4gICAgICAgIGlucHV0ID0gaW5wdXQuc2xpY2UoMilcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlucHV0WzBdID09PSAnLycpIHtcbiAgICAgIGlmIChpbnB1dFsxXSA9PT0gJy4nKSB7XG4gICAgICAgIGlmIChpbnB1dFsyXSA9PT0gJy8nKSB7XG4gICAgICAgICAgaW5wdXQgPSBpbnB1dC5zbGljZSgyKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXRbMl0gPT09ICcuJykge1xuICAgICAgICAgIGlmIChpbnB1dFszXSA9PT0gJy8nKSB7XG4gICAgICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDMpXG4gICAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICBvdXRwdXQucG9wKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUnVsZSAyRTogTW92ZSBub3JtYWwgcGF0aCBzZWdtZW50IHRvIG91dHB1dFxuICAgIGlmICgobmV4dFNsYXNoID0gaW5wdXQuaW5kZXhPZignLycsIDEpKSA9PT0gLTEpIHtcbiAgICAgIG91dHB1dC5wdXNoKGlucHV0KVxuICAgICAgYnJlYWtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0LnB1c2goaW5wdXQuc2xpY2UoMCwgbmV4dFNsYXNoKSlcbiAgICAgIGlucHV0ID0gaW5wdXQuc2xpY2UobmV4dFNsYXNoKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9IGNvbXBvbmVudFxuICogQHBhcmFtIHtib29sZWFufSBlc2NcbiAqIEByZXR1cm5zIHtpbXBvcnQoJy4uL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyAoY29tcG9uZW50LCBlc2MpIHtcbiAgY29uc3QgZnVuYyA9IGVzYyAhPT0gdHJ1ZSA/IGVzY2FwZSA6IHVuZXNjYXBlXG4gIGlmIChjb21wb25lbnQuc2NoZW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb21wb25lbnQuc2NoZW1lID0gZnVuYyhjb21wb25lbnQuc2NoZW1lKVxuICB9XG4gIGlmIChjb21wb25lbnQudXNlcmluZm8gIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbXBvbmVudC51c2VyaW5mbyA9IGZ1bmMoY29tcG9uZW50LnVzZXJpbmZvKVxuICB9XG4gIGlmIChjb21wb25lbnQuaG9zdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29tcG9uZW50Lmhvc3QgPSBmdW5jKGNvbXBvbmVudC5ob3N0KVxuICB9XG4gIGlmIChjb21wb25lbnQucGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29tcG9uZW50LnBhdGggPSBmdW5jKGNvbXBvbmVudC5wYXRoKVxuICB9XG4gIGlmIChjb21wb25lbnQucXVlcnkgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbXBvbmVudC5xdWVyeSA9IGZ1bmMoY29tcG9uZW50LnF1ZXJ5KVxuICB9XG4gIGlmIChjb21wb25lbnQuZnJhZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbXBvbmVudC5mcmFnbWVudCA9IGZ1bmMoY29tcG9uZW50LmZyYWdtZW50KVxuICB9XG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9IGNvbXBvbmVudFxuICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIHJlY29tcG9zZUF1dGhvcml0eSAoY29tcG9uZW50KSB7XG4gIGNvbnN0IHVyaVRva2VucyA9IFtdXG5cbiAgaWYgKGNvbXBvbmVudC51c2VyaW5mbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdXJpVG9rZW5zLnB1c2goY29tcG9uZW50LnVzZXJpbmZvKVxuICAgIHVyaVRva2Vucy5wdXNoKCdAJylcbiAgfVxuXG4gIGlmIChjb21wb25lbnQuaG9zdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbGV0IGhvc3QgPSB1bmVzY2FwZShjb21wb25lbnQuaG9zdClcbiAgICBpZiAoIWlzSVB2NChob3N0KSkge1xuICAgICAgY29uc3QgaXBWNnJlcyA9IG5vcm1hbGl6ZUlQdjYoaG9zdClcbiAgICAgIGlmIChpcFY2cmVzLmlzSVBWNiA9PT0gdHJ1ZSkge1xuICAgICAgICBob3N0ID0gYFske2lwVjZyZXMuZXNjYXBlZEhvc3R9XWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhvc3QgPSBjb21wb25lbnQuaG9zdFxuICAgICAgfVxuICAgIH1cbiAgICB1cmlUb2tlbnMucHVzaChob3N0KVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjb21wb25lbnQucG9ydCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIGNvbXBvbmVudC5wb3J0ID09PSAnc3RyaW5nJykge1xuICAgIHVyaVRva2Vucy5wdXNoKCc6JylcbiAgICB1cmlUb2tlbnMucHVzaChTdHJpbmcoY29tcG9uZW50LnBvcnQpKVxuICB9XG5cbiAgcmV0dXJuIHVyaVRva2Vucy5sZW5ndGggPyB1cmlUb2tlbnMuam9pbignJykgOiB1bmRlZmluZWRcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBub25TaW1wbGVEb21haW4sXG4gIHJlY29tcG9zZUF1dGhvcml0eSxcbiAgbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcsXG4gIHJlbW92ZURvdFNlZ21lbnRzLFxuICBpc0lQdjQsXG4gIGlzVVVJRCxcbiAgbm9ybWFsaXplSVB2NixcbiAgc3RyaW5nQXJyYXlUb0hleFN0cmlwcGVkXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGlzVVVJRCB9ID0gcmVxdWlyZSgnLi91dGlscycpXG5jb25zdCBVUk5fUkVHID0gLyhbXFxkYS16XVtcXGRcXC1hLXpdezAsMzF9KTooKD86W1xcdyEkJygpKissXFwtLjo7PUBdfCVbXFxkYS1mXXsyfSkrKS9pdVxuXG5jb25zdCBzdXBwb3J0ZWRTY2hlbWVOYW1lcyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbJ2h0dHAnLCAnaHR0cHMnLCAnd3MnLFxuICAnd3NzJywgJ3VybicsICd1cm46dXVpZCddKVxuXG4vKiogQHR5cGVkZWYge3N1cHBvcnRlZFNjaGVtZU5hbWVzW251bWJlcl19IFNjaGVtZU5hbWUgKi9cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge25hbWUgaXMgU2NoZW1lTmFtZX1cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZFNjaGVtZU5hbWUgKG5hbWUpIHtcbiAgcmV0dXJuIHN1cHBvcnRlZFNjaGVtZU5hbWVzLmluZGV4T2YoLyoqIEB0eXBlIHsqfSAqLyAobmFtZSkpICE9PSAtMVxufVxuXG4vKipcbiAqIEBjYWxsYmFjayBTY2hlbWVGblxuICogQHBhcmFtIHtpbXBvcnQoJy4uL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fSBjb21wb25lbnRcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi90eXBlcy9pbmRleCcpLk9wdGlvbnN9IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtpbXBvcnQoJy4uL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2NoZW1lSGFuZGxlclxuICogQHByb3BlcnR5IHtTY2hlbWVOYW1lfSBzY2hlbWUgLSBUaGUgc2NoZW1lIG5hbWUuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtkb21haW5Ib3N0XSAtIEluZGljYXRlcyBpZiB0aGUgc2NoZW1lIHN1cHBvcnRzIGRvbWFpbiBob3N0cy5cbiAqIEBwcm9wZXJ0eSB7U2NoZW1lRm59IHBhcnNlIC0gRnVuY3Rpb24gdG8gcGFyc2UgdGhlIFVSSSBjb21wb25lbnQgZm9yIHRoaXMgc2NoZW1lLlxuICogQHByb3BlcnR5IHtTY2hlbWVGbn0gc2VyaWFsaXplIC0gRnVuY3Rpb24gdG8gc2VyaWFsaXplIHRoZSBVUkkgY29tcG9uZW50IGZvciB0aGlzIHNjaGVtZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3NraXBOb3JtYWxpemVdIC0gSW5kaWNhdGVzIGlmIG5vcm1hbGl6YXRpb24gc2hvdWxkIGJlIHNraXBwZWQgZm9yIHRoaXMgc2NoZW1lLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbYWJzb2x1dGVQYXRoXSAtIEluZGljYXRlcyBpZiB0aGUgc2NoZW1lIHVzZXMgYWJzb2x1dGUgcGF0aHMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFt1bmljb2RlU3VwcG9ydF0gLSBJbmRpY2F0ZXMgaWYgdGhlIHNjaGVtZSBzdXBwb3J0cyBVbmljb2RlLlxuICovXG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4uL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fSB3c0NvbXBvbmVudFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHdzSXNTZWN1cmUgKHdzQ29tcG9uZW50KSB7XG4gIGlmICh3c0NvbXBvbmVudC5zZWN1cmUgPT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGVsc2UgaWYgKHdzQ29tcG9uZW50LnNlY3VyZSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIGlmICh3c0NvbXBvbmVudC5zY2hlbWUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgd3NDb21wb25lbnQuc2NoZW1lLmxlbmd0aCA9PT0gMyAmJlxuICAgICAgKHdzQ29tcG9uZW50LnNjaGVtZVswXSA9PT0gJ3cnIHx8IHdzQ29tcG9uZW50LnNjaGVtZVswXSA9PT0gJ1cnKSAmJlxuICAgICAgKHdzQ29tcG9uZW50LnNjaGVtZVsxXSA9PT0gJ3MnIHx8IHdzQ29tcG9uZW50LnNjaGVtZVsxXSA9PT0gJ1MnKSAmJlxuICAgICAgKHdzQ29tcG9uZW50LnNjaGVtZVsyXSA9PT0gJ3MnIHx8IHdzQ29tcG9uZW50LnNjaGVtZVsyXSA9PT0gJ1MnKVxuICAgIClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gaHR0cFBhcnNlIChjb21wb25lbnQpIHtcbiAgaWYgKCFjb21wb25lbnQuaG9zdCkge1xuICAgIGNvbXBvbmVudC5lcnJvciA9IGNvbXBvbmVudC5lcnJvciB8fCAnSFRUUCBVUklzIG11c3QgaGF2ZSBhIGhvc3QuJ1xuICB9XG5cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gaHR0cFNlcmlhbGl6ZSAoY29tcG9uZW50KSB7XG4gIGNvbnN0IHNlY3VyZSA9IFN0cmluZyhjb21wb25lbnQuc2NoZW1lKS50b0xvd2VyQ2FzZSgpID09PSAnaHR0cHMnXG5cbiAgLy8gbm9ybWFsaXplIHRoZSBkZWZhdWx0IHBvcnRcbiAgaWYgKGNvbXBvbmVudC5wb3J0ID09PSAoc2VjdXJlID8gNDQzIDogODApIHx8IGNvbXBvbmVudC5wb3J0ID09PSAnJykge1xuICAgIGNvbXBvbmVudC5wb3J0ID0gdW5kZWZpbmVkXG4gIH1cblxuICAvLyBub3JtYWxpemUgdGhlIGVtcHR5IHBhdGhcbiAgaWYgKCFjb21wb25lbnQucGF0aCkge1xuICAgIGNvbXBvbmVudC5wYXRoID0gJy8nXG4gIH1cblxuICAvLyBOT1RFOiBXZSBkbyBub3QgcGFyc2UgcXVlcnkgc3RyaW5ncyBmb3IgSFRUUCBVUklzXG4gIC8vIGFzIFdXVyBGb3JtIFVybCBFbmNvZGVkIHF1ZXJ5IHN0cmluZ3MgYXJlIHBhcnQgb2YgdGhlIEhUTUw0KyBzcGVjLFxuICAvLyBhbmQgbm90IHRoZSBIVFRQIHNwZWMuXG5cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gd3NQYXJzZSAod3NDb21wb25lbnQpIHtcbi8vIGluZGljYXRlIGlmIHRoZSBzZWN1cmUgZmxhZyBpcyBzZXRcbiAgd3NDb21wb25lbnQuc2VjdXJlID0gd3NJc1NlY3VyZSh3c0NvbXBvbmVudClcblxuICAvLyBjb25zdHJ1Y3QgcmVzb3VjZSBuYW1lXG4gIHdzQ29tcG9uZW50LnJlc291cmNlTmFtZSA9ICh3c0NvbXBvbmVudC5wYXRoIHx8ICcvJykgKyAod3NDb21wb25lbnQucXVlcnkgPyAnPycgKyB3c0NvbXBvbmVudC5xdWVyeSA6ICcnKVxuICB3c0NvbXBvbmVudC5wYXRoID0gdW5kZWZpbmVkXG4gIHdzQ29tcG9uZW50LnF1ZXJ5ID0gdW5kZWZpbmVkXG5cbiAgcmV0dXJuIHdzQ29tcG9uZW50XG59XG5cbi8qKiBAdHlwZSB7U2NoZW1lRm59ICovXG5mdW5jdGlvbiB3c1NlcmlhbGl6ZSAod3NDb21wb25lbnQpIHtcbi8vIG5vcm1hbGl6ZSB0aGUgZGVmYXVsdCBwb3J0XG4gIGlmICh3c0NvbXBvbmVudC5wb3J0ID09PSAod3NJc1NlY3VyZSh3c0NvbXBvbmVudCkgPyA0NDMgOiA4MCkgfHwgd3NDb21wb25lbnQucG9ydCA9PT0gJycpIHtcbiAgICB3c0NvbXBvbmVudC5wb3J0ID0gdW5kZWZpbmVkXG4gIH1cblxuICAvLyBlbnN1cmUgc2NoZW1lIG1hdGNoZXMgc2VjdXJlIGZsYWdcbiAgaWYgKHR5cGVvZiB3c0NvbXBvbmVudC5zZWN1cmUgPT09ICdib29sZWFuJykge1xuICAgIHdzQ29tcG9uZW50LnNjaGVtZSA9ICh3c0NvbXBvbmVudC5zZWN1cmUgPyAnd3NzJyA6ICd3cycpXG4gICAgd3NDb21wb25lbnQuc2VjdXJlID0gdW5kZWZpbmVkXG4gIH1cblxuICAvLyByZWNvbnN0cnVjdCBwYXRoIGZyb20gcmVzb3VyY2UgbmFtZVxuICBpZiAod3NDb21wb25lbnQucmVzb3VyY2VOYW1lKSB7XG4gICAgY29uc3QgW3BhdGgsIHF1ZXJ5XSA9IHdzQ29tcG9uZW50LnJlc291cmNlTmFtZS5zcGxpdCgnPycpXG4gICAgd3NDb21wb25lbnQucGF0aCA9IChwYXRoICYmIHBhdGggIT09ICcvJyA/IHBhdGggOiB1bmRlZmluZWQpXG4gICAgd3NDb21wb25lbnQucXVlcnkgPSBxdWVyeVxuICAgIHdzQ29tcG9uZW50LnJlc291cmNlTmFtZSA9IHVuZGVmaW5lZFxuICB9XG5cbiAgLy8gZm9yYmlkIGZyYWdtZW50IGNvbXBvbmVudFxuICB3c0NvbXBvbmVudC5mcmFnbWVudCA9IHVuZGVmaW5lZFxuXG4gIHJldHVybiB3c0NvbXBvbmVudFxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gdXJuUGFyc2UgKHVybkNvbXBvbmVudCwgb3B0aW9ucykge1xuICBpZiAoIXVybkNvbXBvbmVudC5wYXRoKSB7XG4gICAgdXJuQ29tcG9uZW50LmVycm9yID0gJ1VSTiBjYW4gbm90IGJlIHBhcnNlZCdcbiAgICByZXR1cm4gdXJuQ29tcG9uZW50XG4gIH1cbiAgY29uc3QgbWF0Y2hlcyA9IHVybkNvbXBvbmVudC5wYXRoLm1hdGNoKFVSTl9SRUcpXG4gIGlmIChtYXRjaGVzKSB7XG4gICAgY29uc3Qgc2NoZW1lID0gb3B0aW9ucy5zY2hlbWUgfHwgdXJuQ29tcG9uZW50LnNjaGVtZSB8fCAndXJuJ1xuICAgIHVybkNvbXBvbmVudC5uaWQgPSBtYXRjaGVzWzFdLnRvTG93ZXJDYXNlKClcbiAgICB1cm5Db21wb25lbnQubnNzID0gbWF0Y2hlc1syXVxuICAgIGNvbnN0IHVyblNjaGVtZSA9IGAke3NjaGVtZX06JHtvcHRpb25zLm5pZCB8fCB1cm5Db21wb25lbnQubmlkfWBcbiAgICBjb25zdCBzY2hlbWVIYW5kbGVyID0gZ2V0U2NoZW1lSGFuZGxlcih1cm5TY2hlbWUpXG4gICAgdXJuQ29tcG9uZW50LnBhdGggPSB1bmRlZmluZWRcblxuICAgIGlmIChzY2hlbWVIYW5kbGVyKSB7XG4gICAgICB1cm5Db21wb25lbnQgPSBzY2hlbWVIYW5kbGVyLnBhcnNlKHVybkNvbXBvbmVudCwgb3B0aW9ucylcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdXJuQ29tcG9uZW50LmVycm9yID0gdXJuQ29tcG9uZW50LmVycm9yIHx8ICdVUk4gY2FuIG5vdCBiZSBwYXJzZWQuJ1xuICB9XG5cbiAgcmV0dXJuIHVybkNvbXBvbmVudFxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gdXJuU2VyaWFsaXplICh1cm5Db21wb25lbnQsIG9wdGlvbnMpIHtcbiAgaWYgKHVybkNvbXBvbmVudC5uaWQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVVJOIHdpdGhvdXQgbmlkIGNhbm5vdCBiZSBzZXJpYWxpemVkJylcbiAgfVxuICBjb25zdCBzY2hlbWUgPSBvcHRpb25zLnNjaGVtZSB8fCB1cm5Db21wb25lbnQuc2NoZW1lIHx8ICd1cm4nXG4gIGNvbnN0IG5pZCA9IHVybkNvbXBvbmVudC5uaWQudG9Mb3dlckNhc2UoKVxuICBjb25zdCB1cm5TY2hlbWUgPSBgJHtzY2hlbWV9OiR7b3B0aW9ucy5uaWQgfHwgbmlkfWBcbiAgY29uc3Qgc2NoZW1lSGFuZGxlciA9IGdldFNjaGVtZUhhbmRsZXIodXJuU2NoZW1lKVxuXG4gIGlmIChzY2hlbWVIYW5kbGVyKSB7XG4gICAgdXJuQ29tcG9uZW50ID0gc2NoZW1lSGFuZGxlci5zZXJpYWxpemUodXJuQ29tcG9uZW50LCBvcHRpb25zKVxuICB9XG5cbiAgY29uc3QgdXJpQ29tcG9uZW50ID0gdXJuQ29tcG9uZW50XG4gIGNvbnN0IG5zcyA9IHVybkNvbXBvbmVudC5uc3NcbiAgdXJpQ29tcG9uZW50LnBhdGggPSBgJHtuaWQgfHwgb3B0aW9ucy5uaWR9OiR7bnNzfWBcblxuICBvcHRpb25zLnNraXBFc2NhcGUgPSB0cnVlXG4gIHJldHVybiB1cmlDb21wb25lbnRcbn1cblxuLyoqIEB0eXBlIHtTY2hlbWVGbn0gKi9cbmZ1bmN0aW9uIHVybnV1aWRQYXJzZSAodXJuQ29tcG9uZW50LCBvcHRpb25zKSB7XG4gIGNvbnN0IHV1aWRDb21wb25lbnQgPSB1cm5Db21wb25lbnRcbiAgdXVpZENvbXBvbmVudC51dWlkID0gdXVpZENvbXBvbmVudC5uc3NcbiAgdXVpZENvbXBvbmVudC5uc3MgPSB1bmRlZmluZWRcblxuICBpZiAoIW9wdGlvbnMudG9sZXJhbnQgJiYgKCF1dWlkQ29tcG9uZW50LnV1aWQgfHwgIWlzVVVJRCh1dWlkQ29tcG9uZW50LnV1aWQpKSkge1xuICAgIHV1aWRDb21wb25lbnQuZXJyb3IgPSB1dWlkQ29tcG9uZW50LmVycm9yIHx8ICdVVUlEIGlzIG5vdCB2YWxpZC4nXG4gIH1cblxuICByZXR1cm4gdXVpZENvbXBvbmVudFxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gdXJudXVpZFNlcmlhbGl6ZSAodXVpZENvbXBvbmVudCkge1xuICBjb25zdCB1cm5Db21wb25lbnQgPSB1dWlkQ29tcG9uZW50XG4gIC8vIG5vcm1hbGl6ZSBVVUlEXG4gIHVybkNvbXBvbmVudC5uc3MgPSAodXVpZENvbXBvbmVudC51dWlkIHx8ICcnKS50b0xvd2VyQ2FzZSgpXG4gIHJldHVybiB1cm5Db21wb25lbnRcbn1cblxuY29uc3QgaHR0cCA9IC8qKiBAdHlwZSB7U2NoZW1lSGFuZGxlcn0gKi8gKHtcbiAgc2NoZW1lOiAnaHR0cCcsXG4gIGRvbWFpbkhvc3Q6IHRydWUsXG4gIHBhcnNlOiBodHRwUGFyc2UsXG4gIHNlcmlhbGl6ZTogaHR0cFNlcmlhbGl6ZVxufSlcblxuY29uc3QgaHR0cHMgPSAvKiogQHR5cGUge1NjaGVtZUhhbmRsZXJ9ICovICh7XG4gIHNjaGVtZTogJ2h0dHBzJyxcbiAgZG9tYWluSG9zdDogaHR0cC5kb21haW5Ib3N0LFxuICBwYXJzZTogaHR0cFBhcnNlLFxuICBzZXJpYWxpemU6IGh0dHBTZXJpYWxpemVcbn0pXG5cbmNvbnN0IHdzID0gLyoqIEB0eXBlIHtTY2hlbWVIYW5kbGVyfSAqLyAoe1xuICBzY2hlbWU6ICd3cycsXG4gIGRvbWFpbkhvc3Q6IHRydWUsXG4gIHBhcnNlOiB3c1BhcnNlLFxuICBzZXJpYWxpemU6IHdzU2VyaWFsaXplXG59KVxuXG5jb25zdCB3c3MgPSAvKiogQHR5cGUge1NjaGVtZUhhbmRsZXJ9ICovICh7XG4gIHNjaGVtZTogJ3dzcycsXG4gIGRvbWFpbkhvc3Q6IHdzLmRvbWFpbkhvc3QsXG4gIHBhcnNlOiB3cy5wYXJzZSxcbiAgc2VyaWFsaXplOiB3cy5zZXJpYWxpemVcbn0pXG5cbmNvbnN0IHVybiA9IC8qKiBAdHlwZSB7U2NoZW1lSGFuZGxlcn0gKi8gKHtcbiAgc2NoZW1lOiAndXJuJyxcbiAgcGFyc2U6IHVyblBhcnNlLFxuICBzZXJpYWxpemU6IHVyblNlcmlhbGl6ZSxcbiAgc2tpcE5vcm1hbGl6ZTogdHJ1ZVxufSlcblxuY29uc3QgdXJudXVpZCA9IC8qKiBAdHlwZSB7U2NoZW1lSGFuZGxlcn0gKi8gKHtcbiAgc2NoZW1lOiAndXJuOnV1aWQnLFxuICBwYXJzZTogdXJudXVpZFBhcnNlLFxuICBzZXJpYWxpemU6IHVybnV1aWRTZXJpYWxpemUsXG4gIHNraXBOb3JtYWxpemU6IHRydWVcbn0pXG5cbmNvbnN0IFNDSEVNRVMgPSAvKiogQHR5cGUge1JlY29yZDxTY2hlbWVOYW1lLCBTY2hlbWVIYW5kbGVyPn0gKi8gKHtcbiAgaHR0cCxcbiAgaHR0cHMsXG4gIHdzLFxuICB3c3MsXG4gIHVybixcbiAgJ3Vybjp1dWlkJzogdXJudXVpZFxufSlcblxuT2JqZWN0LnNldFByb3RvdHlwZU9mKFNDSEVNRVMsIG51bGwpXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBzY2hlbWVcbiAqIEByZXR1cm5zIHtTY2hlbWVIYW5kbGVyfHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gZ2V0U2NoZW1lSGFuZGxlciAoc2NoZW1lKSB7XG4gIHJldHVybiAoXG4gICAgc2NoZW1lICYmIChcbiAgICAgIFNDSEVNRVNbLyoqIEB0eXBlIHtTY2hlbWVOYW1lfSAqLyAoc2NoZW1lKV0gfHxcbiAgICAgIFNDSEVNRVNbLyoqIEB0eXBlIHtTY2hlbWVOYW1lfSAqLyhzY2hlbWUudG9Mb3dlckNhc2UoKSldKVxuICApIHx8XG4gICAgdW5kZWZpbmVkXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB3c0lzU2VjdXJlLFxuICBTQ0hFTUVTLFxuICBpc1ZhbGlkU2NoZW1lTmFtZSxcbiAgZ2V0U2NoZW1lSGFuZGxlcixcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgbm9ybWFsaXplSVB2NiwgcmVtb3ZlRG90U2VnbWVudHMsIHJlY29tcG9zZUF1dGhvcml0eSwgbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcsIGlzSVB2NCwgbm9uU2ltcGxlRG9tYWluIH0gPSByZXF1aXJlKCcuL2xpYi91dGlscycpXG5jb25zdCB7IFNDSEVNRVMsIGdldFNjaGVtZUhhbmRsZXIgfSA9IHJlcXVpcmUoJy4vbGliL3NjaGVtZXMnKVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7aW1wb3J0KCcuL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fHN0cmluZ30gVFxuICogQHBhcmFtIHtUfSB1cmlcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3R5cGVzL2luZGV4JykuT3B0aW9uc30gW29wdGlvbnNdXG4gKiBAcmV0dXJucyB7VH1cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplICh1cmksIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiB1cmkgPT09ICdzdHJpbmcnKSB7XG4gICAgdXJpID0gLyoqIEB0eXBlIHtUfSAqLyAoc2VyaWFsaXplKHBhcnNlKHVyaSwgb3B0aW9ucyksIG9wdGlvbnMpKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB1cmkgPT09ICdvYmplY3QnKSB7XG4gICAgdXJpID0gLyoqIEB0eXBlIHtUfSAqLyAocGFyc2Uoc2VyaWFsaXplKHVyaSwgb3B0aW9ucyksIG9wdGlvbnMpKVxuICB9XG4gIHJldHVybiB1cmlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSSVxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJJXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi90eXBlcy9pbmRleCcpLk9wdGlvbnN9IFtvcHRpb25zXVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZSAoYmFzZVVSSSwgcmVsYXRpdmVVUkksIG9wdGlvbnMpIHtcbiAgY29uc3Qgc2NoZW1lbGVzc09wdGlvbnMgPSBvcHRpb25zID8gT2JqZWN0LmFzc2lnbih7IHNjaGVtZTogJ251bGwnIH0sIG9wdGlvbnMpIDogeyBzY2hlbWU6ICdudWxsJyB9XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZUNvbXBvbmVudChwYXJzZShiYXNlVVJJLCBzY2hlbWVsZXNzT3B0aW9ucyksIHBhcnNlKHJlbGF0aXZlVVJJLCBzY2hlbWVsZXNzT3B0aW9ucyksIHNjaGVtZWxlc3NPcHRpb25zLCB0cnVlKVxuICBzY2hlbWVsZXNzT3B0aW9ucy5za2lwRXNjYXBlID0gdHJ1ZVxuICByZXR1cm4gc2VyaWFsaXplKHJlc29sdmVkLCBzY2hlbWVsZXNzT3B0aW9ucylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCAoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9IGJhc2VcbiAqIEBwYXJhbSB7aW1wb3J0ICgnLi90eXBlcy9pbmRleCcpLlVSSUNvbXBvbmVudH0gcmVsYXRpdmVcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3R5cGVzL2luZGV4JykuT3B0aW9uc30gW29wdGlvbnNdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtza2lwTm9ybWFsaXphdGlvbj1mYWxzZV1cbiAqIEByZXR1cm5zIHtpbXBvcnQgKCcuL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fVxuICovXG5mdW5jdGlvbiByZXNvbHZlQ29tcG9uZW50IChiYXNlLCByZWxhdGl2ZSwgb3B0aW9ucywgc2tpcE5vcm1hbGl6YXRpb24pIHtcbiAgLyoqIEB0eXBlIHtpbXBvcnQoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9ICovXG4gIGNvbnN0IHRhcmdldCA9IHt9XG4gIGlmICghc2tpcE5vcm1hbGl6YXRpb24pIHtcbiAgICBiYXNlID0gcGFyc2Uoc2VyaWFsaXplKGJhc2UsIG9wdGlvbnMpLCBvcHRpb25zKSAvLyBub3JtYWxpemUgYmFzZSBjb21wb25lbnRcbiAgICByZWxhdGl2ZSA9IHBhcnNlKHNlcmlhbGl6ZShyZWxhdGl2ZSwgb3B0aW9ucyksIG9wdGlvbnMpIC8vIG5vcm1hbGl6ZSByZWxhdGl2ZSBjb21wb25lbnRcbiAgfVxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuXG4gIGlmICghb3B0aW9ucy50b2xlcmFudCAmJiByZWxhdGl2ZS5zY2hlbWUpIHtcbiAgICB0YXJnZXQuc2NoZW1lID0gcmVsYXRpdmUuc2NoZW1lXG4gICAgLy8gdGFyZ2V0LmF1dGhvcml0eSA9IHJlbGF0aXZlLmF1dGhvcml0eTtcbiAgICB0YXJnZXQudXNlcmluZm8gPSByZWxhdGl2ZS51c2VyaW5mb1xuICAgIHRhcmdldC5ob3N0ID0gcmVsYXRpdmUuaG9zdFxuICAgIHRhcmdldC5wb3J0ID0gcmVsYXRpdmUucG9ydFxuICAgIHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCB8fCAnJylcbiAgICB0YXJnZXQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeVxuICB9IGVsc2Uge1xuICAgIGlmIChyZWxhdGl2ZS51c2VyaW5mbyAhPT0gdW5kZWZpbmVkIHx8IHJlbGF0aXZlLmhvc3QgIT09IHVuZGVmaW5lZCB8fCByZWxhdGl2ZS5wb3J0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHRhcmdldC5hdXRob3JpdHkgPSByZWxhdGl2ZS5hdXRob3JpdHk7XG4gICAgICB0YXJnZXQudXNlcmluZm8gPSByZWxhdGl2ZS51c2VyaW5mb1xuICAgICAgdGFyZ2V0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0XG4gICAgICB0YXJnZXQucG9ydCA9IHJlbGF0aXZlLnBvcnRcbiAgICAgIHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCB8fCAnJylcbiAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghcmVsYXRpdmUucGF0aCkge1xuICAgICAgICB0YXJnZXQucGF0aCA9IGJhc2UucGF0aFxuICAgICAgICBpZiAocmVsYXRpdmUucXVlcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0LnF1ZXJ5ID0gYmFzZS5xdWVyeVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocmVsYXRpdmUucGF0aFswXSA9PT0gJy8nKSB7XG4gICAgICAgICAgdGFyZ2V0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyhyZWxhdGl2ZS5wYXRoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICgoYmFzZS51c2VyaW5mbyAhPT0gdW5kZWZpbmVkIHx8IGJhc2UuaG9zdCAhPT0gdW5kZWZpbmVkIHx8IGJhc2UucG9ydCAhPT0gdW5kZWZpbmVkKSAmJiAhYmFzZS5wYXRoKSB7XG4gICAgICAgICAgICB0YXJnZXQucGF0aCA9ICcvJyArIHJlbGF0aXZlLnBhdGhcbiAgICAgICAgICB9IGVsc2UgaWYgKCFiYXNlLnBhdGgpIHtcbiAgICAgICAgICAgIHRhcmdldC5wYXRoID0gcmVsYXRpdmUucGF0aFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXQucGF0aCA9IGJhc2UucGF0aC5zbGljZSgwLCBiYXNlLnBhdGgubGFzdEluZGV4T2YoJy8nKSArIDEpICsgcmVsYXRpdmUucGF0aFxuICAgICAgICAgIH1cbiAgICAgICAgICB0YXJnZXQucGF0aCA9IHJlbW92ZURvdFNlZ21lbnRzKHRhcmdldC5wYXRoKVxuICAgICAgICB9XG4gICAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5XG4gICAgICB9XG4gICAgICAvLyB0YXJnZXQuYXV0aG9yaXR5ID0gYmFzZS5hdXRob3JpdHk7XG4gICAgICB0YXJnZXQudXNlcmluZm8gPSBiYXNlLnVzZXJpbmZvXG4gICAgICB0YXJnZXQuaG9zdCA9IGJhc2UuaG9zdFxuICAgICAgdGFyZ2V0LnBvcnQgPSBiYXNlLnBvcnRcbiAgICB9XG4gICAgdGFyZ2V0LnNjaGVtZSA9IGJhc2Uuc2NoZW1lXG4gIH1cblxuICB0YXJnZXQuZnJhZ21lbnQgPSByZWxhdGl2ZS5mcmFnbWVudFxuXG4gIHJldHVybiB0YXJnZXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCAoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR8c3RyaW5nfSB1cmlBXG4gKiBAcGFyYW0ge2ltcG9ydCAoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR8c3RyaW5nfSB1cmlCXG4gKiBAcGFyYW0ge2ltcG9ydCAoJy4vdHlwZXMvaW5kZXgnKS5PcHRpb25zfSBvcHRpb25zXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gZXF1YWwgKHVyaUEsIHVyaUIsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiB1cmlBID09PSAnc3RyaW5nJykge1xuICAgIHVyaUEgPSB1bmVzY2FwZSh1cmlBKVxuICAgIHVyaUEgPSBzZXJpYWxpemUobm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcocGFyc2UodXJpQSwgb3B0aW9ucyksIHRydWUpLCB7IC4uLm9wdGlvbnMsIHNraXBFc2NhcGU6IHRydWUgfSlcbiAgfSBlbHNlIGlmICh0eXBlb2YgdXJpQSA9PT0gJ29iamVjdCcpIHtcbiAgICB1cmlBID0gc2VyaWFsaXplKG5vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nKHVyaUEsIHRydWUpLCB7IC4uLm9wdGlvbnMsIHNraXBFc2NhcGU6IHRydWUgfSlcbiAgfVxuXG4gIGlmICh0eXBlb2YgdXJpQiA9PT0gJ3N0cmluZycpIHtcbiAgICB1cmlCID0gdW5lc2NhcGUodXJpQilcbiAgICB1cmlCID0gc2VyaWFsaXplKG5vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nKHBhcnNlKHVyaUIsIG9wdGlvbnMpLCB0cnVlKSwgeyAuLi5vcHRpb25zLCBza2lwRXNjYXBlOiB0cnVlIH0pXG4gIH0gZWxzZSBpZiAodHlwZW9mIHVyaUIgPT09ICdvYmplY3QnKSB7XG4gICAgdXJpQiA9IHNlcmlhbGl6ZShub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyh1cmlCLCB0cnVlKSwgeyAuLi5vcHRpb25zLCBza2lwRXNjYXBlOiB0cnVlIH0pXG4gIH1cblxuICByZXR1cm4gdXJpQS50b0xvd2VyQ2FzZSgpID09PSB1cmlCLnRvTG93ZXJDYXNlKClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlYWRvbmx5PGltcG9ydCgnLi90eXBlcy9pbmRleCcpLlVSSUNvbXBvbmVudD59IGNtcHRzXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi90eXBlcy9pbmRleCcpLk9wdGlvbnN9IFtvcHRzXVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplIChjbXB0cywgb3B0cykge1xuICBjb25zdCBjb21wb25lbnQgPSB7XG4gICAgaG9zdDogY21wdHMuaG9zdCxcbiAgICBzY2hlbWU6IGNtcHRzLnNjaGVtZSxcbiAgICB1c2VyaW5mbzogY21wdHMudXNlcmluZm8sXG4gICAgcG9ydDogY21wdHMucG9ydCxcbiAgICBwYXRoOiBjbXB0cy5wYXRoLFxuICAgIHF1ZXJ5OiBjbXB0cy5xdWVyeSxcbiAgICBuaWQ6IGNtcHRzLm5pZCxcbiAgICBuc3M6IGNtcHRzLm5zcyxcbiAgICB1dWlkOiBjbXB0cy51dWlkLFxuICAgIGZyYWdtZW50OiBjbXB0cy5mcmFnbWVudCxcbiAgICByZWZlcmVuY2U6IGNtcHRzLnJlZmVyZW5jZSxcbiAgICByZXNvdXJjZU5hbWU6IGNtcHRzLnJlc291cmNlTmFtZSxcbiAgICBzZWN1cmU6IGNtcHRzLnNlY3VyZSxcbiAgICBlcnJvcjogJydcbiAgfVxuICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0cylcbiAgY29uc3QgdXJpVG9rZW5zID0gW11cblxuICAvLyBmaW5kIHNjaGVtZSBoYW5kbGVyXG4gIGNvbnN0IHNjaGVtZUhhbmRsZXIgPSBnZXRTY2hlbWVIYW5kbGVyKG9wdGlvbnMuc2NoZW1lIHx8IGNvbXBvbmVudC5zY2hlbWUpXG5cbiAgLy8gcGVyZm9ybSBzY2hlbWUgc3BlY2lmaWMgc2VyaWFsaXphdGlvblxuICBpZiAoc2NoZW1lSGFuZGxlciAmJiBzY2hlbWVIYW5kbGVyLnNlcmlhbGl6ZSkgc2NoZW1lSGFuZGxlci5zZXJpYWxpemUoY29tcG9uZW50LCBvcHRpb25zKVxuXG4gIGlmIChjb21wb25lbnQucGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFvcHRpb25zLnNraXBFc2NhcGUpIHtcbiAgICAgIGNvbXBvbmVudC5wYXRoID0gZXNjYXBlKGNvbXBvbmVudC5wYXRoKVxuXG4gICAgICBpZiAoY29tcG9uZW50LnNjaGVtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbXBvbmVudC5wYXRoID0gY29tcG9uZW50LnBhdGguc3BsaXQoJyUzQScpLmpvaW4oJzonKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb21wb25lbnQucGF0aCA9IHVuZXNjYXBlKGNvbXBvbmVudC5wYXRoKVxuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zLnJlZmVyZW5jZSAhPT0gJ3N1ZmZpeCcgJiYgY29tcG9uZW50LnNjaGVtZSkge1xuICAgIHVyaVRva2Vucy5wdXNoKGNvbXBvbmVudC5zY2hlbWUsICc6JylcbiAgfVxuXG4gIGNvbnN0IGF1dGhvcml0eSA9IHJlY29tcG9zZUF1dGhvcml0eShjb21wb25lbnQpXG4gIGlmIChhdXRob3JpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChvcHRpb25zLnJlZmVyZW5jZSAhPT0gJ3N1ZmZpeCcpIHtcbiAgICAgIHVyaVRva2Vucy5wdXNoKCcvLycpXG4gICAgfVxuXG4gICAgdXJpVG9rZW5zLnB1c2goYXV0aG9yaXR5KVxuXG4gICAgaWYgKGNvbXBvbmVudC5wYXRoICYmIGNvbXBvbmVudC5wYXRoWzBdICE9PSAnLycpIHtcbiAgICAgIHVyaVRva2Vucy5wdXNoKCcvJylcbiAgICB9XG4gIH1cbiAgaWYgKGNvbXBvbmVudC5wYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICBsZXQgcyA9IGNvbXBvbmVudC5wYXRoXG5cbiAgICBpZiAoIW9wdGlvbnMuYWJzb2x1dGVQYXRoICYmICghc2NoZW1lSGFuZGxlciB8fCAhc2NoZW1lSGFuZGxlci5hYnNvbHV0ZVBhdGgpKSB7XG4gICAgICBzID0gcmVtb3ZlRG90U2VnbWVudHMocylcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBhdXRob3JpdHkgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgc1swXSA9PT0gJy8nICYmXG4gICAgICBzWzFdID09PSAnLydcbiAgICApIHtcbiAgICAgIC8vIGRvbid0IGFsbG93IHRoZSBwYXRoIHRvIHN0YXJ0IHdpdGggXCIvL1wiXG4gICAgICBzID0gJy8lMkYnICsgcy5zbGljZSgyKVxuICAgIH1cblxuICAgIHVyaVRva2Vucy5wdXNoKHMpXG4gIH1cblxuICBpZiAoY29tcG9uZW50LnF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICB1cmlUb2tlbnMucHVzaCgnPycsIGNvbXBvbmVudC5xdWVyeSlcbiAgfVxuXG4gIGlmIChjb21wb25lbnQuZnJhZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIHVyaVRva2Vucy5wdXNoKCcjJywgY29tcG9uZW50LmZyYWdtZW50KVxuICB9XG4gIHJldHVybiB1cmlUb2tlbnMuam9pbignJylcbn1cblxuY29uc3QgVVJJX1BBUlNFID0gL14oPzooW14jLzo/XSspOik/KD86XFwvXFwvKCg/OihbXiMvP0BdKilAKT8oXFxbW14jLz9cXF1dK1xcXXxbXiMvOj9dKikoPzo6KFxcZCopKT8pKT8oW14jP10qKSg/OlxcPyhbXiNdKikpPyg/OiMoKD86LnxbXFxuXFxyXSkqKSk/L3VcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJpXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi90eXBlcy9pbmRleCcpLk9wdGlvbnN9IFtvcHRzXVxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gcGFyc2UgKHVyaSwgb3B0cykge1xuICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0cylcbiAgLyoqIEB0eXBlIHtpbXBvcnQoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9ICovXG4gIGNvbnN0IHBhcnNlZCA9IHtcbiAgICBzY2hlbWU6IHVuZGVmaW5lZCxcbiAgICB1c2VyaW5mbzogdW5kZWZpbmVkLFxuICAgIGhvc3Q6ICcnLFxuICAgIHBvcnQ6IHVuZGVmaW5lZCxcbiAgICBwYXRoOiAnJyxcbiAgICBxdWVyeTogdW5kZWZpbmVkLFxuICAgIGZyYWdtZW50OiB1bmRlZmluZWRcbiAgfVxuXG4gIGxldCBpc0lQID0gZmFsc2VcbiAgaWYgKG9wdGlvbnMucmVmZXJlbmNlID09PSAnc3VmZml4Jykge1xuICAgIGlmIChvcHRpb25zLnNjaGVtZSkge1xuICAgICAgdXJpID0gb3B0aW9ucy5zY2hlbWUgKyAnOicgKyB1cmlcbiAgICB9IGVsc2Uge1xuICAgICAgdXJpID0gJy8vJyArIHVyaVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1hdGNoZXMgPSB1cmkubWF0Y2goVVJJX1BBUlNFKVxuXG4gIGlmIChtYXRjaGVzKSB7XG4gICAgLy8gc3RvcmUgZWFjaCBjb21wb25lbnRcbiAgICBwYXJzZWQuc2NoZW1lID0gbWF0Y2hlc1sxXVxuICAgIHBhcnNlZC51c2VyaW5mbyA9IG1hdGNoZXNbM11cbiAgICBwYXJzZWQuaG9zdCA9IG1hdGNoZXNbNF1cbiAgICBwYXJzZWQucG9ydCA9IHBhcnNlSW50KG1hdGNoZXNbNV0sIDEwKVxuICAgIHBhcnNlZC5wYXRoID0gbWF0Y2hlc1s2XSB8fCAnJ1xuICAgIHBhcnNlZC5xdWVyeSA9IG1hdGNoZXNbN11cbiAgICBwYXJzZWQuZnJhZ21lbnQgPSBtYXRjaGVzWzhdXG5cbiAgICAvLyBmaXggcG9ydCBudW1iZXJcbiAgICBpZiAoaXNOYU4ocGFyc2VkLnBvcnQpKSB7XG4gICAgICBwYXJzZWQucG9ydCA9IG1hdGNoZXNbNV1cbiAgICB9XG4gICAgaWYgKHBhcnNlZC5ob3N0KSB7XG4gICAgICBjb25zdCBpcHY0cmVzdWx0ID0gaXNJUHY0KHBhcnNlZC5ob3N0KVxuICAgICAgaWYgKGlwdjRyZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGlwdjZyZXN1bHQgPSBub3JtYWxpemVJUHY2KHBhcnNlZC5ob3N0KVxuICAgICAgICBwYXJzZWQuaG9zdCA9IGlwdjZyZXN1bHQuaG9zdC50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGlzSVAgPSBpcHY2cmVzdWx0LmlzSVBWNlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNJUCA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBhcnNlZC5zY2hlbWUgPT09IHVuZGVmaW5lZCAmJiBwYXJzZWQudXNlcmluZm8gPT09IHVuZGVmaW5lZCAmJiBwYXJzZWQuaG9zdCA9PT0gdW5kZWZpbmVkICYmIHBhcnNlZC5wb3J0ID09PSB1bmRlZmluZWQgJiYgcGFyc2VkLnF1ZXJ5ID09PSB1bmRlZmluZWQgJiYgIXBhcnNlZC5wYXRoKSB7XG4gICAgICBwYXJzZWQucmVmZXJlbmNlID0gJ3NhbWUtZG9jdW1lbnQnXG4gICAgfSBlbHNlIGlmIChwYXJzZWQuc2NoZW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcnNlZC5yZWZlcmVuY2UgPSAncmVsYXRpdmUnXG4gICAgfSBlbHNlIGlmIChwYXJzZWQuZnJhZ21lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyc2VkLnJlZmVyZW5jZSA9ICdhYnNvbHV0ZSdcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkLnJlZmVyZW5jZSA9ICd1cmknXG4gICAgfVxuXG4gICAgLy8gY2hlY2sgZm9yIHJlZmVyZW5jZSBlcnJvcnNcbiAgICBpZiAob3B0aW9ucy5yZWZlcmVuY2UgJiYgb3B0aW9ucy5yZWZlcmVuY2UgIT09ICdzdWZmaXgnICYmIG9wdGlvbnMucmVmZXJlbmNlICE9PSBwYXJzZWQucmVmZXJlbmNlKSB7XG4gICAgICBwYXJzZWQuZXJyb3IgPSBwYXJzZWQuZXJyb3IgfHwgJ1VSSSBpcyBub3QgYSAnICsgb3B0aW9ucy5yZWZlcmVuY2UgKyAnIHJlZmVyZW5jZS4nXG4gICAgfVxuXG4gICAgLy8gZmluZCBzY2hlbWUgaGFuZGxlclxuICAgIGNvbnN0IHNjaGVtZUhhbmRsZXIgPSBnZXRTY2hlbWVIYW5kbGVyKG9wdGlvbnMuc2NoZW1lIHx8IHBhcnNlZC5zY2hlbWUpXG5cbiAgICAvLyBjaGVjayBpZiBzY2hlbWUgY2FuJ3QgaGFuZGxlIElSSXNcbiAgICBpZiAoIW9wdGlvbnMudW5pY29kZVN1cHBvcnQgJiYgKCFzY2hlbWVIYW5kbGVyIHx8ICFzY2hlbWVIYW5kbGVyLnVuaWNvZGVTdXBwb3J0KSkge1xuICAgICAgLy8gaWYgaG9zdCBjb21wb25lbnQgaXMgYSBkb21haW4gbmFtZVxuICAgICAgaWYgKHBhcnNlZC5ob3N0ICYmIChvcHRpb25zLmRvbWFpbkhvc3QgfHwgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5kb21haW5Ib3N0KSkgJiYgaXNJUCA9PT0gZmFsc2UgJiYgbm9uU2ltcGxlRG9tYWluKHBhcnNlZC5ob3N0KSkge1xuICAgICAgICAvLyBjb252ZXJ0IFVuaWNvZGUgSUROIC0+IEFTQ0lJIElETlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhcnNlZC5ob3N0ID0gVVJMLmRvbWFpblRvQVNDSUkocGFyc2VkLmhvc3QudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHBhcnNlZC5lcnJvciA9IHBhcnNlZC5lcnJvciB8fCBcIkhvc3QncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBBU0NJSTogXCIgKyBlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGNvbnZlcnQgSVJJIC0+IFVSSVxuICAgIH1cblxuICAgIGlmICghc2NoZW1lSGFuZGxlciB8fCAoc2NoZW1lSGFuZGxlciAmJiAhc2NoZW1lSGFuZGxlci5za2lwTm9ybWFsaXplKSkge1xuICAgICAgaWYgKHVyaS5pbmRleE9mKCclJykgIT09IC0xKSB7XG4gICAgICAgIGlmIChwYXJzZWQuc2NoZW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwYXJzZWQuc2NoZW1lID0gdW5lc2NhcGUocGFyc2VkLnNjaGVtZSlcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VkLmhvc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBhcnNlZC5ob3N0ID0gdW5lc2NhcGUocGFyc2VkLmhvc3QpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwYXJzZWQucGF0aCkge1xuICAgICAgICBwYXJzZWQucGF0aCA9IGVzY2FwZSh1bmVzY2FwZShwYXJzZWQucGF0aCkpXG4gICAgICB9XG4gICAgICBpZiAocGFyc2VkLmZyYWdtZW50KSB7XG4gICAgICAgIHBhcnNlZC5mcmFnbWVudCA9IGVuY29kZVVSSShkZWNvZGVVUklDb21wb25lbnQocGFyc2VkLmZyYWdtZW50KSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBwZXJmb3JtIHNjaGVtZSBzcGVjaWZpYyBwYXJzaW5nXG4gICAgaWYgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5wYXJzZSkge1xuICAgICAgc2NoZW1lSGFuZGxlci5wYXJzZShwYXJzZWQsIG9wdGlvbnMpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHBhcnNlZC5lcnJvciA9IHBhcnNlZC5lcnJvciB8fCAnVVJJIGNhbiBub3QgYmUgcGFyc2VkLidcbiAgfVxuICByZXR1cm4gcGFyc2VkXG59XG5cbmNvbnN0IGZhc3RVcmkgPSB7XG4gIFNDSEVNRVMsXG4gIG5vcm1hbGl6ZSxcbiAgcmVzb2x2ZSxcbiAgcmVzb2x2ZUNvbXBvbmVudCxcbiAgZXF1YWwsXG4gIHNlcmlhbGl6ZSxcbiAgcGFyc2Vcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmYXN0VXJpXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gZmFzdFVyaVxubW9kdWxlLmV4cG9ydHMuZmFzdFVyaSA9IGZhc3RVcmlcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB1cmkgPSByZXF1aXJlKFwiZmFzdC11cmlcIik7XG51cmkuY29kZSA9ICdyZXF1aXJlKFwiYWp2L2Rpc3QvcnVudGltZS91cmlcIikuZGVmYXVsdCc7XG5leHBvcnRzLmRlZmF1bHQgPSB1cmk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cmkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29kZUdlbiA9IGV4cG9ydHMuTmFtZSA9IGV4cG9ydHMubmlsID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLnN0ciA9IGV4cG9ydHMuXyA9IGV4cG9ydHMuS2V5d29yZEN4dCA9IHZvaWQgMDtcbnZhciB2YWxpZGF0ZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS92YWxpZGF0ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIktleXdvcmRDeHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbGlkYXRlXzEuS2V5d29yZEN4dDsgfSB9KTtcbnZhciBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL2NvZGVnZW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuXzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0clwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ2lmeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cmluZ2lmeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5pbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLm5pbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5OYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29kZUdlblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLkNvZGVHZW47IH0gfSk7XG5jb25zdCB2YWxpZGF0aW9uX2Vycm9yXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3JcIik7XG5jb25zdCByZWZfZXJyb3JfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcmVmX2Vycm9yXCIpO1xuY29uc3QgcnVsZXNfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcnVsZXNcIik7XG5jb25zdCBjb21waWxlXzEgPSByZXF1aXJlKFwiLi9jb21waWxlXCIpO1xuY29uc3QgY29kZWdlbl8yID0gcmVxdWlyZShcIi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgcmVzb2x2ZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS9yZXNvbHZlXCIpO1xuY29uc3QgZGF0YVR5cGVfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCAkZGF0YVJlZlNjaGVtYSA9IHJlcXVpcmUoXCIuL3JlZnMvZGF0YS5qc29uXCIpO1xuY29uc3QgdXJpXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lL3VyaVwiKTtcbmNvbnN0IGRlZmF1bHRSZWdFeHAgPSAoc3RyLCBmbGFncykgPT4gbmV3IFJlZ0V4cChzdHIsIGZsYWdzKTtcbmRlZmF1bHRSZWdFeHAuY29kZSA9IFwibmV3IFJlZ0V4cFwiO1xuY29uc3QgTUVUQV9JR05PUkVfT1BUSU9OUyA9IFtcInJlbW92ZUFkZGl0aW9uYWxcIiwgXCJ1c2VEZWZhdWx0c1wiLCBcImNvZXJjZVR5cGVzXCJdO1xuY29uc3QgRVhUX1NDT1BFX05BTUVTID0gbmV3IFNldChbXG4gICAgXCJ2YWxpZGF0ZVwiLFxuICAgIFwic2VyaWFsaXplXCIsXG4gICAgXCJwYXJzZVwiLFxuICAgIFwid3JhcHBlclwiLFxuICAgIFwicm9vdFwiLFxuICAgIFwic2NoZW1hXCIsXG4gICAgXCJrZXl3b3JkXCIsXG4gICAgXCJwYXR0ZXJuXCIsXG4gICAgXCJmb3JtYXRzXCIsXG4gICAgXCJ2YWxpZGF0ZSRkYXRhXCIsXG4gICAgXCJmdW5jXCIsXG4gICAgXCJvYmpcIixcbiAgICBcIkVycm9yXCIsXG5dKTtcbmNvbnN0IHJlbW92ZWRPcHRpb25zID0ge1xuICAgIGVycm9yRGF0YVBhdGg6IFwiXCIsXG4gICAgZm9ybWF0OiBcImB2YWxpZGF0ZUZvcm1hdHM6IGZhbHNlYCBjYW4gYmUgdXNlZCBpbnN0ZWFkLlwiLFxuICAgIG51bGxhYmxlOiAnXCJudWxsYWJsZVwiIGtleXdvcmQgaXMgc3VwcG9ydGVkIGJ5IGRlZmF1bHQuJyxcbiAgICBqc29uUG9pbnRlcnM6IFwiRGVwcmVjYXRlZCBqc1Byb3BlcnR5U3ludGF4IGNhbiBiZSB1c2VkIGluc3RlYWQuXCIsXG4gICAgZXh0ZW5kUmVmczogXCJEZXByZWNhdGVkIGlnbm9yZUtleXdvcmRzV2l0aFJlZiBjYW4gYmUgdXNlZCBpbnN0ZWFkLlwiLFxuICAgIG1pc3NpbmdSZWZzOiBcIlBhc3MgZW1wdHkgc2NoZW1hIHdpdGggJGlkIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQgdG8gYWp2LmFkZFNjaGVtYS5cIixcbiAgICBwcm9jZXNzQ29kZTogXCJVc2Ugb3B0aW9uIGBjb2RlOiB7cHJvY2VzczogKGNvZGUsIHNjaGVtYUVudjogb2JqZWN0KSA9PiBzdHJpbmd9YFwiLFxuICAgIHNvdXJjZUNvZGU6IFwiVXNlIG9wdGlvbiBgY29kZToge3NvdXJjZTogdHJ1ZX1gXCIsXG4gICAgc3RyaWN0RGVmYXVsdHM6IFwiSXQgaXMgZGVmYXVsdCBub3csIHNlZSBvcHRpb24gYHN0cmljdGAuXCIsXG4gICAgc3RyaWN0S2V5d29yZHM6IFwiSXQgaXMgZGVmYXVsdCBub3csIHNlZSBvcHRpb24gYHN0cmljdGAuXCIsXG4gICAgdW5pcXVlSXRlbXM6ICdcInVuaXF1ZUl0ZW1zXCIga2V5d29yZCBpcyBhbHdheXMgdmFsaWRhdGVkLicsXG4gICAgdW5rbm93bkZvcm1hdHM6IFwiRGlzYWJsZSBzdHJpY3QgbW9kZSBvciBwYXNzIGB0cnVlYCB0byBgYWp2LmFkZEZvcm1hdGAgKG9yIGBmb3JtYXRzYCBvcHRpb24pLlwiLFxuICAgIGNhY2hlOiBcIk1hcCBpcyB1c2VkIGFzIGNhY2hlLCBzY2hlbWEgb2JqZWN0IGFzIGtleS5cIixcbiAgICBzZXJpYWxpemU6IFwiTWFwIGlzIHVzZWQgYXMgY2FjaGUsIHNjaGVtYSBvYmplY3QgYXMga2V5LlwiLFxuICAgIGFqdkVycm9yczogXCJJdCBpcyBkZWZhdWx0IG5vdy5cIixcbn07XG5jb25zdCBkZXByZWNhdGVkT3B0aW9ucyA9IHtcbiAgICBpZ25vcmVLZXl3b3Jkc1dpdGhSZWY6IFwiXCIsXG4gICAganNQcm9wZXJ0eVN5bnRheDogXCJcIixcbiAgICB1bmljb2RlOiAnXCJtaW5MZW5ndGhcIi9cIm1heExlbmd0aFwiIGFjY291bnQgZm9yIHVuaWNvZGUgY2hhcmFjdGVycyBieSBkZWZhdWx0LicsXG59O1xuY29uc3QgTUFYX0VYUFJFU1NJT04gPSAyMDA7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gcmVxdWlyZWRPcHRpb25zKG8pIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2csIF9oLCBfaiwgX2ssIF9sLCBfbSwgX28sIF9wLCBfcSwgX3IsIF9zLCBfdCwgX3UsIF92LCBfdywgX3gsIF95LCBfeiwgXzA7XG4gICAgY29uc3QgcyA9IG8uc3RyaWN0O1xuICAgIGNvbnN0IF9vcHR6ID0gKF9hID0gby5jb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW1pemU7XG4gICAgY29uc3Qgb3B0aW1pemUgPSBfb3B0eiA9PT0gdHJ1ZSB8fCBfb3B0eiA9PT0gdW5kZWZpbmVkID8gMSA6IF9vcHR6IHx8IDA7XG4gICAgY29uc3QgcmVnRXhwID0gKF9jID0gKF9iID0gby5jb2RlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmVnRXhwKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBkZWZhdWx0UmVnRXhwO1xuICAgIGNvbnN0IHVyaVJlc29sdmVyID0gKF9kID0gby51cmlSZXNvbHZlcikgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogdXJpXzEuZGVmYXVsdDtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdHJpY3RTY2hlbWE6IChfZiA9IChfZSA9IG8uc3RyaWN0U2NoZW1hKSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiBzKSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiB0cnVlLFxuICAgICAgICBzdHJpY3ROdW1iZXJzOiAoX2ggPSAoX2cgPSBvLnN0cmljdE51bWJlcnMpICE9PSBudWxsICYmIF9nICE9PSB2b2lkIDAgPyBfZyA6IHMpICE9PSBudWxsICYmIF9oICE9PSB2b2lkIDAgPyBfaCA6IHRydWUsXG4gICAgICAgIHN0cmljdFR5cGVzOiAoX2sgPSAoX2ogPSBvLnN0cmljdFR5cGVzKSAhPT0gbnVsbCAmJiBfaiAhPT0gdm9pZCAwID8gX2ogOiBzKSAhPT0gbnVsbCAmJiBfayAhPT0gdm9pZCAwID8gX2sgOiBcImxvZ1wiLFxuICAgICAgICBzdHJpY3RUdXBsZXM6IChfbSA9IChfbCA9IG8uc3RyaWN0VHVwbGVzKSAhPT0gbnVsbCAmJiBfbCAhPT0gdm9pZCAwID8gX2wgOiBzKSAhPT0gbnVsbCAmJiBfbSAhPT0gdm9pZCAwID8gX20gOiBcImxvZ1wiLFxuICAgICAgICBzdHJpY3RSZXF1aXJlZDogKF9wID0gKF9vID0gby5zdHJpY3RSZXF1aXJlZCkgIT09IG51bGwgJiYgX28gIT09IHZvaWQgMCA/IF9vIDogcykgIT09IG51bGwgJiYgX3AgIT09IHZvaWQgMCA/IF9wIDogZmFsc2UsXG4gICAgICAgIGNvZGU6IG8uY29kZSA/IHsgLi4uby5jb2RlLCBvcHRpbWl6ZSwgcmVnRXhwIH0gOiB7IG9wdGltaXplLCByZWdFeHAgfSxcbiAgICAgICAgbG9vcFJlcXVpcmVkOiAoX3EgPSBvLmxvb3BSZXF1aXJlZCkgIT09IG51bGwgJiYgX3EgIT09IHZvaWQgMCA/IF9xIDogTUFYX0VYUFJFU1NJT04sXG4gICAgICAgIGxvb3BFbnVtOiAoX3IgPSBvLmxvb3BFbnVtKSAhPT0gbnVsbCAmJiBfciAhPT0gdm9pZCAwID8gX3IgOiBNQVhfRVhQUkVTU0lPTixcbiAgICAgICAgbWV0YTogKF9zID0gby5tZXRhKSAhPT0gbnVsbCAmJiBfcyAhPT0gdm9pZCAwID8gX3MgOiB0cnVlLFxuICAgICAgICBtZXNzYWdlczogKF90ID0gby5tZXNzYWdlcykgIT09IG51bGwgJiYgX3QgIT09IHZvaWQgMCA/IF90IDogdHJ1ZSxcbiAgICAgICAgaW5saW5lUmVmczogKF91ID0gby5pbmxpbmVSZWZzKSAhPT0gbnVsbCAmJiBfdSAhPT0gdm9pZCAwID8gX3UgOiB0cnVlLFxuICAgICAgICBzY2hlbWFJZDogKF92ID0gby5zY2hlbWFJZCkgIT09IG51bGwgJiYgX3YgIT09IHZvaWQgMCA/IF92IDogXCIkaWRcIixcbiAgICAgICAgYWRkVXNlZFNjaGVtYTogKF93ID0gby5hZGRVc2VkU2NoZW1hKSAhPT0gbnVsbCAmJiBfdyAhPT0gdm9pZCAwID8gX3cgOiB0cnVlLFxuICAgICAgICB2YWxpZGF0ZVNjaGVtYTogKF94ID0gby52YWxpZGF0ZVNjaGVtYSkgIT09IG51bGwgJiYgX3ggIT09IHZvaWQgMCA/IF94IDogdHJ1ZSxcbiAgICAgICAgdmFsaWRhdGVGb3JtYXRzOiAoX3kgPSBvLnZhbGlkYXRlRm9ybWF0cykgIT09IG51bGwgJiYgX3kgIT09IHZvaWQgMCA/IF95IDogdHJ1ZSxcbiAgICAgICAgdW5pY29kZVJlZ0V4cDogKF96ID0gby51bmljb2RlUmVnRXhwKSAhPT0gbnVsbCAmJiBfeiAhPT0gdm9pZCAwID8gX3ogOiB0cnVlLFxuICAgICAgICBpbnQzMnJhbmdlOiAoXzAgPSBvLmludDMycmFuZ2UpICE9PSBudWxsICYmIF8wICE9PSB2b2lkIDAgPyBfMCA6IHRydWUsXG4gICAgICAgIHVyaVJlc29sdmVyOiB1cmlSZXNvbHZlcixcbiAgICB9O1xufVxuY2xhc3MgQWp2IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICAgICAgdGhpcy5zY2hlbWFzID0ge307XG4gICAgICAgIHRoaXMucmVmcyA9IHt9O1xuICAgICAgICB0aGlzLmZvcm1hdHMgPSB7fTtcbiAgICAgICAgdGhpcy5fY29tcGlsYXRpb25zID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLl9sb2FkaW5nID0ge307XG4gICAgICAgIHRoaXMuX2NhY2hlID0gbmV3IE1hcCgpO1xuICAgICAgICBvcHRzID0gdGhpcy5vcHRzID0geyAuLi5vcHRzLCAuLi5yZXF1aXJlZE9wdGlvbnMob3B0cykgfTtcbiAgICAgICAgY29uc3QgeyBlczUsIGxpbmVzIH0gPSB0aGlzLm9wdHMuY29kZTtcbiAgICAgICAgdGhpcy5zY29wZSA9IG5ldyBjb2RlZ2VuXzIuVmFsdWVTY29wZSh7IHNjb3BlOiB7fSwgcHJlZml4ZXM6IEVYVF9TQ09QRV9OQU1FUywgZXM1LCBsaW5lcyB9KTtcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBnZXRMb2dnZXIob3B0cy5sb2dnZXIpO1xuICAgICAgICBjb25zdCBmb3JtYXRPcHQgPSBvcHRzLnZhbGlkYXRlRm9ybWF0cztcbiAgICAgICAgb3B0cy52YWxpZGF0ZUZvcm1hdHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5SVUxFUyA9ICgwLCBydWxlc18xLmdldFJ1bGVzKSgpO1xuICAgICAgICBjaGVja09wdGlvbnMuY2FsbCh0aGlzLCByZW1vdmVkT3B0aW9ucywgb3B0cywgXCJOT1QgU1VQUE9SVEVEXCIpO1xuICAgICAgICBjaGVja09wdGlvbnMuY2FsbCh0aGlzLCBkZXByZWNhdGVkT3B0aW9ucywgb3B0cywgXCJERVBSRUNBVEVEXCIsIFwid2FyblwiKTtcbiAgICAgICAgdGhpcy5fbWV0YU9wdHMgPSBnZXRNZXRhU2NoZW1hT3B0aW9ucy5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAob3B0cy5mb3JtYXRzKVxuICAgICAgICAgICAgYWRkSW5pdGlhbEZvcm1hdHMuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5fYWRkVm9jYWJ1bGFyaWVzKCk7XG4gICAgICAgIHRoaXMuX2FkZERlZmF1bHRNZXRhU2NoZW1hKCk7XG4gICAgICAgIGlmIChvcHRzLmtleXdvcmRzKVxuICAgICAgICAgICAgYWRkSW5pdGlhbEtleXdvcmRzLmNhbGwodGhpcywgb3B0cy5rZXl3b3Jkcyk7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRhID09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICB0aGlzLmFkZE1ldGFTY2hlbWEob3B0cy5tZXRhKTtcbiAgICAgICAgYWRkSW5pdGlhbFNjaGVtYXMuY2FsbCh0aGlzKTtcbiAgICAgICAgb3B0cy52YWxpZGF0ZUZvcm1hdHMgPSBmb3JtYXRPcHQ7XG4gICAgfVxuICAgIF9hZGRWb2NhYnVsYXJpZXMoKSB7XG4gICAgICAgIHRoaXMuYWRkS2V5d29yZChcIiRhc3luY1wiKTtcbiAgICB9XG4gICAgX2FkZERlZmF1bHRNZXRhU2NoZW1hKCkge1xuICAgICAgICBjb25zdCB7ICRkYXRhLCBtZXRhLCBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICBsZXQgX2RhdGFSZWZTY2hlbWEgPSAkZGF0YVJlZlNjaGVtYTtcbiAgICAgICAgaWYgKHNjaGVtYUlkID09PSBcImlkXCIpIHtcbiAgICAgICAgICAgIF9kYXRhUmVmU2NoZW1hID0geyAuLi4kZGF0YVJlZlNjaGVtYSB9O1xuICAgICAgICAgICAgX2RhdGFSZWZTY2hlbWEuaWQgPSBfZGF0YVJlZlNjaGVtYS4kaWQ7XG4gICAgICAgICAgICBkZWxldGUgX2RhdGFSZWZTY2hlbWEuJGlkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhICYmICRkYXRhKVxuICAgICAgICAgICAgdGhpcy5hZGRNZXRhU2NoZW1hKF9kYXRhUmVmU2NoZW1hLCBfZGF0YVJlZlNjaGVtYVtzY2hlbWFJZF0sIGZhbHNlKTtcbiAgICB9XG4gICAgZGVmYXVsdE1ldGEoKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0YSwgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgcmV0dXJuICh0aGlzLm9wdHMuZGVmYXVsdE1ldGEgPSB0eXBlb2YgbWV0YSA9PSBcIm9iamVjdFwiID8gbWV0YVtzY2hlbWFJZF0gfHwgbWV0YSA6IHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHZhbGlkYXRlKHNjaGVtYUtleVJlZiwgLy8ga2V5LCByZWYgb3Igc2NoZW1hIG9iamVjdFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVkdW5kYW50LXR5cGUtY29uc3RpdHVlbnRzXG4gICAgZGF0YSAvLyB0byBiZSB2YWxpZGF0ZWRcbiAgICApIHtcbiAgICAgICAgbGV0IHY7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hS2V5UmVmID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHYgPSB0aGlzLmdldFNjaGVtYShzY2hlbWFLZXlSZWYpO1xuICAgICAgICAgICAgaWYgKCF2KVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gc2NoZW1hIHdpdGgga2V5IG9yIHJlZiBcIiR7c2NoZW1hS2V5UmVmfVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2ID0gdGhpcy5jb21waWxlKHNjaGVtYUtleVJlZik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsaWQgPSB2KGRhdGEpO1xuICAgICAgICBpZiAoIShcIiRhc3luY1wiIGluIHYpKVxuICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSB2LmVycm9ycztcbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cbiAgICBjb21waWxlKHNjaGVtYSwgX21ldGEpIHtcbiAgICAgICAgY29uc3Qgc2NoID0gdGhpcy5fYWRkU2NoZW1hKHNjaGVtYSwgX21ldGEpO1xuICAgICAgICByZXR1cm4gKHNjaC52YWxpZGF0ZSB8fCB0aGlzLl9jb21waWxlU2NoZW1hRW52KHNjaCkpO1xuICAgIH1cbiAgICBjb21waWxlQXN5bmMoc2NoZW1hLCBtZXRhKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmxvYWRTY2hlbWEgIT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJvcHRpb25zLmxvYWRTY2hlbWEgc2hvdWxkIGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBsb2FkU2NoZW1hIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIHJldHVybiBydW5Db21waWxlQXN5bmMuY2FsbCh0aGlzLCBzY2hlbWEsIG1ldGEpO1xuICAgICAgICBhc3luYyBmdW5jdGlvbiBydW5Db21waWxlQXN5bmMoX3NjaGVtYSwgX21ldGEpIHtcbiAgICAgICAgICAgIGF3YWl0IGxvYWRNZXRhU2NoZW1hLmNhbGwodGhpcywgX3NjaGVtYS4kc2NoZW1hKTtcbiAgICAgICAgICAgIGNvbnN0IHNjaCA9IHRoaXMuX2FkZFNjaGVtYShfc2NoZW1hLCBfbWV0YSk7XG4gICAgICAgICAgICByZXR1cm4gc2NoLnZhbGlkYXRlIHx8IF9jb21waWxlQXN5bmMuY2FsbCh0aGlzLCBzY2gpO1xuICAgICAgICB9XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWRNZXRhU2NoZW1hKCRyZWYpIHtcbiAgICAgICAgICAgIGlmICgkcmVmICYmICF0aGlzLmdldFNjaGVtYSgkcmVmKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJ1bkNvbXBpbGVBc3luYy5jYWxsKHRoaXMsIHsgJHJlZiB9LCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhc3luYyBmdW5jdGlvbiBfY29tcGlsZUFzeW5jKHNjaCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29tcGlsZVNjaGVtYUVudihzY2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgcmVmX2Vycm9yXzEuZGVmYXVsdCkpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgY2hlY2tMb2FkZWQuY2FsbCh0aGlzLCBlKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBsb2FkTWlzc2luZ1NjaGVtYS5jYWxsKHRoaXMsIGUubWlzc2luZ1NjaGVtYSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jb21waWxlQXN5bmMuY2FsbCh0aGlzLCBzY2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrTG9hZGVkKHsgbWlzc2luZ1NjaGVtYTogcmVmLCBtaXNzaW5nUmVmIH0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlZnNbcmVmXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQW55U2NoZW1hICR7cmVmfSBpcyBsb2FkZWQgYnV0ICR7bWlzc2luZ1JlZn0gY2Fubm90IGJlIHJlc29sdmVkYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gbG9hZE1pc3NpbmdTY2hlbWEocmVmKSB7XG4gICAgICAgICAgICBjb25zdCBfc2NoZW1hID0gYXdhaXQgX2xvYWRTY2hlbWEuY2FsbCh0aGlzLCByZWYpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlZnNbcmVmXSlcbiAgICAgICAgICAgICAgICBhd2FpdCBsb2FkTWV0YVNjaGVtYS5jYWxsKHRoaXMsIF9zY2hlbWEuJHNjaGVtYSk7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVmc1tyZWZdKVxuICAgICAgICAgICAgICAgIHRoaXMuYWRkU2NoZW1hKF9zY2hlbWEsIHJlZiwgbWV0YSk7XG4gICAgICAgIH1cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gX2xvYWRTY2hlbWEocmVmKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gdGhpcy5fbG9hZGluZ1tyZWZdO1xuICAgICAgICAgICAgaWYgKHApXG4gICAgICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCAodGhpcy5fbG9hZGluZ1tyZWZdID0gbG9hZFNjaGVtYShyZWYpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9sb2FkaW5nW3JlZl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQWRkcyBzY2hlbWEgdG8gdGhlIGluc3RhbmNlXG4gICAgYWRkU2NoZW1hKHNjaGVtYSwgLy8gSWYgYXJyYXkgaXMgcGFzc2VkLCBga2V5YCB3aWxsIGJlIGlnbm9yZWRcbiAgICBrZXksIC8vIE9wdGlvbmFsIHNjaGVtYSBrZXkuIENhbiBiZSBwYXNzZWQgdG8gYHZhbGlkYXRlYCBtZXRob2QgaW5zdGVhZCBvZiBzY2hlbWEgb2JqZWN0IG9yIGlkL3JlZi4gT25lIHNjaGVtYSBwZXIgaW5zdGFuY2UgY2FuIGhhdmUgZW1wdHkgYGlkYCBhbmQgYGtleWAuXG4gICAgX21ldGEsIC8vIHRydWUgaWYgc2NoZW1hIGlzIGEgbWV0YS1zY2hlbWEuIFVzZWQgaW50ZXJuYWxseSwgYWRkTWV0YVNjaGVtYSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLlxuICAgIF92YWxpZGF0ZVNjaGVtYSA9IHRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYSAvLyBmYWxzZSB0byBza2lwIHNjaGVtYSB2YWxpZGF0aW9uLiBVc2VkIGludGVybmFsbHksIG9wdGlvbiB2YWxpZGF0ZVNjaGVtYSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLlxuICAgICkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjaCBvZiBzY2hlbWEpXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRTY2hlbWEoc2NoLCB1bmRlZmluZWQsIF9tZXRhLCBfdmFsaWRhdGVTY2hlbWEpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGlkO1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgY29uc3QgeyBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICAgICAgaWQgPSBzY2hlbWFbc2NoZW1hSWRdO1xuICAgICAgICAgICAgaWYgKGlkICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGlkICE9IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNjaGVtYSAke3NjaGVtYUlkfSBtdXN0IGJlIHN0cmluZ2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGtleSA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKGtleSB8fCBpZCk7XG4gICAgICAgIHRoaXMuX2NoZWNrVW5pcXVlKGtleSk7XG4gICAgICAgIHRoaXMuc2NoZW1hc1trZXldID0gdGhpcy5fYWRkU2NoZW1hKHNjaGVtYSwgX21ldGEsIGtleSwgX3ZhbGlkYXRlU2NoZW1hLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIEFkZCBzY2hlbWEgdGhhdCB3aWxsIGJlIHVzZWQgdG8gdmFsaWRhdGUgb3RoZXIgc2NoZW1hc1xuICAgIC8vIG9wdGlvbnMgaW4gTUVUQV9JR05PUkVfT1BUSU9OUyBhcmUgYWx3YXkgc2V0IHRvIGZhbHNlXG4gICAgYWRkTWV0YVNjaGVtYShzY2hlbWEsIGtleSwgLy8gc2NoZW1hIGtleVxuICAgIF92YWxpZGF0ZVNjaGVtYSA9IHRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYSAvLyBmYWxzZSB0byBza2lwIHNjaGVtYSB2YWxpZGF0aW9uLCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB2YWxpZGF0ZVNjaGVtYSBvcHRpb24gZm9yIG1ldGEtc2NoZW1hXG4gICAgKSB7XG4gICAgICAgIHRoaXMuYWRkU2NoZW1hKHNjaGVtYSwga2V5LCB0cnVlLCBfdmFsaWRhdGVTY2hlbWEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gIFZhbGlkYXRlIHNjaGVtYSBhZ2FpbnN0IGl0cyBtZXRhLXNjaGVtYVxuICAgIHZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdGhyb3dPckxvZ0Vycm9yKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGxldCAkc2NoZW1hO1xuICAgICAgICAkc2NoZW1hID0gc2NoZW1hLiRzY2hlbWE7XG4gICAgICAgIGlmICgkc2NoZW1hICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mICRzY2hlbWEgIT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiJHNjaGVtYSBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgICRzY2hlbWEgPSAkc2NoZW1hIHx8IHRoaXMub3B0cy5kZWZhdWx0TWV0YSB8fCB0aGlzLmRlZmF1bHRNZXRhKCk7XG4gICAgICAgIGlmICghJHNjaGVtYSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcIm1ldGEtc2NoZW1hIG5vdCBhdmFpbGFibGVcIik7XG4gICAgICAgICAgICB0aGlzLmVycm9ycyA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWxpZCA9IHRoaXMudmFsaWRhdGUoJHNjaGVtYSwgc2NoZW1hKTtcbiAgICAgICAgaWYgKCF2YWxpZCAmJiB0aHJvd09yTG9nRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBcInNjaGVtYSBpcyBpbnZhbGlkOiBcIiArIHRoaXMuZXJyb3JzVGV4dCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYSA9PT0gXCJsb2dcIilcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cbiAgICAvLyBHZXQgY29tcGlsZWQgc2NoZW1hIGJ5IGBrZXlgIG9yIGByZWZgLlxuICAgIC8vIChga2V5YCB0aGF0IHdhcyBwYXNzZWQgdG8gYGFkZFNjaGVtYWAgb3IgZnVsbCBzY2hlbWEgcmVmZXJlbmNlIC0gYHNjaGVtYS4kaWRgIG9yIHJlc29sdmVkIGlkKVxuICAgIGdldFNjaGVtYShrZXlSZWYpIHtcbiAgICAgICAgbGV0IHNjaDtcbiAgICAgICAgd2hpbGUgKHR5cGVvZiAoc2NoID0gZ2V0U2NoRW52LmNhbGwodGhpcywga2V5UmVmKSkgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIGtleVJlZiA9IHNjaDtcbiAgICAgICAgaWYgKHNjaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgICAgICBjb25zdCByb290ID0gbmV3IGNvbXBpbGVfMS5TY2hlbWFFbnYoeyBzY2hlbWE6IHt9LCBzY2hlbWFJZCB9KTtcbiAgICAgICAgICAgIHNjaCA9IGNvbXBpbGVfMS5yZXNvbHZlU2NoZW1hLmNhbGwodGhpcywgcm9vdCwga2V5UmVmKTtcbiAgICAgICAgICAgIGlmICghc2NoKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMucmVmc1trZXlSZWZdID0gc2NoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoc2NoLnZhbGlkYXRlIHx8IHRoaXMuX2NvbXBpbGVTY2hlbWFFbnYoc2NoKSk7XG4gICAgfVxuICAgIC8vIFJlbW92ZSBjYWNoZWQgc2NoZW1hKHMpLlxuICAgIC8vIElmIG5vIHBhcmFtZXRlciBpcyBwYXNzZWQgYWxsIHNjaGVtYXMgYnV0IG1ldGEtc2NoZW1hcyBhcmUgcmVtb3ZlZC5cbiAgICAvLyBJZiBSZWdFeHAgaXMgcGFzc2VkIGFsbCBzY2hlbWFzIHdpdGgga2V5L2lkIG1hdGNoaW5nIHBhdHRlcm4gYnV0IG1ldGEtc2NoZW1hcyBhcmUgcmVtb3ZlZC5cbiAgICAvLyBFdmVuIGlmIHNjaGVtYSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIHNjaGVtYXMgaXQgc3RpbGwgY2FuIGJlIHJlbW92ZWQgYXMgb3RoZXIgc2NoZW1hcyBoYXZlIGxvY2FsIHJlZmVyZW5jZXMuXG4gICAgcmVtb3ZlU2NoZW1hKHNjaGVtYUtleVJlZikge1xuICAgICAgICBpZiAoc2NoZW1hS2V5UmVmIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxTY2hlbWFzKHRoaXMuc2NoZW1hcywgc2NoZW1hS2V5UmVmKTtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFNjaGVtYXModGhpcy5yZWZzLCBzY2hlbWFLZXlSZWYpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0eXBlb2Ygc2NoZW1hS2V5UmVmKSB7XG4gICAgICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLnNjaGVtYXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFNjaGVtYXModGhpcy5yZWZzKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoID0gZ2V0U2NoRW52LmNhbGwodGhpcywgc2NoZW1hS2V5UmVmKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaCA9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5kZWxldGUoc2NoLnNjaGVtYSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2NoZW1hc1tzY2hlbWFLZXlSZWZdO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJlZnNbc2NoZW1hS2V5UmVmXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gc2NoZW1hS2V5UmVmO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlLmRlbGV0ZShjYWNoZUtleSk7XG4gICAgICAgICAgICAgICAgbGV0IGlkID0gc2NoZW1hS2V5UmVmW3RoaXMub3B0cy5zY2hlbWFJZF07XG4gICAgICAgICAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlkID0gKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoaWQpO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zY2hlbWFzW2lkXTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucmVmc1tpZF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYucmVtb3ZlU2NoZW1hOiBpbnZhbGlkIHBhcmFtZXRlclwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBhZGQgXCJ2b2NhYnVsYXJ5XCIgLSBhIGNvbGxlY3Rpb24gb2Yga2V5d29yZHNcbiAgICBhZGRWb2NhYnVsYXJ5KGRlZmluaXRpb25zKSB7XG4gICAgICAgIGZvciAoY29uc3QgZGVmIG9mIGRlZmluaXRpb25zKVxuICAgICAgICAgICAgdGhpcy5hZGRLZXl3b3JkKGRlZik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBhZGRLZXl3b3JkKGt3ZE9yRGVmLCBkZWYgLy8gZGVwcmVjYXRlZFxuICAgICkge1xuICAgICAgICBsZXQga2V5d29yZDtcbiAgICAgICAgaWYgKHR5cGVvZiBrd2RPckRlZiA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBrZXl3b3JkID0ga3dkT3JEZWY7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRlZiA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcInRoZXNlIHBhcmFtZXRlcnMgYXJlIGRlcHJlY2F0ZWQsIHNlZSBkb2NzIGZvciBhZGRLZXl3b3JkXCIpO1xuICAgICAgICAgICAgICAgIGRlZi5rZXl3b3JkID0ga2V5d29yZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Yga3dkT3JEZWYgPT0gXCJvYmplY3RcIiAmJiBkZWYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGVmID0ga3dkT3JEZWY7XG4gICAgICAgICAgICBrZXl3b3JkID0gZGVmLmtleXdvcmQ7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXl3b3JkKSAmJiAha2V5d29yZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhZGRLZXl3b3Jkczoga2V5d29yZCBtdXN0IGJlIHN0cmluZyBvciBub24tZW1wdHkgYXJyYXlcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGFkZEtleXdvcmRzIHBhcmFtZXRlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgY2hlY2tLZXl3b3JkLmNhbGwodGhpcywga2V5d29yZCwgZGVmKTtcbiAgICAgICAgaWYgKCFkZWYpIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuZWFjaEl0ZW0pKGtleXdvcmQsIChrd2QpID0+IGFkZFJ1bGUuY2FsbCh0aGlzLCBrd2QpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGtleXdvcmRNZXRhc2NoZW1hLmNhbGwodGhpcywgZGVmKTtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICAgIC4uLmRlZixcbiAgICAgICAgICAgIHR5cGU6ICgwLCBkYXRhVHlwZV8xLmdldEpTT05UeXBlcykoZGVmLnR5cGUpLFxuICAgICAgICAgICAgc2NoZW1hVHlwZTogKDAsIGRhdGFUeXBlXzEuZ2V0SlNPTlR5cGVzKShkZWYuc2NoZW1hVHlwZSksXG4gICAgICAgIH07XG4gICAgICAgICgwLCB1dGlsXzEuZWFjaEl0ZW0pKGtleXdvcmQsIGRlZmluaXRpb24udHlwZS5sZW5ndGggPT09IDBcbiAgICAgICAgICAgID8gKGspID0+IGFkZFJ1bGUuY2FsbCh0aGlzLCBrLCBkZWZpbml0aW9uKVxuICAgICAgICAgICAgOiAoaykgPT4gZGVmaW5pdGlvbi50eXBlLmZvckVhY2goKHQpID0+IGFkZFJ1bGUuY2FsbCh0aGlzLCBrLCBkZWZpbml0aW9uLCB0KSkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0S2V5d29yZChrZXl3b3JkKSB7XG4gICAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLlJVTEVTLmFsbFtrZXl3b3JkXTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBydWxlID09IFwib2JqZWN0XCIgPyBydWxlLmRlZmluaXRpb24gOiAhIXJ1bGU7XG4gICAgfVxuICAgIC8vIFJlbW92ZSBrZXl3b3JkXG4gICAgcmVtb3ZlS2V5d29yZChrZXl3b3JkKSB7XG4gICAgICAgIC8vIFRPRE8gcmV0dXJuIHR5cGUgc2hvdWxkIGJlIEFqdlxuICAgICAgICBjb25zdCB7IFJVTEVTIH0gPSB0aGlzO1xuICAgICAgICBkZWxldGUgUlVMRVMua2V5d29yZHNba2V5d29yZF07XG4gICAgICAgIGRlbGV0ZSBSVUxFUy5hbGxba2V5d29yZF07XG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgUlVMRVMucnVsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGkgPSBncm91cC5ydWxlcy5maW5kSW5kZXgoKHJ1bGUpID0+IHJ1bGUua2V5d29yZCA9PT0ga2V5d29yZCk7XG4gICAgICAgICAgICBpZiAoaSA+PSAwKVxuICAgICAgICAgICAgICAgIGdyb3VwLnJ1bGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gQWRkIGZvcm1hdFxuICAgIGFkZEZvcm1hdChuYW1lLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBmb3JtYXQgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIGZvcm1hdCA9IG5ldyBSZWdFeHAoZm9ybWF0KTtcbiAgICAgICAgdGhpcy5mb3JtYXRzW25hbWVdID0gZm9ybWF0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZXJyb3JzVGV4dChlcnJvcnMgPSB0aGlzLmVycm9ycywgLy8gb3B0aW9uYWwgYXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnNcbiAgICB7IHNlcGFyYXRvciA9IFwiLCBcIiwgZGF0YVZhciA9IFwiZGF0YVwiIH0gPSB7fSAvLyBvcHRpb25hbCBvcHRpb25zIHdpdGggcHJvcGVydGllcyBgc2VwYXJhdG9yYCBhbmQgYGRhdGFWYXJgXG4gICAgKSB7XG4gICAgICAgIGlmICghZXJyb3JzIHx8IGVycm9ycy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm4gXCJObyBlcnJvcnNcIjtcbiAgICAgICAgcmV0dXJuIGVycm9yc1xuICAgICAgICAgICAgLm1hcCgoZSkgPT4gYCR7ZGF0YVZhcn0ke2UuaW5zdGFuY2VQYXRofSAke2UubWVzc2FnZX1gKVxuICAgICAgICAgICAgLnJlZHVjZSgodGV4dCwgbXNnKSA9PiB0ZXh0ICsgc2VwYXJhdG9yICsgbXNnKTtcbiAgICB9XG4gICAgJGRhdGFNZXRhU2NoZW1hKG1ldGFTY2hlbWEsIGtleXdvcmRzSnNvblBvaW50ZXJzKSB7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5SVUxFUy5hbGw7XG4gICAgICAgIG1ldGFTY2hlbWEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG1ldGFTY2hlbWEpKTtcbiAgICAgICAgZm9yIChjb25zdCBqc29uUG9pbnRlciBvZiBrZXl3b3Jkc0pzb25Qb2ludGVycykge1xuICAgICAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBqc29uUG9pbnRlci5zcGxpdChcIi9cIikuc2xpY2UoMSk7IC8vIGZpcnN0IHNlZ21lbnQgaXMgYW4gZW1wdHkgc3RyaW5nXG4gICAgICAgICAgICBsZXQga2V5d29yZHMgPSBtZXRhU2NoZW1hO1xuICAgICAgICAgICAgZm9yIChjb25zdCBzZWcgb2Ygc2VnbWVudHMpXG4gICAgICAgICAgICAgICAga2V5d29yZHMgPSBrZXl3b3Jkc1tzZWddO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcnVsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBydWxlID0gcnVsZXNba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJ1bGUgIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY29uc3QgeyAkZGF0YSB9ID0gcnVsZS5kZWZpbml0aW9uO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IGtleXdvcmRzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKCRkYXRhICYmIHNjaGVtYSlcbiAgICAgICAgICAgICAgICAgICAga2V5d29yZHNba2V5XSA9IHNjaGVtYU9yRGF0YShzY2hlbWEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXRhU2NoZW1hO1xuICAgIH1cbiAgICBfcmVtb3ZlQWxsU2NoZW1hcyhzY2hlbWFzLCByZWdleCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleVJlZiBpbiBzY2hlbWFzKSB7XG4gICAgICAgICAgICBjb25zdCBzY2ggPSBzY2hlbWFzW2tleVJlZl07XG4gICAgICAgICAgICBpZiAoIXJlZ2V4IHx8IHJlZ2V4LnRlc3Qoa2V5UmVmKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNjaGVtYXNba2V5UmVmXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoICYmICFzY2gubWV0YSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5kZWxldGUoc2NoLnNjaGVtYSk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzY2hlbWFzW2tleVJlZl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIF9hZGRTY2hlbWEoc2NoZW1hLCBtZXRhLCBiYXNlSWQsIHZhbGlkYXRlU2NoZW1hID0gdGhpcy5vcHRzLnZhbGlkYXRlU2NoZW1hLCBhZGRTY2hlbWEgPSB0aGlzLm9wdHMuYWRkVXNlZFNjaGVtYSkge1xuICAgICAgICBsZXQgaWQ7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgaWQgPSBzY2hlbWFbc2NoZW1hSWRdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0cy5qdGQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2NoZW1hIG11c3QgYmUgb2JqZWN0XCIpO1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHNjaGVtYSAhPSBcImJvb2xlYW5cIilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzY2hlbWEgbXVzdCBiZSBvYmplY3Qgb3IgYm9vbGVhblwiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc2NoID0gdGhpcy5fY2FjaGUuZ2V0KHNjaGVtYSk7XG4gICAgICAgIGlmIChzY2ggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBzY2g7XG4gICAgICAgIGJhc2VJZCA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKGlkIHx8IGJhc2VJZCk7XG4gICAgICAgIGNvbnN0IGxvY2FsUmVmcyA9IHJlc29sdmVfMS5nZXRTY2hlbWFSZWZzLmNhbGwodGhpcywgc2NoZW1hLCBiYXNlSWQpO1xuICAgICAgICBzY2ggPSBuZXcgY29tcGlsZV8xLlNjaGVtYUVudih7IHNjaGVtYSwgc2NoZW1hSWQsIG1ldGEsIGJhc2VJZCwgbG9jYWxSZWZzIH0pO1xuICAgICAgICB0aGlzLl9jYWNoZS5zZXQoc2NoLnNjaGVtYSwgc2NoKTtcbiAgICAgICAgaWYgKGFkZFNjaGVtYSAmJiAhYmFzZUlkLnN0YXJ0c1dpdGgoXCIjXCIpKSB7XG4gICAgICAgICAgICAvLyBUT0RPIGF0bSBpdCBpcyBhbGxvd2VkIHRvIG92ZXJ3cml0ZSBzY2hlbWFzIHdpdGhvdXQgaWQgKGluc3RlYWQgb2Ygbm90IGFkZGluZyB0aGVtKVxuICAgICAgICAgICAgaWYgKGJhc2VJZClcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1VuaXF1ZShiYXNlSWQpO1xuICAgICAgICAgICAgdGhpcy5yZWZzW2Jhc2VJZF0gPSBzY2g7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbGlkYXRlU2NoZW1hKVxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRydWUpO1xuICAgICAgICByZXR1cm4gc2NoO1xuICAgIH1cbiAgICBfY2hlY2tVbmlxdWUoaWQpIHtcbiAgICAgICAgaWYgKHRoaXMuc2NoZW1hc1tpZF0gfHwgdGhpcy5yZWZzW2lkXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzY2hlbWEgd2l0aCBrZXkgb3IgaWQgXCIke2lkfVwiIGFscmVhZHkgZXhpc3RzYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2NvbXBpbGVTY2hlbWFFbnYoc2NoKSB7XG4gICAgICAgIGlmIChzY2gubWV0YSlcbiAgICAgICAgICAgIHRoaXMuX2NvbXBpbGVNZXRhU2NoZW1hKHNjaCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGNvbXBpbGVfMS5jb21waWxlU2NoZW1hLmNhbGwodGhpcywgc2NoKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghc2NoLnZhbGlkYXRlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgICAgICByZXR1cm4gc2NoLnZhbGlkYXRlO1xuICAgIH1cbiAgICBfY29tcGlsZU1ldGFTY2hlbWEoc2NoKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRPcHRzID0gdGhpcy5vcHRzO1xuICAgICAgICB0aGlzLm9wdHMgPSB0aGlzLl9tZXRhT3B0cztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbXBpbGVfMS5jb21waWxlU2NoZW1hLmNhbGwodGhpcywgc2NoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMub3B0cyA9IGN1cnJlbnRPcHRzO1xuICAgICAgICB9XG4gICAgfVxufVxuQWp2LlZhbGlkYXRpb25FcnJvciA9IHZhbGlkYXRpb25fZXJyb3JfMS5kZWZhdWx0O1xuQWp2Lk1pc3NpbmdSZWZFcnJvciA9IHJlZl9lcnJvcl8xLmRlZmF1bHQ7XG5leHBvcnRzLmRlZmF1bHQgPSBBanY7XG5mdW5jdGlvbiBjaGVja09wdGlvbnMoY2hlY2tPcHRzLCBvcHRpb25zLCBtc2csIGxvZyA9IFwiZXJyb3JcIikge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGNoZWNrT3B0cykge1xuICAgICAgICBjb25zdCBvcHQgPSBrZXk7XG4gICAgICAgIGlmIChvcHQgaW4gb3B0aW9ucylcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyW2xvZ10oYCR7bXNnfTogb3B0aW9uICR7a2V5fS4gJHtjaGVja09wdHNbb3B0XX1gKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRTY2hFbnYoa2V5UmVmKSB7XG4gICAga2V5UmVmID0gKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoa2V5UmVmKTsgLy8gVE9ETyB0ZXN0cyBmYWlsIHdpdGhvdXQgdGhpcyBsaW5lXG4gICAgcmV0dXJuIHRoaXMuc2NoZW1hc1trZXlSZWZdIHx8IHRoaXMucmVmc1trZXlSZWZdO1xufVxuZnVuY3Rpb24gYWRkSW5pdGlhbFNjaGVtYXMoKSB7XG4gICAgY29uc3Qgb3B0c1NjaGVtYXMgPSB0aGlzLm9wdHMuc2NoZW1hcztcbiAgICBpZiAoIW9wdHNTY2hlbWFzKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0c1NjaGVtYXMpKVxuICAgICAgICB0aGlzLmFkZFNjaGVtYShvcHRzU2NoZW1hcyk7XG4gICAgZWxzZVxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRzU2NoZW1hcylcbiAgICAgICAgICAgIHRoaXMuYWRkU2NoZW1hKG9wdHNTY2hlbWFzW2tleV0sIGtleSk7XG59XG5mdW5jdGlvbiBhZGRJbml0aWFsRm9ybWF0cygpIHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdGhpcy5vcHRzLmZvcm1hdHMpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5vcHRzLmZvcm1hdHNbbmFtZV07XG4gICAgICAgIGlmIChmb3JtYXQpXG4gICAgICAgICAgICB0aGlzLmFkZEZvcm1hdChuYW1lLCBmb3JtYXQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZEluaXRpYWxLZXl3b3JkcyhkZWZzKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVmcykpIHtcbiAgICAgICAgdGhpcy5hZGRWb2NhYnVsYXJ5KGRlZnMpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubG9nZ2VyLndhcm4oXCJrZXl3b3JkcyBvcHRpb24gYXMgbWFwIGlzIGRlcHJlY2F0ZWQsIHBhc3MgYXJyYXlcIik7XG4gICAgZm9yIChjb25zdCBrZXl3b3JkIGluIGRlZnMpIHtcbiAgICAgICAgY29uc3QgZGVmID0gZGVmc1trZXl3b3JkXTtcbiAgICAgICAgaWYgKCFkZWYua2V5d29yZClcbiAgICAgICAgICAgIGRlZi5rZXl3b3JkID0ga2V5d29yZDtcbiAgICAgICAgdGhpcy5hZGRLZXl3b3JkKGRlZik7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0TWV0YVNjaGVtYU9wdGlvbnMoKSB7XG4gICAgY29uc3QgbWV0YU9wdHMgPSB7IC4uLnRoaXMub3B0cyB9O1xuICAgIGZvciAoY29uc3Qgb3B0IG9mIE1FVEFfSUdOT1JFX09QVElPTlMpXG4gICAgICAgIGRlbGV0ZSBtZXRhT3B0c1tvcHRdO1xuICAgIHJldHVybiBtZXRhT3B0cztcbn1cbmNvbnN0IG5vTG9ncyA9IHsgbG9nKCkgeyB9LCB3YXJuKCkgeyB9LCBlcnJvcigpIHsgfSB9O1xuZnVuY3Rpb24gZ2V0TG9nZ2VyKGxvZ2dlcikge1xuICAgIGlmIChsb2dnZXIgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gbm9Mb2dzO1xuICAgIGlmIChsb2dnZXIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIGNvbnNvbGU7XG4gICAgaWYgKGxvZ2dlci5sb2cgJiYgbG9nZ2VyLndhcm4gJiYgbG9nZ2VyLmVycm9yKVxuICAgICAgICByZXR1cm4gbG9nZ2VyO1xuICAgIHRocm93IG5ldyBFcnJvcihcImxvZ2dlciBtdXN0IGltcGxlbWVudCBsb2csIHdhcm4gYW5kIGVycm9yIG1ldGhvZHNcIik7XG59XG5jb25zdCBLRVlXT1JEX05BTUUgPSAvXlthLXpfJF1bYS16MC05XyQ6LV0qJC9pO1xuZnVuY3Rpb24gY2hlY2tLZXl3b3JkKGtleXdvcmQsIGRlZikge1xuICAgIGNvbnN0IHsgUlVMRVMgfSA9IHRoaXM7XG4gICAgKDAsIHV0aWxfMS5lYWNoSXRlbSkoa2V5d29yZCwgKGt3ZCkgPT4ge1xuICAgICAgICBpZiAoUlVMRVMua2V5d29yZHNba3dkXSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5d29yZCAke2t3ZH0gaXMgYWxyZWFkeSBkZWZpbmVkYCk7XG4gICAgICAgIGlmICghS0VZV09SRF9OQU1FLnRlc3Qoa3dkKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5d29yZCAke2t3ZH0gaGFzIGludmFsaWQgbmFtZWApO1xuICAgIH0pO1xuICAgIGlmICghZGVmKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKGRlZi4kZGF0YSAmJiAhKFwiY29kZVwiIGluIGRlZiB8fCBcInZhbGlkYXRlXCIgaW4gZGVmKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJyRkYXRhIGtleXdvcmQgbXVzdCBoYXZlIFwiY29kZVwiIG9yIFwidmFsaWRhdGVcIiBmdW5jdGlvbicpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZFJ1bGUoa2V5d29yZCwgZGVmaW5pdGlvbiwgZGF0YVR5cGUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgcG9zdCA9IGRlZmluaXRpb24gPT09IG51bGwgfHwgZGVmaW5pdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVmaW5pdGlvbi5wb3N0O1xuICAgIGlmIChkYXRhVHlwZSAmJiBwb3N0KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleXdvcmQgd2l0aCBcInBvc3RcIiBmbGFnIGNhbm5vdCBoYXZlIFwidHlwZVwiJyk7XG4gICAgY29uc3QgeyBSVUxFUyB9ID0gdGhpcztcbiAgICBsZXQgcnVsZUdyb3VwID0gcG9zdCA/IFJVTEVTLnBvc3QgOiBSVUxFUy5ydWxlcy5maW5kKCh7IHR5cGU6IHQgfSkgPT4gdCA9PT0gZGF0YVR5cGUpO1xuICAgIGlmICghcnVsZUdyb3VwKSB7XG4gICAgICAgIHJ1bGVHcm91cCA9IHsgdHlwZTogZGF0YVR5cGUsIHJ1bGVzOiBbXSB9O1xuICAgICAgICBSVUxFUy5ydWxlcy5wdXNoKHJ1bGVHcm91cCk7XG4gICAgfVxuICAgIFJVTEVTLmtleXdvcmRzW2tleXdvcmRdID0gdHJ1ZTtcbiAgICBpZiAoIWRlZmluaXRpb24pXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBydWxlID0ge1xuICAgICAgICBrZXl3b3JkLFxuICAgICAgICBkZWZpbml0aW9uOiB7XG4gICAgICAgICAgICAuLi5kZWZpbml0aW9uLFxuICAgICAgICAgICAgdHlwZTogKDAsIGRhdGFUeXBlXzEuZ2V0SlNPTlR5cGVzKShkZWZpbml0aW9uLnR5cGUpLFxuICAgICAgICAgICAgc2NoZW1hVHlwZTogKDAsIGRhdGFUeXBlXzEuZ2V0SlNPTlR5cGVzKShkZWZpbml0aW9uLnNjaGVtYVR5cGUpLFxuICAgICAgICB9LFxuICAgIH07XG4gICAgaWYgKGRlZmluaXRpb24uYmVmb3JlKVxuICAgICAgICBhZGRCZWZvcmVSdWxlLmNhbGwodGhpcywgcnVsZUdyb3VwLCBydWxlLCBkZWZpbml0aW9uLmJlZm9yZSk7XG4gICAgZWxzZVxuICAgICAgICBydWxlR3JvdXAucnVsZXMucHVzaChydWxlKTtcbiAgICBSVUxFUy5hbGxba2V5d29yZF0gPSBydWxlO1xuICAgIChfYSA9IGRlZmluaXRpb24uaW1wbGVtZW50cykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvckVhY2goKGt3ZCkgPT4gdGhpcy5hZGRLZXl3b3JkKGt3ZCkpO1xufVxuZnVuY3Rpb24gYWRkQmVmb3JlUnVsZShydWxlR3JvdXAsIHJ1bGUsIGJlZm9yZSkge1xuICAgIGNvbnN0IGkgPSBydWxlR3JvdXAucnVsZXMuZmluZEluZGV4KChfcnVsZSkgPT4gX3J1bGUua2V5d29yZCA9PT0gYmVmb3JlKTtcbiAgICBpZiAoaSA+PSAwKSB7XG4gICAgICAgIHJ1bGVHcm91cC5ydWxlcy5zcGxpY2UoaSwgMCwgcnVsZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBydWxlR3JvdXAucnVsZXMucHVzaChydWxlKTtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihgcnVsZSAke2JlZm9yZX0gaXMgbm90IGRlZmluZWRgKTtcbiAgICB9XG59XG5mdW5jdGlvbiBrZXl3b3JkTWV0YXNjaGVtYShkZWYpIHtcbiAgICBsZXQgeyBtZXRhU2NoZW1hIH0gPSBkZWY7XG4gICAgaWYgKG1ldGFTY2hlbWEgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChkZWYuJGRhdGEgJiYgdGhpcy5vcHRzLiRkYXRhKVxuICAgICAgICBtZXRhU2NoZW1hID0gc2NoZW1hT3JEYXRhKG1ldGFTY2hlbWEpO1xuICAgIGRlZi52YWxpZGF0ZVNjaGVtYSA9IHRoaXMuY29tcGlsZShtZXRhU2NoZW1hLCB0cnVlKTtcbn1cbmNvbnN0ICRkYXRhUmVmID0ge1xuICAgICRyZWY6IFwiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Fqdi12YWxpZGF0b3IvYWp2L21hc3Rlci9saWIvcmVmcy9kYXRhLmpzb24jXCIsXG59O1xuZnVuY3Rpb24gc2NoZW1hT3JEYXRhKHNjaGVtYSkge1xuICAgIHJldHVybiB7IGFueU9mOiBbc2NoZW1hLCAkZGF0YVJlZl0gfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvcmUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImlkXCIsXG4gICAgY29kZSgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOT1QgU1VQUE9SVEVEOiBrZXl3b3JkIFwiaWRcIiwgdXNlIFwiJGlkXCIgZm9yIHNjaGVtYSBJRCcpO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2FsbFJlZiA9IGV4cG9ydHMuZ2V0VmFsaWRhdGUgPSB2b2lkIDA7XG5jb25zdCByZWZfZXJyb3JfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3JlZl9lcnJvclwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9uYW1lc1wiKTtcbmNvbnN0IGNvbXBpbGVfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIiRyZWZcIixcbiAgICBzY2hlbWFUeXBlOiBcInN0cmluZ1wiLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWE6ICRyZWYsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgYmFzZUlkLCBzY2hlbWFFbnY6IGVudiwgdmFsaWRhdGVOYW1lLCBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICAgICAgY29uc3QgeyByb290IH0gPSBlbnY7XG4gICAgICAgIGlmICgoJHJlZiA9PT0gXCIjXCIgfHwgJHJlZiA9PT0gXCIjL1wiKSAmJiBiYXNlSWQgPT09IHJvb3QuYmFzZUlkKVxuICAgICAgICAgICAgcmV0dXJuIGNhbGxSb290UmVmKCk7XG4gICAgICAgIGNvbnN0IHNjaE9yRW52ID0gY29tcGlsZV8xLnJlc29sdmVSZWYuY2FsbChzZWxmLCByb290LCBiYXNlSWQsICRyZWYpO1xuICAgICAgICBpZiAoc2NoT3JFbnYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyByZWZfZXJyb3JfMS5kZWZhdWx0KGl0Lm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgJHJlZik7XG4gICAgICAgIGlmIChzY2hPckVudiBpbnN0YW5jZW9mIGNvbXBpbGVfMS5TY2hlbWFFbnYpXG4gICAgICAgICAgICByZXR1cm4gY2FsbFZhbGlkYXRlKHNjaE9yRW52KTtcbiAgICAgICAgcmV0dXJuIGlubGluZVJlZlNjaGVtYShzY2hPckVudik7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxSb290UmVmKCkge1xuICAgICAgICAgICAgaWYgKGVudiA9PT0gcm9vdClcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbFJlZihjeHQsIHZhbGlkYXRlTmFtZSwgZW52LCBlbnYuJGFzeW5jKTtcbiAgICAgICAgICAgIGNvbnN0IHJvb3ROYW1lID0gZ2VuLnNjb3BlVmFsdWUoXCJyb290XCIsIHsgcmVmOiByb290IH0pO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxSZWYoY3h0LCAoMCwgY29kZWdlbl8xLl8pIGAke3Jvb3ROYW1lfS52YWxpZGF0ZWAsIHJvb3QsIHJvb3QuJGFzeW5jKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjYWxsVmFsaWRhdGUoc2NoKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gZ2V0VmFsaWRhdGUoY3h0LCBzY2gpO1xuICAgICAgICAgICAgY2FsbFJlZihjeHQsIHYsIHNjaCwgc2NoLiRhc3luYyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaW5saW5lUmVmU2NoZW1hKHNjaCkge1xuICAgICAgICAgICAgY29uc3Qgc2NoTmFtZSA9IGdlbi5zY29wZVZhbHVlKFwic2NoZW1hXCIsIG9wdHMuY29kZS5zb3VyY2UgPT09IHRydWUgPyB7IHJlZjogc2NoLCBjb2RlOiAoMCwgY29kZWdlbl8xLnN0cmluZ2lmeSkoc2NoKSB9IDogeyByZWY6IHNjaCB9KTtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IHNjaEN4dCA9IGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlczogW10sXG4gICAgICAgICAgICAgICAgc2NoZW1hUGF0aDogY29kZWdlbl8xLm5pbCxcbiAgICAgICAgICAgICAgICB0b3BTY2hlbWFSZWY6IHNjaE5hbWUsXG4gICAgICAgICAgICAgICAgZXJyU2NoZW1hUGF0aDogJHJlZixcbiAgICAgICAgICAgIH0sIHZhbGlkKTtcbiAgICAgICAgICAgIGN4dC5tZXJnZUV2YWx1YXRlZChzY2hDeHQpO1xuICAgICAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZnVuY3Rpb24gZ2V0VmFsaWRhdGUoY3h0LCBzY2gpIHtcbiAgICBjb25zdCB7IGdlbiB9ID0gY3h0O1xuICAgIHJldHVybiBzY2gudmFsaWRhdGVcbiAgICAgICAgPyBnZW4uc2NvcGVWYWx1ZShcInZhbGlkYXRlXCIsIHsgcmVmOiBzY2gudmFsaWRhdGUgfSlcbiAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2dlbi5zY29wZVZhbHVlKFwid3JhcHBlclwiLCB7IHJlZjogc2NoIH0pfS52YWxpZGF0ZWA7XG59XG5leHBvcnRzLmdldFZhbGlkYXRlID0gZ2V0VmFsaWRhdGU7XG5mdW5jdGlvbiBjYWxsUmVmKGN4dCwgdiwgc2NoLCAkYXN5bmMpIHtcbiAgICBjb25zdCB7IGdlbiwgaXQgfSA9IGN4dDtcbiAgICBjb25zdCB7IGFsbEVycm9ycywgc2NoZW1hRW52OiBlbnYsIG9wdHMgfSA9IGl0O1xuICAgIGNvbnN0IHBhc3NDeHQgPSBvcHRzLnBhc3NDb250ZXh0ID8gbmFtZXNfMS5kZWZhdWx0LnRoaXMgOiBjb2RlZ2VuXzEubmlsO1xuICAgIGlmICgkYXN5bmMpXG4gICAgICAgIGNhbGxBc3luY1JlZigpO1xuICAgIGVsc2VcbiAgICAgICAgY2FsbFN5bmNSZWYoKTtcbiAgICBmdW5jdGlvbiBjYWxsQXN5bmNSZWYoKSB7XG4gICAgICAgIGlmICghZW52LiRhc3luYylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFzeW5jIHNjaGVtYSByZWZlcmVuY2VkIGJ5IHN5bmMgc2NoZW1hXCIpO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiKTtcbiAgICAgICAgZ2VuLnRyeSgoKSA9PiB7XG4gICAgICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGBhd2FpdCAkeygwLCBjb2RlXzEuY2FsbFZhbGlkYXRlQ29kZSkoY3h0LCB2LCBwYXNzQ3h0KX1gKTtcbiAgICAgICAgICAgIGFkZEV2YWx1YXRlZEZyb20odik7IC8vIFRPRE8gd2lsbCBub3Qgd29yayB3aXRoIGFzeW5jLCBpdCBoYXMgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgcmVzdWx0XG4gICAgICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgfSwgKGUpID0+IHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAhKCR7ZX0gaW5zdGFuY2VvZiAke2l0LlZhbGlkYXRpb25FcnJvcn0pYCwgKCkgPT4gZ2VuLnRocm93KGUpKTtcbiAgICAgICAgICAgIGFkZEVycm9yc0Zyb20oZSk7XG4gICAgICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjYWxsU3luY1JlZigpIHtcbiAgICAgICAgY3h0LnJlc3VsdCgoMCwgY29kZV8xLmNhbGxWYWxpZGF0ZUNvZGUpKGN4dCwgdiwgcGFzc0N4dCksICgpID0+IGFkZEV2YWx1YXRlZEZyb20odiksICgpID0+IGFkZEVycm9yc0Zyb20odikpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRFcnJvcnNGcm9tKHNvdXJjZSkge1xuICAgICAgICBjb25zdCBlcnJzID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtzb3VyY2V9LmVycm9yc2A7XG4gICAgICAgIGdlbi5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9ID09PSBudWxsID8gJHtlcnJzfSA6ICR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9LmNvbmNhdCgke2VycnN9KWApOyAvLyBUT0RPIHRhZ2dlZFxuICAgICAgICBnZW4uYXNzaWduKG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9Lmxlbmd0aGApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRFdmFsdWF0ZWRGcm9tKHNvdXJjZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghaXQub3B0cy51bmV2YWx1YXRlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qgc2NoRXZhbHVhdGVkID0gKF9hID0gc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLnZhbGlkYXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXZhbHVhdGVkO1xuICAgICAgICAvLyBUT0RPIHJlZmFjdG9yXG4gICAgICAgIGlmIChpdC5wcm9wcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKHNjaEV2YWx1YXRlZCAmJiAhc2NoRXZhbHVhdGVkLmR5bmFtaWNQcm9wcykge1xuICAgICAgICAgICAgICAgIGlmIChzY2hFdmFsdWF0ZWQucHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpdC5wcm9wcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5wcm9wcyhnZW4sIHNjaEV2YWx1YXRlZC5wcm9wcywgaXQucHJvcHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzID0gZ2VuLnZhcihcInByb3BzXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7c291cmNlfS5ldmFsdWF0ZWQucHJvcHNgKTtcbiAgICAgICAgICAgICAgICBpdC5wcm9wcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5wcm9wcyhnZW4sIHByb3BzLCBpdC5wcm9wcywgY29kZWdlbl8xLk5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpdC5pdGVtcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKHNjaEV2YWx1YXRlZCAmJiAhc2NoRXZhbHVhdGVkLmR5bmFtaWNJdGVtcykge1xuICAgICAgICAgICAgICAgIGlmIChzY2hFdmFsdWF0ZWQuaXRlbXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpdC5pdGVtcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5pdGVtcyhnZW4sIHNjaEV2YWx1YXRlZC5pdGVtcywgaXQuaXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gZ2VuLnZhcihcIml0ZW1zXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7c291cmNlfS5ldmFsdWF0ZWQuaXRlbXNgKTtcbiAgICAgICAgICAgICAgICBpdC5pdGVtcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5pdGVtcyhnZW4sIGl0ZW1zLCBpdC5pdGVtcywgY29kZWdlbl8xLk5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5jYWxsUmVmID0gY2FsbFJlZjtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgaWRfMSA9IHJlcXVpcmUoXCIuL2lkXCIpO1xuY29uc3QgcmVmXzEgPSByZXF1aXJlKFwiLi9yZWZcIik7XG5jb25zdCBjb3JlID0gW1xuICAgIFwiJHNjaGVtYVwiLFxuICAgIFwiJGlkXCIsXG4gICAgXCIkZGVmc1wiLFxuICAgIFwiJHZvY2FidWxhcnlcIixcbiAgICB7IGtleXdvcmQ6IFwiJGNvbW1lbnRcIiB9LFxuICAgIFwiZGVmaW5pdGlvbnNcIixcbiAgICBpZF8xLmRlZmF1bHQsXG4gICAgcmVmXzEuZGVmYXVsdCxcbl07XG5leHBvcnRzLmRlZmF1bHQgPSBjb3JlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBvcHMgPSBjb2RlZ2VuXzEub3BlcmF0b3JzO1xuY29uc3QgS1dEcyA9IHtcbiAgICBtYXhpbXVtOiB7IG9rU3RyOiBcIjw9XCIsIG9rOiBvcHMuTFRFLCBmYWlsOiBvcHMuR1QgfSxcbiAgICBtaW5pbXVtOiB7IG9rU3RyOiBcIj49XCIsIG9rOiBvcHMuR1RFLCBmYWlsOiBvcHMuTFQgfSxcbiAgICBleGNsdXNpdmVNYXhpbXVtOiB7IG9rU3RyOiBcIjxcIiwgb2s6IG9wcy5MVCwgZmFpbDogb3BzLkdURSB9LFxuICAgIGV4Y2x1c2l2ZU1pbmltdW06IHsgb2tTdHI6IFwiPlwiLCBvazogb3BzLkdULCBmYWlsOiBvcHMuTFRFIH0sXG59O1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgYmUgJHtLV0RzW2tleXdvcmRdLm9rU3RyfSAke3NjaGVtYUNvZGV9YCxcbiAgICBwYXJhbXM6ICh7IGtleXdvcmQsIHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2NvbXBhcmlzb246ICR7S1dEc1trZXl3b3JkXS5va1N0cn0sIGxpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IE9iamVjdC5rZXlzKEtXRHMpLFxuICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgc2NoZW1hVHlwZTogXCJudW1iZXJcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYUNvZGUgfSA9IGN4dDtcbiAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ICR7S1dEc1trZXl3b3JkXS5mYWlsfSAke3NjaGVtYUNvZGV9IHx8IGlzTmFOKCR7ZGF0YX0pYCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW1pdE51bWJlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGJlIG11bHRpcGxlIG9mICR7c2NoZW1hQ29kZX1gLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bXVsdGlwbGVPZjogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIm11bHRpcGxlT2ZcIixcbiAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8vIGNvbnN0IGJkdCA9IGJhZCREYXRhVHlwZShzY2hlbWFDb2RlLCA8c3RyaW5nPmRlZi5zY2hlbWFUeXBlLCAkZGF0YSlcbiAgICAgICAgY29uc3QgcHJlYyA9IGl0Lm9wdHMubXVsdGlwbGVPZlByZWNpc2lvbjtcbiAgICAgICAgY29uc3QgcmVzID0gZ2VuLmxldChcInJlc1wiKTtcbiAgICAgICAgY29uc3QgaW52YWxpZCA9IHByZWNcbiAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5fKSBgTWF0aC5hYnMoTWF0aC5yb3VuZCgke3Jlc30pIC0gJHtyZXN9KSA+IDFlLSR7cHJlY31gXG4gICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7cmVzfSAhPT0gcGFyc2VJbnQoJHtyZXN9KWA7XG4gICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgKCR7c2NoZW1hQ29kZX0gPT09IDAgfHwgKCR7cmVzfSA9ICR7ZGF0YX0vJHtzY2hlbWFDb2RlfSwgJHtpbnZhbGlkfSkpYCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdWx0aXBsZU9mLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZ1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL3B1bnljb2RlLmpzIC0gcHVueWNvZGUudWNzMi5kZWNvZGVcbmZ1bmN0aW9uIHVjczJsZW5ndGgoc3RyKSB7XG4gICAgY29uc3QgbGVuID0gc3RyLmxlbmd0aDtcbiAgICBsZXQgbGVuZ3RoID0gMDtcbiAgICBsZXQgcG9zID0gMDtcbiAgICBsZXQgdmFsdWU7XG4gICAgd2hpbGUgKHBvcyA8IGxlbikge1xuICAgICAgICBsZW5ndGgrKztcbiAgICAgICAgdmFsdWUgPSBzdHIuY2hhckNvZGVBdChwb3MrKyk7XG4gICAgICAgIGlmICh2YWx1ZSA+PSAweGQ4MDAgJiYgdmFsdWUgPD0gMHhkYmZmICYmIHBvcyA8IGxlbikge1xuICAgICAgICAgICAgLy8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG4gICAgICAgICAgICB2YWx1ZSA9IHN0ci5jaGFyQ29kZUF0KHBvcyk7XG4gICAgICAgICAgICBpZiAoKHZhbHVlICYgMHhmYzAwKSA9PT0gMHhkYzAwKVxuICAgICAgICAgICAgICAgIHBvcysrOyAvLyBsb3cgc3Vycm9nYXRlXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxlbmd0aDtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHVjczJsZW5ndGg7XG51Y3MybGVuZ3RoLmNvZGUgPSAncmVxdWlyZShcImFqdi9kaXN0L3J1bnRpbWUvdWNzMmxlbmd0aFwiKS5kZWZhdWx0Jztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVjczJsZW5ndGguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgdWNzMmxlbmd0aF8xID0gcmVxdWlyZShcIi4uLy4uL3J1bnRpbWUvdWNzMmxlbmd0aFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2UoeyBrZXl3b3JkLCBzY2hlbWFDb2RlIH0pIHtcbiAgICAgICAgY29uc3QgY29tcCA9IGtleXdvcmQgPT09IFwibWF4TGVuZ3RoXCIgPyBcIm1vcmVcIiA6IFwiZmV3ZXJcIjtcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSAke2NvbXB9IHRoYW4gJHtzY2hlbWFDb2RlfSBjaGFyYWN0ZXJzYDtcbiAgICB9LFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bGltaXQ6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogW1wibWF4TGVuZ3RoXCIsIFwibWluTGVuZ3RoXCJdLFxuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgc2NoZW1hVHlwZTogXCJudW1iZXJcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IG9wID0ga2V5d29yZCA9PT0gXCJtYXhMZW5ndGhcIiA/IGNvZGVnZW5fMS5vcGVyYXRvcnMuR1QgOiBjb2RlZ2VuXzEub3BlcmF0b3JzLkxUO1xuICAgICAgICBjb25zdCBsZW4gPSBpdC5vcHRzLnVuaWNvZGUgPT09IGZhbHNlID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgIDogKDAsIGNvZGVnZW5fMS5fKSBgJHsoMCwgdXRpbF8xLnVzZUZ1bmMpKGN4dC5nZW4sIHVjczJsZW5ndGhfMS5kZWZhdWx0KX0oJHtkYXRhfSlgO1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSAke29wfSAke3NjaGVtYUNvZGV9YCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW1pdExlbmd0aC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IG1hdGNoIHBhdHRlcm4gXCIke3NjaGVtYUNvZGV9XCJgLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7cGF0dGVybjogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInBhdHRlcm5cIixcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIHNjaGVtYVR5cGU6IFwic3RyaW5nXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHUgPSBpdC5vcHRzLnVuaWNvZGVSZWdFeHAgPyBcInVcIiA6IFwiXCI7XG4gICAgICAgIGlmICgkZGF0YSkge1xuICAgICAgICAgICAgY29uc3QgeyByZWdFeHAgfSA9IGl0Lm9wdHMuY29kZTtcbiAgICAgICAgICAgIGNvbnN0IHJlZ0V4cENvZGUgPSByZWdFeHAuY29kZSA9PT0gXCJuZXcgUmVnRXhwXCIgPyAoMCwgY29kZWdlbl8xLl8pIGBuZXcgUmVnRXhwYCA6ICgwLCB1dGlsXzEudXNlRnVuYykoZ2VuLCByZWdFeHApO1xuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIik7XG4gICAgICAgICAgICBnZW4udHJ5KCgpID0+IGdlbi5hc3NpZ24odmFsaWQsICgwLCBjb2RlZ2VuXzEuXykgYCR7cmVnRXhwQ29kZX0oJHtzY2hlbWFDb2RlfSwgJHt1fSkudGVzdCgke2RhdGF9KWApLCAoKSA9PiBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSkpO1xuICAgICAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAhJHt2YWxpZH1gKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZ0V4cCA9ICgwLCBjb2RlXzEudXNlUGF0dGVybikoY3h0LCBzY2hlbWEpO1xuICAgICAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAhJHtyZWdFeHB9LnRlc3QoJHtkYXRhfSlgKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF0dGVybi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2UoeyBrZXl3b3JkLCBzY2hlbWFDb2RlIH0pIHtcbiAgICAgICAgY29uc3QgY29tcCA9IGtleXdvcmQgPT09IFwibWF4UHJvcGVydGllc1wiID8gXCJtb3JlXCIgOiBcImZld2VyXCI7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgJHtjb21wfSB0aGFuICR7c2NoZW1hQ29kZX0gcHJvcGVydGllc2A7XG4gICAgfSxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFtcIm1heFByb3BlcnRpZXNcIiwgXCJtaW5Qcm9wZXJ0aWVzXCJdLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJudW1iZXJcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYUNvZGUgfSA9IGN4dDtcbiAgICAgICAgY29uc3Qgb3AgPSBrZXl3b3JkID09PSBcIm1heFByb3BlcnRpZXNcIiA/IGNvZGVnZW5fMS5vcGVyYXRvcnMuR1QgOiBjb2RlZ2VuXzEub3BlcmF0b3JzLkxUO1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYE9iamVjdC5rZXlzKCR7ZGF0YX0pLmxlbmd0aCAke29wfSAke3NjaGVtYUNvZGV9YCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW1pdFByb3BlcnRpZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXM6IHsgbWlzc2luZ1Byb3BlcnR5IH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgJyR7bWlzc2luZ1Byb3BlcnR5fSdgLFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IG1pc3NpbmdQcm9wZXJ0eSB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHttaXNzaW5nUHJvcGVydHk6ICR7bWlzc2luZ1Byb3BlcnR5fX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInJlcXVpcmVkXCIsXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBzY2hlbWFUeXBlOiBcImFycmF5XCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgc2NoZW1hQ29kZSwgZGF0YSwgJGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGlmICghJGRhdGEgJiYgc2NoZW1hLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdXNlTG9vcCA9IHNjaGVtYS5sZW5ndGggPj0gb3B0cy5sb29wUmVxdWlyZWQ7XG4gICAgICAgIGlmIChpdC5hbGxFcnJvcnMpXG4gICAgICAgICAgICBhbGxFcnJvcnNNb2RlKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGV4aXRPbkVycm9yTW9kZSgpO1xuICAgICAgICBpZiAob3B0cy5zdHJpY3RSZXF1aXJlZCkge1xuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBjeHQucGFyZW50U2NoZW1hLnByb3BlcnRpZXM7XG4gICAgICAgICAgICBjb25zdCB7IGRlZmluZWRQcm9wZXJ0aWVzIH0gPSBjeHQuaXQ7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVpcmVkS2V5IG9mIHNjaGVtYSkge1xuICAgICAgICAgICAgICAgIGlmICgocHJvcHMgPT09IG51bGwgfHwgcHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb3BzW3JlcXVpcmVkS2V5XSkgPT09IHVuZGVmaW5lZCAmJiAhZGVmaW5lZFByb3BlcnRpZXMuaGFzKHJlcXVpcmVkS2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFQYXRoID0gaXQuc2NoZW1hRW52LmJhc2VJZCArIGl0LmVyclNjaGVtYVBhdGg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IGByZXF1aXJlZCBwcm9wZXJ0eSBcIiR7cmVxdWlyZWRLZXl9XCIgaXMgbm90IGRlZmluZWQgYXQgXCIke3NjaGVtYVBhdGh9XCIgKHN0cmljdFJlcXVpcmVkKWA7XG4gICAgICAgICAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgbXNnLCBpdC5vcHRzLnN0cmljdFJlcXVpcmVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWxsRXJyb3JzTW9kZSgpIHtcbiAgICAgICAgICAgIGlmICh1c2VMb29wIHx8ICRkYXRhKSB7XG4gICAgICAgICAgICAgICAgY3h0LmJsb2NrJGRhdGEoY29kZWdlbl8xLm5pbCwgbG9vcEFsbFJlcXVpcmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBzY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGNvZGVfMS5jaGVja1JlcG9ydE1pc3NpbmdQcm9wKShjeHQsIHByb3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBleGl0T25FcnJvck1vZGUoKSB7XG4gICAgICAgICAgICBjb25zdCBtaXNzaW5nID0gZ2VuLmxldChcIm1pc3NpbmdcIik7XG4gICAgICAgICAgICBpZiAodXNlTG9vcCB8fCAkZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIGN4dC5ibG9jayRkYXRhKHZhbGlkLCAoKSA9PiBsb29wVW50aWxNaXNzaW5nKG1pc3NpbmcsIHZhbGlkKSk7XG4gICAgICAgICAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZV8xLmNoZWNrTWlzc2luZ1Byb3ApKGN4dCwgc2NoZW1hLCBtaXNzaW5nKSk7XG4gICAgICAgICAgICAgICAgKDAsIGNvZGVfMS5yZXBvcnRNaXNzaW5nUHJvcCkoY3h0LCBtaXNzaW5nKTtcbiAgICAgICAgICAgICAgICBnZW4uZWxzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGxvb3BBbGxSZXF1aXJlZCgpIHtcbiAgICAgICAgICAgIGdlbi5mb3JPZihcInByb3BcIiwgc2NoZW1hQ29kZSwgKHByb3ApID0+IHtcbiAgICAgICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbWlzc2luZ1Byb3BlcnR5OiBwcm9wIH0pO1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZV8xLm5vUHJvcGVydHlJbkRhdGEpKGdlbiwgZGF0YSwgcHJvcCwgb3B0cy5vd25Qcm9wZXJ0aWVzKSwgKCkgPT4gY3h0LmVycm9yKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbG9vcFVudGlsTWlzc2luZyhtaXNzaW5nLCB2YWxpZCkge1xuICAgICAgICAgICAgY3h0LnNldFBhcmFtcyh7IG1pc3NpbmdQcm9wZXJ0eTogbWlzc2luZyB9KTtcbiAgICAgICAgICAgIGdlbi5mb3JPZihtaXNzaW5nLCBzY2hlbWFDb2RlLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgKDAsIGNvZGVfMS5wcm9wZXJ0eUluRGF0YSkoZ2VuLCBkYXRhLCBtaXNzaW5nLCBvcHRzLm93blByb3BlcnRpZXMpKTtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjeHQuZXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmJyZWFrKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBjb2RlZ2VuXzEubmlsKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVxdWlyZWQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSB7XG4gICAgICAgIGNvbnN0IGNvbXAgPSBrZXl3b3JkID09PSBcIm1heEl0ZW1zXCIgPyBcIm1vcmVcIiA6IFwiZmV3ZXJcIjtcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSAke2NvbXB9IHRoYW4gJHtzY2hlbWFDb2RlfSBpdGVtc2A7XG4gICAgfSxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFtcIm1heEl0ZW1zXCIsIFwibWluSXRlbXNcIl0sXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBrZXl3b3JkLCBkYXRhLCBzY2hlbWFDb2RlIH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IG9wID0ga2V5d29yZCA9PT0gXCJtYXhJdGVtc1wiID8gY29kZWdlbl8xLm9wZXJhdG9ycy5HVCA6IGNvZGVnZW5fMS5vcGVyYXRvcnMuTFQ7XG4gICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGggJHtvcH0gJHtzY2hlbWFDb2RlfWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGltaXRJdGVtcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Fqdi12YWxpZGF0b3IvYWp2L2lzc3Vlcy84ODlcbmNvbnN0IGVxdWFsID0gcmVxdWlyZShcImZhc3QtZGVlcC1lcXVhbFwiKTtcbmVxdWFsLmNvZGUgPSAncmVxdWlyZShcImFqdi9kaXN0L3J1bnRpbWUvZXF1YWxcIikuZGVmYXVsdCc7XG5leHBvcnRzLmRlZmF1bHQgPSBlcXVhbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVxdWFsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBkYXRhVHlwZV8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVxdWFsXzEgPSByZXF1aXJlKFwiLi4vLi4vcnVudGltZS9lcXVhbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBpLCBqIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IE5PVCBoYXZlIGR1cGxpY2F0ZSBpdGVtcyAoaXRlbXMgIyMgJHtqfSBhbmQgJHtpfSBhcmUgaWRlbnRpY2FsKWAsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgaSwgaiB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtpOiAke2l9LCBqOiAke2p9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwidW5pcXVlSXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogXCJib29sZWFuXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgc2NoZW1hQ29kZSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKCEkZGF0YSAmJiAhc2NoZW1hKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiKTtcbiAgICAgICAgY29uc3QgaXRlbVR5cGVzID0gcGFyZW50U2NoZW1hLml0ZW1zID8gKDAsIGRhdGFUeXBlXzEuZ2V0U2NoZW1hVHlwZXMpKHBhcmVudFNjaGVtYS5pdGVtcykgOiBbXTtcbiAgICAgICAgY3h0LmJsb2NrJGRhdGEodmFsaWQsIHZhbGlkYXRlVW5pcXVlSXRlbXMsICgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hQ29kZX0gPT09IGZhbHNlYCk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlVW5pcXVlSXRlbXMoKSB7XG4gICAgICAgICAgICBjb25zdCBpID0gZ2VuLmxldChcImlcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICAgICAgICAgIGNvbnN0IGogPSBnZW4ubGV0KFwialwiKTtcbiAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBpLCBqIH0pO1xuICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtpfSA+IDFgLCAoKSA9PiAoY2FuT3B0aW1pemUoKSA/IGxvb3BOIDogbG9vcE4yKShpLCBqKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2FuT3B0aW1pemUoKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbVR5cGVzLmxlbmd0aCA+IDAgJiYgIWl0ZW1UeXBlcy5zb21lKCh0KSA9PiB0ID09PSBcIm9iamVjdFwiIHx8IHQgPT09IFwiYXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbG9vcE4oaSwgaikge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGdlbi5uYW1lKFwiaXRlbVwiKTtcbiAgICAgICAgICAgIGNvbnN0IHdyb25nVHlwZSA9ICgwLCBkYXRhVHlwZV8xLmNoZWNrRGF0YVR5cGVzKShpdGVtVHlwZXMsIGl0ZW0sIGl0Lm9wdHMuc3RyaWN0TnVtYmVycywgZGF0YVR5cGVfMS5EYXRhVHlwZS5Xcm9uZyk7XG4gICAgICAgICAgICBjb25zdCBpbmRpY2VzID0gZ2VuLmNvbnN0KFwiaW5kaWNlc1wiLCAoMCwgY29kZWdlbl8xLl8pIGB7fWApO1xuICAgICAgICAgICAgZ2VuLmZvcigoMCwgY29kZWdlbl8xLl8pIGA7JHtpfS0tO2AsICgpID0+IHtcbiAgICAgICAgICAgICAgICBnZW4ubGV0KGl0ZW0sICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX1bJHtpfV1gKTtcbiAgICAgICAgICAgICAgICBnZW4uaWYod3JvbmdUeXBlLCAoMCwgY29kZWdlbl8xLl8pIGBjb250aW51ZWApO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtVHlwZXMubGVuZ3RoID4gMSlcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2l0ZW19ID09IFwic3RyaW5nXCJgLCAoMCwgY29kZWdlbl8xLl8pIGAke2l0ZW19ICs9IFwiX1wiYCk7XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5pZigoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtpbmRpY2VzfVske2l0ZW19XSA9PSBcIm51bWJlclwiYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKGosICgwLCBjb2RlZ2VuXzEuXykgYCR7aW5kaWNlc31bJHtpdGVtfV1gKTtcbiAgICAgICAgICAgICAgICAgICAgY3h0LmVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKS5icmVhaygpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYCR7aW5kaWNlc31bJHtpdGVtfV0gPSAke2l9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBsb29wTjIoaSwgaikge1xuICAgICAgICAgICAgY29uc3QgZXFsID0gKDAsIHV0aWxfMS51c2VGdW5jKShnZW4sIGVxdWFsXzEuZGVmYXVsdCk7XG4gICAgICAgICAgICBjb25zdCBvdXRlciA9IGdlbi5uYW1lKFwib3V0ZXJcIik7XG4gICAgICAgICAgICBnZW4ubGFiZWwob3V0ZXIpLmZvcigoMCwgY29kZWdlbl8xLl8pIGA7JHtpfS0tO2AsICgpID0+IGdlbi5mb3IoKDAsIGNvZGVnZW5fMS5fKSBgJHtqfSA9ICR7aX07ICR7an0tLTtgLCAoKSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtlcWx9KCR7ZGF0YX1bJHtpfV0sICR7ZGF0YX1bJHtqfV0pYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGN4dC5lcnJvcigpO1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKS5icmVhayhvdXRlcik7XG4gICAgICAgICAgICB9KSkpO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11bmlxdWVJdGVtcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcXVhbF8xID0gcmVxdWlyZShcIi4uLy4uL3J1bnRpbWUvZXF1YWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcIm11c3QgYmUgZXF1YWwgdG8gY29uc3RhbnRcIixcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2FsbG93ZWRWYWx1ZTogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImNvbnN0XCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWFDb2RlLCBzY2hlbWEgfSA9IGN4dDtcbiAgICAgICAgaWYgKCRkYXRhIHx8IChzY2hlbWEgJiYgdHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiKSkge1xuICAgICAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAhJHsoMCwgdXRpbF8xLnVzZUZ1bmMpKGdlbiwgZXF1YWxfMS5kZWZhdWx0KX0oJHtkYXRhfSwgJHtzY2hlbWFDb2RlfSlgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGN4dC5mYWlsKCgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hfSAhPT0gJHtkYXRhfWApO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcXVhbF8xID0gcmVxdWlyZShcIi4uLy4uL3J1bnRpbWUvZXF1YWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcIm11c3QgYmUgZXF1YWwgdG8gb25lIG9mIHRoZSBhbGxvd2VkIHZhbHVlc1wiLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7YWxsb3dlZFZhbHVlczogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImVudW1cIixcbiAgICBzY2hlbWFUeXBlOiBcImFycmF5XCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGlmICghJGRhdGEgJiYgc2NoZW1hLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImVudW0gbXVzdCBoYXZlIG5vbi1lbXB0eSBhcnJheVwiKTtcbiAgICAgICAgY29uc3QgdXNlTG9vcCA9IHNjaGVtYS5sZW5ndGggPj0gaXQub3B0cy5sb29wRW51bTtcbiAgICAgICAgbGV0IGVxbDtcbiAgICAgICAgY29uc3QgZ2V0RXFsID0gKCkgPT4gKGVxbCAhPT0gbnVsbCAmJiBlcWwgIT09IHZvaWQgMCA/IGVxbCA6IChlcWwgPSAoMCwgdXRpbF8xLnVzZUZ1bmMpKGdlbiwgZXF1YWxfMS5kZWZhdWx0KSkpO1xuICAgICAgICBsZXQgdmFsaWQ7XG4gICAgICAgIGlmICh1c2VMb29wIHx8ICRkYXRhKSB7XG4gICAgICAgICAgICB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiKTtcbiAgICAgICAgICAgIGN4dC5ibG9jayRkYXRhKHZhbGlkLCBsb29wRW51bSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzY2hlbWEpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgICAgIGNvbnN0IHZTY2hlbWEgPSBnZW4uY29uc3QoXCJ2U2NoZW1hXCIsIHNjaGVtYUNvZGUpO1xuICAgICAgICAgICAgdmFsaWQgPSAoMCwgY29kZWdlbl8xLm9yKSguLi5zY2hlbWEubWFwKChfeCwgaSkgPT4gZXF1YWxDb2RlKHZTY2hlbWEsIGkpKSk7XG4gICAgICAgIH1cbiAgICAgICAgY3h0LnBhc3ModmFsaWQpO1xuICAgICAgICBmdW5jdGlvbiBsb29wRW51bSgpIHtcbiAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKTtcbiAgICAgICAgICAgIGdlbi5mb3JPZihcInZcIiwgc2NoZW1hQ29kZSwgKHYpID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2dldEVxbCgpfSgke2RhdGF9LCAke3Z9KWAsICgpID0+IGdlbi5hc3NpZ24odmFsaWQsIHRydWUpLmJyZWFrKCkpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBlcXVhbENvZGUodlNjaGVtYSwgaSkge1xuICAgICAgICAgICAgY29uc3Qgc2NoID0gc2NoZW1hW2ldO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBzY2ggPT09IFwib2JqZWN0XCIgJiYgc2NoICE9PSBudWxsXG4gICAgICAgICAgICAgICAgPyAoMCwgY29kZWdlbl8xLl8pIGAke2dldEVxbCgpfSgke2RhdGF9LCAke3ZTY2hlbWF9WyR7aX1dKWBcbiAgICAgICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gPT09ICR7c2NofWA7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVudW0uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGxpbWl0TnVtYmVyXzEgPSByZXF1aXJlKFwiLi9saW1pdE51bWJlclwiKTtcbmNvbnN0IG11bHRpcGxlT2ZfMSA9IHJlcXVpcmUoXCIuL211bHRpcGxlT2ZcIik7XG5jb25zdCBsaW1pdExlbmd0aF8xID0gcmVxdWlyZShcIi4vbGltaXRMZW5ndGhcIik7XG5jb25zdCBwYXR0ZXJuXzEgPSByZXF1aXJlKFwiLi9wYXR0ZXJuXCIpO1xuY29uc3QgbGltaXRQcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9saW1pdFByb3BlcnRpZXNcIik7XG5jb25zdCByZXF1aXJlZF8xID0gcmVxdWlyZShcIi4vcmVxdWlyZWRcIik7XG5jb25zdCBsaW1pdEl0ZW1zXzEgPSByZXF1aXJlKFwiLi9saW1pdEl0ZW1zXCIpO1xuY29uc3QgdW5pcXVlSXRlbXNfMSA9IHJlcXVpcmUoXCIuL3VuaXF1ZUl0ZW1zXCIpO1xuY29uc3QgY29uc3RfMSA9IHJlcXVpcmUoXCIuL2NvbnN0XCIpO1xuY29uc3QgZW51bV8xID0gcmVxdWlyZShcIi4vZW51bVwiKTtcbmNvbnN0IHZhbGlkYXRpb24gPSBbXG4gICAgLy8gbnVtYmVyXG4gICAgbGltaXROdW1iZXJfMS5kZWZhdWx0LFxuICAgIG11bHRpcGxlT2ZfMS5kZWZhdWx0LFxuICAgIC8vIHN0cmluZ1xuICAgIGxpbWl0TGVuZ3RoXzEuZGVmYXVsdCxcbiAgICBwYXR0ZXJuXzEuZGVmYXVsdCxcbiAgICAvLyBvYmplY3RcbiAgICBsaW1pdFByb3BlcnRpZXNfMS5kZWZhdWx0LFxuICAgIHJlcXVpcmVkXzEuZGVmYXVsdCxcbiAgICAvLyBhcnJheVxuICAgIGxpbWl0SXRlbXNfMS5kZWZhdWx0LFxuICAgIHVuaXF1ZUl0ZW1zXzEuZGVmYXVsdCxcbiAgICAvLyBhbnlcbiAgICB7IGtleXdvcmQ6IFwidHlwZVwiLCBzY2hlbWFUeXBlOiBbXCJzdHJpbmdcIiwgXCJhcnJheVwiXSB9LFxuICAgIHsga2V5d29yZDogXCJudWxsYWJsZVwiLCBzY2hlbWFUeXBlOiBcImJvb2xlYW5cIiB9LFxuICAgIGNvbnN0XzEuZGVmYXVsdCxcbiAgICBlbnVtXzEuZGVmYXVsdCxcbl07XG5leHBvcnRzLmRlZmF1bHQgPSB2YWxpZGF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVBZGRpdGlvbmFsSXRlbXMgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBsZW4gfSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgbW9yZSB0aGFuICR7bGVufSBpdGVtc2AsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgbGVuIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke2xlbn19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJhZGRpdGlvbmFsSXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogW1wiYm9vbGVhblwiLCBcIm9iamVjdFwiXSxcbiAgICBiZWZvcmU6IFwidW5pcXVlSXRlbXNcIixcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBpdGVtcyB9ID0gcGFyZW50U2NoZW1hO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsICdcImFkZGl0aW9uYWxJdGVtc1wiIGlzIGlnbm9yZWQgd2hlbiBcIml0ZW1zXCIgaXMgbm90IGFuIGFycmF5IG9mIHNjaGVtYXMnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YWxpZGF0ZUFkZGl0aW9uYWxJdGVtcyhjeHQsIGl0ZW1zKTtcbiAgICB9LFxufTtcbmZ1bmN0aW9uIHZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zKGN4dCwgaXRlbXMpIHtcbiAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBrZXl3b3JkLCBpdCB9ID0gY3h0O1xuICAgIGl0Lml0ZW1zID0gdHJ1ZTtcbiAgICBjb25zdCBsZW4gPSBnZW4uY29uc3QoXCJsZW5cIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICBpZiAoc2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbGVuOiBpdGVtcy5sZW5ndGggfSk7XG4gICAgICAgIGN4dC5wYXNzKCgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSA8PSAke2l0ZW1zLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiICYmICEoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSkge1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi52YXIoXCJ2YWxpZFwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gPD0gJHtpdGVtcy5sZW5ndGh9YCk7IC8vIFRPRE8gdmFyXG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiB2YWxpZGF0ZUl0ZW1zKHZhbGlkKSk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlSXRlbXModmFsaWQpIHtcbiAgICAgICAgZ2VuLmZvclJhbmdlKFwiaVwiLCBpdGVtcy5sZW5ndGgsIGxlbiwgKGkpID0+IHtcbiAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoeyBrZXl3b3JkLCBkYXRhUHJvcDogaSwgZGF0YVByb3BUeXBlOiB1dGlsXzEuVHlwZS5OdW0gfSwgdmFsaWQpO1xuICAgICAgICAgICAgaWYgKCFpdC5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IGdlbi5icmVhaygpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZUFkZGl0aW9uYWxJdGVtcyA9IHZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zO1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWRkaXRpb25hbEl0ZW1zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlVHVwbGUgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiaXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYXJyYXlcIiwgXCJib29sZWFuXCJdLFxuICAgIGJlZm9yZTogXCJ1bmlxdWVJdGVtc1wiLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEpKVxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlVHVwbGUoY3h0LCBcImFkZGl0aW9uYWxJdGVtc1wiLCBzY2hlbWEpO1xuICAgICAgICBpdC5pdGVtcyA9IHRydWU7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY3h0Lm9rKCgwLCBjb2RlXzEudmFsaWRhdGVBcnJheSkoY3h0KSk7XG4gICAgfSxcbn07XG5mdW5jdGlvbiB2YWxpZGF0ZVR1cGxlKGN4dCwgZXh0cmFJdGVtcywgc2NoQXJyID0gY3h0LnNjaGVtYSkge1xuICAgIGNvbnN0IHsgZ2VuLCBwYXJlbnRTY2hlbWEsIGRhdGEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgY2hlY2tTdHJpY3RUdXBsZShwYXJlbnRTY2hlbWEpO1xuICAgIGlmIChpdC5vcHRzLnVuZXZhbHVhdGVkICYmIHNjaEFyci5sZW5ndGggJiYgaXQuaXRlbXMgIT09IHRydWUpIHtcbiAgICAgICAgaXQuaXRlbXMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQuaXRlbXMoZ2VuLCBzY2hBcnIubGVuZ3RoLCBpdC5pdGVtcyk7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICBjb25zdCBsZW4gPSBnZW4uY29uc3QoXCJsZW5cIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICBzY2hBcnIuZm9yRWFjaCgoc2NoLCBpKSA9PiB7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSA+ICR7aX1gLCAoKSA9PiBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgIGtleXdvcmQsXG4gICAgICAgICAgICBzY2hlbWFQcm9wOiBpLFxuICAgICAgICAgICAgZGF0YVByb3A6IGksXG4gICAgICAgIH0sIHZhbGlkKSk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gY2hlY2tTdHJpY3RUdXBsZShzY2gpIHtcbiAgICAgICAgY29uc3QgeyBvcHRzLCBlcnJTY2hlbWFQYXRoIH0gPSBpdDtcbiAgICAgICAgY29uc3QgbCA9IHNjaEFyci5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGZ1bGxUdXBsZSA9IGwgPT09IHNjaC5taW5JdGVtcyAmJiAobCA9PT0gc2NoLm1heEl0ZW1zIHx8IHNjaFtleHRyYUl0ZW1zXSA9PT0gZmFsc2UpO1xuICAgICAgICBpZiAob3B0cy5zdHJpY3RUdXBsZXMgJiYgIWZ1bGxUdXBsZSkge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gYFwiJHtrZXl3b3JkfVwiIGlzICR7bH0tdHVwbGUsIGJ1dCBtaW5JdGVtcyBvciBtYXhJdGVtcy8ke2V4dHJhSXRlbXN9IGFyZSBub3Qgc3BlY2lmaWVkIG9yIGRpZmZlcmVudCBhdCBwYXRoIFwiJHtlcnJTY2hlbWFQYXRofVwiYDtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgbXNnLCBvcHRzLnN0cmljdFR1cGxlcyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLnZhbGlkYXRlVHVwbGUgPSB2YWxpZGF0ZVR1cGxlO1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXRlbXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGl0ZW1zXzEgPSByZXF1aXJlKFwiLi9pdGVtc1wiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInByZWZpeEl0ZW1zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcImFycmF5XCJdLFxuICAgIGJlZm9yZTogXCJ1bmlxdWVJdGVtc1wiLFxuICAgIGNvZGU6IChjeHQpID0+ICgwLCBpdGVtc18xLnZhbGlkYXRlVHVwbGUpKGN4dCwgXCJpdGVtc1wiKSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcmVmaXhJdGVtcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGFkZGl0aW9uYWxJdGVtc18xID0gcmVxdWlyZShcIi4vYWRkaXRpb25hbEl0ZW1zXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IGxlbiB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSBtb3JlIHRoYW4gJHtsZW59IGl0ZW1zYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtczogeyBsZW4gfSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bGltaXQ6ICR7bGVufX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIml0ZW1zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgYmVmb3JlOiBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBwcmVmaXhJdGVtcyB9ID0gcGFyZW50U2NoZW1hO1xuICAgICAgICBpdC5pdGVtcyA9IHRydWU7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHByZWZpeEl0ZW1zKVxuICAgICAgICAgICAgKDAsIGFkZGl0aW9uYWxJdGVtc18xLnZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zKShjeHQsIHByZWZpeEl0ZW1zKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgY3h0Lm9rKCgwLCBjb2RlXzEudmFsaWRhdGVBcnJheSkoY3h0KSk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pdGVtczIwMjAuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IG1pbiwgbWF4IH0gfSkgPT4gbWF4ID09PSB1bmRlZmluZWRcbiAgICAgICAgPyAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgY29udGFpbiBhdCBsZWFzdCAke21pbn0gdmFsaWQgaXRlbShzKWBcbiAgICAgICAgOiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgY29udGFpbiBhdCBsZWFzdCAke21pbn0gYW5kIG5vIG1vcmUgdGhhbiAke21heH0gdmFsaWQgaXRlbShzKWAsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgbWluLCBtYXggfSB9KSA9PiBtYXggPT09IHVuZGVmaW5lZCA/ICgwLCBjb2RlZ2VuXzEuXykgYHttaW5Db250YWluczogJHttaW59fWAgOiAoMCwgY29kZWdlbl8xLl8pIGB7bWluQ29udGFpbnM6ICR7bWlufSwgbWF4Q29udGFpbnM6ICR7bWF4fX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImNvbnRhaW5zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgYmVmb3JlOiBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgICAgICBsZXQgbWluO1xuICAgICAgICBsZXQgbWF4O1xuICAgICAgICBjb25zdCB7IG1pbkNvbnRhaW5zLCBtYXhDb250YWlucyB9ID0gcGFyZW50U2NoZW1hO1xuICAgICAgICBpZiAoaXQub3B0cy5uZXh0KSB7XG4gICAgICAgICAgICBtaW4gPSBtaW5Db250YWlucyA9PT0gdW5kZWZpbmVkID8gMSA6IG1pbkNvbnRhaW5zO1xuICAgICAgICAgICAgbWF4ID0gbWF4Q29udGFpbnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtaW4gPSAxO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxlbiA9IGdlbi5jb25zdChcImxlblwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9Lmxlbmd0aGApO1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbWluLCBtYXggfSk7XG4gICAgICAgIGlmIChtYXggPT09IHVuZGVmaW5lZCAmJiBtaW4gPT09IDApIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgYFwibWluQ29udGFpbnNcIiA9PSAwIHdpdGhvdXQgXCJtYXhDb250YWluc1wiOiBcImNvbnRhaW5zXCIga2V5d29yZCBpZ25vcmVkYCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heCAhPT0gdW5kZWZpbmVkICYmIG1pbiA+IG1heCkge1xuICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBgXCJtaW5Db250YWluc1wiID4gXCJtYXhDb250YWluc1wiIGlzIGFsd2F5cyBpbnZhbGlkYCk7XG4gICAgICAgICAgICBjeHQuZmFpbCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSkge1xuICAgICAgICAgICAgbGV0IGNvbmQgPSAoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gPj0gJHttaW59YDtcbiAgICAgICAgICAgIGlmIChtYXggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtjb25kfSAmJiAke2xlbn0gPD0gJHttYXh9YDtcbiAgICAgICAgICAgIGN4dC5wYXNzKGNvbmQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGl0Lml0ZW1zID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBpZiAobWF4ID09PSB1bmRlZmluZWQgJiYgbWluID09PSAxKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUl0ZW1zKHZhbGlkLCAoKSA9PiBnZW4uaWYodmFsaWQsICgpID0+IGdlbi5icmVhaygpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWluID09PSAwKSB7XG4gICAgICAgICAgICBnZW4ubGV0KHZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgIGlmIChtYXggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGggPiAwYCwgdmFsaWRhdGVJdGVtc1dpdGhDb3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBnZW4ubGV0KHZhbGlkLCBmYWxzZSk7XG4gICAgICAgICAgICB2YWxpZGF0ZUl0ZW1zV2l0aENvdW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgY3h0LnJlc3VsdCh2YWxpZCwgKCkgPT4gY3h0LnJlc2V0KCkpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUl0ZW1zV2l0aENvdW50KCkge1xuICAgICAgICAgICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gZ2VuLmxldChcImNvdW50XCIsIDApO1xuICAgICAgICAgICAgdmFsaWRhdGVJdGVtcyhzY2hWYWxpZCwgKCkgPT4gZ2VuLmlmKHNjaFZhbGlkLCAoKSA9PiBjaGVja0xpbWl0cyhjb3VudCkpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUl0ZW1zKF92YWxpZCwgYmxvY2spIHtcbiAgICAgICAgICAgIGdlbi5mb3JSYW5nZShcImlcIiwgMCwgbGVuLCAoaSkgPT4ge1xuICAgICAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICBrZXl3b3JkOiBcImNvbnRhaW5zXCIsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFQcm9wOiBpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhUHJvcFR5cGU6IHV0aWxfMS5UeXBlLk51bSxcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LCBfdmFsaWQpO1xuICAgICAgICAgICAgICAgIGJsb2NrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjaGVja0xpbWl0cyhjb3VudCkge1xuICAgICAgICAgICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgJHtjb3VudH0rK2ApO1xuICAgICAgICAgICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y291bnR9ID49ICR7bWlufWAsICgpID0+IGdlbi5hc3NpZ24odmFsaWQsIHRydWUpLmJyZWFrKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y291bnR9ID4gJHttYXh9YCwgKCkgPT4gZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpLmJyZWFrKCkpO1xuICAgICAgICAgICAgICAgIGlmIChtaW4gPT09IDEpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y291bnR9ID49ICR7bWlufWAsICgpID0+IGdlbi5hc3NpZ24odmFsaWQsIHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29udGFpbnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVTY2hlbWFEZXBzID0gZXhwb3J0cy52YWxpZGF0ZVByb3BlcnR5RGVwcyA9IGV4cG9ydHMuZXJyb3IgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuZXhwb3J0cy5lcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXM6IHsgcHJvcGVydHksIGRlcHNDb3VudCwgZGVwcyB9IH0pID0+IHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlfaWVzID0gZGVwc0NvdW50ID09PSAxID8gXCJwcm9wZXJ0eVwiIDogXCJwcm9wZXJ0aWVzXCI7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgaGF2ZSAke3Byb3BlcnR5X2llc30gJHtkZXBzfSB3aGVuIHByb3BlcnR5ICR7cHJvcGVydHl9IGlzIHByZXNlbnRgO1xuICAgIH0sXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgcHJvcGVydHksIGRlcHNDb3VudCwgZGVwcywgbWlzc2luZ1Byb3BlcnR5IH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge3Byb3BlcnR5OiAke3Byb3BlcnR5fSxcbiAgICBtaXNzaW5nUHJvcGVydHk6ICR7bWlzc2luZ1Byb3BlcnR5fSxcbiAgICBkZXBzQ291bnQ6ICR7ZGVwc0NvdW50fSxcbiAgICBkZXBzOiAke2RlcHN9fWAsIC8vIFRPRE8gY2hhbmdlIHRvIHJlZmVyZW5jZVxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImRlcGVuZGVuY2llc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBlcnJvcjogZXhwb3J0cy5lcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCBbcHJvcERlcHMsIHNjaERlcHNdID0gc3BsaXREZXBlbmRlbmNpZXMoY3h0KTtcbiAgICAgICAgdmFsaWRhdGVQcm9wZXJ0eURlcHMoY3h0LCBwcm9wRGVwcyk7XG4gICAgICAgIHZhbGlkYXRlU2NoZW1hRGVwcyhjeHQsIHNjaERlcHMpO1xuICAgIH0sXG59O1xuZnVuY3Rpb24gc3BsaXREZXBlbmRlbmNpZXMoeyBzY2hlbWEgfSkge1xuICAgIGNvbnN0IHByb3BlcnR5RGVwcyA9IHt9O1xuICAgIGNvbnN0IHNjaGVtYURlcHMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJfX3Byb3RvX19cIilcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBkZXBzID0gQXJyYXkuaXNBcnJheShzY2hlbWFba2V5XSkgPyBwcm9wZXJ0eURlcHMgOiBzY2hlbWFEZXBzO1xuICAgICAgICBkZXBzW2tleV0gPSBzY2hlbWFba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIFtwcm9wZXJ0eURlcHMsIHNjaGVtYURlcHNdO1xufVxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eURlcHMoY3h0LCBwcm9wZXJ0eURlcHMgPSBjeHQuc2NoZW1hKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgaWYgKE9iamVjdC5rZXlzKHByb3BlcnR5RGVwcykubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgbWlzc2luZyA9IGdlbi5sZXQoXCJtaXNzaW5nXCIpO1xuICAgIGZvciAoY29uc3QgcHJvcCBpbiBwcm9wZXJ0eURlcHMpIHtcbiAgICAgICAgY29uc3QgZGVwcyA9IHByb3BlcnR5RGVwc1twcm9wXTtcbiAgICAgICAgaWYgKGRlcHMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IGhhc1Byb3BlcnR5ID0gKDAsIGNvZGVfMS5wcm9wZXJ0eUluRGF0YSkoZ2VuLCBkYXRhLCBwcm9wLCBpdC5vcHRzLm93blByb3BlcnRpZXMpO1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHtcbiAgICAgICAgICAgIHByb3BlcnR5OiBwcm9wLFxuICAgICAgICAgICAgZGVwc0NvdW50OiBkZXBzLmxlbmd0aCxcbiAgICAgICAgICAgIGRlcHM6IGRlcHMuam9pbihcIiwgXCIpLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGl0LmFsbEVycm9ycykge1xuICAgICAgICAgICAgZ2VuLmlmKGhhc1Byb3BlcnR5LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBQcm9wIG9mIGRlcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGNvZGVfMS5jaGVja1JlcG9ydE1pc3NpbmdQcm9wKShjeHQsIGRlcFByb3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7aGFzUHJvcGVydHl9ICYmICgkeygwLCBjb2RlXzEuY2hlY2tNaXNzaW5nUHJvcCkoY3h0LCBkZXBzLCBtaXNzaW5nKX0pYCk7XG4gICAgICAgICAgICAoMCwgY29kZV8xLnJlcG9ydE1pc3NpbmdQcm9wKShjeHQsIG1pc3NpbmcpO1xuICAgICAgICAgICAgZ2VuLmVsc2UoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVQcm9wZXJ0eURlcHMgPSB2YWxpZGF0ZVByb3BlcnR5RGVwcztcbmZ1bmN0aW9uIHZhbGlkYXRlU2NoZW1hRGVwcyhjeHQsIHNjaGVtYURlcHMgPSBjeHQuc2NoZW1hKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgIGZvciAoY29uc3QgcHJvcCBpbiBzY2hlbWFEZXBzKSB7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hRGVwc1twcm9wXSkpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlXzEucHJvcGVydHlJbkRhdGEpKGdlbiwgZGF0YSwgcHJvcCwgaXQub3B0cy5vd25Qcm9wZXJ0aWVzKSwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQsIHNjaGVtYVByb3A6IHByb3AgfSwgdmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm1lcmdlVmFsaWRFdmFsdWF0ZWQoc2NoQ3h0LCB2YWxpZCk7XG4gICAgICAgIH0sICgpID0+IGdlbi52YXIodmFsaWQsIHRydWUpIC8vIFRPRE8gdmFyXG4gICAgICAgICk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZVNjaGVtYURlcHMgPSB2YWxpZGF0ZVNjaGVtYURlcHM7XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZXBlbmRlbmNpZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJwcm9wZXJ0eSBuYW1lIG11c3QgYmUgdmFsaWRcIixcbiAgICBwYXJhbXM6ICh7IHBhcmFtcyB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7cHJvcGVydHlOYW1lOiAke3BhcmFtcy5wcm9wZXJ0eU5hbWV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwicHJvcGVydHlOYW1lc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgZ2VuLmZvckluKFwia2V5XCIsIGRhdGEsIChrZXkpID0+IHtcbiAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBwcm9wZXJ0eU5hbWU6IGtleSB9KTtcbiAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwicHJvcGVydHlOYW1lc1wiLFxuICAgICAgICAgICAgICAgIGRhdGE6IGtleSxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZXM6IFtcInN0cmluZ1wiXSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWU6IGtleSxcbiAgICAgICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IHtcbiAgICAgICAgICAgICAgICBjeHQuZXJyb3IodHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpdC5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5icmVhaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvcGVydHlOYW1lcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL25hbWVzXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6IFwibXVzdCBOT1QgaGF2ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXNcIixcbiAgICBwYXJhbXM6ICh7IHBhcmFtcyB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7YWRkaXRpb25hbFByb3BlcnR5OiAke3BhcmFtcy5hZGRpdGlvbmFsUHJvcGVydHl9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIixcbiAgICB0eXBlOiBbXCJvYmplY3RcIl0sXG4gICAgc2NoZW1hVHlwZTogW1wiYm9vbGVhblwiLCBcIm9iamVjdFwiXSxcbiAgICBhbGxvd1VuZGVmaW5lZDogdHJ1ZSxcbiAgICB0cmFja0Vycm9yczogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGRhdGEsIGVycnNDb3VudCwgaXQgfSA9IGN4dDtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghZXJyc0NvdW50KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgICAgICBjb25zdCB7IGFsbEVycm9ycywgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGl0LnByb3BzID0gdHJ1ZTtcbiAgICAgICAgaWYgKG9wdHMucmVtb3ZlQWRkaXRpb25hbCAhPT0gXCJhbGxcIiAmJiAoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgcHJvcHMgPSAoMCwgY29kZV8xLmFsbFNjaGVtYVByb3BlcnRpZXMpKHBhcmVudFNjaGVtYS5wcm9wZXJ0aWVzKTtcbiAgICAgICAgY29uc3QgcGF0UHJvcHMgPSAoMCwgY29kZV8xLmFsbFNjaGVtYVByb3BlcnRpZXMpKHBhcmVudFNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcyk7XG4gICAgICAgIGNoZWNrQWRkaXRpb25hbFByb3BlcnRpZXMoKTtcbiAgICAgICAgY3h0Lm9rKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyc0NvdW50fSA9PT0gJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfWApO1xuICAgICAgICBmdW5jdGlvbiBjaGVja0FkZGl0aW9uYWxQcm9wZXJ0aWVzKCkge1xuICAgICAgICAgICAgZ2VuLmZvckluKFwia2V5XCIsIGRhdGEsIChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXByb3BzLmxlbmd0aCAmJiAhcGF0UHJvcHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydHlDb2RlKGtleSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBnZW4uaWYoaXNBZGRpdGlvbmFsKGtleSksICgpID0+IGFkZGl0aW9uYWxQcm9wZXJ0eUNvZGUoa2V5KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc0FkZGl0aW9uYWwoa2V5KSB7XG4gICAgICAgICAgICBsZXQgZGVmaW5lZFByb3A7XG4gICAgICAgICAgICBpZiAocHJvcHMubGVuZ3RoID4gOCkge1xuICAgICAgICAgICAgICAgIC8vIFRPRE8gbWF5YmUgYW4gb3B0aW9uIGluc3RlYWQgb2YgaGFyZC1jb2RlZCA4P1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzU2NoZW1hID0gKDAsIHV0aWxfMS5zY2hlbWFSZWZPclZhbCkoaXQsIHBhcmVudFNjaGVtYS5wcm9wZXJ0aWVzLCBcInByb3BlcnRpZXNcIik7XG4gICAgICAgICAgICAgICAgZGVmaW5lZFByb3AgPSAoMCwgY29kZV8xLmlzT3duUHJvcGVydHkpKGdlbiwgcHJvcHNTY2hlbWEsIGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwcm9wcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBkZWZpbmVkUHJvcCA9ICgwLCBjb2RlZ2VuXzEub3IpKC4uLnByb3BzLm1hcCgocCkgPT4gKDAsIGNvZGVnZW5fMS5fKSBgJHtrZXl9ID09PSAke3B9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVmaW5lZFByb3AgPSBjb2RlZ2VuXzEubmlsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhdFByb3BzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGRlZmluZWRQcm9wID0gKDAsIGNvZGVnZW5fMS5vcikoZGVmaW5lZFByb3AsIC4uLnBhdFByb3BzLm1hcCgocCkgPT4gKDAsIGNvZGVnZW5fMS5fKSBgJHsoMCwgY29kZV8xLnVzZVBhdHRlcm4pKGN4dCwgcCl9LnRlc3QoJHtrZXl9KWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLm5vdCkoZGVmaW5lZFByb3ApO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGRlbGV0ZUFkZGl0aW9uYWwoa2V5KSB7XG4gICAgICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGBkZWxldGUgJHtkYXRhfVske2tleX1dYCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWRkaXRpb25hbFByb3BlcnR5Q29kZShrZXkpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLnJlbW92ZUFkZGl0aW9uYWwgPT09IFwiYWxsXCIgfHwgKG9wdHMucmVtb3ZlQWRkaXRpb25hbCAmJiBzY2hlbWEgPT09IGZhbHNlKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZUFkZGl0aW9uYWwoa2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBhZGRpdGlvbmFsUHJvcGVydHk6IGtleSB9KTtcbiAgICAgICAgICAgICAgICBjeHQuZXJyb3IoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmJyZWFrKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIiAmJiAhKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMucmVtb3ZlQWRkaXRpb25hbCA9PT0gXCJmYWlsaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlBZGRpdGlvbmFsU2NoZW1hKGtleSwgdmFsaWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4dC5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlQWRkaXRpb25hbChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGx5QWRkaXRpb25hbFNjaGVtYShrZXksIHZhbGlkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4gZ2VuLmJyZWFrKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhcHBseUFkZGl0aW9uYWxTY2hlbWEoa2V5LCB2YWxpZCwgZXJyb3JzKSB7XG4gICAgICAgICAgICBjb25zdCBzdWJzY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAga2V5d29yZDogXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgIGRhdGFQcm9wOiBrZXksXG4gICAgICAgICAgICAgICAgZGF0YVByb3BUeXBlOiB1dGlsXzEuVHlwZS5TdHIsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGVycm9ycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHN1YnNjaGVtYSwge1xuICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBhbGxFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3h0LnN1YnNjaGVtYShzdWJzY2hlbWEsIHZhbGlkKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWRkaXRpb25hbFByb3BlcnRpZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHZhbGlkYXRlXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS92YWxpZGF0ZVwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9hZGRpdGlvbmFsUHJvcGVydGllc1wiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInByb3BlcnRpZXNcIixcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHNjaGVtYVR5cGU6IFwib2JqZWN0XCIsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoaXQub3B0cy5yZW1vdmVBZGRpdGlvbmFsID09PSBcImFsbFwiICYmIHBhcmVudFNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllc18xLmRlZmF1bHQuY29kZShuZXcgdmFsaWRhdGVfMS5LZXl3b3JkQ3h0KGl0LCBhZGRpdGlvbmFsUHJvcGVydGllc18xLmRlZmF1bHQsIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIikpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFsbFByb3BzID0gKDAsIGNvZGVfMS5hbGxTY2hlbWFQcm9wZXJ0aWVzKShzY2hlbWEpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgYWxsUHJvcHMpIHtcbiAgICAgICAgICAgIGl0LmRlZmluZWRQcm9wZXJ0aWVzLmFkZChwcm9wKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXQub3B0cy51bmV2YWx1YXRlZCAmJiBhbGxQcm9wcy5sZW5ndGggJiYgaXQucHJvcHMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIGl0LnByb3BzID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLnByb3BzKGdlbiwgKDAsIHV0aWxfMS50b0hhc2gpKGFsbFByb3BzKSwgaXQucHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBhbGxQcm9wcy5maWx0ZXIoKHApID0+ICEoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hW3BdKSk7XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcGVydGllcykge1xuICAgICAgICAgICAgaWYgKGhhc0RlZmF1bHQocHJvcCkpIHtcbiAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5U2NoZW1hKHByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlXzEucHJvcGVydHlJbkRhdGEpKGdlbiwgZGF0YSwgcHJvcCwgaXQub3B0cy5vd25Qcm9wZXJ0aWVzKSk7XG4gICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eVNjaGVtYShwcm9wKTtcbiAgICAgICAgICAgICAgICBpZiAoIWl0LmFsbEVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmVsc2UoKS52YXIodmFsaWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGdlbi5lbmRJZigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3h0Lml0LmRlZmluZWRQcm9wZXJ0aWVzLmFkZChwcm9wKTtcbiAgICAgICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaGFzRGVmYXVsdChwcm9wKSB7XG4gICAgICAgICAgICByZXR1cm4gaXQub3B0cy51c2VEZWZhdWx0cyAmJiAhaXQuY29tcG9zaXRlUnVsZSAmJiBzY2hlbWFbcHJvcF0uZGVmYXVsdCAhPT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5UHJvcGVydHlTY2hlbWEocHJvcCkge1xuICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAga2V5d29yZDogXCJwcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAgc2NoZW1hUHJvcDogcHJvcCxcbiAgICAgICAgICAgICAgICBkYXRhUHJvcDogcHJvcCxcbiAgICAgICAgICAgIH0sIHZhbGlkKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvcGVydGllcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IHV0aWxfMiA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJwYXR0ZXJuUHJvcGVydGllc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5zID0gKDAsIGNvZGVfMS5hbGxTY2hlbWFQcm9wZXJ0aWVzKShzY2hlbWEpO1xuICAgICAgICBjb25zdCBhbHdheXNWYWxpZFBhdHRlcm5zID0gcGF0dGVybnMuZmlsdGVyKChwKSA9PiAoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hW3BdKSk7XG4gICAgICAgIGlmIChwYXR0ZXJucy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIChhbHdheXNWYWxpZFBhdHRlcm5zLmxlbmd0aCA9PT0gcGF0dGVybnMubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgKCFpdC5vcHRzLnVuZXZhbHVhdGVkIHx8IGl0LnByb3BzID09PSB0cnVlKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGVja1Byb3BlcnRpZXMgPSBvcHRzLnN0cmljdFNjaGVtYSAmJiAhb3B0cy5hbGxvd01hdGNoaW5nUHJvcGVydGllcyAmJiBwYXJlbnRTY2hlbWEucHJvcGVydGllcztcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBpZiAoaXQucHJvcHMgIT09IHRydWUgJiYgIShpdC5wcm9wcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKSkge1xuICAgICAgICAgICAgaXQucHJvcHMgPSAoMCwgdXRpbF8yLmV2YWx1YXRlZFByb3BzVG9OYW1lKShnZW4sIGl0LnByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHByb3BzIH0gPSBpdDtcbiAgICAgICAgdmFsaWRhdGVQYXR0ZXJuUHJvcGVydGllcygpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZVBhdHRlcm5Qcm9wZXJ0aWVzKCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXQgb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tQcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICBjaGVja01hdGNoaW5nUHJvcGVydGllcyhwYXQpO1xuICAgICAgICAgICAgICAgIGlmIChpdC5hbGxFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVQcm9wZXJ0aWVzKHBhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZW4udmFyKHZhbGlkLCB0cnVlKTsgLy8gVE9ETyB2YXJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVQcm9wZXJ0aWVzKHBhdCk7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5pZih2YWxpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrTWF0Y2hpbmdQcm9wZXJ0aWVzKHBhdCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGNoZWNrUHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIGlmIChuZXcgUmVnRXhwKHBhdCkudGVzdChwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIGBwcm9wZXJ0eSAke3Byb3B9IG1hdGNoZXMgcGF0dGVybiAke3BhdH0gKHVzZSBhbGxvd01hdGNoaW5nUHJvcGVydGllcylgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzKHBhdCkge1xuICAgICAgICAgICAgZ2VuLmZvckluKFwia2V5XCIsIGRhdGEsIChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHsoMCwgY29kZV8xLnVzZVBhdHRlcm4pKGN4dCwgcGF0KX0udGVzdCgke2tleX0pYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbHdheXNWYWxpZCA9IGFsd2F5c1ZhbGlkUGF0dGVybnMuaW5jbHVkZXMocGF0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhbHdheXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZDogXCJwYXR0ZXJuUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYVByb3A6IHBhdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUHJvcDoga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFQcm9wVHlwZTogdXRpbF8yLlR5cGUuU3RyLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnVuZXZhbHVhdGVkICYmIHByb3BzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7cHJvcHN9WyR7a2V5fV1gLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghYWx3YXlzVmFsaWQgJiYgIWl0LmFsbEVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuIHNob3J0LWNpcmN1aXQgaWYgYHVuZXZhbHVhdGVkUHJvcGVydGllc2AgaXMgbm90IHN1cHBvcnRlZCAob3B0cy5uZXh0ID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIGlmIGFsbCBwcm9wZXJ0aWVzIHdlcmUgZXZhbHVhdGVkIChwcm9wcyA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiBnZW4uYnJlYWsoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXR0ZXJuUHJvcGVydGllcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIm5vdFwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpKSB7XG4gICAgICAgICAgICBjeHQuZmFpbCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICBrZXl3b3JkOiBcIm5vdFwiLFxuICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNyZWF0ZUVycm9yczogZmFsc2UsXG4gICAgICAgICAgICBhbGxFcnJvcnM6IGZhbHNlLFxuICAgICAgICB9LCB2YWxpZCk7XG4gICAgICAgIGN4dC5mYWlsUmVzdWx0KHZhbGlkLCAoKSA9PiBjeHQucmVzZXQoKSwgKCkgPT4gY3h0LmVycm9yKCkpO1xuICAgIH0sXG4gICAgZXJyb3I6IHsgbWVzc2FnZTogXCJtdXN0IE5PVCBiZSB2YWxpZFwiIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm90LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImFueU9mXCIsXG4gICAgc2NoZW1hVHlwZTogXCJhcnJheVwiLFxuICAgIHRyYWNrRXJyb3JzOiB0cnVlLFxuICAgIGNvZGU6IGNvZGVfMS52YWxpZGF0ZVVuaW9uLFxuICAgIGVycm9yOiB7IG1lc3NhZ2U6IFwibXVzdCBtYXRjaCBhIHNjaGVtYSBpbiBhbnlPZlwiIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YW55T2YuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJtdXN0IG1hdGNoIGV4YWN0bHkgb25lIHNjaGVtYSBpbiBvbmVPZlwiLFxuICAgIHBhcmFtczogKHsgcGFyYW1zIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtwYXNzaW5nU2NoZW1hczogJHtwYXJhbXMucGFzc2luZ319YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJvbmVPZlwiLFxuICAgIHNjaGVtYVR5cGU6IFwiYXJyYXlcIixcbiAgICB0cmFja0Vycm9yczogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgaWYgKGl0Lm9wdHMuZGlzY3JpbWluYXRvciAmJiBwYXJlbnRTY2hlbWEuZGlzY3JpbWluYXRvcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qgc2NoQXJyID0gc2NoZW1hO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IHBhc3NpbmcgPSBnZW4ubGV0KFwicGFzc2luZ1wiLCBudWxsKTtcbiAgICAgICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICAgICAgY3h0LnNldFBhcmFtcyh7IHBhc3NpbmcgfSk7XG4gICAgICAgIC8vIFRPRE8gcG9zc2libHkgZmFpbCBzdHJhaWdodCBhd2F5ICh3aXRoIHdhcm5pbmcgb3IgZXhjZXB0aW9uKSBpZiB0aGVyZSBhcmUgdHdvIGVtcHR5IGFsd2F5cyB2YWxpZCBzY2hlbWFzXG4gICAgICAgIGdlbi5ibG9jayh2YWxpZGF0ZU9uZU9mKTtcbiAgICAgICAgY3h0LnJlc3VsdCh2YWxpZCwgKCkgPT4gY3h0LnJlc2V0KCksICgpID0+IGN4dC5lcnJvcih0cnVlKSk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlT25lT2YoKSB7XG4gICAgICAgICAgICBzY2hBcnIuZm9yRWFjaCgoc2NoLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHNjaEN4dDtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLnZhcihzY2hWYWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwib25lT2ZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYVByb3A6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9LCBzY2hWYWxpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgICAgIC5pZigoMCwgY29kZWdlbl8xLl8pIGAke3NjaFZhbGlkfSAmJiAke3ZhbGlkfWApXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXNzaWduKHZhbGlkLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hc3NpZ24ocGFzc2luZywgKDAsIGNvZGVnZW5fMS5fKSBgWyR7cGFzc2luZ30sICR7aX1dYClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5lbHNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGdlbi5pZihzY2hWYWxpZCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmFzc2lnbihwYXNzaW5nLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaEN4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4dC5tZXJnZUV2YWx1YXRlZChzY2hDeHQsIGNvZGVnZW5fMS5OYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vbmVPZi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImFsbE9mXCIsXG4gICAgc2NoZW1hVHlwZTogXCJhcnJheVwiLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBzY2hlbWEuZm9yRWFjaCgoc2NoLCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQ6IFwiYWxsT2ZcIiwgc2NoZW1hUHJvcDogaSB9LCB2YWxpZCk7XG4gICAgICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm1lcmdlRXZhbHVhdGVkKHNjaEN4dCk7XG4gICAgICAgIH0pO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWxsT2YuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBtYXRjaCBcIiR7cGFyYW1zLmlmQ2xhdXNlfVwiIHNjaGVtYWAsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXMgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2ZhaWxpbmdLZXl3b3JkOiAke3BhcmFtcy5pZkNsYXVzZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJpZlwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKHBhcmVudFNjaGVtYS50aGVuID09PSB1bmRlZmluZWQgJiYgcGFyZW50U2NoZW1hLmVsc2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCAnXCJpZlwiIHdpdGhvdXQgXCJ0aGVuXCIgYW5kIFwiZWxzZVwiIGlzIGlnbm9yZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoYXNUaGVuID0gaGFzU2NoZW1hKGl0LCBcInRoZW5cIik7XG4gICAgICAgIGNvbnN0IGhhc0Vsc2UgPSBoYXNTY2hlbWEoaXQsIFwiZWxzZVwiKTtcbiAgICAgICAgaWYgKCFoYXNUaGVuICYmICFoYXNFbHNlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCB0cnVlKTtcbiAgICAgICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICAgICAgdmFsaWRhdGVJZigpO1xuICAgICAgICBjeHQucmVzZXQoKTtcbiAgICAgICAgaWYgKGhhc1RoZW4gJiYgaGFzRWxzZSkge1xuICAgICAgICAgICAgY29uc3QgaWZDbGF1c2UgPSBnZW4ubGV0KFwiaWZDbGF1c2VcIik7XG4gICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgaWZDbGF1c2UgfSk7XG4gICAgICAgICAgICBnZW4uaWYoc2NoVmFsaWQsIHZhbGlkYXRlQ2xhdXNlKFwidGhlblwiLCBpZkNsYXVzZSksIHZhbGlkYXRlQ2xhdXNlKFwiZWxzZVwiLCBpZkNsYXVzZSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhhc1RoZW4pIHtcbiAgICAgICAgICAgIGdlbi5pZihzY2hWYWxpZCwgdmFsaWRhdGVDbGF1c2UoXCJ0aGVuXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkoc2NoVmFsaWQpLCB2YWxpZGF0ZUNsYXVzZShcImVsc2VcIikpO1xuICAgICAgICB9XG4gICAgICAgIGN4dC5wYXNzKHZhbGlkLCAoKSA9PiBjeHQuZXJyb3IodHJ1ZSkpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUlmKCkge1xuICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAga2V5d29yZDogXCJpZlwiLFxuICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY3JlYXRlRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBhbGxFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgfSwgc2NoVmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm1lcmdlRXZhbHVhdGVkKHNjaEN4dCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVDbGF1c2Uoa2V5d29yZCwgaWZDbGF1c2UpIHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQgfSwgc2NoVmFsaWQpO1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIHNjaFZhbGlkKTtcbiAgICAgICAgICAgICAgICBjeHQubWVyZ2VWYWxpZEV2YWx1YXRlZChzY2hDeHQsIHZhbGlkKTtcbiAgICAgICAgICAgICAgICBpZiAoaWZDbGF1c2UpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24oaWZDbGF1c2UsICgwLCBjb2RlZ2VuXzEuXykgYCR7a2V5d29yZH1gKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBpZkNsYXVzZToga2V5d29yZCB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmZ1bmN0aW9uIGhhc1NjaGVtYShpdCwga2V5d29yZCkge1xuICAgIGNvbnN0IHNjaGVtYSA9IGl0LnNjaGVtYVtrZXl3b3JkXTtcbiAgICByZXR1cm4gc2NoZW1hICE9PSB1bmRlZmluZWQgJiYgISgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogW1widGhlblwiLCBcImVsc2VcIl0sXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICBjb2RlKHsga2V5d29yZCwgcGFyZW50U2NoZW1hLCBpdCB9KSB7XG4gICAgICAgIGlmIChwYXJlbnRTY2hlbWEuaWYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgYFwiJHtrZXl3b3JkfVwiIHdpdGhvdXQgXCJpZlwiIGlzIGlnbm9yZWRgKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRoZW5FbHNlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBhZGRpdGlvbmFsSXRlbXNfMSA9IHJlcXVpcmUoXCIuL2FkZGl0aW9uYWxJdGVtc1wiKTtcbmNvbnN0IHByZWZpeEl0ZW1zXzEgPSByZXF1aXJlKFwiLi9wcmVmaXhJdGVtc1wiKTtcbmNvbnN0IGl0ZW1zXzEgPSByZXF1aXJlKFwiLi9pdGVtc1wiKTtcbmNvbnN0IGl0ZW1zMjAyMF8xID0gcmVxdWlyZShcIi4vaXRlbXMyMDIwXCIpO1xuY29uc3QgY29udGFpbnNfMSA9IHJlcXVpcmUoXCIuL2NvbnRhaW5zXCIpO1xuY29uc3QgZGVwZW5kZW5jaWVzXzEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNcIik7XG5jb25zdCBwcm9wZXJ0eU5hbWVzXzEgPSByZXF1aXJlKFwiLi9wcm9wZXJ0eU5hbWVzXCIpO1xuY29uc3QgYWRkaXRpb25hbFByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL2FkZGl0aW9uYWxQcm9wZXJ0aWVzXCIpO1xuY29uc3QgcHJvcGVydGllc18xID0gcmVxdWlyZShcIi4vcHJvcGVydGllc1wiKTtcbmNvbnN0IHBhdHRlcm5Qcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9wYXR0ZXJuUHJvcGVydGllc1wiKTtcbmNvbnN0IG5vdF8xID0gcmVxdWlyZShcIi4vbm90XCIpO1xuY29uc3QgYW55T2ZfMSA9IHJlcXVpcmUoXCIuL2FueU9mXCIpO1xuY29uc3Qgb25lT2ZfMSA9IHJlcXVpcmUoXCIuL29uZU9mXCIpO1xuY29uc3QgYWxsT2ZfMSA9IHJlcXVpcmUoXCIuL2FsbE9mXCIpO1xuY29uc3QgaWZfMSA9IHJlcXVpcmUoXCIuL2lmXCIpO1xuY29uc3QgdGhlbkVsc2VfMSA9IHJlcXVpcmUoXCIuL3RoZW5FbHNlXCIpO1xuZnVuY3Rpb24gZ2V0QXBwbGljYXRvcihkcmFmdDIwMjAgPSBmYWxzZSkge1xuICAgIGNvbnN0IGFwcGxpY2F0b3IgPSBbXG4gICAgICAgIC8vIGFueVxuICAgICAgICBub3RfMS5kZWZhdWx0LFxuICAgICAgICBhbnlPZl8xLmRlZmF1bHQsXG4gICAgICAgIG9uZU9mXzEuZGVmYXVsdCxcbiAgICAgICAgYWxsT2ZfMS5kZWZhdWx0LFxuICAgICAgICBpZl8xLmRlZmF1bHQsXG4gICAgICAgIHRoZW5FbHNlXzEuZGVmYXVsdCxcbiAgICAgICAgLy8gb2JqZWN0XG4gICAgICAgIHByb3BlcnR5TmFtZXNfMS5kZWZhdWx0LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllc18xLmRlZmF1bHQsXG4gICAgICAgIGRlcGVuZGVuY2llc18xLmRlZmF1bHQsXG4gICAgICAgIHByb3BlcnRpZXNfMS5kZWZhdWx0LFxuICAgICAgICBwYXR0ZXJuUHJvcGVydGllc18xLmRlZmF1bHQsXG4gICAgXTtcbiAgICAvLyBhcnJheVxuICAgIGlmIChkcmFmdDIwMjApXG4gICAgICAgIGFwcGxpY2F0b3IucHVzaChwcmVmaXhJdGVtc18xLmRlZmF1bHQsIGl0ZW1zMjAyMF8xLmRlZmF1bHQpO1xuICAgIGVsc2VcbiAgICAgICAgYXBwbGljYXRvci5wdXNoKGFkZGl0aW9uYWxJdGVtc18xLmRlZmF1bHQsIGl0ZW1zXzEuZGVmYXVsdCk7XG4gICAgYXBwbGljYXRvci5wdXNoKGNvbnRhaW5zXzEuZGVmYXVsdCk7XG4gICAgcmV0dXJuIGFwcGxpY2F0b3I7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBnZXRBcHBsaWNhdG9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBtYXRjaCBmb3JtYXQgXCIke3NjaGVtYUNvZGV9XCJgLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7Zm9ybWF0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiZm9ybWF0XCIsXG4gICAgdHlwZTogW1wibnVtYmVyXCIsIFwic3RyaW5nXCJdLFxuICAgIHNjaGVtYVR5cGU6IFwic3RyaW5nXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQsIHJ1bGVUeXBlKSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCAkZGF0YSwgc2NoZW1hLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IG9wdHMsIGVyclNjaGVtYVBhdGgsIHNjaGVtYUVudiwgc2VsZiB9ID0gaXQ7XG4gICAgICAgIGlmICghb3B0cy52YWxpZGF0ZUZvcm1hdHMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICgkZGF0YSlcbiAgICAgICAgICAgIHZhbGlkYXRlJERhdGFGb3JtYXQoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdmFsaWRhdGVGb3JtYXQoKTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGUkRGF0YUZvcm1hdCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZtdHMgPSBnZW4uc2NvcGVWYWx1ZShcImZvcm1hdHNcIiwge1xuICAgICAgICAgICAgICAgIHJlZjogc2VsZi5mb3JtYXRzLFxuICAgICAgICAgICAgICAgIGNvZGU6IG9wdHMuY29kZS5mb3JtYXRzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBmRGVmID0gZ2VuLmNvbnN0KFwiZkRlZlwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2ZtdHN9WyR7c2NoZW1hQ29kZX1dYCk7XG4gICAgICAgICAgICBjb25zdCBmVHlwZSA9IGdlbi5sZXQoXCJmVHlwZVwiKTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IGdlbi5sZXQoXCJmb3JtYXRcIik7XG4gICAgICAgICAgICAvLyBUT0RPIHNpbXBsaWZ5XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZkRlZn0gPT0gXCJvYmplY3RcIiAmJiAhKCR7ZkRlZn0gaW5zdGFuY2VvZiBSZWdFeHApYCwgKCkgPT4gZ2VuLmFzc2lnbihmVHlwZSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtmRGVmfS50eXBlIHx8IFwic3RyaW5nXCJgKS5hc3NpZ24oZm9ybWF0LCAoMCwgY29kZWdlbl8xLl8pIGAke2ZEZWZ9LnZhbGlkYXRlYCksICgpID0+IGdlbi5hc3NpZ24oZlR5cGUsICgwLCBjb2RlZ2VuXzEuXykgYFwic3RyaW5nXCJgKS5hc3NpZ24oZm9ybWF0LCBmRGVmKSk7XG4gICAgICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEub3IpKHVua25vd25GbXQoKSwgaW52YWxpZEZtdCgpKSk7XG4gICAgICAgICAgICBmdW5jdGlvbiB1bmtub3duRm10KCkge1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLnN0cmljdFNjaGVtYSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2RlZ2VuXzEubmlsO1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke3NjaGVtYUNvZGV9ICYmICEke2Zvcm1hdH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaW52YWxpZEZtdCgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxsRm9ybWF0ID0gc2NoZW1hRW52LiRhc3luY1xuICAgICAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYCgke2ZEZWZ9LmFzeW5jID8gYXdhaXQgJHtmb3JtYXR9KCR7ZGF0YX0pIDogJHtmb3JtYXR9KCR7ZGF0YX0pKWBcbiAgICAgICAgICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2Zvcm1hdH0oJHtkYXRhfSlgO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkRGF0YSA9ICgwLCBjb2RlZ2VuXzEuXykgYCh0eXBlb2YgJHtmb3JtYXR9ID09IFwiZnVuY3Rpb25cIiA/ICR7Y2FsbEZvcm1hdH0gOiAke2Zvcm1hdH0udGVzdCgke2RhdGF9KSlgO1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke2Zvcm1hdH0gJiYgJHtmb3JtYXR9ICE9PSB0cnVlICYmICR7ZlR5cGV9ID09PSAke3J1bGVUeXBlfSAmJiAhJHt2YWxpZERhdGF9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUZvcm1hdCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdERlZiA9IHNlbGYuZm9ybWF0c1tzY2hlbWFdO1xuICAgICAgICAgICAgaWYgKCFmb3JtYXREZWYpIHtcbiAgICAgICAgICAgICAgICB1bmtub3duRm9ybWF0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvcm1hdERlZiA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBbZm10VHlwZSwgZm9ybWF0LCBmbXRSZWZdID0gZ2V0Rm9ybWF0KGZvcm1hdERlZik7XG4gICAgICAgICAgICBpZiAoZm10VHlwZSA9PT0gcnVsZVR5cGUpXG4gICAgICAgICAgICAgICAgY3h0LnBhc3ModmFsaWRDb25kaXRpb24oKSk7XG4gICAgICAgICAgICBmdW5jdGlvbiB1bmtub3duRm9ybWF0KCkge1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLnN0cmljdFNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIud2Fybih1bmtub3duTXNnKCkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih1bmtub3duTXNnKCkpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHVua25vd25Nc2coKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgdW5rbm93biBmb3JtYXQgXCIke3NjaGVtYX1cIiBpZ25vcmVkIGluIHNjaGVtYSBhdCBwYXRoIFwiJHtlcnJTY2hlbWFQYXRofVwiYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRGb3JtYXQoZm10RGVmKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29kZSA9IGZtdERlZiBpbnN0YW5jZW9mIFJlZ0V4cFxuICAgICAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEucmVnZXhwQ29kZSkoZm10RGVmKVxuICAgICAgICAgICAgICAgICAgICA6IG9wdHMuY29kZS5mb3JtYXRzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7b3B0cy5jb2RlLmZvcm1hdHN9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShzY2hlbWEpfWBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZtdCA9IGdlbi5zY29wZVZhbHVlKFwiZm9ybWF0c1wiLCB7IGtleTogc2NoZW1hLCByZWY6IGZtdERlZiwgY29kZSB9KTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZtdERlZiA9PSBcIm9iamVjdFwiICYmICEoZm10RGVmIGluc3RhbmNlb2YgUmVnRXhwKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2ZtdERlZi50eXBlIHx8IFwic3RyaW5nXCIsIGZtdERlZi52YWxpZGF0ZSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtmbXR9LnZhbGlkYXRlYF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbXCJzdHJpbmdcIiwgZm10RGVmLCBmbXRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gdmFsaWRDb25kaXRpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmb3JtYXREZWYgPT0gXCJvYmplY3RcIiAmJiAhKGZvcm1hdERlZiBpbnN0YW5jZW9mIFJlZ0V4cCkgJiYgZm9ybWF0RGVmLmFzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2NoZW1hRW52LiRhc3luYylcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFzeW5jIGZvcm1hdCBpbiBzeW5jIHNjaGVtYVwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYGF3YWl0ICR7Zm10UmVmfSgke2RhdGF9KWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgZm9ybWF0ID09IFwiZnVuY3Rpb25cIiA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm10UmVmfSgke2RhdGF9KWAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2ZtdFJlZn0udGVzdCgke2RhdGF9KWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZvcm1hdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgZm9ybWF0XzEgPSByZXF1aXJlKFwiLi9mb3JtYXRcIik7XG5jb25zdCBmb3JtYXQgPSBbZm9ybWF0XzEuZGVmYXVsdF07XG5leHBvcnRzLmRlZmF1bHQgPSBmb3JtYXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb250ZW50Vm9jYWJ1bGFyeSA9IGV4cG9ydHMubWV0YWRhdGFWb2NhYnVsYXJ5ID0gdm9pZCAwO1xuZXhwb3J0cy5tZXRhZGF0YVZvY2FidWxhcnkgPSBbXG4gICAgXCJ0aXRsZVwiLFxuICAgIFwiZGVzY3JpcHRpb25cIixcbiAgICBcImRlZmF1bHRcIixcbiAgICBcImRlcHJlY2F0ZWRcIixcbiAgICBcInJlYWRPbmx5XCIsXG4gICAgXCJ3cml0ZU9ubHlcIixcbiAgICBcImV4YW1wbGVzXCIsXG5dO1xuZXhwb3J0cy5jb250ZW50Vm9jYWJ1bGFyeSA9IFtcbiAgICBcImNvbnRlbnRNZWRpYVR5cGVcIixcbiAgICBcImNvbnRlbnRFbmNvZGluZ1wiLFxuICAgIFwiY29udGVudFNjaGVtYVwiLFxuXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1ldGFkYXRhLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiLi9jb3JlXCIpO1xuY29uc3QgdmFsaWRhdGlvbl8xID0gcmVxdWlyZShcIi4vdmFsaWRhdGlvblwiKTtcbmNvbnN0IGFwcGxpY2F0b3JfMSA9IHJlcXVpcmUoXCIuL2FwcGxpY2F0b3JcIik7XG5jb25zdCBmb3JtYXRfMSA9IHJlcXVpcmUoXCIuL2Zvcm1hdFwiKTtcbmNvbnN0IG1ldGFkYXRhXzEgPSByZXF1aXJlKFwiLi9tZXRhZGF0YVwiKTtcbmNvbnN0IGRyYWZ0N1ZvY2FidWxhcmllcyA9IFtcbiAgICBjb3JlXzEuZGVmYXVsdCxcbiAgICB2YWxpZGF0aW9uXzEuZGVmYXVsdCxcbiAgICAoMCwgYXBwbGljYXRvcl8xLmRlZmF1bHQpKCksXG4gICAgZm9ybWF0XzEuZGVmYXVsdCxcbiAgICBtZXRhZGF0YV8xLm1ldGFkYXRhVm9jYWJ1bGFyeSxcbiAgICBtZXRhZGF0YV8xLmNvbnRlbnRWb2NhYnVsYXJ5LFxuXTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRyYWZ0N1ZvY2FidWxhcmllcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRyYWZ0Ny5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EaXNjckVycm9yID0gdm9pZCAwO1xudmFyIERpc2NyRXJyb3I7XG4oZnVuY3Rpb24gKERpc2NyRXJyb3IpIHtcbiAgICBEaXNjckVycm9yW1wiVGFnXCJdID0gXCJ0YWdcIjtcbiAgICBEaXNjckVycm9yW1wiTWFwcGluZ1wiXSA9IFwibWFwcGluZ1wiO1xufSkoRGlzY3JFcnJvciB8fCAoZXhwb3J0cy5EaXNjckVycm9yID0gRGlzY3JFcnJvciA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi4vZGlzY3JpbWluYXRvci90eXBlc1wiKTtcbmNvbnN0IGNvbXBpbGVfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlXCIpO1xuY29uc3QgcmVmX2Vycm9yXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9yZWZfZXJyb3JcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IGRpc2NyRXJyb3IsIHRhZ05hbWUgfSB9KSA9PiBkaXNjckVycm9yID09PSB0eXBlc18xLkRpc2NyRXJyb3IuVGFnXG4gICAgICAgID8gYHRhZyBcIiR7dGFnTmFtZX1cIiBtdXN0IGJlIHN0cmluZ2BcbiAgICAgICAgOiBgdmFsdWUgb2YgdGFnIFwiJHt0YWdOYW1lfVwiIG11c3QgYmUgaW4gb25lT2ZgLFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IGRpc2NyRXJyb3IsIHRhZywgdGFnTmFtZSB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtlcnJvcjogJHtkaXNjckVycm9yfSwgdGFnOiAke3RhZ05hbWV9LCB0YWdWYWx1ZTogJHt0YWd9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiZGlzY3JpbWluYXRvclwiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgZGF0YSwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb25lT2YgfSA9IHBhcmVudFNjaGVtYTtcbiAgICAgICAgaWYgKCFpdC5vcHRzLmRpc2NyaW1pbmF0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRpc2NyaW1pbmF0b3I6IHJlcXVpcmVzIGRpc2NyaW1pbmF0b3Igb3B0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSBzY2hlbWEucHJvcGVydHlOYW1lO1xuICAgICAgICBpZiAodHlwZW9mIHRhZ05hbWUgIT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRpc2NyaW1pbmF0b3I6IHJlcXVpcmVzIHByb3BlcnR5TmFtZVwiKTtcbiAgICAgICAgaWYgKHNjaGVtYS5tYXBwaW5nKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGlzY3JpbWluYXRvcjogbWFwcGluZyBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICBpZiAoIW9uZU9mKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGlzY3JpbWluYXRvcjogcmVxdWlyZXMgb25lT2Yga2V5d29yZFwiKTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIiwgZmFsc2UpO1xuICAgICAgICBjb25zdCB0YWcgPSBnZW4uY29uc3QoXCJ0YWdcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkodGFnTmFtZSl9YCk7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHt0YWd9ID09IFwic3RyaW5nXCJgLCAoKSA9PiB2YWxpZGF0ZU1hcHBpbmcoKSwgKCkgPT4gY3h0LmVycm9yKGZhbHNlLCB7IGRpc2NyRXJyb3I6IHR5cGVzXzEuRGlzY3JFcnJvci5UYWcsIHRhZywgdGFnTmFtZSB9KSk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlTWFwcGluZygpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcHBpbmcgPSBnZXRNYXBwaW5nKCk7XG4gICAgICAgICAgICBnZW4uaWYoZmFsc2UpO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0YWdWYWx1ZSBpbiBtYXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgZ2VuLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke3RhZ30gPT09ICR7dGFnVmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgYXBwbHlUYWdTY2hlbWEobWFwcGluZ1t0YWdWYWx1ZV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdlbi5lbHNlKCk7XG4gICAgICAgICAgICBjeHQuZXJyb3IoZmFsc2UsIHsgZGlzY3JFcnJvcjogdHlwZXNfMS5EaXNjckVycm9yLk1hcHBpbmcsIHRhZywgdGFnTmFtZSB9KTtcbiAgICAgICAgICAgIGdlbi5lbmRJZigpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5VGFnU2NoZW1hKHNjaGVtYVByb3ApIHtcbiAgICAgICAgICAgIGNvbnN0IF92YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHsga2V5d29yZDogXCJvbmVPZlwiLCBzY2hlbWFQcm9wIH0sIF92YWxpZCk7XG4gICAgICAgICAgICBjeHQubWVyZ2VFdmFsdWF0ZWQoc2NoQ3h0LCBjb2RlZ2VuXzEuTmFtZSk7XG4gICAgICAgICAgICByZXR1cm4gX3ZhbGlkO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldE1hcHBpbmcoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBvbmVPZk1hcHBpbmcgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IHRvcFJlcXVpcmVkID0gaGFzUmVxdWlyZWQocGFyZW50U2NoZW1hKTtcbiAgICAgICAgICAgIGxldCB0YWdSZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9uZU9mLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNjaCA9IG9uZU9mW2ldO1xuICAgICAgICAgICAgICAgIGlmICgoc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLiRyZWYpICYmICEoMCwgdXRpbF8xLnNjaGVtYUhhc1J1bGVzQnV0UmVmKShzY2gsIGl0LnNlbGYuUlVMRVMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZiA9IHNjaC4kcmVmO1xuICAgICAgICAgICAgICAgICAgICBzY2ggPSBjb21waWxlXzEucmVzb2x2ZVJlZi5jYWxsKGl0LnNlbGYsIGl0LnNjaGVtYUVudi5yb290LCBpdC5iYXNlSWQsIHJlZik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2ggaW5zdGFuY2VvZiBjb21waWxlXzEuU2NoZW1hRW52KVxuICAgICAgICAgICAgICAgICAgICAgICAgc2NoID0gc2NoLnNjaGVtYTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IHJlZl9lcnJvcl8xLmRlZmF1bHQoaXQub3B0cy51cmlSZXNvbHZlciwgaXQuYmFzZUlkLCByZWYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wU2NoID0gKF9hID0gc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLnByb3BlcnRpZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVt0YWdOYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BTY2ggIT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRpc2NyaW1pbmF0b3I6IG9uZU9mIHN1YnNjaGVtYXMgKG9yIHJlZmVyZW5jZWQgc2NoZW1hcykgbXVzdCBoYXZlIFwicHJvcGVydGllcy8ke3RhZ05hbWV9XCJgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGFnUmVxdWlyZWQgPSB0YWdSZXF1aXJlZCAmJiAodG9wUmVxdWlyZWQgfHwgaGFzUmVxdWlyZWQoc2NoKSk7XG4gICAgICAgICAgICAgICAgYWRkTWFwcGluZ3MocHJvcFNjaCwgaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRhZ1JlcXVpcmVkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZGlzY3JpbWluYXRvcjogXCIke3RhZ05hbWV9XCIgbXVzdCBiZSByZXF1aXJlZGApO1xuICAgICAgICAgICAgcmV0dXJuIG9uZU9mTWFwcGluZztcbiAgICAgICAgICAgIGZ1bmN0aW9uIGhhc1JlcXVpcmVkKHsgcmVxdWlyZWQgfSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHJlcXVpcmVkKSAmJiByZXF1aXJlZC5pbmNsdWRlcyh0YWdOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGFkZE1hcHBpbmdzKHNjaCwgaSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2guY29uc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkTWFwcGluZyhzY2guY29uc3QsIGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2guZW51bSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHRhZ1ZhbHVlIG9mIHNjaC5lbnVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRNYXBwaW5nKHRhZ1ZhbHVlLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBkaXNjcmltaW5hdG9yOiBcInByb3BlcnRpZXMvJHt0YWdOYW1lfVwiIG11c3QgaGF2ZSBcImNvbnN0XCIgb3IgXCJlbnVtXCJgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBhZGRNYXBwaW5nKHRhZ1ZhbHVlLCBpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0YWdWYWx1ZSAhPSBcInN0cmluZ1wiIHx8IHRhZ1ZhbHVlIGluIG9uZU9mTWFwcGluZykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRpc2NyaW1pbmF0b3I6IFwiJHt0YWdOYW1lfVwiIHZhbHVlcyBtdXN0IGJlIHVuaXF1ZSBzdHJpbmdzYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9uZU9mTWFwcGluZ1t0YWdWYWx1ZV0gPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NaXNzaW5nUmVmRXJyb3IgPSBleHBvcnRzLlZhbGlkYXRpb25FcnJvciA9IGV4cG9ydHMuQ29kZUdlbiA9IGV4cG9ydHMuTmFtZSA9IGV4cG9ydHMubmlsID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLnN0ciA9IGV4cG9ydHMuXyA9IGV4cG9ydHMuS2V5d29yZEN4dCA9IGV4cG9ydHMuQWp2ID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIi4vY29yZVwiKTtcbmNvbnN0IGRyYWZ0N18xID0gcmVxdWlyZShcIi4vdm9jYWJ1bGFyaWVzL2RyYWZ0N1wiKTtcbmNvbnN0IGRpc2NyaW1pbmF0b3JfMSA9IHJlcXVpcmUoXCIuL3ZvY2FidWxhcmllcy9kaXNjcmltaW5hdG9yXCIpO1xuY29uc3QgZHJhZnQ3TWV0YVNjaGVtYSA9IHJlcXVpcmUoXCIuL3JlZnMvanNvbi1zY2hlbWEtZHJhZnQtMDcuanNvblwiKTtcbmNvbnN0IE1FVEFfU1VQUE9SVF9EQVRBID0gW1wiL3Byb3BlcnRpZXNcIl07XG5jb25zdCBNRVRBX1NDSEVNQV9JRCA9IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWFcIjtcbmNsYXNzIEFqdiBleHRlbmRzIGNvcmVfMS5kZWZhdWx0IHtcbiAgICBfYWRkVm9jYWJ1bGFyaWVzKCkge1xuICAgICAgICBzdXBlci5fYWRkVm9jYWJ1bGFyaWVzKCk7XG4gICAgICAgIGRyYWZ0N18xLmRlZmF1bHQuZm9yRWFjaCgodikgPT4gdGhpcy5hZGRWb2NhYnVsYXJ5KHYpKTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5kaXNjcmltaW5hdG9yKVxuICAgICAgICAgICAgdGhpcy5hZGRLZXl3b3JkKGRpc2NyaW1pbmF0b3JfMS5kZWZhdWx0KTtcbiAgICB9XG4gICAgX2FkZERlZmF1bHRNZXRhU2NoZW1hKCkge1xuICAgICAgICBzdXBlci5fYWRkRGVmYXVsdE1ldGFTY2hlbWEoKTtcbiAgICAgICAgaWYgKCF0aGlzLm9wdHMubWV0YSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbWV0YVNjaGVtYSA9IHRoaXMub3B0cy4kZGF0YVxuICAgICAgICAgICAgPyB0aGlzLiRkYXRhTWV0YVNjaGVtYShkcmFmdDdNZXRhU2NoZW1hLCBNRVRBX1NVUFBPUlRfREFUQSlcbiAgICAgICAgICAgIDogZHJhZnQ3TWV0YVNjaGVtYTtcbiAgICAgICAgdGhpcy5hZGRNZXRhU2NoZW1hKG1ldGFTY2hlbWEsIE1FVEFfU0NIRU1BX0lELCBmYWxzZSk7XG4gICAgICAgIHRoaXMucmVmc1tcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvc2NoZW1hXCJdID0gTUVUQV9TQ0hFTUFfSUQ7XG4gICAgfVxuICAgIGRlZmF1bHRNZXRhKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMub3B0cy5kZWZhdWx0TWV0YSA9XG4gICAgICAgICAgICBzdXBlci5kZWZhdWx0TWV0YSgpIHx8ICh0aGlzLmdldFNjaGVtYShNRVRBX1NDSEVNQV9JRCkgPyBNRVRBX1NDSEVNQV9JRCA6IHVuZGVmaW5lZCkpO1xuICAgIH1cbn1cbmV4cG9ydHMuQWp2ID0gQWp2O1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gQWp2O1xubW9kdWxlLmV4cG9ydHMuQWp2ID0gQWp2O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gQWp2O1xudmFyIHZhbGlkYXRlXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL3ZhbGlkYXRlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiS2V5d29yZEN4dFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsaWRhdGVfMS5LZXl3b3JkQ3h0OyB9IH0pO1xudmFyIGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvY29kZWdlblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5fOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuc3RyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5naWZ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuc3RyaW5naWZ5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibmlsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEubmlsOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLk5hbWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb2RlR2VuXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuQ29kZUdlbjsgfSB9KTtcbnZhciB2YWxpZGF0aW9uX2Vycm9yXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJWYWxpZGF0aW9uRXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbGlkYXRpb25fZXJyb3JfMS5kZWZhdWx0OyB9IH0pO1xudmFyIHJlZl9lcnJvcl8xID0gcmVxdWlyZShcIi4vY29tcGlsZS9yZWZfZXJyb3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNaXNzaW5nUmVmRXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZl9lcnJvcl8xLmRlZmF1bHQ7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hanYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZm9ybWF0TmFtZXMgPSBleHBvcnRzLmZhc3RGb3JtYXRzID0gZXhwb3J0cy5mdWxsRm9ybWF0cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIGZtdERlZih2YWxpZGF0ZSwgY29tcGFyZSkge1xuICAgIHJldHVybiB7IHZhbGlkYXRlLCBjb21wYXJlIH07XG59XG5leHBvcnRzLmZ1bGxGb3JtYXRzID0ge1xuICAgIC8vIGRhdGU6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjc2VjdGlvbi01LjZcbiAgICBkYXRlOiBmbXREZWYoZGF0ZSwgY29tcGFyZURhdGUpLFxuICAgIC8vIGRhdGUtdGltZTogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICAgIHRpbWU6IGZtdERlZih0aW1lLCBjb21wYXJlVGltZSksXG4gICAgXCJkYXRlLXRpbWVcIjogZm10RGVmKGRhdGVfdGltZSwgY29tcGFyZURhdGVUaW1lKSxcbiAgICAvLyBkdXJhdGlvbjogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjYXBwZW5kaXgtQVxuICAgIGR1cmF0aW9uOiAvXlAoPyEkKSgoXFxkK1kpPyhcXGQrTSk/KFxcZCtEKT8oVCg/PVxcZCkoXFxkK0gpPyhcXGQrTSk/KFxcZCtTKT8pP3woXFxkK1cpPykkLyxcbiAgICB1cmksXG4gICAgXCJ1cmktcmVmZXJlbmNlXCI6IC9eKD86W2Etel1bYS16MC05K1xcLS5dKjopPyg/OlxcLz9cXC8oPzooPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06XXwlWzAtOWEtZl17Mn0pKkApPyg/OlxcWyg/Oig/Oig/Oig/OlswLTlhLWZdezEsNH06KXs2fXw6Oig/OlswLTlhLWZdezEsNH06KXs1fXwoPzpbMC05YS1mXXsxLDR9KT86Oig/OlswLTlhLWZdezEsNH06KXs0fXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCwxfVswLTlhLWZdezEsNH0pPzo6KD86WzAtOWEtZl17MSw0fTopezN9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDJ9WzAtOWEtZl17MSw0fSk/OjooPzpbMC05YS1mXXsxLDR9Oil7Mn18KD86KD86WzAtOWEtZl17MSw0fTopezAsM31bMC05YS1mXXsxLDR9KT86OlswLTlhLWZdezEsNH06fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDR9WzAtOWEtZl17MSw0fSk/OjopKD86WzAtOWEtZl17MSw0fTpbMC05YS1mXXsxLDR9fCg/Oig/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSl8KD86KD86WzAtOWEtZl17MSw0fTopezAsNX1bMC05YS1mXXsxLDR9KT86OlswLTlhLWZdezEsNH18KD86KD86WzAtOWEtZl17MSw0fTopezAsNn1bMC05YS1mXXsxLDR9KT86Oil8W1Z2XVswLTlhLWZdK1xcLlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpdKylcXF18KD86KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pfCg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9XXwlWzAtOWEtZl17Mn0pKikoPzo6XFxkKik/KD86XFwvKD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz06QF18JVswLTlhLWZdezJ9KSopKnxcXC8oPzooPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKyg/OlxcLyg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSopP3woPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKyg/OlxcLyg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSopPyg/OlxcPyg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkAvP118JVswLTlhLWZdezJ9KSopPyg/OiMoPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpALz9dfCVbMC05YS1mXXsyfSkqKT8kL2ksXG4gICAgLy8gdXJpLXRlbXBsYXRlOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjU3MFxuICAgIFwidXJpLXRlbXBsYXRlXCI6IC9eKD86KD86W15cXHgwMC1cXHgyMFwiJzw+JVxcXFxeYHt8fV18JVswLTlhLWZdezJ9KXxcXHtbKyMuLzs/Jj0sIUB8XT8oPzpbYS16MC05X118JVswLTlhLWZdezJ9KSsoPzo6WzEtOV1bMC05XXswLDN9fFxcKik/KD86LCg/OlthLXowLTlfXXwlWzAtOWEtZl17Mn0pKyg/OjpbMS05XVswLTldezAsM318XFwqKT8pKlxcfSkqJC9pLFxuICAgIC8vIEZvciB0aGUgc291cmNlOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9kcGVyaW5pLzcyOTI5NFxuICAgIC8vIEZvciB0ZXN0IGNhc2VzOiBodHRwczovL21hdGhpYXNieW5lbnMuYmUvZGVtby91cmwtcmVnZXhcbiAgICB1cmw6IC9eKD86aHR0cHM/fGZ0cCk6XFwvXFwvKD86XFxTKyg/OjpcXFMqKT9AKT8oPzooPyEoPzoxMHwxMjcpKD86XFwuXFxkezEsM30pezN9KSg/ISg/OjE2OVxcLjI1NHwxOTJcXC4xNjgpKD86XFwuXFxkezEsM30pezJ9KSg/ITE3MlxcLig/OjFbNi05XXwyXFxkfDNbMC0xXSkoPzpcXC5cXGR7MSwzfSl7Mn0pKD86WzEtOV1cXGQ/fDFcXGRcXGR8MlswMV1cXGR8MjJbMC0zXSkoPzpcXC4oPzoxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSl7Mn0oPzpcXC4oPzpbMS05XVxcZD98MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC00XSkpfCg/Oig/OlthLXowLTlcXHV7MDBhMX0tXFx1e2ZmZmZ9XSstKSpbYS16MC05XFx1ezAwYTF9LVxcdXtmZmZmfV0rKSg/OlxcLig/OlthLXowLTlcXHV7MDBhMX0tXFx1e2ZmZmZ9XSstKSpbYS16MC05XFx1ezAwYTF9LVxcdXtmZmZmfV0rKSooPzpcXC4oPzpbYS16XFx1ezAwYTF9LVxcdXtmZmZmfV17Mix9KSkpKD86OlxcZHsyLDV9KT8oPzpcXC9bXlxcc10qKT8kL2l1LFxuICAgIGVtYWlsOiAvXlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcXC5bYS16MC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKSpAKD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1xcLikrW2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pPyQvaSxcbiAgICBob3N0bmFtZTogL14oPz0uezEsMjUzfVxcLj8kKVthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyg/OlxcLlthLXowLTldKD86Wy0wLTlhLXpdezAsNjF9WzAtOWEtel0pPykqXFwuPyQvaSxcbiAgICAvLyBvcHRpbWl6ZWQgaHR0cHM6Ly93d3cuc2FmYXJpYm9va3NvbmxpbmUuY29tL2xpYnJhcnkvdmlldy9yZWd1bGFyLWV4cHJlc3Npb25zLWNvb2tib29rLzk3ODA1OTY4MDI4MzcvY2gwN3MxNi5odG1sXG4gICAgaXB2NDogL14oPzooPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPykkLyxcbiAgICBpcHY2OiAvXigoKFswLTlhLWZdezEsNH06KXs3fShbMC05YS1mXXsxLDR9fDopKXwoKFswLTlhLWZdezEsNH06KXs2fSg6WzAtOWEtZl17MSw0fXwoKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSl8OikpfCgoWzAtOWEtZl17MSw0fTopezV9KCgoOlswLTlhLWZdezEsNH0pezEsMn0pfDooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSl8OikpfCgoWzAtOWEtZl17MSw0fTopezR9KCgoOlswLTlhLWZdezEsNH0pezEsM30pfCgoOlswLTlhLWZdezEsNH0pPzooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoKFswLTlhLWZdezEsNH06KXszfSgoKDpbMC05YS1mXXsxLDR9KXsxLDR9KXwoKDpbMC05YS1mXXsxLDR9KXswLDJ9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCgoWzAtOWEtZl17MSw0fTopezJ9KCgoOlswLTlhLWZdezEsNH0pezEsNX0pfCgoOlswLTlhLWZdezEsNH0pezAsM306KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KChbMC05YS1mXXsxLDR9Oil7MX0oKCg6WzAtOWEtZl17MSw0fSl7MSw2fSl8KCg6WzAtOWEtZl17MSw0fSl7MCw0fTooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoOigoKDpbMC05YS1mXXsxLDR9KXsxLDd9KXwoKDpbMC05YS1mXXsxLDR9KXswLDV9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpKSQvaSxcbiAgICByZWdleCxcbiAgICAvLyB1dWlkOiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MTIyXG4gICAgdXVpZDogL14oPzp1cm46dXVpZDopP1swLTlhLWZdezh9LSg/OlswLTlhLWZdezR9LSl7M31bMC05YS1mXXsxMn0kL2ksXG4gICAgLy8gSlNPTi1wb2ludGVyOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjkwMVxuICAgIC8vIHVyaSBmcmFnbWVudDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjYXBwZW5kaXgtQVxuICAgIFwianNvbi1wb2ludGVyXCI6IC9eKD86XFwvKD86W15+L118fjB8fjEpKikqJC8sXG4gICAgXCJqc29uLXBvaW50ZXItdXJpLWZyYWdtZW50XCI6IC9eIyg/OlxcLyg/OlthLXowLTlfXFwtLiEkJicoKSorLDs6PUBdfCVbMC05YS1mXXsyfXx+MHx+MSkqKSokL2ksXG4gICAgLy8gcmVsYXRpdmUgSlNPTi1wb2ludGVyOiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1sdWZmLXJlbGF0aXZlLWpzb24tcG9pbnRlci0wMFxuICAgIFwicmVsYXRpdmUtanNvbi1wb2ludGVyXCI6IC9eKD86MHxbMS05XVswLTldKikoPzojfCg/OlxcLyg/Oltefi9dfH4wfH4xKSopKikkLyxcbiAgICAvLyB0aGUgZm9sbG93aW5nIGZvcm1hdHMgYXJlIHVzZWQgYnkgdGhlIG9wZW5hcGkgc3BlY2lmaWNhdGlvbjogaHR0cHM6Ly9zcGVjLm9wZW5hcGlzLm9yZy9vYXMvdjMuMC4wI2RhdGEtdHlwZXNcbiAgICAvLyBieXRlOiBodHRwczovL2dpdGh1Yi5jb20vbWlndWVsbW90YS9pcy1iYXNlNjRcbiAgICBieXRlLFxuICAgIC8vIHNpZ25lZCAzMiBiaXQgaW50ZWdlclxuICAgIGludDMyOiB7IHR5cGU6IFwibnVtYmVyXCIsIHZhbGlkYXRlOiB2YWxpZGF0ZUludDMyIH0sXG4gICAgLy8gc2lnbmVkIDY0IGJpdCBpbnRlZ2VyXG4gICAgaW50NjQ6IHsgdHlwZTogXCJudW1iZXJcIiwgdmFsaWRhdGU6IHZhbGlkYXRlSW50NjQgfSxcbiAgICAvLyBDLXR5cGUgZmxvYXRcbiAgICBmbG9hdDogeyB0eXBlOiBcIm51bWJlclwiLCB2YWxpZGF0ZTogdmFsaWRhdGVOdW1iZXIgfSxcbiAgICAvLyBDLXR5cGUgZG91YmxlXG4gICAgZG91YmxlOiB7IHR5cGU6IFwibnVtYmVyXCIsIHZhbGlkYXRlOiB2YWxpZGF0ZU51bWJlciB9LFxuICAgIC8vIGhpbnQgdG8gdGhlIFVJIHRvIGhpZGUgaW5wdXQgc3RyaW5nc1xuICAgIHBhc3N3b3JkOiB0cnVlLFxuICAgIC8vIHVuY2hlY2tlZCBzdHJpbmcgcGF5bG9hZFxuICAgIGJpbmFyeTogdHJ1ZSxcbn07XG5leHBvcnRzLmZhc3RGb3JtYXRzID0ge1xuICAgIC4uLmV4cG9ydHMuZnVsbEZvcm1hdHMsXG4gICAgZGF0ZTogZm10RGVmKC9eXFxkXFxkXFxkXFxkLVswLTFdXFxkLVswLTNdXFxkJC8sIGNvbXBhcmVEYXRlKSxcbiAgICB0aW1lOiBmbXREZWYoL14oPzpbMC0yXVxcZDpbMC01XVxcZDpbMC01XVxcZHwyMzo1OTo2MCkoPzpcXC5cXGQrKT8oPzp6fFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/KT8kL2ksIGNvbXBhcmVUaW1lKSxcbiAgICBcImRhdGUtdGltZVwiOiBmbXREZWYoL15cXGRcXGRcXGRcXGQtWzAtMV1cXGQtWzAtM11cXGRbdFxcc10oPzpbMC0yXVxcZDpbMC01XVxcZDpbMC01XVxcZHwyMzo1OTo2MCkoPzpcXC5cXGQrKT8oPzp6fFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/KSQvaSwgY29tcGFyZURhdGVUaW1lKSxcbiAgICAvLyB1cmk6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYWZpbnRvc2gvaXMtbXktanNvbi12YWxpZC9ibG9iL21hc3Rlci9mb3JtYXRzLmpzXG4gICAgdXJpOiAvXig/OlthLXpdW2EtejAtOStcXC0uXSo6KSg/OlxcLz9cXC8pP1teXFxzXSokL2ksXG4gICAgXCJ1cmktcmVmZXJlbmNlXCI6IC9eKD86KD86W2Etel1bYS16MC05K1xcLS5dKjopP1xcLz9cXC8pPyg/OlteXFxcXFxccyNdW15cXHMjXSopPyg/OiNbXlxcXFxcXHNdKik/JC9pLFxuICAgIC8vIGVtYWlsIChzb3VyY2VzIGZyb20ganNlbiB2YWxpZGF0b3IpOlxuICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjAxMzIzL3VzaW5nLWEtcmVndWxhci1leHByZXNzaW9uLXRvLXZhbGlkYXRlLWFuLWVtYWlsLWFkZHJlc3MjYW5zd2VyLTg4MjkzNjNcbiAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9mb3Jtcy5odG1sI3ZhbGlkLWUtbWFpbC1hZGRyZXNzIChzZWFyY2ggZm9yICd3aWxmdWwgdmlvbGF0aW9uJylcbiAgICBlbWFpbDogL15bYS16MC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT8oPzpcXC5bYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT8pKiQvaSxcbn07XG5leHBvcnRzLmZvcm1hdE5hbWVzID0gT2JqZWN0LmtleXMoZXhwb3J0cy5mdWxsRm9ybWF0cyk7XG5mdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHtcbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNhcHBlbmRpeC1DXG4gICAgcmV0dXJuIHllYXIgJSA0ID09PSAwICYmICh5ZWFyICUgMTAwICE9PSAwIHx8IHllYXIgJSA0MDAgPT09IDApO1xufVxuY29uc3QgREFURSA9IC9eKFxcZFxcZFxcZFxcZCktKFxcZFxcZCktKFxcZFxcZCkkLztcbmNvbnN0IERBWVMgPSBbMCwgMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV07XG5mdW5jdGlvbiBkYXRlKHN0cikge1xuICAgIC8vIGZ1bGwtZGF0ZSBmcm9tIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjc2VjdGlvbi01LjZcbiAgICBjb25zdCBtYXRjaGVzID0gREFURS5leGVjKHN0cik7XG4gICAgaWYgKCFtYXRjaGVzKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgeWVhciA9ICttYXRjaGVzWzFdO1xuICAgIGNvbnN0IG1vbnRoID0gK21hdGNoZXNbMl07XG4gICAgY29uc3QgZGF5ID0gK21hdGNoZXNbM107XG4gICAgcmV0dXJuIChtb250aCA+PSAxICYmXG4gICAgICAgIG1vbnRoIDw9IDEyICYmXG4gICAgICAgIGRheSA+PSAxICYmXG4gICAgICAgIGRheSA8PSAobW9udGggPT09IDIgJiYgaXNMZWFwWWVhcih5ZWFyKSA/IDI5IDogREFZU1ttb250aF0pKTtcbn1cbmZ1bmN0aW9uIGNvbXBhcmVEYXRlKGQxLCBkMikge1xuICAgIGlmICghKGQxICYmIGQyKSlcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAoZDEgPiBkMilcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgaWYgKGQxIDwgZDIpXG4gICAgICAgIHJldHVybiAtMTtcbiAgICByZXR1cm4gMDtcbn1cbmNvbnN0IFRJTUUgPSAvXihcXGRcXGQpOihcXGRcXGQpOihcXGRcXGQpKFxcLlxcZCspPyh6fFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/KT8kL2k7XG5mdW5jdGlvbiB0aW1lKHN0ciwgd2l0aFRpbWVab25lKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IFRJTUUuZXhlYyhzdHIpO1xuICAgIGlmICghbWF0Y2hlcylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGhvdXIgPSArbWF0Y2hlc1sxXTtcbiAgICBjb25zdCBtaW51dGUgPSArbWF0Y2hlc1syXTtcbiAgICBjb25zdCBzZWNvbmQgPSArbWF0Y2hlc1szXTtcbiAgICBjb25zdCB0aW1lWm9uZSA9IG1hdGNoZXNbNV07XG4gICAgcmV0dXJuICgoKGhvdXIgPD0gMjMgJiYgbWludXRlIDw9IDU5ICYmIHNlY29uZCA8PSA1OSkgfHxcbiAgICAgICAgKGhvdXIgPT09IDIzICYmIG1pbnV0ZSA9PT0gNTkgJiYgc2Vjb25kID09PSA2MCkpICYmXG4gICAgICAgICghd2l0aFRpbWVab25lIHx8IHRpbWVab25lICE9PSBcIlwiKSk7XG59XG5mdW5jdGlvbiBjb21wYXJlVGltZSh0MSwgdDIpIHtcbiAgICBpZiAoISh0MSAmJiB0MikpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgYTEgPSBUSU1FLmV4ZWModDEpO1xuICAgIGNvbnN0IGEyID0gVElNRS5leGVjKHQyKTtcbiAgICBpZiAoIShhMSAmJiBhMikpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdDEgPSBhMVsxXSArIGExWzJdICsgYTFbM10gKyAoYTFbNF0gfHwgXCJcIik7XG4gICAgdDIgPSBhMlsxXSArIGEyWzJdICsgYTJbM10gKyAoYTJbNF0gfHwgXCJcIik7XG4gICAgaWYgKHQxID4gdDIpXG4gICAgICAgIHJldHVybiAxO1xuICAgIGlmICh0MSA8IHQyKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgcmV0dXJuIDA7XG59XG5jb25zdCBEQVRFX1RJTUVfU0VQQVJBVE9SID0gL3R8XFxzL2k7XG5mdW5jdGlvbiBkYXRlX3RpbWUoc3RyKSB7XG4gICAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICAgIGNvbnN0IGRhdGVUaW1lID0gc3RyLnNwbGl0KERBVEVfVElNRV9TRVBBUkFUT1IpO1xuICAgIHJldHVybiBkYXRlVGltZS5sZW5ndGggPT09IDIgJiYgZGF0ZShkYXRlVGltZVswXSkgJiYgdGltZShkYXRlVGltZVsxXSwgdHJ1ZSk7XG59XG5mdW5jdGlvbiBjb21wYXJlRGF0ZVRpbWUoZHQxLCBkdDIpIHtcbiAgICBpZiAoIShkdDEgJiYgZHQyKSlcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBbZDEsIHQxXSA9IGR0MS5zcGxpdChEQVRFX1RJTUVfU0VQQVJBVE9SKTtcbiAgICBjb25zdCBbZDIsIHQyXSA9IGR0Mi5zcGxpdChEQVRFX1RJTUVfU0VQQVJBVE9SKTtcbiAgICBjb25zdCByZXMgPSBjb21wYXJlRGF0ZShkMSwgZDIpO1xuICAgIGlmIChyZXMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzIHx8IGNvbXBhcmVUaW1lKHQxLCB0Mik7XG59XG5jb25zdCBOT1RfVVJJX0ZSQUdNRU5UID0gL1xcL3w6LztcbmNvbnN0IFVSSSA9IC9eKD86W2Etel1bYS16MC05K1xcLS5dKjopKD86XFwvP1xcLyg/Oig/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpdfCVbMC05YS1mXXsyfSkqQCk/KD86XFxbKD86KD86KD86KD86WzAtOWEtZl17MSw0fTopezZ9fDo6KD86WzAtOWEtZl17MSw0fTopezV9fCg/OlswLTlhLWZdezEsNH0pPzo6KD86WzAtOWEtZl17MSw0fTopezR9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDF9WzAtOWEtZl17MSw0fSk/OjooPzpbMC05YS1mXXsxLDR9Oil7M318KD86KD86WzAtOWEtZl17MSw0fTopezAsMn1bMC05YS1mXXsxLDR9KT86Oig/OlswLTlhLWZdezEsNH06KXsyfXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCwzfVswLTlhLWZdezEsNH0pPzo6WzAtOWEtZl17MSw0fTp8KD86KD86WzAtOWEtZl17MSw0fTopezAsNH1bMC05YS1mXXsxLDR9KT86OikoPzpbMC05YS1mXXsxLDR9OlswLTlhLWZdezEsNH18KD86KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw1fVswLTlhLWZdezEsNH0pPzo6WzAtOWEtZl17MSw0fXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw2fVswLTlhLWZdezEsNH0pPzo6KXxbVnZdWzAtOWEtZl0rXFwuW2EtejAtOVxcLS5ffiEkJicoKSorLDs9Ol0rKVxcXXwoPzooPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPyl8KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9XXwlWzAtOWEtZl17Mn0pKikoPzo6XFxkKik/KD86XFwvKD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSp8XFwvKD86KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkrKD86XFwvKD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSopP3woPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QF18JVswLTlhLWZdezJ9KSsoPzpcXC8oPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QF18JVswLTlhLWZdezJ9KSopKikoPzpcXD8oPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QC8/XXwlWzAtOWEtZl17Mn0pKik/KD86Iyg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpALz9dfCVbMC05YS1mXXsyfSkqKT8kL2k7XG5mdW5jdGlvbiB1cmkoc3RyKSB7XG4gICAgLy8gaHR0cDovL2ptcndhcmUuY29tL2FydGljbGVzLzIwMDkvdXJpX3JlZ2V4cC9VUklfcmVnZXguaHRtbCArIG9wdGlvbmFsIHByb3RvY29sICsgcmVxdWlyZWQgXCIuXCJcbiAgICByZXR1cm4gTk9UX1VSSV9GUkFHTUVOVC50ZXN0KHN0cikgJiYgVVJJLnRlc3Qoc3RyKTtcbn1cbmNvbnN0IEJZVEUgPSAvXig/OltBLVphLXowLTkrL117NH0pKig/OltBLVphLXowLTkrL117Mn09PXxbQS1aYS16MC05Ky9dezN9PSk/JC9nbTtcbmZ1bmN0aW9uIGJ5dGUoc3RyKSB7XG4gICAgQllURS5sYXN0SW5kZXggPSAwO1xuICAgIHJldHVybiBCWVRFLnRlc3Qoc3RyKTtcbn1cbmNvbnN0IE1JTl9JTlQzMiA9IC0oMiAqKiAzMSk7XG5jb25zdCBNQVhfSU5UMzIgPSAyICoqIDMxIC0gMTtcbmZ1bmN0aW9uIHZhbGlkYXRlSW50MzIodmFsdWUpIHtcbiAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgJiYgdmFsdWUgPD0gTUFYX0lOVDMyICYmIHZhbHVlID49IE1JTl9JTlQzMjtcbn1cbmZ1bmN0aW9uIHZhbGlkYXRlSW50NjQodmFsdWUpIHtcbiAgICAvLyBKU09OIGFuZCBqYXZhc2NyaXB0IG1heCBJbnQgaXMgMioqNTMsIHNvIGFueSBpbnQgdGhhdCBwYXNzZXMgaXNJbnRlZ2VyIGlzIHZhbGlkIGZvciBJbnQ2NFxuICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKTtcbn1cbmZ1bmN0aW9uIHZhbGlkYXRlTnVtYmVyKCkge1xuICAgIHJldHVybiB0cnVlO1xufVxuY29uc3QgWl9BTkNIT1IgPSAvW15cXFxcXVxcXFxaLztcbmZ1bmN0aW9uIHJlZ2V4KHN0cikge1xuICAgIGlmIChaX0FOQ0hPUi50ZXN0KHN0cikpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgICBuZXcgUmVnRXhwKHN0cik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zm9ybWF0cy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZWdleHBDb2RlID0gZXhwb3J0cy5nZXRFc21FeHBvcnROYW1lID0gZXhwb3J0cy5nZXRQcm9wZXJ0eSA9IGV4cG9ydHMuc2FmZVN0cmluZ2lmeSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gZXhwb3J0cy5zdHJDb25jYXQgPSBleHBvcnRzLmFkZENvZGVBcmcgPSBleHBvcnRzLnN0ciA9IGV4cG9ydHMuXyA9IGV4cG9ydHMubmlsID0gZXhwb3J0cy5fQ29kZSA9IGV4cG9ydHMuTmFtZSA9IGV4cG9ydHMuSURFTlRJRklFUiA9IGV4cG9ydHMuX0NvZGVPck5hbWUgPSB2b2lkIDA7XG5jbGFzcyBfQ29kZU9yTmFtZSB7XG59XG5leHBvcnRzLl9Db2RlT3JOYW1lID0gX0NvZGVPck5hbWU7XG5leHBvcnRzLklERU5USUZJRVIgPSAvXlthLXokX11bYS16JF8wLTldKiQvaTtcbmNsYXNzIE5hbWUgZXh0ZW5kcyBfQ29kZU9yTmFtZSB7XG4gICAgY29uc3RydWN0b3Iocykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBpZiAoIWV4cG9ydHMuSURFTlRJRklFUi50ZXN0KHMpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29kZUdlbjogbmFtZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllclwiKTtcbiAgICAgICAgdGhpcy5zdHIgPSBzO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyO1xuICAgIH1cbiAgICBlbXB0eVN0cigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiB7IFt0aGlzLnN0cl06IDEgfTtcbiAgICB9XG59XG5leHBvcnRzLk5hbWUgPSBOYW1lO1xuY2xhc3MgX0NvZGUgZXh0ZW5kcyBfQ29kZU9yTmFtZSB7XG4gICAgY29uc3RydWN0b3IoY29kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9pdGVtcyA9IHR5cGVvZiBjb2RlID09PSBcInN0cmluZ1wiID8gW2NvZGVdIDogY29kZTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cjtcbiAgICB9XG4gICAgZW1wdHlTdHIoKSB7XG4gICAgICAgIGlmICh0aGlzLl9pdGVtcy5sZW5ndGggPiAxKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5faXRlbXNbMF07XG4gICAgICAgIHJldHVybiBpdGVtID09PSBcIlwiIHx8IGl0ZW0gPT09ICdcIlwiJztcbiAgICB9XG4gICAgZ2V0IHN0cigpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMuX3N0cikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKHRoaXMuX3N0ciA9IHRoaXMuX2l0ZW1zLnJlZHVjZSgocywgYykgPT4gYCR7c30ke2N9YCwgXCJcIikpKTtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5fbmFtZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICh0aGlzLl9uYW1lcyA9IHRoaXMuX2l0ZW1zLnJlZHVjZSgobmFtZXMsIGMpID0+IHtcbiAgICAgICAgICAgIGlmIChjIGluc3RhbmNlb2YgTmFtZSlcbiAgICAgICAgICAgICAgICBuYW1lc1tjLnN0cl0gPSAobmFtZXNbYy5zdHJdIHx8IDApICsgMTtcbiAgICAgICAgICAgIHJldHVybiBuYW1lcztcbiAgICAgICAgfSwge30pKSk7XG4gICAgfVxufVxuZXhwb3J0cy5fQ29kZSA9IF9Db2RlO1xuZXhwb3J0cy5uaWwgPSBuZXcgX0NvZGUoXCJcIik7XG5mdW5jdGlvbiBfKHN0cnMsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBjb2RlID0gW3N0cnNbMF1dO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGFkZENvZGVBcmcoY29kZSwgYXJnc1tpXSk7XG4gICAgICAgIGNvZGUucHVzaChzdHJzWysraV0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IF9Db2RlKGNvZGUpO1xufVxuZXhwb3J0cy5fID0gXztcbmNvbnN0IHBsdXMgPSBuZXcgX0NvZGUoXCIrXCIpO1xuZnVuY3Rpb24gc3RyKHN0cnMsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBleHByID0gW3NhZmVTdHJpbmdpZnkoc3Ryc1swXSldO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGV4cHIucHVzaChwbHVzKTtcbiAgICAgICAgYWRkQ29kZUFyZyhleHByLCBhcmdzW2ldKTtcbiAgICAgICAgZXhwci5wdXNoKHBsdXMsIHNhZmVTdHJpbmdpZnkoc3Ryc1srK2ldKSk7XG4gICAgfVxuICAgIG9wdGltaXplKGV4cHIpO1xuICAgIHJldHVybiBuZXcgX0NvZGUoZXhwcik7XG59XG5leHBvcnRzLnN0ciA9IHN0cjtcbmZ1bmN0aW9uIGFkZENvZGVBcmcoY29kZSwgYXJnKSB7XG4gICAgaWYgKGFyZyBpbnN0YW5jZW9mIF9Db2RlKVxuICAgICAgICBjb2RlLnB1c2goLi4uYXJnLl9pdGVtcyk7XG4gICAgZWxzZSBpZiAoYXJnIGluc3RhbmNlb2YgTmFtZSlcbiAgICAgICAgY29kZS5wdXNoKGFyZyk7XG4gICAgZWxzZVxuICAgICAgICBjb2RlLnB1c2goaW50ZXJwb2xhdGUoYXJnKSk7XG59XG5leHBvcnRzLmFkZENvZGVBcmcgPSBhZGRDb2RlQXJnO1xuZnVuY3Rpb24gb3B0aW1pemUoZXhwcikge1xuICAgIGxldCBpID0gMTtcbiAgICB3aGlsZSAoaSA8IGV4cHIubGVuZ3RoIC0gMSkge1xuICAgICAgICBpZiAoZXhwcltpXSA9PT0gcGx1cykge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gbWVyZ2VFeHBySXRlbXMoZXhwcltpIC0gMV0sIGV4cHJbaSArIDFdKTtcbiAgICAgICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGV4cHIuc3BsaWNlKGkgLSAxLCAzLCByZXMpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXhwcltpKytdID0gXCIrXCI7XG4gICAgICAgIH1cbiAgICAgICAgaSsrO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1lcmdlRXhwckl0ZW1zKGEsIGIpIHtcbiAgICBpZiAoYiA9PT0gJ1wiXCInKVxuICAgICAgICByZXR1cm4gYTtcbiAgICBpZiAoYSA9PT0gJ1wiXCInKVxuICAgICAgICByZXR1cm4gYjtcbiAgICBpZiAodHlwZW9mIGEgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAoYiBpbnN0YW5jZW9mIE5hbWUgfHwgYVthLmxlbmd0aCAtIDFdICE9PSAnXCInKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodHlwZW9mIGIgIT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHJldHVybiBgJHthLnNsaWNlKDAsIC0xKX0ke2J9XCJgO1xuICAgICAgICBpZiAoYlswXSA9PT0gJ1wiJylcbiAgICAgICAgICAgIHJldHVybiBhLnNsaWNlKDAsIC0xKSArIGIuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBiID09IFwic3RyaW5nXCIgJiYgYlswXSA9PT0gJ1wiJyAmJiAhKGEgaW5zdGFuY2VvZiBOYW1lKSlcbiAgICAgICAgcmV0dXJuIGBcIiR7YX0ke2Iuc2xpY2UoMSl9YDtcbiAgICByZXR1cm47XG59XG5mdW5jdGlvbiBzdHJDb25jYXQoYzEsIGMyKSB7XG4gICAgcmV0dXJuIGMyLmVtcHR5U3RyKCkgPyBjMSA6IGMxLmVtcHR5U3RyKCkgPyBjMiA6IHN0ciBgJHtjMX0ke2MyfWA7XG59XG5leHBvcnRzLnN0ckNvbmNhdCA9IHN0ckNvbmNhdDtcbi8vIFRPRE8gZG8gbm90IGFsbG93IGFycmF5cyBoZXJlXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZSh4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB4ID09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHggPT0gXCJib29sZWFuXCIgfHwgeCA9PT0gbnVsbFxuICAgICAgICA/IHhcbiAgICAgICAgOiBzYWZlU3RyaW5naWZ5KEFycmF5LmlzQXJyYXkoeCkgPyB4LmpvaW4oXCIsXCIpIDogeCk7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnkoeCkge1xuICAgIHJldHVybiBuZXcgX0NvZGUoc2FmZVN0cmluZ2lmeSh4KSk7XG59XG5leHBvcnRzLnN0cmluZ2lmeSA9IHN0cmluZ2lmeTtcbmZ1bmN0aW9uIHNhZmVTdHJpbmdpZnkoeCkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh4KVxuICAgICAgICAucmVwbGFjZSgvXFx1MjAyOC9nLCBcIlxcXFx1MjAyOFwiKVxuICAgICAgICAucmVwbGFjZSgvXFx1MjAyOS9nLCBcIlxcXFx1MjAyOVwiKTtcbn1cbmV4cG9ydHMuc2FmZVN0cmluZ2lmeSA9IHNhZmVTdHJpbmdpZnk7XG5mdW5jdGlvbiBnZXRQcm9wZXJ0eShrZXkpIHtcbiAgICByZXR1cm4gdHlwZW9mIGtleSA9PSBcInN0cmluZ1wiICYmIGV4cG9ydHMuSURFTlRJRklFUi50ZXN0KGtleSkgPyBuZXcgX0NvZGUoYC4ke2tleX1gKSA6IF8gYFske2tleX1dYDtcbn1cbmV4cG9ydHMuZ2V0UHJvcGVydHkgPSBnZXRQcm9wZXJ0eTtcbi8vRG9lcyBiZXN0IGVmZm9ydCB0byBmb3JtYXQgdGhlIG5hbWUgcHJvcGVybHlcbmZ1bmN0aW9uIGdldEVzbUV4cG9ydE5hbWUoa2V5KSB7XG4gICAgaWYgKHR5cGVvZiBrZXkgPT0gXCJzdHJpbmdcIiAmJiBleHBvcnRzLklERU5USUZJRVIudGVzdChrZXkpKSB7XG4gICAgICAgIHJldHVybiBuZXcgX0NvZGUoYCR7a2V5fWApO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IGludmFsaWQgZXhwb3J0IG5hbWU6ICR7a2V5fSwgdXNlIGV4cGxpY2l0ICRpZCBuYW1lIG1hcHBpbmdgKTtcbn1cbmV4cG9ydHMuZ2V0RXNtRXhwb3J0TmFtZSA9IGdldEVzbUV4cG9ydE5hbWU7XG5mdW5jdGlvbiByZWdleHBDb2RlKHJ4KSB7XG4gICAgcmV0dXJuIG5ldyBfQ29kZShyeC50b1N0cmluZygpKTtcbn1cbmV4cG9ydHMucmVnZXhwQ29kZSA9IHJlZ2V4cENvZGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb2RlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlZhbHVlU2NvcGUgPSBleHBvcnRzLlZhbHVlU2NvcGVOYW1lID0gZXhwb3J0cy5TY29wZSA9IGV4cG9ydHMudmFyS2luZHMgPSBleHBvcnRzLlVzZWRWYWx1ZVN0YXRlID0gdm9pZCAwO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4vY29kZVwiKTtcbmNsYXNzIFZhbHVlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobmFtZSkge1xuICAgICAgICBzdXBlcihgQ29kZUdlbjogXCJjb2RlXCIgZm9yICR7bmFtZX0gbm90IGRlZmluZWRgKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5hbWUudmFsdWU7XG4gICAgfVxufVxudmFyIFVzZWRWYWx1ZVN0YXRlO1xuKGZ1bmN0aW9uIChVc2VkVmFsdWVTdGF0ZSkge1xuICAgIFVzZWRWYWx1ZVN0YXRlW1VzZWRWYWx1ZVN0YXRlW1wiU3RhcnRlZFwiXSA9IDBdID0gXCJTdGFydGVkXCI7XG4gICAgVXNlZFZhbHVlU3RhdGVbVXNlZFZhbHVlU3RhdGVbXCJDb21wbGV0ZWRcIl0gPSAxXSA9IFwiQ29tcGxldGVkXCI7XG59KShVc2VkVmFsdWVTdGF0ZSA9IGV4cG9ydHMuVXNlZFZhbHVlU3RhdGUgfHwgKGV4cG9ydHMuVXNlZFZhbHVlU3RhdGUgPSB7fSkpO1xuZXhwb3J0cy52YXJLaW5kcyA9IHtcbiAgICBjb25zdDogbmV3IGNvZGVfMS5OYW1lKFwiY29uc3RcIiksXG4gICAgbGV0OiBuZXcgY29kZV8xLk5hbWUoXCJsZXRcIiksXG4gICAgdmFyOiBuZXcgY29kZV8xLk5hbWUoXCJ2YXJcIiksXG59O1xuY2xhc3MgU2NvcGUge1xuICAgIGNvbnN0cnVjdG9yKHsgcHJlZml4ZXMsIHBhcmVudCB9ID0ge30pIHtcbiAgICAgICAgdGhpcy5fbmFtZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fcHJlZml4ZXMgPSBwcmVmaXhlcztcbiAgICAgICAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICAgIH1cbiAgICB0b05hbWUobmFtZU9yUHJlZml4KSB7XG4gICAgICAgIHJldHVybiBuYW1lT3JQcmVmaXggaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSA/IG5hbWVPclByZWZpeCA6IHRoaXMubmFtZShuYW1lT3JQcmVmaXgpO1xuICAgIH1cbiAgICBuYW1lKHByZWZpeCkge1xuICAgICAgICByZXR1cm4gbmV3IGNvZGVfMS5OYW1lKHRoaXMuX25ld05hbWUocHJlZml4KSk7XG4gICAgfVxuICAgIF9uZXdOYW1lKHByZWZpeCkge1xuICAgICAgICBjb25zdCBuZyA9IHRoaXMuX25hbWVzW3ByZWZpeF0gfHwgdGhpcy5fbmFtZUdyb3VwKHByZWZpeCk7XG4gICAgICAgIHJldHVybiBgJHtwcmVmaXh9JHtuZy5pbmRleCsrfWA7XG4gICAgfVxuICAgIF9uYW1lR3JvdXAocHJlZml4KSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmICgoKF9iID0gKF9hID0gdGhpcy5fcGFyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuX3ByZWZpeGVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaGFzKHByZWZpeCkpIHx8ICh0aGlzLl9wcmVmaXhlcyAmJiAhdGhpcy5fcHJlZml4ZXMuaGFzKHByZWZpeCkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IHByZWZpeCBcIiR7cHJlZml4fVwiIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgc2NvcGVgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHRoaXMuX25hbWVzW3ByZWZpeF0gPSB7IHByZWZpeCwgaW5kZXg6IDAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5TY29wZSA9IFNjb3BlO1xuY2xhc3MgVmFsdWVTY29wZU5hbWUgZXh0ZW5kcyBjb2RlXzEuTmFtZSB7XG4gICAgY29uc3RydWN0b3IocHJlZml4LCBuYW1lU3RyKSB7XG4gICAgICAgIHN1cGVyKG5hbWVTdHIpO1xuICAgICAgICB0aGlzLnByZWZpeCA9IHByZWZpeDtcbiAgICB9XG4gICAgc2V0VmFsdWUodmFsdWUsIHsgcHJvcGVydHksIGl0ZW1JbmRleCB9KSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zY29wZVBhdGggPSAoMCwgY29kZV8xLl8pIGAuJHtuZXcgY29kZV8xLk5hbWUocHJvcGVydHkpfVske2l0ZW1JbmRleH1dYDtcbiAgICB9XG59XG5leHBvcnRzLlZhbHVlU2NvcGVOYW1lID0gVmFsdWVTY29wZU5hbWU7XG5jb25zdCBsaW5lID0gKDAsIGNvZGVfMS5fKSBgXFxuYDtcbmNsYXNzIFZhbHVlU2NvcGUgZXh0ZW5kcyBTY29wZSB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcihvcHRzKTtcbiAgICAgICAgdGhpcy5fdmFsdWVzID0ge307XG4gICAgICAgIHRoaXMuX3Njb3BlID0gb3B0cy5zY29wZTtcbiAgICAgICAgdGhpcy5vcHRzID0geyAuLi5vcHRzLCBfbjogb3B0cy5saW5lcyA/IGxpbmUgOiBjb2RlXzEubmlsIH07XG4gICAgfVxuICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Njb3BlO1xuICAgIH1cbiAgICBuYW1lKHByZWZpeCkge1xuICAgICAgICByZXR1cm4gbmV3IFZhbHVlU2NvcGVOYW1lKHByZWZpeCwgdGhpcy5fbmV3TmFtZShwcmVmaXgpKTtcbiAgICB9XG4gICAgdmFsdWUobmFtZU9yUHJlZml4LCB2YWx1ZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh2YWx1ZS5yZWYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvZGVHZW46IHJlZiBtdXN0IGJlIHBhc3NlZCBpbiB2YWx1ZVwiKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMudG9OYW1lKG5hbWVPclByZWZpeCk7XG4gICAgICAgIGNvbnN0IHsgcHJlZml4IH0gPSBuYW1lO1xuICAgICAgICBjb25zdCB2YWx1ZUtleSA9IChfYSA9IHZhbHVlLmtleSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdmFsdWUucmVmO1xuICAgICAgICBsZXQgdnMgPSB0aGlzLl92YWx1ZXNbcHJlZml4XTtcbiAgICAgICAgaWYgKHZzKSB7XG4gICAgICAgICAgICBjb25zdCBfbmFtZSA9IHZzLmdldCh2YWx1ZUtleSk7XG4gICAgICAgICAgICBpZiAoX25hbWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9uYW1lO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdnMgPSB0aGlzLl92YWx1ZXNbcHJlZml4XSA9IG5ldyBNYXAoKTtcbiAgICAgICAgfVxuICAgICAgICB2cy5zZXQodmFsdWVLZXksIG5hbWUpO1xuICAgICAgICBjb25zdCBzID0gdGhpcy5fc2NvcGVbcHJlZml4XSB8fCAodGhpcy5fc2NvcGVbcHJlZml4XSA9IFtdKTtcbiAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gcy5sZW5ndGg7XG4gICAgICAgIHNbaXRlbUluZGV4XSA9IHZhbHVlLnJlZjtcbiAgICAgICAgbmFtZS5zZXRWYWx1ZSh2YWx1ZSwgeyBwcm9wZXJ0eTogcHJlZml4LCBpdGVtSW5kZXggfSk7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgICBnZXRWYWx1ZShwcmVmaXgsIGtleU9yUmVmKSB7XG4gICAgICAgIGNvbnN0IHZzID0gdGhpcy5fdmFsdWVzW3ByZWZpeF07XG4gICAgICAgIGlmICghdnMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHJldHVybiB2cy5nZXQoa2V5T3JSZWYpO1xuICAgIH1cbiAgICBzY29wZVJlZnMoc2NvcGVOYW1lLCB2YWx1ZXMgPSB0aGlzLl92YWx1ZXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZHVjZVZhbHVlcyh2YWx1ZXMsIChuYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAobmFtZS5zY29wZVBhdGggPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IG5hbWUgXCIke25hbWV9XCIgaGFzIG5vIHZhbHVlYCk7XG4gICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVfMS5fKSBgJHtzY29wZU5hbWV9JHtuYW1lLnNjb3BlUGF0aH1gO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2NvcGVDb2RlKHZhbHVlcyA9IHRoaXMuX3ZhbHVlcywgdXNlZFZhbHVlcywgZ2V0Q29kZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVkdWNlVmFsdWVzKHZhbHVlcywgKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGlmIChuYW1lLnZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBuYW1lIFwiJHtuYW1lfVwiIGhhcyBubyB2YWx1ZWApO1xuICAgICAgICAgICAgcmV0dXJuIG5hbWUudmFsdWUuY29kZTtcbiAgICAgICAgfSwgdXNlZFZhbHVlcywgZ2V0Q29kZSk7XG4gICAgfVxuICAgIF9yZWR1Y2VWYWx1ZXModmFsdWVzLCB2YWx1ZUNvZGUsIHVzZWRWYWx1ZXMgPSB7fSwgZ2V0Q29kZSkge1xuICAgICAgICBsZXQgY29kZSA9IGNvZGVfMS5uaWw7XG4gICAgICAgIGZvciAoY29uc3QgcHJlZml4IGluIHZhbHVlcykge1xuICAgICAgICAgICAgY29uc3QgdnMgPSB2YWx1ZXNbcHJlZml4XTtcbiAgICAgICAgICAgIGlmICghdnMpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCBuYW1lU2V0ID0gKHVzZWRWYWx1ZXNbcHJlZml4XSA9IHVzZWRWYWx1ZXNbcHJlZml4XSB8fCBuZXcgTWFwKCkpO1xuICAgICAgICAgICAgdnMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChuYW1lU2V0LmhhcyhuYW1lKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIG5hbWVTZXQuc2V0KG5hbWUsIFVzZWRWYWx1ZVN0YXRlLlN0YXJ0ZWQpO1xuICAgICAgICAgICAgICAgIGxldCBjID0gdmFsdWVDb2RlKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChjKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZiA9IHRoaXMub3B0cy5lczUgPyBleHBvcnRzLnZhcktpbmRzLnZhciA6IGV4cG9ydHMudmFyS2luZHMuY29uc3Q7XG4gICAgICAgICAgICAgICAgICAgIGNvZGUgPSAoMCwgY29kZV8xLl8pIGAke2NvZGV9JHtkZWZ9ICR7bmFtZX0gPSAke2N9OyR7dGhpcy5vcHRzLl9ufWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKChjID0gZ2V0Q29kZSA9PT0gbnVsbCB8fCBnZXRDb2RlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBnZXRDb2RlKG5hbWUpKSkge1xuICAgICAgICAgICAgICAgICAgICBjb2RlID0gKDAsIGNvZGVfMS5fKSBgJHtjb2RlfSR7Y30ke3RoaXMub3B0cy5fbn1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbHVlRXJyb3IobmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5hbWVTZXQuc2V0KG5hbWUsIFVzZWRWYWx1ZVN0YXRlLkNvbXBsZXRlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29kZTtcbiAgICB9XG59XG5leHBvcnRzLlZhbHVlU2NvcGUgPSBWYWx1ZVNjb3BlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NvcGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMub3IgPSBleHBvcnRzLmFuZCA9IGV4cG9ydHMubm90ID0gZXhwb3J0cy5Db2RlR2VuID0gZXhwb3J0cy5vcGVyYXRvcnMgPSBleHBvcnRzLnZhcktpbmRzID0gZXhwb3J0cy5WYWx1ZVNjb3BlTmFtZSA9IGV4cG9ydHMuVmFsdWVTY29wZSA9IGV4cG9ydHMuU2NvcGUgPSBleHBvcnRzLk5hbWUgPSBleHBvcnRzLnJlZ2V4cENvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IGV4cG9ydHMuZ2V0UHJvcGVydHkgPSBleHBvcnRzLm5pbCA9IGV4cG9ydHMuc3RyQ29uY2F0ID0gZXhwb3J0cy5zdHIgPSBleHBvcnRzLl8gPSB2b2lkIDA7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi9jb2RlXCIpO1xuY29uc3Qgc2NvcGVfMSA9IHJlcXVpcmUoXCIuL3Njb3BlXCIpO1xudmFyIGNvZGVfMiA9IHJlcXVpcmUoXCIuL2NvZGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIuXzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0clwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLnN0cjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0ckNvbmNhdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLnN0ckNvbmNhdDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5pbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLm5pbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldFByb3BlcnR5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIuZ2V0UHJvcGVydHk7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJpbmdpZnlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5zdHJpbmdpZnk7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWdleHBDb2RlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIucmVnZXhwQ29kZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5OYW1lOyB9IH0pO1xudmFyIHNjb3BlXzIgPSByZXF1aXJlKFwiLi9zY29wZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNjb3BlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzY29wZV8yLlNjb3BlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVmFsdWVTY29wZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2NvcGVfMi5WYWx1ZVNjb3BlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVmFsdWVTY29wZU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjb3BlXzIuVmFsdWVTY29wZU5hbWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2YXJLaW5kc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2NvcGVfMi52YXJLaW5kczsgfSB9KTtcbmV4cG9ydHMub3BlcmF0b3JzID0ge1xuICAgIEdUOiBuZXcgY29kZV8xLl9Db2RlKFwiPlwiKSxcbiAgICBHVEU6IG5ldyBjb2RlXzEuX0NvZGUoXCI+PVwiKSxcbiAgICBMVDogbmV3IGNvZGVfMS5fQ29kZShcIjxcIiksXG4gICAgTFRFOiBuZXcgY29kZV8xLl9Db2RlKFwiPD1cIiksXG4gICAgRVE6IG5ldyBjb2RlXzEuX0NvZGUoXCI9PT1cIiksXG4gICAgTkVROiBuZXcgY29kZV8xLl9Db2RlKFwiIT09XCIpLFxuICAgIE5PVDogbmV3IGNvZGVfMS5fQ29kZShcIiFcIiksXG4gICAgT1I6IG5ldyBjb2RlXzEuX0NvZGUoXCJ8fFwiKSxcbiAgICBBTkQ6IG5ldyBjb2RlXzEuX0NvZGUoXCImJlwiKSxcbiAgICBBREQ6IG5ldyBjb2RlXzEuX0NvZGUoXCIrXCIpLFxufTtcbmNsYXNzIE5vZGUge1xuICAgIG9wdGltaXplTm9kZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKF9uYW1lcywgX2NvbnN0YW50cykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5jbGFzcyBEZWYgZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3Rvcih2YXJLaW5kLCBuYW1lLCByaHMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy52YXJLaW5kID0gdmFyS2luZDtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5yaHMgPSByaHM7XG4gICAgfVxuICAgIHJlbmRlcih7IGVzNSwgX24gfSkge1xuICAgICAgICBjb25zdCB2YXJLaW5kID0gZXM1ID8gc2NvcGVfMS52YXJLaW5kcy52YXIgOiB0aGlzLnZhcktpbmQ7XG4gICAgICAgIGNvbnN0IHJocyA9IHRoaXMucmhzID09PSB1bmRlZmluZWQgPyBcIlwiIDogYCA9ICR7dGhpcy5yaHN9YDtcbiAgICAgICAgcmV0dXJuIGAke3ZhcktpbmR9ICR7dGhpcy5uYW1lfSR7cmhzfTtgICsgX247XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICBpZiAoIW5hbWVzW3RoaXMubmFtZS5zdHJdKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5yaHMpXG4gICAgICAgICAgICB0aGlzLnJocyA9IG9wdGltaXplRXhwcih0aGlzLnJocywgbmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJocyBpbnN0YW5jZW9mIGNvZGVfMS5fQ29kZU9yTmFtZSA/IHRoaXMucmhzLm5hbWVzIDoge307XG4gICAgfVxufVxuY2xhc3MgQXNzaWduIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IobGhzLCByaHMsIHNpZGVFZmZlY3RzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubGhzID0gbGhzO1xuICAgICAgICB0aGlzLnJocyA9IHJocztcbiAgICAgICAgdGhpcy5zaWRlRWZmZWN0cyA9IHNpZGVFZmZlY3RzO1xuICAgIH1cbiAgICByZW5kZXIoeyBfbiB9KSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmxoc30gPSAke3RoaXMucmhzfTtgICsgX247XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICBpZiAodGhpcy5saHMgaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSAmJiAhbmFtZXNbdGhpcy5saHMuc3RyXSAmJiAhdGhpcy5zaWRlRWZmZWN0cylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5yaHMgPSBvcHRpbWl6ZUV4cHIodGhpcy5yaHMsIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICBjb25zdCBuYW1lcyA9IHRoaXMubGhzIGluc3RhbmNlb2YgY29kZV8xLk5hbWUgPyB7fSA6IHsgLi4udGhpcy5saHMubmFtZXMgfTtcbiAgICAgICAgcmV0dXJuIGFkZEV4cHJOYW1lcyhuYW1lcywgdGhpcy5yaHMpO1xuICAgIH1cbn1cbmNsYXNzIEFzc2lnbk9wIGV4dGVuZHMgQXNzaWduIHtcbiAgICBjb25zdHJ1Y3RvcihsaHMsIG9wLCByaHMsIHNpZGVFZmZlY3RzKSB7XG4gICAgICAgIHN1cGVyKGxocywgcmhzLCBzaWRlRWZmZWN0cyk7XG4gICAgICAgIHRoaXMub3AgPSBvcDtcbiAgICB9XG4gICAgcmVuZGVyKHsgX24gfSkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5saHN9ICR7dGhpcy5vcH09ICR7dGhpcy5yaHN9O2AgKyBfbjtcbiAgICB9XG59XG5jbGFzcyBMYWJlbCBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKGxhYmVsKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcbiAgICAgICAgdGhpcy5uYW1lcyA9IHt9O1xuICAgIH1cbiAgICByZW5kZXIoeyBfbiB9KSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmxhYmVsfTpgICsgX247XG4gICAgfVxufVxuY2xhc3MgQnJlYWsgZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihsYWJlbCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxhYmVsID0gbGFiZWw7XG4gICAgICAgIHRoaXMubmFtZXMgPSB7fTtcbiAgICB9XG4gICAgcmVuZGVyKHsgX24gfSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMubGFiZWwgPyBgICR7dGhpcy5sYWJlbH1gIDogXCJcIjtcbiAgICAgICAgcmV0dXJuIGBicmVhayR7bGFiZWx9O2AgKyBfbjtcbiAgICB9XG59XG5jbGFzcyBUaHJvdyBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKGVycm9yKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcbiAgICB9XG4gICAgcmVuZGVyKHsgX24gfSkge1xuICAgICAgICByZXR1cm4gYHRocm93ICR7dGhpcy5lcnJvcn07YCArIF9uO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yLm5hbWVzO1xuICAgIH1cbn1cbmNsYXNzIEFueUNvZGUgZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb2RlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29kZX07YCArIF9uO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5vZGVzKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb2RlfWAgPyB0aGlzIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgdGhpcy5jb2RlID0gb3B0aW1pemVFeHByKHRoaXMuY29kZSwgbmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvZGUgaW5zdGFuY2VvZiBjb2RlXzEuX0NvZGVPck5hbWUgPyB0aGlzLmNvZGUubmFtZXMgOiB7fTtcbiAgICB9XG59XG5jbGFzcyBQYXJlbnROb2RlIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3Iobm9kZXMgPSBbXSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm5vZGVzID0gbm9kZXM7XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVzLnJlZHVjZSgoY29kZSwgbikgPT4gY29kZSArIG4ucmVuZGVyKG9wdHMpLCBcIlwiKTtcbiAgICB9XG4gICAgb3B0aW1pemVOb2RlcygpIHtcbiAgICAgICAgY29uc3QgeyBub2RlcyB9ID0gdGhpcztcbiAgICAgICAgbGV0IGkgPSBub2Rlcy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBub2Rlc1tpXS5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShuKSlcbiAgICAgICAgICAgICAgICBub2Rlcy5zcGxpY2UoaSwgMSwgLi4ubik7XG4gICAgICAgICAgICBlbHNlIGlmIChuKVxuICAgICAgICAgICAgICAgIG5vZGVzW2ldID0gbjtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBub2Rlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGVzLmxlbmd0aCA+IDAgPyB0aGlzIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgY29uc3QgeyBub2RlcyB9ID0gdGhpcztcbiAgICAgICAgbGV0IGkgPSBub2Rlcy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIC8vIGl0ZXJhdGluZyBiYWNrd2FyZHMgaW1wcm92ZXMgMS1wYXNzIG9wdGltaXphdGlvblxuICAgICAgICAgICAgY29uc3QgbiA9IG5vZGVzW2ldO1xuICAgICAgICAgICAgaWYgKG4ub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHN1YnRyYWN0TmFtZXMobmFtZXMsIG4ubmFtZXMpO1xuICAgICAgICAgICAgbm9kZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2Rlcy5sZW5ndGggPiAwID8gdGhpcyA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2Rlcy5yZWR1Y2UoKG5hbWVzLCBuKSA9PiBhZGROYW1lcyhuYW1lcywgbi5uYW1lcyksIHt9KTtcbiAgICB9XG59XG5jbGFzcyBCbG9ja05vZGUgZXh0ZW5kcyBQYXJlbnROb2RlIHtcbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gXCJ7XCIgKyBvcHRzLl9uICsgc3VwZXIucmVuZGVyKG9wdHMpICsgXCJ9XCIgKyBvcHRzLl9uO1xuICAgIH1cbn1cbmNsYXNzIFJvb3QgZXh0ZW5kcyBQYXJlbnROb2RlIHtcbn1cbmNsYXNzIEVsc2UgZXh0ZW5kcyBCbG9ja05vZGUge1xufVxuRWxzZS5raW5kID0gXCJlbHNlXCI7XG5jbGFzcyBJZiBleHRlbmRzIEJsb2NrTm9kZSB7XG4gICAgY29uc3RydWN0b3IoY29uZGl0aW9uLCBub2Rlcykge1xuICAgICAgICBzdXBlcihub2Rlcyk7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uID0gY29uZGl0aW9uO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICBsZXQgY29kZSA9IGBpZigke3RoaXMuY29uZGl0aW9ufSlgICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgICAgICBpZiAodGhpcy5lbHNlKVxuICAgICAgICAgICAgY29kZSArPSBcImVsc2UgXCIgKyB0aGlzLmVsc2UucmVuZGVyKG9wdHMpO1xuICAgICAgICByZXR1cm4gY29kZTtcbiAgICB9XG4gICAgb3B0aW1pemVOb2RlcygpIHtcbiAgICAgICAgc3VwZXIub3B0aW1pemVOb2RlcygpO1xuICAgICAgICBjb25zdCBjb25kID0gdGhpcy5jb25kaXRpb247XG4gICAgICAgIGlmIChjb25kID09PSB0cnVlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZXM7IC8vIGVsc2UgaXMgaWdub3JlZCBoZXJlXG4gICAgICAgIGxldCBlID0gdGhpcy5lbHNlO1xuICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgY29uc3QgbnMgPSBlLm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgICAgIGUgPSB0aGlzLmVsc2UgPSBBcnJheS5pc0FycmF5KG5zKSA/IG5ldyBFbHNlKG5zKSA6IG5zO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICBpZiAoY29uZCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGUgaW5zdGFuY2VvZiBJZiA/IGUgOiBlLm5vZGVzO1xuICAgICAgICAgICAgaWYgKHRoaXMubm9kZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBJZihub3QoY29uZCksIGUgaW5zdGFuY2VvZiBJZiA/IFtlXSA6IGUubm9kZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25kID09PSBmYWxzZSB8fCAhdGhpcy5ub2Rlcy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5lbHNlID0gKF9hID0gdGhpcy5lbHNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgaWYgKCEoc3VwZXIub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB8fCB0aGlzLmVsc2UpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmNvbmRpdGlvbiA9IG9wdGltaXplRXhwcih0aGlzLmNvbmRpdGlvbiwgbmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIGNvbnN0IG5hbWVzID0gc3VwZXIubmFtZXM7XG4gICAgICAgIGFkZEV4cHJOYW1lcyhuYW1lcywgdGhpcy5jb25kaXRpb24pO1xuICAgICAgICBpZiAodGhpcy5lbHNlKVxuICAgICAgICAgICAgYWRkTmFtZXMobmFtZXMsIHRoaXMuZWxzZS5uYW1lcyk7XG4gICAgICAgIHJldHVybiBuYW1lcztcbiAgICB9XG59XG5JZi5raW5kID0gXCJpZlwiO1xuY2xhc3MgRm9yIGV4dGVuZHMgQmxvY2tOb2RlIHtcbn1cbkZvci5raW5kID0gXCJmb3JcIjtcbmNsYXNzIEZvckxvb3AgZXh0ZW5kcyBGb3Ige1xuICAgIGNvbnN0cnVjdG9yKGl0ZXJhdGlvbikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLml0ZXJhdGlvbiA9IGl0ZXJhdGlvbjtcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIGBmb3IoJHt0aGlzLml0ZXJhdGlvbn0pYCArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIGlmICghc3VwZXIub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5pdGVyYXRpb24gPSBvcHRpbWl6ZUV4cHIodGhpcy5pdGVyYXRpb24sIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gYWRkTmFtZXMoc3VwZXIubmFtZXMsIHRoaXMuaXRlcmF0aW9uLm5hbWVzKTtcbiAgICB9XG59XG5jbGFzcyBGb3JSYW5nZSBleHRlbmRzIEZvciB7XG4gICAgY29uc3RydWN0b3IodmFyS2luZCwgbmFtZSwgZnJvbSwgdG8pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy52YXJLaW5kID0gdmFyS2luZDtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5mcm9tID0gZnJvbTtcbiAgICAgICAgdGhpcy50byA9IHRvO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICBjb25zdCB2YXJLaW5kID0gb3B0cy5lczUgPyBzY29wZV8xLnZhcktpbmRzLnZhciA6IHRoaXMudmFyS2luZDtcbiAgICAgICAgY29uc3QgeyBuYW1lLCBmcm9tLCB0byB9ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGBmb3IoJHt2YXJLaW5kfSAke25hbWV9PSR7ZnJvbX07ICR7bmFtZX08JHt0b307ICR7bmFtZX0rKylgICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIGNvbnN0IG5hbWVzID0gYWRkRXhwck5hbWVzKHN1cGVyLm5hbWVzLCB0aGlzLmZyb20pO1xuICAgICAgICByZXR1cm4gYWRkRXhwck5hbWVzKG5hbWVzLCB0aGlzLnRvKTtcbiAgICB9XG59XG5jbGFzcyBGb3JJdGVyIGV4dGVuZHMgRm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihsb29wLCB2YXJLaW5kLCBuYW1lLCBpdGVyYWJsZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxvb3AgPSBsb29wO1xuICAgICAgICB0aGlzLnZhcktpbmQgPSB2YXJLaW5kO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLml0ZXJhYmxlID0gaXRlcmFibGU7XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiBgZm9yKCR7dGhpcy52YXJLaW5kfSAke3RoaXMubmFtZX0gJHt0aGlzLmxvb3B9ICR7dGhpcy5pdGVyYWJsZX0pYCArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIGlmICghc3VwZXIub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5pdGVyYWJsZSA9IG9wdGltaXplRXhwcih0aGlzLml0ZXJhYmxlLCBuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIGFkZE5hbWVzKHN1cGVyLm5hbWVzLCB0aGlzLml0ZXJhYmxlLm5hbWVzKTtcbiAgICB9XG59XG5jbGFzcyBGdW5jIGV4dGVuZHMgQmxvY2tOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBhcmdzLCBhc3luYykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgICAgICB0aGlzLmFzeW5jID0gYXN5bmM7XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIGNvbnN0IF9hc3luYyA9IHRoaXMuYXN5bmMgPyBcImFzeW5jIFwiIDogXCJcIjtcbiAgICAgICAgcmV0dXJuIGAke19hc3luY31mdW5jdGlvbiAke3RoaXMubmFtZX0oJHt0aGlzLmFyZ3N9KWAgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxufVxuRnVuYy5raW5kID0gXCJmdW5jXCI7XG5jbGFzcyBSZXR1cm4gZXh0ZW5kcyBQYXJlbnROb2RlIHtcbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gXCJyZXR1cm4gXCIgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxufVxuUmV0dXJuLmtpbmQgPSBcInJldHVyblwiO1xuY2xhc3MgVHJ5IGV4dGVuZHMgQmxvY2tOb2RlIHtcbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICBsZXQgY29kZSA9IFwidHJ5XCIgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgICAgIGlmICh0aGlzLmNhdGNoKVxuICAgICAgICAgICAgY29kZSArPSB0aGlzLmNhdGNoLnJlbmRlcihvcHRzKTtcbiAgICAgICAgaWYgKHRoaXMuZmluYWxseSlcbiAgICAgICAgICAgIGNvZGUgKz0gdGhpcy5maW5hbGx5LnJlbmRlcihvcHRzKTtcbiAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgfVxuICAgIG9wdGltaXplTm9kZXMoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHN1cGVyLm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgKF9hID0gdGhpcy5jYXRjaCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgKF9iID0gdGhpcy5maW5hbGx5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iub3B0aW1pemVOb2RlcygpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHN1cGVyLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIChfYSA9IHRoaXMuY2F0Y2gpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICAoX2IgPSB0aGlzLmZpbmFsbHkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICBjb25zdCBuYW1lcyA9IHN1cGVyLm5hbWVzO1xuICAgICAgICBpZiAodGhpcy5jYXRjaClcbiAgICAgICAgICAgIGFkZE5hbWVzKG5hbWVzLCB0aGlzLmNhdGNoLm5hbWVzKTtcbiAgICAgICAgaWYgKHRoaXMuZmluYWxseSlcbiAgICAgICAgICAgIGFkZE5hbWVzKG5hbWVzLCB0aGlzLmZpbmFsbHkubmFtZXMpO1xuICAgICAgICByZXR1cm4gbmFtZXM7XG4gICAgfVxufVxuY2xhc3MgQ2F0Y2ggZXh0ZW5kcyBCbG9ja05vZGUge1xuICAgIGNvbnN0cnVjdG9yKGVycm9yKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIGBjYXRjaCgke3RoaXMuZXJyb3J9KWAgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxufVxuQ2F0Y2gua2luZCA9IFwiY2F0Y2hcIjtcbmNsYXNzIEZpbmFsbHkgZXh0ZW5kcyBCbG9ja05vZGUge1xuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiBcImZpbmFsbHlcIiArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICB9XG59XG5GaW5hbGx5LmtpbmQgPSBcImZpbmFsbHlcIjtcbmNsYXNzIENvZGVHZW4ge1xuICAgIGNvbnN0cnVjdG9yKGV4dFNjb3BlLCBvcHRzID0ge30pIHtcbiAgICAgICAgdGhpcy5fdmFsdWVzID0ge307XG4gICAgICAgIHRoaXMuX2Jsb2NrU3RhcnRzID0gW107XG4gICAgICAgIHRoaXMuX2NvbnN0YW50cyA9IHt9O1xuICAgICAgICB0aGlzLm9wdHMgPSB7IC4uLm9wdHMsIF9uOiBvcHRzLmxpbmVzID8gXCJcXG5cIiA6IFwiXCIgfTtcbiAgICAgICAgdGhpcy5fZXh0U2NvcGUgPSBleHRTY29wZTtcbiAgICAgICAgdGhpcy5fc2NvcGUgPSBuZXcgc2NvcGVfMS5TY29wZSh7IHBhcmVudDogZXh0U2NvcGUgfSk7XG4gICAgICAgIHRoaXMuX25vZGVzID0gW25ldyBSb290KCldO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QucmVuZGVyKHRoaXMub3B0cyk7XG4gICAgfVxuICAgIC8vIHJldHVybnMgdW5pcXVlIG5hbWUgaW4gdGhlIGludGVybmFsIHNjb3BlXG4gICAgbmFtZShwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Njb3BlLm5hbWUocHJlZml4KTtcbiAgICB9XG4gICAgLy8gcmVzZXJ2ZXMgdW5pcXVlIG5hbWUgaW4gdGhlIGV4dGVybmFsIHNjb3BlXG4gICAgc2NvcGVOYW1lKHByZWZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXh0U2NvcGUubmFtZShwcmVmaXgpO1xuICAgIH1cbiAgICAvLyByZXNlcnZlcyB1bmlxdWUgbmFtZSBpbiB0aGUgZXh0ZXJuYWwgc2NvcGUgYW5kIGFzc2lnbnMgdmFsdWUgdG8gaXRcbiAgICBzY29wZVZhbHVlKHByZWZpeE9yTmFtZSwgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuX2V4dFNjb3BlLnZhbHVlKHByZWZpeE9yTmFtZSwgdmFsdWUpO1xuICAgICAgICBjb25zdCB2cyA9IHRoaXMuX3ZhbHVlc1tuYW1lLnByZWZpeF0gfHwgKHRoaXMuX3ZhbHVlc1tuYW1lLnByZWZpeF0gPSBuZXcgU2V0KCkpO1xuICAgICAgICB2cy5hZGQobmFtZSk7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgICBnZXRTY29wZVZhbHVlKHByZWZpeCwga2V5T3JSZWYpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dFNjb3BlLmdldFZhbHVlKHByZWZpeCwga2V5T3JSZWYpO1xuICAgIH1cbiAgICAvLyByZXR1cm4gY29kZSB0aGF0IGFzc2lnbnMgdmFsdWVzIGluIHRoZSBleHRlcm5hbCBzY29wZSB0byB0aGUgbmFtZXMgdGhhdCBhcmUgdXNlZCBpbnRlcm5hbGx5XG4gICAgLy8gKHNhbWUgbmFtZXMgdGhhdCB3ZXJlIHJldHVybmVkIGJ5IGdlbi5zY29wZU5hbWUgb3IgZ2VuLnNjb3BlVmFsdWUpXG4gICAgc2NvcGVSZWZzKHNjb3BlTmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXh0U2NvcGUuc2NvcGVSZWZzKHNjb3BlTmFtZSwgdGhpcy5fdmFsdWVzKTtcbiAgICB9XG4gICAgc2NvcGVDb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXh0U2NvcGUuc2NvcGVDb2RlKHRoaXMuX3ZhbHVlcyk7XG4gICAgfVxuICAgIF9kZWYodmFyS2luZCwgbmFtZU9yUHJlZml4LCByaHMsIGNvbnN0YW50KSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9zY29wZS50b05hbWUobmFtZU9yUHJlZml4KTtcbiAgICAgICAgaWYgKHJocyAhPT0gdW5kZWZpbmVkICYmIGNvbnN0YW50KVxuICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRzW25hbWUuc3RyXSA9IHJocztcbiAgICAgICAgdGhpcy5fbGVhZk5vZGUobmV3IERlZih2YXJLaW5kLCBuYW1lLCByaHMpKTtcbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuICAgIC8vIGBjb25zdGAgZGVjbGFyYXRpb24gKGB2YXJgIGluIGVzNSBtb2RlKVxuICAgIGNvbnN0KG5hbWVPclByZWZpeCwgcmhzLCBfY29uc3RhbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZihzY29wZV8xLnZhcktpbmRzLmNvbnN0LCBuYW1lT3JQcmVmaXgsIHJocywgX2NvbnN0YW50KTtcbiAgICB9XG4gICAgLy8gYGxldGAgZGVjbGFyYXRpb24gd2l0aCBvcHRpb25hbCBhc3NpZ25tZW50IChgdmFyYCBpbiBlczUgbW9kZSlcbiAgICBsZXQobmFtZU9yUHJlZml4LCByaHMsIF9jb25zdGFudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmKHNjb3BlXzEudmFyS2luZHMubGV0LCBuYW1lT3JQcmVmaXgsIHJocywgX2NvbnN0YW50KTtcbiAgICB9XG4gICAgLy8gYHZhcmAgZGVjbGFyYXRpb24gd2l0aCBvcHRpb25hbCBhc3NpZ25tZW50XG4gICAgdmFyKG5hbWVPclByZWZpeCwgcmhzLCBfY29uc3RhbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZihzY29wZV8xLnZhcktpbmRzLnZhciwgbmFtZU9yUHJlZml4LCByaHMsIF9jb25zdGFudCk7XG4gICAgfVxuICAgIC8vIGFzc2lnbm1lbnQgY29kZVxuICAgIGFzc2lnbihsaHMsIHJocywgc2lkZUVmZmVjdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYWZOb2RlKG5ldyBBc3NpZ24obGhzLCByaHMsIHNpZGVFZmZlY3RzKSk7XG4gICAgfVxuICAgIC8vIGArPWAgY29kZVxuICAgIGFkZChsaHMsIHJocykge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVhZk5vZGUobmV3IEFzc2lnbk9wKGxocywgZXhwb3J0cy5vcGVyYXRvcnMuQURELCByaHMpKTtcbiAgICB9XG4gICAgLy8gYXBwZW5kcyBwYXNzZWQgU2FmZUV4cHIgdG8gY29kZSBvciBleGVjdXRlcyBCbG9ja1xuICAgIGNvZGUoYykge1xuICAgICAgICBpZiAodHlwZW9mIGMgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgYygpO1xuICAgICAgICBlbHNlIGlmIChjICE9PSBjb2RlXzEubmlsKVxuICAgICAgICAgICAgdGhpcy5fbGVhZk5vZGUobmV3IEFueUNvZGUoYykpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gcmV0dXJucyBjb2RlIGZvciBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlIHBhc3NlZCBhcmd1bWVudCBsaXN0IG9mIGtleS12YWx1ZSBwYWlyc1xuICAgIG9iamVjdCguLi5rZXlWYWx1ZXMpIHtcbiAgICAgICAgY29uc3QgY29kZSA9IFtcIntcIl07XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGtleVZhbHVlcykge1xuICAgICAgICAgICAgaWYgKGNvZGUubGVuZ3RoID4gMSlcbiAgICAgICAgICAgICAgICBjb2RlLnB1c2goXCIsXCIpO1xuICAgICAgICAgICAgY29kZS5wdXNoKGtleSk7XG4gICAgICAgICAgICBpZiAoa2V5ICE9PSB2YWx1ZSB8fCB0aGlzLm9wdHMuZXM1KSB7XG4gICAgICAgICAgICAgICAgY29kZS5wdXNoKFwiOlwiKTtcbiAgICAgICAgICAgICAgICAoMCwgY29kZV8xLmFkZENvZGVBcmcpKGNvZGUsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb2RlLnB1c2goXCJ9XCIpO1xuICAgICAgICByZXR1cm4gbmV3IGNvZGVfMS5fQ29kZShjb2RlKTtcbiAgICB9XG4gICAgLy8gYGlmYCBjbGF1c2UgKG9yIHN0YXRlbWVudCBpZiBgdGhlbkJvZHlgIGFuZCwgb3B0aW9uYWxseSwgYGVsc2VCb2R5YCBhcmUgcGFzc2VkKVxuICAgIGlmKGNvbmRpdGlvbiwgdGhlbkJvZHksIGVsc2VCb2R5KSB7XG4gICAgICAgIHRoaXMuX2Jsb2NrTm9kZShuZXcgSWYoY29uZGl0aW9uKSk7XG4gICAgICAgIGlmICh0aGVuQm9keSAmJiBlbHNlQm9keSkge1xuICAgICAgICAgICAgdGhpcy5jb2RlKHRoZW5Cb2R5KS5lbHNlKCkuY29kZShlbHNlQm9keSkuZW5kSWYoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGVuQm9keSkge1xuICAgICAgICAgICAgdGhpcy5jb2RlKHRoZW5Cb2R5KS5lbmRJZigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGVsc2VCb2R5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZGVHZW46IFwiZWxzZVwiIGJvZHkgd2l0aG91dCBcInRoZW5cIiBib2R5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIGBlbHNlIGlmYCBjbGF1c2UgLSBpbnZhbGlkIHdpdGhvdXQgYGlmYCBvciBhZnRlciBgZWxzZWAgY2xhdXNlc1xuICAgIGVsc2VJZihjb25kaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vsc2VOb2RlKG5ldyBJZihjb25kaXRpb24pKTtcbiAgICB9XG4gICAgLy8gYGVsc2VgIGNsYXVzZSAtIG9ubHkgdmFsaWQgYWZ0ZXIgYGlmYCBvciBgZWxzZSBpZmAgY2xhdXNlc1xuICAgIGVsc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbHNlTm9kZShuZXcgRWxzZSgpKTtcbiAgICB9XG4gICAgLy8gZW5kIGBpZmAgc3RhdGVtZW50IChuZWVkZWQgaWYgZ2VuLmlmIHdhcyB1c2VkIG9ubHkgd2l0aCBjb25kaXRpb24pXG4gICAgZW5kSWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoSWYsIEVsc2UpO1xuICAgIH1cbiAgICBfZm9yKG5vZGUsIGZvckJvZHkpIHtcbiAgICAgICAgdGhpcy5fYmxvY2tOb2RlKG5vZGUpO1xuICAgICAgICBpZiAoZm9yQm9keSlcbiAgICAgICAgICAgIHRoaXMuY29kZShmb3JCb2R5KS5lbmRGb3IoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIGEgZ2VuZXJpYyBgZm9yYCBjbGF1c2UgKG9yIHN0YXRlbWVudCBpZiBgZm9yQm9keWAgaXMgcGFzc2VkKVxuICAgIGZvcihpdGVyYXRpb24sIGZvckJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvcihuZXcgRm9yTG9vcChpdGVyYXRpb24pLCBmb3JCb2R5KTtcbiAgICB9XG4gICAgLy8gYGZvcmAgc3RhdGVtZW50IGZvciBhIHJhbmdlIG9mIHZhbHVlc1xuICAgIGZvclJhbmdlKG5hbWVPclByZWZpeCwgZnJvbSwgdG8sIGZvckJvZHksIHZhcktpbmQgPSB0aGlzLm9wdHMuZXM1ID8gc2NvcGVfMS52YXJLaW5kcy52YXIgOiBzY29wZV8xLnZhcktpbmRzLmxldCkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5fc2NvcGUudG9OYW1lKG5hbWVPclByZWZpeCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3IobmV3IEZvclJhbmdlKHZhcktpbmQsIG5hbWUsIGZyb20sIHRvKSwgKCkgPT4gZm9yQm9keShuYW1lKSk7XG4gICAgfVxuICAgIC8vIGBmb3Itb2ZgIHN0YXRlbWVudCAoaW4gZXM1IG1vZGUgcmVwbGFjZSB3aXRoIGEgbm9ybWFsIGZvciBsb29wKVxuICAgIGZvck9mKG5hbWVPclByZWZpeCwgaXRlcmFibGUsIGZvckJvZHksIHZhcktpbmQgPSBzY29wZV8xLnZhcktpbmRzLmNvbnN0KSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9zY29wZS50b05hbWUobmFtZU9yUHJlZml4KTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5lczUpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyciA9IGl0ZXJhYmxlIGluc3RhbmNlb2YgY29kZV8xLk5hbWUgPyBpdGVyYWJsZSA6IHRoaXMudmFyKFwiX2FyclwiLCBpdGVyYWJsZSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JSYW5nZShcIl9pXCIsIDAsICgwLCBjb2RlXzEuXykgYCR7YXJyfS5sZW5ndGhgLCAoaSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudmFyKG5hbWUsICgwLCBjb2RlXzEuXykgYCR7YXJyfVske2l9XWApO1xuICAgICAgICAgICAgICAgIGZvckJvZHkobmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZm9yKG5ldyBGb3JJdGVyKFwib2ZcIiwgdmFyS2luZCwgbmFtZSwgaXRlcmFibGUpLCAoKSA9PiBmb3JCb2R5KG5hbWUpKTtcbiAgICB9XG4gICAgLy8gYGZvci1pbmAgc3RhdGVtZW50LlxuICAgIC8vIFdpdGggb3B0aW9uIGBvd25Qcm9wZXJ0aWVzYCByZXBsYWNlZCB3aXRoIGEgYGZvci1vZmAgbG9vcCBmb3Igb2JqZWN0IGtleXNcbiAgICBmb3JJbihuYW1lT3JQcmVmaXgsIG9iaiwgZm9yQm9keSwgdmFyS2luZCA9IHRoaXMub3B0cy5lczUgPyBzY29wZV8xLnZhcktpbmRzLnZhciA6IHNjb3BlXzEudmFyS2luZHMuY29uc3QpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5vd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JPZihuYW1lT3JQcmVmaXgsICgwLCBjb2RlXzEuXykgYE9iamVjdC5rZXlzKCR7b2JqfSlgLCBmb3JCb2R5KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5fc2NvcGUudG9OYW1lKG5hbWVPclByZWZpeCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3IobmV3IEZvckl0ZXIoXCJpblwiLCB2YXJLaW5kLCBuYW1lLCBvYmopLCAoKSA9PiBmb3JCb2R5KG5hbWUpKTtcbiAgICB9XG4gICAgLy8gZW5kIGBmb3JgIGxvb3BcbiAgICBlbmRGb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoRm9yKTtcbiAgICB9XG4gICAgLy8gYGxhYmVsYCBzdGF0ZW1lbnRcbiAgICBsYWJlbChsYWJlbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVhZk5vZGUobmV3IExhYmVsKGxhYmVsKSk7XG4gICAgfVxuICAgIC8vIGBicmVha2Agc3RhdGVtZW50XG4gICAgYnJlYWsobGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYWZOb2RlKG5ldyBCcmVhayhsYWJlbCkpO1xuICAgIH1cbiAgICAvLyBgcmV0dXJuYCBzdGF0ZW1lbnRcbiAgICByZXR1cm4odmFsdWUpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBSZXR1cm4oKTtcbiAgICAgICAgdGhpcy5fYmxvY2tOb2RlKG5vZGUpO1xuICAgICAgICB0aGlzLmNvZGUodmFsdWUpO1xuICAgICAgICBpZiAobm9kZS5ub2Rlcy5sZW5ndGggIT09IDEpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZGVHZW46IFwicmV0dXJuXCIgc2hvdWxkIGhhdmUgb25lIG5vZGUnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuZEJsb2NrTm9kZShSZXR1cm4pO1xuICAgIH1cbiAgICAvLyBgdHJ5YCBzdGF0ZW1lbnRcbiAgICB0cnkodHJ5Qm9keSwgY2F0Y2hDb2RlLCBmaW5hbGx5Q29kZSkge1xuICAgICAgICBpZiAoIWNhdGNoQ29kZSAmJiAhZmluYWxseUNvZGUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZGVHZW46IFwidHJ5XCIgd2l0aG91dCBcImNhdGNoXCIgYW5kIFwiZmluYWxseVwiJyk7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgVHJ5KCk7XG4gICAgICAgIHRoaXMuX2Jsb2NrTm9kZShub2RlKTtcbiAgICAgICAgdGhpcy5jb2RlKHRyeUJvZHkpO1xuICAgICAgICBpZiAoY2F0Y2hDb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMubmFtZShcImVcIik7XG4gICAgICAgICAgICB0aGlzLl9jdXJyTm9kZSA9IG5vZGUuY2F0Y2ggPSBuZXcgQ2F0Y2goZXJyb3IpO1xuICAgICAgICAgICAgY2F0Y2hDb2RlKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmluYWxseUNvZGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJOb2RlID0gbm9kZS5maW5hbGx5ID0gbmV3IEZpbmFsbHkoKTtcbiAgICAgICAgICAgIHRoaXMuY29kZShmaW5hbGx5Q29kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuZEJsb2NrTm9kZShDYXRjaCwgRmluYWxseSk7XG4gICAgfVxuICAgIC8vIGB0aHJvd2Agc3RhdGVtZW50XG4gICAgdGhyb3coZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYWZOb2RlKG5ldyBUaHJvdyhlcnJvcikpO1xuICAgIH1cbiAgICAvLyBzdGFydCBzZWxmLWJhbGFuY2luZyBibG9ja1xuICAgIGJsb2NrKGJvZHksIG5vZGVDb3VudCkge1xuICAgICAgICB0aGlzLl9ibG9ja1N0YXJ0cy5wdXNoKHRoaXMuX25vZGVzLmxlbmd0aCk7XG4gICAgICAgIGlmIChib2R5KVxuICAgICAgICAgICAgdGhpcy5jb2RlKGJvZHkpLmVuZEJsb2NrKG5vZGVDb3VudCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBlbmQgdGhlIGN1cnJlbnQgc2VsZi1iYWxhbmNpbmcgYmxvY2tcbiAgICBlbmRCbG9jayhub2RlQ291bnQpIHtcbiAgICAgICAgY29uc3QgbGVuID0gdGhpcy5fYmxvY2tTdGFydHMucG9wKCk7XG4gICAgICAgIGlmIChsZW4gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvZGVHZW46IG5vdCBpbiBzZWxmLWJhbGFuY2luZyBibG9ja1wiKTtcbiAgICAgICAgY29uc3QgdG9DbG9zZSA9IHRoaXMuX25vZGVzLmxlbmd0aCAtIGxlbjtcbiAgICAgICAgaWYgKHRvQ2xvc2UgPCAwIHx8IChub2RlQ291bnQgIT09IHVuZGVmaW5lZCAmJiB0b0Nsb3NlICE9PSBub2RlQ291bnQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IHdyb25nIG51bWJlciBvZiBub2RlczogJHt0b0Nsb3NlfSB2cyAke25vZGVDb3VudH0gZXhwZWN0ZWRgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9ub2Rlcy5sZW5ndGggPSBsZW47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBgZnVuY3Rpb25gIGhlYWRpbmcgKG9yIGRlZmluaXRpb24gaWYgZnVuY0JvZHkgaXMgcGFzc2VkKVxuICAgIGZ1bmMobmFtZSwgYXJncyA9IGNvZGVfMS5uaWwsIGFzeW5jLCBmdW5jQm9keSkge1xuICAgICAgICB0aGlzLl9ibG9ja05vZGUobmV3IEZ1bmMobmFtZSwgYXJncywgYXN5bmMpKTtcbiAgICAgICAgaWYgKGZ1bmNCb2R5KVxuICAgICAgICAgICAgdGhpcy5jb2RlKGZ1bmNCb2R5KS5lbmRGdW5jKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBlbmQgZnVuY3Rpb24gZGVmaW5pdGlvblxuICAgIGVuZEZ1bmMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoRnVuYyk7XG4gICAgfVxuICAgIG9wdGltaXplKG4gPSAxKSB7XG4gICAgICAgIHdoaWxlIChuLS0gPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9yb290Lm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgICAgIHRoaXMuX3Jvb3Qub3B0aW1pemVOYW1lcyh0aGlzLl9yb290Lm5hbWVzLCB0aGlzLl9jb25zdGFudHMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9sZWFmTm9kZShub2RlKSB7XG4gICAgICAgIHRoaXMuX2N1cnJOb2RlLm5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBfYmxvY2tOb2RlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5fY3Vyck5vZGUubm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgdGhpcy5fbm9kZXMucHVzaChub2RlKTtcbiAgICB9XG4gICAgX2VuZEJsb2NrTm9kZShOMSwgTjIpIHtcbiAgICAgICAgY29uc3QgbiA9IHRoaXMuX2N1cnJOb2RlO1xuICAgICAgICBpZiAobiBpbnN0YW5jZW9mIE4xIHx8IChOMiAmJiBuIGluc3RhbmNlb2YgTjIpKSB7XG4gICAgICAgICAgICB0aGlzLl9ub2Rlcy5wb3AoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29kZUdlbjogbm90IGluIGJsb2NrIFwiJHtOMiA/IGAke04xLmtpbmR9LyR7TjIua2luZH1gIDogTjEua2luZH1cImApO1xuICAgIH1cbiAgICBfZWxzZU5vZGUobm9kZSkge1xuICAgICAgICBjb25zdCBuID0gdGhpcy5fY3Vyck5vZGU7XG4gICAgICAgIGlmICghKG4gaW5zdGFuY2VvZiBJZikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29kZUdlbjogXCJlbHNlXCIgd2l0aG91dCBcImlmXCInKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jdXJyTm9kZSA9IG4uZWxzZSA9IG5vZGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgX3Jvb3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub2Rlc1swXTtcbiAgICB9XG4gICAgZ2V0IF9jdXJyTm9kZSgpIHtcbiAgICAgICAgY29uc3QgbnMgPSB0aGlzLl9ub2RlcztcbiAgICAgICAgcmV0dXJuIG5zW25zLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICBzZXQgX2N1cnJOb2RlKG5vZGUpIHtcbiAgICAgICAgY29uc3QgbnMgPSB0aGlzLl9ub2RlcztcbiAgICAgICAgbnNbbnMubGVuZ3RoIC0gMV0gPSBub2RlO1xuICAgIH1cbn1cbmV4cG9ydHMuQ29kZUdlbiA9IENvZGVHZW47XG5mdW5jdGlvbiBhZGROYW1lcyhuYW1lcywgZnJvbSkge1xuICAgIGZvciAoY29uc3QgbiBpbiBmcm9tKVxuICAgICAgICBuYW1lc1tuXSA9IChuYW1lc1tuXSB8fCAwKSArIChmcm9tW25dIHx8IDApO1xuICAgIHJldHVybiBuYW1lcztcbn1cbmZ1bmN0aW9uIGFkZEV4cHJOYW1lcyhuYW1lcywgZnJvbSkge1xuICAgIHJldHVybiBmcm9tIGluc3RhbmNlb2YgY29kZV8xLl9Db2RlT3JOYW1lID8gYWRkTmFtZXMobmFtZXMsIGZyb20ubmFtZXMpIDogbmFtZXM7XG59XG5mdW5jdGlvbiBvcHRpbWl6ZUV4cHIoZXhwciwgbmFtZXMsIGNvbnN0YW50cykge1xuICAgIGlmIChleHByIGluc3RhbmNlb2YgY29kZV8xLk5hbWUpXG4gICAgICAgIHJldHVybiByZXBsYWNlTmFtZShleHByKTtcbiAgICBpZiAoIWNhbk9wdGltaXplKGV4cHIpKVxuICAgICAgICByZXR1cm4gZXhwcjtcbiAgICByZXR1cm4gbmV3IGNvZGVfMS5fQ29kZShleHByLl9pdGVtcy5yZWR1Y2UoKGl0ZW1zLCBjKSA9PiB7XG4gICAgICAgIGlmIChjIGluc3RhbmNlb2YgY29kZV8xLk5hbWUpXG4gICAgICAgICAgICBjID0gcmVwbGFjZU5hbWUoYyk7XG4gICAgICAgIGlmIChjIGluc3RhbmNlb2YgY29kZV8xLl9Db2RlKVxuICAgICAgICAgICAgaXRlbXMucHVzaCguLi5jLl9pdGVtcyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goYyk7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9LCBbXSkpO1xuICAgIGZ1bmN0aW9uIHJlcGxhY2VOYW1lKG4pIHtcbiAgICAgICAgY29uc3QgYyA9IGNvbnN0YW50c1tuLnN0cl07XG4gICAgICAgIGlmIChjID09PSB1bmRlZmluZWQgfHwgbmFtZXNbbi5zdHJdICE9PSAxKVxuICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgIGRlbGV0ZSBuYW1lc1tuLnN0cl07XG4gICAgICAgIHJldHVybiBjO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjYW5PcHRpbWl6ZShlKSB7XG4gICAgICAgIHJldHVybiAoZSBpbnN0YW5jZW9mIGNvZGVfMS5fQ29kZSAmJlxuICAgICAgICAgICAgZS5faXRlbXMuc29tZSgoYykgPT4gYyBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lICYmIG5hbWVzW2Muc3RyXSA9PT0gMSAmJiBjb25zdGFudHNbYy5zdHJdICE9PSB1bmRlZmluZWQpKTtcbiAgICB9XG59XG5mdW5jdGlvbiBzdWJ0cmFjdE5hbWVzKG5hbWVzLCBmcm9tKSB7XG4gICAgZm9yIChjb25zdCBuIGluIGZyb20pXG4gICAgICAgIG5hbWVzW25dID0gKG5hbWVzW25dIHx8IDApIC0gKGZyb21bbl0gfHwgMCk7XG59XG5mdW5jdGlvbiBub3QoeCkge1xuICAgIHJldHVybiB0eXBlb2YgeCA9PSBcImJvb2xlYW5cIiB8fCB0eXBlb2YgeCA9PSBcIm51bWJlclwiIHx8IHggPT09IG51bGwgPyAheCA6ICgwLCBjb2RlXzEuXykgYCEke3Bhcih4KX1gO1xufVxuZXhwb3J0cy5ub3QgPSBub3Q7XG5jb25zdCBhbmRDb2RlID0gbWFwcGVuZChleHBvcnRzLm9wZXJhdG9ycy5BTkQpO1xuLy8gYm9vbGVhbiBBTkQgKCYmKSBleHByZXNzaW9uIHdpdGggdGhlIHBhc3NlZCBhcmd1bWVudHNcbmZ1bmN0aW9uIGFuZCguLi5hcmdzKSB7XG4gICAgcmV0dXJuIGFyZ3MucmVkdWNlKGFuZENvZGUpO1xufVxuZXhwb3J0cy5hbmQgPSBhbmQ7XG5jb25zdCBvckNvZGUgPSBtYXBwZW5kKGV4cG9ydHMub3BlcmF0b3JzLk9SKTtcbi8vIGJvb2xlYW4gT1IgKHx8KSBleHByZXNzaW9uIHdpdGggdGhlIHBhc3NlZCBhcmd1bWVudHNcbmZ1bmN0aW9uIG9yKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gYXJncy5yZWR1Y2Uob3JDb2RlKTtcbn1cbmV4cG9ydHMub3IgPSBvcjtcbmZ1bmN0aW9uIG1hcHBlbmQob3ApIHtcbiAgICByZXR1cm4gKHgsIHkpID0+ICh4ID09PSBjb2RlXzEubmlsID8geSA6IHkgPT09IGNvZGVfMS5uaWwgPyB4IDogKDAsIGNvZGVfMS5fKSBgJHtwYXIoeCl9ICR7b3B9ICR7cGFyKHkpfWApO1xufVxuZnVuY3Rpb24gcGFyKHgpIHtcbiAgICByZXR1cm4geCBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lID8geCA6ICgwLCBjb2RlXzEuXykgYCgke3h9KWA7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jaGVja1N0cmljdE1vZGUgPSBleHBvcnRzLmdldEVycm9yUGF0aCA9IGV4cG9ydHMuVHlwZSA9IGV4cG9ydHMudXNlRnVuYyA9IGV4cG9ydHMuc2V0RXZhbHVhdGVkID0gZXhwb3J0cy5ldmFsdWF0ZWRQcm9wc1RvTmFtZSA9IGV4cG9ydHMubWVyZ2VFdmFsdWF0ZWQgPSBleHBvcnRzLmVhY2hJdGVtID0gZXhwb3J0cy51bmVzY2FwZUpzb25Qb2ludGVyID0gZXhwb3J0cy5lc2NhcGVKc29uUG9pbnRlciA9IGV4cG9ydHMuZXNjYXBlRnJhZ21lbnQgPSBleHBvcnRzLnVuZXNjYXBlRnJhZ21lbnQgPSBleHBvcnRzLnNjaGVtYVJlZk9yVmFsID0gZXhwb3J0cy5zY2hlbWFIYXNSdWxlc0J1dFJlZiA9IGV4cG9ydHMuc2NoZW1hSGFzUnVsZXMgPSBleHBvcnRzLmNoZWNrVW5rbm93blJ1bGVzID0gZXhwb3J0cy5hbHdheXNWYWxpZFNjaGVtYSA9IGV4cG9ydHMudG9IYXNoID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29kZWdlblwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuL2NvZGVnZW4vY29kZVwiKTtcbi8vIFRPRE8gcmVmYWN0b3IgdG8gdXNlIFNldFxuZnVuY3Rpb24gdG9IYXNoKGFycikge1xuICAgIGNvbnN0IGhhc2ggPSB7fTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyKVxuICAgICAgICBoYXNoW2l0ZW1dID0gdHJ1ZTtcbiAgICByZXR1cm4gaGFzaDtcbn1cbmV4cG9ydHMudG9IYXNoID0gdG9IYXNoO1xuZnVuY3Rpb24gYWx3YXlzVmFsaWRTY2hlbWEoaXQsIHNjaGVtYSkge1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgIGlmIChPYmplY3Qua2V5cyhzY2hlbWEpLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2hlY2tVbmtub3duUnVsZXMoaXQsIHNjaGVtYSk7XG4gICAgcmV0dXJuICFzY2hlbWFIYXNSdWxlcyhzY2hlbWEsIGl0LnNlbGYuUlVMRVMuYWxsKTtcbn1cbmV4cG9ydHMuYWx3YXlzVmFsaWRTY2hlbWEgPSBhbHdheXNWYWxpZFNjaGVtYTtcbmZ1bmN0aW9uIGNoZWNrVW5rbm93blJ1bGVzKGl0LCBzY2hlbWEgPSBpdC5zY2hlbWEpIHtcbiAgICBjb25zdCB7IG9wdHMsIHNlbGYgfSA9IGl0O1xuICAgIGlmICghb3B0cy5zdHJpY3RTY2hlbWEpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBydWxlcyA9IHNlbGYuUlVMRVMua2V5d29yZHM7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgIGlmICghcnVsZXNba2V5XSlcbiAgICAgICAgICAgIGNoZWNrU3RyaWN0TW9kZShpdCwgYHVua25vd24ga2V5d29yZDogXCIke2tleX1cImApO1xuICAgIH1cbn1cbmV4cG9ydHMuY2hlY2tVbmtub3duUnVsZXMgPSBjaGVja1Vua25vd25SdWxlcztcbmZ1bmN0aW9uIHNjaGVtYUhhc1J1bGVzKHNjaGVtYSwgcnVsZXMpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgcmV0dXJuICFzY2hlbWE7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKVxuICAgICAgICBpZiAocnVsZXNba2V5XSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydHMuc2NoZW1hSGFzUnVsZXMgPSBzY2hlbWFIYXNSdWxlcztcbmZ1bmN0aW9uIHNjaGVtYUhhc1J1bGVzQnV0UmVmKHNjaGVtYSwgUlVMRVMpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgcmV0dXJuICFzY2hlbWE7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKVxuICAgICAgICBpZiAoa2V5ICE9PSBcIiRyZWZcIiAmJiBSVUxFUy5hbGxba2V5XSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydHMuc2NoZW1hSGFzUnVsZXNCdXRSZWYgPSBzY2hlbWFIYXNSdWxlc0J1dFJlZjtcbmZ1bmN0aW9uIHNjaGVtYVJlZk9yVmFsKHsgdG9wU2NoZW1hUmVmLCBzY2hlbWFQYXRoIH0sIHNjaGVtYSwga2V5d29yZCwgJGRhdGEpIHtcbiAgICBpZiAoISRkYXRhKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWF9YDtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7dG9wU2NoZW1hUmVmfSR7c2NoZW1hUGF0aH0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKGtleXdvcmQpfWA7XG59XG5leHBvcnRzLnNjaGVtYVJlZk9yVmFsID0gc2NoZW1hUmVmT3JWYWw7XG5mdW5jdGlvbiB1bmVzY2FwZUZyYWdtZW50KHN0cikge1xuICAgIHJldHVybiB1bmVzY2FwZUpzb25Qb2ludGVyKGRlY29kZVVSSUNvbXBvbmVudChzdHIpKTtcbn1cbmV4cG9ydHMudW5lc2NhcGVGcmFnbWVudCA9IHVuZXNjYXBlRnJhZ21lbnQ7XG5mdW5jdGlvbiBlc2NhcGVGcmFnbWVudChzdHIpIHtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGVzY2FwZUpzb25Qb2ludGVyKHN0cikpO1xufVxuZXhwb3J0cy5lc2NhcGVGcmFnbWVudCA9IGVzY2FwZUZyYWdtZW50O1xuZnVuY3Rpb24gZXNjYXBlSnNvblBvaW50ZXIoc3RyKSB7XG4gICAgaWYgKHR5cGVvZiBzdHIgPT0gXCJudW1iZXJcIilcbiAgICAgICAgcmV0dXJuIGAke3N0cn1gO1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvfi9nLCBcIn4wXCIpLnJlcGxhY2UoL1xcLy9nLCBcIn4xXCIpO1xufVxuZXhwb3J0cy5lc2NhcGVKc29uUG9pbnRlciA9IGVzY2FwZUpzb25Qb2ludGVyO1xuZnVuY3Rpb24gdW5lc2NhcGVKc29uUG9pbnRlcihzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL34xL2csIFwiL1wiKS5yZXBsYWNlKC9+MC9nLCBcIn5cIik7XG59XG5leHBvcnRzLnVuZXNjYXBlSnNvblBvaW50ZXIgPSB1bmVzY2FwZUpzb25Qb2ludGVyO1xuZnVuY3Rpb24gZWFjaEl0ZW0oeHMsIGYpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh4cykpIHtcbiAgICAgICAgZm9yIChjb25zdCB4IG9mIHhzKVxuICAgICAgICAgICAgZih4KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGYoeHMpO1xuICAgIH1cbn1cbmV4cG9ydHMuZWFjaEl0ZW0gPSBlYWNoSXRlbTtcbmZ1bmN0aW9uIG1ha2VNZXJnZUV2YWx1YXRlZCh7IG1lcmdlTmFtZXMsIG1lcmdlVG9OYW1lLCBtZXJnZVZhbHVlcywgcmVzdWx0VG9OYW1lLCB9KSB7XG4gICAgcmV0dXJuIChnZW4sIGZyb20sIHRvLCB0b05hbWUpID0+IHtcbiAgICAgICAgY29uc3QgcmVzID0gdG8gPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBmcm9tXG4gICAgICAgICAgICA6IHRvIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWVcbiAgICAgICAgICAgICAgICA/IChmcm9tIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUgPyBtZXJnZU5hbWVzKGdlbiwgZnJvbSwgdG8pIDogbWVyZ2VUb05hbWUoZ2VuLCBmcm9tLCB0byksIHRvKVxuICAgICAgICAgICAgICAgIDogZnJvbSBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lXG4gICAgICAgICAgICAgICAgICAgID8gKG1lcmdlVG9OYW1lKGdlbiwgdG8sIGZyb20pLCBmcm9tKVxuICAgICAgICAgICAgICAgICAgICA6IG1lcmdlVmFsdWVzKGZyb20sIHRvKTtcbiAgICAgICAgcmV0dXJuIHRvTmFtZSA9PT0gY29kZWdlbl8xLk5hbWUgJiYgIShyZXMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSkgPyByZXN1bHRUb05hbWUoZ2VuLCByZXMpIDogcmVzO1xuICAgIH07XG59XG5leHBvcnRzLm1lcmdlRXZhbHVhdGVkID0ge1xuICAgIHByb3BzOiBtYWtlTWVyZ2VFdmFsdWF0ZWQoe1xuICAgICAgICBtZXJnZU5hbWVzOiAoZ2VuLCBmcm9tLCB0bykgPT4gZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7dG99ICE9PSB0cnVlICYmICR7ZnJvbX0gIT09IHVuZGVmaW5lZGAsICgpID0+IHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2Zyb219ID09PSB0cnVlYCwgKCkgPT4gZ2VuLmFzc2lnbih0bywgdHJ1ZSksICgpID0+IGdlbi5hc3NpZ24odG8sICgwLCBjb2RlZ2VuXzEuXykgYCR7dG99IHx8IHt9YCkuY29kZSgoMCwgY29kZWdlbl8xLl8pIGBPYmplY3QuYXNzaWduKCR7dG99LCAke2Zyb219KWApKTtcbiAgICAgICAgfSksXG4gICAgICAgIG1lcmdlVG9OYW1lOiAoZ2VuLCBmcm9tLCB0bykgPT4gZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7dG99ICE9PSB0cnVlYCwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGZyb20gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHRvLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odG8sICgwLCBjb2RlZ2VuXzEuXykgYCR7dG99IHx8IHt9YCk7XG4gICAgICAgICAgICAgICAgc2V0RXZhbHVhdGVkKGdlbiwgdG8sIGZyb20pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgbWVyZ2VWYWx1ZXM6IChmcm9tLCB0bykgPT4gKGZyb20gPT09IHRydWUgPyB0cnVlIDogeyAuLi5mcm9tLCAuLi50byB9KSxcbiAgICAgICAgcmVzdWx0VG9OYW1lOiBldmFsdWF0ZWRQcm9wc1RvTmFtZSxcbiAgICB9KSxcbiAgICBpdGVtczogbWFrZU1lcmdlRXZhbHVhdGVkKHtcbiAgICAgICAgbWVyZ2VOYW1lczogKGdlbiwgZnJvbSwgdG8pID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke3RvfSAhPT0gdHJ1ZSAmJiAke2Zyb219ICE9PSB1bmRlZmluZWRgLCAoKSA9PiBnZW4uYXNzaWduKHRvLCAoMCwgY29kZWdlbl8xLl8pIGAke2Zyb219ID09PSB0cnVlID8gdHJ1ZSA6ICR7dG99ID4gJHtmcm9tfSA/ICR7dG99IDogJHtmcm9tfWApKSxcbiAgICAgICAgbWVyZ2VUb05hbWU6IChnZW4sIGZyb20sIHRvKSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHt0b30gIT09IHRydWVgLCAoKSA9PiBnZW4uYXNzaWduKHRvLCBmcm9tID09PSB0cnVlID8gdHJ1ZSA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7dG99ID4gJHtmcm9tfSA/ICR7dG99IDogJHtmcm9tfWApKSxcbiAgICAgICAgbWVyZ2VWYWx1ZXM6IChmcm9tLCB0bykgPT4gKGZyb20gPT09IHRydWUgPyB0cnVlIDogTWF0aC5tYXgoZnJvbSwgdG8pKSxcbiAgICAgICAgcmVzdWx0VG9OYW1lOiAoZ2VuLCBpdGVtcykgPT4gZ2VuLnZhcihcIml0ZW1zXCIsIGl0ZW1zKSxcbiAgICB9KSxcbn07XG5mdW5jdGlvbiBldmFsdWF0ZWRQcm9wc1RvTmFtZShnZW4sIHBzKSB7XG4gICAgaWYgKHBzID09PSB0cnVlKVxuICAgICAgICByZXR1cm4gZ2VuLnZhcihcInByb3BzXCIsIHRydWUpO1xuICAgIGNvbnN0IHByb3BzID0gZ2VuLnZhcihcInByb3BzXCIsICgwLCBjb2RlZ2VuXzEuXykgYHt9YCk7XG4gICAgaWYgKHBzICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHNldEV2YWx1YXRlZChnZW4sIHByb3BzLCBwcyk7XG4gICAgcmV0dXJuIHByb3BzO1xufVxuZXhwb3J0cy5ldmFsdWF0ZWRQcm9wc1RvTmFtZSA9IGV2YWx1YXRlZFByb3BzVG9OYW1lO1xuZnVuY3Rpb24gc2V0RXZhbHVhdGVkKGdlbiwgcHJvcHMsIHBzKSB7XG4gICAgT2JqZWN0LmtleXMocHMpLmZvckVhY2goKHApID0+IGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtwcm9wc30keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHApfWAsIHRydWUpKTtcbn1cbmV4cG9ydHMuc2V0RXZhbHVhdGVkID0gc2V0RXZhbHVhdGVkO1xuY29uc3Qgc25pcHBldHMgPSB7fTtcbmZ1bmN0aW9uIHVzZUZ1bmMoZ2VuLCBmKSB7XG4gICAgcmV0dXJuIGdlbi5zY29wZVZhbHVlKFwiZnVuY1wiLCB7XG4gICAgICAgIHJlZjogZixcbiAgICAgICAgY29kZTogc25pcHBldHNbZi5jb2RlXSB8fCAoc25pcHBldHNbZi5jb2RlXSA9IG5ldyBjb2RlXzEuX0NvZGUoZi5jb2RlKSksXG4gICAgfSk7XG59XG5leHBvcnRzLnVzZUZ1bmMgPSB1c2VGdW5jO1xudmFyIFR5cGU7XG4oZnVuY3Rpb24gKFR5cGUpIHtcbiAgICBUeXBlW1R5cGVbXCJOdW1cIl0gPSAwXSA9IFwiTnVtXCI7XG4gICAgVHlwZVtUeXBlW1wiU3RyXCJdID0gMV0gPSBcIlN0clwiO1xufSkoVHlwZSA9IGV4cG9ydHMuVHlwZSB8fCAoZXhwb3J0cy5UeXBlID0ge30pKTtcbmZ1bmN0aW9uIGdldEVycm9yUGF0aChkYXRhUHJvcCwgZGF0YVByb3BUeXBlLCBqc1Byb3BlcnR5U3ludGF4KSB7XG4gICAgLy8gbGV0IHBhdGhcbiAgICBpZiAoZGF0YVByb3AgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSkge1xuICAgICAgICBjb25zdCBpc051bWJlciA9IGRhdGFQcm9wVHlwZSA9PT0gVHlwZS5OdW07XG4gICAgICAgIHJldHVybiBqc1Byb3BlcnR5U3ludGF4XG4gICAgICAgICAgICA/IGlzTnVtYmVyXG4gICAgICAgICAgICAgICAgPyAoMCwgY29kZWdlbl8xLl8pIGBcIltcIiArICR7ZGF0YVByb3B9ICsgXCJdXCJgXG4gICAgICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGBcIlsnXCIgKyAke2RhdGFQcm9wfSArIFwiJ11cImBcbiAgICAgICAgICAgIDogaXNOdW1iZXJcbiAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYFwiL1wiICsgJHtkYXRhUHJvcH1gXG4gICAgICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGBcIi9cIiArICR7ZGF0YVByb3B9LnJlcGxhY2UoL34vZywgXCJ+MFwiKS5yZXBsYWNlKC9cXFxcLy9nLCBcIn4xXCIpYDsgLy8gVE9ETyBtYXliZSB1c2UgZ2xvYmFsIGVzY2FwZVBvaW50ZXJcbiAgICB9XG4gICAgcmV0dXJuIGpzUHJvcGVydHlTeW50YXggPyAoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShkYXRhUHJvcCkudG9TdHJpbmcoKSA6IFwiL1wiICsgZXNjYXBlSnNvblBvaW50ZXIoZGF0YVByb3ApO1xufVxuZXhwb3J0cy5nZXRFcnJvclBhdGggPSBnZXRFcnJvclBhdGg7XG5mdW5jdGlvbiBjaGVja1N0cmljdE1vZGUoaXQsIG1zZywgbW9kZSA9IGl0Lm9wdHMuc3RyaWN0U2NoZW1hKSB7XG4gICAgaWYgKCFtb2RlKVxuICAgICAgICByZXR1cm47XG4gICAgbXNnID0gYHN0cmljdCBtb2RlOiAke21zZ31gO1xuICAgIGlmIChtb2RlID09PSB0cnVlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICBpdC5zZWxmLmxvZ2dlci53YXJuKG1zZyk7XG59XG5leHBvcnRzLmNoZWNrU3RyaWN0TW9kZSA9IGNoZWNrU3RyaWN0TW9kZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lcyA9IHtcbiAgICAvLyB2YWxpZGF0aW9uIGZ1bmN0aW9uIGFyZ3VtZW50c1xuICAgIGRhdGE6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImRhdGFcIiksXG4gICAgLy8gYXJncyBwYXNzZWQgZnJvbSByZWZlcmVuY2luZyBzY2hlbWFcbiAgICB2YWxDeHQ6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInZhbEN4dFwiKSxcbiAgICBpbnN0YW5jZVBhdGg6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImluc3RhbmNlUGF0aFwiKSxcbiAgICBwYXJlbnREYXRhOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwYXJlbnREYXRhXCIpLFxuICAgIHBhcmVudERhdGFQcm9wZXJ0eTogbmV3IGNvZGVnZW5fMS5OYW1lKFwicGFyZW50RGF0YVByb3BlcnR5XCIpLFxuICAgIHJvb3REYXRhOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJyb290RGF0YVwiKSxcbiAgICBkeW5hbWljQW5jaG9yczogbmV3IGNvZGVnZW5fMS5OYW1lKFwiZHluYW1pY0FuY2hvcnNcIiksXG4gICAgLy8gZnVuY3Rpb24gc2NvcGVkIHZhcmlhYmxlc1xuICAgIHZFcnJvcnM6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInZFcnJvcnNcIiksXG4gICAgZXJyb3JzOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJlcnJvcnNcIiksXG4gICAgdGhpczogbmV3IGNvZGVnZW5fMS5OYW1lKFwidGhpc1wiKSxcbiAgICAvLyBcImdsb2JhbHNcIlxuICAgIHNlbGY6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInNlbGZcIiksXG4gICAgc2NvcGU6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInNjb3BlXCIpLFxuICAgIC8vIEpURCBzZXJpYWxpemUvcGFyc2UgbmFtZSBmb3IgSlNPTiBzdHJpbmcgYW5kIHBvc2l0aW9uXG4gICAganNvbjogbmV3IGNvZGVnZW5fMS5OYW1lKFwianNvblwiKSxcbiAgICBqc29uUG9zOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJqc29uUG9zXCIpLFxuICAgIGpzb25MZW46IG5ldyBjb2RlZ2VuXzEuTmFtZShcImpzb25MZW5cIiksXG4gICAganNvblBhcnQ6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImpzb25QYXJ0XCIpLFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IG5hbWVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bmFtZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXh0ZW5kRXJyb3JzID0gZXhwb3J0cy5yZXNldEVycm9yc0NvdW50ID0gZXhwb3J0cy5yZXBvcnRFeHRyYUVycm9yID0gZXhwb3J0cy5yZXBvcnRFcnJvciA9IGV4cG9ydHMua2V5d29yZCREYXRhRXJyb3IgPSBleHBvcnRzLmtleXdvcmRFcnJvciA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuL25hbWVzXCIpO1xuZXhwb3J0cy5rZXl3b3JkRXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsga2V5d29yZCB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgcGFzcyBcIiR7a2V5d29yZH1cIiBrZXl3b3JkIHZhbGlkYXRpb25gLFxufTtcbmV4cG9ydHMua2V5d29yZCREYXRhRXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsga2V5d29yZCwgc2NoZW1hVHlwZSB9KSA9PiBzY2hlbWFUeXBlXG4gICAgICAgID8gKDAsIGNvZGVnZW5fMS5zdHIpIGBcIiR7a2V5d29yZH1cIiBrZXl3b3JkIG11c3QgYmUgJHtzY2hlbWFUeXBlfSAoJGRhdGEpYFxuICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuc3RyKSBgXCIke2tleXdvcmR9XCIga2V5d29yZCBpcyBpbnZhbGlkICgkZGF0YSlgLFxufTtcbmZ1bmN0aW9uIHJlcG9ydEVycm9yKGN4dCwgZXJyb3IgPSBleHBvcnRzLmtleXdvcmRFcnJvciwgZXJyb3JQYXRocywgb3ZlcnJpZGVBbGxFcnJvcnMpIHtcbiAgICBjb25zdCB7IGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgeyBnZW4sIGNvbXBvc2l0ZVJ1bGUsIGFsbEVycm9ycyB9ID0gaXQ7XG4gICAgY29uc3QgZXJyT2JqID0gZXJyb3JPYmplY3RDb2RlKGN4dCwgZXJyb3IsIGVycm9yUGF0aHMpO1xuICAgIGlmIChvdmVycmlkZUFsbEVycm9ycyAhPT0gbnVsbCAmJiBvdmVycmlkZUFsbEVycm9ycyAhPT0gdm9pZCAwID8gb3ZlcnJpZGVBbGxFcnJvcnMgOiAoY29tcG9zaXRlUnVsZSB8fCBhbGxFcnJvcnMpKSB7XG4gICAgICAgIGFkZEVycm9yKGdlbiwgZXJyT2JqKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybkVycm9ycyhpdCwgKDAsIGNvZGVnZW5fMS5fKSBgWyR7ZXJyT2JqfV1gKTtcbiAgICB9XG59XG5leHBvcnRzLnJlcG9ydEVycm9yID0gcmVwb3J0RXJyb3I7XG5mdW5jdGlvbiByZXBvcnRFeHRyYUVycm9yKGN4dCwgZXJyb3IgPSBleHBvcnRzLmtleXdvcmRFcnJvciwgZXJyb3JQYXRocykge1xuICAgIGNvbnN0IHsgaXQgfSA9IGN4dDtcbiAgICBjb25zdCB7IGdlbiwgY29tcG9zaXRlUnVsZSwgYWxsRXJyb3JzIH0gPSBpdDtcbiAgICBjb25zdCBlcnJPYmogPSBlcnJvck9iamVjdENvZGUoY3h0LCBlcnJvciwgZXJyb3JQYXRocyk7XG4gICAgYWRkRXJyb3IoZ2VuLCBlcnJPYmopO1xuICAgIGlmICghKGNvbXBvc2l0ZVJ1bGUgfHwgYWxsRXJyb3JzKSkge1xuICAgICAgICByZXR1cm5FcnJvcnMoaXQsIG5hbWVzXzEuZGVmYXVsdC52RXJyb3JzKTtcbiAgICB9XG59XG5leHBvcnRzLnJlcG9ydEV4dHJhRXJyb3IgPSByZXBvcnRFeHRyYUVycm9yO1xuZnVuY3Rpb24gcmVzZXRFcnJvcnNDb3VudChnZW4sIGVycnNDb3VudCkge1xuICAgIGdlbi5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LmVycm9ycywgZXJyc0NvdW50KTtcbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30gIT09IG51bGxgLCAoKSA9PiBnZW4uaWYoZXJyc0NvdW50LCAoKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9Lmxlbmd0aGAsIGVycnNDb3VudCksICgpID0+IGdlbi5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMsIG51bGwpKSk7XG59XG5leHBvcnRzLnJlc2V0RXJyb3JzQ291bnQgPSByZXNldEVycm9yc0NvdW50O1xuZnVuY3Rpb24gZXh0ZW5kRXJyb3JzKHsgZ2VuLCBrZXl3b3JkLCBzY2hlbWFWYWx1ZSwgZGF0YSwgZXJyc0NvdW50LCBpdCwgfSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChlcnJzQ291bnQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgIGNvbnN0IGVyciA9IGdlbi5uYW1lKFwiZXJyXCIpO1xuICAgIGdlbi5mb3JSYW5nZShcImlcIiwgZXJyc0NvdW50LCBuYW1lc18xLmRlZmF1bHQuZXJyb3JzLCAoaSkgPT4ge1xuICAgICAgICBnZW4uY29uc3QoZXJyLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfVske2l9XWApO1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtlcnJ9Lmluc3RhbmNlUGF0aCA9PT0gdW5kZWZpbmVkYCwgKCkgPT4gZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uaW5zdGFuY2VQYXRoYCwgKDAsIGNvZGVnZW5fMS5zdHJDb25jYXQpKG5hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsIGl0LmVycm9yUGF0aCkpKTtcbiAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uc2NoZW1hUGF0aGAsICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtpdC5lcnJTY2hlbWFQYXRofS8ke2tleXdvcmR9YCk7XG4gICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtlcnJ9LnNjaGVtYWAsIHNjaGVtYVZhbHVlKTtcbiAgICAgICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtlcnJ9LmRhdGFgLCBkYXRhKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5leHRlbmRFcnJvcnMgPSBleHRlbmRFcnJvcnM7XG5mdW5jdGlvbiBhZGRFcnJvcihnZW4sIGVyck9iaikge1xuICAgIGNvbnN0IGVyciA9IGdlbi5jb25zdChcImVyclwiLCBlcnJPYmopO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSA9PT0gbnVsbGAsICgpID0+IGdlbi5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYFske2Vycn1dYCksICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9LnB1c2goJHtlcnJ9KWApO1xuICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LmVycm9yc30rK2ApO1xufVxuZnVuY3Rpb24gcmV0dXJuRXJyb3JzKGl0LCBlcnJzKSB7XG4gICAgY29uc3QgeyBnZW4sIHZhbGlkYXRlTmFtZSwgc2NoZW1hRW52IH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hRW52LiRhc3luYykge1xuICAgICAgICBnZW4udGhyb3coKDAsIGNvZGVnZW5fMS5fKSBgbmV3ICR7aXQuVmFsaWRhdGlvbkVycm9yfSgke2VycnN9KWApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke3ZhbGlkYXRlTmFtZX0uZXJyb3JzYCwgZXJycyk7XG4gICAgICAgIGdlbi5yZXR1cm4oZmFsc2UpO1xuICAgIH1cbn1cbmNvbnN0IEUgPSB7XG4gICAga2V5d29yZDogbmV3IGNvZGVnZW5fMS5OYW1lKFwia2V5d29yZFwiKSxcbiAgICBzY2hlbWFQYXRoOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJzY2hlbWFQYXRoXCIpLFxuICAgIHBhcmFtczogbmV3IGNvZGVnZW5fMS5OYW1lKFwicGFyYW1zXCIpLFxuICAgIHByb3BlcnR5TmFtZTogbmV3IGNvZGVnZW5fMS5OYW1lKFwicHJvcGVydHlOYW1lXCIpLFxuICAgIG1lc3NhZ2U6IG5ldyBjb2RlZ2VuXzEuTmFtZShcIm1lc3NhZ2VcIiksXG4gICAgc2NoZW1hOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJzY2hlbWFcIiksXG4gICAgcGFyZW50U2NoZW1hOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwYXJlbnRTY2hlbWFcIiksXG59O1xuZnVuY3Rpb24gZXJyb3JPYmplY3RDb2RlKGN4dCwgZXJyb3IsIGVycm9yUGF0aHMpIHtcbiAgICBjb25zdCB7IGNyZWF0ZUVycm9ycyB9ID0gY3h0Lml0O1xuICAgIGlmIChjcmVhdGVFcnJvcnMgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBge31gO1xuICAgIHJldHVybiBlcnJvck9iamVjdChjeHQsIGVycm9yLCBlcnJvclBhdGhzKTtcbn1cbmZ1bmN0aW9uIGVycm9yT2JqZWN0KGN4dCwgZXJyb3IsIGVycm9yUGF0aHMgPSB7fSkge1xuICAgIGNvbnN0IHsgZ2VuLCBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IGtleVZhbHVlcyA9IFtcbiAgICAgICAgZXJyb3JJbnN0YW5jZVBhdGgoaXQsIGVycm9yUGF0aHMpLFxuICAgICAgICBlcnJvclNjaGVtYVBhdGgoY3h0LCBlcnJvclBhdGhzKSxcbiAgICBdO1xuICAgIGV4dHJhRXJyb3JQcm9wcyhjeHQsIGVycm9yLCBrZXlWYWx1ZXMpO1xuICAgIHJldHVybiBnZW4ub2JqZWN0KC4uLmtleVZhbHVlcyk7XG59XG5mdW5jdGlvbiBlcnJvckluc3RhbmNlUGF0aCh7IGVycm9yUGF0aCB9LCB7IGluc3RhbmNlUGF0aCB9KSB7XG4gICAgY29uc3QgaW5zdFBhdGggPSBpbnN0YW5jZVBhdGhcbiAgICAgICAgPyAoMCwgY29kZWdlbl8xLnN0cikgYCR7ZXJyb3JQYXRofSR7KDAsIHV0aWxfMS5nZXRFcnJvclBhdGgpKGluc3RhbmNlUGF0aCwgdXRpbF8xLlR5cGUuU3RyKX1gXG4gICAgICAgIDogZXJyb3JQYXRoO1xuICAgIHJldHVybiBbbmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgKDAsIGNvZGVnZW5fMS5zdHJDb25jYXQpKG5hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsIGluc3RQYXRoKV07XG59XG5mdW5jdGlvbiBlcnJvclNjaGVtYVBhdGgoeyBrZXl3b3JkLCBpdDogeyBlcnJTY2hlbWFQYXRoIH0gfSwgeyBzY2hlbWFQYXRoLCBwYXJlbnRTY2hlbWEgfSkge1xuICAgIGxldCBzY2hQYXRoID0gcGFyZW50U2NoZW1hID8gZXJyU2NoZW1hUGF0aCA6ICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtlcnJTY2hlbWFQYXRofS8ke2tleXdvcmR9YDtcbiAgICBpZiAoc2NoZW1hUGF0aCkge1xuICAgICAgICBzY2hQYXRoID0gKDAsIGNvZGVnZW5fMS5zdHIpIGAke3NjaFBhdGh9JHsoMCwgdXRpbF8xLmdldEVycm9yUGF0aCkoc2NoZW1hUGF0aCwgdXRpbF8xLlR5cGUuU3RyKX1gO1xuICAgIH1cbiAgICByZXR1cm4gW0Uuc2NoZW1hUGF0aCwgc2NoUGF0aF07XG59XG5mdW5jdGlvbiBleHRyYUVycm9yUHJvcHMoY3h0LCB7IHBhcmFtcywgbWVzc2FnZSB9LCBrZXlWYWx1ZXMpIHtcbiAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYVZhbHVlLCBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IHsgb3B0cywgcHJvcGVydHlOYW1lLCB0b3BTY2hlbWFSZWYsIHNjaGVtYVBhdGggfSA9IGl0O1xuICAgIGtleVZhbHVlcy5wdXNoKFtFLmtleXdvcmQsIGtleXdvcmRdLCBbRS5wYXJhbXMsIHR5cGVvZiBwYXJhbXMgPT0gXCJmdW5jdGlvblwiID8gcGFyYW1zKGN4dCkgOiBwYXJhbXMgfHwgKDAsIGNvZGVnZW5fMS5fKSBge31gXSk7XG4gICAgaWYgKG9wdHMubWVzc2FnZXMpIHtcbiAgICAgICAga2V5VmFsdWVzLnB1c2goW0UubWVzc2FnZSwgdHlwZW9mIG1lc3NhZ2UgPT0gXCJmdW5jdGlvblwiID8gbWVzc2FnZShjeHQpIDogbWVzc2FnZV0pO1xuICAgIH1cbiAgICBpZiAob3B0cy52ZXJib3NlKSB7XG4gICAgICAgIGtleVZhbHVlcy5wdXNoKFtFLnNjaGVtYSwgc2NoZW1hVmFsdWVdLCBbRS5wYXJlbnRTY2hlbWEsICgwLCBjb2RlZ2VuXzEuXykgYCR7dG9wU2NoZW1hUmVmfSR7c2NoZW1hUGF0aH1gXSwgW25hbWVzXzEuZGVmYXVsdC5kYXRhLCBkYXRhXSk7XG4gICAgfVxuICAgIGlmIChwcm9wZXJ0eU5hbWUpXG4gICAgICAgIGtleVZhbHVlcy5wdXNoKFtFLnByb3BlcnR5TmFtZSwgcHJvcGVydHlOYW1lXSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvcnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYm9vbE9yRW1wdHlTY2hlbWEgPSBleHBvcnRzLnRvcEJvb2xPckVtcHR5U2NoZW1hID0gdm9pZCAwO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vZXJyb3JzXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uL25hbWVzXCIpO1xuY29uc3QgYm9vbEVycm9yID0ge1xuICAgIG1lc3NhZ2U6IFwiYm9vbGVhbiBzY2hlbWEgaXMgZmFsc2VcIixcbn07XG5mdW5jdGlvbiB0b3BCb29sT3JFbXB0eVNjaGVtYShpdCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIHZhbGlkYXRlTmFtZSB9ID0gaXQ7XG4gICAgaWYgKHNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZmFsc2VTY2hlbWFFcnJvcihpdCwgZmFsc2UpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIgJiYgc2NoZW1hLiRhc3luYyA9PT0gdHJ1ZSkge1xuICAgICAgICBnZW4ucmV0dXJuKG5hbWVzXzEuZGVmYXVsdC5kYXRhKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZGF0ZU5hbWV9LmVycm9yc2AsIG51bGwpO1xuICAgICAgICBnZW4ucmV0dXJuKHRydWUpO1xuICAgIH1cbn1cbmV4cG9ydHMudG9wQm9vbE9yRW1wdHlTY2hlbWEgPSB0b3BCb29sT3JFbXB0eVNjaGVtYTtcbmZ1bmN0aW9uIGJvb2xPckVtcHR5U2NoZW1hKGl0LCB2YWxpZCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEgfSA9IGl0O1xuICAgIGlmIChzY2hlbWEgPT09IGZhbHNlKSB7XG4gICAgICAgIGdlbi52YXIodmFsaWQsIGZhbHNlKTsgLy8gVE9ETyB2YXJcbiAgICAgICAgZmFsc2VTY2hlbWFFcnJvcihpdCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4udmFyKHZhbGlkLCB0cnVlKTsgLy8gVE9ETyB2YXJcbiAgICB9XG59XG5leHBvcnRzLmJvb2xPckVtcHR5U2NoZW1hID0gYm9vbE9yRW1wdHlTY2hlbWE7XG5mdW5jdGlvbiBmYWxzZVNjaGVtYUVycm9yKGl0LCBvdmVycmlkZUFsbEVycm9ycykge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhIH0gPSBpdDtcbiAgICAvLyBUT0RPIG1heWJlIHNvbWUgb3RoZXIgaW50ZXJmYWNlIHNob3VsZCBiZSB1c2VkIGZvciBub24ta2V5d29yZCB2YWxpZGF0aW9uIGVycm9ycy4uLlxuICAgIGNvbnN0IGN4dCA9IHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBrZXl3b3JkOiBcImZhbHNlIHNjaGVtYVwiLFxuICAgICAgICBkYXRhLFxuICAgICAgICBzY2hlbWE6IGZhbHNlLFxuICAgICAgICBzY2hlbWFDb2RlOiBmYWxzZSxcbiAgICAgICAgc2NoZW1hVmFsdWU6IGZhbHNlLFxuICAgICAgICBwYXJhbXM6IHt9LFxuICAgICAgICBpdCxcbiAgICB9O1xuICAgICgwLCBlcnJvcnNfMS5yZXBvcnRFcnJvcikoY3h0LCBib29sRXJyb3IsIHVuZGVmaW5lZCwgb3ZlcnJpZGVBbGxFcnJvcnMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Ym9vbFNjaGVtYS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSdWxlcyA9IGV4cG9ydHMuaXNKU09OVHlwZSA9IHZvaWQgMDtcbmNvbnN0IF9qc29uVHlwZXMgPSBbXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJpbnRlZ2VyXCIsIFwiYm9vbGVhblwiLCBcIm51bGxcIiwgXCJvYmplY3RcIiwgXCJhcnJheVwiXTtcbmNvbnN0IGpzb25UeXBlcyA9IG5ldyBTZXQoX2pzb25UeXBlcyk7XG5mdW5jdGlvbiBpc0pTT05UeXBlKHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHggPT0gXCJzdHJpbmdcIiAmJiBqc29uVHlwZXMuaGFzKHgpO1xufVxuZXhwb3J0cy5pc0pTT05UeXBlID0gaXNKU09OVHlwZTtcbmZ1bmN0aW9uIGdldFJ1bGVzKCkge1xuICAgIGNvbnN0IGdyb3VwcyA9IHtcbiAgICAgICAgbnVtYmVyOiB7IHR5cGU6IFwibnVtYmVyXCIsIHJ1bGVzOiBbXSB9LFxuICAgICAgICBzdHJpbmc6IHsgdHlwZTogXCJzdHJpbmdcIiwgcnVsZXM6IFtdIH0sXG4gICAgICAgIGFycmF5OiB7IHR5cGU6IFwiYXJyYXlcIiwgcnVsZXM6IFtdIH0sXG4gICAgICAgIG9iamVjdDogeyB0eXBlOiBcIm9iamVjdFwiLCBydWxlczogW10gfSxcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGVzOiB7IC4uLmdyb3VwcywgaW50ZWdlcjogdHJ1ZSwgYm9vbGVhbjogdHJ1ZSwgbnVsbDogdHJ1ZSB9LFxuICAgICAgICBydWxlczogW3sgcnVsZXM6IFtdIH0sIGdyb3Vwcy5udW1iZXIsIGdyb3Vwcy5zdHJpbmcsIGdyb3Vwcy5hcnJheSwgZ3JvdXBzLm9iamVjdF0sXG4gICAgICAgIHBvc3Q6IHsgcnVsZXM6IFtdIH0sXG4gICAgICAgIGFsbDoge30sXG4gICAgICAgIGtleXdvcmRzOiB7fSxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRSdWxlcyA9IGdldFJ1bGVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cnVsZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2hvdWxkVXNlUnVsZSA9IGV4cG9ydHMuc2hvdWxkVXNlR3JvdXAgPSBleHBvcnRzLnNjaGVtYUhhc1J1bGVzRm9yVHlwZSA9IHZvaWQgMDtcbmZ1bmN0aW9uIHNjaGVtYUhhc1J1bGVzRm9yVHlwZSh7IHNjaGVtYSwgc2VsZiB9LCB0eXBlKSB7XG4gICAgY29uc3QgZ3JvdXAgPSBzZWxmLlJVTEVTLnR5cGVzW3R5cGVdO1xuICAgIHJldHVybiBncm91cCAmJiBncm91cCAhPT0gdHJ1ZSAmJiBzaG91bGRVc2VHcm91cChzY2hlbWEsIGdyb3VwKTtcbn1cbmV4cG9ydHMuc2NoZW1hSGFzUnVsZXNGb3JUeXBlID0gc2NoZW1hSGFzUnVsZXNGb3JUeXBlO1xuZnVuY3Rpb24gc2hvdWxkVXNlR3JvdXAoc2NoZW1hLCBncm91cCkge1xuICAgIHJldHVybiBncm91cC5ydWxlcy5zb21lKChydWxlKSA9PiBzaG91bGRVc2VSdWxlKHNjaGVtYSwgcnVsZSkpO1xufVxuZXhwb3J0cy5zaG91bGRVc2VHcm91cCA9IHNob3VsZFVzZUdyb3VwO1xuZnVuY3Rpb24gc2hvdWxkVXNlUnVsZShzY2hlbWEsIHJ1bGUpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChzY2hlbWFbcnVsZS5rZXl3b3JkXSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICgoX2EgPSBydWxlLmRlZmluaXRpb24uaW1wbGVtZW50cykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNvbWUoKGt3ZCkgPT4gc2NoZW1hW2t3ZF0gIT09IHVuZGVmaW5lZCkpKTtcbn1cbmV4cG9ydHMuc2hvdWxkVXNlUnVsZSA9IHNob3VsZFVzZVJ1bGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHBsaWNhYmlsaXR5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlcG9ydFR5cGVFcnJvciA9IGV4cG9ydHMuY2hlY2tEYXRhVHlwZXMgPSBleHBvcnRzLmNoZWNrRGF0YVR5cGUgPSBleHBvcnRzLmNvZXJjZUFuZENoZWNrRGF0YVR5cGUgPSBleHBvcnRzLmdldEpTT05UeXBlcyA9IGV4cG9ydHMuZ2V0U2NoZW1hVHlwZXMgPSBleHBvcnRzLkRhdGFUeXBlID0gdm9pZCAwO1xuY29uc3QgcnVsZXNfMSA9IHJlcXVpcmUoXCIuLi9ydWxlc1wiKTtcbmNvbnN0IGFwcGxpY2FiaWxpdHlfMSA9IHJlcXVpcmUoXCIuL2FwcGxpY2FiaWxpdHlcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9lcnJvcnNcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xudmFyIERhdGFUeXBlO1xuKGZ1bmN0aW9uIChEYXRhVHlwZSkge1xuICAgIERhdGFUeXBlW0RhdGFUeXBlW1wiQ29ycmVjdFwiXSA9IDBdID0gXCJDb3JyZWN0XCI7XG4gICAgRGF0YVR5cGVbRGF0YVR5cGVbXCJXcm9uZ1wiXSA9IDFdID0gXCJXcm9uZ1wiO1xufSkoRGF0YVR5cGUgPSBleHBvcnRzLkRhdGFUeXBlIHx8IChleHBvcnRzLkRhdGFUeXBlID0ge30pKTtcbmZ1bmN0aW9uIGdldFNjaGVtYVR5cGVzKHNjaGVtYSkge1xuICAgIGNvbnN0IHR5cGVzID0gZ2V0SlNPTlR5cGVzKHNjaGVtYS50eXBlKTtcbiAgICBjb25zdCBoYXNOdWxsID0gdHlwZXMuaW5jbHVkZXMoXCJudWxsXCIpO1xuICAgIGlmIChoYXNOdWxsKSB7XG4gICAgICAgIGlmIChzY2hlbWEubnVsbGFibGUgPT09IGZhbHNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHlwZTogbnVsbCBjb250cmFkaWN0cyBudWxsYWJsZTogZmFsc2VcIik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoIXR5cGVzLmxlbmd0aCAmJiBzY2hlbWEubnVsbGFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIm51bGxhYmxlXCIgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBcInR5cGVcIicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY2hlbWEubnVsbGFibGUgPT09IHRydWUpXG4gICAgICAgICAgICB0eXBlcy5wdXNoKFwibnVsbFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVzO1xufVxuZXhwb3J0cy5nZXRTY2hlbWFUeXBlcyA9IGdldFNjaGVtYVR5cGVzO1xuZnVuY3Rpb24gZ2V0SlNPTlR5cGVzKHRzKSB7XG4gICAgY29uc3QgdHlwZXMgPSBBcnJheS5pc0FycmF5KHRzKSA/IHRzIDogdHMgPyBbdHNdIDogW107XG4gICAgaWYgKHR5cGVzLmV2ZXJ5KHJ1bGVzXzEuaXNKU09OVHlwZSkpXG4gICAgICAgIHJldHVybiB0eXBlcztcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIG11c3QgYmUgSlNPTlR5cGUgb3IgSlNPTlR5cGVbXTogXCIgKyB0eXBlcy5qb2luKFwiLFwiKSk7XG59XG5leHBvcnRzLmdldEpTT05UeXBlcyA9IGdldEpTT05UeXBlcztcbmZ1bmN0aW9uIGNvZXJjZUFuZENoZWNrRGF0YVR5cGUoaXQsIHR5cGVzKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIG9wdHMgfSA9IGl0O1xuICAgIGNvbnN0IGNvZXJjZVRvID0gY29lcmNlVG9UeXBlcyh0eXBlcywgb3B0cy5jb2VyY2VUeXBlcyk7XG4gICAgY29uc3QgY2hlY2tUeXBlcyA9IHR5cGVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgIShjb2VyY2VUby5sZW5ndGggPT09IDAgJiYgdHlwZXMubGVuZ3RoID09PSAxICYmICgwLCBhcHBsaWNhYmlsaXR5XzEuc2NoZW1hSGFzUnVsZXNGb3JUeXBlKShpdCwgdHlwZXNbMF0pKTtcbiAgICBpZiAoY2hlY2tUeXBlcykge1xuICAgICAgICBjb25zdCB3cm9uZ1R5cGUgPSBjaGVja0RhdGFUeXBlcyh0eXBlcywgZGF0YSwgb3B0cy5zdHJpY3ROdW1iZXJzLCBEYXRhVHlwZS5Xcm9uZyk7XG4gICAgICAgIGdlbi5pZih3cm9uZ1R5cGUsICgpID0+IHtcbiAgICAgICAgICAgIGlmIChjb2VyY2VUby5sZW5ndGgpXG4gICAgICAgICAgICAgICAgY29lcmNlRGF0YShpdCwgdHlwZXMsIGNvZXJjZVRvKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXBvcnRUeXBlRXJyb3IoaXQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNoZWNrVHlwZXM7XG59XG5leHBvcnRzLmNvZXJjZUFuZENoZWNrRGF0YVR5cGUgPSBjb2VyY2VBbmRDaGVja0RhdGFUeXBlO1xuY29uc3QgQ09FUkNJQkxFID0gbmV3IFNldChbXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJpbnRlZ2VyXCIsIFwiYm9vbGVhblwiLCBcIm51bGxcIl0pO1xuZnVuY3Rpb24gY29lcmNlVG9UeXBlcyh0eXBlcywgY29lcmNlVHlwZXMpIHtcbiAgICByZXR1cm4gY29lcmNlVHlwZXNcbiAgICAgICAgPyB0eXBlcy5maWx0ZXIoKHQpID0+IENPRVJDSUJMRS5oYXModCkgfHwgKGNvZXJjZVR5cGVzID09PSBcImFycmF5XCIgJiYgdCA9PT0gXCJhcnJheVwiKSlcbiAgICAgICAgOiBbXTtcbn1cbmZ1bmN0aW9uIGNvZXJjZURhdGEoaXQsIHR5cGVzLCBjb2VyY2VUbykge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBvcHRzIH0gPSBpdDtcbiAgICBjb25zdCBkYXRhVHlwZSA9IGdlbi5sZXQoXCJkYXRhVHlwZVwiLCAoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtkYXRhfWApO1xuICAgIGNvbnN0IGNvZXJjZWQgPSBnZW4ubGV0KFwiY29lcmNlZFwiLCAoMCwgY29kZWdlbl8xLl8pIGB1bmRlZmluZWRgKTtcbiAgICBpZiAob3B0cy5jb2VyY2VUeXBlcyA9PT0gXCJhcnJheVwiKSB7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFUeXBlfSA9PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5KCR7ZGF0YX0pICYmICR7ZGF0YX0ubGVuZ3RoID09IDFgLCAoKSA9PiBnZW5cbiAgICAgICAgICAgIC5hc3NpZ24oZGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfVswXWApXG4gICAgICAgICAgICAuYXNzaWduKGRhdGFUeXBlLCAoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtkYXRhfWApXG4gICAgICAgICAgICAuaWYoY2hlY2tEYXRhVHlwZXModHlwZXMsIGRhdGEsIG9wdHMuc3RyaWN0TnVtYmVycyksICgpID0+IGdlbi5hc3NpZ24oY29lcmNlZCwgZGF0YSkpKTtcbiAgICB9XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y29lcmNlZH0gIT09IHVuZGVmaW5lZGApO1xuICAgIGZvciAoY29uc3QgdCBvZiBjb2VyY2VUbykge1xuICAgICAgICBpZiAoQ09FUkNJQkxFLmhhcyh0KSB8fCAodCA9PT0gXCJhcnJheVwiICYmIG9wdHMuY29lcmNlVHlwZXMgPT09IFwiYXJyYXlcIikpIHtcbiAgICAgICAgICAgIGNvZXJjZVNwZWNpZmljVHlwZSh0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZW4uZWxzZSgpO1xuICAgIHJlcG9ydFR5cGVFcnJvcihpdCk7XG4gICAgZ2VuLmVuZElmKCk7XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y29lcmNlZH0gIT09IHVuZGVmaW5lZGAsICgpID0+IHtcbiAgICAgICAgZ2VuLmFzc2lnbihkYXRhLCBjb2VyY2VkKTtcbiAgICAgICAgYXNzaWduUGFyZW50RGF0YShpdCwgY29lcmNlZCk7XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gY29lcmNlU3BlY2lmaWNUeXBlKHQpIHtcbiAgICAgICAgc3dpdGNoICh0KSB7XG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhVHlwZX0gPT0gXCJudW1iZXJcIiB8fCAke2RhdGFUeXBlfSA9PSBcImJvb2xlYW5cImApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgKDAsIGNvZGVnZW5fMS5fKSBgXCJcIiArICR7ZGF0YX1gKVxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gPT09IG51bGxgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsICgwLCBjb2RlZ2VuXzEuXykgYFwiXCJgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhVHlwZX0gPT0gXCJib29sZWFuXCIgfHwgJHtkYXRhfSA9PT0gbnVsbFxuICAgICAgICAgICAgICB8fCAoJHtkYXRhVHlwZX0gPT0gXCJzdHJpbmdcIiAmJiAke2RhdGF9ICYmICR7ZGF0YX0gPT0gKyR7ZGF0YX0pYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCAoMCwgY29kZWdlbl8xLl8pIGArJHtkYXRhfWApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnRlZ2VyXCI6XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhVHlwZX0gPT09IFwiYm9vbGVhblwiIHx8ICR7ZGF0YX0gPT09IG51bGxcbiAgICAgICAgICAgICAgfHwgKCR7ZGF0YVR5cGV9ID09PSBcInN0cmluZ1wiICYmICR7ZGF0YX0gJiYgJHtkYXRhfSA9PSArJHtkYXRhfSAmJiAhKCR7ZGF0YX0gJSAxKSlgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsICgwLCBjb2RlZ2VuXzEuXykgYCske2RhdGF9YCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ID09PSBcImZhbHNlXCIgfHwgJHtkYXRhfSA9PT0gMCB8fCAke2RhdGF9ID09PSBudWxsYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ID09PSBcInRydWVcIiB8fCAke2RhdGF9ID09PSAxYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgICAgICAgICAgIGdlbi5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSA9PT0gXCJcIiB8fCAke2RhdGF9ID09PSAwIHx8ICR7ZGF0YX0gPT09IGZhbHNlYCk7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbihjb2VyY2VkLCBudWxsKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFUeXBlfSA9PT0gXCJzdHJpbmdcIiB8fCAke2RhdGFUeXBlfSA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICAgICB8fCAke2RhdGFUeXBlfSA9PT0gXCJib29sZWFuXCIgfHwgJHtkYXRhfSA9PT0gbnVsbGApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgKDAsIGNvZGVnZW5fMS5fKSBgWyR7ZGF0YX1dYCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBhc3NpZ25QYXJlbnREYXRhKHsgZ2VuLCBwYXJlbnREYXRhLCBwYXJlbnREYXRhUHJvcGVydHkgfSwgZXhwcikge1xuICAgIC8vIFRPRE8gdXNlIGdlbi5wcm9wZXJ0eVxuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke3BhcmVudERhdGF9ICE9PSB1bmRlZmluZWRgLCAoKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7cGFyZW50RGF0YX1bJHtwYXJlbnREYXRhUHJvcGVydHl9XWAsIGV4cHIpKTtcbn1cbmZ1bmN0aW9uIGNoZWNrRGF0YVR5cGUoZGF0YVR5cGUsIGRhdGEsIHN0cmljdE51bXMsIGNvcnJlY3QgPSBEYXRhVHlwZS5Db3JyZWN0KSB7XG4gICAgY29uc3QgRVEgPSBjb3JyZWN0ID09PSBEYXRhVHlwZS5Db3JyZWN0ID8gY29kZWdlbl8xLm9wZXJhdG9ycy5FUSA6IGNvZGVnZW5fMS5vcGVyYXRvcnMuTkVRO1xuICAgIGxldCBjb25kO1xuICAgIHN3aXRjaCAoZGF0YVR5cGUpIHtcbiAgICAgICAgY2FzZSBcIm51bGxcIjpcbiAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ICR7RVF9IG51bGxgO1xuICAgICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgICAgIGNvbmQgPSAoMCwgY29kZWdlbl8xLl8pIGBBcnJheS5pc0FycmF5KCR7ZGF0YX0pYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSAmJiB0eXBlb2YgJHtkYXRhfSA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KCR7ZGF0YX0pYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaW50ZWdlclwiOlxuICAgICAgICAgICAgY29uZCA9IG51bUNvbmQoKDAsIGNvZGVnZW5fMS5fKSBgISgke2RhdGF9ICUgMSkgJiYgIWlzTmFOKCR7ZGF0YX0pYCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgY29uZCA9IG51bUNvbmQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2RhdGF9ICR7RVF9ICR7ZGF0YVR5cGV9YDtcbiAgICB9XG4gICAgcmV0dXJuIGNvcnJlY3QgPT09IERhdGFUeXBlLkNvcnJlY3QgPyBjb25kIDogKDAsIGNvZGVnZW5fMS5ub3QpKGNvbmQpO1xuICAgIGZ1bmN0aW9uIG51bUNvbmQoX2NvbmQgPSBjb2RlZ2VuXzEubmlsKSB7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLmFuZCkoKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZGF0YX0gPT0gXCJudW1iZXJcImAsIF9jb25kLCBzdHJpY3ROdW1zID8gKDAsIGNvZGVnZW5fMS5fKSBgaXNGaW5pdGUoJHtkYXRhfSlgIDogY29kZWdlbl8xLm5pbCk7XG4gICAgfVxufVxuZXhwb3J0cy5jaGVja0RhdGFUeXBlID0gY2hlY2tEYXRhVHlwZTtcbmZ1bmN0aW9uIGNoZWNrRGF0YVR5cGVzKGRhdGFUeXBlcywgZGF0YSwgc3RyaWN0TnVtcywgY29ycmVjdCkge1xuICAgIGlmIChkYXRhVHlwZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBjaGVja0RhdGFUeXBlKGRhdGFUeXBlc1swXSwgZGF0YSwgc3RyaWN0TnVtcywgY29ycmVjdCk7XG4gICAgfVxuICAgIGxldCBjb25kO1xuICAgIGNvbnN0IHR5cGVzID0gKDAsIHV0aWxfMS50b0hhc2gpKGRhdGFUeXBlcyk7XG4gICAgaWYgKHR5cGVzLmFycmF5ICYmIHR5cGVzLm9iamVjdCkge1xuICAgICAgICBjb25zdCBub3RPYmogPSAoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtkYXRhfSAhPSBcIm9iamVjdFwiYDtcbiAgICAgICAgY29uZCA9IHR5cGVzLm51bGwgPyBub3RPYmogOiAoMCwgY29kZWdlbl8xLl8pIGAhJHtkYXRhfSB8fCAke25vdE9ian1gO1xuICAgICAgICBkZWxldGUgdHlwZXMubnVsbDtcbiAgICAgICAgZGVsZXRlIHR5cGVzLmFycmF5O1xuICAgICAgICBkZWxldGUgdHlwZXMub2JqZWN0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uZCA9IGNvZGVnZW5fMS5uaWw7XG4gICAgfVxuICAgIGlmICh0eXBlcy5udW1iZXIpXG4gICAgICAgIGRlbGV0ZSB0eXBlcy5pbnRlZ2VyO1xuICAgIGZvciAoY29uc3QgdCBpbiB0eXBlcylcbiAgICAgICAgY29uZCA9ICgwLCBjb2RlZ2VuXzEuYW5kKShjb25kLCBjaGVja0RhdGFUeXBlKHQsIGRhdGEsIHN0cmljdE51bXMsIGNvcnJlY3QpKTtcbiAgICByZXR1cm4gY29uZDtcbn1cbmV4cG9ydHMuY2hlY2tEYXRhVHlwZXMgPSBjaGVja0RhdGFUeXBlcztcbmNvbnN0IHR5cGVFcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBzY2hlbWEgfSkgPT4gYG11c3QgYmUgJHtzY2hlbWF9YCxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYSwgc2NoZW1hVmFsdWUgfSkgPT4gdHlwZW9mIHNjaGVtYSA9PSBcInN0cmluZ1wiID8gKDAsIGNvZGVnZW5fMS5fKSBge3R5cGU6ICR7c2NoZW1hfX1gIDogKDAsIGNvZGVnZW5fMS5fKSBge3R5cGU6ICR7c2NoZW1hVmFsdWV9fWAsXG59O1xuZnVuY3Rpb24gcmVwb3J0VHlwZUVycm9yKGl0KSB7XG4gICAgY29uc3QgY3h0ID0gZ2V0VHlwZUVycm9yQ29udGV4dChpdCk7XG4gICAgKDAsIGVycm9yc18xLnJlcG9ydEVycm9yKShjeHQsIHR5cGVFcnJvcik7XG59XG5leHBvcnRzLnJlcG9ydFR5cGVFcnJvciA9IHJlcG9ydFR5cGVFcnJvcjtcbmZ1bmN0aW9uIGdldFR5cGVFcnJvckNvbnRleHQoaXQpIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwgc2NoZW1hIH0gPSBpdDtcbiAgICBjb25zdCBzY2hlbWFDb2RlID0gKDAsIHV0aWxfMS5zY2hlbWFSZWZPclZhbCkoaXQsIHNjaGVtYSwgXCJ0eXBlXCIpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGdlbixcbiAgICAgICAga2V5d29yZDogXCJ0eXBlXCIsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHNjaGVtYTogc2NoZW1hLnR5cGUsXG4gICAgICAgIHNjaGVtYUNvZGUsXG4gICAgICAgIHNjaGVtYVZhbHVlOiBzY2hlbWFDb2RlLFxuICAgICAgICBwYXJlbnRTY2hlbWE6IHNjaGVtYSxcbiAgICAgICAgcGFyYW1zOiB7fSxcbiAgICAgICAgaXQsXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGFUeXBlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFzc2lnbkRlZmF1bHRzID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vdXRpbFwiKTtcbmZ1bmN0aW9uIGFzc2lnbkRlZmF1bHRzKGl0LCB0eSkge1xuICAgIGNvbnN0IHsgcHJvcGVydGllcywgaXRlbXMgfSA9IGl0LnNjaGVtYTtcbiAgICBpZiAodHkgPT09IFwib2JqZWN0XCIgJiYgcHJvcGVydGllcykge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBhc3NpZ25EZWZhdWx0KGl0LCBrZXksIHByb3BlcnRpZXNba2V5XS5kZWZhdWx0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0eSA9PT0gXCJhcnJheVwiICYmIEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICAgIGl0ZW1zLmZvckVhY2goKHNjaCwgaSkgPT4gYXNzaWduRGVmYXVsdChpdCwgaSwgc2NoLmRlZmF1bHQpKTtcbiAgICB9XG59XG5leHBvcnRzLmFzc2lnbkRlZmF1bHRzID0gYXNzaWduRGVmYXVsdHM7XG5mdW5jdGlvbiBhc3NpZ25EZWZhdWx0KGl0LCBwcm9wLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBjb25zdCB7IGdlbiwgY29tcG9zaXRlUnVsZSwgZGF0YSwgb3B0cyB9ID0gaXQ7XG4gICAgaWYgKGRlZmF1bHRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgY2hpbGREYXRhID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkocHJvcCl9YDtcbiAgICBpZiAoY29tcG9zaXRlUnVsZSkge1xuICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIGBkZWZhdWx0IGlzIGlnbm9yZWQgZm9yOiAke2NoaWxkRGF0YX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgY29uZGl0aW9uID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtjaGlsZERhdGF9ID09PSB1bmRlZmluZWRgO1xuICAgIGlmIChvcHRzLnVzZURlZmF1bHRzID09PSBcImVtcHR5XCIpIHtcbiAgICAgICAgY29uZGl0aW9uID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtjb25kaXRpb259IHx8ICR7Y2hpbGREYXRhfSA9PT0gbnVsbCB8fCAke2NoaWxkRGF0YX0gPT09IFwiXCJgO1xuICAgIH1cbiAgICAvLyBgJHtjaGlsZERhdGF9ID09PSB1bmRlZmluZWRgICtcbiAgICAvLyAob3B0cy51c2VEZWZhdWx0cyA9PT0gXCJlbXB0eVwiID8gYCB8fCAke2NoaWxkRGF0YX0gPT09IG51bGwgfHwgJHtjaGlsZERhdGF9ID09PSBcIlwiYCA6IFwiXCIpXG4gICAgZ2VuLmlmKGNvbmRpdGlvbiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtjaGlsZERhdGF9ID0gJHsoMCwgY29kZWdlbl8xLnN0cmluZ2lmeSkoZGVmYXVsdFZhbHVlKX1gKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZmF1bHRzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlVW5pb24gPSBleHBvcnRzLnZhbGlkYXRlQXJyYXkgPSBleHBvcnRzLnVzZVBhdHRlcm4gPSBleHBvcnRzLmNhbGxWYWxpZGF0ZUNvZGUgPSBleHBvcnRzLnNjaGVtYVByb3BlcnRpZXMgPSBleHBvcnRzLmFsbFNjaGVtYVByb3BlcnRpZXMgPSBleHBvcnRzLm5vUHJvcGVydHlJbkRhdGEgPSBleHBvcnRzLnByb3BlcnR5SW5EYXRhID0gZXhwb3J0cy5pc093blByb3BlcnR5ID0gZXhwb3J0cy5oYXNQcm9wRnVuYyA9IGV4cG9ydHMucmVwb3J0TWlzc2luZ1Byb3AgPSBleHBvcnRzLmNoZWNrTWlzc2luZ1Byb3AgPSBleHBvcnRzLmNoZWNrUmVwb3J0TWlzc2luZ1Byb3AgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vY29tcGlsZS9uYW1lc1wiKTtcbmNvbnN0IHV0aWxfMiA9IHJlcXVpcmUoXCIuLi9jb21waWxlL3V0aWxcIik7XG5mdW5jdGlvbiBjaGVja1JlcG9ydE1pc3NpbmdQcm9wKGN4dCwgcHJvcCkge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgIGdlbi5pZihub1Byb3BlcnR5SW5EYXRhKGdlbiwgZGF0YSwgcHJvcCwgaXQub3B0cy5vd25Qcm9wZXJ0aWVzKSwgKCkgPT4ge1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbWlzc2luZ1Byb3BlcnR5OiAoMCwgY29kZWdlbl8xLl8pIGAke3Byb3B9YCB9LCB0cnVlKTtcbiAgICAgICAgY3h0LmVycm9yKCk7XG4gICAgfSk7XG59XG5leHBvcnRzLmNoZWNrUmVwb3J0TWlzc2luZ1Byb3AgPSBjaGVja1JlcG9ydE1pc3NpbmdQcm9wO1xuZnVuY3Rpb24gY2hlY2tNaXNzaW5nUHJvcCh7IGdlbiwgZGF0YSwgaXQ6IHsgb3B0cyB9IH0sIHByb3BlcnRpZXMsIG1pc3NpbmcpIHtcbiAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5vcikoLi4ucHJvcGVydGllcy5tYXAoKHByb3ApID0+ICgwLCBjb2RlZ2VuXzEuYW5kKShub1Byb3BlcnR5SW5EYXRhKGdlbiwgZGF0YSwgcHJvcCwgb3B0cy5vd25Qcm9wZXJ0aWVzKSwgKDAsIGNvZGVnZW5fMS5fKSBgJHttaXNzaW5nfSA9ICR7cHJvcH1gKSkpO1xufVxuZXhwb3J0cy5jaGVja01pc3NpbmdQcm9wID0gY2hlY2tNaXNzaW5nUHJvcDtcbmZ1bmN0aW9uIHJlcG9ydE1pc3NpbmdQcm9wKGN4dCwgbWlzc2luZykge1xuICAgIGN4dC5zZXRQYXJhbXMoeyBtaXNzaW5nUHJvcGVydHk6IG1pc3NpbmcgfSwgdHJ1ZSk7XG4gICAgY3h0LmVycm9yKCk7XG59XG5leHBvcnRzLnJlcG9ydE1pc3NpbmdQcm9wID0gcmVwb3J0TWlzc2luZ1Byb3A7XG5mdW5jdGlvbiBoYXNQcm9wRnVuYyhnZW4pIHtcbiAgICByZXR1cm4gZ2VuLnNjb3BlVmFsdWUoXCJmdW5jXCIsIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICAgICAgICByZWY6IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksXG4gICAgICAgIGNvZGU6ICgwLCBjb2RlZ2VuXzEuXykgYE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlgLFxuICAgIH0pO1xufVxuZXhwb3J0cy5oYXNQcm9wRnVuYyA9IGhhc1Byb3BGdW5jO1xuZnVuY3Rpb24gaXNPd25Qcm9wZXJ0eShnZW4sIGRhdGEsIHByb3BlcnR5KSB7XG4gICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7aGFzUHJvcEZ1bmMoZ2VuKX0uY2FsbCgke2RhdGF9LCAke3Byb3BlcnR5fSlgO1xufVxuZXhwb3J0cy5pc093blByb3BlcnR5ID0gaXNPd25Qcm9wZXJ0eTtcbmZ1bmN0aW9uIHByb3BlcnR5SW5EYXRhKGdlbiwgZGF0YSwgcHJvcGVydHksIG93blByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkocHJvcGVydHkpfSAhPT0gdW5kZWZpbmVkYDtcbiAgICByZXR1cm4gb3duUHJvcGVydGllcyA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7Y29uZH0gJiYgJHtpc093blByb3BlcnR5KGdlbiwgZGF0YSwgcHJvcGVydHkpfWAgOiBjb25kO1xufVxuZXhwb3J0cy5wcm9wZXJ0eUluRGF0YSA9IHByb3BlcnR5SW5EYXRhO1xuZnVuY3Rpb24gbm9Qcm9wZXJ0eUluRGF0YShnZW4sIGRhdGEsIHByb3BlcnR5LCBvd25Qcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgY29uZCA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHByb3BlcnR5KX0gPT09IHVuZGVmaW5lZGA7XG4gICAgcmV0dXJuIG93blByb3BlcnRpZXMgPyAoMCwgY29kZWdlbl8xLm9yKShjb25kLCAoMCwgY29kZWdlbl8xLm5vdCkoaXNPd25Qcm9wZXJ0eShnZW4sIGRhdGEsIHByb3BlcnR5KSkpIDogY29uZDtcbn1cbmV4cG9ydHMubm9Qcm9wZXJ0eUluRGF0YSA9IG5vUHJvcGVydHlJbkRhdGE7XG5mdW5jdGlvbiBhbGxTY2hlbWFQcm9wZXJ0aWVzKHNjaGVtYU1hcCkge1xuICAgIHJldHVybiBzY2hlbWFNYXAgPyBPYmplY3Qua2V5cyhzY2hlbWFNYXApLmZpbHRlcigocCkgPT4gcCAhPT0gXCJfX3Byb3RvX19cIikgOiBbXTtcbn1cbmV4cG9ydHMuYWxsU2NoZW1hUHJvcGVydGllcyA9IGFsbFNjaGVtYVByb3BlcnRpZXM7XG5mdW5jdGlvbiBzY2hlbWFQcm9wZXJ0aWVzKGl0LCBzY2hlbWFNYXApIHtcbiAgICByZXR1cm4gYWxsU2NoZW1hUHJvcGVydGllcyhzY2hlbWFNYXApLmZpbHRlcigocCkgPT4gISgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWFNYXBbcF0pKTtcbn1cbmV4cG9ydHMuc2NoZW1hUHJvcGVydGllcyA9IHNjaGVtYVByb3BlcnRpZXM7XG5mdW5jdGlvbiBjYWxsVmFsaWRhdGVDb2RlKHsgc2NoZW1hQ29kZSwgZGF0YSwgaXQ6IHsgZ2VuLCB0b3BTY2hlbWFSZWYsIHNjaGVtYVBhdGgsIGVycm9yUGF0aCB9LCBpdCB9LCBmdW5jLCBjb250ZXh0LCBwYXNzU2NoZW1hKSB7XG4gICAgY29uc3QgZGF0YUFuZFNjaGVtYSA9IHBhc3NTY2hlbWEgPyAoMCwgY29kZWdlbl8xLl8pIGAke3NjaGVtYUNvZGV9LCAke2RhdGF9LCAke3RvcFNjaGVtYVJlZn0ke3NjaGVtYVBhdGh9YCA6IGRhdGE7XG4gICAgY29uc3QgdmFsQ3h0ID0gW1xuICAgICAgICBbbmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgKDAsIGNvZGVnZW5fMS5zdHJDb25jYXQpKG5hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsIGVycm9yUGF0aCldLFxuICAgICAgICBbbmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGEsIGl0LnBhcmVudERhdGFdLFxuICAgICAgICBbbmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGFQcm9wZXJ0eSwgaXQucGFyZW50RGF0YVByb3BlcnR5XSxcbiAgICAgICAgW25hbWVzXzEuZGVmYXVsdC5yb290RGF0YSwgbmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhXSxcbiAgICBdO1xuICAgIGlmIChpdC5vcHRzLmR5bmFtaWNSZWYpXG4gICAgICAgIHZhbEN4dC5wdXNoKFtuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnMsIG5hbWVzXzEuZGVmYXVsdC5keW5hbWljQW5jaG9yc10pO1xuICAgIGNvbnN0IGFyZ3MgPSAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFBbmRTY2hlbWF9LCAke2dlbi5vYmplY3QoLi4udmFsQ3h0KX1gO1xuICAgIHJldHVybiBjb250ZXh0ICE9PSBjb2RlZ2VuXzEubmlsID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtmdW5jfS5jYWxsKCR7Y29udGV4dH0sICR7YXJnc30pYCA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZnVuY30oJHthcmdzfSlgO1xufVxuZXhwb3J0cy5jYWxsVmFsaWRhdGVDb2RlID0gY2FsbFZhbGlkYXRlQ29kZTtcbmNvbnN0IG5ld1JlZ0V4cCA9ICgwLCBjb2RlZ2VuXzEuXykgYG5ldyBSZWdFeHBgO1xuZnVuY3Rpb24gdXNlUGF0dGVybih7IGdlbiwgaXQ6IHsgb3B0cyB9IH0sIHBhdHRlcm4pIHtcbiAgICBjb25zdCB1ID0gb3B0cy51bmljb2RlUmVnRXhwID8gXCJ1XCIgOiBcIlwiO1xuICAgIGNvbnN0IHsgcmVnRXhwIH0gPSBvcHRzLmNvZGU7XG4gICAgY29uc3QgcnggPSByZWdFeHAocGF0dGVybiwgdSk7XG4gICAgcmV0dXJuIGdlbi5zY29wZVZhbHVlKFwicGF0dGVyblwiLCB7XG4gICAgICAgIGtleTogcngudG9TdHJpbmcoKSxcbiAgICAgICAgcmVmOiByeCxcbiAgICAgICAgY29kZTogKDAsIGNvZGVnZW5fMS5fKSBgJHtyZWdFeHAuY29kZSA9PT0gXCJuZXcgUmVnRXhwXCIgPyBuZXdSZWdFeHAgOiAoMCwgdXRpbF8yLnVzZUZ1bmMpKGdlbiwgcmVnRXhwKX0oJHtwYXR0ZXJufSwgJHt1fSlgLFxuICAgIH0pO1xufVxuZXhwb3J0cy51c2VQYXR0ZXJuID0gdXNlUGF0dGVybjtcbmZ1bmN0aW9uIHZhbGlkYXRlQXJyYXkoY3h0KSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgIGlmIChpdC5hbGxFcnJvcnMpIHtcbiAgICAgICAgY29uc3QgdmFsaWRBcnIgPSBnZW4ubGV0KFwidmFsaWRcIiwgdHJ1ZSk7XG4gICAgICAgIHZhbGlkYXRlSXRlbXMoKCkgPT4gZ2VuLmFzc2lnbih2YWxpZEFyciwgZmFsc2UpKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkQXJyO1xuICAgIH1cbiAgICBnZW4udmFyKHZhbGlkLCB0cnVlKTtcbiAgICB2YWxpZGF0ZUl0ZW1zKCgpID0+IGdlbi5icmVhaygpKTtcbiAgICByZXR1cm4gdmFsaWQ7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVJdGVtcyhub3RWYWxpZCkge1xuICAgICAgICBjb25zdCBsZW4gPSBnZW4uY29uc3QoXCJsZW5cIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICAgICAgZ2VuLmZvclJhbmdlKFwiaVwiLCAwLCBsZW4sIChpKSA9PiB7XG4gICAgICAgICAgICBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICBrZXl3b3JkLFxuICAgICAgICAgICAgICAgIGRhdGFQcm9wOiBpLFxuICAgICAgICAgICAgICAgIGRhdGFQcm9wVHlwZTogdXRpbF8xLlR5cGUuTnVtLFxuICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksIG5vdFZhbGlkKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZUFycmF5ID0gdmFsaWRhdGVBcnJheTtcbmZ1bmN0aW9uIHZhbGlkYXRlVW5pb24oY3h0KSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSwga2V5d29yZCwgaXQgfSA9IGN4dDtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgIGNvbnN0IGFsd2F5c1ZhbGlkID0gc2NoZW1hLnNvbWUoKHNjaCkgPT4gKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaCkpO1xuICAgIGlmIChhbHdheXNWYWxpZCAmJiAhaXQub3B0cy51bmV2YWx1YXRlZClcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIsIGZhbHNlKTtcbiAgICBjb25zdCBzY2hWYWxpZCA9IGdlbi5uYW1lKFwiX3ZhbGlkXCIpO1xuICAgIGdlbi5ibG9jaygoKSA9PiBzY2hlbWEuZm9yRWFjaCgoX3NjaCwgaSkgPT4ge1xuICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgIGtleXdvcmQsXG4gICAgICAgICAgICBzY2hlbWFQcm9wOiBpLFxuICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgfSwgc2NoVmFsaWQpO1xuICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCAoMCwgY29kZWdlbl8xLl8pIGAke3ZhbGlkfSB8fCAke3NjaFZhbGlkfWApO1xuICAgICAgICBjb25zdCBtZXJnZWQgPSBjeHQubWVyZ2VWYWxpZEV2YWx1YXRlZChzY2hDeHQsIHNjaFZhbGlkKTtcbiAgICAgICAgLy8gY2FuIHNob3J0LWNpcmN1aXQgaWYgYHVuZXZhbHVhdGVkUHJvcGVydGllcy9JdGVtc2Agbm90IHN1cHBvcnRlZCAob3B0cy51bmV2YWx1YXRlZCAhPT0gdHJ1ZSlcbiAgICAgICAgLy8gb3IgaWYgYWxsIHByb3BlcnRpZXMgYW5kIGl0ZW1zIHdlcmUgZXZhbHVhdGVkIChpdC5wcm9wcyA9PT0gdHJ1ZSAmJiBpdC5pdGVtcyA9PT0gdHJ1ZSlcbiAgICAgICAgaWYgKCFtZXJnZWQpXG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSk7XG4gICAgfSkpO1xuICAgIGN4dC5yZXN1bHQodmFsaWQsICgpID0+IGN4dC5yZXNldCgpLCAoKSA9PiBjeHQuZXJyb3IodHJ1ZSkpO1xufVxuZXhwb3J0cy52YWxpZGF0ZVVuaW9uID0gdmFsaWRhdGVVbmlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvZGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVLZXl3b3JkVXNhZ2UgPSBleHBvcnRzLnZhbGlkU2NoZW1hVHlwZSA9IGV4cG9ydHMuZnVuY0tleXdvcmRDb2RlID0gZXhwb3J0cy5tYWNyb0tleXdvcmRDb2RlID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uL25hbWVzXCIpO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uLy4uL3ZvY2FidWxhcmllcy9jb2RlXCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vZXJyb3JzXCIpO1xuZnVuY3Rpb24gbWFjcm9LZXl3b3JkQ29kZShjeHQsIGRlZikge1xuICAgIGNvbnN0IHsgZ2VuLCBrZXl3b3JkLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICBjb25zdCBtYWNyb1NjaGVtYSA9IGRlZi5tYWNyby5jYWxsKGl0LnNlbGYsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCk7XG4gICAgY29uc3Qgc2NoZW1hUmVmID0gdXNlS2V5d29yZChnZW4sIGtleXdvcmQsIG1hY3JvU2NoZW1hKTtcbiAgICBpZiAoaXQub3B0cy52YWxpZGF0ZVNjaGVtYSAhPT0gZmFsc2UpXG4gICAgICAgIGl0LnNlbGYudmFsaWRhdGVTY2hlbWEobWFjcm9TY2hlbWEsIHRydWUpO1xuICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgc2NoZW1hOiBtYWNyb1NjaGVtYSxcbiAgICAgICAgc2NoZW1hUGF0aDogY29kZWdlbl8xLm5pbCxcbiAgICAgICAgZXJyU2NoZW1hUGF0aDogYCR7aXQuZXJyU2NoZW1hUGF0aH0vJHtrZXl3b3JkfWAsXG4gICAgICAgIHRvcFNjaGVtYVJlZjogc2NoZW1hUmVmLFxuICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgIH0sIHZhbGlkKTtcbiAgICBjeHQucGFzcyh2YWxpZCwgKCkgPT4gY3h0LmVycm9yKHRydWUpKTtcbn1cbmV4cG9ydHMubWFjcm9LZXl3b3JkQ29kZSA9IG1hY3JvS2V5d29yZENvZGU7XG5mdW5jdGlvbiBmdW5jS2V5d29yZENvZGUoY3h0LCBkZWYpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgeyBnZW4sIGtleXdvcmQsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCAkZGF0YSwgaXQgfSA9IGN4dDtcbiAgICBjaGVja0FzeW5jS2V5d29yZChpdCwgZGVmKTtcbiAgICBjb25zdCB2YWxpZGF0ZSA9ICEkZGF0YSAmJiBkZWYuY29tcGlsZSA/IGRlZi5jb21waWxlLmNhbGwoaXQuc2VsZiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0KSA6IGRlZi52YWxpZGF0ZTtcbiAgICBjb25zdCB2YWxpZGF0ZVJlZiA9IHVzZUtleXdvcmQoZ2VuLCBrZXl3b3JkLCB2YWxpZGF0ZSk7XG4gICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIik7XG4gICAgY3h0LmJsb2NrJGRhdGEodmFsaWQsIHZhbGlkYXRlS2V5d29yZCk7XG4gICAgY3h0Lm9rKChfYSA9IGRlZi52YWxpZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdmFsaWQpO1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlS2V5d29yZCgpIHtcbiAgICAgICAgaWYgKGRlZi5lcnJvcnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBhc3NpZ25WYWxpZCgpO1xuICAgICAgICAgICAgaWYgKGRlZi5tb2RpZnlpbmcpXG4gICAgICAgICAgICAgICAgbW9kaWZ5RGF0YShjeHQpO1xuICAgICAgICAgICAgcmVwb3J0RXJycygoKSA9PiBjeHQuZXJyb3IoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBydWxlRXJycyA9IGRlZi5hc3luYyA/IHZhbGlkYXRlQXN5bmMoKSA6IHZhbGlkYXRlU3luYygpO1xuICAgICAgICAgICAgaWYgKGRlZi5tb2RpZnlpbmcpXG4gICAgICAgICAgICAgICAgbW9kaWZ5RGF0YShjeHQpO1xuICAgICAgICAgICAgcmVwb3J0RXJycygoKSA9PiBhZGRFcnJzKGN4dCwgcnVsZUVycnMpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUFzeW5jKCkge1xuICAgICAgICBjb25zdCBydWxlRXJycyA9IGdlbi5sZXQoXCJydWxlRXJyc1wiLCBudWxsKTtcbiAgICAgICAgZ2VuLnRyeSgoKSA9PiBhc3NpZ25WYWxpZCgoMCwgY29kZWdlbl8xLl8pIGBhd2FpdCBgKSwgKGUpID0+IGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKS5pZigoMCwgY29kZWdlbl8xLl8pIGAke2V9IGluc3RhbmNlb2YgJHtpdC5WYWxpZGF0aW9uRXJyb3J9YCwgKCkgPT4gZ2VuLmFzc2lnbihydWxlRXJycywgKDAsIGNvZGVnZW5fMS5fKSBgJHtlfS5lcnJvcnNgKSwgKCkgPT4gZ2VuLnRocm93KGUpKSk7XG4gICAgICAgIHJldHVybiBydWxlRXJycztcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVTeW5jKCkge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZUVycnMgPSAoMCwgY29kZWdlbl8xLl8pIGAke3ZhbGlkYXRlUmVmfS5lcnJvcnNgO1xuICAgICAgICBnZW4uYXNzaWduKHZhbGlkYXRlRXJycywgbnVsbCk7XG4gICAgICAgIGFzc2lnblZhbGlkKGNvZGVnZW5fMS5uaWwpO1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVFcnJzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhc3NpZ25WYWxpZChfYXdhaXQgPSBkZWYuYXN5bmMgPyAoMCwgY29kZWdlbl8xLl8pIGBhd2FpdCBgIDogY29kZWdlbl8xLm5pbCkge1xuICAgICAgICBjb25zdCBwYXNzQ3h0ID0gaXQub3B0cy5wYXNzQ29udGV4dCA/IG5hbWVzXzEuZGVmYXVsdC50aGlzIDogbmFtZXNfMS5kZWZhdWx0LnNlbGY7XG4gICAgICAgIGNvbnN0IHBhc3NTY2hlbWEgPSAhKChcImNvbXBpbGVcIiBpbiBkZWYgJiYgISRkYXRhKSB8fCBkZWYuc2NoZW1hID09PSBmYWxzZSk7XG4gICAgICAgIGdlbi5hc3NpZ24odmFsaWQsICgwLCBjb2RlZ2VuXzEuXykgYCR7X2F3YWl0fSR7KDAsIGNvZGVfMS5jYWxsVmFsaWRhdGVDb2RlKShjeHQsIHZhbGlkYXRlUmVmLCBwYXNzQ3h0LCBwYXNzU2NoZW1hKX1gLCBkZWYubW9kaWZ5aW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVwb3J0RXJycyhlcnJvcnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKChfYSA9IGRlZi52YWxpZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdmFsaWQpLCBlcnJvcnMpO1xuICAgIH1cbn1cbmV4cG9ydHMuZnVuY0tleXdvcmRDb2RlID0gZnVuY0tleXdvcmRDb2RlO1xuZnVuY3Rpb24gbW9kaWZ5RGF0YShjeHQpIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwgaXQgfSA9IGN4dDtcbiAgICBnZW4uaWYoaXQucGFyZW50RGF0YSwgKCkgPT4gZ2VuLmFzc2lnbihkYXRhLCAoMCwgY29kZWdlbl8xLl8pIGAke2l0LnBhcmVudERhdGF9WyR7aXQucGFyZW50RGF0YVByb3BlcnR5fV1gKSk7XG59XG5mdW5jdGlvbiBhZGRFcnJzKGN4dCwgZXJycykge1xuICAgIGNvbnN0IHsgZ2VuIH0gPSBjeHQ7XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYEFycmF5LmlzQXJyYXkoJHtlcnJzfSlgLCAoKSA9PiB7XG4gICAgICAgIGdlblxuICAgICAgICAgICAgLmFzc2lnbihuYW1lc18xLmRlZmF1bHQudkVycm9ycywgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30gPT09IG51bGwgPyAke2VycnN9IDogJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30uY29uY2F0KCR7ZXJyc30pYClcbiAgICAgICAgICAgIC5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LmVycm9ycywgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30ubGVuZ3RoYCk7XG4gICAgICAgICgwLCBlcnJvcnNfMS5leHRlbmRFcnJvcnMpKGN4dCk7XG4gICAgfSwgKCkgPT4gY3h0LmVycm9yKCkpO1xufVxuZnVuY3Rpb24gY2hlY2tBc3luY0tleXdvcmQoeyBzY2hlbWFFbnYgfSwgZGVmKSB7XG4gICAgaWYgKGRlZi5hc3luYyAmJiAhc2NoZW1hRW52LiRhc3luYylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXN5bmMga2V5d29yZCBpbiBzeW5jIHNjaGVtYVwiKTtcbn1cbmZ1bmN0aW9uIHVzZUtleXdvcmQoZ2VuLCBrZXl3b3JkLCByZXN1bHQpIHtcbiAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihga2V5d29yZCBcIiR7a2V5d29yZH1cIiBmYWlsZWQgdG8gY29tcGlsZWApO1xuICAgIHJldHVybiBnZW4uc2NvcGVWYWx1ZShcImtleXdvcmRcIiwgdHlwZW9mIHJlc3VsdCA9PSBcImZ1bmN0aW9uXCIgPyB7IHJlZjogcmVzdWx0IH0gOiB7IHJlZjogcmVzdWx0LCBjb2RlOiAoMCwgY29kZWdlbl8xLnN0cmluZ2lmeSkocmVzdWx0KSB9KTtcbn1cbmZ1bmN0aW9uIHZhbGlkU2NoZW1hVHlwZShzY2hlbWEsIHNjaGVtYVR5cGUsIGFsbG93VW5kZWZpbmVkID0gZmFsc2UpIHtcbiAgICAvLyBUT0RPIGFkZCB0ZXN0c1xuICAgIHJldHVybiAoIXNjaGVtYVR5cGUubGVuZ3RoIHx8XG4gICAgICAgIHNjaGVtYVR5cGUuc29tZSgoc3QpID0+IHN0ID09PSBcImFycmF5XCJcbiAgICAgICAgICAgID8gQXJyYXkuaXNBcnJheShzY2hlbWEpXG4gICAgICAgICAgICA6IHN0ID09PSBcIm9iamVjdFwiXG4gICAgICAgICAgICAgICAgPyBzY2hlbWEgJiYgdHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHNjaGVtYSlcbiAgICAgICAgICAgICAgICA6IHR5cGVvZiBzY2hlbWEgPT0gc3QgfHwgKGFsbG93VW5kZWZpbmVkICYmIHR5cGVvZiBzY2hlbWEgPT0gXCJ1bmRlZmluZWRcIikpKTtcbn1cbmV4cG9ydHMudmFsaWRTY2hlbWFUeXBlID0gdmFsaWRTY2hlbWFUeXBlO1xuZnVuY3Rpb24gdmFsaWRhdGVLZXl3b3JkVXNhZ2UoeyBzY2hlbWEsIG9wdHMsIHNlbGYsIGVyclNjaGVtYVBhdGggfSwgZGVmLCBrZXl3b3JkKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVmLmtleXdvcmQpID8gIWRlZi5rZXl3b3JkLmluY2x1ZGVzKGtleXdvcmQpIDogZGVmLmtleXdvcmQgIT09IGtleXdvcmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgIH1cbiAgICBjb25zdCBkZXBzID0gZGVmLmRlcGVuZGVuY2llcztcbiAgICBpZiAoZGVwcyA9PT0gbnVsbCB8fCBkZXBzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZXBzLnNvbWUoKGt3ZCkgPT4gIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzY2hlbWEsIGt3ZCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcGFyZW50IHNjaGVtYSBtdXN0IGhhdmUgZGVwZW5kZW5jaWVzIG9mICR7a2V5d29yZH06ICR7ZGVwcy5qb2luKFwiLFwiKX1gKTtcbiAgICB9XG4gICAgaWYgKGRlZi52YWxpZGF0ZVNjaGVtYSkge1xuICAgICAgICBjb25zdCB2YWxpZCA9IGRlZi52YWxpZGF0ZVNjaGVtYShzY2hlbWFba2V5d29yZF0pO1xuICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBga2V5d29yZCBcIiR7a2V5d29yZH1cIiB2YWx1ZSBpcyBpbnZhbGlkIGF0IHBhdGggXCIke2VyclNjaGVtYVBhdGh9XCI6IGAgK1xuICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JzVGV4dChkZWYudmFsaWRhdGVTY2hlbWEuZXJyb3JzKTtcbiAgICAgICAgICAgIGlmIChvcHRzLnZhbGlkYXRlU2NoZW1hID09PSBcImxvZ1wiKVxuICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKG1zZyk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLnZhbGlkYXRlS2V5d29yZFVzYWdlID0gdmFsaWRhdGVLZXl3b3JkVXNhZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1rZXl3b3JkLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV4dGVuZFN1YnNjaGVtYU1vZGUgPSBleHBvcnRzLmV4dGVuZFN1YnNjaGVtYURhdGEgPSBleHBvcnRzLmdldFN1YnNjaGVtYSA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG5mdW5jdGlvbiBnZXRTdWJzY2hlbWEoaXQsIHsga2V5d29yZCwgc2NoZW1hUHJvcCwgc2NoZW1hLCBzY2hlbWFQYXRoLCBlcnJTY2hlbWFQYXRoLCB0b3BTY2hlbWFSZWYgfSkge1xuICAgIGlmIChrZXl3b3JkICE9PSB1bmRlZmluZWQgJiYgc2NoZW1hICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdib3RoIFwia2V5d29yZFwiIGFuZCBcInNjaGVtYVwiIHBhc3NlZCwgb25seSBvbmUgYWxsb3dlZCcpO1xuICAgIH1cbiAgICBpZiAoa2V5d29yZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHNjaCA9IGl0LnNjaGVtYVtrZXl3b3JkXTtcbiAgICAgICAgcmV0dXJuIHNjaGVtYVByb3AgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgc2NoZW1hOiBzY2gsXG4gICAgICAgICAgICAgICAgc2NoZW1hUGF0aDogKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5zY2hlbWFQYXRofSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoa2V5d29yZCl9YCxcbiAgICAgICAgICAgICAgICBlcnJTY2hlbWFQYXRoOiBgJHtpdC5lcnJTY2hlbWFQYXRofS8ke2tleXdvcmR9YCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoW3NjaGVtYVByb3BdLFxuICAgICAgICAgICAgICAgIHNjaGVtYVBhdGg6ICgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuc2NoZW1hUGF0aH0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKGtleXdvcmQpfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoc2NoZW1hUHJvcCl9YCxcbiAgICAgICAgICAgICAgICBlcnJTY2hlbWFQYXRoOiBgJHtpdC5lcnJTY2hlbWFQYXRofS8ke2tleXdvcmR9LyR7KDAsIHV0aWxfMS5lc2NhcGVGcmFnbWVudCkoc2NoZW1hUHJvcCl9YCxcbiAgICAgICAgICAgIH07XG4gICAgfVxuICAgIGlmIChzY2hlbWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoc2NoZW1hUGF0aCA9PT0gdW5kZWZpbmVkIHx8IGVyclNjaGVtYVBhdGggPT09IHVuZGVmaW5lZCB8fCB0b3BTY2hlbWFSZWYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInNjaGVtYVBhdGhcIiwgXCJlcnJTY2hlbWFQYXRoXCIgYW5kIFwidG9wU2NoZW1hUmVmXCIgYXJlIHJlcXVpcmVkIHdpdGggXCJzY2hlbWFcIicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICBzY2hlbWFQYXRoLFxuICAgICAgICAgICAgdG9wU2NoZW1hUmVmLFxuICAgICAgICAgICAgZXJyU2NoZW1hUGF0aCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdlaXRoZXIgXCJrZXl3b3JkXCIgb3IgXCJzY2hlbWFcIiBtdXN0IGJlIHBhc3NlZCcpO1xufVxuZXhwb3J0cy5nZXRTdWJzY2hlbWEgPSBnZXRTdWJzY2hlbWE7XG5mdW5jdGlvbiBleHRlbmRTdWJzY2hlbWFEYXRhKHN1YnNjaGVtYSwgaXQsIHsgZGF0YVByb3AsIGRhdGFQcm9wVHlwZTogZHBUeXBlLCBkYXRhLCBkYXRhVHlwZXMsIHByb3BlcnR5TmFtZSB9KSB7XG4gICAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCAmJiBkYXRhUHJvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYm90aCBcImRhdGFcIiBhbmQgXCJkYXRhUHJvcFwiIHBhc3NlZCwgb25seSBvbmUgYWxsb3dlZCcpO1xuICAgIH1cbiAgICBjb25zdCB7IGdlbiB9ID0gaXQ7XG4gICAgaWYgKGRhdGFQcm9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgeyBlcnJvclBhdGgsIGRhdGFQYXRoQXJyLCBvcHRzIH0gPSBpdDtcbiAgICAgICAgY29uc3QgbmV4dERhdGEgPSBnZW4ubGV0KFwiZGF0YVwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2l0LmRhdGF9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShkYXRhUHJvcCl9YCwgdHJ1ZSk7XG4gICAgICAgIGRhdGFDb250ZXh0UHJvcHMobmV4dERhdGEpO1xuICAgICAgICBzdWJzY2hlbWEuZXJyb3JQYXRoID0gKDAsIGNvZGVnZW5fMS5zdHIpIGAke2Vycm9yUGF0aH0keygwLCB1dGlsXzEuZ2V0RXJyb3JQYXRoKShkYXRhUHJvcCwgZHBUeXBlLCBvcHRzLmpzUHJvcGVydHlTeW50YXgpfWA7XG4gICAgICAgIHN1YnNjaGVtYS5wYXJlbnREYXRhUHJvcGVydHkgPSAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFQcm9wfWA7XG4gICAgICAgIHN1YnNjaGVtYS5kYXRhUGF0aEFyciA9IFsuLi5kYXRhUGF0aEFyciwgc3Vic2NoZW1hLnBhcmVudERhdGFQcm9wZXJ0eV07XG4gICAgfVxuICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgbmV4dERhdGEgPSBkYXRhIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUgPyBkYXRhIDogZ2VuLmxldChcImRhdGFcIiwgZGF0YSwgdHJ1ZSk7IC8vIHJlcGxhY2VhYmxlIGlmIHVzZWQgb25jZT9cbiAgICAgICAgZGF0YUNvbnRleHRQcm9wcyhuZXh0RGF0YSk7XG4gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHN1YnNjaGVtYS5wcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7XG4gICAgICAgIC8vIFRPRE8gc29tZXRoaW5nIGlzIHBvc3NpYmx5IHdyb25nIGhlcmUgd2l0aCBub3QgY2hhbmdpbmcgcGFyZW50RGF0YVByb3BlcnR5IGFuZCBub3QgYXBwZW5kaW5nIGRhdGFQYXRoQXJyXG4gICAgfVxuICAgIGlmIChkYXRhVHlwZXMpXG4gICAgICAgIHN1YnNjaGVtYS5kYXRhVHlwZXMgPSBkYXRhVHlwZXM7XG4gICAgZnVuY3Rpb24gZGF0YUNvbnRleHRQcm9wcyhfbmV4dERhdGEpIHtcbiAgICAgICAgc3Vic2NoZW1hLmRhdGEgPSBfbmV4dERhdGE7XG4gICAgICAgIHN1YnNjaGVtYS5kYXRhTGV2ZWwgPSBpdC5kYXRhTGV2ZWwgKyAxO1xuICAgICAgICBzdWJzY2hlbWEuZGF0YVR5cGVzID0gW107XG4gICAgICAgIGl0LmRlZmluZWRQcm9wZXJ0aWVzID0gbmV3IFNldCgpO1xuICAgICAgICBzdWJzY2hlbWEucGFyZW50RGF0YSA9IGl0LmRhdGE7XG4gICAgICAgIHN1YnNjaGVtYS5kYXRhTmFtZXMgPSBbLi4uaXQuZGF0YU5hbWVzLCBfbmV4dERhdGFdO1xuICAgIH1cbn1cbmV4cG9ydHMuZXh0ZW5kU3Vic2NoZW1hRGF0YSA9IGV4dGVuZFN1YnNjaGVtYURhdGE7XG5mdW5jdGlvbiBleHRlbmRTdWJzY2hlbWFNb2RlKHN1YnNjaGVtYSwgeyBqdGREaXNjcmltaW5hdG9yLCBqdGRNZXRhZGF0YSwgY29tcG9zaXRlUnVsZSwgY3JlYXRlRXJyb3JzLCBhbGxFcnJvcnMgfSkge1xuICAgIGlmIChjb21wb3NpdGVSdWxlICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHN1YnNjaGVtYS5jb21wb3NpdGVSdWxlID0gY29tcG9zaXRlUnVsZTtcbiAgICBpZiAoY3JlYXRlRXJyb3JzICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHN1YnNjaGVtYS5jcmVhdGVFcnJvcnMgPSBjcmVhdGVFcnJvcnM7XG4gICAgaWYgKGFsbEVycm9ycyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBzdWJzY2hlbWEuYWxsRXJyb3JzID0gYWxsRXJyb3JzO1xuICAgIHN1YnNjaGVtYS5qdGREaXNjcmltaW5hdG9yID0ganRkRGlzY3JpbWluYXRvcjsgLy8gbm90IGluaGVyaXRlZFxuICAgIHN1YnNjaGVtYS5qdGRNZXRhZGF0YSA9IGp0ZE1ldGFkYXRhOyAvLyBub3QgaW5oZXJpdGVkXG59XG5leHBvcnRzLmV4dGVuZFN1YnNjaGVtYU1vZGUgPSBleHRlbmRTdWJzY2hlbWFNb2RlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3Vic2NoZW1hLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFNjaGVtYVJlZnMgPSBleHBvcnRzLnJlc29sdmVVcmwgPSBleHBvcnRzLm5vcm1hbGl6ZUlkID0gZXhwb3J0cy5fZ2V0RnVsbFBhdGggPSBleHBvcnRzLmdldEZ1bGxQYXRoID0gZXhwb3J0cy5pbmxpbmVSZWYgPSB2b2lkIDA7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuY29uc3QgZXF1YWwgPSByZXF1aXJlKFwiZmFzdC1kZWVwLWVxdWFsXCIpO1xuY29uc3QgdHJhdmVyc2UgPSByZXF1aXJlKFwianNvbi1zY2hlbWEtdHJhdmVyc2VcIik7XG4vLyBUT0RPIHJlZmFjdG9yIHRvIHVzZSBrZXl3b3JkIGRlZmluaXRpb25zXG5jb25zdCBTSU1QTEVfSU5MSU5FRCA9IG5ldyBTZXQoW1xuICAgIFwidHlwZVwiLFxuICAgIFwiZm9ybWF0XCIsXG4gICAgXCJwYXR0ZXJuXCIsXG4gICAgXCJtYXhMZW5ndGhcIixcbiAgICBcIm1pbkxlbmd0aFwiLFxuICAgIFwibWF4UHJvcGVydGllc1wiLFxuICAgIFwibWluUHJvcGVydGllc1wiLFxuICAgIFwibWF4SXRlbXNcIixcbiAgICBcIm1pbkl0ZW1zXCIsXG4gICAgXCJtYXhpbXVtXCIsXG4gICAgXCJtaW5pbXVtXCIsXG4gICAgXCJ1bmlxdWVJdGVtc1wiLFxuICAgIFwibXVsdGlwbGVPZlwiLFxuICAgIFwicmVxdWlyZWRcIixcbiAgICBcImVudW1cIixcbiAgICBcImNvbnN0XCIsXG5dKTtcbmZ1bmN0aW9uIGlubGluZVJlZihzY2hlbWEsIGxpbWl0ID0gdHJ1ZSkge1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAobGltaXQgPT09IHRydWUpXG4gICAgICAgIHJldHVybiAhaGFzUmVmKHNjaGVtYSk7XG4gICAgaWYgKCFsaW1pdClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBjb3VudEtleXMoc2NoZW1hKSA8PSBsaW1pdDtcbn1cbmV4cG9ydHMuaW5saW5lUmVmID0gaW5saW5lUmVmO1xuY29uc3QgUkVGX0tFWVdPUkRTID0gbmV3IFNldChbXG4gICAgXCIkcmVmXCIsXG4gICAgXCIkcmVjdXJzaXZlUmVmXCIsXG4gICAgXCIkcmVjdXJzaXZlQW5jaG9yXCIsXG4gICAgXCIkZHluYW1pY1JlZlwiLFxuICAgIFwiJGR5bmFtaWNBbmNob3JcIixcbl0pO1xuZnVuY3Rpb24gaGFzUmVmKHNjaGVtYSkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSkge1xuICAgICAgICBpZiAoUkVGX0tFWVdPUkRTLmhhcyhrZXkpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IHNjaCA9IHNjaGVtYVtrZXldO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2gpICYmIHNjaC5zb21lKGhhc1JlZikpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2ggPT0gXCJvYmplY3RcIiAmJiBoYXNSZWYoc2NoKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBjb3VudEtleXMoc2NoZW1hKSB7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCIkcmVmXCIpXG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIGlmIChTSU1QTEVfSU5MSU5FRC5oYXMoa2V5KSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYVtrZXldID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuZWFjaEl0ZW0pKHNjaGVtYVtrZXldLCAoc2NoKSA9PiAoY291bnQgKz0gY291bnRLZXlzKHNjaCkpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY291bnQgPT09IEluZmluaXR5KVxuICAgICAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuICAgIH1cbiAgICByZXR1cm4gY291bnQ7XG59XG5mdW5jdGlvbiBnZXRGdWxsUGF0aChyZXNvbHZlciwgaWQgPSBcIlwiLCBub3JtYWxpemUpIHtcbiAgICBpZiAobm9ybWFsaXplICE9PSBmYWxzZSlcbiAgICAgICAgaWQgPSBub3JtYWxpemVJZChpZCk7XG4gICAgY29uc3QgcCA9IHJlc29sdmVyLnBhcnNlKGlkKTtcbiAgICByZXR1cm4gX2dldEZ1bGxQYXRoKHJlc29sdmVyLCBwKTtcbn1cbmV4cG9ydHMuZ2V0RnVsbFBhdGggPSBnZXRGdWxsUGF0aDtcbmZ1bmN0aW9uIF9nZXRGdWxsUGF0aChyZXNvbHZlciwgcCkge1xuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSByZXNvbHZlci5zZXJpYWxpemUocCk7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWQuc3BsaXQoXCIjXCIpWzBdICsgXCIjXCI7XG59XG5leHBvcnRzLl9nZXRGdWxsUGF0aCA9IF9nZXRGdWxsUGF0aDtcbmNvbnN0IFRSQUlMSU5HX1NMQVNIX0hBU0ggPSAvI1xcLz8kLztcbmZ1bmN0aW9uIG5vcm1hbGl6ZUlkKGlkKSB7XG4gICAgcmV0dXJuIGlkID8gaWQucmVwbGFjZShUUkFJTElOR19TTEFTSF9IQVNILCBcIlwiKSA6IFwiXCI7XG59XG5leHBvcnRzLm5vcm1hbGl6ZUlkID0gbm9ybWFsaXplSWQ7XG5mdW5jdGlvbiByZXNvbHZlVXJsKHJlc29sdmVyLCBiYXNlSWQsIGlkKSB7XG4gICAgaWQgPSBub3JtYWxpemVJZChpZCk7XG4gICAgcmV0dXJuIHJlc29sdmVyLnJlc29sdmUoYmFzZUlkLCBpZCk7XG59XG5leHBvcnRzLnJlc29sdmVVcmwgPSByZXNvbHZlVXJsO1xuY29uc3QgQU5DSE9SID0gL15bYS16X11bLWEtejAtOS5fXSokL2k7XG5mdW5jdGlvbiBnZXRTY2hlbWFSZWZzKHNjaGVtYSwgYmFzZUlkKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiB7fTtcbiAgICBjb25zdCB7IHNjaGVtYUlkLCB1cmlSZXNvbHZlciB9ID0gdGhpcy5vcHRzO1xuICAgIGNvbnN0IHNjaElkID0gbm9ybWFsaXplSWQoc2NoZW1hW3NjaGVtYUlkXSB8fCBiYXNlSWQpO1xuICAgIGNvbnN0IGJhc2VJZHMgPSB7IFwiXCI6IHNjaElkIH07XG4gICAgY29uc3QgcGF0aFByZWZpeCA9IGdldEZ1bGxQYXRoKHVyaVJlc29sdmVyLCBzY2hJZCwgZmFsc2UpO1xuICAgIGNvbnN0IGxvY2FsUmVmcyA9IHt9O1xuICAgIGNvbnN0IHNjaGVtYVJlZnMgPSBuZXcgU2V0KCk7XG4gICAgdHJhdmVyc2Uoc2NoZW1hLCB7IGFsbEtleXM6IHRydWUgfSwgKHNjaCwganNvblB0ciwgXywgcGFyZW50SnNvblB0cikgPT4ge1xuICAgICAgICBpZiAocGFyZW50SnNvblB0ciA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGhQcmVmaXggKyBqc29uUHRyO1xuICAgICAgICBsZXQgYmFzZUlkID0gYmFzZUlkc1twYXJlbnRKc29uUHRyXTtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hbc2NoZW1hSWRdID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICBiYXNlSWQgPSBhZGRSZWYuY2FsbCh0aGlzLCBzY2hbc2NoZW1hSWRdKTtcbiAgICAgICAgYWRkQW5jaG9yLmNhbGwodGhpcywgc2NoLiRhbmNob3IpO1xuICAgICAgICBhZGRBbmNob3IuY2FsbCh0aGlzLCBzY2guJGR5bmFtaWNBbmNob3IpO1xuICAgICAgICBiYXNlSWRzW2pzb25QdHJdID0gYmFzZUlkO1xuICAgICAgICBmdW5jdGlvbiBhZGRSZWYocmVmKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgICAgICAgICBjb25zdCBfcmVzb2x2ZSA9IHRoaXMub3B0cy51cmlSZXNvbHZlci5yZXNvbHZlO1xuICAgICAgICAgICAgcmVmID0gbm9ybWFsaXplSWQoYmFzZUlkID8gX3Jlc29sdmUoYmFzZUlkLCByZWYpIDogcmVmKTtcbiAgICAgICAgICAgIGlmIChzY2hlbWFSZWZzLmhhcyhyZWYpKVxuICAgICAgICAgICAgICAgIHRocm93IGFtYmlndW9zKHJlZik7XG4gICAgICAgICAgICBzY2hlbWFSZWZzLmFkZChyZWYpO1xuICAgICAgICAgICAgbGV0IHNjaE9yUmVmID0gdGhpcy5yZWZzW3JlZl07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNjaE9yUmVmID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgc2NoT3JSZWYgPSB0aGlzLnJlZnNbc2NoT3JSZWZdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hPclJlZiA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tBbWJpZ3Vvc1JlZihzY2gsIHNjaE9yUmVmLnNjaGVtYSwgcmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlZiAhPT0gbm9ybWFsaXplSWQoZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZlswXSA9PT0gXCIjXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tBbWJpZ3Vvc1JlZihzY2gsIGxvY2FsUmVmc1tyZWZdLCByZWYpO1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFJlZnNbcmVmXSA9IHNjaDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmc1tyZWZdID0gZnVsbFBhdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlZjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhZGRBbmNob3IoYW5jaG9yKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFuY2hvciA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFBTkNIT1IudGVzdChhbmNob3IpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgYW5jaG9yIFwiJHthbmNob3J9XCJgKTtcbiAgICAgICAgICAgICAgICBhZGRSZWYuY2FsbCh0aGlzLCBgIyR7YW5jaG9yfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGxvY2FsUmVmcztcbiAgICBmdW5jdGlvbiBjaGVja0FtYmlndW9zUmVmKHNjaDEsIHNjaDIsIHJlZikge1xuICAgICAgICBpZiAoc2NoMiAhPT0gdW5kZWZpbmVkICYmICFlcXVhbChzY2gxLCBzY2gyKSlcbiAgICAgICAgICAgIHRocm93IGFtYmlndW9zKHJlZik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFtYmlndW9zKHJlZikge1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKGByZWZlcmVuY2UgXCIke3JlZn1cIiByZXNvbHZlcyB0byBtb3JlIHRoYW4gb25lIHNjaGVtYWApO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0U2NoZW1hUmVmcyA9IGdldFNjaGVtYVJlZnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXNvbHZlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldERhdGEgPSBleHBvcnRzLktleXdvcmRDeHQgPSBleHBvcnRzLnZhbGlkYXRlRnVuY3Rpb25Db2RlID0gdm9pZCAwO1xuY29uc3QgYm9vbFNjaGVtYV8xID0gcmVxdWlyZShcIi4vYm9vbFNjaGVtYVwiKTtcbmNvbnN0IGRhdGFUeXBlXzEgPSByZXF1aXJlKFwiLi9kYXRhVHlwZVwiKTtcbmNvbnN0IGFwcGxpY2FiaWxpdHlfMSA9IHJlcXVpcmUoXCIuL2FwcGxpY2FiaWxpdHlcIik7XG5jb25zdCBkYXRhVHlwZV8yID0gcmVxdWlyZShcIi4vZGF0YVR5cGVcIik7XG5jb25zdCBkZWZhdWx0c18xID0gcmVxdWlyZShcIi4vZGVmYXVsdHNcIik7XG5jb25zdCBrZXl3b3JkXzEgPSByZXF1aXJlKFwiLi9rZXl3b3JkXCIpO1xuY29uc3Qgc3Vic2NoZW1hXzEgPSByZXF1aXJlKFwiLi9zdWJzY2hlbWFcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vbmFtZXNcIik7XG5jb25zdCByZXNvbHZlXzEgPSByZXF1aXJlKFwiLi4vcmVzb2x2ZVwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vZXJyb3JzXCIpO1xuLy8gc2NoZW1hIGNvbXBpbGF0aW9uIC0gZ2VuZXJhdGVzIHZhbGlkYXRpb24gZnVuY3Rpb24sIHN1YnNjaGVtYUNvZGUgKGJlbG93KSBpcyB1c2VkIGZvciBzdWJzY2hlbWFzXG5mdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uQ29kZShpdCkge1xuICAgIGlmIChpc1NjaGVtYU9iaihpdCkpIHtcbiAgICAgICAgY2hlY2tLZXl3b3JkcyhpdCk7XG4gICAgICAgIGlmIChzY2hlbWFDeHRIYXNSdWxlcyhpdCkpIHtcbiAgICAgICAgICAgIHRvcFNjaGVtYU9iakNvZGUoaXQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhbGlkYXRlRnVuY3Rpb24oaXQsICgpID0+ICgwLCBib29sU2NoZW1hXzEudG9wQm9vbE9yRW1wdHlTY2hlbWEpKGl0KSk7XG59XG5leHBvcnRzLnZhbGlkYXRlRnVuY3Rpb25Db2RlID0gdmFsaWRhdGVGdW5jdGlvbkNvZGU7XG5mdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uKHsgZ2VuLCB2YWxpZGF0ZU5hbWUsIHNjaGVtYSwgc2NoZW1hRW52LCBvcHRzIH0sIGJvZHkpIHtcbiAgICBpZiAob3B0cy5jb2RlLmVzNSkge1xuICAgICAgICBnZW4uZnVuYyh2YWxpZGF0ZU5hbWUsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LmRhdGF9LCAke25hbWVzXzEuZGVmYXVsdC52YWxDeHR9YCwgc2NoZW1hRW52LiRhc3luYywgKCkgPT4ge1xuICAgICAgICAgICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgXCJ1c2Ugc3RyaWN0XCI7ICR7ZnVuY1NvdXJjZVVybChzY2hlbWEsIG9wdHMpfWApO1xuICAgICAgICAgICAgZGVzdHJ1Y3R1cmVWYWxDeHRFUzUoZ2VuLCBvcHRzKTtcbiAgICAgICAgICAgIGdlbi5jb2RlKGJvZHkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdlbi5mdW5jKHZhbGlkYXRlTmFtZSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZGF0YX0sICR7ZGVzdHJ1Y3R1cmVWYWxDeHQob3B0cyl9YCwgc2NoZW1hRW52LiRhc3luYywgKCkgPT4gZ2VuLmNvZGUoZnVuY1NvdXJjZVVybChzY2hlbWEsIG9wdHMpKS5jb2RlKGJvZHkpKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZXN0cnVjdHVyZVZhbEN4dChvcHRzKSB7XG4gICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYHske25hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGh9PVwiXCIsICR7bmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGF9LCAke25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHl9LCAke25hbWVzXzEuZGVmYXVsdC5yb290RGF0YX09JHtuYW1lc18xLmRlZmF1bHQuZGF0YX0ke29wdHMuZHluYW1pY1JlZiA/ICgwLCBjb2RlZ2VuXzEuXykgYCwgJHtuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnN9PXt9YCA6IGNvZGVnZW5fMS5uaWx9fT17fWA7XG59XG5mdW5jdGlvbiBkZXN0cnVjdHVyZVZhbEN4dEVTNShnZW4sIG9wdHMpIHtcbiAgICBnZW4uaWYobmFtZXNfMS5kZWZhdWx0LnZhbEN4dCwgKCkgPT4ge1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZhbEN4dH0uJHtuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRofWApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52YWxDeHR9LiR7bmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGF9YCk7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGFQcm9wZXJ0eSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fS4ke25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHl9YCk7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52YWxDeHR9LiR7bmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhfWApO1xuICAgICAgICBpZiAob3B0cy5keW5hbWljUmVmKVxuICAgICAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZhbEN4dH0uJHtuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnN9YCk7XG4gICAgfSwgKCkgPT4ge1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsICgwLCBjb2RlZ2VuXzEuXykgYFwiXCJgKTtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgdW5kZWZpbmVkYCk7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGFQcm9wZXJ0eSwgKDAsIGNvZGVnZW5fMS5fKSBgdW5kZWZpbmVkYCk7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhLCBuYW1lc18xLmRlZmF1bHQuZGF0YSk7XG4gICAgICAgIGlmIChvcHRzLmR5bmFtaWNSZWYpXG4gICAgICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5keW5hbWljQW5jaG9ycywgKDAsIGNvZGVnZW5fMS5fKSBge31gKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHRvcFNjaGVtYU9iakNvZGUoaXQpIHtcbiAgICBjb25zdCB7IHNjaGVtYSwgb3B0cywgZ2VuIH0gPSBpdDtcbiAgICB2YWxpZGF0ZUZ1bmN0aW9uKGl0LCAoKSA9PiB7XG4gICAgICAgIGlmIChvcHRzLiRjb21tZW50ICYmIHNjaGVtYS4kY29tbWVudClcbiAgICAgICAgICAgIGNvbW1lbnRLZXl3b3JkKGl0KTtcbiAgICAgICAgY2hlY2tOb0RlZmF1bHQoaXQpO1xuICAgICAgICBnZW4ubGV0KG5hbWVzXzEuZGVmYXVsdC52RXJyb3JzLCBudWxsKTtcbiAgICAgICAgZ2VuLmxldChuYW1lc18xLmRlZmF1bHQuZXJyb3JzLCAwKTtcbiAgICAgICAgaWYgKG9wdHMudW5ldmFsdWF0ZWQpXG4gICAgICAgICAgICByZXNldEV2YWx1YXRlZChpdCk7XG4gICAgICAgIHR5cGVBbmRLZXl3b3JkcyhpdCk7XG4gICAgICAgIHJldHVyblJlc3VsdHMoaXQpO1xuICAgIH0pO1xuICAgIHJldHVybjtcbn1cbmZ1bmN0aW9uIHJlc2V0RXZhbHVhdGVkKGl0KSB7XG4gICAgLy8gVE9ETyBtYXliZSBzb21lIGhvb2sgdG8gZXhlY3V0ZSBpdCBpbiB0aGUgZW5kIHRvIGNoZWNrIHdoZXRoZXIgcHJvcHMvaXRlbXMgYXJlIE5hbWUsIGFzIGluIGFzc2lnbkV2YWx1YXRlZFxuICAgIGNvbnN0IHsgZ2VuLCB2YWxpZGF0ZU5hbWUgfSA9IGl0O1xuICAgIGl0LmV2YWx1YXRlZCA9IGdlbi5jb25zdChcImV2YWx1YXRlZFwiLCAoMCwgY29kZWdlbl8xLl8pIGAke3ZhbGlkYXRlTmFtZX0uZXZhbHVhdGVkYCk7XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuZXZhbHVhdGVkfS5keW5hbWljUHJvcHNgLCAoKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuZXZhbHVhdGVkfS5wcm9wc2AsICgwLCBjb2RlZ2VuXzEuXykgYHVuZGVmaW5lZGApKTtcbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5ldmFsdWF0ZWR9LmR5bmFtaWNJdGVtc2AsICgpID0+IGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5ldmFsdWF0ZWR9Lml0ZW1zYCwgKDAsIGNvZGVnZW5fMS5fKSBgdW5kZWZpbmVkYCkpO1xufVxuZnVuY3Rpb24gZnVuY1NvdXJjZVVybChzY2hlbWEsIG9wdHMpIHtcbiAgICBjb25zdCBzY2hJZCA9IHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIiAmJiBzY2hlbWFbb3B0cy5zY2hlbWFJZF07XG4gICAgcmV0dXJuIHNjaElkICYmIChvcHRzLmNvZGUuc291cmNlIHx8IG9wdHMuY29kZS5wcm9jZXNzKSA/ICgwLCBjb2RlZ2VuXzEuXykgYC8qIyBzb3VyY2VVUkw9JHtzY2hJZH0gKi9gIDogY29kZWdlbl8xLm5pbDtcbn1cbi8vIHNjaGVtYSBjb21waWxhdGlvbiAtIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCByZWN1cnNpdmVseSB0byBnZW5lcmF0ZSBjb2RlIGZvciBzdWItc2NoZW1hc1xuZnVuY3Rpb24gc3Vic2NoZW1hQ29kZShpdCwgdmFsaWQpIHtcbiAgICBpZiAoaXNTY2hlbWFPYmooaXQpKSB7XG4gICAgICAgIGNoZWNrS2V5d29yZHMoaXQpO1xuICAgICAgICBpZiAoc2NoZW1hQ3h0SGFzUnVsZXMoaXQpKSB7XG4gICAgICAgICAgICBzdWJTY2hlbWFPYmpDb2RlKGl0LCB2YWxpZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgKDAsIGJvb2xTY2hlbWFfMS5ib29sT3JFbXB0eVNjaGVtYSkoaXQsIHZhbGlkKTtcbn1cbmZ1bmN0aW9uIHNjaGVtYUN4dEhhc1J1bGVzKHsgc2NoZW1hLCBzZWxmIH0pIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgcmV0dXJuICFzY2hlbWE7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKVxuICAgICAgICBpZiAoc2VsZi5SVUxFUy5hbGxba2V5XSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzU2NoZW1hT2JqKGl0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBpdC5zY2hlbWEgIT0gXCJib29sZWFuXCI7XG59XG5mdW5jdGlvbiBzdWJTY2hlbWFPYmpDb2RlKGl0LCB2YWxpZCkge1xuICAgIGNvbnN0IHsgc2NoZW1hLCBnZW4sIG9wdHMgfSA9IGl0O1xuICAgIGlmIChvcHRzLiRjb21tZW50ICYmIHNjaGVtYS4kY29tbWVudClcbiAgICAgICAgY29tbWVudEtleXdvcmQoaXQpO1xuICAgIHVwZGF0ZUNvbnRleHQoaXQpO1xuICAgIGNoZWNrQXN5bmNTY2hlbWEoaXQpO1xuICAgIGNvbnN0IGVycnNDb3VudCA9IGdlbi5jb25zdChcIl9lcnJzXCIsIG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMpO1xuICAgIHR5cGVBbmRLZXl3b3JkcyhpdCwgZXJyc0NvdW50KTtcbiAgICAvLyBUT0RPIHZhclxuICAgIGdlbi52YXIodmFsaWQsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyc0NvdW50fSA9PT0gJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfWApO1xufVxuZnVuY3Rpb24gY2hlY2tLZXl3b3JkcyhpdCkge1xuICAgICgwLCB1dGlsXzEuY2hlY2tVbmtub3duUnVsZXMpKGl0KTtcbiAgICBjaGVja1JlZnNBbmRLZXl3b3JkcyhpdCk7XG59XG5mdW5jdGlvbiB0eXBlQW5kS2V5d29yZHMoaXQsIGVycnNDb3VudCkge1xuICAgIGlmIChpdC5vcHRzLmp0ZClcbiAgICAgICAgcmV0dXJuIHNjaGVtYUtleXdvcmRzKGl0LCBbXSwgZmFsc2UsIGVycnNDb3VudCk7XG4gICAgY29uc3QgdHlwZXMgPSAoMCwgZGF0YVR5cGVfMS5nZXRTY2hlbWFUeXBlcykoaXQuc2NoZW1hKTtcbiAgICBjb25zdCBjaGVja2VkVHlwZXMgPSAoMCwgZGF0YVR5cGVfMS5jb2VyY2VBbmRDaGVja0RhdGFUeXBlKShpdCwgdHlwZXMpO1xuICAgIHNjaGVtYUtleXdvcmRzKGl0LCB0eXBlcywgIWNoZWNrZWRUeXBlcywgZXJyc0NvdW50KTtcbn1cbmZ1bmN0aW9uIGNoZWNrUmVmc0FuZEtleXdvcmRzKGl0KSB7XG4gICAgY29uc3QgeyBzY2hlbWEsIGVyclNjaGVtYVBhdGgsIG9wdHMsIHNlbGYgfSA9IGl0O1xuICAgIGlmIChzY2hlbWEuJHJlZiAmJiBvcHRzLmlnbm9yZUtleXdvcmRzV2l0aFJlZiAmJiAoMCwgdXRpbF8xLnNjaGVtYUhhc1J1bGVzQnV0UmVmKShzY2hlbWEsIHNlbGYuUlVMRVMpKSB7XG4gICAgICAgIHNlbGYubG9nZ2VyLndhcm4oYCRyZWY6IGtleXdvcmRzIGlnbm9yZWQgaW4gc2NoZW1hIGF0IHBhdGggXCIke2VyclNjaGVtYVBhdGh9XCJgKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjaGVja05vRGVmYXVsdChpdCkge1xuICAgIGNvbnN0IHsgc2NoZW1hLCBvcHRzIH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hLmRlZmF1bHQgIT09IHVuZGVmaW5lZCAmJiBvcHRzLnVzZURlZmF1bHRzICYmIG9wdHMuc3RyaWN0U2NoZW1hKSB7XG4gICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgXCJkZWZhdWx0IGlzIGlnbm9yZWQgaW4gdGhlIHNjaGVtYSByb290XCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRleHQoaXQpIHtcbiAgICBjb25zdCBzY2hJZCA9IGl0LnNjaGVtYVtpdC5vcHRzLnNjaGVtYUlkXTtcbiAgICBpZiAoc2NoSWQpXG4gICAgICAgIGl0LmJhc2VJZCA9ICgwLCByZXNvbHZlXzEucmVzb2x2ZVVybCkoaXQub3B0cy51cmlSZXNvbHZlciwgaXQuYmFzZUlkLCBzY2hJZCk7XG59XG5mdW5jdGlvbiBjaGVja0FzeW5jU2NoZW1hKGl0KSB7XG4gICAgaWYgKGl0LnNjaGVtYS4kYXN5bmMgJiYgIWl0LnNjaGVtYUVudi4kYXN5bmMpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFzeW5jIHNjaGVtYSBpbiBzeW5jIHNjaGVtYVwiKTtcbn1cbmZ1bmN0aW9uIGNvbW1lbnRLZXl3b3JkKHsgZ2VuLCBzY2hlbWFFbnYsIHNjaGVtYSwgZXJyU2NoZW1hUGF0aCwgb3B0cyB9KSB7XG4gICAgY29uc3QgbXNnID0gc2NoZW1hLiRjb21tZW50O1xuICAgIGlmIChvcHRzLiRjb21tZW50ID09PSB0cnVlKSB7XG4gICAgICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnNlbGZ9LmxvZ2dlci5sb2coJHttc2d9KWApO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygb3B0cy4kY29tbWVudCA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hUGF0aCA9ICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtlcnJTY2hlbWFQYXRofS8kY29tbWVudGA7XG4gICAgICAgIGNvbnN0IHJvb3ROYW1lID0gZ2VuLnNjb3BlVmFsdWUoXCJyb290XCIsIHsgcmVmOiBzY2hlbWFFbnYucm9vdCB9KTtcbiAgICAgICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuc2VsZn0ub3B0cy4kY29tbWVudCgke21zZ30sICR7c2NoZW1hUGF0aH0sICR7cm9vdE5hbWV9LnNjaGVtYSlgKTtcbiAgICB9XG59XG5mdW5jdGlvbiByZXR1cm5SZXN1bHRzKGl0KSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYUVudiwgdmFsaWRhdGVOYW1lLCBWYWxpZGF0aW9uRXJyb3IsIG9wdHMgfSA9IGl0O1xuICAgIGlmIChzY2hlbWFFbnYuJGFzeW5jKSB7XG4gICAgICAgIC8vIFRPRE8gYXNzaWduIHVuZXZhbHVhdGVkXG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5lcnJvcnN9ID09PSAwYCwgKCkgPT4gZ2VuLnJldHVybihuYW1lc18xLmRlZmF1bHQuZGF0YSksICgpID0+IGdlbi50aHJvdygoMCwgY29kZWdlbl8xLl8pIGBuZXcgJHtWYWxpZGF0aW9uRXJyb3J9KCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9KWApKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZGF0ZU5hbWV9LmVycm9yc2AsIG5hbWVzXzEuZGVmYXVsdC52RXJyb3JzKTtcbiAgICAgICAgaWYgKG9wdHMudW5ldmFsdWF0ZWQpXG4gICAgICAgICAgICBhc3NpZ25FdmFsdWF0ZWQoaXQpO1xuICAgICAgICBnZW4ucmV0dXJuKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LmVycm9yc30gPT09IDBgKTtcbiAgICB9XG59XG5mdW5jdGlvbiBhc3NpZ25FdmFsdWF0ZWQoeyBnZW4sIGV2YWx1YXRlZCwgcHJvcHMsIGl0ZW1zIH0pIHtcbiAgICBpZiAocHJvcHMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSlcbiAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2V2YWx1YXRlZH0ucHJvcHNgLCBwcm9wcyk7XG4gICAgaWYgKGl0ZW1zIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUpXG4gICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtldmFsdWF0ZWR9Lml0ZW1zYCwgaXRlbXMpO1xufVxuZnVuY3Rpb24gc2NoZW1hS2V5d29yZHMoaXQsIHR5cGVzLCB0eXBlRXJyb3JzLCBlcnJzQ291bnQpIHtcbiAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBhbGxFcnJvcnMsIG9wdHMsIHNlbGYgfSA9IGl0O1xuICAgIGNvbnN0IHsgUlVMRVMgfSA9IHNlbGY7XG4gICAgaWYgKHNjaGVtYS4kcmVmICYmIChvcHRzLmlnbm9yZUtleXdvcmRzV2l0aFJlZiB8fCAhKDAsIHV0aWxfMS5zY2hlbWFIYXNSdWxlc0J1dFJlZikoc2NoZW1hLCBSVUxFUykpKSB7XG4gICAgICAgIGdlbi5ibG9jaygoKSA9PiBrZXl3b3JkQ29kZShpdCwgXCIkcmVmXCIsIFJVTEVTLmFsbC4kcmVmLmRlZmluaXRpb24pKTsgLy8gVE9ETyB0eXBlY2FzdFxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghb3B0cy5qdGQpXG4gICAgICAgIGNoZWNrU3RyaWN0VHlwZXMoaXQsIHR5cGVzKTtcbiAgICBnZW4uYmxvY2soKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIFJVTEVTLnJ1bGVzKVxuICAgICAgICAgICAgZ3JvdXBLZXl3b3Jkcyhncm91cCk7XG4gICAgICAgIGdyb3VwS2V5d29yZHMoUlVMRVMucG9zdCk7XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gZ3JvdXBLZXl3b3Jkcyhncm91cCkge1xuICAgICAgICBpZiAoISgwLCBhcHBsaWNhYmlsaXR5XzEuc2hvdWxkVXNlR3JvdXApKHNjaGVtYSwgZ3JvdXApKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoZ3JvdXAudHlwZSkge1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBkYXRhVHlwZV8yLmNoZWNrRGF0YVR5cGUpKGdyb3VwLnR5cGUsIGRhdGEsIG9wdHMuc3RyaWN0TnVtYmVycykpO1xuICAgICAgICAgICAgaXRlcmF0ZUtleXdvcmRzKGl0LCBncm91cCk7XG4gICAgICAgICAgICBpZiAodHlwZXMubGVuZ3RoID09PSAxICYmIHR5cGVzWzBdID09PSBncm91cC50eXBlICYmIHR5cGVFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBnZW4uZWxzZSgpO1xuICAgICAgICAgICAgICAgICgwLCBkYXRhVHlwZV8yLnJlcG9ydFR5cGVFcnJvcikoaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2VuLmVuZElmKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpdGVyYXRlS2V5d29yZHMoaXQsIGdyb3VwKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPIG1ha2UgaXQgXCJva1wiIGNhbGw/XG4gICAgICAgIGlmICghYWxsRXJyb3JzKVxuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LmVycm9yc30gPT09ICR7ZXJyc0NvdW50IHx8IDB9YCk7XG4gICAgfVxufVxuZnVuY3Rpb24gaXRlcmF0ZUtleXdvcmRzKGl0LCBncm91cCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIG9wdHM6IHsgdXNlRGVmYXVsdHMgfSwgfSA9IGl0O1xuICAgIGlmICh1c2VEZWZhdWx0cylcbiAgICAgICAgKDAsIGRlZmF1bHRzXzEuYXNzaWduRGVmYXVsdHMpKGl0LCBncm91cC50eXBlKTtcbiAgICBnZW4uYmxvY2soKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgZ3JvdXAucnVsZXMpIHtcbiAgICAgICAgICAgIGlmICgoMCwgYXBwbGljYWJpbGl0eV8xLnNob3VsZFVzZVJ1bGUpKHNjaGVtYSwgcnVsZSkpIHtcbiAgICAgICAgICAgICAgICBrZXl3b3JkQ29kZShpdCwgcnVsZS5rZXl3b3JkLCBydWxlLmRlZmluaXRpb24sIGdyb3VwLnR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiBjaGVja1N0cmljdFR5cGVzKGl0LCB0eXBlcykge1xuICAgIGlmIChpdC5zY2hlbWFFbnYubWV0YSB8fCAhaXQub3B0cy5zdHJpY3RUeXBlcylcbiAgICAgICAgcmV0dXJuO1xuICAgIGNoZWNrQ29udGV4dFR5cGVzKGl0LCB0eXBlcyk7XG4gICAgaWYgKCFpdC5vcHRzLmFsbG93VW5pb25UeXBlcylcbiAgICAgICAgY2hlY2tNdWx0aXBsZVR5cGVzKGl0LCB0eXBlcyk7XG4gICAgY2hlY2tLZXl3b3JkVHlwZXMoaXQsIGl0LmRhdGFUeXBlcyk7XG59XG5mdW5jdGlvbiBjaGVja0NvbnRleHRUeXBlcyhpdCwgdHlwZXMpIHtcbiAgICBpZiAoIXR5cGVzLmxlbmd0aClcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmICghaXQuZGF0YVR5cGVzLmxlbmd0aCkge1xuICAgICAgICBpdC5kYXRhVHlwZXMgPSB0eXBlcztcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0eXBlcy5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICAgIGlmICghaW5jbHVkZXNUeXBlKGl0LmRhdGFUeXBlcywgdCkpIHtcbiAgICAgICAgICAgIHN0cmljdFR5cGVzRXJyb3IoaXQsIGB0eXBlIFwiJHt0fVwiIG5vdCBhbGxvd2VkIGJ5IGNvbnRleHQgXCIke2l0LmRhdGFUeXBlcy5qb2luKFwiLFwiKX1cImApO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgbmFycm93U2NoZW1hVHlwZXMoaXQsIHR5cGVzKTtcbn1cbmZ1bmN0aW9uIGNoZWNrTXVsdGlwbGVUeXBlcyhpdCwgdHMpIHtcbiAgICBpZiAodHMubGVuZ3RoID4gMSAmJiAhKHRzLmxlbmd0aCA9PT0gMiAmJiB0cy5pbmNsdWRlcyhcIm51bGxcIikpKSB7XG4gICAgICAgIHN0cmljdFR5cGVzRXJyb3IoaXQsIFwidXNlIGFsbG93VW5pb25UeXBlcyB0byBhbGxvdyB1bmlvbiB0eXBlIGtleXdvcmRcIik7XG4gICAgfVxufVxuZnVuY3Rpb24gY2hlY2tLZXl3b3JkVHlwZXMoaXQsIHRzKSB7XG4gICAgY29uc3QgcnVsZXMgPSBpdC5zZWxmLlJVTEVTLmFsbDtcbiAgICBmb3IgKGNvbnN0IGtleXdvcmQgaW4gcnVsZXMpIHtcbiAgICAgICAgY29uc3QgcnVsZSA9IHJ1bGVzW2tleXdvcmRdO1xuICAgICAgICBpZiAodHlwZW9mIHJ1bGUgPT0gXCJvYmplY3RcIiAmJiAoMCwgYXBwbGljYWJpbGl0eV8xLnNob3VsZFVzZVJ1bGUpKGl0LnNjaGVtYSwgcnVsZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdHlwZSB9ID0gcnVsZS5kZWZpbml0aW9uO1xuICAgICAgICAgICAgaWYgKHR5cGUubGVuZ3RoICYmICF0eXBlLnNvbWUoKHQpID0+IGhhc0FwcGxpY2FibGVUeXBlKHRzLCB0KSkpIHtcbiAgICAgICAgICAgICAgICBzdHJpY3RUeXBlc0Vycm9yKGl0LCBgbWlzc2luZyB0eXBlIFwiJHt0eXBlLmpvaW4oXCIsXCIpfVwiIGZvciBrZXl3b3JkIFwiJHtrZXl3b3JkfVwiYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBoYXNBcHBsaWNhYmxlVHlwZShzY2hUcywga3dkVCkge1xuICAgIHJldHVybiBzY2hUcy5pbmNsdWRlcyhrd2RUKSB8fCAoa3dkVCA9PT0gXCJudW1iZXJcIiAmJiBzY2hUcy5pbmNsdWRlcyhcImludGVnZXJcIikpO1xufVxuZnVuY3Rpb24gaW5jbHVkZXNUeXBlKHRzLCB0KSB7XG4gICAgcmV0dXJuIHRzLmluY2x1ZGVzKHQpIHx8ICh0ID09PSBcImludGVnZXJcIiAmJiB0cy5pbmNsdWRlcyhcIm51bWJlclwiKSk7XG59XG5mdW5jdGlvbiBuYXJyb3dTY2hlbWFUeXBlcyhpdCwgd2l0aFR5cGVzKSB7XG4gICAgY29uc3QgdHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHQgb2YgaXQuZGF0YVR5cGVzKSB7XG4gICAgICAgIGlmIChpbmNsdWRlc1R5cGUod2l0aFR5cGVzLCB0KSlcbiAgICAgICAgICAgIHRzLnB1c2godCk7XG4gICAgICAgIGVsc2UgaWYgKHdpdGhUeXBlcy5pbmNsdWRlcyhcImludGVnZXJcIikgJiYgdCA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgIHRzLnB1c2goXCJpbnRlZ2VyXCIpO1xuICAgIH1cbiAgICBpdC5kYXRhVHlwZXMgPSB0cztcbn1cbmZ1bmN0aW9uIHN0cmljdFR5cGVzRXJyb3IoaXQsIG1zZykge1xuICAgIGNvbnN0IHNjaGVtYVBhdGggPSBpdC5zY2hlbWFFbnYuYmFzZUlkICsgaXQuZXJyU2NoZW1hUGF0aDtcbiAgICBtc2cgKz0gYCBhdCBcIiR7c2NoZW1hUGF0aH1cIiAoc3RyaWN0VHlwZXMpYDtcbiAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIG1zZywgaXQub3B0cy5zdHJpY3RUeXBlcyk7XG59XG5jbGFzcyBLZXl3b3JkQ3h0IHtcbiAgICBjb25zdHJ1Y3RvcihpdCwgZGVmLCBrZXl3b3JkKSB7XG4gICAgICAgICgwLCBrZXl3b3JkXzEudmFsaWRhdGVLZXl3b3JkVXNhZ2UpKGl0LCBkZWYsIGtleXdvcmQpO1xuICAgICAgICB0aGlzLmdlbiA9IGl0LmdlbjtcbiAgICAgICAgdGhpcy5hbGxFcnJvcnMgPSBpdC5hbGxFcnJvcnM7XG4gICAgICAgIHRoaXMua2V5d29yZCA9IGtleXdvcmQ7XG4gICAgICAgIHRoaXMuZGF0YSA9IGl0LmRhdGE7XG4gICAgICAgIHRoaXMuc2NoZW1hID0gaXQuc2NoZW1hW2tleXdvcmRdO1xuICAgICAgICB0aGlzLiRkYXRhID0gZGVmLiRkYXRhICYmIGl0Lm9wdHMuJGRhdGEgJiYgdGhpcy5zY2hlbWEgJiYgdGhpcy5zY2hlbWEuJGRhdGE7XG4gICAgICAgIHRoaXMuc2NoZW1hVmFsdWUgPSAoMCwgdXRpbF8xLnNjaGVtYVJlZk9yVmFsKShpdCwgdGhpcy5zY2hlbWEsIGtleXdvcmQsIHRoaXMuJGRhdGEpO1xuICAgICAgICB0aGlzLnNjaGVtYVR5cGUgPSBkZWYuc2NoZW1hVHlwZTtcbiAgICAgICAgdGhpcy5wYXJlbnRTY2hlbWEgPSBpdC5zY2hlbWE7XG4gICAgICAgIHRoaXMucGFyYW1zID0ge307XG4gICAgICAgIHRoaXMuaXQgPSBpdDtcbiAgICAgICAgdGhpcy5kZWYgPSBkZWY7XG4gICAgICAgIGlmICh0aGlzLiRkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnNjaGVtYUNvZGUgPSBpdC5nZW4uY29uc3QoXCJ2U2NoZW1hXCIsIGdldERhdGEodGhpcy4kZGF0YSwgaXQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2NoZW1hQ29kZSA9IHRoaXMuc2NoZW1hVmFsdWU7XG4gICAgICAgICAgICBpZiAoISgwLCBrZXl3b3JkXzEudmFsaWRTY2hlbWFUeXBlKSh0aGlzLnNjaGVtYSwgZGVmLnNjaGVtYVR5cGUsIGRlZi5hbGxvd1VuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7a2V5d29yZH0gdmFsdWUgbXVzdCBiZSAke0pTT04uc3RyaW5naWZ5KGRlZi5zY2hlbWFUeXBlKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJjb2RlXCIgaW4gZGVmID8gZGVmLnRyYWNrRXJyb3JzIDogZGVmLmVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyc0NvdW50ID0gaXQuZ2VuLmNvbnN0KFwiX2VycnNcIiwgbmFtZXNfMS5kZWZhdWx0LmVycm9ycyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0KGNvbmRpdGlvbiwgc3VjY2Vzc0FjdGlvbiwgZmFpbEFjdGlvbikge1xuICAgICAgICB0aGlzLmZhaWxSZXN1bHQoKDAsIGNvZGVnZW5fMS5ub3QpKGNvbmRpdGlvbiksIHN1Y2Nlc3NBY3Rpb24sIGZhaWxBY3Rpb24pO1xuICAgIH1cbiAgICBmYWlsUmVzdWx0KGNvbmRpdGlvbiwgc3VjY2Vzc0FjdGlvbiwgZmFpbEFjdGlvbikge1xuICAgICAgICB0aGlzLmdlbi5pZihjb25kaXRpb24pO1xuICAgICAgICBpZiAoZmFpbEFjdGlvbilcbiAgICAgICAgICAgIGZhaWxBY3Rpb24oKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5lcnJvcigpO1xuICAgICAgICBpZiAoc3VjY2Vzc0FjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5nZW4uZWxzZSgpO1xuICAgICAgICAgICAgc3VjY2Vzc0FjdGlvbigpO1xuICAgICAgICAgICAgaWYgKHRoaXMuYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuLmVuZElmKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgdGhpcy5nZW4uZW5kSWYoKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmdlbi5lbHNlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGFzcyhjb25kaXRpb24sIGZhaWxBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5mYWlsUmVzdWx0KCgwLCBjb2RlZ2VuXzEubm90KShjb25kaXRpb24pLCB1bmRlZmluZWQsIGZhaWxBY3Rpb24pO1xuICAgIH1cbiAgICBmYWlsKGNvbmRpdGlvbikge1xuICAgICAgICBpZiAoY29uZGl0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3IoKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgdGhpcy5nZW4uaWYoZmFsc2UpOyAvLyB0aGlzIGJyYW5jaCB3aWxsIGJlIHJlbW92ZWQgYnkgZ2VuLm9wdGltaXplXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZW4uaWYoY29uZGl0aW9uKTtcbiAgICAgICAgdGhpcy5lcnJvcigpO1xuICAgICAgICBpZiAodGhpcy5hbGxFcnJvcnMpXG4gICAgICAgICAgICB0aGlzLmdlbi5lbmRJZigpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLmdlbi5lbHNlKCk7XG4gICAgfVxuICAgIGZhaWwkZGF0YShjb25kaXRpb24pIHtcbiAgICAgICAgaWYgKCF0aGlzLiRkYXRhKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmFpbChjb25kaXRpb24pO1xuICAgICAgICBjb25zdCB7IHNjaGVtYUNvZGUgfSA9IHRoaXM7XG4gICAgICAgIHRoaXMuZmFpbCgoMCwgY29kZWdlbl8xLl8pIGAke3NjaGVtYUNvZGV9ICE9PSB1bmRlZmluZWQgJiYgKCR7KDAsIGNvZGVnZW5fMS5vcikodGhpcy5pbnZhbGlkJGRhdGEoKSwgY29uZGl0aW9uKX0pYCk7XG4gICAgfVxuICAgIGVycm9yKGFwcGVuZCwgZXJyb3JQYXJhbXMsIGVycm9yUGF0aHMpIHtcbiAgICAgICAgaWYgKGVycm9yUGFyYW1zKSB7XG4gICAgICAgICAgICB0aGlzLnNldFBhcmFtcyhlcnJvclBhcmFtcyk7XG4gICAgICAgICAgICB0aGlzLl9lcnJvcihhcHBlbmQsIGVycm9yUGF0aHMpO1xuICAgICAgICAgICAgdGhpcy5zZXRQYXJhbXMoe30pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Vycm9yKGFwcGVuZCwgZXJyb3JQYXRocyk7XG4gICAgfVxuICAgIF9lcnJvcihhcHBlbmQsIGVycm9yUGF0aHMpIHtcbiAgICAgICAgO1xuICAgICAgICAoYXBwZW5kID8gZXJyb3JzXzEucmVwb3J0RXh0cmFFcnJvciA6IGVycm9yc18xLnJlcG9ydEVycm9yKSh0aGlzLCB0aGlzLmRlZi5lcnJvciwgZXJyb3JQYXRocyk7XG4gICAgfVxuICAgICRkYXRhRXJyb3IoKSB7XG4gICAgICAgICgwLCBlcnJvcnNfMS5yZXBvcnRFcnJvcikodGhpcywgdGhpcy5kZWYuJGRhdGFFcnJvciB8fCBlcnJvcnNfMS5rZXl3b3JkJERhdGFFcnJvcik7XG4gICAgfVxuICAgIHJlc2V0KCkge1xuICAgICAgICBpZiAodGhpcy5lcnJzQ291bnQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYWRkIFwidHJhY2tFcnJvcnNcIiB0byBrZXl3b3JkIGRlZmluaXRpb24nKTtcbiAgICAgICAgKDAsIGVycm9yc18xLnJlc2V0RXJyb3JzQ291bnQpKHRoaXMuZ2VuLCB0aGlzLmVycnNDb3VudCk7XG4gICAgfVxuICAgIG9rKGNvbmQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFsbEVycm9ycylcbiAgICAgICAgICAgIHRoaXMuZ2VuLmlmKGNvbmQpO1xuICAgIH1cbiAgICBzZXRQYXJhbXMob2JqLCBhc3NpZ24pIHtcbiAgICAgICAgaWYgKGFzc2lnbilcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5wYXJhbXMsIG9iaik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMucGFyYW1zID0gb2JqO1xuICAgIH1cbiAgICBibG9jayRkYXRhKHZhbGlkLCBjb2RlQmxvY2ssICRkYXRhVmFsaWQgPSBjb2RlZ2VuXzEubmlsKSB7XG4gICAgICAgIHRoaXMuZ2VuLmJsb2NrKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2skZGF0YSh2YWxpZCwgJGRhdGFWYWxpZCk7XG4gICAgICAgICAgICBjb2RlQmxvY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNoZWNrJGRhdGEodmFsaWQgPSBjb2RlZ2VuXzEubmlsLCAkZGF0YVZhbGlkID0gY29kZWdlbl8xLm5pbCkge1xuICAgICAgICBpZiAoIXRoaXMuJGRhdGEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWFDb2RlLCBzY2hlbWFUeXBlLCBkZWYgfSA9IHRoaXM7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm9yKSgoMCwgY29kZWdlbl8xLl8pIGAke3NjaGVtYUNvZGV9ID09PSB1bmRlZmluZWRgLCAkZGF0YVZhbGlkKSk7XG4gICAgICAgIGlmICh2YWxpZCAhPT0gY29kZWdlbl8xLm5pbClcbiAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIHRydWUpO1xuICAgICAgICBpZiAoc2NoZW1hVHlwZS5sZW5ndGggfHwgZGVmLnZhbGlkYXRlU2NoZW1hKSB7XG4gICAgICAgICAgICBnZW4uZWxzZUlmKHRoaXMuaW52YWxpZCRkYXRhKCkpO1xuICAgICAgICAgICAgdGhpcy4kZGF0YUVycm9yKCk7XG4gICAgICAgICAgICBpZiAodmFsaWQgIT09IGNvZGVnZW5fMS5uaWwpXG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGdlbi5lbHNlKCk7XG4gICAgfVxuICAgIGludmFsaWQkZGF0YSgpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYUNvZGUsIHNjaGVtYVR5cGUsIGRlZiwgaXQgfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLm9yKSh3cm9uZyREYXRhVHlwZSgpLCBpbnZhbGlkJERhdGFTY2hlbWEoKSk7XG4gICAgICAgIGZ1bmN0aW9uIHdyb25nJERhdGFUeXBlKCkge1xuICAgICAgICAgICAgaWYgKHNjaGVtYVR5cGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgICAgaWYgKCEoc2NoZW1hQ29kZSBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0ID0gQXJyYXkuaXNBcnJheShzY2hlbWFUeXBlKSA/IHNjaGVtYVR5cGUgOiBbc2NoZW1hVHlwZV07XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7KDAsIGRhdGFUeXBlXzIuY2hlY2tEYXRhVHlwZXMpKHN0LCBzY2hlbWFDb2RlLCBpdC5vcHRzLnN0cmljdE51bWJlcnMsIGRhdGFUeXBlXzIuRGF0YVR5cGUuV3JvbmcpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29kZWdlbl8xLm5pbDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpbnZhbGlkJERhdGFTY2hlbWEoKSB7XG4gICAgICAgICAgICBpZiAoZGVmLnZhbGlkYXRlU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVTY2hlbWFSZWYgPSBnZW4uc2NvcGVWYWx1ZShcInZhbGlkYXRlJGRhdGFcIiwgeyByZWY6IGRlZi52YWxpZGF0ZVNjaGVtYSB9KTsgLy8gVE9ETyB2YWx1ZS5jb2RlIGZvciBzdGFuZGFsb25lXG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCEke3ZhbGlkYXRlU2NoZW1hUmVmfSgke3NjaGVtYUNvZGV9KWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29kZWdlbl8xLm5pbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdWJzY2hlbWEoYXBwbCwgdmFsaWQpIHtcbiAgICAgICAgY29uc3Qgc3Vic2NoZW1hID0gKDAsIHN1YnNjaGVtYV8xLmdldFN1YnNjaGVtYSkodGhpcy5pdCwgYXBwbCk7XG4gICAgICAgICgwLCBzdWJzY2hlbWFfMS5leHRlbmRTdWJzY2hlbWFEYXRhKShzdWJzY2hlbWEsIHRoaXMuaXQsIGFwcGwpO1xuICAgICAgICAoMCwgc3Vic2NoZW1hXzEuZXh0ZW5kU3Vic2NoZW1hTW9kZSkoc3Vic2NoZW1hLCBhcHBsKTtcbiAgICAgICAgY29uc3QgbmV4dENvbnRleHQgPSB7IC4uLnRoaXMuaXQsIC4uLnN1YnNjaGVtYSwgaXRlbXM6IHVuZGVmaW5lZCwgcHJvcHM6IHVuZGVmaW5lZCB9O1xuICAgICAgICBzdWJzY2hlbWFDb2RlKG5leHRDb250ZXh0LCB2YWxpZCk7XG4gICAgICAgIHJldHVybiBuZXh0Q29udGV4dDtcbiAgICB9XG4gICAgbWVyZ2VFdmFsdWF0ZWQoc2NoZW1hQ3h0LCB0b05hbWUpIHtcbiAgICAgICAgY29uc3QgeyBpdCwgZ2VuIH0gPSB0aGlzO1xuICAgICAgICBpZiAoIWl0Lm9wdHMudW5ldmFsdWF0ZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChpdC5wcm9wcyAhPT0gdHJ1ZSAmJiBzY2hlbWFDeHQucHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaXQucHJvcHMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQucHJvcHMoZ2VuLCBzY2hlbWFDeHQucHJvcHMsIGl0LnByb3BzLCB0b05hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdC5pdGVtcyAhPT0gdHJ1ZSAmJiBzY2hlbWFDeHQuaXRlbXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaXQuaXRlbXMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQuaXRlbXMoZ2VuLCBzY2hlbWFDeHQuaXRlbXMsIGl0Lml0ZW1zLCB0b05hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG1lcmdlVmFsaWRFdmFsdWF0ZWQoc2NoZW1hQ3h0LCB2YWxpZCkge1xuICAgICAgICBjb25zdCB7IGl0LCBnZW4gfSA9IHRoaXM7XG4gICAgICAgIGlmIChpdC5vcHRzLnVuZXZhbHVhdGVkICYmIChpdC5wcm9wcyAhPT0gdHJ1ZSB8fCBpdC5pdGVtcyAhPT0gdHJ1ZSkpIHtcbiAgICAgICAgICAgIGdlbi5pZih2YWxpZCwgKCkgPT4gdGhpcy5tZXJnZUV2YWx1YXRlZChzY2hlbWFDeHQsIGNvZGVnZW5fMS5OYW1lKSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuS2V5d29yZEN4dCA9IEtleXdvcmRDeHQ7XG5mdW5jdGlvbiBrZXl3b3JkQ29kZShpdCwga2V5d29yZCwgZGVmLCBydWxlVHlwZSkge1xuICAgIGNvbnN0IGN4dCA9IG5ldyBLZXl3b3JkQ3h0KGl0LCBkZWYsIGtleXdvcmQpO1xuICAgIGlmIChcImNvZGVcIiBpbiBkZWYpIHtcbiAgICAgICAgZGVmLmNvZGUoY3h0LCBydWxlVHlwZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGN4dC4kZGF0YSAmJiBkZWYudmFsaWRhdGUpIHtcbiAgICAgICAgKDAsIGtleXdvcmRfMS5mdW5jS2V5d29yZENvZGUpKGN4dCwgZGVmKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoXCJtYWNyb1wiIGluIGRlZikge1xuICAgICAgICAoMCwga2V5d29yZF8xLm1hY3JvS2V5d29yZENvZGUpKGN4dCwgZGVmKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZGVmLmNvbXBpbGUgfHwgZGVmLnZhbGlkYXRlKSB7XG4gICAgICAgICgwLCBrZXl3b3JkXzEuZnVuY0tleXdvcmRDb2RlKShjeHQsIGRlZik7XG4gICAgfVxufVxuY29uc3QgSlNPTl9QT0lOVEVSID0gL15cXC8oPzpbXn5dfH4wfH4xKSokLztcbmNvbnN0IFJFTEFUSVZFX0pTT05fUE9JTlRFUiA9IC9eKFswLTldKykoI3xcXC8oPzpbXn5dfH4wfH4xKSopPyQvO1xuZnVuY3Rpb24gZ2V0RGF0YSgkZGF0YSwgeyBkYXRhTGV2ZWwsIGRhdGFOYW1lcywgZGF0YVBhdGhBcnIgfSkge1xuICAgIGxldCBqc29uUG9pbnRlcjtcbiAgICBsZXQgZGF0YTtcbiAgICBpZiAoJGRhdGEgPT09IFwiXCIpXG4gICAgICAgIHJldHVybiBuYW1lc18xLmRlZmF1bHQucm9vdERhdGE7XG4gICAgaWYgKCRkYXRhWzBdID09PSBcIi9cIikge1xuICAgICAgICBpZiAoIUpTT05fUE9JTlRFUi50ZXN0KCRkYXRhKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBKU09OLXBvaW50ZXI6ICR7JGRhdGF9YCk7XG4gICAgICAgIGpzb25Qb2ludGVyID0gJGRhdGE7XG4gICAgICAgIGRhdGEgPSBuYW1lc18xLmRlZmF1bHQucm9vdERhdGE7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gUkVMQVRJVkVfSlNPTl9QT0lOVEVSLmV4ZWMoJGRhdGEpO1xuICAgICAgICBpZiAoIW1hdGNoZXMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgSlNPTi1wb2ludGVyOiAkeyRkYXRhfWApO1xuICAgICAgICBjb25zdCB1cCA9ICttYXRjaGVzWzFdO1xuICAgICAgICBqc29uUG9pbnRlciA9IG1hdGNoZXNbMl07XG4gICAgICAgIGlmIChqc29uUG9pbnRlciA9PT0gXCIjXCIpIHtcbiAgICAgICAgICAgIGlmICh1cCA+PSBkYXRhTGV2ZWwpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTXNnKFwicHJvcGVydHkvaW5kZXhcIiwgdXApKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhUGF0aEFycltkYXRhTGV2ZWwgLSB1cF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwID4gZGF0YUxldmVsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTXNnKFwiZGF0YVwiLCB1cCkpO1xuICAgICAgICBkYXRhID0gZGF0YU5hbWVzW2RhdGFMZXZlbCAtIHVwXTtcbiAgICAgICAgaWYgKCFqc29uUG9pbnRlcilcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBsZXQgZXhwciA9IGRhdGE7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBqc29uUG9pbnRlci5zcGxpdChcIi9cIik7XG4gICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHNlZ21lbnRzKSB7XG4gICAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgICAgICBkYXRhID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoKDAsIHV0aWxfMS51bmVzY2FwZUpzb25Qb2ludGVyKShzZWdtZW50KSl9YDtcbiAgICAgICAgICAgIGV4cHIgPSAoMCwgY29kZWdlbl8xLl8pIGAke2V4cHJ9ICYmICR7ZGF0YX1gO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBleHByO1xuICAgIGZ1bmN0aW9uIGVycm9yTXNnKHBvaW50ZXJUeXBlLCB1cCkge1xuICAgICAgICByZXR1cm4gYENhbm5vdCBhY2Nlc3MgJHtwb2ludGVyVHlwZX0gJHt1cH0gbGV2ZWxzIHVwLCBjdXJyZW50IGxldmVsIGlzICR7ZGF0YUxldmVsfWA7XG4gICAgfVxufVxuZXhwb3J0cy5nZXREYXRhID0gZ2V0RGF0YTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jbGFzcyBWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoZXJyb3JzKSB7XG4gICAgICAgIHN1cGVyKFwidmFsaWRhdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgICAgICB0aGlzLmFqdiA9IHRoaXMudmFsaWRhdGlvbiA9IHRydWU7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gVmFsaWRhdGlvbkVycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmFsaWRhdGlvbl9lcnJvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgcmVzb2x2ZV8xID0gcmVxdWlyZShcIi4vcmVzb2x2ZVwiKTtcbmNsYXNzIE1pc3NpbmdSZWZFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihyZXNvbHZlciwgYmFzZUlkLCByZWYsIG1zZykge1xuICAgICAgICBzdXBlcihtc2cgfHwgYGNhbid0IHJlc29sdmUgcmVmZXJlbmNlICR7cmVmfSBmcm9tIGlkICR7YmFzZUlkfWApO1xuICAgICAgICB0aGlzLm1pc3NpbmdSZWYgPSAoMCwgcmVzb2x2ZV8xLnJlc29sdmVVcmwpKHJlc29sdmVyLCBiYXNlSWQsIHJlZik7XG4gICAgICAgIHRoaXMubWlzc2luZ1NjaGVtYSA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKCgwLCByZXNvbHZlXzEuZ2V0RnVsbFBhdGgpKHJlc29sdmVyLCB0aGlzLm1pc3NpbmdSZWYpKTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBNaXNzaW5nUmVmRXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWZfZXJyb3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZVNjaGVtYSA9IGV4cG9ydHMuZ2V0Q29tcGlsaW5nU2NoZW1hID0gZXhwb3J0cy5yZXNvbHZlUmVmID0gZXhwb3J0cy5jb21waWxlU2NoZW1hID0gZXhwb3J0cy5TY2hlbWFFbnYgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb2RlZ2VuXCIpO1xuY29uc3QgdmFsaWRhdGlvbl9lcnJvcl8xID0gcmVxdWlyZShcIi4uL3J1bnRpbWUvdmFsaWRhdGlvbl9lcnJvclwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi9uYW1lc1wiKTtcbmNvbnN0IHJlc29sdmVfMSA9IHJlcXVpcmUoXCIuL3Jlc29sdmVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuY29uc3QgdmFsaWRhdGVfMSA9IHJlcXVpcmUoXCIuL3ZhbGlkYXRlXCIpO1xuY2xhc3MgU2NoZW1hRW52IHtcbiAgICBjb25zdHJ1Y3RvcihlbnYpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLnJlZnMgPSB7fTtcbiAgICAgICAgdGhpcy5keW5hbWljQW5jaG9ycyA9IHt9O1xuICAgICAgICBsZXQgc2NoZW1hO1xuICAgICAgICBpZiAodHlwZW9mIGVudi5zY2hlbWEgPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgIHNjaGVtYSA9IGVudi5zY2hlbWE7XG4gICAgICAgIHRoaXMuc2NoZW1hID0gZW52LnNjaGVtYTtcbiAgICAgICAgdGhpcy5zY2hlbWFJZCA9IGVudi5zY2hlbWFJZDtcbiAgICAgICAgdGhpcy5yb290ID0gZW52LnJvb3QgfHwgdGhpcztcbiAgICAgICAgdGhpcy5iYXNlSWQgPSAoX2EgPSBlbnYuYmFzZUlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKShzY2hlbWEgPT09IG51bGwgfHwgc2NoZW1hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2hlbWFbZW52LnNjaGVtYUlkIHx8IFwiJGlkXCJdKTtcbiAgICAgICAgdGhpcy5zY2hlbWFQYXRoID0gZW52LnNjaGVtYVBhdGg7XG4gICAgICAgIHRoaXMubG9jYWxSZWZzID0gZW52LmxvY2FsUmVmcztcbiAgICAgICAgdGhpcy5tZXRhID0gZW52Lm1ldGE7XG4gICAgICAgIHRoaXMuJGFzeW5jID0gc2NoZW1hID09PSBudWxsIHx8IHNjaGVtYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoZW1hLiRhc3luYztcbiAgICAgICAgdGhpcy5yZWZzID0ge307XG4gICAgfVxufVxuZXhwb3J0cy5TY2hlbWFFbnYgPSBTY2hlbWFFbnY7XG4vLyBsZXQgY29kZVNpemUgPSAwXG4vLyBsZXQgbm9kZUNvdW50ID0gMFxuLy8gQ29tcGlsZXMgc2NoZW1hIGluIFNjaGVtYUVudlxuZnVuY3Rpb24gY29tcGlsZVNjaGVtYShzY2gpIHtcbiAgICAvLyBUT0RPIHJlZmFjdG9yIC0gcmVtb3ZlIGNvbXBpbGF0aW9uc1xuICAgIGNvbnN0IF9zY2ggPSBnZXRDb21waWxpbmdTY2hlbWEuY2FsbCh0aGlzLCBzY2gpO1xuICAgIGlmIChfc2NoKVxuICAgICAgICByZXR1cm4gX3NjaDtcbiAgICBjb25zdCByb290SWQgPSAoMCwgcmVzb2x2ZV8xLmdldEZ1bGxQYXRoKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIHNjaC5yb290LmJhc2VJZCk7IC8vIFRPRE8gaWYgZ2V0RnVsbFBhdGggcmVtb3ZlZCAxIHRlc3RzIGZhaWxzXG4gICAgY29uc3QgeyBlczUsIGxpbmVzIH0gPSB0aGlzLm9wdHMuY29kZTtcbiAgICBjb25zdCB7IG93blByb3BlcnRpZXMgfSA9IHRoaXMub3B0cztcbiAgICBjb25zdCBnZW4gPSBuZXcgY29kZWdlbl8xLkNvZGVHZW4odGhpcy5zY29wZSwgeyBlczUsIGxpbmVzLCBvd25Qcm9wZXJ0aWVzIH0pO1xuICAgIGxldCBfVmFsaWRhdGlvbkVycm9yO1xuICAgIGlmIChzY2guJGFzeW5jKSB7XG4gICAgICAgIF9WYWxpZGF0aW9uRXJyb3IgPSBnZW4uc2NvcGVWYWx1ZShcIkVycm9yXCIsIHtcbiAgICAgICAgICAgIHJlZjogdmFsaWRhdGlvbl9lcnJvcl8xLmRlZmF1bHQsXG4gICAgICAgICAgICBjb2RlOiAoMCwgY29kZWdlbl8xLl8pIGByZXF1aXJlKFwiYWp2L2Rpc3QvcnVudGltZS92YWxpZGF0aW9uX2Vycm9yXCIpLmRlZmF1bHRgLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgdmFsaWRhdGVOYW1lID0gZ2VuLnNjb3BlTmFtZShcInZhbGlkYXRlXCIpO1xuICAgIHNjaC52YWxpZGF0ZU5hbWUgPSB2YWxpZGF0ZU5hbWU7XG4gICAgY29uc3Qgc2NoZW1hQ3h0ID0ge1xuICAgICAgICBnZW4sXG4gICAgICAgIGFsbEVycm9yczogdGhpcy5vcHRzLmFsbEVycm9ycyxcbiAgICAgICAgZGF0YTogbmFtZXNfMS5kZWZhdWx0LmRhdGEsXG4gICAgICAgIHBhcmVudERhdGE6IG5hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhLFxuICAgICAgICBwYXJlbnREYXRhUHJvcGVydHk6IG5hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksXG4gICAgICAgIGRhdGFOYW1lczogW25hbWVzXzEuZGVmYXVsdC5kYXRhXSxcbiAgICAgICAgZGF0YVBhdGhBcnI6IFtjb2RlZ2VuXzEubmlsXSxcbiAgICAgICAgZGF0YUxldmVsOiAwLFxuICAgICAgICBkYXRhVHlwZXM6IFtdLFxuICAgICAgICBkZWZpbmVkUHJvcGVydGllczogbmV3IFNldCgpLFxuICAgICAgICB0b3BTY2hlbWFSZWY6IGdlbi5zY29wZVZhbHVlKFwic2NoZW1hXCIsIHRoaXMub3B0cy5jb2RlLnNvdXJjZSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyB7IHJlZjogc2NoLnNjaGVtYSwgY29kZTogKDAsIGNvZGVnZW5fMS5zdHJpbmdpZnkpKHNjaC5zY2hlbWEpIH1cbiAgICAgICAgICAgIDogeyByZWY6IHNjaC5zY2hlbWEgfSksXG4gICAgICAgIHZhbGlkYXRlTmFtZSxcbiAgICAgICAgVmFsaWRhdGlvbkVycm9yOiBfVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBzY2hlbWE6IHNjaC5zY2hlbWEsXG4gICAgICAgIHNjaGVtYUVudjogc2NoLFxuICAgICAgICByb290SWQsXG4gICAgICAgIGJhc2VJZDogc2NoLmJhc2VJZCB8fCByb290SWQsXG4gICAgICAgIHNjaGVtYVBhdGg6IGNvZGVnZW5fMS5uaWwsXG4gICAgICAgIGVyclNjaGVtYVBhdGg6IHNjaC5zY2hlbWFQYXRoIHx8ICh0aGlzLm9wdHMuanRkID8gXCJcIiA6IFwiI1wiKSxcbiAgICAgICAgZXJyb3JQYXRoOiAoMCwgY29kZWdlbl8xLl8pIGBcIlwiYCxcbiAgICAgICAgb3B0czogdGhpcy5vcHRzLFxuICAgICAgICBzZWxmOiB0aGlzLFxuICAgIH07XG4gICAgbGV0IHNvdXJjZUNvZGU7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5fY29tcGlsYXRpb25zLmFkZChzY2gpO1xuICAgICAgICAoMCwgdmFsaWRhdGVfMS52YWxpZGF0ZUZ1bmN0aW9uQ29kZSkoc2NoZW1hQ3h0KTtcbiAgICAgICAgZ2VuLm9wdGltaXplKHRoaXMub3B0cy5jb2RlLm9wdGltaXplKTtcbiAgICAgICAgLy8gZ2VuLm9wdGltaXplKDEpXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlQ29kZSA9IGdlbi50b1N0cmluZygpO1xuICAgICAgICBzb3VyY2VDb2RlID0gYCR7Z2VuLnNjb3BlUmVmcyhuYW1lc18xLmRlZmF1bHQuc2NvcGUpfXJldHVybiAke3ZhbGlkYXRlQ29kZX1gO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygoY29kZVNpemUgKz0gc291cmNlQ29kZS5sZW5ndGgpLCAobm9kZUNvdW50ICs9IGdlbi5ub2RlQ291bnQpKVxuICAgICAgICBpZiAodGhpcy5vcHRzLmNvZGUucHJvY2VzcylcbiAgICAgICAgICAgIHNvdXJjZUNvZGUgPSB0aGlzLm9wdHMuY29kZS5wcm9jZXNzKHNvdXJjZUNvZGUsIHNjaCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiXFxuXFxuXFxuICoqKiBcXG5cIiwgc291cmNlQ29kZSlcbiAgICAgICAgY29uc3QgbWFrZVZhbGlkYXRlID0gbmV3IEZ1bmN0aW9uKGAke25hbWVzXzEuZGVmYXVsdC5zZWxmfWAsIGAke25hbWVzXzEuZGVmYXVsdC5zY29wZX1gLCBzb3VyY2VDb2RlKTtcbiAgICAgICAgY29uc3QgdmFsaWRhdGUgPSBtYWtlVmFsaWRhdGUodGhpcywgdGhpcy5zY29wZS5nZXQoKSk7XG4gICAgICAgIHRoaXMuc2NvcGUudmFsdWUodmFsaWRhdGVOYW1lLCB7IHJlZjogdmFsaWRhdGUgfSk7XG4gICAgICAgIHZhbGlkYXRlLmVycm9ycyA9IG51bGw7XG4gICAgICAgIHZhbGlkYXRlLnNjaGVtYSA9IHNjaC5zY2hlbWE7XG4gICAgICAgIHZhbGlkYXRlLnNjaGVtYUVudiA9IHNjaDtcbiAgICAgICAgaWYgKHNjaC4kYXN5bmMpXG4gICAgICAgICAgICB2YWxpZGF0ZS4kYXN5bmMgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5vcHRzLmNvZGUuc291cmNlID09PSB0cnVlKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZS5zb3VyY2UgPSB7IHZhbGlkYXRlTmFtZSwgdmFsaWRhdGVDb2RlLCBzY29wZVZhbHVlczogZ2VuLl92YWx1ZXMgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRzLnVuZXZhbHVhdGVkKSB7XG4gICAgICAgICAgICBjb25zdCB7IHByb3BzLCBpdGVtcyB9ID0gc2NoZW1hQ3h0O1xuICAgICAgICAgICAgdmFsaWRhdGUuZXZhbHVhdGVkID0ge1xuICAgICAgICAgICAgICAgIHByb3BzOiBwcm9wcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lID8gdW5kZWZpbmVkIDogcHJvcHMsXG4gICAgICAgICAgICAgICAgaXRlbXM6IGl0ZW1zIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUgPyB1bmRlZmluZWQgOiBpdGVtcyxcbiAgICAgICAgICAgICAgICBkeW5hbWljUHJvcHM6IHByb3BzIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUsXG4gICAgICAgICAgICAgICAgZHluYW1pY0l0ZW1zOiBpdGVtcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0ZS5zb3VyY2UpXG4gICAgICAgICAgICAgICAgdmFsaWRhdGUuc291cmNlLmV2YWx1YXRlZCA9ICgwLCBjb2RlZ2VuXzEuc3RyaW5naWZ5KSh2YWxpZGF0ZS5ldmFsdWF0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIHNjaC52YWxpZGF0ZSA9IHZhbGlkYXRlO1xuICAgICAgICByZXR1cm4gc2NoO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBkZWxldGUgc2NoLnZhbGlkYXRlO1xuICAgICAgICBkZWxldGUgc2NoLnZhbGlkYXRlTmFtZTtcbiAgICAgICAgaWYgKHNvdXJjZUNvZGUpXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihcIkVycm9yIGNvbXBpbGluZyBzY2hlbWEsIGZ1bmN0aW9uIGNvZGU6XCIsIHNvdXJjZUNvZGUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlxcblxcblxcbiAqKiogXFxuXCIsIHNvdXJjZUNvZGUsIHRoaXMub3B0cylcbiAgICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRoaXMuX2NvbXBpbGF0aW9ucy5kZWxldGUoc2NoKTtcbiAgICB9XG59XG5leHBvcnRzLmNvbXBpbGVTY2hlbWEgPSBjb21waWxlU2NoZW1hO1xuZnVuY3Rpb24gcmVzb2x2ZVJlZihyb290LCBiYXNlSWQsIHJlZikge1xuICAgIHZhciBfYTtcbiAgICByZWYgPSAoMCwgcmVzb2x2ZV8xLnJlc29sdmVVcmwpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgYmFzZUlkLCByZWYpO1xuICAgIGNvbnN0IHNjaE9yRnVuYyA9IHJvb3QucmVmc1tyZWZdO1xuICAgIGlmIChzY2hPckZ1bmMpXG4gICAgICAgIHJldHVybiBzY2hPckZ1bmM7XG4gICAgbGV0IF9zY2ggPSByZXNvbHZlLmNhbGwodGhpcywgcm9vdCwgcmVmKTtcbiAgICBpZiAoX3NjaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IChfYSA9IHJvb3QubG9jYWxSZWZzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbcmVmXTsgLy8gVE9ETyBtYXliZSBsb2NhbFJlZnMgc2hvdWxkIGhvbGQgU2NoZW1hRW52XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgaWYgKHNjaGVtYSlcbiAgICAgICAgICAgIF9zY2ggPSBuZXcgU2NoZW1hRW52KHsgc2NoZW1hLCBzY2hlbWFJZCwgcm9vdCwgYmFzZUlkIH0pO1xuICAgIH1cbiAgICBpZiAoX3NjaCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm47XG4gICAgcmV0dXJuIChyb290LnJlZnNbcmVmXSA9IGlubGluZU9yQ29tcGlsZS5jYWxsKHRoaXMsIF9zY2gpKTtcbn1cbmV4cG9ydHMucmVzb2x2ZVJlZiA9IHJlc29sdmVSZWY7XG5mdW5jdGlvbiBpbmxpbmVPckNvbXBpbGUoc2NoKSB7XG4gICAgaWYgKCgwLCByZXNvbHZlXzEuaW5saW5lUmVmKShzY2guc2NoZW1hLCB0aGlzLm9wdHMuaW5saW5lUmVmcykpXG4gICAgICAgIHJldHVybiBzY2guc2NoZW1hO1xuICAgIHJldHVybiBzY2gudmFsaWRhdGUgPyBzY2ggOiBjb21waWxlU2NoZW1hLmNhbGwodGhpcywgc2NoKTtcbn1cbi8vIEluZGV4IG9mIHNjaGVtYSBjb21waWxhdGlvbiBpbiB0aGUgY3VycmVudGx5IGNvbXBpbGVkIGxpc3RcbmZ1bmN0aW9uIGdldENvbXBpbGluZ1NjaGVtYShzY2hFbnYpIHtcbiAgICBmb3IgKGNvbnN0IHNjaCBvZiB0aGlzLl9jb21waWxhdGlvbnMpIHtcbiAgICAgICAgaWYgKHNhbWVTY2hlbWFFbnYoc2NoLCBzY2hFbnYpKVxuICAgICAgICAgICAgcmV0dXJuIHNjaDtcbiAgICB9XG59XG5leHBvcnRzLmdldENvbXBpbGluZ1NjaGVtYSA9IGdldENvbXBpbGluZ1NjaGVtYTtcbmZ1bmN0aW9uIHNhbWVTY2hlbWFFbnYoczEsIHMyKSB7XG4gICAgcmV0dXJuIHMxLnNjaGVtYSA9PT0gczIuc2NoZW1hICYmIHMxLnJvb3QgPT09IHMyLnJvb3QgJiYgczEuYmFzZUlkID09PSBzMi5iYXNlSWQ7XG59XG4vLyByZXNvbHZlIGFuZCBjb21waWxlIHRoZSByZWZlcmVuY2VzICgkcmVmKVxuLy8gVE9ETyByZXR1cm5zIEFueVNjaGVtYU9iamVjdCAoaWYgdGhlIHNjaGVtYSBjYW4gYmUgaW5saW5lZCkgb3IgdmFsaWRhdGlvbiBmdW5jdGlvblxuZnVuY3Rpb24gcmVzb2x2ZShyb290LCAvLyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcm9vdCBzY2hlbWEgZm9yIHRoZSBjdXJyZW50IHNjaGVtYVxucmVmIC8vIHJlZmVyZW5jZSB0byByZXNvbHZlXG4pIHtcbiAgICBsZXQgc2NoO1xuICAgIHdoaWxlICh0eXBlb2YgKHNjaCA9IHRoaXMucmVmc1tyZWZdKSA9PSBcInN0cmluZ1wiKVxuICAgICAgICByZWYgPSBzY2g7XG4gICAgcmV0dXJuIHNjaCB8fCB0aGlzLnNjaGVtYXNbcmVmXSB8fCByZXNvbHZlU2NoZW1hLmNhbGwodGhpcywgcm9vdCwgcmVmKTtcbn1cbi8vIFJlc29sdmUgc2NoZW1hLCBpdHMgcm9vdCBhbmQgYmFzZUlkXG5mdW5jdGlvbiByZXNvbHZlU2NoZW1hKHJvb3QsIC8vIHJvb3Qgb2JqZWN0IHdpdGggcHJvcGVydGllcyBzY2hlbWEsIHJlZnMgVE9ETyBiZWxvdyBTY2hlbWFFbnYgaXMgYXNzaWduZWQgdG8gaXRcbnJlZiAvLyByZWZlcmVuY2UgdG8gcmVzb2x2ZVxuKSB7XG4gICAgY29uc3QgcCA9IHRoaXMub3B0cy51cmlSZXNvbHZlci5wYXJzZShyZWYpO1xuICAgIGNvbnN0IHJlZlBhdGggPSAoMCwgcmVzb2x2ZV8xLl9nZXRGdWxsUGF0aCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCBwKTtcbiAgICBsZXQgYmFzZUlkID0gKDAsIHJlc29sdmVfMS5nZXRGdWxsUGF0aCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCByb290LmJhc2VJZCwgdW5kZWZpbmVkKTtcbiAgICAvLyBUT0RPIGBPYmplY3Qua2V5cyhyb290LnNjaGVtYSkubGVuZ3RoID4gMGAgc2hvdWxkIG5vdCBiZSBuZWVkZWQgLSBidXQgcmVtb3ZpbmcgYnJlYWtzIDIgdGVzdHNcbiAgICBpZiAoT2JqZWN0LmtleXMocm9vdC5zY2hlbWEpLmxlbmd0aCA+IDAgJiYgcmVmUGF0aCA9PT0gYmFzZUlkKSB7XG4gICAgICAgIHJldHVybiBnZXRKc29uUG9pbnRlci5jYWxsKHRoaXMsIHAsIHJvb3QpO1xuICAgIH1cbiAgICBjb25zdCBpZCA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKHJlZlBhdGgpO1xuICAgIGNvbnN0IHNjaE9yUmVmID0gdGhpcy5yZWZzW2lkXSB8fCB0aGlzLnNjaGVtYXNbaWRdO1xuICAgIGlmICh0eXBlb2Ygc2NoT3JSZWYgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb25zdCBzY2ggPSByZXNvbHZlU2NoZW1hLmNhbGwodGhpcywgcm9vdCwgc2NoT3JSZWYpO1xuICAgICAgICBpZiAodHlwZW9mIChzY2ggPT09IG51bGwgfHwgc2NoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2guc2NoZW1hKSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcmV0dXJuIGdldEpzb25Qb2ludGVyLmNhbGwodGhpcywgcCwgc2NoKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiAoc2NoT3JSZWYgPT09IG51bGwgfHwgc2NoT3JSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaE9yUmVmLnNjaGVtYSkgIT09IFwib2JqZWN0XCIpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoIXNjaE9yUmVmLnZhbGlkYXRlKVxuICAgICAgICBjb21waWxlU2NoZW1hLmNhbGwodGhpcywgc2NoT3JSZWYpO1xuICAgIGlmIChpZCA9PT0gKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkocmVmKSkge1xuICAgICAgICBjb25zdCB7IHNjaGVtYSB9ID0gc2NoT3JSZWY7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgY29uc3Qgc2NoSWQgPSBzY2hlbWFbc2NoZW1hSWRdO1xuICAgICAgICBpZiAoc2NoSWQpXG4gICAgICAgICAgICBiYXNlSWQgPSAoMCwgcmVzb2x2ZV8xLnJlc29sdmVVcmwpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgYmFzZUlkLCBzY2hJZCk7XG4gICAgICAgIHJldHVybiBuZXcgU2NoZW1hRW52KHsgc2NoZW1hLCBzY2hlbWFJZCwgcm9vdCwgYmFzZUlkIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0SnNvblBvaW50ZXIuY2FsbCh0aGlzLCBwLCBzY2hPclJlZik7XG59XG5leHBvcnRzLnJlc29sdmVTY2hlbWEgPSByZXNvbHZlU2NoZW1hO1xuY29uc3QgUFJFVkVOVF9TQ09QRV9DSEFOR0UgPSBuZXcgU2V0KFtcbiAgICBcInByb3BlcnRpZXNcIixcbiAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCIsXG4gICAgXCJlbnVtXCIsXG4gICAgXCJkZXBlbmRlbmNpZXNcIixcbiAgICBcImRlZmluaXRpb25zXCIsXG5dKTtcbmZ1bmN0aW9uIGdldEpzb25Qb2ludGVyKHBhcnNlZFJlZiwgeyBiYXNlSWQsIHNjaGVtYSwgcm9vdCB9KSB7XG4gICAgdmFyIF9hO1xuICAgIGlmICgoKF9hID0gcGFyc2VkUmVmLmZyYWdtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbMF0pICE9PSBcIi9cIilcbiAgICAgICAgcmV0dXJuO1xuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJzZWRSZWYuZnJhZ21lbnQuc2xpY2UoMSkuc3BsaXQoXCIvXCIpKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09PSBcImJvb2xlYW5cIilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgcGFydFNjaGVtYSA9IHNjaGVtYVsoMCwgdXRpbF8xLnVuZXNjYXBlRnJhZ21lbnQpKHBhcnQpXTtcbiAgICAgICAgaWYgKHBhcnRTY2hlbWEgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc2NoZW1hID0gcGFydFNjaGVtYTtcbiAgICAgICAgLy8gVE9ETyBQUkVWRU5UX1NDT1BFX0NIQU5HRSBjb3VsZCBiZSBkZWZpbmVkIGluIGtleXdvcmQgZGVmP1xuICAgICAgICBjb25zdCBzY2hJZCA9IHR5cGVvZiBzY2hlbWEgPT09IFwib2JqZWN0XCIgJiYgc2NoZW1hW3RoaXMub3B0cy5zY2hlbWFJZF07XG4gICAgICAgIGlmICghUFJFVkVOVF9TQ09QRV9DSEFOR0UuaGFzKHBhcnQpICYmIHNjaElkKSB7XG4gICAgICAgICAgICBiYXNlSWQgPSAoMCwgcmVzb2x2ZV8xLnJlc29sdmVVcmwpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgYmFzZUlkLCBzY2hJZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IGVudjtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSAhPSBcImJvb2xlYW5cIiAmJiBzY2hlbWEuJHJlZiAmJiAhKDAsIHV0aWxfMS5zY2hlbWFIYXNSdWxlc0J1dFJlZikoc2NoZW1hLCB0aGlzLlJVTEVTKSkge1xuICAgICAgICBjb25zdCAkcmVmID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgc2NoZW1hLiRyZWYpO1xuICAgICAgICBlbnYgPSByZXNvbHZlU2NoZW1hLmNhbGwodGhpcywgcm9vdCwgJHJlZik7XG4gICAgfVxuICAgIC8vIGV2ZW4gdGhvdWdoIHJlc29sdXRpb24gZmFpbGVkIHdlIG5lZWQgdG8gcmV0dXJuIFNjaGVtYUVudiB0byB0aHJvdyBleGNlcHRpb25cbiAgICAvLyBzbyB0aGF0IGNvbXBpbGVBc3luYyBsb2FkcyBtaXNzaW5nIHNjaGVtYS5cbiAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgZW52ID0gZW52IHx8IG5ldyBTY2hlbWFFbnYoeyBzY2hlbWEsIHNjaGVtYUlkLCByb290LCBiYXNlSWQgfSk7XG4gICAgaWYgKGVudi5zY2hlbWEgIT09IGVudi5yb290LnNjaGVtYSlcbiAgICAgICAgcmV0dXJuIGVudjtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIvKiogQGxpY2Vuc2UgVVJJLmpzIHY0LjQuMSAoYykgMjAxMSBHYXJ5IENvdXJ0LiBMaWNlbnNlOiBodHRwOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvdXJpLWpzICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuXHR0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcblx0dHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KSA6XG5cdChmYWN0b3J5KChnbG9iYWwuVVJJID0gZ2xvYmFsLlVSSSB8fCB7fSkpKTtcbn0odGhpcywgKGZ1bmN0aW9uIChleHBvcnRzKSB7ICd1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gbWVyZ2UoKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHNldHMgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgc2V0c1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBpZiAoc2V0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHNldHNbMF0gPSBzZXRzWzBdLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgdmFyIHhsID0gc2V0cy5sZW5ndGggLSAxO1xuICAgICAgICBmb3IgKHZhciB4ID0gMTsgeCA8IHhsOyArK3gpIHtcbiAgICAgICAgICAgIHNldHNbeF0gPSBzZXRzW3hdLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRzW3hsXSA9IHNldHNbeGxdLnNsaWNlKDEpO1xuICAgICAgICByZXR1cm4gc2V0cy5qb2luKCcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2V0c1swXTtcbiAgICB9XG59XG5mdW5jdGlvbiBzdWJleHAoc3RyKSB7XG4gICAgcmV0dXJuIFwiKD86XCIgKyBzdHIgKyBcIilcIjtcbn1cbmZ1bmN0aW9uIHR5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8gPT09IHVuZGVmaW5lZCA/IFwidW5kZWZpbmVkXCIgOiBvID09PSBudWxsID8gXCJudWxsXCIgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc3BsaXQoXCIgXCIpLnBvcCgpLnNwbGl0KFwiXVwiKS5zaGlmdCgpLnRvTG93ZXJDYXNlKCk7XG59XG5mdW5jdGlvbiB0b1VwcGVyQ2FzZShzdHIpIHtcbiAgICByZXR1cm4gc3RyLnRvVXBwZXJDYXNlKCk7XG59XG5mdW5jdGlvbiB0b0FycmF5KG9iaikge1xuICAgIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwgPyBvYmogaW5zdGFuY2VvZiBBcnJheSA/IG9iaiA6IHR5cGVvZiBvYmoubGVuZ3RoICE9PSBcIm51bWJlclwiIHx8IG9iai5zcGxpdCB8fCBvYmouc2V0SW50ZXJ2YWwgfHwgb2JqLmNhbGwgPyBbb2JqXSA6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG9iaikgOiBbXTtcbn1cbmZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkge1xuICAgIHZhciBvYmogPSB0YXJnZXQ7XG4gICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRXhwcyhpc0lSSSkge1xuICAgIHZhciBBTFBIQSQkID0gXCJbQS1aYS16XVwiLFxuICAgICAgICBDUiQgPSBcIltcXFxceDBEXVwiLFxuICAgICAgICBESUdJVCQkID0gXCJbMC05XVwiLFxuICAgICAgICBEUVVPVEUkJCA9IFwiW1xcXFx4MjJdXCIsXG4gICAgICAgIEhFWERJRyQkID0gbWVyZ2UoRElHSVQkJCwgXCJbQS1GYS1mXVwiKSxcbiAgICAgICAgLy9jYXNlLWluc2Vuc2l0aXZlXG4gICAgTEYkJCA9IFwiW1xcXFx4MEFdXCIsXG4gICAgICAgIFNQJCQgPSBcIltcXFxceDIwXVwiLFxuICAgICAgICBQQ1RfRU5DT0RFRCQgPSBzdWJleHAoc3ViZXhwKFwiJVtFRmVmXVwiICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIlWzg5QS1GYS1mXVwiICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSksXG4gICAgICAgIC8vZXhwYW5kZWRcbiAgICBHRU5fREVMSU1TJCQgPSBcIltcXFxcOlxcXFwvXFxcXD9cXFxcI1xcXFxbXFxcXF1cXFxcQF1cIixcbiAgICAgICAgU1VCX0RFTElNUyQkID0gXCJbXFxcXCFcXFxcJFxcXFwmXFxcXCdcXFxcKFxcXFwpXFxcXCpcXFxcK1xcXFwsXFxcXDtcXFxcPV1cIixcbiAgICAgICAgUkVTRVJWRUQkJCA9IG1lcmdlKEdFTl9ERUxJTVMkJCwgU1VCX0RFTElNUyQkKSxcbiAgICAgICAgVUNTQ0hBUiQkID0gaXNJUkkgPyBcIltcXFxceEEwLVxcXFx1MjAwRFxcXFx1MjAxMC1cXFxcdTIwMjlcXFxcdTIwMkYtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRUZdXCIgOiBcIltdXCIsXG4gICAgICAgIC8vc3Vic2V0LCBleGNsdWRlcyBiaWRpIGNvbnRyb2wgY2hhcmFjdGVyc1xuICAgIElQUklWQVRFJCQgPSBpc0lSSSA/IFwiW1xcXFx1RTAwMC1cXFxcdUY4RkZdXCIgOiBcIltdXCIsXG4gICAgICAgIC8vc3Vic2V0XG4gICAgVU5SRVNFUlZFRCQkID0gbWVyZ2UoQUxQSEEkJCwgRElHSVQkJCwgXCJbXFxcXC1cXFxcLlxcXFxfXFxcXH5dXCIsIFVDU0NIQVIkJCksXG4gICAgICAgIFNDSEVNRSQgPSBzdWJleHAoQUxQSEEkJCArIG1lcmdlKEFMUEhBJCQsIERJR0lUJCQsIFwiW1xcXFwrXFxcXC1cXFxcLl1cIikgKyBcIipcIiksXG4gICAgICAgIFVTRVJJTkZPJCA9IHN1YmV4cChzdWJleHAoUENUX0VOQ09ERUQkICsgXCJ8XCIgKyBtZXJnZShVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXDpdXCIpKSArIFwiKlwiKSxcbiAgICAgICAgREVDX09DVEVUJCA9IHN1YmV4cChzdWJleHAoXCIyNVswLTVdXCIpICsgXCJ8XCIgKyBzdWJleHAoXCIyWzAtNF1cIiArIERJR0lUJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIxXCIgKyBESUdJVCQkICsgRElHSVQkJCkgKyBcInxcIiArIHN1YmV4cChcIlsxLTldXCIgKyBESUdJVCQkKSArIFwifFwiICsgRElHSVQkJCksXG4gICAgICAgIERFQ19PQ1RFVF9SRUxBWEVEJCA9IHN1YmV4cChzdWJleHAoXCIyNVswLTVdXCIpICsgXCJ8XCIgKyBzdWJleHAoXCIyWzAtNF1cIiArIERJR0lUJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIxXCIgKyBESUdJVCQkICsgRElHSVQkJCkgKyBcInxcIiArIHN1YmV4cChcIjA/WzEtOV1cIiArIERJR0lUJCQpICsgXCJ8MD8wP1wiICsgRElHSVQkJCksXG4gICAgICAgIC8vcmVsYXhlZCBwYXJzaW5nIHJ1bGVzXG4gICAgSVBWNEFERFJFU1MkID0gc3ViZXhwKERFQ19PQ1RFVF9SRUxBWEVEJCArIFwiXFxcXC5cIiArIERFQ19PQ1RFVF9SRUxBWEVEJCArIFwiXFxcXC5cIiArIERFQ19PQ1RFVF9SRUxBWEVEJCArIFwiXFxcXC5cIiArIERFQ19PQ1RFVF9SRUxBWEVEJCksXG4gICAgICAgIEgxNiQgPSBzdWJleHAoSEVYRElHJCQgKyBcInsxLDR9XCIpLFxuICAgICAgICBMUzMyJCA9IHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIiArIEgxNiQpICsgXCJ8XCIgKyBJUFY0QUREUkVTUyQpLFxuICAgICAgICBJUFY2QUREUkVTUzEkID0gc3ViZXhwKHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezZ9XCIgKyBMUzMyJCksXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgNiggaDE2IFwiOlwiICkgbHMzMlxuICAgIElQVjZBRERSRVNTMiQgPSBzdWJleHAoXCJcXFxcOlxcXFw6XCIgKyBzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcIns1fVwiICsgTFMzMiQpLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICBcIjo6XCIgNSggaDE2IFwiOlwiICkgbHMzMlxuICAgIElQVjZBRERSRVNTMyQgPSBzdWJleHAoc3ViZXhwKEgxNiQpICsgXCI/XFxcXDpcXFxcOlwiICsgc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7NH1cIiArIExTMzIkKSxcbiAgICAgICAgLy9bICAgICAgICAgICAgICAgaDE2IF0gXCI6OlwiIDQoIGgxNiBcIjpcIiApIGxzMzJcbiAgICBJUFY2QUREUkVTUzQkID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDF9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiArIHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezN9XCIgKyBMUzMyJCksXG4gICAgICAgIC8vWyAqMSggaDE2IFwiOlwiICkgaDE2IF0gXCI6OlwiIDMoIGgxNiBcIjpcIiApIGxzMzJcbiAgICBJUFY2QUREUkVTUzUkID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDJ9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiArIHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezJ9XCIgKyBMUzMyJCksXG4gICAgICAgIC8vWyAqMiggaDE2IFwiOlwiICkgaDE2IF0gXCI6OlwiIDIoIGgxNiBcIjpcIiApIGxzMzJcbiAgICBJUFY2QUREUkVTUzYkID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDN9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiArIEgxNiQgKyBcIlxcXFw6XCIgKyBMUzMyJCksXG4gICAgICAgIC8vWyAqMyggaDE2IFwiOlwiICkgaDE2IF0gXCI6OlwiICAgIGgxNiBcIjpcIiAgIGxzMzJcbiAgICBJUFY2QUREUkVTUzckID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDR9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiArIExTMzIkKSxcbiAgICAgICAgLy9bICo0KCBoMTYgXCI6XCIgKSBoMTYgXSBcIjo6XCIgICAgICAgICAgICAgIGxzMzJcbiAgICBJUFY2QUREUkVTUzgkID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDV9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiArIEgxNiQpLFxuICAgICAgICAvL1sgKjUoIGgxNiBcIjpcIiApIGgxNiBdIFwiOjpcIiAgICAgICAgICAgICAgaDE2XG4gICAgSVBWNkFERFJFU1M5JCA9IHN1YmV4cChzdWJleHAoc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7MCw2fVwiICsgSDE2JCkgKyBcIj9cXFxcOlxcXFw6XCIpLFxuICAgICAgICAvL1sgKjYoIGgxNiBcIjpcIiApIGgxNiBdIFwiOjpcIlxuICAgIElQVjZBRERSRVNTJCA9IHN1YmV4cChbSVBWNkFERFJFU1MxJCwgSVBWNkFERFJFU1MyJCwgSVBWNkFERFJFU1MzJCwgSVBWNkFERFJFU1M0JCwgSVBWNkFERFJFU1M1JCwgSVBWNkFERFJFU1M2JCwgSVBWNkFERFJFU1M3JCwgSVBWNkFERFJFU1M4JCwgSVBWNkFERFJFU1M5JF0uam9pbihcInxcIikpLFxuICAgICAgICBaT05FSUQkID0gc3ViZXhwKHN1YmV4cChVTlJFU0VSVkVEJCQgKyBcInxcIiArIFBDVF9FTkNPREVEJCkgKyBcIitcIiksXG4gICAgICAgIC8vUkZDIDY4NzRcbiAgICBJUFY2QUREUlokID0gc3ViZXhwKElQVjZBRERSRVNTJCArIFwiXFxcXCUyNVwiICsgWk9ORUlEJCksXG4gICAgICAgIC8vUkZDIDY4NzRcbiAgICBJUFY2QUREUlpfUkVMQVhFRCQgPSBzdWJleHAoSVBWNkFERFJFU1MkICsgc3ViZXhwKFwiXFxcXCUyNXxcXFxcJSg/IVwiICsgSEVYRElHJCQgKyBcInsyfSlcIikgKyBaT05FSUQkKSxcbiAgICAgICAgLy9SRkMgNjg3NCwgd2l0aCByZWxheGVkIHBhcnNpbmcgcnVsZXNcbiAgICBJUFZGVVRVUkUkID0gc3ViZXhwKFwiW3ZWXVwiICsgSEVYRElHJCQgKyBcIitcXFxcLlwiICsgbWVyZ2UoVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFw6XVwiKSArIFwiK1wiKSxcbiAgICAgICAgSVBfTElURVJBTCQgPSBzdWJleHAoXCJcXFxcW1wiICsgc3ViZXhwKElQVjZBRERSWl9SRUxBWEVEJCArIFwifFwiICsgSVBWNkFERFJFU1MkICsgXCJ8XCIgKyBJUFZGVVRVUkUkKSArIFwiXFxcXF1cIiksXG4gICAgICAgIC8vUkZDIDY4NzRcbiAgICBSRUdfTkFNRSQgPSBzdWJleHAoc3ViZXhwKFBDVF9FTkNPREVEJCArIFwifFwiICsgbWVyZ2UoVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQpKSArIFwiKlwiKSxcbiAgICAgICAgSE9TVCQgPSBzdWJleHAoSVBfTElURVJBTCQgKyBcInxcIiArIElQVjRBRERSRVNTJCArIFwiKD8hXCIgKyBSRUdfTkFNRSQgKyBcIilcIiArIFwifFwiICsgUkVHX05BTUUkKSxcbiAgICAgICAgUE9SVCQgPSBzdWJleHAoRElHSVQkJCArIFwiKlwiKSxcbiAgICAgICAgQVVUSE9SSVRZJCA9IHN1YmV4cChzdWJleHAoVVNFUklORk8kICsgXCJAXCIpICsgXCI/XCIgKyBIT1NUJCArIHN1YmV4cChcIlxcXFw6XCIgKyBQT1JUJCkgKyBcIj9cIiksXG4gICAgICAgIFBDSEFSJCA9IHN1YmV4cChQQ1RfRU5DT0RFRCQgKyBcInxcIiArIG1lcmdlKFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkLCBcIltcXFxcOlxcXFxAXVwiKSksXG4gICAgICAgIFNFR01FTlQkID0gc3ViZXhwKFBDSEFSJCArIFwiKlwiKSxcbiAgICAgICAgU0VHTUVOVF9OWiQgPSBzdWJleHAoUENIQVIkICsgXCIrXCIpLFxuICAgICAgICBTRUdNRU5UX05aX05DJCA9IHN1YmV4cChzdWJleHAoUENUX0VOQ09ERUQkICsgXCJ8XCIgKyBtZXJnZShVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXEBdXCIpKSArIFwiK1wiKSxcbiAgICAgICAgUEFUSF9BQkVNUFRZJCA9IHN1YmV4cChzdWJleHAoXCJcXFxcL1wiICsgU0VHTUVOVCQpICsgXCIqXCIpLFxuICAgICAgICBQQVRIX0FCU09MVVRFJCA9IHN1YmV4cChcIlxcXFwvXCIgKyBzdWJleHAoU0VHTUVOVF9OWiQgKyBQQVRIX0FCRU1QVFkkKSArIFwiP1wiKSxcbiAgICAgICAgLy9zaW1wbGlmaWVkXG4gICAgUEFUSF9OT1NDSEVNRSQgPSBzdWJleHAoU0VHTUVOVF9OWl9OQyQgKyBQQVRIX0FCRU1QVFkkKSxcbiAgICAgICAgLy9zaW1wbGlmaWVkXG4gICAgUEFUSF9ST09UTEVTUyQgPSBzdWJleHAoU0VHTUVOVF9OWiQgKyBQQVRIX0FCRU1QVFkkKSxcbiAgICAgICAgLy9zaW1wbGlmaWVkXG4gICAgUEFUSF9FTVBUWSQgPSBcIig/IVwiICsgUENIQVIkICsgXCIpXCIsXG4gICAgICAgIFBBVEgkID0gc3ViZXhwKFBBVEhfQUJFTVBUWSQgKyBcInxcIiArIFBBVEhfQUJTT0xVVEUkICsgXCJ8XCIgKyBQQVRIX05PU0NIRU1FJCArIFwifFwiICsgUEFUSF9ST09UTEVTUyQgKyBcInxcIiArIFBBVEhfRU1QVFkkKSxcbiAgICAgICAgUVVFUlkkID0gc3ViZXhwKHN1YmV4cChQQ0hBUiQgKyBcInxcIiArIG1lcmdlKFwiW1xcXFwvXFxcXD9dXCIsIElQUklWQVRFJCQpKSArIFwiKlwiKSxcbiAgICAgICAgRlJBR01FTlQkID0gc3ViZXhwKHN1YmV4cChQQ0hBUiQgKyBcInxbXFxcXC9cXFxcP11cIikgKyBcIipcIiksXG4gICAgICAgIEhJRVJfUEFSVCQgPSBzdWJleHAoc3ViZXhwKFwiXFxcXC9cXFxcL1wiICsgQVVUSE9SSVRZJCArIFBBVEhfQUJFTVBUWSQpICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9ST09UTEVTUyQgKyBcInxcIiArIFBBVEhfRU1QVFkkKSxcbiAgICAgICAgVVJJJCA9IHN1YmV4cChTQ0hFTUUkICsgXCJcXFxcOlwiICsgSElFUl9QQVJUJCArIHN1YmV4cChcIlxcXFw/XCIgKyBRVUVSWSQpICsgXCI/XCIgKyBzdWJleHAoXCJcXFxcI1wiICsgRlJBR01FTlQkKSArIFwiP1wiKSxcbiAgICAgICAgUkVMQVRJVkVfUEFSVCQgPSBzdWJleHAoc3ViZXhwKFwiXFxcXC9cXFxcL1wiICsgQVVUSE9SSVRZJCArIFBBVEhfQUJFTVBUWSQpICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9OT1NDSEVNRSQgKyBcInxcIiArIFBBVEhfRU1QVFkkKSxcbiAgICAgICAgUkVMQVRJVkUkID0gc3ViZXhwKFJFTEFUSVZFX1BBUlQkICsgc3ViZXhwKFwiXFxcXD9cIiArIFFVRVJZJCkgKyBcIj9cIiArIHN1YmV4cChcIlxcXFwjXCIgKyBGUkFHTUVOVCQpICsgXCI/XCIpLFxuICAgICAgICBVUklfUkVGRVJFTkNFJCA9IHN1YmV4cChVUkkkICsgXCJ8XCIgKyBSRUxBVElWRSQpLFxuICAgICAgICBBQlNPTFVURV9VUkkkID0gc3ViZXhwKFNDSEVNRSQgKyBcIlxcXFw6XCIgKyBISUVSX1BBUlQkICsgc3ViZXhwKFwiXFxcXD9cIiArIFFVRVJZJCkgKyBcIj9cIiksXG4gICAgICAgIEdFTkVSSUNfUkVGJCA9IFwiXihcIiArIFNDSEVNRSQgKyBcIilcXFxcOlwiICsgc3ViZXhwKHN1YmV4cChcIlxcXFwvXFxcXC8oXCIgKyBzdWJleHAoXCIoXCIgKyBVU0VSSU5GTyQgKyBcIilAXCIpICsgXCI/KFwiICsgSE9TVCQgKyBcIilcIiArIHN1YmV4cChcIlxcXFw6KFwiICsgUE9SVCQgKyBcIilcIikgKyBcIj8pXCIpICsgXCI/KFwiICsgUEFUSF9BQkVNUFRZJCArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfUk9PVExFU1MkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCArIFwiKVwiKSArIHN1YmV4cChcIlxcXFw/KFwiICsgUVVFUlkkICsgXCIpXCIpICsgXCI/XCIgKyBzdWJleHAoXCJcXFxcIyhcIiArIEZSQUdNRU5UJCArIFwiKVwiKSArIFwiPyRcIixcbiAgICAgICAgUkVMQVRJVkVfUkVGJCA9IFwiXigpezB9XCIgKyBzdWJleHAoc3ViZXhwKFwiXFxcXC9cXFxcLyhcIiArIHN1YmV4cChcIihcIiArIFVTRVJJTkZPJCArIFwiKUBcIikgKyBcIj8oXCIgKyBIT1NUJCArIFwiKVwiICsgc3ViZXhwKFwiXFxcXDooXCIgKyBQT1JUJCArIFwiKVwiKSArIFwiPylcIikgKyBcIj8oXCIgKyBQQVRIX0FCRU1QVFkkICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9OT1NDSEVNRSQgKyBcInxcIiArIFBBVEhfRU1QVFkkICsgXCIpXCIpICsgc3ViZXhwKFwiXFxcXD8oXCIgKyBRVUVSWSQgKyBcIilcIikgKyBcIj9cIiArIHN1YmV4cChcIlxcXFwjKFwiICsgRlJBR01FTlQkICsgXCIpXCIpICsgXCI/JFwiLFxuICAgICAgICBBQlNPTFVURV9SRUYkID0gXCJeKFwiICsgU0NIRU1FJCArIFwiKVxcXFw6XCIgKyBzdWJleHAoc3ViZXhwKFwiXFxcXC9cXFxcLyhcIiArIHN1YmV4cChcIihcIiArIFVTRVJJTkZPJCArIFwiKUBcIikgKyBcIj8oXCIgKyBIT1NUJCArIFwiKVwiICsgc3ViZXhwKFwiXFxcXDooXCIgKyBQT1JUJCArIFwiKVwiKSArIFwiPylcIikgKyBcIj8oXCIgKyBQQVRIX0FCRU1QVFkkICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9ST09UTEVTUyQgKyBcInxcIiArIFBBVEhfRU1QVFkkICsgXCIpXCIpICsgc3ViZXhwKFwiXFxcXD8oXCIgKyBRVUVSWSQgKyBcIilcIikgKyBcIj8kXCIsXG4gICAgICAgIFNBTUVET0NfUkVGJCA9IFwiXlwiICsgc3ViZXhwKFwiXFxcXCMoXCIgKyBGUkFHTUVOVCQgKyBcIilcIikgKyBcIj8kXCIsXG4gICAgICAgIEFVVEhPUklUWV9SRUYkID0gXCJeXCIgKyBzdWJleHAoXCIoXCIgKyBVU0VSSU5GTyQgKyBcIilAXCIpICsgXCI/KFwiICsgSE9TVCQgKyBcIilcIiArIHN1YmV4cChcIlxcXFw6KFwiICsgUE9SVCQgKyBcIilcIikgKyBcIj8kXCI7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgTk9UX1NDSEVNRTogbmV3IFJlZ0V4cChtZXJnZShcIlteXVwiLCBBTFBIQSQkLCBESUdJVCQkLCBcIltcXFxcK1xcXFwtXFxcXC5dXCIpLCBcImdcIiksXG4gICAgICAgIE5PVF9VU0VSSU5GTzogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVcXFxcOl1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQpLCBcImdcIiksXG4gICAgICAgIE5PVF9IT1NUOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJVxcXFxbXFxcXF1cXFxcOl1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQpLCBcImdcIiksXG4gICAgICAgIE5PVF9QQVRIOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJVxcXFwvXFxcXDpcXFxcQF1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQpLCBcImdcIiksXG4gICAgICAgIE5PVF9QQVRIX05PU0NIRU1FOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJVxcXFwvXFxcXEBdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxuICAgICAgICBOT1RfUVVFUlk6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXDpcXFxcQFxcXFwvXFxcXD9dXCIsIElQUklWQVRFJCQpLCBcImdcIiksXG4gICAgICAgIE5PVF9GUkFHTUVOVDogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkLCBcIltcXFxcOlxcXFxAXFxcXC9cXFxcP11cIiksIFwiZ1wiKSxcbiAgICAgICAgRVNDQVBFOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15dXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxuICAgICAgICBVTlJFU0VSVkVEOiBuZXcgUmVnRXhwKFVOUkVTRVJWRUQkJCwgXCJnXCIpLFxuICAgICAgICBPVEhFUl9DSEFSUzogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVdXCIsIFVOUkVTRVJWRUQkJCwgUkVTRVJWRUQkJCksIFwiZ1wiKSxcbiAgICAgICAgUENUX0VOQ09ERUQ6IG5ldyBSZWdFeHAoUENUX0VOQ09ERUQkLCBcImdcIiksXG4gICAgICAgIElQVjRBRERSRVNTOiBuZXcgUmVnRXhwKFwiXihcIiArIElQVjRBRERSRVNTJCArIFwiKSRcIiksXG4gICAgICAgIElQVjZBRERSRVNTOiBuZXcgUmVnRXhwKFwiXlxcXFxbPyhcIiArIElQVjZBRERSRVNTJCArIFwiKVwiICsgc3ViZXhwKHN1YmV4cChcIlxcXFwlMjV8XFxcXCUoPyFcIiArIEhFWERJRyQkICsgXCJ7Mn0pXCIpICsgXCIoXCIgKyBaT05FSUQkICsgXCIpXCIpICsgXCI/XFxcXF0/JFwiKSAvL1JGQyA2ODc0LCB3aXRoIHJlbGF4ZWQgcGFyc2luZyBydWxlc1xuICAgIH07XG59XG52YXIgVVJJX1BST1RPQ09MID0gYnVpbGRFeHBzKGZhbHNlKTtcblxudmFyIElSSV9QUk9UT0NPTCA9IGJ1aWxkRXhwcyh0cnVlKTtcblxudmFyIHNsaWNlZFRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIHNsaWNlSXRlcmF0b3IoYXJyLCBpKSB7XG4gICAgdmFyIF9hcnIgPSBbXTtcbiAgICB2YXIgX24gPSB0cnVlO1xuICAgIHZhciBfZCA9IGZhbHNlO1xuICAgIHZhciBfZSA9IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7XG4gICAgICAgIF9hcnIucHVzaChfcy52YWx1ZSk7XG5cbiAgICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgX2QgPSB0cnVlO1xuICAgICAgX2UgPSBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0pIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBfYXJyO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChhcnIsIGkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH0gZWxzZSBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSB7XG4gICAgICByZXR1cm4gc2xpY2VJdGVyYXRvcihhcnIsIGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbiAgICB9XG4gIH07XG59KCk7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciB0b0NvbnN1bWFibGVBcnJheSA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG5cbiAgICByZXR1cm4gYXJyMjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShhcnIpO1xuICB9XG59O1xuXG4vKiogSGlnaGVzdCBwb3NpdGl2ZSBzaWduZWQgMzItYml0IGZsb2F0IHZhbHVlICovXG5cbnZhciBtYXhJbnQgPSAyMTQ3NDgzNjQ3OyAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cbi8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cbnZhciBiYXNlID0gMzY7XG52YXIgdE1pbiA9IDE7XG52YXIgdE1heCA9IDI2O1xudmFyIHNrZXcgPSAzODtcbnZhciBkYW1wID0gNzAwO1xudmFyIGluaXRpYWxCaWFzID0gNzI7XG52YXIgaW5pdGlhbE4gPSAxMjg7IC8vIDB4ODBcbnZhciBkZWxpbWl0ZXIgPSAnLSc7IC8vICdcXHgyRCdcblxuLyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cbnZhciByZWdleFB1bnljb2RlID0gL154bi0tLztcbnZhciByZWdleE5vbkFTQ0lJID0gL1teXFwwLVxceDdFXS87IC8vIG5vbi1BU0NJSSBjaGFyc1xudmFyIHJlZ2V4U2VwYXJhdG9ycyA9IC9bXFx4MkVcXHUzMDAyXFx1RkYwRVxcdUZGNjFdL2c7IC8vIFJGQyAzNDkwIHNlcGFyYXRvcnNcblxuLyoqIEVycm9yIG1lc3NhZ2VzICovXG52YXIgZXJyb3JzID0ge1xuXHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHQnaW52YWxpZC1pbnB1dCc6ICdJbnZhbGlkIGlucHV0J1xufTtcblxuLyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xudmFyIGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbjtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgc3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIGVycm9yJDEodHlwZSkge1xuXHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xufVxuXG4vKipcbiAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcbiAqIGl0ZW0uXG4gKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IGFycmF5IG9mIHZhbHVlcyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0dmFyIHJlc3VsdCA9IFtdO1xuXHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRyZXN1bHRbbGVuZ3RoXSA9IGZuKGFycmF5W2xlbmd0aF0pO1xuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG4gKiBhZGRyZXNzZXMuXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZvciBldmVyeVxuICogY2hhcmFjdGVyLlxuICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcbiAqIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHR2YXIgcGFydHMgPSBzdHJpbmcuc3BsaXQoJ0AnKTtcblx0dmFyIHJlc3VsdCA9ICcnO1xuXHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdC8vIEluIGVtYWlsIGFkZHJlc3Nlcywgb25seSB0aGUgZG9tYWluIG5hbWUgc2hvdWxkIGJlIHB1bnljb2RlZC4gTGVhdmVcblx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdHN0cmluZyA9IHBhcnRzWzFdO1xuXHR9XG5cdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocmVnZXhTZXBhcmF0b3JzLCAnXFx4MkUnKTtcblx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdHJldHVybiByZXN1bHQgKyBlbmNvZGVkO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgbnVtZXJpYyBjb2RlIHBvaW50cyBvZiBlYWNoIFVuaWNvZGVcbiAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcbiAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG4gKiBVQ1MtMiBleHBvc2VzIGFzIHNlcGFyYXRlIGNoYXJhY3RlcnMpIGludG8gYSBzaW5nbGUgY29kZSBwb2ludCxcbiAqIG1hdGNoaW5nIFVURi0xNi5cbiAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG4gKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuICogQG5hbWUgZGVjb2RlXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyaW5nIFRoZSBVbmljb2RlIGlucHV0IHN0cmluZyAoVUNTLTIpLlxuICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuICovXG5mdW5jdGlvbiB1Y3MyZGVjb2RlKHN0cmluZykge1xuXHR2YXIgb3V0cHV0ID0gW107XG5cdHZhciBjb3VudGVyID0gMDtcblx0dmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG5cdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0dmFyIHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHQvLyBJdCdzIGEgaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyLlxuXHRcdFx0dmFyIGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkge1xuXHRcdFx0XHQvLyBMb3cgc3Vycm9nYXRlLlxuXHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gSXQncyBhbiB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGVcblx0XHRcdFx0Ly8gbmV4dCBjb2RlIHVuaXQgaXMgdGhlIGhpZ2ggc3Vycm9nYXRlIG9mIGEgc3Vycm9nYXRlIHBhaXIuXG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0Y291bnRlci0tO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvdXRwdXQucHVzaCh2YWx1ZSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvdXRwdXQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0cmluZyBiYXNlZCBvbiBhbiBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG4gKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuICogQG5hbWUgZW5jb2RlXG4gKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuICovXG52YXIgdWNzMmVuY29kZSA9IGZ1bmN0aW9uIHVjczJlbmNvZGUoYXJyYXkpIHtcblx0cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50LmFwcGx5KFN0cmluZywgdG9Db25zdW1hYmxlQXJyYXkoYXJyYXkpKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBiYXNpYyBjb2RlIHBvaW50IGludG8gYSBkaWdpdC9pbnRlZ2VyLlxuICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IGNvZGVQb2ludCBUaGUgYmFzaWMgbnVtZXJpYyBjb2RlIHBvaW50IHZhbHVlLlxuICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG4gKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG4gKiB0aGUgY29kZSBwb2ludCBkb2VzIG5vdCByZXByZXNlbnQgYSB2YWx1ZS5cbiAqL1xudmFyIGJhc2ljVG9EaWdpdCA9IGZ1bmN0aW9uIGJhc2ljVG9EaWdpdChjb2RlUG9pbnQpIHtcblx0aWYgKGNvZGVQb2ludCAtIDB4MzAgPCAweDBBKSB7XG5cdFx0cmV0dXJuIGNvZGVQb2ludCAtIDB4MTY7XG5cdH1cblx0aWYgKGNvZGVQb2ludCAtIDB4NDEgPCAweDFBKSB7XG5cdFx0cmV0dXJuIGNvZGVQb2ludCAtIDB4NDE7XG5cdH1cblx0aWYgKGNvZGVQb2ludCAtIDB4NjEgPCAweDFBKSB7XG5cdFx0cmV0dXJuIGNvZGVQb2ludCAtIDB4NjE7XG5cdH1cblx0cmV0dXJuIGJhc2U7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cbiAqIEBzZWUgYGJhc2ljVG9EaWdpdCgpYFxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgYmFzaWMgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSAod2hlbiB1c2VkIGZvclxuICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2VcbiAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuICogdXNlZDsgZWxzZSwgdGhlIGxvd2VyY2FzZSBmb3JtIGlzIHVzZWQuIFRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWRcbiAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG4gKi9cbnZhciBkaWdpdFRvQmFzaWMgPSBmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0Ly8gMjYuLjM1IG1hcCB0byBBU0NJSSAwLi45XG5cdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG59O1xuXG4vKipcbiAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG4gKiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ5MiNzZWN0aW9uLTMuNFxuICogQHByaXZhdGVcbiAqL1xudmFyIGFkYXB0ID0gZnVuY3Rpb24gYWRhcHQoZGVsdGEsIG51bVBvaW50cywgZmlyc3RUaW1lKSB7XG5cdHZhciBrID0gMDtcblx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0ZGVsdGEgKz0gZmxvb3IoZGVsdGEgLyBudW1Qb2ludHMpO1xuXHRmb3IgKDsgLyogbm8gaW5pdGlhbGl6YXRpb24gKi9kZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0fVxuXHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcbiAqIHN5bWJvbHMuXG4gKiBAbWVtYmVyT2YgcHVueWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cbiAqL1xudmFyIGRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShpbnB1dCkge1xuXHQvLyBEb24ndCB1c2UgVUNTLTIuXG5cdHZhciBvdXRwdXQgPSBbXTtcblx0dmFyIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXHR2YXIgaSA9IDA7XG5cdHZhciBuID0gaW5pdGlhbE47XG5cdHZhciBiaWFzID0gaW5pdGlhbEJpYXM7XG5cblx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdC8vIHBvaW50cyBiZWZvcmUgdGhlIGxhc3QgZGVsaW1pdGVyLCBvciBgMGAgaWYgdGhlcmUgaXMgbm9uZSwgdGhlbiBjb3B5XG5cdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdHZhciBiYXNpYyA9IGlucHV0Lmxhc3RJbmRleE9mKGRlbGltaXRlcik7XG5cdGlmIChiYXNpYyA8IDApIHtcblx0XHRiYXNpYyA9IDA7XG5cdH1cblxuXHRmb3IgKHZhciBqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHQvLyBpZiBpdCdzIG5vdCBhIGJhc2ljIGNvZGUgcG9pbnRcblx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRlcnJvciQxKCdub3QtYmFzaWMnKTtcblx0XHR9XG5cdFx0b3V0cHV0LnB1c2goaW5wdXQuY2hhckNvZGVBdChqKSk7XG5cdH1cblxuXHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdC8vIHBvaW50cyB3ZXJlIGNvcGllZDsgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvdGhlcndpc2UuXG5cblx0Zm9yICh2YXIgaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOykgLyogbm8gZmluYWwgZXhwcmVzc2lvbiAqL3tcblxuXHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHQvLyBEZWNvZGUgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlciBpbnRvIGBkZWx0YWAsXG5cdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdC8vIHZhbHVlIGF0IHRoZSBlbmQgdG8gb2J0YWluIGBkZWx0YWAuXG5cdFx0dmFyIG9sZGkgPSBpO1xuXHRcdGZvciAodmFyIHcgPSAxLCBrID0gYmFzZTs7IC8qIG5vIGNvbmRpdGlvbiAqL2sgKz0gYmFzZSkge1xuXG5cdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0ZXJyb3IkMSgnaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdGlmIChkaWdpdCA+PSBiYXNlIHx8IGRpZ2l0ID4gZmxvb3IoKG1heEludCAtIGkpIC8gdykpIHtcblx0XHRcdFx0ZXJyb3IkMSgnb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHR2YXIgdCA9IGsgPD0gYmlhcyA/IHRNaW4gOiBrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzO1xuXG5cdFx0XHRpZiAoZGlnaXQgPCB0KSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgYmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRlcnJvciQxKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cdFx0fVxuXG5cdFx0dmFyIG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdGJpYXMgPSBhZGFwdChpIC0gb2xkaSwgb3V0LCBvbGRpID09IDApO1xuXG5cdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdGlmIChmbG9vcihpIC8gb3V0KSA+IG1heEludCAtIG4pIHtcblx0XHRcdGVycm9yJDEoJ292ZXJmbG93Jyk7XG5cdFx0fVxuXG5cdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRpICU9IG91dDtcblxuXHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXQuXG5cdFx0b3V0cHV0LnNwbGljZShpKyssIDAsIG4pO1xuXHR9XG5cblx0cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50LmFwcGx5KFN0cmluZywgb3V0cHV0KTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcbiAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG4gKiBAbWVtYmVyT2YgcHVueWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cbiAqL1xudmFyIGVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHR2YXIgb3V0cHV0ID0gW107XG5cblx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gYW4gYXJyYXkgb2YgVW5pY29kZSBjb2RlIHBvaW50cy5cblx0aW5wdXQgPSB1Y3MyZGVjb2RlKGlucHV0KTtcblxuXHQvLyBDYWNoZSB0aGUgbGVuZ3RoLlxuXHR2YXIgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGUuXG5cdHZhciBuID0gaW5pdGlhbE47XG5cdHZhciBkZWx0YSA9IDA7XG5cdHZhciBiaWFzID0gaW5pdGlhbEJpYXM7XG5cblx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50cy5cblx0dmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlO1xuXHR2YXIgX2RpZEl0ZXJhdG9yRXJyb3IgPSBmYWxzZTtcblx0dmFyIF9pdGVyYXRvckVycm9yID0gdW5kZWZpbmVkO1xuXG5cdHRyeSB7XG5cdFx0Zm9yICh2YXIgX2l0ZXJhdG9yID0gaW5wdXRbU3ltYm9sLml0ZXJhdG9yXSgpLCBfc3RlcDsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gKF9zdGVwID0gX2l0ZXJhdG9yLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlKSB7XG5cdFx0XHR2YXIgX2N1cnJlbnRWYWx1ZTIgPSBfc3RlcC52YWx1ZTtcblxuXHRcdFx0aWYgKF9jdXJyZW50VmFsdWUyIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoX2N1cnJlbnRWYWx1ZTIpKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdF9kaWRJdGVyYXRvckVycm9yID0gdHJ1ZTtcblx0XHRfaXRlcmF0b3JFcnJvciA9IGVycjtcblx0fSBmaW5hbGx5IHtcblx0XHR0cnkge1xuXHRcdFx0aWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uICYmIF9pdGVyYXRvci5yZXR1cm4pIHtcblx0XHRcdFx0X2l0ZXJhdG9yLnJldHVybigpO1xuXHRcdFx0fVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoX2RpZEl0ZXJhdG9yRXJyb3IpIHtcblx0XHRcdFx0dGhyb3cgX2l0ZXJhdG9yRXJyb3I7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dmFyIGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblx0dmFyIGhhbmRsZWRDUENvdW50ID0gYmFzaWNMZW5ndGg7XG5cblx0Ly8gYGhhbmRsZWRDUENvdW50YCBpcyB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgaGF2ZSBiZWVuIGhhbmRsZWQ7XG5cdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyB3aXRoIGEgZGVsaW1pdGVyIHVubGVzcyBpdCdzIGVtcHR5LlxuXHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRvdXRwdXQucHVzaChkZWxpbWl0ZXIpO1xuXHR9XG5cblx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHR3aGlsZSAoaGFuZGxlZENQQ291bnQgPCBpbnB1dExlbmd0aCkge1xuXG5cdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0dmFyIG0gPSBtYXhJbnQ7XG5cdFx0dmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gdHJ1ZTtcblx0XHR2YXIgX2RpZEl0ZXJhdG9yRXJyb3IyID0gZmFsc2U7XG5cdFx0dmFyIF9pdGVyYXRvckVycm9yMiA9IHVuZGVmaW5lZDtcblxuXHRcdHRyeSB7XG5cdFx0XHRmb3IgKHZhciBfaXRlcmF0b3IyID0gaW5wdXRbU3ltYm9sLml0ZXJhdG9yXSgpLCBfc3RlcDI7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgPSAoX3N0ZXAyID0gX2l0ZXJhdG9yMi5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiA9IHRydWUpIHtcblx0XHRcdFx0dmFyIGN1cnJlbnRWYWx1ZSA9IF9zdGVwMi52YWx1ZTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3cuXG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRfZGlkSXRlcmF0b3JFcnJvcjIgPSB0cnVlO1xuXHRcdFx0X2l0ZXJhdG9yRXJyb3IyID0gZXJyO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yICYmIF9pdGVyYXRvcjIucmV0dXJuKSB7XG5cdFx0XHRcdFx0X2l0ZXJhdG9yMi5yZXR1cm4oKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0aWYgKF9kaWRJdGVyYXRvckVycm9yMikge1xuXHRcdFx0XHRcdHRocm93IF9pdGVyYXRvckVycm9yMjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0aWYgKG0gLSBuID4gZmxvb3IoKG1heEludCAtIGRlbHRhKSAvIGhhbmRsZWRDUENvdW50UGx1c09uZSkpIHtcblx0XHRcdGVycm9yJDEoJ292ZXJmbG93Jyk7XG5cdFx0fVxuXG5cdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRuID0gbTtcblxuXHRcdHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyA9IHRydWU7XG5cdFx0dmFyIF9kaWRJdGVyYXRvckVycm9yMyA9IGZhbHNlO1xuXHRcdHZhciBfaXRlcmF0b3JFcnJvcjMgPSB1bmRlZmluZWQ7XG5cblx0XHR0cnkge1xuXHRcdFx0Zm9yICh2YXIgX2l0ZXJhdG9yMyA9IGlucHV0W1N5bWJvbC5pdGVyYXRvcl0oKSwgX3N0ZXAzOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zID0gKF9zdGVwMyA9IF9pdGVyYXRvcjMubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMgPSB0cnVlKSB7XG5cdFx0XHRcdHZhciBfY3VycmVudFZhbHVlID0gX3N0ZXAzLnZhbHVlO1xuXG5cdFx0XHRcdGlmIChfY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IkMSgnb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoX2N1cnJlbnRWYWx1ZSA9PSBuKSB7XG5cdFx0XHRcdFx0Ly8gUmVwcmVzZW50IGRlbHRhIGFzIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIuXG5cdFx0XHRcdFx0dmFyIHEgPSBkZWx0YTtcblx0XHRcdFx0XHRmb3IgKHZhciBrID0gYmFzZTs7IC8qIG5vIGNvbmRpdGlvbiAqL2sgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dmFyIHQgPSBrIDw9IGJpYXMgPyB0TWluIDogayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcztcblx0XHRcdFx0XHRcdGlmIChxIDwgdCkge1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHZhciBxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHR2YXIgYmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKSk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRfZGlkSXRlcmF0b3JFcnJvcjMgPSB0cnVlO1xuXHRcdFx0X2l0ZXJhdG9yRXJyb3IzID0gZXJyO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zICYmIF9pdGVyYXRvcjMucmV0dXJuKSB7XG5cdFx0XHRcdFx0X2l0ZXJhdG9yMy5yZXR1cm4oKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0aWYgKF9kaWRJdGVyYXRvckVycm9yMykge1xuXHRcdFx0XHRcdHRocm93IF9pdGVyYXRvckVycm9yMztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdCsrZGVsdGE7XG5cdFx0KytuO1xuXHR9XG5cdHJldHVybiBvdXRwdXQuam9pbignJyk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3NcbiAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cbiAqIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IG9uIGEgc3RyaW5nIHRoYXQgaGFzIGFscmVhZHkgYmVlblxuICogY29udmVydGVkIHRvIFVuaWNvZGUuXG4gKiBAbWVtYmVyT2YgcHVueWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGVkIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG9cbiAqIGNvbnZlcnQgdG8gVW5pY29kZS5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuICogc3RyaW5nLlxuICovXG52YXIgdG9Vbmljb2RlID0gZnVuY3Rpb24gdG9Vbmljb2RlKGlucHV0KSB7XG5cdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uIChzdHJpbmcpIHtcblx0XHRyZXR1cm4gcmVnZXhQdW55Y29kZS50ZXN0KHN0cmluZykgPyBkZWNvZGUoc3RyaW5nLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpIDogc3RyaW5nO1xuXHR9KTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG4gKiBQdW55Y29kZS4gT25seSB0aGUgbm9uLUFTQ0lJIHBhcnRzIG9mIHRoZSBkb21haW4gbmFtZSB3aWxsIGJlIGNvbnZlcnRlZCxcbiAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuICogQVNDSUkuXG4gKiBAbWVtYmVyT2YgcHVueWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG4gKiBVbmljb2RlIHN0cmluZy5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBQdW55Y29kZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gZG9tYWluIG5hbWUgb3JcbiAqIGVtYWlsIGFkZHJlc3MuXG4gKi9cbnZhciB0b0FTQ0lJID0gZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbiAoc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpID8gJ3huLS0nICsgZW5jb2RlKHN0cmluZykgOiBzdHJpbmc7XG5cdH0pO1xufTtcblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cbnZhciBwdW55Y29kZSA9IHtcblx0LyoqXG4gICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuICAqIEBtZW1iZXJPZiBwdW55Y29kZVxuICAqIEB0eXBlIFN0cmluZ1xuICAqL1xuXHQndmVyc2lvbic6ICcyLjEuMCcsXG5cdC8qKlxuICAqIEFuIG9iamVjdCBvZiBtZXRob2RzIHRvIGNvbnZlcnQgZnJvbSBKYXZhU2NyaXB0J3MgaW50ZXJuYWwgY2hhcmFjdGVyXG4gICogcmVwcmVzZW50YXRpb24gKFVDUy0yKSB0byBVbmljb2RlIGNvZGUgcG9pbnRzLCBhbmQgYmFjay5cbiAgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cbiAgKiBAbWVtYmVyT2YgcHVueWNvZGVcbiAgKiBAdHlwZSBPYmplY3RcbiAgKi9cblx0J3VjczInOiB7XG5cdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0J2VuY29kZSc6IHVjczJlbmNvZGVcblx0fSxcblx0J2RlY29kZSc6IGRlY29kZSxcblx0J2VuY29kZSc6IGVuY29kZSxcblx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG59O1xuXG4vKipcbiAqIFVSSS5qc1xuICpcbiAqIEBmaWxlb3ZlcnZpZXcgQW4gUkZDIDM5ODYgY29tcGxpYW50LCBzY2hlbWUgZXh0ZW5kYWJsZSBVUkkgcGFyc2luZy92YWxpZGF0aW5nL3Jlc29sdmluZyBsaWJyYXJ5IGZvciBKYXZhU2NyaXB0LlxuICogQGF1dGhvciA8YSBocmVmPVwibWFpbHRvOmdhcnkuY291cnRAZ21haWwuY29tXCI+R2FyeSBDb3VydDwvYT5cbiAqIEBzZWUgaHR0cDovL2dpdGh1Yi5jb20vZ2FyeWNvdXJ0L3VyaS1qc1xuICovXG4vKipcbiAqIENvcHlyaWdodCAyMDExIEdhcnkgQ291cnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlXG4gKiBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZlxuICogICAgICAgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICpcbiAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0XG4gKiAgICAgICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFsc1xuICogICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR0FSWSBDT1VSVCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRURcbiAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkRcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBHQVJZIENPVVJUIE9SXG4gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUlxuICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUlxuICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElOR1xuICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGXG4gKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqXG4gKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYXJlIHRob3NlIG9mIHRoZVxuICogYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcgb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWRcbiAqIG9yIGltcGxpZWQsIG9mIEdhcnkgQ291cnQuXG4gKi9cbnZhciBTQ0hFTUVTID0ge307XG5mdW5jdGlvbiBwY3RFbmNDaGFyKGNocikge1xuICAgIHZhciBjID0gY2hyLmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIGUgPSB2b2lkIDA7XG4gICAgaWYgKGMgPCAxNikgZSA9IFwiJTBcIiArIGMudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7ZWxzZSBpZiAoYyA8IDEyOCkgZSA9IFwiJVwiICsgYy50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtlbHNlIGlmIChjIDwgMjA0OCkgZSA9IFwiJVwiICsgKGMgPj4gNiB8IDE5MikudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkgKyBcIiVcIiArIChjICYgNjMgfCAxMjgpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO2Vsc2UgZSA9IFwiJVwiICsgKGMgPj4gMTIgfCAyMjQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpICsgXCIlXCIgKyAoYyA+PiA2ICYgNjMgfCAxMjgpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpICsgXCIlXCIgKyAoYyAmIDYzIHwgMTI4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbiAgICByZXR1cm4gZTtcbn1cbmZ1bmN0aW9uIHBjdERlY0NoYXJzKHN0cikge1xuICAgIHZhciBuZXdTdHIgPSBcIlwiO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgaWwgPSBzdHIubGVuZ3RoO1xuICAgIHdoaWxlIChpIDwgaWwpIHtcbiAgICAgICAgdmFyIGMgPSBwYXJzZUludChzdHIuc3Vic3RyKGkgKyAxLCAyKSwgMTYpO1xuICAgICAgICBpZiAoYyA8IDEyOCkge1xuICAgICAgICAgICAgbmV3U3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gICAgICAgICAgICBpICs9IDM7XG4gICAgICAgIH0gZWxzZSBpZiAoYyA+PSAxOTQgJiYgYyA8IDIyNCkge1xuICAgICAgICAgICAgaWYgKGlsIC0gaSA+PSA2KSB7XG4gICAgICAgICAgICAgICAgdmFyIGMyID0gcGFyc2VJbnQoc3RyLnN1YnN0cihpICsgNCwgMiksIDE2KTtcbiAgICAgICAgICAgICAgICBuZXdTdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoYyAmIDMxKSA8PCA2IHwgYzIgJiA2Myk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld1N0ciArPSBzdHIuc3Vic3RyKGksIDYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSArPSA2O1xuICAgICAgICB9IGVsc2UgaWYgKGMgPj0gMjI0KSB7XG4gICAgICAgICAgICBpZiAoaWwgLSBpID49IDkpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2MgPSBwYXJzZUludChzdHIuc3Vic3RyKGkgKyA0LCAyKSwgMTYpO1xuICAgICAgICAgICAgICAgIHZhciBjMyA9IHBhcnNlSW50KHN0ci5zdWJzdHIoaSArIDcsIDIpLCAxNik7XG4gICAgICAgICAgICAgICAgbmV3U3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGMgJiAxNSkgPDwgMTIgfCAoX2MgJiA2MykgPDwgNiB8IGMzICYgNjMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdTdHIgKz0gc3RyLnN1YnN0cihpLCA5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkgKz0gOTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld1N0ciArPSBzdHIuc3Vic3RyKGksIDMpO1xuICAgICAgICAgICAgaSArPSAzO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdTdHI7XG59XG5mdW5jdGlvbiBfbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcoY29tcG9uZW50cywgcHJvdG9jb2wpIHtcbiAgICBmdW5jdGlvbiBkZWNvZGVVbnJlc2VydmVkKHN0cikge1xuICAgICAgICB2YXIgZGVjU3RyID0gcGN0RGVjQ2hhcnMoc3RyKTtcbiAgICAgICAgcmV0dXJuICFkZWNTdHIubWF0Y2gocHJvdG9jb2wuVU5SRVNFUlZFRCkgPyBzdHIgOiBkZWNTdHI7XG4gICAgfVxuICAgIGlmIChjb21wb25lbnRzLnNjaGVtZSkgY29tcG9uZW50cy5zY2hlbWUgPSBTdHJpbmcoY29tcG9uZW50cy5zY2hlbWUpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShwcm90b2NvbC5OT1RfU0NIRU1FLCBcIlwiKTtcbiAgICBpZiAoY29tcG9uZW50cy51c2VyaW5mbyAhPT0gdW5kZWZpbmVkKSBjb21wb25lbnRzLnVzZXJpbmZvID0gU3RyaW5nKGNvbXBvbmVudHMudXNlcmluZm8pLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UocHJvdG9jb2wuTk9UX1VTRVJJTkZPLCBwY3RFbmNDaGFyKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSk7XG4gICAgaWYgKGNvbXBvbmVudHMuaG9zdCAhPT0gdW5kZWZpbmVkKSBjb21wb25lbnRzLmhvc3QgPSBTdHJpbmcoY29tcG9uZW50cy5ob3N0KS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UocHJvdG9jb2wuTk9UX0hPU1QsIHBjdEVuY0NoYXIpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKTtcbiAgICBpZiAoY29tcG9uZW50cy5wYXRoICE9PSB1bmRlZmluZWQpIGNvbXBvbmVudHMucGF0aCA9IFN0cmluZyhjb21wb25lbnRzLnBhdGgpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UoY29tcG9uZW50cy5zY2hlbWUgPyBwcm90b2NvbC5OT1RfUEFUSCA6IHByb3RvY29sLk5PVF9QQVRIX05PU0NIRU1FLCBwY3RFbmNDaGFyKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSk7XG4gICAgaWYgKGNvbXBvbmVudHMucXVlcnkgIT09IHVuZGVmaW5lZCkgY29tcG9uZW50cy5xdWVyeSA9IFN0cmluZyhjb21wb25lbnRzLnF1ZXJ5KS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKHByb3RvY29sLk5PVF9RVUVSWSwgcGN0RW5jQ2hhcikucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpO1xuICAgIGlmIChjb21wb25lbnRzLmZyYWdtZW50ICE9PSB1bmRlZmluZWQpIGNvbXBvbmVudHMuZnJhZ21lbnQgPSBTdHJpbmcoY29tcG9uZW50cy5mcmFnbWVudCkucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShwcm90b2NvbC5OT1RfRlJBR01FTlQsIHBjdEVuY0NoYXIpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKTtcbiAgICByZXR1cm4gY29tcG9uZW50cztcbn1cblxuZnVuY3Rpb24gX3N0cmlwTGVhZGluZ1plcm9zKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvXjAqKC4qKS8sIFwiJDFcIikgfHwgXCIwXCI7XG59XG5mdW5jdGlvbiBfbm9ybWFsaXplSVB2NChob3N0LCBwcm90b2NvbCkge1xuICAgIHZhciBtYXRjaGVzID0gaG9zdC5tYXRjaChwcm90b2NvbC5JUFY0QUREUkVTUykgfHwgW107XG5cbiAgICB2YXIgX21hdGNoZXMgPSBzbGljZWRUb0FycmF5KG1hdGNoZXMsIDIpLFxuICAgICAgICBhZGRyZXNzID0gX21hdGNoZXNbMV07XG5cbiAgICBpZiAoYWRkcmVzcykge1xuICAgICAgICByZXR1cm4gYWRkcmVzcy5zcGxpdChcIi5cIikubWFwKF9zdHJpcExlYWRpbmdaZXJvcykuam9pbihcIi5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGhvc3Q7XG4gICAgfVxufVxuZnVuY3Rpb24gX25vcm1hbGl6ZUlQdjYoaG9zdCwgcHJvdG9jb2wpIHtcbiAgICB2YXIgbWF0Y2hlcyA9IGhvc3QubWF0Y2gocHJvdG9jb2wuSVBWNkFERFJFU1MpIHx8IFtdO1xuXG4gICAgdmFyIF9tYXRjaGVzMiA9IHNsaWNlZFRvQXJyYXkobWF0Y2hlcywgMyksXG4gICAgICAgIGFkZHJlc3MgPSBfbWF0Y2hlczJbMV0sXG4gICAgICAgIHpvbmUgPSBfbWF0Y2hlczJbMl07XG5cbiAgICBpZiAoYWRkcmVzcykge1xuICAgICAgICB2YXIgX2FkZHJlc3MkdG9Mb3dlckNhc2UkID0gYWRkcmVzcy50b0xvd2VyQ2FzZSgpLnNwbGl0KCc6OicpLnJldmVyc2UoKSxcbiAgICAgICAgICAgIF9hZGRyZXNzJHRvTG93ZXJDYXNlJDIgPSBzbGljZWRUb0FycmF5KF9hZGRyZXNzJHRvTG93ZXJDYXNlJCwgMiksXG4gICAgICAgICAgICBsYXN0ID0gX2FkZHJlc3MkdG9Mb3dlckNhc2UkMlswXSxcbiAgICAgICAgICAgIGZpcnN0ID0gX2FkZHJlc3MkdG9Mb3dlckNhc2UkMlsxXTtcblxuICAgICAgICB2YXIgZmlyc3RGaWVsZHMgPSBmaXJzdCA/IGZpcnN0LnNwbGl0KFwiOlwiKS5tYXAoX3N0cmlwTGVhZGluZ1plcm9zKSA6IFtdO1xuICAgICAgICB2YXIgbGFzdEZpZWxkcyA9IGxhc3Quc3BsaXQoXCI6XCIpLm1hcChfc3RyaXBMZWFkaW5nWmVyb3MpO1xuICAgICAgICB2YXIgaXNMYXN0RmllbGRJUHY0QWRkcmVzcyA9IHByb3RvY29sLklQVjRBRERSRVNTLnRlc3QobGFzdEZpZWxkc1tsYXN0RmllbGRzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgdmFyIGZpZWxkQ291bnQgPSBpc0xhc3RGaWVsZElQdjRBZGRyZXNzID8gNyA6IDg7XG4gICAgICAgIHZhciBsYXN0RmllbGRzU3RhcnQgPSBsYXN0RmllbGRzLmxlbmd0aCAtIGZpZWxkQ291bnQ7XG4gICAgICAgIHZhciBmaWVsZHMgPSBBcnJheShmaWVsZENvdW50KTtcbiAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCBmaWVsZENvdW50OyArK3gpIHtcbiAgICAgICAgICAgIGZpZWxkc1t4XSA9IGZpcnN0RmllbGRzW3hdIHx8IGxhc3RGaWVsZHNbbGFzdEZpZWxkc1N0YXJ0ICsgeF0gfHwgJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTGFzdEZpZWxkSVB2NEFkZHJlc3MpIHtcbiAgICAgICAgICAgIGZpZWxkc1tmaWVsZENvdW50IC0gMV0gPSBfbm9ybWFsaXplSVB2NChmaWVsZHNbZmllbGRDb3VudCAtIDFdLCBwcm90b2NvbCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFsbFplcm9GaWVsZHMgPSBmaWVsZHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGZpZWxkLCBpbmRleCkge1xuICAgICAgICAgICAgaWYgKCFmaWVsZCB8fCBmaWVsZCA9PT0gXCIwXCIpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGFzdExvbmdlc3QgPSBhY2NbYWNjLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0TG9uZ2VzdCAmJiBsYXN0TG9uZ2VzdC5pbmRleCArIGxhc3RMb25nZXN0Lmxlbmd0aCA9PT0gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdExvbmdlc3QubGVuZ3RoKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjLnB1c2goeyBpbmRleDogaW5kZXgsIGxlbmd0aDogMSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCBbXSk7XG4gICAgICAgIHZhciBsb25nZXN0WmVyb0ZpZWxkcyA9IGFsbFplcm9GaWVsZHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH0pWzBdO1xuICAgICAgICB2YXIgbmV3SG9zdCA9IHZvaWQgMDtcbiAgICAgICAgaWYgKGxvbmdlc3RaZXJvRmllbGRzICYmIGxvbmdlc3RaZXJvRmllbGRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHZhciBuZXdGaXJzdCA9IGZpZWxkcy5zbGljZSgwLCBsb25nZXN0WmVyb0ZpZWxkcy5pbmRleCk7XG4gICAgICAgICAgICB2YXIgbmV3TGFzdCA9IGZpZWxkcy5zbGljZShsb25nZXN0WmVyb0ZpZWxkcy5pbmRleCArIGxvbmdlc3RaZXJvRmllbGRzLmxlbmd0aCk7XG4gICAgICAgICAgICBuZXdIb3N0ID0gbmV3Rmlyc3Quam9pbihcIjpcIikgKyBcIjo6XCIgKyBuZXdMYXN0LmpvaW4oXCI6XCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3SG9zdCA9IGZpZWxkcy5qb2luKFwiOlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoem9uZSkge1xuICAgICAgICAgICAgbmV3SG9zdCArPSBcIiVcIiArIHpvbmU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld0hvc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGhvc3Q7XG4gICAgfVxufVxudmFyIFVSSV9QQVJTRSA9IC9eKD86KFteOlxcLz8jXSspOik/KD86XFwvXFwvKCg/OihbXlxcLz8jQF0qKUApPyhcXFtbXlxcLz8jXFxdXStcXF18W15cXC8/IzpdKikoPzpcXDooXFxkKikpPykpPyhbXj8jXSopKD86XFw/KFteI10qKSk/KD86IygoPzoufFxcbnxcXHIpKikpPy9pO1xudmFyIE5PX01BVENIX0lTX1VOREVGSU5FRCA9IFwiXCIubWF0Y2goLygpezB9LylbMV0gPT09IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIHBhcnNlKHVyaVN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIHZhciBjb21wb25lbnRzID0ge307XG4gICAgdmFyIHByb3RvY29sID0gb3B0aW9ucy5pcmkgIT09IGZhbHNlID8gSVJJX1BST1RPQ09MIDogVVJJX1BST1RPQ09MO1xuICAgIGlmIChvcHRpb25zLnJlZmVyZW5jZSA9PT0gXCJzdWZmaXhcIikgdXJpU3RyaW5nID0gKG9wdGlvbnMuc2NoZW1lID8gb3B0aW9ucy5zY2hlbWUgKyBcIjpcIiA6IFwiXCIpICsgXCIvL1wiICsgdXJpU3RyaW5nO1xuICAgIHZhciBtYXRjaGVzID0gdXJpU3RyaW5nLm1hdGNoKFVSSV9QQVJTRSk7XG4gICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgaWYgKE5PX01BVENIX0lTX1VOREVGSU5FRCkge1xuICAgICAgICAgICAgLy9zdG9yZSBlYWNoIGNvbXBvbmVudFxuICAgICAgICAgICAgY29tcG9uZW50cy5zY2hlbWUgPSBtYXRjaGVzWzFdO1xuICAgICAgICAgICAgY29tcG9uZW50cy51c2VyaW5mbyA9IG1hdGNoZXNbM107XG4gICAgICAgICAgICBjb21wb25lbnRzLmhvc3QgPSBtYXRjaGVzWzRdO1xuICAgICAgICAgICAgY29tcG9uZW50cy5wb3J0ID0gcGFyc2VJbnQobWF0Y2hlc1s1XSwgMTApO1xuICAgICAgICAgICAgY29tcG9uZW50cy5wYXRoID0gbWF0Y2hlc1s2XSB8fCBcIlwiO1xuICAgICAgICAgICAgY29tcG9uZW50cy5xdWVyeSA9IG1hdGNoZXNbN107XG4gICAgICAgICAgICBjb21wb25lbnRzLmZyYWdtZW50ID0gbWF0Y2hlc1s4XTtcbiAgICAgICAgICAgIC8vZml4IHBvcnQgbnVtYmVyXG4gICAgICAgICAgICBpZiAoaXNOYU4oY29tcG9uZW50cy5wb3J0KSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucG9ydCA9IG1hdGNoZXNbNV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvL0lFIEZJWCBmb3IgaW1wcm9wZXIgUmVnRXhwIG1hdGNoaW5nXG4gICAgICAgICAgICAvL3N0b3JlIGVhY2ggY29tcG9uZW50XG4gICAgICAgICAgICBjb21wb25lbnRzLnNjaGVtZSA9IG1hdGNoZXNbMV0gfHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29tcG9uZW50cy51c2VyaW5mbyA9IHVyaVN0cmluZy5pbmRleE9mKFwiQFwiKSAhPT0gLTEgPyBtYXRjaGVzWzNdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29tcG9uZW50cy5ob3N0ID0gdXJpU3RyaW5nLmluZGV4T2YoXCIvL1wiKSAhPT0gLTEgPyBtYXRjaGVzWzRdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29tcG9uZW50cy5wb3J0ID0gcGFyc2VJbnQobWF0Y2hlc1s1XSwgMTApO1xuICAgICAgICAgICAgY29tcG9uZW50cy5wYXRoID0gbWF0Y2hlc1s2XSB8fCBcIlwiO1xuICAgICAgICAgICAgY29tcG9uZW50cy5xdWVyeSA9IHVyaVN0cmluZy5pbmRleE9mKFwiP1wiKSAhPT0gLTEgPyBtYXRjaGVzWzddIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29tcG9uZW50cy5mcmFnbWVudCA9IHVyaVN0cmluZy5pbmRleE9mKFwiI1wiKSAhPT0gLTEgPyBtYXRjaGVzWzhdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgLy9maXggcG9ydCBudW1iZXJcbiAgICAgICAgICAgIGlmIChpc05hTihjb21wb25lbnRzLnBvcnQpKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5wb3J0ID0gdXJpU3RyaW5nLm1hdGNoKC9cXC9cXC8oPzoufFxcbikqXFw6KD86XFwvfFxcP3xcXCN8JCkvKSA/IG1hdGNoZXNbNF0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbXBvbmVudHMuaG9zdCkge1xuICAgICAgICAgICAgLy9ub3JtYWxpemUgSVAgaG9zdHNcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaG9zdCA9IF9ub3JtYWxpemVJUHY2KF9ub3JtYWxpemVJUHY0KGNvbXBvbmVudHMuaG9zdCwgcHJvdG9jb2wpLCBwcm90b2NvbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy9kZXRlcm1pbmUgcmVmZXJlbmNlIHR5cGVcbiAgICAgICAgaWYgKGNvbXBvbmVudHMuc2NoZW1lID09PSB1bmRlZmluZWQgJiYgY29tcG9uZW50cy51c2VyaW5mbyA9PT0gdW5kZWZpbmVkICYmIGNvbXBvbmVudHMuaG9zdCA9PT0gdW5kZWZpbmVkICYmIGNvbXBvbmVudHMucG9ydCA9PT0gdW5kZWZpbmVkICYmICFjb21wb25lbnRzLnBhdGggJiYgY29tcG9uZW50cy5xdWVyeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLnJlZmVyZW5jZSA9IFwic2FtZS1kb2N1bWVudFwiO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbXBvbmVudHMuc2NoZW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMucmVmZXJlbmNlID0gXCJyZWxhdGl2ZVwiO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbXBvbmVudHMuZnJhZ21lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5yZWZlcmVuY2UgPSBcImFic29sdXRlXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLnJlZmVyZW5jZSA9IFwidXJpXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy9jaGVjayBmb3IgcmVmZXJlbmNlIGVycm9yc1xuICAgICAgICBpZiAob3B0aW9ucy5yZWZlcmVuY2UgJiYgb3B0aW9ucy5yZWZlcmVuY2UgIT09IFwic3VmZml4XCIgJiYgb3B0aW9ucy5yZWZlcmVuY2UgIT09IGNvbXBvbmVudHMucmVmZXJlbmNlKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmVycm9yID0gY29tcG9uZW50cy5lcnJvciB8fCBcIlVSSSBpcyBub3QgYSBcIiArIG9wdGlvbnMucmVmZXJlbmNlICsgXCIgcmVmZXJlbmNlLlwiO1xuICAgICAgICB9XG4gICAgICAgIC8vZmluZCBzY2hlbWUgaGFuZGxlclxuICAgICAgICB2YXIgc2NoZW1lSGFuZGxlciA9IFNDSEVNRVNbKG9wdGlvbnMuc2NoZW1lIHx8IGNvbXBvbmVudHMuc2NoZW1lIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAvL2NoZWNrIGlmIHNjaGVtZSBjYW4ndCBoYW5kbGUgSVJJc1xuICAgICAgICBpZiAoIW9wdGlvbnMudW5pY29kZVN1cHBvcnQgJiYgKCFzY2hlbWVIYW5kbGVyIHx8ICFzY2hlbWVIYW5kbGVyLnVuaWNvZGVTdXBwb3J0KSkge1xuICAgICAgICAgICAgLy9pZiBob3N0IGNvbXBvbmVudCBpcyBhIGRvbWFpbiBuYW1lXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50cy5ob3N0ICYmIChvcHRpb25zLmRvbWFpbkhvc3QgfHwgc2NoZW1lSGFuZGxlciAmJiBzY2hlbWVIYW5kbGVyLmRvbWFpbkhvc3QpKSB7XG4gICAgICAgICAgICAgICAgLy9jb252ZXJ0IFVuaWNvZGUgSUROIC0+IEFTQ0lJIElETlxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaG9zdCA9IHB1bnljb2RlLnRvQVNDSUkoY29tcG9uZW50cy5ob3N0LnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHBjdERlY0NoYXJzKS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiSG9zdCdzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvIEFTQ0lJIHZpYSBwdW55Y29kZTogXCIgKyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vY29udmVydCBJUkkgLT4gVVJJXG4gICAgICAgICAgICBfbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcoY29tcG9uZW50cywgVVJJX1BST1RPQ09MKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vbm9ybWFsaXplIGVuY29kaW5nc1xuICAgICAgICAgICAgX25vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nKGNvbXBvbmVudHMsIHByb3RvY29sKTtcbiAgICAgICAgfVxuICAgICAgICAvL3BlcmZvcm0gc2NoZW1lIHNwZWNpZmljIHBhcnNpbmdcbiAgICAgICAgaWYgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5wYXJzZSkge1xuICAgICAgICAgICAgc2NoZW1lSGFuZGxlci5wYXJzZShjb21wb25lbnRzLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiVVJJIGNhbiBub3QgYmUgcGFyc2VkLlwiO1xuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50cztcbn1cblxuZnVuY3Rpb24gX3JlY29tcG9zZUF1dGhvcml0eShjb21wb25lbnRzLCBvcHRpb25zKSB7XG4gICAgdmFyIHByb3RvY29sID0gb3B0aW9ucy5pcmkgIT09IGZhbHNlID8gSVJJX1BST1RPQ09MIDogVVJJX1BST1RPQ09MO1xuICAgIHZhciB1cmlUb2tlbnMgPSBbXTtcbiAgICBpZiAoY29tcG9uZW50cy51c2VyaW5mbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHVyaVRva2Vucy5wdXNoKGNvbXBvbmVudHMudXNlcmluZm8pO1xuICAgICAgICB1cmlUb2tlbnMucHVzaChcIkBcIik7XG4gICAgfVxuICAgIGlmIChjb21wb25lbnRzLmhvc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvL25vcm1hbGl6ZSBJUCBob3N0cywgYWRkIGJyYWNrZXRzIGFuZCBlc2NhcGUgem9uZSBzZXBhcmF0b3IgZm9yIElQdjZcbiAgICAgICAgdXJpVG9rZW5zLnB1c2goX25vcm1hbGl6ZUlQdjYoX25vcm1hbGl6ZUlQdjQoU3RyaW5nKGNvbXBvbmVudHMuaG9zdCksIHByb3RvY29sKSwgcHJvdG9jb2wpLnJlcGxhY2UocHJvdG9jb2wuSVBWNkFERFJFU1MsIGZ1bmN0aW9uIChfLCAkMSwgJDIpIHtcbiAgICAgICAgICAgIHJldHVybiBcIltcIiArICQxICsgKCQyID8gXCIlMjVcIiArICQyIDogXCJcIikgKyBcIl1cIjtcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbXBvbmVudHMucG9ydCA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgY29tcG9uZW50cy5wb3J0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHVyaVRva2Vucy5wdXNoKFwiOlwiKTtcbiAgICAgICAgdXJpVG9rZW5zLnB1c2goU3RyaW5nKGNvbXBvbmVudHMucG9ydCkpO1xuICAgIH1cbiAgICByZXR1cm4gdXJpVG9rZW5zLmxlbmd0aCA/IHVyaVRva2Vucy5qb2luKFwiXCIpIDogdW5kZWZpbmVkO1xufVxuXG52YXIgUkRTMSA9IC9eXFwuXFwuP1xcLy87XG52YXIgUkRTMiA9IC9eXFwvXFwuKFxcL3wkKS87XG52YXIgUkRTMyA9IC9eXFwvXFwuXFwuKFxcL3wkKS87XG52YXIgUkRTNSA9IC9eXFwvPyg/Oi58XFxuKSo/KD89XFwvfCQpLztcbmZ1bmN0aW9uIHJlbW92ZURvdFNlZ21lbnRzKGlucHV0KSB7XG4gICAgdmFyIG91dHB1dCA9IFtdO1xuICAgIHdoaWxlIChpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGlucHV0Lm1hdGNoKFJEUzEpKSB7XG4gICAgICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoUkRTMSwgXCJcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQubWF0Y2goUkRTMikpIHtcbiAgICAgICAgICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZShSRFMyLCBcIi9cIik7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQubWF0Y2goUkRTMykpIHtcbiAgICAgICAgICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZShSRFMzLCBcIi9cIik7XG4gICAgICAgICAgICBvdXRwdXQucG9wKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IFwiLlwiIHx8IGlucHV0ID09PSBcIi4uXCIpIHtcbiAgICAgICAgICAgIGlucHV0ID0gXCJcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBpbSA9IGlucHV0Lm1hdGNoKFJEUzUpO1xuICAgICAgICAgICAgaWYgKGltKSB7XG4gICAgICAgICAgICAgICAgdmFyIHMgPSBpbVswXTtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKHMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBkb3Qgc2VnbWVudCBjb25kaXRpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dC5qb2luKFwiXCIpO1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemUoY29tcG9uZW50cykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIHZhciBwcm90b2NvbCA9IG9wdGlvbnMuaXJpID8gSVJJX1BST1RPQ09MIDogVVJJX1BST1RPQ09MO1xuICAgIHZhciB1cmlUb2tlbnMgPSBbXTtcbiAgICAvL2ZpbmQgc2NoZW1lIGhhbmRsZXJcbiAgICB2YXIgc2NoZW1lSGFuZGxlciA9IFNDSEVNRVNbKG9wdGlvbnMuc2NoZW1lIHx8IGNvbXBvbmVudHMuc2NoZW1lIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCldO1xuICAgIC8vcGVyZm9ybSBzY2hlbWUgc3BlY2lmaWMgc2VyaWFsaXphdGlvblxuICAgIGlmIChzY2hlbWVIYW5kbGVyICYmIHNjaGVtZUhhbmRsZXIuc2VyaWFsaXplKSBzY2hlbWVIYW5kbGVyLnNlcmlhbGl6ZShjb21wb25lbnRzLCBvcHRpb25zKTtcbiAgICBpZiAoY29tcG9uZW50cy5ob3N0KSB7XG4gICAgICAgIC8vaWYgaG9zdCBjb21wb25lbnQgaXMgYW4gSVB2NiBhZGRyZXNzXG4gICAgICAgIGlmIChwcm90b2NvbC5JUFY2QUREUkVTUy50ZXN0KGNvbXBvbmVudHMuaG9zdCkpIHt9XG4gICAgICAgIC8vVE9ETzogbm9ybWFsaXplIElQdjYgYWRkcmVzcyBhcyBwZXIgUkZDIDU5NTJcblxuICAgICAgICAvL2lmIGhvc3QgY29tcG9uZW50IGlzIGEgZG9tYWluIG5hbWVcbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5kb21haW5Ib3N0IHx8IHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5kb21haW5Ib3N0KSB7XG4gICAgICAgICAgICAgICAgLy9jb252ZXJ0IElETiB2aWEgcHVueWNvZGVcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmhvc3QgPSAhb3B0aW9ucy5pcmkgPyBwdW55Y29kZS50b0FTQ0lJKGNvbXBvbmVudHMuaG9zdC5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBwY3REZWNDaGFycykudG9Mb3dlckNhc2UoKSkgOiBwdW55Y29kZS50b1VuaWNvZGUoY29tcG9uZW50cy5ob3N0KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiSG9zdCdzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvIFwiICsgKCFvcHRpb25zLmlyaSA/IFwiQVNDSUlcIiA6IFwiVW5pY29kZVwiKSArIFwiIHZpYSBwdW55Y29kZTogXCIgKyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICB9XG4gICAgLy9ub3JtYWxpemUgZW5jb2RpbmdcbiAgICBfbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcoY29tcG9uZW50cywgcHJvdG9jb2wpO1xuICAgIGlmIChvcHRpb25zLnJlZmVyZW5jZSAhPT0gXCJzdWZmaXhcIiAmJiBjb21wb25lbnRzLnNjaGVtZSkge1xuICAgICAgICB1cmlUb2tlbnMucHVzaChjb21wb25lbnRzLnNjaGVtZSk7XG4gICAgICAgIHVyaVRva2Vucy5wdXNoKFwiOlwiKTtcbiAgICB9XG4gICAgdmFyIGF1dGhvcml0eSA9IF9yZWNvbXBvc2VBdXRob3JpdHkoY29tcG9uZW50cywgb3B0aW9ucyk7XG4gICAgaWYgKGF1dGhvcml0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnJlZmVyZW5jZSAhPT0gXCJzdWZmaXhcIikge1xuICAgICAgICAgICAgdXJpVG9rZW5zLnB1c2goXCIvL1wiKTtcbiAgICAgICAgfVxuICAgICAgICB1cmlUb2tlbnMucHVzaChhdXRob3JpdHkpO1xuICAgICAgICBpZiAoY29tcG9uZW50cy5wYXRoICYmIGNvbXBvbmVudHMucGF0aC5jaGFyQXQoMCkgIT09IFwiL1wiKSB7XG4gICAgICAgICAgICB1cmlUb2tlbnMucHVzaChcIi9cIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbXBvbmVudHMucGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBzID0gY29tcG9uZW50cy5wYXRoO1xuICAgICAgICBpZiAoIW9wdGlvbnMuYWJzb2x1dGVQYXRoICYmICghc2NoZW1lSGFuZGxlciB8fCAhc2NoZW1lSGFuZGxlci5hYnNvbHV0ZVBhdGgpKSB7XG4gICAgICAgICAgICBzID0gcmVtb3ZlRG90U2VnbWVudHMocyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF1dGhvcml0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzID0gcy5yZXBsYWNlKC9eXFwvXFwvLywgXCIvJTJGXCIpOyAvL2Rvbid0IGFsbG93IHRoZSBwYXRoIHRvIHN0YXJ0IHdpdGggXCIvL1wiXG4gICAgICAgIH1cbiAgICAgICAgdXJpVG9rZW5zLnB1c2gocyk7XG4gICAgfVxuICAgIGlmIChjb21wb25lbnRzLnF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdXJpVG9rZW5zLnB1c2goXCI/XCIpO1xuICAgICAgICB1cmlUb2tlbnMucHVzaChjb21wb25lbnRzLnF1ZXJ5KTtcbiAgICB9XG4gICAgaWYgKGNvbXBvbmVudHMuZnJhZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB1cmlUb2tlbnMucHVzaChcIiNcIik7XG4gICAgICAgIHVyaVRva2Vucy5wdXNoKGNvbXBvbmVudHMuZnJhZ21lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gdXJpVG9rZW5zLmpvaW4oXCJcIik7IC8vbWVyZ2UgdG9rZW5zIGludG8gYSBzdHJpbmdcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUNvbXBvbmVudHMoYmFzZSwgcmVsYXRpdmUpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgdmFyIHNraXBOb3JtYWxpemF0aW9uID0gYXJndW1lbnRzWzNdO1xuXG4gICAgdmFyIHRhcmdldCA9IHt9O1xuICAgIGlmICghc2tpcE5vcm1hbGl6YXRpb24pIHtcbiAgICAgICAgYmFzZSA9IHBhcnNlKHNlcmlhbGl6ZShiYXNlLCBvcHRpb25zKSwgb3B0aW9ucyk7IC8vbm9ybWFsaXplIGJhc2UgY29tcG9uZW50c1xuICAgICAgICByZWxhdGl2ZSA9IHBhcnNlKHNlcmlhbGl6ZShyZWxhdGl2ZSwgb3B0aW9ucyksIG9wdGlvbnMpOyAvL25vcm1hbGl6ZSByZWxhdGl2ZSBjb21wb25lbnRzXG4gICAgfVxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmICghb3B0aW9ucy50b2xlcmFudCAmJiByZWxhdGl2ZS5zY2hlbWUpIHtcbiAgICAgICAgdGFyZ2V0LnNjaGVtZSA9IHJlbGF0aXZlLnNjaGVtZTtcbiAgICAgICAgLy90YXJnZXQuYXV0aG9yaXR5ID0gcmVsYXRpdmUuYXV0aG9yaXR5O1xuICAgICAgICB0YXJnZXQudXNlcmluZm8gPSByZWxhdGl2ZS51c2VyaW5mbztcbiAgICAgICAgdGFyZ2V0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICB0YXJnZXQucG9ydCA9IHJlbGF0aXZlLnBvcnQ7XG4gICAgICAgIHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCB8fCBcIlwiKTtcbiAgICAgICAgdGFyZ2V0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJlbGF0aXZlLnVzZXJpbmZvICE9PSB1bmRlZmluZWQgfHwgcmVsYXRpdmUuaG9zdCAhPT0gdW5kZWZpbmVkIHx8IHJlbGF0aXZlLnBvcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy90YXJnZXQuYXV0aG9yaXR5ID0gcmVsYXRpdmUuYXV0aG9yaXR5O1xuICAgICAgICAgICAgdGFyZ2V0LnVzZXJpbmZvID0gcmVsYXRpdmUudXNlcmluZm87XG4gICAgICAgICAgICB0YXJnZXQuaG9zdCA9IHJlbGF0aXZlLmhvc3Q7XG4gICAgICAgICAgICB0YXJnZXQucG9ydCA9IHJlbGF0aXZlLnBvcnQ7XG4gICAgICAgICAgICB0YXJnZXQucGF0aCA9IHJlbW92ZURvdFNlZ21lbnRzKHJlbGF0aXZlLnBhdGggfHwgXCJcIik7XG4gICAgICAgICAgICB0YXJnZXQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghcmVsYXRpdmUucGF0aCkge1xuICAgICAgICAgICAgICAgIHRhcmdldC5wYXRoID0gYmFzZS5wYXRoO1xuICAgICAgICAgICAgICAgIGlmIChyZWxhdGl2ZS5xdWVyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5xdWVyeSA9IGJhc2UucXVlcnk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocmVsYXRpdmUucGF0aC5jaGFyQXQoMCkgPT09IFwiL1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChiYXNlLnVzZXJpbmZvICE9PSB1bmRlZmluZWQgfHwgYmFzZS5ob3N0ICE9PSB1bmRlZmluZWQgfHwgYmFzZS5wb3J0ICE9PSB1bmRlZmluZWQpICYmICFiYXNlLnBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wYXRoID0gXCIvXCIgKyByZWxhdGl2ZS5wYXRoO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFiYXNlLnBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wYXRoID0gcmVsYXRpdmUucGF0aDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wYXRoID0gYmFzZS5wYXRoLnNsaWNlKDAsIGJhc2UucGF0aC5sYXN0SW5kZXhPZihcIi9cIikgKyAxKSArIHJlbGF0aXZlLnBhdGg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyh0YXJnZXQucGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy90YXJnZXQuYXV0aG9yaXR5ID0gYmFzZS5hdXRob3JpdHk7XG4gICAgICAgICAgICB0YXJnZXQudXNlcmluZm8gPSBiYXNlLnVzZXJpbmZvO1xuICAgICAgICAgICAgdGFyZ2V0Lmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICB0YXJnZXQucG9ydCA9IGJhc2UucG9ydDtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXQuc2NoZW1lID0gYmFzZS5zY2hlbWU7XG4gICAgfVxuICAgIHRhcmdldC5mcmFnbWVudCA9IHJlbGF0aXZlLmZyYWdtZW50O1xuICAgIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmUoYmFzZVVSSSwgcmVsYXRpdmVVUkksIG9wdGlvbnMpIHtcbiAgICB2YXIgc2NoZW1lbGVzc09wdGlvbnMgPSBhc3NpZ24oeyBzY2hlbWU6ICdudWxsJyB9LCBvcHRpb25zKTtcbiAgICByZXR1cm4gc2VyaWFsaXplKHJlc29sdmVDb21wb25lbnRzKHBhcnNlKGJhc2VVUkksIHNjaGVtZWxlc3NPcHRpb25zKSwgcGFyc2UocmVsYXRpdmVVUkksIHNjaGVtZWxlc3NPcHRpb25zKSwgc2NoZW1lbGVzc09wdGlvbnMsIHRydWUpLCBzY2hlbWVsZXNzT3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZSh1cmksIG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHVyaSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB1cmkgPSBzZXJpYWxpemUocGFyc2UodXJpLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmICh0eXBlT2YodXJpKSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICB1cmkgPSBwYXJzZShzZXJpYWxpemUodXJpLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB1cmk7XG59XG5cbmZ1bmN0aW9uIGVxdWFsKHVyaUEsIHVyaUIsIG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHVyaUEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdXJpQSA9IHNlcmlhbGl6ZShwYXJzZSh1cmlBLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmICh0eXBlT2YodXJpQSkgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdXJpQSA9IHNlcmlhbGl6ZSh1cmlBLCBvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB1cmlCID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHVyaUIgPSBzZXJpYWxpemUocGFyc2UodXJpQiwgb3B0aW9ucyksIG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAodHlwZU9mKHVyaUIpID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHVyaUIgPSBzZXJpYWxpemUodXJpQiwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB1cmlBID09PSB1cmlCO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVDb21wb25lbnQoc3RyLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHN0ciAmJiBzdHIudG9TdHJpbmcoKS5yZXBsYWNlKCFvcHRpb25zIHx8ICFvcHRpb25zLmlyaSA/IFVSSV9QUk9UT0NPTC5FU0NBUEUgOiBJUklfUFJPVE9DT0wuRVNDQVBFLCBwY3RFbmNDaGFyKTtcbn1cblxuZnVuY3Rpb24gdW5lc2NhcGVDb21wb25lbnQoc3RyLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHN0ciAmJiBzdHIudG9TdHJpbmcoKS5yZXBsYWNlKCFvcHRpb25zIHx8ICFvcHRpb25zLmlyaSA/IFVSSV9QUk9UT0NPTC5QQ1RfRU5DT0RFRCA6IElSSV9QUk9UT0NPTC5QQ1RfRU5DT0RFRCwgcGN0RGVjQ2hhcnMpO1xufVxuXG52YXIgaGFuZGxlciA9IHtcbiAgICBzY2hlbWU6IFwiaHR0cFwiLFxuICAgIGRvbWFpbkhvc3Q6IHRydWUsXG4gICAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlKGNvbXBvbmVudHMsIG9wdGlvbnMpIHtcbiAgICAgICAgLy9yZXBvcnQgbWlzc2luZyBob3N0XG4gICAgICAgIGlmICghY29tcG9uZW50cy5ob3N0KSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmVycm9yID0gY29tcG9uZW50cy5lcnJvciB8fCBcIkhUVFAgVVJJcyBtdXN0IGhhdmUgYSBob3N0LlwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH0sXG4gICAgc2VyaWFsaXplOiBmdW5jdGlvbiBzZXJpYWxpemUoY29tcG9uZW50cywgb3B0aW9ucykge1xuICAgICAgICB2YXIgc2VjdXJlID0gU3RyaW5nKGNvbXBvbmVudHMuc2NoZW1lKS50b0xvd2VyQ2FzZSgpID09PSBcImh0dHBzXCI7XG4gICAgICAgIC8vbm9ybWFsaXplIHRoZSBkZWZhdWx0IHBvcnRcbiAgICAgICAgaWYgKGNvbXBvbmVudHMucG9ydCA9PT0gKHNlY3VyZSA/IDQ0MyA6IDgwKSB8fCBjb21wb25lbnRzLnBvcnQgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMucG9ydCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvL25vcm1hbGl6ZSB0aGUgZW1wdHkgcGF0aFxuICAgICAgICBpZiAoIWNvbXBvbmVudHMucGF0aCkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5wYXRoID0gXCIvXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy9OT1RFOiBXZSBkbyBub3QgcGFyc2UgcXVlcnkgc3RyaW5ncyBmb3IgSFRUUCBVUklzXG4gICAgICAgIC8vYXMgV1dXIEZvcm0gVXJsIEVuY29kZWQgcXVlcnkgc3RyaW5ncyBhcmUgcGFydCBvZiB0aGUgSFRNTDQrIHNwZWMsXG4gICAgICAgIC8vYW5kIG5vdCB0aGUgSFRUUCBzcGVjLlxuICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICB9XG59O1xuXG52YXIgaGFuZGxlciQxID0ge1xuICAgIHNjaGVtZTogXCJodHRwc1wiLFxuICAgIGRvbWFpbkhvc3Q6IGhhbmRsZXIuZG9tYWluSG9zdCxcbiAgICBwYXJzZTogaGFuZGxlci5wYXJzZSxcbiAgICBzZXJpYWxpemU6IGhhbmRsZXIuc2VyaWFsaXplXG59O1xuXG5mdW5jdGlvbiBpc1NlY3VyZSh3c0NvbXBvbmVudHMpIHtcbiAgICByZXR1cm4gdHlwZW9mIHdzQ29tcG9uZW50cy5zZWN1cmUgPT09ICdib29sZWFuJyA/IHdzQ29tcG9uZW50cy5zZWN1cmUgOiBTdHJpbmcod3NDb21wb25lbnRzLnNjaGVtZSkudG9Mb3dlckNhc2UoKSA9PT0gXCJ3c3NcIjtcbn1cbi8vUkZDIDY0NTVcbnZhciBoYW5kbGVyJDIgPSB7XG4gICAgc2NoZW1lOiBcIndzXCIsXG4gICAgZG9tYWluSG9zdDogdHJ1ZSxcbiAgICBwYXJzZTogZnVuY3Rpb24gcGFyc2UoY29tcG9uZW50cywgb3B0aW9ucykge1xuICAgICAgICB2YXIgd3NDb21wb25lbnRzID0gY29tcG9uZW50cztcbiAgICAgICAgLy9pbmRpY2F0ZSBpZiB0aGUgc2VjdXJlIGZsYWcgaXMgc2V0XG4gICAgICAgIHdzQ29tcG9uZW50cy5zZWN1cmUgPSBpc1NlY3VyZSh3c0NvbXBvbmVudHMpO1xuICAgICAgICAvL2NvbnN0cnVjdCByZXNvdWNlIG5hbWVcbiAgICAgICAgd3NDb21wb25lbnRzLnJlc291cmNlTmFtZSA9ICh3c0NvbXBvbmVudHMucGF0aCB8fCAnLycpICsgKHdzQ29tcG9uZW50cy5xdWVyeSA/ICc/JyArIHdzQ29tcG9uZW50cy5xdWVyeSA6ICcnKTtcbiAgICAgICAgd3NDb21wb25lbnRzLnBhdGggPSB1bmRlZmluZWQ7XG4gICAgICAgIHdzQ29tcG9uZW50cy5xdWVyeSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHdzQ29tcG9uZW50cztcbiAgICB9LFxuICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24gc2VyaWFsaXplKHdzQ29tcG9uZW50cywgb3B0aW9ucykge1xuICAgICAgICAvL25vcm1hbGl6ZSB0aGUgZGVmYXVsdCBwb3J0XG4gICAgICAgIGlmICh3c0NvbXBvbmVudHMucG9ydCA9PT0gKGlzU2VjdXJlKHdzQ29tcG9uZW50cykgPyA0NDMgOiA4MCkgfHwgd3NDb21wb25lbnRzLnBvcnQgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHdzQ29tcG9uZW50cy5wb3J0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vZW5zdXJlIHNjaGVtZSBtYXRjaGVzIHNlY3VyZSBmbGFnXG4gICAgICAgIGlmICh0eXBlb2Ygd3NDb21wb25lbnRzLnNlY3VyZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB3c0NvbXBvbmVudHMuc2NoZW1lID0gd3NDb21wb25lbnRzLnNlY3VyZSA/ICd3c3MnIDogJ3dzJztcbiAgICAgICAgICAgIHdzQ29tcG9uZW50cy5zZWN1cmUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy9yZWNvbnN0cnVjdCBwYXRoIGZyb20gcmVzb3VyY2UgbmFtZVxuICAgICAgICBpZiAod3NDb21wb25lbnRzLnJlc291cmNlTmFtZSkge1xuICAgICAgICAgICAgdmFyIF93c0NvbXBvbmVudHMkcmVzb3VyYyA9IHdzQ29tcG9uZW50cy5yZXNvdXJjZU5hbWUuc3BsaXQoJz8nKSxcbiAgICAgICAgICAgICAgICBfd3NDb21wb25lbnRzJHJlc291cmMyID0gc2xpY2VkVG9BcnJheShfd3NDb21wb25lbnRzJHJlc291cmMsIDIpLFxuICAgICAgICAgICAgICAgIHBhdGggPSBfd3NDb21wb25lbnRzJHJlc291cmMyWzBdLFxuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gX3dzQ29tcG9uZW50cyRyZXNvdXJjMlsxXTtcblxuICAgICAgICAgICAgd3NDb21wb25lbnRzLnBhdGggPSBwYXRoICYmIHBhdGggIT09ICcvJyA/IHBhdGggOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB3c0NvbXBvbmVudHMucXVlcnkgPSBxdWVyeTtcbiAgICAgICAgICAgIHdzQ29tcG9uZW50cy5yZXNvdXJjZU5hbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy9mb3JiaWQgZnJhZ21lbnQgY29tcG9uZW50XG4gICAgICAgIHdzQ29tcG9uZW50cy5mcmFnbWVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHdzQ29tcG9uZW50cztcbiAgICB9XG59O1xuXG52YXIgaGFuZGxlciQzID0ge1xuICAgIHNjaGVtZTogXCJ3c3NcIixcbiAgICBkb21haW5Ib3N0OiBoYW5kbGVyJDIuZG9tYWluSG9zdCxcbiAgICBwYXJzZTogaGFuZGxlciQyLnBhcnNlLFxuICAgIHNlcmlhbGl6ZTogaGFuZGxlciQyLnNlcmlhbGl6ZVxufTtcblxudmFyIE8gPSB7fTtcbnZhciBpc0lSSSA9IHRydWU7XG4vL1JGQyAzOTg2XG52YXIgVU5SRVNFUlZFRCQkID0gXCJbQS1aYS16MC05XFxcXC1cXFxcLlxcXFxfXFxcXH5cIiArIChpc0lSSSA/IFwiXFxcXHhBMC1cXFxcdTIwMERcXFxcdTIwMTAtXFxcXHUyMDI5XFxcXHUyMDJGLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkVGXCIgOiBcIlwiKSArIFwiXVwiO1xudmFyIEhFWERJRyQkID0gXCJbMC05QS1GYS1mXVwiOyAvL2Nhc2UtaW5zZW5zaXRpdmVcbnZhciBQQ1RfRU5DT0RFRCQgPSBzdWJleHAoc3ViZXhwKFwiJVtFRmVmXVwiICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIlWzg5QS1GYS1mXVwiICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSk7IC8vZXhwYW5kZWRcbi8vUkZDIDUzMjIsIGV4Y2VwdCB0aGVzZSBzeW1ib2xzIGFzIHBlciBSRkMgNjA2ODogQCA6IC8gPyAjIFsgXSAmIDsgPVxuLy9jb25zdCBBVEVYVCQkID0gXCJbQS1aYS16MC05XFxcXCFcXFxcI1xcXFwkXFxcXCVcXFxcJlxcXFwnXFxcXCpcXFxcK1xcXFwtXFxcXC9cXFxcPVxcXFw/XFxcXF5cXFxcX1xcXFxgXFxcXHtcXFxcfFxcXFx9XFxcXH5dXCI7XG4vL2NvbnN0IFdTUCQkID0gXCJbXFxcXHgyMFxcXFx4MDldXCI7XG4vL2NvbnN0IE9CU19RVEVYVCQkID0gXCJbXFxcXHgwMS1cXFxceDA4XFxcXHgwQlxcXFx4MENcXFxceDBFLVxcXFx4MUZcXFxceDdGXVwiOyAgLy8oJWQxLTggLyAlZDExLTEyIC8gJWQxNC0zMSAvICVkMTI3KVxuLy9jb25zdCBRVEVYVCQkID0gbWVyZ2UoXCJbXFxcXHgyMVxcXFx4MjMtXFxcXHg1QlxcXFx4NUQtXFxcXHg3RV1cIiwgT0JTX1FURVhUJCQpOyAgLy8lZDMzIC8gJWQzNS05MSAvICVkOTMtMTI2IC8gb2JzLXF0ZXh0XG4vL2NvbnN0IFZDSEFSJCQgPSBcIltcXFxceDIxLVxcXFx4N0VdXCI7XG4vL2NvbnN0IFdTUCQkID0gXCJbXFxcXHgyMFxcXFx4MDldXCI7XG4vL2NvbnN0IE9CU19RUCQgPSBzdWJleHAoXCJcXFxcXFxcXFwiICsgbWVyZ2UoXCJbXFxcXHgwMFxcXFx4MERcXFxceDBBXVwiLCBPQlNfUVRFWFQkJCkpOyAgLy8lZDAgLyBDUiAvIExGIC8gb2JzLXF0ZXh0XG4vL2NvbnN0IEZXUyQgPSBzdWJleHAoc3ViZXhwKFdTUCQkICsgXCIqXCIgKyBcIlxcXFx4MERcXFxceDBBXCIpICsgXCI/XCIgKyBXU1AkJCArIFwiK1wiKTtcbi8vY29uc3QgUVVPVEVEX1BBSVIkID0gc3ViZXhwKHN1YmV4cChcIlxcXFxcXFxcXCIgKyBzdWJleHAoVkNIQVIkJCArIFwifFwiICsgV1NQJCQpKSArIFwifFwiICsgT0JTX1FQJCk7XG4vL2NvbnN0IFFVT1RFRF9TVFJJTkckID0gc3ViZXhwKCdcXFxcXCInICsgc3ViZXhwKEZXUyQgKyBcIj9cIiArIFFDT05URU5UJCkgKyBcIipcIiArIEZXUyQgKyBcIj9cIiArICdcXFxcXCInKTtcbnZhciBBVEVYVCQkID0gXCJbQS1aYS16MC05XFxcXCFcXFxcJFxcXFwlXFxcXCdcXFxcKlxcXFwrXFxcXC1cXFxcXlxcXFxfXFxcXGBcXFxce1xcXFx8XFxcXH1cXFxcfl1cIjtcbnZhciBRVEVYVCQkID0gXCJbXFxcXCFcXFxcJFxcXFwlXFxcXCdcXFxcKFxcXFwpXFxcXCpcXFxcK1xcXFwsXFxcXC1cXFxcLjAtOVxcXFw8XFxcXD5BLVpcXFxceDVFLVxcXFx4N0VdXCI7XG52YXIgVkNIQVIkJCA9IG1lcmdlKFFURVhUJCQsIFwiW1xcXFxcXFwiXFxcXFxcXFxdXCIpO1xudmFyIFNPTUVfREVMSU1TJCQgPSBcIltcXFxcIVxcXFwkXFxcXCdcXFxcKFxcXFwpXFxcXCpcXFxcK1xcXFwsXFxcXDtcXFxcOlxcXFxAXVwiO1xudmFyIFVOUkVTRVJWRUQgPSBuZXcgUmVnRXhwKFVOUkVTRVJWRUQkJCwgXCJnXCIpO1xudmFyIFBDVF9FTkNPREVEID0gbmV3IFJlZ0V4cChQQ1RfRU5DT0RFRCQsIFwiZ1wiKTtcbnZhciBOT1RfTE9DQUxfUEFSVCA9IG5ldyBSZWdFeHAobWVyZ2UoXCJbXl1cIiwgQVRFWFQkJCwgXCJbXFxcXC5dXCIsICdbXFxcXFwiXScsIFZDSEFSJCQpLCBcImdcIik7XG52YXIgTk9UX0hGTkFNRSA9IG5ldyBSZWdFeHAobWVyZ2UoXCJbXl1cIiwgVU5SRVNFUlZFRCQkLCBTT01FX0RFTElNUyQkKSwgXCJnXCIpO1xudmFyIE5PVF9IRlZBTFVFID0gTk9UX0hGTkFNRTtcbmZ1bmN0aW9uIGRlY29kZVVucmVzZXJ2ZWQoc3RyKSB7XG4gICAgdmFyIGRlY1N0ciA9IHBjdERlY0NoYXJzKHN0cik7XG4gICAgcmV0dXJuICFkZWNTdHIubWF0Y2goVU5SRVNFUlZFRCkgPyBzdHIgOiBkZWNTdHI7XG59XG52YXIgaGFuZGxlciQ0ID0ge1xuICAgIHNjaGVtZTogXCJtYWlsdG9cIixcbiAgICBwYXJzZTogZnVuY3Rpb24gcGFyc2UkJDEoY29tcG9uZW50cywgb3B0aW9ucykge1xuICAgICAgICB2YXIgbWFpbHRvQ29tcG9uZW50cyA9IGNvbXBvbmVudHM7XG4gICAgICAgIHZhciB0byA9IG1haWx0b0NvbXBvbmVudHMudG8gPSBtYWlsdG9Db21wb25lbnRzLnBhdGggPyBtYWlsdG9Db21wb25lbnRzLnBhdGguc3BsaXQoXCIsXCIpIDogW107XG4gICAgICAgIG1haWx0b0NvbXBvbmVudHMucGF0aCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKG1haWx0b0NvbXBvbmVudHMucXVlcnkpIHtcbiAgICAgICAgICAgIHZhciB1bmtub3duSGVhZGVycyA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSB7fTtcbiAgICAgICAgICAgIHZhciBoZmllbGRzID0gbWFpbHRvQ29tcG9uZW50cy5xdWVyeS5zcGxpdChcIiZcIik7XG4gICAgICAgICAgICBmb3IgKHZhciB4ID0gMCwgeGwgPSBoZmllbGRzLmxlbmd0aDsgeCA8IHhsOyArK3gpIHtcbiAgICAgICAgICAgICAgICB2YXIgaGZpZWxkID0gaGZpZWxkc1t4XS5zcGxpdChcIj1cIik7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChoZmllbGRbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInRvXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9BZGRycyA9IGhmaWVsZFsxXS5zcGxpdChcIixcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfeCA9IDAsIF94bCA9IHRvQWRkcnMubGVuZ3RoOyBfeCA8IF94bDsgKytfeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvLnB1c2godG9BZGRyc1tfeF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzdWJqZWN0XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBtYWlsdG9Db21wb25lbnRzLnN1YmplY3QgPSB1bmVzY2FwZUNvbXBvbmVudChoZmllbGRbMV0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJib2R5XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBtYWlsdG9Db21wb25lbnRzLmJvZHkgPSB1bmVzY2FwZUNvbXBvbmVudChoZmllbGRbMV0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duSGVhZGVycyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW3VuZXNjYXBlQ29tcG9uZW50KGhmaWVsZFswXSwgb3B0aW9ucyldID0gdW5lc2NhcGVDb21wb25lbnQoaGZpZWxkWzFdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh1bmtub3duSGVhZGVycykgbWFpbHRvQ29tcG9uZW50cy5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgfVxuICAgICAgICBtYWlsdG9Db21wb25lbnRzLnF1ZXJ5ID0gdW5kZWZpbmVkO1xuICAgICAgICBmb3IgKHZhciBfeDIgPSAwLCBfeGwyID0gdG8ubGVuZ3RoOyBfeDIgPCBfeGwyOyArK194Mikge1xuICAgICAgICAgICAgdmFyIGFkZHIgPSB0b1tfeDJdLnNwbGl0KFwiQFwiKTtcbiAgICAgICAgICAgIGFkZHJbMF0gPSB1bmVzY2FwZUNvbXBvbmVudChhZGRyWzBdKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy51bmljb2RlU3VwcG9ydCkge1xuICAgICAgICAgICAgICAgIC8vY29udmVydCBVbmljb2RlIElETiAtPiBBU0NJSSBJRE5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhZGRyWzFdID0gcHVueWNvZGUudG9BU0NJSSh1bmVzY2FwZUNvbXBvbmVudChhZGRyWzFdLCBvcHRpb25zKS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1haWx0b0NvbXBvbmVudHMuZXJyb3IgPSBtYWlsdG9Db21wb25lbnRzLmVycm9yIHx8IFwiRW1haWwgYWRkcmVzcydzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvIEFTQ0lJIHZpYSBwdW55Y29kZTogXCIgKyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkclsxXSA9IHVuZXNjYXBlQ29tcG9uZW50KGFkZHJbMV0sIG9wdGlvbnMpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0b1tfeDJdID0gYWRkci5qb2luKFwiQFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWFpbHRvQ29tcG9uZW50cztcbiAgICB9LFxuICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24gc2VyaWFsaXplJCQxKG1haWx0b0NvbXBvbmVudHMsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudHMgPSBtYWlsdG9Db21wb25lbnRzO1xuICAgICAgICB2YXIgdG8gPSB0b0FycmF5KG1haWx0b0NvbXBvbmVudHMudG8pO1xuICAgICAgICBpZiAodG8pIHtcbiAgICAgICAgICAgIGZvciAodmFyIHggPSAwLCB4bCA9IHRvLmxlbmd0aDsgeCA8IHhsOyArK3gpIHtcbiAgICAgICAgICAgICAgICB2YXIgdG9BZGRyID0gU3RyaW5nKHRvW3hdKTtcbiAgICAgICAgICAgICAgICB2YXIgYXRJZHggPSB0b0FkZHIubGFzdEluZGV4T2YoXCJAXCIpO1xuICAgICAgICAgICAgICAgIHZhciBsb2NhbFBhcnQgPSB0b0FkZHIuc2xpY2UoMCwgYXRJZHgpLnJlcGxhY2UoUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UoUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKS5yZXBsYWNlKE5PVF9MT0NBTF9QQVJULCBwY3RFbmNDaGFyKTtcbiAgICAgICAgICAgICAgICB2YXIgZG9tYWluID0gdG9BZGRyLnNsaWNlKGF0SWR4ICsgMSk7XG4gICAgICAgICAgICAgICAgLy9jb252ZXJ0IElETiB2aWEgcHVueWNvZGVcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBkb21haW4gPSAhb3B0aW9ucy5pcmkgPyBwdW55Y29kZS50b0FTQ0lJKHVuZXNjYXBlQ29tcG9uZW50KGRvbWFpbiwgb3B0aW9ucykudG9Mb3dlckNhc2UoKSkgOiBwdW55Y29kZS50b1VuaWNvZGUoZG9tYWluKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiRW1haWwgYWRkcmVzcydzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvIFwiICsgKCFvcHRpb25zLmlyaSA/IFwiQVNDSUlcIiA6IFwiVW5pY29kZVwiKSArIFwiIHZpYSBwdW55Y29kZTogXCIgKyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0b1t4XSA9IGxvY2FsUGFydCArIFwiQFwiICsgZG9tYWluO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcG9uZW50cy5wYXRoID0gdG8uam9pbihcIixcIik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGhlYWRlcnMgPSBtYWlsdG9Db21wb25lbnRzLmhlYWRlcnMgPSBtYWlsdG9Db21wb25lbnRzLmhlYWRlcnMgfHwge307XG4gICAgICAgIGlmIChtYWlsdG9Db21wb25lbnRzLnN1YmplY3QpIGhlYWRlcnNbXCJzdWJqZWN0XCJdID0gbWFpbHRvQ29tcG9uZW50cy5zdWJqZWN0O1xuICAgICAgICBpZiAobWFpbHRvQ29tcG9uZW50cy5ib2R5KSBoZWFkZXJzW1wiYm9keVwiXSA9IG1haWx0b0NvbXBvbmVudHMuYm9keTtcbiAgICAgICAgdmFyIGZpZWxkcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIGhlYWRlcnMpIHtcbiAgICAgICAgICAgIGlmIChoZWFkZXJzW25hbWVdICE9PSBPW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgZmllbGRzLnB1c2gobmFtZS5yZXBsYWNlKFBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKFBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSkucmVwbGFjZShOT1RfSEZOQU1FLCBwY3RFbmNDaGFyKSArIFwiPVwiICsgaGVhZGVyc1tuYW1lXS5yZXBsYWNlKFBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKFBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSkucmVwbGFjZShOT1RfSEZWQUxVRSwgcGN0RW5jQ2hhcikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChmaWVsZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLnF1ZXJ5ID0gZmllbGRzLmpvaW4oXCImXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn07XG5cbnZhciBVUk5fUEFSU0UgPSAvXihbXlxcOl0rKVxcOiguKikvO1xuLy9SRkMgMjE0MVxudmFyIGhhbmRsZXIkNSA9IHtcbiAgICBzY2hlbWU6IFwidXJuXCIsXG4gICAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlJCQxKGNvbXBvbmVudHMsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIG1hdGNoZXMgPSBjb21wb25lbnRzLnBhdGggJiYgY29tcG9uZW50cy5wYXRoLm1hdGNoKFVSTl9QQVJTRSk7XG4gICAgICAgIHZhciB1cm5Db21wb25lbnRzID0gY29tcG9uZW50cztcbiAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICAgIHZhciBzY2hlbWUgPSBvcHRpb25zLnNjaGVtZSB8fCB1cm5Db21wb25lbnRzLnNjaGVtZSB8fCBcInVyblwiO1xuICAgICAgICAgICAgdmFyIG5pZCA9IG1hdGNoZXNbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHZhciBuc3MgPSBtYXRjaGVzWzJdO1xuICAgICAgICAgICAgdmFyIHVyblNjaGVtZSA9IHNjaGVtZSArIFwiOlwiICsgKG9wdGlvbnMubmlkIHx8IG5pZCk7XG4gICAgICAgICAgICB2YXIgc2NoZW1lSGFuZGxlciA9IFNDSEVNRVNbdXJuU2NoZW1lXTtcbiAgICAgICAgICAgIHVybkNvbXBvbmVudHMubmlkID0gbmlkO1xuICAgICAgICAgICAgdXJuQ29tcG9uZW50cy5uc3MgPSBuc3M7XG4gICAgICAgICAgICB1cm5Db21wb25lbnRzLnBhdGggPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoc2NoZW1lSGFuZGxlcikge1xuICAgICAgICAgICAgICAgIHVybkNvbXBvbmVudHMgPSBzY2hlbWVIYW5kbGVyLnBhcnNlKHVybkNvbXBvbmVudHMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXJuQ29tcG9uZW50cy5lcnJvciA9IHVybkNvbXBvbmVudHMuZXJyb3IgfHwgXCJVUk4gY2FuIG5vdCBiZSBwYXJzZWQuXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVybkNvbXBvbmVudHM7XG4gICAgfSxcbiAgICBzZXJpYWxpemU6IGZ1bmN0aW9uIHNlcmlhbGl6ZSQkMSh1cm5Db21wb25lbnRzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBzY2hlbWUgPSBvcHRpb25zLnNjaGVtZSB8fCB1cm5Db21wb25lbnRzLnNjaGVtZSB8fCBcInVyblwiO1xuICAgICAgICB2YXIgbmlkID0gdXJuQ29tcG9uZW50cy5uaWQ7XG4gICAgICAgIHZhciB1cm5TY2hlbWUgPSBzY2hlbWUgKyBcIjpcIiArIChvcHRpb25zLm5pZCB8fCBuaWQpO1xuICAgICAgICB2YXIgc2NoZW1lSGFuZGxlciA9IFNDSEVNRVNbdXJuU2NoZW1lXTtcbiAgICAgICAgaWYgKHNjaGVtZUhhbmRsZXIpIHtcbiAgICAgICAgICAgIHVybkNvbXBvbmVudHMgPSBzY2hlbWVIYW5kbGVyLnNlcmlhbGl6ZSh1cm5Db21wb25lbnRzLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdXJpQ29tcG9uZW50cyA9IHVybkNvbXBvbmVudHM7XG4gICAgICAgIHZhciBuc3MgPSB1cm5Db21wb25lbnRzLm5zcztcbiAgICAgICAgdXJpQ29tcG9uZW50cy5wYXRoID0gKG5pZCB8fCBvcHRpb25zLm5pZCkgKyBcIjpcIiArIG5zcztcbiAgICAgICAgcmV0dXJuIHVyaUNvbXBvbmVudHM7XG4gICAgfVxufTtcblxudmFyIFVVSUQgPSAvXlswLTlBLUZhLWZdezh9KD86XFwtWzAtOUEtRmEtZl17NH0pezN9XFwtWzAtOUEtRmEtZl17MTJ9JC87XG4vL1JGQyA0MTIyXG52YXIgaGFuZGxlciQ2ID0ge1xuICAgIHNjaGVtZTogXCJ1cm46dXVpZFwiLFxuICAgIHBhcnNlOiBmdW5jdGlvbiBwYXJzZSh1cm5Db21wb25lbnRzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciB1dWlkQ29tcG9uZW50cyA9IHVybkNvbXBvbmVudHM7XG4gICAgICAgIHV1aWRDb21wb25lbnRzLnV1aWQgPSB1dWlkQ29tcG9uZW50cy5uc3M7XG4gICAgICAgIHV1aWRDb21wb25lbnRzLm5zcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCFvcHRpb25zLnRvbGVyYW50ICYmICghdXVpZENvbXBvbmVudHMudXVpZCB8fCAhdXVpZENvbXBvbmVudHMudXVpZC5tYXRjaChVVUlEKSkpIHtcbiAgICAgICAgICAgIHV1aWRDb21wb25lbnRzLmVycm9yID0gdXVpZENvbXBvbmVudHMuZXJyb3IgfHwgXCJVVUlEIGlzIG5vdCB2YWxpZC5cIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXVpZENvbXBvbmVudHM7XG4gICAgfSxcbiAgICBzZXJpYWxpemU6IGZ1bmN0aW9uIHNlcmlhbGl6ZSh1dWlkQ29tcG9uZW50cywgb3B0aW9ucykge1xuICAgICAgICB2YXIgdXJuQ29tcG9uZW50cyA9IHV1aWRDb21wb25lbnRzO1xuICAgICAgICAvL25vcm1hbGl6ZSBVVUlEXG4gICAgICAgIHVybkNvbXBvbmVudHMubnNzID0gKHV1aWRDb21wb25lbnRzLnV1aWQgfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIHVybkNvbXBvbmVudHM7XG4gICAgfVxufTtcblxuU0NIRU1FU1toYW5kbGVyLnNjaGVtZV0gPSBoYW5kbGVyO1xuU0NIRU1FU1toYW5kbGVyJDEuc2NoZW1lXSA9IGhhbmRsZXIkMTtcblNDSEVNRVNbaGFuZGxlciQyLnNjaGVtZV0gPSBoYW5kbGVyJDI7XG5TQ0hFTUVTW2hhbmRsZXIkMy5zY2hlbWVdID0gaGFuZGxlciQzO1xuU0NIRU1FU1toYW5kbGVyJDQuc2NoZW1lXSA9IGhhbmRsZXIkNDtcblNDSEVNRVNbaGFuZGxlciQ1LnNjaGVtZV0gPSBoYW5kbGVyJDU7XG5TQ0hFTUVTW2hhbmRsZXIkNi5zY2hlbWVdID0gaGFuZGxlciQ2O1xuXG5leHBvcnRzLlNDSEVNRVMgPSBTQ0hFTUVTO1xuZXhwb3J0cy5wY3RFbmNDaGFyID0gcGN0RW5jQ2hhcjtcbmV4cG9ydHMucGN0RGVjQ2hhcnMgPSBwY3REZWNDaGFycztcbmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbmV4cG9ydHMucmVtb3ZlRG90U2VnbWVudHMgPSByZW1vdmVEb3RTZWdtZW50cztcbmV4cG9ydHMuc2VyaWFsaXplID0gc2VyaWFsaXplO1xuZXhwb3J0cy5yZXNvbHZlQ29tcG9uZW50cyA9IHJlc29sdmVDb21wb25lbnRzO1xuZXhwb3J0cy5yZXNvbHZlID0gcmVzb2x2ZTtcbmV4cG9ydHMubm9ybWFsaXplID0gbm9ybWFsaXplO1xuZXhwb3J0cy5lcXVhbCA9IGVxdWFsO1xuZXhwb3J0cy5lc2NhcGVDb21wb25lbnQgPSBlc2NhcGVDb21wb25lbnQ7XG5leHBvcnRzLnVuZXNjYXBlQ29tcG9uZW50ID0gdW5lc2NhcGVDb21wb25lbnQ7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cmkuYWxsLmpzLm1hcFxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHVyaSA9IHJlcXVpcmUoXCJ1cmktanNcIik7XG51cmkuY29kZSA9ICdyZXF1aXJlKFwiYWp2L2Rpc3QvcnVudGltZS91cmlcIikuZGVmYXVsdCc7XG5leHBvcnRzLmRlZmF1bHQgPSB1cmk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cmkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29kZUdlbiA9IGV4cG9ydHMuTmFtZSA9IGV4cG9ydHMubmlsID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLnN0ciA9IGV4cG9ydHMuXyA9IGV4cG9ydHMuS2V5d29yZEN4dCA9IHZvaWQgMDtcbnZhciB2YWxpZGF0ZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS92YWxpZGF0ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIktleXdvcmRDeHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbGlkYXRlXzEuS2V5d29yZEN4dDsgfSB9KTtcbnZhciBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL2NvZGVnZW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuXzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0clwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ2lmeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cmluZ2lmeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5pbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLm5pbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5OYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29kZUdlblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLkNvZGVHZW47IH0gfSk7XG5jb25zdCB2YWxpZGF0aW9uX2Vycm9yXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3JcIik7XG5jb25zdCByZWZfZXJyb3JfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcmVmX2Vycm9yXCIpO1xuY29uc3QgcnVsZXNfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcnVsZXNcIik7XG5jb25zdCBjb21waWxlXzEgPSByZXF1aXJlKFwiLi9jb21waWxlXCIpO1xuY29uc3QgY29kZWdlbl8yID0gcmVxdWlyZShcIi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgcmVzb2x2ZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS9yZXNvbHZlXCIpO1xuY29uc3QgZGF0YVR5cGVfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCAkZGF0YVJlZlNjaGVtYSA9IHJlcXVpcmUoXCIuL3JlZnMvZGF0YS5qc29uXCIpO1xuY29uc3QgdXJpXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lL3VyaVwiKTtcbmNvbnN0IGRlZmF1bHRSZWdFeHAgPSAoc3RyLCBmbGFncykgPT4gbmV3IFJlZ0V4cChzdHIsIGZsYWdzKTtcbmRlZmF1bHRSZWdFeHAuY29kZSA9IFwibmV3IFJlZ0V4cFwiO1xuY29uc3QgTUVUQV9JR05PUkVfT1BUSU9OUyA9IFtcInJlbW92ZUFkZGl0aW9uYWxcIiwgXCJ1c2VEZWZhdWx0c1wiLCBcImNvZXJjZVR5cGVzXCJdO1xuY29uc3QgRVhUX1NDT1BFX05BTUVTID0gbmV3IFNldChbXG4gICAgXCJ2YWxpZGF0ZVwiLFxuICAgIFwic2VyaWFsaXplXCIsXG4gICAgXCJwYXJzZVwiLFxuICAgIFwid3JhcHBlclwiLFxuICAgIFwicm9vdFwiLFxuICAgIFwic2NoZW1hXCIsXG4gICAgXCJrZXl3b3JkXCIsXG4gICAgXCJwYXR0ZXJuXCIsXG4gICAgXCJmb3JtYXRzXCIsXG4gICAgXCJ2YWxpZGF0ZSRkYXRhXCIsXG4gICAgXCJmdW5jXCIsXG4gICAgXCJvYmpcIixcbiAgICBcIkVycm9yXCIsXG5dKTtcbmNvbnN0IHJlbW92ZWRPcHRpb25zID0ge1xuICAgIGVycm9yRGF0YVBhdGg6IFwiXCIsXG4gICAgZm9ybWF0OiBcImB2YWxpZGF0ZUZvcm1hdHM6IGZhbHNlYCBjYW4gYmUgdXNlZCBpbnN0ZWFkLlwiLFxuICAgIG51bGxhYmxlOiAnXCJudWxsYWJsZVwiIGtleXdvcmQgaXMgc3VwcG9ydGVkIGJ5IGRlZmF1bHQuJyxcbiAgICBqc29uUG9pbnRlcnM6IFwiRGVwcmVjYXRlZCBqc1Byb3BlcnR5U3ludGF4IGNhbiBiZSB1c2VkIGluc3RlYWQuXCIsXG4gICAgZXh0ZW5kUmVmczogXCJEZXByZWNhdGVkIGlnbm9yZUtleXdvcmRzV2l0aFJlZiBjYW4gYmUgdXNlZCBpbnN0ZWFkLlwiLFxuICAgIG1pc3NpbmdSZWZzOiBcIlBhc3MgZW1wdHkgc2NoZW1hIHdpdGggJGlkIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQgdG8gYWp2LmFkZFNjaGVtYS5cIixcbiAgICBwcm9jZXNzQ29kZTogXCJVc2Ugb3B0aW9uIGBjb2RlOiB7cHJvY2VzczogKGNvZGUsIHNjaGVtYUVudjogb2JqZWN0KSA9PiBzdHJpbmd9YFwiLFxuICAgIHNvdXJjZUNvZGU6IFwiVXNlIG9wdGlvbiBgY29kZToge3NvdXJjZTogdHJ1ZX1gXCIsXG4gICAgc3RyaWN0RGVmYXVsdHM6IFwiSXQgaXMgZGVmYXVsdCBub3csIHNlZSBvcHRpb24gYHN0cmljdGAuXCIsXG4gICAgc3RyaWN0S2V5d29yZHM6IFwiSXQgaXMgZGVmYXVsdCBub3csIHNlZSBvcHRpb24gYHN0cmljdGAuXCIsXG4gICAgdW5pcXVlSXRlbXM6ICdcInVuaXF1ZUl0ZW1zXCIga2V5d29yZCBpcyBhbHdheXMgdmFsaWRhdGVkLicsXG4gICAgdW5rbm93bkZvcm1hdHM6IFwiRGlzYWJsZSBzdHJpY3QgbW9kZSBvciBwYXNzIGB0cnVlYCB0byBgYWp2LmFkZEZvcm1hdGAgKG9yIGBmb3JtYXRzYCBvcHRpb24pLlwiLFxuICAgIGNhY2hlOiBcIk1hcCBpcyB1c2VkIGFzIGNhY2hlLCBzY2hlbWEgb2JqZWN0IGFzIGtleS5cIixcbiAgICBzZXJpYWxpemU6IFwiTWFwIGlzIHVzZWQgYXMgY2FjaGUsIHNjaGVtYSBvYmplY3QgYXMga2V5LlwiLFxuICAgIGFqdkVycm9yczogXCJJdCBpcyBkZWZhdWx0IG5vdy5cIixcbn07XG5jb25zdCBkZXByZWNhdGVkT3B0aW9ucyA9IHtcbiAgICBpZ25vcmVLZXl3b3Jkc1dpdGhSZWY6IFwiXCIsXG4gICAganNQcm9wZXJ0eVN5bnRheDogXCJcIixcbiAgICB1bmljb2RlOiAnXCJtaW5MZW5ndGhcIi9cIm1heExlbmd0aFwiIGFjY291bnQgZm9yIHVuaWNvZGUgY2hhcmFjdGVycyBieSBkZWZhdWx0LicsXG59O1xuY29uc3QgTUFYX0VYUFJFU1NJT04gPSAyMDA7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gcmVxdWlyZWRPcHRpb25zKG8pIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2csIF9oLCBfaiwgX2ssIF9sLCBfbSwgX28sIF9wLCBfcSwgX3IsIF9zLCBfdCwgX3UsIF92LCBfdywgX3gsIF95LCBfeiwgXzA7XG4gICAgY29uc3QgcyA9IG8uc3RyaWN0O1xuICAgIGNvbnN0IF9vcHR6ID0gKF9hID0gby5jb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW1pemU7XG4gICAgY29uc3Qgb3B0aW1pemUgPSBfb3B0eiA9PT0gdHJ1ZSB8fCBfb3B0eiA9PT0gdW5kZWZpbmVkID8gMSA6IF9vcHR6IHx8IDA7XG4gICAgY29uc3QgcmVnRXhwID0gKF9jID0gKF9iID0gby5jb2RlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmVnRXhwKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBkZWZhdWx0UmVnRXhwO1xuICAgIGNvbnN0IHVyaVJlc29sdmVyID0gKF9kID0gby51cmlSZXNvbHZlcikgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogdXJpXzEuZGVmYXVsdDtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdHJpY3RTY2hlbWE6IChfZiA9IChfZSA9IG8uc3RyaWN0U2NoZW1hKSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiBzKSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiB0cnVlLFxuICAgICAgICBzdHJpY3ROdW1iZXJzOiAoX2ggPSAoX2cgPSBvLnN0cmljdE51bWJlcnMpICE9PSBudWxsICYmIF9nICE9PSB2b2lkIDAgPyBfZyA6IHMpICE9PSBudWxsICYmIF9oICE9PSB2b2lkIDAgPyBfaCA6IHRydWUsXG4gICAgICAgIHN0cmljdFR5cGVzOiAoX2sgPSAoX2ogPSBvLnN0cmljdFR5cGVzKSAhPT0gbnVsbCAmJiBfaiAhPT0gdm9pZCAwID8gX2ogOiBzKSAhPT0gbnVsbCAmJiBfayAhPT0gdm9pZCAwID8gX2sgOiBcImxvZ1wiLFxuICAgICAgICBzdHJpY3RUdXBsZXM6IChfbSA9IChfbCA9IG8uc3RyaWN0VHVwbGVzKSAhPT0gbnVsbCAmJiBfbCAhPT0gdm9pZCAwID8gX2wgOiBzKSAhPT0gbnVsbCAmJiBfbSAhPT0gdm9pZCAwID8gX20gOiBcImxvZ1wiLFxuICAgICAgICBzdHJpY3RSZXF1aXJlZDogKF9wID0gKF9vID0gby5zdHJpY3RSZXF1aXJlZCkgIT09IG51bGwgJiYgX28gIT09IHZvaWQgMCA/IF9vIDogcykgIT09IG51bGwgJiYgX3AgIT09IHZvaWQgMCA/IF9wIDogZmFsc2UsXG4gICAgICAgIGNvZGU6IG8uY29kZSA/IHsgLi4uby5jb2RlLCBvcHRpbWl6ZSwgcmVnRXhwIH0gOiB7IG9wdGltaXplLCByZWdFeHAgfSxcbiAgICAgICAgbG9vcFJlcXVpcmVkOiAoX3EgPSBvLmxvb3BSZXF1aXJlZCkgIT09IG51bGwgJiYgX3EgIT09IHZvaWQgMCA/IF9xIDogTUFYX0VYUFJFU1NJT04sXG4gICAgICAgIGxvb3BFbnVtOiAoX3IgPSBvLmxvb3BFbnVtKSAhPT0gbnVsbCAmJiBfciAhPT0gdm9pZCAwID8gX3IgOiBNQVhfRVhQUkVTU0lPTixcbiAgICAgICAgbWV0YTogKF9zID0gby5tZXRhKSAhPT0gbnVsbCAmJiBfcyAhPT0gdm9pZCAwID8gX3MgOiB0cnVlLFxuICAgICAgICBtZXNzYWdlczogKF90ID0gby5tZXNzYWdlcykgIT09IG51bGwgJiYgX3QgIT09IHZvaWQgMCA/IF90IDogdHJ1ZSxcbiAgICAgICAgaW5saW5lUmVmczogKF91ID0gby5pbmxpbmVSZWZzKSAhPT0gbnVsbCAmJiBfdSAhPT0gdm9pZCAwID8gX3UgOiB0cnVlLFxuICAgICAgICBzY2hlbWFJZDogKF92ID0gby5zY2hlbWFJZCkgIT09IG51bGwgJiYgX3YgIT09IHZvaWQgMCA/IF92IDogXCIkaWRcIixcbiAgICAgICAgYWRkVXNlZFNjaGVtYTogKF93ID0gby5hZGRVc2VkU2NoZW1hKSAhPT0gbnVsbCAmJiBfdyAhPT0gdm9pZCAwID8gX3cgOiB0cnVlLFxuICAgICAgICB2YWxpZGF0ZVNjaGVtYTogKF94ID0gby52YWxpZGF0ZVNjaGVtYSkgIT09IG51bGwgJiYgX3ggIT09IHZvaWQgMCA/IF94IDogdHJ1ZSxcbiAgICAgICAgdmFsaWRhdGVGb3JtYXRzOiAoX3kgPSBvLnZhbGlkYXRlRm9ybWF0cykgIT09IG51bGwgJiYgX3kgIT09IHZvaWQgMCA/IF95IDogdHJ1ZSxcbiAgICAgICAgdW5pY29kZVJlZ0V4cDogKF96ID0gby51bmljb2RlUmVnRXhwKSAhPT0gbnVsbCAmJiBfeiAhPT0gdm9pZCAwID8gX3ogOiB0cnVlLFxuICAgICAgICBpbnQzMnJhbmdlOiAoXzAgPSBvLmludDMycmFuZ2UpICE9PSBudWxsICYmIF8wICE9PSB2b2lkIDAgPyBfMCA6IHRydWUsXG4gICAgICAgIHVyaVJlc29sdmVyOiB1cmlSZXNvbHZlcixcbiAgICB9O1xufVxuY2xhc3MgQWp2IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICAgICAgdGhpcy5zY2hlbWFzID0ge307XG4gICAgICAgIHRoaXMucmVmcyA9IHt9O1xuICAgICAgICB0aGlzLmZvcm1hdHMgPSB7fTtcbiAgICAgICAgdGhpcy5fY29tcGlsYXRpb25zID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLl9sb2FkaW5nID0ge307XG4gICAgICAgIHRoaXMuX2NhY2hlID0gbmV3IE1hcCgpO1xuICAgICAgICBvcHRzID0gdGhpcy5vcHRzID0geyAuLi5vcHRzLCAuLi5yZXF1aXJlZE9wdGlvbnMob3B0cykgfTtcbiAgICAgICAgY29uc3QgeyBlczUsIGxpbmVzIH0gPSB0aGlzLm9wdHMuY29kZTtcbiAgICAgICAgdGhpcy5zY29wZSA9IG5ldyBjb2RlZ2VuXzIuVmFsdWVTY29wZSh7IHNjb3BlOiB7fSwgcHJlZml4ZXM6IEVYVF9TQ09QRV9OQU1FUywgZXM1LCBsaW5lcyB9KTtcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBnZXRMb2dnZXIob3B0cy5sb2dnZXIpO1xuICAgICAgICBjb25zdCBmb3JtYXRPcHQgPSBvcHRzLnZhbGlkYXRlRm9ybWF0cztcbiAgICAgICAgb3B0cy52YWxpZGF0ZUZvcm1hdHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5SVUxFUyA9ICgwLCBydWxlc18xLmdldFJ1bGVzKSgpO1xuICAgICAgICBjaGVja09wdGlvbnMuY2FsbCh0aGlzLCByZW1vdmVkT3B0aW9ucywgb3B0cywgXCJOT1QgU1VQUE9SVEVEXCIpO1xuICAgICAgICBjaGVja09wdGlvbnMuY2FsbCh0aGlzLCBkZXByZWNhdGVkT3B0aW9ucywgb3B0cywgXCJERVBSRUNBVEVEXCIsIFwid2FyblwiKTtcbiAgICAgICAgdGhpcy5fbWV0YU9wdHMgPSBnZXRNZXRhU2NoZW1hT3B0aW9ucy5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAob3B0cy5mb3JtYXRzKVxuICAgICAgICAgICAgYWRkSW5pdGlhbEZvcm1hdHMuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5fYWRkVm9jYWJ1bGFyaWVzKCk7XG4gICAgICAgIHRoaXMuX2FkZERlZmF1bHRNZXRhU2NoZW1hKCk7XG4gICAgICAgIGlmIChvcHRzLmtleXdvcmRzKVxuICAgICAgICAgICAgYWRkSW5pdGlhbEtleXdvcmRzLmNhbGwodGhpcywgb3B0cy5rZXl3b3Jkcyk7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRhID09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICB0aGlzLmFkZE1ldGFTY2hlbWEob3B0cy5tZXRhKTtcbiAgICAgICAgYWRkSW5pdGlhbFNjaGVtYXMuY2FsbCh0aGlzKTtcbiAgICAgICAgb3B0cy52YWxpZGF0ZUZvcm1hdHMgPSBmb3JtYXRPcHQ7XG4gICAgfVxuICAgIF9hZGRWb2NhYnVsYXJpZXMoKSB7XG4gICAgICAgIHRoaXMuYWRkS2V5d29yZChcIiRhc3luY1wiKTtcbiAgICB9XG4gICAgX2FkZERlZmF1bHRNZXRhU2NoZW1hKCkge1xuICAgICAgICBjb25zdCB7ICRkYXRhLCBtZXRhLCBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICBsZXQgX2RhdGFSZWZTY2hlbWEgPSAkZGF0YVJlZlNjaGVtYTtcbiAgICAgICAgaWYgKHNjaGVtYUlkID09PSBcImlkXCIpIHtcbiAgICAgICAgICAgIF9kYXRhUmVmU2NoZW1hID0geyAuLi4kZGF0YVJlZlNjaGVtYSB9O1xuICAgICAgICAgICAgX2RhdGFSZWZTY2hlbWEuaWQgPSBfZGF0YVJlZlNjaGVtYS4kaWQ7XG4gICAgICAgICAgICBkZWxldGUgX2RhdGFSZWZTY2hlbWEuJGlkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhICYmICRkYXRhKVxuICAgICAgICAgICAgdGhpcy5hZGRNZXRhU2NoZW1hKF9kYXRhUmVmU2NoZW1hLCBfZGF0YVJlZlNjaGVtYVtzY2hlbWFJZF0sIGZhbHNlKTtcbiAgICB9XG4gICAgZGVmYXVsdE1ldGEoKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0YSwgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgcmV0dXJuICh0aGlzLm9wdHMuZGVmYXVsdE1ldGEgPSB0eXBlb2YgbWV0YSA9PSBcIm9iamVjdFwiID8gbWV0YVtzY2hlbWFJZF0gfHwgbWV0YSA6IHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHZhbGlkYXRlKHNjaGVtYUtleVJlZiwgLy8ga2V5LCByZWYgb3Igc2NoZW1hIG9iamVjdFxuICAgIGRhdGEgLy8gdG8gYmUgdmFsaWRhdGVkXG4gICAgKSB7XG4gICAgICAgIGxldCB2O1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYUtleVJlZiA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB2ID0gdGhpcy5nZXRTY2hlbWEoc2NoZW1hS2V5UmVmKTtcbiAgICAgICAgICAgIGlmICghdilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHNjaGVtYSB3aXRoIGtleSBvciByZWYgXCIke3NjaGVtYUtleVJlZn1cImApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdiA9IHRoaXMuY29tcGlsZShzY2hlbWFLZXlSZWYpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbGlkID0gdihkYXRhKTtcbiAgICAgICAgaWYgKCEoXCIkYXN5bmNcIiBpbiB2KSlcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzID0gdi5lcnJvcnM7XG4gICAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9XG4gICAgY29tcGlsZShzY2hlbWEsIF9tZXRhKSB7XG4gICAgICAgIGNvbnN0IHNjaCA9IHRoaXMuX2FkZFNjaGVtYShzY2hlbWEsIF9tZXRhKTtcbiAgICAgICAgcmV0dXJuIChzY2gudmFsaWRhdGUgfHwgdGhpcy5fY29tcGlsZVNjaGVtYUVudihzY2gpKTtcbiAgICB9XG4gICAgY29tcGlsZUFzeW5jKHNjaGVtYSwgbWV0YSkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0cy5sb2FkU2NoZW1hICE9IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwib3B0aW9ucy5sb2FkU2NoZW1hIHNob3VsZCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgbG9hZFNjaGVtYSB9ID0gdGhpcy5vcHRzO1xuICAgICAgICByZXR1cm4gcnVuQ29tcGlsZUFzeW5jLmNhbGwodGhpcywgc2NoZW1hLCBtZXRhKTtcbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gcnVuQ29tcGlsZUFzeW5jKF9zY2hlbWEsIF9tZXRhKSB7XG4gICAgICAgICAgICBhd2FpdCBsb2FkTWV0YVNjaGVtYS5jYWxsKHRoaXMsIF9zY2hlbWEuJHNjaGVtYSk7XG4gICAgICAgICAgICBjb25zdCBzY2ggPSB0aGlzLl9hZGRTY2hlbWEoX3NjaGVtYSwgX21ldGEpO1xuICAgICAgICAgICAgcmV0dXJuIHNjaC52YWxpZGF0ZSB8fCBfY29tcGlsZUFzeW5jLmNhbGwodGhpcywgc2NoKTtcbiAgICAgICAgfVxuICAgICAgICBhc3luYyBmdW5jdGlvbiBsb2FkTWV0YVNjaGVtYSgkcmVmKSB7XG4gICAgICAgICAgICBpZiAoJHJlZiAmJiAhdGhpcy5nZXRTY2hlbWEoJHJlZikpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBydW5Db21waWxlQXN5bmMuY2FsbCh0aGlzLCB7ICRyZWYgfSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gX2NvbXBpbGVBc3luYyhzY2gpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXBpbGVTY2hlbWFFbnYoc2NoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIHJlZl9lcnJvcl8xLmRlZmF1bHQpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkLmNhbGwodGhpcywgZSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgbG9hZE1pc3NpbmdTY2hlbWEuY2FsbCh0aGlzLCBlLm1pc3NpbmdTY2hlbWEpO1xuICAgICAgICAgICAgICAgIHJldHVybiBfY29tcGlsZUFzeW5jLmNhbGwodGhpcywgc2NoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjaGVja0xvYWRlZCh7IG1pc3NpbmdTY2hlbWE6IHJlZiwgbWlzc2luZ1JlZiB9KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWZzW3JlZl0pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFueVNjaGVtYSAke3JlZn0gaXMgbG9hZGVkIGJ1dCAke21pc3NpbmdSZWZ9IGNhbm5vdCBiZSByZXNvbHZlZGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWRNaXNzaW5nU2NoZW1hKHJlZikge1xuICAgICAgICAgICAgY29uc3QgX3NjaGVtYSA9IGF3YWl0IF9sb2FkU2NoZW1hLmNhbGwodGhpcywgcmVmKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZWZzW3JlZl0pXG4gICAgICAgICAgICAgICAgYXdhaXQgbG9hZE1ldGFTY2hlbWEuY2FsbCh0aGlzLCBfc2NoZW1hLiRzY2hlbWEpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlZnNbcmVmXSlcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFNjaGVtYShfc2NoZW1hLCByZWYsIG1ldGEpO1xuICAgICAgICB9XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIF9sb2FkU2NoZW1hKHJlZikge1xuICAgICAgICAgICAgY29uc3QgcCA9IHRoaXMuX2xvYWRpbmdbcmVmXTtcbiAgICAgICAgICAgIGlmIChwKVxuICAgICAgICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgKHRoaXMuX2xvYWRpbmdbcmVmXSA9IGxvYWRTY2hlbWEocmVmKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fbG9hZGluZ1tyZWZdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEFkZHMgc2NoZW1hIHRvIHRoZSBpbnN0YW5jZVxuICAgIGFkZFNjaGVtYShzY2hlbWEsIC8vIElmIGFycmF5IGlzIHBhc3NlZCwgYGtleWAgd2lsbCBiZSBpZ25vcmVkXG4gICAga2V5LCAvLyBPcHRpb25hbCBzY2hlbWEga2V5LiBDYW4gYmUgcGFzc2VkIHRvIGB2YWxpZGF0ZWAgbWV0aG9kIGluc3RlYWQgb2Ygc2NoZW1hIG9iamVjdCBvciBpZC9yZWYuIE9uZSBzY2hlbWEgcGVyIGluc3RhbmNlIGNhbiBoYXZlIGVtcHR5IGBpZGAgYW5kIGBrZXlgLlxuICAgIF9tZXRhLCAvLyB0cnVlIGlmIHNjaGVtYSBpcyBhIG1ldGEtc2NoZW1hLiBVc2VkIGludGVybmFsbHksIGFkZE1ldGFTY2hlbWEgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC5cbiAgICBfdmFsaWRhdGVTY2hlbWEgPSB0aGlzLm9wdHMudmFsaWRhdGVTY2hlbWEgLy8gZmFsc2UgdG8gc2tpcCBzY2hlbWEgdmFsaWRhdGlvbi4gVXNlZCBpbnRlcm5hbGx5LCBvcHRpb24gdmFsaWRhdGVTY2hlbWEgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC5cbiAgICApIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzY2ggb2Ygc2NoZW1hKVxuICAgICAgICAgICAgICAgIHRoaXMuYWRkU2NoZW1hKHNjaCwgdW5kZWZpbmVkLCBfbWV0YSwgX3ZhbGlkYXRlU2NoZW1hKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpZDtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgICAgIGlkID0gc2NoZW1hW3NjaGVtYUlkXTtcbiAgICAgICAgICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBpZCAhPSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzY2hlbWEgJHtzY2hlbWFJZH0gbXVzdCBiZSBzdHJpbmdgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBrZXkgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKShrZXkgfHwgaWQpO1xuICAgICAgICB0aGlzLl9jaGVja1VuaXF1ZShrZXkpO1xuICAgICAgICB0aGlzLnNjaGVtYXNba2V5XSA9IHRoaXMuX2FkZFNjaGVtYShzY2hlbWEsIF9tZXRhLCBrZXksIF92YWxpZGF0ZVNjaGVtYSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBBZGQgc2NoZW1hIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHZhbGlkYXRlIG90aGVyIHNjaGVtYXNcbiAgICAvLyBvcHRpb25zIGluIE1FVEFfSUdOT1JFX09QVElPTlMgYXJlIGFsd2F5IHNldCB0byBmYWxzZVxuICAgIGFkZE1ldGFTY2hlbWEoc2NoZW1hLCBrZXksIC8vIHNjaGVtYSBrZXlcbiAgICBfdmFsaWRhdGVTY2hlbWEgPSB0aGlzLm9wdHMudmFsaWRhdGVTY2hlbWEgLy8gZmFsc2UgdG8gc2tpcCBzY2hlbWEgdmFsaWRhdGlvbiwgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdmFsaWRhdGVTY2hlbWEgb3B0aW9uIGZvciBtZXRhLXNjaGVtYVxuICAgICkge1xuICAgICAgICB0aGlzLmFkZFNjaGVtYShzY2hlbWEsIGtleSwgdHJ1ZSwgX3ZhbGlkYXRlU2NoZW1hKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vICBWYWxpZGF0ZSBzY2hlbWEgYWdhaW5zdCBpdHMgbWV0YS1zY2hlbWFcbiAgICB2YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRocm93T3JMb2dFcnJvcikge1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBsZXQgJHNjaGVtYTtcbiAgICAgICAgJHNjaGVtYSA9IHNjaGVtYS4kc2NoZW1hO1xuICAgICAgICBpZiAoJHNjaGVtYSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAkc2NoZW1hICE9IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIiRzY2hlbWEgbXVzdCBiZSBhIHN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICAkc2NoZW1hID0gJHNjaGVtYSB8fCB0aGlzLm9wdHMuZGVmYXVsdE1ldGEgfHwgdGhpcy5kZWZhdWx0TWV0YSgpO1xuICAgICAgICBpZiAoISRzY2hlbWEpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJtZXRhLXNjaGVtYSBub3QgYXZhaWxhYmxlXCIpO1xuICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsaWQgPSB0aGlzLnZhbGlkYXRlKCRzY2hlbWEsIHNjaGVtYSk7XG4gICAgICAgIGlmICghdmFsaWQgJiYgdGhyb3dPckxvZ0Vycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gXCJzY2hlbWEgaXMgaW52YWxpZDogXCIgKyB0aGlzLmVycm9yc1RleHQoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdHMudmFsaWRhdGVTY2hlbWEgPT09IFwibG9nXCIpXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IobWVzc2FnZSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9XG4gICAgLy8gR2V0IGNvbXBpbGVkIHNjaGVtYSBieSBga2V5YCBvciBgcmVmYC5cbiAgICAvLyAoYGtleWAgdGhhdCB3YXMgcGFzc2VkIHRvIGBhZGRTY2hlbWFgIG9yIGZ1bGwgc2NoZW1hIHJlZmVyZW5jZSAtIGBzY2hlbWEuJGlkYCBvciByZXNvbHZlZCBpZClcbiAgICBnZXRTY2hlbWEoa2V5UmVmKSB7XG4gICAgICAgIGxldCBzY2g7XG4gICAgICAgIHdoaWxlICh0eXBlb2YgKHNjaCA9IGdldFNjaEVudi5jYWxsKHRoaXMsIGtleVJlZikpID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICBrZXlSZWYgPSBzY2g7XG4gICAgICAgIGlmIChzY2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgeyBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICAgICAgY29uc3Qgcm9vdCA9IG5ldyBjb21waWxlXzEuU2NoZW1hRW52KHsgc2NoZW1hOiB7fSwgc2NoZW1hSWQgfSk7XG4gICAgICAgICAgICBzY2ggPSBjb21waWxlXzEucmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIGtleVJlZik7XG4gICAgICAgICAgICBpZiAoIXNjaClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnJlZnNba2V5UmVmXSA9IHNjaDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHNjaC52YWxpZGF0ZSB8fCB0aGlzLl9jb21waWxlU2NoZW1hRW52KHNjaCkpO1xuICAgIH1cbiAgICAvLyBSZW1vdmUgY2FjaGVkIHNjaGVtYShzKS5cbiAgICAvLyBJZiBubyBwYXJhbWV0ZXIgaXMgcGFzc2VkIGFsbCBzY2hlbWFzIGJ1dCBtZXRhLXNjaGVtYXMgYXJlIHJlbW92ZWQuXG4gICAgLy8gSWYgUmVnRXhwIGlzIHBhc3NlZCBhbGwgc2NoZW1hcyB3aXRoIGtleS9pZCBtYXRjaGluZyBwYXR0ZXJuIGJ1dCBtZXRhLXNjaGVtYXMgYXJlIHJlbW92ZWQuXG4gICAgLy8gRXZlbiBpZiBzY2hlbWEgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBzY2hlbWFzIGl0IHN0aWxsIGNhbiBiZSByZW1vdmVkIGFzIG90aGVyIHNjaGVtYXMgaGF2ZSBsb2NhbCByZWZlcmVuY2VzLlxuICAgIHJlbW92ZVNjaGVtYShzY2hlbWFLZXlSZWYpIHtcbiAgICAgICAgaWYgKHNjaGVtYUtleVJlZiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLnNjaGVtYXMsIHNjaGVtYUtleVJlZik7XG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxTY2hlbWFzKHRoaXMucmVmcywgc2NoZW1hS2V5UmVmKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHNjaGVtYUtleVJlZikge1xuICAgICAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFNjaGVtYXModGhpcy5zY2hlbWFzKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxTY2hlbWFzKHRoaXMucmVmcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjaCA9IGdldFNjaEVudi5jYWxsKHRoaXMsIHNjaGVtYUtleVJlZik7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2ggPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUuZGVsZXRlKHNjaC5zY2hlbWEpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNjaGVtYXNbc2NoZW1hS2V5UmVmXTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5yZWZzW3NjaGVtYUtleVJlZl07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZUtleSA9IHNjaGVtYUtleVJlZjtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5kZWxldGUoY2FjaGVLZXkpO1xuICAgICAgICAgICAgICAgIGxldCBpZCA9IHNjaGVtYUtleVJlZlt0aGlzLm9wdHMuc2NoZW1hSWRdO1xuICAgICAgICAgICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgICAgICAgICBpZCA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2NoZW1hc1tpZF07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJlZnNbaWRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2LnJlbW92ZVNjaGVtYTogaW52YWxpZCBwYXJhbWV0ZXJcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gYWRkIFwidm9jYWJ1bGFyeVwiIC0gYSBjb2xsZWN0aW9uIG9mIGtleXdvcmRzXG4gICAgYWRkVm9jYWJ1bGFyeShkZWZpbml0aW9ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGRlZiBvZiBkZWZpbml0aW9ucylcbiAgICAgICAgICAgIHRoaXMuYWRkS2V5d29yZChkZWYpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYWRkS2V5d29yZChrd2RPckRlZiwgZGVmIC8vIGRlcHJlY2F0ZWRcbiAgICApIHtcbiAgICAgICAgbGV0IGtleXdvcmQ7XG4gICAgICAgIGlmICh0eXBlb2Yga3dkT3JEZWYgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAga2V5d29yZCA9IGt3ZE9yRGVmO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBkZWYgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJ0aGVzZSBwYXJhbWV0ZXJzIGFyZSBkZXByZWNhdGVkLCBzZWUgZG9jcyBmb3IgYWRkS2V5d29yZFwiKTtcbiAgICAgICAgICAgICAgICBkZWYua2V5d29yZCA9IGtleXdvcmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGt3ZE9yRGVmID09IFwib2JqZWN0XCIgJiYgZGVmID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRlZiA9IGt3ZE9yRGVmO1xuICAgICAgICAgICAga2V5d29yZCA9IGRlZi5rZXl3b3JkO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5d29yZCkgJiYgIWtleXdvcmQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWRkS2V5d29yZHM6IGtleXdvcmQgbXVzdCBiZSBzdHJpbmcgb3Igbm9uLWVtcHR5IGFycmF5XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBhZGRLZXl3b3JkcyBwYXJhbWV0ZXJzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNoZWNrS2V5d29yZC5jYWxsKHRoaXMsIGtleXdvcmQsIGRlZik7XG4gICAgICAgIGlmICghZGVmKSB7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmVhY2hJdGVtKShrZXl3b3JkLCAoa3dkKSA9PiBhZGRSdWxlLmNhbGwodGhpcywga3dkKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBrZXl3b3JkTWV0YXNjaGVtYS5jYWxsKHRoaXMsIGRlZik7XG4gICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSB7XG4gICAgICAgICAgICAuLi5kZWYsXG4gICAgICAgICAgICB0eXBlOiAoMCwgZGF0YVR5cGVfMS5nZXRKU09OVHlwZXMpKGRlZi50eXBlKSxcbiAgICAgICAgICAgIHNjaGVtYVR5cGU6ICgwLCBkYXRhVHlwZV8xLmdldEpTT05UeXBlcykoZGVmLnNjaGVtYVR5cGUpLFxuICAgICAgICB9O1xuICAgICAgICAoMCwgdXRpbF8xLmVhY2hJdGVtKShrZXl3b3JkLCBkZWZpbml0aW9uLnR5cGUubGVuZ3RoID09PSAwXG4gICAgICAgICAgICA/IChrKSA9PiBhZGRSdWxlLmNhbGwodGhpcywgaywgZGVmaW5pdGlvbilcbiAgICAgICAgICAgIDogKGspID0+IGRlZmluaXRpb24udHlwZS5mb3JFYWNoKCh0KSA9PiBhZGRSdWxlLmNhbGwodGhpcywgaywgZGVmaW5pdGlvbiwgdCkpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldEtleXdvcmQoa2V5d29yZCkge1xuICAgICAgICBjb25zdCBydWxlID0gdGhpcy5SVUxFUy5hbGxba2V5d29yZF07XG4gICAgICAgIHJldHVybiB0eXBlb2YgcnVsZSA9PSBcIm9iamVjdFwiID8gcnVsZS5kZWZpbml0aW9uIDogISFydWxlO1xuICAgIH1cbiAgICAvLyBSZW1vdmUga2V5d29yZFxuICAgIHJlbW92ZUtleXdvcmQoa2V5d29yZCkge1xuICAgICAgICAvLyBUT0RPIHJldHVybiB0eXBlIHNob3VsZCBiZSBBanZcbiAgICAgICAgY29uc3QgeyBSVUxFUyB9ID0gdGhpcztcbiAgICAgICAgZGVsZXRlIFJVTEVTLmtleXdvcmRzW2tleXdvcmRdO1xuICAgICAgICBkZWxldGUgUlVMRVMuYWxsW2tleXdvcmRdO1xuICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIFJVTEVTLnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBpID0gZ3JvdXAucnVsZXMuZmluZEluZGV4KChydWxlKSA9PiBydWxlLmtleXdvcmQgPT09IGtleXdvcmQpO1xuICAgICAgICAgICAgaWYgKGkgPj0gMClcbiAgICAgICAgICAgICAgICBncm91cC5ydWxlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIEFkZCBmb3JtYXRcbiAgICBhZGRGb3JtYXQobmFtZSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZm9ybWF0ID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICBmb3JtYXQgPSBuZXcgUmVnRXhwKGZvcm1hdCk7XG4gICAgICAgIHRoaXMuZm9ybWF0c1tuYW1lXSA9IGZvcm1hdDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGVycm9yc1RleHQoZXJyb3JzID0gdGhpcy5lcnJvcnMsIC8vIG9wdGlvbmFsIGFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3JzXG4gICAgeyBzZXBhcmF0b3IgPSBcIiwgXCIsIGRhdGFWYXIgPSBcImRhdGFcIiB9ID0ge30gLy8gb3B0aW9uYWwgb3B0aW9ucyB3aXRoIHByb3BlcnRpZXMgYHNlcGFyYXRvcmAgYW5kIGBkYXRhVmFyYFxuICAgICkge1xuICAgICAgICBpZiAoIWVycm9ycyB8fCBlcnJvcnMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIFwiTm8gZXJyb3JzXCI7XG4gICAgICAgIHJldHVybiBlcnJvcnNcbiAgICAgICAgICAgIC5tYXAoKGUpID0+IGAke2RhdGFWYXJ9JHtlLmluc3RhbmNlUGF0aH0gJHtlLm1lc3NhZ2V9YClcbiAgICAgICAgICAgIC5yZWR1Y2UoKHRleHQsIG1zZykgPT4gdGV4dCArIHNlcGFyYXRvciArIG1zZyk7XG4gICAgfVxuICAgICRkYXRhTWV0YVNjaGVtYShtZXRhU2NoZW1hLCBrZXl3b3Jkc0pzb25Qb2ludGVycykge1xuICAgICAgICBjb25zdCBydWxlcyA9IHRoaXMuUlVMRVMuYWxsO1xuICAgICAgICBtZXRhU2NoZW1hID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShtZXRhU2NoZW1hKSk7XG4gICAgICAgIGZvciAoY29uc3QganNvblBvaW50ZXIgb2Yga2V5d29yZHNKc29uUG9pbnRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlZ21lbnRzID0ganNvblBvaW50ZXIuc3BsaXQoXCIvXCIpLnNsaWNlKDEpOyAvLyBmaXJzdCBzZWdtZW50IGlzIGFuIGVtcHR5IHN0cmluZ1xuICAgICAgICAgICAgbGV0IGtleXdvcmRzID0gbWV0YVNjaGVtYTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2VnIG9mIHNlZ21lbnRzKVxuICAgICAgICAgICAgICAgIGtleXdvcmRzID0ga2V5d29yZHNbc2VnXTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnVsZSA9IHJ1bGVzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBydWxlICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgJGRhdGEgfSA9IHJ1bGUuZGVmaW5pdGlvbjtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWEgPSBrZXl3b3Jkc1trZXldO1xuICAgICAgICAgICAgICAgIGlmICgkZGF0YSAmJiBzY2hlbWEpXG4gICAgICAgICAgICAgICAgICAgIGtleXdvcmRzW2tleV0gPSBzY2hlbWFPckRhdGEoc2NoZW1hKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWV0YVNjaGVtYTtcbiAgICB9XG4gICAgX3JlbW92ZUFsbFNjaGVtYXMoc2NoZW1hcywgcmVnZXgpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXlSZWYgaW4gc2NoZW1hcykge1xuICAgICAgICAgICAgY29uc3Qgc2NoID0gc2NoZW1hc1trZXlSZWZdO1xuICAgICAgICAgICAgaWYgKCFyZWdleCB8fCByZWdleC50ZXN0KGtleVJlZikpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaCA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzY2hlbWFzW2tleVJlZl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaCAmJiAhc2NoLm1ldGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUuZGVsZXRlKHNjaC5zY2hlbWEpO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2NoZW1hc1trZXlSZWZdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBfYWRkU2NoZW1hKHNjaGVtYSwgbWV0YSwgYmFzZUlkLCB2YWxpZGF0ZVNjaGVtYSA9IHRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYSwgYWRkU2NoZW1hID0gdGhpcy5vcHRzLmFkZFVzZWRTY2hlbWEpIHtcbiAgICAgICAgbGV0IGlkO1xuICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGlkID0gc2NoZW1hW3NjaGVtYUlkXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdHMuanRkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNjaGVtYSBtdXN0IGJlIG9iamVjdFwiKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBzY2hlbWEgIT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2NoZW1hIG11c3QgYmUgb2JqZWN0IG9yIGJvb2xlYW5cIik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNjaCA9IHRoaXMuX2NhY2hlLmdldChzY2hlbWEpO1xuICAgICAgICBpZiAoc2NoICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gc2NoO1xuICAgICAgICBiYXNlSWQgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKShpZCB8fCBiYXNlSWQpO1xuICAgICAgICBjb25zdCBsb2NhbFJlZnMgPSByZXNvbHZlXzEuZ2V0U2NoZW1hUmVmcy5jYWxsKHRoaXMsIHNjaGVtYSwgYmFzZUlkKTtcbiAgICAgICAgc2NoID0gbmV3IGNvbXBpbGVfMS5TY2hlbWFFbnYoeyBzY2hlbWEsIHNjaGVtYUlkLCBtZXRhLCBiYXNlSWQsIGxvY2FsUmVmcyB9KTtcbiAgICAgICAgdGhpcy5fY2FjaGUuc2V0KHNjaC5zY2hlbWEsIHNjaCk7XG4gICAgICAgIGlmIChhZGRTY2hlbWEgJiYgIWJhc2VJZC5zdGFydHNXaXRoKFwiI1wiKSkge1xuICAgICAgICAgICAgLy8gVE9ETyBhdG0gaXQgaXMgYWxsb3dlZCB0byBvdmVyd3JpdGUgc2NoZW1hcyB3aXRob3V0IGlkIChpbnN0ZWFkIG9mIG5vdCBhZGRpbmcgdGhlbSlcbiAgICAgICAgICAgIGlmIChiYXNlSWQpXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tVbmlxdWUoYmFzZUlkKTtcbiAgICAgICAgICAgIHRoaXMucmVmc1tiYXNlSWRdID0gc2NoO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWxpZGF0ZVNjaGVtYSlcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVTY2hlbWEoc2NoZW1hLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHNjaDtcbiAgICB9XG4gICAgX2NoZWNrVW5pcXVlKGlkKSB7XG4gICAgICAgIGlmICh0aGlzLnNjaGVtYXNbaWRdIHx8IHRoaXMucmVmc1tpZF0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc2NoZW1hIHdpdGgga2V5IG9yIGlkIFwiJHtpZH1cIiBhbHJlYWR5IGV4aXN0c2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9jb21waWxlU2NoZW1hRW52KHNjaCkge1xuICAgICAgICBpZiAoc2NoLm1ldGEpXG4gICAgICAgICAgICB0aGlzLl9jb21waWxlTWV0YVNjaGVtYShzY2gpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBjb21waWxlXzEuY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHNjaCk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIXNjaC52YWxpZGF0ZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgcmV0dXJuIHNjaC52YWxpZGF0ZTtcbiAgICB9XG4gICAgX2NvbXBpbGVNZXRhU2NoZW1hKHNjaCkge1xuICAgICAgICBjb25zdCBjdXJyZW50T3B0cyA9IHRoaXMub3B0cztcbiAgICAgICAgdGhpcy5vcHRzID0gdGhpcy5fbWV0YU9wdHM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb21waWxlXzEuY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHNjaCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLm9wdHMgPSBjdXJyZW50T3B0cztcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IEFqdjtcbkFqdi5WYWxpZGF0aW9uRXJyb3IgPSB2YWxpZGF0aW9uX2Vycm9yXzEuZGVmYXVsdDtcbkFqdi5NaXNzaW5nUmVmRXJyb3IgPSByZWZfZXJyb3JfMS5kZWZhdWx0O1xuZnVuY3Rpb24gY2hlY2tPcHRpb25zKGNoZWNrT3B0cywgb3B0aW9ucywgbXNnLCBsb2cgPSBcImVycm9yXCIpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjaGVja09wdHMpIHtcbiAgICAgICAgY29uc3Qgb3B0ID0ga2V5O1xuICAgICAgICBpZiAob3B0IGluIG9wdGlvbnMpXG4gICAgICAgICAgICB0aGlzLmxvZ2dlcltsb2ddKGAke21zZ306IG9wdGlvbiAke2tleX0uICR7Y2hlY2tPcHRzW29wdF19YCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0U2NoRW52KGtleVJlZikge1xuICAgIGtleVJlZiA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKGtleVJlZik7IC8vIFRPRE8gdGVzdHMgZmFpbCB3aXRob3V0IHRoaXMgbGluZVxuICAgIHJldHVybiB0aGlzLnNjaGVtYXNba2V5UmVmXSB8fCB0aGlzLnJlZnNba2V5UmVmXTtcbn1cbmZ1bmN0aW9uIGFkZEluaXRpYWxTY2hlbWFzKCkge1xuICAgIGNvbnN0IG9wdHNTY2hlbWFzID0gdGhpcy5vcHRzLnNjaGVtYXM7XG4gICAgaWYgKCFvcHRzU2NoZW1hcylcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdHNTY2hlbWFzKSlcbiAgICAgICAgdGhpcy5hZGRTY2hlbWEob3B0c1NjaGVtYXMpO1xuICAgIGVsc2VcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb3B0c1NjaGVtYXMpXG4gICAgICAgICAgICB0aGlzLmFkZFNjaGVtYShvcHRzU2NoZW1hc1trZXldLCBrZXkpO1xufVxuZnVuY3Rpb24gYWRkSW5pdGlhbEZvcm1hdHMoKSB7XG4gICAgZm9yIChjb25zdCBuYW1lIGluIHRoaXMub3B0cy5mb3JtYXRzKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMub3B0cy5mb3JtYXRzW25hbWVdO1xuICAgICAgICBpZiAoZm9ybWF0KVxuICAgICAgICAgICAgdGhpcy5hZGRGb3JtYXQobmFtZSwgZm9ybWF0KTtcbiAgICB9XG59XG5mdW5jdGlvbiBhZGRJbml0aWFsS2V5d29yZHMoZGVmcykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRlZnMpKSB7XG4gICAgICAgIHRoaXMuYWRkVm9jYWJ1bGFyeShkZWZzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvZ2dlci53YXJuKFwia2V5d29yZHMgb3B0aW9uIGFzIG1hcCBpcyBkZXByZWNhdGVkLCBwYXNzIGFycmF5XCIpO1xuICAgIGZvciAoY29uc3Qga2V5d29yZCBpbiBkZWZzKSB7XG4gICAgICAgIGNvbnN0IGRlZiA9IGRlZnNba2V5d29yZF07XG4gICAgICAgIGlmICghZGVmLmtleXdvcmQpXG4gICAgICAgICAgICBkZWYua2V5d29yZCA9IGtleXdvcmQ7XG4gICAgICAgIHRoaXMuYWRkS2V5d29yZChkZWYpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldE1ldGFTY2hlbWFPcHRpb25zKCkge1xuICAgIGNvbnN0IG1ldGFPcHRzID0geyAuLi50aGlzLm9wdHMgfTtcbiAgICBmb3IgKGNvbnN0IG9wdCBvZiBNRVRBX0lHTk9SRV9PUFRJT05TKVxuICAgICAgICBkZWxldGUgbWV0YU9wdHNbb3B0XTtcbiAgICByZXR1cm4gbWV0YU9wdHM7XG59XG5jb25zdCBub0xvZ3MgPSB7IGxvZygpIHsgfSwgd2FybigpIHsgfSwgZXJyb3IoKSB7IH0gfTtcbmZ1bmN0aW9uIGdldExvZ2dlcihsb2dnZXIpIHtcbiAgICBpZiAobG9nZ2VyID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIG5vTG9ncztcbiAgICBpZiAobG9nZ2VyID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBjb25zb2xlO1xuICAgIGlmIChsb2dnZXIubG9nICYmIGxvZ2dlci53YXJuICYmIGxvZ2dlci5lcnJvcilcbiAgICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJsb2dnZXIgbXVzdCBpbXBsZW1lbnQgbG9nLCB3YXJuIGFuZCBlcnJvciBtZXRob2RzXCIpO1xufVxuY29uc3QgS0VZV09SRF9OQU1FID0gL15bYS16XyRdW2EtejAtOV8kOi1dKiQvaTtcbmZ1bmN0aW9uIGNoZWNrS2V5d29yZChrZXl3b3JkLCBkZWYpIHtcbiAgICBjb25zdCB7IFJVTEVTIH0gPSB0aGlzO1xuICAgICgwLCB1dGlsXzEuZWFjaEl0ZW0pKGtleXdvcmQsIChrd2QpID0+IHtcbiAgICAgICAgaWYgKFJVTEVTLmtleXdvcmRzW2t3ZF0pXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEtleXdvcmQgJHtrd2R9IGlzIGFscmVhZHkgZGVmaW5lZGApO1xuICAgICAgICBpZiAoIUtFWVdPUkRfTkFNRS50ZXN0KGt3ZCkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEtleXdvcmQgJHtrd2R9IGhhcyBpbnZhbGlkIG5hbWVgKTtcbiAgICB9KTtcbiAgICBpZiAoIWRlZilcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChkZWYuJGRhdGEgJiYgIShcImNvZGVcIiBpbiBkZWYgfHwgXCJ2YWxpZGF0ZVwiIGluIGRlZikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCckZGF0YSBrZXl3b3JkIG11c3QgaGF2ZSBcImNvZGVcIiBvciBcInZhbGlkYXRlXCIgZnVuY3Rpb24nKTtcbiAgICB9XG59XG5mdW5jdGlvbiBhZGRSdWxlKGtleXdvcmQsIGRlZmluaXRpb24sIGRhdGFUeXBlKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHBvc3QgPSBkZWZpbml0aW9uID09PSBudWxsIHx8IGRlZmluaXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlZmluaXRpb24ucG9zdDtcbiAgICBpZiAoZGF0YVR5cGUgJiYgcG9zdClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdrZXl3b3JkIHdpdGggXCJwb3N0XCIgZmxhZyBjYW5ub3QgaGF2ZSBcInR5cGVcIicpO1xuICAgIGNvbnN0IHsgUlVMRVMgfSA9IHRoaXM7XG4gICAgbGV0IHJ1bGVHcm91cCA9IHBvc3QgPyBSVUxFUy5wb3N0IDogUlVMRVMucnVsZXMuZmluZCgoeyB0eXBlOiB0IH0pID0+IHQgPT09IGRhdGFUeXBlKTtcbiAgICBpZiAoIXJ1bGVHcm91cCkge1xuICAgICAgICBydWxlR3JvdXAgPSB7IHR5cGU6IGRhdGFUeXBlLCBydWxlczogW10gfTtcbiAgICAgICAgUlVMRVMucnVsZXMucHVzaChydWxlR3JvdXApO1xuICAgIH1cbiAgICBSVUxFUy5rZXl3b3Jkc1trZXl3b3JkXSA9IHRydWU7XG4gICAgaWYgKCFkZWZpbml0aW9uKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgcnVsZSA9IHtcbiAgICAgICAga2V5d29yZCxcbiAgICAgICAgZGVmaW5pdGlvbjoge1xuICAgICAgICAgICAgLi4uZGVmaW5pdGlvbixcbiAgICAgICAgICAgIHR5cGU6ICgwLCBkYXRhVHlwZV8xLmdldEpTT05UeXBlcykoZGVmaW5pdGlvbi50eXBlKSxcbiAgICAgICAgICAgIHNjaGVtYVR5cGU6ICgwLCBkYXRhVHlwZV8xLmdldEpTT05UeXBlcykoZGVmaW5pdGlvbi5zY2hlbWFUeXBlKSxcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGlmIChkZWZpbml0aW9uLmJlZm9yZSlcbiAgICAgICAgYWRkQmVmb3JlUnVsZS5jYWxsKHRoaXMsIHJ1bGVHcm91cCwgcnVsZSwgZGVmaW5pdGlvbi5iZWZvcmUpO1xuICAgIGVsc2VcbiAgICAgICAgcnVsZUdyb3VwLnJ1bGVzLnB1c2gocnVsZSk7XG4gICAgUlVMRVMuYWxsW2tleXdvcmRdID0gcnVsZTtcbiAgICAoX2EgPSBkZWZpbml0aW9uLmltcGxlbWVudHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb3JFYWNoKChrd2QpID0+IHRoaXMuYWRkS2V5d29yZChrd2QpKTtcbn1cbmZ1bmN0aW9uIGFkZEJlZm9yZVJ1bGUocnVsZUdyb3VwLCBydWxlLCBiZWZvcmUpIHtcbiAgICBjb25zdCBpID0gcnVsZUdyb3VwLnJ1bGVzLmZpbmRJbmRleCgoX3J1bGUpID0+IF9ydWxlLmtleXdvcmQgPT09IGJlZm9yZSk7XG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgICBydWxlR3JvdXAucnVsZXMuc3BsaWNlKGksIDAsIHJ1bGUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcnVsZUdyb3VwLnJ1bGVzLnB1c2gocnVsZSk7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYHJ1bGUgJHtiZWZvcmV9IGlzIG5vdCBkZWZpbmVkYCk7XG4gICAgfVxufVxuZnVuY3Rpb24ga2V5d29yZE1ldGFzY2hlbWEoZGVmKSB7XG4gICAgbGV0IHsgbWV0YVNjaGVtYSB9ID0gZGVmO1xuICAgIGlmIChtZXRhU2NoZW1hID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoZGVmLiRkYXRhICYmIHRoaXMub3B0cy4kZGF0YSlcbiAgICAgICAgbWV0YVNjaGVtYSA9IHNjaGVtYU9yRGF0YShtZXRhU2NoZW1hKTtcbiAgICBkZWYudmFsaWRhdGVTY2hlbWEgPSB0aGlzLmNvbXBpbGUobWV0YVNjaGVtYSwgdHJ1ZSk7XG59XG5jb25zdCAkZGF0YVJlZiA9IHtcbiAgICAkcmVmOiBcImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9hanYtdmFsaWRhdG9yL2Fqdi9tYXN0ZXIvbGliL3JlZnMvZGF0YS5qc29uI1wiLFxufTtcbmZ1bmN0aW9uIHNjaGVtYU9yRGF0YShzY2hlbWEpIHtcbiAgICByZXR1cm4geyBhbnlPZjogW3NjaGVtYSwgJGRhdGFSZWZdIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb3JlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJpZFwiLFxuICAgIGNvZGUoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTk9UIFNVUFBPUlRFRDoga2V5d29yZCBcImlkXCIsIHVzZSBcIiRpZFwiIGZvciBzY2hlbWEgSUQnKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlkLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNhbGxSZWYgPSBleHBvcnRzLmdldFZhbGlkYXRlID0gdm9pZCAwO1xuY29uc3QgcmVmX2Vycm9yXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9yZWZfZXJyb3JcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvbmFtZXNcIik7XG5jb25zdCBjb21waWxlXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZVwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCIkcmVmXCIsXG4gICAgc2NoZW1hVHlwZTogXCJzdHJpbmdcIixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hOiAkcmVmLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IGJhc2VJZCwgc2NoZW1hRW52OiBlbnYsIHZhbGlkYXRlTmFtZSwgb3B0cywgc2VsZiB9ID0gaXQ7XG4gICAgICAgIGNvbnN0IHsgcm9vdCB9ID0gZW52O1xuICAgICAgICBpZiAoKCRyZWYgPT09IFwiI1wiIHx8ICRyZWYgPT09IFwiIy9cIikgJiYgYmFzZUlkID09PSByb290LmJhc2VJZClcbiAgICAgICAgICAgIHJldHVybiBjYWxsUm9vdFJlZigpO1xuICAgICAgICBjb25zdCBzY2hPckVudiA9IGNvbXBpbGVfMS5yZXNvbHZlUmVmLmNhbGwoc2VsZiwgcm9vdCwgYmFzZUlkLCAkcmVmKTtcbiAgICAgICAgaWYgKHNjaE9yRW52ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgcmVmX2Vycm9yXzEuZGVmYXVsdChpdC5vcHRzLnVyaVJlc29sdmVyLCBiYXNlSWQsICRyZWYpO1xuICAgICAgICBpZiAoc2NoT3JFbnYgaW5zdGFuY2VvZiBjb21waWxlXzEuU2NoZW1hRW52KVxuICAgICAgICAgICAgcmV0dXJuIGNhbGxWYWxpZGF0ZShzY2hPckVudik7XG4gICAgICAgIHJldHVybiBpbmxpbmVSZWZTY2hlbWEoc2NoT3JFbnYpO1xuICAgICAgICBmdW5jdGlvbiBjYWxsUm9vdFJlZigpIHtcbiAgICAgICAgICAgIGlmIChlbnYgPT09IHJvb3QpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxSZWYoY3h0LCB2YWxpZGF0ZU5hbWUsIGVudiwgZW52LiRhc3luYyk7XG4gICAgICAgICAgICBjb25zdCByb290TmFtZSA9IGdlbi5zY29wZVZhbHVlKFwicm9vdFwiLCB7IHJlZjogcm9vdCB9KTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsUmVmKGN4dCwgKDAsIGNvZGVnZW5fMS5fKSBgJHtyb290TmFtZX0udmFsaWRhdGVgLCByb290LCByb290LiRhc3luYyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2FsbFZhbGlkYXRlKHNjaCkge1xuICAgICAgICAgICAgY29uc3QgdiA9IGdldFZhbGlkYXRlKGN4dCwgc2NoKTtcbiAgICAgICAgICAgIGNhbGxSZWYoY3h0LCB2LCBzY2gsIHNjaC4kYXN5bmMpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlubGluZVJlZlNjaGVtYShzY2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjaE5hbWUgPSBnZW4uc2NvcGVWYWx1ZShcInNjaGVtYVwiLCBvcHRzLmNvZGUuc291cmNlID09PSB0cnVlID8geyByZWY6IHNjaCwgY29kZTogKDAsIGNvZGVnZW5fMS5zdHJpbmdpZnkpKHNjaCkgfSA6IHsgcmVmOiBzY2ggfSk7XG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaCxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZXM6IFtdLFxuICAgICAgICAgICAgICAgIHNjaGVtYVBhdGg6IGNvZGVnZW5fMS5uaWwsXG4gICAgICAgICAgICAgICAgdG9wU2NoZW1hUmVmOiBzY2hOYW1lLFxuICAgICAgICAgICAgICAgIGVyclNjaGVtYVBhdGg6ICRyZWYsXG4gICAgICAgICAgICB9LCB2YWxpZCk7XG4gICAgICAgICAgICBjeHQubWVyZ2VFdmFsdWF0ZWQoc2NoQ3h0KTtcbiAgICAgICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmZ1bmN0aW9uIGdldFZhbGlkYXRlKGN4dCwgc2NoKSB7XG4gICAgY29uc3QgeyBnZW4gfSA9IGN4dDtcbiAgICByZXR1cm4gc2NoLnZhbGlkYXRlXG4gICAgICAgID8gZ2VuLnNjb3BlVmFsdWUoXCJ2YWxpZGF0ZVwiLCB7IHJlZjogc2NoLnZhbGlkYXRlIH0pXG4gICAgICAgIDogKDAsIGNvZGVnZW5fMS5fKSBgJHtnZW4uc2NvcGVWYWx1ZShcIndyYXBwZXJcIiwgeyByZWY6IHNjaCB9KX0udmFsaWRhdGVgO1xufVxuZXhwb3J0cy5nZXRWYWxpZGF0ZSA9IGdldFZhbGlkYXRlO1xuZnVuY3Rpb24gY2FsbFJlZihjeHQsIHYsIHNjaCwgJGFzeW5jKSB7XG4gICAgY29uc3QgeyBnZW4sIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgeyBhbGxFcnJvcnMsIHNjaGVtYUVudjogZW52LCBvcHRzIH0gPSBpdDtcbiAgICBjb25zdCBwYXNzQ3h0ID0gb3B0cy5wYXNzQ29udGV4dCA/IG5hbWVzXzEuZGVmYXVsdC50aGlzIDogY29kZWdlbl8xLm5pbDtcbiAgICBpZiAoJGFzeW5jKVxuICAgICAgICBjYWxsQXN5bmNSZWYoKTtcbiAgICBlbHNlXG4gICAgICAgIGNhbGxTeW5jUmVmKCk7XG4gICAgZnVuY3Rpb24gY2FsbEFzeW5jUmVmKCkge1xuICAgICAgICBpZiAoIWVudi4kYXN5bmMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhc3luYyBzY2hlbWEgcmVmZXJlbmNlZCBieSBzeW5jIHNjaGVtYVwiKTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIik7XG4gICAgICAgIGdlbi50cnkoKCkgPT4ge1xuICAgICAgICAgICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgYXdhaXQgJHsoMCwgY29kZV8xLmNhbGxWYWxpZGF0ZUNvZGUpKGN4dCwgdiwgcGFzc0N4dCl9YCk7XG4gICAgICAgICAgICBhZGRFdmFsdWF0ZWRGcm9tKHYpOyAvLyBUT0RPIHdpbGwgbm90IHdvcmsgd2l0aCBhc3luYywgaXQgaGFzIHRvIGJlIHJldHVybmVkIHdpdGggdGhlIHJlc3VsdFxuICAgICAgICAgICAgaWYgKCFhbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSk7XG4gICAgICAgIH0sIChlKSA9PiB7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgISgke2V9IGluc3RhbmNlb2YgJHtpdC5WYWxpZGF0aW9uRXJyb3J9KWAsICgpID0+IGdlbi50aHJvdyhlKSk7XG4gICAgICAgICAgICBhZGRFcnJvcnNGcm9tKGUpO1xuICAgICAgICAgICAgaWYgKCFhbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FsbFN5bmNSZWYoKSB7XG4gICAgICAgIGN4dC5yZXN1bHQoKDAsIGNvZGVfMS5jYWxsVmFsaWRhdGVDb2RlKShjeHQsIHYsIHBhc3NDeHQpLCAoKSA9PiBhZGRFdmFsdWF0ZWRGcm9tKHYpLCAoKSA9PiBhZGRFcnJvcnNGcm9tKHYpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkRXJyb3JzRnJvbShzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgZXJycyA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7c291cmNlfS5lcnJvcnNgO1xuICAgICAgICBnZW4uYXNzaWduKG5hbWVzXzEuZGVmYXVsdC52RXJyb3JzLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSA9PT0gbnVsbCA/ICR7ZXJyc30gOiAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfS5jb25jYXQoJHtlcnJzfSlgKTsgLy8gVE9ETyB0YWdnZWRcbiAgICAgICAgZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQuZXJyb3JzLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfS5sZW5ndGhgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkRXZhbHVhdGVkRnJvbShzb3VyY2UpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIWl0Lm9wdHMudW5ldmFsdWF0ZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHNjaEV2YWx1YXRlZCA9IChfYSA9IHNjaCA9PT0gbnVsbCB8fCBzY2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaC52YWxpZGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmV2YWx1YXRlZDtcbiAgICAgICAgLy8gVE9ETyByZWZhY3RvclxuICAgICAgICBpZiAoaXQucHJvcHMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hFdmFsdWF0ZWQgJiYgIXNjaEV2YWx1YXRlZC5keW5hbWljUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NoRXZhbHVhdGVkLnByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaXQucHJvcHMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQucHJvcHMoZ2VuLCBzY2hFdmFsdWF0ZWQucHJvcHMsIGl0LnByb3BzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wcyA9IGdlbi52YXIoXCJwcm9wc1wiLCAoMCwgY29kZWdlbl8xLl8pIGAke3NvdXJjZX0uZXZhbHVhdGVkLnByb3BzYCk7XG4gICAgICAgICAgICAgICAgaXQucHJvcHMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQucHJvcHMoZ2VuLCBwcm9wcywgaXQucHJvcHMsIGNvZGVnZW5fMS5OYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXQuaXRlbXMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hFdmFsdWF0ZWQgJiYgIXNjaEV2YWx1YXRlZC5keW5hbWljSXRlbXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NoRXZhbHVhdGVkLml0ZW1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaXQuaXRlbXMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQuaXRlbXMoZ2VuLCBzY2hFdmFsdWF0ZWQuaXRlbXMsIGl0Lml0ZW1zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IGdlbi52YXIoXCJpdGVtc1wiLCAoMCwgY29kZWdlbl8xLl8pIGAke3NvdXJjZX0uZXZhbHVhdGVkLml0ZW1zYCk7XG4gICAgICAgICAgICAgICAgaXQuaXRlbXMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQuaXRlbXMoZ2VuLCBpdGVtcywgaXQuaXRlbXMsIGNvZGVnZW5fMS5OYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuY2FsbFJlZiA9IGNhbGxSZWY7XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGlkXzEgPSByZXF1aXJlKFwiLi9pZFwiKTtcbmNvbnN0IHJlZl8xID0gcmVxdWlyZShcIi4vcmVmXCIpO1xuY29uc3QgY29yZSA9IFtcbiAgICBcIiRzY2hlbWFcIixcbiAgICBcIiRpZFwiLFxuICAgIFwiJGRlZnNcIixcbiAgICBcIiR2b2NhYnVsYXJ5XCIsXG4gICAgeyBrZXl3b3JkOiBcIiRjb21tZW50XCIgfSxcbiAgICBcImRlZmluaXRpb25zXCIsXG4gICAgaWRfMS5kZWZhdWx0LFxuICAgIHJlZl8xLmRlZmF1bHQsXG5dO1xuZXhwb3J0cy5kZWZhdWx0ID0gY29yZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3Qgb3BzID0gY29kZWdlbl8xLm9wZXJhdG9ycztcbmNvbnN0IEtXRHMgPSB7XG4gICAgbWF4aW11bTogeyBva1N0cjogXCI8PVwiLCBvazogb3BzLkxURSwgZmFpbDogb3BzLkdUIH0sXG4gICAgbWluaW11bTogeyBva1N0cjogXCI+PVwiLCBvazogb3BzLkdURSwgZmFpbDogb3BzLkxUIH0sXG4gICAgZXhjbHVzaXZlTWF4aW11bTogeyBva1N0cjogXCI8XCIsIG9rOiBvcHMuTFQsIGZhaWw6IG9wcy5HVEUgfSxcbiAgICBleGNsdXNpdmVNaW5pbXVtOiB7IG9rU3RyOiBcIj5cIiwgb2s6IG9wcy5HVCwgZmFpbDogb3BzLkxURSB9LFxufTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IGtleXdvcmQsIHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGJlICR7S1dEc1trZXl3b3JkXS5va1N0cn0gJHtzY2hlbWFDb2RlfWAsXG4gICAgcGFyYW1zOiAoeyBrZXl3b3JkLCBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtjb21wYXJpc29uOiAke0tXRHNba2V5d29yZF0ub2tTdHJ9LCBsaW1pdDogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBPYmplY3Qua2V5cyhLV0RzKSxcbiAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBrZXl3b3JkLCBkYXRhLCBzY2hlbWFDb2RlIH0gPSBjeHQ7XG4gICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSAke0tXRHNba2V5d29yZF0uZmFpbH0gJHtzY2hlbWFDb2RlfSB8fCBpc05hTigke2RhdGF9KWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGltaXROdW1iZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBiZSBtdWx0aXBsZSBvZiAke3NjaGVtYUNvZGV9YCxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge211bHRpcGxlT2Y6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJtdWx0aXBsZU9mXCIsXG4gICAgdHlwZTogXCJudW1iZXJcIixcbiAgICBzY2hlbWFUeXBlOiBcIm51bWJlclwiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICAvLyBjb25zdCBiZHQgPSBiYWQkRGF0YVR5cGUoc2NoZW1hQ29kZSwgPHN0cmluZz5kZWYuc2NoZW1hVHlwZSwgJGRhdGEpXG4gICAgICAgIGNvbnN0IHByZWMgPSBpdC5vcHRzLm11bHRpcGxlT2ZQcmVjaXNpb247XG4gICAgICAgIGNvbnN0IHJlcyA9IGdlbi5sZXQoXCJyZXNcIik7XG4gICAgICAgIGNvbnN0IGludmFsaWQgPSBwcmVjXG4gICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYE1hdGguYWJzKE1hdGgucm91bmQoJHtyZXN9KSAtICR7cmVzfSkgPiAxZS0ke3ByZWN9YFxuICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGAke3Jlc30gIT09IHBhcnNlSW50KCR7cmVzfSlgO1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYCgke3NjaGVtYUNvZGV9ID09PSAwIHx8ICgke3Jlc30gPSAke2RhdGF9LyR7c2NoZW1hQ29kZX0sICR7aW52YWxpZH0pKWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bXVsdGlwbGVPZi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmdcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9wdW55Y29kZS5qcyAtIHB1bnljb2RlLnVjczIuZGVjb2RlXG5mdW5jdGlvbiB1Y3MybGVuZ3RoKHN0cikge1xuICAgIGNvbnN0IGxlbiA9IHN0ci5sZW5ndGg7XG4gICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgbGV0IHBvcyA9IDA7XG4gICAgbGV0IHZhbHVlO1xuICAgIHdoaWxlIChwb3MgPCBsZW4pIHtcbiAgICAgICAgbGVuZ3RoKys7XG4gICAgICAgIHZhbHVlID0gc3RyLmNoYXJDb2RlQXQocG9zKyspO1xuICAgICAgICBpZiAodmFsdWUgPj0gMHhkODAwICYmIHZhbHVlIDw9IDB4ZGJmZiAmJiBwb3MgPCBsZW4pIHtcbiAgICAgICAgICAgIC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuICAgICAgICAgICAgdmFsdWUgPSBzdHIuY2hhckNvZGVBdChwb3MpO1xuICAgICAgICAgICAgaWYgKCh2YWx1ZSAmIDB4ZmMwMCkgPT09IDB4ZGMwMClcbiAgICAgICAgICAgICAgICBwb3MrKzsgLy8gbG93IHN1cnJvZ2F0ZVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsZW5ndGg7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB1Y3MybGVuZ3RoO1xudWNzMmxlbmd0aC5jb2RlID0gJ3JlcXVpcmUoXCJhanYvZGlzdC9ydW50aW1lL3VjczJsZW5ndGhcIikuZGVmYXVsdCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11Y3MybGVuZ3RoLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IHVjczJsZW5ndGhfMSA9IHJlcXVpcmUoXCIuLi8uLi9ydW50aW1lL3VjczJsZW5ndGhcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSB7XG4gICAgICAgIGNvbnN0IGNvbXAgPSBrZXl3b3JkID09PSBcIm1heExlbmd0aFwiID8gXCJtb3JlXCIgOiBcImZld2VyXCI7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgJHtjb21wfSB0aGFuICR7c2NoZW1hQ29kZX0gY2hhcmFjdGVyc2A7XG4gICAgfSxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFtcIm1heExlbmd0aFwiLCBcIm1pbkxlbmd0aFwiXSxcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBrZXl3b3JkLCBkYXRhLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCBvcCA9IGtleXdvcmQgPT09IFwibWF4TGVuZ3RoXCIgPyBjb2RlZ2VuXzEub3BlcmF0b3JzLkdUIDogY29kZWdlbl8xLm9wZXJhdG9ycy5MVDtcbiAgICAgICAgY29uc3QgbGVuID0gaXQub3B0cy51bmljb2RlID09PSBmYWxzZSA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoYCA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7KDAsIHV0aWxfMS51c2VGdW5jKShjeHQuZ2VuLCB1Y3MybGVuZ3RoXzEuZGVmYXVsdCl9KCR7ZGF0YX0pYDtcbiAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gJHtvcH0gJHtzY2hlbWFDb2RlfWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGltaXRMZW5ndGguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IG1hdGNoIHBhdHRlcm4gXCIke3NjaGVtYUNvZGV9XCJgLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7cGF0dGVybjogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInBhdHRlcm5cIixcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIHNjaGVtYVR5cGU6IFwic3RyaW5nXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBkYXRhLCAkZGF0YSwgc2NoZW1hLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICAvLyBUT0RPIHJlZ2V4cCBzaG91bGQgYmUgd3JhcHBlZCBpbiB0cnkvY2F0Y2hzXG4gICAgICAgIGNvbnN0IHUgPSBpdC5vcHRzLnVuaWNvZGVSZWdFeHAgPyBcInVcIiA6IFwiXCI7XG4gICAgICAgIGNvbnN0IHJlZ0V4cCA9ICRkYXRhID8gKDAsIGNvZGVnZW5fMS5fKSBgKG5ldyBSZWdFeHAoJHtzY2hlbWFDb2RlfSwgJHt1fSkpYCA6ICgwLCBjb2RlXzEudXNlUGF0dGVybikoY3h0LCBzY2hlbWEpO1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYCEke3JlZ0V4cH0udGVzdCgke2RhdGF9KWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF0dGVybi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2UoeyBrZXl3b3JkLCBzY2hlbWFDb2RlIH0pIHtcbiAgICAgICAgY29uc3QgY29tcCA9IGtleXdvcmQgPT09IFwibWF4UHJvcGVydGllc1wiID8gXCJtb3JlXCIgOiBcImZld2VyXCI7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgJHtjb21wfSB0aGFuICR7c2NoZW1hQ29kZX0gcHJvcGVydGllc2A7XG4gICAgfSxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFtcIm1heFByb3BlcnRpZXNcIiwgXCJtaW5Qcm9wZXJ0aWVzXCJdLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJudW1iZXJcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYUNvZGUgfSA9IGN4dDtcbiAgICAgICAgY29uc3Qgb3AgPSBrZXl3b3JkID09PSBcIm1heFByb3BlcnRpZXNcIiA/IGNvZGVnZW5fMS5vcGVyYXRvcnMuR1QgOiBjb2RlZ2VuXzEub3BlcmF0b3JzLkxUO1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYE9iamVjdC5rZXlzKCR7ZGF0YX0pLmxlbmd0aCAke29wfSAke3NjaGVtYUNvZGV9YCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW1pdFByb3BlcnRpZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXM6IHsgbWlzc2luZ1Byb3BlcnR5IH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgJyR7bWlzc2luZ1Byb3BlcnR5fSdgLFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IG1pc3NpbmdQcm9wZXJ0eSB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHttaXNzaW5nUHJvcGVydHk6ICR7bWlzc2luZ1Byb3BlcnR5fX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInJlcXVpcmVkXCIsXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBzY2hlbWFUeXBlOiBcImFycmF5XCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgc2NoZW1hQ29kZSwgZGF0YSwgJGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGlmICghJGRhdGEgJiYgc2NoZW1hLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdXNlTG9vcCA9IHNjaGVtYS5sZW5ndGggPj0gb3B0cy5sb29wUmVxdWlyZWQ7XG4gICAgICAgIGlmIChpdC5hbGxFcnJvcnMpXG4gICAgICAgICAgICBhbGxFcnJvcnNNb2RlKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGV4aXRPbkVycm9yTW9kZSgpO1xuICAgICAgICBpZiAob3B0cy5zdHJpY3RSZXF1aXJlZCkge1xuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBjeHQucGFyZW50U2NoZW1hLnByb3BlcnRpZXM7XG4gICAgICAgICAgICBjb25zdCB7IGRlZmluZWRQcm9wZXJ0aWVzIH0gPSBjeHQuaXQ7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVpcmVkS2V5IG9mIHNjaGVtYSkge1xuICAgICAgICAgICAgICAgIGlmICgocHJvcHMgPT09IG51bGwgfHwgcHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb3BzW3JlcXVpcmVkS2V5XSkgPT09IHVuZGVmaW5lZCAmJiAhZGVmaW5lZFByb3BlcnRpZXMuaGFzKHJlcXVpcmVkS2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFQYXRoID0gaXQuc2NoZW1hRW52LmJhc2VJZCArIGl0LmVyclNjaGVtYVBhdGg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IGByZXF1aXJlZCBwcm9wZXJ0eSBcIiR7cmVxdWlyZWRLZXl9XCIgaXMgbm90IGRlZmluZWQgYXQgXCIke3NjaGVtYVBhdGh9XCIgKHN0cmljdFJlcXVpcmVkKWA7XG4gICAgICAgICAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgbXNnLCBpdC5vcHRzLnN0cmljdFJlcXVpcmVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWxsRXJyb3JzTW9kZSgpIHtcbiAgICAgICAgICAgIGlmICh1c2VMb29wIHx8ICRkYXRhKSB7XG4gICAgICAgICAgICAgICAgY3h0LmJsb2NrJGRhdGEoY29kZWdlbl8xLm5pbCwgbG9vcEFsbFJlcXVpcmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBzY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGNvZGVfMS5jaGVja1JlcG9ydE1pc3NpbmdQcm9wKShjeHQsIHByb3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBleGl0T25FcnJvck1vZGUoKSB7XG4gICAgICAgICAgICBjb25zdCBtaXNzaW5nID0gZ2VuLmxldChcIm1pc3NpbmdcIik7XG4gICAgICAgICAgICBpZiAodXNlTG9vcCB8fCAkZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIGN4dC5ibG9jayRkYXRhKHZhbGlkLCAoKSA9PiBsb29wVW50aWxNaXNzaW5nKG1pc3NpbmcsIHZhbGlkKSk7XG4gICAgICAgICAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZV8xLmNoZWNrTWlzc2luZ1Byb3ApKGN4dCwgc2NoZW1hLCBtaXNzaW5nKSk7XG4gICAgICAgICAgICAgICAgKDAsIGNvZGVfMS5yZXBvcnRNaXNzaW5nUHJvcCkoY3h0LCBtaXNzaW5nKTtcbiAgICAgICAgICAgICAgICBnZW4uZWxzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGxvb3BBbGxSZXF1aXJlZCgpIHtcbiAgICAgICAgICAgIGdlbi5mb3JPZihcInByb3BcIiwgc2NoZW1hQ29kZSwgKHByb3ApID0+IHtcbiAgICAgICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbWlzc2luZ1Byb3BlcnR5OiBwcm9wIH0pO1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZV8xLm5vUHJvcGVydHlJbkRhdGEpKGdlbiwgZGF0YSwgcHJvcCwgb3B0cy5vd25Qcm9wZXJ0aWVzKSwgKCkgPT4gY3h0LmVycm9yKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbG9vcFVudGlsTWlzc2luZyhtaXNzaW5nLCB2YWxpZCkge1xuICAgICAgICAgICAgY3h0LnNldFBhcmFtcyh7IG1pc3NpbmdQcm9wZXJ0eTogbWlzc2luZyB9KTtcbiAgICAgICAgICAgIGdlbi5mb3JPZihtaXNzaW5nLCBzY2hlbWFDb2RlLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgKDAsIGNvZGVfMS5wcm9wZXJ0eUluRGF0YSkoZ2VuLCBkYXRhLCBtaXNzaW5nLCBvcHRzLm93blByb3BlcnRpZXMpKTtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjeHQuZXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmJyZWFrKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBjb2RlZ2VuXzEubmlsKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVxdWlyZWQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSB7XG4gICAgICAgIGNvbnN0IGNvbXAgPSBrZXl3b3JkID09PSBcIm1heEl0ZW1zXCIgPyBcIm1vcmVcIiA6IFwiZmV3ZXJcIjtcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSAke2NvbXB9IHRoYW4gJHtzY2hlbWFDb2RlfSBpdGVtc2A7XG4gICAgfSxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFtcIm1heEl0ZW1zXCIsIFwibWluSXRlbXNcIl0sXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBrZXl3b3JkLCBkYXRhLCBzY2hlbWFDb2RlIH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IG9wID0ga2V5d29yZCA9PT0gXCJtYXhJdGVtc1wiID8gY29kZWdlbl8xLm9wZXJhdG9ycy5HVCA6IGNvZGVnZW5fMS5vcGVyYXRvcnMuTFQ7XG4gICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGggJHtvcH0gJHtzY2hlbWFDb2RlfWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGltaXRJdGVtcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Fqdi12YWxpZGF0b3IvYWp2L2lzc3Vlcy84ODlcbmNvbnN0IGVxdWFsID0gcmVxdWlyZShcImZhc3QtZGVlcC1lcXVhbFwiKTtcbmVxdWFsLmNvZGUgPSAncmVxdWlyZShcImFqdi9kaXN0L3J1bnRpbWUvZXF1YWxcIikuZGVmYXVsdCc7XG5leHBvcnRzLmRlZmF1bHQgPSBlcXVhbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVxdWFsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBkYXRhVHlwZV8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVxdWFsXzEgPSByZXF1aXJlKFwiLi4vLi4vcnVudGltZS9lcXVhbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBpLCBqIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IE5PVCBoYXZlIGR1cGxpY2F0ZSBpdGVtcyAoaXRlbXMgIyMgJHtqfSBhbmQgJHtpfSBhcmUgaWRlbnRpY2FsKWAsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgaSwgaiB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtpOiAke2l9LCBqOiAke2p9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwidW5pcXVlSXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogXCJib29sZWFuXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgc2NoZW1hQ29kZSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKCEkZGF0YSAmJiAhc2NoZW1hKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiKTtcbiAgICAgICAgY29uc3QgaXRlbVR5cGVzID0gcGFyZW50U2NoZW1hLml0ZW1zID8gKDAsIGRhdGFUeXBlXzEuZ2V0U2NoZW1hVHlwZXMpKHBhcmVudFNjaGVtYS5pdGVtcykgOiBbXTtcbiAgICAgICAgY3h0LmJsb2NrJGRhdGEodmFsaWQsIHZhbGlkYXRlVW5pcXVlSXRlbXMsICgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hQ29kZX0gPT09IGZhbHNlYCk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlVW5pcXVlSXRlbXMoKSB7XG4gICAgICAgICAgICBjb25zdCBpID0gZ2VuLmxldChcImlcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICAgICAgICAgIGNvbnN0IGogPSBnZW4ubGV0KFwialwiKTtcbiAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBpLCBqIH0pO1xuICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtpfSA+IDFgLCAoKSA9PiAoY2FuT3B0aW1pemUoKSA/IGxvb3BOIDogbG9vcE4yKShpLCBqKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2FuT3B0aW1pemUoKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbVR5cGVzLmxlbmd0aCA+IDAgJiYgIWl0ZW1UeXBlcy5zb21lKCh0KSA9PiB0ID09PSBcIm9iamVjdFwiIHx8IHQgPT09IFwiYXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbG9vcE4oaSwgaikge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGdlbi5uYW1lKFwiaXRlbVwiKTtcbiAgICAgICAgICAgIGNvbnN0IHdyb25nVHlwZSA9ICgwLCBkYXRhVHlwZV8xLmNoZWNrRGF0YVR5cGVzKShpdGVtVHlwZXMsIGl0ZW0sIGl0Lm9wdHMuc3RyaWN0TnVtYmVycywgZGF0YVR5cGVfMS5EYXRhVHlwZS5Xcm9uZyk7XG4gICAgICAgICAgICBjb25zdCBpbmRpY2VzID0gZ2VuLmNvbnN0KFwiaW5kaWNlc1wiLCAoMCwgY29kZWdlbl8xLl8pIGB7fWApO1xuICAgICAgICAgICAgZ2VuLmZvcigoMCwgY29kZWdlbl8xLl8pIGA7JHtpfS0tO2AsICgpID0+IHtcbiAgICAgICAgICAgICAgICBnZW4ubGV0KGl0ZW0sICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX1bJHtpfV1gKTtcbiAgICAgICAgICAgICAgICBnZW4uaWYod3JvbmdUeXBlLCAoMCwgY29kZWdlbl8xLl8pIGBjb250aW51ZWApO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtVHlwZXMubGVuZ3RoID4gMSlcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2l0ZW19ID09IFwic3RyaW5nXCJgLCAoMCwgY29kZWdlbl8xLl8pIGAke2l0ZW19ICs9IFwiX1wiYCk7XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5pZigoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtpbmRpY2VzfVske2l0ZW19XSA9PSBcIm51bWJlclwiYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKGosICgwLCBjb2RlZ2VuXzEuXykgYCR7aW5kaWNlc31bJHtpdGVtfV1gKTtcbiAgICAgICAgICAgICAgICAgICAgY3h0LmVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKS5icmVhaygpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYCR7aW5kaWNlc31bJHtpdGVtfV0gPSAke2l9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBsb29wTjIoaSwgaikge1xuICAgICAgICAgICAgY29uc3QgZXFsID0gKDAsIHV0aWxfMS51c2VGdW5jKShnZW4sIGVxdWFsXzEuZGVmYXVsdCk7XG4gICAgICAgICAgICBjb25zdCBvdXRlciA9IGdlbi5uYW1lKFwib3V0ZXJcIik7XG4gICAgICAgICAgICBnZW4ubGFiZWwob3V0ZXIpLmZvcigoMCwgY29kZWdlbl8xLl8pIGA7JHtpfS0tO2AsICgpID0+IGdlbi5mb3IoKDAsIGNvZGVnZW5fMS5fKSBgJHtqfSA9ICR7aX07ICR7an0tLTtgLCAoKSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtlcWx9KCR7ZGF0YX1bJHtpfV0sICR7ZGF0YX1bJHtqfV0pYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGN4dC5lcnJvcigpO1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKS5icmVhayhvdXRlcik7XG4gICAgICAgICAgICB9KSkpO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11bmlxdWVJdGVtcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcXVhbF8xID0gcmVxdWlyZShcIi4uLy4uL3J1bnRpbWUvZXF1YWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcIm11c3QgYmUgZXF1YWwgdG8gY29uc3RhbnRcIixcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2FsbG93ZWRWYWx1ZTogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImNvbnN0XCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWFDb2RlLCBzY2hlbWEgfSA9IGN4dDtcbiAgICAgICAgaWYgKCRkYXRhIHx8IChzY2hlbWEgJiYgdHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiKSkge1xuICAgICAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAhJHsoMCwgdXRpbF8xLnVzZUZ1bmMpKGdlbiwgZXF1YWxfMS5kZWZhdWx0KX0oJHtkYXRhfSwgJHtzY2hlbWFDb2RlfSlgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGN4dC5mYWlsKCgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hfSAhPT0gJHtkYXRhfWApO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcXVhbF8xID0gcmVxdWlyZShcIi4uLy4uL3J1bnRpbWUvZXF1YWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcIm11c3QgYmUgZXF1YWwgdG8gb25lIG9mIHRoZSBhbGxvd2VkIHZhbHVlc1wiLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7YWxsb3dlZFZhbHVlczogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImVudW1cIixcbiAgICBzY2hlbWFUeXBlOiBcImFycmF5XCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGlmICghJGRhdGEgJiYgc2NoZW1hLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImVudW0gbXVzdCBoYXZlIG5vbi1lbXB0eSBhcnJheVwiKTtcbiAgICAgICAgY29uc3QgdXNlTG9vcCA9IHNjaGVtYS5sZW5ndGggPj0gaXQub3B0cy5sb29wRW51bTtcbiAgICAgICAgbGV0IGVxbDtcbiAgICAgICAgY29uc3QgZ2V0RXFsID0gKCkgPT4gKGVxbCAhPT0gbnVsbCAmJiBlcWwgIT09IHZvaWQgMCA/IGVxbCA6IChlcWwgPSAoMCwgdXRpbF8xLnVzZUZ1bmMpKGdlbiwgZXF1YWxfMS5kZWZhdWx0KSkpO1xuICAgICAgICBsZXQgdmFsaWQ7XG4gICAgICAgIGlmICh1c2VMb29wIHx8ICRkYXRhKSB7XG4gICAgICAgICAgICB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiKTtcbiAgICAgICAgICAgIGN4dC5ibG9jayRkYXRhKHZhbGlkLCBsb29wRW51bSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzY2hlbWEpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgICAgIGNvbnN0IHZTY2hlbWEgPSBnZW4uY29uc3QoXCJ2U2NoZW1hXCIsIHNjaGVtYUNvZGUpO1xuICAgICAgICAgICAgdmFsaWQgPSAoMCwgY29kZWdlbl8xLm9yKSguLi5zY2hlbWEubWFwKChfeCwgaSkgPT4gZXF1YWxDb2RlKHZTY2hlbWEsIGkpKSk7XG4gICAgICAgIH1cbiAgICAgICAgY3h0LnBhc3ModmFsaWQpO1xuICAgICAgICBmdW5jdGlvbiBsb29wRW51bSgpIHtcbiAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKTtcbiAgICAgICAgICAgIGdlbi5mb3JPZihcInZcIiwgc2NoZW1hQ29kZSwgKHYpID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2dldEVxbCgpfSgke2RhdGF9LCAke3Z9KWAsICgpID0+IGdlbi5hc3NpZ24odmFsaWQsIHRydWUpLmJyZWFrKCkpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBlcXVhbENvZGUodlNjaGVtYSwgaSkge1xuICAgICAgICAgICAgY29uc3Qgc2NoID0gc2NoZW1hW2ldO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBzY2ggPT09IFwib2JqZWN0XCIgJiYgc2NoICE9PSBudWxsXG4gICAgICAgICAgICAgICAgPyAoMCwgY29kZWdlbl8xLl8pIGAke2dldEVxbCgpfSgke2RhdGF9LCAke3ZTY2hlbWF9WyR7aX1dKWBcbiAgICAgICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gPT09ICR7c2NofWA7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVudW0uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGxpbWl0TnVtYmVyXzEgPSByZXF1aXJlKFwiLi9saW1pdE51bWJlclwiKTtcbmNvbnN0IG11bHRpcGxlT2ZfMSA9IHJlcXVpcmUoXCIuL211bHRpcGxlT2ZcIik7XG5jb25zdCBsaW1pdExlbmd0aF8xID0gcmVxdWlyZShcIi4vbGltaXRMZW5ndGhcIik7XG5jb25zdCBwYXR0ZXJuXzEgPSByZXF1aXJlKFwiLi9wYXR0ZXJuXCIpO1xuY29uc3QgbGltaXRQcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9saW1pdFByb3BlcnRpZXNcIik7XG5jb25zdCByZXF1aXJlZF8xID0gcmVxdWlyZShcIi4vcmVxdWlyZWRcIik7XG5jb25zdCBsaW1pdEl0ZW1zXzEgPSByZXF1aXJlKFwiLi9saW1pdEl0ZW1zXCIpO1xuY29uc3QgdW5pcXVlSXRlbXNfMSA9IHJlcXVpcmUoXCIuL3VuaXF1ZUl0ZW1zXCIpO1xuY29uc3QgY29uc3RfMSA9IHJlcXVpcmUoXCIuL2NvbnN0XCIpO1xuY29uc3QgZW51bV8xID0gcmVxdWlyZShcIi4vZW51bVwiKTtcbmNvbnN0IHZhbGlkYXRpb24gPSBbXG4gICAgLy8gbnVtYmVyXG4gICAgbGltaXROdW1iZXJfMS5kZWZhdWx0LFxuICAgIG11bHRpcGxlT2ZfMS5kZWZhdWx0LFxuICAgIC8vIHN0cmluZ1xuICAgIGxpbWl0TGVuZ3RoXzEuZGVmYXVsdCxcbiAgICBwYXR0ZXJuXzEuZGVmYXVsdCxcbiAgICAvLyBvYmplY3RcbiAgICBsaW1pdFByb3BlcnRpZXNfMS5kZWZhdWx0LFxuICAgIHJlcXVpcmVkXzEuZGVmYXVsdCxcbiAgICAvLyBhcnJheVxuICAgIGxpbWl0SXRlbXNfMS5kZWZhdWx0LFxuICAgIHVuaXF1ZUl0ZW1zXzEuZGVmYXVsdCxcbiAgICAvLyBhbnlcbiAgICB7IGtleXdvcmQ6IFwidHlwZVwiLCBzY2hlbWFUeXBlOiBbXCJzdHJpbmdcIiwgXCJhcnJheVwiXSB9LFxuICAgIHsga2V5d29yZDogXCJudWxsYWJsZVwiLCBzY2hlbWFUeXBlOiBcImJvb2xlYW5cIiB9LFxuICAgIGNvbnN0XzEuZGVmYXVsdCxcbiAgICBlbnVtXzEuZGVmYXVsdCxcbl07XG5leHBvcnRzLmRlZmF1bHQgPSB2YWxpZGF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVBZGRpdGlvbmFsSXRlbXMgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBsZW4gfSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgbW9yZSB0aGFuICR7bGVufSBpdGVtc2AsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgbGVuIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke2xlbn19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJhZGRpdGlvbmFsSXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogW1wiYm9vbGVhblwiLCBcIm9iamVjdFwiXSxcbiAgICBiZWZvcmU6IFwidW5pcXVlSXRlbXNcIixcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBpdGVtcyB9ID0gcGFyZW50U2NoZW1hO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsICdcImFkZGl0aW9uYWxJdGVtc1wiIGlzIGlnbm9yZWQgd2hlbiBcIml0ZW1zXCIgaXMgbm90IGFuIGFycmF5IG9mIHNjaGVtYXMnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YWxpZGF0ZUFkZGl0aW9uYWxJdGVtcyhjeHQsIGl0ZW1zKTtcbiAgICB9LFxufTtcbmZ1bmN0aW9uIHZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zKGN4dCwgaXRlbXMpIHtcbiAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBrZXl3b3JkLCBpdCB9ID0gY3h0O1xuICAgIGl0Lml0ZW1zID0gdHJ1ZTtcbiAgICBjb25zdCBsZW4gPSBnZW4uY29uc3QoXCJsZW5cIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICBpZiAoc2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbGVuOiBpdGVtcy5sZW5ndGggfSk7XG4gICAgICAgIGN4dC5wYXNzKCgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSA8PSAke2l0ZW1zLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiICYmICEoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSkge1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi52YXIoXCJ2YWxpZFwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gPD0gJHtpdGVtcy5sZW5ndGh9YCk7IC8vIFRPRE8gdmFyXG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiB2YWxpZGF0ZUl0ZW1zKHZhbGlkKSk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlSXRlbXModmFsaWQpIHtcbiAgICAgICAgZ2VuLmZvclJhbmdlKFwiaVwiLCBpdGVtcy5sZW5ndGgsIGxlbiwgKGkpID0+IHtcbiAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoeyBrZXl3b3JkLCBkYXRhUHJvcDogaSwgZGF0YVByb3BUeXBlOiB1dGlsXzEuVHlwZS5OdW0gfSwgdmFsaWQpO1xuICAgICAgICAgICAgaWYgKCFpdC5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IGdlbi5icmVhaygpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZUFkZGl0aW9uYWxJdGVtcyA9IHZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zO1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWRkaXRpb25hbEl0ZW1zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlVHVwbGUgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiaXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYXJyYXlcIiwgXCJib29sZWFuXCJdLFxuICAgIGJlZm9yZTogXCJ1bmlxdWVJdGVtc1wiLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEpKVxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlVHVwbGUoY3h0LCBcImFkZGl0aW9uYWxJdGVtc1wiLCBzY2hlbWEpO1xuICAgICAgICBpdC5pdGVtcyA9IHRydWU7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY3h0Lm9rKCgwLCBjb2RlXzEudmFsaWRhdGVBcnJheSkoY3h0KSk7XG4gICAgfSxcbn07XG5mdW5jdGlvbiB2YWxpZGF0ZVR1cGxlKGN4dCwgZXh0cmFJdGVtcywgc2NoQXJyID0gY3h0LnNjaGVtYSkge1xuICAgIGNvbnN0IHsgZ2VuLCBwYXJlbnRTY2hlbWEsIGRhdGEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgY2hlY2tTdHJpY3RUdXBsZShwYXJlbnRTY2hlbWEpO1xuICAgIGlmIChpdC5vcHRzLnVuZXZhbHVhdGVkICYmIHNjaEFyci5sZW5ndGggJiYgaXQuaXRlbXMgIT09IHRydWUpIHtcbiAgICAgICAgaXQuaXRlbXMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQuaXRlbXMoZ2VuLCBzY2hBcnIubGVuZ3RoLCBpdC5pdGVtcyk7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICBjb25zdCBsZW4gPSBnZW4uY29uc3QoXCJsZW5cIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICBzY2hBcnIuZm9yRWFjaCgoc2NoLCBpKSA9PiB7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSA+ICR7aX1gLCAoKSA9PiBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgIGtleXdvcmQsXG4gICAgICAgICAgICBzY2hlbWFQcm9wOiBpLFxuICAgICAgICAgICAgZGF0YVByb3A6IGksXG4gICAgICAgIH0sIHZhbGlkKSk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gY2hlY2tTdHJpY3RUdXBsZShzY2gpIHtcbiAgICAgICAgY29uc3QgeyBvcHRzLCBlcnJTY2hlbWFQYXRoIH0gPSBpdDtcbiAgICAgICAgY29uc3QgbCA9IHNjaEFyci5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGZ1bGxUdXBsZSA9IGwgPT09IHNjaC5taW5JdGVtcyAmJiAobCA9PT0gc2NoLm1heEl0ZW1zIHx8IHNjaFtleHRyYUl0ZW1zXSA9PT0gZmFsc2UpO1xuICAgICAgICBpZiAob3B0cy5zdHJpY3RUdXBsZXMgJiYgIWZ1bGxUdXBsZSkge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gYFwiJHtrZXl3b3JkfVwiIGlzICR7bH0tdHVwbGUsIGJ1dCBtaW5JdGVtcyBvciBtYXhJdGVtcy8ke2V4dHJhSXRlbXN9IGFyZSBub3Qgc3BlY2lmaWVkIG9yIGRpZmZlcmVudCBhdCBwYXRoIFwiJHtlcnJTY2hlbWFQYXRofVwiYDtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgbXNnLCBvcHRzLnN0cmljdFR1cGxlcyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLnZhbGlkYXRlVHVwbGUgPSB2YWxpZGF0ZVR1cGxlO1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXRlbXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGl0ZW1zXzEgPSByZXF1aXJlKFwiLi9pdGVtc1wiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInByZWZpeEl0ZW1zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcImFycmF5XCJdLFxuICAgIGJlZm9yZTogXCJ1bmlxdWVJdGVtc1wiLFxuICAgIGNvZGU6IChjeHQpID0+ICgwLCBpdGVtc18xLnZhbGlkYXRlVHVwbGUpKGN4dCwgXCJpdGVtc1wiKSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcmVmaXhJdGVtcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGFkZGl0aW9uYWxJdGVtc18xID0gcmVxdWlyZShcIi4vYWRkaXRpb25hbEl0ZW1zXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IGxlbiB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSBtb3JlIHRoYW4gJHtsZW59IGl0ZW1zYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtczogeyBsZW4gfSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bGltaXQ6ICR7bGVufX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIml0ZW1zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgYmVmb3JlOiBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBwcmVmaXhJdGVtcyB9ID0gcGFyZW50U2NoZW1hO1xuICAgICAgICBpdC5pdGVtcyA9IHRydWU7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHByZWZpeEl0ZW1zKVxuICAgICAgICAgICAgKDAsIGFkZGl0aW9uYWxJdGVtc18xLnZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zKShjeHQsIHByZWZpeEl0ZW1zKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgY3h0Lm9rKCgwLCBjb2RlXzEudmFsaWRhdGVBcnJheSkoY3h0KSk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pdGVtczIwMjAuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IG1pbiwgbWF4IH0gfSkgPT4gbWF4ID09PSB1bmRlZmluZWRcbiAgICAgICAgPyAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgY29udGFpbiBhdCBsZWFzdCAke21pbn0gdmFsaWQgaXRlbShzKWBcbiAgICAgICAgOiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgY29udGFpbiBhdCBsZWFzdCAke21pbn0gYW5kIG5vIG1vcmUgdGhhbiAke21heH0gdmFsaWQgaXRlbShzKWAsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgbWluLCBtYXggfSB9KSA9PiBtYXggPT09IHVuZGVmaW5lZCA/ICgwLCBjb2RlZ2VuXzEuXykgYHttaW5Db250YWluczogJHttaW59fWAgOiAoMCwgY29kZWdlbl8xLl8pIGB7bWluQ29udGFpbnM6ICR7bWlufSwgbWF4Q29udGFpbnM6ICR7bWF4fX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImNvbnRhaW5zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgYmVmb3JlOiBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgICAgICBsZXQgbWluO1xuICAgICAgICBsZXQgbWF4O1xuICAgICAgICBjb25zdCB7IG1pbkNvbnRhaW5zLCBtYXhDb250YWlucyB9ID0gcGFyZW50U2NoZW1hO1xuICAgICAgICBpZiAoaXQub3B0cy5uZXh0KSB7XG4gICAgICAgICAgICBtaW4gPSBtaW5Db250YWlucyA9PT0gdW5kZWZpbmVkID8gMSA6IG1pbkNvbnRhaW5zO1xuICAgICAgICAgICAgbWF4ID0gbWF4Q29udGFpbnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtaW4gPSAxO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxlbiA9IGdlbi5jb25zdChcImxlblwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9Lmxlbmd0aGApO1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbWluLCBtYXggfSk7XG4gICAgICAgIGlmIChtYXggPT09IHVuZGVmaW5lZCAmJiBtaW4gPT09IDApIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgYFwibWluQ29udGFpbnNcIiA9PSAwIHdpdGhvdXQgXCJtYXhDb250YWluc1wiOiBcImNvbnRhaW5zXCIga2V5d29yZCBpZ25vcmVkYCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heCAhPT0gdW5kZWZpbmVkICYmIG1pbiA+IG1heCkge1xuICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBgXCJtaW5Db250YWluc1wiID4gXCJtYXhDb250YWluc1wiIGlzIGFsd2F5cyBpbnZhbGlkYCk7XG4gICAgICAgICAgICBjeHQuZmFpbCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSkge1xuICAgICAgICAgICAgbGV0IGNvbmQgPSAoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gPj0gJHttaW59YDtcbiAgICAgICAgICAgIGlmIChtYXggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtjb25kfSAmJiAke2xlbn0gPD0gJHttYXh9YDtcbiAgICAgICAgICAgIGN4dC5wYXNzKGNvbmQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGl0Lml0ZW1zID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBpZiAobWF4ID09PSB1bmRlZmluZWQgJiYgbWluID09PSAxKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUl0ZW1zKHZhbGlkLCAoKSA9PiBnZW4uaWYodmFsaWQsICgpID0+IGdlbi5icmVhaygpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWluID09PSAwKSB7XG4gICAgICAgICAgICBnZW4ubGV0KHZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgIGlmIChtYXggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGggPiAwYCwgdmFsaWRhdGVJdGVtc1dpdGhDb3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBnZW4ubGV0KHZhbGlkLCBmYWxzZSk7XG4gICAgICAgICAgICB2YWxpZGF0ZUl0ZW1zV2l0aENvdW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgY3h0LnJlc3VsdCh2YWxpZCwgKCkgPT4gY3h0LnJlc2V0KCkpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUl0ZW1zV2l0aENvdW50KCkge1xuICAgICAgICAgICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gZ2VuLmxldChcImNvdW50XCIsIDApO1xuICAgICAgICAgICAgdmFsaWRhdGVJdGVtcyhzY2hWYWxpZCwgKCkgPT4gZ2VuLmlmKHNjaFZhbGlkLCAoKSA9PiBjaGVja0xpbWl0cyhjb3VudCkpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUl0ZW1zKF92YWxpZCwgYmxvY2spIHtcbiAgICAgICAgICAgIGdlbi5mb3JSYW5nZShcImlcIiwgMCwgbGVuLCAoaSkgPT4ge1xuICAgICAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICBrZXl3b3JkOiBcImNvbnRhaW5zXCIsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFQcm9wOiBpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhUHJvcFR5cGU6IHV0aWxfMS5UeXBlLk51bSxcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LCBfdmFsaWQpO1xuICAgICAgICAgICAgICAgIGJsb2NrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjaGVja0xpbWl0cyhjb3VudCkge1xuICAgICAgICAgICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgJHtjb3VudH0rK2ApO1xuICAgICAgICAgICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y291bnR9ID49ICR7bWlufWAsICgpID0+IGdlbi5hc3NpZ24odmFsaWQsIHRydWUpLmJyZWFrKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y291bnR9ID4gJHttYXh9YCwgKCkgPT4gZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpLmJyZWFrKCkpO1xuICAgICAgICAgICAgICAgIGlmIChtaW4gPT09IDEpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y291bnR9ID49ICR7bWlufWAsICgpID0+IGdlbi5hc3NpZ24odmFsaWQsIHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29udGFpbnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVTY2hlbWFEZXBzID0gZXhwb3J0cy52YWxpZGF0ZVByb3BlcnR5RGVwcyA9IGV4cG9ydHMuZXJyb3IgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuZXhwb3J0cy5lcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXM6IHsgcHJvcGVydHksIGRlcHNDb3VudCwgZGVwcyB9IH0pID0+IHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlfaWVzID0gZGVwc0NvdW50ID09PSAxID8gXCJwcm9wZXJ0eVwiIDogXCJwcm9wZXJ0aWVzXCI7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgaGF2ZSAke3Byb3BlcnR5X2llc30gJHtkZXBzfSB3aGVuIHByb3BlcnR5ICR7cHJvcGVydHl9IGlzIHByZXNlbnRgO1xuICAgIH0sXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgcHJvcGVydHksIGRlcHNDb3VudCwgZGVwcywgbWlzc2luZ1Byb3BlcnR5IH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge3Byb3BlcnR5OiAke3Byb3BlcnR5fSxcbiAgICBtaXNzaW5nUHJvcGVydHk6ICR7bWlzc2luZ1Byb3BlcnR5fSxcbiAgICBkZXBzQ291bnQ6ICR7ZGVwc0NvdW50fSxcbiAgICBkZXBzOiAke2RlcHN9fWAsIC8vIFRPRE8gY2hhbmdlIHRvIHJlZmVyZW5jZVxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImRlcGVuZGVuY2llc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBlcnJvcjogZXhwb3J0cy5lcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCBbcHJvcERlcHMsIHNjaERlcHNdID0gc3BsaXREZXBlbmRlbmNpZXMoY3h0KTtcbiAgICAgICAgdmFsaWRhdGVQcm9wZXJ0eURlcHMoY3h0LCBwcm9wRGVwcyk7XG4gICAgICAgIHZhbGlkYXRlU2NoZW1hRGVwcyhjeHQsIHNjaERlcHMpO1xuICAgIH0sXG59O1xuZnVuY3Rpb24gc3BsaXREZXBlbmRlbmNpZXMoeyBzY2hlbWEgfSkge1xuICAgIGNvbnN0IHByb3BlcnR5RGVwcyA9IHt9O1xuICAgIGNvbnN0IHNjaGVtYURlcHMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJfX3Byb3RvX19cIilcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBkZXBzID0gQXJyYXkuaXNBcnJheShzY2hlbWFba2V5XSkgPyBwcm9wZXJ0eURlcHMgOiBzY2hlbWFEZXBzO1xuICAgICAgICBkZXBzW2tleV0gPSBzY2hlbWFba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIFtwcm9wZXJ0eURlcHMsIHNjaGVtYURlcHNdO1xufVxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eURlcHMoY3h0LCBwcm9wZXJ0eURlcHMgPSBjeHQuc2NoZW1hKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgaWYgKE9iamVjdC5rZXlzKHByb3BlcnR5RGVwcykubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgbWlzc2luZyA9IGdlbi5sZXQoXCJtaXNzaW5nXCIpO1xuICAgIGZvciAoY29uc3QgcHJvcCBpbiBwcm9wZXJ0eURlcHMpIHtcbiAgICAgICAgY29uc3QgZGVwcyA9IHByb3BlcnR5RGVwc1twcm9wXTtcbiAgICAgICAgaWYgKGRlcHMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IGhhc1Byb3BlcnR5ID0gKDAsIGNvZGVfMS5wcm9wZXJ0eUluRGF0YSkoZ2VuLCBkYXRhLCBwcm9wLCBpdC5vcHRzLm93blByb3BlcnRpZXMpO1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHtcbiAgICAgICAgICAgIHByb3BlcnR5OiBwcm9wLFxuICAgICAgICAgICAgZGVwc0NvdW50OiBkZXBzLmxlbmd0aCxcbiAgICAgICAgICAgIGRlcHM6IGRlcHMuam9pbihcIiwgXCIpLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGl0LmFsbEVycm9ycykge1xuICAgICAgICAgICAgZ2VuLmlmKGhhc1Byb3BlcnR5LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBQcm9wIG9mIGRlcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGNvZGVfMS5jaGVja1JlcG9ydE1pc3NpbmdQcm9wKShjeHQsIGRlcFByb3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7aGFzUHJvcGVydHl9ICYmICgkeygwLCBjb2RlXzEuY2hlY2tNaXNzaW5nUHJvcCkoY3h0LCBkZXBzLCBtaXNzaW5nKX0pYCk7XG4gICAgICAgICAgICAoMCwgY29kZV8xLnJlcG9ydE1pc3NpbmdQcm9wKShjeHQsIG1pc3NpbmcpO1xuICAgICAgICAgICAgZ2VuLmVsc2UoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVQcm9wZXJ0eURlcHMgPSB2YWxpZGF0ZVByb3BlcnR5RGVwcztcbmZ1bmN0aW9uIHZhbGlkYXRlU2NoZW1hRGVwcyhjeHQsIHNjaGVtYURlcHMgPSBjeHQuc2NoZW1hKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgIGZvciAoY29uc3QgcHJvcCBpbiBzY2hlbWFEZXBzKSB7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hRGVwc1twcm9wXSkpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlXzEucHJvcGVydHlJbkRhdGEpKGdlbiwgZGF0YSwgcHJvcCwgaXQub3B0cy5vd25Qcm9wZXJ0aWVzKSwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQsIHNjaGVtYVByb3A6IHByb3AgfSwgdmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm1lcmdlVmFsaWRFdmFsdWF0ZWQoc2NoQ3h0LCB2YWxpZCk7XG4gICAgICAgIH0sICgpID0+IGdlbi52YXIodmFsaWQsIHRydWUpIC8vIFRPRE8gdmFyXG4gICAgICAgICk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZVNjaGVtYURlcHMgPSB2YWxpZGF0ZVNjaGVtYURlcHM7XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZXBlbmRlbmNpZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJwcm9wZXJ0eSBuYW1lIG11c3QgYmUgdmFsaWRcIixcbiAgICBwYXJhbXM6ICh7IHBhcmFtcyB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7cHJvcGVydHlOYW1lOiAke3BhcmFtcy5wcm9wZXJ0eU5hbWV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwicHJvcGVydHlOYW1lc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgZ2VuLmZvckluKFwia2V5XCIsIGRhdGEsIChrZXkpID0+IHtcbiAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBwcm9wZXJ0eU5hbWU6IGtleSB9KTtcbiAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwicHJvcGVydHlOYW1lc1wiLFxuICAgICAgICAgICAgICAgIGRhdGE6IGtleSxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZXM6IFtcInN0cmluZ1wiXSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWU6IGtleSxcbiAgICAgICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IHtcbiAgICAgICAgICAgICAgICBjeHQuZXJyb3IodHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpdC5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5icmVhaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvcGVydHlOYW1lcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL25hbWVzXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6IFwibXVzdCBOT1QgaGF2ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXNcIixcbiAgICBwYXJhbXM6ICh7IHBhcmFtcyB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7YWRkaXRpb25hbFByb3BlcnR5OiAke3BhcmFtcy5hZGRpdGlvbmFsUHJvcGVydHl9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIixcbiAgICB0eXBlOiBbXCJvYmplY3RcIl0sXG4gICAgc2NoZW1hVHlwZTogW1wiYm9vbGVhblwiLCBcIm9iamVjdFwiXSxcbiAgICBhbGxvd1VuZGVmaW5lZDogdHJ1ZSxcbiAgICB0cmFja0Vycm9yczogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGRhdGEsIGVycnNDb3VudCwgaXQgfSA9IGN4dDtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghZXJyc0NvdW50KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgICAgICBjb25zdCB7IGFsbEVycm9ycywgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGl0LnByb3BzID0gdHJ1ZTtcbiAgICAgICAgaWYgKG9wdHMucmVtb3ZlQWRkaXRpb25hbCAhPT0gXCJhbGxcIiAmJiAoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgcHJvcHMgPSAoMCwgY29kZV8xLmFsbFNjaGVtYVByb3BlcnRpZXMpKHBhcmVudFNjaGVtYS5wcm9wZXJ0aWVzKTtcbiAgICAgICAgY29uc3QgcGF0UHJvcHMgPSAoMCwgY29kZV8xLmFsbFNjaGVtYVByb3BlcnRpZXMpKHBhcmVudFNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcyk7XG4gICAgICAgIGNoZWNrQWRkaXRpb25hbFByb3BlcnRpZXMoKTtcbiAgICAgICAgY3h0Lm9rKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyc0NvdW50fSA9PT0gJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfWApO1xuICAgICAgICBmdW5jdGlvbiBjaGVja0FkZGl0aW9uYWxQcm9wZXJ0aWVzKCkge1xuICAgICAgICAgICAgZ2VuLmZvckluKFwia2V5XCIsIGRhdGEsIChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXByb3BzLmxlbmd0aCAmJiAhcGF0UHJvcHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydHlDb2RlKGtleSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBnZW4uaWYoaXNBZGRpdGlvbmFsKGtleSksICgpID0+IGFkZGl0aW9uYWxQcm9wZXJ0eUNvZGUoa2V5KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc0FkZGl0aW9uYWwoa2V5KSB7XG4gICAgICAgICAgICBsZXQgZGVmaW5lZFByb3A7XG4gICAgICAgICAgICBpZiAocHJvcHMubGVuZ3RoID4gOCkge1xuICAgICAgICAgICAgICAgIC8vIFRPRE8gbWF5YmUgYW4gb3B0aW9uIGluc3RlYWQgb2YgaGFyZC1jb2RlZCA4P1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzU2NoZW1hID0gKDAsIHV0aWxfMS5zY2hlbWFSZWZPclZhbCkoaXQsIHBhcmVudFNjaGVtYS5wcm9wZXJ0aWVzLCBcInByb3BlcnRpZXNcIik7XG4gICAgICAgICAgICAgICAgZGVmaW5lZFByb3AgPSAoMCwgY29kZV8xLmlzT3duUHJvcGVydHkpKGdlbiwgcHJvcHNTY2hlbWEsIGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwcm9wcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBkZWZpbmVkUHJvcCA9ICgwLCBjb2RlZ2VuXzEub3IpKC4uLnByb3BzLm1hcCgocCkgPT4gKDAsIGNvZGVnZW5fMS5fKSBgJHtrZXl9ID09PSAke3B9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVmaW5lZFByb3AgPSBjb2RlZ2VuXzEubmlsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhdFByb3BzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGRlZmluZWRQcm9wID0gKDAsIGNvZGVnZW5fMS5vcikoZGVmaW5lZFByb3AsIC4uLnBhdFByb3BzLm1hcCgocCkgPT4gKDAsIGNvZGVnZW5fMS5fKSBgJHsoMCwgY29kZV8xLnVzZVBhdHRlcm4pKGN4dCwgcCl9LnRlc3QoJHtrZXl9KWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLm5vdCkoZGVmaW5lZFByb3ApO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGRlbGV0ZUFkZGl0aW9uYWwoa2V5KSB7XG4gICAgICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGBkZWxldGUgJHtkYXRhfVske2tleX1dYCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWRkaXRpb25hbFByb3BlcnR5Q29kZShrZXkpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLnJlbW92ZUFkZGl0aW9uYWwgPT09IFwiYWxsXCIgfHwgKG9wdHMucmVtb3ZlQWRkaXRpb25hbCAmJiBzY2hlbWEgPT09IGZhbHNlKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZUFkZGl0aW9uYWwoa2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBhZGRpdGlvbmFsUHJvcGVydHk6IGtleSB9KTtcbiAgICAgICAgICAgICAgICBjeHQuZXJyb3IoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmJyZWFrKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIiAmJiAhKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMucmVtb3ZlQWRkaXRpb25hbCA9PT0gXCJmYWlsaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlBZGRpdGlvbmFsU2NoZW1hKGtleSwgdmFsaWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4dC5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlQWRkaXRpb25hbChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGx5QWRkaXRpb25hbFNjaGVtYShrZXksIHZhbGlkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4gZ2VuLmJyZWFrKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhcHBseUFkZGl0aW9uYWxTY2hlbWEoa2V5LCB2YWxpZCwgZXJyb3JzKSB7XG4gICAgICAgICAgICBjb25zdCBzdWJzY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAga2V5d29yZDogXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgIGRhdGFQcm9wOiBrZXksXG4gICAgICAgICAgICAgICAgZGF0YVByb3BUeXBlOiB1dGlsXzEuVHlwZS5TdHIsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGVycm9ycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHN1YnNjaGVtYSwge1xuICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBhbGxFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3h0LnN1YnNjaGVtYShzdWJzY2hlbWEsIHZhbGlkKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWRkaXRpb25hbFByb3BlcnRpZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHZhbGlkYXRlXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS92YWxpZGF0ZVwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9hZGRpdGlvbmFsUHJvcGVydGllc1wiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInByb3BlcnRpZXNcIixcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHNjaGVtYVR5cGU6IFwib2JqZWN0XCIsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoaXQub3B0cy5yZW1vdmVBZGRpdGlvbmFsID09PSBcImFsbFwiICYmIHBhcmVudFNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllc18xLmRlZmF1bHQuY29kZShuZXcgdmFsaWRhdGVfMS5LZXl3b3JkQ3h0KGl0LCBhZGRpdGlvbmFsUHJvcGVydGllc18xLmRlZmF1bHQsIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIikpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFsbFByb3BzID0gKDAsIGNvZGVfMS5hbGxTY2hlbWFQcm9wZXJ0aWVzKShzY2hlbWEpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgYWxsUHJvcHMpIHtcbiAgICAgICAgICAgIGl0LmRlZmluZWRQcm9wZXJ0aWVzLmFkZChwcm9wKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXQub3B0cy51bmV2YWx1YXRlZCAmJiBhbGxQcm9wcy5sZW5ndGggJiYgaXQucHJvcHMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIGl0LnByb3BzID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLnByb3BzKGdlbiwgKDAsIHV0aWxfMS50b0hhc2gpKGFsbFByb3BzKSwgaXQucHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBhbGxQcm9wcy5maWx0ZXIoKHApID0+ICEoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hW3BdKSk7XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcGVydGllcykge1xuICAgICAgICAgICAgaWYgKGhhc0RlZmF1bHQocHJvcCkpIHtcbiAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5U2NoZW1hKHByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlXzEucHJvcGVydHlJbkRhdGEpKGdlbiwgZGF0YSwgcHJvcCwgaXQub3B0cy5vd25Qcm9wZXJ0aWVzKSk7XG4gICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eVNjaGVtYShwcm9wKTtcbiAgICAgICAgICAgICAgICBpZiAoIWl0LmFsbEVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmVsc2UoKS52YXIodmFsaWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGdlbi5lbmRJZigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3h0Lml0LmRlZmluZWRQcm9wZXJ0aWVzLmFkZChwcm9wKTtcbiAgICAgICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaGFzRGVmYXVsdChwcm9wKSB7XG4gICAgICAgICAgICByZXR1cm4gaXQub3B0cy51c2VEZWZhdWx0cyAmJiAhaXQuY29tcG9zaXRlUnVsZSAmJiBzY2hlbWFbcHJvcF0uZGVmYXVsdCAhPT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5UHJvcGVydHlTY2hlbWEocHJvcCkge1xuICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAga2V5d29yZDogXCJwcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAgc2NoZW1hUHJvcDogcHJvcCxcbiAgICAgICAgICAgICAgICBkYXRhUHJvcDogcHJvcCxcbiAgICAgICAgICAgIH0sIHZhbGlkKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvcGVydGllcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IHV0aWxfMiA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJwYXR0ZXJuUHJvcGVydGllc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5zID0gKDAsIGNvZGVfMS5hbGxTY2hlbWFQcm9wZXJ0aWVzKShzY2hlbWEpO1xuICAgICAgICBjb25zdCBhbHdheXNWYWxpZFBhdHRlcm5zID0gcGF0dGVybnMuZmlsdGVyKChwKSA9PiAoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hW3BdKSk7XG4gICAgICAgIGlmIChwYXR0ZXJucy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIChhbHdheXNWYWxpZFBhdHRlcm5zLmxlbmd0aCA9PT0gcGF0dGVybnMubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgKCFpdC5vcHRzLnVuZXZhbHVhdGVkIHx8IGl0LnByb3BzID09PSB0cnVlKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGVja1Byb3BlcnRpZXMgPSBvcHRzLnN0cmljdFNjaGVtYSAmJiAhb3B0cy5hbGxvd01hdGNoaW5nUHJvcGVydGllcyAmJiBwYXJlbnRTY2hlbWEucHJvcGVydGllcztcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBpZiAoaXQucHJvcHMgIT09IHRydWUgJiYgIShpdC5wcm9wcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKSkge1xuICAgICAgICAgICAgaXQucHJvcHMgPSAoMCwgdXRpbF8yLmV2YWx1YXRlZFByb3BzVG9OYW1lKShnZW4sIGl0LnByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHByb3BzIH0gPSBpdDtcbiAgICAgICAgdmFsaWRhdGVQYXR0ZXJuUHJvcGVydGllcygpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZVBhdHRlcm5Qcm9wZXJ0aWVzKCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXQgb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tQcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICBjaGVja01hdGNoaW5nUHJvcGVydGllcyhwYXQpO1xuICAgICAgICAgICAgICAgIGlmIChpdC5hbGxFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVQcm9wZXJ0aWVzKHBhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZW4udmFyKHZhbGlkLCB0cnVlKTsgLy8gVE9ETyB2YXJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVQcm9wZXJ0aWVzKHBhdCk7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5pZih2YWxpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrTWF0Y2hpbmdQcm9wZXJ0aWVzKHBhdCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGNoZWNrUHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIGlmIChuZXcgUmVnRXhwKHBhdCkudGVzdChwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIGBwcm9wZXJ0eSAke3Byb3B9IG1hdGNoZXMgcGF0dGVybiAke3BhdH0gKHVzZSBhbGxvd01hdGNoaW5nUHJvcGVydGllcylgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzKHBhdCkge1xuICAgICAgICAgICAgZ2VuLmZvckluKFwia2V5XCIsIGRhdGEsIChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHsoMCwgY29kZV8xLnVzZVBhdHRlcm4pKGN4dCwgcGF0KX0udGVzdCgke2tleX0pYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbHdheXNWYWxpZCA9IGFsd2F5c1ZhbGlkUGF0dGVybnMuaW5jbHVkZXMocGF0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhbHdheXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZDogXCJwYXR0ZXJuUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYVByb3A6IHBhdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUHJvcDoga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFQcm9wVHlwZTogdXRpbF8yLlR5cGUuU3RyLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnVuZXZhbHVhdGVkICYmIHByb3BzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7cHJvcHN9WyR7a2V5fV1gLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghYWx3YXlzVmFsaWQgJiYgIWl0LmFsbEVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuIHNob3J0LWNpcmN1aXQgaWYgYHVuZXZhbHVhdGVkUHJvcGVydGllc2AgaXMgbm90IHN1cHBvcnRlZCAob3B0cy5uZXh0ID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIGlmIGFsbCBwcm9wZXJ0aWVzIHdlcmUgZXZhbHVhdGVkIChwcm9wcyA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiBnZW4uYnJlYWsoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXR0ZXJuUHJvcGVydGllcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIm5vdFwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpKSB7XG4gICAgICAgICAgICBjeHQuZmFpbCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICBrZXl3b3JkOiBcIm5vdFwiLFxuICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNyZWF0ZUVycm9yczogZmFsc2UsXG4gICAgICAgICAgICBhbGxFcnJvcnM6IGZhbHNlLFxuICAgICAgICB9LCB2YWxpZCk7XG4gICAgICAgIGN4dC5mYWlsUmVzdWx0KHZhbGlkLCAoKSA9PiBjeHQucmVzZXQoKSwgKCkgPT4gY3h0LmVycm9yKCkpO1xuICAgIH0sXG4gICAgZXJyb3I6IHsgbWVzc2FnZTogXCJtdXN0IE5PVCBiZSB2YWxpZFwiIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm90LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImFueU9mXCIsXG4gICAgc2NoZW1hVHlwZTogXCJhcnJheVwiLFxuICAgIHRyYWNrRXJyb3JzOiB0cnVlLFxuICAgIGNvZGU6IGNvZGVfMS52YWxpZGF0ZVVuaW9uLFxuICAgIGVycm9yOiB7IG1lc3NhZ2U6IFwibXVzdCBtYXRjaCBhIHNjaGVtYSBpbiBhbnlPZlwiIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YW55T2YuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJtdXN0IG1hdGNoIGV4YWN0bHkgb25lIHNjaGVtYSBpbiBvbmVPZlwiLFxuICAgIHBhcmFtczogKHsgcGFyYW1zIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtwYXNzaW5nU2NoZW1hczogJHtwYXJhbXMucGFzc2luZ319YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJvbmVPZlwiLFxuICAgIHNjaGVtYVR5cGU6IFwiYXJyYXlcIixcbiAgICB0cmFja0Vycm9yczogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgaWYgKGl0Lm9wdHMuZGlzY3JpbWluYXRvciAmJiBwYXJlbnRTY2hlbWEuZGlzY3JpbWluYXRvcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qgc2NoQXJyID0gc2NoZW1hO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IHBhc3NpbmcgPSBnZW4ubGV0KFwicGFzc2luZ1wiLCBudWxsKTtcbiAgICAgICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICAgICAgY3h0LnNldFBhcmFtcyh7IHBhc3NpbmcgfSk7XG4gICAgICAgIC8vIFRPRE8gcG9zc2libHkgZmFpbCBzdHJhaWdodCBhd2F5ICh3aXRoIHdhcm5pbmcgb3IgZXhjZXB0aW9uKSBpZiB0aGVyZSBhcmUgdHdvIGVtcHR5IGFsd2F5cyB2YWxpZCBzY2hlbWFzXG4gICAgICAgIGdlbi5ibG9jayh2YWxpZGF0ZU9uZU9mKTtcbiAgICAgICAgY3h0LnJlc3VsdCh2YWxpZCwgKCkgPT4gY3h0LnJlc2V0KCksICgpID0+IGN4dC5lcnJvcih0cnVlKSk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlT25lT2YoKSB7XG4gICAgICAgICAgICBzY2hBcnIuZm9yRWFjaCgoc2NoLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHNjaEN4dDtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLnZhcihzY2hWYWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwib25lT2ZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYVByb3A6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9LCBzY2hWYWxpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgICAgIC5pZigoMCwgY29kZWdlbl8xLl8pIGAke3NjaFZhbGlkfSAmJiAke3ZhbGlkfWApXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXNzaWduKHZhbGlkLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hc3NpZ24ocGFzc2luZywgKDAsIGNvZGVnZW5fMS5fKSBgWyR7cGFzc2luZ30sICR7aX1dYClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5lbHNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGdlbi5pZihzY2hWYWxpZCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmFzc2lnbihwYXNzaW5nLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaEN4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4dC5tZXJnZUV2YWx1YXRlZChzY2hDeHQsIGNvZGVnZW5fMS5OYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vbmVPZi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImFsbE9mXCIsXG4gICAgc2NoZW1hVHlwZTogXCJhcnJheVwiLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBzY2hlbWEuZm9yRWFjaCgoc2NoLCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQ6IFwiYWxsT2ZcIiwgc2NoZW1hUHJvcDogaSB9LCB2YWxpZCk7XG4gICAgICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm1lcmdlRXZhbHVhdGVkKHNjaEN4dCk7XG4gICAgICAgIH0pO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWxsT2YuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBtYXRjaCBcIiR7cGFyYW1zLmlmQ2xhdXNlfVwiIHNjaGVtYWAsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXMgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2ZhaWxpbmdLZXl3b3JkOiAke3BhcmFtcy5pZkNsYXVzZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJpZlwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKHBhcmVudFNjaGVtYS50aGVuID09PSB1bmRlZmluZWQgJiYgcGFyZW50U2NoZW1hLmVsc2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCAnXCJpZlwiIHdpdGhvdXQgXCJ0aGVuXCIgYW5kIFwiZWxzZVwiIGlzIGlnbm9yZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoYXNUaGVuID0gaGFzU2NoZW1hKGl0LCBcInRoZW5cIik7XG4gICAgICAgIGNvbnN0IGhhc0Vsc2UgPSBoYXNTY2hlbWEoaXQsIFwiZWxzZVwiKTtcbiAgICAgICAgaWYgKCFoYXNUaGVuICYmICFoYXNFbHNlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCB0cnVlKTtcbiAgICAgICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICAgICAgdmFsaWRhdGVJZigpO1xuICAgICAgICBjeHQucmVzZXQoKTtcbiAgICAgICAgaWYgKGhhc1RoZW4gJiYgaGFzRWxzZSkge1xuICAgICAgICAgICAgY29uc3QgaWZDbGF1c2UgPSBnZW4ubGV0KFwiaWZDbGF1c2VcIik7XG4gICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgaWZDbGF1c2UgfSk7XG4gICAgICAgICAgICBnZW4uaWYoc2NoVmFsaWQsIHZhbGlkYXRlQ2xhdXNlKFwidGhlblwiLCBpZkNsYXVzZSksIHZhbGlkYXRlQ2xhdXNlKFwiZWxzZVwiLCBpZkNsYXVzZSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhhc1RoZW4pIHtcbiAgICAgICAgICAgIGdlbi5pZihzY2hWYWxpZCwgdmFsaWRhdGVDbGF1c2UoXCJ0aGVuXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkoc2NoVmFsaWQpLCB2YWxpZGF0ZUNsYXVzZShcImVsc2VcIikpO1xuICAgICAgICB9XG4gICAgICAgIGN4dC5wYXNzKHZhbGlkLCAoKSA9PiBjeHQuZXJyb3IodHJ1ZSkpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUlmKCkge1xuICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAga2V5d29yZDogXCJpZlwiLFxuICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY3JlYXRlRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBhbGxFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgfSwgc2NoVmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm1lcmdlRXZhbHVhdGVkKHNjaEN4dCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVDbGF1c2Uoa2V5d29yZCwgaWZDbGF1c2UpIHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQgfSwgc2NoVmFsaWQpO1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIHNjaFZhbGlkKTtcbiAgICAgICAgICAgICAgICBjeHQubWVyZ2VWYWxpZEV2YWx1YXRlZChzY2hDeHQsIHZhbGlkKTtcbiAgICAgICAgICAgICAgICBpZiAoaWZDbGF1c2UpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24oaWZDbGF1c2UsICgwLCBjb2RlZ2VuXzEuXykgYCR7a2V5d29yZH1gKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBpZkNsYXVzZToga2V5d29yZCB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmZ1bmN0aW9uIGhhc1NjaGVtYShpdCwga2V5d29yZCkge1xuICAgIGNvbnN0IHNjaGVtYSA9IGl0LnNjaGVtYVtrZXl3b3JkXTtcbiAgICByZXR1cm4gc2NoZW1hICE9PSB1bmRlZmluZWQgJiYgISgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogW1widGhlblwiLCBcImVsc2VcIl0sXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICBjb2RlKHsga2V5d29yZCwgcGFyZW50U2NoZW1hLCBpdCB9KSB7XG4gICAgICAgIGlmIChwYXJlbnRTY2hlbWEuaWYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgYFwiJHtrZXl3b3JkfVwiIHdpdGhvdXQgXCJpZlwiIGlzIGlnbm9yZWRgKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRoZW5FbHNlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBhZGRpdGlvbmFsSXRlbXNfMSA9IHJlcXVpcmUoXCIuL2FkZGl0aW9uYWxJdGVtc1wiKTtcbmNvbnN0IHByZWZpeEl0ZW1zXzEgPSByZXF1aXJlKFwiLi9wcmVmaXhJdGVtc1wiKTtcbmNvbnN0IGl0ZW1zXzEgPSByZXF1aXJlKFwiLi9pdGVtc1wiKTtcbmNvbnN0IGl0ZW1zMjAyMF8xID0gcmVxdWlyZShcIi4vaXRlbXMyMDIwXCIpO1xuY29uc3QgY29udGFpbnNfMSA9IHJlcXVpcmUoXCIuL2NvbnRhaW5zXCIpO1xuY29uc3QgZGVwZW5kZW5jaWVzXzEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNcIik7XG5jb25zdCBwcm9wZXJ0eU5hbWVzXzEgPSByZXF1aXJlKFwiLi9wcm9wZXJ0eU5hbWVzXCIpO1xuY29uc3QgYWRkaXRpb25hbFByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL2FkZGl0aW9uYWxQcm9wZXJ0aWVzXCIpO1xuY29uc3QgcHJvcGVydGllc18xID0gcmVxdWlyZShcIi4vcHJvcGVydGllc1wiKTtcbmNvbnN0IHBhdHRlcm5Qcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9wYXR0ZXJuUHJvcGVydGllc1wiKTtcbmNvbnN0IG5vdF8xID0gcmVxdWlyZShcIi4vbm90XCIpO1xuY29uc3QgYW55T2ZfMSA9IHJlcXVpcmUoXCIuL2FueU9mXCIpO1xuY29uc3Qgb25lT2ZfMSA9IHJlcXVpcmUoXCIuL29uZU9mXCIpO1xuY29uc3QgYWxsT2ZfMSA9IHJlcXVpcmUoXCIuL2FsbE9mXCIpO1xuY29uc3QgaWZfMSA9IHJlcXVpcmUoXCIuL2lmXCIpO1xuY29uc3QgdGhlbkVsc2VfMSA9IHJlcXVpcmUoXCIuL3RoZW5FbHNlXCIpO1xuZnVuY3Rpb24gZ2V0QXBwbGljYXRvcihkcmFmdDIwMjAgPSBmYWxzZSkge1xuICAgIGNvbnN0IGFwcGxpY2F0b3IgPSBbXG4gICAgICAgIC8vIGFueVxuICAgICAgICBub3RfMS5kZWZhdWx0LFxuICAgICAgICBhbnlPZl8xLmRlZmF1bHQsXG4gICAgICAgIG9uZU9mXzEuZGVmYXVsdCxcbiAgICAgICAgYWxsT2ZfMS5kZWZhdWx0LFxuICAgICAgICBpZl8xLmRlZmF1bHQsXG4gICAgICAgIHRoZW5FbHNlXzEuZGVmYXVsdCxcbiAgICAgICAgLy8gb2JqZWN0XG4gICAgICAgIHByb3BlcnR5TmFtZXNfMS5kZWZhdWx0LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllc18xLmRlZmF1bHQsXG4gICAgICAgIGRlcGVuZGVuY2llc18xLmRlZmF1bHQsXG4gICAgICAgIHByb3BlcnRpZXNfMS5kZWZhdWx0LFxuICAgICAgICBwYXR0ZXJuUHJvcGVydGllc18xLmRlZmF1bHQsXG4gICAgXTtcbiAgICAvLyBhcnJheVxuICAgIGlmIChkcmFmdDIwMjApXG4gICAgICAgIGFwcGxpY2F0b3IucHVzaChwcmVmaXhJdGVtc18xLmRlZmF1bHQsIGl0ZW1zMjAyMF8xLmRlZmF1bHQpO1xuICAgIGVsc2VcbiAgICAgICAgYXBwbGljYXRvci5wdXNoKGFkZGl0aW9uYWxJdGVtc18xLmRlZmF1bHQsIGl0ZW1zXzEuZGVmYXVsdCk7XG4gICAgYXBwbGljYXRvci5wdXNoKGNvbnRhaW5zXzEuZGVmYXVsdCk7XG4gICAgcmV0dXJuIGFwcGxpY2F0b3I7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBnZXRBcHBsaWNhdG9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBtYXRjaCBmb3JtYXQgXCIke3NjaGVtYUNvZGV9XCJgLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7Zm9ybWF0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiZm9ybWF0XCIsXG4gICAgdHlwZTogW1wibnVtYmVyXCIsIFwic3RyaW5nXCJdLFxuICAgIHNjaGVtYVR5cGU6IFwic3RyaW5nXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQsIHJ1bGVUeXBlKSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCAkZGF0YSwgc2NoZW1hLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IG9wdHMsIGVyclNjaGVtYVBhdGgsIHNjaGVtYUVudiwgc2VsZiB9ID0gaXQ7XG4gICAgICAgIGlmICghb3B0cy52YWxpZGF0ZUZvcm1hdHMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICgkZGF0YSlcbiAgICAgICAgICAgIHZhbGlkYXRlJERhdGFGb3JtYXQoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdmFsaWRhdGVGb3JtYXQoKTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGUkRGF0YUZvcm1hdCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZtdHMgPSBnZW4uc2NvcGVWYWx1ZShcImZvcm1hdHNcIiwge1xuICAgICAgICAgICAgICAgIHJlZjogc2VsZi5mb3JtYXRzLFxuICAgICAgICAgICAgICAgIGNvZGU6IG9wdHMuY29kZS5mb3JtYXRzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBmRGVmID0gZ2VuLmNvbnN0KFwiZkRlZlwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2ZtdHN9WyR7c2NoZW1hQ29kZX1dYCk7XG4gICAgICAgICAgICBjb25zdCBmVHlwZSA9IGdlbi5sZXQoXCJmVHlwZVwiKTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IGdlbi5sZXQoXCJmb3JtYXRcIik7XG4gICAgICAgICAgICAvLyBUT0RPIHNpbXBsaWZ5XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZkRlZn0gPT0gXCJvYmplY3RcIiAmJiAhKCR7ZkRlZn0gaW5zdGFuY2VvZiBSZWdFeHApYCwgKCkgPT4gZ2VuLmFzc2lnbihmVHlwZSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtmRGVmfS50eXBlIHx8IFwic3RyaW5nXCJgKS5hc3NpZ24oZm9ybWF0LCAoMCwgY29kZWdlbl8xLl8pIGAke2ZEZWZ9LnZhbGlkYXRlYCksICgpID0+IGdlbi5hc3NpZ24oZlR5cGUsICgwLCBjb2RlZ2VuXzEuXykgYFwic3RyaW5nXCJgKS5hc3NpZ24oZm9ybWF0LCBmRGVmKSk7XG4gICAgICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEub3IpKHVua25vd25GbXQoKSwgaW52YWxpZEZtdCgpKSk7XG4gICAgICAgICAgICBmdW5jdGlvbiB1bmtub3duRm10KCkge1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLnN0cmljdFNjaGVtYSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2RlZ2VuXzEubmlsO1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke3NjaGVtYUNvZGV9ICYmICEke2Zvcm1hdH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaW52YWxpZEZtdCgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxsRm9ybWF0ID0gc2NoZW1hRW52LiRhc3luY1xuICAgICAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYCgke2ZEZWZ9LmFzeW5jID8gYXdhaXQgJHtmb3JtYXR9KCR7ZGF0YX0pIDogJHtmb3JtYXR9KCR7ZGF0YX0pKWBcbiAgICAgICAgICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2Zvcm1hdH0oJHtkYXRhfSlgO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkRGF0YSA9ICgwLCBjb2RlZ2VuXzEuXykgYCh0eXBlb2YgJHtmb3JtYXR9ID09IFwiZnVuY3Rpb25cIiA/ICR7Y2FsbEZvcm1hdH0gOiAke2Zvcm1hdH0udGVzdCgke2RhdGF9KSlgO1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke2Zvcm1hdH0gJiYgJHtmb3JtYXR9ICE9PSB0cnVlICYmICR7ZlR5cGV9ID09PSAke3J1bGVUeXBlfSAmJiAhJHt2YWxpZERhdGF9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUZvcm1hdCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdERlZiA9IHNlbGYuZm9ybWF0c1tzY2hlbWFdO1xuICAgICAgICAgICAgaWYgKCFmb3JtYXREZWYpIHtcbiAgICAgICAgICAgICAgICB1bmtub3duRm9ybWF0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvcm1hdERlZiA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBbZm10VHlwZSwgZm9ybWF0LCBmbXRSZWZdID0gZ2V0Rm9ybWF0KGZvcm1hdERlZik7XG4gICAgICAgICAgICBpZiAoZm10VHlwZSA9PT0gcnVsZVR5cGUpXG4gICAgICAgICAgICAgICAgY3h0LnBhc3ModmFsaWRDb25kaXRpb24oKSk7XG4gICAgICAgICAgICBmdW5jdGlvbiB1bmtub3duRm9ybWF0KCkge1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLnN0cmljdFNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIud2Fybih1bmtub3duTXNnKCkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih1bmtub3duTXNnKCkpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHVua25vd25Nc2coKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgdW5rbm93biBmb3JtYXQgXCIke3NjaGVtYX1cIiBpZ25vcmVkIGluIHNjaGVtYSBhdCBwYXRoIFwiJHtlcnJTY2hlbWFQYXRofVwiYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRGb3JtYXQoZm10RGVmKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29kZSA9IGZtdERlZiBpbnN0YW5jZW9mIFJlZ0V4cFxuICAgICAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEucmVnZXhwQ29kZSkoZm10RGVmKVxuICAgICAgICAgICAgICAgICAgICA6IG9wdHMuY29kZS5mb3JtYXRzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7b3B0cy5jb2RlLmZvcm1hdHN9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShzY2hlbWEpfWBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZtdCA9IGdlbi5zY29wZVZhbHVlKFwiZm9ybWF0c1wiLCB7IGtleTogc2NoZW1hLCByZWY6IGZtdERlZiwgY29kZSB9KTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZtdERlZiA9PSBcIm9iamVjdFwiICYmICEoZm10RGVmIGluc3RhbmNlb2YgUmVnRXhwKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2ZtdERlZi50eXBlIHx8IFwic3RyaW5nXCIsIGZtdERlZi52YWxpZGF0ZSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtmbXR9LnZhbGlkYXRlYF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbXCJzdHJpbmdcIiwgZm10RGVmLCBmbXRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gdmFsaWRDb25kaXRpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmb3JtYXREZWYgPT0gXCJvYmplY3RcIiAmJiAhKGZvcm1hdERlZiBpbnN0YW5jZW9mIFJlZ0V4cCkgJiYgZm9ybWF0RGVmLmFzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2NoZW1hRW52LiRhc3luYylcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFzeW5jIGZvcm1hdCBpbiBzeW5jIHNjaGVtYVwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYGF3YWl0ICR7Zm10UmVmfSgke2RhdGF9KWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgZm9ybWF0ID09IFwiZnVuY3Rpb25cIiA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm10UmVmfSgke2RhdGF9KWAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2ZtdFJlZn0udGVzdCgke2RhdGF9KWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZvcm1hdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgZm9ybWF0XzEgPSByZXF1aXJlKFwiLi9mb3JtYXRcIik7XG5jb25zdCBmb3JtYXQgPSBbZm9ybWF0XzEuZGVmYXVsdF07XG5leHBvcnRzLmRlZmF1bHQgPSBmb3JtYXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb250ZW50Vm9jYWJ1bGFyeSA9IGV4cG9ydHMubWV0YWRhdGFWb2NhYnVsYXJ5ID0gdm9pZCAwO1xuZXhwb3J0cy5tZXRhZGF0YVZvY2FidWxhcnkgPSBbXG4gICAgXCJ0aXRsZVwiLFxuICAgIFwiZGVzY3JpcHRpb25cIixcbiAgICBcImRlZmF1bHRcIixcbiAgICBcImRlcHJlY2F0ZWRcIixcbiAgICBcInJlYWRPbmx5XCIsXG4gICAgXCJ3cml0ZU9ubHlcIixcbiAgICBcImV4YW1wbGVzXCIsXG5dO1xuZXhwb3J0cy5jb250ZW50Vm9jYWJ1bGFyeSA9IFtcbiAgICBcImNvbnRlbnRNZWRpYVR5cGVcIixcbiAgICBcImNvbnRlbnRFbmNvZGluZ1wiLFxuICAgIFwiY29udGVudFNjaGVtYVwiLFxuXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1ldGFkYXRhLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiLi9jb3JlXCIpO1xuY29uc3QgdmFsaWRhdGlvbl8xID0gcmVxdWlyZShcIi4vdmFsaWRhdGlvblwiKTtcbmNvbnN0IGFwcGxpY2F0b3JfMSA9IHJlcXVpcmUoXCIuL2FwcGxpY2F0b3JcIik7XG5jb25zdCBmb3JtYXRfMSA9IHJlcXVpcmUoXCIuL2Zvcm1hdFwiKTtcbmNvbnN0IG1ldGFkYXRhXzEgPSByZXF1aXJlKFwiLi9tZXRhZGF0YVwiKTtcbmNvbnN0IGRyYWZ0N1ZvY2FidWxhcmllcyA9IFtcbiAgICBjb3JlXzEuZGVmYXVsdCxcbiAgICB2YWxpZGF0aW9uXzEuZGVmYXVsdCxcbiAgICAoMCwgYXBwbGljYXRvcl8xLmRlZmF1bHQpKCksXG4gICAgZm9ybWF0XzEuZGVmYXVsdCxcbiAgICBtZXRhZGF0YV8xLm1ldGFkYXRhVm9jYWJ1bGFyeSxcbiAgICBtZXRhZGF0YV8xLmNvbnRlbnRWb2NhYnVsYXJ5LFxuXTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRyYWZ0N1ZvY2FidWxhcmllcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRyYWZ0Ny5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EaXNjckVycm9yID0gdm9pZCAwO1xudmFyIERpc2NyRXJyb3I7XG4oZnVuY3Rpb24gKERpc2NyRXJyb3IpIHtcbiAgICBEaXNjckVycm9yW1wiVGFnXCJdID0gXCJ0YWdcIjtcbiAgICBEaXNjckVycm9yW1wiTWFwcGluZ1wiXSA9IFwibWFwcGluZ1wiO1xufSkoRGlzY3JFcnJvciA9IGV4cG9ydHMuRGlzY3JFcnJvciB8fCAoZXhwb3J0cy5EaXNjckVycm9yID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuLi9kaXNjcmltaW5hdG9yL3R5cGVzXCIpO1xuY29uc3QgY29tcGlsZV8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IGRpc2NyRXJyb3IsIHRhZ05hbWUgfSB9KSA9PiBkaXNjckVycm9yID09PSB0eXBlc18xLkRpc2NyRXJyb3IuVGFnXG4gICAgICAgID8gYHRhZyBcIiR7dGFnTmFtZX1cIiBtdXN0IGJlIHN0cmluZ2BcbiAgICAgICAgOiBgdmFsdWUgb2YgdGFnIFwiJHt0YWdOYW1lfVwiIG11c3QgYmUgaW4gb25lT2ZgLFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IGRpc2NyRXJyb3IsIHRhZywgdGFnTmFtZSB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtlcnJvcjogJHtkaXNjckVycm9yfSwgdGFnOiAke3RhZ05hbWV9LCB0YWdWYWx1ZTogJHt0YWd9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiZGlzY3JpbWluYXRvclwiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgZGF0YSwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb25lT2YgfSA9IHBhcmVudFNjaGVtYTtcbiAgICAgICAgaWYgKCFpdC5vcHRzLmRpc2NyaW1pbmF0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRpc2NyaW1pbmF0b3I6IHJlcXVpcmVzIGRpc2NyaW1pbmF0b3Igb3B0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSBzY2hlbWEucHJvcGVydHlOYW1lO1xuICAgICAgICBpZiAodHlwZW9mIHRhZ05hbWUgIT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRpc2NyaW1pbmF0b3I6IHJlcXVpcmVzIHByb3BlcnR5TmFtZVwiKTtcbiAgICAgICAgaWYgKHNjaGVtYS5tYXBwaW5nKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGlzY3JpbWluYXRvcjogbWFwcGluZyBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICBpZiAoIW9uZU9mKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGlzY3JpbWluYXRvcjogcmVxdWlyZXMgb25lT2Yga2V5d29yZFwiKTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIiwgZmFsc2UpO1xuICAgICAgICBjb25zdCB0YWcgPSBnZW4uY29uc3QoXCJ0YWdcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkodGFnTmFtZSl9YCk7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHt0YWd9ID09IFwic3RyaW5nXCJgLCAoKSA9PiB2YWxpZGF0ZU1hcHBpbmcoKSwgKCkgPT4gY3h0LmVycm9yKGZhbHNlLCB7IGRpc2NyRXJyb3I6IHR5cGVzXzEuRGlzY3JFcnJvci5UYWcsIHRhZywgdGFnTmFtZSB9KSk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlTWFwcGluZygpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcHBpbmcgPSBnZXRNYXBwaW5nKCk7XG4gICAgICAgICAgICBnZW4uaWYoZmFsc2UpO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0YWdWYWx1ZSBpbiBtYXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgZ2VuLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke3RhZ30gPT09ICR7dGFnVmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgYXBwbHlUYWdTY2hlbWEobWFwcGluZ1t0YWdWYWx1ZV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdlbi5lbHNlKCk7XG4gICAgICAgICAgICBjeHQuZXJyb3IoZmFsc2UsIHsgZGlzY3JFcnJvcjogdHlwZXNfMS5EaXNjckVycm9yLk1hcHBpbmcsIHRhZywgdGFnTmFtZSB9KTtcbiAgICAgICAgICAgIGdlbi5lbmRJZigpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5VGFnU2NoZW1hKHNjaGVtYVByb3ApIHtcbiAgICAgICAgICAgIGNvbnN0IF92YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHsga2V5d29yZDogXCJvbmVPZlwiLCBzY2hlbWFQcm9wIH0sIF92YWxpZCk7XG4gICAgICAgICAgICBjeHQubWVyZ2VFdmFsdWF0ZWQoc2NoQ3h0LCBjb2RlZ2VuXzEuTmFtZSk7XG4gICAgICAgICAgICByZXR1cm4gX3ZhbGlkO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldE1hcHBpbmcoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBvbmVPZk1hcHBpbmcgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IHRvcFJlcXVpcmVkID0gaGFzUmVxdWlyZWQocGFyZW50U2NoZW1hKTtcbiAgICAgICAgICAgIGxldCB0YWdSZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9uZU9mLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNjaCA9IG9uZU9mW2ldO1xuICAgICAgICAgICAgICAgIGlmICgoc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLiRyZWYpICYmICEoMCwgdXRpbF8xLnNjaGVtYUhhc1J1bGVzQnV0UmVmKShzY2gsIGl0LnNlbGYuUlVMRVMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjaCA9IGNvbXBpbGVfMS5yZXNvbHZlUmVmLmNhbGwoaXQuc2VsZiwgaXQuc2NoZW1hRW52LnJvb3QsIGl0LmJhc2VJZCwgc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLiRyZWYpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoIGluc3RhbmNlb2YgY29tcGlsZV8xLlNjaGVtYUVudilcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaCA9IHNjaC5zY2hlbWE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BTY2ggPSAoX2EgPSBzY2ggPT09IG51bGwgfHwgc2NoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2gucHJvcGVydGllcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW3RhZ05hbWVdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcFNjaCAhPSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZGlzY3JpbWluYXRvcjogb25lT2Ygc3Vic2NoZW1hcyAob3IgcmVmZXJlbmNlZCBzY2hlbWFzKSBtdXN0IGhhdmUgXCJwcm9wZXJ0aWVzLyR7dGFnTmFtZX1cImApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YWdSZXF1aXJlZCA9IHRhZ1JlcXVpcmVkICYmICh0b3BSZXF1aXJlZCB8fCBoYXNSZXF1aXJlZChzY2gpKTtcbiAgICAgICAgICAgICAgICBhZGRNYXBwaW5ncyhwcm9wU2NoLCBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGFnUmVxdWlyZWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBkaXNjcmltaW5hdG9yOiBcIiR7dGFnTmFtZX1cIiBtdXN0IGJlIHJlcXVpcmVkYCk7XG4gICAgICAgICAgICByZXR1cm4gb25lT2ZNYXBwaW5nO1xuICAgICAgICAgICAgZnVuY3Rpb24gaGFzUmVxdWlyZWQoeyByZXF1aXJlZCB9KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocmVxdWlyZWQpICYmIHJlcXVpcmVkLmluY2x1ZGVzKHRhZ05hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYWRkTWFwcGluZ3Moc2NoLCBpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjaC5jb25zdCkge1xuICAgICAgICAgICAgICAgICAgICBhZGRNYXBwaW5nKHNjaC5jb25zdCwgaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaC5lbnVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdGFnVmFsdWUgb2Ygc2NoLmVudW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1hcHBpbmcodGFnVmFsdWUsIGkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRpc2NyaW1pbmF0b3I6IFwicHJvcGVydGllcy8ke3RhZ05hbWV9XCIgbXVzdCBoYXZlIFwiY29uc3RcIiBvciBcImVudW1cImApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGFkZE1hcHBpbmcodGFnVmFsdWUsIGkpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRhZ1ZhbHVlICE9IFwic3RyaW5nXCIgfHwgdGFnVmFsdWUgaW4gb25lT2ZNYXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZGlzY3JpbWluYXRvcjogXCIke3RhZ05hbWV9XCIgdmFsdWVzIG11c3QgYmUgdW5pcXVlIHN0cmluZ3NgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb25lT2ZNYXBwaW5nW3RhZ1ZhbHVlXSA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1pc3NpbmdSZWZFcnJvciA9IGV4cG9ydHMuVmFsaWRhdGlvbkVycm9yID0gZXhwb3J0cy5Db2RlR2VuID0gZXhwb3J0cy5OYW1lID0gZXhwb3J0cy5uaWwgPSBleHBvcnRzLnN0cmluZ2lmeSA9IGV4cG9ydHMuc3RyID0gZXhwb3J0cy5fID0gZXhwb3J0cy5LZXl3b3JkQ3h0ID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIi4vY29yZVwiKTtcbmNvbnN0IGRyYWZ0N18xID0gcmVxdWlyZShcIi4vdm9jYWJ1bGFyaWVzL2RyYWZ0N1wiKTtcbmNvbnN0IGRpc2NyaW1pbmF0b3JfMSA9IHJlcXVpcmUoXCIuL3ZvY2FidWxhcmllcy9kaXNjcmltaW5hdG9yXCIpO1xuY29uc3QgZHJhZnQ3TWV0YVNjaGVtYSA9IHJlcXVpcmUoXCIuL3JlZnMvanNvbi1zY2hlbWEtZHJhZnQtMDcuanNvblwiKTtcbmNvbnN0IE1FVEFfU1VQUE9SVF9EQVRBID0gW1wiL3Byb3BlcnRpZXNcIl07XG5jb25zdCBNRVRBX1NDSEVNQV9JRCA9IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWFcIjtcbmNsYXNzIEFqdiBleHRlbmRzIGNvcmVfMS5kZWZhdWx0IHtcbiAgICBfYWRkVm9jYWJ1bGFyaWVzKCkge1xuICAgICAgICBzdXBlci5fYWRkVm9jYWJ1bGFyaWVzKCk7XG4gICAgICAgIGRyYWZ0N18xLmRlZmF1bHQuZm9yRWFjaCgodikgPT4gdGhpcy5hZGRWb2NhYnVsYXJ5KHYpKTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5kaXNjcmltaW5hdG9yKVxuICAgICAgICAgICAgdGhpcy5hZGRLZXl3b3JkKGRpc2NyaW1pbmF0b3JfMS5kZWZhdWx0KTtcbiAgICB9XG4gICAgX2FkZERlZmF1bHRNZXRhU2NoZW1hKCkge1xuICAgICAgICBzdXBlci5fYWRkRGVmYXVsdE1ldGFTY2hlbWEoKTtcbiAgICAgICAgaWYgKCF0aGlzLm9wdHMubWV0YSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbWV0YVNjaGVtYSA9IHRoaXMub3B0cy4kZGF0YVxuICAgICAgICAgICAgPyB0aGlzLiRkYXRhTWV0YVNjaGVtYShkcmFmdDdNZXRhU2NoZW1hLCBNRVRBX1NVUFBPUlRfREFUQSlcbiAgICAgICAgICAgIDogZHJhZnQ3TWV0YVNjaGVtYTtcbiAgICAgICAgdGhpcy5hZGRNZXRhU2NoZW1hKG1ldGFTY2hlbWEsIE1FVEFfU0NIRU1BX0lELCBmYWxzZSk7XG4gICAgICAgIHRoaXMucmVmc1tcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvc2NoZW1hXCJdID0gTUVUQV9TQ0hFTUFfSUQ7XG4gICAgfVxuICAgIGRlZmF1bHRNZXRhKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMub3B0cy5kZWZhdWx0TWV0YSA9XG4gICAgICAgICAgICBzdXBlci5kZWZhdWx0TWV0YSgpIHx8ICh0aGlzLmdldFNjaGVtYShNRVRBX1NDSEVNQV9JRCkgPyBNRVRBX1NDSEVNQV9JRCA6IHVuZGVmaW5lZCkpO1xuICAgIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IEFqdjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IEFqdjtcbnZhciB2YWxpZGF0ZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS92YWxpZGF0ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIktleXdvcmRDeHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbGlkYXRlXzEuS2V5d29yZEN4dDsgfSB9KTtcbnZhciBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL2NvZGVnZW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuXzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0clwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ2lmeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cmluZ2lmeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5pbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLm5pbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5OYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29kZUdlblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLkNvZGVHZW47IH0gfSk7XG52YXIgdmFsaWRhdGlvbl9lcnJvcl8xID0gcmVxdWlyZShcIi4vcnVudGltZS92YWxpZGF0aW9uX2Vycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVmFsaWRhdGlvbkVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWxpZGF0aW9uX2Vycm9yXzEuZGVmYXVsdDsgfSB9KTtcbnZhciByZWZfZXJyb3JfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcmVmX2Vycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTWlzc2luZ1JlZkVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZfZXJyb3JfMS5kZWZhdWx0OyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWp2LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZvcm1hdExpbWl0RGVmaW5pdGlvbiA9IHZvaWQgMDtcbmNvbnN0IGFqdl8xID0gcmVxdWlyZShcImFqdlwiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCJhanYvZGlzdC9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBvcHMgPSBjb2RlZ2VuXzEub3BlcmF0b3JzO1xuY29uc3QgS1dEcyA9IHtcbiAgICBmb3JtYXRNYXhpbXVtOiB7IG9rU3RyOiBcIjw9XCIsIG9rOiBvcHMuTFRFLCBmYWlsOiBvcHMuR1QgfSxcbiAgICBmb3JtYXRNaW5pbXVtOiB7IG9rU3RyOiBcIj49XCIsIG9rOiBvcHMuR1RFLCBmYWlsOiBvcHMuTFQgfSxcbiAgICBmb3JtYXRFeGNsdXNpdmVNYXhpbXVtOiB7IG9rU3RyOiBcIjxcIiwgb2s6IG9wcy5MVCwgZmFpbDogb3BzLkdURSB9LFxuICAgIGZvcm1hdEV4Y2x1c2l2ZU1pbmltdW06IHsgb2tTdHI6IFwiPlwiLCBvazogb3BzLkdULCBmYWlsOiBvcHMuTFRFIH0sXG59O1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSA9PiBjb2RlZ2VuXzEuc3RyIGBzaG91bGQgYmUgJHtLV0RzW2tleXdvcmRdLm9rU3RyfSAke3NjaGVtYUNvZGV9YCxcbiAgICBwYXJhbXM6ICh7IGtleXdvcmQsIHNjaGVtYUNvZGUgfSkgPT4gY29kZWdlbl8xLl8gYHtjb21wYXJpc29uOiAke0tXRHNba2V5d29yZF0ub2tTdHJ9LCBsaW1pdDogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmV4cG9ydHMuZm9ybWF0TGltaXREZWZpbml0aW9uID0ge1xuICAgIGtleXdvcmQ6IE9iamVjdC5rZXlzKEtXRHMpLFxuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgc2NoZW1hVHlwZTogXCJzdHJpbmdcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgZGF0YSwgc2NoZW1hQ29kZSwga2V5d29yZCwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICAgICAgaWYgKCFvcHRzLnZhbGlkYXRlRm9ybWF0cylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgZkN4dCA9IG5ldyBhanZfMS5LZXl3b3JkQ3h0KGl0LCBzZWxmLlJVTEVTLmFsbC5mb3JtYXQuZGVmaW5pdGlvbiwgXCJmb3JtYXRcIik7XG4gICAgICAgIGlmIChmQ3h0LiRkYXRhKVxuICAgICAgICAgICAgdmFsaWRhdGUkRGF0YUZvcm1hdCgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB2YWxpZGF0ZUZvcm1hdCgpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZSREYXRhRm9ybWF0KCkge1xuICAgICAgICAgICAgY29uc3QgZm10cyA9IGdlbi5zY29wZVZhbHVlKFwiZm9ybWF0c1wiLCB7XG4gICAgICAgICAgICAgICAgcmVmOiBzZWxmLmZvcm1hdHMsXG4gICAgICAgICAgICAgICAgY29kZTogb3B0cy5jb2RlLmZvcm1hdHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZtdCA9IGdlbi5jb25zdChcImZtdFwiLCBjb2RlZ2VuXzEuXyBgJHtmbXRzfVske2ZDeHQuc2NoZW1hQ29kZX1dYCk7XG4gICAgICAgICAgICBjeHQuZmFpbCRkYXRhKGNvZGVnZW5fMS5vcihjb2RlZ2VuXzEuXyBgdHlwZW9mICR7Zm10fSAhPSBcIm9iamVjdFwiYCwgY29kZWdlbl8xLl8gYCR7Zm10fSBpbnN0YW5jZW9mIFJlZ0V4cGAsIGNvZGVnZW5fMS5fIGB0eXBlb2YgJHtmbXR9LmNvbXBhcmUgIT0gXCJmdW5jdGlvblwiYCwgY29tcGFyZUNvZGUoZm10KSkpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0KCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gZkN4dC5zY2hlbWE7XG4gICAgICAgICAgICBjb25zdCBmbXREZWYgPSBzZWxmLmZvcm1hdHNbZm9ybWF0XTtcbiAgICAgICAgICAgIGlmICghZm10RGVmIHx8IGZtdERlZiA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZtdERlZiAhPSBcIm9iamVjdFwiIHx8XG4gICAgICAgICAgICAgICAgZm10RGVmIGluc3RhbmNlb2YgUmVnRXhwIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIGZtdERlZi5jb21wYXJlICE9IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgXCIke2tleXdvcmR9XCI6IGZvcm1hdCBcIiR7Zm9ybWF0fVwiIGRvZXMgbm90IGRlZmluZSBcImNvbXBhcmVcIiBmdW5jdGlvbmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZm10ID0gZ2VuLnNjb3BlVmFsdWUoXCJmb3JtYXRzXCIsIHtcbiAgICAgICAgICAgICAgICBrZXk6IGZvcm1hdCxcbiAgICAgICAgICAgICAgICByZWY6IGZtdERlZixcbiAgICAgICAgICAgICAgICBjb2RlOiBvcHRzLmNvZGUuZm9ybWF0cyA/IGNvZGVnZW5fMS5fIGAke29wdHMuY29kZS5mb3JtYXRzfSR7Y29kZWdlbl8xLmdldFByb3BlcnR5KGZvcm1hdCl9YCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY3h0LmZhaWwkZGF0YShjb21wYXJlQ29kZShmbXQpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjb21wYXJlQ29kZShmbXQpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2RlZ2VuXzEuXyBgJHtmbXR9LmNvbXBhcmUoJHtkYXRhfSwgJHtzY2hlbWFDb2RlfSkgJHtLV0RzW2tleXdvcmRdLmZhaWx9IDBgO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFtcImZvcm1hdFwiXSxcbn07XG5jb25zdCBmb3JtYXRMaW1pdFBsdWdpbiA9IChhanYpID0+IHtcbiAgICBhanYuYWRkS2V5d29yZChleHBvcnRzLmZvcm1hdExpbWl0RGVmaW5pdGlvbik7XG4gICAgcmV0dXJuIGFqdjtcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBmb3JtYXRMaW1pdFBsdWdpbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxpbWl0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBmb3JtYXRzXzEgPSByZXF1aXJlKFwiLi9mb3JtYXRzXCIpO1xuY29uc3QgbGltaXRfMSA9IHJlcXVpcmUoXCIuL2xpbWl0XCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcImFqdi9kaXN0L2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGZ1bGxOYW1lID0gbmV3IGNvZGVnZW5fMS5OYW1lKFwiZnVsbEZvcm1hdHNcIik7XG5jb25zdCBmYXN0TmFtZSA9IG5ldyBjb2RlZ2VuXzEuTmFtZShcImZhc3RGb3JtYXRzXCIpO1xuY29uc3QgZm9ybWF0c1BsdWdpbiA9IChhanYsIG9wdHMgPSB7IGtleXdvcmRzOiB0cnVlIH0pID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRzKSkge1xuICAgICAgICBhZGRGb3JtYXRzKGFqdiwgb3B0cywgZm9ybWF0c18xLmZ1bGxGb3JtYXRzLCBmdWxsTmFtZSk7XG4gICAgICAgIHJldHVybiBhanY7XG4gICAgfVxuICAgIGNvbnN0IFtmb3JtYXRzLCBleHBvcnROYW1lXSA9IG9wdHMubW9kZSA9PT0gXCJmYXN0XCIgPyBbZm9ybWF0c18xLmZhc3RGb3JtYXRzLCBmYXN0TmFtZV0gOiBbZm9ybWF0c18xLmZ1bGxGb3JtYXRzLCBmdWxsTmFtZV07XG4gICAgY29uc3QgbGlzdCA9IG9wdHMuZm9ybWF0cyB8fCBmb3JtYXRzXzEuZm9ybWF0TmFtZXM7XG4gICAgYWRkRm9ybWF0cyhhanYsIGxpc3QsIGZvcm1hdHMsIGV4cG9ydE5hbWUpO1xuICAgIGlmIChvcHRzLmtleXdvcmRzKVxuICAgICAgICBsaW1pdF8xLmRlZmF1bHQoYWp2KTtcbiAgICByZXR1cm4gYWp2O1xufTtcbmZvcm1hdHNQbHVnaW4uZ2V0ID0gKG5hbWUsIG1vZGUgPSBcImZ1bGxcIikgPT4ge1xuICAgIGNvbnN0IGZvcm1hdHMgPSBtb2RlID09PSBcImZhc3RcIiA/IGZvcm1hdHNfMS5mYXN0Rm9ybWF0cyA6IGZvcm1hdHNfMS5mdWxsRm9ybWF0cztcbiAgICBjb25zdCBmID0gZm9ybWF0c1tuYW1lXTtcbiAgICBpZiAoIWYpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBmb3JtYXQgXCIke25hbWV9XCJgKTtcbiAgICByZXR1cm4gZjtcbn07XG5mdW5jdGlvbiBhZGRGb3JtYXRzKGFqdiwgbGlzdCwgZnMsIGV4cG9ydE5hbWUpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIF9iO1xuICAgIChfYSA9IChfYiA9IGFqdi5vcHRzLmNvZGUpLmZvcm1hdHMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IChfYi5mb3JtYXRzID0gY29kZWdlbl8xLl8gYHJlcXVpcmUoXCJhanYtZm9ybWF0cy9kaXN0L2Zvcm1hdHNcIikuJHtleHBvcnROYW1lfWApO1xuICAgIGZvciAoY29uc3QgZiBvZiBsaXN0KVxuICAgICAgICBhanYuYWRkRm9ybWF0KGYsIGZzW2ZdKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZvcm1hdHNQbHVnaW47XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHQgPSBmb3JtYXRzUGx1Z2luO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290Lm5lYXJsZXkgPSBmYWN0b3J5KCk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbigpIHtcblxuICAgIGZ1bmN0aW9uIFJ1bGUobmFtZSwgc3ltYm9scywgcG9zdHByb2Nlc3MpIHtcbiAgICAgICAgdGhpcy5pZCA9ICsrUnVsZS5oaWdoZXN0SWQ7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuc3ltYm9scyA9IHN5bWJvbHM7ICAgICAgICAvLyBhIGxpc3Qgb2YgbGl0ZXJhbCB8IHJlZ2V4IGNsYXNzIHwgbm9udGVybWluYWxcbiAgICAgICAgdGhpcy5wb3N0cHJvY2VzcyA9IHBvc3Rwcm9jZXNzO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgUnVsZS5oaWdoZXN0SWQgPSAwO1xuXG4gICAgUnVsZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbih3aXRoQ3Vyc29yQXQpIHtcbiAgICAgICAgdmFyIHN5bWJvbFNlcXVlbmNlID0gKHR5cGVvZiB3aXRoQ3Vyc29yQXQgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5zeW1ib2xzLm1hcChnZXRTeW1ib2xTaG9ydERpc3BsYXkpLmpvaW4oJyAnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICggICB0aGlzLnN5bWJvbHMuc2xpY2UoMCwgd2l0aEN1cnNvckF0KS5tYXAoZ2V0U3ltYm9sU2hvcnREaXNwbGF5KS5qb2luKCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgXCIg4pePIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHRoaXMuc3ltYm9scy5zbGljZSh3aXRoQ3Vyc29yQXQpLm1hcChnZXRTeW1ib2xTaG9ydERpc3BsYXkpLmpvaW4oJyAnKSAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZSArIFwiIOKGkiBcIiArIHN5bWJvbFNlcXVlbmNlO1xuICAgIH1cblxuXG4gICAgLy8gYSBTdGF0ZSBpcyBhIHJ1bGUgYXQgYSBwb3NpdGlvbiBmcm9tIGEgZ2l2ZW4gc3RhcnRpbmcgcG9pbnQgaW4gdGhlIGlucHV0IHN0cmVhbSAocmVmZXJlbmNlKVxuICAgIGZ1bmN0aW9uIFN0YXRlKHJ1bGUsIGRvdCwgcmVmZXJlbmNlLCB3YW50ZWRCeSkge1xuICAgICAgICB0aGlzLnJ1bGUgPSBydWxlO1xuICAgICAgICB0aGlzLmRvdCA9IGRvdDtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgICAgICB0aGlzLndhbnRlZEJ5ID0gd2FudGVkQnk7XG4gICAgICAgIHRoaXMuaXNDb21wbGV0ZSA9IHRoaXMuZG90ID09PSBydWxlLnN5bWJvbHMubGVuZ3RoO1xuICAgIH1cblxuICAgIFN0YXRlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gXCJ7XCIgKyB0aGlzLnJ1bGUudG9TdHJpbmcodGhpcy5kb3QpICsgXCJ9LCBmcm9tOiBcIiArICh0aGlzLnJlZmVyZW5jZSB8fCAwKTtcbiAgICB9O1xuXG4gICAgU3RhdGUucHJvdG90eXBlLm5leHRTdGF0ZSA9IGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IG5ldyBTdGF0ZSh0aGlzLnJ1bGUsIHRoaXMuZG90ICsgMSwgdGhpcy5yZWZlcmVuY2UsIHRoaXMud2FudGVkQnkpO1xuICAgICAgICBzdGF0ZS5sZWZ0ID0gdGhpcztcbiAgICAgICAgc3RhdGUucmlnaHQgPSBjaGlsZDtcbiAgICAgICAgaWYgKHN0YXRlLmlzQ29tcGxldGUpIHtcbiAgICAgICAgICAgIHN0YXRlLmRhdGEgPSBzdGF0ZS5idWlsZCgpO1xuICAgICAgICAgICAgLy8gSGF2aW5nIHJpZ2h0IHNldCBoZXJlIHdpbGwgcHJldmVudCB0aGUgcmlnaHQgc3RhdGUgYW5kIGl0cyBjaGlsZHJlblxuICAgICAgICAgICAgLy8gZm9ybSBiZWluZyBnYXJiYWdlIGNvbGxlY3RlZFxuICAgICAgICAgICAgc3RhdGUucmlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH07XG5cbiAgICBTdGF0ZS5wcm90b3R5cGUuYnVpbGQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gW107XG4gICAgICAgIHZhciBub2RlID0gdGhpcztcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChub2RlLnJpZ2h0LmRhdGEpO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUubGVmdDtcbiAgICAgICAgfSB3aGlsZSAobm9kZS5sZWZ0KTtcbiAgICAgICAgY2hpbGRyZW4ucmV2ZXJzZSgpO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgfTtcblxuICAgIFN0YXRlLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMucnVsZS5wb3N0cHJvY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5ydWxlLnBvc3Rwcm9jZXNzKHRoaXMuZGF0YSwgdGhpcy5yZWZlcmVuY2UsIFBhcnNlci5mYWlsKTtcbiAgICAgICAgfVxuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIENvbHVtbihncmFtbWFyLCBpbmRleCkge1xuICAgICAgICB0aGlzLmdyYW1tYXIgPSBncmFtbWFyO1xuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMuc3RhdGVzID0gW107XG4gICAgICAgIHRoaXMud2FudHMgPSB7fTsgLy8gc3RhdGVzIGluZGV4ZWQgYnkgdGhlIG5vbi10ZXJtaW5hbCB0aGV5IGV4cGVjdFxuICAgICAgICB0aGlzLnNjYW5uYWJsZSA9IFtdOyAvLyBsaXN0IG9mIHN0YXRlcyB0aGF0IGV4cGVjdCBhIHRva2VuXG4gICAgICAgIHRoaXMuY29tcGxldGVkID0ge307IC8vIHN0YXRlcyB0aGF0IGFyZSBudWxsYWJsZVxuICAgIH1cblxuXG4gICAgQ29sdW1uLnByb3RvdHlwZS5wcm9jZXNzID0gZnVuY3Rpb24obmV4dENvbHVtbikge1xuICAgICAgICB2YXIgc3RhdGVzID0gdGhpcy5zdGF0ZXM7XG4gICAgICAgIHZhciB3YW50cyA9IHRoaXMud2FudHM7XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSB0aGlzLmNvbXBsZXRlZDtcblxuICAgICAgICBmb3IgKHZhciB3ID0gMDsgdyA8IHN0YXRlcy5sZW5ndGg7IHcrKykgeyAvLyBuYi4gd2UgcHVzaCgpIGR1cmluZyBpdGVyYXRpb25cbiAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0YXRlc1t3XTtcblxuICAgICAgICAgICAgaWYgKHN0YXRlLmlzQ29tcGxldGUpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5maW5pc2goKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZGF0YSAhPT0gUGFyc2VyLmZhaWwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29tcGxldGVcbiAgICAgICAgICAgICAgICAgICAgdmFyIHdhbnRlZEJ5ID0gc3RhdGUud2FudGVkQnk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSB3YW50ZWRCeS5sZW5ndGg7IGktLTsgKSB7IC8vIHRoaXMgbGluZSBpcyBob3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gd2FudGVkQnlbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlKGxlZnQsIHN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwtY2FzZSBudWxsYWJsZXNcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLnJlZmVyZW5jZSA9PT0gdGhpcy5pbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGZ1dHVyZSBwcmVkaWN0b3JzIG9mIHRoaXMgcnVsZSBnZXQgY29tcGxldGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV4cCA9IHN0YXRlLnJ1bGUubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmNvbXBsZXRlZFtleHBdID0gdGhpcy5jb21wbGV0ZWRbZXhwXSB8fCBbXSkucHVzaChzdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gcXVldWUgc2Nhbm5hYmxlIHN0YXRlc1xuICAgICAgICAgICAgICAgIHZhciBleHAgPSBzdGF0ZS5ydWxlLnN5bWJvbHNbc3RhdGUuZG90XTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGV4cCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2FubmFibGUucHVzaChzdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHByZWRpY3RcbiAgICAgICAgICAgICAgICBpZiAod2FudHNbZXhwXSkge1xuICAgICAgICAgICAgICAgICAgICB3YW50c1tleHBdLnB1c2goc3RhdGUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQuaGFzT3duUHJvcGVydHkoZXhwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bGxzID0gY29tcGxldGVkW2V4cF07XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJpZ2h0ID0gbnVsbHNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZShzdGF0ZSwgcmlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgd2FudHNbZXhwXSA9IFtzdGF0ZV07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJlZGljdChleHApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIENvbHVtbi5wcm90b3R5cGUucHJlZGljdCA9IGZ1bmN0aW9uKGV4cCkge1xuICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLmdyYW1tYXIuYnlOYW1lW2V4cF0gfHwgW107XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHIgPSBydWxlc1tpXTtcbiAgICAgICAgICAgIHZhciB3YW50ZWRCeSA9IHRoaXMud2FudHNbZXhwXTtcbiAgICAgICAgICAgIHZhciBzID0gbmV3IFN0YXRlKHIsIDAsIHRoaXMuaW5kZXgsIHdhbnRlZEJ5KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVzLnB1c2gocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBDb2x1bW4ucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICAgICAgdmFyIGNvcHkgPSBsZWZ0Lm5leHRTdGF0ZShyaWdodCk7XG4gICAgICAgIHRoaXMuc3RhdGVzLnB1c2goY29weSk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBHcmFtbWFyKHJ1bGVzLCBzdGFydCkge1xuICAgICAgICB0aGlzLnJ1bGVzID0gcnVsZXM7XG4gICAgICAgIHRoaXMuc3RhcnQgPSBzdGFydCB8fCB0aGlzLnJ1bGVzWzBdLm5hbWU7XG4gICAgICAgIHZhciBieU5hbWUgPSB0aGlzLmJ5TmFtZSA9IHt9O1xuICAgICAgICB0aGlzLnJ1bGVzLmZvckVhY2goZnVuY3Rpb24ocnVsZSkge1xuICAgICAgICAgICAgaWYgKCFieU5hbWUuaGFzT3duUHJvcGVydHkocnVsZS5uYW1lKSkge1xuICAgICAgICAgICAgICAgIGJ5TmFtZVtydWxlLm5hbWVdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBieU5hbWVbcnVsZS5uYW1lXS5wdXNoKHJ1bGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBTbyB3ZSBjYW4gYWxsb3cgcGFzc2luZyAocnVsZXMsIHN0YXJ0KSBkaXJlY3RseSB0byBQYXJzZXIgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgR3JhbW1hci5mcm9tQ29tcGlsZWQgPSBmdW5jdGlvbihydWxlcywgc3RhcnQpIHtcbiAgICAgICAgdmFyIGxleGVyID0gcnVsZXMuTGV4ZXI7XG4gICAgICAgIGlmIChydWxlcy5QYXJzZXJTdGFydCkge1xuICAgICAgICAgIHN0YXJ0ID0gcnVsZXMuUGFyc2VyU3RhcnQ7XG4gICAgICAgICAgcnVsZXMgPSBydWxlcy5QYXJzZXJSdWxlcztcbiAgICAgICAgfVxuICAgICAgICB2YXIgcnVsZXMgPSBydWxlcy5tYXAoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIChuZXcgUnVsZShyLm5hbWUsIHIuc3ltYm9scywgci5wb3N0cHJvY2VzcykpOyB9KTtcbiAgICAgICAgdmFyIGcgPSBuZXcgR3JhbW1hcihydWxlcywgc3RhcnQpO1xuICAgICAgICBnLmxleGVyID0gbGV4ZXI7IC8vIG5iLiBzdG9yaW5nIGxleGVyIG9uIEdyYW1tYXIgaXMgaWZmeSwgYnV0IHVuYXZvaWRhYmxlXG4gICAgICAgIHJldHVybiBnO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gU3RyZWFtTGV4ZXIoKSB7XG4gICAgICB0aGlzLnJlc2V0KFwiXCIpO1xuICAgIH1cblxuICAgIFN0cmVhbUxleGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKGRhdGEsIHN0YXRlKSB7XG4gICAgICAgIHRoaXMuYnVmZmVyID0gZGF0YTtcbiAgICAgICAgdGhpcy5pbmRleCA9IDA7XG4gICAgICAgIHRoaXMubGluZSA9IHN0YXRlID8gc3RhdGUubGluZSA6IDE7XG4gICAgICAgIHRoaXMubGFzdExpbmVCcmVhayA9IHN0YXRlID8gLXN0YXRlLmNvbCA6IDA7XG4gICAgfVxuXG4gICAgU3RyZWFtTGV4ZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5kZXggPCB0aGlzLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuYnVmZmVyW3RoaXMuaW5kZXgrK107XG4gICAgICAgICAgICBpZiAoY2ggPT09ICdcXG4nKSB7XG4gICAgICAgICAgICAgIHRoaXMubGluZSArPSAxO1xuICAgICAgICAgICAgICB0aGlzLmxhc3RMaW5lQnJlYWsgPSB0aGlzLmluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogY2h9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgU3RyZWFtTGV4ZXIucHJvdG90eXBlLnNhdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxpbmU6IHRoaXMubGluZSxcbiAgICAgICAgY29sOiB0aGlzLmluZGV4IC0gdGhpcy5sYXN0TGluZUJyZWFrLFxuICAgICAgfVxuICAgIH1cblxuICAgIFN0cmVhbUxleGVyLnByb3RvdHlwZS5mb3JtYXRFcnJvciA9IGZ1bmN0aW9uKHRva2VuLCBtZXNzYWdlKSB7XG4gICAgICAgIC8vIG5iLiB0aGlzIGdldHMgY2FsbGVkIGFmdGVyIGNvbnN1bWluZyB0aGUgb2ZmZW5kaW5nIHRva2VuLFxuICAgICAgICAvLyBzbyB0aGUgY3VscHJpdCBpcyBpbmRleC0xXG4gICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcbiAgICAgICAgaWYgKHR5cGVvZiBidWZmZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YXIgbGluZXMgPSBidWZmZXJcbiAgICAgICAgICAgICAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAgICAgICAgICAgICAuc2xpY2UoXG4gICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KDAsIHRoaXMubGluZSAtIDUpLCBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdmFyIG5leHRMaW5lQnJlYWsgPSBidWZmZXIuaW5kZXhPZignXFxuJywgdGhpcy5pbmRleCk7XG4gICAgICAgICAgICBpZiAobmV4dExpbmVCcmVhayA9PT0gLTEpIG5leHRMaW5lQnJlYWsgPSBidWZmZXIubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGNvbCA9IHRoaXMuaW5kZXggLSB0aGlzLmxhc3RMaW5lQnJlYWs7XG4gICAgICAgICAgICB2YXIgbGFzdExpbmVEaWdpdHMgPSBTdHJpbmcodGhpcy5saW5lKS5sZW5ndGg7XG4gICAgICAgICAgICBtZXNzYWdlICs9IFwiIGF0IGxpbmUgXCIgKyB0aGlzLmxpbmUgKyBcIiBjb2wgXCIgKyBjb2wgKyBcIjpcXG5cXG5cIjtcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gbGluZXNcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uKGxpbmUsIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhZCh0aGlzLmxpbmUgLSBsaW5lcy5sZW5ndGggKyBpICsgMSwgbGFzdExpbmVEaWdpdHMpICsgXCIgXCIgKyBsaW5lO1xuICAgICAgICAgICAgICAgIH0sIHRoaXMpXG4gICAgICAgICAgICAgICAgLmpvaW4oXCJcXG5cIik7XG4gICAgICAgICAgICBtZXNzYWdlICs9IFwiXFxuXCIgKyBwYWQoXCJcIiwgbGFzdExpbmVEaWdpdHMgKyBjb2wpICsgXCJeXFxuXCI7XG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlICsgXCIgYXQgaW5kZXggXCIgKyAodGhpcy5pbmRleCAtIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcGFkKG4sIGxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIHMgPSBTdHJpbmcobik7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkobGVuZ3RoIC0gcy5sZW5ndGggKyAxKS5qb2luKFwiIFwiKSArIHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBQYXJzZXIocnVsZXMsIHN0YXJ0LCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChydWxlcyBpbnN0YW5jZW9mIEdyYW1tYXIpIHtcbiAgICAgICAgICAgIHZhciBncmFtbWFyID0gcnVsZXM7XG4gICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHN0YXJ0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGdyYW1tYXIgPSBHcmFtbWFyLmZyb21Db21waWxlZChydWxlcywgc3RhcnQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JhbW1hciA9IGdyYW1tYXI7XG5cbiAgICAgICAgLy8gUmVhZCBvcHRpb25zXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtlZXBIaXN0b3J5OiBmYWxzZSxcbiAgICAgICAgICAgIGxleGVyOiBncmFtbWFyLmxleGVyIHx8IG5ldyBTdHJlYW1MZXhlcixcbiAgICAgICAgfTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIChvcHRpb25zIHx8IHt9KSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zW2tleV0gPSBvcHRpb25zW2tleV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXR1cCBsZXhlclxuICAgICAgICB0aGlzLmxleGVyID0gdGhpcy5vcHRpb25zLmxleGVyO1xuICAgICAgICB0aGlzLmxleGVyU3RhdGUgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgLy8gU2V0dXAgYSB0YWJsZVxuICAgICAgICB2YXIgY29sdW1uID0gbmV3IENvbHVtbihncmFtbWFyLCAwKTtcbiAgICAgICAgdmFyIHRhYmxlID0gdGhpcy50YWJsZSA9IFtjb2x1bW5dO1xuXG4gICAgICAgIC8vIEkgY291bGQgYmUgZXhwZWN0aW5nIGFueXRoaW5nLlxuICAgICAgICBjb2x1bW4ud2FudHNbZ3JhbW1hci5zdGFydF0gPSBbXTtcbiAgICAgICAgY29sdW1uLnByZWRpY3QoZ3JhbW1hci5zdGFydCk7XG4gICAgICAgIC8vIFRPRE8gd2hhdCBpZiBzdGFydCBydWxlIGlzIG51bGxhYmxlP1xuICAgICAgICBjb2x1bW4ucHJvY2VzcygpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSAwOyAvLyB0b2tlbiBpbmRleFxuICAgIH1cblxuICAgIC8vIGNyZWF0ZSBhIHJlc2VydmVkIHRva2VuIGZvciBpbmRpY2F0aW5nIGEgcGFyc2UgZmFpbFxuICAgIFBhcnNlci5mYWlsID0ge307XG5cbiAgICBQYXJzZXIucHJvdG90eXBlLmZlZWQgPSBmdW5jdGlvbihjaHVuaykge1xuICAgICAgICB2YXIgbGV4ZXIgPSB0aGlzLmxleGVyO1xuICAgICAgICBsZXhlci5yZXNldChjaHVuaywgdGhpcy5sZXhlclN0YXRlKTtcblxuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRva2VuID0gbGV4ZXIubmV4dCgpO1xuICAgICAgICAgICAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgbmV4dCBjb2x1bW4gc28gdGhhdCB0aGUgZXJyb3IgcmVwb3J0ZXJcbiAgICAgICAgICAgICAgICAvLyBjYW4gZGlzcGxheSB0aGUgY29ycmVjdGx5IHByZWRpY3RlZCBzdGF0ZXMuXG4gICAgICAgICAgICAgICAgdmFyIG5leHRDb2x1bW4gPSBuZXcgQ29sdW1uKHRoaXMuZ3JhbW1hciwgdGhpcy5jdXJyZW50ICsgMSk7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5wdXNoKG5leHRDb2x1bW4pO1xuICAgICAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IodGhpcy5yZXBvcnRMZXhlckVycm9yKGUpKTtcbiAgICAgICAgICAgICAgICBlcnIub2Zmc2V0ID0gdGhpcy5jdXJyZW50O1xuICAgICAgICAgICAgICAgIGVyci50b2tlbiA9IGUudG9rZW47XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2UgYWRkIG5ldyBzdGF0ZXMgdG8gdGFibGVbY3VycmVudCsxXVxuICAgICAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMudGFibGVbdGhpcy5jdXJyZW50XTtcblxuICAgICAgICAgICAgLy8gR0MgdW51c2VkIHN0YXRlc1xuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMua2VlcEhpc3RvcnkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy50YWJsZVt0aGlzLmN1cnJlbnQgLSAxXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG4gPSB0aGlzLmN1cnJlbnQgKyAxO1xuICAgICAgICAgICAgdmFyIG5leHRDb2x1bW4gPSBuZXcgQ29sdW1uKHRoaXMuZ3JhbW1hciwgbik7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLnB1c2gobmV4dENvbHVtbik7XG5cbiAgICAgICAgICAgIC8vIEFkdmFuY2UgYWxsIHRva2VucyB0aGF0IGV4cGVjdCB0aGUgc3ltYm9sXG4gICAgICAgICAgICB2YXIgbGl0ZXJhbCA9IHRva2VuLnRleHQgIT09IHVuZGVmaW5lZCA/IHRva2VuLnRleHQgOiB0b2tlbi52YWx1ZTtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGxleGVyLmNvbnN0cnVjdG9yID09PSBTdHJlYW1MZXhlciA/IHRva2VuLnZhbHVlIDogdG9rZW47XG4gICAgICAgICAgICB2YXIgc2Nhbm5hYmxlID0gY29sdW1uLnNjYW5uYWJsZTtcbiAgICAgICAgICAgIGZvciAodmFyIHcgPSBzY2FubmFibGUubGVuZ3RoOyB3LS07ICkge1xuICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHNjYW5uYWJsZVt3XTtcbiAgICAgICAgICAgICAgICB2YXIgZXhwZWN0ID0gc3RhdGUucnVsZS5zeW1ib2xzW3N0YXRlLmRvdF07XG4gICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGNvbnN1bWUgdGhlIHRva2VuXG4gICAgICAgICAgICAgICAgLy8gZWl0aGVyIHJlZ2V4IG9yIGxpdGVyYWxcbiAgICAgICAgICAgICAgICBpZiAoZXhwZWN0LnRlc3QgPyBleHBlY3QudGVzdCh2YWx1ZSkgOlxuICAgICAgICAgICAgICAgICAgICBleHBlY3QudHlwZSA/IGV4cGVjdC50eXBlID09PSB0b2tlbi50eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZXhwZWN0LmxpdGVyYWwgPT09IGxpdGVyYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGl0XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gc3RhdGUubmV4dFN0YXRlKHtkYXRhOiB2YWx1ZSwgdG9rZW46IHRva2VuLCBpc1Rva2VuOiB0cnVlLCByZWZlcmVuY2U6IG4gLSAxfSk7XG4gICAgICAgICAgICAgICAgICAgIG5leHRDb2x1bW4uc3RhdGVzLnB1c2gobmV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOZXh0LCBmb3IgZWFjaCBvZiB0aGUgcnVsZXMsIHdlIGVpdGhlclxuICAgICAgICAgICAgLy8gKGEpIGNvbXBsZXRlIGl0LCBhbmQgdHJ5IHRvIHNlZSBpZiB0aGUgcmVmZXJlbmNlIHJvdyBleHBlY3RlZCB0aGF0XG4gICAgICAgICAgICAvLyAgICAgcnVsZVxuICAgICAgICAgICAgLy8gKGIpIHByZWRpY3QgdGhlIG5leHQgbm9udGVybWluYWwgaXQgZXhwZWN0cyBieSBhZGRpbmcgdGhhdFxuICAgICAgICAgICAgLy8gICAgIG5vbnRlcm1pbmFsJ3Mgc3RhcnQgc3RhdGVcbiAgICAgICAgICAgIC8vIFRvIHByZXZlbnQgZHVwbGljYXRpb24sIHdlIGFsc28ga2VlcCB0cmFjayBvZiBydWxlcyB3ZSBoYXZlIGFscmVhZHlcbiAgICAgICAgICAgIC8vIGFkZGVkXG5cbiAgICAgICAgICAgIG5leHRDb2x1bW4ucHJvY2VzcygpO1xuXG4gICAgICAgICAgICAvLyBJZiBuZWVkZWQsIHRocm93IGFuIGVycm9yOlxuICAgICAgICAgICAgaWYgKG5leHRDb2x1bW4uc3RhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIE5vIHN0YXRlcyBhdCBhbGwhIFRoaXMgaXMgbm90IGdvb2QuXG4gICAgICAgICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcih0aGlzLnJlcG9ydEVycm9yKHRva2VuKSk7XG4gICAgICAgICAgICAgICAgZXJyLm9mZnNldCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgICAgICBlcnIudG9rZW4gPSB0b2tlbjtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG1heWJlIHNhdmUgbGV4ZXIgc3RhdGVcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMua2VlcEhpc3RvcnkpIHtcbiAgICAgICAgICAgICAgY29sdW1uLmxleGVyU3RhdGUgPSBsZXhlci5zYXZlKClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgIHRoaXMubGV4ZXJTdGF0ZSA9IGxleGVyLnNhdmUoKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW5jcmVtZW50YWxseSBrZWVwIHRyYWNrIG9mIHJlc3VsdHNcbiAgICAgICAgdGhpcy5yZXN1bHRzID0gdGhpcy5maW5pc2goKTtcblxuICAgICAgICAvLyBBbGxvdyBjaGFpbmluZywgZm9yIHdoYXRldmVyIGl0J3Mgd29ydGhcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFBhcnNlci5wcm90b3R5cGUucmVwb3J0TGV4ZXJFcnJvciA9IGZ1bmN0aW9uKGxleGVyRXJyb3IpIHtcbiAgICAgICAgdmFyIHRva2VuRGlzcGxheSwgbGV4ZXJNZXNzYWdlO1xuICAgICAgICAvLyBQbGFubmluZyB0byBhZGQgYSB0b2tlbiBwcm9wZXJ0eSB0byBtb28ncyB0aHJvd24gZXJyb3JcbiAgICAgICAgLy8gZXZlbiBvbiBlcnJvcmluZyB0b2tlbnMgdG8gYmUgdXNlZCBpbiBlcnJvciBkaXNwbGF5IGJlbG93XG4gICAgICAgIHZhciB0b2tlbiA9IGxleGVyRXJyb3IudG9rZW47XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgdG9rZW5EaXNwbGF5ID0gXCJpbnB1dCBcIiArIEpTT04uc3RyaW5naWZ5KHRva2VuLnRleHRbMF0pICsgXCIgKGxleGVyIGVycm9yKVwiO1xuICAgICAgICAgICAgbGV4ZXJNZXNzYWdlID0gdGhpcy5sZXhlci5mb3JtYXRFcnJvcih0b2tlbiwgXCJTeW50YXggZXJyb3JcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b2tlbkRpc3BsYXkgPSBcImlucHV0IChsZXhlciBlcnJvcilcIjtcbiAgICAgICAgICAgIGxleGVyTWVzc2FnZSA9IGxleGVyRXJyb3IubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5yZXBvcnRFcnJvckNvbW1vbihsZXhlck1lc3NhZ2UsIHRva2VuRGlzcGxheSk7XG4gICAgfTtcblxuICAgIFBhcnNlci5wcm90b3R5cGUucmVwb3J0RXJyb3IgPSBmdW5jdGlvbih0b2tlbikge1xuICAgICAgICB2YXIgdG9rZW5EaXNwbGF5ID0gKHRva2VuLnR5cGUgPyB0b2tlbi50eXBlICsgXCIgdG9rZW46IFwiIDogXCJcIikgKyBKU09OLnN0cmluZ2lmeSh0b2tlbi52YWx1ZSAhPT0gdW5kZWZpbmVkID8gdG9rZW4udmFsdWUgOiB0b2tlbik7XG4gICAgICAgIHZhciBsZXhlck1lc3NhZ2UgPSB0aGlzLmxleGVyLmZvcm1hdEVycm9yKHRva2VuLCBcIlN5bnRheCBlcnJvclwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVwb3J0RXJyb3JDb21tb24obGV4ZXJNZXNzYWdlLCB0b2tlbkRpc3BsYXkpO1xuICAgIH07XG5cbiAgICBQYXJzZXIucHJvdG90eXBlLnJlcG9ydEVycm9yQ29tbW9uID0gZnVuY3Rpb24obGV4ZXJNZXNzYWdlLCB0b2tlbkRpc3BsYXkpIHtcbiAgICAgICAgdmFyIGxpbmVzID0gW107XG4gICAgICAgIGxpbmVzLnB1c2gobGV4ZXJNZXNzYWdlKTtcbiAgICAgICAgdmFyIGxhc3RDb2x1bW5JbmRleCA9IHRoaXMudGFibGUubGVuZ3RoIC0gMjtcbiAgICAgICAgdmFyIGxhc3RDb2x1bW4gPSB0aGlzLnRhYmxlW2xhc3RDb2x1bW5JbmRleF07XG4gICAgICAgIHZhciBleHBlY3RhbnRTdGF0ZXMgPSBsYXN0Q29sdW1uLnN0YXRlc1xuICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbihzdGF0ZSkge1xuICAgICAgICAgICAgICAgIHZhciBuZXh0U3ltYm9sID0gc3RhdGUucnVsZS5zeW1ib2xzW3N0YXRlLmRvdF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHRTeW1ib2wgJiYgdHlwZW9mIG5leHRTeW1ib2wgIT09IFwic3RyaW5nXCI7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAoZXhwZWN0YW50U3RhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgbGluZXMucHVzaCgnVW5leHBlY3RlZCAnICsgdG9rZW5EaXNwbGF5ICsgJy4gSSBkaWQgbm90IGV4cGVjdCBhbnkgbW9yZSBpbnB1dC4gSGVyZSBpcyB0aGUgc3RhdGUgb2YgbXkgcGFyc2UgdGFibGU6XFxuJyk7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlTdGF0ZVN0YWNrKGxhc3RDb2x1bW4uc3RhdGVzLCBsaW5lcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaW5lcy5wdXNoKCdVbmV4cGVjdGVkICcgKyB0b2tlbkRpc3BsYXkgKyAnLiBJbnN0ZWFkLCBJIHdhcyBleHBlY3RpbmcgdG8gc2VlIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxcbicpO1xuICAgICAgICAgICAgLy8gRGlzcGxheSBhIFwic3RhdGUgc3RhY2tcIiBmb3IgZWFjaCBleHBlY3RhbnQgc3RhdGVcbiAgICAgICAgICAgIC8vIC0gd2hpY2ggc2hvd3MgeW91IGhvdyB0aGlzIHN0YXRlIGNhbWUgdG8gYmUsIHN0ZXAgYnkgc3RlcC5cbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgZGVyaXZhdGlvbiwgd2Ugb25seSBkaXNwbGF5IHRoZSBmaXJzdCBvbmUuXG4gICAgICAgICAgICB2YXIgc3RhdGVTdGFja3MgPSBleHBlY3RhbnRTdGF0ZXNcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1aWxkRmlyc3RTdGF0ZVN0YWNrKHN0YXRlLCBbXSkgfHwgW3N0YXRlXTtcbiAgICAgICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgICAgIC8vIERpc3BsYXkgZWFjaCBzdGF0ZSB0aGF0IGlzIGV4cGVjdGluZyBhIHRlcm1pbmFsIHN5bWJvbCBuZXh0LlxuICAgICAgICAgICAgc3RhdGVTdGFja3MuZm9yRWFjaChmdW5jdGlvbihzdGF0ZVN0YWNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RhdGVTdGFja1swXTtcbiAgICAgICAgICAgICAgICB2YXIgbmV4dFN5bWJvbCA9IHN0YXRlLnJ1bGUuc3ltYm9sc1tzdGF0ZS5kb3RdO1xuICAgICAgICAgICAgICAgIHZhciBzeW1ib2xEaXNwbGF5ID0gdGhpcy5nZXRTeW1ib2xEaXNwbGF5KG5leHRTeW1ib2wpO1xuICAgICAgICAgICAgICAgIGxpbmVzLnB1c2goJ0EgJyArIHN5bWJvbERpc3BsYXkgKyAnIGJhc2VkIG9uOicpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVN0YXRlU3RhY2soc3RhdGVTdGFjaywgbGluZXMpO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgbGluZXMucHVzaChcIlwiKTtcbiAgICAgICAgcmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuICAgIFxuICAgIFBhcnNlci5wcm90b3R5cGUuZGlzcGxheVN0YXRlU3RhY2sgPSBmdW5jdGlvbihzdGF0ZVN0YWNrLCBsaW5lcykge1xuICAgICAgICB2YXIgbGFzdERpc3BsYXk7XG4gICAgICAgIHZhciBzYW1lRGlzcGxheUNvdW50ID0gMDtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzdGF0ZVN0YWNrLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICB2YXIgc3RhdGUgPSBzdGF0ZVN0YWNrW2pdO1xuICAgICAgICAgICAgdmFyIGRpc3BsYXkgPSBzdGF0ZS5ydWxlLnRvU3RyaW5nKHN0YXRlLmRvdCk7XG4gICAgICAgICAgICBpZiAoZGlzcGxheSA9PT0gbGFzdERpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICBzYW1lRGlzcGxheUNvdW50Kys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzYW1lRGlzcGxheUNvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKCcgICAgXiAnICsgc2FtZURpc3BsYXlDb3VudCArICcgbW9yZSBsaW5lcyBpZGVudGljYWwgdG8gdGhpcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzYW1lRGlzcGxheUNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKCcgICAgJyArIGRpc3BsYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdERpc3BsYXkgPSBkaXNwbGF5O1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIFBhcnNlci5wcm90b3R5cGUuZ2V0U3ltYm9sRGlzcGxheSA9IGZ1bmN0aW9uKHN5bWJvbCkge1xuICAgICAgICByZXR1cm4gZ2V0U3ltYm9sTG9uZ0Rpc3BsYXkoc3ltYm9sKTtcbiAgICB9O1xuXG4gICAgLypcbiAgICBCdWlsZHMgYSB0aGUgZmlyc3Qgc3RhdGUgc3RhY2suIFlvdSBjYW4gdGhpbmsgb2YgYSBzdGF0ZSBzdGFjayBhcyB0aGUgY2FsbCBzdGFja1xuICAgIG9mIHRoZSByZWN1cnNpdmUtZGVzY2VudCBwYXJzZXIgd2hpY2ggdGhlIE5lYXJsZXkgcGFyc2UgYWxnb3JpdGhtIHNpbXVsYXRlcy5cbiAgICBBIHN0YXRlIHN0YWNrIGlzIHJlcHJlc2VudGVkIGFzIGFuIGFycmF5IG9mIHN0YXRlIG9iamVjdHMuIFdpdGhpbiBhXG4gICAgc3RhdGUgc3RhY2ssIHRoZSBmaXJzdCBpdGVtIG9mIHRoZSBhcnJheSB3aWxsIGJlIHRoZSBzdGFydGluZ1xuICAgIHN0YXRlLCB3aXRoIGVhY2ggc3VjY2Vzc2l2ZSBpdGVtIGluIHRoZSBhcnJheSBnb2luZyBmdXJ0aGVyIGJhY2sgaW50byBoaXN0b3J5LlxuXG4gICAgVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBnaXZlbiBhIHN0YXJ0aW5nIHN0YXRlIGFuZCBhbiBlbXB0eSBhcnJheSByZXByZXNlbnRpbmdcbiAgICB0aGUgdmlzaXRlZCBzdGF0ZXMsIGFuZCBpdCByZXR1cm5zIGFuIHNpbmdsZSBzdGF0ZSBzdGFjay5cblxuICAgICovXG4gICAgUGFyc2VyLnByb3RvdHlwZS5idWlsZEZpcnN0U3RhdGVTdGFjayA9IGZ1bmN0aW9uKHN0YXRlLCB2aXNpdGVkKSB7XG4gICAgICAgIGlmICh2aXNpdGVkLmluZGV4T2Yoc3RhdGUpICE9PSAtMSkge1xuICAgICAgICAgICAgLy8gRm91bmQgY3ljbGUsIHJldHVybiBudWxsXG4gICAgICAgICAgICAvLyB0byBlbGltaW5hdGUgdGhpcyBwYXRoIGZyb20gdGhlIHJlc3VsdHMsIGJlY2F1c2VcbiAgICAgICAgICAgIC8vIHdlIGRvbid0IGtub3cgaG93IHRvIGRpc3BsYXkgaXQgbWVhbmluZ2Z1bGx5XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUud2FudGVkQnkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW3N0YXRlXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcHJldlN0YXRlID0gc3RhdGUud2FudGVkQnlbMF07XG4gICAgICAgIHZhciBjaGlsZFZpc2l0ZWQgPSBbc3RhdGVdLmNvbmNhdCh2aXNpdGVkKTtcbiAgICAgICAgdmFyIGNoaWxkUmVzdWx0ID0gdGhpcy5idWlsZEZpcnN0U3RhdGVTdGFjayhwcmV2U3RhdGUsIGNoaWxkVmlzaXRlZCk7XG4gICAgICAgIGlmIChjaGlsZFJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtzdGF0ZV0uY29uY2F0KGNoaWxkUmVzdWx0KTtcbiAgICB9O1xuXG4gICAgUGFyc2VyLnByb3RvdHlwZS5zYXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLnRhYmxlW3RoaXMuY3VycmVudF07XG4gICAgICAgIGNvbHVtbi5sZXhlclN0YXRlID0gdGhpcy5sZXhlclN0YXRlO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH07XG5cbiAgICBQYXJzZXIucHJvdG90eXBlLnJlc3RvcmUgPSBmdW5jdGlvbihjb2x1bW4pIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY29sdW1uLmluZGV4O1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBpbmRleDtcbiAgICAgICAgdGhpcy50YWJsZVtpbmRleF0gPSBjb2x1bW47XG4gICAgICAgIHRoaXMudGFibGUuc3BsaWNlKGluZGV4ICsgMSk7XG4gICAgICAgIHRoaXMubGV4ZXJTdGF0ZSA9IGNvbHVtbi5sZXhlclN0YXRlO1xuXG4gICAgICAgIC8vIEluY3JlbWVudGFsbHkga2VlcCB0cmFjayBvZiByZXN1bHRzXG4gICAgICAgIHRoaXMucmVzdWx0cyA9IHRoaXMuZmluaXNoKCk7XG4gICAgfTtcblxuICAgIC8vIG5iLiBkZXByZWNhdGVkOiB1c2Ugc2F2ZS9yZXN0b3JlIGluc3RlYWQhXG4gICAgUGFyc2VyLnByb3RvdHlwZS5yZXdpbmQgPSBmdW5jdGlvbihpbmRleCkge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5rZWVwSGlzdG9yeSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXQgb3B0aW9uIGBrZWVwSGlzdG9yeWAgdG8gZW5hYmxlIHJld2luZGluZycpXG4gICAgICAgIH1cbiAgICAgICAgLy8gbmIuIHJlY2FsbCBjb2x1bW4gKHRhYmxlKSBpbmRpY2llcyBmYWxsIGJldHdlZW4gdG9rZW4gaW5kaWNpZXMuXG4gICAgICAgIC8vICAgICAgICBjb2wgMCAgIC0tICAgdG9rZW4gMCAgIC0tICAgY29sIDFcbiAgICAgICAgdGhpcy5yZXN0b3JlKHRoaXMudGFibGVbaW5kZXhdKTtcbiAgICB9O1xuXG4gICAgUGFyc2VyLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gUmV0dXJuIHRoZSBwb3NzaWJsZSBwYXJzaW5nc1xuICAgICAgICB2YXIgY29uc2lkZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5ncmFtbWFyLnN0YXJ0O1xuICAgICAgICB2YXIgY29sdW1uID0gdGhpcy50YWJsZVt0aGlzLnRhYmxlLmxlbmd0aCAtIDFdXG4gICAgICAgIGNvbHVtbi5zdGF0ZXMuZm9yRWFjaChmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgaWYgKHQucnVsZS5uYW1lID09PSBzdGFydFxuICAgICAgICAgICAgICAgICAgICAmJiB0LmRvdCA9PT0gdC5ydWxlLnN5bWJvbHMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICYmIHQucmVmZXJlbmNlID09PSAwXG4gICAgICAgICAgICAgICAgICAgICYmIHQuZGF0YSAhPT0gUGFyc2VyLmZhaWwpIHtcbiAgICAgICAgICAgICAgICBjb25zaWRlcmF0aW9ucy5wdXNoKHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbnNpZGVyYXRpb25zLm1hcChmdW5jdGlvbihjKSB7cmV0dXJuIGMuZGF0YTsgfSk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGdldFN5bWJvbExvbmdEaXNwbGF5KHN5bWJvbCkge1xuICAgICAgICB2YXIgdHlwZSA9IHR5cGVvZiBzeW1ib2w7XG4gICAgICAgIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gc3ltYm9sO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGlmIChzeW1ib2wubGl0ZXJhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShzeW1ib2wubGl0ZXJhbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN5bWJvbCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnY2hhcmFjdGVyIG1hdGNoaW5nICcgKyBzeW1ib2w7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN5bWJvbC50eXBlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbC50eXBlICsgJyB0b2tlbic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN5bWJvbC50ZXN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2tlbiBtYXRjaGluZyAnICsgU3RyaW5nKHN5bWJvbC50ZXN0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHN5bWJvbCB0eXBlOiAnICsgc3ltYm9sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFN5bWJvbFNob3J0RGlzcGxheShzeW1ib2wpIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygc3ltYm9sO1xuICAgICAgICBpZiAodHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHN5bWJvbDtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBpZiAoc3ltYm9sLmxpdGVyYWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc3ltYm9sLmxpdGVyYWwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzeW1ib2wgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN5bWJvbC50eXBlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICclJyArIHN5bWJvbC50eXBlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzeW1ib2wudGVzdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnPCcgKyBTdHJpbmcoc3ltYm9sLnRlc3QpICsgJz4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gc3ltYm9sIHR5cGU6ICcgKyBzeW1ib2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgUGFyc2VyOiBQYXJzZXIsXG4gICAgICAgIEdyYW1tYXI6IEdyYW1tYXIsXG4gICAgICAgIFJ1bGU6IFJ1bGUsXG4gICAgfTtcblxufSkpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IG5lYXJsZXksIHZlcnNpb24gMi4yMC4xXG4vLyBodHRwOi8vZ2l0aHViLmNvbS9IYXJkbWF0aDEyMy9uZWFybGV5XG4vLyBCeXBhc3NlcyBUUzYxMzMuIEFsbG93IGRlY2xhcmVkIGJ1dCB1bnVzZWQgZnVuY3Rpb25zLlxuLy8gQHRzLWlnbm9yZVxuZnVuY3Rpb24gaWQoZCkgeyByZXR1cm4gZFswXTsgfVxuY29uc3QgZGVlcEZsYXR0ZW4gPSAoYXJyKSA9PiBbXS5jb25jYXQoLi4uYXJyLm1hcCgodikgPT4gKEFycmF5LmlzQXJyYXkodikgPyBkZWVwRmxhdHRlbih2KSA6IHYpKSk7XG5mdW5jdGlvbiBmbGF0X3N0cmluZyhkKSB7XG4gICAgaWYgKGQpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZCkpXG4gICAgICAgICAgICByZXR1cm4gZGVlcEZsYXR0ZW4oZCkuam9pbihcIlwiKTtcbiAgICAgICAgcmV0dXJuIGQ7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xufVxuO1xuO1xuO1xuO1xuY29uc3QgZ3JhbW1hciA9IHtcbiAgICBMZXhlcjogdW5kZWZpbmVkLFxuICAgIFBhcnNlclJ1bGVzOiBbXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiUmV2ZXJzZV9wYXRoXCIsIFwic3ltYm9sc1wiOiBbXCJQYXRoXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiUmV2ZXJzZV9wYXRoJHN0cmluZyQxXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCI8XCIgfSwgeyBcImxpdGVyYWxcIjogXCI+XCIgfV0sIFwicG9zdHByb2Nlc3NcIjogKGQpID0+IGQuam9pbignJykgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJSZXZlcnNlX3BhdGhcIiwgXCJzeW1ib2xzXCI6IFtcIlJldmVyc2VfcGF0aCRzdHJpbmckMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkZvcndhcmRfcGF0aCRzdWJleHByZXNzaW9uJDEkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCI8XCIgfSwgL1twUF0vLCAvW29PXS8sIC9bc1NdLywgL1t0VF0vLCAvW21NXS8sIC9bYUFdLywgL1tzU10vLCAvW3RUXS8sIC9bZUVdLywgL1tyUl0vLCB7IFwibGl0ZXJhbFwiOiBcIkBcIiB9XSwgXCJwb3N0cHJvY2Vzc1wiOiBmdW5jdGlvbiAoZCkgeyByZXR1cm4gZC5qb2luKFwiXCIpOyB9IH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRm9yd2FyZF9wYXRoJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW1wiRm9yd2FyZF9wYXRoJHN1YmV4cHJlc3Npb24kMSRzdWJleHByZXNzaW9uJDFcIiwgXCJEb21haW5cIiwgeyBcImxpdGVyYWxcIjogXCI+XCIgfV0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJGb3J3YXJkX3BhdGhcIiwgXCJzeW1ib2xzXCI6IFtcIkZvcndhcmRfcGF0aCRzdWJleHByZXNzaW9uJDFcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJGb3J3YXJkX3BhdGgkc3ViZXhwcmVzc2lvbiQyXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCI8XCIgfSwgL1twUF0vLCAvW29PXS8sIC9bc1NdLywgL1t0VF0vLCAvW21NXS8sIC9bYUFdLywgL1tzU10vLCAvW3RUXS8sIC9bZUVdLywgL1tyUl0vLCB7IFwibGl0ZXJhbFwiOiBcIj5cIiB9XSwgXCJwb3N0cHJvY2Vzc1wiOiBmdW5jdGlvbiAoZCkgeyByZXR1cm4gZC5qb2luKFwiXCIpOyB9IH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRm9yd2FyZF9wYXRoXCIsIFwic3ltYm9sc1wiOiBbXCJGb3J3YXJkX3BhdGgkc3ViZXhwcmVzc2lvbiQyXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRm9yd2FyZF9wYXRoXCIsIFwic3ltYm9sc1wiOiBbXCJQYXRoXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiUGF0aCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbXCJBX2RfbFwiLCB7IFwibGl0ZXJhbFwiOiBcIjpcIiB9XSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlBhdGgkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXCJQYXRoJGVibmYkMSRzdWJleHByZXNzaW9uJDFcIl0sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJQYXRoJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW10sIFwicG9zdHByb2Nlc3NcIjogKCkgPT4gbnVsbCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlBhdGhcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIjxcIiB9LCBcIlBhdGgkZWJuZiQxXCIsIFwiTWFpbGJveFwiLCB7IFwibGl0ZXJhbFwiOiBcIj5cIiB9XSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkFfZF9sJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW10gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJBX2RfbCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCIsXCIgfSwgXCJBdF9kb21haW5cIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJBX2RfbCRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtcIkFfZF9sJGVibmYkMVwiLCBcIkFfZF9sJGVibmYkMSRzdWJleHByZXNzaW9uJDFcIl0sIFwicG9zdHByb2Nlc3NcIjogKGQpID0+IGRbMF0uY29uY2F0KFtkWzFdXSkgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJBX2RfbFwiLCBcInN5bWJvbHNcIjogW1wiQXRfZG9tYWluXCIsIFwiQV9kX2wkZWJuZiQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiQXRfZG9tYWluXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCJAXCIgfSwgXCJEb21haW5cIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJEb21haW4kZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkRvbWFpbiRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCIuXCIgfSwgXCJzdWJfZG9tYWluXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRG9tYWluJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW1wiRG9tYWluJGVibmYkMVwiLCBcIkRvbWFpbiRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCJdLCBcInBvc3Rwcm9jZXNzXCI6IChkKSA9PiBkWzBdLmNvbmNhdChbZFsxXV0pIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRG9tYWluXCIsIFwic3ltYm9sc1wiOiBbXCJzdWJfZG9tYWluXCIsIFwiRG9tYWluJGVibmYkMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcInN1Yl9kb21haW5cIiwgXCJzeW1ib2xzXCI6IFtcIlVfbGFiZWxcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJMZXRfZGlnXCIsIFwic3ltYm9sc1wiOiBbXCJBTFBIQV9ESUdJVFwiXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkxkaF9zdHIkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkxkaF9zdHIkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXCJMZGhfc3RyJGVibmYkMVwiLCBcIkFMUEhBX0RJR19EQVNIXCJdLCBcInBvc3Rwcm9jZXNzXCI6IChkKSA9PiBkWzBdLmNvbmNhdChbZFsxXV0pIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiTGRoX3N0clwiLCBcInN5bWJvbHNcIjogW1wiTGRoX3N0ciRlYm5mJDFcIiwgXCJMZXRfZGlnXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiVV9MZXRfZGlnXCIsIFwic3ltYm9sc1wiOiBbXCJBTFBIQV9ESUdJVF9VXCJdLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiVV9MZGhfc3RyJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW10gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJVX0xkaF9zdHIkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXCJVX0xkaF9zdHIkZWJuZiQxXCIsIFwiQUxQSEFfRElHX0RBU0hfVVwiXSwgXCJwb3N0cHJvY2Vzc1wiOiAoZCkgPT4gZFswXS5jb25jYXQoW2RbMV1dKSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlVfTGRoX3N0clwiLCBcInN5bWJvbHNcIjogW1wiVV9MZGhfc3RyJGVibmYkMVwiLCBcIlVfTGV0X2RpZ1wiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlVfbGFiZWwkZWJuZiQxJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW1wiVV9MZGhfc3RyXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiVV9sYWJlbCRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtcIlVfbGFiZWwkZWJuZiQxJHN1YmV4cHJlc3Npb24kMVwiXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlVfbGFiZWwkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXSwgXCJwb3N0cHJvY2Vzc1wiOiAoKSA9PiBudWxsIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiVV9sYWJlbFwiLCBcInN5bWJvbHNcIjogW1wiVV9MZXRfZGlnXCIsIFwiVV9sYWJlbCRlYm5mJDFcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJhZGRyZXNzX2xpdGVyYWwkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY0X2FkZHJlc3NfbGl0ZXJhbFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcImFkZHJlc3NfbGl0ZXJhbCRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfYWRkcmVzc19saXRlcmFsXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiYWRkcmVzc19saXRlcmFsJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW1wiR2VuZXJhbF9hZGRyZXNzX2xpdGVyYWxcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJhZGRyZXNzX2xpdGVyYWxcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIltcIiB9LCBcImFkZHJlc3NfbGl0ZXJhbCRzdWJleHByZXNzaW9uJDFcIiwgeyBcImxpdGVyYWxcIjogXCJdXCIgfV0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJub25fbG9jYWxfcGFydFwiLCBcInN5bWJvbHNcIjogW1wiRG9tYWluXCJdLCBcInBvc3Rwcm9jZXNzXCI6IGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgRG9tYWluTmFtZTogZmxhdF9zdHJpbmcoZFswXSkgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJub25fbG9jYWxfcGFydFwiLCBcInN5bWJvbHNcIjogW1wiYWRkcmVzc19saXRlcmFsXCJdLCBcInBvc3Rwcm9jZXNzXCI6IGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgQWRkcmVzc0xpdGVyYWw6IGZsYXRfc3RyaW5nKGRbMF0pIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiTWFpbGJveFwiLCBcInN5bWJvbHNcIjogW1wiTG9jYWxfcGFydFwiLCB7IFwibGl0ZXJhbFwiOiBcIkBcIiB9LCBcIm5vbl9sb2NhbF9wYXJ0XCJdLCBcInBvc3Rwcm9jZXNzXCI6IGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbG9jYWxQYXJ0OiBmbGF0X3N0cmluZyhkWzBdKSwgZG9tYWluUGFydDogZmxhdF9zdHJpbmcoZFsyXSkgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJMb2NhbF9wYXJ0XCIsIFwic3ltYm9sc1wiOiBbXCJEb3Rfc3RyaW5nXCJdLCBcInBvc3Rwcm9jZXNzXCI6IGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgRG90U3RyaW5nOiBmbGF0X3N0cmluZyhkWzBdKSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkxvY2FsX3BhcnRcIiwgXCJzeW1ib2xzXCI6IFtcIlF1b3RlZF9zdHJpbmdcIl0sIFwicG9zdHByb2Nlc3NcIjogZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBRdW90ZWRTdHJpbmc6IGZsYXRfc3RyaW5nKGRbMF0pIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRG90X3N0cmluZyRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRG90X3N0cmluZyRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCIuXCIgfSwgXCJBdG9tXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRG90X3N0cmluZyRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtcIkRvdF9zdHJpbmckZWJuZiQxXCIsIFwiRG90X3N0cmluZyRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCJdLCBcInBvc3Rwcm9jZXNzXCI6IChkKSA9PiBkWzBdLmNvbmNhdChbZFsxXV0pIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRG90X3N0cmluZ1wiLCBcInN5bWJvbHNcIjogW1wiQXRvbVwiLCBcIkRvdF9zdHJpbmckZWJuZiQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiQXRvbSRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFsvWzAtOUEtWmEteiEjJCUmJyorXFwtLz0/Xl9ge3x9flxcdTAwODAtXFx1RkZGRi9dL10gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJBdG9tJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW1wiQXRvbSRlYm5mJDFcIiwgL1swLTlBLVphLXohIyQlJicqK1xcLS89P15fYHt8fX5cXHUwMDgwLVxcdUZGRkYvXS9dLCBcInBvc3Rwcm9jZXNzXCI6IChkKSA9PiBkWzBdLmNvbmNhdChbZFsxXV0pIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiQXRvbVwiLCBcInN5bWJvbHNcIjogW1wiQXRvbSRlYm5mJDFcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJRdW90ZWRfc3RyaW5nJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW10gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJRdW90ZWRfc3RyaW5nJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW1wiUXVvdGVkX3N0cmluZyRlYm5mJDFcIiwgXCJRY29udGVudFNNVFBcIl0sIFwicG9zdHByb2Nlc3NcIjogKGQpID0+IGRbMF0uY29uY2F0KFtkWzFdXSkgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJRdW90ZWRfc3RyaW5nXCIsIFwic3ltYm9sc1wiOiBbXCJEUVVPVEVcIiwgXCJRdW90ZWRfc3RyaW5nJGVibmYkMVwiLCBcIkRRVU9URVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlFjb250ZW50U01UUFwiLCBcInN5bWJvbHNcIjogW1wicXRleHRTTVRQXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiUWNvbnRlbnRTTVRQXCIsIFwic3ltYm9sc1wiOiBbXCJxdW90ZWRfcGFpclNNVFBcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJxdW90ZWRfcGFpclNNVFBcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIlxcXFxcIiB9LCAvW1xceDIwLVxceDdlXS9dIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwicXRleHRTTVRQXCIsIFwic3ltYm9sc1wiOiBbL1tcXHgyMC1cXHgyMVxceDIzLVxceDViXFx4NWQtXFx4N2VcXHUwMDgwLVxcdUZGRkZdL10sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY0X2FkZHJlc3NfbGl0ZXJhbCRtYWNyb2NhbGwkMlwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiLlwiIH0sIFwiU251bVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjRfYWRkcmVzc19saXRlcmFsJG1hY3JvY2FsbCQxXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY0X2FkZHJlc3NfbGl0ZXJhbCRtYWNyb2NhbGwkMlwiLCBcIklQdjRfYWRkcmVzc19saXRlcmFsJG1hY3JvY2FsbCQyXCIsIFwiSVB2NF9hZGRyZXNzX2xpdGVyYWwkbWFjcm9jYWxsJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY0X2FkZHJlc3NfbGl0ZXJhbFwiLCBcInN5bWJvbHNcIjogW1wiU251bVwiLCBcIklQdjRfYWRkcmVzc19saXRlcmFsJG1hY3JvY2FsbCQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9hZGRyZXNzX2xpdGVyYWwkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbL1tpSV0vLCAvW3BQXS8sIC9bdlZdLywgeyBcImxpdGVyYWxcIjogXCI2XCIgfSwgeyBcImxpdGVyYWxcIjogXCI6XCIgfV0sIFwicG9zdHByb2Nlc3NcIjogZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGQuam9pbihcIlwiKTsgfSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfYWRkcmVzc19saXRlcmFsXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2FkZHJlc3NfbGl0ZXJhbCRzdWJleHByZXNzaW9uJDFcIiwgXCJJUHY2X2FkZHJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJHZW5lcmFsX2FkZHJlc3NfbGl0ZXJhbCRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtcImRjb250ZW50XCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiR2VuZXJhbF9hZGRyZXNzX2xpdGVyYWwkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXCJHZW5lcmFsX2FkZHJlc3NfbGl0ZXJhbCRlYm5mJDFcIiwgXCJkY29udGVudFwiXSwgXCJwb3N0cHJvY2Vzc1wiOiAoZCkgPT4gZFswXS5jb25jYXQoW2RbMV1dKSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkdlbmVyYWxfYWRkcmVzc19saXRlcmFsXCIsIFwic3ltYm9sc1wiOiBbXCJTdGFuZGFyZGl6ZWRfdGFnXCIsIHsgXCJsaXRlcmFsXCI6IFwiOlwiIH0sIFwiR2VuZXJhbF9hZGRyZXNzX2xpdGVyYWwkZWJuZiQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiU3RhbmRhcmRpemVkX3RhZ1wiLCBcInN5bWJvbHNcIjogW1wiTGRoX3N0clwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcImRjb250ZW50XCIsIFwic3ltYm9sc1wiOiBbL1tcXHgyMS1cXHg1YVxceDVlLVxceDdlXS9dLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiU251bVwiLCBcInN5bWJvbHNcIjogW1wiRElHSVRcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJTbnVtJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogWy9bMS05XS8sIFwiRElHSVRcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJTbnVtXCIsIFwic3ltYm9sc1wiOiBbXCJTbnVtJHN1YmV4cHJlc3Npb24kMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlNudW0kc3ViZXhwcmVzc2lvbiQyXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCIxXCIgfSwgXCJESUdJVFwiLCBcIkRJR0lUXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiU251bVwiLCBcInN5bWJvbHNcIjogW1wiU251bSRzdWJleHByZXNzaW9uJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJTbnVtJHN1YmV4cHJlc3Npb24kM1wiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiMlwiIH0sIC9bMC00XS8sIFwiRElHSVRcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJTbnVtXCIsIFwic3ltYm9sc1wiOiBbXCJTbnVtJHN1YmV4cHJlc3Npb24kM1wiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlNudW0kc3ViZXhwcmVzc2lvbiQ0XCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCIyXCIgfSwgeyBcImxpdGVyYWxcIjogXCI1XCIgfSwgL1swLTVdL10gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJTbnVtXCIsIFwic3ltYm9sc1wiOiBbXCJTbnVtJHN1YmV4cHJlc3Npb24kNFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfYWRkclwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9mdWxsXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9hZGRyXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2NvbXBcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2FkZHJcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZ2NF9mdWxsXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9hZGRyXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2djRfY29tcFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfaGV4XCIsIFwic3ltYm9sc1wiOiBbXCJIRVhESUdcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2hleCRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFtcIkhFWERJR1wiLCBcIkhFWERJR1wiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfaGV4XCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2hleCRzdWJleHByZXNzaW9uJDFcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2hleCRzdWJleHByZXNzaW9uJDJcIiwgXCJzeW1ib2xzXCI6IFtcIkhFWERJR1wiLCBcIkhFWERJR1wiLCBcIkhFWERJR1wiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfaGV4XCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2hleCRzdWJleHByZXNzaW9uJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2hleCRzdWJleHByZXNzaW9uJDNcIiwgXCJzeW1ib2xzXCI6IFtcIkhFWERJR1wiLCBcIkhFWERJR1wiLCBcIkhFWERJR1wiLCBcIkhFWERJR1wiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfaGV4XCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2hleCRzdWJleHByZXNzaW9uJDNcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIjpcIiB9LCBcIklQdjZfaGV4XCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9mdWxsJG1hY3JvY2FsbCQxXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2Z1bGxcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfaGV4XCIsIFwiSVB2Nl9mdWxsJG1hY3JvY2FsbCQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIjpcIiB9LCBcIklQdjZfaGV4XCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwiSVB2Nl9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiLCBcIklQdjZfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwiSVB2Nl9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9oZXhcIiwgXCJJUHY2X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfY29tcCRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCJdLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9jb21wJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW10sIFwicG9zdHByb2Nlc3NcIjogKCkgPT4gbnVsbCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfY29tcCRzdHJpbmckMVwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiOlwiIH0sIHsgXCJsaXRlcmFsXCI6IFwiOlwiIH1dLCBcInBvc3Rwcm9jZXNzXCI6IChkKSA9PiBkLmpvaW4oJycpIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIjpcIiB9LCBcIklQdjZfaGV4XCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwiSVB2Nl9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiLCBcIklQdjZfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwiSVB2Nl9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9oZXhcIiwgXCJJUHY2X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfY29tcCRlYm5mJDJcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxXCJdLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9jb21wJGVibmYkMlwiLCBcInN5bWJvbHNcIjogW10sIFwicG9zdHByb2Nlc3NcIjogKCkgPT4gbnVsbCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfY29tcFwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9jb21wJGVibmYkMVwiLCBcIklQdjZfY29tcCRzdHJpbmckMVwiLCBcIklQdjZfY29tcCRlYm5mJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2djRfZnVsbCRtYWNyb2NhbGwkMlwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiOlwiIH0sIFwiSVB2Nl9oZXhcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2djRfZnVsbCRtYWNyb2NhbGwkMVwiLCBcInN5bWJvbHNcIjogW1wiSVB2NnY0X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2djRfZnVsbCRtYWNyb2NhbGwkMlwiLCBcIklQdjZ2NF9mdWxsJG1hY3JvY2FsbCQyXCIsIFwiSVB2NnY0X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2djRfZnVsbCRtYWNyb2NhbGwkMlwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9mdWxsXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2hleFwiLCBcIklQdjZ2NF9mdWxsJG1hY3JvY2FsbCQxXCIsIHsgXCJsaXRlcmFsXCI6IFwiOlwiIH0sIFwiSVB2NF9hZGRyZXNzX2xpdGVyYWxcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2djRfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCI6XCIgfSwgXCJJUHY2X2hleFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZ2NF9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJJUHY2djRfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwiSVB2NnY0X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfaGV4XCIsIFwiSVB2NnY0X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW1wiSVB2NnY0X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMVwiXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW10sIFwicG9zdHByb2Nlc3NcIjogKCkgPT4gbnVsbCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJHN0cmluZyQxXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCI6XCIgfSwgeyBcImxpdGVyYWxcIjogXCI6XCIgfV0sIFwicG9zdHByb2Nlc3NcIjogKGQpID0+IGQuam9pbignJykgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2djRfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCI6XCIgfSwgXCJJUHY2X2hleFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZ2NF9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJJUHY2djRfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwiSVB2NnY0X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfaGV4XCIsIFwiSVB2NnY0X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMVwiLCB7IFwibGl0ZXJhbFwiOiBcIjpcIiB9XSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMlwiLCBcInN5bWJvbHNcIjogW1wiSVB2NnY0X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMVwiXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMlwiLCBcInN5bWJvbHNcIjogW10sIFwicG9zdHByb2Nlc3NcIjogKCkgPT4gbnVsbCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2djRfY29tcCRlYm5mJDFcIiwgXCJJUHY2djRfY29tcCRzdHJpbmckMVwiLCBcIklQdjZ2NF9jb21wJGVibmYkMlwiLCBcIklQdjRfYWRkcmVzc19saXRlcmFsXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRElHSVRcIiwgXCJzeW1ib2xzXCI6IFsvWzAtOV0vXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkFMUEhBX0RJR0lUX1VcIiwgXCJzeW1ib2xzXCI6IFsvWzAtOUEtWmEtelxcdTAwODAtXFx1RkZGRl0vXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkFMUEhBX0RJR0lUXCIsIFwic3ltYm9sc1wiOiBbL1swLTlBLVphLXpdL10sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJBTFBIQV9ESUdfREFTSFwiLCBcInN5bWJvbHNcIjogWy9bLTAtOUEtWmEtel0vXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkFMUEhBX0RJR19EQVNIX1VcIiwgXCJzeW1ib2xzXCI6IFsvWy0wLTlBLVphLXpcXHUwMDgwLVxcdUZGRkZdL10sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJIRVhESUdcIiwgXCJzeW1ib2xzXCI6IFsvWzAtOUEtRmEtZl0vXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkRRVU9URVwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiXFxcIlwiIH1dLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH1cbiAgICBdLFxuICAgIFBhcnNlclN0YXJ0OiBcIlJldmVyc2VfcGF0aFwiLFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGdyYW1tYXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ncmFtbWFyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNhbm9uaWNhbGl6ZSA9IGV4cG9ydHMuY2Fub25pY2FsaXplX3F1b3RlZF9zdHJpbmcgPSBleHBvcnRzLm5vcm1hbGl6ZSA9IGV4cG9ydHMubm9ybWFsaXplX2RvdF9zdHJpbmcgPSBleHBvcnRzLnBhcnNlID0gdm9pZCAwO1xuLy8gY29uc3QgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuY29uc3QgbmVhcmxleSA9IHJlcXVpcmUoXCJuZWFybGV5XCIpO1xuY29uc3QgZ3JhbW1hcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL2dyYW1tYXJcIikpO1xuZ3JhbW1hcl8xLmRlZmF1bHQuUGFyc2VyU3RhcnQgPSBcIk1haWxib3hcIjtcbmNvbnN0IGdyYW1tYXIgPSBuZWFybGV5LkdyYW1tYXIuZnJvbUNvbXBpbGVkKGdyYW1tYXJfMS5kZWZhdWx0KTtcbi8vIDxodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTMyMSNzZWN0aW9uLTQuMS4yPlxuZnVuY3Rpb24gcGFyc2UoYWRkcmVzcykge1xuICAgIC8vIEFuIGluc2FuZSBsZW5ndGgsIHRvIHByb3RlY3QgdGhlIHBhcnNpbmcgY29kZSBmcm9tIGh1Z2UgaW5wdXQuIFNNVFAgbGluZSBsaW1pdCwgbWludXMgY29tbWFuZCBzaXplLlxuICAgIGNvbnN0IGluc2FuZV9sZW5ndGggPSAxMDAwIC0gXCJNQUlMIEZST006PD5cXHJcXG5cIi5sZW5ndGg7XG4gICAgaWYgKGFkZHJlc3MubGVuZ3RoID4gaW5zYW5lX2xlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhZGRyZXNzIHRvbyBsb25nXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgbmVhcmxleS5QYXJzZXIoZ3JhbW1hcik7XG4gICAgcGFyc2VyLmZlZWQoYWRkcmVzcyk7XG4gICAgaWYgKHBhcnNlci5yZXN1bHRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhZGRyZXNzIHBhcnNpbmcgZmFpbGVkOiBhbWJpZ3VvdXMgZ3JhbW1hclwiKTtcbiAgICB9XG4gICAgLy8gRG9tYWluIGNoZWNrc1xuICAgIGNvbnN0IGF0X2lkeCA9IGFkZHJlc3MubGFzdEluZGV4T2YoJ0AnKTsgLy8gbXVzdCBiZSBmb3VuZCwgc2luY2UgcGFyc2Ugd2FzIHN1Y2Nlc3NmdWxcbiAgICBjb25zdCBkb21haW4gPSBhZGRyZXNzLnN1YnN0cmluZyhhdF9pZHggKyAxKTtcbiAgICBpZiAoZG9tYWluWzBdICE9PSAnWycpIHsgLy8gTm90IGFuIGFkZHJlc3MgbGl0ZXJhbFxuICAgICAgICBpZiAoZG9tYWluLmxlbmd0aCA+IDI1Mykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZG9tYWluIHRvbyBsb25nXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IGRvbWFpbi5zcGxpdChcIi5cIik7XG4gICAgICAgIGlmIChsYWJlbHMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZG9tYWluIG5vdCBmdWxseSBxdWFsaWZpZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhYmVsc1tsYWJlbHMubGVuZ3RoIC0gMV0ubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidG9wIGxldmVsIGRvbWFpbiBsYWJlbCB0b28gc2hvcnRcIik7XG4gICAgICAgIH1cbiAgICAgICAgbGFiZWxzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGxhYmVsc1swXS5sZW5ndGggPiA2Mykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZG9tYWluIGxhYmVsIHRvbyBsb25nXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXJzZXIucmVzdWx0c1swXTtcbn1cbmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbi8qKiBTdHJpcCArc29tZXRoaW5nLCBzdHJpcCAnLidzLCBhbmQgbWFwIHRvIGxvd2VyIGNhc2UuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZV9kb3Rfc3RyaW5nKGRvdF9zdHJpbmcpIHtcbiAgICBjb25zdCB0YWdsZXNzID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcGx1c19sb2MgPSBkb3Rfc3RyaW5nLmluZGV4T2YoXCIrXCIpO1xuICAgICAgICBpZiAocGx1c19sb2MgPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gZG90X3N0cmluZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG90X3N0cmluZy5zdWJzdHIoMCwgcGx1c19sb2MpO1xuICAgIH0pKCk7XG4gICAgY29uc3QgZG90bGVzcyA9IHRhZ2xlc3MucmVwbGFjZSgvXFwuL2csIFwiXCIpO1xuICAgIHJldHVybiBkb3RsZXNzLnRvTG93ZXJDYXNlKCk7XG59XG5leHBvcnRzLm5vcm1hbGl6ZV9kb3Rfc3RyaW5nID0gbm9ybWFsaXplX2RvdF9zdHJpbmc7XG4vKiogVGhlIEcgc3R5bGUgYWRkcmVzcyBub3JtYWxpemF0aW9uLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemUoYWRkcmVzcykge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3QgYSA9IHBhcnNlKGFkZHJlc3MpO1xuICAgIGNvbnN0IGRvbWFpbiA9IChfYSA9IGEuZG9tYWluUGFydC5BZGRyZXNzTGl0ZXJhbCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogYS5kb21haW5QYXJ0LkRvbWFpbk5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBsb2NhbCA9IChfYiA9IGEubG9jYWxQYXJ0LlF1b3RlZFN0cmluZykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogbm9ybWFsaXplX2RvdF9zdHJpbmcoYS5sb2NhbFBhcnQuRG90U3RyaW5nKTtcbiAgICByZXR1cm4gYCR7bG9jYWx9QCR7ZG9tYWlufWA7XG59XG5leHBvcnRzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcbmZ1bmN0aW9uIGNhbm9uaWNhbGl6ZV9xdW90ZWRfc3RyaW5nKHF1b3RlZF9zdHJpbmcpIHtcbiAgICBjb25zdCB1bnF1b3RlZCA9IHF1b3RlZF9zdHJpbmcuc3Vic3RyKDEpLnN1YnN0cigwLCBxdW90ZWRfc3RyaW5nLmxlbmd0aCAtIDIpO1xuICAgIGNvbnN0IHVuZXNjYXBlZCA9IHVucXVvdGVkLnJlcGxhY2UoLyg/OlxcXFwoLikpL2csIFwiJDFcIik7XG4gICAgY29uc3QgcmVlc2NhcGVkID0gdW5lc2NhcGVkLnJlcGxhY2UoLyg/OihbXCJcXFxcXSkpL2csIFwiXFxcXCQxXCIpO1xuICAgIHJldHVybiBgXCIke3JlZXNjYXBlZH1cImA7IC8vIHJlLXF1b3RlXG59XG5leHBvcnRzLmNhbm9uaWNhbGl6ZV9xdW90ZWRfc3RyaW5nID0gY2Fub25pY2FsaXplX3F1b3RlZF9zdHJpbmc7XG4vKipcbiAqIEFwcGx5IGEgY2Fub25pY2FsaXphdGlvbiBjb25zaXN0ZW50IHdpdGggc3RhbmRhcmRzIHRvIHN1cHBvcnRcbiAqIGNvbXBhcmlzb24gYXMgYSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGNhbm9uaWNhbGl6ZShhZGRyZXNzKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGEgPSBwYXJzZShhZGRyZXNzKTtcbiAgICBjb25zdCBkb21haW4gPSAoX2EgPSBhLmRvbWFpblBhcnQuQWRkcmVzc0xpdGVyYWwpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGEuZG9tYWluUGFydC5Eb21haW5OYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbG9jYWwgPSBhLmxvY2FsUGFydC5RdW90ZWRTdHJpbmdcbiAgICAgICAgPyBjYW5vbmljYWxpemVfcXVvdGVkX3N0cmluZyhhLmxvY2FsUGFydC5RdW90ZWRTdHJpbmcpXG4gICAgICAgIDogYS5sb2NhbFBhcnQuRG90U3RyaW5nO1xuICAgIHJldHVybiBgJHtsb2NhbH1AJHtkb21haW59YDtcbn1cbmV4cG9ydHMuY2Fub25pY2FsaXplID0gY2Fub25pY2FsaXplO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIGlzQXJyYXkgPSBmdW5jdGlvbiBpc0FycmF5KGFycikge1xuXHRpZiAodHlwZW9mIEFycmF5LmlzQXJyYXkgPT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShhcnIpO1xuXHR9XG5cblx0cmV0dXJuIHRvU3RyLmNhbGwoYXJyKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG5cbnZhciBpc1BsYWluT2JqZWN0ID0gZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHtcblx0aWYgKCFvYmogfHwgdG9TdHIuY2FsbChvYmopICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHZhciBoYXNPd25Db25zdHJ1Y3RvciA9IGhhc093bi5jYWxsKG9iaiwgJ2NvbnN0cnVjdG9yJyk7XG5cdHZhciBoYXNJc1Byb3RvdHlwZU9mID0gb2JqLmNvbnN0cnVjdG9yICYmIG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgJiYgaGFzT3duLmNhbGwob2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgJ2lzUHJvdG90eXBlT2YnKTtcblx0Ly8gTm90IG93biBjb25zdHJ1Y3RvciBwcm9wZXJ0eSBtdXN0IGJlIE9iamVjdFxuXHRpZiAob2JqLmNvbnN0cnVjdG9yICYmICFoYXNPd25Db25zdHJ1Y3RvciAmJiAhaGFzSXNQcm90b3R5cGVPZikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIE93biBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJhdGVkIGZpcnN0bHksIHNvIHRvIHNwZWVkIHVwLFxuXHQvLyBpZiBsYXN0IG9uZSBpcyBvd24sIHRoZW4gYWxsIHByb3BlcnRpZXMgYXJlIG93bi5cblx0dmFyIGtleTtcblx0Zm9yIChrZXkgaW4gb2JqKSB7IC8qKi8gfVxuXG5cdHJldHVybiB0eXBlb2Yga2V5ID09PSAndW5kZWZpbmVkJyB8fCBoYXNPd24uY2FsbChvYmosIGtleSk7XG59O1xuXG4vLyBJZiBuYW1lIGlzICdfX3Byb3RvX18nLCBhbmQgT2JqZWN0LmRlZmluZVByb3BlcnR5IGlzIGF2YWlsYWJsZSwgZGVmaW5lIF9fcHJvdG9fXyBhcyBhbiBvd24gcHJvcGVydHkgb24gdGFyZ2V0XG52YXIgc2V0UHJvcGVydHkgPSBmdW5jdGlvbiBzZXRQcm9wZXJ0eSh0YXJnZXQsIG9wdGlvbnMpIHtcblx0aWYgKGRlZmluZVByb3BlcnR5ICYmIG9wdGlvbnMubmFtZSA9PT0gJ19fcHJvdG9fXycpIHtcblx0XHRkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG9wdGlvbnMubmFtZSwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdHZhbHVlOiBvcHRpb25zLm5ld1ZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR0YXJnZXRbb3B0aW9ucy5uYW1lXSA9IG9wdGlvbnMubmV3VmFsdWU7XG5cdH1cbn07XG5cbi8vIFJldHVybiB1bmRlZmluZWQgaW5zdGVhZCBvZiBfX3Byb3RvX18gaWYgJ19fcHJvdG9fXycgaXMgbm90IGFuIG93biBwcm9wZXJ0eVxudmFyIGdldFByb3BlcnR5ID0gZnVuY3Rpb24gZ2V0UHJvcGVydHkob2JqLCBuYW1lKSB7XG5cdGlmIChuYW1lID09PSAnX19wcm90b19fJykge1xuXHRcdGlmICghaGFzT3duLmNhbGwob2JqLCBuYW1lKSkge1xuXHRcdFx0cmV0dXJuIHZvaWQgMDtcblx0XHR9IGVsc2UgaWYgKGdPUEQpIHtcblx0XHRcdC8vIEluIGVhcmx5IHZlcnNpb25zIG9mIG5vZGUsIG9ialsnX19wcm90b19fJ10gaXMgYnVnZ3kgd2hlbiBvYmogaGFzXG5cdFx0XHQvLyBfX3Byb3RvX18gYXMgYW4gb3duIHByb3BlcnR5LiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCkgd29ya3MuXG5cdFx0XHRyZXR1cm4gZ09QRChvYmosIG5hbWUpLnZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvYmpbbmFtZV07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGV4dGVuZCgpIHtcblx0dmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lO1xuXHR2YXIgdGFyZ2V0ID0gYXJndW1lbnRzWzBdO1xuXHR2YXIgaSA9IDE7XG5cdHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXHR2YXIgZGVlcCA9IGZhbHNlO1xuXG5cdC8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb25cblx0aWYgKHR5cGVvZiB0YXJnZXQgPT09ICdib29sZWFuJykge1xuXHRcdGRlZXAgPSB0YXJnZXQ7XG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWzFdIHx8IHt9O1xuXHRcdC8vIHNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcblx0XHRpID0gMjtcblx0fVxuXHRpZiAodGFyZ2V0ID09IG51bGwgfHwgKHR5cGVvZiB0YXJnZXQgIT09ICdvYmplY3QnICYmIHR5cGVvZiB0YXJnZXQgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0dGFyZ2V0ID0ge307XG5cdH1cblxuXHRmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7XG5cdFx0b3B0aW9ucyA9IGFyZ3VtZW50c1tpXTtcblx0XHQvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzXG5cdFx0aWYgKG9wdGlvbnMgIT0gbnVsbCkge1xuXHRcdFx0Ly8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdFxuXHRcdFx0Zm9yIChuYW1lIGluIG9wdGlvbnMpIHtcblx0XHRcdFx0c3JjID0gZ2V0UHJvcGVydHkodGFyZ2V0LCBuYW1lKTtcblx0XHRcdFx0Y29weSA9IGdldFByb3BlcnR5KG9wdGlvbnMsIG5hbWUpO1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3Bcblx0XHRcdFx0aWYgKHRhcmdldCAhPT0gY29weSkge1xuXHRcdFx0XHRcdC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5c1xuXHRcdFx0XHRcdGlmIChkZWVwICYmIGNvcHkgJiYgKGlzUGxhaW5PYmplY3QoY29weSkgfHwgKGNvcHlJc0FycmF5ID0gaXNBcnJheShjb3B5KSkpKSB7XG5cdFx0XHRcdFx0XHRpZiAoY29weUlzQXJyYXkpIHtcblx0XHRcdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmMgJiYgaXNBcnJheShzcmMpID8gc3JjIDogW107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjbG9uZSA9IHNyYyAmJiBpc1BsYWluT2JqZWN0KHNyYykgPyBzcmMgOiB7fTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtXG5cdFx0XHRcdFx0XHRzZXRQcm9wZXJ0eSh0YXJnZXQsIHsgbmFtZTogbmFtZSwgbmV3VmFsdWU6IGV4dGVuZChkZWVwLCBjbG9uZSwgY29weSkgfSk7XG5cblx0XHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXG5cdFx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgY29weSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0XHRcdHNldFByb3BlcnR5KHRhcmdldCwgeyBuYW1lOiBuYW1lLCBuZXdWYWx1ZTogY29weSB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdFxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZXh0ZW5kID0gcmVxdWlyZSgnZXh0ZW5kJyk7XG5cbnZhciBkYXRhID0ge1xuICBwZXJtYW5lbnQ6IHJlcXVpcmUoJy4vbGliL2lhbmEtcGVybWFuZW50Lmpzb24nKSxcbiAgcHJvdm9zaW9uYWw6IHJlcXVpcmUoJy4vbGliL2lhbmEtcHJvdmlzaW9uYWwuanNvbicpLFxuICBoaXN0b3JpY2FsOiByZXF1aXJlKCcuL2xpYi9pYW5hLWhpc3RvcmljYWwuanNvbicpXG59O1xuXG52YXIgYWxsQnlOYW1lID0ge307XG5cbk9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgZGF0YVt0eXBlXS5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlbWVPYmopIHtcbiAgICBhbGxCeU5hbWVbc2NoZW1lT2JqLnNjaGVtZV0gPSBleHRlbmQoc2NoZW1lT2JqLCB7IHR5cGU6IHR5cGUgfSk7XG4gIH0pO1xufSk7XG5cbmRhdGEudW5vZmZpY2lhbCA9IHJlcXVpcmUoJy4vbGliL3Vub2ZmaWNpYWwuanNvbicpLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICByZXR1cm4gIWFsbEJ5TmFtZVtpdGVtLnNjaGVtZV07XG59KTtcblxuZGF0YS51bm9mZmljaWFsLmZvckVhY2goZnVuY3Rpb24gKHNjaGVtZU9iaikge1xuICBhbGxCeU5hbWVbc2NoZW1lT2JqLnNjaGVtZV0gPSBleHRlbmQoc2NoZW1lT2JqLCB7IHR5cGU6ICd1bm9mZmljaWFsJyB9KTtcbn0pO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZXh0ZW5kKGRhdGEsIHsgYWxsQnlOYW1lOiBhbGxCeU5hbWUgfSk7XG4iLAogICAgImNvbnN0IHsgcGFyc2UgfSA9IHJlcXVpcmUoJ3VyaS1qcycpO1xuY29uc3QgeyBhZGRyZXNzUGFyc2VyIH0gPSByZXF1aXJlKCdzbXRwLWFkZHJlc3MtcGFyc2VyJyk7XG5jb25zdCBzY2hlbWVzID0gcmVxdWlyZSgnc2NoZW1lcycpO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZShhZGRyZXNzKSB7XG4gIHRyeSB7XG4gICAgYWRkcmVzc1BhcnNlcihhZGRyZXNzKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gKHZhbHVlKSA9PiB7XG4gIGNvbnN0IGlyaSA9IHBhcnNlKHZhbHVlKTtcbiAgaWYgKGlyaS5zY2hlbWUgPT09ICdtYWlsdG8nICYmIGlyaS50by5ldmVyeSh2YWxpZGF0ZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoaXJpLnJlZmVyZW5jZSA9PT0gJ2Fic29sdXRlJyAmJiBzY2hlbWVzLmFsbEJ5TmFtZVtpcmkuc2NoZW1lXSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG4iLAogICAgIi8vIFJlZ2V4IGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzIwNDQ4NDYvcmVnZXgtZm9yLWlzby04NjAxLWR1cmF0aW9uc1xubW9kdWxlLmV4cG9ydHMgPVxuICAvXlAoPyEkKShcXGQrKD86XFwuXFxkKyk/WSk/KFxcZCsoPzpcXC5cXGQrKT9NKT8oXFxkKyg/OlxcLlxcZCspP1cpPyhcXGQrKD86XFwuXFxkKyk/RCk/KFQoPz1cXGQpKFxcZCsoPzpcXC5cXGQrKT9IKT8oXFxkKyg/OlxcLlxcZCspP00pPyhcXGQrKD86XFwuXFxkKyk/Uyk/KT8kLztcbiIsCiAgICAiY29uc3QgeyBwYXJzZSB9ID0gcmVxdWlyZSgnc210cC1hZGRyZXNzLXBhcnNlcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICh2YWx1ZSkgPT4ge1xuICB0cnkge1xuICAgIHBhcnNlKHZhbHVlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuIiwKICAgICJ2YXIgX19jcmVhdGU9T2JqZWN0LmNyZWF0ZTt2YXJ7Z2V0UHJvdG90eXBlT2Y6X19nZXRQcm90b09mLGRlZmluZVByb3BlcnR5Ol9fZGVmUHJvcCxnZXRPd25Qcm9wZXJ0eU5hbWVzOl9fZ2V0T3duUHJvcE5hbWVzfT1PYmplY3Q7dmFyIF9faGFzT3duUHJvcD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIF9fYWNjZXNzUHJvcChrZXkpe3JldHVybiB0aGlzW2tleV19dmFyIF9fcmVFeHBvcnQ9KHRhcmdldCxtb2Qsc2Vjb25kVGFyZ2V0KT0+e3ZhciBrZXlzPW1vZCYmdHlwZW9mIG1vZD09PVwib2JqZWN0XCJ8fHR5cGVvZiBtb2Q9PT1cImZ1bmN0aW9uXCI/X19nZXRPd25Qcm9wTmFtZXMobW9kKTpbXTtmb3IobGV0IGtleSBvZiBrZXlzKWlmKCFfX2hhc093blByb3AuY2FsbCh0YXJnZXQsa2V5KSYma2V5IT09XCJkZWZhdWx0XCIpX19kZWZQcm9wKHRhcmdldCxrZXkse2dldDpfX2FjY2Vzc1Byb3AuYmluZChtb2Qsa2V5KSxlbnVtZXJhYmxlOiEwfSk7aWYoc2Vjb25kVGFyZ2V0KXtmb3IobGV0IGtleSBvZiBrZXlzKWlmKCFfX2hhc093blByb3AuY2FsbChzZWNvbmRUYXJnZXQsa2V5KSYma2V5IT09XCJkZWZhdWx0XCIpX19kZWZQcm9wKHNlY29uZFRhcmdldCxrZXkse2dldDpfX2FjY2Vzc1Byb3AuYmluZChtb2Qsa2V5KSxlbnVtZXJhYmxlOiEwfSk7cmV0dXJuIHNlY29uZFRhcmdldH19LF9fdG9FU01DYWNoZV9ub2RlLF9fdG9FU01DYWNoZV9lc20sX190b0VTTT0obW9kLGlzTm9kZU1vZGUsdGFyZ2V0KT0+e3ZhciBjYW5DYWNoZT1tb2QhPW51bGwmJnR5cGVvZiBtb2Q9PT1cIm9iamVjdFwiO2lmKGNhbkNhY2hlKXt2YXIgY2FjaGU9aXNOb2RlTW9kZT9fX3RvRVNNQ2FjaGVfbm9kZT8/PW5ldyBXZWFrTWFwOl9fdG9FU01DYWNoZV9lc20/Pz1uZXcgV2Vha01hcCxjYWNoZWQ9Y2FjaGUuZ2V0KG1vZCk7aWYoY2FjaGVkKXJldHVybiBjYWNoZWR9dGFyZ2V0PW1vZCE9bnVsbD9fX2NyZWF0ZShfX2dldFByb3RvT2YobW9kKSk6e307bGV0IHRvPWlzTm9kZU1vZGV8fCFtb2R8fCFtb2QuX19lc01vZHVsZXx8IV9faGFzT3duUHJvcC5jYWxsKG1vZCxcImRlZmF1bHRcIik/X19kZWZQcm9wKHRhcmdldCxcImRlZmF1bHRcIix7dmFsdWU6bW9kLGVudW1lcmFibGU6ITB9KTp0YXJnZXQ7aWYobW9kJiZ0eXBlb2YgbW9kPT09XCJvYmplY3RcInx8dHlwZW9mIG1vZD09PVwiZnVuY3Rpb25cIil7Zm9yKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMobW9kKSlpZighX19oYXNPd25Qcm9wLmNhbGwodG8sa2V5KSlfX2RlZlByb3AodG8sa2V5LHtnZXQ6X19hY2Nlc3NQcm9wLmJpbmQobW9kLGtleSksZW51bWVyYWJsZTohMH0pfWlmKGNhbkNhY2hlKWNhY2hlLnNldChtb2QsdG8pO3JldHVybiB0b307dmFyIF9fY29tbW9uSlM9KGNiLG1vZCk9PigpPT4obW9kfHxjYigobW9kPXtleHBvcnRzOnt9fSkuZXhwb3J0cyxtb2QpLG1vZC5leHBvcnRzKTt2YXIgX19yZXR1cm5WYWx1ZT0odik9PnY7ZnVuY3Rpb24gX19leHBvcnRTZXR0ZXIobmFtZSxuZXdWYWx1ZSl7dGhpc1tuYW1lXT1fX3JldHVyblZhbHVlLmJpbmQobnVsbCxuZXdWYWx1ZSl9dmFyIF9fZXhwb3J0PSh0YXJnZXQsYWxsKT0+e2Zvcih2YXIgbmFtZSBpbiBhbGwpX19kZWZQcm9wKHRhcmdldCxuYW1lLHtnZXQ6YWxsW25hbWVdLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHNldDpfX2V4cG9ydFNldHRlci5iaW5kKGFsbCxuYW1lKX0pfTt2YXIgcmVxdWlyZV9wdW55Y29kZT1fX2NvbW1vbkpTKGZ1bmN0aW9uKGV4cG9ydHMsbW9kdWxlKXt2YXIgcmVnZXhQdW55Y29kZT0vXnhuLS0vLHJlZ2V4Tm9uQVNDSUk9L1teXFwwLVxceDdGXS8scmVnZXhTZXBhcmF0b3JzPS9bXFx4MkVcXHUzMDAyXFx1RkYwRVxcdUZGNjFdL2csZXJyb3JzPXtvdmVyZmxvdzpcIk92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzXCIsXCJub3QtYmFzaWNcIjpcIklsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludClcIixcImludmFsaWQtaW5wdXRcIjpcIkludmFsaWQgaW5wdXRcIn0sZmxvb3I9TWF0aC5mbG9vcixzdHJpbmdGcm9tQ2hhckNvZGU9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBlcnJvcih0eXBlKXt0aHJvdyBSYW5nZUVycm9yKGVycm9yc1t0eXBlXSl9ZnVuY3Rpb24gbWFwKGFycmF5LGNhbGxiYWNrKXtsZXQgcmVzdWx0PVtdLGxlbmd0aD1hcnJheS5sZW5ndGg7d2hpbGUobGVuZ3RoLS0pcmVzdWx0W2xlbmd0aF09Y2FsbGJhY2soYXJyYXlbbGVuZ3RoXSk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBtYXBEb21haW4oZG9tYWluLGNhbGxiYWNrKXtsZXQgcGFydHM9ZG9tYWluLnNwbGl0KFwiQFwiKSxyZXN1bHQ9XCJcIjtpZihwYXJ0cy5sZW5ndGg+MSlyZXN1bHQ9cGFydHNbMF0rXCJAXCIsZG9tYWluPXBhcnRzWzFdO2RvbWFpbj1kb21haW4ucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsXCIuXCIpO2xldCBsYWJlbHM9ZG9tYWluLnNwbGl0KFwiLlwiKSxlbmNvZGVkPW1hcChsYWJlbHMsY2FsbGJhY2spLmpvaW4oXCIuXCIpO3JldHVybiByZXN1bHQrZW5jb2RlZH1mdW5jdGlvbiB1Y3MyZGVjb2RlKHN0cmluZyl7bGV0IG91dHB1dD1bXSxjb3VudGVyPTAsbGVuZ3RoPXN0cmluZy5sZW5ndGg7d2hpbGUoY291bnRlcjxsZW5ndGgpe2xldCB2YWx1ZT1zdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO2lmKHZhbHVlPj01NTI5NiYmdmFsdWU8PTU2MzE5JiZjb3VudGVyPGxlbmd0aCl7bGV0IGV4dHJhPXN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7aWYoKGV4dHJhJjY0NTEyKT09NTYzMjApb3V0cHV0LnB1c2goKCh2YWx1ZSYxMDIzKTw8MTApKyhleHRyYSYxMDIzKSs2NTUzNik7ZWxzZSBvdXRwdXQucHVzaCh2YWx1ZSksY291bnRlci0tfWVsc2Ugb3V0cHV0LnB1c2godmFsdWUpfXJldHVybiBvdXRwdXR9dmFyIHVjczJlbmNvZGU9KGNvZGVQb2ludHMpPT5TdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKSxiYXNpY1RvRGlnaXQ9ZnVuY3Rpb24oY29kZVBvaW50KXtpZihjb2RlUG9pbnQ+PTQ4JiZjb2RlUG9pbnQ8NTgpcmV0dXJuIDI2Kyhjb2RlUG9pbnQtNDgpO2lmKGNvZGVQb2ludD49NjUmJmNvZGVQb2ludDw5MSlyZXR1cm4gY29kZVBvaW50LTY1O2lmKGNvZGVQb2ludD49OTcmJmNvZGVQb2ludDwxMjMpcmV0dXJuIGNvZGVQb2ludC05NztyZXR1cm4gMzZ9LGRpZ2l0VG9CYXNpYz1mdW5jdGlvbihkaWdpdCxmbGFnKXtyZXR1cm4gZGlnaXQrMjIrNzUqKGRpZ2l0PDI2KS0oKGZsYWchPTApPDw1KX0sYWRhcHQ9ZnVuY3Rpb24oZGVsdGEsbnVtUG9pbnRzLGZpcnN0VGltZSl7bGV0IGs9MDtkZWx0YT1maXJzdFRpbWU/Zmxvb3IoZGVsdGEvNzAwKTpkZWx0YT4+MSxkZWx0YSs9Zmxvb3IoZGVsdGEvbnVtUG9pbnRzKTtmb3IoO2RlbHRhPjQ1NTtrKz0zNilkZWx0YT1mbG9vcihkZWx0YS8zNSk7cmV0dXJuIGZsb29yKGsrMzYqZGVsdGEvKGRlbHRhKzM4KSl9LGRlY29kZT1mdW5jdGlvbihpbnB1dCl7bGV0IG91dHB1dD1bXSxpbnB1dExlbmd0aD1pbnB1dC5sZW5ndGgsaT0wLG49MTI4LGJpYXM9NzIsYmFzaWM9aW5wdXQubGFzdEluZGV4T2YoXCItXCIpO2lmKGJhc2ljPDApYmFzaWM9MDtmb3IobGV0IGo9MDtqPGJhc2ljOysrail7aWYoaW5wdXQuY2hhckNvZGVBdChqKT49MTI4KWVycm9yKFwibm90LWJhc2ljXCIpO291dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpfWZvcihsZXQgaW5kZXg9YmFzaWM+MD9iYXNpYysxOjA7aW5kZXg8aW5wdXRMZW5ndGg7KXtsZXQgb2xkaT1pO2ZvcihsZXQgdz0xLGs9MzY7O2srPTM2KXtpZihpbmRleD49aW5wdXRMZW5ndGgpZXJyb3IoXCJpbnZhbGlkLWlucHV0XCIpO2xldCBkaWdpdD1iYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7aWYoZGlnaXQ+PTM2KWVycm9yKFwiaW52YWxpZC1pbnB1dFwiKTtpZihkaWdpdD5mbG9vcigoMjE0NzQ4MzY0Ny1pKS93KSllcnJvcihcIm92ZXJmbG93XCIpO2krPWRpZ2l0Knc7bGV0IHQ9azw9Ymlhcz8xOms+PWJpYXMrMjY/MjY6ay1iaWFzO2lmKGRpZ2l0PHQpYnJlYWs7bGV0IGJhc2VNaW51c1Q9MzYtdDtpZih3PmZsb29yKDIxNDc0ODM2NDcvYmFzZU1pbnVzVCkpZXJyb3IoXCJvdmVyZmxvd1wiKTt3Kj1iYXNlTWludXNUfWxldCBvdXQ9b3V0cHV0Lmxlbmd0aCsxO2lmKGJpYXM9YWRhcHQoaS1vbGRpLG91dCxvbGRpPT0wKSxmbG9vcihpL291dCk+MjE0NzQ4MzY0Ny1uKWVycm9yKFwib3ZlcmZsb3dcIik7bis9Zmxvb3IoaS9vdXQpLGklPW91dCxvdXRwdXQuc3BsaWNlKGkrKywwLG4pfXJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5vdXRwdXQpfSxlbmNvZGU9ZnVuY3Rpb24oaW5wdXQpe2xldCBvdXRwdXQ9W107aW5wdXQ9dWNzMmRlY29kZShpbnB1dCk7bGV0IGlucHV0TGVuZ3RoPWlucHV0Lmxlbmd0aCxuPTEyOCxkZWx0YT0wLGJpYXM9NzI7Zm9yKGxldCBjdXJyZW50VmFsdWUgb2YgaW5wdXQpaWYoY3VycmVudFZhbHVlPDEyOClvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7bGV0IGJhc2ljTGVuZ3RoPW91dHB1dC5sZW5ndGgsaGFuZGxlZENQQ291bnQ9YmFzaWNMZW5ndGg7aWYoYmFzaWNMZW5ndGgpb3V0cHV0LnB1c2goXCItXCIpO3doaWxlKGhhbmRsZWRDUENvdW50PGlucHV0TGVuZ3RoKXtsZXQgbT0yMTQ3NDgzNjQ3O2ZvcihsZXQgY3VycmVudFZhbHVlIG9mIGlucHV0KWlmKGN1cnJlbnRWYWx1ZT49biYmY3VycmVudFZhbHVlPG0pbT1jdXJyZW50VmFsdWU7bGV0IGhhbmRsZWRDUENvdW50UGx1c09uZT1oYW5kbGVkQ1BDb3VudCsxO2lmKG0tbj5mbG9vcigoMjE0NzQ4MzY0Ny1kZWx0YSkvaGFuZGxlZENQQ291bnRQbHVzT25lKSllcnJvcihcIm92ZXJmbG93XCIpO2RlbHRhKz0obS1uKSpoYW5kbGVkQ1BDb3VudFBsdXNPbmUsbj1tO2ZvcihsZXQgY3VycmVudFZhbHVlIG9mIGlucHV0KXtpZihjdXJyZW50VmFsdWU8biYmKytkZWx0YT4yMTQ3NDgzNjQ3KWVycm9yKFwib3ZlcmZsb3dcIik7aWYoY3VycmVudFZhbHVlPT09bil7bGV0IHE9ZGVsdGE7Zm9yKGxldCBrPTM2OztrKz0zNil7bGV0IHQ9azw9Ymlhcz8xOms+PWJpYXMrMjY/MjY6ay1iaWFzO2lmKHE8dClicmVhaztsZXQgcU1pbnVzVD1xLXQsYmFzZU1pbnVzVD0zNi10O291dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCtxTWludXNUJWJhc2VNaW51c1QsMCkpKSxxPWZsb29yKHFNaW51c1QvYmFzZU1pbnVzVCl9b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLDApKSksYmlhcz1hZGFwdChkZWx0YSxoYW5kbGVkQ1BDb3VudFBsdXNPbmUsaGFuZGxlZENQQ291bnQ9PT1iYXNpY0xlbmd0aCksZGVsdGE9MCwrK2hhbmRsZWRDUENvdW50fX0rK2RlbHRhLCsrbn1yZXR1cm4gb3V0cHV0LmpvaW4oXCJcIil9LHRvVW5pY29kZT1mdW5jdGlvbihpbnB1dCl7cmV0dXJuIG1hcERvbWFpbihpbnB1dCxmdW5jdGlvbihzdHJpbmcpe3JldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKT9kZWNvZGUoc3RyaW5nLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpOnN0cmluZ30pfSx0b0FTQ0lJPWZ1bmN0aW9uKGlucHV0KXtyZXR1cm4gbWFwRG9tYWluKGlucHV0LGZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpP1wieG4tLVwiK2VuY29kZShzdHJpbmcpOnN0cmluZ30pfSxwdW55Y29kZT17dmVyc2lvbjpcIjIuMy4xXCIsdWNzMjp7ZGVjb2RlOnVjczJkZWNvZGUsZW5jb2RlOnVjczJlbmNvZGV9LGRlY29kZSxlbmNvZGUsdG9BU0NJSSx0b1VuaWNvZGV9O21vZHVsZS5leHBvcnRzPXB1bnljb2RlfSk7dmFyIGV4cG9ydHNfcHVueWNvZGU9e307X19leHBvcnQoZXhwb3J0c19wdW55Y29kZSx7ZGVmYXVsdDooKT0+aW1wb3J0X3B1bnljb2RlLmRlZmF1bHR9KTtfX3JlRXhwb3J0KGV4cG9ydHNfcHVueWNvZGUsX190b0VTTShyZXF1aXJlX3B1bnljb2RlKCkpKTt2YXIgaW1wb3J0X3B1bnljb2RlPV9fdG9FU00ocmVxdWlyZV9wdW55Y29kZSgpKTt2YXIgZXhwb3J0X2RlZmF1bHQ9aW1wb3J0X3B1bnljb2RlLmRlZmF1bHQ7ZXhwb3J0e2V4cG9ydF9kZWZhdWx0IGFzIGRlZmF1bHR9OyIsCiAgICAiY29uc3QgeyB0b0FTQ0lJIH0gPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5jb25zdCBob3N0bmFtZVJlZ2V4ID1cbiAgL14oPz0uezEsMjUzfVxcLj8kKVthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyg/OlxcLlthLXowLTldKD86Wy0wLTlhLXpdezAsNjF9WzAtOWEtel0pPykqXFwuPyQvaTtcblxubW9kdWxlLmV4cG9ydHMgPSAodmFsdWUpID0+IHtcbiAgY29uc3QgaG9zdG5hbWUgPSB0b0FTQ0lJKHZhbHVlKTtcbiAgcmV0dXJuIChcbiAgICBob3N0bmFtZS5yZXBsYWNlKC9cXC4kLywgJycpLmxlbmd0aCA8PSAyNTMgJiYgaG9zdG5hbWVSZWdleC50ZXN0KGhvc3RuYW1lKVxuICApO1xufTtcbiIsCiAgICAiY29uc3QgeyBwYXJzZSB9ID0gcmVxdWlyZSgndXJpLWpzJyk7XG5jb25zdCB7IGFkZHJlc3NQYXJzZXIgfSA9IHJlcXVpcmUoJ3NtdHAtYWRkcmVzcy1wYXJzZXInKTtcbmNvbnN0IHNjaGVtZXMgPSByZXF1aXJlKCdzY2hlbWVzJyk7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlKGFkZHJlc3MpIHtcbiAgdHJ5IHtcbiAgICBhZGRyZXNzUGFyc2VyKGFkZHJlc3MpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSAodmFsdWUpID0+IHtcbiAgY29uc3QgaXJpID0gcGFyc2UodmFsdWUpO1xuICAvLyBBbGwgdmFsaWQgSVJJcyBhcmUgdmFsaWQgSVJJLXJlZmVyZW5jZXNcbiAgaWYgKGlyaS5zY2hlbWUgPT09ICdtYWlsdG8nICYmIGlyaS50by5ldmVyeSh2YWxpZGF0ZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBpcmkucmVmZXJlbmNlID09PSAnYWJzb2x1dGUnICYmXG4gICAgaXJpLnBhdGggIT09IHVuZGVmaW5lZCAmJlxuICAgIHNjaGVtZXMuYWxsQnlOYW1lW2lyaS5zY2hlbWVdXG4gICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIHZhbGlkIElSSS1yZWZlcmVuY2VcblxuICAvLyBJZiB0aGVyZSBpcyBhIHNjaGVtZSwgaXQgbXVzdCBiZSB2YWxpZFxuICBpZiAoaXJpLnNjaGVtZSAmJiAhc2NoZW1lcy5hbGxCeU5hbWVbaXJpLnNjaGVtZV0pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBDaGVjayB0aGVyZSdzIGEgcGF0aCBhbmQgZm9yIGEgcHJvcGVyIHR5cGUgb2YgcmVmZXJlbmNlXG4gIHJldHVybiAoXG4gICAgaXJpLnBhdGggIT09IHVuZGVmaW5lZCAmJlxuICAgIChpcmkucmVmZXJlbmNlID09PSAncmVsYXRpdmUnIHx8XG4gICAgICBpcmkucmVmZXJlbmNlID09PSAnc2FtZS1kb2N1bWVudCcgfHxcbiAgICAgIGlyaS5yZWZlcmVuY2UgPT09ICd1cmknKVxuICApO1xufTtcbiIsCiAgICAibW9kdWxlLmV4cG9ydHMuaXJpID0gcmVxdWlyZSgnLi9pcmknKTtcbm1vZHVsZS5leHBvcnRzLmR1cmF0aW9uID0gcmVxdWlyZSgnLi9kdXJhdGlvbicpO1xubW9kdWxlLmV4cG9ydHNbJ2lkbi1lbWFpbCddID0gcmVxdWlyZSgnLi9pZG4tZW1haWwnKTtcbm1vZHVsZS5leHBvcnRzWydpZG4taG9zdG5hbWUnXSA9IHJlcXVpcmUoJy4vaWRuLWhvc3RuYW1lJyk7XG5tb2R1bGUuZXhwb3J0c1snaXJpLXJlZmVyZW5jZSddID0gcmVxdWlyZSgnLi9pcmktcmVmZXJlbmNlJyk7XG4iLAogICAgImNvbnN0IGZvcm1hdHMgPSByZXF1aXJlKCcuL2Zvcm1hdHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoYWp2LCBvcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgYWxsRm9ybWF0cyA9IE9iamVjdC5rZXlzKGZvcm1hdHMpO1xuICBsZXQgZm9ybWF0c1RvSW5zdGFsbCA9IGFsbEZvcm1hdHM7XG5cbiAgaWYgKG9wdGlvbnMuZm9ybWF0cykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShvcHRpb25zLmZvcm1hdHMpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zLmZvcm1hdHMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgIGZvcm1hdHNUb0luc3RhbGwgPSBvcHRpb25zLmZvcm1hdHM7XG4gIH1cblxuICBhbGxGb3JtYXRzXG4gICAgLmZpbHRlcigoZm9ybWF0KSA9PiBmb3JtYXRzVG9JbnN0YWxsLmluY2x1ZGVzKGZvcm1hdCkpXG4gICAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgYWp2LmFkZEZvcm1hdChrZXksIGZvcm1hdHNba2V5XSk7XG4gICAgfSk7XG5cbiAgcmV0dXJuIGFqdjtcbn07XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcbiAgLCBwcmVmaXggPSAnfic7XG5cbi8qKlxuICogQ29uc3RydWN0b3IgdG8gY3JlYXRlIGEgc3RvcmFnZSBmb3Igb3VyIGBFRWAgb2JqZWN0cy5cbiAqIEFuIGBFdmVudHNgIGluc3RhbmNlIGlzIGEgcGxhaW4gb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgYXJlIGV2ZW50IG5hbWVzLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRXZlbnRzKCkge31cblxuLy9cbi8vIFdlIHRyeSB0byBub3QgaW5oZXJpdCBmcm9tIGBPYmplY3QucHJvdG90eXBlYC4gSW4gc29tZSBlbmdpbmVzIGNyZWF0aW5nIGFuXG4vLyBpbnN0YW5jZSBpbiB0aGlzIHdheSBpcyBmYXN0ZXIgdGhhbiBjYWxsaW5nIGBPYmplY3QuY3JlYXRlKG51bGwpYCBkaXJlY3RseS5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBjaGFyYWN0ZXIgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Rcbi8vIG92ZXJyaWRkZW4gb3IgdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy9cbmlmIChPYmplY3QuY3JlYXRlKSB7XG4gIEV2ZW50cy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIC8vXG4gIC8vIFRoaXMgaGFjayBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgYF9fcHJvdG9fX2AgcHJvcGVydHkgaXMgc3RpbGwgaW5oZXJpdGVkIGluXG4gIC8vIHNvbWUgb2xkIGJyb3dzZXJzIGxpa2UgQW5kcm9pZCA0LCBpUGhvbmUgNS4xLCBPcGVyYSAxMSBhbmQgU2FmYXJpIDUuXG4gIC8vXG4gIGlmICghbmV3IEV2ZW50cygpLl9fcHJvdG9fXykgcHJlZml4ID0gZmFsc2U7XG59XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgZXZlbnQgbGlzdGVuZXIuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29uY2U9ZmFsc2VdIFNwZWNpZnkgaWYgdGhlIGxpc3RlbmVyIGlzIGEgb25lLXRpbWUgbGlzdGVuZXIuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIEVFKGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHRoaXMuZm4gPSBmbjtcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5vbmNlID0gb25jZSB8fCBmYWxzZTtcbn1cblxuLyoqXG4gKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gZW1pdHRlciBSZWZlcmVuY2UgdG8gdGhlIGBFdmVudEVtaXR0ZXJgIGluc3RhbmNlLlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBTcGVjaWZ5IGlmIHRoZSBsaXN0ZW5lciBpcyBhIG9uZS10aW1lIGxpc3RlbmVyLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGFkZExpc3RlbmVyKGVtaXR0ZXIsIGV2ZW50LCBmbiwgY29udGV4dCwgb25jZSkge1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGxpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IGVtaXR0ZXIsIG9uY2UpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghZW1pdHRlci5fZXZlbnRzW2V2dF0pIGVtaXR0ZXIuX2V2ZW50c1tldnRdID0gbGlzdGVuZXIsIGVtaXR0ZXIuX2V2ZW50c0NvdW50Kys7XG4gIGVsc2UgaWYgKCFlbWl0dGVyLl9ldmVudHNbZXZ0XS5mbikgZW1pdHRlci5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gIGVsc2UgZW1pdHRlci5fZXZlbnRzW2V2dF0gPSBbZW1pdHRlci5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXTtcblxuICByZXR1cm4gZW1pdHRlcjtcbn1cblxuLyoqXG4gKiBDbGVhciBldmVudCBieSBuYW1lLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBlbWl0dGVyIFJlZmVyZW5jZSB0byB0aGUgYEV2ZW50RW1pdHRlcmAgaW5zdGFuY2UuXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZ0IFRoZSBFdmVudCBuYW1lLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2xlYXJFdmVudChlbWl0dGVyLCBldnQpIHtcbiAgaWYgKC0tZW1pdHRlci5fZXZlbnRzQ291bnQgPT09IDApIGVtaXR0ZXIuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgZWxzZSBkZWxldGUgZW1pdHRlci5fZXZlbnRzW2V2dF07XG59XG5cbi8qKlxuICogTWluaW1hbCBgRXZlbnRFbWl0dGVyYCBpbnRlcmZhY2UgdGhhdCBpcyBtb2xkZWQgYWdhaW5zdCB0aGUgTm9kZS5qc1xuICogYEV2ZW50RW1pdHRlcmAgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIHRoaXMuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xufVxuXG4vKipcbiAqIFJldHVybiBhbiBhcnJheSBsaXN0aW5nIHRoZSBldmVudHMgZm9yIHdoaWNoIHRoZSBlbWl0dGVyIGhhcyByZWdpc3RlcmVkXG4gKiBsaXN0ZW5lcnMuXG4gKlxuICogQHJldHVybnMge0FycmF5fVxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICB2YXIgbmFtZXMgPSBbXVxuICAgICwgZXZlbnRzXG4gICAgLCBuYW1lO1xuXG4gIGlmICh0aGlzLl9ldmVudHNDb3VudCA9PT0gMCkgcmV0dXJuIG5hbWVzO1xuXG4gIGZvciAobmFtZSBpbiAoZXZlbnRzID0gdGhpcy5fZXZlbnRzKSkge1xuICAgIGlmIChoYXMuY2FsbChldmVudHMsIG5hbWUpKSBuYW1lcy5wdXNoKHByZWZpeCA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lKTtcbiAgfVxuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgcmV0dXJuIG5hbWVzLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGV2ZW50cykpO1xuICB9XG5cbiAgcmV0dXJuIG5hbWVzO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gVGhlIHJlZ2lzdGVyZWQgbGlzdGVuZXJzLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyhldmVudCkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgaGFuZGxlcnMgPSB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoIWhhbmRsZXJzKSByZXR1cm4gW107XG4gIGlmIChoYW5kbGVycy5mbikgcmV0dXJuIFtoYW5kbGVycy5mbl07XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBoYW5kbGVycy5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBoYW5kbGVyc1tpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBudW1iZXIgb2YgbGlzdGVuZXJzIGxpc3RlbmluZyB0byBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1iZXIgb2YgbGlzdGVuZXJzLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiBsaXN0ZW5lckNvdW50KGV2ZW50KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50XG4gICAgLCBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoIWxpc3RlbmVycykgcmV0dXJuIDA7XG4gIGlmIChsaXN0ZW5lcnMuZm4pIHJldHVybiAxO1xuICByZXR1cm4gbGlzdGVuZXJzLmxlbmd0aDtcbn07XG5cbi8qKlxuICogQ2FsbHMgZWFjaCBvZiB0aGUgbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZXZlbnQgaGFkIGxpc3RlbmVycywgZWxzZSBgZmFsc2VgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBjYXNlIDQ6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIsIGEzKTsgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKCFhcmdzKSBmb3IgKGogPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGogPCBsZW47IGorKykge1xuICAgICAgICAgICAgYXJnc1tqIC0gMV0gPSBhcmd1bWVudHNbal07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGlzdGVuZXJzW2ldLmZuLmFwcGx5KGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhcmdzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBbY29udGV4dD10aGlzXSBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBmdW5jdGlvbiBvbihldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGFkZExpc3RlbmVyKHRoaXMsIGV2ZW50LCBmbiwgY29udGV4dCwgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBvbmUtdGltZSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IFtjb250ZXh0PXRoaXNdIFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGFkZExpc3RlbmVyKHRoaXMsIGV2ZW50LCBmbiwgY29udGV4dCwgdHJ1ZSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSB0aGUgbGlzdGVuZXJzIG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gT25seSByZW1vdmUgdGhlIGxpc3RlbmVycyB0aGF0IG1hdGNoIHRoaXMgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgT25seSByZW1vdmUgdGhlIGxpc3RlbmVycyB0aGF0IGhhdmUgdGhpcyBjb250ZXh0LlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgcmVtb3ZlIG9uZS10aW1lIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGV2ZW50LCBmbiwgY29udGV4dCwgb25jZSkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcbiAgaWYgKCFmbikge1xuICAgIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKFxuICAgICAgbGlzdGVuZXJzLmZuID09PSBmbiAmJlxuICAgICAgKCFvbmNlIHx8IGxpc3RlbmVycy5vbmNlKSAmJlxuICAgICAgKCFjb250ZXh0IHx8IGxpc3RlbmVycy5jb250ZXh0ID09PSBjb250ZXh0KVxuICAgICkge1xuICAgICAgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMCwgZXZlbnRzID0gW10sIGxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuIHx8XG4gICAgICAgIChvbmNlICYmICFsaXN0ZW5lcnNbaV0ub25jZSkgfHxcbiAgICAgICAgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICApIHtcbiAgICAgICAgZXZlbnRzLnB1c2gobGlzdGVuZXJzW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIFJlc2V0IHRoZSBhcnJheSwgb3IgcmVtb3ZlIGl0IGNvbXBsZXRlbHkgaWYgd2UgaGF2ZSBubyBtb3JlIGxpc3RlbmVycy5cbiAgICAvL1xuICAgIGlmIChldmVudHMubGVuZ3RoKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGV2ZW50cy5sZW5ndGggPT09IDEgPyBldmVudHNbMF0gOiBldmVudHM7XG4gICAgZWxzZSBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMsIG9yIHRob3NlIG9mIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IFtldmVudF0gVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIHZhciBldnQ7XG5cbiAgaWYgKGV2ZW50KSB7XG4gICAgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcbiAgICBpZiAodGhpcy5fZXZlbnRzW2V2dF0pIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gQWxpYXMgbWV0aG9kcyBuYW1lcyBiZWNhdXNlIHBlb3BsZSByb2xsIGxpa2UgdGhhdC5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbjtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEFsbG93IGBFdmVudEVtaXR0ZXJgIHRvIGJlIGltcG9ydGVkIGFzIG1vZHVsZSBuYW1lc3BhY2UuXG4vL1xuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBBY3Rpdml0eVN0cmVhbSwgSnNvbkxkQ29udGV4dCB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5cbi8qKlxuICogQ2Fub25pY2FsIEFTMiBiYXNlIHZvY2FidWxhcnkgVVJMLlxuICovXG5leHBvcnQgY29uc3QgQVMyX0JBU0VfQ09OVEVYVF9VUkwgPSBcImh0dHBzOi8vd3d3LnczLm9yZy9ucy9hY3Rpdml0eXN0cmVhbXNcIjtcblxuLyoqXG4gKiBTb2NrZXRodWIgYmFzZSB2b2NhYnVsYXJ5IFVSTCBmb3Igc2hhcmVkIHBsYXRmb3JtIHRlcm1zLlxuICovXG5leHBvcnQgY29uc3QgU09DS0VUSFVCX0JBU0VfQ09OVEVYVF9VUkwgPVxuICAgIFwiaHR0cHM6Ly9zb2NrZXRodWIub3JnL25zL2NvbnRleHQvdjEuanNvbmxkXCI7XG5cbi8qKlxuICogVVJMIHByZWZpeCBmb3IgcGVyLXBsYXRmb3JtIGNvbnRleHQgVVJMcy5cbiAqL1xuZXhwb3J0IGNvbnN0IFBMQVRGT1JNX0NPTlRFWFRfUFJFRklYID1cbiAgICBcImh0dHBzOi8vc29ja2V0aHViLm9yZy9ucy9jb250ZXh0L3BsYXRmb3JtL1wiO1xuXG4vKipcbiAqIEJ1aWx0LWluIHBzZXVkby1wbGF0Zm9ybSB1c2VkIGZvciBzZXJ2ZXItc2lkZSBlcnJvciBwYXlsb2Fkcy5cbiAqL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1BMQVRGT1JNX0lEID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IEVSUk9SX1BMQVRGT1JNX0NPTlRFWFRfVVJMID1cbiAgICBcImh0dHBzOi8vc29ja2V0aHViLm9yZy9ucy9jb250ZXh0L3BsYXRmb3JtL2Vycm9yL3YxLmpzb25sZFwiO1xuXG4vKipcbiAqIEJ1aWx0LWluIHBzZXVkby1wbGF0Zm9ybSB1c2VkIGZvciBpbnRlcm5hbCBjb250cm9sIG1lc3NhZ2VzLlxuICovXG5leHBvcnQgY29uc3QgSU5URVJOQUxfUExBVEZPUk1fSUQgPSBcInNvY2tldGh1YjppbnRlcm5hbFwiO1xuZXhwb3J0IGNvbnN0IElOVEVSTkFMX1BMQVRGT1JNX0NPTlRFWFRfVVJMID1cbiAgICBcImh0dHBzOi8vc29ja2V0aHViLm9yZy9ucy9jb250ZXh0L3BsYXRmb3JtL3NvY2tldGh1YjppbnRlcm5hbC92MS5qc29ubGRcIjtcblxuY29uc3QgcGxhdGZvcm1Db250ZXh0VG9QbGF0Zm9ybUlkID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbmNvbnN0IHBsYXRmb3JtQ29udGV4dFRvU2NoZW1hSWQgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuY29uc3QgcGxhdGZvcm1Db250ZXh0VG9DcmVkZW50aWFsc1NjaGVtYUlkID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuLyoqXG4gKiBCdWlsZCB0aGUgY2Fub25pY2FsIFNvY2tldGh1YiBAY29udGV4dCBhcnJheSBmcm9tIGEgcGxhdGZvcm0gaWQgb3IgZnVsbCBjb250ZXh0IFVSTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ2Fub25pY2FsQ29udGV4dChwbGF0Zm9ybTogc3RyaW5nKTogSnNvbkxkQ29udGV4dCB7XG4gICAgY29uc3QgcGxhdGZvcm1VcmwgPSBwbGF0Zm9ybS5zdGFydHNXaXRoKFwiaHR0cHM6Ly9cIilcbiAgICAgICAgPyBwbGF0Zm9ybVxuICAgICAgICA6IGAke1BMQVRGT1JNX0NPTlRFWFRfUFJFRklYfSR7cGxhdGZvcm19L3YxLmpzb25sZGA7XG4gICAgcmV0dXJuIFtBUzJfQkFTRV9DT05URVhUX1VSTCwgU09DS0VUSFVCX0JBU0VfQ09OVEVYVF9VUkwsIHBsYXRmb3JtVXJsXTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHRoZSBwbGF0Zm9ybSBJRCBmcm9tIGEgY2Fub25pY2FsIEBjb250ZXh0IGFycmF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGxhdGZvcm1JZEZyb21Db250ZXh0KFxuICAgIGNvbnRleHQ6IHN0cmluZ1tdIHwgdW5rbm93bixcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRleHQpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgY29udGV4dCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgZW50cnkgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIGVudHJ5LnN0YXJ0c1dpdGgoUExBVEZPUk1fQ09OVEVYVF9QUkVGSVgpXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgcmVzdCA9IGVudHJ5LnNsaWNlKFBMQVRGT1JNX0NPTlRFWFRfUFJFRklYLmxlbmd0aCk7XG4gICAgICAgICAgICBjb25zdCBzbGFzaElkeCA9IHJlc3QuaW5kZXhPZihcIi9cIik7XG4gICAgICAgICAgICBpZiAoc2xhc2hJZHggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Quc2xpY2UoMCwgc2xhc2hJZHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIHVua25vd24gQGNvbnRleHQgaW5wdXQgaW50byBhIHN0cmluZy1vbmx5IGFycmF5LlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVDb250ZXh0QXJyYXkodmFsdWU6IHVua25vd24pOiBBcnJheTxzdHJpbmc+IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlLmZpbHRlcigoZW50cnkpOiBlbnRyeSBpcyBzdHJpbmcgPT4gdHlwZW9mIGVudHJ5ID09PSBcInN0cmluZ1wiKTtcbn1cblxuLyoqXG4gKiBHZXQgYSBub3JtYWxpemVkIEBjb250ZXh0IGFycmF5IGZyb20gYW4gYWN0aXZpdHkgc3RyZWFtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udGV4dEFycmF5KG1zZzogQWN0aXZpdHlTdHJlYW0pOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbm9ybWFsaXplQ29udGV4dEFycmF5KG1zZ1tcIkBjb250ZXh0XCJdKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhIHBsYXRmb3JtIGNvbnRleHQgVVJMIGFuZCBpdHMgc2NoZW1hIElEcyBmb3IgcnVudGltZSByZXNvbHV0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJQbGF0Zm9ybUNvbnRleHQoXG4gICAgcGxhdGZvcm1JZDogc3RyaW5nLFxuICAgIHBsYXRmb3JtQ29udGV4dFVybDogc3RyaW5nLFxuICAgIHNjaGVtYUlkOiBzdHJpbmcsXG4gICAgY3JlZGVudGlhbHNTY2hlbWFJZDogc3RyaW5nLFxuKSB7XG4gICAgcGxhdGZvcm1Db250ZXh0VG9QbGF0Zm9ybUlkLnNldChwbGF0Zm9ybUNvbnRleHRVcmwsIHBsYXRmb3JtSWQpO1xuICAgIHBsYXRmb3JtQ29udGV4dFRvU2NoZW1hSWQuc2V0KHBsYXRmb3JtQ29udGV4dFVybCwgc2NoZW1hSWQpO1xuICAgIHBsYXRmb3JtQ29udGV4dFRvQ3JlZGVudGlhbHNTY2hlbWFJZC5zZXQoXG4gICAgICAgIHBsYXRmb3JtQ29udGV4dFVybCxcbiAgICAgICAgY3JlZGVudGlhbHNTY2hlbWFJZCxcbiAgICApO1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIHNpbmdsZSByZWdpc3RlcmVkIHBsYXRmb3JtIGNvbnRleHQgVVJMIGZyb20gYSBtZXNzYWdlLlxuICogUmV0dXJucyBudWxsIHdoZW4gdGhlcmUgYXJlIHplcm8gb3IgbXVsdGlwbGUgcmVnaXN0ZXJlZCBwbGF0Zm9ybSBjb250ZXh0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQbGF0Zm9ybUNvbnRleHRVcmwobXNnOiBBY3Rpdml0eVN0cmVhbSk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGNvbnRleHRzID0gZ2V0Q29udGV4dEFycmF5KG1zZyk7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGNvbnRleHRzLmZpbHRlcigoY29udGV4dFVybCkgPT5cbiAgICAgICAgcGxhdGZvcm1Db250ZXh0VG9QbGF0Zm9ybUlkLmhhcyhjb250ZXh0VXJsKSxcbiAgICApO1xuICAgIGlmIChtYXRjaGVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXNbMF07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIHBsYXRmb3JtIElEIGZyb20gYSBwbGF0Zm9ybSBjb250ZXh0IFVSTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBsYXRmb3JtSWRCeUNvbnRleHRVcmwoXG4gICAgcGxhdGZvcm1Db250ZXh0VXJsOiBzdHJpbmcsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHRUb1BsYXRmb3JtSWQuZ2V0KHBsYXRmb3JtQ29udGV4dFVybCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIG1lc3NhZ2Ugc2NoZW1hIElEIGZyb20gYSBwbGF0Zm9ybSBjb250ZXh0IFVSTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNjaGVtYUlkQnlDb250ZXh0VXJsKFxuICAgIHBsYXRmb3JtQ29udGV4dFVybDogc3RyaW5nLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0VG9TY2hlbWFJZC5nZXQocGxhdGZvcm1Db250ZXh0VXJsKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgY3JlZGVudGlhbHMgc2NoZW1hIElEIGZyb20gYSBwbGF0Zm9ybSBjb250ZXh0IFVSTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWRlbnRpYWxzU2NoZW1hSWRCeUNvbnRleHRVcmwoXG4gICAgcGxhdGZvcm1Db250ZXh0VXJsOiBzdHJpbmcsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHRUb0NyZWRlbnRpYWxzU2NoZW1hSWQuZ2V0KHBsYXRmb3JtQ29udGV4dFVybCk7XG59XG4iLAogICAgIi8vIFRoZSBzaGFyZWQgYWN0b3IvdGFyZ2V0IGVudGl0eSB2b2NhYnVsYXJ5LiBDb250ZW50IG9iamVjdCB0eXBlcyAobWVzc2FnZSxcbi8vIHByZXNlbmNlLCBhdHRlbmRhbmNlLCByb29tLWluZm8sIHRvcGljLCDigKYpIGFyZSBvd25lZCBieSBlYWNoIHBsYXRmb3JtJ3Ncbi8vIGBtZXNzYWdlc2AgKGluYm91bmQpIGFuZCBgcmVzcG9uc2VzYCAob3V0Ym91bmQpIHNjaGVtYXM7IHRoZSBiYXNlIGVudmVsb3BlIG5vXG4vLyBsb25nZXIgZW51bWVyYXRlcyBhIGdsb2JhbCBvYmplY3Qgdm9jYWJ1bGFyeS5cbmV4cG9ydCBjb25zdCBPYmplY3RUeXBlc1NjaGVtYSA9IHtcbiAgICBmZWVkOiB7XG4gICAgICAgIHJlcXVpcmVkOiBbXCJpZFwiLCBcInR5cGVcIl0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgZW51bTogW1wiZmVlZFwiXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImlyaVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhdXRob3I6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhdmljb246IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgcGVyc29uOiB7XG4gICAgICAgIHJlcXVpcmVkOiBbXCJpZFwiLCBcInR5cGVcIl0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBpZDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgIGVudW06IFtcInBlcnNvblwiXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIHJvb206IHtcbiAgICAgICAgcmVxdWlyZWQ6IFtcImlkXCIsIFwidHlwZVwiXSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgZW51bTogW1wicm9vbVwiXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIHNlcnZpY2U6IHtcbiAgICAgICAgcmVxdWlyZWQ6IFtcImlkXCIsIFwidHlwZVwiXSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgZW51bTogW1wic2VydmljZVwiXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIHBsYXRmb3JtOiB7XG4gICAgICAgIHJlcXVpcmVkOiBbXCJpZFwiLCBcInR5cGVcIl0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBpZDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgIGVudW06IFtcInBsYXRmb3JtXCJdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgd2Vic2l0ZToge1xuICAgICAgICByZXF1aXJlZDogW1wiaWRcIiwgXCJ0eXBlXCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJpcmlcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgZW51bTogW1wid2Vic2l0ZVwiXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFkZHJlc3M6IHtcbiAgICAgICAgcmVxdWlyZWQ6IFtcInR5cGVcIl0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgIGVudW06IFtcImFkZHJlc3NcIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBjYWxlbmRhcjoge1xuICAgICAgICByZXF1aXJlZDogW1wiaWRcIiwgXCJ0eXBlXCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJpcmlcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgZW51bTogW1wiY2FsZW5kYXJcIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgICAgICAgICBlbnVtOiBbXCJldmVudFwiLCBcInRhc2tcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFkZHJlc3NCb29rOiB7XG4gICAgICAgIHJlcXVpcmVkOiBbXCJpZFwiLCBcInR5cGVcIl0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJpcmlcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgZW51bTogW1wiYWRkcmVzc0Jvb2tcIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuXG4vLyBJbnRlcm5hbCBBUyBvYmplY3QgdHlwZXMgcmVzZXJ2ZWQgZm9yIFNvY2tldGh1YiBJUEMvaG91c2VrZWVwaW5nLlxuZXhwb3J0IGNvbnN0IEludGVybmFsT2JqZWN0VHlwZXNMaXN0ID0gW1wicGxhdGZvcm1cIiwgXCJoZWFydGJlYXRcIl07XG5leHBvcnQgY29uc3QgT2JqZWN0VHlwZXNMaXN0ID0gT2JqZWN0LmtleXMoT2JqZWN0VHlwZXNTY2hlbWEpO1xuZXhwb3J0IGNvbnN0IEFjdG9yVHlwZXNMaXN0ID0gW1xuICAgIFwicGVyc29uXCIsXG4gICAgXCJyb29tXCIsXG4gICAgXCJzZXJ2aWNlXCIsXG4gICAgXCJmZWVkXCIsXG4gICAgXCJ3ZWJzaXRlXCIsXG4gICAgXCJwbGF0Zm9ybVwiLFxuXTtcbmV4cG9ydCBjb25zdCBUYXJnZXRUeXBlc0xpc3QgPSBbXG4gICAgXCJwZXJzb25cIixcbiAgICBcInJvb21cIixcbiAgICBcInNlcnZpY2VcIixcbiAgICBcImZlZWRcIixcbiAgICBcIndlYnNpdGVcIixcbiAgICBcInBsYXRmb3JtXCIsXG4gICAgXCJhZGRyZXNzXCIsXG4gICAgXCJjYWxlbmRhclwiLFxuICAgIFwiYWRkcmVzc0Jvb2tcIixcbl07XG5leHBvcnQgY29uc3QgdmFsaWRBY3RvclJlZnMgPSBBY3RvclR5cGVzTGlzdC5tYXAoKHR5cGUpID0+ICh7XG4gICAgJHJlZjogYCMvZGVmaW5pdGlvbnMvdHlwZS8ke3R5cGV9YCxcbn0pKTtcbmV4cG9ydCBjb25zdCB2YWxpZFRhcmdldFJlZnMgPSBUYXJnZXRUeXBlc0xpc3QubWFwKCh0eXBlKSA9PiAoe1xuICAgICRyZWY6IGAjL2RlZmluaXRpb25zL3R5cGUvJHt0eXBlfWAsXG59KSk7XG4iLAogICAgImltcG9ydCB7XG4gICAgQVMyX0JBU0VfQ09OVEVYVF9VUkwsXG4gICAgU09DS0VUSFVCX0JBU0VfQ09OVEVYVF9VUkwsXG59IGZyb20gXCIuLi9jb250ZXh0LmpzXCI7XG5pbXBvcnQge1xuICAgIE9iamVjdFR5cGVzU2NoZW1hLFxuICAgIHZhbGlkQWN0b3JSZWZzLFxuICAgIHZhbGlkVGFyZ2V0UmVmcyxcbn0gZnJvbSBcIi4uL2hlbHBlcnMvb2JqZWN0cy5qc1wiO1xuXG5jb25zdCBjb250ZXh0U2NoZW1hID0ge1xuICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICBtaW5JdGVtczogMyxcbiAgICBtYXhJdGVtczogMyxcbiAgICBpdGVtczoge1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgYWxsT2Y6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGFpbnM6IHtcbiAgICAgICAgICAgICAgICBjb25zdDogQVMyX0JBU0VfQ09OVEVYVF9VUkwsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBjb250YWluczoge1xuICAgICAgICAgICAgICAgIGNvbnN0OiBTT0NLRVRIVUJfQkFTRV9DT05URVhUX1VSTCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgXSxcbn07XG5jb25zdCB0eXBlU2NoZW1hID0ge1xuICAgIHR5cGU6IFwic3RyaW5nXCIsXG59O1xuXG5leHBvcnQgY29uc3QgQWN0aXZpdHlTdHJlYW1TY2hlbWEgPSB7XG4gICAgJGlkOiBcImh0dHBzOi8vc29ja2V0aHViLm9yZy9zY2hlbWFzL3YvYWN0aXZpdHktc3RyZWFtLmpzb25cIixcbiAgICBkZXNjcmlwdGlvbjogXCJTY2hlbWEgZm9yIFNvY2tldGh1YiBBY3Rpdml0eSBTdHJlYW1zXCIsXG5cbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHJlcXVpcmVkOiBbXCJAY29udGV4dFwiLCBcInR5cGVcIiwgXCJhY3RvclwiXSxcbiAgICAvLyBSZWplY3QgdW5rbm93biB0b3AtbGV2ZWwgbWVzc2FnZSBwcm9wZXJ0aWVzLiBJbmJvdW5kIG1lc3NhZ2VzIGNhcnJ5IG9ubHlcbiAgICAvLyB0aGUgcHJvcGVydGllcyBiZWxvdzsgYGVycm9yYC9gc2Vzc2lvblNlY3JldGAgYXJlIGFkZGVkIHNlcnZlci1zaWRlIGFmdGVyXG4gICAgLy8gdmFsaWRhdGlvbiwgc28gdGhleSBuZXZlciByZWFjaCB0aGlzIHNjaGVtYS5cbiAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgICBcIkBjb250ZXh0XCI6IGNvbnRleHRTY2hlbWEsXG4gICAgICAgIGlkOiB7XG4gICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgICAgICB0eXBlOiB0eXBlU2NoZW1hLFxuICAgICAgICBhY3Rvcjoge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIG9uZU9mOiB2YWxpZEFjdG9yUmVmcyxcbiAgICAgICAgfSxcbiAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgb25lT2Y6IHZhbGlkVGFyZ2V0UmVmcyxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gT2JqZWN0IHNoYXBlIGlzIHZhbGlkYXRlZCBwZXItcGxhdGZvcm0gYnkgZWFjaCBwbGF0Zm9ybSdzIGBtZXNzYWdlc2BcbiAgICAgICAgLy8gKGluYm91bmQpIGFuZCBgcmVzcG9uc2VzYCAob3V0Ym91bmQpIHNjaGVtYXMsIHdoaWNoIG93biB0aGVpciBvYmplY3RcbiAgICAgICAgLy8gdm9jYWJ1bGFyeS4gVGhlIGJhc2UgZW52ZWxvcGUgb25seSByZXF1aXJlcyBpdCB0byBiZSBhbiBvYmplY3QuXG4gICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgfSxcbiAgICAgICAgcHVibGlzaGVkOiB7XG4gICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgZm9ybWF0OiBcImRhdGUtdGltZVwiLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBkZWZpbml0aW9uczoge1xuICAgICAgICB0eXBlOiBPYmplY3RUeXBlc1NjaGVtYSxcbiAgICB9LFxufTtcbiIsCiAgICAiLyoqXG4gKiBTdWJzdGl0dXRlIHRoZSBgL3YvYCBwbGFjZWhvbGRlciBzZWdtZW50IGluIGEgY2Fub25pY2FsIHNjaGVtYSBgJGlkYCB3aXRoIGFcbiAqIGNvbmNyZXRlIHBhY2thZ2UgdmVyc2lvbiwgZS5nLlxuICogYGh0dHBzOi8vc29ja2V0aHViLm9yZy9zY2hlbWFzL3Yvc29ja2V0aHViLWNvbmZpZy5qc29uYCDihpJcbiAqIGBodHRwczovL3NvY2tldGh1Yi5vcmcvc2NoZW1hcy8zLjAuMC9zb2NrZXRodWItY29uZmlnLmpzb25gLlxuICpcbiAqIFNoYXJlZCBieSB0aGUgYnVpbGQncyBKU09OLXNjaGVtYSBleHBvcnQgKHdoaWNoIHN0YW1wcyB0aGUgdmVyc2lvbiBpbnRvIHRoZVxuICogcHVibGlzaGVkIGFydGlmYWN0cykgYW5kIGJ5IGBTb2NrZXRodWJDb25maWdTY2hlbWFJZGAsIHNvIHRoZSB0d28gbmV2ZXJcbiAqIGRyaWZ0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyc2lvbmVkU2NoZW1hSWQoaWQ6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaWQucmVwbGFjZShcIi92L1wiLCBgLyR7dmVyc2lvbn0vYCk7XG59XG4iLAogICAgImltcG9ydCBwYWNrYWdlSnNvbiBmcm9tIFwiLi4vLi4vcGFja2FnZS5qc29uXCIgd2l0aCB7IHR5cGU6IFwianNvblwiIH07XG5pbXBvcnQgeyB2ZXJzaW9uZWRTY2hlbWFJZCB9IGZyb20gXCIuLi9zY2hlbWEtaWQuanNcIjtcblxuZXhwb3J0IGNvbnN0IFNvY2tldGh1YkNvbmZpZ1NjaGVtYSA9IHtcbiAgICAkaWQ6IFwiaHR0cHM6Ly9zb2NrZXRodWIub3JnL3NjaGVtYXMvdi9zb2NrZXRodWItY29uZmlnLmpzb25cIixcbiAgICBkZXNjcmlwdGlvbjogXCJTb2NrZXRodWIgQ29uZmlnIFNjaGVtYVwiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgcmVxdWlyZWQ6IFtcInBsYXRmb3Jtc1wiXSxcbiAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgICAkc2NoZW1hOiB7XG4gICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgICAgICBleGFtcGxlczoge1xuICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgXCJFbmFibGUgdGhlIGV4YW1wbGVzIHBhZ2VzIHNlcnZlZCBhdCBbaG9zdF06W3BvcnRdL2V4YW1wbGVzXCIsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIE9wZXJhdG9yLXN1cHBsaWVkIGRldGFpbHMgc2hvd24gb24gdGhlIHNlcnZlciBpbmZvIHBhZ2Ugc2VydmVkIGF0XG4gICAgICAgIC8vIHRoZSByb290IFVSTC4gRXZlcnkgZmllbGQgaXMgb3B0aW9uYWw7IGVtcHR5IHZhbHVlcyBhcmUgb21pdHRlZC5cbiAgICAgICAgYWJvdXQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgICBcIkRldGFpbHMgYWJvdXQgdGhpcyBkZXBsb3ltZW50IHNob3duIG9uIHRoZSByb290IGluZm8gcGFnZVwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRGlzcGxheSBuYW1lIG9mIHRoaXMgU29ja2V0aHViIGluc3RhbmNlXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU2hvcnQgZGVzY3JpcHRpb24gb2Ygd2hvIHRoaXMgaW5zdGFuY2UgaXMgZm9yXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjb250YWN0OiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk9wZXJhdG9yIGNvbnRhY3QgKGVtYWlsIGFkZHJlc3Mgb3IgVVJMKVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbGlua3M6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBbXSxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgICAgICAgICBcIkV4dHJhIGxpbmtzIChwcml2YWN5IHBvbGljeSwgdGVybXMsIHdlYnNpdGUpIHNob3duIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwib24gdGhlIGluZm8gcGFnZVwiLFxuICAgICAgICAgICAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBbXCJsYWJlbFwiLCBcInVybFwiXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogeyB0eXBlOiBcInN0cmluZ1wiLCBtaW5MZW5ndGg6IDEgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybjogXCJeaHR0cHM/Oi8vXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzaG93VmVyc2lvbjoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTaG93IHRoZSBleGFjdCBzZXJ2ZXIgdmVyc2lvbiBvbiB0aGUgaW5mbyBwYWdlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiKG9mZiBieSBkZWZhdWx0IHRvIGxpbWl0IGZpbmdlcnByaW50aW5nKVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2hvd1VwdGltZToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTaG93IHRoZSBwcm9jZXNzIHVwdGltZSBvbiB0aGUgaW5mbyBwYWdlIChvZmYgYnkgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJkZWZhdWx0OiBpdCByZXZlYWxzIHdoZW4gdGhlIHNlcnZlciBsYXN0IHJlc3RhcnRlZClcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgbG9nZ2luZzoge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBsZXZlbDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBlbnVtOiBbXCJlcnJvclwiLCBcIndhcm5cIiwgXCJpbmZvXCIsIFwiZGVidWdcIl0sXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiaW5mb1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZmlsZUxldmVsOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIGVudW06IFtcImVycm9yXCIsIFwid2FyblwiLCBcImluZm9cIiwgXCJkZWJ1Z1wiXSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJkZWJ1Z1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZmlsZToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBcInNvY2tldGh1Yi5sb2dcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcGxhdGZvcm1zOiB7XG4gICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiUGxhdGZvcm0gcGFja2FnZXMgdG8gbG9hZFwiLFxuICAgICAgICAgICAgZGVmYXVsdDogW1xuICAgICAgICAgICAgICAgIFwiQHNvY2tldGh1Yi9wbGF0Zm9ybS1jYXJkZGF2XCIsXG4gICAgICAgICAgICAgICAgXCJAc29ja2V0aHViL3BsYXRmb3JtLWNhbGRhdlwiLFxuICAgICAgICAgICAgICAgIFwiQHNvY2tldGh1Yi9wbGF0Zm9ybS1kdW1teVwiLFxuICAgICAgICAgICAgICAgIFwiQHNvY2tldGh1Yi9wbGF0Zm9ybS1mZWVkc1wiLFxuICAgICAgICAgICAgICAgIFwiQHNvY2tldGh1Yi9wbGF0Zm9ybS1pcmNcIixcbiAgICAgICAgICAgICAgICBcIkBzb2NrZXRodWIvcGxhdGZvcm0tbWV0YWRhdGFcIixcbiAgICAgICAgICAgICAgICBcIkBzb2NrZXRodWIvcGxhdGZvcm0teG1wcFwiLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gUGVyLXBsYXRmb3JtIGNvbmZpZywga2V5ZWQgYnkgcGFja2FnZSBuYW1lLiBFYWNoIHBsYXRmb3JtJ3MgZW50cnkgaXNcbiAgICAgICAgLy8gdmFsaWRhdGVkIGFnYWluc3QgaXRzIGRlY2xhcmVkIGtleXM7IGVudHJpZXMgZm9yIHBsYXRmb3JtcyB3aXRob3V0IGFcbiAgICAgICAgLy8gZGVjbGFyZWQgc2hhcGUgaGVyZSBhcmUgcGFzc2VkIHRocm91Z2ggdW52YWxpZGF0ZWQuXG4gICAgICAgIHBhY2thZ2VDb25maWc6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBkZWZhdWx0OiB7fSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgIFwiUGVyLXBsYXRmb3JtIGNvbmZpZyBrZXllZCBieSBwYWNrYWdlIG5hbWUsIHZhbGlkYXRlZCBhZ2FpbnN0IFwiICtcbiAgICAgICAgICAgICAgICBcImVhY2ggcGxhdGZvcm0ncyBjb25maWcgc2NoZW1hIGFuZCBmb3J3YXJkZWQgdG8gaXRzIGNoaWxkIHByb2Nlc3NcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBcIkBzb2NrZXRodWIvcGxhdGZvcm0tY2FyZGRhdlwiOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdFRpbWVvdXRNczogeyB0eXBlOiBcImludGVnZXJcIiwgbWluaW11bTogMSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dQcml2YXRlQWRkcmVzc2VzOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd0luc2VjdXJlSHR0cDogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uY3VycmVuY3k6IHsgdHlwZTogXCJpbnRlZ2VyXCIsIG1pbmltdW06IDEgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiQHNvY2tldGh1Yi9wbGF0Zm9ybS1jYWxkYXZcIjoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RUaW1lb3V0TXM6IHsgdHlwZTogXCJpbnRlZ2VyXCIsIG1pbmltdW06IDEgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93UHJpdmF0ZUFkZHJlc3NlczogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dJbnNlY3VyZUh0dHA6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmN1cnJlbmN5OiB7IHR5cGU6IFwiaW50ZWdlclwiLCBtaW5pbXVtOiAxIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIkBzb2NrZXRodWIvcGxhdGZvcm0tZHVtbXlcIjoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyZWV0aW5nOiB7IHR5cGU6IFwic3RyaW5nXCIsIGRlZmF1bHQ6IFwiSGVsbG9cIiB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJAc29ja2V0aHViL3BsYXRmb3JtLWZlZWRzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0VGltZW91dE1zOiB7IHR5cGU6IFwibnVtYmVyXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93UHJpdmF0ZUFkZHJlc3NlczogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uY3VycmVuY3k6IHsgdHlwZTogXCJpbnRlZ2VyXCIsIG1pbmltdW06IDEgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiQHNvY2tldGh1Yi9wbGF0Zm9ybS1pcmNcIjoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RUaW1lb3V0TXM6IHsgdHlwZTogXCJudW1iZXJcIiB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJAc29ja2V0aHViL3BsYXRmb3JtLXhtcHBcIjoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RUaW1lb3V0TXM6IHsgdHlwZTogXCJudW1iZXJcIiB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJAc29ja2V0aHViL3BsYXRmb3JtLW1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1ByaXZhdGVBZGRyZXNzZXM6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmN1cnJlbmN5OiB7IHR5cGU6IFwiaW50ZWdlclwiLCBtaW5pbXVtOiAxIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHR0bE1zOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIG1pbmltdW06IDAsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDYwNDgwMDAwMCxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlNsaWRpbmcgVFRMIGluIG1pbGxpc2Vjb25kcyBmb3IgcGVyLXNlc3Npb24gZW5jcnlwdGVkIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY3JlZGVudGlhbCBrZXlzIGluIFJlZGlzLCByZWZyZXNoZWQgb24gZXZlcnkgc2F2ZSBhbmQgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWFkLiBBIGJhY2tzdG9wIGFnYWluc3Qga2V5cyBvcnBoYW5lZCBieSBjcmFzaGVzOyBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNlc3Npb25zIG5vcm1hbGx5IGRlbGV0ZSB0aGVpciBrZXkgb24gZGlzY29ubmVjdC4gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJTaXplIGdlbmVyb3VzbHkg4oCUIGlkbGUgc2Vzc2lvbnMgZG8gbm90IHJlZnJlc2ggaXQuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiMCBkaXNhYmxlcyBleHBpcnkuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNyZWRlbnRpYWxDaGVjazoge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICByZWNvbm5lY3RJcFNvdXJjZToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBlbnVtOiBbXCJzb2NrZXRcIiwgXCJwcm94eVwiXSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJzb2NrZXRcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHByb3h5SGVhZGVyOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwieC1mb3J3YXJkZWQtZm9yXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHB1YmxpYzoge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBwcm90b2NvbDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBcImh0dHBcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGhvc3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJsb2NhbGhvc3RcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBvcnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMTA1NTAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwYXRoOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiL1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICByYXRlTGltaXRlcjoge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICB3aW5kb3dNczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAxMDAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWF4UmVxdWVzdHM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMTAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmxvY2tEdXJhdGlvbk1zOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDUwMDAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtYXhDb25uZWN0aW9uc1BlcklwOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIG1pbmltdW06IDAsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDIwLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiTWF4aW11bSBjb25jdXJyZW50IHNvY2tldCBjb25uZWN0aW9ucyBwZXIgY2xpZW50IElQLiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlRoZSBwZXItZXZlbnQgcmF0ZSBsaW1pdGVyIGlzIGtleWVkIGJ5IHNvY2tldCBpZCwgc28gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJ3aXRob3V0IGEgY29ubmVjdGlvbiBjYXAgYSBjbGllbnQgY2FuIGJ5cGFzcyBpdCBieSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm9wZW5pbmcgbW9yZSBzb2NrZXRzLiAwIGRpc2FibGVzIHRoZSBjYXAuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGxpbWl0czoge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBtYXhQbGF0Zm9ybUluc3RhbmNlczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiAwLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAxMDAsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgXCJVcHBlciBib3VuZCBvbiBjb25jdXJyZW50bHkgcnVubmluZyBwbGF0Zm9ybSBpbnN0YW5jZXMgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCIoY2hpbGQgcHJvY2Vzc2VzKS4gRWFjaCBwZXJzaXN0ZW50LXBsYXRmb3JtIGFjdG9yIGZvcmtzIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaXRzIG93biBwcm9jZXNzLCBzbyBhbiB1bmJvdW5kZWQgY291bnQgaXMgYSByZXNvdXJjZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcImV4aGF1c3Rpb24gcmlzayBvbiBwdWJsaWMgaW5zdGFuY2VzLiAwIGRpc2FibGVzIHRoZSBjYXAuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHJlZGlzOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHVybDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBcInJlZGlzOi8vMTI3LjAuMC4xOjYzNzlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbm5lY3RUaW1lb3V0OiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEwMDAwLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJDb25uZWN0aW9uIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkaXNjb25uZWN0VGltZW91dDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiA1MDAwLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJEaXNjb25uZWN0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtYXhSZXRyaWVzUGVyUmVxdWVzdDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBbXCJudW1iZXJcIiwgXCJudWxsXCJdLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBudWxsIGFzIG51bWJlciB8IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgXCJNYXhpbXVtIG51bWJlciBvZiByZXRyaWVzIHBlciByZXF1ZXN0IChudWxsIGZvciBCdWxsTVEgZGVmYXVsdClcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc2VudHJ5OiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIGRzbjoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBcIlwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJwcm9kdWN0aW9uXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZWxlYXNlOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlbmFibGVMb2dzOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvZ0xldmVsczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW51bTogW1wiZGVidWdcIiwgXCJpbmZvXCIsIFwid2FyblwiLCBcImVycm9yXCJdLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBbXCJ3YXJuXCIsIFwiZXJyb3JcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlbmFibGVNZXRyaWNzOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdHJhY2VzU2FtcGxlUmF0ZToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiAwLFxuICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiAxLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAwLjEsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwcm9maWxlU2Vzc2lvblNhbXBsZVJhdGU6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgbWluaW11bTogMCxcbiAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogMSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlbmREZWZhdWx0UGlpOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc29ja2V0aHViOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHBvcnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMTA1NTAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBob3N0OiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwibG9jYWxob3N0XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwYXRoOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiL3NvY2tldGh1YlwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWF4UGF5bG9hZEJ5dGVzOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiAxLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAyNjIxNDQsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgXCJNYXhpbXVtIHNpemUgaW4gYnl0ZXMgb2YgYSBzaW5nbGUgU29ja2V0LklPIG1lc3NhZ2UuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0cnVzdFByb3h5OiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFtcImJvb2xlYW5cIiwgXCJudW1iZXJcIiwgXCJzdHJpbmdcIl0sXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiRXhwcmVzcyAndHJ1c3QgcHJveHknIHNldHRpbmcsIGRlY2lkaW5nIHdoZXRoZXIgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCIneC1mb3J3YXJkZWQtZm9yJyBpcyBiZWxpZXZlZCB3aGVuIGRldGVybWluaW5nIGEgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJjbGllbnQncyBJUCBmb3IgSFRUUCByYXRlIGxpbWl0aW5nLiBmYWxzZSB0cnVzdHMgbm8gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJwcm94eTsgYSBudW1iZXIgdHJ1c3RzIHRoYXQgbWFueSBob3BzOyBhIHN0cmluZyBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcInRha2VzIGFuIGFkZHJlc3MsIHN1Ym5ldCBvciBwcmVzZXQgKCdsb29wYmFjaycpLiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIk9ubHkgZW5hYmxlIGJlaGluZCBhIHJldmVyc2UgcHJveHkgdGhhdCBvdmVyd3JpdGVzIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidGhlIGhlYWRlci4gV2hlbiBsZWZ0IGZhbHNlIHdoaWxlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY3JlZGVudGlhbENoZWNrLnJlY29ubmVjdElwU291cmNlIGlzICdwcm94eScgYW5kIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY3JlZGVudGlhbENoZWNrLnByb3h5SGVhZGVyIGlzICd4LWZvcndhcmRlZC1mb3InLCBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm9uZSBob3AgaXMgdHJ1c3RlZCBzbyBib3RoIHBhdGhzIGFncmVlOyBhIGN1c3RvbSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcInByb3h5SGVhZGVyIHJlcXVpcmVzIHNldHRpbmcgdGhpcyBleHBsaWNpdGx5LlwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29yczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCIqXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiQWxsb3dlZCBDT1JTIG9yaWdpbihzKSBmb3Igc29ja2V0LmlvIGNvbm5lY3Rpb25zIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhbmQgdGhlIEhUVFAgYWN0aW9ucyBlbmRwb2ludC4gJyonIGFsbG93cyBhbnkgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIndlYnNpdGUgdG8gY29ubmVjdCB2aXNpdG9ycycgYnJvd3NlcnMgdG8gdGhpcyBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW5zdGFuY2U7IHB1YmxpYyBkZXBsb3ltZW50cyBzaG91bGQgc2V0IGFuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJleHBsaWNpdCBvcmlnaW4gb3IgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbnMuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBodHRwQWN0aW9uczoge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBlbmFibGVkOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRW5hYmxlIHRoZSBIVFRQIGFjdGlvbnMgZW5kcG9pbnRcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBhdGg6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCIvc29ja2V0aHViLWh0dHBcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtYXhNZXNzYWdlc1BlclJlcXVlc3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgbWluaW11bTogMSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMjAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtYXhQYXlsb2FkQnl0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgbWluaW11bTogMSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMjYyMTQ0LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaWRlbXBvdGVuY3lUdGxNczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiAwLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAzMDAwMDAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZXF1ZXN0VGltZW91dE1zOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIG1pbmltdW06IDAsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDMwMDAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaWRsZVRpbWVvdXRNczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiAwLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAxNTAwMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcGxhdGZvcm1IZWFydGJlYXQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgaW50ZXJ2YWxNczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiA1MDAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGltZW91dE1zOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDE1MDAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uZWQgY2Fub25pY2FsIFVSTCBvZiB0aGlzIHNjaGVtYSwgbWF0Y2hpbmcgdGhlIGAkaWRgIHdyaXR0ZW4gaW50b1xuICogdGhlIHB1Ymxpc2hlZCBKU09OIGFydGlmYWN0IChgZGlzdC9zY2hlbWFzL2pzb24vc29ja2V0aHViLWNvbmZpZy5qc29uYCkgYnlcbiAqIHRoZSBidWlsZCdzIHZlcnNpb24gc3Vic3RpdHV0aW9uLiBTdWl0YWJsZSBhcyB0aGUgYCRzY2hlbWFgIHZhbHVlIGluXG4gKiBnZW5lcmF0ZWQgY29uZmlnIGZpbGVzLlxuICovXG5leHBvcnQgY29uc3QgU29ja2V0aHViQ29uZmlnU2NoZW1hSWQgPSB2ZXJzaW9uZWRTY2hlbWFJZChcbiAgICBTb2NrZXRodWJDb25maWdTY2hlbWEuJGlkLFxuICAgIHBhY2thZ2VKc29uLnZlcnNpb24sXG4pO1xuIiwKICAgICJpbXBvcnQgQWp2LCB7IHR5cGUgVmFsaWRhdGVGdW5jdGlvbiB9IGZyb20gXCJhanZcIjtcbmltcG9ydCB7XG4gICAgdHlwZSBTZXJ2aWNlRGVzY3JpcHRvcixcbiAgICBTZXJ2aWNlRGVzY3JpcHRvclNjaGVtYSxcbiAgICB0eXBlIFNlcnZpY2VFbmRwb2ludHMsXG59IGZyb20gXCIuL3NjaGVtYXMvc2VydmljZS1kZXNjcmlwdG9yLmpzXCI7XG5cbmNvbnN0IGFqdiA9IG5ldyBBanYoeyBzdHJpY3RUeXBlczogZmFsc2UsIGFsbEVycm9yczogdHJ1ZSB9KTtcbmxldCB2YWxpZGF0b3I6IFZhbGlkYXRlRnVuY3Rpb248U2VydmljZURlc2NyaXB0b3I+IHwgdW5kZWZpbmVkO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTZXJ2aWNlRGVzY3JpcHRvcihcbiAgICBkZXNjcmlwdG9yOiB1bmtub3duLFxuKTogZGVzY3JpcHRvciBpcyBTZXJ2aWNlRGVzY3JpcHRvciB7XG4gICAgdmFsaWRhdG9yID8/PSBhanYuY29tcGlsZTxTZXJ2aWNlRGVzY3JpcHRvcj4oU2VydmljZURlc2NyaXB0b3JTY2hlbWEpO1xuICAgIHJldHVybiB2YWxpZGF0b3IoZGVzY3JpcHRvcik7XG59XG5cbmV4cG9ydCB7IFNlcnZpY2VEZXNjcmlwdG9yU2NoZW1hIH07XG5leHBvcnQgdHlwZSB7IFNlcnZpY2VEZXNjcmlwdG9yLCBTZXJ2aWNlRW5kcG9pbnRzIH07XG4iLAogICAgIi8qKlxuICogVGhlIHB1YmxpYyBzZXJ2aWNlIGRlc2NyaXB0b3Igc2VydmVkIG9uIGEgYmFyZSBHRVQgb2YgdGhlIEhUVFAgYWN0aW9uc1xuICogcGF0aCBhbmQgb24gYEdFVCAvYCB3aXRoIGBBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb25gLiBJdCBjYXJyaWVzIEFQSVxuICogdmVyc2lvbnMgb25seSAodGhlIFNlbVZlciBtYWpvciBvZiB0aGUgc2VydmVyIHBhY2thZ2UgYW5kIG9mIGVhY2ggcGxhdGZvcm1cbiAqIHBhY2thZ2UpLCBuZXZlciBleGFjdCBwYWNrYWdlIHZlcnNpb25zLCBwbHVzIHRoZSBwdWJsaWMgY29ubmVjdGlvblxuICogZW5kcG9pbnRzIHNvIGEgY2xpZW50IG5lZWRzIG5vdGhpbmcgYnV0IHRoZSBzZXJ2ZXIncyBiYXNlIFVSTC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlRGVzY3JpcHRvciB7XG4gICAgbmFtZTogXCJzb2NrZXRodWJcIjtcbiAgICBhcGlWZXJzaW9uOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogV2hlcmUgdG8gY29ubmVjdC4gQWJzZW50IGZyb20gZGVzY3JpcHRvcnMgd3JpdHRlbiBieSBzZXJ2ZXJzIHRoYXRcbiAgICAgKiBwcmVkYXRlIGVuZHBvaW50IGRpc2NvdmVyeS5cbiAgICAgKi9cbiAgICBlbmRwb2ludHM/OiBTZXJ2aWNlRW5kcG9pbnRzO1xuICAgIHBsYXRmb3JtczogQXJyYXk8eyBpZDogc3RyaW5nOyBhcGlWZXJzaW9uOiBudW1iZXIgfT47XG59XG5cbi8qKlxuICogV2hlcmUgdG8gY29ubmVjdCwgYXMgc2VydmVyLWFic29sdXRlIHBhdGhzIChsZWFkaW5nIGAvYCkgb24gdGhlIG9yaWdpbiB0aGVcbiAqIGRlc2NyaXB0b3Igd2FzIGZldGNoZWQgZnJvbS4gTm8gb3JpZ2luIGlzIGFkdmVydGlzZWQ6IGEgY2xpZW50IGhhcyBhbHJlYWR5XG4gKiByZWFjaGVkIHRoZSBzZXJ2ZXIsIGFuZCByZXNvbHZpbmcgcGF0aHMgYWdhaW5zdCB0aGF0IHNhbWUgb3JpZ2luIGNhbm5vdCBiZVxuICogbWlzZGlyZWN0ZWQgYnkgYSBtaXNjb25maWd1cmVkIGBwdWJsaWNgIGJsb2NrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VFbmRwb2ludHMge1xuICAgIC8qKlxuICAgICAqIFRoZSBTb2NrZXQuSU8gc2VydmVyIHBhdGgsIHRvIGJlIHBhc3NlZCBhcyB0aGUgYHBhdGhgIG9wdGlvbiBvZiBgaW8oKWBcbiAgICAgKiAoYSBwYXRoIGFwcGVuZGVkIHRvIHRoZSBVUkwgd291bGQgc2VsZWN0IGEgbmFtZXNwYWNlIGluc3RlYWQpLlxuICAgICAqL1xuICAgIHNvY2tldElPOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBIVFRQIGFjdGlvbnMgcGF0aC4gUHJlc2VudCBvbmx5IHdoZW4gdGhhdCB0cmFuc3BvcnQgaXMgZW5hYmxlZC4gKi9cbiAgICBodHRwQWN0aW9ucz86IHN0cmluZztcbn1cblxuLy8gQW4gQVBJIHZlcnNpb24gaXMgYSBTZW1WZXIgbWFqb3I6IGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuXG5jb25zdCBhcGlWZXJzaW9uID0ge1xuICAgIHR5cGU6IFwiaW50ZWdlclwiLFxuICAgIG1pbmltdW06IDAsXG59IGFzIGNvbnN0O1xuXG5jb25zdCBub25FbXB0eVN0cmluZyA9IHsgdHlwZTogXCJzdHJpbmdcIiwgbWluTGVuZ3RoOiAxIH0gYXMgY29uc3Q7XG5cbi8vIEEgc2VydmVyLWFic29sdXRlIHBhdGg6IGEgc2luZ2xlIGxlYWRpbmcgXCIvXCIgZm9sbG93ZWQgYnkgbm8gd2hpdGVzcGFjZSBhbmRcbi8vIG5vIGJhY2tzbGFzaC4gQW55dGhpbmcgVVJMIHJlc29sdXRpb24gY291bGQgcmVhZCBhcyBwcm90b2NvbC1yZWxhdGl2ZSBpc1xuLy8gcmVqZWN0ZWQ6IFwiLy9ob3N0L3hcIiwgXCIvXFxcXGhvc3QveFwiLCBhbmQgXCIvPHRhYj4vaG9zdC94XCIgKHRoZSBXSEFUV0cgcGFyc2VyXG4vLyBzdHJpcHMgdGFiLCBDUiBhbmQgTEYgYmVmb3JlIHBhcnNpbmcgYW5kIHRyZWF0cyBcIlxcXFxcIiBhcyBcIi9cIiksIGFueSBvZiB3aGljaFxuLy8gd291bGQgc2VuZCBhIGNsaWVudCB0byBhbm90aGVyIG9yaWdpbi5cbmNvbnN0IGFic29sdXRlUGF0aCA9IHtcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIHBhdHRlcm46IFwiXi8oPyFbL1xcXFxcXFxcXSlbXlxcXFxzXFxcXFxcXFxdKiRcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBTZXJ2aWNlRGVzY3JpcHRvclNjaGVtYSA9IHtcbiAgICAkaWQ6IFwiaHR0cHM6Ly9zb2NrZXRodWIub3JnL3NjaGVtYXMvdi9zZXJ2aWNlLWRlc2NyaXB0b3IuanNvblwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlNvY2tldGh1YiBzZXJ2aWNlIGRlc2NyaXB0b3JcIixcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHJlcXVpcmVkOiBbXCJuYW1lXCIsIFwiYXBpVmVyc2lvblwiLCBcInBsYXRmb3Jtc1wiXSxcbiAgICAvLyBPcGVuIHRvIG5ldyBtZW1iZXJzOiBjbGllbnRzIHZhbGlkYXRpbmcgYWdhaW5zdCB0aGlzIHZlcnNpb24gb2YgdGhlXG4gICAgLy8gc2NoZW1hIG11c3Qga2VlcCB3b3JraW5nIHdoZW4gYSBsYXRlciBzZXJ2ZXIgYWRkcyBkZXNjcmlwdG9yIGZpZWxkcy5cbiAgICBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIG5hbWU6IHsgY29uc3Q6IFwic29ja2V0aHViXCIgfSxcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgZW5kcG9pbnRzOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IFtcInNvY2tldElPXCJdLFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgc29ja2V0SU86IGFic29sdXRlUGF0aCxcbiAgICAgICAgICAgICAgICBodHRwQWN0aW9uczogYWJzb2x1dGVQYXRoLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcGxhdGZvcm1zOiB7XG4gICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IFtcImlkXCIsIFwiYXBpVmVyc2lvblwiXSxcbiAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBub25FbXB0eVN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufSBhcyBjb25zdDtcbiIsCiAgICAiaW1wb3J0IEFqdiwgeyB0eXBlIFNjaGVtYSB9IGZyb20gXCJhanZcIjtcbmltcG9ydCBhZGRGb3JtYXRzIGZyb20gXCJhanYtZm9ybWF0c1wiO1xuaW1wb3J0IGFkZGl0aW9uc0Zvcm1hdHMyMDE5IGZyb20gXCJhanYtZm9ybWF0cy1kcmFmdDIwMTlcIjtcbmltcG9ydCB7XG4gICAgRVJST1JfUExBVEZPUk1fQ09OVEVYVF9VUkwsXG4gICAgRVJST1JfUExBVEZPUk1fSUQsXG4gICAgZ2V0Q3JlZGVudGlhbHNTY2hlbWFJZEJ5Q29udGV4dFVybCxcbiAgICBnZXRQbGF0Zm9ybUlkQnlDb250ZXh0VXJsLFxuICAgIGdldFNjaGVtYUlkQnlDb250ZXh0VXJsLFxuICAgIElOVEVSTkFMX1BMQVRGT1JNX0NPTlRFWFRfVVJMLFxuICAgIElOVEVSTkFMX1BMQVRGT1JNX0lELFxuICAgIHJlZ2lzdGVyUGxhdGZvcm1Db250ZXh0LFxuICAgIHJlc29sdmVQbGF0Zm9ybUNvbnRleHRVcmwsXG59IGZyb20gXCIuL2NvbnRleHQuanNcIjtcbmltcG9ydCBnZXRFcnJvck1lc3NhZ2UsIHtcbiAgICB0eXBlIFZhbGlkYXRpb25FcnJvck9wdGlvbnMsXG59IGZyb20gXCIuL2hlbHBlcnMvZXJyb3ItcGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBBY3RvclR5cGVzTGlzdCwgVGFyZ2V0VHlwZXNMaXN0IH0gZnJvbSBcIi4vaGVscGVycy9vYmplY3RzLmpzXCI7XG5pbXBvcnQgeyBBY3Rpdml0eVN0cmVhbVNjaGVtYSB9IGZyb20gXCIuL3NjaGVtYXMvYWN0aXZpdHktc3RyZWFtLmpzXCI7XG5pbXBvcnQgeyBQbGF0Zm9ybVNjaGVtYSB9IGZyb20gXCIuL3NjaGVtYXMvcGxhdGZvcm0uanNcIjtcbmltcG9ydCB7IFNvY2tldGh1YkNvbmZpZ1NjaGVtYSB9IGZyb20gXCIuL3NjaGVtYXMvc29ja2V0aHViLWNvbmZpZy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBY3Rpdml0eVN0cmVhbSB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5cbmNvbnN0IGFqdiA9IG5ldyBBanYoeyBzdHJpY3RUeXBlczogZmFsc2UsIGFsbEVycm9yczogdHJ1ZSB9KTtcbmFkZEZvcm1hdHMoYWp2IGFzIHVua25vd24gYXMgUGFyYW1ldGVyczx0eXBlb2YgYWRkRm9ybWF0cz5bMF0pO1xuYWRkaXRpb25zRm9ybWF0czIwMTkoYWp2IGFzIHVua25vd24gYXMgQWp2KTtcblxudHlwZSBTY2hlbWFzRGljdCA9IFJlY29yZDxzdHJpbmcsIFNjaGVtYT47XG5cbmNvbnN0IHNjaGVtYVVSTCA9IFwiaHR0cHM6Ly9zb2NrZXRodWIub3JnL3NjaGVtYXMvdjBcIjtcbmNvbnN0IHNjaGVtYXM6IFNjaGVtYXNEaWN0ID0ge307XG5sZXQgdmFsaWRhdGlvbkVycm9yT3B0aW9uczogVmFsaWRhdGlvbkVycm9yT3B0aW9ucyA9IHt9O1xubGV0IHN5c3RlbUNvbnRleHRzUmVnaXN0ZXJlZCA9IGZhbHNlO1xuXG5zY2hlbWFzW2Ake3NjaGVtYVVSTH0vYWN0aXZpdHktc3RyZWFtYF0gPSBBY3Rpdml0eVN0cmVhbVNjaGVtYTtcblxuZm9yIChjb25zdCB1cmkgaW4gc2NoZW1hcykge1xuICAgIGFqdi5hZGRTY2hlbWEoc2NoZW1hc1t1cmldLCB1cmkpO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlclN5c3RlbUNvbnRleHQocGxhdGZvcm1JZDogc3RyaW5nLCBjb250ZXh0VXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICByZWdpc3RlclBsYXRmb3JtQ29udGV4dChcbiAgICAgICAgcGxhdGZvcm1JZCxcbiAgICAgICAgY29udGV4dFVybCxcbiAgICAgICAgYCR7c2NoZW1hVVJMfS9jb250ZXh0LyR7cGxhdGZvcm1JZH0vbWVzc2FnZXNgLFxuICAgICAgICBgJHtzY2hlbWFVUkx9L2NvbnRleHQvJHtwbGF0Zm9ybUlkfS9jcmVkZW50aWFsc2AsXG4gICAgKTtcblxuICAgIGNvbnN0IG1lc3NhZ2VTY2hlbWFSZWYgPSBgJHtzY2hlbWFVUkx9L2NvbnRleHQvJHtwbGF0Zm9ybUlkfS9tZXNzYWdlc2A7XG4gICAgaWYgKCFhanYuZ2V0U2NoZW1hKG1lc3NhZ2VTY2hlbWFSZWYpKSB7XG4gICAgICAgIGFqdi5hZGRTY2hlbWEoe30sIG1lc3NhZ2VTY2hlbWFSZWYpO1xuICAgIH1cblxuICAgIGNvbnN0IGNyZWRlbnRpYWxzU2NoZW1hUmVmID0gYCR7c2NoZW1hVVJMfS9jb250ZXh0LyR7cGxhdGZvcm1JZH0vY3JlZGVudGlhbHNgO1xuICAgIGlmICghYWp2LmdldFNjaGVtYShjcmVkZW50aWFsc1NjaGVtYVJlZikpIHtcbiAgICAgICAgYWp2LmFkZFNjaGVtYSh7fSwgY3JlZGVudGlhbHNTY2hlbWFSZWYpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyU3lzdGVtUGxhdGZvcm1Db250ZXh0cygpOiB2b2lkIHtcbiAgICBpZiAoc3lzdGVtQ29udGV4dHNSZWdpc3RlcmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVnaXN0ZXJTeXN0ZW1Db250ZXh0KEVSUk9SX1BMQVRGT1JNX0lELCBFUlJPUl9QTEFURk9STV9DT05URVhUX1VSTCk7XG4gICAgcmVnaXN0ZXJTeXN0ZW1Db250ZXh0KElOVEVSTkFMX1BMQVRGT1JNX0lELCBJTlRFUk5BTF9QTEFURk9STV9DT05URVhUX1VSTCk7XG4gICAgc3lzdGVtQ29udGV4dHNSZWdpc3RlcmVkID0gdHJ1ZTtcbn1cblxucmVnaXN0ZXJTeXN0ZW1QbGF0Zm9ybUNvbnRleHRzKCk7XG5cbmZ1bmN0aW9uIGhhbmRsZVZhbGlkYXRpb24oc2NoZW1hUmVmOiBzdHJpbmcsIG1zZzogQWN0aXZpdHlTdHJlYW0pOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IGFqdi5nZXRTY2hlbWEoc2NoZW1hUmVmKTtcbiAgICBpZiAoIXZhbGlkYXRvcikge1xuICAgICAgICByZXR1cm4gYHNjaGVtYSAke3NjaGVtYVJlZn0gbm90IGZvdW5kYDtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdG9yKG1zZyk7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgIG1zZyxcbiAgICAgICAgICAgIHZhbGlkYXRvci5lcnJvcnMsXG4gICAgICAgICAgICB2YWxpZGF0aW9uRXJyb3JPcHRpb25zLFxuICAgICAgICApO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgobXNnIGFzIEFjdGl2aXR5U3RyZWFtKVtcIkBjb250ZXh0XCJdKSkge1xuICAgICAgICAgICAgY29uc3QgcGxhdGZvcm1Db250ZXh0VXJsID0gcmVzb2x2ZVBsYXRmb3JtQ29udGV4dFVybChcbiAgICAgICAgICAgICAgICBtc2cgYXMgQWN0aXZpdHlTdHJlYW0sXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHBsYXRmb3JtQ29udGV4dFVybCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsYXRmb3JtSWQgPVxuICAgICAgICAgICAgICAgICAgICBnZXRQbGF0Zm9ybUlkQnlDb250ZXh0VXJsKHBsYXRmb3JtQ29udGV4dFVybCk7XG4gICAgICAgICAgICAgICAgaWYgKHBsYXRmb3JtSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYFske3BsYXRmb3JtSWR9XSAke2Vycm9yTWVzc2FnZX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFZhbGlkYXRpb25FcnJvck9wdGlvbnMoXG4gICAgb3B0aW9uczogVmFsaWRhdGlvbkVycm9yT3B0aW9ucyxcbik6IHZvaWQge1xuICAgIHZhbGlkYXRpb25FcnJvck9wdGlvbnMgPSB7IC4uLnZhbGlkYXRpb25FcnJvck9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcbn1cblxubGV0IHNvY2tldGh1YkNvbmZpZ1ZhbGlkYXRvcjogUmV0dXJuVHlwZTx0eXBlb2YgYWp2LmNvbXBpbGU+IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIFZhbGlkYXRlIGEgKGZ1bGx5LW1hdGVyaWFsaXplZCkgU29ja2V0aHViIHNlcnZlciBjb25maWcgb2JqZWN0IGFnYWluc3QgdGhlXG4gKiBjYW5vbmljYWwgY29uZmlnIHNjaGVtYS4gUmV0dXJucyBcIlwiIHdoZW4gdmFsaWQsIG90aGVyd2lzZSBhIGh1bWFuLXJlYWRhYmxlXG4gKiBlcnJvciBzdHJpbmcuIFVzZWQgYnkgdGhlIHNlcnZlciBhdCBzdGFydHVwIHNvIGEgbWlzLXR5cGVkIG9yIHVua25vd24gY29uZmlnXG4gKiB2YWx1ZSDigJQgaW5jbHVkaW5nIGluc2lkZSBhIHBsYXRmb3JtJ3MgYHBhY2thZ2VDb25maWdgIGVudHJ5IOKAlCBmYWlscyBsb3VkbHlcbiAqIHJhdGhlciB0aGFuIHJlYWNoaW5nIGEgcGxhdGZvcm0gd3JvbmctdHlwZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNvY2tldGh1YkNvbmZpZyhjb25maWc6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGlmICghc29ja2V0aHViQ29uZmlnVmFsaWRhdG9yKSB7XG4gICAgICAgIHNvY2tldGh1YkNvbmZpZ1ZhbGlkYXRvciA9IGFqdi5jb21waWxlKFNvY2tldGh1YkNvbmZpZ1NjaGVtYSk7XG4gICAgfVxuICAgIGlmIChzb2NrZXRodWJDb25maWdWYWxpZGF0b3IoY29uZmlnKSkge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIGFqdi5lcnJvcnNUZXh0KHNvY2tldGh1YkNvbmZpZ1ZhbGlkYXRvci5lcnJvcnMsIHtcbiAgICAgICAgZGF0YVZhcjogXCJjb25maWdcIixcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQWN0aXZpdHlTdHJlYW0obXNnOiBBY3Rpdml0eVN0cmVhbSk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RyZWFtVmFsaWRhdGlvbkVycm9yID0gaGFuZGxlVmFsaWRhdGlvbihcbiAgICAgICAgYCR7c2NoZW1hVVJMfS9hY3Rpdml0eS1zdHJlYW1gLFxuICAgICAgICBtc2csXG4gICAgKTtcbiAgICBpZiAoc3RyZWFtVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW1WYWxpZGF0aW9uRXJyb3I7XG4gICAgfVxuICAgIGNvbnN0IHBsYXRmb3JtQ29udGV4dFVybCA9IHJlc29sdmVQbGF0Zm9ybUNvbnRleHRVcmwobXNnKTtcbiAgICBpZiAoIXBsYXRmb3JtQ29udGV4dFVybCkge1xuICAgICAgICByZXR1cm4gXCJhY3Rpdml0eSBzdHJlYW1zIG11c3QgaGF2ZSBleGFjdGx5IG9uZSByZWdpc3RlcmVkIHBsYXRmb3JtIGNvbnRleHQgVVJMIGluIEBjb250ZXh0XCI7XG4gICAgfVxuICAgIGNvbnN0IHNjaGVtYUlkID0gZ2V0U2NoZW1hSWRCeUNvbnRleHRVcmwocGxhdGZvcm1Db250ZXh0VXJsKTtcbiAgICBpZiAoIXNjaGVtYUlkKSB7XG4gICAgICAgIHJldHVybiBgcGxhdGZvcm0gY29udGV4dCBVUkwgJHtwbGF0Zm9ybUNvbnRleHRVcmx9IGRvZXMgbm90IGhhdmUgYSByZWdpc3RlcmVkIG1lc3NhZ2Ugc2NoZW1hYDtcbiAgICB9XG4gICAgcmV0dXJuIGhhbmRsZVZhbGlkYXRpb24oc2NoZW1hSWQsIG1zZyk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW4gb3V0Ym91bmQgcGxhdGZvcm0gcmVzcG9uc2UgYWdhaW5zdCB0aGF0IHBsYXRmb3JtJ3MgYHJlc3BvbnNlc2BcbiAqIHNjaGVtYS4gUmV0dXJucyBcIlwiIHdoZW4gdGhlIHBsYXRmb3JtIGhhcyBubyByZXNwb25zZXMgc2NoZW1hIHJlZ2lzdGVyZWQgKHlldCksXG4gKiBzbyBvdXRib3VuZCB2YWxpZGF0aW9uIGNhbiBiZSBhZG9wdGVkIHBsYXRmb3JtLWJ5LXBsYXRmb3JtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVBY3Rpdml0eVN0cmVhbVJlc3BvbnNlKG1zZzogQWN0aXZpdHlTdHJlYW0pOiBzdHJpbmcge1xuICAgIGNvbnN0IHBsYXRmb3JtQ29udGV4dFVybCA9IHJlc29sdmVQbGF0Zm9ybUNvbnRleHRVcmwobXNnKTtcbiAgICBpZiAoIXBsYXRmb3JtQ29udGV4dFVybCkge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgY29uc3QgcGxhdGZvcm1JZCA9IGdldFBsYXRmb3JtSWRCeUNvbnRleHRVcmwocGxhdGZvcm1Db250ZXh0VXJsKTtcbiAgICBpZiAoIXBsYXRmb3JtSWQpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlc1NjaGVtYUlkID0gYCR7c2NoZW1hVVJMfS9jb250ZXh0LyR7cGxhdGZvcm1JZH0vcmVzcG9uc2VzYDtcbiAgICBpZiAoIWFqdi5nZXRTY2hlbWEocmVzcG9uc2VzU2NoZW1hSWQpKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICByZXR1cm4gaGFuZGxlVmFsaWRhdGlvbihyZXNwb25zZXNTY2hlbWFJZCwgbXNnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ3JlZGVudGlhbHMobXNnOiBBY3Rpdml0eVN0cmVhbSk6IHN0cmluZyB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG1zZ1tcIkBjb250ZXh0XCJdKSkge1xuICAgICAgICByZXR1cm4gXCJjcmVkZW50aWFsIGFjdGl2aXR5IHN0cmVhbXMgbXVzdCBoYXZlIGFuIEBjb250ZXh0IHNldFwiO1xuICAgIH1cbiAgICBpZiAobXNnLnR5cGUgIT09IFwiY3JlZGVudGlhbHNcIikge1xuICAgICAgICByZXR1cm4gXCJjcmVkZW50aWFsIGFjdGl2aXR5IHN0cmVhbXMgbXVzdCBoYXZlIGNyZWRlbnRpYWxzIHNldCBhcyB0eXBlXCI7XG4gICAgfVxuICAgIGNvbnN0IHN0cmVhbVZhbGlkYXRpb25FcnJvciA9IGhhbmRsZVZhbGlkYXRpb24oXG4gICAgICAgIGAke3NjaGVtYVVSTH0vYWN0aXZpdHktc3RyZWFtYCxcbiAgICAgICAgbXNnLFxuICAgICk7XG4gICAgaWYgKHN0cmVhbVZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICByZXR1cm4gc3RyZWFtVmFsaWRhdGlvbkVycm9yO1xuICAgIH1cbiAgICBjb25zdCBwbGF0Zm9ybUNvbnRleHRVcmwgPSByZXNvbHZlUGxhdGZvcm1Db250ZXh0VXJsKG1zZyk7XG4gICAgaWYgKCFwbGF0Zm9ybUNvbnRleHRVcmwpIHtcbiAgICAgICAgcmV0dXJuIFwiY3JlZGVudGlhbCBhY3Rpdml0eSBzdHJlYW1zIG11c3QgaGF2ZSBleGFjdGx5IG9uZSByZWdpc3RlcmVkIHBsYXRmb3JtIGNvbnRleHQgVVJMIGluIEBjb250ZXh0XCI7XG4gICAgfVxuICAgIGNvbnN0IGNyZWRlbnRpYWxzU2NoZW1hSWQgPVxuICAgICAgICBnZXRDcmVkZW50aWFsc1NjaGVtYUlkQnlDb250ZXh0VXJsKHBsYXRmb3JtQ29udGV4dFVybCk7XG4gICAgaWYgKCFjcmVkZW50aWFsc1NjaGVtYUlkKSB7XG4gICAgICAgIHJldHVybiBgcGxhdGZvcm0gY29udGV4dCBVUkwgJHtwbGF0Zm9ybUNvbnRleHRVcmx9IGRvZXMgbm90IGhhdmUgYSByZWdpc3RlcmVkIGNyZWRlbnRpYWxzIHNjaGVtYWA7XG4gICAgfVxuICAgIHJldHVybiBoYW5kbGVWYWxpZGF0aW9uKGNyZWRlbnRpYWxzU2NoZW1hSWQsIG1zZyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBsYXRmb3JtU2NoZW1hKHNjaGVtYTogU2NoZW1hKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWxpZGF0ZSA9IGFqdi5jb21waWxlKFBsYXRmb3JtU2NoZW1hKTtcbiAgICAvLyB2YWxpZGF0ZSBzY2hlbWEgcHJvcGVydHlcbiAgICBjb25zdCBlcnIgPSB2YWxpZGF0ZShzY2hlbWEpO1xuICAgIGlmICghZXJyKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvciA9IHZhbGlkYXRlLmVycm9yc1swXTtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSBgJHt2YWxpZGF0aW9uRXJyb3IuaW5zdGFuY2VQYXRofSAke3ZhbGlkYXRpb25FcnJvci5tZXNzYWdlfWA7XG4gICAgICAgIGlmICh2YWxpZGF0aW9uRXJyb3Iua2V5d29yZCA9PT0gXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiKSB7XG4gICAgICAgICAgICBtZXNzYWdlICs9IGA6ICR7dmFsaWRhdGlvbkVycm9yLnBhcmFtcy5hZGRpdGlvbmFsUHJvcGVydHl9YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYHBsYXRmb3JtIHNjaGVtYSBmYWlsZWQgdG8gdmFsaWRhdGU6ICR7bWVzc2FnZX1gO1xuICAgIH1cbiAgICBjb25zdCBwbGF0Zm9ybSA9IHNjaGVtYSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBtZXNzYWdlcyA9IHBsYXRmb3JtLm1lc3NhZ2VzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSBtZXNzYWdlcz8ucHJvcGVydGllcyBhc1xuICAgICAgICB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICAgIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRlY2xhcmVkVHlwZXMgPSAocm9vdDogdW5rbm93bik6IFNldDxzdHJpbmc+ID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGNvbnN0IHZpc2l0ID0gKHZhbHVlOiB1bmtub3duKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBub2RlID0gdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICBpZiAodHlwZW9mIG5vZGUuY29uc3QgPT09IFwic3RyaW5nXCIpIHJlc3VsdC5hZGQobm9kZS5jb25zdCk7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShub2RlLmVudW0pKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG5vZGUuZW51bSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIpIHJlc3VsdC5hZGQoaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgbm9kZVByb3BlcnRpZXMgPSBub2RlLnByb3BlcnRpZXMgYXNcbiAgICAgICAgICAgICAgICB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICAgICAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICB2aXNpdChub2RlUHJvcGVydGllcz8udHlwZSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleXdvcmQgb2YgW1wiYWxsT2ZcIiwgXCJhbnlPZlwiLCBcIm9uZU9mXCJdIGFzIGNvbnN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnJhbmNoZXMgPSBub2RlW2tleXdvcmRdO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJyYW5jaGVzKSkgYnJhbmNoZXMuZm9yRWFjaCh2aXNpdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZpc2l0KHJvb3QpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgZm9yIChjb25zdCBbcHJvcGVydHksIGFsbG93ZWRdIG9mIFtcbiAgICAgICAgW1wiYWN0b3JcIiwgQWN0b3JUeXBlc0xpc3RdLFxuICAgICAgICBbXCJ0YXJnZXRcIiwgVGFyZ2V0VHlwZXNMaXN0XSxcbiAgICBdIGFzIGNvbnN0KSB7XG4gICAgICAgIGNvbnN0IHVuc3VwcG9ydGVkID0gWy4uLmRlY2xhcmVkVHlwZXMocHJvcGVydGllcz8uW3Byb3BlcnR5XSldLmZpbHRlcihcbiAgICAgICAgICAgICh0eXBlKSA9PiAhYWxsb3dlZC5pbmNsdWRlcyh0eXBlKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHVuc3VwcG9ydGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBgcGxhdGZvcm0gc2NoZW1hICR7cHJvcGVydHl9IHR5cGVzIGFyZSBub3QgcmVnaXN0ZXJlZCBpbiB0aGUgc2hhcmVkIEFjdGl2aXR5U3RyZWFtcyBlbnZlbG9wZTogJHt1bnN1cHBvcnRlZC5qb2luKFwiLCBcIil9YDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFBsYXRmb3JtU2NoZW1hKHNjaGVtYTogU2NoZW1hLCBwbGF0Zm9ybV90eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzY2hlbWFSZWYgPSBgJHtzY2hlbWFVUkx9L2NvbnRleHQvJHtwbGF0Zm9ybV90eXBlfWA7XG4gICAgaWYgKCFhanYuZ2V0U2NoZW1hKHNjaGVtYVJlZikpIHtcbiAgICAgICAgYWp2LmFkZFNjaGVtYShzY2hlbWEsIHNjaGVtYVJlZik7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGxhdGZvcm1TY2hlbWEocGxhdGZvcm1fdHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFqdi5nZXRTY2hlbWEoYCR7c2NoZW1hVVJMfS9jb250ZXh0LyR7cGxhdGZvcm1fdHlwZX1gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFBsYXRmb3JtQ29udGV4dChcbiAgICBwbGF0Zm9ybUlkOiBzdHJpbmcsXG4gICAgcGxhdGZvcm1Db250ZXh0VXJsOiBzdHJpbmcsXG4pIHtcbiAgICByZWdpc3RlclBsYXRmb3JtQ29udGV4dChcbiAgICAgICAgcGxhdGZvcm1JZCxcbiAgICAgICAgcGxhdGZvcm1Db250ZXh0VXJsLFxuICAgICAgICBgJHtzY2hlbWFVUkx9L2NvbnRleHQvJHtwbGF0Zm9ybUlkfS9tZXNzYWdlc2AsXG4gICAgICAgIGAke3NjaGVtYVVSTH0vY29udGV4dC8ke3BsYXRmb3JtSWR9L2NyZWRlbnRpYWxzYCxcbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBsYXRmb3JtSWQobXNnOiBBY3Rpdml0eVN0cmVhbSk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IHBsYXRmb3JtQ29udGV4dFVybCA9IHJlc29sdmVQbGF0Zm9ybUNvbnRleHRVcmwobXNnKTtcbiAgICBpZiAoIXBsYXRmb3JtQ29udGV4dFVybCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGdldFBsYXRmb3JtSWRCeUNvbnRleHRVcmwocGxhdGZvcm1Db250ZXh0VXJsKSA/PyBudWxsO1xufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IEVycm9yT2JqZWN0IH0gZnJvbSBcImFqdlwiO1xuaW1wb3J0IHR5cGUgeyBBY3Rpdml0eU9iamVjdCwgQWN0aXZpdHlTdHJlYW0gfSBmcm9tIFwiLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IEFjdG9yVHlwZXNMaXN0LCBPYmplY3RUeXBlc0xpc3QsIFRhcmdldFR5cGVzTGlzdCB9IGZyb20gXCIuL29iamVjdHMuanNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uRXJyb3JPcHRpb25zIHtcbiAgICBleGNsdWRlVHlwZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG5pbnRlcmZhY2UgVHlwZUJyZWFrZG93biB7XG4gICAgYWN0b3I6IEFycmF5PHN0cmluZz47XG4gICAgb2JqZWN0OiBBcnJheTxzdHJpbmc+O1xuICAgIHRhcmdldDogQXJyYXk8c3RyaW5nPjtcbn1cblxuZnVuY3Rpb24gcGFyc2VNc2coZXJyb3I6IEVycm9yT2JqZWN0KTogc3RyaW5nIHtcbiAgICBsZXQgZXJyID0gYCR7XG4gICAgICAgIGVycm9yLmluc3RhbmNlUGF0aCA/IGVycm9yLmluc3RhbmNlUGF0aCA6IFwiYWN0aXZpdHkgc3RyZWFtXCJcbiAgICB9OiAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgICBpZiAoZXJyb3Iua2V5d29yZCA9PT0gXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiKSB7XG4gICAgICAgIGVyciArPSBgOiAke2Vycm9yLnBhcmFtcy5hZGRpdGlvbmFsUHJvcGVydHl9YDtcbiAgICB9IGVsc2UgaWYgKGVycm9yLmtleXdvcmQgPT09IFwiZW51bVwiKSB7XG4gICAgICAgIGVyciArPSBgOiAke2Vycm9yLnBhcmFtcy5hbGxvd2VkVmFsdWVzLmpvaW4oXCIsIFwiKX1gO1xuICAgIH1cbiAgICByZXR1cm4gZXJyO1xufVxuXG5mdW5jdGlvbiBnZXRUeXBlTGlzdChtc2c6IEFjdGl2aXR5U3RyZWFtIHwgQWN0aXZpdHlPYmplY3QpOiBBcnJheTxzdHJpbmc+IHtcbiAgICBjb25zdCB0eXBlczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIGlmIChtc2c/LnR5cGUpIHtcbiAgICAgICAgdHlwZXMucHVzaChtc2cudHlwZSk7XG4gICAgfVxuICAgIGNvbnN0IHJlY29yZCA9IG1zZyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gcmVjb3JkKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmVjb3JkW3Byb3BdO1xuICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIFwidHlwZVwiIGluIHZhbHVlKSB7XG4gICAgICAgICAgICB0eXBlcy5wdXNoKFxuICAgICAgICAgICAgICAgIC4uLmdldFR5cGVMaXN0KHZhbHVlIGFzIEFjdGl2aXR5U3RyZWFtIHwgQWN0aXZpdHlPYmplY3QpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHlwZXM7XG59XG5cbmZ1bmN0aW9uIGdldFNjaGVtYVR5cGUoZXJyb3I6IEVycm9yT2JqZWN0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzY2hlbWFUeXBlUmVzID0gZXJyb3Iuc2NoZW1hUGF0aC5tYXRjaCgvI1xcL1xcdytcXC9cXHcrXFwvKFtcXHctXSspXFwvLyk7XG4gICAgcmV0dXJuIHNjaGVtYVR5cGVSZXMgPyBzY2hlbWFUeXBlUmVzWzFdIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRFcnJUeXBlKGVycm9yOiBFcnJvck9iamVjdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZXJyVHlwZVJlcyA9IGVycm9yLmluc3RhbmNlUGF0aC5tYXRjaCgvXFwvKFxcdyspLyk7XG4gICAgcmV0dXJuIGVyclR5cGVSZXMgPyBlcnJUeXBlUmVzWzFdIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJ0c0NvdW50KGVycm9yOiBFcnJvck9iamVjdCwgdHlwZXM6IFR5cGVCcmVha2Rvd24pOiBudW1iZXIge1xuICAgIGNvbnN0IHNjaGVtYVR5cGUgPSBnZXRTY2hlbWFUeXBlKGVycm9yKTtcbiAgICBjb25zdCBlcnJUeXBlID0gZ2V0RXJyVHlwZShlcnJvcik7XG4gICAgaWYgKCFlcnJUeXBlKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgY29uc3QgdHlwZUxpc3QgPSAodHlwZXMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCBBcnJheTxzdHJpbmc+PilbXG4gICAgICAgIGVyclR5cGVcbiAgICBdO1xuICAgIGlmICghdHlwZUxpc3QpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBpZiAoIXNjaGVtYVR5cGUgfHwgIXR5cGVMaXN0LmluY2x1ZGVzKHNjaGVtYVR5cGUpKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgY29uc3QgcGFydHMgPSBlcnJvci5pbnN0YW5jZVBhdGguc3BsaXQoXCIvXCIpO1xuICAgIHJldHVybiBwYXJ0cy5sZW5ndGg7XG59XG5cbmZ1bmN0aW9uIGdldFR5cGVzKG1zZzogQWN0aXZpdHlTdHJlYW0gfCBBY3Rpdml0eU9iamVjdCk6IFR5cGVCcmVha2Rvd24ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSgobXNnIGFzIEFjdGl2aXR5U3RyZWFtKVtcIkBjb250ZXh0XCJdKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWN0b3I6IFtdLFxuICAgICAgICAgICAgdGFyZ2V0OiBbXSxcbiAgICAgICAgICAgIG9iamVjdDogZ2V0VHlwZUxpc3QobXNnKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdHJlYW0gPSBtc2cgYXMgQWN0aXZpdHlTdHJlYW07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWN0b3I6IGdldFR5cGVMaXN0KHN0cmVhbS5hY3RvciksXG4gICAgICAgIHRhcmdldDogZ2V0VHlwZUxpc3Qoc3RyZWFtLnRhcmdldCksXG4gICAgICAgIG9iamVjdDogc3RyZWFtLm9iamVjdCA/IGdldFR5cGVMaXN0KHN0cmVhbS5vYmplY3QpIDogW10sXG4gICAgfTtcbn1cblxuLyoqXG4gKiBUcmF2ZXJzZXMgdGhlIGVycm9ycyBhcnJheSBmcm9tIGFqdiwgYW5kIG1ha2VzIGEgc2VyaWVzIG9mIGZpbHRlcmluZyBkZWNpc2lvbnMgdG9cbiAqIHRyeSB0byBhcnJpdmUgYXQgdGhlIG1vc3QgdXNlZnVsIGVycm9yLlxuICogQHBhcmFtIG1zZ1xuICogQHBhcmFtIGVycm9yc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RXJyb3JNZXNzYWdlKFxuICAgIG1zZzogQWN0aXZpdHlTdHJlYW0gfCBBY3Rpdml0eU9iamVjdCxcbiAgICBlcnJvcnM6IEFycmF5PEVycm9yT2JqZWN0PixcbiAgICBvcHRpb25zPzogVmFsaWRhdGlvbkVycm9yT3B0aW9ucyxcbik6IHN0cmluZyB7XG4gICAgY29uc3QgdHlwZXMgPSBnZXRUeXBlcyhtc2cpO1xuICAgIGxldCBkZWVwZXN0X2VudHJ5ID0gMDtcbiAgICBsZXQgaGlnaGVzdF9kZXB0aCA9IC0xO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGFydHNDb3VudCA9IGdldFBhcnRzQ291bnQoZXJyb3JzW2ldLCB0eXBlcyk7XG4gICAgICAgIGlmIChwYXJ0c0NvdW50ID4gaGlnaGVzdF9kZXB0aCkge1xuICAgICAgICAgICAgaGlnaGVzdF9kZXB0aCA9IHBhcnRzQ291bnQ7XG4gICAgICAgICAgICBkZWVwZXN0X2VudHJ5ID0gaTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoaWdoZXN0X2RlcHRoID49IDBcbiAgICAgICAgPyBwYXJzZU1zZyhlcnJvcnNbZGVlcGVzdF9lbnRyeV0pXG4gICAgICAgIDogY29tcG9zZUZpbmFsRXJyb3IoZXJyb3JzW2Vycm9ycy5sZW5ndGggLSAxXSwgb3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGZpbHRlclR5cGVMaXN0KFxuICAgIHR5cGVzOiBBcnJheTxzdHJpbmc+LFxuICAgIG9wdGlvbnM/OiBWYWxpZGF0aW9uRXJyb3JPcHRpb25zLFxuKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgaWYgKCFvcHRpb25zPy5leGNsdWRlVHlwZXMgfHwgb3B0aW9ucy5leGNsdWRlVHlwZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG4gICAgY29uc3QgZXhjbHVkZSA9IG5ldyBTZXQob3B0aW9ucy5leGNsdWRlVHlwZXMpO1xuICAgIHJldHVybiB0eXBlcy5maWx0ZXIoKHR5cGUpID0+ICFleGNsdWRlLmhhcyh0eXBlKSk7XG59XG5cbmZ1bmN0aW9uIGNvbXBvc2VGaW5hbEVycm9yKFxuICAgIGVycm9yOiBFcnJvck9iamVjdCxcbiAgICBvcHRpb25zPzogVmFsaWRhdGlvbkVycm9yT3B0aW9ucyxcbik6IHN0cmluZyB7XG4gICAgLy8gaWYgd2UgaGF2ZSB5ZXQgdG8gYnVpbGQgYW4gZXJyb3IgbWVzc2FnZSwgYXNzdW1lIHRoaXMgaXMgYW4gaW52YWxpZCB0eXBlIHZhbHVlIChvbmVPZiksXG4gICAgLy8gdHJ5IHRvIGJ1aWxkIGEgbGlzdCBvZiB2YWxpZCB0eXBlc1xuICAgIGxldCBtc2c6IHN0cmluZztcbiAgICBpZiAoZXJyb3Iua2V5d29yZCA9PT0gXCJvbmVPZlwiKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlUm9vdCA9IGVycm9yLmluc3RhbmNlUGF0aC5zcGxpdChcIi9cIilbMV07XG4gICAgICAgIGNvbnN0IHBhdGhTY29wZWRUeXBlcyA9XG4gICAgICAgICAgICBpbnN0YW5jZVJvb3QgPT09IFwiYWN0b3JcIlxuICAgICAgICAgICAgICAgID8gQWN0b3JUeXBlc0xpc3RcbiAgICAgICAgICAgICAgICA6IGluc3RhbmNlUm9vdCA9PT0gXCJ0YXJnZXRcIlxuICAgICAgICAgICAgICAgICAgPyBUYXJnZXRUeXBlc0xpc3RcbiAgICAgICAgICAgICAgICAgIDogT2JqZWN0VHlwZXNMaXN0O1xuICAgICAgICBjb25zdCBmaWx0ZXJlZFR5cGVzID0gZmlsdGVyVHlwZUxpc3QocGF0aFNjb3BlZFR5cGVzLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgdHlwZXNMaXN0ID1cbiAgICAgICAgICAgIGZpbHRlcmVkVHlwZXMubGVuZ3RoID4gMCA/IGZpbHRlcmVkVHlwZXMgOiBwYXRoU2NvcGVkVHlwZXM7XG4gICAgICAgIG1zZyA9XG4gICAgICAgICAgICBgJHtlcnJvci5pbnN0YW5jZVBhdGh9OiAke2Vycm9yLm1lc3NhZ2V9OiBgICtcbiAgICAgICAgICAgIGAke3R5cGVzTGlzdC5qb2luKFwiLCBcIil9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBtc2cgPSBgJHtcbiAgICAgICAgICAgIGVycm9yLmluc3RhbmNlUGF0aCA/IGVycm9yLmluc3RhbmNlUGF0aCA6IFwiYWN0aXZpdHkgc3RyZWFtXCJcbiAgICAgICAgfTogJHtlcnJvci5tZXNzYWdlfWA7XG4gICAgfVxuICAgIGlmIChcImFkZGl0aW9uYWxQcm9wZXJ0eVwiIGluIGVycm9yLnBhcmFtcykge1xuICAgICAgICBtc2cgKz0gYDogJHtlcnJvci5wYXJhbXMuYWRkaXRpb25hbFByb3BlcnR5fWA7XG4gICAgfVxuICAgIHJldHVybiBtc2c7XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQWN0aXZpdHlTdHJlYW0gfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuXG5jb25zdCBzdHJpbmdSZWZLZXlzID0ge1xuICAgIGFjdG9yOiBcImlkXCIsXG4gICAgdGFyZ2V0OiBcImlkXCIsXG4gICAgb2JqZWN0OiBcImNvbnRlbnRcIixcbn0gYXMgY29uc3Q7XG5cbnR5cGUgU3RyZWFtUGFydEtleSA9IGtleW9mIHR5cGVvZiBzdHJpbmdSZWZLZXlzO1xuXG5mdW5jdGlvbiBub3JtYWxpemVTdHJpbmdSZWYodmFsdWU6IHVua25vd24sIHByaW1hcnlLZXk6IHN0cmluZyk6IHVua25vd24ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHsgW3ByaW1hcnlLZXldOiB2YWx1ZSB9O1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLm1hcCgoZW50cnkpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBpZDogZW50cnkgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlbnRyeTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgc3RyaW5nIGFjdG9yL3RhcmdldC9vYmplY3QgcmVmcyBpbnRvIG1pbmltYWwgQWN0aXZpdHlPYmplY3RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQWN0aXZpdHlTdHJlYW0obWV0YTogQWN0aXZpdHlTdHJlYW0pOiBBY3Rpdml0eVN0cmVhbSB7XG4gICAgY29uc3Qgc3RyZWFtOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICAgLi4uKG1ldGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiksXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzdHJpbmdSZWZLZXlzKSBhcyBTdHJlYW1QYXJ0S2V5W10pIHtcbiAgICAgICAgaWYgKGtleSBpbiBzdHJlYW0pIHtcbiAgICAgICAgICAgIHN0cmVhbVtrZXldID0gbm9ybWFsaXplU3RyaW5nUmVmKHN0cmVhbVtrZXldLCBzdHJpbmdSZWZLZXlzW2tleV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdHJlYW0gYXMgQWN0aXZpdHlTdHJlYW07XG59XG4iLAogICAgImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnLi9pbmRleC5qcydcblxuZXhwb3J0IHsgRXZlbnRFbWl0dGVyIH1cbmV4cG9ydCBkZWZhdWx0IEV2ZW50RW1pdHRlclxuIiwKICAgICJpbXBvcnQgeyBhZGRQbGF0Zm9ybUNvbnRleHQsIGFkZFBsYXRmb3JtU2NoZW1hIH0gZnJvbSBcIkBzb2NrZXRodWIvc2NoZW1hc1wiO1xuXG4vLyBtYWpvclsubWlub3JbLnBhdGNoXV0gd2l0aCBvcHRpb25hbCBwcmVyZWxlYXNlIGFuZCBidWlsZCBtZXRhZGF0YS5cbmNvbnN0IExFR0FDWV9WRVJTSU9OX1BBVFRFUk4gPVxuICAgIC9edj8oXFxkKykoPzpcXC5cXGQrKXswLDJ9KD86LVswLTlBLVphLXotXSsoPzpcXC5bMC05QS1aYS16LV0rKSopPyg/OlxcK1swLTlBLVphLXotXSsoPzpcXC5bMC05QS1aYS16LV0rKSopPyQvO1xuXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgb2JqZWN0IHtcbiAgICByZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG4vKiogQW4gQVBJIHZlcnNpb24gaXMgYSBTZW1WZXIgbWFqb3I6IGEgbm9uLW5lZ2F0aXZlIHNhZmUgaW50ZWdlci4gKi9cbmZ1bmN0aW9uIGlzQXBpVmVyc2lvbih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG51bWJlciB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiICYmIE51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlKSAmJiB2YWx1ZSA+PSAwXG4gICAgKTtcbn1cblxuLyoqXG4gKiBSZWFkIGFuIEFQSSB2ZXJzaW9uIG9mZiBhIHJlZ2lzdHJ5IHBheWxvYWQgb3IgcGxhdGZvcm0gZW50cnkuIFNlcnZlcnMgdGhhdFxuICogcHJlZGF0ZSBBUEkgdmVyc2lvbnMgcHVibGlzaGVkIGFuIGV4YWN0IHBhY2thZ2UgYHZlcnNpb25gIGluc3RlYWQ7IGl0c1xuICogU2VtVmVyIG1ham9yIGlzIHRoZSBzYW1lIG51bWJlciwgc28gZGVyaXZlIGl0IHJhdGhlciB0aGFuIHJlcG9ydCBub3RoaW5nLlxuICovXG5mdW5jdGlvbiByZXNvbHZlQXBpVmVyc2lvbihzb3VyY2U6IHVua25vd24pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGlmICghc291cmNlIHx8IHR5cGVvZiBzb3VyY2UgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgeyBhcGlWZXJzaW9uLCB2ZXJzaW9uIH0gPSBzb3VyY2UgYXMge1xuICAgICAgICBhcGlWZXJzaW9uPzogdW5rbm93bjtcbiAgICAgICAgdmVyc2lvbj86IHVua25vd247XG4gICAgfTtcbiAgICBpZiAoaXNBcGlWZXJzaW9uKGFwaVZlcnNpb24pKSB7XG4gICAgICAgIHJldHVybiBhcGlWZXJzaW9uO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZlcnNpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBMRUdBQ1lfVkVSU0lPTl9QQVRURVJOLmV4ZWModmVyc2lvbi50cmltKCkpO1xuICAgICAgICBjb25zdCBtYWpvciA9IG1hdGNoID8gTnVtYmVyKG1hdGNoWzFdKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGlzQXBpVmVyc2lvbihtYWpvcikpIHtcbiAgICAgICAgICAgIHJldHVybiBtYWpvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5pbnRlcmZhY2UgUGxhdGZvcm1SZWdpc3RyeVNjaGVtYXMge1xuICAgIGNyZWRlbnRpYWxzPzogb2JqZWN0O1xuICAgIG1lc3NhZ2VzPzogb2JqZWN0O1xufVxuXG4vKipcbiAqIFNlcnZlci1kZWNsYXJlZCBwbGF0Zm9ybSBtZXRhZGF0YSB1c2VkIGJ5IHRoZSBjbGllbnQgZm9yIGNvbnRleHQgZ2VuZXJhdGlvblxuICogYW5kIHJ1bnRpbWUgdmFsaWRhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbGF0Zm9ybVJlZ2lzdHJ5RW50cnkge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgLy8gUGxhdGZvcm0gQVBJIHZlcnNpb24gKHRoZSBwbGF0Zm9ybSBwYWNrYWdlJ3MgU2VtVmVyIG1ham9yKS5cbiAgICBhcGlWZXJzaW9uOiBudW1iZXI7XG4gICAgY29udGV4dFVybDogc3RyaW5nO1xuICAgIGNvbnRleHRWZXJzaW9uOiBzdHJpbmc7XG4gICAgc2NoZW1hVmVyc2lvbjogc3RyaW5nO1xuICAgIHR5cGVzOiBBcnJheTxzdHJpbmc+O1xuICAgIHNjaGVtYXM6IFBsYXRmb3JtUmVnaXN0cnlTY2hlbWFzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBsYXRmb3JtUmVnaXN0cnlQYXlsb2FkIHtcbiAgICAvLyBHbG9iYWwgU29ja2V0aHViIEFQSSB2ZXJzaW9uICh0aGUgc2VydmVyIHBhY2thZ2UncyBTZW1WZXIgbWFqb3IpLlxuICAgIGFwaVZlcnNpb24/OiBudW1iZXI7XG4gICAgLy8gU2VydmVyLWNvbXB1dGVkIGNvbnRlbnQgZmluZ2VycHJpbnQgb2YgdGhlIHJlZ2lzdHJ5LiBUaGUgY2xpZW50IGVjaG9lc1xuICAgIC8vIHRoaXMgb24gcmUtcmVxdWVzdCBzbyB0aGUgc2VydmVyIGNhbiByZXBseSBcInVuY2hhbmdlZFwiIGluc3RlYWQgb2ZcbiAgICAvLyByZS1zZW5kaW5nIHRoZSBmdWxsIHNjaGVtYSBzZXQgKCMxMTE3KS5cbiAgICBmaW5nZXJwcmludD86IHN0cmluZztcbiAgICAvLyBTZXQgYnkgdGhlIHNlcnZlciB3aGVuIHRoZSBlY2hvZWQgZmluZ2VycHJpbnQgbWF0Y2hlczogdGhlIHJlZ2lzdHJ5IGlzXG4gICAgLy8gaWRlbnRpY2FsIHRvIHdoYXQgdGhlIGNsaWVudCBhbHJlYWR5IGhvbGRzLCBzbyBubyBwbGF0Zm9ybXMgYXJlIGluY2x1ZGVkLlxuICAgIHVuY2hhbmdlZD86IGJvb2xlYW47XG4gICAgY29udGV4dHM/OiB7XG4gICAgICAgIGFzPzogc3RyaW5nO1xuICAgICAgICBzb2NrZXRodWI/OiBzdHJpbmc7XG4gICAgfTtcbiAgICBwbGF0Zm9ybXM/OiBBcnJheTxQbGF0Zm9ybVJlZ2lzdHJ5RW50cnk+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFBsYXRmb3JtUmVnaXN0cnkge1xuICAgIGFwaVZlcnNpb246IG51bWJlcjtcbiAgICBhc0NvbnRleHRVcmw6IHN0cmluZztcbiAgICBzb2NrZXRodWJDb250ZXh0VXJsOiBzdHJpbmc7XG4gICAgcGxhdGZvcm1zOiBNYXA8c3RyaW5nLCBQbGF0Zm9ybVJlZ2lzdHJ5RW50cnk+O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGEgc2VydmVyIGBzY2hlbWFzYCBwYXlsb2FkIGFuZCByZWJ1aWxkIGl0IGZpZWxkIGJ5IGZpZWxkLCBzb1xuICogbm90aGluZyB0aGUgc2VydmVyIHNlbmRzIGJleW9uZCB0aGUgYm9vdHN0cmFwIGNvbnRyYWN0IChzdWNoIGFzIGFuIGV4YWN0XG4gKiBwYWNrYWdlIHZlcnNpb24pIGlzIHJldGFpbmVkIG9yIHJlLWVtaXR0ZWQuIFJldHVybnMgdW5kZWZpbmVkIGZvciBhXG4gKiBtYWxmb3JtZWQgcGF5bG9hZDsgbWFsZm9ybWVkIHBsYXRmb3JtIGVudHJpZXMgYXJlIHNraXBwZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBsYXRmb3JtUmVnaXN0cnkoXG4gICAgcGF5bG9hZDogdW5rbm93bixcbik6IFBhcnNlZFBsYXRmb3JtUmVnaXN0cnkgfCB1bmRlZmluZWQge1xuICAgIGlmICghcGF5bG9hZCB8fCB0eXBlb2YgcGF5bG9hZCAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCByZWdpc3RyeSA9IHBheWxvYWQgYXMgUGxhdGZvcm1SZWdpc3RyeVBheWxvYWQ7XG4gICAgY29uc3QgYXNDb250ZXh0VXJsID0gcmVnaXN0cnkuY29udGV4dHM/LmFzO1xuICAgIGNvbnN0IHNvY2tldGh1YkNvbnRleHRVcmwgPSByZWdpc3RyeS5jb250ZXh0cz8uc29ja2V0aHViO1xuICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGFzQ29udGV4dFVybCAhPT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICB0eXBlb2Ygc29ja2V0aHViQ29udGV4dFVybCAhPT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAhQXJyYXkuaXNBcnJheShyZWdpc3RyeS5wbGF0Zm9ybXMpXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIEV2ZXJ5IHNlcnZlciByZXBvcnRzIGFuIEFQSSB2ZXJzaW9uIChsZWdhY3kgb25lcyB2aWEgYHZlcnNpb25gKSwgc29cbiAgICAvLyBhIHBheWxvYWQgd2l0aG91dCBvbmUgaXMgbWFsZm9ybWVkIHJhdGhlciB0aGFuIG1lcmVseSBvbGRlci5cbiAgICBjb25zdCBhcGlWZXJzaW9uID0gcmVzb2x2ZUFwaVZlcnNpb24ocmVnaXN0cnkpO1xuICAgIGlmIChhcGlWZXJzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgcGxhdGZvcm1zID0gbmV3IE1hcDxzdHJpbmcsIFBsYXRmb3JtUmVnaXN0cnlFbnRyeT4oKTtcbiAgICBmb3IgKGNvbnN0IHBsYXRmb3JtIG9mIHJlZ2lzdHJ5LnBsYXRmb3Jtcykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhcGxhdGZvcm0gfHxcbiAgICAgICAgICAgIHR5cGVvZiBwbGF0Zm9ybSAhPT0gXCJvYmplY3RcIiB8fFxuICAgICAgICAgICAgdHlwZW9mIHBsYXRmb3JtLmlkICE9PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICB0eXBlb2YgcGxhdGZvcm0uY29udGV4dFVybCAhPT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICAgdHlwZW9mIHBsYXRmb3JtLmNvbnRleHRWZXJzaW9uICE9PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICB0eXBlb2YgcGxhdGZvcm0uc2NoZW1hVmVyc2lvbiAhPT0gXCJzdHJpbmdcIlxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBsYXRmb3JtQXBpVmVyc2lvbiA9IHJlc29sdmVBcGlWZXJzaW9uKHBsYXRmb3JtKTtcbiAgICAgICAgaWYgKHBsYXRmb3JtQXBpVmVyc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY2hlbWFzID0gaXNQbGFpbk9iamVjdChwbGF0Zm9ybS5zY2hlbWFzKSA/IHBsYXRmb3JtLnNjaGVtYXMgOiB7fTtcbiAgICAgICAgcGxhdGZvcm1zLnNldChwbGF0Zm9ybS5pZCwge1xuICAgICAgICAgICAgaWQ6IHBsYXRmb3JtLmlkLFxuICAgICAgICAgICAgYXBpVmVyc2lvbjogcGxhdGZvcm1BcGlWZXJzaW9uLFxuICAgICAgICAgICAgY29udGV4dFVybDogcGxhdGZvcm0uY29udGV4dFVybCxcbiAgICAgICAgICAgIGNvbnRleHRWZXJzaW9uOiBwbGF0Zm9ybS5jb250ZXh0VmVyc2lvbixcbiAgICAgICAgICAgIHNjaGVtYVZlcnNpb246IHBsYXRmb3JtLnNjaGVtYVZlcnNpb24sXG4gICAgICAgICAgICB0eXBlczogQXJyYXkuaXNBcnJheShwbGF0Zm9ybS50eXBlcylcbiAgICAgICAgICAgICAgICA/IHBsYXRmb3JtLnR5cGVzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAodHlwZSk6IHR5cGUgaXMgc3RyaW5nID0+IHR5cGVvZiB0eXBlID09PSBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgICBzY2hlbWFzOiB7XG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6IGlzUGxhaW5PYmplY3Qoc2NoZW1hcy5jcmVkZW50aWFscylcbiAgICAgICAgICAgICAgICAgICAgPyBzY2hlbWFzLmNyZWRlbnRpYWxzXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VzOiBpc1BsYWluT2JqZWN0KHNjaGVtYXMubWVzc2FnZXMpXG4gICAgICAgICAgICAgICAgICAgID8gc2NoZW1hcy5tZXNzYWdlc1xuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4geyBhcGlWZXJzaW9uLCBhc0NvbnRleHRVcmwsIHNvY2tldGh1YkNvbnRleHRVcmwsIHBsYXRmb3JtcyB9O1xufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgcGxhdGZvcm0ncyBjb250ZXh0IGFuZCBzY2hlbWFzIHdpdGggdGhlIEBzb2NrZXRodWIvc2NoZW1hc1xuICogdmFsaWRhdG9ycyBzbyBsb2NhbCB2YWxpZGF0aW9uIHVzZXMgdGhlIHNhbWUgY2Fub25pY2FsIHNvdXJjZXMgYXMgdGhlXG4gKiBzZXJ2ZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclBsYXRmb3JtU2NoZW1hcyhwbGF0Zm9ybTogUGxhdGZvcm1SZWdpc3RyeUVudHJ5KTogdm9pZCB7XG4gICAgYWRkUGxhdGZvcm1Db250ZXh0KHBsYXRmb3JtLmlkLCBwbGF0Zm9ybS5jb250ZXh0VXJsKTtcbiAgICB0cnkge1xuICAgICAgICBpZiAocGxhdGZvcm0uc2NoZW1hcy5jcmVkZW50aWFscykge1xuICAgICAgICAgICAgYWRkUGxhdGZvcm1TY2hlbWEoXG4gICAgICAgICAgICAgICAgcGxhdGZvcm0uc2NoZW1hcy5jcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBgJHtwbGF0Zm9ybS5pZH0vY3JlZGVudGlhbHNgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGxhdGZvcm0uc2NoZW1hcy5tZXNzYWdlcykge1xuICAgICAgICAgICAgYWRkUGxhdGZvcm1TY2hlbWEoXG4gICAgICAgICAgICAgICAgcGxhdGZvcm0uc2NoZW1hcy5tZXNzYWdlcyxcbiAgICAgICAgICAgICAgICBgJHtwbGF0Zm9ybS5pZH0vbWVzc2FnZXNgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgW1NvY2tldGh1YkNsaWVudF0gRmFpbGVkIHRvIHJlZ2lzdGVyIHNjaGVtYXMgZm9yIHBsYXRmb3JtICR7cGxhdGZvcm0uaWR9OiAke21lc3NhZ2V9YCxcbiAgICAgICAgKTtcbiAgICB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgU2VydmljZURlc2NyaXB0b3IgfSBmcm9tIFwiQHNvY2tldGh1Yi9zY2hlbWFzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVNlcnZpY2VEZXNjcmlwdG9yIH0gZnJvbSBcIkBzb2NrZXRodWIvc2NoZW1hc1wiO1xuaW1wb3J0IHR5cGUgeyBNYW5hZ2VyT3B0aW9ucywgU29ja2V0LCBTb2NrZXRPcHRpb25zIH0gZnJvbSBcInNvY2tldC5pby1jbGllbnRcIjtcblxuLyoqIFRoZSBgaW8oKWAgZmFjdG9yeSBleHBvcnRlZCBieSBgc29ja2V0LmlvLWNsaWVudGAuICovXG5leHBvcnQgdHlwZSBTb2NrZXRGYWN0b3J5ID0gKFxuICAgIHVyaTogc3RyaW5nLFxuICAgIG9wdHM/OiBQYXJ0aWFsPE1hbmFnZXJPcHRpb25zICYgU29ja2V0T3B0aW9ucz4sXG4pID0+IFNvY2tldDtcblxuZXhwb3J0IGludGVyZmFjZSBEaXNjb3Zlck9wdGlvbnMge1xuICAgIC8qKiBSZXBsYWNlbWVudCBmb3IgdGhlIGdsb2JhbCBgZmV0Y2hgLCBtYWlubHkgZm9yIHRlc3RzLiAqL1xuICAgIGZldGNoPzogdHlwZW9mIGZldGNoO1xuICAgIC8qKiBBYm9ydCBkaXNjb3ZlcnkgYWZ0ZXIgdGhpcyBtYW55IG1pbGxpc2Vjb25kcy4gRGVmYXVsdCAxMDAwMC4gKi9cbiAgICBkaXNjb3ZlcnlUaW1lb3V0TXM/OiBudW1iZXI7XG59XG5cbi8qKiBUaHJvd24gd2hlbiBhIHNlcnZlcidzIGRlc2NyaXB0b3IgY2Fubm90IGJlIGZldGNoZWQgb3IgaXMgbm90IHVzYWJsZS4gKi9cbmV4cG9ydCBjbGFzcyBEaXNjb3ZlcnlFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIG9wdGlvbnM/OiB7IGNhdXNlPzogdW5rbm93biB9KSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkRpc2NvdmVyeUVycm9yXCI7XG4gICAgfVxufVxuXG4vKipcbiAqIEZldGNoIGFuZCB2YWxpZGF0ZSBhIFNvY2tldGh1YiBzZXJ2ZXIncyBzZXJ2aWNlIGRlc2NyaXB0b3IgZnJvbSBpdHMgYmFzZVxuICogVVJMLiBFdmVyeSBmYWlsdXJlIHJlamVjdHMgd2l0aCBhIGBEaXNjb3ZlcnlFcnJvcmAgdGhhdCBzYXlzIHdoYXQgd2VudFxuICogd3JvbmcgKHVucmVhY2hhYmxlLCBub24tSlNPTiwgaW52YWxpZCBkZXNjcmlwdG9yKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRpc2NvdmVyU29ja2V0aHViKFxuICAgIGJhc2VVcmw6IHN0cmluZyxcbiAgICBvcHRpb25zOiBEaXNjb3Zlck9wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8U2VydmljZURlc2NyaXB0b3I+IHtcbiAgICBsZXQgdXJsOiBVUkw7XG4gICAgdHJ5IHtcbiAgICAgICAgdXJsID0gbmV3IFVSTChiYXNlVXJsKTtcbiAgICB9IGNhdGNoIChjYXVzZSkge1xuICAgICAgICB0aHJvdyBuZXcgRGlzY292ZXJ5RXJyb3IoXG4gICAgICAgICAgICBgU29ja2V0aHViIGRpc2NvdmVyeSBuZWVkcyBhbiBhYnNvbHV0ZSBiYXNlIFVSTCwgZ290ICR7SlNPTi5zdHJpbmdpZnkoYmFzZVVybCl9YCxcbiAgICAgICAgICAgIHsgY2F1c2UgfSxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHVybC5wcm90b2NvbCAhPT0gXCJodHRwOlwiICYmIHVybC5wcm90b2NvbCAhPT0gXCJodHRwczpcIikge1xuICAgICAgICB0aHJvdyBuZXcgRGlzY292ZXJ5RXJyb3IoXG4gICAgICAgICAgICBgU29ja2V0aHViIGRpc2NvdmVyeSBuZWVkcyBhbiBodHRwKHMpIGJhc2UgVVJMLCBnb3QgJHtKU09OLnN0cmluZ2lmeShiYXNlVXJsKX1gLFxuICAgICAgICApO1xuICAgIH1cbiAgICBjb25zdCBkb0ZldGNoID0gb3B0aW9ucy5mZXRjaCA/PyBnbG9iYWxUaGlzLmZldGNoO1xuICAgIGlmICh0eXBlb2YgZG9GZXRjaCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRocm93IG5ldyBEaXNjb3ZlcnlFcnJvcihcbiAgICAgICAgICAgIFwiU29ja2V0aHViIGRpc2NvdmVyeSBuZWVkcyBmZXRjaCgpOyBwYXNzIG9uZSBpbiB0aGUgb3B0aW9uc1wiLFxuICAgICAgICApO1xuICAgIH1cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IHRpbWVvdXRNcyA9IG9wdGlvbnMuZGlzY292ZXJ5VGltZW91dE1zID8/IDEwMDAwO1xuICAgIC8vIFRoZSB0aW1lciBjb3ZlcnMgdGhlIHdob2xlIGV4Y2hhbmdlOiBmZXRjaCgpIHJlc29sdmVzIG9uY2UgaGVhZGVyc1xuICAgIC8vIGFycml2ZSwgYW5kIGEgc3RhbGxlZCBib2R5IHdvdWxkIG90aGVyd2lzZSBoYW5nIGRpc2NvdmVyeSBmb3JldmVyLlxuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIHRpbWVvdXRNcyk7XG4gICAgY29uc3QgdGltZWRPdXQgPSAoKSA9PiBjb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkO1xuXG4gICAgbGV0IGRlc2NyaXB0b3I6IHVua25vd247XG4gICAgdHJ5IHtcbiAgICAgICAgbGV0IHJlc3BvbnNlOiBSZXNwb25zZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgZG9GZXRjaCh1cmwuaHJlZiwge1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgYWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICAgICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlYXNvbiA9IHRpbWVkT3V0KClcbiAgICAgICAgICAgICAgICA/IGB0aW1lZCBvdXQgYWZ0ZXIgJHt0aW1lb3V0TXN9bXNgXG4gICAgICAgICAgICAgICAgOiBjYXVzZSBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgICAgICAgICA/IGNhdXNlLm1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgIDogU3RyaW5nKGNhdXNlKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBEaXNjb3ZlcnlFcnJvcihcbiAgICAgICAgICAgICAgICBgU29ja2V0aHViIGRpc2NvdmVyeSBmYWlsZWQ6IGNvdWxkIG5vdCByZWFjaCAke3VybC5ocmVmfSAoJHtyZWFzb259KWAsXG4gICAgICAgICAgICAgICAgeyBjYXVzZSB9LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRGlzY292ZXJ5RXJyb3IoXG4gICAgICAgICAgICAgICAgYFNvY2tldGh1YiBkaXNjb3ZlcnkgZmFpbGVkOiAke3VybC5ocmVmfSBhbnN3ZXJlZCAke3Jlc3BvbnNlLnN0YXR1c31gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGVzY3JpcHRvciA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBEaXNjb3ZlcnlFcnJvcihcbiAgICAgICAgICAgICAgICB0aW1lZE91dCgpXG4gICAgICAgICAgICAgICAgICAgID8gYFNvY2tldGh1YiBkaXNjb3ZlcnkgZmFpbGVkOiAke3VybC5ocmVmfSB0aW1lZCBvdXQgYWZ0ZXIgJHt0aW1lb3V0TXN9bXMgd2hpbGUgc2VuZGluZyB0aGUgZGVzY3JpcHRvcmBcbiAgICAgICAgICAgICAgICAgICAgOiBgU29ja2V0aHViIGRpc2NvdmVyeSBmYWlsZWQ6ICR7dXJsLmhyZWZ9IGRpZCBub3QgcmV0dXJuIEpTT047IGlzIGl0IGEgU29ja2V0aHViIHNlcnZlcj9gLFxuICAgICAgICAgICAgICAgIHsgY2F1c2UgfSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIH1cbiAgICBpZiAoIXZhbGlkYXRlU2VydmljZURlc2NyaXB0b3IoZGVzY3JpcHRvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IERpc2NvdmVyeUVycm9yKFxuICAgICAgICAgICAgYFNvY2tldGh1YiBkaXNjb3ZlcnkgZmFpbGVkOiAke3VybC5ocmVmfSBkaWQgbm90IHJldHVybiBhIHZhbGlkIHNlcnZpY2UgZGVzY3JpcHRvcmAsXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBkZXNjcmlwdG9yO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYW4gYWR2ZXJ0aXNlZCBlbmRwb2ludCBwYXRoIGFnYWluc3QgdGhlIHNlcnZlciBvcmlnaW4sIHJlZnVzaW5nIGFueVxuICogcmVzdWx0IHRoYXQgbGFuZHMgb24gYW5vdGhlciBvcmlnaW4uIFRoZSBzY2hlbWEgYWxyZWFkeSByZWplY3RzIHBhdGhzIHRoYXRcbiAqIFVSTCByZXNvbHV0aW9uIHdvdWxkIHJlYWQgYXMgcHJvdG9jb2wtcmVsYXRpdmU7IHRoaXMgaXMgdGhlIGJlbHQgdG8gdGhhdFxuICogYnJhY2UgZm9yIGNhbGxlcnMgdGhhdCBidWlsZCBVUkxzIGZyb20gZGVzY3JpcHRvciB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRW5kcG9pbnQoc2VydmVyT3JpZ2luOiBzdHJpbmcsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChwYXRoLCBzZXJ2ZXJPcmlnaW4pO1xuICAgIGlmICh1cmwub3JpZ2luICE9PSBuZXcgVVJMKHNlcnZlck9yaWdpbikub3JpZ2luKSB7XG4gICAgICAgIHRocm93IG5ldyBEaXNjb3ZlcnlFcnJvcihcbiAgICAgICAgICAgIGBTb2NrZXRodWIgZGlzY292ZXJ5IGZhaWxlZDogZW5kcG9pbnQgcGF0aCAke0pTT04uc3RyaW5naWZ5KHBhdGgpfSByZXNvbHZlcyB0byAke3VybC5vcmlnaW59LCBub3QgJHtzZXJ2ZXJPcmlnaW59YCxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHVybC5ocmVmO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNvY2tldEZhY3RvcnkoXG4gICAgZXhwbGljaXQ/OiBTb2NrZXRGYWN0b3J5LFxuKTogUHJvbWlzZTxTb2NrZXRGYWN0b3J5PiB7XG4gICAgaWYgKGV4cGxpY2l0KSB7XG4gICAgICAgIHJldHVybiBleHBsaWNpdDtcbiAgICB9XG4gICAgY29uc3QgZ2xvYmFsSW8gPSAoZ2xvYmFsVGhpcyBhcyB7IGlvPzogdW5rbm93biB9KS5pbztcbiAgICBpZiAodHlwZW9mIGdsb2JhbElvID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbElvIGFzIFNvY2tldEZhY3Rvcnk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG1vZCA9IChhd2FpdCBpbXBvcnQoXCJzb2NrZXQuaW8tY2xpZW50XCIpKSBhcyB7XG4gICAgICAgICAgICBpbz86IFNvY2tldEZhY3Rvcnk7XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlb2YgbW9kLmlvID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBtb2QuaW87XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIHRoZSBkZXNjcmlwdGl2ZSBlcnJvciBiZWxvdy5cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlNvY2tldGh1YkNsaWVudC5jb25uZWN0KCkgbmVlZHMgc29ja2V0LmlvLWNsaWVudDogaW5zdGFsbCBpdCwgbG9hZCAvc29ja2V0LmlvLmpzLCBvciBwYXNzIGBpb2AgaW4gdGhlIG9wdGlvbnNcIixcbiAgICApO1xufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IEFjdGl2aXR5U3RyZWFtIH0gZnJvbSBcIkBzb2NrZXRodWIvc2NoZW1hc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZVBsYXRmb3JtSWQgfSBmcm9tIFwiQHNvY2tldGh1Yi9zY2hlbWFzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRNYXBwaW5nIHtcbiAgICBjcmVkZW50aWFsczogTWFwPHN0cmluZywgQWN0aXZpdHlTdHJlYW0+O1xuICAgIGNvbm5lY3Q6IE1hcDxzdHJpbmcsIEFjdGl2aXR5U3RyZWFtPjtcbiAgICBqb2luOiBNYXA8c3RyaW5nLCBBY3Rpdml0eVN0cmVhbT47XG59XG5cbi8qKlxuICogVHJ1ZSBmb3IgdGhlIGB7IGVycm9yIH1gIG9iamVjdCB0aGUgc2VydmVyIGFja3MgYSBmYWlsZWQgam9iIHdpdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Vycm9yUmVzdWx0KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgICAgIFwiZXJyb3JcIiBpbiB2YWx1ZSAmJlxuICAgICAgICBCb29sZWFuKCh2YWx1ZSBhcyB7IGVycm9yPzogdW5rbm93biB9KS5lcnJvcilcbiAgICApO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIGFuIEFjdGl2aXR5U3RyZWFtIHdpdGggYSB2YWxpZCBhY3Rvci5pZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0FjdG9ySWQob2JqOiBBY3Rpdml0eVN0cmVhbSk6IG9iaiBpcyBBY3Rpdml0eVN0cmVhbSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgXCJhY3RvclwiIGluIG9iaiAmJlxuICAgICAgICBvYmouYWN0b3IgIT09IG51bGwgJiZcbiAgICAgICAgdHlwZW9mIG9iai5hY3RvciA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICBcImlkXCIgaW4gb2JqLmFjdG9yICYmXG4gICAgICAgIHR5cGVvZiBvYmouYWN0b3IuaWQgPT09IFwic3RyaW5nXCJcbiAgICApO1xufVxuXG4vKipcbiAqIFRydWUgZm9yIHRoZSBhY3Rpdml0eSB0aGF0IHJlcG9ydHMgb3IgcmVxdWVzdHMgYSBuaWNrIGNoYW5nZTogYW5cbiAqIGB1cGRhdGVgIHdob3NlIG9iamVjdCBpcyBhbiBgYWRkcmVzc2AsIHdpdGggYGFjdG9yYCB0aGUgb2xkIGlkZW50aXR5XG4gKiBhbmQgYHRhcmdldGAgdGhlIG5ldyBvbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FjdG9yUmVuYW1lKGFjdGl2aXR5OiBBY3Rpdml0eVN0cmVhbSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAgIGFjdGl2aXR5Py50eXBlID09PSBcInVwZGF0ZVwiICYmXG4gICAgICAgIGFjdGl2aXR5Lm9iamVjdD8udHlwZSA9PT0gXCJhZGRyZXNzXCIgJiZcbiAgICAgICAgaGFzQWN0b3JJZChhY3Rpdml0eSkgJiZcbiAgICAgICAgdHlwZW9mIGFjdGl2aXR5LnRhcmdldCA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICB0eXBlb2YgYWN0aXZpdHkudGFyZ2V0Py5pZCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICBhY3Rpdml0eS50YXJnZXQuaWQgIT09IGFjdGl2aXR5LmFjdG9yLmlkXG4gICAgKTtcbn1cblxuLyoqXG4gKiBLZXkgZm9yIHRoZSByZXBsYXkgbWFwcy4gU2NvcGVkIGJ5IHBsYXRmb3JtOiB0aGUgc2FtZSB2aXNpYmxlIGFjdG9yIGlkXG4gKiBjYW4gZXhpc3Qgb24gbW9yZSB0aGFuIG9uZSBwbGF0Zm9ybSAoYW4gYGFsaWNlQGV4YW1wbGUub3JnYCB0aGF0IGlzIGJvdGhcbiAqIGFuIElSQyBuaWNrIGFuZCBhbiBYTVBQIEpJRCksIGFuZCBrZXllZCBieSBhY3RvciBhbG9uZSBvbmUgcGxhdGZvcm0nc1xuICogc3RvcmVkIGNyZWRlbnRpYWxzL2Nvbm5lY3Qvam9pbiB3b3VsZCByZXBsYWNlIHRoZSBvdGhlcidzIG9uIHJlY29ubmVjdC5cbiAqL1xuZnVuY3Rpb24gZ2V0S2V5KGNvbnRlbnQ6IEFjdGl2aXR5U3RyZWFtKSB7XG4gICAgY29uc3QgYWN0b3IgPSBjb250ZW50LmFjdG9yPy5pZCB8fCBjb250ZW50LmFjdG9yO1xuICAgIGlmICghYWN0b3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYGFjdG9yIHByb3BlcnR5IG5vdCBwcmVzZW50IGZvciBtZXNzYWdlIHR5cGU6ICR7Y29udGVudD8udHlwZX1gLFxuICAgICAgICApO1xuICAgIH1cbiAgICBjb25zdCB0YXJnZXQgPSBjb250ZW50LnRhcmdldCA/IGNvbnRlbnQudGFyZ2V0LmlkIHx8IGNvbnRlbnQudGFyZ2V0IDogXCJcIjtcbiAgICBjb25zdCBwbGF0Zm9ybSA9IHJlc29sdmVQbGF0Zm9ybUlkKGNvbnRlbnQpID8/IFwiXCI7XG4gICAgcmV0dXJuIGAke3BsYXRmb3JtfToke2FjdG9yfS0ke3RhcmdldH1gO1xufVxuXG4vKipcbiAqIEluLW1lbW9yeSBzdG9yYWdlIGZvciBjbGllbnQgc3RhdGUgdGhhdCBzaG91bGQgYmUgcmVwbGF5ZWQgb24gcmVjb25uZWN0aW9uLlxuICpcbiAqIFNlY3VyaXR5OiBTdG9yZWQgT05MWSBpbiBKYXZhU2NyaXB0IGhlYXAgbWVtb3J5LiBOZXZlciBwZXJzaXN0ZWQgdG8gZGlzayxcbiAqIGxvY2FsU3RvcmFnZSwgb3IgYW55IHBlcm1hbmVudCBzdG9yYWdlLiBDbGVhcmVkIG9uIHBhZ2UgcmVsb2FkLlxuICovXG5leHBvcnQgY2xhc3MgUmVwbGF5U3RvcmUge1xuICAgIHJlYWRvbmx5IGV2ZW50czogRXZlbnRNYXBwaW5nID0ge1xuICAgICAgICBjcmVkZW50aWFsczogbmV3IE1hcCgpLFxuICAgICAgICBjb25uZWN0OiBuZXcgTWFwKCksXG4gICAgICAgIGpvaW46IG5ldyBNYXAoKSxcbiAgICB9O1xuXG4gICAgcmVjb3JkQ3JlZGVudGlhbHMoY29udGVudDogQWN0aXZpdHlTdHJlYW0pOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvbnRlbnQub2JqZWN0ICYmIGNvbnRlbnQub2JqZWN0LnR5cGUgPT09IFwiY3JlZGVudGlhbHNcIikge1xuICAgICAgICAgICAgdGhpcy5ldmVudHMuY3JlZGVudGlhbHMuc2V0KGdldEtleShjb250ZW50KSwgY29udGVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZXMgY29ubmVjdC9qb2luIGNvbW1hbmRzIGFuZCBkcm9wcyB0aGVtIGFnYWluIG9uXG4gICAgICogZGlzY29ubmVjdC9sZWF2ZSwgc28gYSByZWNvbm5lY3QgcmVwbGF5cyBvbmx5IHdoYXQgaXMgc3RpbGwgbGl2ZS5cbiAgICAgKi9cbiAgICByZWNvcmRNZXNzYWdlKGNvbnRlbnQ6IEFjdGl2aXR5U3RyZWFtKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGtleSA9IGdldEtleShjb250ZW50KTtcbiAgICAgICAgaWYgKGNvbnRlbnQudHlwZSA9PT0gXCJqb2luXCIgfHwgY29udGVudC50eXBlID09PSBcImNvbm5lY3RcIikge1xuICAgICAgICAgICAgdGhpcy5ldmVudHNbY29udGVudC50eXBlXS5zZXQoa2V5LCBjb250ZW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChjb250ZW50LnR5cGUgPT09IFwibGVhdmVcIikge1xuICAgICAgICAgICAgdGhpcy5ldmVudHMuam9pbi5kZWxldGUoa2V5KTtcbiAgICAgICAgfSBlbHNlIGlmIChjb250ZW50LnR5cGUgPT09IFwiZGlzY29ubmVjdFwiKSB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50cy5jb25uZWN0LmRlbGV0ZShrZXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmUta2V5cyBldmVyeSBzdG9yZWQgZW50cnkgZm9yIHRoZSByZW5hbWUncyBgYWN0b3JgIG9uIGl0cyBwbGF0Zm9ybSB0b1xuICAgICAqIGl0cyBgdGFyZ2V0YC4gVGhlIGNyZWRlbnRpYWwgb2JqZWN0IGl0c2VsZiBpcyBsZWZ0IGFzIHRoZSBhcHBsaWNhdGlvblxuICAgICAqIHNlbnQgaXQ6IHRoZSBzZXJ2ZXIga2V5cyB0aGUgbGl2ZSBjb25uZWN0aW9uIG9uIGEgZmluZ2VycHJpbnQgb2YgdGhhdFxuICAgICAqIG9iamVjdCwgYW5kIHRoZSB3b3JrZXIgYWNjZXB0cyB0aGUgaGFzaCBpdCB3YXMgYXV0aG9yaXplZCB3aXRoLCBzb1xuICAgICAqIHJlcGxheWluZyB0aGUgb3JpZ2luYWwgb2JqZWN0IHVuZGVyIHRoZSBuZXcgYWN0b3IgaXMgd2hhdCBsYW5kcyBiYWNrXG4gICAgICogb24gdGhlIHJlbmFtZWQgY29ubmVjdGlvbi4gUmV0dXJucyB0aGUgaWRzIG1vdmVkLCBmb3IgbG9nZ2luZy5cbiAgICAgKi9cbiAgICBtb3ZlQWN0b3IocmVuYW1lOiBBY3Rpdml0eVN0cmVhbSk6IEFycmF5PFtzdHJpbmcsIHN0cmluZ10+IHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNJZCA9IHJlbmFtZS5hY3Rvci5pZDtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gcmVuYW1lLnRhcmdldCBhcyBBY3Rpdml0eVN0cmVhbVtcImFjdG9yXCJdO1xuICAgICAgICBjb25zdCBuZXh0SWQgPSB0YXJnZXQuaWQ7XG4gICAgICAgIGNvbnN0IG5leHROYW1lID1cbiAgICAgICAgICAgIHR5cGVvZiB0YXJnZXQubmFtZSA9PT0gXCJzdHJpbmdcIiA/IHRhcmdldC5uYW1lIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBwbGF0Zm9ybSA9IHJlc29sdmVQbGF0Zm9ybUlkKHJlbmFtZSkgPz8gXCJcIjtcbiAgICAgICAgY29uc3QgbW92ZWQ6IEFycmF5PFtzdHJpbmcsIHN0cmluZ10+ID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBtYXAgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmV2ZW50cykpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIFsuLi5tYXBdKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAhaGFzQWN0b3JJZChlbnRyeSkgfHxcbiAgICAgICAgICAgICAgICAgICAgZW50cnkuYWN0b3IuaWQgIT09IHByZXZpb3VzSWQgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc29sdmVQbGF0Zm9ybUlkKGVudHJ5KSA/PyBcIlwiKSAhPT0gcGxhdGZvcm1cbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlbmFtZWQ6IEFjdGl2aXR5U3RyZWFtID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICAgICAgICAgICAgYWN0b3I6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmVudHJ5LmFjdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG5leHRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLihuZXh0TmFtZSA/IHsgbmFtZTogbmV4dE5hbWUgfSA6IHt9KSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG1hcC5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgICAgICBtYXAuc2V0KGdldEtleShyZW5hbWVkKSwgcmVuYW1lZCk7XG4gICAgICAgICAgICAgICAgbW92ZWQucHVzaChbcHJldmlvdXNJZCwgbmV4dElkXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1vdmVkO1xuICAgIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUge1xuICAgIEFjdGl2aXR5U3RyZWFtLFxuICAgIFNlcnZpY2VEZXNjcmlwdG9yLFxuICAgIFNlcnZpY2VFbmRwb2ludHMsXG59IGZyb20gXCJAc29ja2V0aHViL3NjaGVtYXNcIjtcbmltcG9ydCB7XG4gICAgbm9ybWFsaXplQWN0aXZpdHlTdHJlYW0sXG4gICAgdmFsaWRhdGVBY3Rpdml0eVN0cmVhbSxcbiAgICB2YWxpZGF0ZUNyZWRlbnRpYWxzLFxufSBmcm9tIFwiQHNvY2tldGh1Yi9zY2hlbWFzXCI7XG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCJldmVudGVtaXR0ZXIzXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmFnZXJPcHRpb25zLCBTb2NrZXQsIFNvY2tldE9wdGlvbnMgfSBmcm9tIFwic29ja2V0LmlvLWNsaWVudFwiO1xuaW1wb3J0IHtcbiAgICB0eXBlIFBsYXRmb3JtUmVnaXN0cnlFbnRyeSxcbiAgICB0eXBlIFBsYXRmb3JtUmVnaXN0cnlQYXlsb2FkLFxuICAgIHBhcnNlUGxhdGZvcm1SZWdpc3RyeSxcbiAgICByZWdpc3RlclBsYXRmb3JtU2NoZW1hcyxcbn0gZnJvbSBcIi4vY2xpZW50LXJlZ2lzdHJ5XCI7XG5pbXBvcnQge1xuICAgIHR5cGUgRGlzY292ZXJPcHRpb25zLFxuICAgIERpc2NvdmVyeUVycm9yLFxuICAgIGRpc2NvdmVyU29ja2V0aHViLFxuICAgIHJlc29sdmVFbmRwb2ludCxcbiAgICByZXNvbHZlU29ja2V0RmFjdG9yeSxcbiAgICB0eXBlIFNvY2tldEZhY3RvcnksXG59IGZyb20gXCIuL2Rpc2NvdmVyeVwiO1xuaW1wb3J0IHtcbiAgICBoYXNBY3RvcklkLFxuICAgIGlzQWN0b3JSZW5hbWUsXG4gICAgaXNFcnJvclJlc3VsdCxcbiAgICBSZXBsYXlTdG9yZSxcbn0gZnJvbSBcIi4vcmVwbGF5LXN0b3JlXCI7XG5cbmV4cG9ydCB0eXBlIHsgU2VydmljZURlc2NyaXB0b3IsIFNlcnZpY2VFbmRwb2ludHMgfTtcbmV4cG9ydCB0eXBlIHtcbiAgICBQbGF0Zm9ybVJlZ2lzdHJ5RW50cnksXG4gICAgUGxhdGZvcm1SZWdpc3RyeVBheWxvYWQsXG59IGZyb20gXCIuL2NsaWVudC1yZWdpc3RyeVwiO1xuZXhwb3J0IHtcbiAgICB0eXBlIERpc2NvdmVyT3B0aW9ucyxcbiAgICBEaXNjb3ZlcnlFcnJvcixcbiAgICBkaXNjb3ZlclNvY2tldGh1YixcbiAgICByZXNvbHZlRW5kcG9pbnQsXG4gICAgdHlwZSBTb2NrZXRGYWN0b3J5LFxufSBmcm9tIFwiLi9kaXNjb3ZlcnlcIjtcbmV4cG9ydCB0eXBlIHsgRXZlbnRNYXBwaW5nIH0gZnJvbSBcIi4vcmVwbGF5LXN0b3JlXCI7XG5cbnR5cGUgUmVwbGF5RXZlbnRNYXAgPSB7XG4gICAgY3JlZGVudGlhbHM6IEFjdGl2aXR5U3RyZWFtO1xuICAgIG1lc3NhZ2U6IEFjdGl2aXR5U3RyZWFtO1xufTtcblxudHlwZSBJbml0U3RhdGUgPSBcImlkbGVcIiB8IFwiaW5pdGlhbGl6aW5nXCIgfCBcInJlYWR5XCIgfCBcImluaXRfZXJyb3JcIiB8IFwiY2xvc2VkXCI7XG5cbnR5cGUgUmVhZHlSZWFzb24gPSBcImluaXRpYWwtY29ubmVjdFwiIHwgXCJyZWNvbm5lY3RcIiB8IFwic2NoZW1hcy11cGRhdGVcIjtcblxudHlwZSBJbml0RXJyb3JQaGFzZSA9IFwic2NoZW1hcy1yZXF1ZXN0XCIgfCBcInNjaGVtYXMtYXBwbHlcIiB8IFwidGltZW91dFwiO1xuXG5pbnRlcmZhY2UgUGVuZGluZ1JlYWR5V2FpdGVyIHtcbiAgICByZXNvbHZlOiAoaW5mbzogQ2xpZW50UmVhZHlJbmZvKSA9PiB2b2lkO1xuICAgIHJlamVjdDogKGVycjogRXJyb3IpID0+IHZvaWQ7XG4gICAgdGltZXI/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0Pjtcbn1cblxuaW50ZXJmYWNlIFF1ZXVlZE91dGJvdW5kRXZlbnQge1xuICAgIGV2ZW50OiBzdHJpbmc7XG4gICAgY29udGVudDogdW5rbm93bjtcbiAgICBjYWxsYmFjaz86IHVua25vd247XG4gICAgZW5xdWV1ZWRBdDogbnVtYmVyO1xuICAgIHNlcXVlbmNlOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBJbml0aWFsaXphdGlvbkN5Y2xlIHtcbiAgICB0b2tlbjogbnVtYmVyO1xuICAgIHJlYXNvbjogUmVhZHlSZWFzb247XG4gICAgc3RhcnRlZEF0OiBudW1iZXI7XG4gICAgcmVwbGF5T25SZWFkeTogYm9vbGVhbjtcbiAgICB0aW1lZE91dDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTb2NrZXRodWJDbGllbnRPcHRpb25zIHtcbiAgICBpbml0VGltZW91dE1zPzogbnVtYmVyO1xuICAgIG1heFF1ZXVlZE91dGJvdW5kPzogbnVtYmVyO1xuICAgIG1heFF1ZXVlZEFnZU1zPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RPcHRpb25zXG4gICAgZXh0ZW5kcyBTb2NrZXRodWJDbGllbnRPcHRpb25zLFxuICAgICAgICBEaXNjb3Zlck9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFRoZSBgaW8oKWAgZmFjdG9yeSB0byBjcmVhdGUgdGhlIHNvY2tldCB3aXRoLiBEZWZhdWx0cyB0byB0aGUgYGlvYFxuICAgICAqIGdsb2JhbCBzZXQgYnkgYC9zb2NrZXQuaW8uanNgLCB0aGVuIHRvIHRoZSBgc29ja2V0LmlvLWNsaWVudGAgcGFja2FnZVxuICAgICAqIHdoZW4gaXQgY2FuIGJlIGltcG9ydGVkLlxuICAgICAqL1xuICAgIGlvPzogU29ja2V0RmFjdG9yeTtcbiAgICAvKipcbiAgICAgKiBFeHRyYSBTb2NrZXQuSU8gb3B0aW9ucyAoYXV0aCwgdHJhbnNwb3J0cywgLi4uKS4gYHBhdGhgIGlzIGFsd2F5cyB0YWtlblxuICAgICAqIGZyb20gdGhlIGRpc2NvdmVyZWQgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBzb2NrZXRPcHRpb25zPzogUGFydGlhbDxNYW5hZ2VyT3B0aW9ucyAmIFNvY2tldE9wdGlvbnM+O1xufVxuXG5pbnRlcmZhY2UgQ3VzdG9tRW1pdHRlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgX2VtaXQoczogc3RyaW5nLCBvOiB1bmtub3duLCBjPzogdW5rbm93bik6IHZvaWQ7XG4gICAgY29ubmVjdCgpOiB2b2lkO1xuICAgIGRpc2Nvbm5lY3QoKTogdm9pZDtcbiAgICBjb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGllbnRSZWFkeUluZm8ge1xuICAgIHN0YXRlOiBcInJlYWR5XCI7XG4gICAgcmVhc29uOiBSZWFkeVJlYXNvbjtcbiAgICAvLyBHbG9iYWwgU29ja2V0aHViIEFQSSB2ZXJzaW9uICh0aGUgc2VydmVyIHBhY2thZ2UncyBTZW1WZXIgbWFqb3IpLlxuICAgIGFwaVZlcnNpb246IG51bWJlcjtcbiAgICBjb250ZXh0czoge1xuICAgICAgICBhczogc3RyaW5nO1xuICAgICAgICBzb2NrZXRodWI6IHN0cmluZztcbiAgICB9O1xuICAgIHBsYXRmb3JtczogQXJyYXk8e1xuICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICBhcGlWZXJzaW9uOiBudW1iZXI7XG4gICAgICAgIGNvbnRleHRVcmw6IHN0cmluZztcbiAgICAgICAgY29udGV4dFZlcnNpb246IHN0cmluZztcbiAgICAgICAgc2NoZW1hVmVyc2lvbjogc3RyaW5nO1xuICAgICAgICB0eXBlczogQXJyYXk8c3RyaW5nPjtcbiAgICB9Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGllbnRJbml0RXJyb3Ige1xuICAgIGVycm9yOiBzdHJpbmc7XG4gICAgcGhhc2U6IEluaXRFcnJvclBoYXNlO1xuICAgIHJldHJ5aW5nOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFNvY2tldGh1YkNsaWVudCAtIENsaWVudCBsaWJyYXJ5IGZvciBTb2NrZXRodWIgcHJvdG9jb2wgZ2F0ZXdheVxuICpcbiAqIEEgSmF2YVNjcmlwdCBjbGllbnQgZm9yIGNvbm5lY3RpbmcgdG8gU29ja2V0aHViIHNlcnZlcnMuIFByb3ZpZGVzIGEgaGlnaC1sZXZlbFxuICogQVBJIGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgQWN0aXZpdHlTdHJlYW1zIG1lc3NhZ2VzIG92ZXIgU29ja2V0LklPLCB3aXRoXG4gKiBhdXRvbWF0aWMgc3RhdGUgbWFuYWdlbWVudCBhbmQgcmVjb25uZWN0aW9uIGhhbmRsaW5nLlxuICpcbiAqIFNvY2tldGh1YiBhY3RzIGFzIGEgcHJvdG9jb2wgZ2F0ZXdheSwgdHJhbnNsYXRpbmcgQWN0aXZpdHlTdHJlYW1zIG1lc3NhZ2VzIGludG9cbiAqIHZhcmlvdXMgcHJvdG9jb2xzIChYTVBQLCBJUkMsIFJTUywgZXRjLikuIFRoaXMgY2xpZW50IGhhbmRsZXMgdGhlIGNvbW11bmljYXRpb25cbiAqIHdpdGggdGhlIFNvY2tldGh1YiBzZXJ2ZXIsIGluY2x1ZGluZyBjcmVkZW50aWFsIG1hbmFnZW1lbnQsIGNvbm5lY3Rpb24gc3RhdGUsXG4gKiBhbmQgYXV0b21hdGljIHJlY29ubmVjdGlvbi5cbiAqXG4gKiAjIyBBdXRvbWF0aWMgUmVjb25uZWN0aW9uICYgU3RhdGUgUmVwbGF5XG4gKlxuICogVGhpcyBjbGllbnQgYXV0b21hdGljYWxseSBoYW5kbGVzIHRyYW5zaWVudCBuZXR3b3JrIGRpc2Nvbm5lY3Rpb25zIGJ5IHN0b3JpbmdcbiAqIGNvbm5lY3Rpb24gc3RhdGUgaW4gbWVtb3J5IGFuZCByZXBsYXlpbmcgaXQgd2hlbiB0aGUgc29ja2V0IHJlY29ubmVjdHMuXG4gKlxuICogIyMjIFNlY3VyaXR5IE1vZGVsXG4gKlxuICogKipTdG9yYWdlIExvY2F0aW9uOioqXG4gKiAtIEFsbCBjcmVkZW50aWFscyBhbmQgc3RhdGUgYXJlIHN0b3JlZCBPTkxZIGluIEphdmFTY3JpcHQgbWVtb3J5IChoZWFwKVxuICogLSBOb3RoaW5nIGlzIHBlcnNpc3RlZCB0byBsb2NhbFN0b3JhZ2UsIHNlc3Npb25TdG9yYWdlLCBjb29raWVzLCBvciBkaXNrXG4gKiAtIE1lbW9yeSBpcyBjbGVhcmVkIHdoZW4gdGhlIGJyb3dzZXIgdGFiIGNsb3NlcyBvciBwYWdlIHJlZnJlc2hlc1xuICpcbiAqICoqUmVwbGF5IFRyaWdnZXJzOioqXG4gKiAtIEF1dG9tYXRpYyByZXBsYXkgb2NjdXJzIG9uIFNvY2tldC5JTyByZWNvbm5lY3Rpb24gZXZlbnRzXG4gKiAtIFR5cGljYWxseSB0cmlnZ2VyZWQgYnkgYnJpZWYgbmV0d29yayBpbnRlcnJ1cHRpb25zIChXaUZpIHN3aXRjaGluZywgbW9iaWxlIG5ldHdvcmsgYmxpcHMpXG4gKiAtIERvZXMgTk9UIG9jY3VyIG9uIHBhZ2UgcmVmcmVzaCAobmV3IFNvY2tldGh1YkNsaWVudCBpbnN0YW5jZSA9IGVtcHR5IHN0YXRlKVxuICpcbiAqICoqU2VydmVyIFJlc3RhcnQgQmVoYXZpb3I6KipcbiAqIC0gSWYgc2VydmVyIHJlc3RhcnRzLCBjbGllbnQgc29ja2V0IHdpbGwgcmVjb25uZWN0IGFuZCByZXBsYXkgY3JlZGVudGlhbHNcbiAqIC0gU2VydmVyIG11c3QgaGFuZGxlIHJlcGxheWVkIGNyZWRlbnRpYWxzIGFwcHJvcHJpYXRlbHkgKHZhbGlkYXRlLCByZWplY3Qgc3RhbGUgc2Vzc2lvbnMsIGV0Yy4pXG4gKiAtIEFwcGxpY2F0aW9ucyBzaG91bGQgaW1wbGVtZW50IHByb3BlciBzZXNzaW9uIHZhbGlkYXRpb24gc2VydmVyLXNpZGVcbiAqXG4gKiAqKkxpZmV0aW1lOioqXG4gKiAtIENyZWRlbnRpYWxzIGV4aXN0IG9ubHkgZHVyaW5nIHRoZSBicm93c2VyIHRhYidzIGxpZmV0aW1lXG4gKiAtIENsZWFyZWQgb24gcGFnZSByZWxvYWQsIHRhYiBjbG9zZSwgb3IgbWFudWFsIGRpc2Nvbm5lY3RcbiAqIC0gTm90IGFjY2Vzc2libGUgYWNyb3NzIHRhYnMgb3IgYWZ0ZXIgYnJvd3NlciByZXN0YXJ0XG4gKlxuICogKipXaGF0IEdldHMgUmVwbGF5ZWQ6KipcbiAqIC0gQ3JlZGVudGlhbHMgKHVzZXJuYW1lL3Bhc3N3b3JkL3Rva2VucyBzZW50IHZpYSBjcmVkZW50aWFscyBldmVudClcbiAqIC0gQWN0aXZpdHkgT2JqZWN0cyAoYWN0b3IgZGVmaW5pdGlvbnMpXG4gKiAtIENvbm5lY3QgY29tbWFuZHMgKHBsYXRmb3JtIGNvbm5lY3Rpb25zKVxuICogLSBKb2luIGNvbW1hbmRzIChyb29tL2NoYW5uZWwgam9pbnMpXG4gKlxuICogV2hlbiBvbmUgb2YgdGhpcyBjbGllbnQncyBhY3RvcnMgaXMgcmVuYW1lZCAoYW4gYHVwZGF0ZWAgd2l0aFxuICogYG9iamVjdC50eXBlOiBcImFkZHJlc3NcImAsIGUuZy4gYW4gSVJDIG5pY2sgY2hhbmdlLCB3aGV0aGVyIHRoaXMgY2xpZW50XG4gKiByZXF1ZXN0ZWQgaXQgYW5kIHRoZSBzZXJ2ZXIgYWNrbm93bGVkZ2VkIGl0LCBvciB0aGUgc2VydmVyIHJlcG9ydGVkIGl0KSxcbiAqIHRoZSBzdG9yZWQgZW50cmllcyBtb3ZlIHRvIHRoZSBuZXcgYWN0b3Igc28gYSByZWNvbm5lY3QgcmVwbGF5cyB0aGUgY3VycmVudFxuICogaWRlbnRpdHkgcmF0aGVyIHRoYW4gdGhlIG9sZCBvbmUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIERpc2NvdmVyIHRoZSBTb2NrZXQuSU8gZW5kcG9pbnQgZnJvbSB0aGUgc2VydmVyJ3MgYmFzZSBVUkwgYW5kIGNvbm5lY3RcbiAqIGNvbnN0IGNsaWVudCA9IGF3YWl0IFNvY2tldGh1YkNsaWVudC5jb25uZWN0KCdodHRwOi8vbG9jYWxob3N0OjEwNTUwJyk7XG4gKlxuICogLy8gT3Igd3JhcCBhIHNvY2tldCB5b3UgY3JlYXRlZCB5b3Vyc2VsZlxuICogY29uc3QgY2xpZW50ID0gbmV3IFNvY2tldGh1YkNsaWVudChpbygnaHR0cDovL2xvY2FsaG9zdDoxMDU1MCcsIHsgcGF0aDogJy9zb2NrZXRodWInIH0pKTtcbiAqXG4gKiAvLyBXYWl0IGZvciBzY2hlbWEgcmVnaXN0cnkgYmVmb3JlIHNlbmRpbmcgbWVzc2FnZXNcbiAqIGF3YWl0IGNsaWVudC5yZWFkeSgpO1xuICpcbiAqIC8vIEJ1aWxkIGNhbm9uaWNhbCBAY29udGV4dCBmb3IgYSBwbGF0Zm9ybVxuICogY29uc3QgY3R4ID0gY2xpZW50LmNvbnRleHRGb3IoJ2lyYycpO1xuICpcbiAqIC8vIFNlbmQgY3JlZGVudGlhbHMgLSB0aGVzZSB3aWxsIGJlIHJlcGxheWVkIG9uIHJlY29ubmVjdGlvblxuICogY2xpZW50LnNvY2tldC5lbWl0KCdjcmVkZW50aWFscycsIHtcbiAqICAgJ0Bjb250ZXh0JzogY3R4LFxuICogICB0eXBlOiAnY3JlZGVudGlhbHMnLFxuICogICBhY3RvcjogeyBpZDogJ3VzZXJAZXhhbXBsZS5jb20nLCB0eXBlOiAncGVyc29uJyB9LFxuICogICBvYmplY3Q6IHsgdHlwZTogJ2NyZWRlbnRpYWxzJywgdXNlcm5hbWU6ICd1c2VyJywgcGFzc3dvcmQ6ICdwYXNzJyB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTb2NrZXRodWJDbGllbnQge1xuICAgIHByaXZhdGUgcmVwbGF5U3RvcmUgPSBuZXcgUmVwbGF5U3RvcmUoKTtcbiAgICBwcml2YXRlIF9zb2NrZXQ6IFNvY2tldDtcbiAgICBwdWJsaWMgc29ja2V0ITogQ3VzdG9tRW1pdHRlcjtcbiAgICBwdWJsaWMgZGVidWcgPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIFRoZSBzZXJ2aWNlIGRlc2NyaXB0b3IgZmV0Y2hlZCBieSBgU29ja2V0aHViQ2xpZW50LmNvbm5lY3QoKWA6IEFQSVxuICAgICAqIHZlcnNpb25zLCBlbmFibGVkIHBsYXRmb3JtcywgYW5kIHRoZSBhZHZlcnRpc2VkIGVuZHBvaW50cyAoaW5jbHVkaW5nXG4gICAgICogYGVuZHBvaW50cy5odHRwQWN0aW9uc2Agd2hlbiB0aGF0IHRyYW5zcG9ydCBpcyBvbikuIFVuZGVmaW5lZCBmb3JcbiAgICAgKiBjbGllbnRzIGJ1aWx0IGZyb20gYSByZWFkeS1tYWRlIHNvY2tldC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRvcj86IFNlcnZpY2VEZXNjcmlwdG9yO1xuICAgIC8qKlxuICAgICAqIFRoZSBvcmlnaW4gdGhlIGRlc2NyaXB0b3Igd2FzIGRpc2NvdmVyZWQgZnJvbSBhbmQgdGhlIHNvY2tldCBjb25uZWN0c1xuICAgICAqIHRvLiBgZW5kcG9pbnRVcmwoKWAgcmVzb2x2ZXMgdGhlIGRlc2NyaXB0b3IncyBlbmRwb2ludCBwYXRocyBhZ2FpbnN0IGl0LlxuICAgICAqIFVuZGVmaW5lZCBmb3IgY2xpZW50cyBidWlsdCBmcm9tIGEgcmVhZHktbWFkZSBzb2NrZXQuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHNlcnZlck9yaWdpbj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEFic29sdXRlIFVSTCBvZiBhbiBhZHZlcnRpc2VkIGVuZHBvaW50LCByZXNvbHZlZCBhZ2FpbnN0XG4gICAgICogYHNlcnZlck9yaWdpbmAsIG9yIHVuZGVmaW5lZCB3aGVuIHRoZSBzZXJ2ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIGl0IChmb3JcbiAgICAgKiBleGFtcGxlIGBodHRwQWN0aW9uc2Agd2hpbGUgSFRUUCBhY3Rpb25zIGFyZSBkaXNhYmxlZCkgb3Igd2hlbiB0aGlzXG4gICAgICogY2xpZW50IHdhcyBub3QgY3JlYXRlZCBieSBgY29ubmVjdCgpYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IHVybCA9IHNjLmVuZHBvaW50VXJsKCdodHRwQWN0aW9ucycpO1xuICAgICAqIGlmICh1cmwpIHtcbiAgICAgKiAgIGF3YWl0IGZldGNoKHVybCwgeyBtZXRob2Q6ICdQT1NUJywgYm9keSB9KTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGVuZHBvaW50VXJsKG5hbWU6IGtleW9mIFNlcnZpY2VFbmRwb2ludHMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5kZXNjcmlwdG9yPy5lbmRwb2ludHM/LltuYW1lXTtcbiAgICAgICAgaWYgKCF0aGlzLnNlcnZlck9yaWdpbiB8fCAhcGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzb2x2ZUVuZHBvaW50KHRoaXMuc2VydmVyT3JpZ2luLCBwYXRoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBSZXF1aXJlZDxTb2NrZXRodWJDbGllbnRPcHRpb25zPjtcbiAgICBwcml2YXRlIHBsYXRmb3JtUmVnaXN0cnkgPSBuZXcgTWFwPHN0cmluZywgUGxhdGZvcm1SZWdpc3RyeUVudHJ5PigpO1xuICAgIHByaXZhdGUgYXNDb250ZXh0VXJsPzogc3RyaW5nO1xuICAgIHByaXZhdGUgc29ja2V0aHViQ29udGV4dFVybD86IHN0cmluZztcbiAgICBwcml2YXRlIGFwaVZlcnNpb24/OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBpbml0U3RhdGU6IEluaXRTdGF0ZSA9IFwiaWRsZVwiO1xuICAgIHByaXZhdGUgaGFzUmVhZHlPbmNlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpbml0Q3ljbGU/OiBJbml0aWFsaXphdGlvbkN5Y2xlO1xuICAgIHByaXZhdGUgaW5pdFRva2VuQ291bnRlciA9IDA7XG4gICAgcHJpdmF0ZSBpbml0VGltZW91dFRpbWVyPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gICAgcHJpdmF0ZSB3YWl0aW5nV2FybmluZ1RpbWVyPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+O1xuICAgIHByaXZhdGUgd2FpdGluZ1dhcm5pbmdJbnRlcnZhbE1zID0gMTAwMDA7XG4gICAgcHJpdmF0ZSByZWFkeVdhaXRlcnM6IEFycmF5PFBlbmRpbmdSZWFkeVdhaXRlcj4gPSBbXTtcbiAgICBwcml2YXRlIG91dGJvdW5kUXVldWU6IEFycmF5PFF1ZXVlZE91dGJvdW5kRXZlbnQ+ID0gW107XG4gICAgcHJpdmF0ZSBvdXRib3VuZFNlcXVlbmNlID0gMDtcbiAgICBwcml2YXRlIHJlZ2lzdHJ5RmluZ2VycHJpbnQ/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBsYXRlc3RSZWFkeUluZm8/OiBDbGllbnRSZWFkeUluZm87XG5cbiAgICAvKipcbiAgICAgKiBEaXNjb3ZlciBhIHNlcnZlcidzIGVuZHBvaW50cyBmcm9tIGl0cyBiYXNlIFVSTCBhbmQgY29ubmVjdCB0byBpdC5cbiAgICAgKlxuICAgICAqIEZldGNoZXMgdGhlIGJhc2UgVVJMIHdpdGggYEFjY2VwdDogYXBwbGljYXRpb24vanNvbmAsIHZhbGlkYXRlcyB0aGVcbiAgICAgKiBzZXJ2aWNlIGRlc2NyaXB0b3IsIGFuZCBvcGVucyBhIFNvY2tldC5JTyBjb25uZWN0aW9uIHRvIHRoZSBiYXNlIFVSTCdzXG4gICAgICogb3JpZ2luIHdpdGggdGhlIGFkdmVydGlzZWQgcGF0aC4gVGhlIGRlc2NyaXB0b3IgaXMgZXhwb3NlZCBhc1xuICAgICAqIGBjbGllbnQuZGVzY3JpcHRvcmAgYW5kIHRoZSBvcmlnaW4gYXMgYGNsaWVudC5zZXJ2ZXJPcmlnaW5gLiBSZWplY3RzXG4gICAgICogd2l0aCBhIGBEaXNjb3ZlcnlFcnJvcmAgd2hlbiB0aGUgc2VydmVyIGlzIHVucmVhY2hhYmxlLCBkb2VzIG5vdCBhbnN3ZXJcbiAgICAgKiB3aXRoIEpTT04sIG9yIGRvZXMgbm90IGFkdmVydGlzZSBhIFNvY2tldC5JTyBlbmRwb2ludC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IHNjID0gYXdhaXQgU29ja2V0aHViQ2xpZW50LmNvbm5lY3QoJ2h0dHBzOi8vc2guZXhhbXBsZS5vcmcnLCB7XG4gICAgICogICBpbml0VGltZW91dE1zOiA1MDAwLFxuICAgICAqIH0pO1xuICAgICAqIGF3YWl0IHNjLnJlYWR5KCk7XG4gICAgICogY29uc29sZS5sb2coc2MuZW5kcG9pbnRVcmwoJ2h0dHBBY3Rpb25zJykpOyAvLyBhYnNvbHV0ZSBVUkwsIG9yIHVuZGVmaW5lZFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgY29ubmVjdChcbiAgICAgICAgYmFzZVVybDogc3RyaW5nLFxuICAgICAgICBvcHRpb25zOiBDb25uZWN0T3B0aW9ucyA9IHt9LFxuICAgICk6IFByb21pc2U8U29ja2V0aHViQ2xpZW50PiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGlvLFxuICAgICAgICAgICAgc29ja2V0T3B0aW9ucyxcbiAgICAgICAgICAgIGZldGNoLFxuICAgICAgICAgICAgZGlzY292ZXJ5VGltZW91dE1zLFxuICAgICAgICAgICAgLi4uY2xpZW50T3B0aW9uc1xuICAgICAgICB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IGF3YWl0IGRpc2NvdmVyU29ja2V0aHViKGJhc2VVcmwsIHtcbiAgICAgICAgICAgIGZldGNoLFxuICAgICAgICAgICAgZGlzY292ZXJ5VGltZW91dE1zLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc29ja2V0UGF0aCA9IGRlc2NyaXB0b3IuZW5kcG9pbnRzPy5zb2NrZXRJTztcbiAgICAgICAgaWYgKCFzb2NrZXRQYXRoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRGlzY292ZXJ5RXJyb3IoXG4gICAgICAgICAgICAgICAgYFNvY2tldGh1YiBkaXNjb3ZlcnkgZmFpbGVkOiAke2Jhc2VVcmx9IGRvZXMgbm90IGFkdmVydGlzZSBhIFNvY2tldC5JTyBlbmRwb2ludCAob2xkZXIgc2VydmVyPyk7IHBhc3MgYSBzb2NrZXQgdG8gdGhlIGNvbnN0cnVjdG9yIGluc3RlYWRgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgc29ja2V0IGdvZXMgdG8gdGhlIG9yaWdpbiB0aGF0IGFuc3dlcmVkIGRpc2NvdmVyeTsgdGhlXG4gICAgICAgIC8vIGRlc2NyaXB0b3Igb25seSBzYXlzIHdoaWNoIHBhdGggU29ja2V0LklPIGlzIG1vdW50ZWQgb24gdGhlcmUuXG4gICAgICAgIGNvbnN0IHNlcnZlck9yaWdpbiA9IG5ldyBVUkwoYmFzZVVybCkub3JpZ2luO1xuICAgICAgICBjb25zdCBjcmVhdGVTb2NrZXQgPSBhd2FpdCByZXNvbHZlU29ja2V0RmFjdG9yeShpbyk7XG4gICAgICAgIGNvbnN0IHNvY2tldCA9IGNyZWF0ZVNvY2tldChzZXJ2ZXJPcmlnaW4sIHtcbiAgICAgICAgICAgIC4uLnNvY2tldE9wdGlvbnMsXG4gICAgICAgICAgICBwYXRoOiBzb2NrZXRQYXRoLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBTb2NrZXRodWJDbGllbnQoc29ja2V0LCBjbGllbnRPcHRpb25zLCB7XG4gICAgICAgICAgICBkZXNjcmlwdG9yLFxuICAgICAgICAgICAgc2VydmVyT3JpZ2luLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgc29ja2V0OiBTb2NrZXQsXG4gICAgICAgIG9wdGlvbnM6IFNvY2tldGh1YkNsaWVudE9wdGlvbnMgPSB7fSxcbiAgICAgICAgZGlzY292ZXJlZD86IHsgZGVzY3JpcHRvcjogU2VydmljZURlc2NyaXB0b3I7IHNlcnZlck9yaWdpbjogc3RyaW5nIH0sXG4gICAgKSB7XG4gICAgICAgIGlmICghc29ja2V0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTb2NrZXRodWJDbGllbnQgcmVxdWlyZXMgYSBzb2NrZXQuaW8gaW5zdGFuY2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc29ja2V0ID0gc29ja2V0O1xuICAgICAgICB0aGlzLmRlc2NyaXB0b3IgPSBkaXNjb3ZlcmVkPy5kZXNjcmlwdG9yO1xuICAgICAgICB0aGlzLnNlcnZlck9yaWdpbiA9IGRpc2NvdmVyZWQ/LnNlcnZlck9yaWdpbjtcbiAgICAgICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgICAgICAgaW5pdFRpbWVvdXRNczogb3B0aW9ucy5pbml0VGltZW91dE1zID8/IDUwMDAsXG4gICAgICAgICAgICBtYXhRdWV1ZWRPdXRib3VuZDogb3B0aW9ucy5tYXhRdWV1ZWRPdXRib3VuZCA/PyAxMDAwLFxuICAgICAgICAgICAgbWF4UXVldWVkQWdlTXM6IG9wdGlvbnMubWF4UXVldWVkQWdlTXMgPz8gMzAwMDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zb2NrZXQgPSB0aGlzLmNyZWF0ZVB1YmxpY0VtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclNvY2tldElPSGFuZGxlcnMoKTtcblxuICAgICAgICBpZiAodGhpcy5fc29ja2V0LmNvbm5lY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuY29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICh0aGlzLnNvY2tldCBhcyB1bmtub3duIGFzIHsgaWQ/OiBzdHJpbmcgfSkuaWQgPSB0aGlzLl9zb2NrZXQuaWQ7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5fZW1pdChcImNvbm5lY3RcIik7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0SW5pdGlhbGl6YXRpb24oXCJpbml0aWFsLWNvbm5lY3RcIiwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciBzdG9yZWQgY3JlZGVudGlhbHMgdG8gcHJldmVudCBhdXRvbWF0aWMgcmVwbGF5IG9uIHJlY29ubmVjdGlvbi5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYWxsIHN0b3JlZCBjcmVkZW50aWFscyBmcm9tIG1lbW9yeS4gVXNlZnVsIGZvclxuICAgICAqIHNlY3VyaXR5LXNlbnNpdGl2ZSBhcHBsaWNhdGlvbnMgdGhhdCB3YW50IHRvIHByZXZlbnQgYXV0b21hdGljIGNyZWRlbnRpYWxcbiAgICAgKiByZXBsYXkgd2hlbiB0aGUgc29ja2V0IHJlY29ubmVjdHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBDbGVhciBjcmVkZW50aWFscyBvbiBkaXNjb25uZWN0XG4gICAgICogc2Muc29ja2V0Lm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAqICAgc2MuY2xlYXJDcmVkZW50aWFscygpO1xuICAgICAqIH0pO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhckNyZWRlbnRpYWxzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlcGxheVN0b3JlLmV2ZW50cy5jcmVkZW50aWFscy5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgcGxhdGZvcm0gcmVnaXN0cnkgZGlzY292ZXJlZCBmcm9tIHRoZSBzZXJ2ZXIuXG4gICAgICovXG4gICAgcHVibGljIGdldFJlZ2lzdGVyZWRQbGF0Zm9ybXMoKTogQXJyYXk8UGxhdGZvcm1SZWdpc3RyeUVudHJ5PiB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucGxhdGZvcm1SZWdpc3RyeS52YWx1ZXMoKSkubWFwKChwbGF0Zm9ybSkgPT4gKHtcbiAgICAgICAgICAgIC4uLnBsYXRmb3JtLFxuICAgICAgICAgICAgdHlwZXM6IFsuLi5wbGF0Zm9ybS50eXBlc10sXG4gICAgICAgICAgICBzY2hlbWFzOiB7IC4uLnBsYXRmb3JtLnNjaGVtYXMgfSxcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHNlcnZlci1wcm92aWRlZCBzY2hlbWEvY29udGV4dCByZWdpc3RyeSBkYXRhIGlzIGxvYWRlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNTY2hlbWFzUmVhZHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzUmVhZHkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY2xpZW50IGhhcyBjb21wbGV0ZWQgc2NoZW1hIGluaXRpYWxpemF0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBpc1JlYWR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbml0U3RhdGUgPT09IFwicmVhZHlcIjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGNsaWVudCBpbml0aWFsaXphdGlvbiBzdGF0ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SW5pdFN0YXRlKCk6IEluaXRTdGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluaXRTdGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGNhbm9uaWNhbCBiYXNlIGNvbnRleHRzIGxlYXJuZWQgZnJvbSB0aGUgc2VydmVyIHJlZ2lzdHJ5LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRSZWdpc3RlcmVkQmFzZUNvbnRleHRzKCk6IHsgYXM6IHN0cmluZzsgc29ja2V0aHViOiBzdHJpbmcgfSB7XG4gICAgICAgIGlmICghdGhpcy5hc0NvbnRleHRVcmwgfHwgIXRoaXMuc29ja2V0aHViQ29udGV4dFVybCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiU2NoZW1hIHJlZ2lzdHJ5IG5vdCBsb2FkZWQgeWV0LiBXYWl0IGZvciBjbGllbnQgcmVhZHkgc3RhdGUgYWZ0ZXIgY29ubmVjdC5cIixcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFzOiB0aGlzLmFzQ29udGV4dFVybCxcbiAgICAgICAgICAgIHNvY2tldGh1YjogdGhpcy5zb2NrZXRodWJDb250ZXh0VXJsLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQbGF0Zm9ybVNjaGVtYShcbiAgICAgICAgcGxhdGZvcm06IHN0cmluZyxcbiAgICAgICAgc2NoZW1hVHlwZTogXCJtZXNzYWdlc1wiIHwgXCJjcmVkZW50aWFsc1wiID0gXCJtZXNzYWdlc1wiLFxuICAgICk6IG9iamVjdCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQbGF0Zm9ybSA9IHBsYXRmb3JtPy50cmltKCk7XG4gICAgICAgIGlmICghbm9ybWFsaXplZFBsYXRmb3JtKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXRmb3JtUmVnaXN0cnkuZ2V0KG5vcm1hbGl6ZWRQbGF0Zm9ybSk/LnNjaGVtYXM/LltcbiAgICAgICAgICAgIHNjaGVtYVR5cGVcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXYWl0IGZvciBzY2hlbWEgcmVnaXN0cnkgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgYW5kIHJldHVybiB0aGUgbm9ybWFsaXplZCBwYXlsb2FkLlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSByZWFkeSh0aW1lb3V0TXM/KSBpbnN0ZWFkLlxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyB3YWl0Rm9yU2NoZW1hcyhcbiAgICAgICAgdGltZW91dE1zID0gMjAwMCxcbiAgICApOiBQcm9taXNlPFBsYXRmb3JtUmVnaXN0cnlQYXlsb2FkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVhZHkodGltZW91dE1zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRQbGF0Zm9ybVJlZ2lzdHJ5UGF5bG9hZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdhaXQgdW50aWwgdGhlIGNsaWVudCByZWFjaGVzIGEgcmVhZHkgc3RhdGUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWR5KFxuICAgICAgICB0aW1lb3V0TXMgPSB0aGlzLm9wdGlvbnMuaW5pdFRpbWVvdXRNcyxcbiAgICApOiBQcm9taXNlPENsaWVudFJlYWR5SW5mbz4ge1xuICAgICAgICBpZiAodGhpcy5pc1JlYWR5KCkgJiYgdGhpcy5sYXRlc3RSZWFkeUluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5sYXRlc3RSZWFkeUluZm8pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3YWl0ZXI6IFBlbmRpbmdSZWFkeVdhaXRlciA9IHsgcmVzb2x2ZSwgcmVqZWN0IH07XG4gICAgICAgICAgICBpZiAodGltZW91dE1zID4gMCkge1xuICAgICAgICAgICAgICAgIHdhaXRlci50aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWR5V2FpdGVycyA9IHRoaXMucmVhZHlXYWl0ZXJzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIChlbnRyeSkgPT4gZW50cnkgIT09IHdhaXRlcixcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBTb2NrZXRodWJDbGllbnQgcmVhZHkoKSB0aW1lZCBvdXQgYWZ0ZXIgJHt0aW1lb3V0TXN9bXNgLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9LCB0aW1lb3V0TXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZWFkeVdhaXRlcnMucHVzaCh3YWl0ZXIpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc29ja2V0LmNvbm5lY3RlZCAmJiB0aGlzLmluaXRTdGF0ZSA9PT0gXCJpZGxlXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0SW5pdGlhbGl6YXRpb24oXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzUmVhZHlPbmNlID8gXCJyZWNvbm5lY3RcIiA6IFwiaW5pdGlhbC1jb25uZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmFsaWRhdGUgYW4gYWN0aXZpdHkgc3RyZWFtIGFnYWluc3QgY3VycmVudGx5IHJlZ2lzdGVyZWQgcGxhdGZvcm0gc2NoZW1hcy5cbiAgICAgKiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyB3aGVuIHZhbGlkLlxuICAgICAqL1xuICAgIHB1YmxpYyB2YWxpZGF0ZUFjdGl2aXR5KGFjdGl2aXR5OiBBY3Rpdml0eVN0cmVhbSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChhY3Rpdml0eS50eXBlID09PSBcImNyZWRlbnRpYWxzXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZUNyZWRlbnRpYWxzKGFjdGl2aXR5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsaWRhdGVBY3Rpdml0eVN0cmVhbShhY3Rpdml0eSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGQgY2Fub25pY2FsIFNvY2tldGh1YiBjb250ZXh0cyBmb3IgYSBwbGF0Zm9ybSB1c2luZyBzZXJ2ZXItcHJvdmlkZWQgc2NoZW1hIG1ldGFkYXRhLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb250ZXh0Rm9yKHBsYXRmb3JtOiBzdHJpbmcpOiBBY3Rpdml0eVN0cmVhbVtcIkBjb250ZXh0XCJdIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwbGF0Zm9ybSAhPT0gXCJzdHJpbmdcIiB8fCBwbGF0Zm9ybS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJTb2NrZXRodWJDbGllbnQuY29udGV4dEZvcihwbGF0Zm9ybSkgcmVxdWlyZXMgYSBub24tZW1wdHkgcGxhdGZvcm0gc3RyaW5nXCIsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmFzQ29udGV4dFVybCB8fCAhdGhpcy5zb2NrZXRodWJDb250ZXh0VXJsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJTY2hlbWEgcmVnaXN0cnkgbm90IGxvYWRlZCB5ZXQuIFdhaXQgZm9yIGNsaWVudCByZWFkeSBzdGF0ZSBhZnRlciBjb25uZWN0LlwiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQbGF0Zm9ybSA9IHBsYXRmb3JtLnRyaW0oKTtcbiAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLnBsYXRmb3JtUmVnaXN0cnkuZ2V0KG5vcm1hbGl6ZWRQbGF0Zm9ybSk7XG4gICAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWVzID0gQXJyYXkuZnJvbSh0aGlzLnBsYXRmb3JtUmVnaXN0cnkua2V5cygpKS5zb3J0KCk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYHVua25vd24gcGxhdGZvcm0gJyR7bm9ybWFsaXplZFBsYXRmb3JtfScuIFJlZ2lzdGVyZWQgcGxhdGZvcm1zOiAke25hbWVzLmpvaW4oXCIsIFwiKX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3RoaXMuYXNDb250ZXh0VXJsLCB0aGlzLnNvY2tldGh1YkNvbnRleHRVcmwsIGVudHJ5LmNvbnRleHRVcmxdO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlUHVibGljRW1pdHRlcigpOiBDdXN0b21FbWl0dGVyIHtcbiAgICAgICAgY29uc3Qgc29ja2V0ID0gbmV3IEV2ZW50RW1pdHRlcigpIGFzIEN1c3RvbUVtaXR0ZXI7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBzb2NrZXQuX2VtaXQgPSBzb2NrZXQuZW1pdDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHNvY2tldC5lbWl0ID0gKGV2ZW50LCBjb250ZW50LCBjYWxsYmFjayk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQdWJsaWNFbWl0KGV2ZW50IGFzIHN0cmluZywgY29udGVudCwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgICBzb2NrZXQuY29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgIHNvY2tldC5kaXNjb25uZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc29ja2V0LmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgfTtcbiAgICAgICAgc29ja2V0LmNvbm5lY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zb2NrZXQuY29ubmVjdCgpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gc29ja2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFzayBzZXJ2ZXIgZm9yIHRoZSBsYXRlc3QgcGxhdGZvcm0vY29udGV4dCByZWdpc3RyeSB2aWEgYWNrIGNhbGxiYWNrLlxuICAgICAqIFRoaXMga2VlcHMgY2xpZW50IGNvbnRleHQgY29tcG9zaXRpb24gYWxpZ25lZCB3aXRoIHNlcnZlciBzY2hlbWEgc3RhdGUuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZXF1ZXN0U2NoZW1hUmVnaXN0cnkoKSB7XG4gICAgICAgIGNvbnN0IHNvY2tldExpa2UgPSB0aGlzLl9zb2NrZXQgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgaWYgKCEoXCJpb1wiIGluIHNvY2tldExpa2UpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gRWNobyB0aGUgZmluZ2VycHJpbnQgd2UgbGFzdCBhcHBsaWVkIHNvIHRoZSBzZXJ2ZXIgY2FuIHNob3J0LWNpcmN1aXRcbiAgICAgICAgLy8gd2l0aCBhbiBcInVuY2hhbmdlZFwiIHJlcGx5IG9uIHJlY29ubmVjdC9yZS1yZXF1ZXN0ICgjMTExNykuXG4gICAgICAgIHRoaXMuX3NvY2tldC5lbWl0KFxuICAgICAgICAgICAgXCJzY2hlbWFzXCIsXG4gICAgICAgICAgICB0aGlzLnJlZ2lzdHJ5RmluZ2VycHJpbnQsXG4gICAgICAgICAgICAocGF5bG9hZDogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU2NoZW1hc1BheWxvYWQocGF5bG9hZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFwcGx5IHNlcnZlci1wcm92aWRlZCByZWdpc3RyeSBtZXRhZGF0YSB0byBsb2NhbCBydW50aW1lIHN0YXRlLlxuICAgICAqIEFsc28gcmVnaXN0ZXJzIHBsYXRmb3JtIGNvbnRleHRzL3NjaGVtYXMgd2l0aCBAc29ja2V0aHViL3NjaGVtYXMgdmFsaWRhdG9yc1xuICAgICAqIHNvIGxvY2FsIHZhbGlkYXRpb24gdXNlcyB0aGUgc2FtZSBjYW5vbmljYWwgc291cmNlcyBhcyB0aGUgc2VydmVyLlxuICAgICAqL1xuICAgIHByaXZhdGUgYXBwbHlQbGF0Zm9ybVJlZ2lzdHJ5KFxuICAgICAgICBwYXlsb2FkOiB1bmtub3duLFxuICAgICk6IFBsYXRmb3JtUmVnaXN0cnlQYXlsb2FkIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VQbGF0Zm9ybVJlZ2lzdHJ5KHBheWxvYWQpO1xuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwaVZlcnNpb24gPSBwYXJzZWQuYXBpVmVyc2lvbjtcbiAgICAgICAgdGhpcy5hc0NvbnRleHRVcmwgPSBwYXJzZWQuYXNDb250ZXh0VXJsO1xuICAgICAgICB0aGlzLnNvY2tldGh1YkNvbnRleHRVcmwgPSBwYXJzZWQuc29ja2V0aHViQ29udGV4dFVybDtcbiAgICAgICAgdGhpcy5wbGF0Zm9ybVJlZ2lzdHJ5ID0gcGFyc2VkLnBsYXRmb3JtcztcbiAgICAgICAgZm9yIChjb25zdCBwbGF0Zm9ybSBvZiBwYXJzZWQucGxhdGZvcm1zLnZhbHVlcygpKSB7XG4gICAgICAgICAgICByZWdpc3RlclBsYXRmb3JtU2NoZW1hcyhwbGF0Zm9ybSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBheWxvYWQgPSB0aGlzLmJ1aWxkUGxhdGZvcm1SZWdpc3RyeVBheWxvYWQoKTtcbiAgICAgICAgLy8gRGVkdXAgb25seSBvbiB0aGUgc2VydmVyJ3MgZmluZ2VycHJpbnQsIHdoaWNoIGlzIGNvbXB1dGVkIG92ZXIgdGhlXG4gICAgICAgIC8vIGZ1bGwgcGF5bG9hZCAoaW5jbHVkaW5nIHNjaGVtYSBib2RpZXMgYW5kIHR5cGVzKS4gV2l0aG91dCBvbmUgd2UgbGVhdmVcbiAgICAgICAgLy8gdGhlIGZpbmdlcnByaW50IHVuc2V0IHNvIGhhbmRsZVNjaGVtYXNQYXlsb2FkIG5ldmVyIHNob3J0LWNpcmN1aXRzIGFuZFxuICAgICAgICAvLyBhIHNjaGVtYSBjaGFuZ2UgY2FuJ3QgYmUgc2lsZW50bHkgbWlzc2VkICgjMTExNyByZXZpZXcpLlxuICAgICAgICBjb25zdCByZWdpc3RyeSA9IHBheWxvYWQgYXMgUGxhdGZvcm1SZWdpc3RyeVBheWxvYWQ7XG4gICAgICAgIHRoaXMucmVnaXN0cnlGaW5nZXJwcmludCA9XG4gICAgICAgICAgICB0eXBlb2YgcmVnaXN0cnkuZmluZ2VycHJpbnQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICA/IHJlZ2lzdHJ5LmZpbmdlcnByaW50XG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIC8vIEVtaXQgbm9ybWFsaXplZCByZWdpc3RyeSBwYXlsb2FkIHNvIGFwcCBjb2RlIHJlY2VpdmVzIGEgc3RhYmxlIHNoYXBlLlxuICAgICAgICB0aGlzLnNvY2tldC5fZW1pdChcInNjaGVtYXNcIiwgbm9ybWFsaXplZFBheWxvYWQpO1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplZFBheWxvYWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZFBsYXRmb3JtUmVnaXN0cnlQYXlsb2FkKCk6IFBsYXRmb3JtUmVnaXN0cnlQYXlsb2FkIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFwaVZlcnNpb246IHRoaXMuYXBpVmVyc2lvbixcbiAgICAgICAgICAgIGNvbnRleHRzOlxuICAgICAgICAgICAgICAgIHRoaXMuYXNDb250ZXh0VXJsICYmIHRoaXMuc29ja2V0aHViQ29udGV4dFVybFxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXM6IHRoaXMuYXNDb250ZXh0VXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXRodWI6IHRoaXMuc29ja2V0aHViQ29udGV4dFVybCxcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcGxhdGZvcm1zOiB0aGlzLmdldFJlZ2lzdGVyZWRQbGF0Zm9ybXMoKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkUmVhZHlJbmZvKHJlYXNvbjogUmVhZHlSZWFzb24pOiBDbGllbnRSZWFkeUluZm8gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmFwaVZlcnNpb24gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgIXRoaXMuYXNDb250ZXh0VXJsIHx8XG4gICAgICAgICAgICAhdGhpcy5zb2NrZXRodWJDb250ZXh0VXJsXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhdGU6IFwicmVhZHlcIixcbiAgICAgICAgICAgIHJlYXNvbixcbiAgICAgICAgICAgIGFwaVZlcnNpb246IHRoaXMuYXBpVmVyc2lvbixcbiAgICAgICAgICAgIGNvbnRleHRzOiB7XG4gICAgICAgICAgICAgICAgYXM6IHRoaXMuYXNDb250ZXh0VXJsLFxuICAgICAgICAgICAgICAgIHNvY2tldGh1YjogdGhpcy5zb2NrZXRodWJDb250ZXh0VXJsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBsYXRmb3JtczogdGhpcy5nZXRSZWdpc3RlcmVkUGxhdGZvcm1zKCkubWFwKChwbGF0Zm9ybSkgPT4gKHtcbiAgICAgICAgICAgICAgICBpZDogcGxhdGZvcm0uaWQsXG4gICAgICAgICAgICAgICAgYXBpVmVyc2lvbjogcGxhdGZvcm0uYXBpVmVyc2lvbixcbiAgICAgICAgICAgICAgICBjb250ZXh0VXJsOiBwbGF0Zm9ybS5jb250ZXh0VXJsLFxuICAgICAgICAgICAgICAgIGNvbnRleHRWZXJzaW9uOiBwbGF0Zm9ybS5jb250ZXh0VmVyc2lvbixcbiAgICAgICAgICAgICAgICBzY2hlbWFWZXJzaW9uOiBwbGF0Zm9ybS5zY2hlbWFWZXJzaW9uLFxuICAgICAgICAgICAgICAgIHR5cGVzOiBbLi4ucGxhdGZvcm0udHlwZXNdLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzb2x2ZVJlYWR5V2FpdGVycyhpbmZvOiBDbGllbnRSZWFkeUluZm8pIHtcbiAgICAgICAgY29uc3Qgd2FpdGVycyA9IHRoaXMucmVhZHlXYWl0ZXJzO1xuICAgICAgICB0aGlzLnJlYWR5V2FpdGVycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHdhaXRlciBvZiB3YWl0ZXJzKSB7XG4gICAgICAgICAgICBpZiAod2FpdGVyLnRpbWVyKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHdhaXRlci50aW1lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3YWl0ZXIucmVzb2x2ZShpbmZvKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVqZWN0UmVhZHlXYWl0ZXJzKGVycjogRXJyb3IpIHtcbiAgICAgICAgY29uc3Qgd2FpdGVycyA9IHRoaXMucmVhZHlXYWl0ZXJzO1xuICAgICAgICB0aGlzLnJlYWR5V2FpdGVycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHdhaXRlciBvZiB3YWl0ZXJzKSB7XG4gICAgICAgICAgICBpZiAod2FpdGVyLnRpbWVyKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHdhaXRlci50aW1lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3YWl0ZXIucmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRJbml0RXJyb3IoXG4gICAgICAgIGVycm9yOiBzdHJpbmcsXG4gICAgICAgIHBoYXNlOiBJbml0RXJyb3JQaGFzZSxcbiAgICAgICAgcmV0cnlpbmc6IGJvb2xlYW4sXG4gICAgKSB7XG4gICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KFwiaW5pdF9lcnJvclwiLCB7XG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIHBoYXNlLFxuICAgICAgICAgICAgcmV0cnlpbmcsXG4gICAgICAgIH0gc2F0aXNmaWVzIENsaWVudEluaXRFcnJvcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0Q2xpZW50RXJyb3IoXG4gICAgICAgIGV2ZW50OiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiB1bmtub3duLFxuICAgICAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyxcbiAgICApIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBjYWxsYmFjayh7IGVycm9yOiBlcnJvck1lc3NhZ2UgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zb2NrZXQuX2VtaXQoXCJjbGllbnRfZXJyb3JcIiwge1xuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3JNZXNzYWdlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFySW5pdFRpbWVycygpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5pdFRpbWVvdXRUaW1lcikge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaW5pdFRpbWVvdXRUaW1lcik7XG4gICAgICAgICAgICB0aGlzLmluaXRUaW1lb3V0VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMud2FpdGluZ1dhcm5pbmdUaW1lcikge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLndhaXRpbmdXYXJuaW5nVGltZXIpO1xuICAgICAgICAgICAgdGhpcy53YWl0aW5nV2FybmluZ1RpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGFydFdhaXRpbmdXYXJuaW5ncygpIHtcbiAgICAgICAgaWYgKHRoaXMud2FpdGluZ1dhcm5pbmdUaW1lcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2FpdGluZ1dhcm5pbmdUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUmVhZHkoKSB8fCB0aGlzLmluaXRTdGF0ZSA9PT0gXCJjbG9zZWRcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJJbml0VGltZXJzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcXVldWVTaXplID0gdGhpcy5vdXRib3VuZFF1ZXVlLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IG9sZGVzdCA9IHRoaXMub3V0Ym91bmRRdWV1ZVswXTtcbiAgICAgICAgICAgIGNvbnN0IG9sZGVzdEFnZVNlY29uZHMgPSBvbGRlc3RcbiAgICAgICAgICAgICAgICA/ICgoRGF0ZS5ub3coKSAtIG9sZGVzdC5lbnF1ZXVlZEF0KSAvIDEwMDApLnRvRml4ZWQoMSlcbiAgICAgICAgICAgICAgICA6IFwiMC4wXCI7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgYFtTb2NrZXRodWJDbGllbnRdIFN0aWxsIHdhaXRpbmcgZm9yIHNjaGVtYXM7IHF1ZXVlZCBvdXRib3VuZCBtZXNzYWdlczogJHtxdWV1ZVNpemV9OyBvbGRlc3QgcXVldWVkIGFnZTogJHtvbGRlc3RBZ2VTZWNvbmRzfXMuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sIHRoaXMud2FpdGluZ1dhcm5pbmdJbnRlcnZhbE1zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0SW5pdGlhbGl6YXRpb24ocmVhc29uOiBSZWFkeVJlYXNvbiwgcmVwbGF5T25SZWFkeTogYm9vbGVhbikge1xuICAgICAgICBpZiAoIXRoaXMuc29ja2V0LmNvbm5lY3RlZCB8fCB0aGlzLmluaXRTdGF0ZSA9PT0gXCJjbG9zZWRcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdG9rZW4gPSArK3RoaXMuaW5pdFRva2VuQ291bnRlcjtcbiAgICAgICAgdGhpcy5pbml0Q3ljbGUgPSB7XG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIHJlYXNvbixcbiAgICAgICAgICAgIHN0YXJ0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIHJlcGxheU9uUmVhZHksXG4gICAgICAgICAgICB0aW1lZE91dDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaW5pdFN0YXRlID0gXCJpbml0aWFsaXppbmdcIjtcbiAgICAgICAgdGhpcy5jbGVhckluaXRUaW1lcnMoKTtcblxuICAgICAgICB0aGlzLmluaXRUaW1lb3V0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pbml0Q3ljbGUgfHwgdGhpcy5pbml0Q3ljbGUudG9rZW4gIT09IHRva2VuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pbml0Q3ljbGUudGltZWRPdXQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pbml0U3RhdGUgPSBcImluaXRfZXJyb3JcIjtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRNc2cgPSBgSW5pdGlhbGl6YXRpb24gdGltZWQgb3V0IGFmdGVyICR7dGhpcy5vcHRpb25zLmluaXRUaW1lb3V0TXN9bXMgd2FpdGluZyBmb3Igc2NoZW1hc2A7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgYFtTb2NrZXRodWJDbGllbnRdICR7dGltZW91dE1zZ307IHF1ZXVlZCBvdXRib3VuZCBtZXNzYWdlczogJHt0aGlzLm91dGJvdW5kUXVldWUubGVuZ3RofS4gV2FpdGluZyBmb3Igc2NoZW1hcyBldmVudCBmcm9tIHNlcnZlci5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdEluaXRFcnJvcih0aW1lb3V0TXNnLCBcInRpbWVvdXRcIiwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5zdGFydFdhaXRpbmdXYXJuaW5ncygpO1xuICAgICAgICB9LCB0aGlzLm9wdGlvbnMuaW5pdFRpbWVvdXRNcyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFB1bGwgdGhlIGxhdGVzdCByZWdpc3RyeSBmcm9tIHRoZSBzZXJ2ZXIgZm9yIHRoaXMgaW5pdCBjeWNsZS5cbiAgICAgICAgICAgIHRoaXMucmVxdWVzdFNjaGVtYVJlZ2lzdHJ5KCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5pbml0U3RhdGUgPSBcImluaXRfZXJyb3JcIjtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgICAgICAgICB0aGlzLmVtaXRJbml0RXJyb3IobWVzc2FnZSwgXCJzY2hlbWFzLXJlcXVlc3RcIiwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5zdGFydFdhaXRpbmdXYXJuaW5ncygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXJrUmVhZHkocmVhc29uOiBSZWFkeVJlYXNvbikge1xuICAgICAgICBjb25zdCBjeWNsZSA9IHRoaXMuaW5pdEN5Y2xlO1xuICAgICAgICBjb25zdCByZXBsYXlPblJlYWR5ID0gQm9vbGVhbihjeWNsZT8ucmVwbGF5T25SZWFkeSk7XG4gICAgICAgIHRoaXMuaW5pdEN5Y2xlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmNsZWFySW5pdFRpbWVycygpO1xuICAgICAgICB0aGlzLmluaXRTdGF0ZSA9IFwicmVhZHlcIjtcbiAgICAgICAgdGhpcy5oYXNSZWFkeU9uY2UgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IGluZm8gPSB0aGlzLmJ1aWxkUmVhZHlJbmZvKHJlYXNvbik7XG4gICAgICAgIGlmICghaW5mbykge1xuICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKFwiRmFpbGVkIHRvIGJ1aWxkIHJlYWR5IHBheWxvYWRcIik7XG4gICAgICAgICAgICB0aGlzLmluaXRTdGF0ZSA9IFwiaW5pdF9lcnJvclwiO1xuICAgICAgICAgICAgdGhpcy5lbWl0SW5pdEVycm9yKGVyci5tZXNzYWdlLCBcInNjaGVtYXMtYXBwbHlcIiwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnJlamVjdFJlYWR5V2FpdGVycyhlcnIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KFwicmVhZHlcIiwgaW5mbyk7XG4gICAgICAgIHRoaXMubGF0ZXN0UmVhZHlJbmZvID0gaW5mbztcbiAgICAgICAgdGhpcy5yZXNvbHZlUmVhZHlXYWl0ZXJzKGluZm8pO1xuXG4gICAgICAgIGlmIChyZXBsYXlPblJlYWR5KSB7XG4gICAgICAgICAgICAvLyBSZXBsYXkgcHJldmlvdXNseSBzZW50IHN0YXRlIGJlZm9yZSBmbHVzaGluZyBuZXdseSBxdWV1ZWQgb3V0Ym91bmQgZXZlbnRzLlxuICAgICAgICAgICAgY29uc3QgeyBjcmVkZW50aWFscywgY29ubmVjdCwgam9pbiB9ID0gdGhpcy5yZXBsYXlTdG9yZS5ldmVudHM7XG4gICAgICAgICAgICB0aGlzLnJlcGxheShcImNyZWRlbnRpYWxzXCIsIGNyZWRlbnRpYWxzKTtcbiAgICAgICAgICAgIHRoaXMucmVwbGF5KFwibWVzc2FnZVwiLCBjb25uZWN0KTtcbiAgICAgICAgICAgIHRoaXMucmVwbGF5KFwibWVzc2FnZVwiLCBqb2luKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmx1c2hPdXRib3VuZFF1ZXVlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVTY2hlbWFzUGF5bG9hZChwYXlsb2FkOiB1bmtub3duKSB7XG4gICAgICAgIGlmICghcGF5bG9hZCB8fCB0eXBlb2YgcGF5bG9hZCAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNlcnZlciBzaG9ydC1jaXJjdWl0OiB0aGUgcmVnaXN0cnkgbWF0Y2hlcyB0aGUgZmluZ2VycHJpbnQgd2UgZWNob2VkLFxuICAgICAgICAvLyBzbyBub3RoaW5nIHdhcyByZS1zZW50ICgjMTExNykuIE9ubHkgaG9ub3IgdGhpcyB3aGVuIHdlIGFjdHVhbGx5IGhvbGRcbiAgICAgICAgLy8gYSBjYWNoZWQgcmVnaXN0cnkgdG8gcmV1c2Ug4oCUIGEgbWFsZm9ybWVkIG9yIGVtcHR5IFwidW5jaGFuZ2VkXCIgcmVwbHlcbiAgICAgICAgLy8gbXVzdCBub3QgZmFzdC1wYXRoIGluaXQgdG8gcmVhZHkgd2l0aCBubyB2YWxpZGF0b3JzIHJlZ2lzdGVyZWQuXG4gICAgICAgIGlmICgocGF5bG9hZCBhcyBQbGF0Zm9ybVJlZ2lzdHJ5UGF5bG9hZCkudW5jaGFuZ2VkID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb25zdCBoYXZlQ2FjaGVkUmVnaXN0cnkgPVxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLnJlZ2lzdHJ5RmluZ2VycHJpbnQgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnBsYXRmb3JtUmVnaXN0cnkuc2l6ZSA+IDA7XG4gICAgICAgICAgICBpZiAoaGF2ZUNhY2hlZFJlZ2lzdHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5pdEN5Y2xlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFya1JlYWR5KHRoaXMuaW5pdEN5Y2xlLnJlYXNvbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluaXRTdGF0ZSAhPT0gXCJyZWFkeVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFya1JlYWR5KFwic2NoZW1hcy11cGRhdGVcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE5vdGhpbmcgY2FjaGVkIHRvIHJldXNlOiBmYWxsIHRocm91Z2ggc28gYXBwbHlQbGF0Zm9ybVJlZ2lzdHJ5XG4gICAgICAgICAgICAvLyByZWplY3RzIHRoZSBjb250ZW50bGVzcyBwYXlsb2FkIGFuZCBzdXJmYWNlcyBhbiBpbml0IGVycm9yLlxuICAgICAgICB9XG4gICAgICAgIC8vIERlZHVwIG9ubHkgYWdhaW5zdCB0aGUgc2VydmVyLXN1cHBsaWVkIGZpbmdlcnByaW50ICh3aGljaCBpcyB3aGF0IHdlXG4gICAgICAgIC8vIHN0b3JlZCBpbiBhcHBseVBsYXRmb3JtUmVnaXN0cnkpOyBhYnNlbnQgb25lLCBhbHdheXMgcmUtYXBwbHkuXG4gICAgICAgIGNvbnN0IGluY29taW5nRmluZ2VycHJpbnQgPSAocGF5bG9hZCBhcyBQbGF0Zm9ybVJlZ2lzdHJ5UGF5bG9hZClcbiAgICAgICAgICAgIC5maW5nZXJwcmludDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pbml0U3RhdGUgPT09IFwicmVhZHlcIiAmJlxuICAgICAgICAgICAgIXRoaXMuaW5pdEN5Y2xlICYmXG4gICAgICAgICAgICBpbmNvbWluZ0ZpbmdlcnByaW50ICYmXG4gICAgICAgICAgICBpbmNvbWluZ0ZpbmdlcnByaW50ID09PSB0aGlzLnJlZ2lzdHJ5RmluZ2VycHJpbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pbml0U3RhdGUgPT09IFwicmVhZHlcIiAmJiAhdGhpcy5pbml0Q3ljbGUpIHtcbiAgICAgICAgICAgIC8vIEEgc2VydmVyLXNpZGUgc2NoZW1hIHVwZGF0ZSBhcnJpdmVkIHdoaWxlIGFscmVhZHkgcnVubmluZy5cbiAgICAgICAgICAgIHRoaXMuaW5pdFN0YXRlID0gXCJpbml0aWFsaXppbmdcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXlsb2FkID0gdGhpcy5hcHBseVBsYXRmb3JtUmVnaXN0cnkocGF5bG9hZCk7XG4gICAgICAgIGlmICghbm9ybWFsaXplZFBheWxvYWQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdFN0YXRlID0gXCJpbml0X2Vycm9yXCI7XG4gICAgICAgICAgICB0aGlzLmVtaXRJbml0RXJyb3IoXG4gICAgICAgICAgICAgICAgXCJSZWNlaXZlZCBpbnZhbGlkIHNjaGVtYXMgcGF5bG9hZCBmcm9tIHNlcnZlclwiLFxuICAgICAgICAgICAgICAgIFwic2NoZW1hcy1hcHBseVwiLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zdGFydFdhaXRpbmdXYXJuaW5ncygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW5pdEN5Y2xlKSB7XG4gICAgICAgICAgICB0aGlzLm1hcmtSZWFkeSh0aGlzLmluaXRDeWNsZS5yZWFzb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWFya1JlYWR5KFwic2NoZW1hcy11cGRhdGVcIik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVQdWJsaWNFbWl0KFxuICAgICAgICBldmVudDogc3RyaW5nLFxuICAgICAgICBjb250ZW50OiB1bmtub3duLFxuICAgICAgICBjYWxsYmFjaz86IHVua25vd24sXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IHF1ZXVlZEV2ZW50OiBRdWV1ZWRPdXRib3VuZEV2ZW50ID0ge1xuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgICAgICBlbnF1ZXVlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgc2VxdWVuY2U6IHRoaXMub3V0Ym91bmRTZXF1ZW5jZSsrLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICghdGhpcy5pc1JlYWR5KCkpIHtcbiAgICAgICAgICAgIC8vIEhvbGQgb3V0Ym91bmQgdW50aWwgc2NoZW1hcy9jb250ZXh0IG1ldGFkYXRhIGlzIGxvYWRlZC5cbiAgICAgICAgICAgIHRoaXMuZW5xdWV1ZU91dGJvdW5kKHF1ZXVlZEV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbmRPdXRib3VuZChxdWV1ZWRFdmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbnF1ZXVlT3V0Ym91bmQocXVldWVkRXZlbnQ6IFF1ZXVlZE91dGJvdW5kRXZlbnQpIHtcbiAgICAgICAgdGhpcy5vdXRib3VuZFF1ZXVlLnB1c2gocXVldWVkRXZlbnQpO1xuICAgICAgICBpZiAodGhpcy5vdXRib3VuZFF1ZXVlLmxlbmd0aCA8PSB0aGlzLm9wdGlvbnMubWF4UXVldWVkT3V0Ym91bmQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkcm9wcGVkID0gdGhpcy5vdXRib3VuZFF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIGlmICghZHJvcHBlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdENsaWVudEVycm9yKFxuICAgICAgICAgICAgZHJvcHBlZC5ldmVudCxcbiAgICAgICAgICAgIGRyb3BwZWQuY2FsbGJhY2ssXG4gICAgICAgICAgICBcIlNvY2tldGh1YkNsaWVudCBxdWV1ZSBvdmVyZmxvdyBiZWZvcmUgcmVhZHlcIixcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZsdXNoT3V0Ym91bmRRdWV1ZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzUmVhZHkoKSB8fCB0aGlzLm91dGJvdW5kUXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgcXVldWVkID0gdGhpcy5vdXRib3VuZFF1ZXVlLnNvcnQoXG4gICAgICAgICAgICAoYSwgYikgPT4gYS5zZXF1ZW5jZSAtIGIuc2VxdWVuY2UsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMub3V0Ym91bmRRdWV1ZSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHF1ZXVlZCkge1xuICAgICAgICAgICAgaWYgKG5vdyAtIGVudHJ5LmVucXVldWVkQXQgPiB0aGlzLm9wdGlvbnMubWF4UXVldWVkQWdlTXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDbGllbnRFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgZW50cnkuZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LmNhbGxiYWNrLFxuICAgICAgICAgICAgICAgICAgICBgU29ja2V0aHViQ2xpZW50IHF1ZXVlZCBtZXNzYWdlIGV4cGlyZWQgYWZ0ZXIgJHt0aGlzLm9wdGlvbnMubWF4UXVldWVkQWdlTXN9bXMgYmVmb3JlIGluaXRpYWxpemF0aW9uYCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZW5kT3V0Ym91bmQoZW50cnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZW5kT3V0Ym91bmQoZW50cnk6IFF1ZXVlZE91dGJvdW5kRXZlbnQpIHtcbiAgICAgICAgbGV0IG91dGdvaW5nID0gZW50cnkuY29udGVudDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChlbnRyeS5ldmVudCA9PT0gXCJjcmVkZW50aWFsc1wiIHx8IGVudHJ5LmV2ZW50ID09PSBcIm1lc3NhZ2VcIikge1xuICAgICAgICAgICAgICAgIC8vIFJ1biBjYW5vbmljYWwgZXhwYW5zaW9uL25vcm1hbGl6YXRpb24gYXQgc2VuZCB0aW1lIHNvIHF1ZXVlZCBhbmRcbiAgICAgICAgICAgICAgICAvLyBpbW1lZGlhdGUgc2VuZHMgZm9sbG93IHRoZSBleGFjdCBzYW1lIHBhdGguXG4gICAgICAgICAgICAgICAgb3V0Z29pbmcgPSBub3JtYWxpemVBY3Rpdml0eVN0cmVhbShcbiAgICAgICAgICAgICAgICAgICAgZW50cnkuY29udGVudCBhcyBBY3Rpdml0eVN0cmVhbSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChvdXRnb2luZyAmJiB0eXBlb2Ygb3V0Z29pbmcgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aXZpdHkgPSBvdXRnb2luZyBhcyBBY3Rpdml0eVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LmV2ZW50ID09PSBcImNyZWRlbnRpYWxzXCIgJiYgIWFjdGl2aXR5LnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5LnR5cGUgPSBcImNyZWRlbnRpYWxzXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHkuYWN0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBhY3Rpdml0eS5hY3RvciA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWFjdGl2aXR5LmFjdG9yLnR5cGVcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eS5hY3Rvci50eXBlID0gXCJwZXJzb25cIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybVJlZ2lzdHJ5LnNpemUgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvciA9IHRoaXMudmFsaWRhdGVBY3Rpdml0eShcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dGdvaW5nIGFzIEFjdGl2aXR5U3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXRDbGllbnRFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5ldmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5jYWxsYmFjayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgU29ja2V0aHViQ2xpZW50IHZhbGlkYXRpb24gZmFpbGVkOiAke3ZhbGlkYXRpb25FcnJvcn1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjYWxsYmFjayA9IGVudHJ5LmNhbGxiYWNrO1xuICAgICAgICAgICAgaWYgKGVudHJ5LmV2ZW50ID09PSBcImNyZWRlbnRpYWxzXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcGxheVN0b3JlLnJlY29yZENyZWRlbnRpYWxzKG91dGdvaW5nIGFzIEFjdGl2aXR5U3RyZWFtKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50cnkuZXZlbnQgPT09IFwibWVzc2FnZVwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NvY2tldC5jb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXBsYXlTdG9yZS5yZWNvcmRNZXNzYWdlKG91dGdvaW5nIGFzIEFjdGl2aXR5U3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSB0aGlzLnJlbWVtYmVyUmVxdWVzdGVkUmVuYW1lKFxuICAgICAgICAgICAgICAgICAgICBvdXRnb2luZyBhcyBBY3Rpdml0eVN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3NvY2tldC5lbWl0KGVudHJ5LmV2ZW50LCBvdXRnb2luZywgY2FsbGJhY2spO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgICAgICAgICB0aGlzLmVtaXRDbGllbnRFcnJvcihlbnRyeS5ldmVudCwgZW50cnkuY2FsbGJhY2ssIG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2cobXNnOiBzdHJpbmcsIG9iaj86IHVua25vd24pIHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1zZywgb2JqKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVnaXN0ZXJTb2NrZXRJT0hhbmRsZXJzKCkge1xuICAgICAgICAvLyByZWdpc3RlciBmb3IgZXZlbnRzIHRoYXQgZ2l2ZSB1cyBpbmZvcm1hdGlvbiBvbiBjb25uZWN0aW9uIHN0YXR1c1xuICAgICAgICB0aGlzLl9zb2NrZXQub24oXCJjb25uZWN0XCIsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0LmlkID0gdGhpcy5fc29ja2V0LmlkO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuY29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KFwiY29ubmVjdFwiKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRJbml0aWFsaXphdGlvbihcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1JlYWR5T25jZSA/IFwicmVjb25uZWN0XCIgOiBcImluaXRpYWwtY29ubmVjdFwiLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fc29ja2V0Lm9uKFwiY29ubmVjdF9lcnJvclwiLCAob2JqPzogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuX2VtaXQoXCJjb25uZWN0X2Vycm9yXCIsIG9iaik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9zb2NrZXQub24oXCJkaXNjb25uZWN0XCIsIChvYmo/OiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmluaXRTdGF0ZSAhPT0gXCJjbG9zZWRcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFN0YXRlID0gXCJpZGxlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNsZWFySW5pdFRpbWVycygpO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuX2VtaXQoXCJkaXNjb25uZWN0XCIsIG9iaik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9zb2NrZXQub24oXCJzY2hlbWFzXCIsIChwYXlsb2FkOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVNjaGVtYXNQYXlsb2FkKHBheWxvYWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyB1c2UgYXMgbWlkZGxld2FyZSB0byByZWNlaXZlIGluY29taW5nIFNvY2tldGh1YiBtZXNzYWdlcyBhbmQgdW5wYWNrIHRoZW1cbiAgICAgICAgLy8gTm9ybWFsaXplIGFuZCBsaW50IGJlZm9yZSBwYXNzaW5nIHRoZW0gYWxvbmcgdG8gdGhlIGFwcC5cbiAgICAgICAgdGhpcy5fc29ja2V0Lm9uKFwibWVzc2FnZVwiLCAob2JqKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmNvbWluZyA9IG5vcm1hbGl6ZUFjdGl2aXR5U3RyZWFtKG9iaik7XG4gICAgICAgICAgICB0aGlzLmZvbGxvd0FjdG9yUmVuYW1lKGluY29taW5nKTtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KFwibWVzc2FnZVwiLCBpbmNvbWluZyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEtlZXBzIHRoZSByZXBsYXkgbWFwcyBvbiB0aGUgYWN0b3IgdGhlIHNlcnZlciBub3cga25vd3MgYWZ0ZXIgYSByZW5hbWVcbiAgICAgKiB0aGUgc2VydmVyIHJlcG9ydGVkLlxuICAgICAqXG4gICAgICogQSBzZXJ2ZXItZm9yY2VkIG5pY2sgY2hhbmdlIGFycml2ZXMgYXMgYW4gaW5jb21pbmcgYHVwZGF0ZWAgd2l0aFxuICAgICAqIGBvYmplY3QudHlwZTogXCJhZGRyZXNzXCJgLiBUaGUgc3RvcmVkIGNyZWRlbnRpYWxzLCBjb25uZWN0LCBhbmQgam9pblxuICAgICAqIGVudHJpZXMgYXJlIGtleWVkIGJ5IHRoZSBhY3RvciBhdCBzZW5kIHRpbWUsIHNvIGxlZnQgYWxvbmUgYSByZWNvbm5lY3RcbiAgICAgKiB3b3VsZCByZXBsYXkgdGhlIG9sZCBuaWNrIGFuZCBvcGVuIGEgc2Vjb25kIGNvbm5lY3Rpb24gdW5kZXIgYW5cbiAgICAgKiBpZGVudGl0eSB0aGlzIG9uZSBubyBsb25nZXIgaG9sZHMuXG4gICAgICpcbiAgICAgKiBPbmx5IGVudHJpZXMgZm9yIHRoZSByZW5hbWVkIGFjdG9yIG9uIHRoYXQgcGxhdGZvcm0gbW92ZS4gVGhlIG1hcHMgaG9sZFxuICAgICAqIG9ubHkgdGhpcyBjbGllbnQncyBvd24gYWN0b3JzLCBhbmQgYHJlbWVtYmVyUmVxdWVzdGVkUmVuYW1lYCBrZWVwcyB0aGVtXG4gICAgICogb24gdGhlIG5pY2sgdGhpcyBjb25uZWN0aW9uIGN1cnJlbnRseSBob2xkcywgc28gYSByZW5hbWUgb2Ygc29tZSBvdGhlclxuICAgICAqIHVzZXIgKGluY2x1ZGluZyBvbmUgd2hvIGxhdGVyIHRvb2sgYSBuaWNrIHRoaXMgY2xpZW50IHJlbGVhc2VkKSBuZXZlclxuICAgICAqIG1hdGNoZXMgYSBzdG9yZWQgZW50cnkuXG4gICAgICpcbiAgICAgKiBBIHJlamVjdGVkIG5pY2sgY2hhbmdlIGlzIG5vdCBhIHJlbmFtZS4gVGhlIHNlcnZlciBlY2hvZXMgdGhlIGZhaWxlZFxuICAgICAqIGpvYiDigJQgdGhlIG9yaWdpbmFsIHVwZGF0ZSBwbHVzIGBlcnJvcmAg4oCUIHRvIGV2ZXJ5IG90aGVyIHNlc3Npb24gc2hhcmluZ1xuICAgICAqIHRoZSBjb25uZWN0aW9uLiBGb2xsb3dpbmcgdGhhdCBlY2hvIHdvdWxkIHBvaW50IHRob3NlIHNlc3Npb25zIGF0IGFcbiAgICAgKiBuaWNrIHRoZSBzZXJ2ZXIgcmVmdXNlZCwgc28gdGhlaXIgbmV4dCBjb21tYW5kIG1pc3NlcyB0aGUgbGl2ZSB3b3JrZXJcbiAgICAgKiBhbmQgb3BlbnMgYSBzZWNvbmQgY29ubmVjdGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIGZvbGxvd0FjdG9yUmVuYW1lKGluY29taW5nOiBBY3Rpdml0eVN0cmVhbSk6IHZvaWQge1xuICAgICAgICBpZiAoaXNFcnJvclJlc3VsdChpbmNvbWluZykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBY3RvclJlbmFtZShpbmNvbWluZykpIHtcbiAgICAgICAgICAgIHRoaXMubW92ZVJlcGxheVN0YXRlKGluY29taW5nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vdmVzIHRoZSByZXBsYXkgbWFwcyB3aGVuIGEgbmljayBjaGFuZ2UgdGhpcyBjbGllbnQgcmVxdWVzdGVkIGlzXG4gICAgICogYWNrbm93bGVkZ2VkLiBUaGUgcGxhdGZvcm0gY29uc3VtZXMgdGhlIHNlcnZlcidzIGNvbmZpcm1hdGlvbiBhcyB0aGVcbiAgICAgKiBqb2IncyBjb21wbGV0aW9uIHJhdGhlciB0aGFuIGRlbGl2ZXJpbmcgaXQgYXMgYSBtZXNzYWdlLCBzbyB3aXRob3V0XG4gICAgICogdGhpcyB0aGUgbWFwcyB3b3VsZCBzdGF5IG9uIHRoZSByZWxlYXNlZCBuaWNrOiBhIHJlY29ubmVjdCB3b3VsZFxuICAgICAqIHJlcGxheSBpdCwgYW5kIHdob2V2ZXIgdG9vayBpdCBpbiB0aGUgbWVhbnRpbWUgY291bGQgc3RlZXIgd2hlcmVcbiAgICAgKiBgZm9sbG93QWN0b3JSZW5hbWVgIG1vdmVzIHRoaXMgY2xpZW50J3Mgc3RhdGUuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZW1lbWJlclJlcXVlc3RlZFJlbmFtZShcbiAgICAgICAgb3V0Z29pbmc6IEFjdGl2aXR5U3RyZWFtLFxuICAgICAgICBjYWxsYmFjazogdW5rbm93bixcbiAgICApOiB1bmtub3duIHtcbiAgICAgICAgaWYgKCFpc0FjdG9yUmVuYW1lKG91dGdvaW5nKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgICAgICAvLyBTb2NrZXQuSU8gZGVsaXZlcnMgdGhlIGFjayBhcyBgKHJlc3VsdClgLCBvciBhcyBgKGVyciwgcmVzdWx0KWBcbiAgICAgICAgICAgIC8vIHdoZW4gdGhlIHNvY2tldCB3YXMgY3JlYXRlZCB3aXRoIGBhY2tUaW1lb3V0YC4gQSB0aW1lb3V0IG9yIGFcbiAgICAgICAgICAgIC8vIGRyb3BwZWQgc29ja2V0IGFycml2ZXMgYXMgYW4gRXJyb3IgaW4gdGhlIGZpcnN0IHNsb3Q7IHRoZVxuICAgICAgICAgICAgLy8gc2VydmVyIHJlcG9ydHMgYSByZWplY3RlZCByZW5hbWUgYXMgYHsgZXJyb3IgfWAgaW4gd2hpY2hldmVyXG4gICAgICAgICAgICAvLyBzbG90IGNhcnJpZXMgdGhlIHJlc3VsdC5cbiAgICAgICAgICAgIGNvbnN0IFtmaXJzdCwgc2Vjb25kXSA9IGFyZ3M7XG4gICAgICAgICAgICBjb25zdCBmYWlsZWQgPVxuICAgICAgICAgICAgICAgIGZpcnN0IGluc3RhbmNlb2YgRXJyb3IgfHxcbiAgICAgICAgICAgICAgICBpc0Vycm9yUmVzdWx0KGZpcnN0KSB8fFxuICAgICAgICAgICAgICAgIGlzRXJyb3JSZXN1bHQoc2Vjb25kKTtcbiAgICAgICAgICAgIGlmICghZmFpbGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlUmVwbGF5U3RhdGUob3V0Z29pbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soLi4uYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtb3ZlUmVwbGF5U3RhdGUocmVuYW1lOiBBY3Rpdml0eVN0cmVhbSk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IFtwcmV2aW91c0lkLCBuZXh0SWRdIG9mIHRoaXMucmVwbGF5U3RvcmUubW92ZUFjdG9yKHJlbmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMubG9nKGByZXBsYXkgc3RhdGUgbW92ZWQgZnJvbSAke3ByZXZpb3VzSWR9IHRvICR7bmV4dElkfWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwbGF5cyBwcmV2aW91c2x5IHNlbnQgZXZlbnRzIHRvIHRoZSBzZXJ2ZXIgYWZ0ZXIgcmVjb25uZWN0aW9uLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgU29ja2V0LklPIGNvbm5lY3Rpb24gaXNcbiAgICAgKiByZS1lc3RhYmxpc2hlZCBhZnRlciBhIHRyYW5zaWVudCBuZXR3b3JrIGludGVycnVwdGlvbi4gSXQgcmVzZW5kc1xuICAgICAqIGNyZWRlbnRpYWxzIGFuZCBjb25uZWN0aW9uIHN0YXRlIHNvIHRoZSB1c2VyIGRvZXNuJ3QgbmVlZCB0byBtYW51YWxseVxuICAgICAqIHJlLWF1dGhlbnRpY2F0ZSBvciByZWpvaW4gY2hhbm5lbHMuXG4gICAgICpcbiAgICAgKiBTZWN1cml0eSBjb25zaWRlcmF0aW9uczpcbiAgICAgKiAtIE9ubHkgcmVwbGF5cyBldmVudHMgc3RvcmVkIGluIG1lbW9yeSBkdXJpbmcgdGhpcyBzZXNzaW9uXG4gICAgICogLSBEb2VzIG5vdCByZXBsYXkgYWZ0ZXIgcGFnZSByZWZyZXNoIChtZW1vcnkgY2xlYXJlZClcbiAgICAgKiAtIFNlcnZlciBzaG91bGQgdmFsaWRhdGUgcmVwbGF5ZWQgY3JlZGVudGlhbHMgKG1heSBiZSBzdGFsZS9yZXZva2VkKVxuICAgICAqXG4gICAgICogQHBhcmFtIG5hbWUgLSBFdmVudCBuYW1lIHRvIGVtaXQgKFwiY3JlZGVudGlhbHNcIiwgXCJtZXNzYWdlXCIpXG4gICAgICogQHBhcmFtIGFzTWFwIC0gTWFwIG9mIGV2ZW50cyB0byByZXBsYXlcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlcGxheTxLIGV4dGVuZHMga2V5b2YgUmVwbGF5RXZlbnRNYXA+KFxuICAgICAgICBuYW1lOiBLLFxuICAgICAgICBhc01hcDogTWFwPHN0cmluZywgUmVwbGF5RXZlbnRNYXBbS10+LFxuICAgICk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IG9iaiBvZiBhc01hcC52YWx1ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWRPYmogPSBub3JtYWxpemVBY3Rpdml0eVN0cmVhbShvYmogYXMgQWN0aXZpdHlTdHJlYW0pO1xuICAgICAgICAgICAgbGV0IGlkID0gZXhwYW5kZWRPYmo/LmlkO1xuICAgICAgICAgICAgaWYgKGhhc0FjdG9ySWQoZXhwYW5kZWRPYmopKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0b3IgPSAoZXhwYW5kZWRPYmogYXMgQWN0aXZpdHlTdHJlYW0pLmFjdG9yO1xuICAgICAgICAgICAgICAgIC8vIGFjdG9yIGNhbiBiZSBhIHN0cmluZyAoSklEKSBvciBhbiBvYmplY3Qgd2l0aCBhbiBpZCBmaWVsZFxuICAgICAgICAgICAgICAgIGlkID0gdHlwZW9mIGFjdG9yID09PSBcInN0cmluZ1wiID8gYWN0b3IgOiBhY3Rvci5pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubG9nKGByZXBsYXlpbmcgJHtuYW1lfSBmb3IgJHtpZH1gKTtcbiAgICAgICAgICAgIHRoaXMuX3NvY2tldC5lbWl0KG5hbWUsIGV4cGFuZGVkT2JqKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuKChnbG9iYWw6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgZ2xvYmFsLlNvY2tldGh1YkNsaWVudCA9IFNvY2tldGh1YkNsaWVudDtcbn0pKFxuICAgIHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiXG4gICAgICAgID8gKGdsb2JhbFRoaXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pXG4gICAgICAgIDoge30sXG4pO1xuIgogIF0sCiAgIm1hcHBpbmdzIjogImdwQ0FDQSxPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsR0FBUSxXQUFhLEdBQVEsaUJBQW1CLEdBQVEsWUFBYyxHQUFRLGNBQWdCLEdBQVEsVUFBWSxHQUFRLFVBQVksR0FBUSxXQUFhLEdBQVEsSUFBTSxHQUFRLEVBQUksR0FBUSxJQUFNLEdBQVEsTUFBUSxHQUFRLEtBQU8sR0FBUSxXQUFhLEdBQVEsWUFBbUIsT0FFbFIsTUFBTSxFQUFZLENBQ2xCLENBQ0EsR0FBUSxZQUFjLEdBQ3RCLEdBQVEsV0FBYSx3QkFDckIsTUFBTSxXQUFhLEVBQVksQ0FDM0IsV0FBVyxDQUFDLEVBQUcsQ0FDWCxNQUFNLEVBQ04sR0FBSSxDQUFDLEdBQVEsV0FBVyxLQUFLLENBQUMsRUFDMUIsTUFBVSxNQUFNLDBDQUEwQyxFQUM5RCxLQUFLLElBQU0sRUFFZixRQUFRLEVBQUcsQ0FDUCxPQUFPLEtBQUssSUFFaEIsUUFBUSxFQUFHLENBQ1AsTUFBTyxNQUVQLE1BQUssRUFBRyxDQUNSLE1BQU8sRUFBRyxLQUFLLEtBQU0sQ0FBRSxFQUUvQixDQUNBLEdBQVEsS0FBTyxHQUNmLE1BQU0sV0FBYyxFQUFZLENBQzVCLFdBQVcsQ0FBQyxFQUFNLENBQ2QsTUFBTSxFQUNOLEtBQUssT0FBUyxPQUFPLElBQVMsU0FBVyxDQUFDLENBQUksRUFBSSxFQUV0RCxRQUFRLEVBQUcsQ0FDUCxPQUFPLEtBQUssSUFFaEIsUUFBUSxFQUFHLENBQ1AsR0FBSSxLQUFLLE9BQU8sT0FBUyxFQUNyQixNQUFPLEdBQ1gsSUFBTSxFQUFPLEtBQUssT0FBTyxHQUN6QixPQUFPLElBQVMsSUFBTSxJQUFTLFFBRS9CLElBQUcsRUFBRyxDQUNOLElBQUksRUFDSixPQUFTLEVBQUssS0FBSyxRQUFVLE1BQVEsSUFBWSxPQUFJLEVBQU0sS0FBSyxLQUFPLEtBQUssT0FBTyxPQUFPLENBQUMsRUFBRyxJQUFNLEdBQUcsSUFBSSxJQUFLLEVBQUUsS0FFbEgsTUFBSyxFQUFHLENBQ1IsSUFBSSxFQUNKLE9BQVMsRUFBSyxLQUFLLFVBQVksTUFBUSxJQUFZLE9BQUksRUFBTSxLQUFLLE9BQVMsS0FBSyxPQUFPLE9BQU8sQ0FBQyxFQUFPLElBQU0sQ0FDeEcsR0FBSSxhQUFhLEdBQ2IsRUFBTSxFQUFFLE1BQVEsRUFBTSxFQUFFLE1BQVEsR0FBSyxFQUN6QyxPQUFPLEdBQ1IsQ0FBQyxDQUFDLEVBRWIsQ0FDQSxHQUFRLE1BQVEsR0FDaEIsR0FBUSxJQUFNLElBQUksR0FBTSxFQUFFLEVBQzFCLFNBQVMsRUFBQyxDQUFDLEtBQVMsRUFBTSxDQUN0QixJQUFNLEVBQU8sQ0FBQyxFQUFLLEVBQUUsRUFDakIsRUFBSSxFQUNSLE1BQU8sRUFBSSxFQUFLLE9BQ1osR0FBVyxFQUFNLEVBQUssRUFBRSxFQUN4QixFQUFLLEtBQUssRUFBSyxFQUFFLEVBQUUsRUFFdkIsT0FBTyxJQUFJLEdBQU0sQ0FBSSxFQUV6QixHQUFRLEVBQUksR0FDWixJQUFNLEdBQU8sSUFBSSxHQUFNLEdBQUcsRUFDMUIsU0FBUyxFQUFHLENBQUMsS0FBUyxFQUFNLENBQ3hCLElBQU0sRUFBTyxDQUFDLEdBQWMsRUFBSyxFQUFFLENBQUMsRUFDaEMsRUFBSSxFQUNSLE1BQU8sRUFBSSxFQUFLLE9BQ1osRUFBSyxLQUFLLEVBQUksRUFDZCxHQUFXLEVBQU0sRUFBSyxFQUFFLEVBQ3hCLEVBQUssS0FBSyxHQUFNLEdBQWMsRUFBSyxFQUFFLEVBQUUsQ0FBQyxFQUc1QyxPQURBLEdBQVMsQ0FBSSxFQUNOLElBQUksR0FBTSxDQUFJLEVBRXpCLEdBQVEsSUFBTSxHQUNkLFNBQVMsRUFBVSxDQUFDLEVBQU0sRUFBSyxDQUMzQixHQUFJLGFBQWUsR0FDZixFQUFLLEtBQUssR0FBRyxFQUFJLE1BQU0sRUFDdEIsUUFBSSxhQUFlLEdBQ3BCLEVBQUssS0FBSyxDQUFHLEVBRWIsT0FBSyxLQUFLLEdBQVksQ0FBRyxDQUFDLEVBRWxDLEdBQVEsV0FBYSxHQUNyQixTQUFTLEVBQVEsQ0FBQyxFQUFNLENBQ3BCLElBQUksRUFBSSxFQUNSLE1BQU8sRUFBSSxFQUFLLE9BQVMsRUFBRyxDQUN4QixHQUFJLEVBQUssS0FBTyxHQUFNLENBQ2xCLElBQU0sRUFBTSxHQUFlLEVBQUssRUFBSSxHQUFJLEVBQUssRUFBSSxFQUFFLEVBQ25ELEdBQUksSUFBUSxPQUFXLENBQ25CLEVBQUssT0FBTyxFQUFJLEVBQUcsRUFBRyxDQUFHLEVBQ3pCLFNBRUosRUFBSyxLQUFPLElBRWhCLEtBR1IsU0FBUyxFQUFjLENBQUMsRUFBRyxFQUFHLENBQzFCLEdBQUksSUFBTSxLQUNOLE9BQU8sRUFDWCxHQUFJLElBQU0sS0FDTixPQUFPLEVBQ1gsR0FBSSxPQUFPLEdBQUssU0FBVSxDQUN0QixHQUFJLGFBQWEsSUFBUSxFQUFFLEVBQUUsT0FBUyxLQUFPLElBQ3pDLE9BQ0osR0FBSSxPQUFPLEdBQUssU0FDWixNQUFPLEdBQUcsRUFBRSxNQUFNLEVBQUcsRUFBRSxJQUFJLEtBQy9CLEdBQUksRUFBRSxLQUFPLElBQ1QsT0FBTyxFQUFFLE1BQU0sRUFBRyxFQUFFLEVBQUksRUFBRSxNQUFNLENBQUMsRUFDckMsT0FFSixHQUFJLE9BQU8sR0FBSyxVQUFZLEVBQUUsS0FBTyxLQUFPLEVBQUUsYUFBYSxJQUN2RCxNQUFPLElBQUksSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUM1QixPQUVKLFNBQVMsRUFBUyxDQUFDLEVBQUksRUFBSSxDQUN2QixPQUFPLEVBQUcsU0FBUyxFQUFJLEVBQUssRUFBRyxTQUFTLEVBQUksRUFBSyxLQUFPLElBQUssSUFFakUsR0FBUSxVQUFZLEdBRXBCLFNBQVMsRUFBVyxDQUFDLEVBQUcsQ0FDcEIsT0FBTyxPQUFPLEdBQUssVUFBWSxPQUFPLEdBQUssV0FBYSxJQUFNLEtBQ3hELEVBQ0EsR0FBYyxNQUFNLFFBQVEsQ0FBQyxFQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUksQ0FBQyxFQUUxRCxTQUFTLEVBQVMsQ0FBQyxFQUFHLENBQ2xCLE9BQU8sSUFBSSxHQUFNLEdBQWMsQ0FBQyxDQUFDLEVBRXJDLEdBQVEsVUFBWSxHQUNwQixTQUFTLEVBQWEsQ0FBQyxFQUFHLENBQ3RCLE9BQU8sS0FBSyxVQUFVLENBQUMsRUFDbEIsUUFBUSxVQUFXLFNBQVMsRUFDNUIsUUFBUSxVQUFXLFNBQVMsRUFFckMsR0FBUSxjQUFnQixHQUN4QixTQUFTLEVBQVcsQ0FBQyxFQUFLLENBQ3RCLE9BQU8sT0FBTyxHQUFPLFVBQVksR0FBUSxXQUFXLEtBQUssQ0FBRyxFQUFJLElBQUksR0FBTSxJQUFJLEdBQUssRUFBSSxNQUFNLEtBRWpHLEdBQVEsWUFBYyxHQUV0QixTQUFTLEVBQWdCLENBQUMsRUFBSyxDQUMzQixHQUFJLE9BQU8sR0FBTyxVQUFZLEdBQVEsV0FBVyxLQUFLLENBQUcsRUFDckQsT0FBTyxJQUFJLEdBQU0sR0FBRyxHQUFLLEVBRTdCLE1BQVUsTUFBTSxpQ0FBaUMsa0NBQW9DLEVBRXpGLEdBQVEsaUJBQW1CLEdBQzNCLFNBQVMsRUFBVSxDQUFDLEVBQUksQ0FDcEIsT0FBTyxJQUFJLEdBQU0sRUFBRyxTQUFTLENBQUMsRUFFbEMsR0FBUSxXQUFhLDJCQ3pKckIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsV0FBYSxHQUFRLGVBQWlCLEdBQVEsTUFBUSxHQUFRLFNBQVcsR0FBUSxlQUFzQixPQUMvRyxJQUFNLFFBQ04sTUFBTSxXQUFtQixLQUFNLENBQzNCLFdBQVcsQ0FBQyxFQUFNLENBQ2QsTUFBTSx1QkFBdUIsZUFBa0IsRUFDL0MsS0FBSyxNQUFRLEVBQUssTUFFMUIsQ0FDQSxJQUFJLElBQ0gsUUFBUyxDQUFDLEVBQWdCLENBQ3ZCLEVBQWUsRUFBZSxRQUFhLEdBQUssVUFDaEQsRUFBZSxFQUFlLFVBQWUsR0FBSyxjQUNuRCxLQUFtQixHQUFRLGVBQWlCLEdBQWlCLENBQUMsRUFBRSxFQUNuRSxHQUFRLFNBQVcsQ0FDZixNQUFPLElBQVcsUUFBSyxPQUFPLEVBQzlCLElBQUssSUFBVyxRQUFLLEtBQUssRUFDMUIsSUFBSyxJQUFXLFFBQUssS0FBSyxDQUM5QixFQUNBLE1BQU0sRUFBTSxDQUNSLFdBQVcsRUFBRyxXQUFVLFVBQVcsQ0FBQyxFQUFHLENBQ25DLEtBQUssT0FBUyxDQUFDLEVBQ2YsS0FBSyxVQUFZLEVBQ2pCLEtBQUssUUFBVSxFQUVuQixNQUFNLENBQUMsRUFBYyxDQUNqQixPQUFPLGFBQStCLFFBQU8sRUFBZSxLQUFLLEtBQUssQ0FBWSxFQUV0RixJQUFJLENBQUMsRUFBUSxDQUNULE9BQU8sSUFBVyxRQUFLLEtBQUssU0FBUyxDQUFNLENBQUMsRUFFaEQsUUFBUSxDQUFDLEVBQVEsQ0FDYixJQUFNLEVBQUssS0FBSyxPQUFPLElBQVcsS0FBSyxXQUFXLENBQU0sRUFDeEQsTUFBTyxHQUFHLElBQVMsRUFBRyxVQUUxQixVQUFVLENBQUMsRUFBUSxDQUNmLElBQUksRUFBSSxFQUNSLEtBQU0sR0FBTSxFQUFLLEtBQUssV0FBYSxNQUFRLElBQVksT0FBUyxPQUFJLEVBQUcsYUFBZSxNQUFRLElBQVksT0FBUyxPQUFJLEVBQUcsSUFBSSxDQUFNLElBQU8sS0FBSyxXQUFhLENBQUMsS0FBSyxVQUFVLElBQUksQ0FBTSxFQUNuTCxNQUFVLE1BQU0sb0JBQW9CLGlDQUFzQyxFQUU5RSxPQUFRLEtBQUssT0FBTyxHQUFVLENBQUUsU0FBUSxNQUFPLENBQUUsRUFFekQsQ0FDQSxHQUFRLE1BQVEsR0FDaEIsTUFBTSxXQUE4QixPQUFLLENBQ3JDLFdBQVcsQ0FBQyxFQUFRLEVBQVMsQ0FDekIsTUFBTSxDQUFPLEVBQ2IsS0FBSyxPQUFTLEVBRWxCLFFBQVEsQ0FBQyxHQUFTLFdBQVUsYUFBYSxDQUNyQyxLQUFLLE1BQVEsRUFDYixLQUFLLFVBQWEsQUFBVSxRQUFPLElBQVcsUUFBSyxDQUFRLEtBQUssS0FFeEUsQ0FDQSxHQUFRLGVBQWlCLEdBQ3pCLElBQU0sR0FBUSxBQUFVLFNBQ3hCLE1BQU0sV0FBbUIsRUFBTSxDQUMzQixXQUFXLENBQUMsRUFBTSxDQUNkLE1BQU0sQ0FBSSxFQUNWLEtBQUssUUFBVSxDQUFDLEVBQ2hCLEtBQUssT0FBUyxFQUFLLE1BQ25CLEtBQUssS0FBTyxJQUFLLEVBQU0sR0FBSSxFQUFLLE1BQVEsR0FBYyxNQUFJLEVBRTlELEdBQUcsRUFBRyxDQUNGLE9BQU8sS0FBSyxPQUVoQixJQUFJLENBQUMsRUFBUSxDQUNULE9BQU8sSUFBSSxHQUFlLEVBQVEsS0FBSyxTQUFTLENBQU0sQ0FBQyxFQUUzRCxLQUFLLENBQUMsRUFBYyxFQUFPLENBQ3ZCLElBQUksRUFDSixHQUFJLEVBQU0sTUFBUSxPQUNkLE1BQVUsTUFBTSxzQ0FBc0MsRUFDMUQsSUFBTSxFQUFPLEtBQUssT0FBTyxDQUFZLEdBQzdCLFVBQVcsRUFDYixHQUFZLEVBQUssRUFBTSxPQUFTLE1BQVEsSUFBWSxPQUFJLEVBQUssRUFBTSxJQUNyRSxFQUFLLEtBQUssUUFBUSxHQUN0QixHQUFJLEVBQUksQ0FDSixJQUFNLEVBQVEsRUFBRyxJQUFJLENBQVEsRUFDN0IsR0FBSSxFQUNBLE9BQU8sRUFHWCxPQUFLLEtBQUssUUFBUSxHQUFVLElBQUksSUFFcEMsRUFBRyxJQUFJLEVBQVUsQ0FBSSxFQUNyQixJQUFNLEVBQUksS0FBSyxPQUFPLEtBQVksS0FBSyxPQUFPLEdBQVUsQ0FBQyxHQUNuRCxFQUFZLEVBQUUsT0FHcEIsT0FGQSxFQUFFLEdBQWEsRUFBTSxJQUNyQixFQUFLLFNBQVMsRUFBTyxDQUFFLFNBQVUsRUFBUSxXQUFVLENBQUMsRUFDN0MsRUFFWCxRQUFRLENBQUMsRUFBUSxFQUFVLENBQ3ZCLElBQU0sRUFBSyxLQUFLLFFBQVEsR0FDeEIsR0FBSSxDQUFDLEVBQ0QsT0FDSixPQUFPLEVBQUcsSUFBSSxDQUFRLEVBRTFCLFNBQVMsQ0FBQyxFQUFXLEVBQVMsS0FBSyxRQUFTLENBQ3hDLE9BQU8sS0FBSyxjQUFjLEVBQVEsQ0FBQyxJQUFTLENBQ3hDLEdBQUksRUFBSyxZQUFjLE9BQ25CLE1BQVUsTUFBTSxrQkFBa0IsaUJBQW9CLEVBQzFELE1BQVEsQ0FBVSxPQUFNLElBQVksRUFBSyxZQUM1QyxFQUVMLFNBQVMsQ0FBQyxFQUFTLEtBQUssUUFBUyxFQUFZLEVBQVMsQ0FDbEQsT0FBTyxLQUFLLGNBQWMsRUFBUSxDQUFDLElBQVMsQ0FDeEMsR0FBSSxFQUFLLFFBQVUsT0FDZixNQUFVLE1BQU0sa0JBQWtCLGlCQUFvQixFQUMxRCxPQUFPLEVBQUssTUFBTSxNQUNuQixFQUFZLENBQU8sRUFFMUIsYUFBYSxDQUFDLEVBQVEsRUFBVyxFQUFhLENBQUMsRUFBRyxFQUFTLENBQ3ZELElBQUksRUFBYyxPQUNsQixRQUFXLEtBQVUsRUFBUSxDQUN6QixJQUFNLEVBQUssRUFBTyxHQUNsQixHQUFJLENBQUMsRUFDRCxTQUNKLElBQU0sRUFBVyxFQUFXLEdBQVUsRUFBVyxJQUFXLElBQUksSUFDaEUsRUFBRyxRQUFRLENBQUMsSUFBUyxDQUNqQixHQUFJLEVBQVEsSUFBSSxDQUFJLEVBQ2hCLE9BQ0osRUFBUSxJQUFJLEVBQU0sR0FBZSxPQUFPLEVBQ3hDLElBQUksRUFBSSxFQUFVLENBQUksRUFDdEIsR0FBSSxFQUFHLENBQ0gsSUFBTSxFQUFNLEtBQUssS0FBSyxJQUFNLEdBQVEsU0FBUyxJQUFNLEdBQVEsU0FBUyxNQUNwRSxFQUFRLEFBQVUsT0FBTSxJQUFPLEtBQU8sT0FBVSxLQUFLLEtBQUssS0FBSyxLQUU5RCxRQUFLLEVBQUksSUFBWSxNQUFRLElBQWlCLE9BQVMsT0FBSSxFQUFRLENBQUksRUFDeEUsRUFBUSxBQUFVLE9BQU0sSUFBTyxJQUFJLEtBQUssS0FBSyxLQUc3QyxXQUFNLElBQUksR0FBVyxDQUFJLEVBRTdCLEVBQVEsSUFBSSxFQUFNLEdBQWUsU0FBUyxFQUM3QyxFQUVMLE9BQU8sRUFFZixDQUNBLEdBQVEsV0FBYSwwQkM1SXJCLE9BQU8sZUFBZSxFQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxFQUFRLEdBQUssRUFBUSxJQUFNLEVBQVEsSUFBTSxFQUFRLFFBQVUsRUFBUSxVQUFZLEVBQVEsU0FBVyxFQUFRLGVBQWlCLEVBQVEsV0FBYSxFQUFRLE1BQVEsRUFBUSxLQUFPLEVBQVEsV0FBYSxFQUFRLFVBQVksRUFBUSxZQUFjLEVBQVEsSUFBTSxFQUFRLFVBQVksRUFBUSxJQUFNLEVBQVEsRUFBUyxPQUMvUyxJQUFNLE9BQ0EsUUFDRixRQUNKLE9BQU8sZUFBZSxFQUFTLElBQUssQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQU8sRUFBSyxDQUFDLEVBQy9GLE9BQU8sZUFBZSxFQUFTLE1BQU8sQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQU8sSUFBTyxDQUFDLEVBQ25HLE9BQU8sZUFBZSxFQUFTLFlBQWEsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQU8sVUFBYSxDQUFDLEVBQy9HLE9BQU8sZUFBZSxFQUFTLE1BQU8sQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQU8sSUFBTyxDQUFDLEVBQ25HLE9BQU8sZUFBZSxFQUFTLGNBQWUsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQU8sWUFBZSxDQUFDLEVBQ25ILE9BQU8sZUFBZSxFQUFTLFlBQWEsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQU8sVUFBYSxDQUFDLEVBQy9HLE9BQU8sZUFBZSxFQUFTLGFBQWMsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQU8sV0FBYyxDQUFDLEVBQ2pILE9BQU8sZUFBZSxFQUFTLE9BQVEsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQU8sS0FBUSxDQUFDLEVBQ3JHLElBQUksUUFDSixPQUFPLGVBQWUsRUFBUyxRQUFTLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFRLE1BQVMsQ0FBQyxFQUN4RyxPQUFPLGVBQWUsRUFBUyxhQUFjLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFRLFdBQWMsQ0FBQyxFQUNsSCxPQUFPLGVBQWUsRUFBUyxpQkFBa0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVEsZUFBa0IsQ0FBQyxFQUMxSCxPQUFPLGVBQWUsRUFBUyxXQUFZLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFRLFNBQVksQ0FBQyxFQUM5RyxFQUFRLFVBQVksQ0FDaEIsR0FBSSxJQUFXLFFBQU0sR0FBRyxFQUN4QixJQUFLLElBQVcsUUFBTSxJQUFJLEVBQzFCLEdBQUksSUFBVyxRQUFNLEdBQUcsRUFDeEIsSUFBSyxJQUFXLFFBQU0sSUFBSSxFQUMxQixHQUFJLElBQVcsUUFBTSxLQUFLLEVBQzFCLElBQUssSUFBVyxRQUFNLEtBQUssRUFDM0IsSUFBSyxJQUFXLFFBQU0sR0FBRyxFQUN6QixHQUFJLElBQVcsUUFBTSxJQUFJLEVBQ3pCLElBQUssSUFBVyxRQUFNLElBQUksRUFDMUIsSUFBSyxJQUFXLFFBQU0sR0FBRyxDQUM3QixFQUNBLE1BQU0sRUFBSyxDQUNQLGFBQWEsRUFBRyxDQUNaLE9BQU8sS0FFWCxhQUFhLENBQUMsRUFBUSxFQUFZLENBQzlCLE9BQU8sS0FFZixDQUNBLE1BQU0sV0FBWSxFQUFLLENBQ25CLFdBQVcsQ0FBQyxFQUFTLEVBQU0sRUFBSyxDQUM1QixNQUFNLEVBQ04sS0FBSyxRQUFVLEVBQ2YsS0FBSyxLQUFPLEVBQ1osS0FBSyxJQUFNLEVBRWYsTUFBTSxFQUFHLE1BQUssTUFBTSxDQUNoQixJQUFNLEVBQVUsRUFBYyxZQUFTLElBQU0sS0FBSyxRQUM1QyxFQUFNLEtBQUssTUFBUSxPQUFZLEdBQUssTUFBTSxLQUFLLE1BQ3JELE1BQU8sR0FBRyxLQUFXLEtBQUssT0FBTyxLQUFTLEVBRTlDLGFBQWEsQ0FBQyxFQUFPLEVBQVcsQ0FDNUIsR0FBSSxDQUFDLEVBQU0sS0FBSyxLQUFLLEtBQ2pCLE9BQ0osR0FBSSxLQUFLLElBQ0wsS0FBSyxJQUFNLEdBQWEsS0FBSyxJQUFLLEVBQU8sQ0FBUyxFQUN0RCxPQUFPLFFBRVAsTUFBSyxFQUFHLENBQ1IsT0FBTyxLQUFLLGVBQXNCLGNBQWMsS0FBSyxJQUFJLE1BQVEsQ0FBQyxFQUUxRSxDQUNBLE1BQU0sV0FBZSxFQUFLLENBQ3RCLFdBQVcsQ0FBQyxFQUFLLEVBQUssRUFBYSxDQUMvQixNQUFNLEVBQ04sS0FBSyxJQUFNLEVBQ1gsS0FBSyxJQUFNLEVBQ1gsS0FBSyxZQUFjLEVBRXZCLE1BQU0sRUFBRyxNQUFNLENBQ1gsTUFBTyxHQUFHLEtBQUssU0FBUyxLQUFLLE9BQVMsRUFFMUMsYUFBYSxDQUFDLEVBQU8sRUFBVyxDQUM1QixHQUFJLEtBQUssZUFBc0IsUUFBUSxDQUFDLEVBQU0sS0FBSyxJQUFJLE1BQVEsQ0FBQyxLQUFLLFlBQ2pFLE9BRUosT0FEQSxLQUFLLElBQU0sR0FBYSxLQUFLLElBQUssRUFBTyxDQUFTLEVBQzNDLFFBRVAsTUFBSyxFQUFHLENBQ1IsSUFBTSxFQUFRLEtBQUssZUFBc0IsT0FBTyxDQUFDLEVBQUksSUFBSyxLQUFLLElBQUksS0FBTSxFQUN6RSxPQUFPLEdBQWEsRUFBTyxLQUFLLEdBQUcsRUFFM0MsQ0FDQSxNQUFNLFdBQWlCLEVBQU8sQ0FDMUIsV0FBVyxDQUFDLEVBQUssRUFBSSxFQUFLLEVBQWEsQ0FDbkMsTUFBTSxFQUFLLEVBQUssQ0FBVyxFQUMzQixLQUFLLEdBQUssRUFFZCxNQUFNLEVBQUcsTUFBTSxDQUNYLE1BQU8sR0FBRyxLQUFLLE9BQU8sS0FBSyxPQUFPLEtBQUssT0FBUyxFQUV4RCxDQUNBLE1BQU0sV0FBYyxFQUFLLENBQ3JCLFdBQVcsQ0FBQyxFQUFPLENBQ2YsTUFBTSxFQUNOLEtBQUssTUFBUSxFQUNiLEtBQUssTUFBUSxDQUFDLEVBRWxCLE1BQU0sRUFBRyxNQUFNLENBQ1gsTUFBTyxHQUFHLEtBQUssU0FBVyxFQUVsQyxDQUNBLE1BQU0sV0FBYyxFQUFLLENBQ3JCLFdBQVcsQ0FBQyxFQUFPLENBQ2YsTUFBTSxFQUNOLEtBQUssTUFBUSxFQUNiLEtBQUssTUFBUSxDQUFDLEVBRWxCLE1BQU0sRUFBRyxNQUFNLENBRVgsTUFBTyxRQURPLEtBQUssTUFBUSxJQUFJLEtBQUssUUFBVSxNQUNwQixFQUVsQyxDQUNBLE1BQU0sV0FBYyxFQUFLLENBQ3JCLFdBQVcsQ0FBQyxFQUFPLENBQ2YsTUFBTSxFQUNOLEtBQUssTUFBUSxFQUVqQixNQUFNLEVBQUcsTUFBTSxDQUNYLE1BQU8sU0FBUyxLQUFLLFNBQVcsS0FFaEMsTUFBSyxFQUFHLENBQ1IsT0FBTyxLQUFLLE1BQU0sTUFFMUIsQ0FDQSxNQUFNLFdBQWdCLEVBQUssQ0FDdkIsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLEVBQ04sS0FBSyxLQUFPLEVBRWhCLE1BQU0sRUFBRyxNQUFNLENBQ1gsTUFBTyxHQUFHLEtBQUssUUFBVSxFQUU3QixhQUFhLEVBQUcsQ0FDWixNQUFPLEdBQUcsS0FBSyxPQUFTLEtBQU8sT0FFbkMsYUFBYSxDQUFDLEVBQU8sRUFBVyxDQUU1QixPQURBLEtBQUssS0FBTyxHQUFhLEtBQUssS0FBTSxFQUFPLENBQVMsRUFDN0MsUUFFUCxNQUFLLEVBQUcsQ0FDUixPQUFPLEtBQUssZ0JBQXVCLGNBQWMsS0FBSyxLQUFLLE1BQVEsQ0FBQyxFQUU1RSxDQUNBLE1BQU0sV0FBbUIsRUFBSyxDQUMxQixXQUFXLENBQUMsRUFBUSxDQUFDLEVBQUcsQ0FDcEIsTUFBTSxFQUNOLEtBQUssTUFBUSxFQUVqQixNQUFNLENBQUMsRUFBTSxDQUNULE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQyxFQUFNLElBQU0sRUFBTyxFQUFFLE9BQU8sQ0FBSSxFQUFHLEVBQUUsRUFFbkUsYUFBYSxFQUFHLENBQ1osSUFBUSxTQUFVLEtBQ2QsRUFBSSxFQUFNLE9BQ2QsTUFBTyxJQUFLLENBQ1IsSUFBTSxFQUFJLEVBQU0sR0FBRyxjQUFjLEVBQ2pDLEdBQUksTUFBTSxRQUFRLENBQUMsRUFDZixFQUFNLE9BQU8sRUFBRyxFQUFHLEdBQUcsQ0FBQyxFQUN0QixRQUFJLEVBQ0wsRUFBTSxHQUFLLEVBRVgsT0FBTSxPQUFPLEVBQUcsQ0FBQyxFQUV6QixPQUFPLEVBQU0sT0FBUyxFQUFJLEtBQU8sT0FFckMsYUFBYSxDQUFDLEVBQU8sRUFBVyxDQUM1QixJQUFRLFNBQVUsS0FDZCxFQUFJLEVBQU0sT0FDZCxNQUFPLElBQUssQ0FFUixJQUFNLEVBQUksRUFBTSxHQUNoQixHQUFJLEVBQUUsY0FBYyxFQUFPLENBQVMsRUFDaEMsU0FDSixHQUFjLEVBQU8sRUFBRSxLQUFLLEVBQzVCLEVBQU0sT0FBTyxFQUFHLENBQUMsRUFFckIsT0FBTyxFQUFNLE9BQVMsRUFBSSxLQUFPLFVBRWpDLE1BQUssRUFBRyxDQUNSLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQyxFQUFPLElBQU0sR0FBUyxFQUFPLEVBQUUsS0FBSyxFQUFHLENBQUMsQ0FBQyxFQUUzRSxDQUNBLE1BQU0sV0FBa0IsRUFBVyxDQUMvQixNQUFNLENBQUMsRUFBTSxDQUNULE1BQU8sSUFBTSxFQUFLLEdBQUssTUFBTSxPQUFPLENBQUksRUFBSSxJQUFNLEVBQUssR0FFL0QsQ0FDQSxNQUFNLFdBQWEsRUFBVyxDQUM5QixDQUNBLE1BQU0sV0FBYSxFQUFVLENBQzdCLENBQ0EsR0FBSyxLQUFPLE9BQ1osTUFBTSxXQUFXLEVBQVUsQ0FDdkIsV0FBVyxDQUFDLEVBQVcsRUFBTyxDQUMxQixNQUFNLENBQUssRUFDWCxLQUFLLFVBQVksRUFFckIsTUFBTSxDQUFDLEVBQU0sQ0FDVCxJQUFJLEVBQU8sTUFBTSxLQUFLLGFBQWUsTUFBTSxPQUFPLENBQUksRUFDdEQsR0FBSSxLQUFLLEtBQ0wsR0FBUSxRQUFVLEtBQUssS0FBSyxPQUFPLENBQUksRUFDM0MsT0FBTyxFQUVYLGFBQWEsRUFBRyxDQUNaLE1BQU0sY0FBYyxFQUNwQixJQUFNLEVBQU8sS0FBSyxVQUNsQixHQUFJLElBQVMsR0FDVCxPQUFPLEtBQUssTUFDaEIsSUFBSSxFQUFJLEtBQUssS0FDYixHQUFJLEVBQUcsQ0FDSCxJQUFNLEVBQUssRUFBRSxjQUFjLEVBQzNCLEVBQUksS0FBSyxLQUFPLE1BQU0sUUFBUSxDQUFFLEVBQUksSUFBSSxHQUFLLENBQUUsRUFBSSxFQUV2RCxHQUFJLEVBQUcsQ0FDSCxHQUFJLElBQVMsR0FDVCxPQUFPLGFBQWEsR0FBSyxFQUFJLEVBQUUsTUFDbkMsR0FBSSxLQUFLLE1BQU0sT0FDWCxPQUFPLEtBQ1gsT0FBTyxJQUFJLEdBQUcsR0FBSSxDQUFJLEVBQUcsYUFBYSxHQUFLLENBQUMsQ0FBQyxFQUFJLEVBQUUsS0FBSyxFQUU1RCxHQUFJLElBQVMsSUFBUyxDQUFDLEtBQUssTUFBTSxPQUM5QixPQUNKLE9BQU8sS0FFWCxhQUFhLENBQUMsRUFBTyxFQUFXLENBQzVCLElBQUksRUFFSixHQURBLEtBQUssTUFBUSxFQUFLLEtBQUssUUFBVSxNQUFRLElBQVksT0FBUyxPQUFJLEVBQUcsY0FBYyxFQUFPLENBQVMsRUFDL0YsRUFBRSxNQUFNLGNBQWMsRUFBTyxDQUFTLEdBQUssS0FBSyxNQUNoRCxPQUVKLE9BREEsS0FBSyxVQUFZLEdBQWEsS0FBSyxVQUFXLEVBQU8sQ0FBUyxFQUN2RCxRQUVQLE1BQUssRUFBRyxDQUNSLElBQU0sRUFBUSxNQUFNLE1BRXBCLEdBREEsR0FBYSxFQUFPLEtBQUssU0FBUyxFQUM5QixLQUFLLEtBQ0wsR0FBUyxFQUFPLEtBQUssS0FBSyxLQUFLLEVBQ25DLE9BQU8sRUFFZixDQUNBLEdBQUcsS0FBTyxLQUNWLE1BQU0sV0FBWSxFQUFVLENBQzVCLENBQ0EsR0FBSSxLQUFPLE1BQ1gsTUFBTSxXQUFnQixFQUFJLENBQ3RCLFdBQVcsQ0FBQyxFQUFXLENBQ25CLE1BQU0sRUFDTixLQUFLLFVBQVksRUFFckIsTUFBTSxDQUFDLEVBQU0sQ0FDVCxNQUFPLE9BQU8sS0FBSyxhQUFlLE1BQU0sT0FBTyxDQUFJLEVBRXZELGFBQWEsQ0FBQyxFQUFPLEVBQVcsQ0FDNUIsR0FBSSxDQUFDLE1BQU0sY0FBYyxFQUFPLENBQVMsRUFDckMsT0FFSixPQURBLEtBQUssVUFBWSxHQUFhLEtBQUssVUFBVyxFQUFPLENBQVMsRUFDdkQsUUFFUCxNQUFLLEVBQUcsQ0FDUixPQUFPLEdBQVMsTUFBTSxNQUFPLEtBQUssVUFBVSxLQUFLLEVBRXpELENBQ0EsTUFBTSxXQUFpQixFQUFJLENBQ3ZCLFdBQVcsQ0FBQyxFQUFTLEVBQU0sRUFBTSxFQUFJLENBQ2pDLE1BQU0sRUFDTixLQUFLLFFBQVUsRUFDZixLQUFLLEtBQU8sRUFDWixLQUFLLEtBQU8sRUFDWixLQUFLLEdBQUssRUFFZCxNQUFNLENBQUMsRUFBTSxDQUNULElBQU0sRUFBVSxFQUFLLElBQWMsWUFBUyxJQUFNLEtBQUssU0FDL0MsT0FBTSxPQUFNLE1BQU8sS0FDM0IsTUFBTyxPQUFPLEtBQVcsS0FBUSxNQUFTLEtBQVEsTUFBTyxPQUFZLE1BQU0sT0FBTyxDQUFJLEtBRXRGLE1BQUssRUFBRyxDQUNSLElBQU0sRUFBUSxHQUFhLE1BQU0sTUFBTyxLQUFLLElBQUksRUFDakQsT0FBTyxHQUFhLEVBQU8sS0FBSyxFQUFFLEVBRTFDLENBQ0EsTUFBTSxXQUFnQixFQUFJLENBQ3RCLFdBQVcsQ0FBQyxFQUFNLEVBQVMsRUFBTSxFQUFVLENBQ3ZDLE1BQU0sRUFDTixLQUFLLEtBQU8sRUFDWixLQUFLLFFBQVUsRUFDZixLQUFLLEtBQU8sRUFDWixLQUFLLFNBQVcsRUFFcEIsTUFBTSxDQUFDLEVBQU0sQ0FDVCxNQUFPLE9BQU8sS0FBSyxXQUFXLEtBQUssUUFBUSxLQUFLLFFBQVEsS0FBSyxZQUFjLE1BQU0sT0FBTyxDQUFJLEVBRWhHLGFBQWEsQ0FBQyxFQUFPLEVBQVcsQ0FDNUIsR0FBSSxDQUFDLE1BQU0sY0FBYyxFQUFPLENBQVMsRUFDckMsT0FFSixPQURBLEtBQUssU0FBVyxHQUFhLEtBQUssU0FBVSxFQUFPLENBQVMsRUFDckQsUUFFUCxNQUFLLEVBQUcsQ0FDUixPQUFPLEdBQVMsTUFBTSxNQUFPLEtBQUssU0FBUyxLQUFLLEVBRXhELENBQ0EsTUFBTSxXQUFhLEVBQVUsQ0FDekIsV0FBVyxDQUFDLEVBQU0sRUFBTSxFQUFPLENBQzNCLE1BQU0sRUFDTixLQUFLLEtBQU8sRUFDWixLQUFLLEtBQU8sRUFDWixLQUFLLE1BQVEsRUFFakIsTUFBTSxDQUFDLEVBQU0sQ0FFVCxNQUFPLEdBRFEsS0FBSyxNQUFRLFNBQVcsY0FDWCxLQUFLLFFBQVEsS0FBSyxRQUFVLE1BQU0sT0FBTyxDQUFJLEVBRWpGLENBQ0EsR0FBSyxLQUFPLE9BQ1osTUFBTSxXQUFlLEVBQVcsQ0FDNUIsTUFBTSxDQUFDLEVBQU0sQ0FDVCxNQUFPLFVBQVksTUFBTSxPQUFPLENBQUksRUFFNUMsQ0FDQSxHQUFPLEtBQU8sU0FDZCxNQUFNLFdBQVksRUFBVSxDQUN4QixNQUFNLENBQUMsRUFBTSxDQUNULElBQUksRUFBTyxNQUFRLE1BQU0sT0FBTyxDQUFJLEVBQ3BDLEdBQUksS0FBSyxNQUNMLEdBQVEsS0FBSyxNQUFNLE9BQU8sQ0FBSSxFQUNsQyxHQUFJLEtBQUssUUFDTCxHQUFRLEtBQUssUUFBUSxPQUFPLENBQUksRUFDcEMsT0FBTyxFQUVYLGFBQWEsRUFBRyxDQUNaLElBQUksRUFBSSxFQUlSLE9BSEEsTUFBTSxjQUFjLEdBQ25CLEVBQUssS0FBSyxTQUFXLE1BQVEsSUFBWSxRQUFhLEVBQUcsY0FBYyxHQUN2RSxFQUFLLEtBQUssV0FBYSxNQUFRLElBQVksUUFBYSxFQUFHLGNBQWMsRUFDbkUsS0FFWCxhQUFhLENBQUMsRUFBTyxFQUFXLENBQzVCLElBQUksRUFBSSxFQUlSLE9BSEEsTUFBTSxjQUFjLEVBQU8sQ0FBUyxHQUNuQyxFQUFLLEtBQUssU0FBVyxNQUFRLElBQVksUUFBYSxFQUFHLGNBQWMsRUFBTyxDQUFTLEdBQ3ZGLEVBQUssS0FBSyxXQUFhLE1BQVEsSUFBWSxRQUFhLEVBQUcsY0FBYyxFQUFPLENBQVMsRUFDbkYsUUFFUCxNQUFLLEVBQUcsQ0FDUixJQUFNLEVBQVEsTUFBTSxNQUNwQixHQUFJLEtBQUssTUFDTCxHQUFTLEVBQU8sS0FBSyxNQUFNLEtBQUssRUFDcEMsR0FBSSxLQUFLLFFBQ0wsR0FBUyxFQUFPLEtBQUssUUFBUSxLQUFLLEVBQ3RDLE9BQU8sRUFFZixDQUNBLE1BQU0sV0FBYyxFQUFVLENBQzFCLFdBQVcsQ0FBQyxFQUFPLENBQ2YsTUFBTSxFQUNOLEtBQUssTUFBUSxFQUVqQixNQUFNLENBQUMsRUFBTSxDQUNULE1BQU8sU0FBUyxLQUFLLFNBQVcsTUFBTSxPQUFPLENBQUksRUFFekQsQ0FDQSxHQUFNLEtBQU8sUUFDYixNQUFNLFdBQWdCLEVBQVUsQ0FDNUIsTUFBTSxDQUFDLEVBQU0sQ0FDVCxNQUFPLFVBQVksTUFBTSxPQUFPLENBQUksRUFFNUMsQ0FDQSxHQUFRLEtBQU8sVUFDZixNQUFNLEVBQVEsQ0FDVixXQUFXLENBQUMsRUFBVSxFQUFPLENBQUMsRUFBRyxDQUM3QixLQUFLLFFBQVUsQ0FBQyxFQUNoQixLQUFLLGFBQWUsQ0FBQyxFQUNyQixLQUFLLFdBQWEsQ0FBQyxFQUNuQixLQUFLLEtBQU8sSUFBSyxFQUFNLEdBQUksRUFBSyxNQUFRO0FBQUEsRUFBTyxFQUFHLEVBQ2xELEtBQUssVUFBWSxFQUNqQixLQUFLLE9BQVMsSUFBWSxTQUFNLENBQUUsT0FBUSxDQUFTLENBQUMsRUFDcEQsS0FBSyxPQUFTLENBQUMsSUFBSSxFQUFNLEVBRTdCLFFBQVEsRUFBRyxDQUNQLE9BQU8sS0FBSyxNQUFNLE9BQU8sS0FBSyxJQUFJLEVBR3RDLElBQUksQ0FBQyxFQUFRLENBQ1QsT0FBTyxLQUFLLE9BQU8sS0FBSyxDQUFNLEVBR2xDLFNBQVMsQ0FBQyxFQUFRLENBQ2QsT0FBTyxLQUFLLFVBQVUsS0FBSyxDQUFNLEVBR3JDLFVBQVUsQ0FBQyxFQUFjLEVBQU8sQ0FDNUIsSUFBTSxFQUFPLEtBQUssVUFBVSxNQUFNLEVBQWMsQ0FBSyxFQUdyRCxPQUZXLEtBQUssUUFBUSxFQUFLLFVBQVksS0FBSyxRQUFRLEVBQUssUUFBVSxJQUFJLE1BQ3RFLElBQUksQ0FBSSxFQUNKLEVBRVgsYUFBYSxDQUFDLEVBQVEsRUFBVSxDQUM1QixPQUFPLEtBQUssVUFBVSxTQUFTLEVBQVEsQ0FBUSxFQUluRCxTQUFTLENBQUMsRUFBVyxDQUNqQixPQUFPLEtBQUssVUFBVSxVQUFVLEVBQVcsS0FBSyxPQUFPLEVBRTNELFNBQVMsRUFBRyxDQUNSLE9BQU8sS0FBSyxVQUFVLFVBQVUsS0FBSyxPQUFPLEVBRWhELElBQUksQ0FBQyxFQUFTLEVBQWMsRUFBSyxFQUFVLENBQ3ZDLElBQU0sRUFBTyxLQUFLLE9BQU8sT0FBTyxDQUFZLEVBQzVDLEdBQUksSUFBUSxRQUFhLEVBQ3JCLEtBQUssV0FBVyxFQUFLLEtBQU8sRUFFaEMsT0FEQSxLQUFLLFVBQVUsSUFBSSxHQUFJLEVBQVMsRUFBTSxDQUFHLENBQUMsRUFDbkMsRUFHWCxLQUFLLENBQUMsRUFBYyxFQUFLLEVBQVcsQ0FDaEMsT0FBTyxLQUFLLEtBQWEsWUFBUyxNQUFPLEVBQWMsRUFBSyxDQUFTLEVBR3pFLEdBQUcsQ0FBQyxFQUFjLEVBQUssRUFBVyxDQUM5QixPQUFPLEtBQUssS0FBYSxZQUFTLElBQUssRUFBYyxFQUFLLENBQVMsRUFHdkUsR0FBRyxDQUFDLEVBQWMsRUFBSyxFQUFXLENBQzlCLE9BQU8sS0FBSyxLQUFhLFlBQVMsSUFBSyxFQUFjLEVBQUssQ0FBUyxFQUd2RSxNQUFNLENBQUMsRUFBSyxFQUFLLEVBQWEsQ0FDMUIsT0FBTyxLQUFLLFVBQVUsSUFBSSxHQUFPLEVBQUssRUFBSyxDQUFXLENBQUMsRUFHM0QsR0FBRyxDQUFDLEVBQUssRUFBSyxDQUNWLE9BQU8sS0FBSyxVQUFVLElBQUksR0FBUyxFQUFLLEVBQVEsVUFBVSxJQUFLLENBQUcsQ0FBQyxFQUd2RSxJQUFJLENBQUMsRUFBRyxDQUNKLEdBQUksT0FBTyxHQUFLLFdBQ1osRUFBRSxFQUNELFFBQUksSUFBYSxNQUNsQixLQUFLLFVBQVUsSUFBSSxHQUFRLENBQUMsQ0FBQyxFQUNqQyxPQUFPLEtBR1gsTUFBTSxJQUFJLEVBQVcsQ0FDakIsSUFBTSxFQUFPLENBQUMsR0FBRyxFQUNqQixRQUFZLEVBQUssS0FBVSxFQUFXLENBQ2xDLEdBQUksRUFBSyxPQUFTLEVBQ2QsRUFBSyxLQUFLLEdBQUcsRUFFakIsR0FEQSxFQUFLLEtBQUssQ0FBRyxFQUNULElBQVEsR0FBUyxLQUFLLEtBQUssSUFDM0IsRUFBSyxLQUFLLEdBQUcsRUFDRixhQUFZLEVBQU0sQ0FBSyxFQUkxQyxPQURBLEVBQUssS0FBSyxHQUFHLEVBQ04sSUFBVyxRQUFNLENBQUksRUFHaEMsRUFBRSxDQUFDLEVBQVcsRUFBVSxFQUFVLENBRTlCLEdBREEsS0FBSyxXQUFXLElBQUksR0FBRyxDQUFTLENBQUMsRUFDN0IsR0FBWSxFQUNaLEtBQUssS0FBSyxDQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBUSxFQUFFLE1BQU0sRUFFL0MsUUFBSSxFQUNMLEtBQUssS0FBSyxDQUFRLEVBQUUsTUFBTSxFQUV6QixRQUFJLEVBQ0wsTUFBVSxNQUFNLDBDQUEwQyxFQUU5RCxPQUFPLEtBR1gsTUFBTSxDQUFDLEVBQVcsQ0FDZCxPQUFPLEtBQUssVUFBVSxJQUFJLEdBQUcsQ0FBUyxDQUFDLEVBRzNDLElBQUksRUFBRyxDQUNILE9BQU8sS0FBSyxVQUFVLElBQUksRUFBTSxFQUdwQyxLQUFLLEVBQUcsQ0FDSixPQUFPLEtBQUssY0FBYyxHQUFJLEVBQUksRUFFdEMsSUFBSSxDQUFDLEVBQU0sRUFBUyxDQUVoQixHQURBLEtBQUssV0FBVyxDQUFJLEVBQ2hCLEVBQ0EsS0FBSyxLQUFLLENBQU8sRUFBRSxPQUFPLEVBQzlCLE9BQU8sS0FHWCxHQUFHLENBQUMsRUFBVyxFQUFTLENBQ3BCLE9BQU8sS0FBSyxLQUFLLElBQUksR0FBUSxDQUFTLEVBQUcsQ0FBTyxFQUdwRCxRQUFRLENBQUMsRUFBYyxFQUFNLEVBQUksRUFBUyxFQUFVLEtBQUssS0FBSyxJQUFjLFlBQVMsSUFBYyxZQUFTLElBQUssQ0FDN0csSUFBTSxFQUFPLEtBQUssT0FBTyxPQUFPLENBQVksRUFDNUMsT0FBTyxLQUFLLEtBQUssSUFBSSxHQUFTLEVBQVMsRUFBTSxFQUFNLENBQUUsRUFBRyxJQUFNLEVBQVEsQ0FBSSxDQUFDLEVBRy9FLEtBQUssQ0FBQyxFQUFjLEVBQVUsRUFBUyxFQUFrQixZQUFTLE1BQU8sQ0FDckUsSUFBTSxFQUFPLEtBQUssT0FBTyxPQUFPLENBQVksRUFDNUMsR0FBSSxLQUFLLEtBQUssSUFBSyxDQUNmLElBQU0sRUFBTSxhQUEyQixPQUFPLEVBQVcsS0FBSyxJQUFJLE9BQVEsQ0FBUSxFQUNsRixPQUFPLEtBQUssU0FBUyxLQUFNLEVBQUksQUFBVSxNQUFNLFdBQWMsQ0FBQyxJQUFNLENBQ2hFLEtBQUssSUFBSSxFQUFPLEFBQVUsTUFBTSxLQUFPLElBQUksRUFDM0MsRUFBUSxDQUFJLEVBQ2YsRUFFTCxPQUFPLEtBQUssS0FBSyxJQUFJLEdBQVEsS0FBTSxFQUFTLEVBQU0sQ0FBUSxFQUFHLElBQU0sRUFBUSxDQUFJLENBQUMsRUFJcEYsS0FBSyxDQUFDLEVBQWMsRUFBSyxFQUFTLEVBQVUsS0FBSyxLQUFLLElBQWMsWUFBUyxJQUFjLFlBQVMsTUFBTyxDQUN2RyxHQUFJLEtBQUssS0FBSyxjQUNWLE9BQU8sS0FBSyxNQUFNLEVBQWUsQUFBVSxrQkFBa0IsS0FBUSxDQUFPLEVBRWhGLElBQU0sRUFBTyxLQUFLLE9BQU8sT0FBTyxDQUFZLEVBQzVDLE9BQU8sS0FBSyxLQUFLLElBQUksR0FBUSxLQUFNLEVBQVMsRUFBTSxDQUFHLEVBQUcsSUFBTSxFQUFRLENBQUksQ0FBQyxFQUcvRSxNQUFNLEVBQUcsQ0FDTCxPQUFPLEtBQUssY0FBYyxFQUFHLEVBR2pDLEtBQUssQ0FBQyxFQUFPLENBQ1QsT0FBTyxLQUFLLFVBQVUsSUFBSSxHQUFNLENBQUssQ0FBQyxFQUcxQyxLQUFLLENBQUMsRUFBTyxDQUNULE9BQU8sS0FBSyxVQUFVLElBQUksR0FBTSxDQUFLLENBQUMsRUFHMUMsTUFBTSxDQUFDLEVBQU8sQ0FDVixJQUFNLEVBQU8sSUFBSSxHQUdqQixHQUZBLEtBQUssV0FBVyxDQUFJLEVBQ3BCLEtBQUssS0FBSyxDQUFLLEVBQ1gsRUFBSyxNQUFNLFNBQVcsRUFDdEIsTUFBVSxNQUFNLHdDQUF3QyxFQUM1RCxPQUFPLEtBQUssY0FBYyxFQUFNLEVBR3BDLEdBQUcsQ0FBQyxFQUFTLEVBQVcsRUFBYSxDQUNqQyxHQUFJLENBQUMsR0FBYSxDQUFDLEVBQ2YsTUFBVSxNQUFNLDhDQUE4QyxFQUNsRSxJQUFNLEVBQU8sSUFBSSxHQUdqQixHQUZBLEtBQUssV0FBVyxDQUFJLEVBQ3BCLEtBQUssS0FBSyxDQUFPLEVBQ2IsRUFBVyxDQUNYLElBQU0sRUFBUSxLQUFLLEtBQUssR0FBRyxFQUMzQixLQUFLLFVBQVksRUFBSyxNQUFRLElBQUksR0FBTSxDQUFLLEVBQzdDLEVBQVUsQ0FBSyxFQUVuQixHQUFJLEVBQ0EsS0FBSyxVQUFZLEVBQUssUUFBVSxJQUFJLEdBQ3BDLEtBQUssS0FBSyxDQUFXLEVBRXpCLE9BQU8sS0FBSyxjQUFjLEdBQU8sRUFBTyxFQUc1QyxLQUFLLENBQUMsRUFBTyxDQUNULE9BQU8sS0FBSyxVQUFVLElBQUksR0FBTSxDQUFLLENBQUMsRUFHMUMsS0FBSyxDQUFDLEVBQU0sRUFBVyxDQUVuQixHQURBLEtBQUssYUFBYSxLQUFLLEtBQUssT0FBTyxNQUFNLEVBQ3JDLEVBQ0EsS0FBSyxLQUFLLENBQUksRUFBRSxTQUFTLENBQVMsRUFDdEMsT0FBTyxLQUdYLFFBQVEsQ0FBQyxFQUFXLENBQ2hCLElBQU0sRUFBTSxLQUFLLGFBQWEsSUFBSSxFQUNsQyxHQUFJLElBQVEsT0FDUixNQUFVLE1BQU0sc0NBQXNDLEVBQzFELElBQU0sRUFBVSxLQUFLLE9BQU8sT0FBUyxFQUNyQyxHQUFJLEVBQVUsR0FBTSxJQUFjLFFBQWEsSUFBWSxFQUN2RCxNQUFVLE1BQU0sbUNBQW1DLFFBQWMsWUFBb0IsRUFHekYsT0FEQSxLQUFLLE9BQU8sT0FBUyxFQUNkLEtBR1gsSUFBSSxDQUFDLEVBQU0sRUFBYyxNQUFLLEVBQU8sRUFBVSxDQUUzQyxHQURBLEtBQUssV0FBVyxJQUFJLEdBQUssRUFBTSxFQUFNLENBQUssQ0FBQyxFQUN2QyxFQUNBLEtBQUssS0FBSyxDQUFRLEVBQUUsUUFBUSxFQUNoQyxPQUFPLEtBR1gsT0FBTyxFQUFHLENBQ04sT0FBTyxLQUFLLGNBQWMsRUFBSSxFQUVsQyxRQUFRLENBQUMsRUFBSSxFQUFHLENBQ1osTUFBTyxLQUFNLEVBQ1QsS0FBSyxNQUFNLGNBQWMsRUFDekIsS0FBSyxNQUFNLGNBQWMsS0FBSyxNQUFNLE1BQU8sS0FBSyxVQUFVLEVBR2xFLFNBQVMsQ0FBQyxFQUFNLENBRVosT0FEQSxLQUFLLFVBQVUsTUFBTSxLQUFLLENBQUksRUFDdkIsS0FFWCxVQUFVLENBQUMsRUFBTSxDQUNiLEtBQUssVUFBVSxNQUFNLEtBQUssQ0FBSSxFQUM5QixLQUFLLE9BQU8sS0FBSyxDQUFJLEVBRXpCLGFBQWEsQ0FBQyxFQUFJLEVBQUksQ0FDbEIsSUFBTSxFQUFJLEtBQUssVUFDZixHQUFJLGFBQWEsR0FBTyxHQUFNLGFBQWEsRUFFdkMsT0FEQSxLQUFLLE9BQU8sSUFBSSxFQUNULEtBRVgsTUFBVSxNQUFNLDBCQUEwQixFQUFLLEdBQUcsRUFBRyxRQUFRLEVBQUcsT0FBUyxFQUFHLE9BQU8sRUFFdkYsU0FBUyxDQUFDLEVBQU0sQ0FDWixJQUFNLEVBQUksS0FBSyxVQUNmLEdBQUksRUFBRSxhQUFhLElBQ2YsTUFBVSxNQUFNLDhCQUE4QixFQUdsRCxPQURBLEtBQUssVUFBWSxFQUFFLEtBQU8sRUFDbkIsUUFFUCxNQUFLLEVBQUcsQ0FDUixPQUFPLEtBQUssT0FBTyxNQUVuQixVQUFTLEVBQUcsQ0FDWixJQUFNLEVBQUssS0FBSyxPQUNoQixPQUFPLEVBQUcsRUFBRyxPQUFTLE1BRXRCLFVBQVMsQ0FBQyxFQUFNLENBQ2hCLElBQU0sRUFBSyxLQUFLLE9BQ2hCLEVBQUcsRUFBRyxPQUFTLEdBQUssRUFFNUIsQ0FDQSxFQUFRLFFBQVUsR0FDbEIsU0FBUyxFQUFRLENBQUMsRUFBTyxFQUFNLENBQzNCLFFBQVcsS0FBSyxFQUNaLEVBQU0sSUFBTSxFQUFNLElBQU0sSUFBTSxFQUFLLElBQU0sR0FDN0MsT0FBTyxFQUVYLFNBQVMsRUFBWSxDQUFDLEVBQU8sRUFBTSxDQUMvQixPQUFPLGFBQXVCLGNBQWMsR0FBUyxFQUFPLEVBQUssS0FBSyxFQUFJLEVBRTlFLFNBQVMsRUFBWSxDQUFDLEVBQU0sRUFBTyxFQUFXLENBQzFDLEdBQUksYUFBdUIsT0FDdkIsT0FBTyxFQUFZLENBQUksRUFDM0IsR0FBSSxDQUFDLEVBQVksQ0FBSSxFQUNqQixPQUFPLEVBQ1gsT0FBTyxJQUFXLFFBQU0sRUFBSyxPQUFPLE9BQU8sQ0FBQyxFQUFPLElBQU0sQ0FDckQsR0FBSSxhQUFvQixPQUNwQixFQUFJLEVBQVksQ0FBQyxFQUNyQixHQUFJLGFBQW9CLFFBQ3BCLEVBQU0sS0FBSyxHQUFHLEVBQUUsTUFBTSxFQUV0QixPQUFNLEtBQUssQ0FBQyxFQUNoQixPQUFPLEdBQ1IsQ0FBQyxDQUFDLENBQUMsRUFDTixTQUFTLENBQVcsQ0FBQyxFQUFHLENBQ3BCLElBQU0sRUFBSSxFQUFVLEVBQUUsS0FDdEIsR0FBSSxJQUFNLFFBQWEsRUFBTSxFQUFFLE9BQVMsRUFDcEMsT0FBTyxFQUVYLE9BREEsT0FBTyxFQUFNLEVBQUUsS0FDUixFQUVYLFNBQVMsQ0FBVyxDQUFDLEVBQUcsQ0FDcEIsT0FBUSxhQUFvQixTQUN4QixFQUFFLE9BQU8sS0FBSyxDQUFDLElBQU0sYUFBb0IsUUFBUSxFQUFNLEVBQUUsT0FBUyxHQUFLLEVBQVUsRUFBRSxPQUFTLE1BQVMsR0FHakgsU0FBUyxFQUFhLENBQUMsRUFBTyxFQUFNLENBQ2hDLFFBQVcsS0FBSyxFQUNaLEVBQU0sSUFBTSxFQUFNLElBQU0sSUFBTSxFQUFLLElBQU0sR0FFakQsU0FBUyxFQUFHLENBQUMsRUFBRyxDQUNaLE9BQU8sT0FBTyxHQUFLLFdBQWEsT0FBTyxHQUFLLFVBQVksSUFBTSxLQUFPLENBQUMsRUFBSyxBQUFVLE9BQU8sR0FBSSxDQUFDLElBRXJHLEVBQVEsSUFBTSxHQUNkLElBQU0sR0FBVSxHQUFRLEVBQVEsVUFBVSxHQUFHLEVBRTdDLFNBQVMsRUFBRyxJQUFJLEVBQU0sQ0FDbEIsT0FBTyxFQUFLLE9BQU8sRUFBTyxFQUU5QixFQUFRLElBQU0sR0FDZCxJQUFNLEdBQVMsR0FBUSxFQUFRLFVBQVUsRUFBRSxFQUUzQyxTQUFTLEVBQUUsSUFBSSxFQUFNLENBQ2pCLE9BQU8sRUFBSyxPQUFPLEVBQU0sRUFFN0IsRUFBUSxHQUFLLEdBQ2IsU0FBUyxFQUFPLENBQUMsRUFBSSxDQUNqQixNQUFPLENBQUMsRUFBRyxJQUFPLElBQWEsTUFBTSxFQUFJLElBQWEsTUFBTSxFQUFLLEFBQVUsTUFBTSxHQUFJLENBQUMsS0FBSyxLQUFNLEdBQUksQ0FBQyxJQUUxRyxTQUFTLEVBQUcsQ0FBQyxFQUFHLENBQ1osT0FBTyxhQUFvQixPQUFPLEVBQUssQUFBVSxPQUFPLDhCQ3JyQjVELE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxHQUFRLGdCQUFrQixHQUFRLGFBQWUsR0FBUSxLQUFPLEdBQVEsUUFBVSxHQUFRLGFBQWUsR0FBUSxxQkFBdUIsR0FBUSxlQUFpQixHQUFRLFNBQVcsR0FBUSxvQkFBc0IsR0FBUSxrQkFBb0IsR0FBUSxlQUFpQixHQUFRLGlCQUFtQixHQUFRLGVBQWlCLEdBQVEscUJBQXVCLEdBQVEsZUFBaUIsR0FBUSxrQkFBb0IsR0FBUSxrQkFBb0IsR0FBUSxPQUFjLE9BQ2pjLElBQU0sT0FDQSxRQUVOLFNBQVMsRUFBTSxDQUFDLEVBQUssQ0FDakIsSUFBTSxFQUFPLENBQUMsRUFDZCxRQUFXLEtBQVEsRUFDZixFQUFLLEdBQVEsR0FDakIsT0FBTyxFQUVYLEdBQVEsT0FBUyxHQUNqQixTQUFTLEVBQWlCLENBQUMsRUFBSSxFQUFRLENBQ25DLEdBQUksT0FBTyxHQUFVLFVBQ2pCLE9BQU8sRUFDWCxHQUFJLE9BQU8sS0FBSyxDQUFNLEVBQUUsU0FBVyxFQUMvQixNQUFPLEdBRVgsT0FEQSxHQUFrQixFQUFJLENBQU0sRUFDckIsQ0FBQyxHQUFlLEVBQVEsRUFBRyxLQUFLLE1BQU0sR0FBRyxFQUVwRCxHQUFRLGtCQUFvQixHQUM1QixTQUFTLEVBQWlCLENBQUMsRUFBSSxFQUFTLEVBQUcsT0FBUSxDQUMvQyxJQUFRLE9BQU0sUUFBUyxFQUN2QixHQUFJLENBQUMsRUFBSyxhQUNOLE9BQ0osR0FBSSxPQUFPLElBQVcsVUFDbEIsT0FDSixJQUFNLEVBQVEsRUFBSyxNQUFNLFNBQ3pCLFFBQVcsS0FBTyxFQUNkLEdBQUksQ0FBQyxFQUFNLEdBQ1AsR0FBZ0IsRUFBSSxxQkFBcUIsSUFBTSxFQUczRCxHQUFRLGtCQUFvQixHQUM1QixTQUFTLEVBQWMsQ0FBQyxFQUFRLEVBQU8sQ0FDbkMsR0FBSSxPQUFPLEdBQVUsVUFDakIsTUFBTyxDQUFDLEVBQ1osUUFBVyxLQUFPLEVBQ2QsR0FBSSxFQUFNLEdBQ04sTUFBTyxHQUNmLE1BQU8sR0FFWCxHQUFRLGVBQWlCLEdBQ3pCLFNBQVMsRUFBb0IsQ0FBQyxFQUFRLEVBQU8sQ0FDekMsR0FBSSxPQUFPLEdBQVUsVUFDakIsTUFBTyxDQUFDLEVBQ1osUUFBVyxLQUFPLEVBQ2QsR0FBSSxJQUFRLFFBQVUsRUFBTSxJQUFJLEdBQzVCLE1BQU8sR0FDZixNQUFPLEdBRVgsR0FBUSxxQkFBdUIsR0FDL0IsU0FBUyxFQUFjLEVBQUcsZUFBYyxjQUFjLEVBQVEsRUFBUyxFQUFPLENBQzFFLEdBQUksQ0FBQyxFQUFPLENBQ1IsR0FBSSxPQUFPLEdBQVUsVUFBWSxPQUFPLEdBQVUsVUFDOUMsT0FBTyxFQUNYLEdBQUksT0FBTyxHQUFVLFNBQ2pCLE1BQVEsQ0FBYSxNQUFNLElBRW5DLE1BQVEsQ0FBYSxNQUFNLElBQWUsSUFBMkIsY0FBYSxDQUFPLElBRTdGLEdBQVEsZUFBaUIsR0FDekIsU0FBUyxFQUFnQixDQUFDLEVBQUssQ0FDM0IsT0FBTyxHQUFvQixtQkFBbUIsQ0FBRyxDQUFDLEVBRXRELEdBQVEsaUJBQW1CLEdBQzNCLFNBQVMsRUFBYyxDQUFDLEVBQUssQ0FDekIsT0FBTyxtQkFBbUIsR0FBa0IsQ0FBRyxDQUFDLEVBRXBELEdBQVEsZUFBaUIsR0FDekIsU0FBUyxFQUFpQixDQUFDLEVBQUssQ0FDNUIsR0FBSSxPQUFPLEdBQU8sU0FDZCxNQUFPLEdBQUcsSUFDZCxPQUFPLEVBQUksUUFBUSxLQUFNLElBQUksRUFBRSxRQUFRLE1BQU8sSUFBSSxFQUV0RCxHQUFRLGtCQUFvQixHQUM1QixTQUFTLEVBQW1CLENBQUMsRUFBSyxDQUM5QixPQUFPLEVBQUksUUFBUSxNQUFPLEdBQUcsRUFBRSxRQUFRLE1BQU8sR0FBRyxFQUVyRCxHQUFRLG9CQUFzQixHQUM5QixTQUFTLEVBQVEsQ0FBQyxFQUFJLEVBQUcsQ0FDckIsR0FBSSxNQUFNLFFBQVEsQ0FBRSxFQUNoQixRQUFXLEtBQUssRUFDWixFQUFFLENBQUMsRUFHUCxPQUFFLENBQUUsRUFHWixHQUFRLFNBQVcsR0FDbkIsU0FBUyxFQUFrQixFQUFHLGFBQVksY0FBYSxjQUFhLGdCQUFpQixDQUNqRixNQUFPLENBQUMsRUFBSyxFQUFNLEVBQUksSUFBVyxDQUM5QixJQUFNLEVBQU0sSUFBTyxPQUNiLEVBQ0EsYUFBd0IsUUFDbkIsYUFBMEIsT0FBTyxFQUFXLEVBQUssRUFBTSxDQUFFLEVBQUksRUFBWSxFQUFLLEVBQU0sQ0FBRSxFQUFHLEdBQzFGLGFBQTBCLFFBQ3JCLEVBQVksRUFBSyxFQUFJLENBQUksRUFBRyxHQUM3QixFQUFZLEVBQU0sQ0FBRSxFQUNsQyxPQUFPLElBQXFCLFFBQVEsRUFBRSxhQUF5QixRQUFRLEVBQWEsRUFBSyxDQUFHLEVBQUksR0FHeEcsR0FBUSxlQUFpQixDQUNyQixNQUFPLEdBQW1CLENBQ3RCLFdBQVksQ0FBQyxFQUFLLEVBQU0sSUFBTyxFQUFJLEdBQUksQUFBYSxNQUFNLGlCQUFrQixrQkFBc0IsSUFBTSxDQUNwRyxFQUFJLEdBQUksQUFBYSxNQUFNLGFBQWlCLElBQU0sRUFBSSxPQUFPLEVBQUksRUFBSSxFQUFHLElBQU0sRUFBSSxPQUFPLEVBQUssQUFBYSxNQUFNLFNBQVUsRUFBRSxLQUFNLEFBQWEsb0JBQW9CLE1BQU8sSUFBTyxDQUFDLEVBQ3RMLEVBQ0QsWUFBYSxDQUFDLEVBQUssRUFBTSxJQUFPLEVBQUksR0FBSSxBQUFhLE1BQU0sYUFBZSxJQUFNLENBQzVFLEdBQUksSUFBUyxHQUNULEVBQUksT0FBTyxFQUFJLEVBQUksRUFHbkIsT0FBSSxPQUFPLEVBQUssQUFBYSxNQUFNLFNBQVUsRUFDN0MsR0FBYSxFQUFLLEVBQUksQ0FBSSxFQUVqQyxFQUNELFlBQWEsQ0FBQyxFQUFNLElBQVEsSUFBUyxHQUFPLEdBQU8sSUFBSyxLQUFTLENBQUcsRUFDcEUsYUFBYyxFQUNsQixDQUFDLEVBQ0QsTUFBTyxHQUFtQixDQUN0QixXQUFZLENBQUMsRUFBSyxFQUFNLElBQU8sRUFBSSxHQUFJLEFBQWEsTUFBTSxpQkFBa0Isa0JBQXNCLElBQU0sRUFBSSxPQUFPLEVBQUssQUFBYSxNQUFNLHVCQUEwQixPQUFRLE9BQVUsT0FBUSxHQUFNLENBQUMsRUFDdE0sWUFBYSxDQUFDLEVBQUssRUFBTSxJQUFPLEVBQUksR0FBSSxBQUFhLE1BQU0sYUFBZSxJQUFNLEVBQUksT0FBTyxFQUFJLElBQVMsR0FBTyxHQUFRLEFBQWEsTUFBTSxPQUFRLE9BQVUsT0FBUSxHQUFNLENBQUMsRUFDM0ssWUFBYSxDQUFDLEVBQU0sSUFBUSxJQUFTLEdBQU8sR0FBTyxLQUFLLElBQUksRUFBTSxDQUFFLEVBQ3BFLGFBQWMsQ0FBQyxFQUFLLElBQVUsRUFBSSxJQUFJLFFBQVMsQ0FBSyxDQUN4RCxDQUFDLENBQ0wsRUFDQSxTQUFTLEVBQW9CLENBQUMsRUFBSyxFQUFJLENBQ25DLEdBQUksSUFBTyxHQUNQLE9BQU8sRUFBSSxJQUFJLFFBQVMsRUFBSSxFQUNoQyxJQUFNLEVBQVEsRUFBSSxJQUFJLFFBQVUsQUFBYSxPQUFPLEVBQ3BELEdBQUksSUFBTyxPQUNQLEdBQWEsRUFBSyxFQUFPLENBQUUsRUFDL0IsT0FBTyxFQUVYLEdBQVEscUJBQXVCLEdBQy9CLFNBQVMsRUFBWSxDQUFDLEVBQUssRUFBTyxFQUFJLENBQ2xDLE9BQU8sS0FBSyxDQUFFLEVBQUUsUUFBUSxDQUFDLElBQU0sRUFBSSxPQUFRLEFBQWEsTUFBTSxJQUFzQixjQUFhLENBQUMsSUFBSyxFQUFJLENBQUMsRUFFaEgsR0FBUSxhQUFlLEdBQ3ZCLElBQU0sR0FBVyxDQUFDLEVBQ2xCLFNBQVMsRUFBTyxDQUFDLEVBQUssRUFBRyxDQUNyQixPQUFPLEVBQUksV0FBVyxPQUFRLENBQzFCLElBQUssRUFDTCxLQUFNLEdBQVMsRUFBRSxRQUFVLEdBQVMsRUFBRSxNQUFRLElBQVcsU0FBTSxFQUFFLElBQUksRUFDekUsQ0FBQyxFQUVMLEdBQVEsUUFBVSxHQUNsQixJQUFJLElBQ0gsUUFBUyxDQUFDLEVBQU0sQ0FDYixFQUFLLEVBQUssSUFBUyxHQUFLLE1BQ3hCLEVBQUssRUFBSyxJQUFTLEdBQUssUUFDekIsS0FBUyxHQUFRLEtBQU8sR0FBTyxDQUFDLEVBQUUsRUFDckMsU0FBUyxFQUFZLENBQUMsRUFBVSxFQUFjLEVBQWtCLENBRTVELEdBQUksYUFBOEIsT0FBTSxDQUNwQyxJQUFNLEVBQVcsSUFBaUIsR0FBSyxJQUN2QyxPQUFPLEVBQ0QsRUFDSyxBQUFhLFlBQVksVUFDekIsQUFBYSxhQUFhLFdBQy9CLEVBQ0ssQUFBYSxZQUFZLElBQ3pCLEFBQWEsWUFBWSw4Q0FFeEMsT0FBTyxFQUFpQyxjQUFhLENBQVEsRUFBRSxTQUFTLEVBQUksSUFBTSxHQUFrQixDQUFRLEVBRWhILEdBQVEsYUFBZSxHQUN2QixTQUFTLEVBQWUsQ0FBQyxFQUFJLEVBQUssRUFBTyxFQUFHLEtBQUssYUFBYyxDQUMzRCxHQUFJLENBQUMsRUFDRCxPQUVKLEdBREEsRUFBTSxnQkFBZ0IsSUFDbEIsSUFBUyxHQUNULE1BQVUsTUFBTSxDQUFHLEVBQ3ZCLEVBQUcsS0FBSyxPQUFPLEtBQUssQ0FBRyxFQUUzQixHQUFRLGdCQUFrQiwyQkMvSzFCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLFFBQ0EsR0FBUSxDQUVWLEtBQU0sSUFBYyxRQUFLLE1BQU0sRUFFL0IsT0FBUSxJQUFjLFFBQUssUUFBUSxFQUNuQyxhQUFjLElBQWMsUUFBSyxjQUFjLEVBQy9DLFdBQVksSUFBYyxRQUFLLFlBQVksRUFDM0MsbUJBQW9CLElBQWMsUUFBSyxvQkFBb0IsRUFDM0QsU0FBVSxJQUFjLFFBQUssVUFBVSxFQUN2QyxlQUFnQixJQUFjLFFBQUssZ0JBQWdCLEVBRW5ELFFBQVMsSUFBYyxRQUFLLFNBQVMsRUFDckMsT0FBUSxJQUFjLFFBQUssUUFBUSxFQUNuQyxLQUFNLElBQWMsUUFBSyxNQUFNLEVBRS9CLEtBQU0sSUFBYyxRQUFLLE1BQU0sRUFDL0IsTUFBTyxJQUFjLFFBQUssT0FBTyxFQUVqQyxLQUFNLElBQWMsUUFBSyxNQUFNLEVBQy9CLFFBQVMsSUFBYyxRQUFLLFNBQVMsRUFDckMsUUFBUyxJQUFjLFFBQUssU0FBUyxFQUNyQyxTQUFVLElBQWMsUUFBSyxVQUFVLENBQzNDLEVBQ0EsR0FBUSxRQUFVLDJCQ3pCbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsYUFBZSxHQUFRLGlCQUFtQixHQUFRLGlCQUFtQixHQUFRLFlBQWMsR0FBUSxrQkFBb0IsR0FBUSxhQUFvQixPQUMzSixJQUFNLE9BQ0EsUUFDQSxRQUNOLEdBQVEsYUFBZSxDQUNuQixRQUFTLEVBQUcsYUFBZSxBQUFhLG1CQUFtQix1QkFDL0QsRUFDQSxHQUFRLGtCQUFvQixDQUN4QixRQUFTLEVBQUcsVUFBUyxnQkFBaUIsRUFDL0IsQUFBYSxTQUFTLHNCQUE0QixZQUNsRCxBQUFhLFNBQVMsK0JBQ2pDLEVBQ0EsU0FBUyxFQUFXLENBQUMsRUFBSyxFQUFRLEdBQVEsYUFBYyxFQUFZLEVBQW1CLENBQ25GLElBQVEsTUFBTyxHQUNQLE1BQUssZ0JBQWUsYUFBYyxFQUNwQyxFQUFTLEdBQWdCLEVBQUssRUFBTyxDQUFVLEVBQ3JELEdBQUksSUFBc0IsTUFBUSxJQUEyQixPQUFJLEVBQXFCLEdBQWlCLEVBQ25HLEdBQVMsRUFBSyxDQUFNLEVBR3BCLFFBQWEsRUFBSyxBQUFhLE9BQU8sSUFBUyxFQUd2RCxHQUFRLFlBQWMsR0FDdEIsU0FBUyxFQUFnQixDQUFDLEVBQUssRUFBUSxHQUFRLGFBQWMsRUFBWSxDQUNyRSxJQUFRLE1BQU8sR0FDUCxNQUFLLGdCQUFlLGFBQWMsRUFDcEMsRUFBUyxHQUFnQixFQUFLLEVBQU8sQ0FBVSxFQUVyRCxHQURBLEdBQVMsRUFBSyxDQUFNLEVBQ2hCLEVBQUUsR0FBaUIsR0FDbkIsR0FBYSxFQUFJLEdBQVEsUUFBUSxPQUFPLEVBR2hELEdBQVEsaUJBQW1CLEdBQzNCLFNBQVMsRUFBZ0IsQ0FBQyxFQUFLLEVBQVcsQ0FDdEMsRUFBSSxPQUFPLEdBQVEsUUFBUSxPQUFRLENBQVMsRUFDNUMsRUFBSSxHQUFJLEFBQWEsTUFBTSxHQUFRLFFBQVEsbUJBQW9CLElBQU0sRUFBSSxHQUFHLEVBQVcsSUFBTSxFQUFJLE9BQVEsQUFBYSxNQUFNLEdBQVEsUUFBUSxpQkFBa0IsQ0FBUyxFQUFHLElBQU0sRUFBSSxPQUFPLEdBQVEsUUFBUSxRQUFTLElBQUksQ0FBQyxDQUFDLEVBRTlOLEdBQVEsaUJBQW1CLEdBQzNCLFNBQVMsRUFBWSxFQUFHLE1BQUssVUFBUyxjQUFhLE9BQU0sWUFBVyxNQUFPLENBRXZFLEdBQUksSUFBYyxPQUNkLE1BQVUsTUFBTSwwQkFBMEIsRUFDOUMsSUFBTSxFQUFNLEVBQUksS0FBSyxLQUFLLEVBQzFCLEVBQUksU0FBUyxJQUFLLEVBQVcsR0FBUSxRQUFRLE9BQVEsQ0FBQyxJQUFNLENBSXhELEdBSEEsRUFBSSxNQUFNLEVBQU0sQUFBYSxNQUFNLEdBQVEsUUFBUSxXQUFXLElBQUksRUFDbEUsRUFBSSxHQUFJLEFBQWEsTUFBTSwrQkFBa0MsSUFBTSxFQUFJLE9BQVEsQUFBYSxNQUFNLGlCQUFrQyxZQUFXLEdBQVEsUUFBUSxhQUFjLEVBQUcsU0FBUyxDQUFDLENBQUMsRUFDM0wsRUFBSSxPQUFRLEFBQWEsTUFBTSxlQUFtQixBQUFhLFFBQVEsRUFBRyxpQkFBaUIsR0FBUyxFQUNoRyxFQUFHLEtBQUssUUFDUixFQUFJLE9BQVEsQUFBYSxNQUFNLFdBQWMsQ0FBVyxFQUN4RCxFQUFJLE9BQVEsQUFBYSxNQUFNLFNBQVksQ0FBSSxFQUV0RCxFQUVMLEdBQVEsYUFBZSxHQUN2QixTQUFTLEVBQVEsQ0FBQyxFQUFLLEVBQVEsQ0FDM0IsSUFBTSxFQUFNLEVBQUksTUFBTSxNQUFPLENBQU0sRUFDbkMsRUFBSSxHQUFJLEFBQWEsTUFBTSxHQUFRLFFBQVEsbUJBQW9CLElBQU0sRUFBSSxPQUFPLEdBQVEsUUFBUSxRQUFVLEFBQWEsT0FBTyxJQUFNLEVBQUksQUFBYSxNQUFNLEdBQVEsUUFBUSxnQkFBZ0IsSUFBTSxFQUNqTSxFQUFJLEtBQU0sQUFBYSxNQUFNLEdBQVEsUUFBUSxVQUFVLEVBRTNELFNBQVMsRUFBWSxDQUFDLEVBQUksRUFBTSxDQUM1QixJQUFRLE1BQUssZUFBYyxhQUFjLEVBQ3pDLEdBQUksRUFBVSxPQUNWLEVBQUksTUFBTyxBQUFhLFVBQVUsRUFBRyxtQkFBbUIsSUFBTyxFQUcvRCxPQUFJLE9BQVEsQUFBYSxNQUFNLFdBQXVCLENBQUksRUFDMUQsRUFBSSxPQUFPLEVBQUssRUFHeEIsSUFBTSxHQUFJLENBQ04sUUFBUyxJQUFjLE9BQUssU0FBUyxFQUNyQyxXQUFZLElBQWMsT0FBSyxZQUFZLEVBQzNDLE9BQVEsSUFBYyxPQUFLLFFBQVEsRUFDbkMsYUFBYyxJQUFjLE9BQUssY0FBYyxFQUMvQyxRQUFTLElBQWMsT0FBSyxTQUFTLEVBQ3JDLE9BQVEsSUFBYyxPQUFLLFFBQVEsRUFDbkMsYUFBYyxJQUFjLE9BQUssY0FBYyxDQUNuRCxFQUNBLFNBQVMsRUFBZSxDQUFDLEVBQUssRUFBTyxFQUFZLENBQzdDLElBQVEsZ0JBQWlCLEVBQUksR0FDN0IsR0FBSSxJQUFpQixHQUNqQixNQUFRLENBQWEsUUFDekIsT0FBTyxHQUFZLEVBQUssRUFBTyxDQUFVLEVBRTdDLFNBQVMsRUFBVyxDQUFDLEVBQUssRUFBTyxFQUFhLENBQUMsRUFBRyxDQUM5QyxJQUFRLE1BQUssTUFBTyxFQUNkLEVBQVksQ0FDZCxHQUFrQixFQUFJLENBQVUsRUFDaEMsR0FBZ0IsRUFBSyxDQUFVLENBQ25DLEVBRUEsT0FEQSxHQUFnQixFQUFLLEVBQU8sQ0FBUyxFQUM5QixFQUFJLE9BQU8sR0FBRyxDQUFTLEVBRWxDLFNBQVMsRUFBaUIsRUFBRyxjQUFlLGdCQUFnQixDQUN4RCxJQUFNLEVBQVcsRUFDVixBQUFhLFFBQVEsSUFBdUIsZ0JBQWMsRUFBcUIsUUFBSyxHQUFHLElBQ3hGLEVBQ04sTUFBTyxDQUFDLEdBQVEsUUFBUSxhQUE0QixZQUFXLEdBQVEsUUFBUSxhQUFjLENBQVEsQ0FBQyxFQUUxRyxTQUFTLEVBQWUsRUFBRyxVQUFTLElBQU0sbUJBQXFCLGFBQVksZ0JBQWdCLENBQ3ZGLElBQUksRUFBVSxFQUFlLEVBQWlCLEFBQWEsUUFBUSxLQUFpQixJQUNwRixHQUFJLEVBQ0EsRUFBVyxBQUFhLFFBQVEsSUFBcUIsZ0JBQWMsRUFBbUIsUUFBSyxHQUFHLElBRWxHLE1BQU8sQ0FBQyxHQUFFLFdBQVksQ0FBTyxFQUVqQyxTQUFTLEVBQWUsQ0FBQyxHQUFPLFNBQVEsV0FBVyxFQUFXLENBQzFELElBQVEsVUFBUyxPQUFNLGNBQWEsTUFBTyxHQUNuQyxPQUFNLGVBQWMsZUFBYyxjQUFlLEVBRXpELEdBREEsRUFBVSxLQUFLLENBQUMsR0FBRSxRQUFTLENBQU8sRUFBRyxDQUFDLEdBQUUsT0FBUSxPQUFPLEdBQVUsV0FBYSxFQUFPLENBQUcsRUFBSSxHQUFXLEFBQWEsT0FBTyxDQUFDLEVBQ3hILEVBQUssU0FDTCxFQUFVLEtBQUssQ0FBQyxHQUFFLFFBQVMsT0FBTyxHQUFXLFdBQWEsRUFBUSxDQUFHLEVBQUksQ0FBTyxDQUFDLEVBRXJGLEdBQUksRUFBSyxRQUNMLEVBQVUsS0FBSyxDQUFDLEdBQUUsT0FBUSxDQUFXLEVBQUcsQ0FBQyxHQUFFLGFBQWUsQUFBYSxNQUFNLElBQWUsR0FBWSxFQUFHLENBQUMsR0FBUSxRQUFRLEtBQU0sQ0FBSSxDQUFDLEVBRTNJLEdBQUksRUFDQSxFQUFVLEtBQUssQ0FBQyxHQUFFLGFBQWMsQ0FBWSxDQUFDLDJCQ3ZIckQsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsa0JBQW9CLEdBQVEscUJBQTRCLE9BQ2hFLElBQU0sUUFDQSxRQUNBLFFBQ0EsR0FBWSxDQUNkLFFBQVMseUJBQ2IsRUFDQSxTQUFTLEVBQW9CLENBQUMsRUFBSSxDQUM5QixJQUFRLE1BQUssU0FBUSxnQkFBaUIsRUFDdEMsR0FBSSxJQUFXLEdBQ1gsR0FBaUIsRUFBSSxFQUFLLEVBRXpCLFFBQUksT0FBTyxHQUFVLFVBQVksRUFBTyxTQUFXLEdBQ3BELEVBQUksT0FBTyxHQUFRLFFBQVEsSUFBSSxFQUcvQixPQUFJLE9BQVEsQUFBYSxPQUFNLFdBQXVCLElBQUksRUFDMUQsRUFBSSxPQUFPLEVBQUksRUFHdkIsR0FBUSxxQkFBdUIsR0FDL0IsU0FBUyxFQUFpQixDQUFDLEVBQUksRUFBTyxDQUNsQyxJQUFRLE1BQUssVUFBVyxFQUN4QixHQUFJLElBQVcsR0FDWCxFQUFJLElBQUksRUFBTyxFQUFLLEVBQ3BCLEdBQWlCLENBQUUsRUFHbkIsT0FBSSxJQUFJLEVBQU8sRUFBSSxFQUczQixHQUFRLGtCQUFvQixHQUM1QixTQUFTLEVBQWdCLENBQUMsRUFBSSxFQUFtQixDQUM3QyxJQUFRLE1BQUssUUFBUyxFQVlULGVBVkQsQ0FDUixNQUNBLFFBQVMsZUFDVCxPQUNBLE9BQVEsR0FDUixXQUFZLEdBQ1osWUFBYSxHQUNiLE9BQVEsQ0FBQyxFQUNULElBQ0osRUFDK0IsR0FBVyxPQUFXLENBQWlCLDJCQzlDMUUsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsU0FBVyxHQUFRLFdBQWtCLE9BQzdDLElBQU0sR0FBYSxDQUFDLFNBQVUsU0FBVSxVQUFXLFVBQVcsT0FBUSxTQUFVLE9BQU8sRUFDakYsR0FBWSxJQUFJLElBQUksRUFBVSxFQUNwQyxTQUFTLEVBQVUsQ0FBQyxFQUFHLENBQ25CLE9BQU8sT0FBTyxHQUFLLFVBQVksR0FBVSxJQUFJLENBQUMsRUFFbEQsR0FBUSxXQUFhLEdBQ3JCLFNBQVMsRUFBUSxFQUFHLENBQ2hCLElBQU0sRUFBUyxDQUNYLE9BQVEsQ0FBRSxLQUFNLFNBQVUsTUFBTyxDQUFDLENBQUUsRUFDcEMsT0FBUSxDQUFFLEtBQU0sU0FBVSxNQUFPLENBQUMsQ0FBRSxFQUNwQyxNQUFPLENBQUUsS0FBTSxRQUFTLE1BQU8sQ0FBQyxDQUFFLEVBQ2xDLE9BQVEsQ0FBRSxLQUFNLFNBQVUsTUFBTyxDQUFDLENBQUUsQ0FDeEMsRUFDQSxNQUFPLENBQ0gsTUFBTyxJQUFLLEVBQVEsUUFBUyxHQUFNLFFBQVMsR0FBTSxLQUFNLEVBQUssRUFDN0QsTUFBTyxDQUFDLENBQUUsTUFBTyxDQUFDLENBQUUsRUFBRyxFQUFPLE9BQVEsRUFBTyxPQUFRLEVBQU8sTUFBTyxFQUFPLE1BQU0sRUFDaEYsS0FBTSxDQUFFLE1BQU8sQ0FBQyxDQUFFLEVBQ2xCLElBQUssQ0FBQyxFQUNOLFNBQVUsQ0FBQyxDQUNmLEVBRUosR0FBUSxTQUFXLDJCQ3ZCbkIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsY0FBZ0IsR0FBUSxlQUFpQixHQUFRLHNCQUE2QixPQUN0RixTQUFTLEVBQXFCLEVBQUcsU0FBUSxRQUFRLEVBQU0sQ0FDbkQsSUFBTSxFQUFRLEVBQUssTUFBTSxNQUFNLEdBQy9CLE9BQU8sR0FBUyxJQUFVLElBQVEsR0FBZSxFQUFRLENBQUssRUFFbEUsR0FBUSxzQkFBd0IsR0FDaEMsU0FBUyxFQUFjLENBQUMsRUFBUSxFQUFPLENBQ25DLE9BQU8sRUFBTSxNQUFNLEtBQUssQ0FBQyxJQUFTLEdBQWMsRUFBUSxDQUFJLENBQUMsRUFFakUsR0FBUSxlQUFpQixHQUN6QixTQUFTLEVBQWEsQ0FBQyxFQUFRLEVBQU0sQ0FDakMsSUFBSSxFQUNKLE9BQVEsRUFBTyxFQUFLLFdBQWEsVUFDM0IsRUFBSyxFQUFLLFdBQVcsY0FBZ0IsTUFBUSxJQUFZLE9BQVMsT0FBSSxFQUFHLEtBQUssQ0FBQyxJQUFRLEVBQU8sS0FBUyxNQUFTLEdBRTFILEdBQVEsY0FBZ0IsMkJDaEJ4QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsR0FBUSxnQkFBa0IsR0FBUSxlQUFpQixHQUFRLGNBQWdCLEdBQVEsdUJBQXlCLEdBQVEsYUFBZSxHQUFRLGVBQWlCLEdBQVEsU0FBZ0IsT0FDcEwsSUFBTSxRQUNBLFFBQ0EsUUFDQSxPQUNBLFFBQ0YsSUFDSCxRQUFTLENBQUMsRUFBVSxDQUNqQixFQUFTLEVBQVMsUUFBYSxHQUFLLFVBQ3BDLEVBQVMsRUFBUyxNQUFXLEdBQUssVUFDbkMsS0FBYSxHQUFRLFNBQVcsR0FBVyxDQUFDLEVBQUUsRUFDakQsU0FBUyxFQUFjLENBQUMsRUFBUSxDQUM1QixJQUFNLEVBQVEsR0FBYSxFQUFPLElBQUksRUFFdEMsR0FEZ0IsRUFBTSxTQUFTLE1BQU0sR0FFakMsR0FBSSxFQUFPLFdBQWEsR0FDcEIsTUFBVSxNQUFNLHdDQUF3QyxFQUUzRCxLQUNELEdBQUksQ0FBQyxFQUFNLFFBQVUsRUFBTyxXQUFhLE9BQ3JDLE1BQVUsTUFBTSwwQ0FBMEMsRUFFOUQsR0FBSSxFQUFPLFdBQWEsR0FDcEIsRUFBTSxLQUFLLE1BQU0sRUFFekIsT0FBTyxFQUVYLEdBQVEsZUFBaUIsR0FFekIsU0FBUyxFQUFZLENBQUMsRUFBSSxDQUN0QixJQUFNLEVBQVEsTUFBTSxRQUFRLENBQUUsRUFBSSxFQUFLLEVBQUssQ0FBQyxDQUFFLEVBQUksQ0FBQyxFQUNwRCxHQUFJLEVBQU0sTUFBYyxhQUFVLEVBQzlCLE9BQU8sRUFDWCxNQUFVLE1BQU0sd0NBQTBDLEVBQU0sS0FBSyxHQUFHLENBQUMsRUFFN0UsR0FBUSxhQUFlLEdBQ3ZCLFNBQVMsRUFBc0IsQ0FBQyxFQUFJLEVBQU8sQ0FDdkMsSUFBUSxNQUFLLE9BQU0sUUFBUyxFQUN0QixFQUFXLEdBQWMsRUFBTyxFQUFLLFdBQVcsRUFDaEQsRUFBYSxFQUFNLE9BQVMsR0FDOUIsRUFBRSxFQUFTLFNBQVcsR0FBSyxFQUFNLFNBQVcsR0FBeUIseUJBQXVCLEVBQUksRUFBTSxFQUFFLEdBQzVHLEdBQUksRUFBWSxDQUNaLElBQU0sRUFBWSxHQUFlLEVBQU8sRUFBTSxFQUFLLGNBQWUsR0FBUyxLQUFLLEVBQ2hGLEVBQUksR0FBRyxFQUFXLElBQU0sQ0FDcEIsR0FBSSxFQUFTLE9BQ1QsR0FBVyxFQUFJLEVBQU8sQ0FBUSxFQUU5QixRQUFnQixDQUFFLEVBQ3pCLEVBRUwsT0FBTyxFQUVYLEdBQVEsdUJBQXlCLEdBQ2pDLElBQU0sR0FBWSxJQUFJLElBQUksQ0FBQyxTQUFVLFNBQVUsVUFBVyxVQUFXLE1BQU0sQ0FBQyxFQUM1RSxTQUFTLEVBQWEsQ0FBQyxFQUFPLEVBQWEsQ0FDdkMsT0FBTyxFQUNELEVBQU0sT0FBTyxDQUFDLElBQU0sR0FBVSxJQUFJLENBQUMsR0FBTSxJQUFnQixTQUFXLElBQU0sT0FBUSxFQUNsRixDQUFDLEVBRVgsU0FBUyxFQUFVLENBQUMsRUFBSSxFQUFPLEVBQVUsQ0FDckMsSUFBUSxNQUFLLE9BQU0sUUFBUyxFQUN0QixFQUFXLEVBQUksSUFBSSxXQUFhLEFBQWEsYUFBYSxHQUFNLEVBQ2hFLEVBQVUsRUFBSSxJQUFJLFVBQVksQUFBYSxjQUFjLEVBQy9ELEdBQUksRUFBSyxjQUFnQixRQUNyQixFQUFJLEdBQUksQUFBYSxNQUFNLGtDQUF5QyxTQUFZLGdCQUFvQixJQUFNLEVBQ3JHLE9BQU8sRUFBTyxBQUFhLE1BQU0sTUFBUyxFQUMxQyxPQUFPLEVBQVcsQUFBYSxhQUFhLEdBQU0sRUFDbEQsR0FBRyxHQUFlLEVBQU8sRUFBTSxFQUFLLGFBQWEsRUFBRyxJQUFNLEVBQUksT0FBTyxFQUFTLENBQUksQ0FBQyxDQUFDLEVBRTdGLEVBQUksR0FBSSxBQUFhLE1BQU0saUJBQXVCLEVBQ2xELFFBQVcsS0FBSyxFQUNaLEdBQUksR0FBVSxJQUFJLENBQUMsR0FBTSxJQUFNLFNBQVcsRUFBSyxjQUFnQixRQUMzRCxFQUFtQixDQUFDLEVBRzVCLEVBQUksS0FBSyxFQUNULEdBQWdCLENBQUUsRUFDbEIsRUFBSSxNQUFNLEVBQ1YsRUFBSSxHQUFJLEFBQWEsTUFBTSxrQkFBeUIsSUFBTSxDQUN0RCxFQUFJLE9BQU8sRUFBTSxDQUFPLEVBQ3hCLEdBQWlCLEVBQUksQ0FBTyxFQUMvQixFQUNELFNBQVMsQ0FBa0IsQ0FBQyxFQUFHLENBQzNCLE9BQVEsT0FDQyxTQUNELEVBQ0ssT0FBUSxBQUFhLE1BQU0sb0JBQTJCLGdCQUF1QixFQUM3RSxPQUFPLEVBQVUsQUFBYSxXQUFXLEdBQU0sRUFDL0MsT0FBUSxBQUFhLE1BQU0sWUFBZSxFQUMxQyxPQUFPLEVBQVUsQUFBYSxPQUFPLEVBQzFDLFdBQ0MsU0FDRCxFQUNLLE9BQVEsQUFBYSxNQUFNLHFCQUE0QjtBQUFBLG9CQUN4RCxvQkFBMkIsUUFBVyxTQUFZLElBQU8sRUFDeEQsT0FBTyxFQUFVLEFBQWEsT0FBTyxHQUFNLEVBQ2hELFdBQ0MsVUFDRCxFQUNLLE9BQVEsQUFBYSxNQUFNLHNCQUE2QjtBQUFBLG9CQUN6RCxxQkFBNEIsUUFBVyxTQUFZLFVBQWEsU0FBWSxFQUMzRSxPQUFPLEVBQVUsQUFBYSxPQUFPLEdBQU0sRUFDaEQsV0FDQyxVQUNELEVBQ0ssT0FBUSxBQUFhLE1BQU0sb0JBQXVCLGNBQWlCLFlBQWUsRUFDbEYsT0FBTyxFQUFTLEVBQUssRUFDckIsT0FBUSxBQUFhLE1BQU0sbUJBQXNCLFNBQVksRUFDN0QsT0FBTyxFQUFTLEVBQUksRUFDekIsV0FDQyxPQUNELEVBQUksT0FBUSxBQUFhLE1BQU0sZUFBa0IsY0FBaUIsYUFBZ0IsRUFDbEYsRUFBSSxPQUFPLEVBQVMsSUFBSSxFQUN4QixXQUNDLFFBQ0QsRUFDSyxPQUFRLEFBQWEsTUFBTSxxQkFBNEI7QUFBQSxtQkFDekQsc0JBQTZCLFlBQWUsRUFDMUMsT0FBTyxFQUFVLEFBQWEsT0FBTyxJQUFPLElBSWpFLFNBQVMsRUFBZ0IsRUFBRyxNQUFLLGFBQVksc0JBQXNCLEVBQU0sQ0FFckUsRUFBSSxHQUFJLEFBQWEsTUFBTSxrQkFBNEIsSUFBTSxFQUFJLE9BQVEsQUFBYSxNQUFNLEtBQWMsS0FBdUIsQ0FBSSxDQUFDLEVBRTFJLFNBQVMsRUFBYSxDQUFDLEVBQVUsRUFBTSxFQUFZLEVBQVUsR0FBUyxRQUFTLENBQzNFLElBQU0sRUFBSyxJQUFZLEdBQVMsUUFBb0IsWUFBVSxHQUFlLFlBQVUsSUFDbkYsRUFDSixPQUFRLE9BQ0MsT0FDRCxNQUFRLENBQWEsTUFBTSxLQUFRLGFBQ2xDLFFBQ0QsRUFBUSxBQUFhLG9CQUFvQixLQUN6QyxVQUNDLFNBQ0QsRUFBUSxBQUFhLE1BQU0sZUFBa0IsbUNBQXNDLEtBQ25GLFVBQ0MsVUFDRCxFQUFPLEVBQVMsQUFBYSxRQUFRLG9CQUF1QixJQUFPLEVBQ25FLFVBQ0MsU0FDRCxFQUFPLEVBQVEsRUFDZixjQUVBLE1BQVEsQ0FBYSxhQUFhLEtBQVEsS0FBTSxJQUV4RCxPQUFPLElBQVksR0FBUyxRQUFVLEVBQXFCLE1BQUssQ0FBSSxFQUNwRSxTQUFTLENBQU8sQ0FBQyxFQUFrQixNQUFLLENBQ3BDLE9BQXFCLE1BQU0sQUFBYSxhQUFhLGdCQUFvQixFQUFPLEVBQWMsQUFBYSxlQUFlLEtBQW9CLEtBQUcsR0FHekosR0FBUSxjQUFnQixHQUN4QixTQUFTLEVBQWMsQ0FBQyxFQUFXLEVBQU0sRUFBWSxFQUFTLENBQzFELEdBQUksRUFBVSxTQUFXLEVBQ3JCLE9BQU8sR0FBYyxFQUFVLEdBQUksRUFBTSxFQUFZLENBQU8sRUFFaEUsSUFBSSxFQUNFLEVBQW1CLFVBQVEsQ0FBUyxFQUMxQyxHQUFJLEVBQU0sT0FBUyxFQUFNLE9BQVEsQ0FDN0IsSUFBTSxFQUFVLEFBQWEsYUFBYSxnQkFDMUMsRUFBTyxFQUFNLEtBQU8sRUFBVSxBQUFhLE9BQU8sUUFBVyxJQUM3RCxPQUFPLEVBQU0sS0FDYixPQUFPLEVBQU0sTUFDYixPQUFPLEVBQU0sT0FHYixPQUFpQixNQUVyQixHQUFJLEVBQU0sT0FDTixPQUFPLEVBQU0sUUFDakIsUUFBVyxLQUFLLEVBQ1osRUFBcUIsTUFBSyxFQUFNLEdBQWMsRUFBRyxFQUFNLEVBQVksQ0FBTyxDQUFDLEVBQy9FLE9BQU8sRUFFWCxHQUFRLGVBQWlCLEdBQ3pCLElBQU0sR0FBWSxDQUNkLFFBQVMsRUFBRyxZQUFhLFdBQVcsSUFDcEMsT0FBUSxFQUFHLFNBQVEsaUJBQWtCLE9BQU8sR0FBVSxTQUFZLEFBQWEsYUFBYSxLQUFhLEFBQWEsYUFBYSxJQUN2SSxFQUNBLFNBQVMsRUFBZSxDQUFDLEVBQUksQ0FDekIsSUFBTSxFQUFNLEdBQW9CLENBQUUsRUFDckIsZUFBYSxFQUFLLEVBQVMsRUFFNUMsR0FBUSxnQkFBa0IsR0FDMUIsU0FBUyxFQUFtQixDQUFDLEVBQUksQ0FDN0IsSUFBUSxNQUFLLE9BQU0sVUFBVyxFQUN4QixFQUF3QixrQkFBZ0IsRUFBSSxFQUFRLE1BQU0sRUFDaEUsTUFBTyxDQUNILE1BQ0EsUUFBUyxPQUNULE9BQ0EsT0FBUSxFQUFPLEtBQ2YsYUFDQSxZQUFhLEVBQ2IsYUFBYyxFQUNkLE9BQVEsQ0FBQyxFQUNULElBQ0osMkJDdk1KLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxHQUFRLGVBQXNCLE9BQzlCLElBQU0sUUFDQSxRQUNOLFNBQVMsRUFBYyxDQUFDLEVBQUksRUFBSSxDQUM1QixJQUFRLGFBQVksU0FBVSxFQUFHLE9BQ2pDLEdBQUksSUFBTyxVQUFZLEVBQ25CLFFBQVcsS0FBTyxFQUNkLEdBQWMsRUFBSSxFQUFLLEVBQVcsR0FBSyxPQUFPLEVBR2pELFFBQUksSUFBTyxTQUFXLE1BQU0sUUFBUSxDQUFLLEVBQzFDLEVBQU0sUUFBUSxDQUFDLEVBQUssSUFBTSxHQUFjLEVBQUksRUFBRyxFQUFJLE9BQU8sQ0FBQyxFQUduRSxHQUFRLGVBQWlCLEdBQ3pCLFNBQVMsRUFBYSxDQUFDLEVBQUksRUFBTSxFQUFjLENBQzNDLElBQVEsTUFBSyxnQkFBZSxPQUFNLFFBQVMsRUFDM0MsR0FBSSxJQUFpQixPQUNqQixPQUNKLElBQU0sRUFBYSxBQUFhLE9BQU0sSUFBcUIsZUFBYSxDQUFJLElBQzVFLEdBQUksRUFBZSxDQUNKLG1CQUFpQixFQUFJLDJCQUEyQixHQUFXLEVBQ3RFLE9BRUosSUFBSSxFQUFhLEFBQWEsT0FBTSxrQkFDcEMsR0FBSSxFQUFLLGNBQWdCLFFBQ3JCLEVBQWEsQUFBYSxPQUFNLFFBQWdCLGlCQUF5QixXQUk3RSxFQUFJLEdBQUcsRUFBWSxBQUFhLE9BQU0sT0FBNkIsYUFBVyxDQUFZLEdBQUcsMkJDL0JqRyxPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsR0FBUSxjQUFnQixHQUFRLGNBQWdCLEdBQVEsV0FBYSxHQUFRLGlCQUFtQixHQUFRLGlCQUFtQixHQUFRLG9CQUFzQixHQUFRLGlCQUFtQixHQUFRLGVBQWlCLEdBQVEsY0FBZ0IsR0FBUSxZQUFjLEdBQVEsa0JBQW9CLEdBQVEsaUJBQW1CLEdBQVEsdUJBQThCLE9BQ3hWLElBQU0sT0FDQSxRQUNBLFFBQ0EsUUFDTixTQUFTLEVBQXNCLENBQUMsRUFBSyxFQUFNLENBQ3ZDLElBQVEsTUFBSyxPQUFNLE1BQU8sRUFDMUIsRUFBSSxHQUFHLEdBQWlCLEVBQUssRUFBTSxFQUFNLEVBQUcsS0FBSyxhQUFhLEVBQUcsSUFBTSxDQUNuRSxFQUFJLFVBQVUsQ0FBRSxnQkFBa0IsQUFBYSxNQUFNLEdBQU8sRUFBRyxFQUFJLEVBQ25FLEVBQUksTUFBTSxFQUNiLEVBRUwsR0FBUSx1QkFBeUIsR0FDakMsU0FBUyxFQUFnQixFQUFHLE1BQUssT0FBTSxJQUFNLFNBQVUsRUFBWSxFQUFTLENBQ3hFLE9BQXFCLEtBQUksR0FBRyxFQUFXLElBQUksQ0FBQyxJQUF1QixNQUFLLEdBQWlCLEVBQUssRUFBTSxFQUFNLEVBQUssYUFBYSxFQUFJLEFBQWEsTUFBTSxPQUFhLEdBQU0sQ0FBQyxDQUFDLEVBRTVLLEdBQVEsaUJBQW1CLEdBQzNCLFNBQVMsRUFBaUIsQ0FBQyxFQUFLLEVBQVMsQ0FDckMsRUFBSSxVQUFVLENBQUUsZ0JBQWlCLENBQVEsRUFBRyxFQUFJLEVBQ2hELEVBQUksTUFBTSxFQUVkLEdBQVEsa0JBQW9CLEdBQzVCLFNBQVMsRUFBVyxDQUFDLEVBQUssQ0FDdEIsT0FBTyxFQUFJLFdBQVcsT0FBUSxDQUUxQixJQUFLLE9BQU8sVUFBVSxlQUN0QixLQUFPLEFBQWEsb0NBQ3hCLENBQUMsRUFFTCxHQUFRLFlBQWMsR0FDdEIsU0FBUyxFQUFhLENBQUMsRUFBSyxFQUFNLEVBQVUsQ0FDeEMsTUFBUSxDQUFhLE1BQU0sR0FBWSxDQUFHLFVBQVUsTUFBUyxLQUVqRSxHQUFRLGNBQWdCLEdBQ3hCLFNBQVMsRUFBYyxDQUFDLEVBQUssRUFBTSxFQUFVLEVBQWUsQ0FDeEQsSUFBTSxFQUFRLEFBQWEsTUFBTSxJQUFxQixjQUFhLENBQVEsa0JBQzNFLE9BQU8sRUFBaUIsQUFBYSxNQUFNLFFBQVcsR0FBYyxFQUFLLEVBQU0sQ0FBUSxJQUFNLEVBRWpHLEdBQVEsZUFBaUIsR0FDekIsU0FBUyxFQUFnQixDQUFDLEVBQUssRUFBTSxFQUFVLEVBQWUsQ0FDMUQsSUFBTSxFQUFRLEFBQWEsTUFBTSxJQUFxQixjQUFhLENBQVEsa0JBQzNFLE9BQU8sRUFBOEIsS0FBSSxFQUFvQixNQUFLLEdBQWMsRUFBSyxFQUFNLENBQVEsQ0FBQyxDQUFDLEVBQUksRUFFN0csR0FBUSxpQkFBbUIsR0FDM0IsU0FBUyxFQUFtQixDQUFDLEVBQVcsQ0FDcEMsT0FBTyxFQUFZLE9BQU8sS0FBSyxDQUFTLEVBQUUsT0FBTyxDQUFDLElBQU0sSUFBTSxXQUFXLEVBQUksQ0FBQyxFQUVsRixHQUFRLG9CQUFzQixHQUM5QixTQUFTLEVBQWdCLENBQUMsRUFBSSxFQUFXLENBQ3JDLE9BQU8sR0FBb0IsQ0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFNLENBQVkscUJBQW1CLEVBQUksRUFBVSxFQUFFLENBQUMsRUFFeEcsR0FBUSxpQkFBbUIsR0FDM0IsU0FBUyxFQUFnQixFQUFHLGFBQVksT0FBTSxJQUFNLE1BQUssZUFBYyxhQUFZLGFBQWEsTUFBTSxFQUFNLEVBQVMsRUFBWSxDQUM3SCxJQUFNLEVBQWdCLEVBQWMsQUFBYSxNQUFNLE1BQWUsTUFBUyxJQUFlLElBQWUsRUFDdkcsRUFBUyxDQUNYLENBQUMsR0FBUSxRQUFRLGFBQTRCLFlBQVcsR0FBUSxRQUFRLGFBQWMsQ0FBUyxDQUFDLEVBQ2hHLENBQUMsR0FBUSxRQUFRLFdBQVksRUFBRyxVQUFVLEVBQzFDLENBQUMsR0FBUSxRQUFRLG1CQUFvQixFQUFHLGtCQUFrQixFQUMxRCxDQUFDLEdBQVEsUUFBUSxTQUFVLEdBQVEsUUFBUSxRQUFRLENBQ3ZELEVBQ0EsR0FBSSxFQUFHLEtBQUssV0FDUixFQUFPLEtBQUssQ0FBQyxHQUFRLFFBQVEsZUFBZ0IsR0FBUSxRQUFRLGNBQWMsQ0FBQyxFQUNoRixJQUFNLEVBQVEsQUFBYSxNQUFNLE1BQWtCLEVBQUksT0FBTyxHQUFHLENBQU0sSUFDdkUsT0FBTyxJQUFzQixNQUFPLEFBQWEsTUFBTSxVQUFhLE1BQVksS0FBVyxBQUFhLE1BQU0sS0FBUSxLQUUxSCxHQUFRLGlCQUFtQixHQUMzQixJQUFNLEdBQWEsQUFBYSxnQkFDaEMsU0FBUyxFQUFVLEVBQUcsTUFBSyxJQUFNLFNBQVUsRUFBUyxDQUNoRCxJQUFNLEVBQUksRUFBSyxjQUFnQixJQUFNLElBQzdCLFVBQVcsRUFBSyxLQUNsQixFQUFLLEVBQU8sRUFBUyxDQUFDLEVBQzVCLE9BQU8sRUFBSSxXQUFXLFVBQVcsQ0FDN0IsSUFBSyxFQUFHLFNBQVMsRUFDakIsSUFBSyxFQUNMLEtBQU8sQUFBYSxNQUFNLEVBQU8sT0FBUyxhQUFlLEdBQXVCLFdBQVMsRUFBSyxDQUFNLEtBQUssTUFBWSxJQUN6SCxDQUFDLEVBRUwsR0FBUSxXQUFhLEdBQ3JCLFNBQVMsRUFBYSxDQUFDLEVBQUssQ0FDeEIsSUFBUSxNQUFLLE9BQU0sVUFBUyxNQUFPLEVBQzdCLEVBQVEsRUFBSSxLQUFLLE9BQU8sRUFDOUIsR0FBSSxFQUFHLFVBQVcsQ0FDZCxJQUFNLEVBQVcsRUFBSSxJQUFJLFFBQVMsRUFBSSxFQUV0QyxPQURBLEVBQWMsSUFBTSxFQUFJLE9BQU8sRUFBVSxFQUFLLENBQUMsRUFDeEMsRUFJWCxPQUZBLEVBQUksSUFBSSxFQUFPLEVBQUksRUFDbkIsRUFBYyxJQUFNLEVBQUksTUFBTSxDQUFDLEVBQ3hCLEVBQ1AsU0FBUyxDQUFhLENBQUMsRUFBVSxDQUM3QixJQUFNLEVBQU0sRUFBSSxNQUFNLE1BQVEsQUFBYSxNQUFNLFVBQWEsRUFDOUQsRUFBSSxTQUFTLElBQUssRUFBRyxFQUFLLENBQUMsSUFBTSxDQUM3QixFQUFJLFVBQVUsQ0FDVixVQUNBLFNBQVUsRUFDVixhQUFxQixRQUFLLEdBQzlCLEVBQUcsQ0FBSyxFQUNSLEVBQUksR0FBaUIsTUFBSyxDQUFLLEVBQUcsQ0FBUSxFQUM3QyxHQUdULEdBQVEsY0FBZ0IsR0FDeEIsU0FBUyxFQUFhLENBQUMsRUFBSyxDQUN4QixJQUFRLE1BQUssU0FBUSxVQUFTLE1BQU8sRUFFckMsR0FBSSxDQUFDLE1BQU0sUUFBUSxDQUFNLEVBQ3JCLE1BQVUsTUFBTSwwQkFBMEIsRUFFOUMsR0FEb0IsRUFBTyxLQUFLLENBQUMsSUFBbUIscUJBQW1CLEVBQUksQ0FBRyxDQUFDLEdBQzVELENBQUMsRUFBRyxLQUFLLFlBQ3hCLE9BQ0osSUFBTSxFQUFRLEVBQUksSUFBSSxRQUFTLEVBQUssRUFDOUIsRUFBVyxFQUFJLEtBQUssUUFBUSxFQUNsQyxFQUFJLE1BQU0sSUFBTSxFQUFPLFFBQVEsQ0FBQyxFQUFNLElBQU0sQ0FDeEMsSUFBTSxFQUFTLEVBQUksVUFBVSxDQUN6QixVQUNBLFdBQVksRUFDWixjQUFlLEVBQ25CLEVBQUcsQ0FBUSxFQUtYLEdBSkEsRUFBSSxPQUFPLEVBQVEsQUFBYSxNQUFNLFFBQVksR0FBVSxFQUl4RCxDQUhXLEVBQUksb0JBQW9CLEVBQVEsQ0FBUSxFQUluRCxFQUFJLEdBQWlCLE1BQUssQ0FBSyxDQUFDLEVBQ3ZDLENBQUMsRUFDRixFQUFJLE9BQU8sRUFBTyxJQUFNLEVBQUksTUFBTSxFQUFHLElBQU0sRUFBSSxNQUFNLEVBQUksQ0FBQyxFQUU5RCxHQUFRLGNBQWdCLDJCQ2hJeEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEscUJBQXVCLEdBQVEsZ0JBQWtCLEdBQVEsZ0JBQWtCLEdBQVEsaUJBQXdCLE9BQ25ILElBQU0sUUFDQSxRQUNBLFFBQ0EsUUFDTixTQUFTLEVBQWdCLENBQUMsRUFBSyxFQUFLLENBQ2hDLElBQVEsTUFBSyxVQUFTLFNBQVEsZUFBYyxNQUFPLEVBQzdDLEVBQWMsRUFBSSxNQUFNLEtBQUssRUFBRyxLQUFNLEVBQVEsRUFBYyxDQUFFLEVBQzlELEVBQVksR0FBVyxFQUFLLEVBQVMsQ0FBVyxFQUN0RCxHQUFJLEVBQUcsS0FBSyxpQkFBbUIsR0FDM0IsRUFBRyxLQUFLLGVBQWUsRUFBYSxFQUFJLEVBQzVDLElBQU0sRUFBUSxFQUFJLEtBQUssT0FBTyxFQUM5QixFQUFJLFVBQVUsQ0FDVixPQUFRLEVBQ1IsV0FBc0IsT0FDdEIsY0FBZSxHQUFHLEVBQUcsaUJBQWlCLElBQ3RDLGFBQWMsRUFDZCxjQUFlLEVBQ25CLEVBQUcsQ0FBSyxFQUNSLEVBQUksS0FBSyxFQUFPLElBQU0sRUFBSSxNQUFNLEVBQUksQ0FBQyxFQUV6QyxHQUFRLGlCQUFtQixHQUMzQixTQUFTLEVBQWUsQ0FBQyxFQUFLLEVBQUssQ0FDL0IsSUFBSSxFQUNKLElBQVEsTUFBSyxVQUFTLFNBQVEsZUFBYyxRQUFPLE1BQU8sRUFDMUQsR0FBa0IsRUFBSSxDQUFHLEVBQ3pCLElBQU0sRUFBVyxDQUFDLEdBQVMsRUFBSSxRQUFVLEVBQUksUUFBUSxLQUFLLEVBQUcsS0FBTSxFQUFRLEVBQWMsQ0FBRSxFQUFJLEVBQUksU0FDN0YsRUFBYyxHQUFXLEVBQUssRUFBUyxDQUFRLEVBQy9DLEVBQVEsRUFBSSxJQUFJLE9BQU8sRUFDN0IsRUFBSSxXQUFXLEVBQU8sQ0FBZSxFQUNyQyxFQUFJLElBQUksRUFBSyxFQUFJLFNBQVcsTUFBUSxJQUFZLE9BQUksRUFBSyxDQUFLLEVBQzlELFNBQVMsQ0FBZSxFQUFHLENBQ3ZCLEdBQUksRUFBSSxTQUFXLEdBQU8sQ0FFdEIsR0FEQSxFQUFZLEVBQ1IsRUFBSSxVQUNKLEdBQVcsQ0FBRyxFQUNsQixFQUFXLElBQU0sRUFBSSxNQUFNLENBQUMsRUFFM0IsS0FDRCxJQUFNLEVBQVcsRUFBSSxNQUFRLEVBQWMsRUFBSSxFQUFhLEVBQzVELEdBQUksRUFBSSxVQUNKLEdBQVcsQ0FBRyxFQUNsQixFQUFXLElBQU0sR0FBUSxFQUFLLENBQVEsQ0FBQyxHQUcvQyxTQUFTLENBQWEsRUFBRyxDQUNyQixJQUFNLEVBQVcsRUFBSSxJQUFJLFdBQVksSUFBSSxFQUV6QyxPQURBLEVBQUksSUFBSSxJQUFNLEVBQWEsQUFBYSxZQUFXLEVBQUcsQ0FBQyxJQUFNLEVBQUksT0FBTyxFQUFPLEVBQUssRUFBRSxHQUFJLEFBQWEsT0FBTSxnQkFBZ0IsRUFBRyxrQkFBbUIsSUFBTSxFQUFJLE9BQU8sRUFBVyxBQUFhLE9BQU0sVUFBVSxFQUFHLElBQU0sRUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQzNOLEVBRVgsU0FBUyxDQUFZLEVBQUcsQ0FDcEIsSUFBTSxFQUFnQixBQUFhLE9BQU0sV0FHekMsT0FGQSxFQUFJLE9BQU8sRUFBYyxJQUFJLEVBQzdCLEVBQXNCLE1BQUcsRUFDbEIsRUFFWCxTQUFTLENBQVcsQ0FBQyxFQUFTLEVBQUksTUFBUyxBQUFhLGFBQXdCLE9BQUssQ0FDakYsSUFBTSxFQUFVLEVBQUcsS0FBSyxZQUFjLEdBQVEsUUFBUSxLQUFPLEdBQVEsUUFBUSxLQUN2RSxFQUFhLEdBQUcsWUFBYSxJQUFPLENBQUMsR0FBVSxFQUFJLFNBQVcsSUFDcEUsRUFBSSxPQUFPLEVBQVEsQUFBYSxPQUFNLElBQW9CLG9CQUFrQixFQUFLLEVBQWEsRUFBUyxDQUFVLElBQUssRUFBSSxTQUFTLEVBRXZJLFNBQVMsQ0FBVSxDQUFDLEVBQVEsQ0FDeEIsSUFBSSxFQUNKLEVBQUksR0FBaUIsUUFBTSxFQUFLLEVBQUksU0FBVyxNQUFRLElBQVksT0FBSSxFQUFLLENBQUssRUFBRyxDQUFNLEdBR2xHLEdBQVEsZ0JBQWtCLEdBQzFCLFNBQVMsRUFBVSxDQUFDLEVBQUssQ0FDckIsSUFBUSxNQUFLLE9BQU0sTUFBTyxFQUMxQixFQUFJLEdBQUcsRUFBRyxXQUFZLElBQU0sRUFBSSxPQUFPLEVBQU8sQUFBYSxPQUFNLEVBQUcsY0FBYyxFQUFHLHFCQUFxQixDQUFDLEVBRS9HLFNBQVMsRUFBTyxDQUFDLEVBQUssRUFBTSxDQUN4QixJQUFRLE9BQVEsRUFDaEIsRUFBSSxHQUFJLEFBQWEscUJBQW9CLEtBQVMsSUFBTSxDQUNwRCxFQUNLLE9BQU8sR0FBUSxRQUFRLFFBQVUsQUFBYSxPQUFNLEdBQVEsUUFBUSxzQkFBc0IsT0FBVSxHQUFRLFFBQVEsa0JBQWtCLElBQU8sRUFDN0ksT0FBTyxHQUFRLFFBQVEsT0FBUyxBQUFhLE9BQU0sR0FBUSxRQUFRLGdCQUFnQixFQUMzRSxnQkFBYyxDQUFHLEdBQy9CLElBQU0sRUFBSSxNQUFNLENBQUMsRUFFeEIsU0FBUyxFQUFpQixFQUFHLGFBQWEsRUFBSyxDQUMzQyxHQUFJLEVBQUksT0FBUyxDQUFDLEVBQVUsT0FDeEIsTUFBVSxNQUFNLDhCQUE4QixFQUV0RCxTQUFTLEVBQVUsQ0FBQyxFQUFLLEVBQVMsRUFBUSxDQUN0QyxHQUFJLElBQVcsT0FDWCxNQUFVLE1BQU0sWUFBWSxzQkFBNEIsRUFDNUQsT0FBTyxFQUFJLFdBQVcsVUFBVyxPQUFPLEdBQVUsV0FBYSxDQUFFLElBQUssQ0FBTyxFQUFJLENBQUUsSUFBSyxFQUFRLEtBQW9CLGFBQVcsQ0FBTSxDQUFFLENBQUMsRUFFNUksU0FBUyxFQUFlLENBQUMsRUFBUSxFQUFZLEVBQWlCLEdBQU8sQ0FFakUsTUFBUSxDQUFDLEVBQVcsUUFDaEIsRUFBVyxLQUFLLENBQUMsSUFBTyxJQUFPLFFBQ3pCLE1BQU0sUUFBUSxDQUFNLEVBQ3BCLElBQU8sU0FDSCxHQUFVLE9BQU8sR0FBVSxVQUFZLENBQUMsTUFBTSxRQUFRLENBQU0sRUFDNUQsT0FBTyxHQUFVLEdBQU8sR0FBa0IsT0FBTyxFQUFVLEdBQVksRUFFekYsR0FBUSxnQkFBa0IsR0FDMUIsU0FBUyxFQUFvQixFQUFHLFNBQVEsT0FBTSxPQUFNLGlCQUFpQixFQUFLLEVBQVMsQ0FFL0UsR0FBSSxNQUFNLFFBQVEsRUFBSSxPQUFPLEVBQUksQ0FBQyxFQUFJLFFBQVEsU0FBUyxDQUFPLEVBQUksRUFBSSxVQUFZLEVBQzlFLE1BQVUsTUFBTSwwQkFBMEIsRUFFOUMsSUFBTSxFQUFPLEVBQUksYUFDakIsR0FBSSxJQUFTLE1BQVEsSUFBYyxPQUFTLE9BQUksRUFBSyxLQUFLLENBQUMsSUFBUSxDQUFDLE9BQU8sVUFBVSxlQUFlLEtBQUssRUFBUSxDQUFHLENBQUMsRUFDakgsTUFBVSxNQUFNLDJDQUEyQyxNQUFZLEVBQUssS0FBSyxHQUFHLEdBQUcsRUFFM0YsR0FBSSxFQUFJLGdCQUVKLEdBQUksQ0FEVSxFQUFJLGVBQWUsRUFBTyxFQUFRLEVBQ3BDLENBQ1IsSUFBTSxFQUFNLFlBQVksZ0NBQXNDLE9BQzFELEVBQUssV0FBVyxFQUFJLGVBQWUsTUFBTSxFQUM3QyxHQUFJLEVBQUssaUJBQW1CLE1BQ3hCLEVBQUssT0FBTyxNQUFNLENBQUcsRUFFckIsV0FBVSxNQUFNLENBQUcsSUFJbkMsR0FBUSxxQkFBdUIsMkJDekgvQixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsR0FBUSxvQkFBc0IsR0FBUSxvQkFBc0IsR0FBUSxhQUFvQixPQUN4RixJQUFNLFFBQ0EsUUFDTixTQUFTLEVBQVksQ0FBQyxHQUFNLFVBQVMsYUFBWSxTQUFRLGFBQVksZ0JBQWUsZ0JBQWdCLENBQ2hHLEdBQUksSUFBWSxRQUFhLElBQVcsT0FDcEMsTUFBVSxNQUFNLHNEQUFzRCxFQUUxRSxHQUFJLElBQVksT0FBVyxDQUN2QixJQUFNLEVBQU0sRUFBRyxPQUFPLEdBQ3RCLE9BQU8sSUFBZSxPQUNoQixDQUNFLE9BQVEsRUFDUixXQUFhLEFBQWEsT0FBTSxFQUFHLGFBQTJCLGVBQWEsQ0FBTyxJQUNsRixjQUFlLEdBQUcsRUFBRyxpQkFBaUIsR0FDMUMsRUFDRSxDQUNFLE9BQVEsRUFBSSxHQUNaLFdBQWEsQUFBYSxPQUFNLEVBQUcsYUFBMkIsZUFBYSxDQUFPLElBQWtCLGVBQWEsQ0FBVSxJQUMzSCxjQUFlLEdBQUcsRUFBRyxpQkFBaUIsS0FBc0Isa0JBQWdCLENBQVUsR0FDMUYsRUFFUixHQUFJLElBQVcsT0FBVyxDQUN0QixHQUFJLElBQWUsUUFBYSxJQUFrQixRQUFhLElBQWlCLE9BQzVFLE1BQVUsTUFBTSw2RUFBNkUsRUFFakcsTUFBTyxDQUNILFNBQ0EsYUFDQSxlQUNBLGVBQ0osRUFFSixNQUFVLE1BQU0sNkNBQTZDLEVBRWpFLEdBQVEsYUFBZSxHQUN2QixTQUFTLEVBQW1CLENBQUMsRUFBVyxHQUFNLFdBQVUsYUFBYyxFQUFRLE9BQU0sWUFBVyxnQkFBZ0IsQ0FDM0csR0FBSSxJQUFTLFFBQWEsSUFBYSxPQUNuQyxNQUFVLE1BQU0scURBQXFELEVBRXpFLElBQVEsT0FBUSxFQUNoQixHQUFJLElBQWEsT0FBVyxDQUN4QixJQUFRLFlBQVcsY0FBYSxRQUFTLEVBQ25DLEVBQVcsRUFBSSxJQUFJLE9BQVMsQUFBYSxPQUFNLEVBQUcsT0FBcUIsZUFBYSxDQUFRLElBQUssRUFBSSxFQUMzRyxFQUFpQixDQUFRLEVBQ3pCLEVBQVUsVUFBYSxBQUFhLFNBQVEsSUFBdUIsZ0JBQWMsRUFBVSxFQUFRLEVBQUssZ0JBQWdCLElBQ3hILEVBQVUsbUJBQXNCLEFBQWEsT0FBTSxJQUNuRCxFQUFVLFlBQWMsQ0FBQyxHQUFHLEVBQWEsRUFBVSxrQkFBa0IsRUFFekUsR0FBSSxJQUFTLE9BQVcsQ0FDcEIsSUFBTSxFQUFXLGFBQTBCLFFBQU8sRUFBTyxFQUFJLElBQUksT0FBUSxFQUFNLEVBQUksRUFFbkYsR0FEQSxFQUFpQixDQUFRLEVBQ3JCLElBQWlCLE9BQ2pCLEVBQVUsYUFBZSxFQUdqQyxHQUFJLEVBQ0EsRUFBVSxVQUFZLEVBQzFCLFNBQVMsQ0FBZ0IsQ0FBQyxFQUFXLENBQ2pDLEVBQVUsS0FBTyxFQUNqQixFQUFVLFVBQVksRUFBRyxVQUFZLEVBQ3JDLEVBQVUsVUFBWSxDQUFDLEVBQ3ZCLEVBQUcsa0JBQW9CLElBQUksSUFDM0IsRUFBVSxXQUFhLEVBQUcsS0FDMUIsRUFBVSxVQUFZLENBQUMsR0FBRyxFQUFHLFVBQVcsQ0FBUyxHQUd6RCxHQUFRLG9CQUFzQixHQUM5QixTQUFTLEVBQW1CLENBQUMsR0FBYSxtQkFBa0IsY0FBYSxnQkFBZSxlQUFjLGFBQWEsQ0FDL0csR0FBSSxJQUFrQixPQUNsQixFQUFVLGNBQWdCLEVBQzlCLEdBQUksSUFBaUIsT0FDakIsRUFBVSxhQUFlLEVBQzdCLEdBQUksSUFBYyxPQUNkLEVBQVUsVUFBWSxFQUMxQixFQUFVLGlCQUFtQixFQUM3QixFQUFVLFlBQWMsRUFFNUIsR0FBUSxvQkFBc0IsOEJDekU5QixHQUFPLFFBQVUsU0FBUyxDQUFLLENBQUMsRUFBRyxFQUFHLENBQ3BDLEdBQUksSUFBTSxFQUFHLE1BQU8sR0FFcEIsR0FBSSxHQUFLLEdBQUssT0FBTyxHQUFLLFVBQVksT0FBTyxHQUFLLFNBQVUsQ0FDMUQsR0FBSSxFQUFFLGNBQWdCLEVBQUUsWUFBYSxNQUFPLEdBRTVDLElBQUksRUFBUSxFQUFHLEVBQ2YsR0FBSSxNQUFNLFFBQVEsQ0FBQyxFQUFHLENBRXBCLEdBREEsRUFBUyxFQUFFLE9BQ1AsR0FBVSxFQUFFLE9BQVEsTUFBTyxHQUMvQixJQUFLLEVBQUksRUFBUSxNQUFRLEdBQ3ZCLEdBQUksQ0FBQyxFQUFNLEVBQUUsR0FBSSxFQUFFLEVBQUUsRUFBRyxNQUFPLEdBQ2pDLE1BQU8sR0FLVCxHQUFJLEVBQUUsY0FBZ0IsT0FBUSxPQUFPLEVBQUUsU0FBVyxFQUFFLFFBQVUsRUFBRSxRQUFVLEVBQUUsTUFDNUUsR0FBSSxFQUFFLFVBQVksT0FBTyxVQUFVLFFBQVMsT0FBTyxFQUFFLFFBQVEsSUFBTSxFQUFFLFFBQVEsRUFDN0UsR0FBSSxFQUFFLFdBQWEsT0FBTyxVQUFVLFNBQVUsT0FBTyxFQUFFLFNBQVMsSUFBTSxFQUFFLFNBQVMsRUFJakYsR0FGQSxFQUFPLE9BQU8sS0FBSyxDQUFDLEVBQ3BCLEVBQVMsRUFBSyxPQUNWLElBQVcsT0FBTyxLQUFLLENBQUMsRUFBRSxPQUFRLE1BQU8sR0FFN0MsSUFBSyxFQUFJLEVBQVEsTUFBUSxHQUN2QixHQUFJLENBQUMsT0FBTyxVQUFVLGVBQWUsS0FBSyxFQUFHLEVBQUssRUFBRSxFQUFHLE1BQU8sR0FFaEUsSUFBSyxFQUFJLEVBQVEsTUFBUSxHQUFJLENBQzNCLElBQUksRUFBTSxFQUFLLEdBRWYsR0FBSSxDQUFDLEVBQU0sRUFBRSxHQUFNLEVBQUUsRUFBSSxFQUFHLE1BQU8sR0FHckMsTUFBTyxHQUlULE9BQU8sSUFBSSxHQUFLLElBQUksOEJDMUN0QixJQUFJLEdBQVcsR0FBTyxRQUFVLFFBQVMsQ0FBQyxFQUFRLEVBQU0sRUFBSSxDQUUxRCxHQUFJLE9BQU8sR0FBUSxXQUNqQixFQUFLLEVBQ0wsRUFBTyxDQUFDLEVBR1YsRUFBSyxFQUFLLElBQU0sRUFDaEIsSUFBSSxFQUFPLE9BQU8sR0FBTSxXQUFjLEVBQUssRUFBRyxLQUFPLFFBQVEsRUFBRyxHQUM1RCxFQUFPLEVBQUcsTUFBUSxRQUFRLEVBQUcsR0FFakMsR0FBVSxFQUFNLEVBQUssRUFBTSxFQUFRLEdBQUksQ0FBTSxHQUkvQyxHQUFTLFNBQVcsQ0FDbEIsZ0JBQWlCLEdBQ2pCLE1BQU8sR0FDUCxTQUFVLEdBQ1YscUJBQXNCLEdBQ3RCLGNBQWUsR0FDZixJQUFLLEdBQ0wsR0FBSSxHQUNKLEtBQU0sR0FDTixLQUFNLEVBQ1IsRUFFQSxHQUFTLGNBQWdCLENBQ3ZCLE1BQU8sR0FDUCxNQUFPLEdBQ1AsTUFBTyxHQUNQLE1BQU8sRUFDVCxFQUVBLEdBQVMsY0FBZ0IsQ0FDdkIsTUFBTyxHQUNQLFlBQWEsR0FDYixXQUFZLEdBQ1osa0JBQW1CLEdBQ25CLGFBQWMsRUFDaEIsRUFFQSxHQUFTLGFBQWUsQ0FDdEIsUUFBUyxHQUNULEtBQU0sR0FDTixNQUFPLEdBQ1AsU0FBVSxHQUNWLFFBQVMsR0FDVCxRQUFTLEdBQ1QsaUJBQWtCLEdBQ2xCLGlCQUFrQixHQUNsQixXQUFZLEdBQ1osVUFBVyxHQUNYLFVBQVcsR0FDWCxRQUFTLEdBQ1QsT0FBUSxHQUNSLFNBQVUsR0FDVixTQUFVLEdBQ1YsWUFBYSxHQUNiLGNBQWUsR0FDZixjQUFlLEVBQ2pCLEVBR0EsU0FBUyxFQUFTLENBQUMsRUFBTSxFQUFLLEVBQU0sRUFBUSxFQUFTLEVBQVksRUFBZSxFQUFlLEVBQWMsRUFBVSxDQUNySCxHQUFJLEdBQVUsT0FBTyxHQUFVLFVBQVksQ0FBQyxNQUFNLFFBQVEsQ0FBTSxFQUFHLENBQ2pFLEVBQUksRUFBUSxFQUFTLEVBQVksRUFBZSxFQUFlLEVBQWMsQ0FBUSxFQUNyRixRQUFTLEtBQU8sRUFBUSxDQUN0QixJQUFJLEVBQU0sRUFBTyxHQUNqQixHQUFJLE1BQU0sUUFBUSxDQUFHLEdBQ25CLEdBQUksS0FBTyxHQUFTLGNBQ2xCLFFBQVMsRUFBRSxFQUFHLEVBQUUsRUFBSSxPQUFRLElBQzFCLEdBQVUsRUFBTSxFQUFLLEVBQU0sRUFBSSxHQUFJLEVBQVUsSUFBTSxFQUFNLElBQU0sRUFBRyxFQUFZLEVBQVMsRUFBSyxFQUFRLENBQUMsRUFFcEcsUUFBSSxLQUFPLEdBQVMsZUFDekIsR0FBSSxHQUFPLE9BQU8sR0FBTyxTQUN2QixRQUFTLEtBQVEsRUFDZixHQUFVLEVBQU0sRUFBSyxFQUFNLEVBQUksR0FBTyxFQUFVLElBQU0sRUFBTSxJQUFNLEdBQWMsQ0FBSSxFQUFHLEVBQVksRUFBUyxFQUFLLEVBQVEsQ0FBSSxFQUU1SCxRQUFJLEtBQU8sR0FBUyxVQUFhLEVBQUssU0FBVyxFQUFFLEtBQU8sR0FBUyxjQUN4RSxHQUFVLEVBQU0sRUFBSyxFQUFNLEVBQUssRUFBVSxJQUFNLEVBQUssRUFBWSxFQUFTLEVBQUssQ0FBTSxFQUd6RixFQUFLLEVBQVEsRUFBUyxFQUFZLEVBQWUsRUFBZSxFQUFjLENBQVEsR0FLMUYsU0FBUyxFQUFhLENBQUMsRUFBSyxDQUMxQixPQUFPLEVBQUksUUFBUSxLQUFNLElBQUksRUFBRSxRQUFRLE1BQU8sSUFBSSwyQkMxRnBELE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxHQUFRLGNBQWdCLEdBQVEsV0FBYSxHQUFRLFlBQWMsR0FBUSxhQUFlLEdBQVEsWUFBYyxHQUFRLFVBQWlCLE9BQ3pJLElBQU0sUUFDQSxRQUNBLFFBRUEsR0FBaUIsSUFBSSxJQUFJLENBQzNCLE9BQ0EsU0FDQSxVQUNBLFlBQ0EsWUFDQSxnQkFDQSxnQkFDQSxXQUNBLFdBQ0EsVUFDQSxVQUNBLGNBQ0EsYUFDQSxXQUNBLE9BQ0EsT0FDSixDQUFDLEVBQ0QsU0FBUyxFQUFTLENBQUMsRUFBUSxFQUFRLEdBQU0sQ0FDckMsR0FBSSxPQUFPLEdBQVUsVUFDakIsTUFBTyxHQUNYLEdBQUksSUFBVSxHQUNWLE1BQU8sQ0FBQyxHQUFPLENBQU0sRUFDekIsR0FBSSxDQUFDLEVBQ0QsTUFBTyxHQUNYLE9BQU8sR0FBVSxDQUFNLEdBQUssRUFFaEMsR0FBUSxVQUFZLEdBQ3BCLElBQU0sR0FBZSxJQUFJLElBQUksQ0FDekIsT0FDQSxnQkFDQSxtQkFDQSxjQUNBLGdCQUNKLENBQUMsRUFDRCxTQUFTLEVBQU0sQ0FBQyxFQUFRLENBQ3BCLFFBQVcsS0FBTyxFQUFRLENBQ3RCLEdBQUksR0FBYSxJQUFJLENBQUcsRUFDcEIsTUFBTyxHQUNYLElBQU0sRUFBTSxFQUFPLEdBQ25CLEdBQUksTUFBTSxRQUFRLENBQUcsR0FBSyxFQUFJLEtBQUssRUFBTSxFQUNyQyxNQUFPLEdBQ1gsR0FBSSxPQUFPLEdBQU8sVUFBWSxHQUFPLENBQUcsRUFDcEMsTUFBTyxHQUVmLE1BQU8sR0FFWCxTQUFTLEVBQVMsQ0FBQyxFQUFRLENBQ3ZCLElBQUksRUFBUSxFQUNaLFFBQVcsS0FBTyxFQUFRLENBQ3RCLEdBQUksSUFBUSxPQUNSLE1BQU8sS0FFWCxHQURBLElBQ0ksR0FBZSxJQUFJLENBQUcsRUFDdEIsU0FDSixHQUFJLE9BQU8sRUFBTyxJQUFRLFNBQ1gsWUFBVSxFQUFPLEdBQU0sQ0FBQyxJQUFTLEdBQVMsR0FBVSxDQUFHLENBQUUsRUFFeEUsR0FBSSxJQUFVLElBQ1YsTUFBTyxLQUVmLE9BQU8sRUFFWCxTQUFTLEVBQVcsQ0FBQyxFQUFVLEVBQUssR0FBSSxFQUFXLENBQy9DLEdBQUksSUFBYyxHQUNkLEVBQUssR0FBWSxDQUFFLEVBQ3ZCLElBQU0sRUFBSSxFQUFTLE1BQU0sQ0FBRSxFQUMzQixPQUFPLEdBQWEsRUFBVSxDQUFDLEVBRW5DLEdBQVEsWUFBYyxHQUN0QixTQUFTLEVBQVksQ0FBQyxFQUFVLEVBQUcsQ0FFL0IsT0FEbUIsRUFBUyxVQUFVLENBQUMsRUFDckIsTUFBTSxHQUFHLEVBQUUsR0FBSyxJQUV0QyxHQUFRLGFBQWUsR0FDdkIsSUFBTSxHQUFzQixRQUM1QixTQUFTLEVBQVcsQ0FBQyxFQUFJLENBQ3JCLE9BQU8sRUFBSyxFQUFHLFFBQVEsR0FBcUIsRUFBRSxFQUFJLEdBRXRELEdBQVEsWUFBYyxHQUN0QixTQUFTLEVBQVUsQ0FBQyxFQUFVLEVBQVEsRUFBSSxDQUV0QyxPQURBLEVBQUssR0FBWSxDQUFFLEVBQ1osRUFBUyxRQUFRLEVBQVEsQ0FBRSxFQUV0QyxHQUFRLFdBQWEsR0FDckIsSUFBTSxHQUFTLHdCQUNmLFNBQVMsRUFBYSxDQUFDLEVBQVEsRUFBUSxDQUNuQyxHQUFJLE9BQU8sR0FBVSxVQUNqQixNQUFPLENBQUMsRUFDWixJQUFRLFdBQVUsZUFBZ0IsS0FBSyxLQUNqQyxFQUFRLEdBQVksRUFBTyxJQUFhLENBQU0sRUFDOUMsRUFBVSxDQUFFLEdBQUksQ0FBTSxFQUN0QixFQUFhLEdBQVksRUFBYSxFQUFPLEVBQUssRUFDbEQsRUFBWSxDQUFDLEVBQ2IsRUFBYSxJQUFJLElBMkN2QixPQTFDQSxHQUFTLEVBQVEsQ0FBRSxRQUFTLEVBQUssRUFBRyxDQUFDLEVBQUssRUFBUyxFQUFHLElBQWtCLENBQ3BFLEdBQUksSUFBa0IsT0FDbEIsT0FDSixJQUFNLEVBQVcsRUFBYSxFQUMxQixFQUFjLEVBQVEsR0FDMUIsR0FBSSxPQUFPLEVBQUksSUFBYSxTQUN4QixFQUFjLEVBQU8sS0FBSyxLQUFNLEVBQUksRUFBUyxFQUNqRCxFQUFVLEtBQUssS0FBTSxFQUFJLE9BQU8sRUFDaEMsRUFBVSxLQUFLLEtBQU0sRUFBSSxjQUFjLEVBQ3ZDLEVBQVEsR0FBVyxFQUNuQixTQUFTLENBQU0sQ0FBQyxFQUFLLENBRWpCLElBQU0sRUFBVyxLQUFLLEtBQUssWUFBWSxRQUV2QyxHQURBLEVBQU0sR0FBWSxFQUFjLEVBQVMsRUFBYSxDQUFHLEVBQUksQ0FBRyxFQUM1RCxFQUFXLElBQUksQ0FBRyxFQUNsQixNQUFNLEVBQVMsQ0FBRyxFQUN0QixFQUFXLElBQUksQ0FBRyxFQUNsQixJQUFJLEVBQVcsS0FBSyxLQUFLLEdBQ3pCLEdBQUksT0FBTyxHQUFZLFNBQ25CLEVBQVcsS0FBSyxLQUFLLEdBQ3pCLEdBQUksT0FBTyxHQUFZLFNBQ25CLEVBQWlCLEVBQUssRUFBUyxPQUFRLENBQUcsRUFFekMsUUFBSSxJQUFRLEdBQVksQ0FBUSxFQUNqQyxHQUFJLEVBQUksS0FBTyxJQUNYLEVBQWlCLEVBQUssRUFBVSxHQUFNLENBQUcsRUFDekMsRUFBVSxHQUFPLEVBR2pCLFVBQUssS0FBSyxHQUFPLEVBR3pCLE9BQU8sRUFFWCxTQUFTLENBQVMsQ0FBQyxFQUFRLENBQ3ZCLEdBQUksT0FBTyxHQUFVLFNBQVUsQ0FDM0IsR0FBSSxDQUFDLEdBQU8sS0FBSyxDQUFNLEVBQ25CLE1BQVUsTUFBTSxtQkFBbUIsSUFBUyxFQUNoRCxFQUFPLEtBQUssS0FBTSxJQUFJLEdBQVEsSUFHekMsRUFDTSxFQUNQLFNBQVMsQ0FBZ0IsQ0FBQyxFQUFNLEVBQU0sRUFBSyxDQUN2QyxHQUFJLElBQVMsUUFBYSxDQUFDLEdBQU0sRUFBTSxDQUFJLEVBQ3ZDLE1BQU0sRUFBUyxDQUFHLEVBRTFCLFNBQVMsQ0FBUSxDQUFDLEVBQUssQ0FDbkIsT0FBVyxNQUFNLGNBQWMscUNBQXVDLEdBRzlFLEdBQVEsY0FBZ0IsMkJDeEp4QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsR0FBUSxRQUFVLEdBQVEsV0FBYSxHQUFRLHFCQUE0QixPQUMzRSxJQUFNLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsT0FDQSxPQUNBLFFBQ0EsUUFDQSxRQUVOLFNBQVMsRUFBb0IsQ0FBQyxFQUFJLENBQzlCLEdBQUksR0FBWSxDQUFFLEdBRWQsR0FEQSxHQUFjLENBQUUsRUFDWixHQUFrQixDQUFFLEVBQUcsQ0FDdkIsR0FBaUIsQ0FBRSxFQUNuQixRQUdSLEdBQWlCLEVBQUksSUFBdUIsd0JBQXNCLENBQUUsQ0FBQyxFQUV6RSxHQUFRLHFCQUF1QixHQUMvQixTQUFTLEVBQWdCLEVBQUcsTUFBSyxlQUFjLFNBQVEsWUFBVyxRQUFRLEVBQU0sQ0FDNUUsR0FBSSxFQUFLLEtBQUssSUFDVixFQUFJLEtBQUssRUFBZSxBQUFhLE1BQU0sRUFBUSxRQUFRLFNBQVMsRUFBUSxRQUFRLFNBQVUsRUFBVSxPQUFRLElBQU0sQ0FDbEgsRUFBSSxLQUFNLEFBQWEsb0JBQW9CLEdBQWMsRUFBUSxDQUFJLEdBQUcsRUFDeEUsR0FBcUIsRUFBSyxDQUFJLEVBQzlCLEVBQUksS0FBSyxDQUFJLEVBQ2hCLEVBR0QsT0FBSSxLQUFLLEVBQWUsQUFBYSxNQUFNLEVBQVEsUUFBUSxTQUFTLEdBQWtCLENBQUksSUFBSyxFQUFVLE9BQVEsSUFBTSxFQUFJLEtBQUssR0FBYyxFQUFRLENBQUksQ0FBQyxFQUFFLEtBQUssQ0FBSSxDQUFDLEVBRy9LLFNBQVMsRUFBaUIsQ0FBQyxFQUFNLENBQzdCLE1BQVEsQ0FBYSxPQUFPLEVBQVEsUUFBUSxvQkFBb0IsRUFBUSxRQUFRLGVBQWUsRUFBUSxRQUFRLHVCQUF1QixFQUFRLFFBQVEsWUFBWSxFQUFRLFFBQVEsT0FBTyxFQUFLLFdBQWMsQUFBYSxRQUFRLEVBQVEsUUFBUSxvQkFBZ0MsWUFFclIsU0FBUyxFQUFvQixDQUFDLEVBQUssRUFBTSxDQUNyQyxFQUFJLEdBQUcsRUFBUSxRQUFRLE9BQVEsSUFBTSxDQUtqQyxHQUpBLEVBQUksSUFBSSxFQUFRLFFBQVEsYUFBZSxBQUFhLE1BQU0sRUFBUSxRQUFRLFVBQVUsRUFBUSxRQUFRLGNBQWMsRUFDbEgsRUFBSSxJQUFJLEVBQVEsUUFBUSxXQUFhLEFBQWEsTUFBTSxFQUFRLFFBQVEsVUFBVSxFQUFRLFFBQVEsWUFBWSxFQUM5RyxFQUFJLElBQUksRUFBUSxRQUFRLG1CQUFxQixBQUFhLE1BQU0sRUFBUSxRQUFRLFVBQVUsRUFBUSxRQUFRLG9CQUFvQixFQUM5SCxFQUFJLElBQUksRUFBUSxRQUFRLFNBQVcsQUFBYSxNQUFNLEVBQVEsUUFBUSxVQUFVLEVBQVEsUUFBUSxVQUFVLEVBQ3RHLEVBQUssV0FDTCxFQUFJLElBQUksRUFBUSxRQUFRLGVBQWlCLEFBQWEsTUFBTSxFQUFRLFFBQVEsVUFBVSxFQUFRLFFBQVEsZ0JBQWdCLEdBQzNILElBQU0sQ0FLTCxHQUpBLEVBQUksSUFBSSxFQUFRLFFBQVEsYUFBZSxBQUFhLE9BQU8sRUFDM0QsRUFBSSxJQUFJLEVBQVEsUUFBUSxXQUFhLEFBQWEsY0FBYyxFQUNoRSxFQUFJLElBQUksRUFBUSxRQUFRLG1CQUFxQixBQUFhLGNBQWMsRUFDeEUsRUFBSSxJQUFJLEVBQVEsUUFBUSxTQUFVLEVBQVEsUUFBUSxJQUFJLEVBQ2xELEVBQUssV0FDTCxFQUFJLElBQUksRUFBUSxRQUFRLGVBQWlCLEFBQWEsT0FBTyxFQUNwRSxFQUVMLFNBQVMsRUFBZ0IsQ0FBQyxFQUFJLENBQzFCLElBQVEsU0FBUSxPQUFNLE9BQVEsRUFDOUIsR0FBaUIsRUFBSSxJQUFNLENBQ3ZCLEdBQUksRUFBSyxVQUFZLEVBQU8sU0FDeEIsR0FBZSxDQUFFLEVBSXJCLEdBSEEsR0FBZSxDQUFFLEVBQ2pCLEVBQUksSUFBSSxFQUFRLFFBQVEsUUFBUyxJQUFJLEVBQ3JDLEVBQUksSUFBSSxFQUFRLFFBQVEsT0FBUSxDQUFDLEVBQzdCLEVBQUssWUFDTCxHQUFlLENBQUUsRUFDckIsR0FBZ0IsQ0FBRSxFQUNsQixHQUFjLENBQUUsRUFDbkIsRUFDRCxPQUVKLFNBQVMsRUFBYyxDQUFDLEVBQUksQ0FFeEIsSUFBUSxNQUFLLGdCQUFpQixFQUM5QixFQUFHLFVBQVksRUFBSSxNQUFNLFlBQWMsQUFBYSxNQUFNLGFBQXdCLEVBQ2xGLEVBQUksR0FBSSxBQUFhLE1BQU0sRUFBRyx5QkFBMEIsSUFBTSxFQUFJLE9BQVEsQUFBYSxNQUFNLEVBQUcsa0JBQW9CLEFBQWEsY0FBYyxDQUFDLEVBQ2hKLEVBQUksR0FBSSxBQUFhLE1BQU0sRUFBRyx5QkFBMEIsSUFBTSxFQUFJLE9BQVEsQUFBYSxNQUFNLEVBQUcsa0JBQW9CLEFBQWEsY0FBYyxDQUFDLEVBRXBKLFNBQVMsRUFBYSxDQUFDLEVBQVEsRUFBTSxDQUNqQyxJQUFNLEVBQVEsT0FBTyxHQUFVLFVBQVksRUFBTyxFQUFLLFVBQ3ZELE9BQU8sSUFBVSxFQUFLLEtBQUssUUFBVSxFQUFLLEtBQUssU0FBWSxBQUFhLG9CQUFvQixPQUF1QixNQUd2SCxTQUFTLEVBQWEsQ0FBQyxFQUFJLEVBQU8sQ0FDOUIsR0FBSSxHQUFZLENBQUUsR0FFZCxHQURBLEdBQWMsQ0FBRSxFQUNaLEdBQWtCLENBQUUsRUFBRyxDQUN2QixHQUFpQixFQUFJLENBQUssRUFDMUIsUUFHUyxxQkFBbUIsRUFBSSxDQUFLLEVBRWpELFNBQVMsRUFBaUIsRUFBRyxTQUFRLFFBQVEsQ0FDekMsR0FBSSxPQUFPLEdBQVUsVUFDakIsTUFBTyxDQUFDLEVBQ1osUUFBVyxLQUFPLEVBQ2QsR0FBSSxFQUFLLE1BQU0sSUFBSSxHQUNmLE1BQU8sR0FDZixNQUFPLEdBRVgsU0FBUyxFQUFXLENBQUMsRUFBSSxDQUNyQixPQUFPLE9BQU8sRUFBRyxRQUFVLFVBRS9CLFNBQVMsRUFBZ0IsQ0FBQyxFQUFJLEVBQU8sQ0FDakMsSUFBUSxTQUFRLE1BQUssUUFBUyxFQUM5QixHQUFJLEVBQUssVUFBWSxFQUFPLFNBQ3hCLEdBQWUsQ0FBRSxFQUNyQixHQUFjLENBQUUsRUFDaEIsR0FBaUIsQ0FBRSxFQUNuQixJQUFNLEVBQVksRUFBSSxNQUFNLFFBQVMsRUFBUSxRQUFRLE1BQU0sRUFDM0QsR0FBZ0IsRUFBSSxDQUFTLEVBRTdCLEVBQUksSUFBSSxFQUFRLEFBQWEsTUFBTSxTQUFpQixFQUFRLFFBQVEsUUFBUSxFQUVoRixTQUFTLEVBQWEsQ0FBQyxFQUFJLENBQ1oscUJBQW1CLENBQUUsRUFDaEMsR0FBcUIsQ0FBRSxFQUUzQixTQUFTLEVBQWUsQ0FBQyxFQUFJLEVBQVcsQ0FDcEMsR0FBSSxFQUFHLEtBQUssSUFDUixPQUFPLEdBQWUsRUFBSSxDQUFDLEVBQUcsR0FBTyxDQUFTLEVBQ2xELElBQU0sRUFBdUIsa0JBQWdCLEVBQUcsTUFBTSxFQUNoRCxFQUE4QiwwQkFBd0IsRUFBSSxDQUFLLEVBQ3JFLEdBQWUsRUFBSSxFQUFPLENBQUMsRUFBYyxDQUFTLEVBRXRELFNBQVMsRUFBb0IsQ0FBQyxFQUFJLENBQzlCLElBQVEsU0FBUSxnQkFBZSxPQUFNLFFBQVMsRUFDOUMsR0FBSSxFQUFPLE1BQVEsRUFBSyx1QkFBb0Msd0JBQXNCLEVBQVEsRUFBSyxLQUFLLEVBQ2hHLEVBQUssT0FBTyxLQUFLLDZDQUE2QyxJQUFnQixFQUd0RixTQUFTLEVBQWMsQ0FBQyxFQUFJLENBQ3hCLElBQVEsU0FBUSxRQUFTLEVBQ3pCLEdBQUksRUFBTyxVQUFZLFFBQWEsRUFBSyxhQUFlLEVBQUssYUFDOUMsbUJBQWlCLEVBQUksdUNBQXVDLEVBRy9FLFNBQVMsRUFBYSxDQUFDLEVBQUksQ0FDdkIsSUFBTSxFQUFRLEVBQUcsT0FBTyxFQUFHLEtBQUssVUFDaEMsR0FBSSxFQUNBLEVBQUcsT0FBdUIsY0FBWSxFQUFHLEtBQUssWUFBYSxFQUFHLE9BQVEsQ0FBSyxFQUVuRixTQUFTLEVBQWdCLENBQUMsRUFBSSxDQUMxQixHQUFJLEVBQUcsT0FBTyxRQUFVLENBQUMsRUFBRyxVQUFVLE9BQ2xDLE1BQVUsTUFBTSw2QkFBNkIsRUFFckQsU0FBUyxFQUFjLEVBQUcsTUFBSyxZQUFXLFNBQVEsZ0JBQWUsUUFBUSxDQUNyRSxJQUFNLEVBQU0sRUFBTyxTQUNuQixHQUFJLEVBQUssV0FBYSxHQUNsQixFQUFJLEtBQU0sQUFBYSxNQUFNLEVBQVEsUUFBUSxtQkFBbUIsSUFBTSxFQUVyRSxRQUFJLE9BQU8sRUFBSyxVQUFZLFdBQVksQ0FDekMsSUFBTSxFQUFjLEFBQWEsUUFBUSxhQUNuQyxFQUFXLEVBQUksV0FBVyxPQUFRLENBQUUsSUFBSyxFQUFVLElBQUssQ0FBQyxFQUMvRCxFQUFJLEtBQU0sQUFBYSxNQUFNLEVBQVEsUUFBUSxzQkFBc0IsTUFBUSxNQUFlLFdBQWtCLEdBR3BILFNBQVMsRUFBYSxDQUFDLEVBQUksQ0FDdkIsSUFBUSxNQUFLLFlBQVcsZUFBYyxrQkFBaUIsUUFBUyxFQUNoRSxHQUFJLEVBQVUsT0FFVixFQUFJLEdBQUksQUFBYSxNQUFNLEVBQVEsUUFBUSxlQUFnQixJQUFNLEVBQUksT0FBTyxFQUFRLFFBQVEsSUFBSSxFQUFHLElBQU0sRUFBSSxNQUFPLEFBQWEsVUFBVSxLQUFtQixFQUFRLFFBQVEsVUFBVSxDQUFDLEVBRXhMLEtBRUQsR0FEQSxFQUFJLE9BQVEsQUFBYSxNQUFNLFdBQXVCLEVBQVEsUUFBUSxPQUFPLEVBQ3pFLEVBQUssWUFDTCxHQUFnQixDQUFFLEVBQ3RCLEVBQUksT0FBUSxBQUFhLE1BQU0sRUFBUSxRQUFRLGNBQWMsR0FHckUsU0FBUyxFQUFlLEVBQUcsTUFBSyxZQUFXLFFBQU8sU0FBUyxDQUN2RCxHQUFJLGFBQTJCLE9BQzNCLEVBQUksT0FBUSxBQUFhLE1BQU0sVUFBbUIsQ0FBSyxFQUMzRCxHQUFJLGFBQTJCLE9BQzNCLEVBQUksT0FBUSxBQUFhLE1BQU0sVUFBbUIsQ0FBSyxFQUUvRCxTQUFTLEVBQWMsQ0FBQyxFQUFJLEVBQU8sRUFBWSxFQUFXLENBQ3RELElBQVEsTUFBSyxTQUFRLE9BQU0sWUFBVyxPQUFNLFFBQVMsR0FDN0MsU0FBVSxFQUNsQixHQUFJLEVBQU8sT0FBUyxFQUFLLHVCQUF5QixDQUFZLHdCQUFzQixFQUFRLENBQUssR0FBSSxDQUNqRyxFQUFJLE1BQU0sSUFBTSxHQUFZLEVBQUksT0FBUSxFQUFNLElBQUksS0FBSyxVQUFVLENBQUMsRUFDbEUsT0FFSixHQUFJLENBQUMsRUFBSyxJQUNOLEdBQWlCLEVBQUksQ0FBSyxFQUM5QixFQUFJLE1BQU0sSUFBTSxDQUNaLFFBQVcsS0FBUyxFQUFNLE1BQ3RCLEVBQWMsQ0FBSyxFQUN2QixFQUFjLEVBQU0sSUFBSSxFQUMzQixFQUNELFNBQVMsQ0FBYSxDQUFDLEVBQU8sQ0FDMUIsR0FBSSxDQUFxQixrQkFBZ0IsRUFBUSxDQUFLLEVBQ2xELE9BQ0osR0FBSSxFQUFNLEtBQU0sQ0FHWixHQUZBLEVBQUksR0FBa0IsaUJBQWUsRUFBTSxLQUFNLEVBQU0sRUFBSyxhQUFhLENBQUMsRUFDMUUsR0FBZ0IsRUFBSSxDQUFLLEVBQ3JCLEVBQU0sU0FBVyxHQUFLLEVBQU0sS0FBTyxFQUFNLE1BQVEsRUFDakQsRUFBSSxLQUFLLEVBQ00sbUJBQWlCLENBQUUsRUFFdEMsRUFBSSxNQUFNLEVBR1YsUUFBZ0IsRUFBSSxDQUFLLEVBRzdCLEdBQUksQ0FBQyxFQUNELEVBQUksR0FBSSxBQUFhLE1BQU0sRUFBUSxRQUFRLGNBQWMsR0FBYSxHQUFHLEdBR3JGLFNBQVMsRUFBZSxDQUFDLEVBQUksRUFBTyxDQUNoQyxJQUFRLE1BQUssU0FBUSxNQUFRLGdCQUFtQixFQUNoRCxHQUFJLEVBQ2Usa0JBQWdCLEVBQUksRUFBTSxJQUFJLEVBQ2pELEVBQUksTUFBTSxJQUFNLENBQ1osUUFBVyxLQUFRLEVBQU0sTUFDckIsR0FBd0IsaUJBQWUsRUFBUSxDQUFJLEVBQy9DLEdBQVksRUFBSSxFQUFLLFFBQVMsRUFBSyxXQUFZLEVBQU0sSUFBSSxFQUdwRSxFQUVMLFNBQVMsRUFBZ0IsQ0FBQyxFQUFJLEVBQU8sQ0FDakMsR0FBSSxFQUFHLFVBQVUsTUFBUSxDQUFDLEVBQUcsS0FBSyxZQUM5QixPQUVKLEdBREEsR0FBa0IsRUFBSSxDQUFLLEVBQ3ZCLENBQUMsRUFBRyxLQUFLLGdCQUNULEdBQW1CLEVBQUksQ0FBSyxFQUNoQyxHQUFrQixFQUFJLEVBQUcsU0FBUyxFQUV0QyxTQUFTLEVBQWlCLENBQUMsRUFBSSxFQUFPLENBQ2xDLEdBQUksQ0FBQyxFQUFNLE9BQ1AsT0FDSixHQUFJLENBQUMsRUFBRyxVQUFVLE9BQVEsQ0FDdEIsRUFBRyxVQUFZLEVBQ2YsT0FFSixFQUFNLFFBQVEsQ0FBQyxJQUFNLENBQ2pCLEdBQUksQ0FBQyxHQUFhLEVBQUcsVUFBVyxDQUFDLEVBQzdCLEdBQWlCLEVBQUksU0FBUyw4QkFBOEIsRUFBRyxVQUFVLEtBQUssR0FBRyxJQUFJLEVBRTVGLEVBQ0QsR0FBa0IsRUFBSSxDQUFLLEVBRS9CLFNBQVMsRUFBa0IsQ0FBQyxFQUFJLEVBQUksQ0FDaEMsR0FBSSxFQUFHLE9BQVMsR0FBSyxFQUFFLEVBQUcsU0FBVyxHQUFLLEVBQUcsU0FBUyxNQUFNLEdBQ3hELEdBQWlCLEVBQUksaURBQWlELEVBRzlFLFNBQVMsRUFBaUIsQ0FBQyxFQUFJLEVBQUksQ0FDL0IsSUFBTSxFQUFRLEVBQUcsS0FBSyxNQUFNLElBQzVCLFFBQVcsS0FBVyxFQUFPLENBQ3pCLElBQU0sRUFBTyxFQUFNLEdBQ25CLEdBQUksT0FBTyxHQUFRLFVBQWdDLGlCQUFlLEVBQUcsT0FBUSxDQUFJLEVBQUcsQ0FDaEYsSUFBUSxRQUFTLEVBQUssV0FDdEIsR0FBSSxFQUFLLFFBQVUsQ0FBQyxFQUFLLEtBQUssQ0FBQyxJQUFNLEdBQWtCLEVBQUksQ0FBQyxDQUFDLEVBQ3pELEdBQWlCLEVBQUksaUJBQWlCLEVBQUssS0FBSyxHQUFHLG1CQUFtQixJQUFVLElBS2hHLFNBQVMsRUFBaUIsQ0FBQyxFQUFPLEVBQU0sQ0FDcEMsT0FBTyxFQUFNLFNBQVMsQ0FBSSxHQUFNLElBQVMsVUFBWSxFQUFNLFNBQVMsU0FBUyxFQUVqRixTQUFTLEVBQVksQ0FBQyxFQUFJLEVBQUcsQ0FDekIsT0FBTyxFQUFHLFNBQVMsQ0FBQyxHQUFNLElBQU0sV0FBYSxFQUFHLFNBQVMsUUFBUSxFQUVyRSxTQUFTLEVBQWlCLENBQUMsRUFBSSxFQUFXLENBQ3RDLElBQU0sRUFBSyxDQUFDLEVBQ1osUUFBVyxLQUFLLEVBQUcsVUFDZixHQUFJLEdBQWEsRUFBVyxDQUFDLEVBQ3pCLEVBQUcsS0FBSyxDQUFDLEVBQ1IsUUFBSSxFQUFVLFNBQVMsU0FBUyxHQUFLLElBQU0sU0FDNUMsRUFBRyxLQUFLLFNBQVMsRUFFekIsRUFBRyxVQUFZLEVBRW5CLFNBQVMsRUFBZ0IsQ0FBQyxFQUFJLEVBQUssQ0FDL0IsSUFBTSxFQUFhLEVBQUcsVUFBVSxPQUFTLEVBQUcsY0FDNUMsR0FBTyxRQUFRLG1CQUNKLG1CQUFpQixFQUFJLEVBQUssRUFBRyxLQUFLLFdBQVcsRUFFNUQsTUFBTSxFQUFXLENBQ2IsV0FBVyxDQUFDLEVBQUksRUFBSyxFQUFTLENBYzFCLEdBYmMsd0JBQXNCLEVBQUksRUFBSyxDQUFPLEVBQ3BELEtBQUssSUFBTSxFQUFHLElBQ2QsS0FBSyxVQUFZLEVBQUcsVUFDcEIsS0FBSyxRQUFVLEVBQ2YsS0FBSyxLQUFPLEVBQUcsS0FDZixLQUFLLE9BQVMsRUFBRyxPQUFPLEdBQ3hCLEtBQUssTUFBUSxFQUFJLE9BQVMsRUFBRyxLQUFLLE9BQVMsS0FBSyxRQUFVLEtBQUssT0FBTyxNQUN0RSxLQUFLLFlBQXlCLGtCQUFnQixFQUFJLEtBQUssT0FBUSxFQUFTLEtBQUssS0FBSyxFQUNsRixLQUFLLFdBQWEsRUFBSSxXQUN0QixLQUFLLGFBQWUsRUFBRyxPQUN2QixLQUFLLE9BQVMsQ0FBQyxFQUNmLEtBQUssR0FBSyxFQUNWLEtBQUssSUFBTSxFQUNQLEtBQUssTUFDTCxLQUFLLFdBQWEsRUFBRyxJQUFJLE1BQU0sVUFBVyxHQUFRLEtBQUssTUFBTyxDQUFFLENBQUMsRUFJakUsUUFEQSxLQUFLLFdBQWEsS0FBSyxZQUNuQixDQUFlLG1CQUFpQixLQUFLLE9BQVEsRUFBSSxXQUFZLEVBQUksY0FBYyxFQUMvRSxNQUFVLE1BQU0sR0FBRyxtQkFBeUIsS0FBSyxVQUFVLEVBQUksVUFBVSxHQUFHLEVBR3BGLEdBQUksU0FBVSxFQUFNLEVBQUksWUFBYyxFQUFJLFNBQVcsR0FDakQsS0FBSyxVQUFZLEVBQUcsSUFBSSxNQUFNLFFBQVMsRUFBUSxRQUFRLE1BQU0sRUFHckUsTUFBTSxDQUFDLEVBQVcsRUFBZSxFQUFZLENBQ3pDLEtBQUssV0FBeUIsTUFBSyxDQUFTLEVBQUcsRUFBZSxDQUFVLEVBRTVFLFVBQVUsQ0FBQyxFQUFXLEVBQWUsRUFBWSxDQUU3QyxHQURBLEtBQUssSUFBSSxHQUFHLENBQVMsRUFDakIsRUFDQSxFQUFXLEVBRVgsVUFBSyxNQUFNLEVBQ2YsR0FBSSxHQUdBLEdBRkEsS0FBSyxJQUFJLEtBQUssRUFDZCxFQUFjLEVBQ1YsS0FBSyxVQUNMLEtBQUssSUFBSSxNQUFNLEVBR25CLFFBQUksS0FBSyxVQUNMLEtBQUssSUFBSSxNQUFNLEVBRWYsVUFBSyxJQUFJLEtBQUssRUFHMUIsSUFBSSxDQUFDLEVBQVcsRUFBWSxDQUN4QixLQUFLLFdBQXlCLE1BQUssQ0FBUyxFQUFHLE9BQVcsQ0FBVSxFQUV4RSxJQUFJLENBQUMsRUFBVyxDQUNaLEdBQUksSUFBYyxPQUFXLENBRXpCLEdBREEsS0FBSyxNQUFNLEVBQ1AsQ0FBQyxLQUFLLFVBQ04sS0FBSyxJQUFJLEdBQUcsRUFBSyxFQUNyQixPQUlKLEdBRkEsS0FBSyxJQUFJLEdBQUcsQ0FBUyxFQUNyQixLQUFLLE1BQU0sRUFDUCxLQUFLLFVBQ0wsS0FBSyxJQUFJLE1BQU0sRUFFZixVQUFLLElBQUksS0FBSyxFQUV0QixTQUFTLENBQUMsRUFBVyxDQUNqQixHQUFJLENBQUMsS0FBSyxNQUNOLE9BQU8sS0FBSyxLQUFLLENBQVMsRUFDOUIsSUFBUSxjQUFlLEtBQ3ZCLEtBQUssS0FBTSxBQUFhLE1BQU0sdUJBQThDLEtBQUksS0FBSyxhQUFhLEVBQUcsQ0FBUyxJQUFJLEVBRXRILEtBQUssQ0FBQyxFQUFRLEVBQWEsRUFBWSxDQUNuQyxHQUFJLEVBQWEsQ0FDYixLQUFLLFVBQVUsQ0FBVyxFQUMxQixLQUFLLE9BQU8sRUFBUSxDQUFVLEVBQzlCLEtBQUssVUFBVSxDQUFDLENBQUMsRUFDakIsT0FFSixLQUFLLE9BQU8sRUFBUSxDQUFVLEVBRWxDLE1BQU0sQ0FBQyxFQUFRLEVBQVksRUFFdEIsRUFBa0Isb0JBQTRCLGdCQUFhLEtBQU0sS0FBSyxJQUFJLE1BQU8sQ0FBVSxFQUVoRyxVQUFVLEVBQUcsQ0FDSSxlQUFhLEtBQU0sS0FBSyxJQUFJLFlBQXVCLG9CQUFpQixFQUVyRixLQUFLLEVBQUcsQ0FDSixHQUFJLEtBQUssWUFBYyxPQUNuQixNQUFVLE1BQU0seUNBQXlDLEVBQ2hELG9CQUFrQixLQUFLLElBQUssS0FBSyxTQUFTLEVBRTNELEVBQUUsQ0FBQyxFQUFNLENBQ0wsR0FBSSxDQUFDLEtBQUssVUFDTixLQUFLLElBQUksR0FBRyxDQUFJLEVBRXhCLFNBQVMsQ0FBQyxFQUFLLEVBQVEsQ0FDbkIsR0FBSSxFQUNBLE9BQU8sT0FBTyxLQUFLLE9BQVEsQ0FBRyxFQUU5QixVQUFLLE9BQVMsRUFFdEIsVUFBVSxDQUFDLEVBQU8sRUFBVyxFQUF1QixNQUFLLENBQ3JELEtBQUssSUFBSSxNQUFNLElBQU0sQ0FDakIsS0FBSyxXQUFXLEVBQU8sQ0FBVSxFQUNqQyxFQUFVLEVBQ2IsRUFFTCxVQUFVLENBQUMsRUFBa0IsTUFBSyxFQUF1QixNQUFLLENBQzFELEdBQUksQ0FBQyxLQUFLLE1BQ04sT0FDSixJQUFRLE1BQUssYUFBWSxhQUFZLE9BQVEsS0FFN0MsR0FEQSxFQUFJLEdBQWlCLEtBQUssQUFBYSxNQUFNLGtCQUE0QixDQUFVLENBQUMsRUFDaEYsSUFBb0IsTUFDcEIsRUFBSSxPQUFPLEVBQU8sRUFBSSxFQUMxQixHQUFJLEVBQVcsUUFBVSxFQUFJLGdCQUd6QixHQUZBLEVBQUksT0FBTyxLQUFLLGFBQWEsQ0FBQyxFQUM5QixLQUFLLFdBQVcsRUFDWixJQUFvQixNQUNwQixFQUFJLE9BQU8sRUFBTyxFQUFLLEVBRS9CLEVBQUksS0FBSyxFQUViLFlBQVksRUFBRyxDQUNYLElBQVEsTUFBSyxhQUFZLGFBQVksTUFBSyxNQUFPLEtBQ2pELE9BQXFCLEtBQUksRUFBZSxFQUFHLEVBQW1CLENBQUMsRUFDL0QsU0FBUyxDQUFjLEVBQUcsQ0FDdEIsR0FBSSxFQUFXLE9BQVEsQ0FFbkIsR0FBSSxFQUFFLGFBQWdDLFFBQ2xDLE1BQVUsTUFBTSwwQkFBMEIsRUFDOUMsSUFBTSxFQUFLLE1BQU0sUUFBUSxDQUFVLEVBQUksRUFBYSxDQUFDLENBQVUsRUFDL0QsTUFBUSxDQUFhLE1BQXFCLGtCQUFnQixFQUFJLEVBQVksRUFBRyxLQUFLLGNBQTBCLFlBQVMsS0FBSyxJQUU5SCxPQUFpQixNQUVyQixTQUFTLENBQWtCLEVBQUcsQ0FDMUIsR0FBSSxFQUFJLGVBQWdCLENBQ3BCLElBQU0sRUFBb0IsRUFBSSxXQUFXLGdCQUFpQixDQUFFLElBQUssRUFBSSxjQUFlLENBQUMsRUFDckYsTUFBUSxDQUFhLE9BQU8sS0FBcUIsS0FFckQsT0FBaUIsT0FHekIsU0FBUyxDQUFDLEVBQU0sRUFBTyxDQUNuQixJQUFNLEVBQTRCLGdCQUFjLEtBQUssR0FBSSxDQUFJLEVBQzdDLHVCQUFxQixFQUFXLEtBQUssR0FBSSxDQUFJLEVBQzdDLHVCQUFxQixFQUFXLENBQUksRUFDcEQsSUFBTSxFQUFjLElBQUssS0FBSyxNQUFPLEVBQVcsTUFBTyxPQUFXLE1BQU8sTUFBVSxFQUVuRixPQURBLEdBQWMsRUFBYSxDQUFLLEVBQ3pCLEVBRVgsY0FBYyxDQUFDLEVBQVcsRUFBUSxDQUM5QixJQUFRLEtBQUksT0FBUSxLQUNwQixHQUFJLENBQUMsRUFBRyxLQUFLLFlBQ1QsT0FDSixHQUFJLEVBQUcsUUFBVSxJQUFRLEVBQVUsUUFBVSxPQUN6QyxFQUFHLE1BQWUsa0JBQWUsTUFBTSxFQUFLLEVBQVUsTUFBTyxFQUFHLE1BQU8sQ0FBTSxFQUVqRixHQUFJLEVBQUcsUUFBVSxJQUFRLEVBQVUsUUFBVSxPQUN6QyxFQUFHLE1BQWUsa0JBQWUsTUFBTSxFQUFLLEVBQVUsTUFBTyxFQUFHLE1BQU8sQ0FBTSxFQUdyRixtQkFBbUIsQ0FBQyxFQUFXLEVBQU8sQ0FDbEMsSUFBUSxLQUFJLE9BQVEsS0FDcEIsR0FBSSxFQUFHLEtBQUssY0FBZ0IsRUFBRyxRQUFVLElBQVEsRUFBRyxRQUFVLElBRTFELE9BREEsRUFBSSxHQUFHLEVBQU8sSUFBTSxLQUFLLGVBQWUsRUFBcUIsTUFBSSxDQUFDLEVBQzNELEdBR25CLENBQ0EsR0FBUSxXQUFhLEdBQ3JCLFNBQVMsRUFBVyxDQUFDLEVBQUksRUFBUyxFQUFLLEVBQVUsQ0FDN0MsSUFBTSxFQUFNLElBQUksR0FBVyxFQUFJLEVBQUssQ0FBTyxFQUMzQyxHQUFJLFNBQVUsRUFDVixFQUFJLEtBQUssRUFBSyxDQUFRLEVBRXJCLFFBQUksRUFBSSxPQUFTLEVBQUksU0FDUixtQkFBaUIsRUFBSyxDQUFHLEVBRXRDLFFBQUksVUFBVyxFQUNGLG9CQUFrQixFQUFLLENBQUcsRUFFdkMsUUFBSSxFQUFJLFNBQVcsRUFBSSxTQUNWLG1CQUFpQixFQUFLLENBQUcsRUFHL0MsSUFBTSxHQUFlLHNCQUNmLEdBQXdCLG1DQUM5QixTQUFTLEVBQU8sQ0FBQyxHQUFTLFlBQVcsWUFBVyxlQUFlLENBQzNELElBQUksRUFDQSxFQUNKLEdBQUksSUFBVSxHQUNWLE9BQU8sRUFBUSxRQUFRLFNBQzNCLEdBQUksRUFBTSxLQUFPLElBQUssQ0FDbEIsR0FBSSxDQUFDLEdBQWEsS0FBSyxDQUFLLEVBQ3hCLE1BQVUsTUFBTSx5QkFBeUIsR0FBTyxFQUNwRCxFQUFjLEVBQ2QsRUFBTyxFQUFRLFFBQVEsU0FFdEIsS0FDRCxJQUFNLEVBQVUsR0FBc0IsS0FBSyxDQUFLLEVBQ2hELEdBQUksQ0FBQyxFQUNELE1BQVUsTUFBTSx5QkFBeUIsR0FBTyxFQUNwRCxJQUFNLEVBQUssQ0FBQyxFQUFRLEdBRXBCLEdBREEsRUFBYyxFQUFRLEdBQ2xCLElBQWdCLElBQUssQ0FDckIsR0FBSSxHQUFNLEVBQ04sTUFBVSxNQUFNLEVBQVMsaUJBQWtCLENBQUUsQ0FBQyxFQUNsRCxPQUFPLEVBQVksRUFBWSxHQUVuQyxHQUFJLEVBQUssRUFDTCxNQUFVLE1BQU0sRUFBUyxPQUFRLENBQUUsQ0FBQyxFQUV4QyxHQURBLEVBQU8sRUFBVSxFQUFZLEdBQ3pCLENBQUMsRUFDRCxPQUFPLEVBRWYsSUFBSSxFQUFPLEVBQ0wsRUFBVyxFQUFZLE1BQU0sR0FBRyxFQUN0QyxRQUFXLEtBQVcsRUFDbEIsR0FBSSxFQUNBLEVBQVEsQUFBYSxNQUFNLElBQXFCLGNBQXdCLHVCQUFxQixDQUFPLENBQUMsSUFDckcsRUFBUSxBQUFhLE1BQU0sUUFBVyxJQUc5QyxPQUFPLEVBQ1AsU0FBUyxDQUFRLENBQUMsRUFBYSxFQUFJLENBQy9CLE1BQU8saUJBQWlCLEtBQWUsaUNBQWtDLEtBR2pGLEdBQVEsUUFBVSwyQkNyZ0JsQixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsTUFBTSxXQUF3QixLQUFNLENBQ2hDLFdBQVcsQ0FBQyxFQUFRLENBQ2hCLE1BQU0sbUJBQW1CLEVBQ3pCLEtBQUssT0FBUyxFQUNkLEtBQUssSUFBTSxLQUFLLFdBQWEsR0FFckMsQ0FDQSxHQUFRLFFBQVUsMkJDUmxCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLFFBQ04sTUFBTSxXQUF3QixLQUFNLENBQ2hDLFdBQVcsQ0FBQyxFQUFVLEVBQVEsRUFBSyxFQUFLLENBQ3BDLE1BQU0sR0FBTywyQkFBMkIsYUFBZSxHQUFRLEVBQy9ELEtBQUssV0FBMkIsY0FBWSxFQUFVLEVBQVEsQ0FBRyxFQUNqRSxLQUFLLGNBQThCLGVBQTJCLGVBQWEsRUFBVSxLQUFLLFVBQVUsQ0FBQyxFQUU3RyxDQUNBLEdBQVEsUUFBVSwyQkNUbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsY0FBZ0IsR0FBUSxtQkFBcUIsR0FBUSxXQUFhLEdBQVEsY0FBZ0IsR0FBUSxVQUFpQixPQUMzSCxJQUFNLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNOLE1BQU0sRUFBVSxDQUNaLFdBQVcsQ0FBQyxFQUFLLENBQ2IsSUFBSSxFQUNKLEtBQUssS0FBTyxDQUFDLEVBQ2IsS0FBSyxlQUFpQixDQUFDLEVBQ3ZCLElBQUksRUFDSixHQUFJLE9BQU8sRUFBSSxRQUFVLFNBQ3JCLEVBQVMsRUFBSSxPQUNqQixLQUFLLE9BQVMsRUFBSSxPQUNsQixLQUFLLFNBQVcsRUFBSSxTQUNwQixLQUFLLEtBQU8sRUFBSSxNQUFRLEtBQ3hCLEtBQUssUUFBVSxFQUFLLEVBQUksVUFBWSxNQUFRLElBQVksT0FBSSxFQUFtQixlQUFhLElBQVcsTUFBUSxJQUFnQixPQUFTLE9BQUksRUFBTyxFQUFJLFVBQVksTUFBTSxFQUN6SyxLQUFLLFdBQWEsRUFBSSxXQUN0QixLQUFLLFVBQVksRUFBSSxVQUNyQixLQUFLLEtBQU8sRUFBSSxLQUNoQixLQUFLLE9BQVMsSUFBVyxNQUFRLElBQWdCLE9BQVMsT0FBSSxFQUFPLE9BQ3JFLEtBQUssS0FBTyxDQUFDLEVBRXJCLENBQ0EsR0FBUSxVQUFZLEdBSXBCLFNBQVMsRUFBYSxDQUFDLEVBQUssQ0FFeEIsSUFBTSxFQUFPLEdBQW1CLEtBQUssS0FBTSxDQUFHLEVBQzlDLEdBQUksRUFDQSxPQUFPLEVBQ1gsSUFBTSxFQUF1QixlQUFhLEtBQUssS0FBSyxZQUFhLEVBQUksS0FBSyxNQUFNLEdBQ3hFLE1BQUssU0FBVSxLQUFLLEtBQUssTUFDekIsaUJBQWtCLEtBQUssS0FDekIsRUFBTSxJQUFjLFdBQVEsS0FBSyxNQUFPLENBQUUsTUFBSyxRQUFPLGVBQWMsQ0FBQyxFQUN2RSxFQUNKLEdBQUksRUFBSSxPQUNKLEVBQW1CLEVBQUksV0FBVyxRQUFTLENBQ3ZDLElBQUssR0FBbUIsUUFDeEIsS0FBTyxBQUFhLDBEQUN4QixDQUFDLEVBRUwsSUFBTSxFQUFlLEVBQUksVUFBVSxVQUFVLEVBQzdDLEVBQUksYUFBZSxFQUNuQixJQUFNLEVBQVksQ0FDZCxNQUNBLFVBQVcsS0FBSyxLQUFLLFVBQ3JCLEtBQU0sR0FBUSxRQUFRLEtBQ3RCLFdBQVksR0FBUSxRQUFRLFdBQzVCLG1CQUFvQixHQUFRLFFBQVEsbUJBQ3BDLFVBQVcsQ0FBQyxHQUFRLFFBQVEsSUFBSSxFQUNoQyxZQUFhLENBQVcsTUFBRyxFQUMzQixVQUFXLEVBQ1gsVUFBVyxDQUFDLEVBQ1osa0JBQW1CLElBQUksSUFDdkIsYUFBYyxFQUFJLFdBQVcsU0FBVSxLQUFLLEtBQUssS0FBSyxTQUFXLEdBQzNELENBQUUsSUFBSyxFQUFJLE9BQVEsS0FBb0IsYUFBVyxFQUFJLE1BQU0sQ0FBRSxFQUM5RCxDQUFFLElBQUssRUFBSSxNQUFPLENBQUMsRUFDekIsZUFDQSxnQkFBaUIsRUFDakIsT0FBUSxFQUFJLE9BQ1osVUFBVyxFQUNYLFNBQ0EsT0FBUSxFQUFJLFFBQVUsRUFDdEIsV0FBc0IsT0FDdEIsY0FBZSxFQUFJLGFBQWUsS0FBSyxLQUFLLElBQU0sR0FBSyxLQUN2RCxVQUFZLEFBQWEsU0FDekIsS0FBTSxLQUFLLEtBQ1gsS0FBTSxJQUNWLEVBQ0ksRUFDSixHQUFJLENBQ0EsS0FBSyxjQUFjLElBQUksQ0FBRyxFQUNYLHdCQUFzQixDQUFTLEVBQzlDLEVBQUksU0FBUyxLQUFLLEtBQUssS0FBSyxRQUFRLEVBRXBDLElBQU0sRUFBZSxFQUFJLFNBQVMsRUFHbEMsR0FGQSxFQUFhLEdBQUcsRUFBSSxVQUFVLEdBQVEsUUFBUSxLQUFLLFdBQVcsSUFFMUQsS0FBSyxLQUFLLEtBQUssUUFDZixFQUFhLEtBQUssS0FBSyxLQUFLLFFBQVEsRUFBWSxDQUFHLEVBR3ZELElBQU0sRUFEbUIsU0FBUyxHQUFHLEdBQVEsUUFBUSxPQUFRLEdBQUcsR0FBUSxRQUFRLFFBQVMsQ0FBVSxFQUNyRSxLQUFNLEtBQUssTUFBTSxJQUFJLENBQUMsRUFLcEQsR0FKQSxLQUFLLE1BQU0sTUFBTSxFQUFjLENBQUUsSUFBSyxDQUFTLENBQUMsRUFDaEQsRUFBUyxPQUFTLEtBQ2xCLEVBQVMsT0FBUyxFQUFJLE9BQ3RCLEVBQVMsVUFBWSxFQUNqQixFQUFJLE9BQ0osRUFBUyxPQUFTLEdBQ3RCLEdBQUksS0FBSyxLQUFLLEtBQUssU0FBVyxHQUMxQixFQUFTLE9BQVMsQ0FBRSxlQUFjLGVBQWMsWUFBYSxFQUFJLE9BQVEsRUFFN0UsR0FBSSxLQUFLLEtBQUssWUFBYSxDQUN2QixJQUFRLFFBQU8sU0FBVSxFQU96QixHQU5BLEVBQVMsVUFBWSxDQUNqQixNQUFPLGFBQTJCLFFBQU8sT0FBWSxFQUNyRCxNQUFPLGFBQTJCLFFBQU8sT0FBWSxFQUNyRCxhQUFjLGFBQTJCLFFBQ3pDLGFBQWMsYUFBMkIsT0FDN0MsRUFDSSxFQUFTLE9BQ1QsRUFBUyxPQUFPLFVBQTBCLGFBQVcsRUFBUyxTQUFTLEVBRy9FLE9BREEsRUFBSSxTQUFXLEVBQ1IsRUFFWCxNQUFPLEVBQUcsQ0FHTixHQUZBLE9BQU8sRUFBSSxTQUNYLE9BQU8sRUFBSSxhQUNQLEVBQ0EsS0FBSyxPQUFPLE1BQU0seUNBQTBDLENBQVUsRUFFMUUsTUFBTSxTQUVWLENBQ0ksS0FBSyxjQUFjLE9BQU8sQ0FBRyxHQUdyQyxHQUFRLGNBQWdCLEdBQ3hCLFNBQVMsRUFBVSxDQUFDLEVBQU0sRUFBUSxFQUFLLENBQ25DLElBQUksRUFDSixFQUFvQixjQUFZLEtBQUssS0FBSyxZQUFhLEVBQVEsQ0FBRyxFQUNsRSxJQUFNLEVBQVksRUFBSyxLQUFLLEdBQzVCLEdBQUksRUFDQSxPQUFPLEVBQ1gsSUFBSSxFQUFPLEdBQVEsS0FBSyxLQUFNLEVBQU0sQ0FBRyxFQUN2QyxHQUFJLElBQVMsT0FBVyxDQUNwQixJQUFNLEdBQVUsRUFBSyxFQUFLLGFBQWUsTUFBUSxJQUFZLE9BQVMsT0FBSSxFQUFHLElBQ3JFLFlBQWEsS0FBSyxLQUMxQixHQUFJLEVBQ0EsRUFBTyxJQUFJLEdBQVUsQ0FBRSxTQUFRLFdBQVUsT0FBTSxRQUFPLENBQUMsRUFFL0QsR0FBSSxJQUFTLE9BQ1QsT0FDSixPQUFRLEVBQUssS0FBSyxHQUFPLEdBQWdCLEtBQUssS0FBTSxDQUFJLEVBRTVELEdBQVEsV0FBYSxHQUNyQixTQUFTLEVBQWUsQ0FBQyxFQUFLLENBQzFCLEdBQWtCLGFBQVcsRUFBSSxPQUFRLEtBQUssS0FBSyxVQUFVLEVBQ3pELE9BQU8sRUFBSSxPQUNmLE9BQU8sRUFBSSxTQUFXLEVBQU0sR0FBYyxLQUFLLEtBQU0sQ0FBRyxFQUc1RCxTQUFTLEVBQWtCLENBQUMsRUFBUSxDQUNoQyxRQUFXLEtBQU8sS0FBSyxjQUNuQixHQUFJLEdBQWMsRUFBSyxDQUFNLEVBQ3pCLE9BQU8sRUFHbkIsR0FBUSxtQkFBcUIsR0FDN0IsU0FBUyxFQUFhLENBQUMsRUFBSSxFQUFJLENBQzNCLE9BQU8sRUFBRyxTQUFXLEVBQUcsUUFBVSxFQUFHLE9BQVMsRUFBRyxNQUFRLEVBQUcsU0FBVyxFQUFHLE9BSTlFLFNBQVMsRUFBTyxDQUFDLEVBQ2pCLEVBQ0UsQ0FDRSxJQUFJLEVBQ0osTUFBTyxPQUFRLEVBQU0sS0FBSyxLQUFLLEtBQVMsU0FDcEMsRUFBTSxFQUNWLE9BQU8sR0FBTyxLQUFLLFFBQVEsSUFBUSxHQUFjLEtBQUssS0FBTSxFQUFNLENBQUcsRUFHekUsU0FBUyxFQUFhLENBQUMsRUFDdkIsRUFDRSxDQUNFLElBQU0sRUFBSSxLQUFLLEtBQUssWUFBWSxNQUFNLENBQUcsRUFDbkMsRUFBd0IsZ0JBQWMsS0FBSyxLQUFLLFlBQWEsQ0FBQyxFQUNoRSxFQUF1QixlQUFhLEtBQUssS0FBSyxZQUFhLEVBQUssT0FBUSxNQUFTLEVBRXJGLEdBQUksT0FBTyxLQUFLLEVBQUssTUFBTSxFQUFFLE9BQVMsR0FBSyxJQUFZLEVBQ25ELE9BQU8sR0FBZSxLQUFLLEtBQU0sRUFBRyxDQUFJLEVBRTVDLElBQU0sRUFBbUIsZUFBYSxDQUFPLEVBQ3ZDLEVBQVcsS0FBSyxLQUFLLElBQU8sS0FBSyxRQUFRLEdBQy9DLEdBQUksT0FBTyxHQUFZLFNBQVUsQ0FDN0IsSUFBTSxFQUFNLEdBQWMsS0FBSyxLQUFNLEVBQU0sQ0FBUSxFQUNuRCxHQUFJLE9BQVEsSUFBUSxNQUFRLElBQWEsT0FBUyxPQUFJLEVBQUksVUFBWSxTQUNsRSxPQUNKLE9BQU8sR0FBZSxLQUFLLEtBQU0sRUFBRyxDQUFHLEVBRTNDLEdBQUksT0FBUSxJQUFhLE1BQVEsSUFBa0IsT0FBUyxPQUFJLEVBQVMsVUFBWSxTQUNqRixPQUNKLEdBQUksQ0FBQyxFQUFTLFNBQ1YsR0FBYyxLQUFLLEtBQU0sQ0FBUSxFQUNyQyxHQUFJLElBQXFCLGVBQWEsQ0FBRyxFQUFHLENBQ3hDLElBQVEsVUFBVyxHQUNYLFlBQWEsS0FBSyxLQUNwQixFQUFRLEVBQU8sR0FDckIsR0FBSSxFQUNBLEVBQXVCLGNBQVksS0FBSyxLQUFLLFlBQWEsRUFBUSxDQUFLLEVBQzNFLE9BQU8sSUFBSSxHQUFVLENBQUUsU0FBUSxXQUFVLE9BQU0sUUFBTyxDQUFDLEVBRTNELE9BQU8sR0FBZSxLQUFLLEtBQU0sRUFBRyxDQUFRLEVBRWhELEdBQVEsY0FBZ0IsR0FDeEIsSUFBTSxHQUF1QixJQUFJLElBQUksQ0FDakMsYUFDQSxvQkFDQSxPQUNBLGVBQ0EsYUFDSixDQUFDLEVBQ0QsU0FBUyxFQUFjLENBQUMsR0FBYSxTQUFRLFNBQVEsUUFBUSxDQUN6RCxJQUFJLEVBQ0osS0FBTSxFQUFLLEVBQVUsWUFBYyxNQUFRLElBQVksT0FBUyxPQUFJLEVBQUcsTUFBUSxJQUMzRSxPQUNKLFFBQVcsS0FBUSxFQUFVLFNBQVMsTUFBTSxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQUcsQ0FDdkQsR0FBSSxPQUFPLElBQVcsVUFDbEIsT0FDSixJQUFNLEVBQWEsRUFBUSxBQUFVLG9CQUFrQixDQUFJLEdBQzNELEdBQUksSUFBZSxPQUNmLE9BQ0osRUFBUyxFQUVULElBQU0sRUFBUSxPQUFPLElBQVcsVUFBWSxFQUFPLEtBQUssS0FBSyxVQUM3RCxHQUFJLENBQUMsR0FBcUIsSUFBSSxDQUFJLEdBQUssRUFDbkMsRUFBdUIsY0FBWSxLQUFLLEtBQUssWUFBYSxFQUFRLENBQUssRUFHL0UsSUFBSSxFQUNKLEdBQUksT0FBTyxHQUFVLFdBQWEsRUFBTyxNQUFRLENBQVksd0JBQXNCLEVBQVEsS0FBSyxLQUFLLEVBQUcsQ0FDcEcsSUFBTSxFQUFxQixjQUFZLEtBQUssS0FBSyxZQUFhLEVBQVEsRUFBTyxJQUFJLEVBQ2pGLEVBQU0sR0FBYyxLQUFLLEtBQU0sRUFBTSxDQUFJLEVBSTdDLElBQVEsWUFBYSxLQUFLLEtBRTFCLEdBREEsRUFBTSxHQUFPLElBQUksR0FBVSxDQUFFLFNBQVEsV0FBVSxPQUFNLFFBQU8sQ0FBQyxFQUN6RCxFQUFJLFNBQVcsRUFBSSxLQUFLLE9BQ3hCLE9BQU8sRUFDWCwrWUM1T0osSUFBTSxHQUFTLE9BQU8sVUFBVSxLQUFLLEtBQUssNkRBQTZELEVBR2pHLEdBQVMsT0FBTyxVQUFVLEtBQUssS0FBSywwRkFBMEYsRUFNcEksU0FBUyxFQUF5QixDQUFDLEVBQU8sQ0FDeEMsSUFBSSxFQUFNLEdBQ04sRUFBTyxFQUNQLEVBQUksRUFFUixJQUFLLEVBQUksRUFBRyxFQUFJLEVBQU0sT0FBUSxJQUFLLENBRWpDLEdBREEsRUFBTyxFQUFNLEdBQUcsV0FBVyxDQUFDLEVBQ3hCLElBQVMsR0FDWCxTQUVGLEdBQUksRUFBRyxHQUFRLElBQU0sR0FBUSxJQUFRLEdBQVEsSUFBTSxHQUFRLElBQVEsR0FBUSxJQUFNLEdBQVEsS0FDdkYsTUFBTyxHQUVULEdBQU8sRUFBTSxHQUNiLE1BR0YsSUFBSyxHQUFLLEVBQUcsRUFBSSxFQUFNLE9BQVEsSUFBSyxDQUVsQyxHQURBLEVBQU8sRUFBTSxHQUFHLFdBQVcsQ0FBQyxFQUN4QixFQUFHLEdBQVEsSUFBTSxHQUFRLElBQVEsR0FBUSxJQUFNLEdBQVEsSUFBUSxHQUFRLElBQU0sR0FBUSxLQUN2RixNQUFPLEdBRVQsR0FBTyxFQUFNLEdBRWYsT0FBTyxFQWNULElBQU0sR0FBa0IsT0FBTyxVQUFVLEtBQUssS0FBSyw2QkFBNkIsRUFNaEYsU0FBUyxFQUFjLENBQUMsRUFBUSxDQUU5QixPQURBLEVBQU8sT0FBUyxFQUNULEdBU1QsU0FBUyxFQUFlLENBQUMsRUFBUSxFQUFTLEVBQVEsQ0FDaEQsR0FBSSxFQUFPLE9BQVEsQ0FDakIsSUFBTSxFQUFNLEdBQXlCLENBQU0sRUFDM0MsR0FBSSxJQUFRLEdBQ1YsRUFBUSxLQUFLLENBQUcsRUFHaEIsWUFEQSxFQUFPLE1BQVEsR0FDUixHQUVULEVBQU8sT0FBUyxFQUVsQixNQUFPLEdBT1QsU0FBUyxFQUFRLENBQUMsRUFBTyxDQUN2QixJQUFJLEVBQWEsRUFDWCxFQUFTLENBQUUsTUFBTyxHQUFPLFFBQVMsR0FBSSxLQUFNLEVBQUcsRUFFL0MsRUFBVSxDQUFDLEVBRVgsRUFBUyxDQUFDLEVBQ1osRUFBcUIsR0FDckIsRUFBVSxHQUVWLEVBQVUsR0FFZCxRQUFTLEVBQUksRUFBRyxFQUFJLEVBQU0sT0FBUSxJQUFLLENBQ3JDLElBQU0sRUFBUyxFQUFNLEdBQ3JCLEdBQUksSUFBVyxLQUFPLElBQVcsSUFBTyxTQUN4QyxHQUFJLElBQVcsSUFBSyxDQUNsQixHQUFJLElBQXVCLEdBQ3pCLEVBQVUsR0FFWixHQUFJLENBQUMsRUFBUSxFQUFRLEVBQVMsQ0FBTSxFQUFLLE1BQ3pDLEdBQUksRUFBRSxFQUFhLEVBQUcsQ0FFcEIsRUFBTyxNQUFRLEdBQ2YsTUFFRixHQUFJLEVBQUksR0FBSyxFQUFNLEVBQUksS0FBTyxJQUM1QixFQUFxQixHQUV2QixFQUFRLEtBQUssR0FBRyxFQUNoQixTQUNLLFFBQUksSUFBVyxJQUFLLENBQ3pCLEdBQUksQ0FBQyxFQUFRLEVBQVEsRUFBUyxDQUFNLEVBQUssTUFFekMsRUFBVSxHQUNMLEtBQ0wsRUFBTyxLQUFLLENBQU0sRUFDbEIsVUFHSixHQUFJLEVBQU8sT0FDVCxHQUFJLElBQVksR0FDZCxFQUFPLEtBQU8sRUFBTyxLQUFLLEVBQUUsRUFDdkIsUUFBSSxFQUNULEVBQVEsS0FBSyxFQUFPLEtBQUssRUFBRSxDQUFDLEVBRTVCLE9BQVEsS0FBSyxHQUF5QixDQUFNLENBQUMsRUFJakQsT0FEQSxFQUFPLFFBQVUsRUFBUSxLQUFLLEVBQUUsRUFDekIsRUFjVCxTQUFTLEVBQWMsQ0FBQyxFQUFNLENBQzVCLEdBQUksR0FBVSxFQUFNLEdBQUcsRUFBSSxFQUFLLE1BQU8sQ0FBRSxPQUFNLE9BQVEsRUFBTSxFQUM3RCxJQUFNLEVBQU8sR0FBUSxDQUFJLEVBRXpCLEdBQUksQ0FBQyxFQUFLLE1BQU8sQ0FDZixJQUFtQixRQUFmLEVBQ21CLFFBQW5CLEdBQWMsRUFDbEIsR0FBSSxFQUFLLEtBQ1AsR0FBVyxJQUFNLEVBQUssS0FDdEIsR0FBZSxNQUFRLEVBQUssS0FFOUIsTUFBTyxDQUFFLEtBQU0sRUFBUyxPQUFRLEdBQU0sYUFBWSxFQUVsRCxXQUFPLENBQUUsT0FBTSxPQUFRLEVBQU0sRUFTakMsU0FBUyxFQUFVLENBQUMsRUFBSyxFQUFPLENBQzlCLElBQUksRUFBTSxFQUNWLFFBQVMsRUFBSSxFQUFHLEVBQUksRUFBSSxPQUFRLElBQzlCLEdBQUksRUFBSSxLQUFPLEVBQU8sSUFFeEIsT0FBTyxFQVNULFNBQVMsRUFBa0IsQ0FBQyxFQUFNLENBQ2hDLElBQUksRUFBUSxFQUNOLEVBQVMsQ0FBQyxFQUNaLEVBQVksR0FDWixFQUFNLEVBR1YsTUFBTyxFQUFNLEVBQU0sT0FBUSxDQUN6QixHQUFJLElBQVEsRUFDVixHQUFJLElBQVUsSUFDWixNQUNLLFFBQUksSUFBVSxJQUFLLENBQ3hCLEVBQU8sS0FBSyxHQUFHLEVBQ2YsTUFDSyxLQUNMLEVBQU8sS0FBSyxDQUFLLEVBQ2pCLE1BRUcsUUFBSSxJQUFRLEdBQ2pCLEdBQUksRUFBTSxLQUFPLEtBQ2YsR0FBSSxFQUFNLEtBQU8sSUFDZixNQUNLLFFBQUksRUFBTSxLQUFPLElBQUssQ0FDM0IsRUFBUSxFQUFNLE1BQU0sQ0FBQyxFQUNyQixVQUVHLFFBQUksRUFBTSxLQUFPLEtBQ3RCLEdBQUksRUFBTSxLQUFPLEtBQU8sRUFBTSxLQUFPLElBQUssQ0FDeEMsRUFBTyxLQUFLLEdBQUcsRUFDZixRQUdDLFFBQUksSUFBUSxHQUNqQixHQUFJLElBQVUsTUFBTyxDQUNuQixHQUFJLEVBQU8sU0FBVyxFQUNwQixFQUFPLElBQUksRUFFYixFQUFPLEtBQUssR0FBRyxFQUNmLE9BR0osR0FBSSxFQUFNLEtBQU8sS0FDZixHQUFJLEVBQU0sS0FBTyxLQUNmLEdBQUksRUFBTSxLQUFPLElBQUssQ0FDcEIsRUFBUSxFQUFNLE1BQU0sQ0FBQyxFQUNyQixVQUVHLFFBQUksRUFBTSxLQUFPLElBQUssQ0FDM0IsRUFBUSxFQUFNLE1BQU0sQ0FBQyxFQUNyQixVQUVHLFFBQUksRUFBTSxLQUFPLEtBQ3RCLEdBQUksRUFBTSxLQUFPLEtBQ2YsR0FBSSxFQUFNLEtBQU8sSUFBSyxDQUNwQixFQUFRLEVBQU0sTUFBTSxDQUFDLEVBQ3JCLFNBQ0ssUUFBSSxFQUFNLEtBQU8sS0FDdEIsR0FBSSxFQUFNLEtBQU8sSUFBSyxDQUVwQixHQURBLEVBQVEsRUFBTSxNQUFNLENBQUMsRUFDakIsRUFBTyxTQUFXLEVBQ3BCLEVBQU8sSUFBSSxFQUViLFlBT1IsSUFBSyxFQUFZLEVBQU0sUUFBUSxJQUFLLENBQUMsS0FBTyxHQUFJLENBQzlDLEVBQU8sS0FBSyxDQUFLLEVBQ2pCLE1BRUEsT0FBTyxLQUFLLEVBQU0sTUFBTSxFQUFHLENBQVMsQ0FBQyxFQUNyQyxFQUFRLEVBQU0sTUFBTSxDQUFTLEVBSWpDLE9BQU8sRUFBTyxLQUFLLEVBQUUsRUFRdkIsU0FBUyxFQUEyQixDQUFDLEVBQVcsRUFBSyxDQUNuRCxJQUFNLEVBQU8sSUFBUSxHQUFPLE9BQVMsU0FDckMsR0FBSSxFQUFVLFNBQVcsT0FDdkIsRUFBVSxPQUFTLEVBQUssRUFBVSxNQUFNLEVBRTFDLEdBQUksRUFBVSxXQUFhLE9BQ3pCLEVBQVUsU0FBVyxFQUFLLEVBQVUsUUFBUSxFQUU5QyxHQUFJLEVBQVUsT0FBUyxPQUNyQixFQUFVLEtBQU8sRUFBSyxFQUFVLElBQUksRUFFdEMsR0FBSSxFQUFVLE9BQVMsT0FDckIsRUFBVSxLQUFPLEVBQUssRUFBVSxJQUFJLEVBRXRDLEdBQUksRUFBVSxRQUFVLE9BQ3RCLEVBQVUsTUFBUSxFQUFLLEVBQVUsS0FBSyxFQUV4QyxHQUFJLEVBQVUsV0FBYSxPQUN6QixFQUFVLFNBQVcsRUFBSyxFQUFVLFFBQVEsRUFFOUMsT0FBTyxFQU9ULFNBQVMsRUFBbUIsQ0FBQyxFQUFXLENBQ3RDLElBQU0sRUFBWSxDQUFDLEVBRW5CLEdBQUksRUFBVSxXQUFhLE9BQ3pCLEVBQVUsS0FBSyxFQUFVLFFBQVEsRUFDakMsRUFBVSxLQUFLLEdBQUcsRUFHcEIsR0FBSSxFQUFVLE9BQVMsT0FBVyxDQUNoQyxJQUFJLEVBQU8sU0FBUyxFQUFVLElBQUksRUFDbEMsR0FBSSxDQUFDLEdBQU8sQ0FBSSxFQUFHLENBQ2pCLElBQU0sRUFBVSxHQUFjLENBQUksRUFDbEMsR0FBSSxFQUFRLFNBQVcsR0FDckIsRUFBTyxJQUFJLEVBQVEsZUFFbkIsT0FBTyxFQUFVLEtBR3JCLEVBQVUsS0FBSyxDQUFJLEVBR3JCLEdBQUksT0FBTyxFQUFVLE9BQVMsVUFBWSxPQUFPLEVBQVUsT0FBUyxTQUNsRSxFQUFVLEtBQUssR0FBRyxFQUNsQixFQUFVLEtBQUssT0FBTyxFQUFVLElBQUksQ0FBQyxFQUd2QyxPQUFPLEVBQVUsT0FBUyxFQUFVLEtBQUssRUFBRSxFQUFJLE9BR2pELEdBQU8sUUFBVSxDQUNmLG1CQUNBLHNCQUNBLDhCQUNBLHFCQUNBLFVBQ0EsVUFDQSxpQkFDQSwyQkFDRiw2QkM3VUEsSUFBUSxnQkFDRixHQUFVLG9FQUVWLEdBQTZDLENBQUMsT0FBUSxRQUFTLEtBQ25FLE1BQU8sTUFBTyxVQUFVLEVBUTFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFNLENBQ2hDLE9BQU8sR0FBcUIsUUFBMEIsQ0FBSyxJQUFNLEdBeUJuRSxTQUFTLEVBQVcsQ0FBQyxFQUFhLENBQ2hDLEdBQUksRUFBWSxTQUFXLEdBQ3pCLE1BQU8sR0FDRixRQUFJLEVBQVksU0FBVyxHQUNoQyxNQUFPLEdBQ0YsUUFBSSxFQUFZLE9BQ3JCLE9BQ0UsRUFBWSxPQUFPLFNBQVcsSUFDN0IsRUFBWSxPQUFPLEtBQU8sS0FBTyxFQUFZLE9BQU8sS0FBTyxPQUMzRCxFQUFZLE9BQU8sS0FBTyxLQUFPLEVBQVksT0FBTyxLQUFPLE9BQzNELEVBQVksT0FBTyxLQUFPLEtBQU8sRUFBWSxPQUFPLEtBQU8sS0FHOUQsV0FBTyxHQUtYLFNBQVMsRUFBVSxDQUFDLEVBQVcsQ0FDN0IsR0FBSSxDQUFDLEVBQVUsS0FDYixFQUFVLE1BQVEsRUFBVSxPQUFTLDhCQUd2QyxPQUFPLEVBSVQsU0FBUyxFQUFjLENBQUMsRUFBVyxDQUNqQyxJQUFNLEVBQVMsT0FBTyxFQUFVLE1BQU0sRUFBRSxZQUFZLElBQU0sUUFHMUQsR0FBSSxFQUFVLFFBQVUsRUFBUyxJQUFNLEtBQU8sRUFBVSxPQUFTLEdBQy9ELEVBQVUsS0FBTyxPQUluQixHQUFJLENBQUMsRUFBVSxLQUNiLEVBQVUsS0FBTyxJQU9uQixPQUFPLEVBSVQsU0FBUyxFQUFRLENBQUMsRUFBYSxDQVM3QixPQVBBLEVBQVksT0FBUyxHQUFXLENBQVcsRUFHM0MsRUFBWSxjQUFnQixFQUFZLE1BQVEsTUFBUSxFQUFZLE1BQVEsSUFBTSxFQUFZLE1BQVEsSUFDdEcsRUFBWSxLQUFPLE9BQ25CLEVBQVksTUFBUSxPQUViLEVBSVQsU0FBUyxFQUFZLENBQUMsRUFBYSxDQUVqQyxHQUFJLEVBQVksUUFBVSxHQUFXLENBQVcsRUFBSSxJQUFNLEtBQU8sRUFBWSxPQUFTLEdBQ3BGLEVBQVksS0FBTyxPQUlyQixHQUFJLE9BQU8sRUFBWSxTQUFXLFVBQ2hDLEVBQVksT0FBVSxFQUFZLE9BQVMsTUFBUSxLQUNuRCxFQUFZLE9BQVMsT0FJdkIsR0FBSSxFQUFZLGFBQWMsQ0FDNUIsSUFBTyxFQUFNLEdBQVMsRUFBWSxhQUFhLE1BQU0sR0FBRyxFQUN4RCxFQUFZLEtBQVEsR0FBUSxJQUFTLElBQU0sRUFBTyxPQUNsRCxFQUFZLE1BQVEsRUFDcEIsRUFBWSxhQUFlLE9BTTdCLE9BRkEsRUFBWSxTQUFXLE9BRWhCLEVBSVQsU0FBUyxFQUFTLENBQUMsRUFBYyxFQUFTLENBQ3hDLEdBQUksQ0FBQyxFQUFhLEtBRWhCLE9BREEsRUFBYSxNQUFRLHdCQUNkLEVBRVQsSUFBTSxFQUFVLEVBQWEsS0FBSyxNQUFNLEVBQU8sRUFDL0MsR0FBSSxFQUFTLENBQ1gsSUFBTSxFQUFTLEVBQVEsUUFBVSxFQUFhLFFBQVUsTUFDeEQsRUFBYSxJQUFNLEVBQVEsR0FBRyxZQUFZLEVBQzFDLEVBQWEsSUFBTSxFQUFRLEdBQzNCLElBQU0sRUFBWSxHQUFHLEtBQVUsRUFBUSxLQUFPLEVBQWEsTUFDckQsRUFBZ0IsR0FBaUIsQ0FBUyxFQUdoRCxHQUZBLEVBQWEsS0FBTyxPQUVoQixFQUNGLEVBQWUsRUFBYyxNQUFNLEVBQWMsQ0FBTyxFQUcxRCxPQUFhLE1BQVEsRUFBYSxPQUFTLHlCQUc3QyxPQUFPLEVBSVQsU0FBUyxFQUFhLENBQUMsRUFBYyxFQUFTLENBQzVDLEdBQUksRUFBYSxNQUFRLE9BQ3ZCLE1BQVUsTUFBTSxzQ0FBc0MsRUFFeEQsSUFBTSxFQUFTLEVBQVEsUUFBVSxFQUFhLFFBQVUsTUFDbEQsRUFBTSxFQUFhLElBQUksWUFBWSxFQUNuQyxFQUFZLEdBQUcsS0FBVSxFQUFRLEtBQU8sSUFDeEMsRUFBZ0IsR0FBaUIsQ0FBUyxFQUVoRCxHQUFJLEVBQ0YsRUFBZSxFQUFjLFVBQVUsRUFBYyxDQUFPLEVBRzlELElBQU0sRUFBZSxFQUNmLEVBQU0sRUFBYSxJQUl6QixPQUhBLEVBQWEsS0FBTyxHQUFHLEdBQU8sRUFBUSxPQUFPLElBRTdDLEVBQVEsV0FBYSxHQUNkLEVBSVQsU0FBUyxFQUFhLENBQUMsRUFBYyxFQUFTLENBQzVDLElBQU0sRUFBZ0IsRUFJdEIsR0FIQSxFQUFjLEtBQU8sRUFBYyxJQUNuQyxFQUFjLElBQU0sT0FFaEIsQ0FBQyxFQUFRLFdBQWEsQ0FBQyxFQUFjLE1BQVEsQ0FBQyxHQUFPLEVBQWMsSUFBSSxHQUN6RSxFQUFjLE1BQVEsRUFBYyxPQUFTLHFCQUcvQyxPQUFPLEVBSVQsU0FBUyxFQUFpQixDQUFDLEVBQWUsQ0FDeEMsSUFBTSxFQUFlLEVBR3JCLE9BREEsRUFBYSxLQUFPLEVBQWMsTUFBUSxJQUFJLFlBQVksRUFDbkQsRUFHVCxJQUFNLEdBQXFDLENBQ3pDLE9BQVEsT0FDUixXQUFZLEdBQ1osTUFBTyxHQUNQLFVBQVcsRUFDYixFQUVNLEdBQXNDLENBQzFDLE9BQVEsUUFDUixXQUFZLEdBQUssV0FDakIsTUFBTyxHQUNQLFVBQVcsRUFDYixFQUVNLEdBQW1DLENBQ3ZDLE9BQVEsS0FDUixXQUFZLEdBQ1osTUFBTyxHQUNQLFVBQVcsRUFDYixFQUVNLEdBQW9DLENBQ3hDLE9BQVEsTUFDUixXQUFZLEdBQUcsV0FDZixNQUFPLEdBQUcsTUFDVixVQUFXLEdBQUcsU0FDaEIsRUFFTSxHQUFvQyxDQUN4QyxPQUFRLE1BQ1IsTUFBTyxHQUNQLFVBQVcsR0FDWCxjQUFlLEVBQ2pCLEVBRU0sR0FBd0MsQ0FDNUMsT0FBUSxXQUNSLE1BQU8sR0FDUCxVQUFXLEdBQ1gsY0FBZSxFQUNqQixFQUVNLEdBQTRELENBQ2hFLFFBQ0EsU0FDQSxNQUNBLE9BQ0EsT0FDQSxXQUFZLEVBQ2QsRUFFQSxPQUFPLGVBQWUsR0FBUyxJQUFJLEVBTW5DLFNBQVMsRUFBaUIsQ0FBQyxFQUFRLENBQ2pDLE9BQ0UsSUFDRSxHQUFtQyxJQUNuQyxHQUFrQyxFQUFPLFlBQVksS0FFdkQsT0FHSixHQUFPLFFBQVUsQ0FDZixjQUNBLFdBQ0EscUJBQ0EsbUJBQ0YsNkJDeFFBLElBQVEsaUJBQWUscUJBQW1CLHNCQUFvQiw4QkFBNEIsVUFBUSwwQkFDMUYsV0FBUywwQkFRakIsU0FBUyxFQUFVLENBQUMsRUFBSyxFQUFTLENBQ2hDLEdBQUksT0FBTyxJQUFRLFNBQ2pCLEVBQXdCLEdBQVUsR0FBTSxFQUFLLENBQU8sRUFBRyxDQUFPLEVBQ3pELFFBQUksT0FBTyxJQUFRLFNBQ3hCLEVBQXdCLEdBQU0sR0FBVSxFQUFLLENBQU8sRUFBRyxDQUFPLEVBRWhFLE9BQU8sRUFTVCxTQUFTLEVBQVEsQ0FBQyxFQUFTLEVBQWEsRUFBUyxDQUMvQyxJQUFNLEVBQW9CLEVBQVUsT0FBTyxPQUFPLENBQUUsT0FBUSxNQUFPLEVBQUcsQ0FBTyxFQUFJLENBQUUsT0FBUSxNQUFPLEVBQzVGLEVBQVcsR0FBaUIsR0FBTSxFQUFTLENBQWlCLEVBQUcsR0FBTSxFQUFhLENBQWlCLEVBQUcsRUFBbUIsRUFBSSxFQUVuSSxPQURBLEVBQWtCLFdBQWEsR0FDeEIsR0FBVSxFQUFVLENBQWlCLEVBVTlDLFNBQVMsRUFBaUIsQ0FBQyxFQUFNLEVBQVUsRUFBUyxFQUFtQixDQUVyRSxJQUFNLEVBQVMsQ0FBQyxFQUNoQixHQUFJLENBQUMsRUFDSCxFQUFPLEdBQU0sR0FBVSxFQUFNLENBQU8sRUFBRyxDQUFPLEVBQzlDLEVBQVcsR0FBTSxHQUFVLEVBQVUsQ0FBTyxFQUFHLENBQU8sRUFJeEQsR0FGQSxFQUFVLEdBQVcsQ0FBQyxFQUVsQixDQUFDLEVBQVEsVUFBWSxFQUFTLE9BQ2hDLEVBQU8sT0FBUyxFQUFTLE9BRXpCLEVBQU8sU0FBVyxFQUFTLFNBQzNCLEVBQU8sS0FBTyxFQUFTLEtBQ3ZCLEVBQU8sS0FBTyxFQUFTLEtBQ3ZCLEVBQU8sS0FBTyxHQUFrQixFQUFTLE1BQVEsRUFBRSxFQUNuRCxFQUFPLE1BQVEsRUFBUyxNQUNuQixLQUNMLEdBQUksRUFBUyxXQUFhLFFBQWEsRUFBUyxPQUFTLFFBQWEsRUFBUyxPQUFTLE9BRXRGLEVBQU8sU0FBVyxFQUFTLFNBQzNCLEVBQU8sS0FBTyxFQUFTLEtBQ3ZCLEVBQU8sS0FBTyxFQUFTLEtBQ3ZCLEVBQU8sS0FBTyxHQUFrQixFQUFTLE1BQVEsRUFBRSxFQUNuRCxFQUFPLE1BQVEsRUFBUyxNQUNuQixLQUNMLEdBQUksQ0FBQyxFQUFTLEtBRVosR0FEQSxFQUFPLEtBQU8sRUFBSyxLQUNmLEVBQVMsUUFBVSxPQUNyQixFQUFPLE1BQVEsRUFBUyxNQUV4QixPQUFPLE1BQVEsRUFBSyxNQUVqQixLQUNMLEdBQUksRUFBUyxLQUFLLEtBQU8sSUFDdkIsRUFBTyxLQUFPLEdBQWtCLEVBQVMsSUFBSSxFQUN4QyxLQUNMLElBQUssRUFBSyxXQUFhLFFBQWEsRUFBSyxPQUFTLFFBQWEsRUFBSyxPQUFTLFNBQWMsQ0FBQyxFQUFLLEtBQy9GLEVBQU8sS0FBTyxJQUFNLEVBQVMsS0FDeEIsUUFBSSxDQUFDLEVBQUssS0FDZixFQUFPLEtBQU8sRUFBUyxLQUV2QixPQUFPLEtBQU8sRUFBSyxLQUFLLE1BQU0sRUFBRyxFQUFLLEtBQUssWUFBWSxHQUFHLEVBQUksQ0FBQyxFQUFJLEVBQVMsS0FFOUUsRUFBTyxLQUFPLEdBQWtCLEVBQU8sSUFBSSxFQUU3QyxFQUFPLE1BQVEsRUFBUyxNQUcxQixFQUFPLFNBQVcsRUFBSyxTQUN2QixFQUFPLEtBQU8sRUFBSyxLQUNuQixFQUFPLEtBQU8sRUFBSyxLQUVyQixFQUFPLE9BQVMsRUFBSyxPQUt2QixPQUZBLEVBQU8sU0FBVyxFQUFTLFNBRXBCLEVBU1QsU0FBUyxFQUFNLENBQUMsRUFBTSxFQUFNLEVBQVMsQ0FDbkMsR0FBSSxPQUFPLElBQVMsU0FDbEIsRUFBTyxTQUFTLENBQUksRUFDcEIsRUFBTyxHQUFVLEdBQTJCLEdBQU0sRUFBTSxDQUFPLEVBQUcsRUFBSSxFQUFHLElBQUssRUFBUyxXQUFZLEVBQUssQ0FBQyxFQUNwRyxRQUFJLE9BQU8sSUFBUyxTQUN6QixFQUFPLEdBQVUsR0FBMkIsRUFBTSxFQUFJLEVBQUcsSUFBSyxFQUFTLFdBQVksRUFBSyxDQUFDLEVBRzNGLEdBQUksT0FBTyxJQUFTLFNBQ2xCLEVBQU8sU0FBUyxDQUFJLEVBQ3BCLEVBQU8sR0FBVSxHQUEyQixHQUFNLEVBQU0sQ0FBTyxFQUFHLEVBQUksRUFBRyxJQUFLLEVBQVMsV0FBWSxFQUFLLENBQUMsRUFDcEcsUUFBSSxPQUFPLElBQVMsU0FDekIsRUFBTyxHQUFVLEdBQTJCLEVBQU0sRUFBSSxFQUFHLElBQUssRUFBUyxXQUFZLEVBQUssQ0FBQyxFQUczRixPQUFPLEVBQUssWUFBWSxJQUFNLEVBQUssWUFBWSxFQVFqRCxTQUFTLEVBQVUsQ0FBQyxFQUFPLEVBQU0sQ0FDL0IsSUFBTSxFQUFZLENBQ2hCLEtBQU0sRUFBTSxLQUNaLE9BQVEsRUFBTSxPQUNkLFNBQVUsRUFBTSxTQUNoQixLQUFNLEVBQU0sS0FDWixLQUFNLEVBQU0sS0FDWixNQUFPLEVBQU0sTUFDYixJQUFLLEVBQU0sSUFDWCxJQUFLLEVBQU0sSUFDWCxLQUFNLEVBQU0sS0FDWixTQUFVLEVBQU0sU0FDaEIsVUFBVyxFQUFNLFVBQ2pCLGFBQWMsRUFBTSxhQUNwQixPQUFRLEVBQU0sT0FDZCxNQUFPLEVBQ1QsRUFDTSxFQUFVLE9BQU8sT0FBTyxDQUFDLEVBQUcsQ0FBSSxFQUNoQyxFQUFZLENBQUMsRUFHYixFQUFnQixHQUFpQixFQUFRLFFBQVUsRUFBVSxNQUFNLEVBR3pFLEdBQUksR0FBaUIsRUFBYyxVQUFXLEVBQWMsVUFBVSxFQUFXLENBQU8sRUFFeEYsR0FBSSxFQUFVLE9BQVMsT0FDckIsR0FBSSxDQUFDLEVBQVEsWUFHWCxHQUZBLEVBQVUsS0FBTyxPQUFPLEVBQVUsSUFBSSxFQUVsQyxFQUFVLFNBQVcsT0FDdkIsRUFBVSxLQUFPLEVBQVUsS0FBSyxNQUFNLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFHdkQsT0FBVSxLQUFPLFNBQVMsRUFBVSxJQUFJLEVBSTVDLEdBQUksRUFBUSxZQUFjLFVBQVksRUFBVSxPQUM5QyxFQUFVLEtBQUssRUFBVSxPQUFRLEdBQUcsRUFHdEMsSUFBTSxFQUFZLEdBQW1CLENBQVMsRUFDOUMsR0FBSSxJQUFjLE9BQVcsQ0FDM0IsR0FBSSxFQUFRLFlBQWMsU0FDeEIsRUFBVSxLQUFLLElBQUksRUFLckIsR0FGQSxFQUFVLEtBQUssQ0FBUyxFQUVwQixFQUFVLE1BQVEsRUFBVSxLQUFLLEtBQU8sSUFDMUMsRUFBVSxLQUFLLEdBQUcsRUFHdEIsR0FBSSxFQUFVLE9BQVMsT0FBVyxDQUNoQyxJQUFJLEVBQUksRUFBVSxLQUVsQixHQUFJLENBQUMsRUFBUSxlQUFpQixDQUFDLEdBQWlCLENBQUMsRUFBYyxjQUM3RCxFQUFJLEdBQWtCLENBQUMsRUFHekIsR0FDRSxJQUFjLFFBQ2QsRUFBRSxLQUFPLEtBQ1QsRUFBRSxLQUFPLElBR1QsRUFBSSxPQUFTLEVBQUUsTUFBTSxDQUFDLEVBR3hCLEVBQVUsS0FBSyxDQUFDLEVBR2xCLEdBQUksRUFBVSxRQUFVLE9BQ3RCLEVBQVUsS0FBSyxJQUFLLEVBQVUsS0FBSyxFQUdyQyxHQUFJLEVBQVUsV0FBYSxPQUN6QixFQUFVLEtBQUssSUFBSyxFQUFVLFFBQVEsRUFFeEMsT0FBTyxFQUFVLEtBQUssRUFBRSxFQUcxQixJQUFNLEdBQVksOEhBT2xCLFNBQVMsRUFBTSxDQUFDLEVBQUssRUFBTSxDQUN6QixJQUFNLEVBQVUsT0FBTyxPQUFPLENBQUMsRUFBRyxDQUFJLEVBRWhDLEVBQVMsQ0FDYixPQUFRLE9BQ1IsU0FBVSxPQUNWLEtBQU0sR0FDTixLQUFNLE9BQ04sS0FBTSxHQUNOLE1BQU8sT0FDUCxTQUFVLE1BQ1osRUFFSSxFQUFPLEdBQ1gsR0FBSSxFQUFRLFlBQWMsU0FDeEIsR0FBSSxFQUFRLE9BQ1YsRUFBTSxFQUFRLE9BQVMsSUFBTSxFQUU3QixPQUFNLEtBQU8sRUFJakIsSUFBTSxFQUFVLEVBQUksTUFBTSxFQUFTLEVBRW5DLEdBQUksRUFBUyxDQVdYLEdBVEEsRUFBTyxPQUFTLEVBQVEsR0FDeEIsRUFBTyxTQUFXLEVBQVEsR0FDMUIsRUFBTyxLQUFPLEVBQVEsR0FDdEIsRUFBTyxLQUFPLFNBQVMsRUFBUSxHQUFJLEVBQUUsRUFDckMsRUFBTyxLQUFPLEVBQVEsSUFBTSxHQUM1QixFQUFPLE1BQVEsRUFBUSxHQUN2QixFQUFPLFNBQVcsRUFBUSxHQUd0QixNQUFNLEVBQU8sSUFBSSxFQUNuQixFQUFPLEtBQU8sRUFBUSxHQUV4QixHQUFJLEVBQU8sS0FFVCxHQURtQixHQUFPLEVBQU8sSUFBSSxJQUNsQixHQUFPLENBQ3hCLElBQU0sRUFBYSxHQUFjLEVBQU8sSUFBSSxFQUM1QyxFQUFPLEtBQU8sRUFBVyxLQUFLLFlBQVksRUFDMUMsRUFBTyxFQUFXLE9BRWxCLE9BQU8sR0FHWCxHQUFJLEVBQU8sU0FBVyxRQUFhLEVBQU8sV0FBYSxRQUFhLEVBQU8sT0FBUyxRQUFhLEVBQU8sT0FBUyxRQUFhLEVBQU8sUUFBVSxRQUFhLENBQUMsRUFBTyxLQUNsSyxFQUFPLFVBQVksZ0JBQ2QsUUFBSSxFQUFPLFNBQVcsT0FDM0IsRUFBTyxVQUFZLFdBQ2QsUUFBSSxFQUFPLFdBQWEsT0FDN0IsRUFBTyxVQUFZLFdBRW5CLE9BQU8sVUFBWSxNQUlyQixHQUFJLEVBQVEsV0FBYSxFQUFRLFlBQWMsVUFBWSxFQUFRLFlBQWMsRUFBTyxVQUN0RixFQUFPLE1BQVEsRUFBTyxPQUFTLGdCQUFrQixFQUFRLFVBQVksY0FJdkUsSUFBTSxFQUFnQixHQUFpQixFQUFRLFFBQVUsRUFBTyxNQUFNLEVBR3RFLEdBQUksQ0FBQyxFQUFRLGlCQUFtQixDQUFDLEdBQWlCLENBQUMsRUFBYyxpQkFFL0QsR0FBSSxFQUFPLE9BQVMsRUFBUSxZQUFlLEdBQWlCLEVBQWMsYUFBZ0IsSUFBUyxJQUFTLEdBQWdCLEVBQU8sSUFBSSxFQUVySSxHQUFJLENBQ0YsRUFBTyxLQUFPLElBQUksY0FBYyxFQUFPLEtBQUssWUFBWSxDQUFDLEVBQ3pELE1BQU8sRUFBRyxDQUNWLEVBQU8sTUFBUSxFQUFPLE9BQVMscURBQXVELEdBTTVGLEdBQUksQ0FBQyxHQUFrQixHQUFpQixDQUFDLEVBQWMsY0FBZ0IsQ0FDckUsR0FBSSxFQUFJLFFBQVEsR0FBRyxJQUFNLEdBQUksQ0FDM0IsR0FBSSxFQUFPLFNBQVcsT0FDcEIsRUFBTyxPQUFTLFNBQVMsRUFBTyxNQUFNLEVBRXhDLEdBQUksRUFBTyxPQUFTLE9BQ2xCLEVBQU8sS0FBTyxTQUFTLEVBQU8sSUFBSSxFQUd0QyxHQUFJLEVBQU8sS0FDVCxFQUFPLEtBQU8sT0FBTyxTQUFTLEVBQU8sSUFBSSxDQUFDLEVBRTVDLEdBQUksRUFBTyxTQUNULEVBQU8sU0FBVyxVQUFVLG1CQUFtQixFQUFPLFFBQVEsQ0FBQyxFQUtuRSxHQUFJLEdBQWlCLEVBQWMsTUFDakMsRUFBYyxNQUFNLEVBQVEsQ0FBTyxFQUdyQyxPQUFPLE1BQVEsRUFBTyxPQUFTLHlCQUVqQyxPQUFPLEVBR1QsSUFBTSxHQUFVLENBQ2QsV0FDQSxhQUNBLFdBQ0Esb0JBQ0EsU0FDQSxhQUNBLFFBQ0YsRUFFQSxHQUFPLFFBQVUsR0FDakIsR0FBTyxRQUFRLFFBQVUsR0FDekIsR0FBTyxRQUFRLFFBQVUsMkJDbFZ6QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsSUFBTSxRQUNOLEdBQUksS0FBTywwQ0FDWCxHQUFRLFFBQVUsMkJDSGxCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxHQUFRLFFBQVUsR0FBUSxLQUFPLEdBQVEsSUFBTSxHQUFRLFVBQVksR0FBUSxJQUFNLEdBQVEsRUFBSSxHQUFRLFdBQWtCLE9BQ3ZILElBQUksUUFDSixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFXLFdBQWMsQ0FBQyxFQUNySCxJQUFJLFFBQ0osT0FBTyxlQUFlLEdBQVMsSUFBSyxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBVSxFQUFLLENBQUMsRUFDbEcsT0FBTyxlQUFlLEdBQVMsTUFBTyxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBVSxJQUFPLENBQUMsRUFDdEcsT0FBTyxlQUFlLEdBQVMsWUFBYSxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBVSxVQUFhLENBQUMsRUFDbEgsT0FBTyxlQUFlLEdBQVMsTUFBTyxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBVSxJQUFPLENBQUMsRUFDdEcsT0FBTyxlQUFlLEdBQVMsT0FBUSxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBVSxLQUFRLENBQUMsRUFDeEcsT0FBTyxlQUFlLEdBQVMsVUFBVyxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBVSxRQUFXLENBQUMsRUFDOUcsSUFBTSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLEdBQWdCLENBQUMsRUFBSyxJQUFVLElBQUksT0FBTyxFQUFLLENBQUssRUFDM0QsR0FBYyxLQUFPLGFBQ3JCLElBQU0sR0FBc0IsQ0FBQyxtQkFBb0IsY0FBZSxhQUFhLEVBQ3ZFLEdBQWtCLElBQUksSUFBSSxDQUM1QixXQUNBLFlBQ0EsUUFDQSxVQUNBLE9BQ0EsU0FDQSxVQUNBLFVBQ0EsVUFDQSxnQkFDQSxPQUNBLE1BQ0EsT0FDSixDQUFDLEVBQ0ssR0FBaUIsQ0FDbkIsY0FBZSxHQUNmLE9BQVEsZ0RBQ1IsU0FBVSw4Q0FDVixhQUFjLG1EQUNkLFdBQVksd0RBQ1osWUFBYSxzRUFDYixZQUFhLG9FQUNiLFdBQVksb0NBQ1osZUFBZ0IsMENBQ2hCLGVBQWdCLDBDQUNoQixZQUFhLDZDQUNiLGVBQWdCLCtFQUNoQixNQUFPLDhDQUNQLFVBQVcsOENBQ1gsVUFBVyxvQkFDZixFQUNNLEdBQW9CLENBQ3RCLHNCQUF1QixHQUN2QixpQkFBa0IsR0FDbEIsUUFBUyxvRUFDYixFQUNNLEdBQWlCLElBRXZCLFNBQVMsRUFBZSxDQUFDLEVBQUcsQ0FDeEIsSUFBSSxFQUFJLEVBQUksRUFBSSxFQUFJLEVBQUksRUFBSSxFQUFJLEVBQUksRUFBSSxFQUFJLEVBQUksRUFBSSxFQUFJLEVBQUksRUFBSSxFQUFJLEVBQUksRUFBSSxFQUFJLEVBQUksRUFBSSxFQUFJLEVBQUksRUFBSSxHQUNwRyxJQUFNLEdBQUksRUFBRSxPQUNOLElBQVMsRUFBSyxFQUFFLFFBQVUsTUFBUSxJQUFZLE9BQVMsT0FBSSxFQUFHLFNBQzlELEdBQVcsS0FBVSxJQUFRLEtBQVUsT0FBWSxFQUFJLElBQVMsRUFDaEUsSUFBVSxHQUFNLEVBQUssRUFBRSxRQUFVLE1BQVEsSUFBWSxPQUFTLE9BQUksRUFBRyxVQUFZLE1BQVEsSUFBWSxPQUFJLEVBQUssR0FDOUcsSUFBZSxFQUFLLEVBQUUsZUFBaUIsTUFBUSxJQUFZLE9BQUksRUFBSyxHQUFNLFFBQ2hGLE1BQU8sQ0FDSCxjQUFlLEdBQU0sRUFBSyxFQUFFLGdCQUFrQixNQUFRLElBQVksT0FBSSxFQUFLLE1BQU8sTUFBUSxJQUFZLE9BQUksRUFBSyxHQUMvRyxlQUFnQixHQUFNLEVBQUssRUFBRSxpQkFBbUIsTUFBUSxJQUFZLE9BQUksRUFBSyxNQUFPLE1BQVEsSUFBWSxPQUFJLEVBQUssR0FDakgsYUFBYyxHQUFNLEVBQUssRUFBRSxlQUFpQixNQUFRLElBQVksT0FBSSxFQUFLLE1BQU8sTUFBUSxJQUFZLE9BQUksRUFBSyxNQUM3RyxjQUFlLEdBQU0sRUFBSyxFQUFFLGdCQUFrQixNQUFRLElBQVksT0FBSSxFQUFLLE1BQU8sTUFBUSxJQUFZLE9BQUksRUFBSyxNQUMvRyxnQkFBaUIsR0FBTSxFQUFLLEVBQUUsa0JBQW9CLE1BQVEsSUFBWSxPQUFJLEVBQUssTUFBTyxNQUFRLElBQVksT0FBSSxFQUFLLEdBQ25ILEtBQU0sRUFBRSxLQUFPLElBQUssRUFBRSxLQUFNLFlBQVUsU0FBTyxFQUFJLENBQUUsWUFBVSxTQUFPLEVBQ3BFLGNBQWUsRUFBSyxFQUFFLGdCQUFrQixNQUFRLElBQVksT0FBSSxFQUFLLEdBQ3JFLFVBQVcsRUFBSyxFQUFFLFlBQWMsTUFBUSxJQUFZLE9BQUksRUFBSyxHQUM3RCxNQUFPLEVBQUssRUFBRSxRQUFVLE1BQVEsSUFBWSxPQUFJLEVBQUssR0FDckQsVUFBVyxFQUFLLEVBQUUsWUFBYyxNQUFRLElBQVksT0FBSSxFQUFLLEdBQzdELFlBQWEsRUFBSyxFQUFFLGNBQWdCLE1BQVEsSUFBWSxPQUFJLEVBQUssR0FDakUsVUFBVyxFQUFLLEVBQUUsWUFBYyxNQUFRLElBQVksT0FBSSxFQUFLLE1BQzdELGVBQWdCLEVBQUssRUFBRSxpQkFBbUIsTUFBUSxJQUFZLE9BQUksRUFBSyxHQUN2RSxnQkFBaUIsRUFBSyxFQUFFLGtCQUFvQixNQUFRLElBQVksT0FBSSxFQUFLLEdBQ3pFLGlCQUFrQixFQUFLLEVBQUUsbUJBQXFCLE1BQVEsSUFBWSxPQUFJLEVBQUssR0FDM0UsZUFBZ0IsRUFBSyxFQUFFLGlCQUFtQixNQUFRLElBQVksT0FBSSxFQUFLLEdBQ3ZFLFlBQWEsR0FBSyxFQUFFLGNBQWdCLE1BQVEsS0FBWSxPQUFJLEdBQUssR0FDakUsWUFBYSxFQUNqQixFQUVKLE1BQU0sRUFBSSxDQUNOLFdBQVcsQ0FBQyxFQUFPLENBQUMsRUFBRyxDQUNuQixLQUFLLFFBQVUsQ0FBQyxFQUNoQixLQUFLLEtBQU8sQ0FBQyxFQUNiLEtBQUssUUFBVSxDQUFDLEVBQ2hCLEtBQUssY0FBZ0IsSUFBSSxJQUN6QixLQUFLLFNBQVcsQ0FBQyxFQUNqQixLQUFLLE9BQVMsSUFBSSxJQUNsQixFQUFPLEtBQUssS0FBTyxJQUFLLEtBQVMsR0FBZ0IsQ0FBSSxDQUFFLEVBQ3ZELElBQVEsTUFBSyxTQUFVLEtBQUssS0FBSyxLQUNqQyxLQUFLLE1BQVEsSUFBYyxjQUFXLENBQUUsTUFBTyxDQUFDLEVBQUcsU0FBVSxHQUFpQixNQUFLLE9BQU0sQ0FBQyxFQUMxRixLQUFLLE9BQVMsR0FBVSxFQUFLLE1BQU0sRUFDbkMsSUFBTSxFQUFZLEVBQUssZ0JBTXZCLEdBTEEsRUFBSyxnQkFBa0IsR0FDdkIsS0FBSyxNQUFvQixZQUFVLEVBQ25DLEdBQWEsS0FBSyxLQUFNLEdBQWdCLEVBQU0sZUFBZSxFQUM3RCxHQUFhLEtBQUssS0FBTSxHQUFtQixFQUFNLGFBQWMsTUFBTSxFQUNyRSxLQUFLLFVBQVksR0FBcUIsS0FBSyxJQUFJLEVBQzNDLEVBQUssUUFDTCxHQUFrQixLQUFLLElBQUksRUFHL0IsR0FGQSxLQUFLLGlCQUFpQixFQUN0QixLQUFLLHNCQUFzQixFQUN2QixFQUFLLFNBQ0wsR0FBbUIsS0FBSyxLQUFNLEVBQUssUUFBUSxFQUMvQyxHQUFJLE9BQU8sRUFBSyxNQUFRLFNBQ3BCLEtBQUssY0FBYyxFQUFLLElBQUksRUFDaEMsR0FBa0IsS0FBSyxJQUFJLEVBQzNCLEVBQUssZ0JBQWtCLEVBRTNCLGdCQUFnQixFQUFHLENBQ2YsS0FBSyxXQUFXLFFBQVEsRUFFNUIscUJBQXFCLEVBQUcsQ0FDcEIsSUFBUSxRQUFPLE9BQU0sWUFBYSxLQUFLLEtBQ25DLEVBQWlCLEdBQ3JCLEdBQUksSUFBYSxLQUNiLEVBQWlCLElBQUssRUFBZSxFQUNyQyxFQUFlLEdBQUssRUFBZSxJQUNuQyxPQUFPLEVBQWUsSUFFMUIsR0FBSSxHQUFRLEVBQ1IsS0FBSyxjQUFjLEVBQWdCLEVBQWUsR0FBVyxFQUFLLEVBRTFFLFdBQVcsRUFBRyxDQUNWLElBQVEsT0FBTSxZQUFhLEtBQUssS0FDaEMsT0FBUSxLQUFLLEtBQUssWUFBYyxPQUFPLEdBQVEsU0FBVyxFQUFLLElBQWEsRUFBTyxPQUV2RixRQUFRLENBQUMsRUFFVCxFQUNFLENBQ0UsSUFBSSxFQUNKLEdBQUksT0FBTyxHQUFnQixVQUV2QixHQURBLEVBQUksS0FBSyxVQUFVLENBQVksRUFDM0IsQ0FBQyxFQUNELE1BQVUsTUFBTSw4QkFBOEIsSUFBZSxFQUdqRSxPQUFJLEtBQUssUUFBUSxDQUFZLEVBRWpDLElBQU0sRUFBUSxFQUFFLENBQUksRUFDcEIsR0FBSSxFQUFFLFdBQVksR0FDZCxLQUFLLE9BQVMsRUFBRSxPQUNwQixPQUFPLEVBRVgsT0FBTyxDQUFDLEVBQVEsRUFBTyxDQUNuQixJQUFNLEVBQU0sS0FBSyxXQUFXLEVBQVEsQ0FBSyxFQUN6QyxPQUFRLEVBQUksVUFBWSxLQUFLLGtCQUFrQixDQUFHLEVBRXRELFlBQVksQ0FBQyxFQUFRLEVBQU0sQ0FDdkIsR0FBSSxPQUFPLEtBQUssS0FBSyxZQUFjLFdBQy9CLE1BQVUsTUFBTSx5Q0FBeUMsRUFFN0QsSUFBUSxjQUFlLEtBQUssS0FDNUIsT0FBTyxFQUFnQixLQUFLLEtBQU0sRUFBUSxDQUFJLEVBQzlDLGVBQWUsQ0FBZSxDQUFDLEVBQVMsRUFBTyxDQUMzQyxNQUFNLEVBQWUsS0FBSyxLQUFNLEVBQVEsT0FBTyxFQUMvQyxJQUFNLEVBQU0sS0FBSyxXQUFXLEVBQVMsQ0FBSyxFQUMxQyxPQUFPLEVBQUksVUFBWSxFQUFjLEtBQUssS0FBTSxDQUFHLEVBRXZELGVBQWUsQ0FBYyxDQUFDLEVBQU0sQ0FDaEMsR0FBSSxHQUFRLENBQUMsS0FBSyxVQUFVLENBQUksRUFDNUIsTUFBTSxFQUFnQixLQUFLLEtBQU0sQ0FBRSxNQUFLLEVBQUcsRUFBSSxFQUd2RCxlQUFlLENBQWEsQ0FBQyxFQUFLLENBQzlCLEdBQUksQ0FDQSxPQUFPLEtBQUssa0JBQWtCLENBQUcsRUFFckMsTUFBTyxFQUFHLENBQ04sR0FBSSxFQUFFLGFBQWEsR0FBWSxTQUMzQixNQUFNLEVBR1YsT0FGQSxFQUFZLEtBQUssS0FBTSxDQUFDLEVBQ3hCLE1BQU0sRUFBa0IsS0FBSyxLQUFNLEVBQUUsYUFBYSxFQUMzQyxFQUFjLEtBQUssS0FBTSxDQUFHLEdBRzNDLFNBQVMsQ0FBVyxFQUFHLGNBQWUsRUFBSyxjQUFjLENBQ3JELEdBQUksS0FBSyxLQUFLLEdBQ1YsTUFBVSxNQUFNLGFBQWEsbUJBQXFCLHNCQUErQixFQUd6RixlQUFlLENBQWlCLENBQUMsRUFBSyxDQUNsQyxJQUFNLEVBQVUsTUFBTSxFQUFZLEtBQUssS0FBTSxDQUFHLEVBQ2hELEdBQUksQ0FBQyxLQUFLLEtBQUssR0FDWCxNQUFNLEVBQWUsS0FBSyxLQUFNLEVBQVEsT0FBTyxFQUNuRCxHQUFJLENBQUMsS0FBSyxLQUFLLEdBQ1gsS0FBSyxVQUFVLEVBQVMsRUFBSyxDQUFJLEVBRXpDLGVBQWUsQ0FBVyxDQUFDLEVBQUssQ0FDNUIsSUFBTSxFQUFJLEtBQUssU0FBUyxHQUN4QixHQUFJLEVBQ0EsT0FBTyxFQUNYLEdBQUksQ0FDQSxPQUFPLE1BQU8sS0FBSyxTQUFTLEdBQU8sRUFBVyxDQUFHLFVBRXJELENBQ0ksT0FBTyxLQUFLLFNBQVMsS0FLakMsU0FBUyxDQUFDLEVBQ1YsRUFDQSxFQUNBLEVBQWtCLEtBQUssS0FBSyxlQUMxQixDQUNFLEdBQUksTUFBTSxRQUFRLENBQU0sRUFBRyxDQUN2QixRQUFXLEtBQU8sRUFDZCxLQUFLLFVBQVUsRUFBSyxPQUFXLEVBQU8sQ0FBZSxFQUN6RCxPQUFPLEtBRVgsSUFBSSxFQUNKLEdBQUksT0FBTyxJQUFXLFNBQVUsQ0FDNUIsSUFBUSxZQUFhLEtBQUssS0FFMUIsR0FEQSxFQUFLLEVBQU8sR0FDUixJQUFPLFFBQWEsT0FBTyxHQUFNLFNBQ2pDLE1BQVUsTUFBTSxVQUFVLGtCQUF5QixFQU0zRCxPQUhBLEVBQW9CLGVBQWEsR0FBTyxDQUFFLEVBQzFDLEtBQUssYUFBYSxDQUFHLEVBQ3JCLEtBQUssUUFBUSxHQUFPLEtBQUssV0FBVyxFQUFRLEVBQU8sRUFBSyxFQUFpQixFQUFJLEVBQ3RFLEtBSVgsYUFBYSxDQUFDLEVBQVEsRUFDdEIsRUFBa0IsS0FBSyxLQUFLLGVBQzFCLENBRUUsT0FEQSxLQUFLLFVBQVUsRUFBUSxFQUFLLEdBQU0sQ0FBZSxFQUMxQyxLQUdYLGNBQWMsQ0FBQyxFQUFRLEVBQWlCLENBQ3BDLEdBQUksT0FBTyxHQUFVLFVBQ2pCLE1BQU8sR0FDWCxJQUFJLEVBRUosR0FEQSxFQUFVLEVBQU8sUUFDYixJQUFZLFFBQWEsT0FBTyxHQUFXLFNBQzNDLE1BQVUsTUFBTSwwQkFBMEIsRUFHOUMsR0FEQSxFQUFVLEdBQVcsS0FBSyxLQUFLLGFBQWUsS0FBSyxZQUFZLEVBQzNELENBQUMsRUFHRCxPQUZBLEtBQUssT0FBTyxLQUFLLDJCQUEyQixFQUM1QyxLQUFLLE9BQVMsS0FDUCxHQUVYLElBQU0sRUFBUSxLQUFLLFNBQVMsRUFBUyxDQUFNLEVBQzNDLEdBQUksQ0FBQyxHQUFTLEVBQWlCLENBQzNCLElBQU0sRUFBVSxzQkFBd0IsS0FBSyxXQUFXLEVBQ3hELEdBQUksS0FBSyxLQUFLLGlCQUFtQixNQUM3QixLQUFLLE9BQU8sTUFBTSxDQUFPLEVBRXpCLFdBQVUsTUFBTSxDQUFPLEVBRS9CLE9BQU8sRUFJWCxTQUFTLENBQUMsRUFBUSxDQUNkLElBQUksRUFDSixNQUFPLE9BQVEsRUFBTSxHQUFVLEtBQUssS0FBTSxDQUFNLElBQU0sU0FDbEQsRUFBUyxFQUNiLEdBQUksSUFBUSxPQUFXLENBQ25CLElBQVEsWUFBYSxLQUFLLEtBQ3BCLEVBQU8sSUFBYyxhQUFVLENBQUUsT0FBUSxDQUFDLEVBQUcsVUFBUyxDQUFDLEVBRTdELEdBREEsRUFBZ0IsaUJBQWMsS0FBSyxLQUFNLEVBQU0sQ0FBTSxFQUNqRCxDQUFDLEVBQ0QsT0FDSixLQUFLLEtBQUssR0FBVSxFQUV4QixPQUFRLEVBQUksVUFBWSxLQUFLLGtCQUFrQixDQUFHLEVBTXRELFlBQVksQ0FBQyxFQUFjLENBQ3ZCLEdBQUksYUFBd0IsT0FHeEIsT0FGQSxLQUFLLGtCQUFrQixLQUFLLFFBQVMsQ0FBWSxFQUNqRCxLQUFLLGtCQUFrQixLQUFLLEtBQU0sQ0FBWSxFQUN2QyxLQUVYLE9BQVEsT0FBTyxPQUNOLFlBSUQsT0FIQSxLQUFLLGtCQUFrQixLQUFLLE9BQU8sRUFDbkMsS0FBSyxrQkFBa0IsS0FBSyxJQUFJLEVBQ2hDLEtBQUssT0FBTyxNQUFNLEVBQ1gsU0FDTixTQUFVLENBQ1gsSUFBTSxFQUFNLEdBQVUsS0FBSyxLQUFNLENBQVksRUFDN0MsR0FBSSxPQUFPLEdBQU8sU0FDZCxLQUFLLE9BQU8sT0FBTyxFQUFJLE1BQU0sRUFHakMsT0FGQSxPQUFPLEtBQUssUUFBUSxHQUNwQixPQUFPLEtBQUssS0FBSyxHQUNWLElBQ1gsS0FDSyxTQUFVLENBQ1gsSUFBTSxFQUFXLEVBQ2pCLEtBQUssT0FBTyxPQUFPLENBQVEsRUFDM0IsSUFBSSxFQUFLLEVBQWEsS0FBSyxLQUFLLFVBQ2hDLEdBQUksRUFDQSxFQUFtQixlQUFhLENBQUUsRUFDbEMsT0FBTyxLQUFLLFFBQVEsR0FDcEIsT0FBTyxLQUFLLEtBQUssR0FFckIsT0FBTyxJQUNYLFNBRUksTUFBVSxNQUFNLHFDQUFxQyxHQUlqRSxhQUFhLENBQUMsRUFBYSxDQUN2QixRQUFXLEtBQU8sRUFDZCxLQUFLLFdBQVcsQ0FBRyxFQUN2QixPQUFPLEtBRVgsVUFBVSxDQUFDLEVBQVUsRUFDbkIsQ0FDRSxJQUFJLEVBQ0osR0FBSSxPQUFPLEdBQVksVUFFbkIsR0FEQSxFQUFVLEVBQ04sT0FBTyxHQUFPLFNBQ2QsS0FBSyxPQUFPLEtBQUssMERBQTBELEVBQzNFLEVBQUksUUFBVSxFQUdqQixRQUFJLE9BQU8sR0FBWSxVQUFZLElBQVEsUUFHNUMsR0FGQSxFQUFNLEVBQ04sRUFBVSxFQUFJLFFBQ1YsTUFBTSxRQUFRLENBQU8sR0FBSyxDQUFDLEVBQVEsT0FDbkMsTUFBVSxNQUFNLHdEQUF3RCxFQUk1RSxXQUFVLE1BQU0sZ0NBQWdDLEVBR3BELEdBREEsR0FBYSxLQUFLLEtBQU0sRUFBUyxDQUFHLEVBQ2hDLENBQUMsRUFFRCxPQURXLFlBQVUsRUFBUyxDQUFDLElBQVEsR0FBUSxLQUFLLEtBQU0sQ0FBRyxDQUFDLEVBQ3ZELEtBRVgsR0FBa0IsS0FBSyxLQUFNLENBQUcsRUFDaEMsSUFBTSxFQUFhLElBQ1osRUFDSCxLQUFxQixnQkFBYyxFQUFJLElBQUksRUFDM0MsV0FBMkIsZ0JBQWMsRUFBSSxVQUFVLENBQzNELEVBSUEsT0FIVyxZQUFVLEVBQVMsRUFBVyxLQUFLLFNBQVcsRUFDbkQsQ0FBQyxJQUFNLEdBQVEsS0FBSyxLQUFNLEVBQUcsQ0FBVSxFQUN2QyxDQUFDLElBQU0sRUFBVyxLQUFLLFFBQVEsQ0FBQyxJQUFNLEdBQVEsS0FBSyxLQUFNLEVBQUcsRUFBWSxDQUFDLENBQUMsQ0FBQyxFQUMxRSxLQUVYLFVBQVUsQ0FBQyxFQUFTLENBQ2hCLElBQU0sRUFBTyxLQUFLLE1BQU0sSUFBSSxHQUM1QixPQUFPLE9BQU8sR0FBUSxTQUFXLEVBQUssV0FBYSxDQUFDLENBQUMsRUFHekQsYUFBYSxDQUFDLEVBQVMsQ0FFbkIsSUFBUSxTQUFVLEtBQ2xCLE9BQU8sRUFBTSxTQUFTLEdBQ3RCLE9BQU8sRUFBTSxJQUFJLEdBQ2pCLFFBQVcsS0FBUyxFQUFNLE1BQU8sQ0FDN0IsSUFBTSxFQUFJLEVBQU0sTUFBTSxVQUFVLENBQUMsSUFBUyxFQUFLLFVBQVksQ0FBTyxFQUNsRSxHQUFJLEdBQUssRUFDTCxFQUFNLE1BQU0sT0FBTyxFQUFHLENBQUMsRUFFL0IsT0FBTyxLQUdYLFNBQVMsQ0FBQyxFQUFNLEVBQVEsQ0FDcEIsR0FBSSxPQUFPLEdBQVUsU0FDakIsRUFBUyxJQUFJLE9BQU8sQ0FBTSxFQUU5QixPQURBLEtBQUssUUFBUSxHQUFRLEVBQ2QsS0FFWCxVQUFVLENBQUMsRUFBUyxLQUFLLFFBQ3ZCLFlBQVksS0FBTSxVQUFVLFFBQVcsQ0FBQyxFQUN4QyxDQUNFLEdBQUksQ0FBQyxHQUFVLEVBQU8sU0FBVyxFQUM3QixNQUFPLFlBQ1gsT0FBTyxFQUNGLElBQUksQ0FBQyxJQUFNLEdBQUcsSUFBVSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFDckQsT0FBTyxDQUFDLEVBQU0sSUFBUSxFQUFPLEVBQVksQ0FBRyxFQUVyRCxlQUFlLENBQUMsRUFBWSxFQUFzQixDQUM5QyxJQUFNLEVBQVEsS0FBSyxNQUFNLElBQ3pCLEVBQWEsS0FBSyxNQUFNLEtBQUssVUFBVSxDQUFVLENBQUMsRUFDbEQsUUFBVyxLQUFlLEVBQXNCLENBQzVDLElBQU0sRUFBVyxFQUFZLE1BQU0sR0FBRyxFQUFFLE1BQU0sQ0FBQyxFQUMzQyxFQUFXLEVBQ2YsUUFBVyxLQUFPLEVBQ2QsRUFBVyxFQUFTLEdBQ3hCLFFBQVcsS0FBTyxFQUFPLENBQ3JCLElBQU0sRUFBTyxFQUFNLEdBQ25CLEdBQUksT0FBTyxHQUFRLFNBQ2YsU0FDSixJQUFRLFNBQVUsRUFBSyxXQUNqQixFQUFTLEVBQVMsR0FDeEIsR0FBSSxHQUFTLEVBQ1QsRUFBUyxHQUFPLEdBQWEsQ0FBTSxHQUcvQyxPQUFPLEVBRVgsaUJBQWlCLENBQUMsRUFBUyxFQUFPLENBQzlCLFFBQVcsS0FBVSxFQUFTLENBQzFCLElBQU0sRUFBTSxFQUFRLEdBQ3BCLEdBQUksQ0FBQyxHQUFTLEVBQU0sS0FBSyxDQUFNLEdBQzNCLEdBQUksT0FBTyxHQUFPLFNBQ2QsT0FBTyxFQUFRLEdBRWQsUUFBSSxHQUFPLENBQUMsRUFBSSxLQUNqQixLQUFLLE9BQU8sT0FBTyxFQUFJLE1BQU0sRUFDN0IsT0FBTyxFQUFRLEtBSy9CLFVBQVUsQ0FBQyxFQUFRLEVBQU0sRUFBUSxFQUFpQixLQUFLLEtBQUssZUFBZ0IsRUFBWSxLQUFLLEtBQUssY0FBZSxDQUM3RyxJQUFJLEdBQ0ksWUFBYSxLQUFLLEtBQzFCLEdBQUksT0FBTyxHQUFVLFNBQ2pCLEVBQUssRUFBTyxHQUdaLFFBQUksS0FBSyxLQUFLLElBQ1YsTUFBVSxNQUFNLHVCQUF1QixFQUN0QyxRQUFJLE9BQU8sR0FBVSxVQUN0QixNQUFVLE1BQU0sa0NBQWtDLEVBRTFELElBQUksRUFBTSxLQUFLLE9BQU8sSUFBSSxDQUFNLEVBQ2hDLEdBQUksSUFBUSxPQUNSLE9BQU8sRUFDWCxFQUF1QixlQUFhLEdBQU0sQ0FBTSxFQUNoRCxJQUFNLEVBQXNCLGlCQUFjLEtBQUssS0FBTSxFQUFRLENBQU0sRUFHbkUsR0FGQSxFQUFNLElBQWMsYUFBVSxDQUFFLFNBQVEsV0FBVSxPQUFNLFNBQVEsV0FBVSxDQUFDLEVBQzNFLEtBQUssT0FBTyxJQUFJLEVBQUksT0FBUSxDQUFHLEVBQzNCLEdBQWEsQ0FBQyxFQUFPLFdBQVcsR0FBRyxFQUFHLENBRXRDLEdBQUksRUFDQSxLQUFLLGFBQWEsQ0FBTSxFQUM1QixLQUFLLEtBQUssR0FBVSxFQUV4QixHQUFJLEVBQ0EsS0FBSyxlQUFlLEVBQVEsRUFBSSxFQUNwQyxPQUFPLEVBRVgsWUFBWSxDQUFDLEVBQUksQ0FDYixHQUFJLEtBQUssUUFBUSxJQUFPLEtBQUssS0FBSyxHQUM5QixNQUFVLE1BQU0sMEJBQTBCLG1CQUFvQixFQUd0RSxpQkFBaUIsQ0FBQyxFQUFLLENBQ25CLEdBQUksRUFBSSxLQUNKLEtBQUssbUJBQW1CLENBQUcsRUFFM0IsS0FBVSxpQkFBYyxLQUFLLEtBQU0sQ0FBRyxFQUUxQyxHQUFJLENBQUMsRUFBSSxTQUNMLE1BQVUsTUFBTSwwQkFBMEIsRUFDOUMsT0FBTyxFQUFJLFNBRWYsa0JBQWtCLENBQUMsRUFBSyxDQUNwQixJQUFNLEVBQWMsS0FBSyxLQUN6QixLQUFLLEtBQU8sS0FBSyxVQUNqQixHQUFJLENBQ1UsaUJBQWMsS0FBSyxLQUFNLENBQUcsU0FFMUMsQ0FDSSxLQUFLLEtBQU8sR0FHeEIsQ0FDQSxHQUFJLGdCQUFrQixHQUFtQixRQUN6QyxHQUFJLGdCQUFrQixHQUFZLFFBQ2xDLEdBQVEsUUFBVSxHQUNsQixTQUFTLEVBQVksQ0FBQyxFQUFXLEVBQVMsRUFBSyxFQUFNLFFBQVMsQ0FDMUQsUUFBVyxLQUFPLEVBQVcsQ0FDekIsSUFBTSxFQUFNLEVBQ1osR0FBSSxLQUFPLEVBQ1AsS0FBSyxPQUFPLEdBQUssR0FBRyxhQUFlLE1BQVEsRUFBVSxJQUFNLEdBR3ZFLFNBQVMsRUFBUyxDQUFDLEVBQVEsQ0FFdkIsT0FEQSxFQUF1QixlQUFhLENBQU0sRUFDbkMsS0FBSyxRQUFRLElBQVcsS0FBSyxLQUFLLEdBRTdDLFNBQVMsRUFBaUIsRUFBRyxDQUN6QixJQUFNLEVBQWMsS0FBSyxLQUFLLFFBQzlCLEdBQUksQ0FBQyxFQUNELE9BQ0osR0FBSSxNQUFNLFFBQVEsQ0FBVyxFQUN6QixLQUFLLFVBQVUsQ0FBVyxFQUUxQixhQUFXLEtBQU8sRUFDZCxLQUFLLFVBQVUsRUFBWSxHQUFNLENBQUcsRUFFaEQsU0FBUyxFQUFpQixFQUFHLENBQ3pCLFFBQVcsS0FBUSxLQUFLLEtBQUssUUFBUyxDQUNsQyxJQUFNLEVBQVMsS0FBSyxLQUFLLFFBQVEsR0FDakMsR0FBSSxFQUNBLEtBQUssVUFBVSxFQUFNLENBQU0sR0FHdkMsU0FBUyxFQUFrQixDQUFDLEVBQU0sQ0FDOUIsR0FBSSxNQUFNLFFBQVEsQ0FBSSxFQUFHLENBQ3JCLEtBQUssY0FBYyxDQUFJLEVBQ3ZCLE9BRUosS0FBSyxPQUFPLEtBQUssa0RBQWtELEVBQ25FLFFBQVcsS0FBVyxFQUFNLENBQ3hCLElBQU0sRUFBTSxFQUFLLEdBQ2pCLEdBQUksQ0FBQyxFQUFJLFFBQ0wsRUFBSSxRQUFVLEVBQ2xCLEtBQUssV0FBVyxDQUFHLEdBRzNCLFNBQVMsRUFBb0IsRUFBRyxDQUM1QixJQUFNLEVBQVcsSUFBSyxLQUFLLElBQUssRUFDaEMsUUFBVyxLQUFPLEdBQ2QsT0FBTyxFQUFTLEdBQ3BCLE9BQU8sRUFFWCxJQUFNLEdBQVMsQ0FBRSxHQUFHLEVBQUcsR0FBSyxJQUFJLEVBQUcsR0FBSyxLQUFLLEVBQUcsRUFBSSxFQUNwRCxTQUFTLEVBQVMsQ0FBQyxFQUFRLENBQ3ZCLEdBQUksSUFBVyxHQUNYLE9BQU8sR0FDWCxHQUFJLElBQVcsT0FDWCxPQUFPLFFBQ1gsR0FBSSxFQUFPLEtBQU8sRUFBTyxNQUFRLEVBQU8sTUFDcEMsT0FBTyxFQUNYLE1BQVUsTUFBTSxtREFBbUQsRUFFdkUsSUFBTSxHQUFlLDBCQUNyQixTQUFTLEVBQVksQ0FBQyxFQUFTLEVBQUssQ0FDaEMsSUFBUSxTQUFVLEtBT2xCLEdBTlcsWUFBVSxFQUFTLENBQUMsSUFBUSxDQUNuQyxHQUFJLEVBQU0sU0FBUyxHQUNmLE1BQVUsTUFBTSxXQUFXLHNCQUF3QixFQUN2RCxHQUFJLENBQUMsR0FBYSxLQUFLLENBQUcsRUFDdEIsTUFBVSxNQUFNLFdBQVcsb0JBQXNCLEVBQ3hELEVBQ0csQ0FBQyxFQUNELE9BQ0osR0FBSSxFQUFJLE9BQVMsR0FBRSxTQUFVLEtBQU8sYUFBYyxJQUM5QyxNQUFVLE1BQU0sdURBQXVELEVBRy9FLFNBQVMsRUFBTyxDQUFDLEVBQVMsRUFBWSxFQUFVLENBQzVDLElBQUksRUFDSixJQUFNLEVBQU8sSUFBZSxNQUFRLElBQW9CLE9BQVMsT0FBSSxFQUFXLEtBQ2hGLEdBQUksR0FBWSxFQUNaLE1BQVUsTUFBTSw2Q0FBNkMsRUFDakUsSUFBUSxTQUFVLEtBQ2QsRUFBWSxFQUFPLEVBQU0sS0FBTyxFQUFNLE1BQU0sS0FBSyxFQUFHLEtBQU0sS0FBUSxJQUFNLENBQVEsRUFDcEYsR0FBSSxDQUFDLEVBQ0QsRUFBWSxDQUFFLEtBQU0sRUFBVSxNQUFPLENBQUMsQ0FBRSxFQUN4QyxFQUFNLE1BQU0sS0FBSyxDQUFTLEVBRzlCLEdBREEsRUFBTSxTQUFTLEdBQVcsR0FDdEIsQ0FBQyxFQUNELE9BQ0osSUFBTSxFQUFPLENBQ1QsVUFDQSxXQUFZLElBQ0wsRUFDSCxLQUFxQixnQkFBYyxFQUFXLElBQUksRUFDbEQsV0FBMkIsZ0JBQWMsRUFBVyxVQUFVLENBQ2xFLENBQ0osRUFDQSxHQUFJLEVBQVcsT0FDWCxHQUFjLEtBQUssS0FBTSxFQUFXLEVBQU0sRUFBVyxNQUFNLEVBRTNELE9BQVUsTUFBTSxLQUFLLENBQUksRUFDN0IsRUFBTSxJQUFJLEdBQVcsR0FDcEIsRUFBSyxFQUFXLGNBQWdCLE1BQVEsSUFBWSxRQUFhLEVBQUcsUUFBUSxDQUFDLElBQVEsS0FBSyxXQUFXLENBQUcsQ0FBQyxFQUU5RyxTQUFTLEVBQWEsQ0FBQyxFQUFXLEVBQU0sRUFBUSxDQUM1QyxJQUFNLEVBQUksRUFBVSxNQUFNLFVBQVUsQ0FBQyxJQUFVLEVBQU0sVUFBWSxDQUFNLEVBQ3ZFLEdBQUksR0FBSyxFQUNMLEVBQVUsTUFBTSxPQUFPLEVBQUcsRUFBRyxDQUFJLEVBR2pDLE9BQVUsTUFBTSxLQUFLLENBQUksRUFDekIsS0FBSyxPQUFPLEtBQUssUUFBUSxrQkFBdUIsRUFHeEQsU0FBUyxFQUFpQixDQUFDLEVBQUssQ0FDNUIsSUFBTSxjQUFlLEVBQ3JCLEdBQUksSUFBZSxPQUNmLE9BQ0osR0FBSSxFQUFJLE9BQVMsS0FBSyxLQUFLLE1BQ3ZCLEVBQWEsR0FBYSxDQUFVLEVBQ3hDLEVBQUksZUFBaUIsS0FBSyxRQUFRLEVBQVksRUFBSSxFQUV0RCxJQUFNLEdBQVcsQ0FDYixLQUFNLGdGQUNWLEVBQ0EsU0FBUyxFQUFZLENBQUMsRUFBUSxDQUMxQixNQUFPLENBQUUsTUFBTyxDQUFDLEVBQVEsRUFBUSxDQUFFLDJCQ3RtQnZDLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLEdBQU0sQ0FDUixRQUFTLEtBQ1QsSUFBSSxFQUFHLENBQ0gsTUFBVSxNQUFNLHNEQUFzRCxFQUU5RSxFQUNBLEdBQVEsUUFBVSwyQkNQbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsUUFBVSxHQUFRLFlBQW1CLE9BQzdDLElBQU0sUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsR0FBTSxDQUNSLFFBQVMsT0FDVCxXQUFZLFNBQ1osSUFBSSxDQUFDLEVBQUssQ0FDTixJQUFRLE1BQUssT0FBUSxFQUFNLE1BQU8sR0FDMUIsU0FBUSxVQUFXLEVBQUssZUFBYyxPQUFNLFFBQVMsR0FDckQsUUFBUyxFQUNqQixJQUFLLElBQVMsS0FBTyxJQUFTLE9BQVMsSUFBVyxFQUFLLE9BQ25ELE9BQU8sRUFBWSxFQUN2QixJQUFNLEVBQXFCLGNBQVcsS0FBSyxFQUFNLEVBQU0sRUFBUSxDQUFJLEVBQ25FLEdBQUksSUFBYSxPQUNiLE1BQU0sSUFBSSxHQUFZLFFBQVEsRUFBRyxLQUFLLFlBQWEsRUFBUSxDQUFJLEVBQ25FLEdBQUksYUFBOEIsYUFDOUIsT0FBTyxFQUFhLENBQVEsRUFDaEMsT0FBTyxFQUFnQixDQUFRLEVBQy9CLFNBQVMsQ0FBVyxFQUFHLENBQ25CLEdBQUksSUFBUSxFQUNSLE9BQU8sR0FBUSxFQUFLLEVBQWMsRUFBSyxFQUFJLE1BQU0sRUFDckQsSUFBTSxFQUFXLEVBQUksV0FBVyxPQUFRLENBQUUsSUFBSyxDQUFLLENBQUMsRUFDckQsT0FBTyxHQUFRLEVBQU0sQUFBYSxPQUFNLGFBQXFCLEVBQU0sRUFBSyxNQUFNLEVBRWxGLFNBQVMsQ0FBWSxDQUFDLEVBQUssQ0FDdkIsSUFBTSxFQUFJLEdBQVksRUFBSyxDQUFHLEVBQzlCLEdBQVEsRUFBSyxFQUFHLEVBQUssRUFBSSxNQUFNLEVBRW5DLFNBQVMsQ0FBZSxDQUFDLEVBQUssQ0FDMUIsSUFBTSxFQUFVLEVBQUksV0FBVyxTQUFVLEVBQUssS0FBSyxTQUFXLEdBQU8sQ0FBRSxJQUFLLEVBQUssS0FBb0IsYUFBVyxDQUFHLENBQUUsRUFBSSxDQUFFLElBQUssQ0FBSSxDQUFDLEVBQy9ILEVBQVEsRUFBSSxLQUFLLE9BQU8sRUFDeEIsRUFBUyxFQUFJLFVBQVUsQ0FDekIsT0FBUSxFQUNSLFVBQVcsQ0FBQyxFQUNaLFdBQXNCLE9BQ3RCLGFBQWMsRUFDZCxjQUFlLENBQ25CLEVBQUcsQ0FBSyxFQUNSLEVBQUksZUFBZSxDQUFNLEVBQ3pCLEVBQUksR0FBRyxDQUFLLEdBR3hCLEVBQ0EsU0FBUyxFQUFXLENBQUMsRUFBSyxFQUFLLENBQzNCLElBQVEsT0FBUSxFQUNoQixPQUFPLEVBQUksU0FDTCxFQUFJLFdBQVcsV0FBWSxDQUFFLElBQUssRUFBSSxRQUFTLENBQUMsRUFDL0MsQUFBYSxPQUFNLEVBQUksV0FBVyxVQUFXLENBQUUsSUFBSyxDQUFJLENBQUMsYUFFcEUsR0FBUSxZQUFjLEdBQ3RCLFNBQVMsRUFBTyxDQUFDLEVBQUssRUFBRyxFQUFLLEVBQVEsQ0FDbEMsSUFBUSxNQUFLLE1BQU8sR0FDWixZQUFXLFVBQVcsRUFBSyxRQUFTLEVBQ3RDLEVBQVUsRUFBSyxZQUFjLEdBQVEsUUFBUSxLQUFpQixPQUNwRSxHQUFJLEVBQ0EsRUFBYSxFQUViLE9BQVksRUFDaEIsU0FBUyxDQUFZLEVBQUcsQ0FDcEIsR0FBSSxDQUFDLEVBQUksT0FDTCxNQUFVLE1BQU0sd0NBQXdDLEVBQzVELElBQU0sRUFBUSxFQUFJLElBQUksT0FBTyxFQUM3QixFQUFJLElBQUksSUFBTSxDQUdWLEdBRkEsRUFBSSxLQUFNLEFBQWEsYUFBdUIsb0JBQWtCLEVBQUssRUFBRyxDQUFPLEdBQUcsRUFDbEYsRUFBaUIsQ0FBQyxFQUNkLENBQUMsRUFDRCxFQUFJLE9BQU8sRUFBTyxFQUFJLEdBQzNCLENBQUMsSUFBTSxDQUdOLEdBRkEsRUFBSSxHQUFJLEFBQWEsU0FBUSxnQkFBZ0IsRUFBRyxtQkFBb0IsSUFBTSxFQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQ3RGLEVBQWMsQ0FBQyxFQUNYLENBQUMsRUFDRCxFQUFJLE9BQU8sRUFBTyxFQUFLLEVBQzlCLEVBQ0QsRUFBSSxHQUFHLENBQUssRUFFaEIsU0FBUyxDQUFXLEVBQUcsQ0FDbkIsRUFBSSxPQUFrQixvQkFBa0IsRUFBSyxFQUFHLENBQU8sRUFBRyxJQUFNLEVBQWlCLENBQUMsRUFBRyxJQUFNLEVBQWMsQ0FBQyxDQUFDLEVBRS9HLFNBQVMsQ0FBYSxDQUFDLEVBQVEsQ0FDM0IsSUFBTSxFQUFRLEFBQWEsT0FBTSxXQUNqQyxFQUFJLE9BQU8sR0FBUSxRQUFRLFFBQVUsQUFBYSxPQUFNLEdBQVEsUUFBUSxzQkFBc0IsT0FBVSxHQUFRLFFBQVEsa0JBQWtCLElBQU8sRUFDakosRUFBSSxPQUFPLEdBQVEsUUFBUSxPQUFTLEFBQWEsT0FBTSxHQUFRLFFBQVEsZ0JBQWdCLEVBRTNGLFNBQVMsQ0FBZ0IsQ0FBQyxFQUFRLENBQzlCLElBQUksRUFDSixHQUFJLENBQUMsRUFBRyxLQUFLLFlBQ1QsT0FDSixJQUFNLEdBQWdCLEVBQUssSUFBUSxNQUFRLElBQWEsT0FBUyxPQUFJLEVBQUksWUFBYyxNQUFRLElBQVksT0FBUyxPQUFJLEVBQUcsVUFFM0gsR0FBSSxFQUFHLFFBQVUsR0FDYixHQUFJLEdBQWdCLENBQUMsRUFBYSxjQUM5QixHQUFJLEVBQWEsUUFBVSxPQUN2QixFQUFHLE1BQWUsa0JBQWUsTUFBTSxFQUFLLEVBQWEsTUFBTyxFQUFHLEtBQUssRUFHM0UsS0FDRCxJQUFNLEVBQVEsRUFBSSxJQUFJLFFBQVUsQUFBYSxPQUFNLG1CQUF3QixFQUMzRSxFQUFHLE1BQWUsa0JBQWUsTUFBTSxFQUFLLEVBQU8sRUFBRyxNQUFpQixPQUFJLEVBR25GLEdBQUksRUFBRyxRQUFVLEdBQ2IsR0FBSSxHQUFnQixDQUFDLEVBQWEsY0FDOUIsR0FBSSxFQUFhLFFBQVUsT0FDdkIsRUFBRyxNQUFlLGtCQUFlLE1BQU0sRUFBSyxFQUFhLE1BQU8sRUFBRyxLQUFLLEVBRzNFLEtBQ0QsSUFBTSxFQUFRLEVBQUksSUFBSSxRQUFVLEFBQWEsT0FBTSxtQkFBd0IsRUFDM0UsRUFBRyxNQUFlLGtCQUFlLE1BQU0sRUFBSyxFQUFPLEVBQUcsTUFBaUIsT0FBSSxJQUszRixHQUFRLFFBQVUsR0FDbEIsR0FBUSxRQUFVLDJCQ3ZIbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sUUFDQSxRQUNBLEdBQU8sQ0FDVCxVQUNBLE1BQ0EsUUFDQSxjQUNBLENBQUUsUUFBUyxVQUFXLEVBQ3RCLGNBQ0EsR0FBSyxRQUNMLEdBQU0sT0FDVixFQUNBLEdBQVEsUUFBVSwyQkNibEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sUUFDQSxHQUFnQixhQUNoQixHQUFPLENBQ1QsUUFBUyxDQUFFLE1BQU8sS0FBTSxHQUFJLEdBQUksSUFBSyxLQUFNLEdBQUksRUFBRyxFQUNsRCxRQUFTLENBQUUsTUFBTyxLQUFNLEdBQUksR0FBSSxJQUFLLEtBQU0sR0FBSSxFQUFHLEVBQ2xELGlCQUFrQixDQUFFLE1BQU8sSUFBSyxHQUFJLEdBQUksR0FBSSxLQUFNLEdBQUksR0FBSSxFQUMxRCxpQkFBa0IsQ0FBRSxNQUFPLElBQUssR0FBSSxHQUFJLEdBQUksS0FBTSxHQUFJLEdBQUksQ0FDOUQsRUFDTSxHQUFRLENBQ1YsUUFBUyxFQUFHLFVBQVMsZ0JBQWtCLEFBQWEsaUJBQWdCLEdBQUssR0FBUyxTQUFTLElBQzNGLE9BQVEsRUFBRyxVQUFTLGdCQUFrQixBQUFhLG9CQUFtQixHQUFLLEdBQVMsaUJBQWlCLElBQ3pHLEVBQ00sR0FBTSxDQUNSLFFBQVMsT0FBTyxLQUFLLEVBQUksRUFDekIsS0FBTSxTQUNOLFdBQVksU0FDWixNQUFPLEdBQ1AsU0FDQSxJQUFJLENBQUMsRUFBSyxDQUNOLElBQVEsVUFBUyxPQUFNLGNBQWUsRUFDdEMsRUFBSSxVQUFXLEFBQWEsT0FBTSxLQUFRLEdBQUssR0FBUyxRQUFRLGNBQXVCLElBQU8sRUFFdEcsRUFDQSxHQUFRLFFBQVUsMkJDeEJsQixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsSUFBTSxRQUNBLEdBQVEsQ0FDVixRQUFTLEVBQUcsZ0JBQWtCLEFBQWEsNkJBQTRCLElBQ3ZFLE9BQVEsRUFBRyxnQkFBa0IsQUFBYSxvQkFBbUIsSUFDakUsRUFDTSxHQUFNLENBQ1IsUUFBUyxhQUNULEtBQU0sU0FDTixXQUFZLFNBQ1osTUFBTyxHQUNQLFNBQ0EsSUFBSSxDQUFDLEVBQUssQ0FDTixJQUFRLE1BQUssT0FBTSxhQUFZLE1BQU8sRUFFaEMsRUFBTyxFQUFHLEtBQUssb0JBQ2YsRUFBTSxFQUFJLElBQUksS0FBSyxFQUNuQixFQUFVLEVBQ1QsQUFBYSwyQkFBMEIsUUFBVSxXQUFhLElBQzlELEFBQWEsT0FBTSxrQkFBb0IsS0FDOUMsRUFBSSxVQUFXLEFBQWEsUUFBTyxlQUF3QixPQUFTLEtBQVEsTUFBZSxLQUFXLEVBRTlHLEVBQ0EsR0FBUSxRQUFVLDJCQ3ZCbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBRzVELFNBQVMsRUFBVSxDQUFDLEVBQUssQ0FDckIsSUFBTSxFQUFNLEVBQUksT0FDWixFQUFTLEVBQ1QsRUFBTSxFQUNOLEVBQ0osTUFBTyxFQUFNLEVBR1QsR0FGQSxJQUNBLEVBQVEsRUFBSSxXQUFXLEdBQUssRUFDeEIsR0FBUyxPQUFVLEdBQVMsT0FBVSxFQUFNLEdBRzVDLEdBREEsRUFBUSxFQUFJLFdBQVcsQ0FBRyxHQUNyQixFQUFRLFNBQVksTUFDckIsSUFHWixPQUFPLEVBRVgsR0FBUSxRQUFVLEdBQ2xCLEdBQVcsS0FBTyx5RUNyQmxCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLFFBQ0EsUUFDQSxRQUNBLEdBQVEsQ0FDVixPQUFPLEVBQUcsVUFBUyxjQUFjLENBRTdCLE1BQVEsQ0FBYSx1QkFEUixJQUFZLFlBQWMsT0FBUyxnQkFDUSxnQkFFNUQsT0FBUSxFQUFHLGdCQUFrQixBQUFhLGVBQWMsSUFDNUQsRUFDTSxHQUFNLENBQ1IsUUFBUyxDQUFDLFlBQWEsV0FBVyxFQUNsQyxLQUFNLFNBQ04sV0FBWSxTQUNaLE1BQU8sR0FDUCxTQUNBLElBQUksQ0FBQyxFQUFLLENBQ04sSUFBUSxVQUFTLE9BQU0sYUFBWSxNQUFPLEVBQ3BDLEVBQUssSUFBWSxZQUF3QixhQUFVLEdBQWUsYUFBVSxHQUM1RSxFQUFNLEVBQUcsS0FBSyxVQUFZLEdBQVMsQUFBYSxPQUFNLFdBQWlCLEFBQWEsT0FBaUIsV0FBUyxFQUFJLElBQUssR0FBYSxPQUFPLEtBQUssS0FDdEosRUFBSSxVQUFXLEFBQWEsT0FBTSxLQUFPLEtBQU0sR0FBWSxFQUVuRSxFQUNBLEdBQVEsUUFBVSwyQkN4QmxCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLFFBQ0EsUUFDQSxRQUNBLEdBQVEsQ0FDVixRQUFTLEVBQUcsZ0JBQWtCLEFBQWEsNkJBQTRCLEtBQ3ZFLE9BQVEsRUFBRyxnQkFBa0IsQUFBYSxpQkFBZ0IsSUFDOUQsRUFDTSxHQUFNLENBQ1IsUUFBUyxVQUNULEtBQU0sU0FDTixXQUFZLFNBQ1osTUFBTyxHQUNQLFNBQ0EsSUFBSSxDQUFDLEVBQUssQ0FDTixJQUFRLE1BQUssT0FBTSxRQUFPLFNBQVEsYUFBWSxNQUFPLEVBQy9DLEVBQUksRUFBRyxLQUFLLGNBQWdCLElBQU0sR0FDeEMsR0FBSSxFQUFPLENBQ1AsSUFBUSxVQUFXLEVBQUcsS0FBSyxLQUNyQixFQUFhLEVBQU8sT0FBUyxhQUFnQixBQUFhLGlCQUE2QixXQUFTLEVBQUssQ0FBTSxFQUMzRyxFQUFRLEVBQUksSUFBSSxPQUFPLEVBQzdCLEVBQUksSUFBSSxJQUFNLEVBQUksT0FBTyxFQUFRLEFBQWEsT0FBTSxLQUFjLE1BQWUsV0FBVyxJQUFPLEVBQUcsSUFBTSxFQUFJLE9BQU8sRUFBTyxFQUFLLENBQUMsRUFDcEksRUFBSSxVQUFXLEFBQWEsUUFBTyxHQUFPLEVBRXpDLEtBQ0QsSUFBTSxFQUFvQixjQUFZLEVBQUssQ0FBTSxFQUNqRCxFQUFJLFVBQVcsQUFBYSxRQUFPLFVBQWUsSUFBTyxHQUdyRSxFQUNBLEdBQVEsUUFBVSwyQkM5QmxCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLFFBQ0EsR0FBUSxDQUNWLE9BQU8sRUFBRyxVQUFTLGNBQWMsQ0FFN0IsTUFBUSxDQUFhLHVCQURSLElBQVksZ0JBQWtCLE9BQVMsZ0JBQ0ksZ0JBRTVELE9BQVEsRUFBRyxnQkFBa0IsQUFBYSxlQUFjLElBQzVELEVBQ00sR0FBTSxDQUNSLFFBQVMsQ0FBQyxnQkFBaUIsZUFBZSxFQUMxQyxLQUFNLFNBQ04sV0FBWSxTQUNaLE1BQU8sR0FDUCxTQUNBLElBQUksQ0FBQyxFQUFLLENBQ04sSUFBUSxVQUFTLE9BQU0sY0FBZSxFQUNoQyxFQUFLLElBQVksZ0JBQTRCLGFBQVUsR0FBZSxhQUFVLEdBQ3RGLEVBQUksVUFBVyxBQUFhLG1CQUFrQixhQUFnQixLQUFNLEdBQVksRUFFeEYsRUFDQSxHQUFRLFFBQVUsMkJDckJsQixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsSUFBTSxRQUNBLFFBQ0EsUUFDQSxHQUFRLENBQ1YsUUFBUyxFQUFHLFFBQVUsc0JBQXlCLEFBQWEsc0NBQXFDLEtBQ2pHLE9BQVEsRUFBRyxRQUFVLHNCQUF5QixBQUFhLHlCQUF3QixJQUN2RixFQUNNLEdBQU0sQ0FDUixRQUFTLFdBQ1QsS0FBTSxTQUNOLFdBQVksUUFDWixNQUFPLEdBQ1AsU0FDQSxJQUFJLENBQUMsRUFBSyxDQUNOLElBQVEsTUFBSyxTQUFRLGFBQVksT0FBTSxRQUFPLE1BQU8sR0FDN0MsUUFBUyxFQUNqQixHQUFJLENBQUMsR0FBUyxFQUFPLFNBQVcsRUFDNUIsT0FDSixJQUFNLEVBQVUsRUFBTyxRQUFVLEVBQUssYUFDdEMsR0FBSSxFQUFHLFVBQ0gsRUFBYyxFQUVkLE9BQWdCLEVBQ3BCLEdBQUksRUFBSyxlQUFnQixDQUNyQixJQUFNLEVBQVEsRUFBSSxhQUFhLFlBQ3ZCLHFCQUFzQixFQUFJLEdBQ2xDLFFBQVcsS0FBZSxFQUN0QixJQUFLLElBQVUsTUFBUSxJQUFlLE9BQVMsT0FBSSxFQUFNLE1BQWtCLFFBQWEsQ0FBQyxFQUFrQixJQUFJLENBQVcsRUFBRyxDQUN6SCxJQUFNLEVBQWEsRUFBRyxVQUFVLE9BQVMsRUFBRyxjQUN0QyxFQUFNLHNCQUFzQix5QkFBbUMsc0JBQzFELG1CQUFpQixFQUFJLEVBQUssRUFBRyxLQUFLLGNBQWMsR0FJdkUsU0FBUyxDQUFhLEVBQUcsQ0FDckIsR0FBSSxHQUFXLEVBQ1gsRUFBSSxXQUFxQixPQUFLLENBQWUsRUFHN0MsYUFBVyxLQUFRLEVBQ0osMEJBQXdCLEVBQUssQ0FBSSxFQUl4RCxTQUFTLENBQWUsRUFBRyxDQUN2QixJQUFNLEVBQVUsRUFBSSxJQUFJLFNBQVMsRUFDakMsR0FBSSxHQUFXLEVBQU8sQ0FDbEIsSUFBTSxFQUFRLEVBQUksSUFBSSxRQUFTLEVBQUksRUFDbkMsRUFBSSxXQUFXLEVBQU8sSUFBTSxFQUFpQixFQUFTLENBQUssQ0FBQyxFQUM1RCxFQUFJLEdBQUcsQ0FBSyxFQUdaLE9BQUksR0FBYyxvQkFBa0IsRUFBSyxFQUFRLENBQU8sQ0FBQyxFQUM5QyxxQkFBbUIsRUFBSyxDQUFPLEVBQzFDLEVBQUksS0FBSyxFQUdqQixTQUFTLENBQWUsRUFBRyxDQUN2QixFQUFJLE1BQU0sT0FBUSxFQUFZLENBQUMsSUFBUyxDQUNwQyxFQUFJLFVBQVUsQ0FBRSxnQkFBaUIsQ0FBSyxDQUFDLEVBQ3ZDLEVBQUksR0FBYyxvQkFBa0IsRUFBSyxFQUFNLEVBQU0sRUFBSyxhQUFhLEVBQUcsSUFBTSxFQUFJLE1BQU0sQ0FBQyxFQUM5RixFQUVMLFNBQVMsQ0FBZ0IsQ0FBQyxFQUFTLEVBQU8sQ0FDdEMsRUFBSSxVQUFVLENBQUUsZ0JBQWlCLENBQVEsQ0FBQyxFQUMxQyxFQUFJLE1BQU0sRUFBUyxFQUFZLElBQU0sQ0FDakMsRUFBSSxPQUFPLEVBQWtCLGtCQUFnQixFQUFLLEVBQU0sRUFBUyxFQUFLLGFBQWEsQ0FBQyxFQUNwRixFQUFJLEdBQWlCLE9BQUssQ0FBSyxFQUFHLElBQU0sQ0FDcEMsRUFBSSxNQUFNLEVBQ1YsRUFBSSxNQUFNLEVBQ2IsR0FDUSxNQUFHLEdBRzVCLEVBQ0EsR0FBUSxRQUFVLDJCQzVFbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sUUFDQSxHQUFRLENBQ1YsT0FBTyxFQUFHLFVBQVMsY0FBYyxDQUU3QixNQUFRLENBQWEsdUJBRFIsSUFBWSxXQUFhLE9BQVMsZ0JBQ1MsV0FFNUQsT0FBUSxFQUFHLGdCQUFrQixBQUFhLGVBQWMsSUFDNUQsRUFDTSxHQUFNLENBQ1IsUUFBUyxDQUFDLFdBQVksVUFBVSxFQUNoQyxLQUFNLFFBQ04sV0FBWSxTQUNaLE1BQU8sR0FDUCxTQUNBLElBQUksQ0FBQyxFQUFLLENBQ04sSUFBUSxVQUFTLE9BQU0sY0FBZSxFQUNoQyxFQUFLLElBQVksV0FBdUIsYUFBVSxHQUFlLGFBQVUsR0FDakYsRUFBSSxVQUFXLEFBQWEsT0FBTSxZQUFlLEtBQU0sR0FBWSxFQUUzRSxFQUNBLEdBQVEsUUFBVSwyQkNyQmxCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUU1RCxJQUFNLFFBQ04sR0FBTSxLQUFPLDRDQUNiLEdBQVEsUUFBVSwyQkNKbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sUUFDQSxRQUNBLFFBQ0EsUUFDQSxHQUFRLENBQ1YsUUFBUyxFQUFHLFFBQVUsSUFBRyxRQUFXLEFBQWEsaURBQWdELFNBQVMsbUJBQzFHLE9BQVEsRUFBRyxRQUFVLElBQUcsUUFBVyxBQUFhLFdBQVUsU0FBUyxJQUN2RSxFQUNNLEdBQU0sQ0FDUixRQUFTLGNBQ1QsS0FBTSxRQUNOLFdBQVksVUFDWixNQUFPLEdBQ1AsU0FDQSxJQUFJLENBQUMsRUFBSyxDQUNOLElBQVEsTUFBSyxPQUFNLFFBQU8sU0FBUSxlQUFjLGFBQVksTUFBTyxFQUNuRSxHQUFJLENBQUMsR0FBUyxDQUFDLEVBQ1gsT0FDSixJQUFNLEVBQVEsRUFBSSxJQUFJLE9BQU8sRUFDdkIsRUFBWSxFQUFhLE1BQXVCLGtCQUFnQixFQUFhLEtBQUssRUFBSSxDQUFDLEVBQzdGLEVBQUksV0FBVyxFQUFPLEVBQXNCLEFBQWEsT0FBTSxhQUFzQixFQUNyRixFQUFJLEdBQUcsQ0FBSyxFQUNaLFNBQVMsQ0FBbUIsRUFBRyxDQUMzQixJQUFNLEVBQUksRUFBSSxJQUFJLElBQU0sQUFBYSxPQUFNLFVBQWEsRUFDbEQsRUFBSSxFQUFJLElBQUksR0FBRyxFQUNyQixFQUFJLFVBQVUsQ0FBRSxJQUFHLEdBQUUsQ0FBQyxFQUN0QixFQUFJLE9BQU8sRUFBTyxFQUFJLEVBQ3RCLEVBQUksR0FBSSxBQUFhLE9BQU0sUUFBUyxLQUFPLEVBQVksRUFBSSxFQUFRLEdBQVEsRUFBRyxDQUFDLENBQUMsRUFFcEYsU0FBUyxDQUFXLEVBQUcsQ0FDbkIsT0FBTyxFQUFVLE9BQVMsR0FBSyxDQUFDLEVBQVUsS0FBSyxDQUFDLElBQU0sSUFBTSxVQUFZLElBQU0sT0FBTyxFQUV6RixTQUFTLENBQUssQ0FBQyxFQUFHLEVBQUcsQ0FDakIsSUFBTSxFQUFPLEVBQUksS0FBSyxNQUFNLEVBQ3RCLEVBQTJCLGtCQUFnQixFQUFXLEVBQU0sRUFBRyxLQUFLLGNBQTBCLFlBQVMsS0FBSyxFQUM1RyxFQUFVLEVBQUksTUFBTSxVQUFZLEFBQWEsUUFBTyxFQUMxRCxFQUFJLElBQUssQUFBYSxRQUFPLE9BQVEsSUFBTSxDQUd2QyxHQUZBLEVBQUksSUFBSSxFQUFPLEFBQWEsT0FBTSxLQUFRLElBQUksRUFDOUMsRUFBSSxHQUFHLEVBQVksQUFBYSxjQUFhLEVBQ3pDLEVBQVUsT0FBUyxFQUNuQixFQUFJLEdBQUksQUFBYSxjQUFhLGdCQUFxQixBQUFhLE9BQU0sVUFBYSxFQUMzRixFQUNLLEdBQUksQUFBYSxjQUFhLEtBQVcsaUJBQXFCLElBQU0sQ0FDckUsRUFBSSxPQUFPLEVBQUksQUFBYSxPQUFNLEtBQVcsSUFBTyxFQUNwRCxFQUFJLE1BQU0sRUFDVixFQUFJLE9BQU8sRUFBTyxFQUFLLEVBQUUsTUFBTSxFQUNsQyxFQUNJLEtBQU0sQUFBYSxPQUFNLEtBQVcsUUFBVyxHQUFHLEVBQzFELEVBRUwsU0FBUyxDQUFNLENBQUMsRUFBRyxFQUFHLENBQ2xCLElBQU0sRUFBaUIsV0FBUyxFQUFLLEdBQVEsT0FBTyxFQUM5QyxFQUFRLEVBQUksS0FBSyxPQUFPLEVBQzlCLEVBQUksTUFBTSxDQUFLLEVBQUUsSUFBSyxBQUFhLFFBQU8sT0FBUSxJQUFNLEVBQUksSUFBSyxBQUFhLE9BQU0sT0FBTyxNQUFNLE9BQVEsSUFBTSxFQUFJLEdBQUksQUFBYSxPQUFNLEtBQU8sS0FBUSxPQUFPLEtBQVEsTUFBTyxJQUFNLENBQ2pMLEVBQUksTUFBTSxFQUNWLEVBQUksT0FBTyxFQUFPLEVBQUssRUFBRSxNQUFNLENBQUssRUFDdkMsQ0FBQyxDQUFDLEdBR2YsRUFDQSxHQUFRLFFBQVUsMkJDN0RsQixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsSUFBTSxRQUNBLFFBQ0EsUUFDQSxHQUFRLENBQ1YsUUFBUyw0QkFDVCxPQUFRLEVBQUcsZ0JBQWtCLEFBQWEsc0JBQXFCLElBQ25FLEVBQ00sR0FBTSxDQUNSLFFBQVMsUUFDVCxNQUFPLEdBQ1AsU0FDQSxJQUFJLENBQUMsRUFBSyxDQUNOLElBQVEsTUFBSyxPQUFNLFFBQU8sYUFBWSxVQUFXLEVBQ2pELEdBQUksR0FBVSxHQUFVLE9BQU8sR0FBVSxTQUNyQyxFQUFJLFVBQVcsQUFBYSxRQUFrQixXQUFTLEVBQUssR0FBUSxPQUFPLEtBQUssTUFBUyxJQUFhLEVBR3RHLE9BQUksS0FBTSxBQUFhLE9BQU0sU0FBYyxHQUFNLEVBRzdELEVBQ0EsR0FBUSxRQUFVLDJCQ3RCbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sUUFDQSxRQUNBLFFBQ0EsR0FBUSxDQUNWLFFBQVMsNkNBQ1QsT0FBUSxFQUFHLGdCQUFrQixBQUFhLHVCQUFzQixJQUNwRSxFQUNNLEdBQU0sQ0FDUixRQUFTLE9BQ1QsV0FBWSxRQUNaLE1BQU8sR0FDUCxTQUNBLElBQUksQ0FBQyxFQUFLLENBQ04sSUFBUSxNQUFLLE9BQU0sUUFBTyxTQUFRLGFBQVksTUFBTyxFQUNyRCxHQUFJLENBQUMsR0FBUyxFQUFPLFNBQVcsRUFDNUIsTUFBVSxNQUFNLGdDQUFnQyxFQUNwRCxJQUFNLEVBQVUsRUFBTyxRQUFVLEVBQUcsS0FBSyxTQUNyQyxFQUNFLEVBQVMsSUFBTyxJQUFRLE1BQVEsSUFBYSxPQUFJLEVBQU8sRUFBaUIsV0FBUyxFQUFLLEdBQVEsT0FBTyxFQUN4RyxFQUNKLEdBQUksR0FBVyxFQUNYLEVBQVEsRUFBSSxJQUFJLE9BQU8sRUFDdkIsRUFBSSxXQUFXLEVBQU8sQ0FBUSxFQUU3QixLQUVELEdBQUksQ0FBQyxNQUFNLFFBQVEsQ0FBTSxFQUNyQixNQUFVLE1BQU0sMEJBQTBCLEVBQzlDLElBQU0sRUFBVSxFQUFJLE1BQU0sVUFBVyxDQUFVLEVBQy9DLEVBQXNCLE1BQUksR0FBRyxFQUFPLElBQUksQ0FBQyxFQUFJLElBQU0sRUFBVSxFQUFTLENBQUMsQ0FBQyxDQUFDLEVBRTdFLEVBQUksS0FBSyxDQUFLLEVBQ2QsU0FBUyxDQUFRLEVBQUcsQ0FDaEIsRUFBSSxPQUFPLEVBQU8sRUFBSyxFQUN2QixFQUFJLE1BQU0sSUFBSyxFQUFZLENBQUMsSUFBTSxFQUFJLEdBQUksQUFBYSxPQUFNLEVBQU8sS0FBSyxNQUFTLEtBQU0sSUFBTSxFQUFJLE9BQU8sRUFBTyxFQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFFbEksU0FBUyxDQUFTLENBQUMsRUFBUyxFQUFHLENBQzNCLElBQU0sRUFBTSxFQUFPLEdBQ25CLE9BQU8sT0FBTyxJQUFRLFVBQVksSUFBUSxLQUNuQyxBQUFhLE9BQU0sRUFBTyxLQUFLLE1BQVMsS0FBVyxNQUNuRCxBQUFhLE9BQU0sU0FBWSxLQUdsRCxFQUNBLEdBQVEsUUFBVSwyQkM3Q2xCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsR0FBYSxDQUVmLEdBQWMsUUFDZCxHQUFhLFFBRWIsR0FBYyxRQUNkLEdBQVUsUUFFVixHQUFrQixRQUNsQixHQUFXLFFBRVgsR0FBYSxRQUNiLEdBQWMsUUFFZCxDQUFFLFFBQVMsT0FBUSxXQUFZLENBQUMsU0FBVSxPQUFPLENBQUUsRUFDbkQsQ0FBRSxRQUFTLFdBQVksV0FBWSxTQUFVLEVBQzdDLEdBQVEsUUFDUixHQUFPLE9BQ1gsRUFDQSxHQUFRLFFBQVUsMkJDOUJsQixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsR0FBUSx3QkFBK0IsT0FDdkMsSUFBTSxRQUNBLFFBQ0EsR0FBUSxDQUNWLFFBQVMsRUFBRyxRQUFVLFVBQWEsQUFBYSxpQ0FBZ0MsVUFDaEYsT0FBUSxFQUFHLFFBQVUsVUFBYSxBQUFhLGVBQWMsSUFDakUsRUFDTSxHQUFNLENBQ1IsUUFBUyxrQkFDVCxLQUFNLFFBQ04sV0FBWSxDQUFDLFVBQVcsUUFBUSxFQUNoQyxPQUFRLGNBQ1IsU0FDQSxJQUFJLENBQUMsRUFBSyxDQUNOLElBQVEsZUFBYyxNQUFPLEdBQ3JCLFNBQVUsRUFDbEIsR0FBSSxDQUFDLE1BQU0sUUFBUSxDQUFLLEVBQUcsQ0FDWixtQkFBaUIsRUFBSSxzRUFBc0UsRUFDdEcsT0FFSixHQUF3QixFQUFLLENBQUssRUFFMUMsRUFDQSxTQUFTLEVBQXVCLENBQUMsRUFBSyxFQUFPLENBQ3pDLElBQVEsTUFBSyxTQUFRLE9BQU0sVUFBUyxNQUFPLEVBQzNDLEVBQUcsTUFBUSxHQUNYLElBQU0sRUFBTSxFQUFJLE1BQU0sTUFBUSxBQUFhLE9BQU0sVUFBYSxFQUM5RCxHQUFJLElBQVcsR0FDWCxFQUFJLFVBQVUsQ0FBRSxJQUFLLEVBQU0sTUFBTyxDQUFDLEVBQ25DLEVBQUksS0FBTSxBQUFhLE9BQU0sUUFBVSxFQUFNLFFBQVEsRUFFcEQsUUFBSSxPQUFPLEdBQVUsVUFBWSxDQUFZLHFCQUFtQixFQUFJLENBQU0sRUFBRyxDQUM5RSxJQUFNLEVBQVEsRUFBSSxJQUFJLFFBQVUsQUFBYSxPQUFNLFFBQVUsRUFBTSxRQUFRLEVBQzNFLEVBQUksR0FBaUIsT0FBSyxDQUFLLEVBQUcsSUFBTSxFQUFjLENBQUssQ0FBQyxFQUM1RCxFQUFJLEdBQUcsQ0FBSyxFQUVoQixTQUFTLENBQWEsQ0FBQyxFQUFPLENBQzFCLEVBQUksU0FBUyxJQUFLLEVBQU0sT0FBUSxFQUFLLENBQUMsSUFBTSxDQUV4QyxHQURBLEVBQUksVUFBVSxDQUFFLFVBQVMsU0FBVSxFQUFHLGFBQXFCLFFBQUssR0FBSSxFQUFHLENBQUssRUFDeEUsQ0FBQyxFQUFHLFVBQ0osRUFBSSxHQUFpQixPQUFLLENBQUssRUFBRyxJQUFNLEVBQUksTUFBTSxDQUFDLEVBQzFELEdBR1QsR0FBUSx3QkFBMEIsR0FDbEMsR0FBUSxRQUFVLDJCQzlDbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsY0FBcUIsT0FDN0IsSUFBTSxRQUNBLFFBQ0EsUUFDQSxHQUFNLENBQ1IsUUFBUyxRQUNULEtBQU0sUUFDTixXQUFZLENBQUMsU0FBVSxRQUFTLFNBQVMsRUFDekMsT0FBUSxjQUNSLElBQUksQ0FBQyxFQUFLLENBQ04sSUFBUSxTQUFRLE1BQU8sRUFDdkIsR0FBSSxNQUFNLFFBQVEsQ0FBTSxFQUNwQixPQUFPLEdBQWMsRUFBSyxrQkFBbUIsQ0FBTSxFQUV2RCxHQURBLEVBQUcsTUFBUSxHQUNJLHFCQUFtQixFQUFJLENBQU0sRUFDeEMsT0FDSixFQUFJLEdBQWMsaUJBQWUsQ0FBRyxDQUFDLEVBRTdDLEVBQ0EsU0FBUyxFQUFhLENBQUMsRUFBSyxFQUFZLEVBQVMsRUFBSSxPQUFRLENBQ3pELElBQVEsTUFBSyxlQUFjLE9BQU0sVUFBUyxNQUFPLEVBRWpELEdBREEsRUFBaUIsQ0FBWSxFQUN6QixFQUFHLEtBQUssYUFBZSxFQUFPLFFBQVUsRUFBRyxRQUFVLEdBQ3JELEVBQUcsTUFBZSxrQkFBZSxNQUFNLEVBQUssRUFBTyxPQUFRLEVBQUcsS0FBSyxFQUV2RSxJQUFNLEVBQVEsRUFBSSxLQUFLLE9BQU8sRUFDeEIsRUFBTSxFQUFJLE1BQU0sTUFBUSxBQUFhLE9BQU0sVUFBYSxFQUM5RCxFQUFPLFFBQVEsQ0FBQyxFQUFLLElBQU0sQ0FDdkIsR0FBZSxxQkFBbUIsRUFBSSxDQUFHLEVBQ3JDLE9BQ0osRUFBSSxHQUFJLEFBQWEsT0FBTSxPQUFTLElBQUssSUFBTSxFQUFJLFVBQVUsQ0FDekQsVUFDQSxXQUFZLEVBQ1osU0FBVSxDQUNkLEVBQUcsQ0FBSyxDQUFDLEVBQ1QsRUFBSSxHQUFHLENBQUssRUFDZixFQUNELFNBQVMsQ0FBZ0IsQ0FBQyxFQUFLLENBQzNCLElBQVEsT0FBTSxpQkFBa0IsRUFDMUIsRUFBSSxFQUFPLE9BQ1gsRUFBWSxJQUFNLEVBQUksV0FBYSxJQUFNLEVBQUksVUFBWSxFQUFJLEtBQWdCLElBQ25GLEdBQUksRUFBSyxjQUFnQixDQUFDLEVBQVcsQ0FDakMsSUFBTSxFQUFNLElBQUksU0FBZSxxQ0FBcUMsNkNBQXNELEtBQy9HLG1CQUFpQixFQUFJLEVBQUssRUFBSyxZQUFZLElBSWxFLEdBQVEsY0FBZ0IsR0FDeEIsR0FBUSxRQUFVLDJCQ2pEbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sUUFDQSxHQUFNLENBQ1IsUUFBUyxjQUNULEtBQU0sUUFDTixXQUFZLENBQUMsT0FBTyxFQUNwQixPQUFRLGNBQ1IsS0FBTSxDQUFDLElBQW9CLGlCQUFlLEVBQUssT0FBTyxDQUMxRCxFQUNBLEdBQVEsUUFBVSwyQkNUbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sUUFDQSxRQUNBLFFBQ0EsUUFDQSxHQUFRLENBQ1YsUUFBUyxFQUFHLFFBQVUsVUFBYSxBQUFhLGlDQUFnQyxVQUNoRixPQUFRLEVBQUcsUUFBVSxVQUFhLEFBQWEsZUFBYyxJQUNqRSxFQUNNLEdBQU0sQ0FDUixRQUFTLFFBQ1QsS0FBTSxRQUNOLFdBQVksQ0FBQyxTQUFVLFNBQVMsRUFDaEMsT0FBUSxjQUNSLFNBQ0EsSUFBSSxDQUFDLEVBQUssQ0FDTixJQUFRLFNBQVEsZUFBYyxNQUFPLEdBQzdCLGVBQWdCLEVBRXhCLEdBREEsRUFBRyxNQUFRLEdBQ0kscUJBQW1CLEVBQUksQ0FBTSxFQUN4QyxPQUNKLEdBQUksRUFDc0IsMkJBQXlCLEVBQUssQ0FBVyxFQUUvRCxPQUFJLEdBQWMsaUJBQWUsQ0FBRyxDQUFDLEVBRWpELEVBQ0EsR0FBUSxRQUFVLDJCQzNCbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sUUFDQSxRQUNBLEdBQVEsQ0FDVixRQUFTLEVBQUcsUUFBVSxNQUFLLFVBQVksSUFBUSxPQUN4QyxBQUFhLCtCQUE4QixrQkFDM0MsQUFBYSwrQkFBOEIsc0JBQXdCLGtCQUMxRSxPQUFRLEVBQUcsUUFBVSxNQUFLLFVBQVksSUFBUSxPQUFhLEFBQWEscUJBQW9CLEtBQVUsQUFBYSxxQkFBb0IsbUJBQXFCLElBQ2hLLEVBQ00sR0FBTSxDQUNSLFFBQVMsV0FDVCxLQUFNLFFBQ04sV0FBWSxDQUFDLFNBQVUsU0FBUyxFQUNoQyxPQUFRLGNBQ1IsWUFBYSxHQUNiLFNBQ0EsSUFBSSxDQUFDLEVBQUssQ0FDTixJQUFRLE1BQUssU0FBUSxlQUFjLE9BQU0sTUFBTyxFQUM1QyxFQUNBLEdBQ0ksY0FBYSxlQUFnQixFQUNyQyxHQUFJLEVBQUcsS0FBSyxLQUNSLEVBQU0sSUFBZ0IsT0FBWSxFQUFJLEVBQ3RDLEVBQU0sRUFHTixPQUFNLEVBRVYsSUFBTSxFQUFNLEVBQUksTUFBTSxNQUFRLEFBQWEsT0FBTSxVQUFhLEVBRTlELEdBREEsRUFBSSxVQUFVLENBQUUsTUFBSyxLQUFJLENBQUMsRUFDdEIsSUFBUSxRQUFhLElBQVEsRUFBRyxDQUNyQixtQkFBaUIsRUFBSSxzRUFBc0UsRUFDdEcsT0FFSixHQUFJLElBQVEsUUFBYSxFQUFNLEVBQUssQ0FDckIsbUJBQWlCLEVBQUksaURBQWlELEVBQ2pGLEVBQUksS0FBSyxFQUNULE9BRUosR0FBZSxxQkFBbUIsRUFBSSxDQUFNLEVBQUcsQ0FDM0MsSUFBSSxFQUFRLEFBQWEsT0FBTSxRQUFVLElBQ3pDLEdBQUksSUFBUSxPQUNSLEVBQVEsQUFBYSxPQUFNLFFBQVcsUUFBVSxJQUNwRCxFQUFJLEtBQUssQ0FBSSxFQUNiLE9BRUosRUFBRyxNQUFRLEdBQ1gsSUFBTSxFQUFRLEVBQUksS0FBSyxPQUFPLEVBQzlCLEdBQUksSUFBUSxRQUFhLElBQVEsRUFDN0IsRUFBYyxFQUFPLElBQU0sRUFBSSxHQUFHLEVBQU8sSUFBTSxFQUFJLE1BQU0sQ0FBQyxDQUFDLEVBRTFELFFBQUksSUFBUSxHQUViLEdBREEsRUFBSSxJQUFJLEVBQU8sRUFBSSxFQUNmLElBQVEsT0FDUixFQUFJLEdBQUksQUFBYSxPQUFNLGVBQW1CLENBQXNCLEVBR3hFLE9BQUksSUFBSSxFQUFPLEVBQUssRUFDcEIsRUFBdUIsRUFFM0IsRUFBSSxPQUFPLEVBQU8sSUFBTSxFQUFJLE1BQU0sQ0FBQyxFQUNuQyxTQUFTLENBQXNCLEVBQUcsQ0FDOUIsSUFBTSxFQUFXLEVBQUksS0FBSyxRQUFRLEVBQzVCLEVBQVEsRUFBSSxJQUFJLFFBQVMsQ0FBQyxFQUNoQyxFQUFjLEVBQVUsSUFBTSxFQUFJLEdBQUcsRUFBVSxJQUFNLEVBQVksQ0FBSyxDQUFDLENBQUMsRUFFNUUsU0FBUyxDQUFhLENBQUMsRUFBUSxFQUFPLENBQ2xDLEVBQUksU0FBUyxJQUFLLEVBQUcsRUFBSyxDQUFDLElBQU0sQ0FDN0IsRUFBSSxVQUFVLENBQ1YsUUFBUyxXQUNULFNBQVUsRUFDVixhQUFxQixRQUFLLElBQzFCLGNBQWUsRUFDbkIsRUFBRyxDQUFNLEVBQ1QsRUFBTSxFQUNULEVBRUwsU0FBUyxDQUFXLENBQUMsRUFBTyxDQUV4QixHQURBLEVBQUksS0FBTSxBQUFhLE9BQU0sS0FBUyxFQUNsQyxJQUFRLE9BQ1IsRUFBSSxHQUFJLEFBQWEsT0FBTSxRQUFZLElBQU8sSUFBTSxFQUFJLE9BQU8sRUFBTyxFQUFJLEVBQUUsTUFBTSxDQUFDLEVBSW5GLFFBREEsRUFBSSxHQUFJLEFBQWEsT0FBTSxPQUFXLElBQU8sSUFBTSxFQUFJLE9BQU8sRUFBTyxFQUFLLEVBQUUsTUFBTSxDQUFDLEVBQy9FLElBQVEsRUFDUixFQUFJLE9BQU8sRUFBTyxFQUFJLEVBRXRCLE9BQUksR0FBSSxBQUFhLE9BQU0sUUFBWSxJQUFPLElBQU0sRUFBSSxPQUFPLEVBQU8sRUFBSSxDQUFDLEdBSS9GLEVBQ0EsR0FBUSxRQUFVLDJCQzVGbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsbUJBQXFCLEdBQVEscUJBQXVCLEdBQVEsTUFBYSxPQUNqRixJQUFNLFFBQ0EsUUFDQSxRQUNOLEdBQVEsTUFBUSxDQUNaLFFBQVMsRUFBRyxRQUFVLFdBQVUsWUFBVyxXQUUvQixBQUFhLG1CQURBLElBQWMsRUFBSSxXQUFhLGdCQUNHLG1CQUFzQixlQUVqRixPQUFRLEVBQUcsUUFBVSxXQUFVLFlBQVcsT0FBTSxzQkFBeUIsQUFBYSxrQkFBaUI7QUFBQSx1QkFDcEY7QUFBQSxpQkFDTjtBQUFBLFlBQ0wsSUFDWixFQUNBLElBQU0sR0FBTSxDQUNSLFFBQVMsZUFDVCxLQUFNLFNBQ04sV0FBWSxTQUNaLE1BQU8sR0FBUSxNQUNmLElBQUksQ0FBQyxFQUFLLENBQ04sSUFBTyxFQUFVLEdBQVcsR0FBa0IsQ0FBRyxFQUNqRCxHQUFxQixFQUFLLENBQVEsRUFDbEMsR0FBbUIsRUFBSyxDQUFPLEVBRXZDLEVBQ0EsU0FBUyxFQUFpQixFQUFHLFVBQVUsQ0FDbkMsSUFBTSxFQUFlLENBQUMsRUFDaEIsRUFBYSxDQUFDLEVBQ3BCLFFBQVcsS0FBTyxFQUFRLENBQ3RCLEdBQUksSUFBUSxZQUNSLFNBQ0osSUFBTSxFQUFPLE1BQU0sUUFBUSxFQUFPLEVBQUksRUFBSSxFQUFlLEVBQ3pELEVBQUssR0FBTyxFQUFPLEdBRXZCLE1BQU8sQ0FBQyxFQUFjLENBQVUsRUFFcEMsU0FBUyxFQUFvQixDQUFDLEVBQUssRUFBZSxFQUFJLE9BQVEsQ0FDMUQsSUFBUSxNQUFLLE9BQU0sTUFBTyxFQUMxQixHQUFJLE9BQU8sS0FBSyxDQUFZLEVBQUUsU0FBVyxFQUNyQyxPQUNKLElBQU0sRUFBVSxFQUFJLElBQUksU0FBUyxFQUNqQyxRQUFXLEtBQVEsRUFBYyxDQUM3QixJQUFNLEVBQU8sRUFBYSxHQUMxQixHQUFJLEVBQUssU0FBVyxFQUNoQixTQUNKLElBQU0sRUFBeUIsa0JBQWdCLEVBQUssRUFBTSxFQUFNLEVBQUcsS0FBSyxhQUFhLEVBTXJGLEdBTEEsRUFBSSxVQUFVLENBQ1YsU0FBVSxFQUNWLFVBQVcsRUFBSyxPQUNoQixLQUFNLEVBQUssS0FBSyxJQUFJLENBQ3hCLENBQUMsRUFDRyxFQUFHLFVBQ0gsRUFBSSxHQUFHLEVBQWEsSUFBTSxDQUN0QixRQUFXLEtBQVcsRUFDUCwwQkFBd0IsRUFBSyxDQUFPLEVBRXRELEVBR0QsT0FBSSxHQUFJLEFBQWEsT0FBTSxTQUE4QixvQkFBa0IsRUFBSyxFQUFNLENBQU8sSUFBSSxFQUN0RixxQkFBbUIsRUFBSyxDQUFPLEVBQzFDLEVBQUksS0FBSyxHQUlyQixHQUFRLHFCQUF1QixHQUMvQixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFhLEVBQUksT0FBUSxDQUN0RCxJQUFRLE1BQUssT0FBTSxVQUFTLE1BQU8sRUFDN0IsRUFBUSxFQUFJLEtBQUssT0FBTyxFQUM5QixRQUFXLEtBQVEsRUFBWSxDQUMzQixHQUFlLHFCQUFtQixFQUFJLEVBQVcsRUFBSyxFQUNsRCxTQUNKLEVBQUksR0FBYyxrQkFBZ0IsRUFBSyxFQUFNLEVBQU0sRUFBRyxLQUFLLGFBQWEsRUFBRyxJQUFNLENBQzdFLElBQU0sRUFBUyxFQUFJLFVBQVUsQ0FBRSxVQUFTLFdBQVksQ0FBSyxFQUFHLENBQUssRUFDakUsRUFBSSxvQkFBb0IsRUFBUSxDQUFLLEdBQ3RDLElBQU0sRUFBSSxJQUFJLEVBQU8sRUFBSSxDQUM1QixFQUNBLEVBQUksR0FBRyxDQUFLLEdBR3BCLEdBQVEsbUJBQXFCLEdBQzdCLEdBQVEsUUFBVSwyQkNsRmxCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLFFBQ0EsUUFDQSxHQUFRLENBQ1YsUUFBUyw4QkFDVCxPQUFRLEVBQUcsWUFBYyxBQUFhLHNCQUFxQixFQUFPLGVBQ3RFLEVBQ00sR0FBTSxDQUNSLFFBQVMsZ0JBQ1QsS0FBTSxTQUNOLFdBQVksQ0FBQyxTQUFVLFNBQVMsRUFDaEMsU0FDQSxJQUFJLENBQUMsRUFBSyxDQUNOLElBQVEsTUFBSyxTQUFRLE9BQU0sTUFBTyxFQUNsQyxHQUFlLHFCQUFtQixFQUFJLENBQU0sRUFDeEMsT0FDSixJQUFNLEVBQVEsRUFBSSxLQUFLLE9BQU8sRUFDOUIsRUFBSSxNQUFNLE1BQU8sRUFBTSxDQUFDLElBQVEsQ0FDNUIsRUFBSSxVQUFVLENBQUUsYUFBYyxDQUFJLENBQUMsRUFDbkMsRUFBSSxVQUFVLENBQ1YsUUFBUyxnQkFDVCxLQUFNLEVBQ04sVUFBVyxDQUFDLFFBQVEsRUFDcEIsYUFBYyxFQUNkLGNBQWUsRUFDbkIsRUFBRyxDQUFLLEVBQ1IsRUFBSSxHQUFpQixPQUFLLENBQUssRUFBRyxJQUFNLENBRXBDLEdBREEsRUFBSSxNQUFNLEVBQUksRUFDVixDQUFDLEVBQUcsVUFDSixFQUFJLE1BQU0sRUFDakIsRUFDSixFQUNELEVBQUksR0FBRyxDQUFLLEVBRXBCLEVBQ0EsR0FBUSxRQUFVLDJCQ25DbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sUUFDQSxRQUNBLFFBQ0EsUUFDQSxHQUFRLENBQ1YsUUFBUyxzQ0FDVCxPQUFRLEVBQUcsWUFBYyxBQUFhLDRCQUEyQixFQUFPLHFCQUM1RSxFQUNNLEdBQU0sQ0FDUixRQUFTLHVCQUNULEtBQU0sQ0FBQyxRQUFRLEVBQ2YsV0FBWSxDQUFDLFVBQVcsUUFBUSxFQUNoQyxlQUFnQixHQUNoQixZQUFhLEdBQ2IsU0FDQSxJQUFJLENBQUMsRUFBSyxDQUNOLElBQVEsTUFBSyxTQUFRLGVBQWMsT0FBTSxZQUFXLE1BQU8sRUFFM0QsR0FBSSxDQUFDLEVBQ0QsTUFBVSxNQUFNLDBCQUEwQixFQUM5QyxJQUFRLFlBQVcsUUFBUyxFQUU1QixHQURBLEVBQUcsTUFBUSxHQUNQLEVBQUssbUJBQXFCLE9BQW9CLHFCQUFtQixFQUFJLENBQU0sRUFDM0UsT0FDSixJQUFNLEVBQW1CLHVCQUFxQixFQUFhLFVBQVUsRUFDL0QsRUFBc0IsdUJBQXFCLEVBQWEsaUJBQWlCLEVBQy9FLEVBQTBCLEVBQzFCLEVBQUksR0FBSSxBQUFhLE9BQU0sU0FBaUIsR0FBUSxRQUFRLFFBQVEsRUFDcEUsU0FBUyxDQUF5QixFQUFHLENBQ2pDLEVBQUksTUFBTSxNQUFPLEVBQU0sQ0FBQyxJQUFRLENBQzVCLEdBQUksQ0FBQyxFQUFNLFFBQVUsQ0FBQyxFQUFTLE9BQzNCLEVBQXVCLENBQUcsRUFFMUIsT0FBSSxHQUFHLEVBQWEsQ0FBRyxFQUFHLElBQU0sRUFBdUIsQ0FBRyxDQUFDLEVBQ2xFLEVBRUwsU0FBUyxDQUFZLENBQUMsRUFBSyxDQUN2QixJQUFJLEVBQ0osR0FBSSxFQUFNLE9BQVMsRUFBRyxDQUVsQixJQUFNLEVBQXlCLGtCQUFnQixFQUFJLEVBQWEsV0FBWSxZQUFZLEVBQ3hGLEVBQXlCLGlCQUFlLEVBQUssRUFBYSxDQUFHLEVBRTVELFFBQUksRUFBTSxPQUNYLEVBQTRCLE1BQUksR0FBRyxFQUFNLElBQUksQ0FBQyxJQUFPLEFBQWEsT0FBTSxTQUFXLEdBQUcsQ0FBQyxFQUd2RixPQUF3QixPQUU1QixHQUFJLEVBQVMsT0FDVCxFQUE0QixNQUFJLEVBQWEsR0FBRyxFQUFTLElBQUksQ0FBQyxJQUFPLEFBQWEsT0FBaUIsY0FBWSxFQUFLLENBQUMsVUFBVSxJQUFNLENBQUMsRUFFMUksT0FBcUIsT0FBSyxDQUFXLEVBRXpDLFNBQVMsQ0FBZ0IsQ0FBQyxFQUFLLENBQzNCLEVBQUksS0FBTSxBQUFhLGNBQWEsS0FBUSxJQUFNLEVBRXRELFNBQVMsQ0FBc0IsQ0FBQyxFQUFLLENBQ2pDLEdBQUksRUFBSyxtQkFBcUIsT0FBVSxFQUFLLGtCQUFvQixJQUFXLEdBQVEsQ0FDaEYsRUFBaUIsQ0FBRyxFQUNwQixPQUVKLEdBQUksSUFBVyxHQUFPLENBR2xCLEdBRkEsRUFBSSxVQUFVLENBQUUsbUJBQW9CLENBQUksQ0FBQyxFQUN6QyxFQUFJLE1BQU0sRUFDTixDQUFDLEVBQ0QsRUFBSSxNQUFNLEVBQ2QsT0FFSixHQUFJLE9BQU8sR0FBVSxVQUFZLENBQVkscUJBQW1CLEVBQUksQ0FBTSxFQUFHLENBQ3pFLElBQU0sRUFBUSxFQUFJLEtBQUssT0FBTyxFQUM5QixHQUFJLEVBQUssbUJBQXFCLFVBQzFCLEVBQXNCLEVBQUssRUFBTyxFQUFLLEVBQ3ZDLEVBQUksR0FBaUIsT0FBSyxDQUFLLEVBQUcsSUFBTSxDQUNwQyxFQUFJLE1BQU0sRUFDVixFQUFpQixDQUFHLEVBQ3ZCLEVBSUQsUUFEQSxFQUFzQixFQUFLLENBQUssRUFDNUIsQ0FBQyxFQUNELEVBQUksR0FBaUIsT0FBSyxDQUFLLEVBQUcsSUFBTSxFQUFJLE1BQU0sQ0FBQyxHQUluRSxTQUFTLENBQXFCLENBQUMsRUFBSyxFQUFPLEVBQVEsQ0FDL0MsSUFBTSxFQUFZLENBQ2QsUUFBUyx1QkFDVCxTQUFVLEVBQ1YsYUFBcUIsUUFBSyxHQUM5QixFQUNBLEdBQUksSUFBVyxHQUNYLE9BQU8sT0FBTyxFQUFXLENBQ3JCLGNBQWUsR0FDZixhQUFjLEdBQ2QsVUFBVyxFQUNmLENBQUMsRUFFTCxFQUFJLFVBQVUsRUFBVyxDQUFLLEdBRzFDLEVBQ0EsR0FBUSxRQUFVLDJCQ3ZHbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sUUFDQSxRQUNBLFFBQ0EsUUFDQSxHQUFNLENBQ1IsUUFBUyxhQUNULEtBQU0sU0FDTixXQUFZLFNBQ1osSUFBSSxDQUFDLEVBQUssQ0FDTixJQUFRLE1BQUssU0FBUSxlQUFjLE9BQU0sTUFBTyxFQUNoRCxHQUFJLEVBQUcsS0FBSyxtQkFBcUIsT0FBUyxFQUFhLHVCQUF5QixPQUM1RSxHQUF1QixRQUFRLEtBQUssSUFBZSxjQUFXLEVBQUksR0FBdUIsUUFBUyxzQkFBc0IsQ0FBQyxFQUU3SCxJQUFNLEVBQXNCLHVCQUFxQixDQUFNLEVBQ3ZELFFBQVcsS0FBUSxFQUNmLEVBQUcsa0JBQWtCLElBQUksQ0FBSSxFQUVqQyxHQUFJLEVBQUcsS0FBSyxhQUFlLEVBQVMsUUFBVSxFQUFHLFFBQVUsR0FDdkQsRUFBRyxNQUFlLGtCQUFlLE1BQU0sRUFBZ0IsVUFBUSxDQUFRLEVBQUcsRUFBRyxLQUFLLEVBRXRGLElBQU0sRUFBYSxFQUFTLE9BQU8sQ0FBQyxJQUFNLENBQVkscUJBQW1CLEVBQUksRUFBTyxFQUFFLENBQUMsRUFDdkYsR0FBSSxFQUFXLFNBQVcsRUFDdEIsT0FDSixJQUFNLEVBQVEsRUFBSSxLQUFLLE9BQU8sRUFDOUIsUUFBVyxLQUFRLEVBQVksQ0FDM0IsR0FBSSxFQUFXLENBQUksRUFDZixFQUFvQixDQUFJLEVBRXZCLEtBR0QsR0FGQSxFQUFJLEdBQWMsa0JBQWdCLEVBQUssRUFBTSxFQUFNLEVBQUcsS0FBSyxhQUFhLENBQUMsRUFDekUsRUFBb0IsQ0FBSSxFQUNwQixDQUFDLEVBQUcsVUFDSixFQUFJLEtBQUssRUFBRSxJQUFJLEVBQU8sRUFBSSxFQUM5QixFQUFJLE1BQU0sRUFFZCxFQUFJLEdBQUcsa0JBQWtCLElBQUksQ0FBSSxFQUNqQyxFQUFJLEdBQUcsQ0FBSyxFQUVoQixTQUFTLENBQVUsQ0FBQyxFQUFNLENBQ3RCLE9BQU8sRUFBRyxLQUFLLGFBQWUsQ0FBQyxFQUFHLGVBQWlCLEVBQU8sR0FBTSxVQUFZLE9BRWhGLFNBQVMsQ0FBbUIsQ0FBQyxFQUFNLENBQy9CLEVBQUksVUFBVSxDQUNWLFFBQVMsYUFDVCxXQUFZLEVBQ1osU0FBVSxDQUNkLEVBQUcsQ0FBSyxHQUdwQixFQUNBLEdBQVEsUUFBVSwyQkNuRGxCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsR0FBTSxDQUNSLFFBQVMsb0JBQ1QsS0FBTSxTQUNOLFdBQVksU0FDWixJQUFJLENBQUMsRUFBSyxDQUNOLElBQVEsTUFBSyxTQUFRLE9BQU0sZUFBYyxNQUFPLEdBQ3hDLFFBQVMsRUFDWCxFQUFzQix1QkFBcUIsQ0FBTSxFQUNqRCxFQUFzQixFQUFTLE9BQU8sQ0FBQyxJQUFpQixxQkFBbUIsRUFBSSxFQUFPLEVBQUUsQ0FBQyxFQUMvRixHQUFJLEVBQVMsU0FBVyxHQUNuQixFQUFvQixTQUFXLEVBQVMsU0FDcEMsQ0FBQyxFQUFHLEtBQUssYUFBZSxFQUFHLFFBQVUsSUFDMUMsT0FFSixJQUFNLEVBQWtCLEVBQUssY0FBZ0IsQ0FBQyxFQUFLLHlCQUEyQixFQUFhLFdBQ3JGLEVBQVEsRUFBSSxLQUFLLE9BQU8sRUFDOUIsR0FBSSxFQUFHLFFBQVUsSUFBUSxFQUFFLEVBQUcsaUJBQTJCLFNBQ3JELEVBQUcsTUFBbUIsd0JBQXNCLEVBQUssRUFBRyxLQUFLLEVBRTdELElBQVEsU0FBVSxFQUNsQixFQUEwQixFQUMxQixTQUFTLENBQXlCLEVBQUcsQ0FDakMsUUFBVyxLQUFPLEVBQVUsQ0FDeEIsR0FBSSxFQUNBLEVBQXdCLENBQUcsRUFDL0IsR0FBSSxFQUFHLFVBQ0gsRUFBbUIsQ0FBRyxFQUd0QixPQUFJLElBQUksRUFBTyxFQUFJLEVBQ25CLEVBQW1CLENBQUcsRUFDdEIsRUFBSSxHQUFHLENBQUssR0FJeEIsU0FBUyxDQUF1QixDQUFDLEVBQUssQ0FDbEMsUUFBVyxLQUFRLEVBQ2YsR0FBSSxJQUFJLE9BQU8sQ0FBRyxFQUFFLEtBQUssQ0FBSSxFQUNkLG1CQUFpQixFQUFJLFlBQVkscUJBQXdCLGlDQUFtQyxFQUluSCxTQUFTLENBQWtCLENBQUMsRUFBSyxDQUM3QixFQUFJLE1BQU0sTUFBTyxFQUFNLENBQUMsSUFBUSxDQUM1QixFQUFJLEdBQUksQUFBYSxPQUFpQixjQUFZLEVBQUssQ0FBRyxVQUFVLEtBQVEsSUFBTSxDQUM5RSxJQUFNLEVBQWMsRUFBb0IsU0FBUyxDQUFHLEVBQ3BELEdBQUksQ0FBQyxFQUNELEVBQUksVUFBVSxDQUNWLFFBQVMsb0JBQ1QsV0FBWSxFQUNaLFNBQVUsRUFDVixhQUFxQixRQUFLLEdBQzlCLEVBQUcsQ0FBSyxFQUVaLEdBQUksRUFBRyxLQUFLLGFBQWUsSUFBVSxHQUNqQyxFQUFJLE9BQVEsQUFBYSxPQUFNLEtBQVMsS0FBUSxFQUFJLEVBRW5ELFFBQUksQ0FBQyxHQUFlLENBQUMsRUFBRyxVQUd6QixFQUFJLEdBQWlCLE9BQUssQ0FBSyxFQUFHLElBQU0sRUFBSSxNQUFNLENBQUMsRUFFMUQsRUFDSixHQUdiLEVBQ0EsR0FBUSxRQUFVLDJCQ3hFbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sUUFDQSxHQUFNLENBQ1IsUUFBUyxNQUNULFdBQVksQ0FBQyxTQUFVLFNBQVMsRUFDaEMsWUFBYSxHQUNiLElBQUksQ0FBQyxFQUFLLENBQ04sSUFBUSxNQUFLLFNBQVEsTUFBTyxFQUM1QixHQUFlLHFCQUFtQixFQUFJLENBQU0sRUFBRyxDQUMzQyxFQUFJLEtBQUssRUFDVCxPQUVKLElBQU0sRUFBUSxFQUFJLEtBQUssT0FBTyxFQUM5QixFQUFJLFVBQVUsQ0FDVixRQUFTLE1BQ1QsY0FBZSxHQUNmLGFBQWMsR0FDZCxVQUFXLEVBQ2YsRUFBRyxDQUFLLEVBQ1IsRUFBSSxXQUFXLEVBQU8sSUFBTSxFQUFJLE1BQU0sRUFBRyxJQUFNLEVBQUksTUFBTSxDQUFDLEdBRTlELE1BQU8sQ0FBRSxRQUFTLG1CQUFvQixDQUMxQyxFQUNBLEdBQVEsUUFBVSwyQkN2QmxCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLFFBQ0EsR0FBTSxDQUNSLFFBQVMsUUFDVCxXQUFZLFFBQ1osWUFBYSxHQUNiLEtBQWEsaUJBQ2IsTUFBTyxDQUFFLFFBQVMsOEJBQStCLENBQ3JELEVBQ0EsR0FBUSxRQUFVLDJCQ1RsQixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsSUFBTSxRQUNBLFFBQ0EsR0FBUSxDQUNWLFFBQVMseUNBQ1QsT0FBUSxFQUFHLFlBQWMsQUFBYSx3QkFBdUIsRUFBTyxVQUN4RSxFQUNNLEdBQU0sQ0FDUixRQUFTLFFBQ1QsV0FBWSxRQUNaLFlBQWEsR0FDYixTQUNBLElBQUksQ0FBQyxFQUFLLENBQ04sSUFBUSxNQUFLLFNBQVEsZUFBYyxNQUFPLEVBRTFDLEdBQUksQ0FBQyxNQUFNLFFBQVEsQ0FBTSxFQUNyQixNQUFVLE1BQU0sMEJBQTBCLEVBQzlDLEdBQUksRUFBRyxLQUFLLGVBQWlCLEVBQWEsY0FDdEMsT0FDSixJQUFNLEVBQVMsRUFDVCxFQUFRLEVBQUksSUFBSSxRQUFTLEVBQUssRUFDOUIsRUFBVSxFQUFJLElBQUksVUFBVyxJQUFJLEVBQ2pDLEVBQVcsRUFBSSxLQUFLLFFBQVEsRUFDbEMsRUFBSSxVQUFVLENBQUUsU0FBUSxDQUFDLEVBRXpCLEVBQUksTUFBTSxDQUFhLEVBQ3ZCLEVBQUksT0FBTyxFQUFPLElBQU0sRUFBSSxNQUFNLEVBQUcsSUFBTSxFQUFJLE1BQU0sRUFBSSxDQUFDLEVBQzFELFNBQVMsQ0FBYSxFQUFHLENBQ3JCLEVBQU8sUUFBUSxDQUFDLEVBQUssSUFBTSxDQUN2QixJQUFJLEVBQ0osR0FBZSxxQkFBbUIsRUFBSSxDQUFHLEVBQ3JDLEVBQUksSUFBSSxFQUFVLEVBQUksRUFHdEIsT0FBUyxFQUFJLFVBQVUsQ0FDbkIsUUFBUyxRQUNULFdBQVksRUFDWixjQUFlLEVBQ25CLEVBQUcsQ0FBUSxFQUVmLEdBQUksRUFBSSxFQUNKLEVBQ0ssR0FBSSxBQUFhLE9BQU0sUUFBZSxHQUFPLEVBQzdDLE9BQU8sRUFBTyxFQUFLLEVBQ25CLE9BQU8sRUFBVSxBQUFhLFFBQU8sTUFBWSxJQUFJLEVBQ3JELEtBQUssRUFFZCxFQUFJLEdBQUcsRUFBVSxJQUFNLENBR25CLEdBRkEsRUFBSSxPQUFPLEVBQU8sRUFBSSxFQUN0QixFQUFJLE9BQU8sRUFBUyxDQUFDLEVBQ2pCLEVBQ0EsRUFBSSxlQUFlLEVBQWtCLE9BQUksRUFDaEQsRUFDSixHQUdiLEVBQ0EsR0FBUSxRQUFVLDJCQ3pEbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sUUFDQSxHQUFNLENBQ1IsUUFBUyxRQUNULFdBQVksUUFDWixJQUFJLENBQUMsRUFBSyxDQUNOLElBQVEsTUFBSyxTQUFRLE1BQU8sRUFFNUIsR0FBSSxDQUFDLE1BQU0sUUFBUSxDQUFNLEVBQ3JCLE1BQVUsTUFBTSwwQkFBMEIsRUFDOUMsSUFBTSxFQUFRLEVBQUksS0FBSyxPQUFPLEVBQzlCLEVBQU8sUUFBUSxDQUFDLEVBQUssSUFBTSxDQUN2QixHQUFlLHFCQUFtQixFQUFJLENBQUcsRUFDckMsT0FDSixJQUFNLEVBQVMsRUFBSSxVQUFVLENBQUUsUUFBUyxRQUFTLFdBQVksQ0FBRSxFQUFHLENBQUssRUFDdkUsRUFBSSxHQUFHLENBQUssRUFDWixFQUFJLGVBQWUsQ0FBTSxFQUM1QixFQUVULEVBQ0EsR0FBUSxRQUFVLDJCQ3BCbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sUUFDQSxRQUNBLEdBQVEsQ0FDVixRQUFTLEVBQUcsWUFBYyxBQUFhLHFCQUFvQixFQUFPLG1CQUNsRSxPQUFRLEVBQUcsWUFBYyxBQUFhLHdCQUF1QixFQUFPLFdBQ3hFLEVBQ00sR0FBTSxDQUNSLFFBQVMsS0FDVCxXQUFZLENBQUMsU0FBVSxTQUFTLEVBQ2hDLFlBQWEsR0FDYixTQUNBLElBQUksQ0FBQyxFQUFLLENBQ04sSUFBUSxNQUFLLGVBQWMsTUFBTyxFQUNsQyxHQUFJLEVBQWEsT0FBUyxRQUFhLEVBQWEsT0FBUyxPQUM5QyxtQkFBaUIsRUFBSSwyQ0FBMkMsRUFFL0UsSUFBTSxFQUFVLEdBQVUsRUFBSSxNQUFNLEVBQzlCLEVBQVUsR0FBVSxFQUFJLE1BQU0sRUFDcEMsR0FBSSxDQUFDLEdBQVcsQ0FBQyxFQUNiLE9BQ0osSUFBTSxFQUFRLEVBQUksSUFBSSxRQUFTLEVBQUksRUFDN0IsRUFBVyxFQUFJLEtBQUssUUFBUSxFQUdsQyxHQUZBLEVBQVcsRUFDWCxFQUFJLE1BQU0sRUFDTixHQUFXLEVBQVMsQ0FDcEIsSUFBTSxFQUFXLEVBQUksSUFBSSxVQUFVLEVBQ25DLEVBQUksVUFBVSxDQUFFLFVBQVMsQ0FBQyxFQUMxQixFQUFJLEdBQUcsRUFBVSxFQUFlLE9BQVEsQ0FBUSxFQUFHLEVBQWUsT0FBUSxDQUFRLENBQUMsRUFFbEYsUUFBSSxFQUNMLEVBQUksR0FBRyxFQUFVLEVBQWUsTUFBTSxDQUFDLEVBR3ZDLE9BQUksR0FBaUIsT0FBSyxDQUFRLEVBQUcsRUFBZSxNQUFNLENBQUMsRUFFL0QsRUFBSSxLQUFLLEVBQU8sSUFBTSxFQUFJLE1BQU0sRUFBSSxDQUFDLEVBQ3JDLFNBQVMsQ0FBVSxFQUFHLENBQ2xCLElBQU0sRUFBUyxFQUFJLFVBQVUsQ0FDekIsUUFBUyxLQUNULGNBQWUsR0FDZixhQUFjLEdBQ2QsVUFBVyxFQUNmLEVBQUcsQ0FBUSxFQUNYLEVBQUksZUFBZSxDQUFNLEVBRTdCLFNBQVMsQ0FBYyxDQUFDLEVBQVMsRUFBVSxDQUN2QyxNQUFPLElBQU0sQ0FDVCxJQUFNLEVBQVMsRUFBSSxVQUFVLENBQUUsU0FBUSxFQUFHLENBQVEsRUFHbEQsR0FGQSxFQUFJLE9BQU8sRUFBTyxDQUFRLEVBQzFCLEVBQUksb0JBQW9CLEVBQVEsQ0FBSyxFQUNqQyxFQUNBLEVBQUksT0FBTyxFQUFXLEFBQWEsT0FBTSxHQUFTLEVBRWxELE9BQUksVUFBVSxDQUFFLFNBQVUsQ0FBUSxDQUFDLElBSXZELEVBQ0EsU0FBUyxFQUFTLENBQUMsRUFBSSxFQUFTLENBQzVCLElBQU0sRUFBUyxFQUFHLE9BQU8sR0FDekIsT0FBTyxJQUFXLFFBQWEsQ0FBWSxxQkFBbUIsRUFBSSxDQUFNLEVBRTVFLEdBQVEsUUFBVSwyQkMvRGxCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLFFBQ0EsR0FBTSxDQUNSLFFBQVMsQ0FBQyxPQUFRLE1BQU0sRUFDeEIsV0FBWSxDQUFDLFNBQVUsU0FBUyxFQUNoQyxJQUFJLEVBQUcsVUFBUyxlQUFjLE1BQU0sQ0FDaEMsR0FBSSxFQUFhLEtBQU8sT0FDVCxtQkFBaUIsRUFBSSxJQUFJLDRCQUFrQyxFQUVsRixFQUNBLEdBQVEsUUFBVSwyQkNWbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDTixTQUFTLEVBQWEsQ0FBQyxFQUFZLEdBQU8sQ0FDdEMsSUFBTSxFQUFhLENBRWYsR0FBTSxRQUNOLEdBQVEsUUFDUixHQUFRLFFBQ1IsR0FBUSxRQUNSLEdBQUssUUFDTCxHQUFXLFFBRVgsR0FBZ0IsUUFDaEIsR0FBdUIsUUFDdkIsR0FBZSxRQUNmLEdBQWEsUUFDYixHQUFvQixPQUN4QixFQUVBLEdBQUksRUFDQSxFQUFXLEtBQUssR0FBYyxRQUFTLEdBQVksT0FBTyxFQUUxRCxPQUFXLEtBQUssR0FBa0IsUUFBUyxHQUFRLE9BQU8sRUFFOUQsT0FEQSxFQUFXLEtBQUssR0FBVyxPQUFPLEVBQzNCLEVBRVgsR0FBUSxRQUFVLDJCQ3pDbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sT0FDQSxHQUFRLENBQ1YsUUFBUyxFQUFHLGdCQUFrQixBQUFhLDJCQUEyQixLQUN0RSxPQUFRLEVBQUcsZ0JBQWtCLEFBQWEsZUFBZSxJQUM3RCxFQUNNLEdBQU0sQ0FDUixRQUFTLFNBQ1QsS0FBTSxDQUFDLFNBQVUsUUFBUSxFQUN6QixXQUFZLFNBQ1osTUFBTyxHQUNQLFNBQ0EsSUFBSSxDQUFDLEVBQUssRUFBVSxDQUNoQixJQUFRLE1BQUssT0FBTSxRQUFPLFNBQVEsYUFBWSxNQUFPLEdBQzdDLE9BQU0sZ0JBQWUsWUFBVyxRQUFTLEVBQ2pELEdBQUksQ0FBQyxFQUFLLGdCQUNOLE9BQ0osR0FBSSxFQUNBLEVBQW9CLEVBRXBCLE9BQWUsRUFDbkIsU0FBUyxDQUFtQixFQUFHLENBQzNCLElBQU0sRUFBTyxFQUFJLFdBQVcsVUFBVyxDQUNuQyxJQUFLLEVBQUssUUFDVixLQUFNLEVBQUssS0FBSyxPQUNwQixDQUFDLEVBQ0ssRUFBTyxFQUFJLE1BQU0sT0FBUyxBQUFhLE1BQU0sS0FBUSxJQUFhLEVBQ2xFLEVBQVEsRUFBSSxJQUFJLE9BQU8sRUFDdkIsRUFBUyxFQUFJLElBQUksUUFBUSxFQUUvQixFQUFJLEdBQUksQUFBYSxhQUFhLHNCQUF5Qix1QkFBMkIsSUFBTSxFQUFJLE9BQU8sRUFBUSxBQUFhLE1BQU0sb0JBQXVCLEVBQUUsT0FBTyxFQUFTLEFBQWEsTUFBTSxZQUFlLEVBQUcsSUFBTSxFQUFJLE9BQU8sRUFBUSxBQUFhLGFBQWEsRUFBRSxPQUFPLEVBQVEsQ0FBSSxDQUFDLEVBQ3pSLEVBQUksVUFBd0IsS0FBSSxFQUFXLEVBQUcsRUFBVyxDQUFDLENBQUMsRUFDM0QsU0FBUyxDQUFVLEVBQUcsQ0FDbEIsR0FBSSxFQUFLLGVBQWlCLEdBQ3RCLE9BQWlCLE1BQ3JCLE1BQVEsQ0FBYSxNQUFNLFNBQWtCLElBRWpELFNBQVMsQ0FBVSxFQUFHLENBQ2xCLElBQU0sRUFBYSxFQUFVLE9BQ3RCLEFBQWEsT0FBTyxtQkFBc0IsS0FBVSxRQUFXLEtBQVUsTUFDekUsQUFBYSxNQUFNLEtBQVUsS0FDOUIsRUFBYSxBQUFhLGNBQWMscUJBQTBCLE9BQWdCLFVBQWUsTUFDdkcsTUFBUSxDQUFhLE1BQU0sUUFBYSxpQkFBc0IsU0FBYSxTQUFnQixLQUduRyxTQUFTLENBQWMsRUFBRyxDQUN0QixJQUFNLEVBQVksRUFBSyxRQUFRLEdBQy9CLEdBQUksQ0FBQyxFQUFXLENBQ1osRUFBYyxFQUNkLE9BRUosR0FBSSxJQUFjLEdBQ2QsT0FDSixJQUFPLEVBQVMsRUFBUSxHQUFVLEVBQVUsQ0FBUyxFQUNyRCxHQUFJLElBQVksRUFDWixFQUFJLEtBQUssRUFBZSxDQUFDLEVBQzdCLFNBQVMsQ0FBYSxFQUFHLENBQ3JCLEdBQUksRUFBSyxlQUFpQixHQUFPLENBQzdCLEVBQUssT0FBTyxLQUFLLEVBQVcsQ0FBQyxFQUM3QixPQUVKLE1BQVUsTUFBTSxFQUFXLENBQUMsRUFDNUIsU0FBUyxDQUFVLEVBQUcsQ0FDbEIsTUFBTyxtQkFBbUIsaUNBQXNDLE1BR3hFLFNBQVMsQ0FBUyxDQUFDLEVBQVEsQ0FDdkIsSUFBTSxFQUFPLGFBQWtCLE9BQ1gsYUFBWSxDQUFNLEVBQ2hDLEVBQUssS0FBSyxRQUNMLEFBQWEsTUFBTSxFQUFLLEtBQUssVUFBd0IsY0FBYSxDQUFNLElBQ3pFLE9BQ0osRUFBTSxFQUFJLFdBQVcsVUFBVyxDQUFFLElBQUssRUFBUSxJQUFLLEVBQVEsTUFBSyxDQUFDLEVBQ3hFLEdBQUksT0FBTyxHQUFVLFVBQVksRUFBRSxhQUFrQixRQUNqRCxNQUFPLENBQUMsRUFBTyxNQUFRLFNBQVUsRUFBTyxTQUFXLEFBQWEsTUFBTSxZQUFjLEVBRXhGLE1BQU8sQ0FBQyxTQUFVLEVBQVEsQ0FBRyxFQUVqQyxTQUFTLENBQWMsRUFBRyxDQUN0QixHQUFJLE9BQU8sR0FBYSxVQUFZLEVBQUUsYUFBcUIsU0FBVyxFQUFVLE1BQU8sQ0FDbkYsR0FBSSxDQUFDLEVBQVUsT0FDWCxNQUFVLE1BQU0sNkJBQTZCLEVBQ2pELE1BQVEsQ0FBYSxZQUFZLEtBQVUsS0FFL0MsT0FBTyxPQUFPLEdBQVUsV0FBYyxBQUFhLE1BQU0sS0FBVSxLQUFXLEFBQWEsTUFBTSxVQUFlLE9BSWhJLEVBQ0EsR0FBUSxRQUFVLDJCQ3pGbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sUUFDQSxHQUFTLENBQUMsR0FBUyxPQUFPLEVBQ2hDLEdBQVEsUUFBVSwyQkNIbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsa0JBQW9CLEdBQVEsbUJBQTBCLE9BQzlELEdBQVEsbUJBQXFCLENBQ3pCLFFBQ0EsY0FDQSxVQUNBLGFBQ0EsV0FDQSxZQUNBLFVBQ0osRUFDQSxHQUFRLGtCQUFvQixDQUN4QixtQkFDQSxrQkFDQSxlQUNKLDBCQ2ZBLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxHQUFxQixDQUN2QixHQUFPLFFBQ1AsR0FBYSxTQUNaLEVBQUcsR0FBYSxTQUFTLEVBQzFCLEdBQVMsUUFDRSxzQkFDQSxvQkFDZixFQUNBLEdBQVEsUUFBVSwyQkNkbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsV0FBa0IsT0FDMUIsSUFBSSxJQUNILFFBQVMsQ0FBQyxFQUFZLENBQ25CLEVBQVcsSUFBUyxNQUNwQixFQUFXLFFBQWEsWUFDekIsS0FBZSxHQUFRLFdBQWEsR0FBYSxDQUFDLEVBQUUsMEJDTnZELE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxHQUFRLENBQ1YsUUFBUyxFQUFHLFFBQVUsYUFBWSxjQUFnQixJQUF1QixjQUFXLElBQzlFLFFBQVEsb0JBQ1IsaUJBQWlCLHNCQUN2QixPQUFRLEVBQUcsUUFBVSxhQUFZLE1BQUssY0FBaUIsQUFBYSxlQUFjLFdBQW9CLGdCQUFzQixJQUNoSSxFQUNNLEdBQU0sQ0FDUixRQUFTLGdCQUNULEtBQU0sU0FDTixXQUFZLFNBQ1osU0FDQSxJQUFJLENBQUMsRUFBSyxDQUNOLElBQVEsTUFBSyxPQUFNLFNBQVEsZUFBYyxNQUFPLEdBQ3hDLFNBQVUsRUFDbEIsR0FBSSxDQUFDLEVBQUcsS0FBSyxjQUNULE1BQVUsTUFBTSw4Q0FBOEMsRUFFbEUsSUFBTSxFQUFVLEVBQU8sYUFDdkIsR0FBSSxPQUFPLEdBQVcsU0FDbEIsTUFBVSxNQUFNLHNDQUFzQyxFQUMxRCxHQUFJLEVBQU8sUUFDUCxNQUFVLE1BQU0seUNBQXlDLEVBQzdELEdBQUksQ0FBQyxFQUNELE1BQVUsTUFBTSx1Q0FBdUMsRUFDM0QsSUFBTSxFQUFRLEVBQUksSUFBSSxRQUFTLEVBQUssRUFDOUIsRUFBTSxFQUFJLE1BQU0sTUFBUSxBQUFhLE9BQU0sSUFBcUIsZUFBYSxDQUFPLEdBQUcsRUFDN0YsRUFBSSxHQUFJLEFBQWEsY0FBYSxnQkFBbUIsSUFBTSxFQUFnQixFQUFHLElBQU0sRUFBSSxNQUFNLEdBQU8sQ0FBRSxXQUFvQixjQUFXLElBQUssTUFBSyxTQUFRLENBQUMsQ0FBQyxFQUMxSixFQUFJLEdBQUcsQ0FBSyxFQUNaLFNBQVMsQ0FBZSxFQUFHLENBQ3ZCLElBQU0sRUFBVSxFQUFXLEVBQzNCLEVBQUksR0FBRyxFQUFLLEVBQ1osUUFBVyxLQUFZLEVBQ25CLEVBQUksT0FBUSxBQUFhLE9BQU0sU0FBVyxHQUFVLEVBQ3BELEVBQUksT0FBTyxFQUFPLEVBQWUsRUFBUSxFQUFTLENBQUMsRUFFdkQsRUFBSSxLQUFLLEVBQ1QsRUFBSSxNQUFNLEdBQU8sQ0FBRSxXQUFvQixjQUFXLFFBQVMsTUFBSyxTQUFRLENBQUMsRUFDekUsRUFBSSxNQUFNLEVBRWQsU0FBUyxDQUFjLENBQUMsRUFBWSxDQUNoQyxJQUFNLEVBQVMsRUFBSSxLQUFLLE9BQU8sRUFDekIsRUFBUyxFQUFJLFVBQVUsQ0FBRSxRQUFTLFFBQVMsWUFBVyxFQUFHLENBQU0sRUFFckUsT0FEQSxFQUFJLGVBQWUsRUFBa0IsT0FBSSxFQUNsQyxFQUVYLFNBQVMsQ0FBVSxFQUFHLENBQ2xCLElBQUksRUFDSixJQUFNLEVBQWUsQ0FBQyxFQUNoQixFQUFjLEVBQVksQ0FBWSxFQUN4QyxFQUFjLEdBQ2xCLFFBQVMsRUFBSSxFQUFHLEVBQUksRUFBTSxPQUFRLElBQUssQ0FDbkMsSUFBSSxFQUFNLEVBQU0sR0FDaEIsSUFBSyxJQUFRLE1BQVEsSUFBYSxPQUFTLE9BQUksRUFBSSxPQUFTLENBQVksd0JBQXNCLEVBQUssRUFBRyxLQUFLLEtBQUssRUFBRyxDQUMvRyxJQUFNLEVBQU0sRUFBSSxLQUVoQixHQURBLEVBQWdCLGNBQVcsS0FBSyxFQUFHLEtBQU0sRUFBRyxVQUFVLEtBQU0sRUFBRyxPQUFRLENBQUcsRUFDdEUsYUFBeUIsYUFDekIsRUFBTSxFQUFJLE9BQ2QsR0FBSSxJQUFRLE9BQ1IsTUFBTSxJQUFJLEdBQVksUUFBUSxFQUFHLEtBQUssWUFBYSxFQUFHLE9BQVEsQ0FBRyxFQUV6RSxJQUFNLEdBQVcsRUFBSyxJQUFRLE1BQVEsSUFBYSxPQUFTLE9BQUksRUFBSSxjQUFnQixNQUFRLElBQVksT0FBUyxPQUFJLEVBQUcsR0FDeEgsR0FBSSxPQUFPLEdBQVcsU0FDbEIsTUFBVSxNQUFNLGlGQUFpRixJQUFVLEVBRS9HLEVBQWMsSUFBZ0IsR0FBZSxFQUFZLENBQUcsR0FDNUQsRUFBWSxFQUFTLENBQUMsRUFFMUIsR0FBSSxDQUFDLEVBQ0QsTUFBVSxNQUFNLG1CQUFtQixxQkFBMkIsRUFDbEUsT0FBTyxFQUNQLFNBQVMsQ0FBVyxFQUFHLFlBQVksQ0FDL0IsT0FBTyxNQUFNLFFBQVEsQ0FBUSxHQUFLLEVBQVMsU0FBUyxDQUFPLEVBRS9ELFNBQVMsQ0FBVyxDQUFDLEVBQUssRUFBRyxDQUN6QixHQUFJLEVBQUksTUFDSixFQUFXLEVBQUksTUFBTyxDQUFDLEVBRXRCLFFBQUksRUFBSSxLQUNULFFBQVcsS0FBWSxFQUFJLEtBQ3ZCLEVBQVcsRUFBVSxDQUFDLEVBSTFCLFdBQVUsTUFBTSw4QkFBOEIsZ0NBQXNDLEVBRzVGLFNBQVMsQ0FBVSxDQUFDLEVBQVUsRUFBRyxDQUM3QixHQUFJLE9BQU8sR0FBWSxVQUFZLEtBQVksRUFDM0MsTUFBVSxNQUFNLG1CQUFtQixrQ0FBd0MsRUFFL0UsRUFBYSxHQUFZLElBSXpDLEVBQ0EsR0FBUSxRQUFVLHE5RUNyR2xCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxHQUFRLGdCQUFrQixHQUFRLGdCQUFrQixHQUFRLFFBQVUsR0FBUSxLQUFPLEdBQVEsSUFBTSxHQUFRLFVBQVksR0FBUSxJQUFNLEdBQVEsRUFBSSxHQUFRLFdBQWEsR0FBUSxJQUFXLE9BQ3pMLElBQU0sUUFDQSxRQUNBLFFBQ0EsUUFDQSxHQUFvQixDQUFDLGFBQWEsRUFDbEMsR0FBaUIseUNBQ3ZCLE1BQU0sV0FBWSxHQUFPLE9BQVEsQ0FDN0IsZ0JBQWdCLEVBQUcsQ0FHZixHQUZBLE1BQU0saUJBQWlCLEVBQ3ZCLEdBQVMsUUFBUSxRQUFRLENBQUMsSUFBTSxLQUFLLGNBQWMsQ0FBQyxDQUFDLEVBQ2pELEtBQUssS0FBSyxjQUNWLEtBQUssV0FBVyxHQUFnQixPQUFPLEVBRS9DLHFCQUFxQixFQUFHLENBRXBCLEdBREEsTUFBTSxzQkFBc0IsRUFDeEIsQ0FBQyxLQUFLLEtBQUssS0FDWCxPQUNKLElBQU0sRUFBYSxLQUFLLEtBQUssTUFDdkIsS0FBSyxnQkFBZ0IsR0FBa0IsRUFBaUIsRUFDeEQsR0FDTixLQUFLLGNBQWMsRUFBWSxHQUFnQixFQUFLLEVBQ3BELEtBQUssS0FBSyxpQ0FBbUMsR0FFakQsV0FBVyxFQUFHLENBQ1YsT0FBUSxLQUFLLEtBQUssWUFDZCxNQUFNLFlBQVksSUFBTSxLQUFLLFVBQVUsRUFBYyxFQUFJLEdBQWlCLFFBRXRGLENBQ0EsR0FBUSxJQUFNLEdBQ2QsR0FBTyxRQUFVLEdBQVUsR0FDM0IsR0FBTyxRQUFRLElBQU0sR0FDckIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsUUFBVSxHQUNsQixJQUFJLFFBQ0osT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBVyxXQUFjLENBQUMsRUFDckgsSUFBSSxRQUNKLE9BQU8sZUFBZSxHQUFTLElBQUssQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVUsRUFBSyxDQUFDLEVBQ2xHLE9BQU8sZUFBZSxHQUFTLE1BQU8sQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVUsSUFBTyxDQUFDLEVBQ3RHLE9BQU8sZUFBZSxHQUFTLFlBQWEsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVUsVUFBYSxDQUFDLEVBQ2xILE9BQU8sZUFBZSxHQUFTLE1BQU8sQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVUsSUFBTyxDQUFDLEVBQ3RHLE9BQU8sZUFBZSxHQUFTLE9BQVEsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVUsS0FBUSxDQUFDLEVBQ3hHLE9BQU8sZUFBZSxHQUFTLFVBQVcsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVUsUUFBVyxDQUFDLEVBQzlHLElBQUksUUFDSixPQUFPLGVBQWUsR0FBUyxrQkFBbUIsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQW1CLFFBQVcsQ0FBQyxFQUMvSCxJQUFJLFFBQ0osT0FBTyxlQUFlLEdBQVMsa0JBQW1CLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFZLFFBQVcsQ0FBQywwQkMvQ3hILE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxHQUFRLFlBQWMsR0FBUSxZQUFjLEdBQVEsWUFBbUIsT0FDdkUsU0FBUyxFQUFNLENBQUMsRUFBVSxFQUFTLENBQy9CLE1BQU8sQ0FBRSxXQUFVLFNBQVEsRUFFL0IsR0FBUSxZQUFjLENBRWxCLEtBQU0sR0FBTyxHQUFNLEVBQVcsRUFFOUIsS0FBTSxHQUFPLEdBQU0sRUFBVyxFQUM5QixZQUFhLEdBQU8sR0FBVyxFQUFlLEVBRTlDLFNBQVUseUVBQ1YsT0FDQSxnQkFBaUIseW9DQUVqQixlQUFnQixvTEFHaEIsSUFBSyxxZEFDTCxNQUFPLDJJQUNQLFNBQVUsd0dBRVYsS0FBTSw0RUFDTixLQUFNLG0vQkFDTixTQUVBLEtBQU0sK0RBR04sZUFBZ0IsNEJBQ2hCLDRCQUE2QiwrREFFN0Isd0JBQXlCLG1EQUd6QixRQUVBLE1BQU8sQ0FBRSxLQUFNLFNBQVUsU0FBVSxFQUFjLEVBRWpELE1BQU8sQ0FBRSxLQUFNLFNBQVUsU0FBVSxFQUFjLEVBRWpELE1BQU8sQ0FBRSxLQUFNLFNBQVUsU0FBVSxFQUFlLEVBRWxELE9BQVEsQ0FBRSxLQUFNLFNBQVUsU0FBVSxFQUFlLEVBRW5ELFNBQVUsR0FFVixPQUFRLEVBQ1osRUFDQSxHQUFRLFlBQWMsSUFDZixHQUFRLFlBQ1gsS0FBTSxHQUFPLDZCQUE4QixFQUFXLEVBQ3RELEtBQU0sR0FBTyw4RUFBK0UsRUFBVyxFQUN2RyxZQUFhLEdBQU8sMEdBQTJHLEVBQWUsRUFFOUksSUFBSyw2Q0FDTCxnQkFBaUIsMEVBSWpCLE1BQU8sa0hBQ1gsRUFDQSxHQUFRLFlBQWMsT0FBTyxLQUFLLEdBQVEsV0FBVyxFQUNyRCxTQUFTLEVBQVUsQ0FBQyxFQUFNLENBRXRCLE9BQU8sRUFBTyxJQUFNLElBQU0sRUFBTyxNQUFRLEdBQUssRUFBTyxNQUFRLEdBRWpFLElBQU0sR0FBTyw2QkFDUCxHQUFPLENBQUMsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUMvRCxTQUFTLEVBQUksQ0FBQyxFQUFLLENBRWYsSUFBTSxFQUFVLEdBQUssS0FBSyxDQUFHLEVBQzdCLEdBQUksQ0FBQyxFQUNELE1BQU8sR0FDWCxJQUFNLEVBQU8sQ0FBQyxFQUFRLEdBQ2hCLEVBQVEsQ0FBQyxFQUFRLEdBQ2pCLEVBQU0sQ0FBQyxFQUFRLEdBQ3JCLE9BQVEsR0FBUyxHQUNiLEdBQVMsSUFDVCxHQUFPLEdBQ1AsSUFBUSxJQUFVLEdBQUssR0FBVyxDQUFJLEVBQUksR0FBSyxHQUFLLElBRTVELFNBQVMsRUFBVyxDQUFDLEVBQUksRUFBSSxDQUN6QixHQUFJLEVBQUUsR0FBTSxHQUNSLE9BQ0osR0FBSSxFQUFLLEVBQ0wsTUFBTyxHQUNYLEdBQUksRUFBSyxFQUNMLE1BQU8sR0FDWCxNQUFPLEdBRVgsSUFBTSxHQUFPLDBEQUNiLFNBQVMsRUFBSSxDQUFDLEVBQUssRUFBYyxDQUM3QixJQUFNLEVBQVUsR0FBSyxLQUFLLENBQUcsRUFDN0IsR0FBSSxDQUFDLEVBQ0QsTUFBTyxHQUNYLElBQU0sRUFBTyxDQUFDLEVBQVEsR0FDaEIsRUFBUyxDQUFDLEVBQVEsR0FDbEIsRUFBUyxDQUFDLEVBQVEsR0FDbEIsRUFBVyxFQUFRLEdBQ3pCLE9BQVUsR0FBUSxJQUFNLEdBQVUsSUFBTSxHQUFVLElBQzdDLElBQVMsSUFBTSxJQUFXLElBQU0sSUFBVyxNQUMzQyxDQUFDLEdBQWdCLElBQWEsSUFFdkMsU0FBUyxFQUFXLENBQUMsRUFBSSxFQUFJLENBQ3pCLEdBQUksRUFBRSxHQUFNLEdBQ1IsT0FDSixJQUFNLEVBQUssR0FBSyxLQUFLLENBQUUsRUFDakIsRUFBSyxHQUFLLEtBQUssQ0FBRSxFQUN2QixHQUFJLEVBQUUsR0FBTSxHQUNSLE9BR0osR0FGQSxFQUFLLEVBQUcsR0FBSyxFQUFHLEdBQUssRUFBRyxJQUFNLEVBQUcsSUFBTSxJQUN2QyxFQUFLLEVBQUcsR0FBSyxFQUFHLEdBQUssRUFBRyxJQUFNLEVBQUcsSUFBTSxJQUNuQyxFQUFLLEVBQ0wsTUFBTyxHQUNYLEdBQUksRUFBSyxFQUNMLE1BQU8sR0FDWCxNQUFPLEdBRVgsSUFBTSxHQUFzQixRQUM1QixTQUFTLEVBQVMsQ0FBQyxFQUFLLENBRXBCLElBQU0sRUFBVyxFQUFJLE1BQU0sRUFBbUIsRUFDOUMsT0FBTyxFQUFTLFNBQVcsR0FBSyxHQUFLLEVBQVMsRUFBRSxHQUFLLEdBQUssRUFBUyxHQUFJLEVBQUksRUFFL0UsU0FBUyxFQUFlLENBQUMsRUFBSyxFQUFLLENBQy9CLEdBQUksRUFBRSxHQUFPLEdBQ1QsT0FDSixJQUFPLEVBQUksR0FBTSxFQUFJLE1BQU0sRUFBbUIsR0FDdkMsRUFBSSxHQUFNLEVBQUksTUFBTSxFQUFtQixFQUN4QyxFQUFNLEdBQVksRUFBSSxDQUFFLEVBQzlCLEdBQUksSUFBUSxPQUNSLE9BQ0osT0FBTyxHQUFPLEdBQVksRUFBSSxDQUFFLEVBRXBDLElBQU0sR0FBbUIsT0FDbkIsR0FBTSwrbkNBQ1osU0FBUyxFQUFHLENBQUMsRUFBSyxDQUVkLE9BQU8sR0FBaUIsS0FBSyxDQUFHLEdBQUssR0FBSSxLQUFLLENBQUcsRUFFckQsSUFBTSxHQUFPLHFFQUNiLFNBQVMsRUFBSSxDQUFDLEVBQUssQ0FFZixPQURBLEdBQUssVUFBWSxFQUNWLEdBQUssS0FBSyxDQUFHLEVBRXhCLElBQU0sR0FBWSxZQUNaLEdBQVksV0FDbEIsU0FBUyxFQUFhLENBQUMsRUFBTyxDQUMxQixPQUFPLE9BQU8sVUFBVSxDQUFLLEdBQUssR0FBUyxJQUFhLEdBQVMsR0FFckUsU0FBUyxFQUFhLENBQUMsRUFBTyxDQUUxQixPQUFPLE9BQU8sVUFBVSxDQUFLLEVBRWpDLFNBQVMsRUFBYyxFQUFHLENBQ3RCLE1BQU8sR0FFWCxJQUFNLEdBQVcsV0FDakIsU0FBUyxFQUFLLENBQUMsRUFBSyxDQUNoQixHQUFJLEdBQVMsS0FBSyxDQUFHLEVBQ2pCLE1BQU8sR0FDWCxHQUFJLENBRUEsT0FEQSxJQUFJLE9BQU8sQ0FBRyxFQUNQLEdBRVgsTUFBTyxFQUFHLENBQ04sTUFBTyw2QkN4S2YsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsV0FBYSxHQUFRLGlCQUFtQixHQUFRLFlBQWMsR0FBUSxjQUFnQixHQUFRLFVBQVksR0FBUSxVQUFZLEdBQVEsV0FBYSxHQUFRLElBQU0sR0FBUSxFQUFJLEdBQVEsSUFBTSxHQUFRLE1BQVEsR0FBUSxLQUFPLEdBQVEsV0FBYSxHQUFRLFlBQW1CLE9BQ2xSLE1BQU0sRUFBWSxDQUNsQixDQUNBLEdBQVEsWUFBYyxHQUN0QixHQUFRLFdBQWEsd0JBQ3JCLE1BQU0sV0FBYSxFQUFZLENBQzNCLFdBQVcsQ0FBQyxFQUFHLENBQ1gsTUFBTSxFQUNOLEdBQUksQ0FBQyxHQUFRLFdBQVcsS0FBSyxDQUFDLEVBQzFCLE1BQVUsTUFBTSwwQ0FBMEMsRUFDOUQsS0FBSyxJQUFNLEVBRWYsUUFBUSxFQUFHLENBQ1AsT0FBTyxLQUFLLElBRWhCLFFBQVEsRUFBRyxDQUNQLE1BQU8sTUFFUCxNQUFLLEVBQUcsQ0FDUixNQUFPLEVBQUcsS0FBSyxLQUFNLENBQUUsRUFFL0IsQ0FDQSxHQUFRLEtBQU8sR0FDZixNQUFNLFdBQWMsRUFBWSxDQUM1QixXQUFXLENBQUMsRUFBTSxDQUNkLE1BQU0sRUFDTixLQUFLLE9BQVMsT0FBTyxJQUFTLFNBQVcsQ0FBQyxDQUFJLEVBQUksRUFFdEQsUUFBUSxFQUFHLENBQ1AsT0FBTyxLQUFLLElBRWhCLFFBQVEsRUFBRyxDQUNQLEdBQUksS0FBSyxPQUFPLE9BQVMsRUFDckIsTUFBTyxHQUNYLElBQU0sRUFBTyxLQUFLLE9BQU8sR0FDekIsT0FBTyxJQUFTLElBQU0sSUFBUyxRQUUvQixJQUFHLEVBQUcsQ0FDTixJQUFJLEVBQ0osT0FBUyxFQUFLLEtBQUssUUFBVSxNQUFRLElBQVksT0FBSSxFQUFNLEtBQUssS0FBTyxLQUFLLE9BQU8sT0FBTyxDQUFDLEVBQUcsSUFBTSxHQUFHLElBQUksSUFBSyxFQUFFLEtBRWxILE1BQUssRUFBRyxDQUNSLElBQUksRUFDSixPQUFTLEVBQUssS0FBSyxVQUFZLE1BQVEsSUFBWSxPQUFJLEVBQU0sS0FBSyxPQUFTLEtBQUssT0FBTyxPQUFPLENBQUMsRUFBTyxJQUFNLENBQ3hHLEdBQUksYUFBYSxHQUNiLEVBQU0sRUFBRSxNQUFRLEVBQU0sRUFBRSxNQUFRLEdBQUssRUFDekMsT0FBTyxHQUNSLENBQUMsQ0FBQyxFQUViLENBQ0EsR0FBUSxNQUFRLEdBQ2hCLEdBQVEsSUFBTSxJQUFJLEdBQU0sRUFBRSxFQUMxQixTQUFTLEVBQUMsQ0FBQyxLQUFTLEVBQU0sQ0FDdEIsSUFBTSxFQUFPLENBQUMsRUFBSyxFQUFFLEVBQ2pCLEVBQUksRUFDUixNQUFPLEVBQUksRUFBSyxPQUNaLEdBQVcsRUFBTSxFQUFLLEVBQUUsRUFDeEIsRUFBSyxLQUFLLEVBQUssRUFBRSxFQUFFLEVBRXZCLE9BQU8sSUFBSSxHQUFNLENBQUksRUFFekIsR0FBUSxFQUFJLEdBQ1osSUFBTSxHQUFPLElBQUksR0FBTSxHQUFHLEVBQzFCLFNBQVMsRUFBRyxDQUFDLEtBQVMsRUFBTSxDQUN4QixJQUFNLEVBQU8sQ0FBQyxHQUFjLEVBQUssRUFBRSxDQUFDLEVBQ2hDLEVBQUksRUFDUixNQUFPLEVBQUksRUFBSyxPQUNaLEVBQUssS0FBSyxFQUFJLEVBQ2QsR0FBVyxFQUFNLEVBQUssRUFBRSxFQUN4QixFQUFLLEtBQUssR0FBTSxHQUFjLEVBQUssRUFBRSxFQUFFLENBQUMsRUFHNUMsT0FEQSxHQUFTLENBQUksRUFDTixJQUFJLEdBQU0sQ0FBSSxFQUV6QixHQUFRLElBQU0sR0FDZCxTQUFTLEVBQVUsQ0FBQyxFQUFNLEVBQUssQ0FDM0IsR0FBSSxhQUFlLEdBQ2YsRUFBSyxLQUFLLEdBQUcsRUFBSSxNQUFNLEVBQ3RCLFFBQUksYUFBZSxHQUNwQixFQUFLLEtBQUssQ0FBRyxFQUViLE9BQUssS0FBSyxHQUFZLENBQUcsQ0FBQyxFQUVsQyxHQUFRLFdBQWEsR0FDckIsU0FBUyxFQUFRLENBQUMsRUFBTSxDQUNwQixJQUFJLEVBQUksRUFDUixNQUFPLEVBQUksRUFBSyxPQUFTLEVBQUcsQ0FDeEIsR0FBSSxFQUFLLEtBQU8sR0FBTSxDQUNsQixJQUFNLEVBQU0sR0FBZSxFQUFLLEVBQUksR0FBSSxFQUFLLEVBQUksRUFBRSxFQUNuRCxHQUFJLElBQVEsT0FBVyxDQUNuQixFQUFLLE9BQU8sRUFBSSxFQUFHLEVBQUcsQ0FBRyxFQUN6QixTQUVKLEVBQUssS0FBTyxJQUVoQixLQUdSLFNBQVMsRUFBYyxDQUFDLEVBQUcsRUFBRyxDQUMxQixHQUFJLElBQU0sS0FDTixPQUFPLEVBQ1gsR0FBSSxJQUFNLEtBQ04sT0FBTyxFQUNYLEdBQUksT0FBTyxHQUFLLFNBQVUsQ0FDdEIsR0FBSSxhQUFhLElBQVEsRUFBRSxFQUFFLE9BQVMsS0FBTyxJQUN6QyxPQUNKLEdBQUksT0FBTyxHQUFLLFNBQ1osTUFBTyxHQUFHLEVBQUUsTUFBTSxFQUFHLEVBQUUsSUFBSSxLQUMvQixHQUFJLEVBQUUsS0FBTyxJQUNULE9BQU8sRUFBRSxNQUFNLEVBQUcsRUFBRSxFQUFJLEVBQUUsTUFBTSxDQUFDLEVBQ3JDLE9BRUosR0FBSSxPQUFPLEdBQUssVUFBWSxFQUFFLEtBQU8sS0FBTyxFQUFFLGFBQWEsSUFDdkQsTUFBTyxJQUFJLElBQUksRUFBRSxNQUFNLENBQUMsSUFDNUIsT0FFSixTQUFTLEVBQVMsQ0FBQyxFQUFJLEVBQUksQ0FDdkIsT0FBTyxFQUFHLFNBQVMsRUFBSSxFQUFLLEVBQUcsU0FBUyxFQUFJLEVBQUssS0FBTyxJQUFLLElBRWpFLEdBQVEsVUFBWSxHQUVwQixTQUFTLEVBQVcsQ0FBQyxFQUFHLENBQ3BCLE9BQU8sT0FBTyxHQUFLLFVBQVksT0FBTyxHQUFLLFdBQWEsSUFBTSxLQUN4RCxFQUNBLEdBQWMsTUFBTSxRQUFRLENBQUMsRUFBSSxFQUFFLEtBQUssR0FBRyxFQUFJLENBQUMsRUFFMUQsU0FBUyxFQUFTLENBQUMsRUFBRyxDQUNsQixPQUFPLElBQUksR0FBTSxHQUFjLENBQUMsQ0FBQyxFQUVyQyxHQUFRLFVBQVksR0FDcEIsU0FBUyxFQUFhLENBQUMsRUFBRyxDQUN0QixPQUFPLEtBQUssVUFBVSxDQUFDLEVBQ2xCLFFBQVEsVUFBVyxTQUFTLEVBQzVCLFFBQVEsVUFBVyxTQUFTLEVBRXJDLEdBQVEsY0FBZ0IsR0FDeEIsU0FBUyxFQUFXLENBQUMsRUFBSyxDQUN0QixPQUFPLE9BQU8sR0FBTyxVQUFZLEdBQVEsV0FBVyxLQUFLLENBQUcsRUFBSSxJQUFJLEdBQU0sSUFBSSxHQUFLLEVBQUksTUFBTSxLQUVqRyxHQUFRLFlBQWMsR0FFdEIsU0FBUyxFQUFnQixDQUFDLEVBQUssQ0FDM0IsR0FBSSxPQUFPLEdBQU8sVUFBWSxHQUFRLFdBQVcsS0FBSyxDQUFHLEVBQ3JELE9BQU8sSUFBSSxHQUFNLEdBQUcsR0FBSyxFQUU3QixNQUFVLE1BQU0saUNBQWlDLGtDQUFvQyxFQUV6RixHQUFRLGlCQUFtQixHQUMzQixTQUFTLEVBQVUsQ0FBQyxFQUFJLENBQ3BCLE9BQU8sSUFBSSxHQUFNLEVBQUcsU0FBUyxDQUFDLEVBRWxDLEdBQVEsV0FBYSwyQkN4SnJCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxHQUFRLFdBQWEsR0FBUSxlQUFpQixHQUFRLE1BQVEsR0FBUSxTQUFXLEdBQVEsZUFBc0IsT0FDL0csSUFBTSxRQUNOLE1BQU0sV0FBbUIsS0FBTSxDQUMzQixXQUFXLENBQUMsRUFBTSxDQUNkLE1BQU0sdUJBQXVCLGVBQWtCLEVBQy9DLEtBQUssTUFBUSxFQUFLLE1BRTFCLENBQ0EsSUFBSSxJQUNILFFBQVMsQ0FBQyxFQUFnQixDQUN2QixFQUFlLEVBQWUsUUFBYSxHQUFLLFVBQ2hELEVBQWUsRUFBZSxVQUFlLEdBQUssY0FDbkQsR0FBaUIsR0FBUSxpQkFBbUIsR0FBUSxlQUFpQixDQUFDLEVBQUUsRUFDM0UsR0FBUSxTQUFXLENBQ2YsTUFBTyxJQUFXLFFBQUssT0FBTyxFQUM5QixJQUFLLElBQVcsUUFBSyxLQUFLLEVBQzFCLElBQUssSUFBVyxRQUFLLEtBQUssQ0FDOUIsRUFDQSxNQUFNLEVBQU0sQ0FDUixXQUFXLEVBQUcsV0FBVSxVQUFXLENBQUMsRUFBRyxDQUNuQyxLQUFLLE9BQVMsQ0FBQyxFQUNmLEtBQUssVUFBWSxFQUNqQixLQUFLLFFBQVUsRUFFbkIsTUFBTSxDQUFDLEVBQWMsQ0FDakIsT0FBTyxhQUErQixRQUFPLEVBQWUsS0FBSyxLQUFLLENBQVksRUFFdEYsSUFBSSxDQUFDLEVBQVEsQ0FDVCxPQUFPLElBQVcsUUFBSyxLQUFLLFNBQVMsQ0FBTSxDQUFDLEVBRWhELFFBQVEsQ0FBQyxFQUFRLENBQ2IsSUFBTSxFQUFLLEtBQUssT0FBTyxJQUFXLEtBQUssV0FBVyxDQUFNLEVBQ3hELE1BQU8sR0FBRyxJQUFTLEVBQUcsVUFFMUIsVUFBVSxDQUFDLEVBQVEsQ0FDZixJQUFJLEVBQUksRUFDUixLQUFNLEdBQU0sRUFBSyxLQUFLLFdBQWEsTUFBUSxJQUFZLE9BQVMsT0FBSSxFQUFHLGFBQWUsTUFBUSxJQUFZLE9BQVMsT0FBSSxFQUFHLElBQUksQ0FBTSxJQUFPLEtBQUssV0FBYSxDQUFDLEtBQUssVUFBVSxJQUFJLENBQU0sRUFDbkwsTUFBVSxNQUFNLG9CQUFvQixpQ0FBc0MsRUFFOUUsT0FBUSxLQUFLLE9BQU8sR0FBVSxDQUFFLFNBQVEsTUFBTyxDQUFFLEVBRXpELENBQ0EsR0FBUSxNQUFRLEdBQ2hCLE1BQU0sV0FBOEIsT0FBSyxDQUNyQyxXQUFXLENBQUMsRUFBUSxFQUFTLENBQ3pCLE1BQU0sQ0FBTyxFQUNiLEtBQUssT0FBUyxFQUVsQixRQUFRLENBQUMsR0FBUyxXQUFVLGFBQWEsQ0FDckMsS0FBSyxNQUFRLEVBQ2IsS0FBSyxVQUFhLEFBQVUsUUFBTyxJQUFXLFFBQUssQ0FBUSxLQUFLLEtBRXhFLENBQ0EsR0FBUSxlQUFpQixHQUN6QixJQUFNLEdBQVEsQUFBVSxTQUN4QixNQUFNLFdBQW1CLEVBQU0sQ0FDM0IsV0FBVyxDQUFDLEVBQU0sQ0FDZCxNQUFNLENBQUksRUFDVixLQUFLLFFBQVUsQ0FBQyxFQUNoQixLQUFLLE9BQVMsRUFBSyxNQUNuQixLQUFLLEtBQU8sSUFBSyxFQUFNLEdBQUksRUFBSyxNQUFRLEdBQWMsTUFBSSxFQUU5RCxHQUFHLEVBQUcsQ0FDRixPQUFPLEtBQUssT0FFaEIsSUFBSSxDQUFDLEVBQVEsQ0FDVCxPQUFPLElBQUksR0FBZSxFQUFRLEtBQUssU0FBUyxDQUFNLENBQUMsRUFFM0QsS0FBSyxDQUFDLEVBQWMsRUFBTyxDQUN2QixJQUFJLEVBQ0osR0FBSSxFQUFNLE1BQVEsT0FDZCxNQUFVLE1BQU0sc0NBQXNDLEVBQzFELElBQU0sRUFBTyxLQUFLLE9BQU8sQ0FBWSxHQUM3QixVQUFXLEVBQ2IsR0FBWSxFQUFLLEVBQU0sT0FBUyxNQUFRLElBQVksT0FBSSxFQUFLLEVBQU0sSUFDckUsRUFBSyxLQUFLLFFBQVEsR0FDdEIsR0FBSSxFQUFJLENBQ0osSUFBTSxFQUFRLEVBQUcsSUFBSSxDQUFRLEVBQzdCLEdBQUksRUFDQSxPQUFPLEVBR1gsT0FBSyxLQUFLLFFBQVEsR0FBVSxJQUFJLElBRXBDLEVBQUcsSUFBSSxFQUFVLENBQUksRUFDckIsSUFBTSxFQUFJLEtBQUssT0FBTyxLQUFZLEtBQUssT0FBTyxHQUFVLENBQUMsR0FDbkQsRUFBWSxFQUFFLE9BR3BCLE9BRkEsRUFBRSxHQUFhLEVBQU0sSUFDckIsRUFBSyxTQUFTLEVBQU8sQ0FBRSxTQUFVLEVBQVEsV0FBVSxDQUFDLEVBQzdDLEVBRVgsUUFBUSxDQUFDLEVBQVEsRUFBVSxDQUN2QixJQUFNLEVBQUssS0FBSyxRQUFRLEdBQ3hCLEdBQUksQ0FBQyxFQUNELE9BQ0osT0FBTyxFQUFHLElBQUksQ0FBUSxFQUUxQixTQUFTLENBQUMsRUFBVyxFQUFTLEtBQUssUUFBUyxDQUN4QyxPQUFPLEtBQUssY0FBYyxFQUFRLENBQUMsSUFBUyxDQUN4QyxHQUFJLEVBQUssWUFBYyxPQUNuQixNQUFVLE1BQU0sa0JBQWtCLGlCQUFvQixFQUMxRCxNQUFRLENBQVUsT0FBTSxJQUFZLEVBQUssWUFDNUMsRUFFTCxTQUFTLENBQUMsRUFBUyxLQUFLLFFBQVMsRUFBWSxFQUFTLENBQ2xELE9BQU8sS0FBSyxjQUFjLEVBQVEsQ0FBQyxJQUFTLENBQ3hDLEdBQUksRUFBSyxRQUFVLE9BQ2YsTUFBVSxNQUFNLGtCQUFrQixpQkFBb0IsRUFDMUQsT0FBTyxFQUFLLE1BQU0sTUFDbkIsRUFBWSxDQUFPLEVBRTFCLGFBQWEsQ0FBQyxFQUFRLEVBQVcsRUFBYSxDQUFDLEVBQUcsRUFBUyxDQUN2RCxJQUFJLEVBQWMsT0FDbEIsUUFBVyxLQUFVLEVBQVEsQ0FDekIsSUFBTSxFQUFLLEVBQU8sR0FDbEIsR0FBSSxDQUFDLEVBQ0QsU0FDSixJQUFNLEVBQVcsRUFBVyxHQUFVLEVBQVcsSUFBVyxJQUFJLElBQ2hFLEVBQUcsUUFBUSxDQUFDLElBQVMsQ0FDakIsR0FBSSxFQUFRLElBQUksQ0FBSSxFQUNoQixPQUNKLEVBQVEsSUFBSSxFQUFNLEdBQWUsT0FBTyxFQUN4QyxJQUFJLEVBQUksRUFBVSxDQUFJLEVBQ3RCLEdBQUksRUFBRyxDQUNILElBQU0sRUFBTSxLQUFLLEtBQUssSUFBTSxHQUFRLFNBQVMsSUFBTSxHQUFRLFNBQVMsTUFDcEUsRUFBUSxBQUFVLE9BQU0sSUFBTyxLQUFPLE9BQVUsS0FBSyxLQUFLLEtBQUssS0FFOUQsUUFBSyxFQUFJLElBQVksTUFBUSxJQUFpQixPQUFTLE9BQUksRUFBUSxDQUFJLEVBQ3hFLEVBQVEsQUFBVSxPQUFNLElBQU8sSUFBSSxLQUFLLEtBQUssS0FHN0MsV0FBTSxJQUFJLEdBQVcsQ0FBSSxFQUU3QixFQUFRLElBQUksRUFBTSxHQUFlLFNBQVMsRUFDN0MsRUFFTCxPQUFPLEVBRWYsQ0FDQSxHQUFRLFdBQWEseUJDNUlyQixPQUFPLGVBQWUsRUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsRUFBUSxHQUFLLEVBQVEsSUFBTSxFQUFRLElBQU0sRUFBUSxRQUFVLEVBQVEsVUFBWSxFQUFRLFNBQVcsRUFBUSxlQUFpQixFQUFRLFdBQWEsRUFBUSxNQUFRLEVBQVEsS0FBTyxFQUFRLFdBQWEsRUFBUSxVQUFZLEVBQVEsWUFBYyxFQUFRLElBQU0sRUFBUSxVQUFZLEVBQVEsSUFBTSxFQUFRLEVBQVMsT0FDL1MsSUFBTSxPQUNBLFFBQ0YsUUFDSixPQUFPLGVBQWUsRUFBUyxJQUFLLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFPLEVBQUssQ0FBQyxFQUMvRixPQUFPLGVBQWUsRUFBUyxNQUFPLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFPLElBQU8sQ0FBQyxFQUNuRyxPQUFPLGVBQWUsRUFBUyxZQUFhLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFPLFVBQWEsQ0FBQyxFQUMvRyxPQUFPLGVBQWUsRUFBUyxNQUFPLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFPLElBQU8sQ0FBQyxFQUNuRyxPQUFPLGVBQWUsRUFBUyxjQUFlLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFPLFlBQWUsQ0FBQyxFQUNuSCxPQUFPLGVBQWUsRUFBUyxZQUFhLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFPLFVBQWEsQ0FBQyxFQUMvRyxPQUFPLGVBQWUsRUFBUyxhQUFjLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFPLFdBQWMsQ0FBQyxFQUNqSCxPQUFPLGVBQWUsRUFBUyxPQUFRLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFPLEtBQVEsQ0FBQyxFQUNyRyxJQUFJLFFBQ0osT0FBTyxlQUFlLEVBQVMsUUFBUyxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBUSxNQUFTLENBQUMsRUFDeEcsT0FBTyxlQUFlLEVBQVMsYUFBYyxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBUSxXQUFjLENBQUMsRUFDbEgsT0FBTyxlQUFlLEVBQVMsaUJBQWtCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFRLGVBQWtCLENBQUMsRUFDMUgsT0FBTyxlQUFlLEVBQVMsV0FBWSxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBUSxTQUFZLENBQUMsRUFDOUcsRUFBUSxVQUFZLENBQ2hCLEdBQUksSUFBVyxRQUFNLEdBQUcsRUFDeEIsSUFBSyxJQUFXLFFBQU0sSUFBSSxFQUMxQixHQUFJLElBQVcsUUFBTSxHQUFHLEVBQ3hCLElBQUssSUFBVyxRQUFNLElBQUksRUFDMUIsR0FBSSxJQUFXLFFBQU0sS0FBSyxFQUMxQixJQUFLLElBQVcsUUFBTSxLQUFLLEVBQzNCLElBQUssSUFBVyxRQUFNLEdBQUcsRUFDekIsR0FBSSxJQUFXLFFBQU0sSUFBSSxFQUN6QixJQUFLLElBQVcsUUFBTSxJQUFJLEVBQzFCLElBQUssSUFBVyxRQUFNLEdBQUcsQ0FDN0IsRUFDQSxNQUFNLEVBQUssQ0FDUCxhQUFhLEVBQUcsQ0FDWixPQUFPLEtBRVgsYUFBYSxDQUFDLEVBQVEsRUFBWSxDQUM5QixPQUFPLEtBRWYsQ0FDQSxNQUFNLFdBQVksRUFBSyxDQUNuQixXQUFXLENBQUMsRUFBUyxFQUFNLEVBQUssQ0FDNUIsTUFBTSxFQUNOLEtBQUssUUFBVSxFQUNmLEtBQUssS0FBTyxFQUNaLEtBQUssSUFBTSxFQUVmLE1BQU0sRUFBRyxNQUFLLE1BQU0sQ0FDaEIsSUFBTSxFQUFVLEVBQWMsWUFBUyxJQUFNLEtBQUssUUFDNUMsRUFBTSxLQUFLLE1BQVEsT0FBWSxHQUFLLE1BQU0sS0FBSyxNQUNyRCxNQUFPLEdBQUcsS0FBVyxLQUFLLE9BQU8sS0FBUyxFQUU5QyxhQUFhLENBQUMsRUFBTyxFQUFXLENBQzVCLEdBQUksQ0FBQyxFQUFNLEtBQUssS0FBSyxLQUNqQixPQUNKLEdBQUksS0FBSyxJQUNMLEtBQUssSUFBTSxHQUFhLEtBQUssSUFBSyxFQUFPLENBQVMsRUFDdEQsT0FBTyxRQUVQLE1BQUssRUFBRyxDQUNSLE9BQU8sS0FBSyxlQUFzQixjQUFjLEtBQUssSUFBSSxNQUFRLENBQUMsRUFFMUUsQ0FDQSxNQUFNLFdBQWUsRUFBSyxDQUN0QixXQUFXLENBQUMsRUFBSyxFQUFLLEVBQWEsQ0FDL0IsTUFBTSxFQUNOLEtBQUssSUFBTSxFQUNYLEtBQUssSUFBTSxFQUNYLEtBQUssWUFBYyxFQUV2QixNQUFNLEVBQUcsTUFBTSxDQUNYLE1BQU8sR0FBRyxLQUFLLFNBQVMsS0FBSyxPQUFTLEVBRTFDLGFBQWEsQ0FBQyxFQUFPLEVBQVcsQ0FDNUIsR0FBSSxLQUFLLGVBQXNCLFFBQVEsQ0FBQyxFQUFNLEtBQUssSUFBSSxNQUFRLENBQUMsS0FBSyxZQUNqRSxPQUVKLE9BREEsS0FBSyxJQUFNLEdBQWEsS0FBSyxJQUFLLEVBQU8sQ0FBUyxFQUMzQyxRQUVQLE1BQUssRUFBRyxDQUNSLElBQU0sRUFBUSxLQUFLLGVBQXNCLE9BQU8sQ0FBQyxFQUFJLElBQUssS0FBSyxJQUFJLEtBQU0sRUFDekUsT0FBTyxHQUFhLEVBQU8sS0FBSyxHQUFHLEVBRTNDLENBQ0EsTUFBTSxXQUFpQixFQUFPLENBQzFCLFdBQVcsQ0FBQyxFQUFLLEVBQUksRUFBSyxFQUFhLENBQ25DLE1BQU0sRUFBSyxFQUFLLENBQVcsRUFDM0IsS0FBSyxHQUFLLEVBRWQsTUFBTSxFQUFHLE1BQU0sQ0FDWCxNQUFPLEdBQUcsS0FBSyxPQUFPLEtBQUssT0FBTyxLQUFLLE9BQVMsRUFFeEQsQ0FDQSxNQUFNLFdBQWMsRUFBSyxDQUNyQixXQUFXLENBQUMsRUFBTyxDQUNmLE1BQU0sRUFDTixLQUFLLE1BQVEsRUFDYixLQUFLLE1BQVEsQ0FBQyxFQUVsQixNQUFNLEVBQUcsTUFBTSxDQUNYLE1BQU8sR0FBRyxLQUFLLFNBQVcsRUFFbEMsQ0FDQSxNQUFNLFdBQWMsRUFBSyxDQUNyQixXQUFXLENBQUMsRUFBTyxDQUNmLE1BQU0sRUFDTixLQUFLLE1BQVEsRUFDYixLQUFLLE1BQVEsQ0FBQyxFQUVsQixNQUFNLEVBQUcsTUFBTSxDQUVYLE1BQU8sUUFETyxLQUFLLE1BQVEsSUFBSSxLQUFLLFFBQVUsTUFDcEIsRUFFbEMsQ0FDQSxNQUFNLFdBQWMsRUFBSyxDQUNyQixXQUFXLENBQUMsRUFBTyxDQUNmLE1BQU0sRUFDTixLQUFLLE1BQVEsRUFFakIsTUFBTSxFQUFHLE1BQU0sQ0FDWCxNQUFPLFNBQVMsS0FBSyxTQUFXLEtBRWhDLE1BQUssRUFBRyxDQUNSLE9BQU8sS0FBSyxNQUFNLE1BRTFCLENBQ0EsTUFBTSxXQUFnQixFQUFLLENBQ3ZCLFdBQVcsQ0FBQyxFQUFNLENBQ2QsTUFBTSxFQUNOLEtBQUssS0FBTyxFQUVoQixNQUFNLEVBQUcsTUFBTSxDQUNYLE1BQU8sR0FBRyxLQUFLLFFBQVUsRUFFN0IsYUFBYSxFQUFHLENBQ1osTUFBTyxHQUFHLEtBQUssT0FBUyxLQUFPLE9BRW5DLGFBQWEsQ0FBQyxFQUFPLEVBQVcsQ0FFNUIsT0FEQSxLQUFLLEtBQU8sR0FBYSxLQUFLLEtBQU0sRUFBTyxDQUFTLEVBQzdDLFFBRVAsTUFBSyxFQUFHLENBQ1IsT0FBTyxLQUFLLGdCQUF1QixjQUFjLEtBQUssS0FBSyxNQUFRLENBQUMsRUFFNUUsQ0FDQSxNQUFNLFdBQW1CLEVBQUssQ0FDMUIsV0FBVyxDQUFDLEVBQVEsQ0FBQyxFQUFHLENBQ3BCLE1BQU0sRUFDTixLQUFLLE1BQVEsRUFFakIsTUFBTSxDQUFDLEVBQU0sQ0FDVCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUMsRUFBTSxJQUFNLEVBQU8sRUFBRSxPQUFPLENBQUksRUFBRyxFQUFFLEVBRW5FLGFBQWEsRUFBRyxDQUNaLElBQVEsU0FBVSxLQUNkLEVBQUksRUFBTSxPQUNkLE1BQU8sSUFBSyxDQUNSLElBQU0sRUFBSSxFQUFNLEdBQUcsY0FBYyxFQUNqQyxHQUFJLE1BQU0sUUFBUSxDQUFDLEVBQ2YsRUFBTSxPQUFPLEVBQUcsRUFBRyxHQUFHLENBQUMsRUFDdEIsUUFBSSxFQUNMLEVBQU0sR0FBSyxFQUVYLE9BQU0sT0FBTyxFQUFHLENBQUMsRUFFekIsT0FBTyxFQUFNLE9BQVMsRUFBSSxLQUFPLE9BRXJDLGFBQWEsQ0FBQyxFQUFPLEVBQVcsQ0FDNUIsSUFBUSxTQUFVLEtBQ2QsRUFBSSxFQUFNLE9BQ2QsTUFBTyxJQUFLLENBRVIsSUFBTSxFQUFJLEVBQU0sR0FDaEIsR0FBSSxFQUFFLGNBQWMsRUFBTyxDQUFTLEVBQ2hDLFNBQ0osR0FBYyxFQUFPLEVBQUUsS0FBSyxFQUM1QixFQUFNLE9BQU8sRUFBRyxDQUFDLEVBRXJCLE9BQU8sRUFBTSxPQUFTLEVBQUksS0FBTyxVQUVqQyxNQUFLLEVBQUcsQ0FDUixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUMsRUFBTyxJQUFNLEdBQVMsRUFBTyxFQUFFLEtBQUssRUFBRyxDQUFDLENBQUMsRUFFM0UsQ0FDQSxNQUFNLFdBQWtCLEVBQVcsQ0FDL0IsTUFBTSxDQUFDLEVBQU0sQ0FDVCxNQUFPLElBQU0sRUFBSyxHQUFLLE1BQU0sT0FBTyxDQUFJLEVBQUksSUFBTSxFQUFLLEdBRS9ELENBQ0EsTUFBTSxXQUFhLEVBQVcsQ0FDOUIsQ0FDQSxNQUFNLFdBQWEsRUFBVSxDQUM3QixDQUNBLEdBQUssS0FBTyxPQUNaLE1BQU0sV0FBVyxFQUFVLENBQ3ZCLFdBQVcsQ0FBQyxFQUFXLEVBQU8sQ0FDMUIsTUFBTSxDQUFLLEVBQ1gsS0FBSyxVQUFZLEVBRXJCLE1BQU0sQ0FBQyxFQUFNLENBQ1QsSUFBSSxFQUFPLE1BQU0sS0FBSyxhQUFlLE1BQU0sT0FBTyxDQUFJLEVBQ3RELEdBQUksS0FBSyxLQUNMLEdBQVEsUUFBVSxLQUFLLEtBQUssT0FBTyxDQUFJLEVBQzNDLE9BQU8sRUFFWCxhQUFhLEVBQUcsQ0FDWixNQUFNLGNBQWMsRUFDcEIsSUFBTSxFQUFPLEtBQUssVUFDbEIsR0FBSSxJQUFTLEdBQ1QsT0FBTyxLQUFLLE1BQ2hCLElBQUksRUFBSSxLQUFLLEtBQ2IsR0FBSSxFQUFHLENBQ0gsSUFBTSxFQUFLLEVBQUUsY0FBYyxFQUMzQixFQUFJLEtBQUssS0FBTyxNQUFNLFFBQVEsQ0FBRSxFQUFJLElBQUksR0FBSyxDQUFFLEVBQUksRUFFdkQsR0FBSSxFQUFHLENBQ0gsR0FBSSxJQUFTLEdBQ1QsT0FBTyxhQUFhLEdBQUssRUFBSSxFQUFFLE1BQ25DLEdBQUksS0FBSyxNQUFNLE9BQ1gsT0FBTyxLQUNYLE9BQU8sSUFBSSxHQUFHLEdBQUksQ0FBSSxFQUFHLGFBQWEsR0FBSyxDQUFDLENBQUMsRUFBSSxFQUFFLEtBQUssRUFFNUQsR0FBSSxJQUFTLElBQVMsQ0FBQyxLQUFLLE1BQU0sT0FDOUIsT0FDSixPQUFPLEtBRVgsYUFBYSxDQUFDLEVBQU8sRUFBVyxDQUM1QixJQUFJLEVBRUosR0FEQSxLQUFLLE1BQVEsRUFBSyxLQUFLLFFBQVUsTUFBUSxJQUFZLE9BQVMsT0FBSSxFQUFHLGNBQWMsRUFBTyxDQUFTLEVBQy9GLEVBQUUsTUFBTSxjQUFjLEVBQU8sQ0FBUyxHQUFLLEtBQUssTUFDaEQsT0FFSixPQURBLEtBQUssVUFBWSxHQUFhLEtBQUssVUFBVyxFQUFPLENBQVMsRUFDdkQsUUFFUCxNQUFLLEVBQUcsQ0FDUixJQUFNLEVBQVEsTUFBTSxNQUVwQixHQURBLEdBQWEsRUFBTyxLQUFLLFNBQVMsRUFDOUIsS0FBSyxLQUNMLEdBQVMsRUFBTyxLQUFLLEtBQUssS0FBSyxFQUNuQyxPQUFPLEVBRWYsQ0FDQSxHQUFHLEtBQU8sS0FDVixNQUFNLFdBQVksRUFBVSxDQUM1QixDQUNBLEdBQUksS0FBTyxNQUNYLE1BQU0sV0FBZ0IsRUFBSSxDQUN0QixXQUFXLENBQUMsRUFBVyxDQUNuQixNQUFNLEVBQ04sS0FBSyxVQUFZLEVBRXJCLE1BQU0sQ0FBQyxFQUFNLENBQ1QsTUFBTyxPQUFPLEtBQUssYUFBZSxNQUFNLE9BQU8sQ0FBSSxFQUV2RCxhQUFhLENBQUMsRUFBTyxFQUFXLENBQzVCLEdBQUksQ0FBQyxNQUFNLGNBQWMsRUFBTyxDQUFTLEVBQ3JDLE9BRUosT0FEQSxLQUFLLFVBQVksR0FBYSxLQUFLLFVBQVcsRUFBTyxDQUFTLEVBQ3ZELFFBRVAsTUFBSyxFQUFHLENBQ1IsT0FBTyxHQUFTLE1BQU0sTUFBTyxLQUFLLFVBQVUsS0FBSyxFQUV6RCxDQUNBLE1BQU0sV0FBaUIsRUFBSSxDQUN2QixXQUFXLENBQUMsRUFBUyxFQUFNLEVBQU0sRUFBSSxDQUNqQyxNQUFNLEVBQ04sS0FBSyxRQUFVLEVBQ2YsS0FBSyxLQUFPLEVBQ1osS0FBSyxLQUFPLEVBQ1osS0FBSyxHQUFLLEVBRWQsTUFBTSxDQUFDLEVBQU0sQ0FDVCxJQUFNLEVBQVUsRUFBSyxJQUFjLFlBQVMsSUFBTSxLQUFLLFNBQy9DLE9BQU0sT0FBTSxNQUFPLEtBQzNCLE1BQU8sT0FBTyxLQUFXLEtBQVEsTUFBUyxLQUFRLE1BQU8sT0FBWSxNQUFNLE9BQU8sQ0FBSSxLQUV0RixNQUFLLEVBQUcsQ0FDUixJQUFNLEVBQVEsR0FBYSxNQUFNLE1BQU8sS0FBSyxJQUFJLEVBQ2pELE9BQU8sR0FBYSxFQUFPLEtBQUssRUFBRSxFQUUxQyxDQUNBLE1BQU0sV0FBZ0IsRUFBSSxDQUN0QixXQUFXLENBQUMsRUFBTSxFQUFTLEVBQU0sRUFBVSxDQUN2QyxNQUFNLEVBQ04sS0FBSyxLQUFPLEVBQ1osS0FBSyxRQUFVLEVBQ2YsS0FBSyxLQUFPLEVBQ1osS0FBSyxTQUFXLEVBRXBCLE1BQU0sQ0FBQyxFQUFNLENBQ1QsTUFBTyxPQUFPLEtBQUssV0FBVyxLQUFLLFFBQVEsS0FBSyxRQUFRLEtBQUssWUFBYyxNQUFNLE9BQU8sQ0FBSSxFQUVoRyxhQUFhLENBQUMsRUFBTyxFQUFXLENBQzVCLEdBQUksQ0FBQyxNQUFNLGNBQWMsRUFBTyxDQUFTLEVBQ3JDLE9BRUosT0FEQSxLQUFLLFNBQVcsR0FBYSxLQUFLLFNBQVUsRUFBTyxDQUFTLEVBQ3JELFFBRVAsTUFBSyxFQUFHLENBQ1IsT0FBTyxHQUFTLE1BQU0sTUFBTyxLQUFLLFNBQVMsS0FBSyxFQUV4RCxDQUNBLE1BQU0sV0FBYSxFQUFVLENBQ3pCLFdBQVcsQ0FBQyxFQUFNLEVBQU0sRUFBTyxDQUMzQixNQUFNLEVBQ04sS0FBSyxLQUFPLEVBQ1osS0FBSyxLQUFPLEVBQ1osS0FBSyxNQUFRLEVBRWpCLE1BQU0sQ0FBQyxFQUFNLENBRVQsTUFBTyxHQURRLEtBQUssTUFBUSxTQUFXLGNBQ1gsS0FBSyxRQUFRLEtBQUssUUFBVSxNQUFNLE9BQU8sQ0FBSSxFQUVqRixDQUNBLEdBQUssS0FBTyxPQUNaLE1BQU0sV0FBZSxFQUFXLENBQzVCLE1BQU0sQ0FBQyxFQUFNLENBQ1QsTUFBTyxVQUFZLE1BQU0sT0FBTyxDQUFJLEVBRTVDLENBQ0EsR0FBTyxLQUFPLFNBQ2QsTUFBTSxXQUFZLEVBQVUsQ0FDeEIsTUFBTSxDQUFDLEVBQU0sQ0FDVCxJQUFJLEVBQU8sTUFBUSxNQUFNLE9BQU8sQ0FBSSxFQUNwQyxHQUFJLEtBQUssTUFDTCxHQUFRLEtBQUssTUFBTSxPQUFPLENBQUksRUFDbEMsR0FBSSxLQUFLLFFBQ0wsR0FBUSxLQUFLLFFBQVEsT0FBTyxDQUFJLEVBQ3BDLE9BQU8sRUFFWCxhQUFhLEVBQUcsQ0FDWixJQUFJLEVBQUksRUFJUixPQUhBLE1BQU0sY0FBYyxHQUNuQixFQUFLLEtBQUssU0FBVyxNQUFRLElBQVksUUFBYSxFQUFHLGNBQWMsR0FDdkUsRUFBSyxLQUFLLFdBQWEsTUFBUSxJQUFZLFFBQWEsRUFBRyxjQUFjLEVBQ25FLEtBRVgsYUFBYSxDQUFDLEVBQU8sRUFBVyxDQUM1QixJQUFJLEVBQUksRUFJUixPQUhBLE1BQU0sY0FBYyxFQUFPLENBQVMsR0FDbkMsRUFBSyxLQUFLLFNBQVcsTUFBUSxJQUFZLFFBQWEsRUFBRyxjQUFjLEVBQU8sQ0FBUyxHQUN2RixFQUFLLEtBQUssV0FBYSxNQUFRLElBQVksUUFBYSxFQUFHLGNBQWMsRUFBTyxDQUFTLEVBQ25GLFFBRVAsTUFBSyxFQUFHLENBQ1IsSUFBTSxFQUFRLE1BQU0sTUFDcEIsR0FBSSxLQUFLLE1BQ0wsR0FBUyxFQUFPLEtBQUssTUFBTSxLQUFLLEVBQ3BDLEdBQUksS0FBSyxRQUNMLEdBQVMsRUFBTyxLQUFLLFFBQVEsS0FBSyxFQUN0QyxPQUFPLEVBRWYsQ0FDQSxNQUFNLFdBQWMsRUFBVSxDQUMxQixXQUFXLENBQUMsRUFBTyxDQUNmLE1BQU0sRUFDTixLQUFLLE1BQVEsRUFFakIsTUFBTSxDQUFDLEVBQU0sQ0FDVCxNQUFPLFNBQVMsS0FBSyxTQUFXLE1BQU0sT0FBTyxDQUFJLEVBRXpELENBQ0EsR0FBTSxLQUFPLFFBQ2IsTUFBTSxXQUFnQixFQUFVLENBQzVCLE1BQU0sQ0FBQyxFQUFNLENBQ1QsTUFBTyxVQUFZLE1BQU0sT0FBTyxDQUFJLEVBRTVDLENBQ0EsR0FBUSxLQUFPLFVBQ2YsTUFBTSxFQUFRLENBQ1YsV0FBVyxDQUFDLEVBQVUsRUFBTyxDQUFDLEVBQUcsQ0FDN0IsS0FBSyxRQUFVLENBQUMsRUFDaEIsS0FBSyxhQUFlLENBQUMsRUFDckIsS0FBSyxXQUFhLENBQUMsRUFDbkIsS0FBSyxLQUFPLElBQUssRUFBTSxHQUFJLEVBQUssTUFBUTtBQUFBLEVBQU8sRUFBRyxFQUNsRCxLQUFLLFVBQVksRUFDakIsS0FBSyxPQUFTLElBQVksU0FBTSxDQUFFLE9BQVEsQ0FBUyxDQUFDLEVBQ3BELEtBQUssT0FBUyxDQUFDLElBQUksRUFBTSxFQUU3QixRQUFRLEVBQUcsQ0FDUCxPQUFPLEtBQUssTUFBTSxPQUFPLEtBQUssSUFBSSxFQUd0QyxJQUFJLENBQUMsRUFBUSxDQUNULE9BQU8sS0FBSyxPQUFPLEtBQUssQ0FBTSxFQUdsQyxTQUFTLENBQUMsRUFBUSxDQUNkLE9BQU8sS0FBSyxVQUFVLEtBQUssQ0FBTSxFQUdyQyxVQUFVLENBQUMsRUFBYyxFQUFPLENBQzVCLElBQU0sRUFBTyxLQUFLLFVBQVUsTUFBTSxFQUFjLENBQUssRUFHckQsT0FGVyxLQUFLLFFBQVEsRUFBSyxVQUFZLEtBQUssUUFBUSxFQUFLLFFBQVUsSUFBSSxNQUN0RSxJQUFJLENBQUksRUFDSixFQUVYLGFBQWEsQ0FBQyxFQUFRLEVBQVUsQ0FDNUIsT0FBTyxLQUFLLFVBQVUsU0FBUyxFQUFRLENBQVEsRUFJbkQsU0FBUyxDQUFDLEVBQVcsQ0FDakIsT0FBTyxLQUFLLFVBQVUsVUFBVSxFQUFXLEtBQUssT0FBTyxFQUUzRCxTQUFTLEVBQUcsQ0FDUixPQUFPLEtBQUssVUFBVSxVQUFVLEtBQUssT0FBTyxFQUVoRCxJQUFJLENBQUMsRUFBUyxFQUFjLEVBQUssRUFBVSxDQUN2QyxJQUFNLEVBQU8sS0FBSyxPQUFPLE9BQU8sQ0FBWSxFQUM1QyxHQUFJLElBQVEsUUFBYSxFQUNyQixLQUFLLFdBQVcsRUFBSyxLQUFPLEVBRWhDLE9BREEsS0FBSyxVQUFVLElBQUksR0FBSSxFQUFTLEVBQU0sQ0FBRyxDQUFDLEVBQ25DLEVBR1gsS0FBSyxDQUFDLEVBQWMsRUFBSyxFQUFXLENBQ2hDLE9BQU8sS0FBSyxLQUFhLFlBQVMsTUFBTyxFQUFjLEVBQUssQ0FBUyxFQUd6RSxHQUFHLENBQUMsRUFBYyxFQUFLLEVBQVcsQ0FDOUIsT0FBTyxLQUFLLEtBQWEsWUFBUyxJQUFLLEVBQWMsRUFBSyxDQUFTLEVBR3ZFLEdBQUcsQ0FBQyxFQUFjLEVBQUssRUFBVyxDQUM5QixPQUFPLEtBQUssS0FBYSxZQUFTLElBQUssRUFBYyxFQUFLLENBQVMsRUFHdkUsTUFBTSxDQUFDLEVBQUssRUFBSyxFQUFhLENBQzFCLE9BQU8sS0FBSyxVQUFVLElBQUksR0FBTyxFQUFLLEVBQUssQ0FBVyxDQUFDLEVBRzNELEdBQUcsQ0FBQyxFQUFLLEVBQUssQ0FDVixPQUFPLEtBQUssVUFBVSxJQUFJLEdBQVMsRUFBSyxFQUFRLFVBQVUsSUFBSyxDQUFHLENBQUMsRUFHdkUsSUFBSSxDQUFDLEVBQUcsQ0FDSixHQUFJLE9BQU8sR0FBSyxXQUNaLEVBQUUsRUFDRCxRQUFJLElBQWEsTUFDbEIsS0FBSyxVQUFVLElBQUksR0FBUSxDQUFDLENBQUMsRUFDakMsT0FBTyxLQUdYLE1BQU0sSUFBSSxFQUFXLENBQ2pCLElBQU0sRUFBTyxDQUFDLEdBQUcsRUFDakIsUUFBWSxFQUFLLEtBQVUsRUFBVyxDQUNsQyxHQUFJLEVBQUssT0FBUyxFQUNkLEVBQUssS0FBSyxHQUFHLEVBRWpCLEdBREEsRUFBSyxLQUFLLENBQUcsRUFDVCxJQUFRLEdBQVMsS0FBSyxLQUFLLElBQzNCLEVBQUssS0FBSyxHQUFHLEVBQ0YsYUFBWSxFQUFNLENBQUssRUFJMUMsT0FEQSxFQUFLLEtBQUssR0FBRyxFQUNOLElBQVcsUUFBTSxDQUFJLEVBR2hDLEVBQUUsQ0FBQyxFQUFXLEVBQVUsRUFBVSxDQUU5QixHQURBLEtBQUssV0FBVyxJQUFJLEdBQUcsQ0FBUyxDQUFDLEVBQzdCLEdBQVksRUFDWixLQUFLLEtBQUssQ0FBUSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQVEsRUFBRSxNQUFNLEVBRS9DLFFBQUksRUFDTCxLQUFLLEtBQUssQ0FBUSxFQUFFLE1BQU0sRUFFekIsUUFBSSxFQUNMLE1BQVUsTUFBTSwwQ0FBMEMsRUFFOUQsT0FBTyxLQUdYLE1BQU0sQ0FBQyxFQUFXLENBQ2QsT0FBTyxLQUFLLFVBQVUsSUFBSSxHQUFHLENBQVMsQ0FBQyxFQUczQyxJQUFJLEVBQUcsQ0FDSCxPQUFPLEtBQUssVUFBVSxJQUFJLEVBQU0sRUFHcEMsS0FBSyxFQUFHLENBQ0osT0FBTyxLQUFLLGNBQWMsR0FBSSxFQUFJLEVBRXRDLElBQUksQ0FBQyxFQUFNLEVBQVMsQ0FFaEIsR0FEQSxLQUFLLFdBQVcsQ0FBSSxFQUNoQixFQUNBLEtBQUssS0FBSyxDQUFPLEVBQUUsT0FBTyxFQUM5QixPQUFPLEtBR1gsR0FBRyxDQUFDLEVBQVcsRUFBUyxDQUNwQixPQUFPLEtBQUssS0FBSyxJQUFJLEdBQVEsQ0FBUyxFQUFHLENBQU8sRUFHcEQsUUFBUSxDQUFDLEVBQWMsRUFBTSxFQUFJLEVBQVMsRUFBVSxLQUFLLEtBQUssSUFBYyxZQUFTLElBQWMsWUFBUyxJQUFLLENBQzdHLElBQU0sRUFBTyxLQUFLLE9BQU8sT0FBTyxDQUFZLEVBQzVDLE9BQU8sS0FBSyxLQUFLLElBQUksR0FBUyxFQUFTLEVBQU0sRUFBTSxDQUFFLEVBQUcsSUFBTSxFQUFRLENBQUksQ0FBQyxFQUcvRSxLQUFLLENBQUMsRUFBYyxFQUFVLEVBQVMsRUFBa0IsWUFBUyxNQUFPLENBQ3JFLElBQU0sRUFBTyxLQUFLLE9BQU8sT0FBTyxDQUFZLEVBQzVDLEdBQUksS0FBSyxLQUFLLElBQUssQ0FDZixJQUFNLEVBQU0sYUFBMkIsT0FBTyxFQUFXLEtBQUssSUFBSSxPQUFRLENBQVEsRUFDbEYsT0FBTyxLQUFLLFNBQVMsS0FBTSxFQUFJLEFBQVUsTUFBTSxXQUFjLENBQUMsSUFBTSxDQUNoRSxLQUFLLElBQUksRUFBTyxBQUFVLE1BQU0sS0FBTyxJQUFJLEVBQzNDLEVBQVEsQ0FBSSxFQUNmLEVBRUwsT0FBTyxLQUFLLEtBQUssSUFBSSxHQUFRLEtBQU0sRUFBUyxFQUFNLENBQVEsRUFBRyxJQUFNLEVBQVEsQ0FBSSxDQUFDLEVBSXBGLEtBQUssQ0FBQyxFQUFjLEVBQUssRUFBUyxFQUFVLEtBQUssS0FBSyxJQUFjLFlBQVMsSUFBYyxZQUFTLE1BQU8sQ0FDdkcsR0FBSSxLQUFLLEtBQUssY0FDVixPQUFPLEtBQUssTUFBTSxFQUFlLEFBQVUsa0JBQWtCLEtBQVEsQ0FBTyxFQUVoRixJQUFNLEVBQU8sS0FBSyxPQUFPLE9BQU8sQ0FBWSxFQUM1QyxPQUFPLEtBQUssS0FBSyxJQUFJLEdBQVEsS0FBTSxFQUFTLEVBQU0sQ0FBRyxFQUFHLElBQU0sRUFBUSxDQUFJLENBQUMsRUFHL0UsTUFBTSxFQUFHLENBQ0wsT0FBTyxLQUFLLGNBQWMsRUFBRyxFQUdqQyxLQUFLLENBQUMsRUFBTyxDQUNULE9BQU8sS0FBSyxVQUFVLElBQUksR0FBTSxDQUFLLENBQUMsRUFHMUMsS0FBSyxDQUFDLEVBQU8sQ0FDVCxPQUFPLEtBQUssVUFBVSxJQUFJLEdBQU0sQ0FBSyxDQUFDLEVBRzFDLE1BQU0sQ0FBQyxFQUFPLENBQ1YsSUFBTSxFQUFPLElBQUksR0FHakIsR0FGQSxLQUFLLFdBQVcsQ0FBSSxFQUNwQixLQUFLLEtBQUssQ0FBSyxFQUNYLEVBQUssTUFBTSxTQUFXLEVBQ3RCLE1BQVUsTUFBTSx3Q0FBd0MsRUFDNUQsT0FBTyxLQUFLLGNBQWMsRUFBTSxFQUdwQyxHQUFHLENBQUMsRUFBUyxFQUFXLEVBQWEsQ0FDakMsR0FBSSxDQUFDLEdBQWEsQ0FBQyxFQUNmLE1BQVUsTUFBTSw4Q0FBOEMsRUFDbEUsSUFBTSxFQUFPLElBQUksR0FHakIsR0FGQSxLQUFLLFdBQVcsQ0FBSSxFQUNwQixLQUFLLEtBQUssQ0FBTyxFQUNiLEVBQVcsQ0FDWCxJQUFNLEVBQVEsS0FBSyxLQUFLLEdBQUcsRUFDM0IsS0FBSyxVQUFZLEVBQUssTUFBUSxJQUFJLEdBQU0sQ0FBSyxFQUM3QyxFQUFVLENBQUssRUFFbkIsR0FBSSxFQUNBLEtBQUssVUFBWSxFQUFLLFFBQVUsSUFBSSxHQUNwQyxLQUFLLEtBQUssQ0FBVyxFQUV6QixPQUFPLEtBQUssY0FBYyxHQUFPLEVBQU8sRUFHNUMsS0FBSyxDQUFDLEVBQU8sQ0FDVCxPQUFPLEtBQUssVUFBVSxJQUFJLEdBQU0sQ0FBSyxDQUFDLEVBRzFDLEtBQUssQ0FBQyxFQUFNLEVBQVcsQ0FFbkIsR0FEQSxLQUFLLGFBQWEsS0FBSyxLQUFLLE9BQU8sTUFBTSxFQUNyQyxFQUNBLEtBQUssS0FBSyxDQUFJLEVBQUUsU0FBUyxDQUFTLEVBQ3RDLE9BQU8sS0FHWCxRQUFRLENBQUMsRUFBVyxDQUNoQixJQUFNLEVBQU0sS0FBSyxhQUFhLElBQUksRUFDbEMsR0FBSSxJQUFRLE9BQ1IsTUFBVSxNQUFNLHNDQUFzQyxFQUMxRCxJQUFNLEVBQVUsS0FBSyxPQUFPLE9BQVMsRUFDckMsR0FBSSxFQUFVLEdBQU0sSUFBYyxRQUFhLElBQVksRUFDdkQsTUFBVSxNQUFNLG1DQUFtQyxRQUFjLFlBQW9CLEVBR3pGLE9BREEsS0FBSyxPQUFPLE9BQVMsRUFDZCxLQUdYLElBQUksQ0FBQyxFQUFNLEVBQWMsTUFBSyxFQUFPLEVBQVUsQ0FFM0MsR0FEQSxLQUFLLFdBQVcsSUFBSSxHQUFLLEVBQU0sRUFBTSxDQUFLLENBQUMsRUFDdkMsRUFDQSxLQUFLLEtBQUssQ0FBUSxFQUFFLFFBQVEsRUFDaEMsT0FBTyxLQUdYLE9BQU8sRUFBRyxDQUNOLE9BQU8sS0FBSyxjQUFjLEVBQUksRUFFbEMsUUFBUSxDQUFDLEVBQUksRUFBRyxDQUNaLE1BQU8sS0FBTSxFQUNULEtBQUssTUFBTSxjQUFjLEVBQ3pCLEtBQUssTUFBTSxjQUFjLEtBQUssTUFBTSxNQUFPLEtBQUssVUFBVSxFQUdsRSxTQUFTLENBQUMsRUFBTSxDQUVaLE9BREEsS0FBSyxVQUFVLE1BQU0sS0FBSyxDQUFJLEVBQ3ZCLEtBRVgsVUFBVSxDQUFDLEVBQU0sQ0FDYixLQUFLLFVBQVUsTUFBTSxLQUFLLENBQUksRUFDOUIsS0FBSyxPQUFPLEtBQUssQ0FBSSxFQUV6QixhQUFhLENBQUMsRUFBSSxFQUFJLENBQ2xCLElBQU0sRUFBSSxLQUFLLFVBQ2YsR0FBSSxhQUFhLEdBQU8sR0FBTSxhQUFhLEVBRXZDLE9BREEsS0FBSyxPQUFPLElBQUksRUFDVCxLQUVYLE1BQVUsTUFBTSwwQkFBMEIsRUFBSyxHQUFHLEVBQUcsUUFBUSxFQUFHLE9BQVMsRUFBRyxPQUFPLEVBRXZGLFNBQVMsQ0FBQyxFQUFNLENBQ1osSUFBTSxFQUFJLEtBQUssVUFDZixHQUFJLEVBQUUsYUFBYSxJQUNmLE1BQVUsTUFBTSw4QkFBOEIsRUFHbEQsT0FEQSxLQUFLLFVBQVksRUFBRSxLQUFPLEVBQ25CLFFBRVAsTUFBSyxFQUFHLENBQ1IsT0FBTyxLQUFLLE9BQU8sTUFFbkIsVUFBUyxFQUFHLENBQ1osSUFBTSxFQUFLLEtBQUssT0FDaEIsT0FBTyxFQUFHLEVBQUcsT0FBUyxNQUV0QixVQUFTLENBQUMsRUFBTSxDQUNoQixJQUFNLEVBQUssS0FBSyxPQUNoQixFQUFHLEVBQUcsT0FBUyxHQUFLLEVBRTVCLENBQ0EsRUFBUSxRQUFVLEdBQ2xCLFNBQVMsRUFBUSxDQUFDLEVBQU8sRUFBTSxDQUMzQixRQUFXLEtBQUssRUFDWixFQUFNLElBQU0sRUFBTSxJQUFNLElBQU0sRUFBSyxJQUFNLEdBQzdDLE9BQU8sRUFFWCxTQUFTLEVBQVksQ0FBQyxFQUFPLEVBQU0sQ0FDL0IsT0FBTyxhQUF1QixjQUFjLEdBQVMsRUFBTyxFQUFLLEtBQUssRUFBSSxFQUU5RSxTQUFTLEVBQVksQ0FBQyxFQUFNLEVBQU8sRUFBVyxDQUMxQyxHQUFJLGFBQXVCLE9BQ3ZCLE9BQU8sRUFBWSxDQUFJLEVBQzNCLEdBQUksQ0FBQyxFQUFZLENBQUksRUFDakIsT0FBTyxFQUNYLE9BQU8sSUFBVyxRQUFNLEVBQUssT0FBTyxPQUFPLENBQUMsRUFBTyxJQUFNLENBQ3JELEdBQUksYUFBb0IsT0FDcEIsRUFBSSxFQUFZLENBQUMsRUFDckIsR0FBSSxhQUFvQixRQUNwQixFQUFNLEtBQUssR0FBRyxFQUFFLE1BQU0sRUFFdEIsT0FBTSxLQUFLLENBQUMsRUFDaEIsT0FBTyxHQUNSLENBQUMsQ0FBQyxDQUFDLEVBQ04sU0FBUyxDQUFXLENBQUMsRUFBRyxDQUNwQixJQUFNLEVBQUksRUFBVSxFQUFFLEtBQ3RCLEdBQUksSUFBTSxRQUFhLEVBQU0sRUFBRSxPQUFTLEVBQ3BDLE9BQU8sRUFFWCxPQURBLE9BQU8sRUFBTSxFQUFFLEtBQ1IsRUFFWCxTQUFTLENBQVcsQ0FBQyxFQUFHLENBQ3BCLE9BQVEsYUFBb0IsU0FDeEIsRUFBRSxPQUFPLEtBQUssQ0FBQyxJQUFNLGFBQW9CLFFBQVEsRUFBTSxFQUFFLE9BQVMsR0FBSyxFQUFVLEVBQUUsT0FBUyxNQUFTLEdBR2pILFNBQVMsRUFBYSxDQUFDLEVBQU8sRUFBTSxDQUNoQyxRQUFXLEtBQUssRUFDWixFQUFNLElBQU0sRUFBTSxJQUFNLElBQU0sRUFBSyxJQUFNLEdBRWpELFNBQVMsRUFBRyxDQUFDLEVBQUcsQ0FDWixPQUFPLE9BQU8sR0FBSyxXQUFhLE9BQU8sR0FBSyxVQUFZLElBQU0sS0FBTyxDQUFDLEVBQUssQUFBVSxPQUFPLEdBQUksQ0FBQyxJQUVyRyxFQUFRLElBQU0sR0FDZCxJQUFNLEdBQVUsR0FBUSxFQUFRLFVBQVUsR0FBRyxFQUU3QyxTQUFTLEVBQUcsSUFBSSxFQUFNLENBQ2xCLE9BQU8sRUFBSyxPQUFPLEVBQU8sRUFFOUIsRUFBUSxJQUFNLEdBQ2QsSUFBTSxHQUFTLEdBQVEsRUFBUSxVQUFVLEVBQUUsRUFFM0MsU0FBUyxFQUFFLElBQUksRUFBTSxDQUNqQixPQUFPLEVBQUssT0FBTyxFQUFNLEVBRTdCLEVBQVEsR0FBSyxHQUNiLFNBQVMsRUFBTyxDQUFDLEVBQUksQ0FDakIsTUFBTyxDQUFDLEVBQUcsSUFBTyxJQUFhLE1BQU0sRUFBSSxJQUFhLE1BQU0sRUFBSyxBQUFVLE1BQU0sR0FBSSxDQUFDLEtBQUssS0FBTSxHQUFJLENBQUMsSUFFMUcsU0FBUyxFQUFHLENBQUMsRUFBRyxDQUNaLE9BQU8sYUFBb0IsT0FBTyxFQUFLLEFBQVUsT0FBTyw2QkNyckI1RCxPQUFPLGVBQWUsRUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsRUFBUSxnQkFBa0IsRUFBUSxhQUFlLEVBQVEsS0FBTyxFQUFRLFFBQVUsRUFBUSxhQUFlLEVBQVEscUJBQXVCLEVBQVEsZUFBaUIsRUFBUSxTQUFXLEVBQVEsb0JBQXNCLEVBQVEsa0JBQW9CLEVBQVEsZUFBaUIsRUFBUSxpQkFBbUIsRUFBUSxlQUFpQixFQUFRLHFCQUF1QixFQUFRLGVBQWlCLEVBQVEsa0JBQW9CLEVBQVEsa0JBQW9CLEVBQVEsT0FBYyxPQUNqYyxJQUFNLE1BQ0EsUUFFTixTQUFTLEVBQU0sQ0FBQyxFQUFLLENBQ2pCLElBQU0sRUFBTyxDQUFDLEVBQ2QsUUFBVyxLQUFRLEVBQ2YsRUFBSyxHQUFRLEdBQ2pCLE9BQU8sRUFFWCxFQUFRLE9BQVMsR0FDakIsU0FBUyxFQUFpQixDQUFDLEVBQUksRUFBUSxDQUNuQyxHQUFJLE9BQU8sR0FBVSxVQUNqQixPQUFPLEVBQ1gsR0FBSSxPQUFPLEtBQUssQ0FBTSxFQUFFLFNBQVcsRUFDL0IsTUFBTyxHQUVYLE9BREEsR0FBa0IsRUFBSSxDQUFNLEVBQ3JCLENBQUMsR0FBZSxFQUFRLEVBQUcsS0FBSyxNQUFNLEdBQUcsRUFFcEQsRUFBUSxrQkFBb0IsR0FDNUIsU0FBUyxFQUFpQixDQUFDLEVBQUksRUFBUyxFQUFHLE9BQVEsQ0FDL0MsSUFBUSxPQUFNLFFBQVMsRUFDdkIsR0FBSSxDQUFDLEVBQUssYUFDTixPQUNKLEdBQUksT0FBTyxJQUFXLFVBQ2xCLE9BQ0osSUFBTSxFQUFRLEVBQUssTUFBTSxTQUN6QixRQUFXLEtBQU8sRUFDZCxHQUFJLENBQUMsRUFBTSxHQUNQLEdBQWdCLEVBQUkscUJBQXFCLElBQU0sRUFHM0QsRUFBUSxrQkFBb0IsR0FDNUIsU0FBUyxFQUFjLENBQUMsRUFBUSxFQUFPLENBQ25DLEdBQUksT0FBTyxHQUFVLFVBQ2pCLE1BQU8sQ0FBQyxFQUNaLFFBQVcsS0FBTyxFQUNkLEdBQUksRUFBTSxHQUNOLE1BQU8sR0FDZixNQUFPLEdBRVgsRUFBUSxlQUFpQixHQUN6QixTQUFTLEVBQW9CLENBQUMsRUFBUSxFQUFPLENBQ3pDLEdBQUksT0FBTyxHQUFVLFVBQ2pCLE1BQU8sQ0FBQyxFQUNaLFFBQVcsS0FBTyxFQUNkLEdBQUksSUFBUSxRQUFVLEVBQU0sSUFBSSxHQUM1QixNQUFPLEdBQ2YsTUFBTyxHQUVYLEVBQVEscUJBQXVCLEdBQy9CLFNBQVMsRUFBYyxFQUFHLGVBQWMsY0FBYyxFQUFRLEVBQVMsRUFBTyxDQUMxRSxHQUFJLENBQUMsRUFBTyxDQUNSLEdBQUksT0FBTyxHQUFVLFVBQVksT0FBTyxHQUFVLFVBQzlDLE9BQU8sRUFDWCxHQUFJLE9BQU8sR0FBVSxTQUNqQixNQUFRLENBQWEsTUFBTSxJQUVuQyxNQUFRLENBQWEsTUFBTSxJQUFlLElBQTJCLGNBQWEsQ0FBTyxJQUU3RixFQUFRLGVBQWlCLEdBQ3pCLFNBQVMsRUFBZ0IsQ0FBQyxFQUFLLENBQzNCLE9BQU8sR0FBb0IsbUJBQW1CLENBQUcsQ0FBQyxFQUV0RCxFQUFRLGlCQUFtQixHQUMzQixTQUFTLEVBQWMsQ0FBQyxFQUFLLENBQ3pCLE9BQU8sbUJBQW1CLEdBQWtCLENBQUcsQ0FBQyxFQUVwRCxFQUFRLGVBQWlCLEdBQ3pCLFNBQVMsRUFBaUIsQ0FBQyxFQUFLLENBQzVCLEdBQUksT0FBTyxHQUFPLFNBQ2QsTUFBTyxHQUFHLElBQ2QsT0FBTyxFQUFJLFFBQVEsS0FBTSxJQUFJLEVBQUUsUUFBUSxNQUFPLElBQUksRUFFdEQsRUFBUSxrQkFBb0IsR0FDNUIsU0FBUyxFQUFtQixDQUFDLEVBQUssQ0FDOUIsT0FBTyxFQUFJLFFBQVEsTUFBTyxHQUFHLEVBQUUsUUFBUSxNQUFPLEdBQUcsRUFFckQsRUFBUSxvQkFBc0IsR0FDOUIsU0FBUyxFQUFRLENBQUMsRUFBSSxFQUFHLENBQ3JCLEdBQUksTUFBTSxRQUFRLENBQUUsRUFDaEIsUUFBVyxLQUFLLEVBQ1osRUFBRSxDQUFDLEVBR1AsT0FBRSxDQUFFLEVBR1osRUFBUSxTQUFXLEdBQ25CLFNBQVMsRUFBa0IsRUFBRyxhQUFZLGNBQWEsY0FBYSxnQkFBaUIsQ0FDakYsTUFBTyxDQUFDLEVBQUssRUFBTSxFQUFJLElBQVcsQ0FDOUIsSUFBTSxFQUFNLElBQU8sT0FDYixFQUNBLGFBQXdCLFFBQ25CLGFBQTBCLE9BQU8sRUFBVyxFQUFLLEVBQU0sQ0FBRSxFQUFJLEVBQVksRUFBSyxFQUFNLENBQUUsRUFBRyxHQUMxRixhQUEwQixRQUNyQixFQUFZLEVBQUssRUFBSSxDQUFJLEVBQUcsR0FDN0IsRUFBWSxFQUFNLENBQUUsRUFDbEMsT0FBTyxJQUFxQixRQUFRLEVBQUUsYUFBeUIsUUFBUSxFQUFhLEVBQUssQ0FBRyxFQUFJLEdBR3hHLEVBQVEsZUFBaUIsQ0FDckIsTUFBTyxHQUFtQixDQUN0QixXQUFZLENBQUMsRUFBSyxFQUFNLElBQU8sRUFBSSxHQUFJLEFBQWEsTUFBTSxpQkFBa0Isa0JBQXNCLElBQU0sQ0FDcEcsRUFBSSxHQUFJLEFBQWEsTUFBTSxhQUFpQixJQUFNLEVBQUksT0FBTyxFQUFJLEVBQUksRUFBRyxJQUFNLEVBQUksT0FBTyxFQUFLLEFBQWEsTUFBTSxTQUFVLEVBQUUsS0FBTSxBQUFhLG9CQUFvQixNQUFPLElBQU8sQ0FBQyxFQUN0TCxFQUNELFlBQWEsQ0FBQyxFQUFLLEVBQU0sSUFBTyxFQUFJLEdBQUksQUFBYSxNQUFNLGFBQWUsSUFBTSxDQUM1RSxHQUFJLElBQVMsR0FDVCxFQUFJLE9BQU8sRUFBSSxFQUFJLEVBR25CLE9BQUksT0FBTyxFQUFLLEFBQWEsTUFBTSxTQUFVLEVBQzdDLEdBQWEsRUFBSyxFQUFJLENBQUksRUFFakMsRUFDRCxZQUFhLENBQUMsRUFBTSxJQUFRLElBQVMsR0FBTyxHQUFPLElBQUssS0FBUyxDQUFHLEVBQ3BFLGFBQWMsRUFDbEIsQ0FBQyxFQUNELE1BQU8sR0FBbUIsQ0FDdEIsV0FBWSxDQUFDLEVBQUssRUFBTSxJQUFPLEVBQUksR0FBSSxBQUFhLE1BQU0saUJBQWtCLGtCQUFzQixJQUFNLEVBQUksT0FBTyxFQUFLLEFBQWEsTUFBTSx1QkFBMEIsT0FBUSxPQUFVLE9BQVEsR0FBTSxDQUFDLEVBQ3RNLFlBQWEsQ0FBQyxFQUFLLEVBQU0sSUFBTyxFQUFJLEdBQUksQUFBYSxNQUFNLGFBQWUsSUFBTSxFQUFJLE9BQU8sRUFBSSxJQUFTLEdBQU8sR0FBUSxBQUFhLE1BQU0sT0FBUSxPQUFVLE9BQVEsR0FBTSxDQUFDLEVBQzNLLFlBQWEsQ0FBQyxFQUFNLElBQVEsSUFBUyxHQUFPLEdBQU8sS0FBSyxJQUFJLEVBQU0sQ0FBRSxFQUNwRSxhQUFjLENBQUMsRUFBSyxJQUFVLEVBQUksSUFBSSxRQUFTLENBQUssQ0FDeEQsQ0FBQyxDQUNMLEVBQ0EsU0FBUyxFQUFvQixDQUFDLEVBQUssRUFBSSxDQUNuQyxHQUFJLElBQU8sR0FDUCxPQUFPLEVBQUksSUFBSSxRQUFTLEVBQUksRUFDaEMsSUFBTSxFQUFRLEVBQUksSUFBSSxRQUFVLEFBQWEsT0FBTyxFQUNwRCxHQUFJLElBQU8sT0FDUCxHQUFhLEVBQUssRUFBTyxDQUFFLEVBQy9CLE9BQU8sRUFFWCxFQUFRLHFCQUF1QixHQUMvQixTQUFTLEVBQVksQ0FBQyxFQUFLLEVBQU8sRUFBSSxDQUNsQyxPQUFPLEtBQUssQ0FBRSxFQUFFLFFBQVEsQ0FBQyxJQUFNLEVBQUksT0FBUSxBQUFhLE1BQU0sSUFBc0IsY0FBYSxDQUFDLElBQUssRUFBSSxDQUFDLEVBRWhILEVBQVEsYUFBZSxHQUN2QixJQUFNLEdBQVcsQ0FBQyxFQUNsQixTQUFTLEVBQU8sQ0FBQyxFQUFLLEVBQUcsQ0FDckIsT0FBTyxFQUFJLFdBQVcsT0FBUSxDQUMxQixJQUFLLEVBQ0wsS0FBTSxHQUFTLEVBQUUsUUFBVSxHQUFTLEVBQUUsTUFBUSxJQUFXLFNBQU0sRUFBRSxJQUFJLEVBQ3pFLENBQUMsRUFFTCxFQUFRLFFBQVUsR0FDbEIsSUFBSSxJQUNILFFBQVMsQ0FBQyxFQUFNLENBQ2IsRUFBSyxFQUFLLElBQVMsR0FBSyxNQUN4QixFQUFLLEVBQUssSUFBUyxHQUFLLFFBQ3pCLEdBQU8sRUFBUSxPQUFTLEVBQVEsS0FBTyxDQUFDLEVBQUUsRUFDN0MsU0FBUyxFQUFZLENBQUMsRUFBVSxFQUFjLEVBQWtCLENBRTVELEdBQUksYUFBOEIsT0FBTSxDQUNwQyxJQUFNLEVBQVcsSUFBaUIsR0FBSyxJQUN2QyxPQUFPLEVBQ0QsRUFDSyxBQUFhLFlBQVksVUFDekIsQUFBYSxhQUFhLFdBQy9CLEVBQ0ssQUFBYSxZQUFZLElBQ3pCLEFBQWEsWUFBWSw4Q0FFeEMsT0FBTyxFQUFpQyxjQUFhLENBQVEsRUFBRSxTQUFTLEVBQUksSUFBTSxHQUFrQixDQUFRLEVBRWhILEVBQVEsYUFBZSxHQUN2QixTQUFTLEVBQWUsQ0FBQyxFQUFJLEVBQUssRUFBTyxFQUFHLEtBQUssYUFBYyxDQUMzRCxHQUFJLENBQUMsRUFDRCxPQUVKLEdBREEsRUFBTSxnQkFBZ0IsSUFDbEIsSUFBUyxHQUNULE1BQVUsTUFBTSxDQUFHLEVBQ3ZCLEVBQUcsS0FBSyxPQUFPLEtBQUssQ0FBRyxFQUUzQixFQUFRLGdCQUFrQiwyQkMvSzFCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLE9BQ0EsR0FBUSxDQUVWLEtBQU0sSUFBYyxRQUFLLE1BQU0sRUFFL0IsT0FBUSxJQUFjLFFBQUssUUFBUSxFQUNuQyxhQUFjLElBQWMsUUFBSyxjQUFjLEVBQy9DLFdBQVksSUFBYyxRQUFLLFlBQVksRUFDM0MsbUJBQW9CLElBQWMsUUFBSyxvQkFBb0IsRUFDM0QsU0FBVSxJQUFjLFFBQUssVUFBVSxFQUN2QyxlQUFnQixJQUFjLFFBQUssZ0JBQWdCLEVBRW5ELFFBQVMsSUFBYyxRQUFLLFNBQVMsRUFDckMsT0FBUSxJQUFjLFFBQUssUUFBUSxFQUNuQyxLQUFNLElBQWMsUUFBSyxNQUFNLEVBRS9CLEtBQU0sSUFBYyxRQUFLLE1BQU0sRUFDL0IsTUFBTyxJQUFjLFFBQUssT0FBTyxFQUVqQyxLQUFNLElBQWMsUUFBSyxNQUFNLEVBQy9CLFFBQVMsSUFBYyxRQUFLLFNBQVMsRUFDckMsUUFBUyxJQUFjLFFBQUssU0FBUyxFQUNyQyxTQUFVLElBQWMsUUFBSyxVQUFVLENBQzNDLEVBQ0EsR0FBUSxRQUFVLDJCQ3pCbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsYUFBZSxHQUFRLGlCQUFtQixHQUFRLGlCQUFtQixHQUFRLFlBQWMsR0FBUSxrQkFBb0IsR0FBUSxhQUFvQixPQUMzSixJQUFNLE1BQ0EsUUFDQSxRQUNOLEdBQVEsYUFBZSxDQUNuQixRQUFTLEVBQUcsYUFBZSxBQUFhLG1CQUFtQix1QkFDL0QsRUFDQSxHQUFRLGtCQUFvQixDQUN4QixRQUFTLEVBQUcsVUFBUyxnQkFBaUIsRUFDL0IsQUFBYSxTQUFTLHNCQUE0QixZQUNsRCxBQUFhLFNBQVMsK0JBQ2pDLEVBQ0EsU0FBUyxFQUFXLENBQUMsRUFBSyxFQUFRLEdBQVEsYUFBYyxFQUFZLEVBQW1CLENBQ25GLElBQVEsTUFBTyxHQUNQLE1BQUssZ0JBQWUsYUFBYyxFQUNwQyxFQUFTLEdBQWdCLEVBQUssRUFBTyxDQUFVLEVBQ3JELEdBQUksSUFBc0IsTUFBUSxJQUEyQixPQUFJLEVBQXFCLEdBQWlCLEVBQ25HLEdBQVMsRUFBSyxDQUFNLEVBR3BCLFFBQWEsRUFBSyxBQUFhLE9BQU8sSUFBUyxFQUd2RCxHQUFRLFlBQWMsR0FDdEIsU0FBUyxFQUFnQixDQUFDLEVBQUssRUFBUSxHQUFRLGFBQWMsRUFBWSxDQUNyRSxJQUFRLE1BQU8sR0FDUCxNQUFLLGdCQUFlLGFBQWMsRUFDcEMsRUFBUyxHQUFnQixFQUFLLEVBQU8sQ0FBVSxFQUVyRCxHQURBLEdBQVMsRUFBSyxDQUFNLEVBQ2hCLEVBQUUsR0FBaUIsR0FDbkIsR0FBYSxFQUFJLEdBQVEsUUFBUSxPQUFPLEVBR2hELEdBQVEsaUJBQW1CLEdBQzNCLFNBQVMsRUFBZ0IsQ0FBQyxFQUFLLEVBQVcsQ0FDdEMsRUFBSSxPQUFPLEdBQVEsUUFBUSxPQUFRLENBQVMsRUFDNUMsRUFBSSxHQUFJLEFBQWEsTUFBTSxHQUFRLFFBQVEsbUJBQW9CLElBQU0sRUFBSSxHQUFHLEVBQVcsSUFBTSxFQUFJLE9BQVEsQUFBYSxNQUFNLEdBQVEsUUFBUSxpQkFBa0IsQ0FBUyxFQUFHLElBQU0sRUFBSSxPQUFPLEdBQVEsUUFBUSxRQUFTLElBQUksQ0FBQyxDQUFDLEVBRTlOLEdBQVEsaUJBQW1CLEdBQzNCLFNBQVMsRUFBWSxFQUFHLE1BQUssVUFBUyxjQUFhLE9BQU0sWUFBVyxNQUFPLENBRXZFLEdBQUksSUFBYyxPQUNkLE1BQVUsTUFBTSwwQkFBMEIsRUFDOUMsSUFBTSxFQUFNLEVBQUksS0FBSyxLQUFLLEVBQzFCLEVBQUksU0FBUyxJQUFLLEVBQVcsR0FBUSxRQUFRLE9BQVEsQ0FBQyxJQUFNLENBSXhELEdBSEEsRUFBSSxNQUFNLEVBQU0sQUFBYSxNQUFNLEdBQVEsUUFBUSxXQUFXLElBQUksRUFDbEUsRUFBSSxHQUFJLEFBQWEsTUFBTSwrQkFBa0MsSUFBTSxFQUFJLE9BQVEsQUFBYSxNQUFNLGlCQUFrQyxZQUFXLEdBQVEsUUFBUSxhQUFjLEVBQUcsU0FBUyxDQUFDLENBQUMsRUFDM0wsRUFBSSxPQUFRLEFBQWEsTUFBTSxlQUFtQixBQUFhLFFBQVEsRUFBRyxpQkFBaUIsR0FBUyxFQUNoRyxFQUFHLEtBQUssUUFDUixFQUFJLE9BQVEsQUFBYSxNQUFNLFdBQWMsQ0FBVyxFQUN4RCxFQUFJLE9BQVEsQUFBYSxNQUFNLFNBQVksQ0FBSSxFQUV0RCxFQUVMLEdBQVEsYUFBZSxHQUN2QixTQUFTLEVBQVEsQ0FBQyxFQUFLLEVBQVEsQ0FDM0IsSUFBTSxFQUFNLEVBQUksTUFBTSxNQUFPLENBQU0sRUFDbkMsRUFBSSxHQUFJLEFBQWEsTUFBTSxHQUFRLFFBQVEsbUJBQW9CLElBQU0sRUFBSSxPQUFPLEdBQVEsUUFBUSxRQUFVLEFBQWEsT0FBTyxJQUFNLEVBQUksQUFBYSxNQUFNLEdBQVEsUUFBUSxnQkFBZ0IsSUFBTSxFQUNqTSxFQUFJLEtBQU0sQUFBYSxNQUFNLEdBQVEsUUFBUSxVQUFVLEVBRTNELFNBQVMsRUFBWSxDQUFDLEVBQUksRUFBTSxDQUM1QixJQUFRLE1BQUssZUFBYyxhQUFjLEVBQ3pDLEdBQUksRUFBVSxPQUNWLEVBQUksTUFBTyxBQUFhLFVBQVUsRUFBRyxtQkFBbUIsSUFBTyxFQUcvRCxPQUFJLE9BQVEsQUFBYSxNQUFNLFdBQXVCLENBQUksRUFDMUQsRUFBSSxPQUFPLEVBQUssRUFHeEIsSUFBTSxHQUFJLENBQ04sUUFBUyxJQUFjLE9BQUssU0FBUyxFQUNyQyxXQUFZLElBQWMsT0FBSyxZQUFZLEVBQzNDLE9BQVEsSUFBYyxPQUFLLFFBQVEsRUFDbkMsYUFBYyxJQUFjLE9BQUssY0FBYyxFQUMvQyxRQUFTLElBQWMsT0FBSyxTQUFTLEVBQ3JDLE9BQVEsSUFBYyxPQUFLLFFBQVEsRUFDbkMsYUFBYyxJQUFjLE9BQUssY0FBYyxDQUNuRCxFQUNBLFNBQVMsRUFBZSxDQUFDLEVBQUssRUFBTyxFQUFZLENBQzdDLElBQVEsZ0JBQWlCLEVBQUksR0FDN0IsR0FBSSxJQUFpQixHQUNqQixNQUFRLENBQWEsUUFDekIsT0FBTyxHQUFZLEVBQUssRUFBTyxDQUFVLEVBRTdDLFNBQVMsRUFBVyxDQUFDLEVBQUssRUFBTyxFQUFhLENBQUMsRUFBRyxDQUM5QyxJQUFRLE1BQUssTUFBTyxFQUNkLEVBQVksQ0FDZCxHQUFrQixFQUFJLENBQVUsRUFDaEMsR0FBZ0IsRUFBSyxDQUFVLENBQ25DLEVBRUEsT0FEQSxHQUFnQixFQUFLLEVBQU8sQ0FBUyxFQUM5QixFQUFJLE9BQU8sR0FBRyxDQUFTLEVBRWxDLFNBQVMsRUFBaUIsRUFBRyxjQUFlLGdCQUFnQixDQUN4RCxJQUFNLEVBQVcsRUFDVixBQUFhLFFBQVEsSUFBdUIsZ0JBQWMsRUFBcUIsUUFBSyxHQUFHLElBQ3hGLEVBQ04sTUFBTyxDQUFDLEdBQVEsUUFBUSxhQUE0QixZQUFXLEdBQVEsUUFBUSxhQUFjLENBQVEsQ0FBQyxFQUUxRyxTQUFTLEVBQWUsRUFBRyxVQUFTLElBQU0sbUJBQXFCLGFBQVksZ0JBQWdCLENBQ3ZGLElBQUksRUFBVSxFQUFlLEVBQWlCLEFBQWEsUUFBUSxLQUFpQixJQUNwRixHQUFJLEVBQ0EsRUFBVyxBQUFhLFFBQVEsSUFBcUIsZ0JBQWMsRUFBbUIsUUFBSyxHQUFHLElBRWxHLE1BQU8sQ0FBQyxHQUFFLFdBQVksQ0FBTyxFQUVqQyxTQUFTLEVBQWUsQ0FBQyxHQUFPLFNBQVEsV0FBVyxFQUFXLENBQzFELElBQVEsVUFBUyxPQUFNLGNBQWEsTUFBTyxHQUNuQyxPQUFNLGVBQWMsZUFBYyxjQUFlLEVBRXpELEdBREEsRUFBVSxLQUFLLENBQUMsR0FBRSxRQUFTLENBQU8sRUFBRyxDQUFDLEdBQUUsT0FBUSxPQUFPLEdBQVUsV0FBYSxFQUFPLENBQUcsRUFBSSxHQUFXLEFBQWEsT0FBTyxDQUFDLEVBQ3hILEVBQUssU0FDTCxFQUFVLEtBQUssQ0FBQyxHQUFFLFFBQVMsT0FBTyxHQUFXLFdBQWEsRUFBUSxDQUFHLEVBQUksQ0FBTyxDQUFDLEVBRXJGLEdBQUksRUFBSyxRQUNMLEVBQVUsS0FBSyxDQUFDLEdBQUUsT0FBUSxDQUFXLEVBQUcsQ0FBQyxHQUFFLGFBQWUsQUFBYSxNQUFNLElBQWUsR0FBWSxFQUFHLENBQUMsR0FBUSxRQUFRLEtBQU0sQ0FBSSxDQUFDLEVBRTNJLEdBQUksRUFDQSxFQUFVLEtBQUssQ0FBQyxHQUFFLGFBQWMsQ0FBWSxDQUFDLDJCQ3ZIckQsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsa0JBQW9CLEdBQVEscUJBQTRCLE9BQ2hFLElBQU0sUUFDQSxPQUNBLFFBQ0EsR0FBWSxDQUNkLFFBQVMseUJBQ2IsRUFDQSxTQUFTLEVBQW9CLENBQUMsRUFBSSxDQUM5QixJQUFRLE1BQUssU0FBUSxnQkFBaUIsRUFDdEMsR0FBSSxJQUFXLEdBQ1gsR0FBaUIsRUFBSSxFQUFLLEVBRXpCLFFBQUksT0FBTyxHQUFVLFVBQVksRUFBTyxTQUFXLEdBQ3BELEVBQUksT0FBTyxHQUFRLFFBQVEsSUFBSSxFQUcvQixPQUFJLE9BQVEsQUFBYSxPQUFNLFdBQXVCLElBQUksRUFDMUQsRUFBSSxPQUFPLEVBQUksRUFHdkIsR0FBUSxxQkFBdUIsR0FDL0IsU0FBUyxFQUFpQixDQUFDLEVBQUksRUFBTyxDQUNsQyxJQUFRLE1BQUssVUFBVyxFQUN4QixHQUFJLElBQVcsR0FDWCxFQUFJLElBQUksRUFBTyxFQUFLLEVBQ3BCLEdBQWlCLENBQUUsRUFHbkIsT0FBSSxJQUFJLEVBQU8sRUFBSSxFQUczQixHQUFRLGtCQUFvQixHQUM1QixTQUFTLEVBQWdCLENBQUMsRUFBSSxFQUFtQixDQUM3QyxJQUFRLE1BQUssUUFBUyxFQVlULGVBVkQsQ0FDUixNQUNBLFFBQVMsZUFDVCxPQUNBLE9BQVEsR0FDUixXQUFZLEdBQ1osWUFBYSxHQUNiLE9BQVEsQ0FBQyxFQUNULElBQ0osRUFDK0IsR0FBVyxPQUFXLENBQWlCLDJCQzlDMUUsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsU0FBVyxHQUFRLFdBQWtCLE9BQzdDLElBQU0sR0FBYSxDQUFDLFNBQVUsU0FBVSxVQUFXLFVBQVcsT0FBUSxTQUFVLE9BQU8sRUFDakYsR0FBWSxJQUFJLElBQUksRUFBVSxFQUNwQyxTQUFTLEVBQVUsQ0FBQyxFQUFHLENBQ25CLE9BQU8sT0FBTyxHQUFLLFVBQVksR0FBVSxJQUFJLENBQUMsRUFFbEQsR0FBUSxXQUFhLEdBQ3JCLFNBQVMsRUFBUSxFQUFHLENBQ2hCLElBQU0sRUFBUyxDQUNYLE9BQVEsQ0FBRSxLQUFNLFNBQVUsTUFBTyxDQUFDLENBQUUsRUFDcEMsT0FBUSxDQUFFLEtBQU0sU0FBVSxNQUFPLENBQUMsQ0FBRSxFQUNwQyxNQUFPLENBQUUsS0FBTSxRQUFTLE1BQU8sQ0FBQyxDQUFFLEVBQ2xDLE9BQVEsQ0FBRSxLQUFNLFNBQVUsTUFBTyxDQUFDLENBQUUsQ0FDeEMsRUFDQSxNQUFPLENBQ0gsTUFBTyxJQUFLLEVBQVEsUUFBUyxHQUFNLFFBQVMsR0FBTSxLQUFNLEVBQUssRUFDN0QsTUFBTyxDQUFDLENBQUUsTUFBTyxDQUFDLENBQUUsRUFBRyxFQUFPLE9BQVEsRUFBTyxPQUFRLEVBQU8sTUFBTyxFQUFPLE1BQU0sRUFDaEYsS0FBTSxDQUFFLE1BQU8sQ0FBQyxDQUFFLEVBQ2xCLElBQUssQ0FBQyxFQUNOLFNBQVUsQ0FBQyxDQUNmLEVBRUosR0FBUSxTQUFXLDJCQ3ZCbkIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsY0FBZ0IsR0FBUSxlQUFpQixHQUFRLHNCQUE2QixPQUN0RixTQUFTLEVBQXFCLEVBQUcsU0FBUSxRQUFRLEVBQU0sQ0FDbkQsSUFBTSxFQUFRLEVBQUssTUFBTSxNQUFNLEdBQy9CLE9BQU8sR0FBUyxJQUFVLElBQVEsR0FBZSxFQUFRLENBQUssRUFFbEUsR0FBUSxzQkFBd0IsR0FDaEMsU0FBUyxFQUFjLENBQUMsRUFBUSxFQUFPLENBQ25DLE9BQU8sRUFBTSxNQUFNLEtBQUssQ0FBQyxJQUFTLEdBQWMsRUFBUSxDQUFJLENBQUMsRUFFakUsR0FBUSxlQUFpQixHQUN6QixTQUFTLEVBQWEsQ0FBQyxFQUFRLEVBQU0sQ0FDakMsSUFBSSxFQUNKLE9BQVEsRUFBTyxFQUFLLFdBQWEsVUFDM0IsRUFBSyxFQUFLLFdBQVcsY0FBZ0IsTUFBUSxJQUFZLE9BQVMsT0FBSSxFQUFHLEtBQUssQ0FBQyxJQUFRLEVBQU8sS0FBUyxNQUFTLEdBRTFILEdBQVEsY0FBZ0IsMkJDaEJ4QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsR0FBUSxnQkFBa0IsR0FBUSxlQUFpQixHQUFRLGNBQWdCLEdBQVEsdUJBQXlCLEdBQVEsYUFBZSxHQUFRLGVBQWlCLEdBQVEsU0FBZ0IsT0FDcEwsSUFBTSxRQUNBLFFBQ0EsUUFDQSxNQUNBLFFBQ0YsSUFDSCxRQUFTLENBQUMsRUFBVSxDQUNqQixFQUFTLEVBQVMsUUFBYSxHQUFLLFVBQ3BDLEVBQVMsRUFBUyxNQUFXLEdBQUssVUFDbkMsR0FBVyxHQUFRLFdBQWEsR0FBUSxTQUFXLENBQUMsRUFBRSxFQUN6RCxTQUFTLEVBQWMsQ0FBQyxFQUFRLENBQzVCLElBQU0sRUFBUSxHQUFhLEVBQU8sSUFBSSxFQUV0QyxHQURnQixFQUFNLFNBQVMsTUFBTSxHQUVqQyxHQUFJLEVBQU8sV0FBYSxHQUNwQixNQUFVLE1BQU0sd0NBQXdDLEVBRTNELEtBQ0QsR0FBSSxDQUFDLEVBQU0sUUFBVSxFQUFPLFdBQWEsT0FDckMsTUFBVSxNQUFNLDBDQUEwQyxFQUU5RCxHQUFJLEVBQU8sV0FBYSxHQUNwQixFQUFNLEtBQUssTUFBTSxFQUV6QixPQUFPLEVBRVgsR0FBUSxlQUFpQixHQUN6QixTQUFTLEVBQVksQ0FBQyxFQUFJLENBQ3RCLElBQU0sRUFBUSxNQUFNLFFBQVEsQ0FBRSxFQUFJLEVBQUssRUFBSyxDQUFDLENBQUUsRUFBSSxDQUFDLEVBQ3BELEdBQUksRUFBTSxNQUFjLGFBQVUsRUFDOUIsT0FBTyxFQUNYLE1BQVUsTUFBTSx3Q0FBMEMsRUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUU3RSxHQUFRLGFBQWUsR0FDdkIsU0FBUyxFQUFzQixDQUFDLEVBQUksRUFBTyxDQUN2QyxJQUFRLE1BQUssT0FBTSxRQUFTLEVBQ3RCLEVBQVcsR0FBYyxFQUFPLEVBQUssV0FBVyxFQUNoRCxFQUFhLEVBQU0sT0FBUyxHQUM5QixFQUFFLEVBQVMsU0FBVyxHQUFLLEVBQU0sU0FBVyxHQUF5Qix5QkFBdUIsRUFBSSxFQUFNLEVBQUUsR0FDNUcsR0FBSSxFQUFZLENBQ1osSUFBTSxFQUFZLEdBQWUsRUFBTyxFQUFNLEVBQUssY0FBZSxHQUFTLEtBQUssRUFDaEYsRUFBSSxHQUFHLEVBQVcsSUFBTSxDQUNwQixHQUFJLEVBQVMsT0FDVCxHQUFXLEVBQUksRUFBTyxDQUFRLEVBRTlCLFFBQWdCLENBQUUsRUFDekIsRUFFTCxPQUFPLEVBRVgsR0FBUSx1QkFBeUIsR0FDakMsSUFBTSxHQUFZLElBQUksSUFBSSxDQUFDLFNBQVUsU0FBVSxVQUFXLFVBQVcsTUFBTSxDQUFDLEVBQzVFLFNBQVMsRUFBYSxDQUFDLEVBQU8sRUFBYSxDQUN2QyxPQUFPLEVBQ0QsRUFBTSxPQUFPLENBQUMsSUFBTSxHQUFVLElBQUksQ0FBQyxHQUFNLElBQWdCLFNBQVcsSUFBTSxPQUFRLEVBQ2xGLENBQUMsRUFFWCxTQUFTLEVBQVUsQ0FBQyxFQUFJLEVBQU8sRUFBVSxDQUNyQyxJQUFRLE1BQUssT0FBTSxRQUFTLEVBQ3RCLEVBQVcsRUFBSSxJQUFJLFdBQWEsQUFBYSxhQUFhLEdBQU0sRUFDaEUsRUFBVSxFQUFJLElBQUksVUFBWSxBQUFhLGNBQWMsRUFDL0QsR0FBSSxFQUFLLGNBQWdCLFFBQ3JCLEVBQUksR0FBSSxBQUFhLE1BQU0sa0NBQXlDLFNBQVksZ0JBQW9CLElBQU0sRUFDckcsT0FBTyxFQUFPLEFBQWEsTUFBTSxNQUFTLEVBQzFDLE9BQU8sRUFBVyxBQUFhLGFBQWEsR0FBTSxFQUNsRCxHQUFHLEdBQWUsRUFBTyxFQUFNLEVBQUssYUFBYSxFQUFHLElBQU0sRUFBSSxPQUFPLEVBQVMsQ0FBSSxDQUFDLENBQUMsRUFFN0YsRUFBSSxHQUFJLEFBQWEsTUFBTSxpQkFBdUIsRUFDbEQsUUFBVyxLQUFLLEVBQ1osR0FBSSxHQUFVLElBQUksQ0FBQyxHQUFNLElBQU0sU0FBVyxFQUFLLGNBQWdCLFFBQzNELEVBQW1CLENBQUMsRUFHNUIsRUFBSSxLQUFLLEVBQ1QsR0FBZ0IsQ0FBRSxFQUNsQixFQUFJLE1BQU0sRUFDVixFQUFJLEdBQUksQUFBYSxNQUFNLGtCQUF5QixJQUFNLENBQ3RELEVBQUksT0FBTyxFQUFNLENBQU8sRUFDeEIsR0FBaUIsRUFBSSxDQUFPLEVBQy9CLEVBQ0QsU0FBUyxDQUFrQixDQUFDLEVBQUcsQ0FDM0IsT0FBUSxPQUNDLFNBQ0QsRUFDSyxPQUFRLEFBQWEsTUFBTSxvQkFBMkIsZ0JBQXVCLEVBQzdFLE9BQU8sRUFBVSxBQUFhLFdBQVcsR0FBTSxFQUMvQyxPQUFRLEFBQWEsTUFBTSxZQUFlLEVBQzFDLE9BQU8sRUFBVSxBQUFhLE9BQU8sRUFDMUMsV0FDQyxTQUNELEVBQ0ssT0FBUSxBQUFhLE1BQU0scUJBQTRCO0FBQUEsb0JBQ3hELG9CQUEyQixRQUFXLFNBQVksSUFBTyxFQUN4RCxPQUFPLEVBQVUsQUFBYSxPQUFPLEdBQU0sRUFDaEQsV0FDQyxVQUNELEVBQ0ssT0FBUSxBQUFhLE1BQU0sc0JBQTZCO0FBQUEsb0JBQ3pELHFCQUE0QixRQUFXLFNBQVksVUFBYSxTQUFZLEVBQzNFLE9BQU8sRUFBVSxBQUFhLE9BQU8sR0FBTSxFQUNoRCxXQUNDLFVBQ0QsRUFDSyxPQUFRLEFBQWEsTUFBTSxvQkFBdUIsY0FBaUIsWUFBZSxFQUNsRixPQUFPLEVBQVMsRUFBSyxFQUNyQixPQUFRLEFBQWEsTUFBTSxtQkFBc0IsU0FBWSxFQUM3RCxPQUFPLEVBQVMsRUFBSSxFQUN6QixXQUNDLE9BQ0QsRUFBSSxPQUFRLEFBQWEsTUFBTSxlQUFrQixjQUFpQixhQUFnQixFQUNsRixFQUFJLE9BQU8sRUFBUyxJQUFJLEVBQ3hCLFdBQ0MsUUFDRCxFQUNLLE9BQVEsQUFBYSxNQUFNLHFCQUE0QjtBQUFBLG1CQUN6RCxzQkFBNkIsWUFBZSxFQUMxQyxPQUFPLEVBQVUsQUFBYSxPQUFPLElBQU8sSUFJakUsU0FBUyxFQUFnQixFQUFHLE1BQUssYUFBWSxzQkFBc0IsRUFBTSxDQUVyRSxFQUFJLEdBQUksQUFBYSxNQUFNLGtCQUE0QixJQUFNLEVBQUksT0FBUSxBQUFhLE1BQU0sS0FBYyxLQUF1QixDQUFJLENBQUMsRUFFMUksU0FBUyxFQUFhLENBQUMsRUFBVSxFQUFNLEVBQVksRUFBVSxHQUFTLFFBQVMsQ0FDM0UsSUFBTSxFQUFLLElBQVksR0FBUyxRQUFvQixZQUFVLEdBQWUsWUFBVSxJQUNuRixFQUNKLE9BQVEsT0FDQyxPQUNELE1BQVEsQ0FBYSxNQUFNLEtBQVEsYUFDbEMsUUFDRCxFQUFRLEFBQWEsb0JBQW9CLEtBQ3pDLFVBQ0MsU0FDRCxFQUFRLEFBQWEsTUFBTSxlQUFrQixtQ0FBc0MsS0FDbkYsVUFDQyxVQUNELEVBQU8sRUFBUyxBQUFhLFFBQVEsb0JBQXVCLElBQU8sRUFDbkUsVUFDQyxTQUNELEVBQU8sRUFBUSxFQUNmLGNBRUEsTUFBUSxDQUFhLGFBQWEsS0FBUSxLQUFNLElBRXhELE9BQU8sSUFBWSxHQUFTLFFBQVUsRUFBcUIsTUFBSyxDQUFJLEVBQ3BFLFNBQVMsQ0FBTyxDQUFDLEVBQWtCLE1BQUssQ0FDcEMsT0FBcUIsTUFBTSxBQUFhLGFBQWEsZ0JBQW9CLEVBQU8sRUFBYyxBQUFhLGVBQWUsS0FBb0IsS0FBRyxHQUd6SixHQUFRLGNBQWdCLEdBQ3hCLFNBQVMsRUFBYyxDQUFDLEVBQVcsRUFBTSxFQUFZLEVBQVMsQ0FDMUQsR0FBSSxFQUFVLFNBQVcsRUFDckIsT0FBTyxHQUFjLEVBQVUsR0FBSSxFQUFNLEVBQVksQ0FBTyxFQUVoRSxJQUFJLEVBQ0UsRUFBbUIsVUFBUSxDQUFTLEVBQzFDLEdBQUksRUFBTSxPQUFTLEVBQU0sT0FBUSxDQUM3QixJQUFNLEVBQVUsQUFBYSxhQUFhLGdCQUMxQyxFQUFPLEVBQU0sS0FBTyxFQUFVLEFBQWEsT0FBTyxRQUFXLElBQzdELE9BQU8sRUFBTSxLQUNiLE9BQU8sRUFBTSxNQUNiLE9BQU8sRUFBTSxPQUdiLE9BQWlCLE1BRXJCLEdBQUksRUFBTSxPQUNOLE9BQU8sRUFBTSxRQUNqQixRQUFXLEtBQUssRUFDWixFQUFxQixNQUFLLEVBQU0sR0FBYyxFQUFHLEVBQU0sRUFBWSxDQUFPLENBQUMsRUFDL0UsT0FBTyxFQUVYLEdBQVEsZUFBaUIsR0FDekIsSUFBTSxHQUFZLENBQ2QsUUFBUyxFQUFHLFlBQWEsV0FBVyxJQUNwQyxPQUFRLEVBQUcsU0FBUSxpQkFBa0IsT0FBTyxHQUFVLFNBQVksQUFBYSxhQUFhLEtBQWEsQUFBYSxhQUFhLElBQ3ZJLEVBQ0EsU0FBUyxFQUFlLENBQUMsRUFBSSxDQUN6QixJQUFNLEVBQU0sR0FBb0IsQ0FBRSxFQUNyQixlQUFhLEVBQUssRUFBUyxFQUU1QyxHQUFRLGdCQUFrQixHQUMxQixTQUFTLEVBQW1CLENBQUMsRUFBSSxDQUM3QixJQUFRLE1BQUssT0FBTSxVQUFXLEVBQ3hCLEVBQXdCLGtCQUFnQixFQUFJLEVBQVEsTUFBTSxFQUNoRSxNQUFPLENBQ0gsTUFDQSxRQUFTLE9BQ1QsT0FDQSxPQUFRLEVBQU8sS0FDZixhQUNBLFlBQWEsRUFDYixhQUFjLEVBQ2QsT0FBUSxDQUFDLEVBQ1QsSUFDSiwyQkN0TUosT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsZUFBc0IsT0FDOUIsSUFBTSxPQUNBLFFBQ04sU0FBUyxFQUFjLENBQUMsRUFBSSxFQUFJLENBQzVCLElBQVEsYUFBWSxTQUFVLEVBQUcsT0FDakMsR0FBSSxJQUFPLFVBQVksRUFDbkIsUUFBVyxLQUFPLEVBQ2QsR0FBYyxFQUFJLEVBQUssRUFBVyxHQUFLLE9BQU8sRUFHakQsUUFBSSxJQUFPLFNBQVcsTUFBTSxRQUFRLENBQUssRUFDMUMsRUFBTSxRQUFRLENBQUMsRUFBSyxJQUFNLEdBQWMsRUFBSSxFQUFHLEVBQUksT0FBTyxDQUFDLEVBR25FLEdBQVEsZUFBaUIsR0FDekIsU0FBUyxFQUFhLENBQUMsRUFBSSxFQUFNLEVBQWMsQ0FDM0MsSUFBUSxNQUFLLGdCQUFlLE9BQU0sUUFBUyxFQUMzQyxHQUFJLElBQWlCLE9BQ2pCLE9BQ0osSUFBTSxFQUFhLEFBQWEsT0FBTSxJQUFxQixlQUFhLENBQUksSUFDNUUsR0FBSSxFQUFlLENBQ0osbUJBQWlCLEVBQUksMkJBQTJCLEdBQVcsRUFDdEUsT0FFSixJQUFJLEVBQWEsQUFBYSxPQUFNLGtCQUNwQyxHQUFJLEVBQUssY0FBZ0IsUUFDckIsRUFBYSxBQUFhLE9BQU0sUUFBZ0IsaUJBQXlCLFdBSTdFLEVBQUksR0FBRyxFQUFZLEFBQWEsT0FBTSxPQUE2QixhQUFXLENBQVksR0FBRywyQkMvQmpHLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxHQUFRLGNBQWdCLEdBQVEsY0FBZ0IsR0FBUSxXQUFhLEdBQVEsaUJBQW1CLEdBQVEsaUJBQW1CLEdBQVEsb0JBQXNCLEdBQVEsaUJBQW1CLEdBQVEsZUFBaUIsR0FBUSxjQUFnQixHQUFRLFlBQWMsR0FBUSxrQkFBb0IsR0FBUSxpQkFBbUIsR0FBUSx1QkFBOEIsT0FDeFYsSUFBTSxNQUNBLFFBQ0EsUUFDQSxRQUNOLFNBQVMsRUFBc0IsQ0FBQyxFQUFLLEVBQU0sQ0FDdkMsSUFBUSxNQUFLLE9BQU0sTUFBTyxFQUMxQixFQUFJLEdBQUcsR0FBaUIsRUFBSyxFQUFNLEVBQU0sRUFBRyxLQUFLLGFBQWEsRUFBRyxJQUFNLENBQ25FLEVBQUksVUFBVSxDQUFFLGdCQUFrQixBQUFhLE1BQU0sR0FBTyxFQUFHLEVBQUksRUFDbkUsRUFBSSxNQUFNLEVBQ2IsRUFFTCxHQUFRLHVCQUF5QixHQUNqQyxTQUFTLEVBQWdCLEVBQUcsTUFBSyxPQUFNLElBQU0sU0FBVSxFQUFZLEVBQVMsQ0FDeEUsT0FBcUIsS0FBSSxHQUFHLEVBQVcsSUFBSSxDQUFDLElBQXVCLE1BQUssR0FBaUIsRUFBSyxFQUFNLEVBQU0sRUFBSyxhQUFhLEVBQUksQUFBYSxNQUFNLE9BQWEsR0FBTSxDQUFDLENBQUMsRUFFNUssR0FBUSxpQkFBbUIsR0FDM0IsU0FBUyxFQUFpQixDQUFDLEVBQUssRUFBUyxDQUNyQyxFQUFJLFVBQVUsQ0FBRSxnQkFBaUIsQ0FBUSxFQUFHLEVBQUksRUFDaEQsRUFBSSxNQUFNLEVBRWQsR0FBUSxrQkFBb0IsR0FDNUIsU0FBUyxFQUFXLENBQUMsRUFBSyxDQUN0QixPQUFPLEVBQUksV0FBVyxPQUFRLENBRTFCLElBQUssT0FBTyxVQUFVLGVBQ3RCLEtBQU8sQUFBYSxvQ0FDeEIsQ0FBQyxFQUVMLEdBQVEsWUFBYyxHQUN0QixTQUFTLEVBQWEsQ0FBQyxFQUFLLEVBQU0sRUFBVSxDQUN4QyxNQUFRLENBQWEsTUFBTSxHQUFZLENBQUcsVUFBVSxNQUFTLEtBRWpFLEdBQVEsY0FBZ0IsR0FDeEIsU0FBUyxFQUFjLENBQUMsRUFBSyxFQUFNLEVBQVUsRUFBZSxDQUN4RCxJQUFNLEVBQVEsQUFBYSxNQUFNLElBQXFCLGNBQWEsQ0FBUSxrQkFDM0UsT0FBTyxFQUFpQixBQUFhLE1BQU0sUUFBVyxHQUFjLEVBQUssRUFBTSxDQUFRLElBQU0sRUFFakcsR0FBUSxlQUFpQixHQUN6QixTQUFTLEVBQWdCLENBQUMsRUFBSyxFQUFNLEVBQVUsRUFBZSxDQUMxRCxJQUFNLEVBQVEsQUFBYSxNQUFNLElBQXFCLGNBQWEsQ0FBUSxrQkFDM0UsT0FBTyxFQUE4QixLQUFJLEVBQW9CLE1BQUssR0FBYyxFQUFLLEVBQU0sQ0FBUSxDQUFDLENBQUMsRUFBSSxFQUU3RyxHQUFRLGlCQUFtQixHQUMzQixTQUFTLEVBQW1CLENBQUMsRUFBVyxDQUNwQyxPQUFPLEVBQVksT0FBTyxLQUFLLENBQVMsRUFBRSxPQUFPLENBQUMsSUFBTSxJQUFNLFdBQVcsRUFBSSxDQUFDLEVBRWxGLEdBQVEsb0JBQXNCLEdBQzlCLFNBQVMsRUFBZ0IsQ0FBQyxFQUFJLEVBQVcsQ0FDckMsT0FBTyxHQUFvQixDQUFTLEVBQUUsT0FBTyxDQUFDLElBQU0sQ0FBWSxxQkFBbUIsRUFBSSxFQUFVLEVBQUUsQ0FBQyxFQUV4RyxHQUFRLGlCQUFtQixHQUMzQixTQUFTLEVBQWdCLEVBQUcsYUFBWSxPQUFNLElBQU0sTUFBSyxlQUFjLGFBQVksYUFBYSxNQUFNLEVBQU0sRUFBUyxFQUFZLENBQzdILElBQU0sRUFBZ0IsRUFBYyxBQUFhLE1BQU0sTUFBZSxNQUFTLElBQWUsSUFBZSxFQUN2RyxFQUFTLENBQ1gsQ0FBQyxHQUFRLFFBQVEsYUFBNEIsWUFBVyxHQUFRLFFBQVEsYUFBYyxDQUFTLENBQUMsRUFDaEcsQ0FBQyxHQUFRLFFBQVEsV0FBWSxFQUFHLFVBQVUsRUFDMUMsQ0FBQyxHQUFRLFFBQVEsbUJBQW9CLEVBQUcsa0JBQWtCLEVBQzFELENBQUMsR0FBUSxRQUFRLFNBQVUsR0FBUSxRQUFRLFFBQVEsQ0FDdkQsRUFDQSxHQUFJLEVBQUcsS0FBSyxXQUNSLEVBQU8sS0FBSyxDQUFDLEdBQVEsUUFBUSxlQUFnQixHQUFRLFFBQVEsY0FBYyxDQUFDLEVBQ2hGLElBQU0sRUFBUSxBQUFhLE1BQU0sTUFBa0IsRUFBSSxPQUFPLEdBQUcsQ0FBTSxJQUN2RSxPQUFPLElBQXNCLE1BQU8sQUFBYSxNQUFNLFVBQWEsTUFBWSxLQUFXLEFBQWEsTUFBTSxLQUFRLEtBRTFILEdBQVEsaUJBQW1CLEdBQzNCLElBQU0sR0FBYSxBQUFhLGdCQUNoQyxTQUFTLEVBQVUsRUFBRyxNQUFLLElBQU0sU0FBVSxFQUFTLENBQ2hELElBQU0sRUFBSSxFQUFLLGNBQWdCLElBQU0sSUFDN0IsVUFBVyxFQUFLLEtBQ2xCLEVBQUssRUFBTyxFQUFTLENBQUMsRUFDNUIsT0FBTyxFQUFJLFdBQVcsVUFBVyxDQUM3QixJQUFLLEVBQUcsU0FBUyxFQUNqQixJQUFLLEVBQ0wsS0FBTyxBQUFhLE1BQU0sRUFBTyxPQUFTLGFBQWUsR0FBdUIsV0FBUyxFQUFLLENBQU0sS0FBSyxNQUFZLElBQ3pILENBQUMsRUFFTCxHQUFRLFdBQWEsR0FDckIsU0FBUyxFQUFhLENBQUMsRUFBSyxDQUN4QixJQUFRLE1BQUssT0FBTSxVQUFTLE1BQU8sRUFDN0IsRUFBUSxFQUFJLEtBQUssT0FBTyxFQUM5QixHQUFJLEVBQUcsVUFBVyxDQUNkLElBQU0sRUFBVyxFQUFJLElBQUksUUFBUyxFQUFJLEVBRXRDLE9BREEsRUFBYyxJQUFNLEVBQUksT0FBTyxFQUFVLEVBQUssQ0FBQyxFQUN4QyxFQUlYLE9BRkEsRUFBSSxJQUFJLEVBQU8sRUFBSSxFQUNuQixFQUFjLElBQU0sRUFBSSxNQUFNLENBQUMsRUFDeEIsRUFDUCxTQUFTLENBQWEsQ0FBQyxFQUFVLENBQzdCLElBQU0sRUFBTSxFQUFJLE1BQU0sTUFBUSxBQUFhLE1BQU0sVUFBYSxFQUM5RCxFQUFJLFNBQVMsSUFBSyxFQUFHLEVBQUssQ0FBQyxJQUFNLENBQzdCLEVBQUksVUFBVSxDQUNWLFVBQ0EsU0FBVSxFQUNWLGFBQXFCLFFBQUssR0FDOUIsRUFBRyxDQUFLLEVBQ1IsRUFBSSxHQUFpQixNQUFLLENBQUssRUFBRyxDQUFRLEVBQzdDLEdBR1QsR0FBUSxjQUFnQixHQUN4QixTQUFTLEVBQWEsQ0FBQyxFQUFLLENBQ3hCLElBQVEsTUFBSyxTQUFRLFVBQVMsTUFBTyxFQUVyQyxHQUFJLENBQUMsTUFBTSxRQUFRLENBQU0sRUFDckIsTUFBVSxNQUFNLDBCQUEwQixFQUU5QyxHQURvQixFQUFPLEtBQUssQ0FBQyxJQUFtQixxQkFBbUIsRUFBSSxDQUFHLENBQUMsR0FDNUQsQ0FBQyxFQUFHLEtBQUssWUFDeEIsT0FDSixJQUFNLEVBQVEsRUFBSSxJQUFJLFFBQVMsRUFBSyxFQUM5QixFQUFXLEVBQUksS0FBSyxRQUFRLEVBQ2xDLEVBQUksTUFBTSxJQUFNLEVBQU8sUUFBUSxDQUFDLEVBQU0sSUFBTSxDQUN4QyxJQUFNLEVBQVMsRUFBSSxVQUFVLENBQ3pCLFVBQ0EsV0FBWSxFQUNaLGNBQWUsRUFDbkIsRUFBRyxDQUFRLEVBS1gsR0FKQSxFQUFJLE9BQU8sRUFBUSxBQUFhLE1BQU0sUUFBWSxHQUFVLEVBSXhELENBSFcsRUFBSSxvQkFBb0IsRUFBUSxDQUFRLEVBSW5ELEVBQUksR0FBaUIsTUFBSyxDQUFLLENBQUMsRUFDdkMsQ0FBQyxFQUNGLEVBQUksT0FBTyxFQUFPLElBQU0sRUFBSSxNQUFNLEVBQUcsSUFBTSxFQUFJLE1BQU0sRUFBSSxDQUFDLEVBRTlELEdBQVEsY0FBZ0IsMkJDaEl4QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsR0FBUSxxQkFBdUIsR0FBUSxnQkFBa0IsR0FBUSxnQkFBa0IsR0FBUSxpQkFBd0IsT0FDbkgsSUFBTSxPQUNBLFFBQ0EsUUFDQSxRQUNOLFNBQVMsRUFBZ0IsQ0FBQyxFQUFLLEVBQUssQ0FDaEMsSUFBUSxNQUFLLFVBQVMsU0FBUSxlQUFjLE1BQU8sRUFDN0MsRUFBYyxFQUFJLE1BQU0sS0FBSyxFQUFHLEtBQU0sRUFBUSxFQUFjLENBQUUsRUFDOUQsRUFBWSxHQUFXLEVBQUssRUFBUyxDQUFXLEVBQ3RELEdBQUksRUFBRyxLQUFLLGlCQUFtQixHQUMzQixFQUFHLEtBQUssZUFBZSxFQUFhLEVBQUksRUFDNUMsSUFBTSxFQUFRLEVBQUksS0FBSyxPQUFPLEVBQzlCLEVBQUksVUFBVSxDQUNWLE9BQVEsRUFDUixXQUFzQixPQUN0QixjQUFlLEdBQUcsRUFBRyxpQkFBaUIsSUFDdEMsYUFBYyxFQUNkLGNBQWUsRUFDbkIsRUFBRyxDQUFLLEVBQ1IsRUFBSSxLQUFLLEVBQU8sSUFBTSxFQUFJLE1BQU0sRUFBSSxDQUFDLEVBRXpDLEdBQVEsaUJBQW1CLEdBQzNCLFNBQVMsRUFBZSxDQUFDLEVBQUssRUFBSyxDQUMvQixJQUFJLEVBQ0osSUFBUSxNQUFLLFVBQVMsU0FBUSxlQUFjLFFBQU8sTUFBTyxFQUMxRCxHQUFrQixFQUFJLENBQUcsRUFDekIsSUFBTSxFQUFXLENBQUMsR0FBUyxFQUFJLFFBQVUsRUFBSSxRQUFRLEtBQUssRUFBRyxLQUFNLEVBQVEsRUFBYyxDQUFFLEVBQUksRUFBSSxTQUM3RixFQUFjLEdBQVcsRUFBSyxFQUFTLENBQVEsRUFDL0MsRUFBUSxFQUFJLElBQUksT0FBTyxFQUM3QixFQUFJLFdBQVcsRUFBTyxDQUFlLEVBQ3JDLEVBQUksSUFBSSxFQUFLLEVBQUksU0FBVyxNQUFRLElBQVksT0FBSSxFQUFLLENBQUssRUFDOUQsU0FBUyxDQUFlLEVBQUcsQ0FDdkIsR0FBSSxFQUFJLFNBQVcsR0FBTyxDQUV0QixHQURBLEVBQVksRUFDUixFQUFJLFVBQ0osR0FBVyxDQUFHLEVBQ2xCLEVBQVcsSUFBTSxFQUFJLE1BQU0sQ0FBQyxFQUUzQixLQUNELElBQU0sRUFBVyxFQUFJLE1BQVEsRUFBYyxFQUFJLEVBQWEsRUFDNUQsR0FBSSxFQUFJLFVBQ0osR0FBVyxDQUFHLEVBQ2xCLEVBQVcsSUFBTSxHQUFRLEVBQUssQ0FBUSxDQUFDLEdBRy9DLFNBQVMsQ0FBYSxFQUFHLENBQ3JCLElBQU0sRUFBVyxFQUFJLElBQUksV0FBWSxJQUFJLEVBRXpDLE9BREEsRUFBSSxJQUFJLElBQU0sRUFBYSxBQUFhLFlBQVcsRUFBRyxDQUFDLElBQU0sRUFBSSxPQUFPLEVBQU8sRUFBSyxFQUFFLEdBQUksQUFBYSxPQUFNLGdCQUFnQixFQUFHLGtCQUFtQixJQUFNLEVBQUksT0FBTyxFQUFXLEFBQWEsT0FBTSxVQUFVLEVBQUcsSUFBTSxFQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDM04sRUFFWCxTQUFTLENBQVksRUFBRyxDQUNwQixJQUFNLEVBQWdCLEFBQWEsT0FBTSxXQUd6QyxPQUZBLEVBQUksT0FBTyxFQUFjLElBQUksRUFDN0IsRUFBc0IsTUFBRyxFQUNsQixFQUVYLFNBQVMsQ0FBVyxDQUFDLEVBQVMsRUFBSSxNQUFTLEFBQWEsYUFBd0IsT0FBSyxDQUNqRixJQUFNLEVBQVUsRUFBRyxLQUFLLFlBQWMsR0FBUSxRQUFRLEtBQU8sR0FBUSxRQUFRLEtBQ3ZFLEVBQWEsR0FBRyxZQUFhLElBQU8sQ0FBQyxHQUFVLEVBQUksU0FBVyxJQUNwRSxFQUFJLE9BQU8sRUFBUSxBQUFhLE9BQU0sSUFBb0Isb0JBQWtCLEVBQUssRUFBYSxFQUFTLENBQVUsSUFBSyxFQUFJLFNBQVMsRUFFdkksU0FBUyxDQUFVLENBQUMsRUFBUSxDQUN4QixJQUFJLEVBQ0osRUFBSSxHQUFpQixRQUFNLEVBQUssRUFBSSxTQUFXLE1BQVEsSUFBWSxPQUFJLEVBQUssQ0FBSyxFQUFHLENBQU0sR0FHbEcsR0FBUSxnQkFBa0IsR0FDMUIsU0FBUyxFQUFVLENBQUMsRUFBSyxDQUNyQixJQUFRLE1BQUssT0FBTSxNQUFPLEVBQzFCLEVBQUksR0FBRyxFQUFHLFdBQVksSUFBTSxFQUFJLE9BQU8sRUFBTyxBQUFhLE9BQU0sRUFBRyxjQUFjLEVBQUcscUJBQXFCLENBQUMsRUFFL0csU0FBUyxFQUFPLENBQUMsRUFBSyxFQUFNLENBQ3hCLElBQVEsT0FBUSxFQUNoQixFQUFJLEdBQUksQUFBYSxxQkFBb0IsS0FBUyxJQUFNLENBQ3BELEVBQ0ssT0FBTyxHQUFRLFFBQVEsUUFBVSxBQUFhLE9BQU0sR0FBUSxRQUFRLHNCQUFzQixPQUFVLEdBQVEsUUFBUSxrQkFBa0IsSUFBTyxFQUM3SSxPQUFPLEdBQVEsUUFBUSxPQUFTLEFBQWEsT0FBTSxHQUFRLFFBQVEsZ0JBQWdCLEVBQzNFLGdCQUFjLENBQUcsR0FDL0IsSUFBTSxFQUFJLE1BQU0sQ0FBQyxFQUV4QixTQUFTLEVBQWlCLEVBQUcsYUFBYSxFQUFLLENBQzNDLEdBQUksRUFBSSxPQUFTLENBQUMsRUFBVSxPQUN4QixNQUFVLE1BQU0sOEJBQThCLEVBRXRELFNBQVMsRUFBVSxDQUFDLEVBQUssRUFBUyxFQUFRLENBQ3RDLEdBQUksSUFBVyxPQUNYLE1BQVUsTUFBTSxZQUFZLHNCQUE0QixFQUM1RCxPQUFPLEVBQUksV0FBVyxVQUFXLE9BQU8sR0FBVSxXQUFhLENBQUUsSUFBSyxDQUFPLEVBQUksQ0FBRSxJQUFLLEVBQVEsS0FBb0IsYUFBVyxDQUFNLENBQUUsQ0FBQyxFQUU1SSxTQUFTLEVBQWUsQ0FBQyxFQUFRLEVBQVksRUFBaUIsR0FBTyxDQUVqRSxNQUFRLENBQUMsRUFBVyxRQUNoQixFQUFXLEtBQUssQ0FBQyxJQUFPLElBQU8sUUFDekIsTUFBTSxRQUFRLENBQU0sRUFDcEIsSUFBTyxTQUNILEdBQVUsT0FBTyxHQUFVLFVBQVksQ0FBQyxNQUFNLFFBQVEsQ0FBTSxFQUM1RCxPQUFPLEdBQVUsR0FBTyxHQUFrQixPQUFPLEVBQVUsR0FBWSxFQUV6RixHQUFRLGdCQUFrQixHQUMxQixTQUFTLEVBQW9CLEVBQUcsU0FBUSxPQUFNLE9BQU0saUJBQWlCLEVBQUssRUFBUyxDQUUvRSxHQUFJLE1BQU0sUUFBUSxFQUFJLE9BQU8sRUFBSSxDQUFDLEVBQUksUUFBUSxTQUFTLENBQU8sRUFBSSxFQUFJLFVBQVksRUFDOUUsTUFBVSxNQUFNLDBCQUEwQixFQUU5QyxJQUFNLEVBQU8sRUFBSSxhQUNqQixHQUFJLElBQVMsTUFBUSxJQUFjLE9BQVMsT0FBSSxFQUFLLEtBQUssQ0FBQyxJQUFRLENBQUMsT0FBTyxVQUFVLGVBQWUsS0FBSyxFQUFRLENBQUcsQ0FBQyxFQUNqSCxNQUFVLE1BQU0sMkNBQTJDLE1BQVksRUFBSyxLQUFLLEdBQUcsR0FBRyxFQUUzRixHQUFJLEVBQUksZ0JBRUosR0FBSSxDQURVLEVBQUksZUFBZSxFQUFPLEVBQVEsRUFDcEMsQ0FDUixJQUFNLEVBQU0sWUFBWSxnQ0FBc0MsT0FDMUQsRUFBSyxXQUFXLEVBQUksZUFBZSxNQUFNLEVBQzdDLEdBQUksRUFBSyxpQkFBbUIsTUFDeEIsRUFBSyxPQUFPLE1BQU0sQ0FBRyxFQUVyQixXQUFVLE1BQU0sQ0FBRyxJQUluQyxHQUFRLHFCQUF1QiwyQkN6SC9CLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxHQUFRLG9CQUFzQixHQUFRLG9CQUFzQixHQUFRLGFBQW9CLE9BQ3hGLElBQU0sT0FDQSxRQUNOLFNBQVMsRUFBWSxDQUFDLEdBQU0sVUFBUyxhQUFZLFNBQVEsYUFBWSxnQkFBZSxnQkFBZ0IsQ0FDaEcsR0FBSSxJQUFZLFFBQWEsSUFBVyxPQUNwQyxNQUFVLE1BQU0sc0RBQXNELEVBRTFFLEdBQUksSUFBWSxPQUFXLENBQ3ZCLElBQU0sRUFBTSxFQUFHLE9BQU8sR0FDdEIsT0FBTyxJQUFlLE9BQ2hCLENBQ0UsT0FBUSxFQUNSLFdBQWEsQUFBYSxPQUFNLEVBQUcsYUFBMkIsZUFBYSxDQUFPLElBQ2xGLGNBQWUsR0FBRyxFQUFHLGlCQUFpQixHQUMxQyxFQUNFLENBQ0UsT0FBUSxFQUFJLEdBQ1osV0FBYSxBQUFhLE9BQU0sRUFBRyxhQUEyQixlQUFhLENBQU8sSUFBa0IsZUFBYSxDQUFVLElBQzNILGNBQWUsR0FBRyxFQUFHLGlCQUFpQixLQUFzQixrQkFBZ0IsQ0FBVSxHQUMxRixFQUVSLEdBQUksSUFBVyxPQUFXLENBQ3RCLEdBQUksSUFBZSxRQUFhLElBQWtCLFFBQWEsSUFBaUIsT0FDNUUsTUFBVSxNQUFNLDZFQUE2RSxFQUVqRyxNQUFPLENBQ0gsU0FDQSxhQUNBLGVBQ0EsZUFDSixFQUVKLE1BQVUsTUFBTSw2Q0FBNkMsRUFFakUsR0FBUSxhQUFlLEdBQ3ZCLFNBQVMsRUFBbUIsQ0FBQyxFQUFXLEdBQU0sV0FBVSxhQUFjLEVBQVEsT0FBTSxZQUFXLGdCQUFnQixDQUMzRyxHQUFJLElBQVMsUUFBYSxJQUFhLE9BQ25DLE1BQVUsTUFBTSxxREFBcUQsRUFFekUsSUFBUSxPQUFRLEVBQ2hCLEdBQUksSUFBYSxPQUFXLENBQ3hCLElBQVEsWUFBVyxjQUFhLFFBQVMsRUFDbkMsRUFBVyxFQUFJLElBQUksT0FBUyxBQUFhLE9BQU0sRUFBRyxPQUFxQixlQUFhLENBQVEsSUFBSyxFQUFJLEVBQzNHLEVBQWlCLENBQVEsRUFDekIsRUFBVSxVQUFhLEFBQWEsU0FBUSxJQUF1QixnQkFBYyxFQUFVLEVBQVEsRUFBSyxnQkFBZ0IsSUFDeEgsRUFBVSxtQkFBc0IsQUFBYSxPQUFNLElBQ25ELEVBQVUsWUFBYyxDQUFDLEdBQUcsRUFBYSxFQUFVLGtCQUFrQixFQUV6RSxHQUFJLElBQVMsT0FBVyxDQUNwQixJQUFNLEVBQVcsYUFBMEIsUUFBTyxFQUFPLEVBQUksSUFBSSxPQUFRLEVBQU0sRUFBSSxFQUVuRixHQURBLEVBQWlCLENBQVEsRUFDckIsSUFBaUIsT0FDakIsRUFBVSxhQUFlLEVBR2pDLEdBQUksRUFDQSxFQUFVLFVBQVksRUFDMUIsU0FBUyxDQUFnQixDQUFDLEVBQVcsQ0FDakMsRUFBVSxLQUFPLEVBQ2pCLEVBQVUsVUFBWSxFQUFHLFVBQVksRUFDckMsRUFBVSxVQUFZLENBQUMsRUFDdkIsRUFBRyxrQkFBb0IsSUFBSSxJQUMzQixFQUFVLFdBQWEsRUFBRyxLQUMxQixFQUFVLFVBQVksQ0FBQyxHQUFHLEVBQUcsVUFBVyxDQUFTLEdBR3pELEdBQVEsb0JBQXNCLEdBQzlCLFNBQVMsRUFBbUIsQ0FBQyxHQUFhLG1CQUFrQixjQUFhLGdCQUFlLGVBQWMsYUFBYSxDQUMvRyxHQUFJLElBQWtCLE9BQ2xCLEVBQVUsY0FBZ0IsRUFDOUIsR0FBSSxJQUFpQixPQUNqQixFQUFVLGFBQWUsRUFDN0IsR0FBSSxJQUFjLE9BQ2QsRUFBVSxVQUFZLEVBQzFCLEVBQVUsaUJBQW1CLEVBQzdCLEVBQVUsWUFBYyxFQUU1QixHQUFRLG9CQUFzQiwyQkM5RTlCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxHQUFRLGNBQWdCLEdBQVEsV0FBYSxHQUFRLFlBQWMsR0FBUSxhQUFlLEdBQVEsWUFBYyxHQUFRLFVBQWlCLE9BQ3pJLElBQU0sUUFDQSxRQUNBLFFBRUEsR0FBaUIsSUFBSSxJQUFJLENBQzNCLE9BQ0EsU0FDQSxVQUNBLFlBQ0EsWUFDQSxnQkFDQSxnQkFDQSxXQUNBLFdBQ0EsVUFDQSxVQUNBLGNBQ0EsYUFDQSxXQUNBLE9BQ0EsT0FDSixDQUFDLEVBQ0QsU0FBUyxFQUFTLENBQUMsRUFBUSxFQUFRLEdBQU0sQ0FDckMsR0FBSSxPQUFPLEdBQVUsVUFDakIsTUFBTyxHQUNYLEdBQUksSUFBVSxHQUNWLE1BQU8sQ0FBQyxHQUFPLENBQU0sRUFDekIsR0FBSSxDQUFDLEVBQ0QsTUFBTyxHQUNYLE9BQU8sR0FBVSxDQUFNLEdBQUssRUFFaEMsR0FBUSxVQUFZLEdBQ3BCLElBQU0sR0FBZSxJQUFJLElBQUksQ0FDekIsT0FDQSxnQkFDQSxtQkFDQSxjQUNBLGdCQUNKLENBQUMsRUFDRCxTQUFTLEVBQU0sQ0FBQyxFQUFRLENBQ3BCLFFBQVcsS0FBTyxFQUFRLENBQ3RCLEdBQUksR0FBYSxJQUFJLENBQUcsRUFDcEIsTUFBTyxHQUNYLElBQU0sRUFBTSxFQUFPLEdBQ25CLEdBQUksTUFBTSxRQUFRLENBQUcsR0FBSyxFQUFJLEtBQUssRUFBTSxFQUNyQyxNQUFPLEdBQ1gsR0FBSSxPQUFPLEdBQU8sVUFBWSxHQUFPLENBQUcsRUFDcEMsTUFBTyxHQUVmLE1BQU8sR0FFWCxTQUFTLEVBQVMsQ0FBQyxFQUFRLENBQ3ZCLElBQUksRUFBUSxFQUNaLFFBQVcsS0FBTyxFQUFRLENBQ3RCLEdBQUksSUFBUSxPQUNSLE1BQU8sS0FFWCxHQURBLElBQ0ksR0FBZSxJQUFJLENBQUcsRUFDdEIsU0FDSixHQUFJLE9BQU8sRUFBTyxJQUFRLFNBQ1gsWUFBVSxFQUFPLEdBQU0sQ0FBQyxJQUFTLEdBQVMsR0FBVSxDQUFHLENBQUUsRUFFeEUsR0FBSSxJQUFVLElBQ1YsTUFBTyxLQUVmLE9BQU8sRUFFWCxTQUFTLEVBQVcsQ0FBQyxFQUFVLEVBQUssR0FBSSxFQUFXLENBQy9DLEdBQUksSUFBYyxHQUNkLEVBQUssR0FBWSxDQUFFLEVBQ3ZCLElBQU0sRUFBSSxFQUFTLE1BQU0sQ0FBRSxFQUMzQixPQUFPLEdBQWEsRUFBVSxDQUFDLEVBRW5DLEdBQVEsWUFBYyxHQUN0QixTQUFTLEVBQVksQ0FBQyxFQUFVLEVBQUcsQ0FFL0IsT0FEbUIsRUFBUyxVQUFVLENBQUMsRUFDckIsTUFBTSxHQUFHLEVBQUUsR0FBSyxJQUV0QyxHQUFRLGFBQWUsR0FDdkIsSUFBTSxHQUFzQixRQUM1QixTQUFTLEVBQVcsQ0FBQyxFQUFJLENBQ3JCLE9BQU8sRUFBSyxFQUFHLFFBQVEsR0FBcUIsRUFBRSxFQUFJLEdBRXRELEdBQVEsWUFBYyxHQUN0QixTQUFTLEVBQVUsQ0FBQyxFQUFVLEVBQVEsRUFBSSxDQUV0QyxPQURBLEVBQUssR0FBWSxDQUFFLEVBQ1osRUFBUyxRQUFRLEVBQVEsQ0FBRSxFQUV0QyxHQUFRLFdBQWEsR0FDckIsSUFBTSxHQUFTLHdCQUNmLFNBQVMsRUFBYSxDQUFDLEVBQVEsRUFBUSxDQUNuQyxHQUFJLE9BQU8sR0FBVSxVQUNqQixNQUFPLENBQUMsRUFDWixJQUFRLFdBQVUsZUFBZ0IsS0FBSyxLQUNqQyxFQUFRLEdBQVksRUFBTyxJQUFhLENBQU0sRUFDOUMsRUFBVSxDQUFFLEdBQUksQ0FBTSxFQUN0QixFQUFhLEdBQVksRUFBYSxFQUFPLEVBQUssRUFDbEQsRUFBWSxDQUFDLEVBQ2IsRUFBYSxJQUFJLElBMkN2QixPQTFDQSxHQUFTLEVBQVEsQ0FBRSxRQUFTLEVBQUssRUFBRyxDQUFDLEVBQUssRUFBUyxFQUFHLElBQWtCLENBQ3BFLEdBQUksSUFBa0IsT0FDbEIsT0FDSixJQUFNLEVBQVcsRUFBYSxFQUMxQixFQUFTLEVBQVEsR0FDckIsR0FBSSxPQUFPLEVBQUksSUFBYSxTQUN4QixFQUFTLEVBQU8sS0FBSyxLQUFNLEVBQUksRUFBUyxFQUM1QyxFQUFVLEtBQUssS0FBTSxFQUFJLE9BQU8sRUFDaEMsRUFBVSxLQUFLLEtBQU0sRUFBSSxjQUFjLEVBQ3ZDLEVBQVEsR0FBVyxFQUNuQixTQUFTLENBQU0sQ0FBQyxFQUFLLENBRWpCLElBQU0sRUFBVyxLQUFLLEtBQUssWUFBWSxRQUV2QyxHQURBLEVBQU0sR0FBWSxFQUFTLEVBQVMsRUFBUSxDQUFHLEVBQUksQ0FBRyxFQUNsRCxFQUFXLElBQUksQ0FBRyxFQUNsQixNQUFNLEVBQVMsQ0FBRyxFQUN0QixFQUFXLElBQUksQ0FBRyxFQUNsQixJQUFJLEVBQVcsS0FBSyxLQUFLLEdBQ3pCLEdBQUksT0FBTyxHQUFZLFNBQ25CLEVBQVcsS0FBSyxLQUFLLEdBQ3pCLEdBQUksT0FBTyxHQUFZLFNBQ25CLEVBQWlCLEVBQUssRUFBUyxPQUFRLENBQUcsRUFFekMsUUFBSSxJQUFRLEdBQVksQ0FBUSxFQUNqQyxHQUFJLEVBQUksS0FBTyxJQUNYLEVBQWlCLEVBQUssRUFBVSxHQUFNLENBQUcsRUFDekMsRUFBVSxHQUFPLEVBR2pCLFVBQUssS0FBSyxHQUFPLEVBR3pCLE9BQU8sRUFFWCxTQUFTLENBQVMsQ0FBQyxFQUFRLENBQ3ZCLEdBQUksT0FBTyxHQUFVLFNBQVUsQ0FDM0IsR0FBSSxDQUFDLEdBQU8sS0FBSyxDQUFNLEVBQ25CLE1BQVUsTUFBTSxtQkFBbUIsSUFBUyxFQUNoRCxFQUFPLEtBQUssS0FBTSxJQUFJLEdBQVEsSUFHekMsRUFDTSxFQUNQLFNBQVMsQ0FBZ0IsQ0FBQyxFQUFNLEVBQU0sRUFBSyxDQUN2QyxHQUFJLElBQVMsUUFBYSxDQUFDLEdBQU0sRUFBTSxDQUFJLEVBQ3ZDLE1BQU0sRUFBUyxDQUFHLEVBRTFCLFNBQVMsQ0FBUSxDQUFDLEVBQUssQ0FDbkIsT0FBVyxNQUFNLGNBQWMscUNBQXVDLEdBRzlFLEdBQVEsY0FBZ0IsMkJDeEp4QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsR0FBUSxRQUFVLEdBQVEsV0FBYSxHQUFRLHFCQUE0QixPQUMzRSxJQUFNLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsTUFDQSxPQUNBLFFBQ0EsUUFDQSxRQUVOLFNBQVMsRUFBb0IsQ0FBQyxFQUFJLENBQzlCLEdBQUksR0FBWSxDQUFFLEdBRWQsR0FEQSxHQUFjLENBQUUsRUFDWixHQUFrQixDQUFFLEVBQUcsQ0FDdkIsR0FBaUIsQ0FBRSxFQUNuQixRQUdSLEdBQWlCLEVBQUksSUFBdUIsd0JBQXNCLENBQUUsQ0FBQyxFQUV6RSxHQUFRLHFCQUF1QixHQUMvQixTQUFTLEVBQWdCLEVBQUcsTUFBSyxlQUFjLFNBQVEsWUFBVyxRQUFRLEVBQU0sQ0FDNUUsR0FBSSxFQUFLLEtBQUssSUFDVixFQUFJLEtBQUssRUFBZSxBQUFhLE1BQU0sRUFBUSxRQUFRLFNBQVMsRUFBUSxRQUFRLFNBQVUsRUFBVSxPQUFRLElBQU0sQ0FDbEgsRUFBSSxLQUFNLEFBQWEsb0JBQW9CLEdBQWMsRUFBUSxDQUFJLEdBQUcsRUFDeEUsR0FBcUIsRUFBSyxDQUFJLEVBQzlCLEVBQUksS0FBSyxDQUFJLEVBQ2hCLEVBR0QsT0FBSSxLQUFLLEVBQWUsQUFBYSxNQUFNLEVBQVEsUUFBUSxTQUFTLEdBQWtCLENBQUksSUFBSyxFQUFVLE9BQVEsSUFBTSxFQUFJLEtBQUssR0FBYyxFQUFRLENBQUksQ0FBQyxFQUFFLEtBQUssQ0FBSSxDQUFDLEVBRy9LLFNBQVMsRUFBaUIsQ0FBQyxFQUFNLENBQzdCLE1BQVEsQ0FBYSxPQUFPLEVBQVEsUUFBUSxvQkFBb0IsRUFBUSxRQUFRLGVBQWUsRUFBUSxRQUFRLHVCQUF1QixFQUFRLFFBQVEsWUFBWSxFQUFRLFFBQVEsT0FBTyxFQUFLLFdBQWMsQUFBYSxRQUFRLEVBQVEsUUFBUSxvQkFBZ0MsWUFFclIsU0FBUyxFQUFvQixDQUFDLEVBQUssRUFBTSxDQUNyQyxFQUFJLEdBQUcsRUFBUSxRQUFRLE9BQVEsSUFBTSxDQUtqQyxHQUpBLEVBQUksSUFBSSxFQUFRLFFBQVEsYUFBZSxBQUFhLE1BQU0sRUFBUSxRQUFRLFVBQVUsRUFBUSxRQUFRLGNBQWMsRUFDbEgsRUFBSSxJQUFJLEVBQVEsUUFBUSxXQUFhLEFBQWEsTUFBTSxFQUFRLFFBQVEsVUFBVSxFQUFRLFFBQVEsWUFBWSxFQUM5RyxFQUFJLElBQUksRUFBUSxRQUFRLG1CQUFxQixBQUFhLE1BQU0sRUFBUSxRQUFRLFVBQVUsRUFBUSxRQUFRLG9CQUFvQixFQUM5SCxFQUFJLElBQUksRUFBUSxRQUFRLFNBQVcsQUFBYSxNQUFNLEVBQVEsUUFBUSxVQUFVLEVBQVEsUUFBUSxVQUFVLEVBQ3RHLEVBQUssV0FDTCxFQUFJLElBQUksRUFBUSxRQUFRLGVBQWlCLEFBQWEsTUFBTSxFQUFRLFFBQVEsVUFBVSxFQUFRLFFBQVEsZ0JBQWdCLEdBQzNILElBQU0sQ0FLTCxHQUpBLEVBQUksSUFBSSxFQUFRLFFBQVEsYUFBZSxBQUFhLE9BQU8sRUFDM0QsRUFBSSxJQUFJLEVBQVEsUUFBUSxXQUFhLEFBQWEsY0FBYyxFQUNoRSxFQUFJLElBQUksRUFBUSxRQUFRLG1CQUFxQixBQUFhLGNBQWMsRUFDeEUsRUFBSSxJQUFJLEVBQVEsUUFBUSxTQUFVLEVBQVEsUUFBUSxJQUFJLEVBQ2xELEVBQUssV0FDTCxFQUFJLElBQUksRUFBUSxRQUFRLGVBQWlCLEFBQWEsT0FBTyxFQUNwRSxFQUVMLFNBQVMsRUFBZ0IsQ0FBQyxFQUFJLENBQzFCLElBQVEsU0FBUSxPQUFNLE9BQVEsRUFDOUIsR0FBaUIsRUFBSSxJQUFNLENBQ3ZCLEdBQUksRUFBSyxVQUFZLEVBQU8sU0FDeEIsR0FBZSxDQUFFLEVBSXJCLEdBSEEsR0FBZSxDQUFFLEVBQ2pCLEVBQUksSUFBSSxFQUFRLFFBQVEsUUFBUyxJQUFJLEVBQ3JDLEVBQUksSUFBSSxFQUFRLFFBQVEsT0FBUSxDQUFDLEVBQzdCLEVBQUssWUFDTCxHQUFlLENBQUUsRUFDckIsR0FBZ0IsQ0FBRSxFQUNsQixHQUFjLENBQUUsRUFDbkIsRUFDRCxPQUVKLFNBQVMsRUFBYyxDQUFDLEVBQUksQ0FFeEIsSUFBUSxNQUFLLGdCQUFpQixFQUM5QixFQUFHLFVBQVksRUFBSSxNQUFNLFlBQWMsQUFBYSxNQUFNLGFBQXdCLEVBQ2xGLEVBQUksR0FBSSxBQUFhLE1BQU0sRUFBRyx5QkFBMEIsSUFBTSxFQUFJLE9BQVEsQUFBYSxNQUFNLEVBQUcsa0JBQW9CLEFBQWEsY0FBYyxDQUFDLEVBQ2hKLEVBQUksR0FBSSxBQUFhLE1BQU0sRUFBRyx5QkFBMEIsSUFBTSxFQUFJLE9BQVEsQUFBYSxNQUFNLEVBQUcsa0JBQW9CLEFBQWEsY0FBYyxDQUFDLEVBRXBKLFNBQVMsRUFBYSxDQUFDLEVBQVEsRUFBTSxDQUNqQyxJQUFNLEVBQVEsT0FBTyxHQUFVLFVBQVksRUFBTyxFQUFLLFVBQ3ZELE9BQU8sSUFBVSxFQUFLLEtBQUssUUFBVSxFQUFLLEtBQUssU0FBWSxBQUFhLG9CQUFvQixPQUF1QixNQUd2SCxTQUFTLEVBQWEsQ0FBQyxFQUFJLEVBQU8sQ0FDOUIsR0FBSSxHQUFZLENBQUUsR0FFZCxHQURBLEdBQWMsQ0FBRSxFQUNaLEdBQWtCLENBQUUsRUFBRyxDQUN2QixHQUFpQixFQUFJLENBQUssRUFDMUIsUUFHUyxxQkFBbUIsRUFBSSxDQUFLLEVBRWpELFNBQVMsRUFBaUIsRUFBRyxTQUFRLFFBQVEsQ0FDekMsR0FBSSxPQUFPLEdBQVUsVUFDakIsTUFBTyxDQUFDLEVBQ1osUUFBVyxLQUFPLEVBQ2QsR0FBSSxFQUFLLE1BQU0sSUFBSSxHQUNmLE1BQU8sR0FDZixNQUFPLEdBRVgsU0FBUyxFQUFXLENBQUMsRUFBSSxDQUNyQixPQUFPLE9BQU8sRUFBRyxRQUFVLFVBRS9CLFNBQVMsRUFBZ0IsQ0FBQyxFQUFJLEVBQU8sQ0FDakMsSUFBUSxTQUFRLE1BQUssUUFBUyxFQUM5QixHQUFJLEVBQUssVUFBWSxFQUFPLFNBQ3hCLEdBQWUsQ0FBRSxFQUNyQixHQUFjLENBQUUsRUFDaEIsR0FBaUIsQ0FBRSxFQUNuQixJQUFNLEVBQVksRUFBSSxNQUFNLFFBQVMsRUFBUSxRQUFRLE1BQU0sRUFDM0QsR0FBZ0IsRUFBSSxDQUFTLEVBRTdCLEVBQUksSUFBSSxFQUFRLEFBQWEsTUFBTSxTQUFpQixFQUFRLFFBQVEsUUFBUSxFQUVoRixTQUFTLEVBQWEsQ0FBQyxFQUFJLENBQ1oscUJBQW1CLENBQUUsRUFDaEMsR0FBcUIsQ0FBRSxFQUUzQixTQUFTLEVBQWUsQ0FBQyxFQUFJLEVBQVcsQ0FDcEMsR0FBSSxFQUFHLEtBQUssSUFDUixPQUFPLEdBQWUsRUFBSSxDQUFDLEVBQUcsR0FBTyxDQUFTLEVBQ2xELElBQU0sRUFBdUIsa0JBQWdCLEVBQUcsTUFBTSxFQUNoRCxFQUE4QiwwQkFBd0IsRUFBSSxDQUFLLEVBQ3JFLEdBQWUsRUFBSSxFQUFPLENBQUMsRUFBYyxDQUFTLEVBRXRELFNBQVMsRUFBb0IsQ0FBQyxFQUFJLENBQzlCLElBQVEsU0FBUSxnQkFBZSxPQUFNLFFBQVMsRUFDOUMsR0FBSSxFQUFPLE1BQVEsRUFBSyx1QkFBb0Msd0JBQXNCLEVBQVEsRUFBSyxLQUFLLEVBQ2hHLEVBQUssT0FBTyxLQUFLLDZDQUE2QyxJQUFnQixFQUd0RixTQUFTLEVBQWMsQ0FBQyxFQUFJLENBQ3hCLElBQVEsU0FBUSxRQUFTLEVBQ3pCLEdBQUksRUFBTyxVQUFZLFFBQWEsRUFBSyxhQUFlLEVBQUssYUFDOUMsbUJBQWlCLEVBQUksdUNBQXVDLEVBRy9FLFNBQVMsRUFBYSxDQUFDLEVBQUksQ0FDdkIsSUFBTSxFQUFRLEVBQUcsT0FBTyxFQUFHLEtBQUssVUFDaEMsR0FBSSxFQUNBLEVBQUcsT0FBdUIsY0FBWSxFQUFHLEtBQUssWUFBYSxFQUFHLE9BQVEsQ0FBSyxFQUVuRixTQUFTLEVBQWdCLENBQUMsRUFBSSxDQUMxQixHQUFJLEVBQUcsT0FBTyxRQUFVLENBQUMsRUFBRyxVQUFVLE9BQ2xDLE1BQVUsTUFBTSw2QkFBNkIsRUFFckQsU0FBUyxFQUFjLEVBQUcsTUFBSyxZQUFXLFNBQVEsZ0JBQWUsUUFBUSxDQUNyRSxJQUFNLEVBQU0sRUFBTyxTQUNuQixHQUFJLEVBQUssV0FBYSxHQUNsQixFQUFJLEtBQU0sQUFBYSxNQUFNLEVBQVEsUUFBUSxtQkFBbUIsSUFBTSxFQUVyRSxRQUFJLE9BQU8sRUFBSyxVQUFZLFdBQVksQ0FDekMsSUFBTSxFQUFjLEFBQWEsUUFBUSxhQUNuQyxFQUFXLEVBQUksV0FBVyxPQUFRLENBQUUsSUFBSyxFQUFVLElBQUssQ0FBQyxFQUMvRCxFQUFJLEtBQU0sQUFBYSxNQUFNLEVBQVEsUUFBUSxzQkFBc0IsTUFBUSxNQUFlLFdBQWtCLEdBR3BILFNBQVMsRUFBYSxDQUFDLEVBQUksQ0FDdkIsSUFBUSxNQUFLLFlBQVcsZUFBYyxrQkFBaUIsUUFBUyxFQUNoRSxHQUFJLEVBQVUsT0FFVixFQUFJLEdBQUksQUFBYSxNQUFNLEVBQVEsUUFBUSxlQUFnQixJQUFNLEVBQUksT0FBTyxFQUFRLFFBQVEsSUFBSSxFQUFHLElBQU0sRUFBSSxNQUFPLEFBQWEsVUFBVSxLQUFtQixFQUFRLFFBQVEsVUFBVSxDQUFDLEVBRXhMLEtBRUQsR0FEQSxFQUFJLE9BQVEsQUFBYSxNQUFNLFdBQXVCLEVBQVEsUUFBUSxPQUFPLEVBQ3pFLEVBQUssWUFDTCxHQUFnQixDQUFFLEVBQ3RCLEVBQUksT0FBUSxBQUFhLE1BQU0sRUFBUSxRQUFRLGNBQWMsR0FHckUsU0FBUyxFQUFlLEVBQUcsTUFBSyxZQUFXLFFBQU8sU0FBUyxDQUN2RCxHQUFJLGFBQTJCLE9BQzNCLEVBQUksT0FBUSxBQUFhLE1BQU0sVUFBbUIsQ0FBSyxFQUMzRCxHQUFJLGFBQTJCLE9BQzNCLEVBQUksT0FBUSxBQUFhLE1BQU0sVUFBbUIsQ0FBSyxFQUUvRCxTQUFTLEVBQWMsQ0FBQyxFQUFJLEVBQU8sRUFBWSxFQUFXLENBQ3RELElBQVEsTUFBSyxTQUFRLE9BQU0sWUFBVyxPQUFNLFFBQVMsR0FDN0MsU0FBVSxFQUNsQixHQUFJLEVBQU8sT0FBUyxFQUFLLHVCQUF5QixDQUFZLHdCQUFzQixFQUFRLENBQUssR0FBSSxDQUNqRyxFQUFJLE1BQU0sSUFBTSxHQUFZLEVBQUksT0FBUSxFQUFNLElBQUksS0FBSyxVQUFVLENBQUMsRUFDbEUsT0FFSixHQUFJLENBQUMsRUFBSyxJQUNOLEdBQWlCLEVBQUksQ0FBSyxFQUM5QixFQUFJLE1BQU0sSUFBTSxDQUNaLFFBQVcsS0FBUyxFQUFNLE1BQ3RCLEVBQWMsQ0FBSyxFQUN2QixFQUFjLEVBQU0sSUFBSSxFQUMzQixFQUNELFNBQVMsQ0FBYSxDQUFDLEVBQU8sQ0FDMUIsR0FBSSxDQUFxQixrQkFBZ0IsRUFBUSxDQUFLLEVBQ2xELE9BQ0osR0FBSSxFQUFNLEtBQU0sQ0FHWixHQUZBLEVBQUksR0FBa0IsaUJBQWUsRUFBTSxLQUFNLEVBQU0sRUFBSyxhQUFhLENBQUMsRUFDMUUsR0FBZ0IsRUFBSSxDQUFLLEVBQ3JCLEVBQU0sU0FBVyxHQUFLLEVBQU0sS0FBTyxFQUFNLE1BQVEsRUFDakQsRUFBSSxLQUFLLEVBQ00sbUJBQWlCLENBQUUsRUFFdEMsRUFBSSxNQUFNLEVBR1YsUUFBZ0IsRUFBSSxDQUFLLEVBRzdCLEdBQUksQ0FBQyxFQUNELEVBQUksR0FBSSxBQUFhLE1BQU0sRUFBUSxRQUFRLGNBQWMsR0FBYSxHQUFHLEdBR3JGLFNBQVMsRUFBZSxDQUFDLEVBQUksRUFBTyxDQUNoQyxJQUFRLE1BQUssU0FBUSxNQUFRLGdCQUFtQixFQUNoRCxHQUFJLEVBQ2Usa0JBQWdCLEVBQUksRUFBTSxJQUFJLEVBQ2pELEVBQUksTUFBTSxJQUFNLENBQ1osUUFBVyxLQUFRLEVBQU0sTUFDckIsR0FBd0IsaUJBQWUsRUFBUSxDQUFJLEVBQy9DLEdBQVksRUFBSSxFQUFLLFFBQVMsRUFBSyxXQUFZLEVBQU0sSUFBSSxFQUdwRSxFQUVMLFNBQVMsRUFBZ0IsQ0FBQyxFQUFJLEVBQU8sQ0FDakMsR0FBSSxFQUFHLFVBQVUsTUFBUSxDQUFDLEVBQUcsS0FBSyxZQUM5QixPQUVKLEdBREEsR0FBa0IsRUFBSSxDQUFLLEVBQ3ZCLENBQUMsRUFBRyxLQUFLLGdCQUNULEdBQW1CLEVBQUksQ0FBSyxFQUNoQyxHQUFrQixFQUFJLEVBQUcsU0FBUyxFQUV0QyxTQUFTLEVBQWlCLENBQUMsRUFBSSxFQUFPLENBQ2xDLEdBQUksQ0FBQyxFQUFNLE9BQ1AsT0FDSixHQUFJLENBQUMsRUFBRyxVQUFVLE9BQVEsQ0FDdEIsRUFBRyxVQUFZLEVBQ2YsT0FFSixFQUFNLFFBQVEsQ0FBQyxJQUFNLENBQ2pCLEdBQUksQ0FBQyxHQUFhLEVBQUcsVUFBVyxDQUFDLEVBQzdCLEdBQWlCLEVBQUksU0FBUyw4QkFBOEIsRUFBRyxVQUFVLEtBQUssR0FBRyxJQUFJLEVBRTVGLEVBQ0QsR0FBa0IsRUFBSSxDQUFLLEVBRS9CLFNBQVMsRUFBa0IsQ0FBQyxFQUFJLEVBQUksQ0FDaEMsR0FBSSxFQUFHLE9BQVMsR0FBSyxFQUFFLEVBQUcsU0FBVyxHQUFLLEVBQUcsU0FBUyxNQUFNLEdBQ3hELEdBQWlCLEVBQUksaURBQWlELEVBRzlFLFNBQVMsRUFBaUIsQ0FBQyxFQUFJLEVBQUksQ0FDL0IsSUFBTSxFQUFRLEVBQUcsS0FBSyxNQUFNLElBQzVCLFFBQVcsS0FBVyxFQUFPLENBQ3pCLElBQU0sRUFBTyxFQUFNLEdBQ25CLEdBQUksT0FBTyxHQUFRLFVBQWdDLGlCQUFlLEVBQUcsT0FBUSxDQUFJLEVBQUcsQ0FDaEYsSUFBUSxRQUFTLEVBQUssV0FDdEIsR0FBSSxFQUFLLFFBQVUsQ0FBQyxFQUFLLEtBQUssQ0FBQyxJQUFNLEdBQWtCLEVBQUksQ0FBQyxDQUFDLEVBQ3pELEdBQWlCLEVBQUksaUJBQWlCLEVBQUssS0FBSyxHQUFHLG1CQUFtQixJQUFVLElBS2hHLFNBQVMsRUFBaUIsQ0FBQyxFQUFPLEVBQU0sQ0FDcEMsT0FBTyxFQUFNLFNBQVMsQ0FBSSxHQUFNLElBQVMsVUFBWSxFQUFNLFNBQVMsU0FBUyxFQUVqRixTQUFTLEVBQVksQ0FBQyxFQUFJLEVBQUcsQ0FDekIsT0FBTyxFQUFHLFNBQVMsQ0FBQyxHQUFNLElBQU0sV0FBYSxFQUFHLFNBQVMsUUFBUSxFQUVyRSxTQUFTLEVBQWlCLENBQUMsRUFBSSxFQUFXLENBQ3RDLElBQU0sRUFBSyxDQUFDLEVBQ1osUUFBVyxLQUFLLEVBQUcsVUFDZixHQUFJLEdBQWEsRUFBVyxDQUFDLEVBQ3pCLEVBQUcsS0FBSyxDQUFDLEVBQ1IsUUFBSSxFQUFVLFNBQVMsU0FBUyxHQUFLLElBQU0sU0FDNUMsRUFBRyxLQUFLLFNBQVMsRUFFekIsRUFBRyxVQUFZLEVBRW5CLFNBQVMsRUFBZ0IsQ0FBQyxFQUFJLEVBQUssQ0FDL0IsSUFBTSxFQUFhLEVBQUcsVUFBVSxPQUFTLEVBQUcsY0FDNUMsR0FBTyxRQUFRLG1CQUNKLG1CQUFpQixFQUFJLEVBQUssRUFBRyxLQUFLLFdBQVcsRUFFNUQsTUFBTSxFQUFXLENBQ2IsV0FBVyxDQUFDLEVBQUksRUFBSyxFQUFTLENBYzFCLEdBYmMsd0JBQXNCLEVBQUksRUFBSyxDQUFPLEVBQ3BELEtBQUssSUFBTSxFQUFHLElBQ2QsS0FBSyxVQUFZLEVBQUcsVUFDcEIsS0FBSyxRQUFVLEVBQ2YsS0FBSyxLQUFPLEVBQUcsS0FDZixLQUFLLE9BQVMsRUFBRyxPQUFPLEdBQ3hCLEtBQUssTUFBUSxFQUFJLE9BQVMsRUFBRyxLQUFLLE9BQVMsS0FBSyxRQUFVLEtBQUssT0FBTyxNQUN0RSxLQUFLLFlBQXlCLGtCQUFnQixFQUFJLEtBQUssT0FBUSxFQUFTLEtBQUssS0FBSyxFQUNsRixLQUFLLFdBQWEsRUFBSSxXQUN0QixLQUFLLGFBQWUsRUFBRyxPQUN2QixLQUFLLE9BQVMsQ0FBQyxFQUNmLEtBQUssR0FBSyxFQUNWLEtBQUssSUFBTSxFQUNQLEtBQUssTUFDTCxLQUFLLFdBQWEsRUFBRyxJQUFJLE1BQU0sVUFBVyxHQUFRLEtBQUssTUFBTyxDQUFFLENBQUMsRUFJakUsUUFEQSxLQUFLLFdBQWEsS0FBSyxZQUNuQixDQUFlLG1CQUFpQixLQUFLLE9BQVEsRUFBSSxXQUFZLEVBQUksY0FBYyxFQUMvRSxNQUFVLE1BQU0sR0FBRyxtQkFBeUIsS0FBSyxVQUFVLEVBQUksVUFBVSxHQUFHLEVBR3BGLEdBQUksU0FBVSxFQUFNLEVBQUksWUFBYyxFQUFJLFNBQVcsR0FDakQsS0FBSyxVQUFZLEVBQUcsSUFBSSxNQUFNLFFBQVMsRUFBUSxRQUFRLE1BQU0sRUFHckUsTUFBTSxDQUFDLEVBQVcsRUFBZSxFQUFZLENBQ3pDLEtBQUssV0FBeUIsTUFBSyxDQUFTLEVBQUcsRUFBZSxDQUFVLEVBRTVFLFVBQVUsQ0FBQyxFQUFXLEVBQWUsRUFBWSxDQUU3QyxHQURBLEtBQUssSUFBSSxHQUFHLENBQVMsRUFDakIsRUFDQSxFQUFXLEVBRVgsVUFBSyxNQUFNLEVBQ2YsR0FBSSxHQUdBLEdBRkEsS0FBSyxJQUFJLEtBQUssRUFDZCxFQUFjLEVBQ1YsS0FBSyxVQUNMLEtBQUssSUFBSSxNQUFNLEVBR25CLFFBQUksS0FBSyxVQUNMLEtBQUssSUFBSSxNQUFNLEVBRWYsVUFBSyxJQUFJLEtBQUssRUFHMUIsSUFBSSxDQUFDLEVBQVcsRUFBWSxDQUN4QixLQUFLLFdBQXlCLE1BQUssQ0FBUyxFQUFHLE9BQVcsQ0FBVSxFQUV4RSxJQUFJLENBQUMsRUFBVyxDQUNaLEdBQUksSUFBYyxPQUFXLENBRXpCLEdBREEsS0FBSyxNQUFNLEVBQ1AsQ0FBQyxLQUFLLFVBQ04sS0FBSyxJQUFJLEdBQUcsRUFBSyxFQUNyQixPQUlKLEdBRkEsS0FBSyxJQUFJLEdBQUcsQ0FBUyxFQUNyQixLQUFLLE1BQU0sRUFDUCxLQUFLLFVBQ0wsS0FBSyxJQUFJLE1BQU0sRUFFZixVQUFLLElBQUksS0FBSyxFQUV0QixTQUFTLENBQUMsRUFBVyxDQUNqQixHQUFJLENBQUMsS0FBSyxNQUNOLE9BQU8sS0FBSyxLQUFLLENBQVMsRUFDOUIsSUFBUSxjQUFlLEtBQ3ZCLEtBQUssS0FBTSxBQUFhLE1BQU0sdUJBQThDLEtBQUksS0FBSyxhQUFhLEVBQUcsQ0FBUyxJQUFJLEVBRXRILEtBQUssQ0FBQyxFQUFRLEVBQWEsRUFBWSxDQUNuQyxHQUFJLEVBQWEsQ0FDYixLQUFLLFVBQVUsQ0FBVyxFQUMxQixLQUFLLE9BQU8sRUFBUSxDQUFVLEVBQzlCLEtBQUssVUFBVSxDQUFDLENBQUMsRUFDakIsT0FFSixLQUFLLE9BQU8sRUFBUSxDQUFVLEVBRWxDLE1BQU0sQ0FBQyxFQUFRLEVBQVksRUFFdEIsRUFBa0Isb0JBQTRCLGdCQUFhLEtBQU0sS0FBSyxJQUFJLE1BQU8sQ0FBVSxFQUVoRyxVQUFVLEVBQUcsQ0FDSSxlQUFhLEtBQU0sS0FBSyxJQUFJLFlBQXVCLG9CQUFpQixFQUVyRixLQUFLLEVBQUcsQ0FDSixHQUFJLEtBQUssWUFBYyxPQUNuQixNQUFVLE1BQU0seUNBQXlDLEVBQ2hELG9CQUFrQixLQUFLLElBQUssS0FBSyxTQUFTLEVBRTNELEVBQUUsQ0FBQyxFQUFNLENBQ0wsR0FBSSxDQUFDLEtBQUssVUFDTixLQUFLLElBQUksR0FBRyxDQUFJLEVBRXhCLFNBQVMsQ0FBQyxFQUFLLEVBQVEsQ0FDbkIsR0FBSSxFQUNBLE9BQU8sT0FBTyxLQUFLLE9BQVEsQ0FBRyxFQUU5QixVQUFLLE9BQVMsRUFFdEIsVUFBVSxDQUFDLEVBQU8sRUFBVyxFQUF1QixNQUFLLENBQ3JELEtBQUssSUFBSSxNQUFNLElBQU0sQ0FDakIsS0FBSyxXQUFXLEVBQU8sQ0FBVSxFQUNqQyxFQUFVLEVBQ2IsRUFFTCxVQUFVLENBQUMsRUFBa0IsTUFBSyxFQUF1QixNQUFLLENBQzFELEdBQUksQ0FBQyxLQUFLLE1BQ04sT0FDSixJQUFRLE1BQUssYUFBWSxhQUFZLE9BQVEsS0FFN0MsR0FEQSxFQUFJLEdBQWlCLEtBQUssQUFBYSxNQUFNLGtCQUE0QixDQUFVLENBQUMsRUFDaEYsSUFBb0IsTUFDcEIsRUFBSSxPQUFPLEVBQU8sRUFBSSxFQUMxQixHQUFJLEVBQVcsUUFBVSxFQUFJLGdCQUd6QixHQUZBLEVBQUksT0FBTyxLQUFLLGFBQWEsQ0FBQyxFQUM5QixLQUFLLFdBQVcsRUFDWixJQUFvQixNQUNwQixFQUFJLE9BQU8sRUFBTyxFQUFLLEVBRS9CLEVBQUksS0FBSyxFQUViLFlBQVksRUFBRyxDQUNYLElBQVEsTUFBSyxhQUFZLGFBQVksTUFBSyxNQUFPLEtBQ2pELE9BQXFCLEtBQUksRUFBZSxFQUFHLEVBQW1CLENBQUMsRUFDL0QsU0FBUyxDQUFjLEVBQUcsQ0FDdEIsR0FBSSxFQUFXLE9BQVEsQ0FFbkIsR0FBSSxFQUFFLGFBQWdDLFFBQ2xDLE1BQVUsTUFBTSwwQkFBMEIsRUFDOUMsSUFBTSxFQUFLLE1BQU0sUUFBUSxDQUFVLEVBQUksRUFBYSxDQUFDLENBQVUsRUFDL0QsTUFBUSxDQUFhLE1BQXFCLGtCQUFnQixFQUFJLEVBQVksRUFBRyxLQUFLLGNBQTBCLFlBQVMsS0FBSyxJQUU5SCxPQUFpQixNQUVyQixTQUFTLENBQWtCLEVBQUcsQ0FDMUIsR0FBSSxFQUFJLGVBQWdCLENBQ3BCLElBQU0sRUFBb0IsRUFBSSxXQUFXLGdCQUFpQixDQUFFLElBQUssRUFBSSxjQUFlLENBQUMsRUFDckYsTUFBUSxDQUFhLE9BQU8sS0FBcUIsS0FFckQsT0FBaUIsT0FHekIsU0FBUyxDQUFDLEVBQU0sRUFBTyxDQUNuQixJQUFNLEVBQTRCLGdCQUFjLEtBQUssR0FBSSxDQUFJLEVBQzdDLHVCQUFxQixFQUFXLEtBQUssR0FBSSxDQUFJLEVBQzdDLHVCQUFxQixFQUFXLENBQUksRUFDcEQsSUFBTSxFQUFjLElBQUssS0FBSyxNQUFPLEVBQVcsTUFBTyxPQUFXLE1BQU8sTUFBVSxFQUVuRixPQURBLEdBQWMsRUFBYSxDQUFLLEVBQ3pCLEVBRVgsY0FBYyxDQUFDLEVBQVcsRUFBUSxDQUM5QixJQUFRLEtBQUksT0FBUSxLQUNwQixHQUFJLENBQUMsRUFBRyxLQUFLLFlBQ1QsT0FDSixHQUFJLEVBQUcsUUFBVSxJQUFRLEVBQVUsUUFBVSxPQUN6QyxFQUFHLE1BQWUsa0JBQWUsTUFBTSxFQUFLLEVBQVUsTUFBTyxFQUFHLE1BQU8sQ0FBTSxFQUVqRixHQUFJLEVBQUcsUUFBVSxJQUFRLEVBQVUsUUFBVSxPQUN6QyxFQUFHLE1BQWUsa0JBQWUsTUFBTSxFQUFLLEVBQVUsTUFBTyxFQUFHLE1BQU8sQ0FBTSxFQUdyRixtQkFBbUIsQ0FBQyxFQUFXLEVBQU8sQ0FDbEMsSUFBUSxLQUFJLE9BQVEsS0FDcEIsR0FBSSxFQUFHLEtBQUssY0FBZ0IsRUFBRyxRQUFVLElBQVEsRUFBRyxRQUFVLElBRTFELE9BREEsRUFBSSxHQUFHLEVBQU8sSUFBTSxLQUFLLGVBQWUsRUFBcUIsTUFBSSxDQUFDLEVBQzNELEdBR25CLENBQ0EsR0FBUSxXQUFhLEdBQ3JCLFNBQVMsRUFBVyxDQUFDLEVBQUksRUFBUyxFQUFLLEVBQVUsQ0FDN0MsSUFBTSxFQUFNLElBQUksR0FBVyxFQUFJLEVBQUssQ0FBTyxFQUMzQyxHQUFJLFNBQVUsRUFDVixFQUFJLEtBQUssRUFBSyxDQUFRLEVBRXJCLFFBQUksRUFBSSxPQUFTLEVBQUksU0FDUixtQkFBaUIsRUFBSyxDQUFHLEVBRXRDLFFBQUksVUFBVyxFQUNGLG9CQUFrQixFQUFLLENBQUcsRUFFdkMsUUFBSSxFQUFJLFNBQVcsRUFBSSxTQUNWLG1CQUFpQixFQUFLLENBQUcsRUFHL0MsSUFBTSxHQUFlLHNCQUNmLEdBQXdCLG1DQUM5QixTQUFTLEVBQU8sQ0FBQyxHQUFTLFlBQVcsWUFBVyxlQUFlLENBQzNELElBQUksRUFDQSxFQUNKLEdBQUksSUFBVSxHQUNWLE9BQU8sRUFBUSxRQUFRLFNBQzNCLEdBQUksRUFBTSxLQUFPLElBQUssQ0FDbEIsR0FBSSxDQUFDLEdBQWEsS0FBSyxDQUFLLEVBQ3hCLE1BQVUsTUFBTSx5QkFBeUIsR0FBTyxFQUNwRCxFQUFjLEVBQ2QsRUFBTyxFQUFRLFFBQVEsU0FFdEIsS0FDRCxJQUFNLEVBQVUsR0FBc0IsS0FBSyxDQUFLLEVBQ2hELEdBQUksQ0FBQyxFQUNELE1BQVUsTUFBTSx5QkFBeUIsR0FBTyxFQUNwRCxJQUFNLEVBQUssQ0FBQyxFQUFRLEdBRXBCLEdBREEsRUFBYyxFQUFRLEdBQ2xCLElBQWdCLElBQUssQ0FDckIsR0FBSSxHQUFNLEVBQ04sTUFBVSxNQUFNLEVBQVMsaUJBQWtCLENBQUUsQ0FBQyxFQUNsRCxPQUFPLEVBQVksRUFBWSxHQUVuQyxHQUFJLEVBQUssRUFDTCxNQUFVLE1BQU0sRUFBUyxPQUFRLENBQUUsQ0FBQyxFQUV4QyxHQURBLEVBQU8sRUFBVSxFQUFZLEdBQ3pCLENBQUMsRUFDRCxPQUFPLEVBRWYsSUFBSSxFQUFPLEVBQ0wsRUFBVyxFQUFZLE1BQU0sR0FBRyxFQUN0QyxRQUFXLEtBQVcsRUFDbEIsR0FBSSxFQUNBLEVBQVEsQUFBYSxNQUFNLElBQXFCLGNBQXdCLHVCQUFxQixDQUFPLENBQUMsSUFDckcsRUFBUSxBQUFhLE1BQU0sUUFBVyxJQUc5QyxPQUFPLEVBQ1AsU0FBUyxDQUFRLENBQUMsRUFBYSxFQUFJLENBQy9CLE1BQU8saUJBQWlCLEtBQWUsaUNBQWtDLEtBR2pGLEdBQVEsUUFBVSwyQkNyZ0JsQixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsTUFBTSxXQUF3QixLQUFNLENBQ2hDLFdBQVcsQ0FBQyxFQUFRLENBQ2hCLE1BQU0sbUJBQW1CLEVBQ3pCLEtBQUssT0FBUyxFQUNkLEtBQUssSUFBTSxLQUFLLFdBQWEsR0FFckMsQ0FDQSxHQUFRLFFBQVUsMkJDUmxCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLFFBQ04sTUFBTSxXQUF3QixLQUFNLENBQ2hDLFdBQVcsQ0FBQyxFQUFVLEVBQVEsRUFBSyxFQUFLLENBQ3BDLE1BQU0sR0FBTywyQkFBMkIsYUFBZSxHQUFRLEVBQy9ELEtBQUssV0FBMkIsY0FBWSxFQUFVLEVBQVEsQ0FBRyxFQUNqRSxLQUFLLGNBQThCLGVBQTJCLGVBQWEsRUFBVSxLQUFLLFVBQVUsQ0FBQyxFQUU3RyxDQUNBLEdBQVEsUUFBVSwyQkNUbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsY0FBZ0IsR0FBUSxtQkFBcUIsR0FBUSxXQUFhLEdBQVEsY0FBZ0IsR0FBUSxVQUFpQixPQUMzSCxJQUFNLE9BQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNOLE1BQU0sRUFBVSxDQUNaLFdBQVcsQ0FBQyxFQUFLLENBQ2IsSUFBSSxFQUNKLEtBQUssS0FBTyxDQUFDLEVBQ2IsS0FBSyxlQUFpQixDQUFDLEVBQ3ZCLElBQUksRUFDSixHQUFJLE9BQU8sRUFBSSxRQUFVLFNBQ3JCLEVBQVMsRUFBSSxPQUNqQixLQUFLLE9BQVMsRUFBSSxPQUNsQixLQUFLLFNBQVcsRUFBSSxTQUNwQixLQUFLLEtBQU8sRUFBSSxNQUFRLEtBQ3hCLEtBQUssUUFBVSxFQUFLLEVBQUksVUFBWSxNQUFRLElBQVksT0FBSSxFQUFtQixlQUFhLElBQVcsTUFBUSxJQUFnQixPQUFTLE9BQUksRUFBTyxFQUFJLFVBQVksTUFBTSxFQUN6SyxLQUFLLFdBQWEsRUFBSSxXQUN0QixLQUFLLFVBQVksRUFBSSxVQUNyQixLQUFLLEtBQU8sRUFBSSxLQUNoQixLQUFLLE9BQVMsSUFBVyxNQUFRLElBQWdCLE9BQVMsT0FBSSxFQUFPLE9BQ3JFLEtBQUssS0FBTyxDQUFDLEVBRXJCLENBQ0EsR0FBUSxVQUFZLEdBSXBCLFNBQVMsRUFBYSxDQUFDLEVBQUssQ0FFeEIsSUFBTSxFQUFPLEdBQW1CLEtBQUssS0FBTSxDQUFHLEVBQzlDLEdBQUksRUFDQSxPQUFPLEVBQ1gsSUFBTSxFQUF1QixlQUFhLEtBQUssS0FBSyxZQUFhLEVBQUksS0FBSyxNQUFNLEdBQ3hFLE1BQUssU0FBVSxLQUFLLEtBQUssTUFDekIsaUJBQWtCLEtBQUssS0FDekIsRUFBTSxJQUFjLFdBQVEsS0FBSyxNQUFPLENBQUUsTUFBSyxRQUFPLGVBQWMsQ0FBQyxFQUN2RSxFQUNKLEdBQUksRUFBSSxPQUNKLEVBQW1CLEVBQUksV0FBVyxRQUFTLENBQ3ZDLElBQUssR0FBbUIsUUFDeEIsS0FBTyxBQUFhLDBEQUN4QixDQUFDLEVBRUwsSUFBTSxFQUFlLEVBQUksVUFBVSxVQUFVLEVBQzdDLEVBQUksYUFBZSxFQUNuQixJQUFNLEVBQVksQ0FDZCxNQUNBLFVBQVcsS0FBSyxLQUFLLFVBQ3JCLEtBQU0sR0FBUSxRQUFRLEtBQ3RCLFdBQVksR0FBUSxRQUFRLFdBQzVCLG1CQUFvQixHQUFRLFFBQVEsbUJBQ3BDLFVBQVcsQ0FBQyxHQUFRLFFBQVEsSUFBSSxFQUNoQyxZQUFhLENBQVcsTUFBRyxFQUMzQixVQUFXLEVBQ1gsVUFBVyxDQUFDLEVBQ1osa0JBQW1CLElBQUksSUFDdkIsYUFBYyxFQUFJLFdBQVcsU0FBVSxLQUFLLEtBQUssS0FBSyxTQUFXLEdBQzNELENBQUUsSUFBSyxFQUFJLE9BQVEsS0FBb0IsYUFBVyxFQUFJLE1BQU0sQ0FBRSxFQUM5RCxDQUFFLElBQUssRUFBSSxNQUFPLENBQUMsRUFDekIsZUFDQSxnQkFBaUIsRUFDakIsT0FBUSxFQUFJLE9BQ1osVUFBVyxFQUNYLFNBQ0EsT0FBUSxFQUFJLFFBQVUsRUFDdEIsV0FBc0IsT0FDdEIsY0FBZSxFQUFJLGFBQWUsS0FBSyxLQUFLLElBQU0sR0FBSyxLQUN2RCxVQUFZLEFBQWEsU0FDekIsS0FBTSxLQUFLLEtBQ1gsS0FBTSxJQUNWLEVBQ0ksRUFDSixHQUFJLENBQ0EsS0FBSyxjQUFjLElBQUksQ0FBRyxFQUNYLHdCQUFzQixDQUFTLEVBQzlDLEVBQUksU0FBUyxLQUFLLEtBQUssS0FBSyxRQUFRLEVBRXBDLElBQU0sRUFBZSxFQUFJLFNBQVMsRUFHbEMsR0FGQSxFQUFhLEdBQUcsRUFBSSxVQUFVLEdBQVEsUUFBUSxLQUFLLFdBQVcsSUFFMUQsS0FBSyxLQUFLLEtBQUssUUFDZixFQUFhLEtBQUssS0FBSyxLQUFLLFFBQVEsRUFBWSxDQUFHLEVBR3ZELElBQU0sRUFEbUIsU0FBUyxHQUFHLEdBQVEsUUFBUSxPQUFRLEdBQUcsR0FBUSxRQUFRLFFBQVMsQ0FBVSxFQUNyRSxLQUFNLEtBQUssTUFBTSxJQUFJLENBQUMsRUFLcEQsR0FKQSxLQUFLLE1BQU0sTUFBTSxFQUFjLENBQUUsSUFBSyxDQUFTLENBQUMsRUFDaEQsRUFBUyxPQUFTLEtBQ2xCLEVBQVMsT0FBUyxFQUFJLE9BQ3RCLEVBQVMsVUFBWSxFQUNqQixFQUFJLE9BQ0osRUFBUyxPQUFTLEdBQ3RCLEdBQUksS0FBSyxLQUFLLEtBQUssU0FBVyxHQUMxQixFQUFTLE9BQVMsQ0FBRSxlQUFjLGVBQWMsWUFBYSxFQUFJLE9BQVEsRUFFN0UsR0FBSSxLQUFLLEtBQUssWUFBYSxDQUN2QixJQUFRLFFBQU8sU0FBVSxFQU96QixHQU5BLEVBQVMsVUFBWSxDQUNqQixNQUFPLGFBQTJCLFFBQU8sT0FBWSxFQUNyRCxNQUFPLGFBQTJCLFFBQU8sT0FBWSxFQUNyRCxhQUFjLGFBQTJCLFFBQ3pDLGFBQWMsYUFBMkIsT0FDN0MsRUFDSSxFQUFTLE9BQ1QsRUFBUyxPQUFPLFVBQTBCLGFBQVcsRUFBUyxTQUFTLEVBRy9FLE9BREEsRUFBSSxTQUFXLEVBQ1IsRUFFWCxNQUFPLEVBQUcsQ0FHTixHQUZBLE9BQU8sRUFBSSxTQUNYLE9BQU8sRUFBSSxhQUNQLEVBQ0EsS0FBSyxPQUFPLE1BQU0seUNBQTBDLENBQVUsRUFFMUUsTUFBTSxTQUVWLENBQ0ksS0FBSyxjQUFjLE9BQU8sQ0FBRyxHQUdyQyxHQUFRLGNBQWdCLEdBQ3hCLFNBQVMsRUFBVSxDQUFDLEVBQU0sRUFBUSxFQUFLLENBQ25DLElBQUksRUFDSixFQUFvQixjQUFZLEtBQUssS0FBSyxZQUFhLEVBQVEsQ0FBRyxFQUNsRSxJQUFNLEVBQVksRUFBSyxLQUFLLEdBQzVCLEdBQUksRUFDQSxPQUFPLEVBQ1gsSUFBSSxFQUFPLEdBQVEsS0FBSyxLQUFNLEVBQU0sQ0FBRyxFQUN2QyxHQUFJLElBQVMsT0FBVyxDQUNwQixJQUFNLEdBQVUsRUFBSyxFQUFLLGFBQWUsTUFBUSxJQUFZLE9BQVMsT0FBSSxFQUFHLElBQ3JFLFlBQWEsS0FBSyxLQUMxQixHQUFJLEVBQ0EsRUFBTyxJQUFJLEdBQVUsQ0FBRSxTQUFRLFdBQVUsT0FBTSxRQUFPLENBQUMsRUFFL0QsR0FBSSxJQUFTLE9BQ1QsT0FDSixPQUFRLEVBQUssS0FBSyxHQUFPLEdBQWdCLEtBQUssS0FBTSxDQUFJLEVBRTVELEdBQVEsV0FBYSxHQUNyQixTQUFTLEVBQWUsQ0FBQyxFQUFLLENBQzFCLEdBQWtCLGFBQVcsRUFBSSxPQUFRLEtBQUssS0FBSyxVQUFVLEVBQ3pELE9BQU8sRUFBSSxPQUNmLE9BQU8sRUFBSSxTQUFXLEVBQU0sR0FBYyxLQUFLLEtBQU0sQ0FBRyxFQUc1RCxTQUFTLEVBQWtCLENBQUMsRUFBUSxDQUNoQyxRQUFXLEtBQU8sS0FBSyxjQUNuQixHQUFJLEdBQWMsRUFBSyxDQUFNLEVBQ3pCLE9BQU8sRUFHbkIsR0FBUSxtQkFBcUIsR0FDN0IsU0FBUyxFQUFhLENBQUMsRUFBSSxFQUFJLENBQzNCLE9BQU8sRUFBRyxTQUFXLEVBQUcsUUFBVSxFQUFHLE9BQVMsRUFBRyxNQUFRLEVBQUcsU0FBVyxFQUFHLE9BSTlFLFNBQVMsRUFBTyxDQUFDLEVBQ2pCLEVBQ0UsQ0FDRSxJQUFJLEVBQ0osTUFBTyxPQUFRLEVBQU0sS0FBSyxLQUFLLEtBQVMsU0FDcEMsRUFBTSxFQUNWLE9BQU8sR0FBTyxLQUFLLFFBQVEsSUFBUSxHQUFjLEtBQUssS0FBTSxFQUFNLENBQUcsRUFHekUsU0FBUyxFQUFhLENBQUMsRUFDdkIsRUFDRSxDQUNFLElBQU0sRUFBSSxLQUFLLEtBQUssWUFBWSxNQUFNLENBQUcsRUFDbkMsRUFBd0IsZ0JBQWMsS0FBSyxLQUFLLFlBQWEsQ0FBQyxFQUNoRSxFQUF1QixlQUFhLEtBQUssS0FBSyxZQUFhLEVBQUssT0FBUSxNQUFTLEVBRXJGLEdBQUksT0FBTyxLQUFLLEVBQUssTUFBTSxFQUFFLE9BQVMsR0FBSyxJQUFZLEVBQ25ELE9BQU8sR0FBZSxLQUFLLEtBQU0sRUFBRyxDQUFJLEVBRTVDLElBQU0sRUFBbUIsZUFBYSxDQUFPLEVBQ3ZDLEVBQVcsS0FBSyxLQUFLLElBQU8sS0FBSyxRQUFRLEdBQy9DLEdBQUksT0FBTyxHQUFZLFNBQVUsQ0FDN0IsSUFBTSxFQUFNLEdBQWMsS0FBSyxLQUFNLEVBQU0sQ0FBUSxFQUNuRCxHQUFJLE9BQVEsSUFBUSxNQUFRLElBQWEsT0FBUyxPQUFJLEVBQUksVUFBWSxTQUNsRSxPQUNKLE9BQU8sR0FBZSxLQUFLLEtBQU0sRUFBRyxDQUFHLEVBRTNDLEdBQUksT0FBUSxJQUFhLE1BQVEsSUFBa0IsT0FBUyxPQUFJLEVBQVMsVUFBWSxTQUNqRixPQUNKLEdBQUksQ0FBQyxFQUFTLFNBQ1YsR0FBYyxLQUFLLEtBQU0sQ0FBUSxFQUNyQyxHQUFJLElBQXFCLGVBQWEsQ0FBRyxFQUFHLENBQ3hDLElBQVEsVUFBVyxHQUNYLFlBQWEsS0FBSyxLQUNwQixFQUFRLEVBQU8sR0FDckIsR0FBSSxFQUNBLEVBQXVCLGNBQVksS0FBSyxLQUFLLFlBQWEsRUFBUSxDQUFLLEVBQzNFLE9BQU8sSUFBSSxHQUFVLENBQUUsU0FBUSxXQUFVLE9BQU0sUUFBTyxDQUFDLEVBRTNELE9BQU8sR0FBZSxLQUFLLEtBQU0sRUFBRyxDQUFRLEVBRWhELEdBQVEsY0FBZ0IsR0FDeEIsSUFBTSxHQUF1QixJQUFJLElBQUksQ0FDakMsYUFDQSxvQkFDQSxPQUNBLGVBQ0EsYUFDSixDQUFDLEVBQ0QsU0FBUyxFQUFjLENBQUMsR0FBYSxTQUFRLFNBQVEsUUFBUSxDQUN6RCxJQUFJLEVBQ0osS0FBTSxFQUFLLEVBQVUsWUFBYyxNQUFRLElBQVksT0FBUyxPQUFJLEVBQUcsTUFBUSxJQUMzRSxPQUNKLFFBQVcsS0FBUSxFQUFVLFNBQVMsTUFBTSxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQUcsQ0FDdkQsR0FBSSxPQUFPLElBQVcsVUFDbEIsT0FDSixJQUFNLEVBQWEsRUFBUSxBQUFVLG9CQUFrQixDQUFJLEdBQzNELEdBQUksSUFBZSxPQUNmLE9BQ0osRUFBUyxFQUVULElBQU0sRUFBUSxPQUFPLElBQVcsVUFBWSxFQUFPLEtBQUssS0FBSyxVQUM3RCxHQUFJLENBQUMsR0FBcUIsSUFBSSxDQUFJLEdBQUssRUFDbkMsRUFBdUIsY0FBWSxLQUFLLEtBQUssWUFBYSxFQUFRLENBQUssRUFHL0UsSUFBSSxFQUNKLEdBQUksT0FBTyxHQUFVLFdBQWEsRUFBTyxNQUFRLENBQVksd0JBQXNCLEVBQVEsS0FBSyxLQUFLLEVBQUcsQ0FDcEcsSUFBTSxFQUFxQixjQUFZLEtBQUssS0FBSyxZQUFhLEVBQVEsRUFBTyxJQUFJLEVBQ2pGLEVBQU0sR0FBYyxLQUFLLEtBQU0sRUFBTSxDQUFJLEVBSTdDLElBQVEsWUFBYSxLQUFLLEtBRTFCLEdBREEsRUFBTSxHQUFPLElBQUksR0FBVSxDQUFFLFNBQVEsV0FBVSxPQUFNLFFBQU8sQ0FBQyxFQUN6RCxFQUFJLFNBQVcsRUFBSSxLQUFLLE9BQ3hCLE9BQU8sRUFDWCxnWkM5T0gsUUFBUyxDQUFDLEVBQVEsRUFBUyxDQUMzQixPQUFPLEtBQVksVUFBWSxPQUFPLEdBQVcsSUFBYyxFQUFRLEVBQU8sRUFDOUUsT0FBTyxTQUFXLFlBQWMsT0FBTyxJQUFNLE9BQU8sQ0FBQyxTQUFTLEVBQUcsQ0FBTyxFQUN2RSxFQUFTLEVBQU8sSUFBTSxFQUFPLEtBQU8sQ0FBQyxDQUFFLElBQ3ZDLEdBQU8sUUFBUyxDQUFDLEVBQVMsQ0FFNUIsU0FBUyxDQUFLLEVBQUcsQ0FDYixRQUFTLEVBQU8sVUFBVSxPQUFRLEVBQU8sTUFBTSxDQUFJLEVBQUcsRUFBTyxFQUFHLEVBQU8sRUFBTSxJQUN6RSxFQUFLLEdBQVEsVUFBVSxHQUczQixHQUFJLEVBQUssT0FBUyxFQUFHLENBQ2pCLEVBQUssR0FBSyxFQUFLLEdBQUcsTUFBTSxFQUFHLEVBQUUsRUFDN0IsSUFBSSxFQUFLLEVBQUssT0FBUyxFQUN2QixRQUFTLEVBQUksRUFBRyxFQUFJLEVBQUksRUFBRSxFQUN0QixFQUFLLEdBQUssRUFBSyxHQUFHLE1BQU0sRUFBRyxFQUFFLEVBR2pDLE9BREEsRUFBSyxHQUFNLEVBQUssR0FBSSxNQUFNLENBQUMsRUFDcEIsRUFBSyxLQUFLLEVBQUUsRUFFbkIsWUFBTyxFQUFLLEdBR3BCLFNBQVMsQ0FBTSxDQUFDLEVBQUssQ0FDakIsTUFBTyxNQUFRLEVBQU0sSUFFekIsU0FBUyxDQUFNLENBQUMsRUFBRyxDQUNmLE9BQU8sSUFBTSxPQUFZLFlBQWMsSUFBTSxLQUFPLE9BQVMsT0FBTyxVQUFVLFNBQVMsS0FBSyxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBRW5KLFNBQVMsQ0FBVyxDQUFDLEVBQUssQ0FDdEIsT0FBTyxFQUFJLFlBQVksRUFFM0IsU0FBUyxDQUFPLENBQUMsRUFBSyxDQUNsQixPQUFPLElBQVEsUUFBYSxJQUFRLEtBQU8sYUFBZSxNQUFRLEVBQU0sT0FBTyxFQUFJLFNBQVcsVUFBWSxFQUFJLE9BQVMsRUFBSSxhQUFlLEVBQUksS0FBTyxDQUFDLENBQUcsRUFBSSxNQUFNLFVBQVUsTUFBTSxLQUFLLENBQUcsRUFBSSxDQUFDLEVBRXBNLFNBQVMsQ0FBTSxDQUFDLEVBQVEsRUFBUSxDQUM1QixJQUFJLEVBQU0sRUFDVixHQUFJLEVBQ0EsUUFBUyxLQUFPLEVBQ1osRUFBSSxHQUFPLEVBQU8sR0FHMUIsT0FBTyxFQUdYLFNBQVMsQ0FBUyxDQUFDLEVBQU8sQ0FDdEIsSUFBSSxFQUFVLFdBQ1YsRUFBTSxVQUNOLEVBQVUsUUFDVixFQUFXLFVBQ1gsRUFBVyxFQUFNLEVBQVMsVUFBVSxFQUV4QyxFQUFPLFVBQ0gsR0FBTyxVQUNQLEdBQWUsRUFBTyxFQUFPLFVBQVksRUFBVyxJQUFNLEVBQVcsRUFBVyxJQUFNLEVBQVcsQ0FBUSxFQUFJLElBQU0sRUFBTyxjQUFnQixFQUFXLElBQU0sRUFBVyxDQUFRLEVBQUksSUFBTSxFQUFPLElBQU0sRUFBVyxDQUFRLENBQUMsRUFFN04sR0FBZSwwQkFDWCxHQUFlLHNDQUNmLEdBQWEsRUFBTSxHQUFjLEVBQVksRUFDN0MsR0FBWSxFQUFRLDhFQUFnRixLQUV4RyxHQUFhLEVBQVEsb0JBQXNCLEtBRTNDLEdBQWUsRUFBTSxFQUFTLEVBQVMsaUJBQWtCLEVBQVMsRUFDOUQsR0FBVSxFQUFPLEVBQVUsRUFBTSxFQUFTLEVBQVMsYUFBYSxFQUFJLEdBQUcsRUFDdkUsR0FBWSxFQUFPLEVBQU8sR0FBZSxJQUFNLEVBQU0sR0FBYyxHQUFjLE9BQU8sQ0FBQyxFQUFJLEdBQUcsRUFDaEcsR0FBYSxFQUFPLEVBQU8sU0FBUyxFQUFJLElBQU0sRUFBTyxTQUFXLENBQU8sRUFBSSxJQUFNLEVBQU8sSUFBTSxFQUFVLENBQU8sRUFBSSxJQUFNLEVBQU8sUUFBVSxDQUFPLEVBQUksSUFBTSxDQUFPLEVBQ2xLLEdBQXFCLEVBQU8sRUFBTyxTQUFTLEVBQUksSUFBTSxFQUFPLFNBQVcsQ0FBTyxFQUFJLElBQU0sRUFBTyxJQUFNLEVBQVUsQ0FBTyxFQUFJLElBQU0sRUFBTyxVQUFZLENBQU8sRUFBSSxRQUFVLENBQU8sRUFFcEwsR0FBZSxFQUFPLEdBQXFCLE1BQVEsR0FBcUIsTUFBUSxHQUFxQixNQUFRLEVBQWtCLEVBQzNILEdBQU8sRUFBTyxFQUFXLE9BQU8sRUFDaEMsR0FBUSxFQUFPLEVBQU8sR0FBTyxNQUFRLEVBQUksRUFBSSxJQUFNLEVBQVksRUFDL0QsR0FBZ0IsRUFBTyxFQUFPLEdBQU8sS0FBSyxFQUFJLE1BQVEsRUFBSyxFQUUvRCxHQUFnQixFQUFPLFNBQVcsRUFBTyxHQUFPLEtBQUssRUFBSSxNQUFRLEVBQUssRUFFdEUsR0FBZ0IsRUFBTyxFQUFPLEVBQUksRUFBSSxVQUFZLEVBQU8sR0FBTyxLQUFLLEVBQUksTUFBUSxFQUFLLEVBRXRGLEdBQWdCLEVBQU8sRUFBTyxFQUFPLEdBQU8sS0FBSyxFQUFJLFFBQVUsRUFBSSxFQUFJLFVBQVksRUFBTyxHQUFPLEtBQUssRUFBSSxNQUFRLEVBQUssRUFFdkgsR0FBZ0IsRUFBTyxFQUFPLEVBQU8sR0FBTyxLQUFLLEVBQUksUUFBVSxFQUFJLEVBQUksVUFBWSxFQUFPLEdBQU8sS0FBSyxFQUFJLE1BQVEsRUFBSyxFQUV2SCxHQUFnQixFQUFPLEVBQU8sRUFBTyxHQUFPLEtBQUssRUFBSSxRQUFVLEVBQUksRUFBSSxVQUFZLEdBQU8sTUFBUSxFQUFLLEVBRXZHLEdBQWdCLEVBQU8sRUFBTyxFQUFPLEdBQU8sS0FBSyxFQUFJLFFBQVUsRUFBSSxFQUFJLFVBQVksRUFBSyxFQUV4RixHQUFnQixFQUFPLEVBQU8sRUFBTyxHQUFPLEtBQUssRUFBSSxRQUFVLEVBQUksRUFBSSxVQUFZLEVBQUksRUFFdkYsR0FBZ0IsRUFBTyxFQUFPLEVBQU8sR0FBTyxLQUFLLEVBQUksUUFBVSxFQUFJLEVBQUksU0FBUyxFQUVoRixHQUFlLEVBQU8sQ0FBQyxHQUFlLEdBQWUsR0FBZSxHQUFlLEdBQWUsR0FBZSxHQUFlLEdBQWUsRUFBYSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQ25LLEdBQVUsRUFBTyxFQUFPLEdBQWUsSUFBTSxFQUFZLEVBQUksR0FBRyxFQUVwRSxHQUFhLEVBQU8sR0FBZSxRQUFVLEVBQU8sRUFFcEQsR0FBcUIsRUFBTyxHQUFlLEVBQU8sZUFBaUIsRUFBVyxNQUFNLEVBQUksRUFBTyxFQUUvRixHQUFhLEVBQU8sT0FBUyxFQUFXLE9BQVMsRUFBTSxHQUFjLEdBQWMsT0FBTyxFQUFJLEdBQUcsRUFDN0YsR0FBYyxFQUFPLE1BQVEsRUFBTyxHQUFxQixJQUFNLEdBQWUsSUFBTSxFQUFVLEVBQUksS0FBSyxFQUUzRyxHQUFZLEVBQU8sRUFBTyxHQUFlLElBQU0sRUFBTSxHQUFjLEVBQVksQ0FBQyxFQUFJLEdBQUcsRUFDbkYsR0FBUSxFQUFPLEdBQWMsSUFBTSxHQUFlLE1BQVEsR0FBWSxLQUFZLEVBQVMsRUFDM0YsR0FBUSxFQUFPLEVBQVUsR0FBRyxFQUM1QixHQUFhLEVBQU8sRUFBTyxHQUFZLEdBQUcsRUFBSSxJQUFNLEdBQVEsRUFBTyxNQUFRLEVBQUssRUFBSSxHQUFHLEVBQ3ZGLEdBQVMsRUFBTyxHQUFlLElBQU0sRUFBTSxHQUFjLEdBQWMsVUFBVSxDQUFDLEVBQ2xGLEdBQVcsRUFBTyxHQUFTLEdBQUcsRUFDOUIsR0FBYyxFQUFPLEdBQVMsR0FBRyxFQUNqQyxHQUFpQixFQUFPLEVBQU8sR0FBZSxJQUFNLEVBQU0sR0FBYyxHQUFjLE9BQU8sQ0FBQyxFQUFJLEdBQUcsRUFDckcsR0FBZ0IsRUFBTyxFQUFPLE1BQVEsRUFBUSxFQUFJLEdBQUcsRUFDckQsR0FBaUIsRUFBTyxNQUFRLEVBQU8sR0FBYyxFQUFhLEVBQUksR0FBRyxFQUU3RSxHQUFpQixFQUFPLEdBQWlCLEVBQWEsRUFFdEQsR0FBaUIsRUFBTyxHQUFjLEVBQWEsRUFFbkQsR0FBYyxNQUFRLEdBQVMsSUFDM0IsR0FBUSxFQUFPLEdBQWdCLElBQU0sR0FBaUIsSUFBTSxHQUFpQixJQUFNLEdBQWlCLElBQU0sRUFBVyxFQUNySCxHQUFTLEVBQU8sRUFBTyxHQUFTLElBQU0sRUFBTSxXQUFZLEVBQVUsQ0FBQyxFQUFJLEdBQUcsRUFDMUUsR0FBWSxFQUFPLEVBQU8sR0FBUyxXQUFXLEVBQUksR0FBRyxFQUNyRCxHQUFhLEVBQU8sRUFBTyxTQUFXLEdBQWEsRUFBYSxFQUFJLElBQU0sR0FBaUIsSUFBTSxHQUFpQixJQUFNLEVBQVcsRUFDbkksR0FBTyxFQUFPLEdBQVUsTUFBUSxHQUFhLEVBQU8sTUFBUSxFQUFNLEVBQUksSUFBTSxFQUFPLE1BQVEsRUFBUyxFQUFJLEdBQUcsRUFDM0csR0FBaUIsRUFBTyxFQUFPLFNBQVcsR0FBYSxFQUFhLEVBQUksSUFBTSxHQUFpQixJQUFNLEdBQWlCLElBQU0sRUFBVyxFQUN2SSxHQUFZLEVBQU8sR0FBaUIsRUFBTyxNQUFRLEVBQU0sRUFBSSxJQUFNLEVBQU8sTUFBUSxFQUFTLEVBQUksR0FBRyxFQUNsRyxHQUFpQixFQUFPLEdBQU8sSUFBTSxFQUFTLEVBQzlDLEdBQWdCLEVBQU8sR0FBVSxNQUFRLEdBQWEsRUFBTyxNQUFRLEVBQU0sRUFBSSxHQUFHLEVBQ2xGLEdBQWUsS0FBTyxHQUFVLE9BQVMsRUFBTyxFQUFPLFVBQVksRUFBTyxJQUFNLEdBQVksSUFBSSxFQUFJLEtBQU8sR0FBUSxJQUFNLEVBQU8sT0FBUyxHQUFRLEdBQUcsRUFBSSxJQUFJLEVBQUksS0FBTyxHQUFnQixJQUFNLEdBQWlCLElBQU0sR0FBaUIsSUFBTSxHQUFjLEdBQUcsRUFBSSxFQUFPLE9BQVMsR0FBUyxHQUFHLEVBQUksSUFBTSxFQUFPLE9BQVMsR0FBWSxHQUFHLEVBQUksS0FDelUsR0FBZ0IsU0FBVyxFQUFPLEVBQU8sVUFBWSxFQUFPLElBQU0sR0FBWSxJQUFJLEVBQUksS0FBTyxHQUFRLElBQU0sRUFBTyxPQUFTLEdBQVEsR0FBRyxFQUFJLElBQUksRUFBSSxLQUFPLEdBQWdCLElBQU0sR0FBaUIsSUFBTSxHQUFpQixJQUFNLEdBQWMsR0FBRyxFQUFJLEVBQU8sT0FBUyxHQUFTLEdBQUcsRUFBSSxJQUFNLEVBQU8sT0FBUyxHQUFZLEdBQUcsRUFBSSxLQUMzVCxHQUFnQixLQUFPLEdBQVUsT0FBUyxFQUFPLEVBQU8sVUFBWSxFQUFPLElBQU0sR0FBWSxJQUFJLEVBQUksS0FBTyxHQUFRLElBQU0sRUFBTyxPQUFTLEdBQVEsR0FBRyxFQUFJLElBQUksRUFBSSxLQUFPLEdBQWdCLElBQU0sR0FBaUIsSUFBTSxHQUFpQixJQUFNLEdBQWMsR0FBRyxFQUFJLEVBQU8sT0FBUyxHQUFTLEdBQUcsRUFBSSxLQUNqUyxHQUFlLElBQU0sRUFBTyxPQUFTLEdBQVksR0FBRyxFQUFJLEtBQ3hELEdBQWlCLElBQU0sRUFBTyxJQUFNLEdBQVksSUFBSSxFQUFJLEtBQU8sR0FBUSxJQUFNLEVBQU8sT0FBUyxHQUFRLEdBQUcsRUFBSSxLQUNoSCxNQUFPLENBQ0gsV0FBWSxJQUFJLE9BQU8sRUFBTSxNQUFPLEVBQVMsRUFBUyxhQUFhLEVBQUcsR0FBRyxFQUN6RSxhQUFjLElBQUksT0FBTyxFQUFNLFlBQWEsR0FBYyxFQUFZLEVBQUcsR0FBRyxFQUM1RSxTQUFVLElBQUksT0FBTyxFQUFNLGtCQUFtQixHQUFjLEVBQVksRUFBRyxHQUFHLEVBQzlFLFNBQVUsSUFBSSxPQUFPLEVBQU0sa0JBQW1CLEdBQWMsRUFBWSxFQUFHLEdBQUcsRUFDOUUsa0JBQW1CLElBQUksT0FBTyxFQUFNLGVBQWdCLEdBQWMsRUFBWSxFQUFHLEdBQUcsRUFDcEYsVUFBVyxJQUFJLE9BQU8sRUFBTSxTQUFVLEdBQWMsR0FBYyxpQkFBa0IsRUFBVSxFQUFHLEdBQUcsRUFDcEcsYUFBYyxJQUFJLE9BQU8sRUFBTSxTQUFVLEdBQWMsR0FBYyxnQkFBZ0IsRUFBRyxHQUFHLEVBQzNGLE9BQVEsSUFBSSxPQUFPLEVBQU0sTUFBTyxHQUFjLEVBQVksRUFBRyxHQUFHLEVBQ2hFLFdBQVksSUFBSSxPQUFPLEdBQWMsR0FBRyxFQUN4QyxZQUFhLElBQUksT0FBTyxFQUFNLFNBQVUsR0FBYyxFQUFVLEVBQUcsR0FBRyxFQUN0RSxZQUFhLElBQUksT0FBTyxHQUFjLEdBQUcsRUFDekMsWUFBYSxJQUFJLE9BQU8sS0FBTyxHQUFlLElBQUksRUFDbEQsWUFBYSxJQUFJLE9BQU8sU0FBVyxHQUFlLElBQU0sRUFBTyxFQUFPLGVBQWlCLEVBQVcsTUFBTSxFQUFJLElBQU0sR0FBVSxHQUFHLEVBQUksUUFBUSxDQUMvSSxFQUVKLElBQUksRUFBZSxFQUFVLEVBQUssRUFFOUIsRUFBZSxFQUFVLEVBQUksRUFFN0IsRUFBZ0IsUUFBUyxFQUFHLENBQzlCLFNBQVMsQ0FBYSxDQUFDLEVBQUssRUFBRyxDQUM3QixJQUFJLEVBQU8sQ0FBQyxFQUNSLEVBQUssR0FDTCxFQUFLLEdBQ0wsRUFBSyxPQUVULEdBQUksQ0FDRixRQUFTLEdBQUssRUFBSSxPQUFPLFVBQVUsRUFBRyxHQUFJLEVBQUUsR0FBTSxHQUFLLEdBQUcsS0FBSyxHQUFHLE1BQU8sRUFBSyxHQUc1RSxHQUZBLEVBQUssS0FBSyxHQUFHLEtBQUssRUFFZCxHQUFLLEVBQUssU0FBVyxFQUFHLE1BRTlCLE1BQU8sR0FBSyxDQUNaLEVBQUssR0FDTCxFQUFLLFVBQ0wsQ0FDQSxHQUFJLENBQ0YsR0FBSSxDQUFDLEdBQU0sR0FBRyxPQUFXLEdBQUcsT0FBVSxTQUN0QyxDQUNBLEdBQUksRUFBSSxNQUFNLEdBSWxCLE9BQU8sRUFHVCxPQUFPLFFBQVMsQ0FBQyxFQUFLLEVBQUcsQ0FDdkIsR0FBSSxNQUFNLFFBQVEsQ0FBRyxFQUNuQixPQUFPLEVBQ0YsUUFBSSxPQUFPLFlBQVksT0FBTyxDQUFHLEVBQ3RDLE9BQU8sRUFBYyxFQUFLLENBQUMsRUFFM0IsV0FBVSxVQUFVLHNEQUFzRCxJQUc5RSxFQWNFLEVBQW9CLFFBQVMsQ0FBQyxFQUFLLENBQ3JDLEdBQUksTUFBTSxRQUFRLENBQUcsRUFBRyxDQUN0QixRQUFTLEVBQUksRUFBRyxFQUFPLE1BQU0sRUFBSSxNQUFNLEVBQUcsRUFBSSxFQUFJLE9BQVEsSUFBSyxFQUFLLEdBQUssRUFBSSxHQUU3RSxPQUFPLEVBRVAsWUFBTyxNQUFNLEtBQUssQ0FBRyxHQU1yQixFQUFTLFdBR1QsRUFBTyxHQUNQLEVBQU8sRUFDUCxFQUFPLEdBQ1AsRUFBTyxHQUNQLEVBQU8sSUFDUCxFQUFjLEdBQ2QsRUFBVyxJQUNYLEVBQVksSUFHWixFQUFnQixRQUNoQixFQUFnQixhQUNoQixFQUFrQiw0QkFHbEIsRUFBUyxDQUNaLFNBQVksa0RBQ1osWUFBYSxpREFDYixnQkFBaUIsZUFDbEIsRUFHSSxHQUFnQixFQUFPLEVBQ3ZCLEdBQVEsS0FBSyxNQUNiLEdBQXFCLE9BQU8sYUFVaEMsU0FBUyxFQUFPLENBQUMsRUFBTSxDQUN0QixNQUFVLFdBQVcsRUFBTyxFQUFLLEVBV2xDLFNBQVMsRUFBRyxDQUFDLEVBQU8sRUFBSSxDQUN2QixJQUFJLEVBQVMsQ0FBQyxFQUNWLEVBQVMsRUFBTSxPQUNuQixNQUFPLElBQ04sRUFBTyxHQUFVLEVBQUcsRUFBTSxFQUFPLEVBRWxDLE9BQU8sRUFhUixTQUFTLEVBQVMsQ0FBQyxFQUFRLEVBQUksQ0FDOUIsSUFBSSxFQUFRLEVBQU8sTUFBTSxHQUFHLEVBQ3hCLEVBQVMsR0FDYixHQUFJLEVBQU0sT0FBUyxFQUdsQixFQUFTLEVBQU0sR0FBSyxJQUNwQixFQUFTLEVBQU0sR0FHaEIsRUFBUyxFQUFPLFFBQVEsRUFBaUIsR0FBTSxFQUMvQyxJQUFJLEVBQVMsRUFBTyxNQUFNLEdBQUcsRUFDekIsRUFBVSxHQUFJLEVBQVEsQ0FBRSxFQUFFLEtBQUssR0FBRyxFQUN0QyxPQUFPLEVBQVMsRUFnQmpCLFNBQVMsRUFBVSxDQUFDLEVBQVEsQ0FDM0IsSUFBSSxFQUFTLENBQUMsRUFDVixFQUFVLEVBQ1YsRUFBUyxFQUFPLE9BQ3BCLE1BQU8sRUFBVSxFQUFRLENBQ3hCLElBQUksRUFBUSxFQUFPLFdBQVcsR0FBUyxFQUN2QyxHQUFJLEdBQVMsT0FBVSxHQUFTLE9BQVUsRUFBVSxFQUFRLENBRTNELElBQUksRUFBUSxFQUFPLFdBQVcsR0FBUyxFQUN2QyxJQUFLLEVBQVEsUUFBVyxNQUV2QixFQUFPLE9BQU8sRUFBUSxPQUFVLEtBQU8sRUFBUSxNQUFTLEtBQU8sRUFJL0QsT0FBTyxLQUFLLENBQUssRUFDakIsSUFHRCxPQUFPLEtBQUssQ0FBSyxFQUduQixPQUFPLEVBV1IsSUFBSSxHQUFhLFFBQW1CLENBQUMsRUFBTyxDQUMzQyxPQUFPLE9BQU8sY0FBYyxNQUFNLE9BQVEsRUFBa0IsQ0FBSyxDQUFDLEdBWS9ELEdBQWUsUUFBcUIsQ0FBQyxFQUFXLENBQ25ELEdBQUksRUFBWSxHQUFPLEdBQ3RCLE9BQU8sRUFBWSxHQUVwQixHQUFJLEVBQVksR0FBTyxHQUN0QixPQUFPLEVBQVksR0FFcEIsR0FBSSxFQUFZLEdBQU8sR0FDdEIsT0FBTyxFQUFZLEdBRXBCLE9BQU8sR0FjSixHQUFlLFFBQXFCLENBQUMsRUFBTyxFQUFNLENBR3JELE9BQU8sRUFBUSxHQUFLLElBQU0sRUFBUSxNQUFRLEdBQVEsSUFBTSxJQVFyRCxHQUFRLFFBQWMsQ0FBQyxFQUFPLEVBQVcsRUFBVyxDQUN2RCxJQUFJLEVBQUksRUFDUixFQUFRLEVBQVksR0FBTSxFQUFRLENBQUksRUFBSSxHQUFTLEVBQ25ELEdBQVMsR0FBTSxFQUFRLENBQVMsRUFDaEMsS0FBOEIsRUFBUSxHQUFnQixHQUFRLEVBQUcsR0FBSyxFQUNyRSxFQUFRLEdBQU0sRUFBUSxFQUFhLEVBRXBDLE9BQU8sR0FBTSxHQUFLLEdBQWdCLEdBQUssR0FBUyxFQUFRLEVBQUssR0FVMUQsR0FBUyxRQUFlLENBQUMsRUFBTyxDQUVuQyxJQUFJLEVBQVMsQ0FBQyxFQUNWLEVBQWMsRUFBTSxPQUNwQixFQUFJLEVBQ0osRUFBSSxFQUNKLEVBQU8sRUFNUCxHQUFRLEVBQU0sWUFBWSxDQUFTLEVBQ3ZDLEdBQUksR0FBUSxFQUNYLEdBQVEsRUFHVCxRQUFTLEdBQUksRUFBRyxHQUFJLEdBQU8sRUFBRSxHQUFHLENBRS9CLEdBQUksRUFBTSxXQUFXLEVBQUMsR0FBSyxJQUMxQixHQUFRLFdBQVcsRUFFcEIsRUFBTyxLQUFLLEVBQU0sV0FBVyxFQUFDLENBQUMsRUFNaEMsUUFBUyxHQUFRLEdBQVEsRUFBSSxHQUFRLEVBQUksRUFBRyxHQUFRLEdBQXVDLENBTzFGLElBQUksR0FBTyxFQUNYLFFBQVMsR0FBSSxFQUFHLEdBQUksR0FBeUIsSUFBSyxFQUFNLENBRXZELEdBQUksSUFBUyxFQUNaLEdBQVEsZUFBZSxFQUd4QixJQUFJLEdBQVEsR0FBYSxFQUFNLFdBQVcsSUFBTyxDQUFDLEVBRWxELEdBQUksSUFBUyxHQUFRLEdBQVEsSUFBTyxFQUFTLEdBQUssRUFBQyxFQUNsRCxHQUFRLFVBQVUsRUFHbkIsR0FBSyxHQUFRLEdBQ2IsSUFBSSxHQUFJLElBQUssRUFBTyxFQUFPLElBQUssRUFBTyxFQUFPLEVBQU8sR0FBSSxFQUV6RCxHQUFJLEdBQVEsR0FDWCxNQUdELElBQUksR0FBYSxFQUFPLEdBQ3hCLEdBQUksR0FBSSxHQUFNLEVBQVMsRUFBVSxFQUNoQyxHQUFRLFVBQVUsRUFHbkIsSUFBSyxHQUdOLElBQUksR0FBTSxFQUFPLE9BQVMsRUFLMUIsR0FKQSxFQUFPLEdBQU0sRUFBSSxHQUFNLEdBQUssSUFBUSxDQUFDLEVBSWpDLEdBQU0sRUFBSSxFQUFHLEVBQUksRUFBUyxFQUM3QixHQUFRLFVBQVUsRUFHbkIsR0FBSyxHQUFNLEVBQUksRUFBRyxFQUNsQixHQUFLLEdBR0wsRUFBTyxPQUFPLElBQUssRUFBRyxDQUFDLEVBR3hCLE9BQU8sT0FBTyxjQUFjLE1BQU0sT0FBUSxDQUFNLEdBVTdDLEdBQVMsUUFBZSxDQUFDLEVBQU8sQ0FDbkMsSUFBSSxFQUFTLENBQUMsRUFHZCxFQUFRLEdBQVcsQ0FBSyxFQUd4QixJQUFJLEVBQWMsRUFBTSxPQUdwQixFQUFJLEVBQ0osRUFBUSxFQUNSLEVBQU8sRUFHUCxHQUE0QixHQUM1QixHQUFvQixHQUNwQixHQUFpQixPQUVyQixHQUFJLENBQ0gsUUFBUyxHQUFZLEVBQU0sT0FBTyxVQUFVLEVBQUcsR0FBTyxFQUFFLElBQTZCLEdBQVEsR0FBVSxLQUFLLEdBQUcsTUFBTyxHQUE0QixHQUFNLENBQ3ZKLElBQUksR0FBaUIsR0FBTSxNQUUzQixHQUFJLEdBQWlCLElBQ3BCLEVBQU8sS0FBSyxHQUFtQixFQUFjLENBQUMsR0FHL0MsTUFBTyxHQUFLLENBQ2IsR0FBb0IsR0FDcEIsR0FBaUIsVUFDaEIsQ0FDRCxHQUFJLENBQ0gsR0FBSSxDQUFDLElBQTZCLEdBQVUsT0FDM0MsR0FBVSxPQUFPLFNBRWpCLENBQ0QsR0FBSSxHQUNILE1BQU0sSUFLVCxJQUFJLEdBQWMsRUFBTyxPQUNyQixHQUFpQixHQU1yQixHQUFJLEdBQ0gsRUFBTyxLQUFLLENBQVMsRUFJdEIsTUFBTyxHQUFpQixFQUFhLENBSXBDLElBQUksR0FBSSxFQUNKLEdBQTZCLEdBQzdCLEdBQXFCLEdBQ3JCLEdBQWtCLE9BRXRCLEdBQUksQ0FDSCxRQUFTLEdBQWEsRUFBTSxPQUFPLFVBQVUsRUFBRyxHQUFRLEVBQUUsSUFBOEIsR0FBUyxHQUFXLEtBQUssR0FBRyxNQUFPLEdBQTZCLEdBQU0sQ0FDN0osSUFBSSxHQUFlLEdBQU8sTUFFMUIsR0FBSSxJQUFnQixHQUFLLEdBQWUsR0FDdkMsR0FBSSxJQU1MLE1BQU8sR0FBSyxDQUNiLEdBQXFCLEdBQ3JCLEdBQWtCLFVBQ2pCLENBQ0QsR0FBSSxDQUNILEdBQUksQ0FBQyxJQUE4QixHQUFXLE9BQzdDLEdBQVcsT0FBTyxTQUVsQixDQUNELEdBQUksR0FDSCxNQUFNLElBS1QsSUFBSSxHQUF3QixHQUFpQixFQUM3QyxHQUFJLEdBQUksRUFBSSxJQUFPLEVBQVMsR0FBUyxFQUFxQixFQUN6RCxHQUFRLFVBQVUsRUFHbkIsSUFBVSxHQUFJLEdBQUssR0FDbkIsRUFBSSxHQUVKLElBQUksR0FBNkIsR0FDN0IsR0FBcUIsR0FDckIsR0FBa0IsT0FFdEIsR0FBSSxDQUNILFFBQVMsR0FBYSxFQUFNLE9BQU8sVUFBVSxFQUFHLEdBQVEsRUFBRSxJQUE4QixHQUFTLEdBQVcsS0FBSyxHQUFHLE1BQU8sR0FBNkIsR0FBTSxDQUM3SixJQUFJLEdBQWdCLEdBQU8sTUFFM0IsR0FBSSxHQUFnQixHQUFLLEVBQUUsRUFBUSxFQUNsQyxHQUFRLFVBQVUsRUFFbkIsR0FBSSxJQUFpQixFQUFHLENBRXZCLElBQUksR0FBSSxFQUNSLFFBQVMsR0FBSSxHQUF5QixJQUFLLEVBQU0sQ0FDaEQsSUFBSSxHQUFJLElBQUssRUFBTyxFQUFPLElBQUssRUFBTyxFQUFPLEVBQU8sR0FBSSxFQUN6RCxHQUFJLEdBQUksR0FDUCxNQUVELElBQUksR0FBVSxHQUFJLEdBQ2QsR0FBYSxFQUFPLEdBQ3hCLEVBQU8sS0FBSyxHQUFtQixHQUFhLEdBQUksR0FBVSxHQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ3pFLEdBQUksR0FBTSxHQUFVLEVBQVUsRUFHL0IsRUFBTyxLQUFLLEdBQW1CLEdBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNsRCxFQUFPLEdBQU0sRUFBTyxHQUF1QixJQUFrQixFQUFXLEVBQ3hFLEVBQVEsRUFDUixFQUFFLEtBR0gsTUFBTyxHQUFLLENBQ2IsR0FBcUIsR0FDckIsR0FBa0IsVUFDakIsQ0FDRCxHQUFJLENBQ0gsR0FBSSxDQUFDLElBQThCLEdBQVcsT0FDN0MsR0FBVyxPQUFPLFNBRWxCLENBQ0QsR0FBSSxHQUNILE1BQU0sSUFLVCxFQUFFLEVBQ0YsRUFBRSxFQUVILE9BQU8sRUFBTyxLQUFLLEVBQUUsR0FjbEIsR0FBWSxRQUFrQixDQUFDLEVBQU8sQ0FDekMsT0FBTyxHQUFVLEVBQU8sUUFBUyxDQUFDLEVBQVEsQ0FDekMsT0FBTyxFQUFjLEtBQUssQ0FBTSxFQUFJLEdBQU8sRUFBTyxNQUFNLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBSSxFQUM1RSxHQWNFLEdBQVUsUUFBZ0IsQ0FBQyxFQUFPLENBQ3JDLE9BQU8sR0FBVSxFQUFPLFFBQVMsQ0FBQyxFQUFRLENBQ3pDLE9BQU8sRUFBYyxLQUFLLENBQU0sRUFBSSxPQUFTLEdBQU8sQ0FBTSxFQUFJLEVBQzlELEdBTUUsR0FBVyxDQU1kLFFBQVcsUUFRWCxLQUFRLENBQ1AsT0FBVSxHQUNWLE9BQVUsRUFDWCxFQUNBLE9BQVUsR0FDVixPQUFVLEdBQ1YsUUFBVyxHQUNYLFVBQWEsRUFDZCxFQW9DSSxHQUFVLENBQUMsRUFDZixTQUFTLEVBQVUsQ0FBQyxFQUFLLENBQ3JCLElBQUksRUFBSSxFQUFJLFdBQVcsQ0FBQyxFQUNwQixFQUFTLE9BQ2IsR0FBSSxFQUFJLEdBQUksRUFBSSxLQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsWUFBWSxFQUFPLFFBQUksRUFBSSxJQUFLLEVBQUksSUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLFlBQVksRUFBTyxRQUFJLEVBQUksS0FBTSxFQUFJLEtBQU8sR0FBSyxFQUFJLEtBQUssU0FBUyxFQUFFLEVBQUUsWUFBWSxFQUFJLEtBQU8sRUFBSSxHQUFLLEtBQUssU0FBUyxFQUFFLEVBQUUsWUFBWSxFQUFPLE9BQUksS0FBTyxHQUFLLEdBQUssS0FBSyxTQUFTLEVBQUUsRUFBRSxZQUFZLEVBQUksS0FBTyxHQUFLLEVBQUksR0FBSyxLQUFLLFNBQVMsRUFBRSxFQUFFLFlBQVksRUFBSSxLQUFPLEVBQUksR0FBSyxLQUFLLFNBQVMsRUFBRSxFQUFFLFlBQVksRUFDdlksT0FBTyxFQUVYLFNBQVMsRUFBVyxDQUFDLEVBQUssQ0FDdEIsSUFBSSxFQUFTLEdBQ1QsRUFBSSxFQUNKLEVBQUssRUFBSSxPQUNiLE1BQU8sRUFBSSxFQUFJLENBQ1gsSUFBSSxFQUFJLFNBQVMsRUFBSSxPQUFPLEVBQUksRUFBRyxDQUFDLEVBQUcsRUFBRSxFQUN6QyxHQUFJLEVBQUksSUFDSixHQUFVLE9BQU8sYUFBYSxDQUFDLEVBQy9CLEdBQUssRUFDRixRQUFJLEdBQUssS0FBTyxFQUFJLElBQUssQ0FDNUIsR0FBSSxFQUFLLEdBQUssRUFBRyxDQUNiLElBQUksRUFBSyxTQUFTLEVBQUksT0FBTyxFQUFJLEVBQUcsQ0FBQyxFQUFHLEVBQUUsRUFDMUMsR0FBVSxPQUFPLGNBQWMsRUFBSSxLQUFPLEVBQUksRUFBSyxFQUFFLEVBRXJELFFBQVUsRUFBSSxPQUFPLEVBQUcsQ0FBQyxFQUU3QixHQUFLLEVBQ0YsUUFBSSxHQUFLLElBQUssQ0FDakIsR0FBSSxFQUFLLEdBQUssRUFBRyxDQUNiLElBQUksRUFBSyxTQUFTLEVBQUksT0FBTyxFQUFJLEVBQUcsQ0FBQyxFQUFHLEVBQUUsRUFDdEMsR0FBSyxTQUFTLEVBQUksT0FBTyxFQUFJLEVBQUcsQ0FBQyxFQUFHLEVBQUUsRUFDMUMsR0FBVSxPQUFPLGNBQWMsRUFBSSxLQUFPLElBQU0sRUFBSyxLQUFPLEVBQUksR0FBSyxFQUFFLEVBRXZFLFFBQVUsRUFBSSxPQUFPLEVBQUcsQ0FBQyxFQUU3QixHQUFLLEVBRUwsUUFBVSxFQUFJLE9BQU8sRUFBRyxDQUFDLEVBQ3pCLEdBQUssRUFHYixPQUFPLEVBRVgsU0FBUyxFQUEyQixDQUFDLEVBQVksRUFBVSxDQUN2RCxTQUFTLENBQWdCLENBQUMsRUFBSyxDQUMzQixJQUFJLEVBQVMsR0FBWSxDQUFHLEVBQzVCLE1BQU8sQ0FBQyxFQUFPLE1BQU0sRUFBUyxVQUFVLEVBQUksRUFBTSxFQUV0RCxHQUFJLEVBQVcsT0FBUSxFQUFXLE9BQVMsT0FBTyxFQUFXLE1BQU0sRUFBRSxRQUFRLEVBQVMsWUFBYSxDQUFnQixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQVMsV0FBWSxFQUFFLEVBQ2xLLEdBQUksRUFBVyxXQUFhLE9BQVcsRUFBVyxTQUFXLE9BQU8sRUFBVyxRQUFRLEVBQUUsUUFBUSxFQUFTLFlBQWEsQ0FBZ0IsRUFBRSxRQUFRLEVBQVMsYUFBYyxFQUFVLEVBQUUsUUFBUSxFQUFTLFlBQWEsQ0FBVyxFQUM3TixHQUFJLEVBQVcsT0FBUyxPQUFXLEVBQVcsS0FBTyxPQUFPLEVBQVcsSUFBSSxFQUFFLFFBQVEsRUFBUyxZQUFhLENBQWdCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBUyxTQUFVLEVBQVUsRUFBRSxRQUFRLEVBQVMsWUFBYSxDQUFXLEVBQzNOLEdBQUksRUFBVyxPQUFTLE9BQVcsRUFBVyxLQUFPLE9BQU8sRUFBVyxJQUFJLEVBQUUsUUFBUSxFQUFTLFlBQWEsQ0FBZ0IsRUFBRSxRQUFRLEVBQVcsT0FBUyxFQUFTLFNBQVcsRUFBUyxrQkFBbUIsRUFBVSxFQUFFLFFBQVEsRUFBUyxZQUFhLENBQVcsRUFDOVAsR0FBSSxFQUFXLFFBQVUsT0FBVyxFQUFXLE1BQVEsT0FBTyxFQUFXLEtBQUssRUFBRSxRQUFRLEVBQVMsWUFBYSxDQUFnQixFQUFFLFFBQVEsRUFBUyxVQUFXLEVBQVUsRUFBRSxRQUFRLEVBQVMsWUFBYSxDQUFXLEVBQ2pOLEdBQUksRUFBVyxXQUFhLE9BQVcsRUFBVyxTQUFXLE9BQU8sRUFBVyxRQUFRLEVBQUUsUUFBUSxFQUFTLFlBQWEsQ0FBZ0IsRUFBRSxRQUFRLEVBQVMsYUFBYyxFQUFVLEVBQUUsUUFBUSxFQUFTLFlBQWEsQ0FBVyxFQUM3TixPQUFPLEVBR1gsU0FBUyxFQUFrQixDQUFDLEVBQUssQ0FDN0IsT0FBTyxFQUFJLFFBQVEsVUFBVyxJQUFJLEdBQUssSUFFM0MsU0FBUyxFQUFjLENBQUMsRUFBTSxFQUFVLENBQ3BDLElBQUksRUFBVSxFQUFLLE1BQU0sRUFBUyxXQUFXLEdBQUssQ0FBQyxFQUUvQyxFQUFXLEVBQWMsRUFBUyxDQUFDLEVBQ25DLEVBQVUsRUFBUyxHQUV2QixHQUFJLEVBQ0EsT0FBTyxFQUFRLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBa0IsRUFBRSxLQUFLLEdBQUcsRUFFMUQsWUFBTyxFQUdmLFNBQVMsRUFBYyxDQUFDLEVBQU0sRUFBVSxDQUNwQyxJQUFJLEVBQVUsRUFBSyxNQUFNLEVBQVMsV0FBVyxHQUFLLENBQUMsRUFFL0MsRUFBWSxFQUFjLEVBQVMsQ0FBQyxFQUNwQyxFQUFVLEVBQVUsR0FDcEIsRUFBTyxFQUFVLEdBRXJCLEdBQUksRUFBUyxDQUNULElBQUksRUFBd0IsRUFBUSxZQUFZLEVBQUUsTUFBTSxJQUFJLEVBQUUsUUFBUSxFQUNsRSxHQUF5QixFQUFjLEVBQXVCLENBQUMsRUFDL0QsR0FBTyxHQUF1QixHQUM5QixHQUFRLEdBQXVCLEdBRS9CLEdBQWMsR0FBUSxHQUFNLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBa0IsRUFBSSxDQUFDLEVBQ2xFLEdBQWEsR0FBSyxNQUFNLEdBQUcsRUFBRSxJQUFJLEVBQWtCLEVBQ25ELEdBQXlCLEVBQVMsWUFBWSxLQUFLLEdBQVcsR0FBVyxPQUFTLEVBQUUsRUFDcEYsR0FBYSxHQUF5QixFQUFJLEVBQzFDLEdBQWtCLEdBQVcsT0FBUyxHQUN0QyxHQUFTLE1BQU0sRUFBVSxFQUM3QixRQUFTLEdBQUksRUFBRyxHQUFJLEdBQVksRUFBRSxHQUM5QixHQUFPLElBQUssR0FBWSxLQUFNLEdBQVcsR0FBa0IsS0FBTSxHQUVyRSxHQUFJLEdBQ0EsR0FBTyxHQUFhLEdBQUssR0FBZSxHQUFPLEdBQWEsR0FBSSxDQUFRLEVBRTVFLElBQUksR0FBZ0IsR0FBTyxPQUFPLFFBQVMsQ0FBQyxHQUFLLEdBQU8sR0FBTyxDQUMzRCxHQUFJLENBQUMsSUFBUyxLQUFVLElBQUssQ0FDekIsSUFBSSxHQUFjLEdBQUksR0FBSSxPQUFTLEdBQ25DLEdBQUksSUFBZSxHQUFZLE1BQVEsR0FBWSxTQUFXLEdBQzFELEdBQVksU0FFWixRQUFJLEtBQUssQ0FBRSxNQUFPLEdBQU8sT0FBUSxDQUFFLENBQUMsRUFHNUMsT0FBTyxJQUNSLENBQUMsQ0FBQyxFQUNELEdBQW9CLEdBQWMsS0FBSyxRQUFTLENBQUMsR0FBRyxHQUFHLENBQ3ZELE9BQU8sR0FBRSxPQUFTLEdBQUUsT0FDdkIsRUFBRSxHQUNDLEdBQWUsT0FDbkIsR0FBSSxJQUFxQixHQUFrQixPQUFTLEVBQUcsQ0FDbkQsSUFBSSxHQUFXLEdBQU8sTUFBTSxFQUFHLEdBQWtCLEtBQUssRUFDbEQsR0FBVSxHQUFPLE1BQU0sR0FBa0IsTUFBUSxHQUFrQixNQUFNLEVBQzdFLEdBQVUsR0FBUyxLQUFLLEdBQUcsRUFBSSxLQUFPLEdBQVEsS0FBSyxHQUFHLEVBRXRELFFBQVUsR0FBTyxLQUFLLEdBQUcsRUFFN0IsR0FBSSxFQUNBLElBQVcsSUFBTSxFQUVyQixPQUFPLEdBRVAsWUFBTyxFQUdmLElBQUksR0FBWSxrSUFDWixHQUF3QixHQUFHLE1BQU0sT0FBTyxFQUFFLEtBQU8sT0FDckQsU0FBUyxFQUFLLENBQUMsRUFBVyxDQUN0QixJQUFJLEVBQVUsVUFBVSxPQUFTLEdBQUssVUFBVSxLQUFPLE9BQVksVUFBVSxHQUFLLENBQUMsRUFFL0UsRUFBYSxDQUFDLEVBQ2QsRUFBVyxFQUFRLE1BQVEsR0FBUSxFQUFlLEVBQ3RELEdBQUksRUFBUSxZQUFjLFNBQVUsR0FBYSxFQUFRLE9BQVMsRUFBUSxPQUFTLElBQU0sSUFBTSxLQUFPLEVBQ3RHLElBQUksRUFBVSxFQUFVLE1BQU0sRUFBUyxFQUN2QyxHQUFJLEVBQVMsQ0FDVCxHQUFJLElBVUEsR0FSQSxFQUFXLE9BQVMsRUFBUSxHQUM1QixFQUFXLFNBQVcsRUFBUSxHQUM5QixFQUFXLEtBQU8sRUFBUSxHQUMxQixFQUFXLEtBQU8sU0FBUyxFQUFRLEdBQUksRUFBRSxFQUN6QyxFQUFXLEtBQU8sRUFBUSxJQUFNLEdBQ2hDLEVBQVcsTUFBUSxFQUFRLEdBQzNCLEVBQVcsU0FBVyxFQUFRLEdBRTFCLE1BQU0sRUFBVyxJQUFJLEVBQ3JCLEVBQVcsS0FBTyxFQUFRLEdBYTlCLFFBUkEsRUFBVyxPQUFTLEVBQVEsSUFBTSxPQUNsQyxFQUFXLFNBQVcsRUFBVSxRQUFRLEdBQUcsSUFBTSxHQUFLLEVBQVEsR0FBSyxPQUNuRSxFQUFXLEtBQU8sRUFBVSxRQUFRLElBQUksSUFBTSxHQUFLLEVBQVEsR0FBSyxPQUNoRSxFQUFXLEtBQU8sU0FBUyxFQUFRLEdBQUksRUFBRSxFQUN6QyxFQUFXLEtBQU8sRUFBUSxJQUFNLEdBQ2hDLEVBQVcsTUFBUSxFQUFVLFFBQVEsR0FBRyxJQUFNLEdBQUssRUFBUSxHQUFLLE9BQ2hFLEVBQVcsU0FBVyxFQUFVLFFBQVEsR0FBRyxJQUFNLEdBQUssRUFBUSxHQUFLLE9BRS9ELE1BQU0sRUFBVyxJQUFJLEVBQ3JCLEVBQVcsS0FBTyxFQUFVLE1BQU0sK0JBQStCLEVBQUksRUFBUSxHQUFLLE9BRzFGLEdBQUksRUFBVyxLQUVYLEVBQVcsS0FBTyxHQUFlLEdBQWUsRUFBVyxLQUFNLENBQVEsRUFBRyxDQUFRLEVBR3hGLEdBQUksRUFBVyxTQUFXLFFBQWEsRUFBVyxXQUFhLFFBQWEsRUFBVyxPQUFTLFFBQWEsRUFBVyxPQUFTLFFBQWEsQ0FBQyxFQUFXLE1BQVEsRUFBVyxRQUFVLE9BQ25MLEVBQVcsVUFBWSxnQkFDcEIsUUFBSSxFQUFXLFNBQVcsT0FDN0IsRUFBVyxVQUFZLFdBQ3BCLFFBQUksRUFBVyxXQUFhLE9BQy9CLEVBQVcsVUFBWSxXQUV2QixPQUFXLFVBQVksTUFHM0IsR0FBSSxFQUFRLFdBQWEsRUFBUSxZQUFjLFVBQVksRUFBUSxZQUFjLEVBQVcsVUFDeEYsRUFBVyxNQUFRLEVBQVcsT0FBUyxnQkFBa0IsRUFBUSxVQUFZLGNBR2pGLElBQUksRUFBZ0IsR0FBUyxHQUFRLFFBQVUsRUFBVyxRQUFVLElBQUksWUFBWSxHQUVwRixHQUFJLENBQUMsRUFBUSxpQkFBbUIsQ0FBQyxHQUFpQixDQUFDLEVBQWMsZ0JBQWlCLENBRTlFLEdBQUksRUFBVyxPQUFTLEVBQVEsWUFBYyxHQUFpQixFQUFjLFlBRXpFLEdBQUksQ0FDQSxFQUFXLEtBQU8sR0FBUyxRQUFRLEVBQVcsS0FBSyxRQUFRLEVBQVMsWUFBYSxFQUFXLEVBQUUsWUFBWSxDQUFDLEVBQzdHLE1BQU8sRUFBRyxDQUNSLEVBQVcsTUFBUSxFQUFXLE9BQVMsa0VBQW9FLEVBSW5ILEdBQTRCLEVBQVksQ0FBWSxFQUdwRCxRQUE0QixFQUFZLENBQVEsRUFHcEQsR0FBSSxHQUFpQixFQUFjLE1BQy9CLEVBQWMsTUFBTSxFQUFZLENBQU8sRUFHM0MsT0FBVyxNQUFRLEVBQVcsT0FBUyx5QkFFM0MsT0FBTyxFQUdYLFNBQVMsRUFBbUIsQ0FBQyxFQUFZLEVBQVMsQ0FDOUMsSUFBSSxFQUFXLEVBQVEsTUFBUSxHQUFRLEVBQWUsRUFDbEQsRUFBWSxDQUFDLEVBQ2pCLEdBQUksRUFBVyxXQUFhLE9BQ3hCLEVBQVUsS0FBSyxFQUFXLFFBQVEsRUFDbEMsRUFBVSxLQUFLLEdBQUcsRUFFdEIsR0FBSSxFQUFXLE9BQVMsT0FFcEIsRUFBVSxLQUFLLEdBQWUsR0FBZSxPQUFPLEVBQVcsSUFBSSxFQUFHLENBQVEsRUFBRyxDQUFRLEVBQUUsUUFBUSxFQUFTLFlBQWEsUUFBUyxDQUFDLEVBQUcsRUFBSSxFQUFJLENBQzFJLE1BQU8sSUFBTSxHQUFNLEVBQUssTUFBUSxFQUFLLElBQU0sSUFDOUMsQ0FBQyxFQUVOLEdBQUksT0FBTyxFQUFXLE9BQVMsVUFBWSxPQUFPLEVBQVcsT0FBUyxTQUNsRSxFQUFVLEtBQUssR0FBRyxFQUNsQixFQUFVLEtBQUssT0FBTyxFQUFXLElBQUksQ0FBQyxFQUUxQyxPQUFPLEVBQVUsT0FBUyxFQUFVLEtBQUssRUFBRSxFQUFJLE9BR25ELElBQUksR0FBTyxXQUNQLEdBQU8sY0FDUCxHQUFPLGdCQUNQLEdBQU8seUJBQ1gsU0FBUyxFQUFpQixDQUFDLEVBQU8sQ0FDOUIsSUFBSSxFQUFTLENBQUMsRUFDZCxNQUFPLEVBQU0sT0FDVCxHQUFJLEVBQU0sTUFBTSxFQUFJLEVBQ2hCLEVBQVEsRUFBTSxRQUFRLEdBQU0sRUFBRSxFQUMzQixRQUFJLEVBQU0sTUFBTSxFQUFJLEVBQ3ZCLEVBQVEsRUFBTSxRQUFRLEdBQU0sR0FBRyxFQUM1QixRQUFJLEVBQU0sTUFBTSxFQUFJLEVBQ3ZCLEVBQVEsRUFBTSxRQUFRLEdBQU0sR0FBRyxFQUMvQixFQUFPLElBQUksRUFDUixRQUFJLElBQVUsS0FBTyxJQUFVLEtBQ2xDLEVBQVEsR0FDTCxLQUNILElBQUksRUFBSyxFQUFNLE1BQU0sRUFBSSxFQUN6QixHQUFJLEVBQUksQ0FDSixJQUFJLEVBQUksRUFBRyxHQUNYLEVBQVEsRUFBTSxNQUFNLEVBQUUsTUFBTSxFQUM1QixFQUFPLEtBQUssQ0FBQyxFQUViLFdBQVUsTUFBTSxrQ0FBa0MsRUFJOUQsT0FBTyxFQUFPLEtBQUssRUFBRSxFQUd6QixTQUFTLEVBQVMsQ0FBQyxFQUFZLENBQzNCLElBQUksRUFBVSxVQUFVLE9BQVMsR0FBSyxVQUFVLEtBQU8sT0FBWSxVQUFVLEdBQUssQ0FBQyxFQUUvRSxFQUFXLEVBQVEsSUFBTSxFQUFlLEVBQ3hDLEVBQVksQ0FBQyxFQUViLEVBQWdCLEdBQVMsR0FBUSxRQUFVLEVBQVcsUUFBVSxJQUFJLFlBQVksR0FFcEYsR0FBSSxHQUFpQixFQUFjLFVBQVcsRUFBYyxVQUFVLEVBQVksQ0FBTyxFQUN6RixHQUFJLEVBQVcsTUFFWCxHQUFJLEVBQVMsWUFBWSxLQUFLLEVBQVcsSUFBSSxFQUFHLENBSTNDLFFBQUksRUFBUSxZQUFjLEdBQWlCLEVBQWMsV0FFdEQsR0FBSSxDQUNBLEVBQVcsS0FBTyxDQUFDLEVBQVEsSUFBTSxHQUFTLFFBQVEsRUFBVyxLQUFLLFFBQVEsRUFBUyxZQUFhLEVBQVcsRUFBRSxZQUFZLENBQUMsRUFBSSxHQUFTLFVBQVUsRUFBVyxJQUFJLEVBQ2xLLE1BQU8sR0FBRyxDQUNSLEVBQVcsTUFBUSxFQUFXLE9BQVMsK0NBQWlELENBQUMsRUFBUSxJQUFNLFFBQVUsV0FBYSxrQkFBb0IsSUFNbEssR0FEQSxHQUE0QixFQUFZLENBQVEsRUFDNUMsRUFBUSxZQUFjLFVBQVksRUFBVyxPQUM3QyxFQUFVLEtBQUssRUFBVyxNQUFNLEVBQ2hDLEVBQVUsS0FBSyxHQUFHLEVBRXRCLElBQUksRUFBWSxHQUFvQixFQUFZLENBQU8sRUFDdkQsR0FBSSxJQUFjLE9BQVcsQ0FDekIsR0FBSSxFQUFRLFlBQWMsU0FDdEIsRUFBVSxLQUFLLElBQUksRUFHdkIsR0FEQSxFQUFVLEtBQUssQ0FBUyxFQUNwQixFQUFXLE1BQVEsRUFBVyxLQUFLLE9BQU8sQ0FBQyxJQUFNLElBQ2pELEVBQVUsS0FBSyxHQUFHLEVBRzFCLEdBQUksRUFBVyxPQUFTLE9BQVcsQ0FDL0IsSUFBSSxFQUFJLEVBQVcsS0FDbkIsR0FBSSxDQUFDLEVBQVEsZUFBaUIsQ0FBQyxHQUFpQixDQUFDLEVBQWMsY0FDM0QsRUFBSSxHQUFrQixDQUFDLEVBRTNCLEdBQUksSUFBYyxPQUNkLEVBQUksRUFBRSxRQUFRLFFBQVMsTUFBTSxFQUVqQyxFQUFVLEtBQUssQ0FBQyxFQUVwQixHQUFJLEVBQVcsUUFBVSxPQUNyQixFQUFVLEtBQUssR0FBRyxFQUNsQixFQUFVLEtBQUssRUFBVyxLQUFLLEVBRW5DLEdBQUksRUFBVyxXQUFhLE9BQ3hCLEVBQVUsS0FBSyxHQUFHLEVBQ2xCLEVBQVUsS0FBSyxFQUFXLFFBQVEsRUFFdEMsT0FBTyxFQUFVLEtBQUssRUFBRSxFQUc1QixTQUFTLEVBQWlCLENBQUMsRUFBTSxFQUFVLENBQ3ZDLElBQUksRUFBVSxVQUFVLE9BQVMsR0FBSyxVQUFVLEtBQU8sT0FBWSxVQUFVLEdBQUssQ0FBQyxFQUMvRSxFQUFvQixVQUFVLEdBRTlCLEVBQVMsQ0FBQyxFQUNkLEdBQUksQ0FBQyxFQUNELEVBQU8sR0FBTSxHQUFVLEVBQU0sQ0FBTyxFQUFHLENBQU8sRUFDOUMsRUFBVyxHQUFNLEdBQVUsRUFBVSxDQUFPLEVBQUcsQ0FBTyxFQUcxRCxHQURBLEVBQVUsR0FBVyxDQUFDLEVBQ2xCLENBQUMsRUFBUSxVQUFZLEVBQVMsT0FDOUIsRUFBTyxPQUFTLEVBQVMsT0FFekIsRUFBTyxTQUFXLEVBQVMsU0FDM0IsRUFBTyxLQUFPLEVBQVMsS0FDdkIsRUFBTyxLQUFPLEVBQVMsS0FDdkIsRUFBTyxLQUFPLEdBQWtCLEVBQVMsTUFBUSxFQUFFLEVBQ25ELEVBQU8sTUFBUSxFQUFTLE1BQ3JCLEtBQ0gsR0FBSSxFQUFTLFdBQWEsUUFBYSxFQUFTLE9BQVMsUUFBYSxFQUFTLE9BQVMsT0FFcEYsRUFBTyxTQUFXLEVBQVMsU0FDM0IsRUFBTyxLQUFPLEVBQVMsS0FDdkIsRUFBTyxLQUFPLEVBQVMsS0FDdkIsRUFBTyxLQUFPLEdBQWtCLEVBQVMsTUFBUSxFQUFFLEVBQ25ELEVBQU8sTUFBUSxFQUFTLE1BQ3JCLEtBQ0gsR0FBSSxDQUFDLEVBQVMsS0FFVixHQURBLEVBQU8sS0FBTyxFQUFLLEtBQ2YsRUFBUyxRQUFVLE9BQ25CLEVBQU8sTUFBUSxFQUFTLE1BRXhCLE9BQU8sTUFBUSxFQUFLLE1BRXJCLEtBQ0gsR0FBSSxFQUFTLEtBQUssT0FBTyxDQUFDLElBQU0sSUFDNUIsRUFBTyxLQUFPLEdBQWtCLEVBQVMsSUFBSSxFQUMxQyxLQUNILElBQUssRUFBSyxXQUFhLFFBQWEsRUFBSyxPQUFTLFFBQWEsRUFBSyxPQUFTLFNBQWMsQ0FBQyxFQUFLLEtBQzdGLEVBQU8sS0FBTyxJQUFNLEVBQVMsS0FDMUIsUUFBSSxDQUFDLEVBQUssS0FDYixFQUFPLEtBQU8sRUFBUyxLQUV2QixPQUFPLEtBQU8sRUFBSyxLQUFLLE1BQU0sRUFBRyxFQUFLLEtBQUssWUFBWSxHQUFHLEVBQUksQ0FBQyxFQUFJLEVBQVMsS0FFaEYsRUFBTyxLQUFPLEdBQWtCLEVBQU8sSUFBSSxFQUUvQyxFQUFPLE1BQVEsRUFBUyxNQUc1QixFQUFPLFNBQVcsRUFBSyxTQUN2QixFQUFPLEtBQU8sRUFBSyxLQUNuQixFQUFPLEtBQU8sRUFBSyxLQUV2QixFQUFPLE9BQVMsRUFBSyxPQUd6QixPQURBLEVBQU8sU0FBVyxFQUFTLFNBQ3BCLEVBR1gsU0FBUyxFQUFPLENBQUMsRUFBUyxFQUFhLEVBQVMsQ0FDNUMsSUFBSSxFQUFvQixFQUFPLENBQUUsT0FBUSxNQUFPLEVBQUcsQ0FBTyxFQUMxRCxPQUFPLEdBQVUsR0FBa0IsR0FBTSxFQUFTLENBQWlCLEVBQUcsR0FBTSxFQUFhLENBQWlCLEVBQUcsRUFBbUIsRUFBSSxFQUFHLENBQWlCLEVBRzVKLFNBQVMsRUFBUyxDQUFDLEVBQUssRUFBUyxDQUM3QixHQUFJLE9BQU8sSUFBUSxTQUNmLEVBQU0sR0FBVSxHQUFNLEVBQUssQ0FBTyxFQUFHLENBQU8sRUFDekMsUUFBSSxFQUFPLENBQUcsSUFBTSxTQUN2QixFQUFNLEdBQU0sR0FBVSxFQUFLLENBQU8sRUFBRyxDQUFPLEVBRWhELE9BQU8sRUFHWCxTQUFTLEVBQUssQ0FBQyxFQUFNLEVBQU0sRUFBUyxDQUNoQyxHQUFJLE9BQU8sSUFBUyxTQUNoQixFQUFPLEdBQVUsR0FBTSxFQUFNLENBQU8sRUFBRyxDQUFPLEVBQzNDLFFBQUksRUFBTyxDQUFJLElBQU0sU0FDeEIsRUFBTyxHQUFVLEVBQU0sQ0FBTyxFQUVsQyxHQUFJLE9BQU8sSUFBUyxTQUNoQixFQUFPLEdBQVUsR0FBTSxFQUFNLENBQU8sRUFBRyxDQUFPLEVBQzNDLFFBQUksRUFBTyxDQUFJLElBQU0sU0FDeEIsRUFBTyxHQUFVLEVBQU0sQ0FBTyxFQUVsQyxPQUFPLElBQVMsRUFHcEIsU0FBUyxFQUFlLENBQUMsRUFBSyxFQUFTLENBQ25DLE9BQU8sR0FBTyxFQUFJLFNBQVMsRUFBRSxRQUFRLENBQUMsR0FBVyxDQUFDLEVBQVEsSUFBTSxFQUFhLE9BQVMsRUFBYSxPQUFRLEVBQVUsRUFHekgsU0FBUyxFQUFpQixDQUFDLEVBQUssRUFBUyxDQUNyQyxPQUFPLEdBQU8sRUFBSSxTQUFTLEVBQUUsUUFBUSxDQUFDLEdBQVcsQ0FBQyxFQUFRLElBQU0sRUFBYSxZQUFjLEVBQWEsWUFBYSxFQUFXLEVBR3BJLElBQUksR0FBVSxDQUNWLE9BQVEsT0FDUixXQUFZLEdBQ1osTUFBTyxRQUFjLENBQUMsRUFBWSxFQUFTLENBRXZDLEdBQUksQ0FBQyxFQUFXLEtBQ1osRUFBVyxNQUFRLEVBQVcsT0FBUyw4QkFFM0MsT0FBTyxHQUVYLFVBQVcsUUFBa0IsQ0FBQyxFQUFZLEVBQVMsQ0FDL0MsSUFBSSxFQUFTLE9BQU8sRUFBVyxNQUFNLEVBQUUsWUFBWSxJQUFNLFFBRXpELEdBQUksRUFBVyxRQUFVLEVBQVMsSUFBTSxLQUFPLEVBQVcsT0FBUyxHQUMvRCxFQUFXLEtBQU8sT0FHdEIsR0FBSSxDQUFDLEVBQVcsS0FDWixFQUFXLEtBQU8sSUFLdEIsT0FBTyxFQUVmLEVBRUksR0FBWSxDQUNaLE9BQVEsUUFDUixXQUFZLEdBQVEsV0FDcEIsTUFBTyxHQUFRLE1BQ2YsVUFBVyxHQUFRLFNBQ3ZCLEVBRUEsU0FBUyxFQUFRLENBQUMsRUFBYyxDQUM1QixPQUFPLE9BQU8sRUFBYSxTQUFXLFVBQVksRUFBYSxPQUFTLE9BQU8sRUFBYSxNQUFNLEVBQUUsWUFBWSxJQUFNLE1BRzFILElBQUksR0FBWSxDQUNaLE9BQVEsS0FDUixXQUFZLEdBQ1osTUFBTyxRQUFjLENBQUMsRUFBWSxFQUFTLENBQ3ZDLElBQUksRUFBZSxFQU9uQixPQUxBLEVBQWEsT0FBUyxHQUFTLENBQVksRUFFM0MsRUFBYSxjQUFnQixFQUFhLE1BQVEsTUFBUSxFQUFhLE1BQVEsSUFBTSxFQUFhLE1BQVEsSUFDMUcsRUFBYSxLQUFPLE9BQ3BCLEVBQWEsTUFBUSxPQUNkLEdBRVgsVUFBVyxRQUFrQixDQUFDLEVBQWMsRUFBUyxDQUVqRCxHQUFJLEVBQWEsUUFBVSxHQUFTLENBQVksRUFBSSxJQUFNLEtBQU8sRUFBYSxPQUFTLEdBQ25GLEVBQWEsS0FBTyxPQUd4QixHQUFJLE9BQU8sRUFBYSxTQUFXLFVBQy9CLEVBQWEsT0FBUyxFQUFhLE9BQVMsTUFBUSxLQUNwRCxFQUFhLE9BQVMsT0FHMUIsR0FBSSxFQUFhLGFBQWMsQ0FDM0IsSUFBSSxFQUF3QixFQUFhLGFBQWEsTUFBTSxHQUFHLEVBQzNELEVBQXlCLEVBQWMsRUFBdUIsQ0FBQyxFQUMvRCxFQUFPLEVBQXVCLEdBQzlCLEVBQVEsRUFBdUIsR0FFbkMsRUFBYSxLQUFPLEdBQVEsSUFBUyxJQUFNLEVBQU8sT0FDbEQsRUFBYSxNQUFRLEVBQ3JCLEVBQWEsYUFBZSxPQUloQyxPQURBLEVBQWEsU0FBVyxPQUNqQixFQUVmLEVBRUksR0FBWSxDQUNaLE9BQVEsTUFDUixXQUFZLEdBQVUsV0FDdEIsTUFBTyxHQUFVLE1BQ2pCLFVBQVcsR0FBVSxTQUN6QixFQUVJLEdBQUksQ0FBQyxFQUNMLEdBQVEsR0FFUixHQUFlLDBCQUE0QixHQUFRLDRFQUE4RSxJQUFNLElBQ3ZJLEdBQVcsY0FDWCxHQUFlLEVBQU8sRUFBTyxVQUFZLEdBQVcsSUFBTSxHQUFXLEdBQVcsSUFBTSxHQUFXLEVBQVEsRUFBSSxJQUFNLEVBQU8sY0FBZ0IsR0FBVyxJQUFNLEdBQVcsRUFBUSxFQUFJLElBQU0sRUFBTyxJQUFNLEdBQVcsRUFBUSxDQUFDLEVBWXpOLEdBQVUsd0RBQ1YsR0FBVSw2REFDVixHQUFVLEVBQU0sR0FBUyxZQUFZLEVBQ3JDLEdBQWdCLHNDQUNoQixHQUFhLElBQUksT0FBTyxHQUFjLEdBQUcsRUFDekMsR0FBYyxJQUFJLE9BQU8sR0FBYyxHQUFHLEVBQzFDLEdBQWlCLElBQUksT0FBTyxFQUFNLE1BQU8sR0FBUyxRQUFTLFNBQVMsRUFBTyxFQUFHLEdBQUcsRUFDakYsR0FBYSxJQUFJLE9BQU8sRUFBTSxNQUFPLEdBQWMsRUFBYSxFQUFHLEdBQUcsRUFDdEUsR0FBYyxHQUNsQixTQUFTLEVBQWdCLENBQUMsRUFBSyxDQUMzQixJQUFJLEVBQVMsR0FBWSxDQUFHLEVBQzVCLE1BQU8sQ0FBQyxFQUFPLE1BQU0sRUFBVSxFQUFJLEVBQU0sRUFFN0MsSUFBSSxHQUFZLENBQ1osT0FBUSxTQUNSLE1BQU8sUUFBaUIsQ0FBQyxFQUFZLEVBQVMsQ0FDMUMsSUFBSSxFQUFtQixFQUNuQixFQUFLLEVBQWlCLEdBQUssRUFBaUIsS0FBTyxFQUFpQixLQUFLLE1BQU0sR0FBRyxFQUFJLENBQUMsRUFFM0YsR0FEQSxFQUFpQixLQUFPLE9BQ3BCLEVBQWlCLE1BQU8sQ0FDeEIsSUFBSSxFQUFpQixHQUNqQixFQUFVLENBQUMsRUFDWCxHQUFVLEVBQWlCLE1BQU0sTUFBTSxHQUFHLEVBQzlDLFFBQVMsR0FBSSxFQUFHLEdBQUssR0FBUSxPQUFRLEdBQUksR0FBSSxFQUFFLEdBQUcsQ0FDOUMsSUFBSSxHQUFTLEdBQVEsSUFBRyxNQUFNLEdBQUcsRUFDakMsT0FBUSxHQUFPLFFBQ04sS0FDRCxJQUFJLEdBQVUsR0FBTyxHQUFHLE1BQU0sR0FBRyxFQUNqQyxRQUFTLEdBQUssRUFBRyxHQUFNLEdBQVEsT0FBUSxHQUFLLEdBQUssRUFBRSxHQUMvQyxFQUFHLEtBQUssR0FBUSxHQUFHLEVBRXZCLFVBQ0MsVUFDRCxFQUFpQixRQUFVLEdBQWtCLEdBQU8sR0FBSSxDQUFPLEVBQy9ELFVBQ0MsT0FDRCxFQUFpQixLQUFPLEdBQWtCLEdBQU8sR0FBSSxDQUFPLEVBQzVELGNBRUEsRUFBaUIsR0FDakIsRUFBUSxHQUFrQixHQUFPLEdBQUksQ0FBTyxHQUFLLEdBQWtCLEdBQU8sR0FBSSxDQUFPLEVBQ3JGLE9BR1osR0FBSSxFQUFnQixFQUFpQixRQUFVLEVBRW5ELEVBQWlCLE1BQVEsT0FDekIsUUFBUyxHQUFNLEVBQUcsR0FBTyxFQUFHLE9BQVEsR0FBTSxHQUFNLEVBQUUsR0FBSyxDQUNuRCxJQUFJLEdBQU8sRUFBRyxJQUFLLE1BQU0sR0FBRyxFQUU1QixHQURBLEdBQUssR0FBSyxHQUFrQixHQUFLLEVBQUUsRUFDL0IsQ0FBQyxFQUFRLGVBRVQsR0FBSSxDQUNBLEdBQUssR0FBSyxHQUFTLFFBQVEsR0FBa0IsR0FBSyxHQUFJLENBQU8sRUFBRSxZQUFZLENBQUMsRUFDOUUsTUFBTyxHQUFHLENBQ1IsRUFBaUIsTUFBUSxFQUFpQixPQUFTLDJFQUE2RSxHQUdwSSxRQUFLLEdBQUssR0FBa0IsR0FBSyxHQUFJLENBQU8sRUFBRSxZQUFZLEVBRTlELEVBQUcsSUFBTyxHQUFLLEtBQUssR0FBRyxFQUUzQixPQUFPLEdBRVgsVUFBVyxRQUFxQixDQUFDLEVBQWtCLEVBQVMsQ0FDeEQsSUFBSSxFQUFhLEVBQ2IsRUFBSyxFQUFRLEVBQWlCLEVBQUUsRUFDcEMsR0FBSSxFQUFJLENBQ0osUUFBUyxFQUFJLEVBQUcsRUFBSyxFQUFHLE9BQVEsRUFBSSxFQUFJLEVBQUUsRUFBRyxDQUN6QyxJQUFJLEdBQVMsT0FBTyxFQUFHLEVBQUUsRUFDckIsR0FBUSxHQUFPLFlBQVksR0FBRyxFQUM5QixHQUFZLEdBQU8sTUFBTSxFQUFHLEVBQUssRUFBRSxRQUFRLEdBQWEsRUFBZ0IsRUFBRSxRQUFRLEdBQWEsQ0FBVyxFQUFFLFFBQVEsR0FBZ0IsRUFBVSxFQUM5SSxHQUFTLEdBQU8sTUFBTSxHQUFRLENBQUMsRUFFbkMsR0FBSSxDQUNBLEdBQVMsQ0FBQyxFQUFRLElBQU0sR0FBUyxRQUFRLEdBQWtCLEdBQVEsQ0FBTyxFQUFFLFlBQVksQ0FBQyxFQUFJLEdBQVMsVUFBVSxFQUFNLEVBQ3hILE1BQU8sR0FBRyxDQUNSLEVBQVcsTUFBUSxFQUFXLE9BQVMsd0RBQTBELENBQUMsRUFBUSxJQUFNLFFBQVUsV0FBYSxrQkFBb0IsR0FFL0osRUFBRyxHQUFLLEdBQVksSUFBTSxHQUU5QixFQUFXLEtBQU8sRUFBRyxLQUFLLEdBQUcsRUFFakMsSUFBSSxHQUFVLEVBQWlCLFFBQVUsRUFBaUIsU0FBVyxDQUFDLEVBQ3RFLEdBQUksRUFBaUIsUUFBUyxHQUFRLFFBQWEsRUFBaUIsUUFDcEUsR0FBSSxFQUFpQixLQUFNLEdBQVEsS0FBVSxFQUFpQixLQUM5RCxJQUFJLEdBQVMsQ0FBQyxFQUNkLFFBQVMsTUFBUSxHQUNiLEdBQUksR0FBUSxNQUFVLEdBQUUsSUFDcEIsR0FBTyxLQUFLLEdBQUssUUFBUSxHQUFhLEVBQWdCLEVBQUUsUUFBUSxHQUFhLENBQVcsRUFBRSxRQUFRLEdBQVksRUFBVSxFQUFJLElBQU0sR0FBUSxJQUFNLFFBQVEsR0FBYSxFQUFnQixFQUFFLFFBQVEsR0FBYSxDQUFXLEVBQUUsUUFBUSxHQUFhLEVBQVUsQ0FBQyxFQUdqUSxHQUFJLEdBQU8sT0FDUCxFQUFXLE1BQVEsR0FBTyxLQUFLLEdBQUcsRUFFdEMsT0FBTyxFQUVmLEVBRUksR0FBWSxrQkFFWixHQUFZLENBQ1osT0FBUSxNQUNSLE1BQU8sUUFBaUIsQ0FBQyxFQUFZLEVBQVMsQ0FDMUMsSUFBSSxFQUFVLEVBQVcsTUFBUSxFQUFXLEtBQUssTUFBTSxFQUFTLEVBQzVELEVBQWdCLEVBQ3BCLEdBQUksRUFBUyxDQUNULElBQUksRUFBUyxFQUFRLFFBQVUsRUFBYyxRQUFVLE1BQ25ELEVBQU0sRUFBUSxHQUFHLFlBQVksRUFDN0IsR0FBTSxFQUFRLEdBQ2QsR0FBWSxFQUFTLEtBQU8sRUFBUSxLQUFPLEdBQzNDLEdBQWdCLEdBQVEsSUFJNUIsR0FIQSxFQUFjLElBQU0sRUFDcEIsRUFBYyxJQUFNLEdBQ3BCLEVBQWMsS0FBTyxPQUNqQixHQUNBLEVBQWdCLEdBQWMsTUFBTSxFQUFlLENBQU8sRUFHOUQsT0FBYyxNQUFRLEVBQWMsT0FBUyx5QkFFakQsT0FBTyxHQUVYLFVBQVcsUUFBcUIsQ0FBQyxFQUFlLEVBQVMsQ0FDckQsSUFBSSxFQUFTLEVBQVEsUUFBVSxFQUFjLFFBQVUsTUFDbkQsRUFBTSxFQUFjLElBQ3BCLEVBQVksRUFBUyxLQUFPLEVBQVEsS0FBTyxHQUMzQyxFQUFnQixHQUFRLEdBQzVCLEdBQUksRUFDQSxFQUFnQixFQUFjLFVBQVUsRUFBZSxDQUFPLEVBRWxFLElBQUksR0FBZ0IsRUFDaEIsR0FBTSxFQUFjLElBRXhCLE9BREEsR0FBYyxNQUFRLEdBQU8sRUFBUSxLQUFPLElBQU0sR0FDM0MsR0FFZixFQUVJLEdBQU8sMkRBRVAsR0FBWSxDQUNaLE9BQVEsV0FDUixNQUFPLFFBQWMsQ0FBQyxFQUFlLEVBQVMsQ0FDMUMsSUFBSSxFQUFpQixFQUdyQixHQUZBLEVBQWUsS0FBTyxFQUFlLElBQ3JDLEVBQWUsSUFBTSxPQUNqQixDQUFDLEVBQVEsV0FBYSxDQUFDLEVBQWUsTUFBUSxDQUFDLEVBQWUsS0FBSyxNQUFNLEVBQUksR0FDN0UsRUFBZSxNQUFRLEVBQWUsT0FBUyxxQkFFbkQsT0FBTyxHQUVYLFVBQVcsUUFBa0IsQ0FBQyxFQUFnQixFQUFTLENBQ25ELElBQUksRUFBZ0IsRUFHcEIsT0FEQSxFQUFjLEtBQU8sRUFBZSxNQUFRLElBQUksWUFBWSxFQUNyRCxFQUVmLEVBRUEsR0FBUSxHQUFRLFFBQVUsR0FDMUIsR0FBUSxHQUFVLFFBQVUsR0FDNUIsR0FBUSxHQUFVLFFBQVUsR0FDNUIsR0FBUSxHQUFVLFFBQVUsR0FDNUIsR0FBUSxHQUFVLFFBQVUsR0FDNUIsR0FBUSxHQUFVLFFBQVUsR0FDNUIsR0FBUSxHQUFVLFFBQVUsR0FFNUIsRUFBUSxRQUFVLEdBQ2xCLEVBQVEsV0FBYSxHQUNyQixFQUFRLFlBQWMsR0FDdEIsRUFBUSxNQUFRLEdBQ2hCLEVBQVEsa0JBQW9CLEdBQzVCLEVBQVEsVUFBWSxHQUNwQixFQUFRLGtCQUFvQixHQUM1QixFQUFRLFFBQVUsR0FDbEIsRUFBUSxVQUFZLEdBQ3BCLEVBQVEsTUFBUSxHQUNoQixFQUFRLGdCQUFrQixHQUMxQixFQUFRLGtCQUFvQixHQUU1QixPQUFPLGVBQWUsRUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFFMUQsMEJDaDZDRixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsSUFBTSxRQUNOLEdBQUksS0FBTywwQ0FDWCxHQUFRLFFBQVUsMkJDSGxCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxHQUFRLFFBQVUsR0FBUSxLQUFPLEdBQVEsSUFBTSxHQUFRLFVBQVksR0FBUSxJQUFNLEdBQVEsRUFBSSxHQUFRLFdBQWtCLE9BQ3ZILElBQUksUUFDSixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFXLFdBQWMsQ0FBQyxFQUNySCxJQUFJLE9BQ0osT0FBTyxlQUFlLEdBQVMsSUFBSyxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBVSxFQUFLLENBQUMsRUFDbEcsT0FBTyxlQUFlLEdBQVMsTUFBTyxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBVSxJQUFPLENBQUMsRUFDdEcsT0FBTyxlQUFlLEdBQVMsWUFBYSxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBVSxVQUFhLENBQUMsRUFDbEgsT0FBTyxlQUFlLEdBQVMsTUFBTyxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBVSxJQUFPLENBQUMsRUFDdEcsT0FBTyxlQUFlLEdBQVMsT0FBUSxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBVSxLQUFRLENBQUMsRUFDeEcsT0FBTyxlQUFlLEdBQVMsVUFBVyxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBVSxRQUFXLENBQUMsRUFDOUcsSUFBTSxRQUNBLFFBQ0EsUUFDQSxRQUNBLE9BQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLEdBQWdCLENBQUMsRUFBSyxJQUFVLElBQUksT0FBTyxFQUFLLENBQUssRUFDM0QsR0FBYyxLQUFPLGFBQ3JCLElBQU0sR0FBc0IsQ0FBQyxtQkFBb0IsY0FBZSxhQUFhLEVBQ3ZFLEdBQWtCLElBQUksSUFBSSxDQUM1QixXQUNBLFlBQ0EsUUFDQSxVQUNBLE9BQ0EsU0FDQSxVQUNBLFVBQ0EsVUFDQSxnQkFDQSxPQUNBLE1BQ0EsT0FDSixDQUFDLEVBQ0ssR0FBaUIsQ0FDbkIsY0FBZSxHQUNmLE9BQVEsZ0RBQ1IsU0FBVSw4Q0FDVixhQUFjLG1EQUNkLFdBQVksd0RBQ1osWUFBYSxzRUFDYixZQUFhLG9FQUNiLFdBQVksb0NBQ1osZUFBZ0IsMENBQ2hCLGVBQWdCLDBDQUNoQixZQUFhLDZDQUNiLGVBQWdCLCtFQUNoQixNQUFPLDhDQUNQLFVBQVcsOENBQ1gsVUFBVyxvQkFDZixFQUNNLEdBQW9CLENBQ3RCLHNCQUF1QixHQUN2QixpQkFBa0IsR0FDbEIsUUFBUyxvRUFDYixFQUNNLEdBQWlCLElBRXZCLFNBQVMsRUFBZSxDQUFDLEVBQUcsQ0FDeEIsSUFBSSxFQUFJLEVBQUksRUFBSSxFQUFJLEVBQUksRUFBSSxFQUFJLEVBQUksRUFBSSxFQUFJLEVBQUksRUFBSSxFQUFJLEVBQUksRUFBSSxFQUFJLEVBQUksRUFBSSxFQUFJLEVBQUksRUFBSSxFQUFJLEVBQUksRUFBSSxHQUNwRyxJQUFNLEdBQUksRUFBRSxPQUNOLElBQVMsRUFBSyxFQUFFLFFBQVUsTUFBUSxJQUFZLE9BQVMsT0FBSSxFQUFHLFNBQzlELEdBQVcsS0FBVSxJQUFRLEtBQVUsT0FBWSxFQUFJLElBQVMsRUFDaEUsSUFBVSxHQUFNLEVBQUssRUFBRSxRQUFVLE1BQVEsSUFBWSxPQUFTLE9BQUksRUFBRyxVQUFZLE1BQVEsSUFBWSxPQUFJLEVBQUssR0FDOUcsSUFBZSxFQUFLLEVBQUUsZUFBaUIsTUFBUSxJQUFZLE9BQUksRUFBSyxHQUFNLFFBQ2hGLE1BQU8sQ0FDSCxjQUFlLEdBQU0sRUFBSyxFQUFFLGdCQUFrQixNQUFRLElBQVksT0FBSSxFQUFLLE1BQU8sTUFBUSxJQUFZLE9BQUksRUFBSyxHQUMvRyxlQUFnQixHQUFNLEVBQUssRUFBRSxpQkFBbUIsTUFBUSxJQUFZLE9BQUksRUFBSyxNQUFPLE1BQVEsSUFBWSxPQUFJLEVBQUssR0FDakgsYUFBYyxHQUFNLEVBQUssRUFBRSxlQUFpQixNQUFRLElBQVksT0FBSSxFQUFLLE1BQU8sTUFBUSxJQUFZLE9BQUksRUFBSyxNQUM3RyxjQUFlLEdBQU0sRUFBSyxFQUFFLGdCQUFrQixNQUFRLElBQVksT0FBSSxFQUFLLE1BQU8sTUFBUSxJQUFZLE9BQUksRUFBSyxNQUMvRyxnQkFBaUIsR0FBTSxFQUFLLEVBQUUsa0JBQW9CLE1BQVEsSUFBWSxPQUFJLEVBQUssTUFBTyxNQUFRLElBQVksT0FBSSxFQUFLLEdBQ25ILEtBQU0sRUFBRSxLQUFPLElBQUssRUFBRSxLQUFNLFlBQVUsU0FBTyxFQUFJLENBQUUsWUFBVSxTQUFPLEVBQ3BFLGNBQWUsRUFBSyxFQUFFLGdCQUFrQixNQUFRLElBQVksT0FBSSxFQUFLLEdBQ3JFLFVBQVcsRUFBSyxFQUFFLFlBQWMsTUFBUSxJQUFZLE9BQUksRUFBSyxHQUM3RCxNQUFPLEVBQUssRUFBRSxRQUFVLE1BQVEsSUFBWSxPQUFJLEVBQUssR0FDckQsVUFBVyxFQUFLLEVBQUUsWUFBYyxNQUFRLElBQVksT0FBSSxFQUFLLEdBQzdELFlBQWEsRUFBSyxFQUFFLGNBQWdCLE1BQVEsSUFBWSxPQUFJLEVBQUssR0FDakUsVUFBVyxFQUFLLEVBQUUsWUFBYyxNQUFRLElBQVksT0FBSSxFQUFLLE1BQzdELGVBQWdCLEVBQUssRUFBRSxpQkFBbUIsTUFBUSxJQUFZLE9BQUksRUFBSyxHQUN2RSxnQkFBaUIsRUFBSyxFQUFFLGtCQUFvQixNQUFRLElBQVksT0FBSSxFQUFLLEdBQ3pFLGlCQUFrQixFQUFLLEVBQUUsbUJBQXFCLE1BQVEsSUFBWSxPQUFJLEVBQUssR0FDM0UsZUFBZ0IsRUFBSyxFQUFFLGlCQUFtQixNQUFRLElBQVksT0FBSSxFQUFLLEdBQ3ZFLFlBQWEsR0FBSyxFQUFFLGNBQWdCLE1BQVEsS0FBWSxPQUFJLEdBQUssR0FDakUsWUFBYSxFQUNqQixFQUVKLE1BQU0sRUFBSSxDQUNOLFdBQVcsQ0FBQyxFQUFPLENBQUMsRUFBRyxDQUNuQixLQUFLLFFBQVUsQ0FBQyxFQUNoQixLQUFLLEtBQU8sQ0FBQyxFQUNiLEtBQUssUUFBVSxDQUFDLEVBQ2hCLEtBQUssY0FBZ0IsSUFBSSxJQUN6QixLQUFLLFNBQVcsQ0FBQyxFQUNqQixLQUFLLE9BQVMsSUFBSSxJQUNsQixFQUFPLEtBQUssS0FBTyxJQUFLLEtBQVMsR0FBZ0IsQ0FBSSxDQUFFLEVBQ3ZELElBQVEsTUFBSyxTQUFVLEtBQUssS0FBSyxLQUNqQyxLQUFLLE1BQVEsSUFBYyxjQUFXLENBQUUsTUFBTyxDQUFDLEVBQUcsU0FBVSxHQUFpQixNQUFLLE9BQU0sQ0FBQyxFQUMxRixLQUFLLE9BQVMsR0FBVSxFQUFLLE1BQU0sRUFDbkMsSUFBTSxFQUFZLEVBQUssZ0JBTXZCLEdBTEEsRUFBSyxnQkFBa0IsR0FDdkIsS0FBSyxNQUFvQixZQUFVLEVBQ25DLEdBQWEsS0FBSyxLQUFNLEdBQWdCLEVBQU0sZUFBZSxFQUM3RCxHQUFhLEtBQUssS0FBTSxHQUFtQixFQUFNLGFBQWMsTUFBTSxFQUNyRSxLQUFLLFVBQVksR0FBcUIsS0FBSyxJQUFJLEVBQzNDLEVBQUssUUFDTCxHQUFrQixLQUFLLElBQUksRUFHL0IsR0FGQSxLQUFLLGlCQUFpQixFQUN0QixLQUFLLHNCQUFzQixFQUN2QixFQUFLLFNBQ0wsR0FBbUIsS0FBSyxLQUFNLEVBQUssUUFBUSxFQUMvQyxHQUFJLE9BQU8sRUFBSyxNQUFRLFNBQ3BCLEtBQUssY0FBYyxFQUFLLElBQUksRUFDaEMsR0FBa0IsS0FBSyxJQUFJLEVBQzNCLEVBQUssZ0JBQWtCLEVBRTNCLGdCQUFnQixFQUFHLENBQ2YsS0FBSyxXQUFXLFFBQVEsRUFFNUIscUJBQXFCLEVBQUcsQ0FDcEIsSUFBUSxRQUFPLE9BQU0sWUFBYSxLQUFLLEtBQ25DLEVBQWlCLEdBQ3JCLEdBQUksSUFBYSxLQUNiLEVBQWlCLElBQUssRUFBZSxFQUNyQyxFQUFlLEdBQUssRUFBZSxJQUNuQyxPQUFPLEVBQWUsSUFFMUIsR0FBSSxHQUFRLEVBQ1IsS0FBSyxjQUFjLEVBQWdCLEVBQWUsR0FBVyxFQUFLLEVBRTFFLFdBQVcsRUFBRyxDQUNWLElBQVEsT0FBTSxZQUFhLEtBQUssS0FDaEMsT0FBUSxLQUFLLEtBQUssWUFBYyxPQUFPLEdBQVEsU0FBVyxFQUFLLElBQWEsRUFBTyxPQUV2RixRQUFRLENBQUMsRUFDVCxFQUNFLENBQ0UsSUFBSSxFQUNKLEdBQUksT0FBTyxHQUFnQixVQUV2QixHQURBLEVBQUksS0FBSyxVQUFVLENBQVksRUFDM0IsQ0FBQyxFQUNELE1BQVUsTUFBTSw4QkFBOEIsSUFBZSxFQUdqRSxPQUFJLEtBQUssUUFBUSxDQUFZLEVBRWpDLElBQU0sRUFBUSxFQUFFLENBQUksRUFDcEIsR0FBSSxFQUFFLFdBQVksR0FDZCxLQUFLLE9BQVMsRUFBRSxPQUNwQixPQUFPLEVBRVgsT0FBTyxDQUFDLEVBQVEsRUFBTyxDQUNuQixJQUFNLEVBQU0sS0FBSyxXQUFXLEVBQVEsQ0FBSyxFQUN6QyxPQUFRLEVBQUksVUFBWSxLQUFLLGtCQUFrQixDQUFHLEVBRXRELFlBQVksQ0FBQyxFQUFRLEVBQU0sQ0FDdkIsR0FBSSxPQUFPLEtBQUssS0FBSyxZQUFjLFdBQy9CLE1BQVUsTUFBTSx5Q0FBeUMsRUFFN0QsSUFBUSxjQUFlLEtBQUssS0FDNUIsT0FBTyxFQUFnQixLQUFLLEtBQU0sRUFBUSxDQUFJLEVBQzlDLGVBQWUsQ0FBZSxDQUFDLEVBQVMsRUFBTyxDQUMzQyxNQUFNLEVBQWUsS0FBSyxLQUFNLEVBQVEsT0FBTyxFQUMvQyxJQUFNLEVBQU0sS0FBSyxXQUFXLEVBQVMsQ0FBSyxFQUMxQyxPQUFPLEVBQUksVUFBWSxFQUFjLEtBQUssS0FBTSxDQUFHLEVBRXZELGVBQWUsQ0FBYyxDQUFDLEVBQU0sQ0FDaEMsR0FBSSxHQUFRLENBQUMsS0FBSyxVQUFVLENBQUksRUFDNUIsTUFBTSxFQUFnQixLQUFLLEtBQU0sQ0FBRSxNQUFLLEVBQUcsRUFBSSxFQUd2RCxlQUFlLENBQWEsQ0FBQyxFQUFLLENBQzlCLEdBQUksQ0FDQSxPQUFPLEtBQUssa0JBQWtCLENBQUcsRUFFckMsTUFBTyxFQUFHLENBQ04sR0FBSSxFQUFFLGFBQWEsR0FBWSxTQUMzQixNQUFNLEVBR1YsT0FGQSxFQUFZLEtBQUssS0FBTSxDQUFDLEVBQ3hCLE1BQU0sRUFBa0IsS0FBSyxLQUFNLEVBQUUsYUFBYSxFQUMzQyxFQUFjLEtBQUssS0FBTSxDQUFHLEdBRzNDLFNBQVMsQ0FBVyxFQUFHLGNBQWUsRUFBSyxjQUFjLENBQ3JELEdBQUksS0FBSyxLQUFLLEdBQ1YsTUFBVSxNQUFNLGFBQWEsbUJBQXFCLHNCQUErQixFQUd6RixlQUFlLENBQWlCLENBQUMsRUFBSyxDQUNsQyxJQUFNLEVBQVUsTUFBTSxFQUFZLEtBQUssS0FBTSxDQUFHLEVBQ2hELEdBQUksQ0FBQyxLQUFLLEtBQUssR0FDWCxNQUFNLEVBQWUsS0FBSyxLQUFNLEVBQVEsT0FBTyxFQUNuRCxHQUFJLENBQUMsS0FBSyxLQUFLLEdBQ1gsS0FBSyxVQUFVLEVBQVMsRUFBSyxDQUFJLEVBRXpDLGVBQWUsQ0FBVyxDQUFDLEVBQUssQ0FDNUIsSUFBTSxFQUFJLEtBQUssU0FBUyxHQUN4QixHQUFJLEVBQ0EsT0FBTyxFQUNYLEdBQUksQ0FDQSxPQUFPLE1BQU8sS0FBSyxTQUFTLEdBQU8sRUFBVyxDQUFHLFVBRXJELENBQ0ksT0FBTyxLQUFLLFNBQVMsS0FLakMsU0FBUyxDQUFDLEVBQ1YsRUFDQSxFQUNBLEVBQWtCLEtBQUssS0FBSyxlQUMxQixDQUNFLEdBQUksTUFBTSxRQUFRLENBQU0sRUFBRyxDQUN2QixRQUFXLEtBQU8sRUFDZCxLQUFLLFVBQVUsRUFBSyxPQUFXLEVBQU8sQ0FBZSxFQUN6RCxPQUFPLEtBRVgsSUFBSSxFQUNKLEdBQUksT0FBTyxJQUFXLFNBQVUsQ0FDNUIsSUFBUSxZQUFhLEtBQUssS0FFMUIsR0FEQSxFQUFLLEVBQU8sR0FDUixJQUFPLFFBQWEsT0FBTyxHQUFNLFNBQ2pDLE1BQVUsTUFBTSxVQUFVLGtCQUF5QixFQU0zRCxPQUhBLEVBQW9CLGVBQWEsR0FBTyxDQUFFLEVBQzFDLEtBQUssYUFBYSxDQUFHLEVBQ3JCLEtBQUssUUFBUSxHQUFPLEtBQUssV0FBVyxFQUFRLEVBQU8sRUFBSyxFQUFpQixFQUFJLEVBQ3RFLEtBSVgsYUFBYSxDQUFDLEVBQVEsRUFDdEIsRUFBa0IsS0FBSyxLQUFLLGVBQzFCLENBRUUsT0FEQSxLQUFLLFVBQVUsRUFBUSxFQUFLLEdBQU0sQ0FBZSxFQUMxQyxLQUdYLGNBQWMsQ0FBQyxFQUFRLEVBQWlCLENBQ3BDLEdBQUksT0FBTyxHQUFVLFVBQ2pCLE1BQU8sR0FDWCxJQUFJLEVBRUosR0FEQSxFQUFVLEVBQU8sUUFDYixJQUFZLFFBQWEsT0FBTyxHQUFXLFNBQzNDLE1BQVUsTUFBTSwwQkFBMEIsRUFHOUMsR0FEQSxFQUFVLEdBQVcsS0FBSyxLQUFLLGFBQWUsS0FBSyxZQUFZLEVBQzNELENBQUMsRUFHRCxPQUZBLEtBQUssT0FBTyxLQUFLLDJCQUEyQixFQUM1QyxLQUFLLE9BQVMsS0FDUCxHQUVYLElBQU0sRUFBUSxLQUFLLFNBQVMsRUFBUyxDQUFNLEVBQzNDLEdBQUksQ0FBQyxHQUFTLEVBQWlCLENBQzNCLElBQU0sRUFBVSxzQkFBd0IsS0FBSyxXQUFXLEVBQ3hELEdBQUksS0FBSyxLQUFLLGlCQUFtQixNQUM3QixLQUFLLE9BQU8sTUFBTSxDQUFPLEVBRXpCLFdBQVUsTUFBTSxDQUFPLEVBRS9CLE9BQU8sRUFJWCxTQUFTLENBQUMsRUFBUSxDQUNkLElBQUksRUFDSixNQUFPLE9BQVEsRUFBTSxHQUFVLEtBQUssS0FBTSxDQUFNLElBQU0sU0FDbEQsRUFBUyxFQUNiLEdBQUksSUFBUSxPQUFXLENBQ25CLElBQVEsWUFBYSxLQUFLLEtBQ3BCLEVBQU8sSUFBYyxhQUFVLENBQUUsT0FBUSxDQUFDLEVBQUcsVUFBUyxDQUFDLEVBRTdELEdBREEsRUFBZ0IsaUJBQWMsS0FBSyxLQUFNLEVBQU0sQ0FBTSxFQUNqRCxDQUFDLEVBQ0QsT0FDSixLQUFLLEtBQUssR0FBVSxFQUV4QixPQUFRLEVBQUksVUFBWSxLQUFLLGtCQUFrQixDQUFHLEVBTXRELFlBQVksQ0FBQyxFQUFjLENBQ3ZCLEdBQUksYUFBd0IsT0FHeEIsT0FGQSxLQUFLLGtCQUFrQixLQUFLLFFBQVMsQ0FBWSxFQUNqRCxLQUFLLGtCQUFrQixLQUFLLEtBQU0sQ0FBWSxFQUN2QyxLQUVYLE9BQVEsT0FBTyxPQUNOLFlBSUQsT0FIQSxLQUFLLGtCQUFrQixLQUFLLE9BQU8sRUFDbkMsS0FBSyxrQkFBa0IsS0FBSyxJQUFJLEVBQ2hDLEtBQUssT0FBTyxNQUFNLEVBQ1gsU0FDTixTQUFVLENBQ1gsSUFBTSxFQUFNLEdBQVUsS0FBSyxLQUFNLENBQVksRUFDN0MsR0FBSSxPQUFPLEdBQU8sU0FDZCxLQUFLLE9BQU8sT0FBTyxFQUFJLE1BQU0sRUFHakMsT0FGQSxPQUFPLEtBQUssUUFBUSxHQUNwQixPQUFPLEtBQUssS0FBSyxHQUNWLElBQ1gsS0FDSyxTQUFVLENBQ1gsSUFBTSxFQUFXLEVBQ2pCLEtBQUssT0FBTyxPQUFPLENBQVEsRUFDM0IsSUFBSSxFQUFLLEVBQWEsS0FBSyxLQUFLLFVBQ2hDLEdBQUksRUFDQSxFQUFtQixlQUFhLENBQUUsRUFDbEMsT0FBTyxLQUFLLFFBQVEsR0FDcEIsT0FBTyxLQUFLLEtBQUssR0FFckIsT0FBTyxJQUNYLFNBRUksTUFBVSxNQUFNLHFDQUFxQyxHQUlqRSxhQUFhLENBQUMsRUFBYSxDQUN2QixRQUFXLEtBQU8sRUFDZCxLQUFLLFdBQVcsQ0FBRyxFQUN2QixPQUFPLEtBRVgsVUFBVSxDQUFDLEVBQVUsRUFDbkIsQ0FDRSxJQUFJLEVBQ0osR0FBSSxPQUFPLEdBQVksVUFFbkIsR0FEQSxFQUFVLEVBQ04sT0FBTyxHQUFPLFNBQ2QsS0FBSyxPQUFPLEtBQUssMERBQTBELEVBQzNFLEVBQUksUUFBVSxFQUdqQixRQUFJLE9BQU8sR0FBWSxVQUFZLElBQVEsUUFHNUMsR0FGQSxFQUFNLEVBQ04sRUFBVSxFQUFJLFFBQ1YsTUFBTSxRQUFRLENBQU8sR0FBSyxDQUFDLEVBQVEsT0FDbkMsTUFBVSxNQUFNLHdEQUF3RCxFQUk1RSxXQUFVLE1BQU0sZ0NBQWdDLEVBR3BELEdBREEsR0FBYSxLQUFLLEtBQU0sRUFBUyxDQUFHLEVBQ2hDLENBQUMsRUFFRCxPQURXLFlBQVUsRUFBUyxDQUFDLElBQVEsR0FBUSxLQUFLLEtBQU0sQ0FBRyxDQUFDLEVBQ3ZELEtBRVgsR0FBa0IsS0FBSyxLQUFNLENBQUcsRUFDaEMsSUFBTSxFQUFhLElBQ1osRUFDSCxLQUFxQixnQkFBYyxFQUFJLElBQUksRUFDM0MsV0FBMkIsZ0JBQWMsRUFBSSxVQUFVLENBQzNELEVBSUEsT0FIVyxZQUFVLEVBQVMsRUFBVyxLQUFLLFNBQVcsRUFDbkQsQ0FBQyxJQUFNLEdBQVEsS0FBSyxLQUFNLEVBQUcsQ0FBVSxFQUN2QyxDQUFDLElBQU0sRUFBVyxLQUFLLFFBQVEsQ0FBQyxJQUFNLEdBQVEsS0FBSyxLQUFNLEVBQUcsRUFBWSxDQUFDLENBQUMsQ0FBQyxFQUMxRSxLQUVYLFVBQVUsQ0FBQyxFQUFTLENBQ2hCLElBQU0sRUFBTyxLQUFLLE1BQU0sSUFBSSxHQUM1QixPQUFPLE9BQU8sR0FBUSxTQUFXLEVBQUssV0FBYSxDQUFDLENBQUMsRUFHekQsYUFBYSxDQUFDLEVBQVMsQ0FFbkIsSUFBUSxTQUFVLEtBQ2xCLE9BQU8sRUFBTSxTQUFTLEdBQ3RCLE9BQU8sRUFBTSxJQUFJLEdBQ2pCLFFBQVcsS0FBUyxFQUFNLE1BQU8sQ0FDN0IsSUFBTSxFQUFJLEVBQU0sTUFBTSxVQUFVLENBQUMsSUFBUyxFQUFLLFVBQVksQ0FBTyxFQUNsRSxHQUFJLEdBQUssRUFDTCxFQUFNLE1BQU0sT0FBTyxFQUFHLENBQUMsRUFFL0IsT0FBTyxLQUdYLFNBQVMsQ0FBQyxFQUFNLEVBQVEsQ0FDcEIsR0FBSSxPQUFPLEdBQVUsU0FDakIsRUFBUyxJQUFJLE9BQU8sQ0FBTSxFQUU5QixPQURBLEtBQUssUUFBUSxHQUFRLEVBQ2QsS0FFWCxVQUFVLENBQUMsRUFBUyxLQUFLLFFBQ3ZCLFlBQVksS0FBTSxVQUFVLFFBQVcsQ0FBQyxFQUN4QyxDQUNFLEdBQUksQ0FBQyxHQUFVLEVBQU8sU0FBVyxFQUM3QixNQUFPLFlBQ1gsT0FBTyxFQUNGLElBQUksQ0FBQyxJQUFNLEdBQUcsSUFBVSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFDckQsT0FBTyxDQUFDLEVBQU0sSUFBUSxFQUFPLEVBQVksQ0FBRyxFQUVyRCxlQUFlLENBQUMsRUFBWSxFQUFzQixDQUM5QyxJQUFNLEVBQVEsS0FBSyxNQUFNLElBQ3pCLEVBQWEsS0FBSyxNQUFNLEtBQUssVUFBVSxDQUFVLENBQUMsRUFDbEQsUUFBVyxLQUFlLEVBQXNCLENBQzVDLElBQU0sRUFBVyxFQUFZLE1BQU0sR0FBRyxFQUFFLE1BQU0sQ0FBQyxFQUMzQyxFQUFXLEVBQ2YsUUFBVyxLQUFPLEVBQ2QsRUFBVyxFQUFTLEdBQ3hCLFFBQVcsS0FBTyxFQUFPLENBQ3JCLElBQU0sRUFBTyxFQUFNLEdBQ25CLEdBQUksT0FBTyxHQUFRLFNBQ2YsU0FDSixJQUFRLFNBQVUsRUFBSyxXQUNqQixFQUFTLEVBQVMsR0FDeEIsR0FBSSxHQUFTLEVBQ1QsRUFBUyxHQUFPLEdBQWEsQ0FBTSxHQUcvQyxPQUFPLEVBRVgsaUJBQWlCLENBQUMsRUFBUyxFQUFPLENBQzlCLFFBQVcsS0FBVSxFQUFTLENBQzFCLElBQU0sRUFBTSxFQUFRLEdBQ3BCLEdBQUksQ0FBQyxHQUFTLEVBQU0sS0FBSyxDQUFNLEdBQzNCLEdBQUksT0FBTyxHQUFPLFNBQ2QsT0FBTyxFQUFRLEdBRWQsUUFBSSxHQUFPLENBQUMsRUFBSSxLQUNqQixLQUFLLE9BQU8sT0FBTyxFQUFJLE1BQU0sRUFDN0IsT0FBTyxFQUFRLEtBSy9CLFVBQVUsQ0FBQyxFQUFRLEVBQU0sRUFBUSxFQUFpQixLQUFLLEtBQUssZUFBZ0IsRUFBWSxLQUFLLEtBQUssY0FBZSxDQUM3RyxJQUFJLEdBQ0ksWUFBYSxLQUFLLEtBQzFCLEdBQUksT0FBTyxHQUFVLFNBQ2pCLEVBQUssRUFBTyxHQUdaLFFBQUksS0FBSyxLQUFLLElBQ1YsTUFBVSxNQUFNLHVCQUF1QixFQUN0QyxRQUFJLE9BQU8sR0FBVSxVQUN0QixNQUFVLE1BQU0sa0NBQWtDLEVBRTFELElBQUksRUFBTSxLQUFLLE9BQU8sSUFBSSxDQUFNLEVBQ2hDLEdBQUksSUFBUSxPQUNSLE9BQU8sRUFDWCxFQUF1QixlQUFhLEdBQU0sQ0FBTSxFQUNoRCxJQUFNLEVBQXNCLGlCQUFjLEtBQUssS0FBTSxFQUFRLENBQU0sRUFHbkUsR0FGQSxFQUFNLElBQWMsYUFBVSxDQUFFLFNBQVEsV0FBVSxPQUFNLFNBQVEsV0FBVSxDQUFDLEVBQzNFLEtBQUssT0FBTyxJQUFJLEVBQUksT0FBUSxDQUFHLEVBQzNCLEdBQWEsQ0FBQyxFQUFPLFdBQVcsR0FBRyxFQUFHLENBRXRDLEdBQUksRUFDQSxLQUFLLGFBQWEsQ0FBTSxFQUM1QixLQUFLLEtBQUssR0FBVSxFQUV4QixHQUFJLEVBQ0EsS0FBSyxlQUFlLEVBQVEsRUFBSSxFQUNwQyxPQUFPLEVBRVgsWUFBWSxDQUFDLEVBQUksQ0FDYixHQUFJLEtBQUssUUFBUSxJQUFPLEtBQUssS0FBSyxHQUM5QixNQUFVLE1BQU0sMEJBQTBCLG1CQUFvQixFQUd0RSxpQkFBaUIsQ0FBQyxFQUFLLENBQ25CLEdBQUksRUFBSSxLQUNKLEtBQUssbUJBQW1CLENBQUcsRUFFM0IsS0FBVSxpQkFBYyxLQUFLLEtBQU0sQ0FBRyxFQUUxQyxHQUFJLENBQUMsRUFBSSxTQUNMLE1BQVUsTUFBTSwwQkFBMEIsRUFDOUMsT0FBTyxFQUFJLFNBRWYsa0JBQWtCLENBQUMsRUFBSyxDQUNwQixJQUFNLEVBQWMsS0FBSyxLQUN6QixLQUFLLEtBQU8sS0FBSyxVQUNqQixHQUFJLENBQ1UsaUJBQWMsS0FBSyxLQUFNLENBQUcsU0FFMUMsQ0FDSSxLQUFLLEtBQU8sR0FHeEIsQ0FDQSxHQUFRLFFBQVUsR0FDbEIsR0FBSSxnQkFBa0IsR0FBbUIsUUFDekMsR0FBSSxnQkFBa0IsR0FBWSxRQUNsQyxTQUFTLEVBQVksQ0FBQyxFQUFXLEVBQVMsRUFBSyxFQUFNLFFBQVMsQ0FDMUQsUUFBVyxLQUFPLEVBQVcsQ0FDekIsSUFBTSxFQUFNLEVBQ1osR0FBSSxLQUFPLEVBQ1AsS0FBSyxPQUFPLEdBQUssR0FBRyxhQUFlLE1BQVEsRUFBVSxJQUFNLEdBR3ZFLFNBQVMsRUFBUyxDQUFDLEVBQVEsQ0FFdkIsT0FEQSxFQUF1QixlQUFhLENBQU0sRUFDbkMsS0FBSyxRQUFRLElBQVcsS0FBSyxLQUFLLEdBRTdDLFNBQVMsRUFBaUIsRUFBRyxDQUN6QixJQUFNLEVBQWMsS0FBSyxLQUFLLFFBQzlCLEdBQUksQ0FBQyxFQUNELE9BQ0osR0FBSSxNQUFNLFFBQVEsQ0FBVyxFQUN6QixLQUFLLFVBQVUsQ0FBVyxFQUUxQixhQUFXLEtBQU8sRUFDZCxLQUFLLFVBQVUsRUFBWSxHQUFNLENBQUcsRUFFaEQsU0FBUyxFQUFpQixFQUFHLENBQ3pCLFFBQVcsS0FBUSxLQUFLLEtBQUssUUFBUyxDQUNsQyxJQUFNLEVBQVMsS0FBSyxLQUFLLFFBQVEsR0FDakMsR0FBSSxFQUNBLEtBQUssVUFBVSxFQUFNLENBQU0sR0FHdkMsU0FBUyxFQUFrQixDQUFDLEVBQU0sQ0FDOUIsR0FBSSxNQUFNLFFBQVEsQ0FBSSxFQUFHLENBQ3JCLEtBQUssY0FBYyxDQUFJLEVBQ3ZCLE9BRUosS0FBSyxPQUFPLEtBQUssa0RBQWtELEVBQ25FLFFBQVcsS0FBVyxFQUFNLENBQ3hCLElBQU0sRUFBTSxFQUFLLEdBQ2pCLEdBQUksQ0FBQyxFQUFJLFFBQ0wsRUFBSSxRQUFVLEVBQ2xCLEtBQUssV0FBVyxDQUFHLEdBRzNCLFNBQVMsRUFBb0IsRUFBRyxDQUM1QixJQUFNLEVBQVcsSUFBSyxLQUFLLElBQUssRUFDaEMsUUFBVyxLQUFPLEdBQ2QsT0FBTyxFQUFTLEdBQ3BCLE9BQU8sRUFFWCxJQUFNLEdBQVMsQ0FBRSxHQUFHLEVBQUcsR0FBSyxJQUFJLEVBQUcsR0FBSyxLQUFLLEVBQUcsRUFBSSxFQUNwRCxTQUFTLEVBQVMsQ0FBQyxFQUFRLENBQ3ZCLEdBQUksSUFBVyxHQUNYLE9BQU8sR0FDWCxHQUFJLElBQVcsT0FDWCxPQUFPLFFBQ1gsR0FBSSxFQUFPLEtBQU8sRUFBTyxNQUFRLEVBQU8sTUFDcEMsT0FBTyxFQUNYLE1BQVUsTUFBTSxtREFBbUQsRUFFdkUsSUFBTSxHQUFlLDBCQUNyQixTQUFTLEVBQVksQ0FBQyxFQUFTLEVBQUssQ0FDaEMsSUFBUSxTQUFVLEtBT2xCLEdBTlcsWUFBVSxFQUFTLENBQUMsSUFBUSxDQUNuQyxHQUFJLEVBQU0sU0FBUyxHQUNmLE1BQVUsTUFBTSxXQUFXLHNCQUF3QixFQUN2RCxHQUFJLENBQUMsR0FBYSxLQUFLLENBQUcsRUFDdEIsTUFBVSxNQUFNLFdBQVcsb0JBQXNCLEVBQ3hELEVBQ0csQ0FBQyxFQUNELE9BQ0osR0FBSSxFQUFJLE9BQVMsR0FBRSxTQUFVLEtBQU8sYUFBYyxJQUM5QyxNQUFVLE1BQU0sdURBQXVELEVBRy9FLFNBQVMsRUFBTyxDQUFDLEVBQVMsRUFBWSxFQUFVLENBQzVDLElBQUksRUFDSixJQUFNLEVBQU8sSUFBZSxNQUFRLElBQW9CLE9BQVMsT0FBSSxFQUFXLEtBQ2hGLEdBQUksR0FBWSxFQUNaLE1BQVUsTUFBTSw2Q0FBNkMsRUFDakUsSUFBUSxTQUFVLEtBQ2QsRUFBWSxFQUFPLEVBQU0sS0FBTyxFQUFNLE1BQU0sS0FBSyxFQUFHLEtBQU0sS0FBUSxJQUFNLENBQVEsRUFDcEYsR0FBSSxDQUFDLEVBQ0QsRUFBWSxDQUFFLEtBQU0sRUFBVSxNQUFPLENBQUMsQ0FBRSxFQUN4QyxFQUFNLE1BQU0sS0FBSyxDQUFTLEVBRzlCLEdBREEsRUFBTSxTQUFTLEdBQVcsR0FDdEIsQ0FBQyxFQUNELE9BQ0osSUFBTSxFQUFPLENBQ1QsVUFDQSxXQUFZLElBQ0wsRUFDSCxLQUFxQixnQkFBYyxFQUFXLElBQUksRUFDbEQsV0FBMkIsZ0JBQWMsRUFBVyxVQUFVLENBQ2xFLENBQ0osRUFDQSxHQUFJLEVBQVcsT0FDWCxHQUFjLEtBQUssS0FBTSxFQUFXLEVBQU0sRUFBVyxNQUFNLEVBRTNELE9BQVUsTUFBTSxLQUFLLENBQUksRUFDN0IsRUFBTSxJQUFJLEdBQVcsR0FDcEIsRUFBSyxFQUFXLGNBQWdCLE1BQVEsSUFBWSxRQUFhLEVBQUcsUUFBUSxDQUFDLElBQVEsS0FBSyxXQUFXLENBQUcsQ0FBQyxFQUU5RyxTQUFTLEVBQWEsQ0FBQyxFQUFXLEVBQU0sRUFBUSxDQUM1QyxJQUFNLEVBQUksRUFBVSxNQUFNLFVBQVUsQ0FBQyxJQUFVLEVBQU0sVUFBWSxDQUFNLEVBQ3ZFLEdBQUksR0FBSyxFQUNMLEVBQVUsTUFBTSxPQUFPLEVBQUcsRUFBRyxDQUFJLEVBR2pDLE9BQVUsTUFBTSxLQUFLLENBQUksRUFDekIsS0FBSyxPQUFPLEtBQUssUUFBUSxrQkFBdUIsRUFHeEQsU0FBUyxFQUFpQixDQUFDLEVBQUssQ0FDNUIsSUFBTSxjQUFlLEVBQ3JCLEdBQUksSUFBZSxPQUNmLE9BQ0osR0FBSSxFQUFJLE9BQVMsS0FBSyxLQUFLLE1BQ3ZCLEVBQWEsR0FBYSxDQUFVLEVBQ3hDLEVBQUksZUFBaUIsS0FBSyxRQUFRLEVBQVksRUFBSSxFQUV0RCxJQUFNLEdBQVcsQ0FDYixLQUFNLGdGQUNWLEVBQ0EsU0FBUyxFQUFZLENBQUMsRUFBUSxDQUMxQixNQUFPLENBQUUsTUFBTyxDQUFDLEVBQVEsRUFBUSxDQUFFLDJCQ3JtQnZDLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLEdBQU0sQ0FDUixRQUFTLEtBQ1QsSUFBSSxFQUFHLENBQ0gsTUFBVSxNQUFNLHNEQUFzRCxFQUU5RSxFQUNBLEdBQVEsUUFBVSwyQkNQbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsUUFBVSxHQUFRLFlBQW1CLE9BQzdDLElBQU0sUUFDQSxRQUNBLE9BQ0EsUUFDQSxRQUNBLFFBQ0EsR0FBTSxDQUNSLFFBQVMsT0FDVCxXQUFZLFNBQ1osSUFBSSxDQUFDLEVBQUssQ0FDTixJQUFRLE1BQUssT0FBUSxFQUFNLE1BQU8sR0FDMUIsU0FBUSxVQUFXLEVBQUssZUFBYyxPQUFNLFFBQVMsR0FDckQsUUFBUyxFQUNqQixJQUFLLElBQVMsS0FBTyxJQUFTLE9BQVMsSUFBVyxFQUFLLE9BQ25ELE9BQU8sRUFBWSxFQUN2QixJQUFNLEVBQXFCLGNBQVcsS0FBSyxFQUFNLEVBQU0sRUFBUSxDQUFJLEVBQ25FLEdBQUksSUFBYSxPQUNiLE1BQU0sSUFBSSxHQUFZLFFBQVEsRUFBRyxLQUFLLFlBQWEsRUFBUSxDQUFJLEVBQ25FLEdBQUksYUFBOEIsYUFDOUIsT0FBTyxFQUFhLENBQVEsRUFDaEMsT0FBTyxFQUFnQixDQUFRLEVBQy9CLFNBQVMsQ0FBVyxFQUFHLENBQ25CLEdBQUksSUFBUSxFQUNSLE9BQU8sR0FBUSxFQUFLLEVBQWMsRUFBSyxFQUFJLE1BQU0sRUFDckQsSUFBTSxFQUFXLEVBQUksV0FBVyxPQUFRLENBQUUsSUFBSyxDQUFLLENBQUMsRUFDckQsT0FBTyxHQUFRLEVBQU0sQUFBYSxPQUFNLGFBQXFCLEVBQU0sRUFBSyxNQUFNLEVBRWxGLFNBQVMsQ0FBWSxDQUFDLEVBQUssQ0FDdkIsSUFBTSxFQUFJLEdBQVksRUFBSyxDQUFHLEVBQzlCLEdBQVEsRUFBSyxFQUFHLEVBQUssRUFBSSxNQUFNLEVBRW5DLFNBQVMsQ0FBZSxDQUFDLEVBQUssQ0FDMUIsSUFBTSxFQUFVLEVBQUksV0FBVyxTQUFVLEVBQUssS0FBSyxTQUFXLEdBQU8sQ0FBRSxJQUFLLEVBQUssS0FBb0IsYUFBVyxDQUFHLENBQUUsRUFBSSxDQUFFLElBQUssQ0FBSSxDQUFDLEVBQy9ILEVBQVEsRUFBSSxLQUFLLE9BQU8sRUFDeEIsRUFBUyxFQUFJLFVBQVUsQ0FDekIsT0FBUSxFQUNSLFVBQVcsQ0FBQyxFQUNaLFdBQXNCLE9BQ3RCLGFBQWMsRUFDZCxjQUFlLENBQ25CLEVBQUcsQ0FBSyxFQUNSLEVBQUksZUFBZSxDQUFNLEVBQ3pCLEVBQUksR0FBRyxDQUFLLEdBR3hCLEVBQ0EsU0FBUyxFQUFXLENBQUMsRUFBSyxFQUFLLENBQzNCLElBQVEsT0FBUSxFQUNoQixPQUFPLEVBQUksU0FDTCxFQUFJLFdBQVcsV0FBWSxDQUFFLElBQUssRUFBSSxRQUFTLENBQUMsRUFDL0MsQUFBYSxPQUFNLEVBQUksV0FBVyxVQUFXLENBQUUsSUFBSyxDQUFJLENBQUMsYUFFcEUsR0FBUSxZQUFjLEdBQ3RCLFNBQVMsRUFBTyxDQUFDLEVBQUssRUFBRyxFQUFLLEVBQVEsQ0FDbEMsSUFBUSxNQUFLLE1BQU8sR0FDWixZQUFXLFVBQVcsRUFBSyxRQUFTLEVBQ3RDLEVBQVUsRUFBSyxZQUFjLEdBQVEsUUFBUSxLQUFpQixPQUNwRSxHQUFJLEVBQ0EsRUFBYSxFQUViLE9BQVksRUFDaEIsU0FBUyxDQUFZLEVBQUcsQ0FDcEIsR0FBSSxDQUFDLEVBQUksT0FDTCxNQUFVLE1BQU0sd0NBQXdDLEVBQzVELElBQU0sRUFBUSxFQUFJLElBQUksT0FBTyxFQUM3QixFQUFJLElBQUksSUFBTSxDQUdWLEdBRkEsRUFBSSxLQUFNLEFBQWEsYUFBdUIsb0JBQWtCLEVBQUssRUFBRyxDQUFPLEdBQUcsRUFDbEYsRUFBaUIsQ0FBQyxFQUNkLENBQUMsRUFDRCxFQUFJLE9BQU8sRUFBTyxFQUFJLEdBQzNCLENBQUMsSUFBTSxDQUdOLEdBRkEsRUFBSSxHQUFJLEFBQWEsU0FBUSxnQkFBZ0IsRUFBRyxtQkFBb0IsSUFBTSxFQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQ3RGLEVBQWMsQ0FBQyxFQUNYLENBQUMsRUFDRCxFQUFJLE9BQU8sRUFBTyxFQUFLLEVBQzlCLEVBQ0QsRUFBSSxHQUFHLENBQUssRUFFaEIsU0FBUyxDQUFXLEVBQUcsQ0FDbkIsRUFBSSxPQUFrQixvQkFBa0IsRUFBSyxFQUFHLENBQU8sRUFBRyxJQUFNLEVBQWlCLENBQUMsRUFBRyxJQUFNLEVBQWMsQ0FBQyxDQUFDLEVBRS9HLFNBQVMsQ0FBYSxDQUFDLEVBQVEsQ0FDM0IsSUFBTSxFQUFRLEFBQWEsT0FBTSxXQUNqQyxFQUFJLE9BQU8sR0FBUSxRQUFRLFFBQVUsQUFBYSxPQUFNLEdBQVEsUUFBUSxzQkFBc0IsT0FBVSxHQUFRLFFBQVEsa0JBQWtCLElBQU8sRUFDakosRUFBSSxPQUFPLEdBQVEsUUFBUSxPQUFTLEFBQWEsT0FBTSxHQUFRLFFBQVEsZ0JBQWdCLEVBRTNGLFNBQVMsQ0FBZ0IsQ0FBQyxFQUFRLENBQzlCLElBQUksRUFDSixHQUFJLENBQUMsRUFBRyxLQUFLLFlBQ1QsT0FDSixJQUFNLEdBQWdCLEVBQUssSUFBUSxNQUFRLElBQWEsT0FBUyxPQUFJLEVBQUksWUFBYyxNQUFRLElBQVksT0FBUyxPQUFJLEVBQUcsVUFFM0gsR0FBSSxFQUFHLFFBQVUsR0FDYixHQUFJLEdBQWdCLENBQUMsRUFBYSxjQUM5QixHQUFJLEVBQWEsUUFBVSxPQUN2QixFQUFHLE1BQWUsa0JBQWUsTUFBTSxFQUFLLEVBQWEsTUFBTyxFQUFHLEtBQUssRUFHM0UsS0FDRCxJQUFNLEVBQVEsRUFBSSxJQUFJLFFBQVUsQUFBYSxPQUFNLG1CQUF3QixFQUMzRSxFQUFHLE1BQWUsa0JBQWUsTUFBTSxFQUFLLEVBQU8sRUFBRyxNQUFpQixPQUFJLEVBR25GLEdBQUksRUFBRyxRQUFVLEdBQ2IsR0FBSSxHQUFnQixDQUFDLEVBQWEsY0FDOUIsR0FBSSxFQUFhLFFBQVUsT0FDdkIsRUFBRyxNQUFlLGtCQUFlLE1BQU0sRUFBSyxFQUFhLE1BQU8sRUFBRyxLQUFLLEVBRzNFLEtBQ0QsSUFBTSxFQUFRLEVBQUksSUFBSSxRQUFVLEFBQWEsT0FBTSxtQkFBd0IsRUFDM0UsRUFBRyxNQUFlLGtCQUFlLE1BQU0sRUFBSyxFQUFPLEVBQUcsTUFBaUIsT0FBSSxJQUszRixHQUFRLFFBQVUsR0FDbEIsR0FBUSxRQUFVLDJCQ3ZIbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sUUFDQSxRQUNBLEdBQU8sQ0FDVCxVQUNBLE1BQ0EsUUFDQSxjQUNBLENBQUUsUUFBUyxVQUFXLEVBQ3RCLGNBQ0EsR0FBSyxRQUNMLEdBQU0sT0FDVixFQUNBLEdBQVEsUUFBVSwyQkNibEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sT0FDQSxHQUFnQixhQUNoQixHQUFPLENBQ1QsUUFBUyxDQUFFLE1BQU8sS0FBTSxHQUFJLEdBQUksSUFBSyxLQUFNLEdBQUksRUFBRyxFQUNsRCxRQUFTLENBQUUsTUFBTyxLQUFNLEdBQUksR0FBSSxJQUFLLEtBQU0sR0FBSSxFQUFHLEVBQ2xELGlCQUFrQixDQUFFLE1BQU8sSUFBSyxHQUFJLEdBQUksR0FBSSxLQUFNLEdBQUksR0FBSSxFQUMxRCxpQkFBa0IsQ0FBRSxNQUFPLElBQUssR0FBSSxHQUFJLEdBQUksS0FBTSxHQUFJLEdBQUksQ0FDOUQsRUFDTSxHQUFRLENBQ1YsUUFBUyxFQUFHLFVBQVMsZ0JBQWtCLEFBQWEsaUJBQWdCLEdBQUssR0FBUyxTQUFTLElBQzNGLE9BQVEsRUFBRyxVQUFTLGdCQUFrQixBQUFhLG9CQUFtQixHQUFLLEdBQVMsaUJBQWlCLElBQ3pHLEVBQ00sR0FBTSxDQUNSLFFBQVMsT0FBTyxLQUFLLEVBQUksRUFDekIsS0FBTSxTQUNOLFdBQVksU0FDWixNQUFPLEdBQ1AsU0FDQSxJQUFJLENBQUMsRUFBSyxDQUNOLElBQVEsVUFBUyxPQUFNLGNBQWUsRUFDdEMsRUFBSSxVQUFXLEFBQWEsT0FBTSxLQUFRLEdBQUssR0FBUyxRQUFRLGNBQXVCLElBQU8sRUFFdEcsRUFDQSxHQUFRLFFBQVUsMkJDeEJsQixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsSUFBTSxPQUNBLEdBQVEsQ0FDVixRQUFTLEVBQUcsZ0JBQWtCLEFBQWEsNkJBQTRCLElBQ3ZFLE9BQVEsRUFBRyxnQkFBa0IsQUFBYSxvQkFBbUIsSUFDakUsRUFDTSxHQUFNLENBQ1IsUUFBUyxhQUNULEtBQU0sU0FDTixXQUFZLFNBQ1osTUFBTyxHQUNQLFNBQ0EsSUFBSSxDQUFDLEVBQUssQ0FDTixJQUFRLE1BQUssT0FBTSxhQUFZLE1BQU8sRUFFaEMsRUFBTyxFQUFHLEtBQUssb0JBQ2YsRUFBTSxFQUFJLElBQUksS0FBSyxFQUNuQixFQUFVLEVBQ1QsQUFBYSwyQkFBMEIsUUFBVSxXQUFhLElBQzlELEFBQWEsT0FBTSxrQkFBb0IsS0FDOUMsRUFBSSxVQUFXLEFBQWEsUUFBTyxlQUF3QixPQUFTLEtBQVEsTUFBZSxLQUFXLEVBRTlHLEVBQ0EsR0FBUSxRQUFVLDJCQ3ZCbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBRzVELFNBQVMsRUFBVSxDQUFDLEVBQUssQ0FDckIsSUFBTSxFQUFNLEVBQUksT0FDWixFQUFTLEVBQ1QsRUFBTSxFQUNOLEVBQ0osTUFBTyxFQUFNLEVBR1QsR0FGQSxJQUNBLEVBQVEsRUFBSSxXQUFXLEdBQUssRUFDeEIsR0FBUyxPQUFVLEdBQVMsT0FBVSxFQUFNLEdBRzVDLEdBREEsRUFBUSxFQUFJLFdBQVcsQ0FBRyxHQUNyQixFQUFRLFNBQVksTUFDckIsSUFHWixPQUFPLEVBRVgsR0FBUSxRQUFVLEdBQ2xCLEdBQVcsS0FBTyx5RUNyQmxCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLE9BQ0EsUUFDQSxRQUNBLEdBQVEsQ0FDVixPQUFPLEVBQUcsVUFBUyxjQUFjLENBRTdCLE1BQVEsQ0FBYSx1QkFEUixJQUFZLFlBQWMsT0FBUyxnQkFDUSxnQkFFNUQsT0FBUSxFQUFHLGdCQUFrQixBQUFhLGVBQWMsSUFDNUQsRUFDTSxHQUFNLENBQ1IsUUFBUyxDQUFDLFlBQWEsV0FBVyxFQUNsQyxLQUFNLFNBQ04sV0FBWSxTQUNaLE1BQU8sR0FDUCxTQUNBLElBQUksQ0FBQyxFQUFLLENBQ04sSUFBUSxVQUFTLE9BQU0sYUFBWSxNQUFPLEVBQ3BDLEVBQUssSUFBWSxZQUF3QixhQUFVLEdBQWUsYUFBVSxHQUM1RSxFQUFNLEVBQUcsS0FBSyxVQUFZLEdBQVMsQUFBYSxPQUFNLFdBQWlCLEFBQWEsT0FBaUIsV0FBUyxFQUFJLElBQUssR0FBYSxPQUFPLEtBQUssS0FDdEosRUFBSSxVQUFXLEFBQWEsT0FBTSxLQUFPLEtBQU0sR0FBWSxFQUVuRSxFQUNBLEdBQVEsUUFBVSwyQkN4QmxCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLFFBQ0EsT0FDQSxHQUFRLENBQ1YsUUFBUyxFQUFHLGdCQUFrQixBQUFhLDZCQUE0QixLQUN2RSxPQUFRLEVBQUcsZ0JBQWtCLEFBQWEsaUJBQWdCLElBQzlELEVBQ00sR0FBTSxDQUNSLFFBQVMsVUFDVCxLQUFNLFNBQ04sV0FBWSxTQUNaLE1BQU8sR0FDUCxTQUNBLElBQUksQ0FBQyxFQUFLLENBQ04sSUFBUSxPQUFNLFFBQU8sU0FBUSxhQUFZLE1BQU8sRUFFMUMsRUFBSSxFQUFHLEtBQUssY0FBZ0IsSUFBTSxHQUNsQyxFQUFTLEVBQVMsQUFBYSxtQkFBa0IsTUFBZSxNQUFtQixjQUFZLEVBQUssQ0FBTSxFQUNoSCxFQUFJLFVBQVcsQUFBYSxRQUFPLFVBQWUsSUFBTyxFQUVqRSxFQUNBLEdBQVEsUUFBVSwyQkNyQmxCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLE9BQ0EsR0FBUSxDQUNWLE9BQU8sRUFBRyxVQUFTLGNBQWMsQ0FFN0IsTUFBUSxDQUFhLHVCQURSLElBQVksZ0JBQWtCLE9BQVMsZ0JBQ0ksZ0JBRTVELE9BQVEsRUFBRyxnQkFBa0IsQUFBYSxlQUFjLElBQzVELEVBQ00sR0FBTSxDQUNSLFFBQVMsQ0FBQyxnQkFBaUIsZUFBZSxFQUMxQyxLQUFNLFNBQ04sV0FBWSxTQUNaLE1BQU8sR0FDUCxTQUNBLElBQUksQ0FBQyxFQUFLLENBQ04sSUFBUSxVQUFTLE9BQU0sY0FBZSxFQUNoQyxFQUFLLElBQVksZ0JBQTRCLGFBQVUsR0FBZSxhQUFVLEdBQ3RGLEVBQUksVUFBVyxBQUFhLG1CQUFrQixhQUFnQixLQUFNLEdBQVksRUFFeEYsRUFDQSxHQUFRLFFBQVUsMkJDckJsQixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsSUFBTSxRQUNBLE9BQ0EsUUFDQSxHQUFRLENBQ1YsUUFBUyxFQUFHLFFBQVUsc0JBQXlCLEFBQWEsc0NBQXFDLEtBQ2pHLE9BQVEsRUFBRyxRQUFVLHNCQUF5QixBQUFhLHlCQUF3QixJQUN2RixFQUNNLEdBQU0sQ0FDUixRQUFTLFdBQ1QsS0FBTSxTQUNOLFdBQVksUUFDWixNQUFPLEdBQ1AsU0FDQSxJQUFJLENBQUMsRUFBSyxDQUNOLElBQVEsTUFBSyxTQUFRLGFBQVksT0FBTSxRQUFPLE1BQU8sR0FDN0MsUUFBUyxFQUNqQixHQUFJLENBQUMsR0FBUyxFQUFPLFNBQVcsRUFDNUIsT0FDSixJQUFNLEVBQVUsRUFBTyxRQUFVLEVBQUssYUFDdEMsR0FBSSxFQUFHLFVBQ0gsRUFBYyxFQUVkLE9BQWdCLEVBQ3BCLEdBQUksRUFBSyxlQUFnQixDQUNyQixJQUFNLEVBQVEsRUFBSSxhQUFhLFlBQ3ZCLHFCQUFzQixFQUFJLEdBQ2xDLFFBQVcsS0FBZSxFQUN0QixJQUFLLElBQVUsTUFBUSxJQUFlLE9BQVMsT0FBSSxFQUFNLE1BQWtCLFFBQWEsQ0FBQyxFQUFrQixJQUFJLENBQVcsRUFBRyxDQUN6SCxJQUFNLEVBQWEsRUFBRyxVQUFVLE9BQVMsRUFBRyxjQUN0QyxFQUFNLHNCQUFzQix5QkFBbUMsc0JBQzFELG1CQUFpQixFQUFJLEVBQUssRUFBRyxLQUFLLGNBQWMsR0FJdkUsU0FBUyxDQUFhLEVBQUcsQ0FDckIsR0FBSSxHQUFXLEVBQ1gsRUFBSSxXQUFxQixPQUFLLENBQWUsRUFHN0MsYUFBVyxLQUFRLEVBQ0osMEJBQXdCLEVBQUssQ0FBSSxFQUl4RCxTQUFTLENBQWUsRUFBRyxDQUN2QixJQUFNLEVBQVUsRUFBSSxJQUFJLFNBQVMsRUFDakMsR0FBSSxHQUFXLEVBQU8sQ0FDbEIsSUFBTSxFQUFRLEVBQUksSUFBSSxRQUFTLEVBQUksRUFDbkMsRUFBSSxXQUFXLEVBQU8sSUFBTSxFQUFpQixFQUFTLENBQUssQ0FBQyxFQUM1RCxFQUFJLEdBQUcsQ0FBSyxFQUdaLE9BQUksR0FBYyxvQkFBa0IsRUFBSyxFQUFRLENBQU8sQ0FBQyxFQUM5QyxxQkFBbUIsRUFBSyxDQUFPLEVBQzFDLEVBQUksS0FBSyxFQUdqQixTQUFTLENBQWUsRUFBRyxDQUN2QixFQUFJLE1BQU0sT0FBUSxFQUFZLENBQUMsSUFBUyxDQUNwQyxFQUFJLFVBQVUsQ0FBRSxnQkFBaUIsQ0FBSyxDQUFDLEVBQ3ZDLEVBQUksR0FBYyxvQkFBa0IsRUFBSyxFQUFNLEVBQU0sRUFBSyxhQUFhLEVBQUcsSUFBTSxFQUFJLE1BQU0sQ0FBQyxFQUM5RixFQUVMLFNBQVMsQ0FBZ0IsQ0FBQyxFQUFTLEVBQU8sQ0FDdEMsRUFBSSxVQUFVLENBQUUsZ0JBQWlCLENBQVEsQ0FBQyxFQUMxQyxFQUFJLE1BQU0sRUFBUyxFQUFZLElBQU0sQ0FDakMsRUFBSSxPQUFPLEVBQWtCLGtCQUFnQixFQUFLLEVBQU0sRUFBUyxFQUFLLGFBQWEsQ0FBQyxFQUNwRixFQUFJLEdBQWlCLE9BQUssQ0FBSyxFQUFHLElBQU0sQ0FDcEMsRUFBSSxNQUFNLEVBQ1YsRUFBSSxNQUFNLEVBQ2IsR0FDUSxNQUFHLEdBRzVCLEVBQ0EsR0FBUSxRQUFVLDJCQzVFbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sT0FDQSxHQUFRLENBQ1YsT0FBTyxFQUFHLFVBQVMsY0FBYyxDQUU3QixNQUFRLENBQWEsdUJBRFIsSUFBWSxXQUFhLE9BQVMsZ0JBQ1MsV0FFNUQsT0FBUSxFQUFHLGdCQUFrQixBQUFhLGVBQWMsSUFDNUQsRUFDTSxHQUFNLENBQ1IsUUFBUyxDQUFDLFdBQVksVUFBVSxFQUNoQyxLQUFNLFFBQ04sV0FBWSxTQUNaLE1BQU8sR0FDUCxTQUNBLElBQUksQ0FBQyxFQUFLLENBQ04sSUFBUSxVQUFTLE9BQU0sY0FBZSxFQUNoQyxFQUFLLElBQVksV0FBdUIsYUFBVSxHQUFlLGFBQVUsR0FDakYsRUFBSSxVQUFXLEFBQWEsT0FBTSxZQUFlLEtBQU0sR0FBWSxFQUUzRSxFQUNBLEdBQVEsUUFBVSwyQkNyQmxCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUU1RCxJQUFNLFFBQ04sR0FBTSxLQUFPLDRDQUNiLEdBQVEsUUFBVSwyQkNKbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sUUFDQSxPQUNBLFFBQ0EsUUFDQSxHQUFRLENBQ1YsUUFBUyxFQUFHLFFBQVUsSUFBRyxRQUFXLEFBQWEsaURBQWdELFNBQVMsbUJBQzFHLE9BQVEsRUFBRyxRQUFVLElBQUcsUUFBVyxBQUFhLFdBQVUsU0FBUyxJQUN2RSxFQUNNLEdBQU0sQ0FDUixRQUFTLGNBQ1QsS0FBTSxRQUNOLFdBQVksVUFDWixNQUFPLEdBQ1AsU0FDQSxJQUFJLENBQUMsRUFBSyxDQUNOLElBQVEsTUFBSyxPQUFNLFFBQU8sU0FBUSxlQUFjLGFBQVksTUFBTyxFQUNuRSxHQUFJLENBQUMsR0FBUyxDQUFDLEVBQ1gsT0FDSixJQUFNLEVBQVEsRUFBSSxJQUFJLE9BQU8sRUFDdkIsRUFBWSxFQUFhLE1BQXVCLGtCQUFnQixFQUFhLEtBQUssRUFBSSxDQUFDLEVBQzdGLEVBQUksV0FBVyxFQUFPLEVBQXNCLEFBQWEsT0FBTSxhQUFzQixFQUNyRixFQUFJLEdBQUcsQ0FBSyxFQUNaLFNBQVMsQ0FBbUIsRUFBRyxDQUMzQixJQUFNLEVBQUksRUFBSSxJQUFJLElBQU0sQUFBYSxPQUFNLFVBQWEsRUFDbEQsRUFBSSxFQUFJLElBQUksR0FBRyxFQUNyQixFQUFJLFVBQVUsQ0FBRSxJQUFHLEdBQUUsQ0FBQyxFQUN0QixFQUFJLE9BQU8sRUFBTyxFQUFJLEVBQ3RCLEVBQUksR0FBSSxBQUFhLE9BQU0sUUFBUyxLQUFPLEVBQVksRUFBSSxFQUFRLEdBQVEsRUFBRyxDQUFDLENBQUMsRUFFcEYsU0FBUyxDQUFXLEVBQUcsQ0FDbkIsT0FBTyxFQUFVLE9BQVMsR0FBSyxDQUFDLEVBQVUsS0FBSyxDQUFDLElBQU0sSUFBTSxVQUFZLElBQU0sT0FBTyxFQUV6RixTQUFTLENBQUssQ0FBQyxFQUFHLEVBQUcsQ0FDakIsSUFBTSxFQUFPLEVBQUksS0FBSyxNQUFNLEVBQ3RCLEVBQTJCLGtCQUFnQixFQUFXLEVBQU0sRUFBRyxLQUFLLGNBQTBCLFlBQVMsS0FBSyxFQUM1RyxFQUFVLEVBQUksTUFBTSxVQUFZLEFBQWEsUUFBTyxFQUMxRCxFQUFJLElBQUssQUFBYSxRQUFPLE9BQVEsSUFBTSxDQUd2QyxHQUZBLEVBQUksSUFBSSxFQUFPLEFBQWEsT0FBTSxLQUFRLElBQUksRUFDOUMsRUFBSSxHQUFHLEVBQVksQUFBYSxjQUFhLEVBQ3pDLEVBQVUsT0FBUyxFQUNuQixFQUFJLEdBQUksQUFBYSxjQUFhLGdCQUFxQixBQUFhLE9BQU0sVUFBYSxFQUMzRixFQUNLLEdBQUksQUFBYSxjQUFhLEtBQVcsaUJBQXFCLElBQU0sQ0FDckUsRUFBSSxPQUFPLEVBQUksQUFBYSxPQUFNLEtBQVcsSUFBTyxFQUNwRCxFQUFJLE1BQU0sRUFDVixFQUFJLE9BQU8sRUFBTyxFQUFLLEVBQUUsTUFBTSxFQUNsQyxFQUNJLEtBQU0sQUFBYSxPQUFNLEtBQVcsUUFBVyxHQUFHLEVBQzFELEVBRUwsU0FBUyxDQUFNLENBQUMsRUFBRyxFQUFHLENBQ2xCLElBQU0sRUFBaUIsV0FBUyxFQUFLLEdBQVEsT0FBTyxFQUM5QyxFQUFRLEVBQUksS0FBSyxPQUFPLEVBQzlCLEVBQUksTUFBTSxDQUFLLEVBQUUsSUFBSyxBQUFhLFFBQU8sT0FBUSxJQUFNLEVBQUksSUFBSyxBQUFhLE9BQU0sT0FBTyxNQUFNLE9BQVEsSUFBTSxFQUFJLEdBQUksQUFBYSxPQUFNLEtBQU8sS0FBUSxPQUFPLEtBQVEsTUFBTyxJQUFNLENBQ2pMLEVBQUksTUFBTSxFQUNWLEVBQUksT0FBTyxFQUFPLEVBQUssRUFBRSxNQUFNLENBQUssRUFDdkMsQ0FBQyxDQUFDLEdBR2YsRUFDQSxHQUFRLFFBQVUsMkJDN0RsQixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsSUFBTSxPQUNBLFFBQ0EsUUFDQSxHQUFRLENBQ1YsUUFBUyw0QkFDVCxPQUFRLEVBQUcsZ0JBQWtCLEFBQWEsc0JBQXFCLElBQ25FLEVBQ00sR0FBTSxDQUNSLFFBQVMsUUFDVCxNQUFPLEdBQ1AsU0FDQSxJQUFJLENBQUMsRUFBSyxDQUNOLElBQVEsTUFBSyxPQUFNLFFBQU8sYUFBWSxVQUFXLEVBQ2pELEdBQUksR0FBVSxHQUFVLE9BQU8sR0FBVSxTQUNyQyxFQUFJLFVBQVcsQUFBYSxRQUFrQixXQUFTLEVBQUssR0FBUSxPQUFPLEtBQUssTUFBUyxJQUFhLEVBR3RHLE9BQUksS0FBTSxBQUFhLE9BQU0sU0FBYyxHQUFNLEVBRzdELEVBQ0EsR0FBUSxRQUFVLDJCQ3RCbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sT0FDQSxRQUNBLFFBQ0EsR0FBUSxDQUNWLFFBQVMsNkNBQ1QsT0FBUSxFQUFHLGdCQUFrQixBQUFhLHVCQUFzQixJQUNwRSxFQUNNLEdBQU0sQ0FDUixRQUFTLE9BQ1QsV0FBWSxRQUNaLE1BQU8sR0FDUCxTQUNBLElBQUksQ0FBQyxFQUFLLENBQ04sSUFBUSxNQUFLLE9BQU0sUUFBTyxTQUFRLGFBQVksTUFBTyxFQUNyRCxHQUFJLENBQUMsR0FBUyxFQUFPLFNBQVcsRUFDNUIsTUFBVSxNQUFNLGdDQUFnQyxFQUNwRCxJQUFNLEVBQVUsRUFBTyxRQUFVLEVBQUcsS0FBSyxTQUNyQyxFQUNFLEVBQVMsSUFBTyxJQUFRLE1BQVEsSUFBYSxPQUFJLEVBQU8sRUFBaUIsV0FBUyxFQUFLLEdBQVEsT0FBTyxFQUN4RyxFQUNKLEdBQUksR0FBVyxFQUNYLEVBQVEsRUFBSSxJQUFJLE9BQU8sRUFDdkIsRUFBSSxXQUFXLEVBQU8sQ0FBUSxFQUU3QixLQUVELEdBQUksQ0FBQyxNQUFNLFFBQVEsQ0FBTSxFQUNyQixNQUFVLE1BQU0sMEJBQTBCLEVBQzlDLElBQU0sRUFBVSxFQUFJLE1BQU0sVUFBVyxDQUFVLEVBQy9DLEVBQXNCLE1BQUksR0FBRyxFQUFPLElBQUksQ0FBQyxFQUFJLElBQU0sRUFBVSxFQUFTLENBQUMsQ0FBQyxDQUFDLEVBRTdFLEVBQUksS0FBSyxDQUFLLEVBQ2QsU0FBUyxDQUFRLEVBQUcsQ0FDaEIsRUFBSSxPQUFPLEVBQU8sRUFBSyxFQUN2QixFQUFJLE1BQU0sSUFBSyxFQUFZLENBQUMsSUFBTSxFQUFJLEdBQUksQUFBYSxPQUFNLEVBQU8sS0FBSyxNQUFTLEtBQU0sSUFBTSxFQUFJLE9BQU8sRUFBTyxFQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFFbEksU0FBUyxDQUFTLENBQUMsRUFBUyxFQUFHLENBQzNCLElBQU0sRUFBTSxFQUFPLEdBQ25CLE9BQU8sT0FBTyxJQUFRLFVBQVksSUFBUSxLQUNuQyxBQUFhLE9BQU0sRUFBTyxLQUFLLE1BQVMsS0FBVyxNQUNuRCxBQUFhLE9BQU0sU0FBWSxLQUdsRCxFQUNBLEdBQVEsUUFBVSwyQkM3Q2xCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsR0FBYSxDQUVmLEdBQWMsUUFDZCxHQUFhLFFBRWIsR0FBYyxRQUNkLEdBQVUsUUFFVixHQUFrQixRQUNsQixHQUFXLFFBRVgsR0FBYSxRQUNiLEdBQWMsUUFFZCxDQUFFLFFBQVMsT0FBUSxXQUFZLENBQUMsU0FBVSxPQUFPLENBQUUsRUFDbkQsQ0FBRSxRQUFTLFdBQVksV0FBWSxTQUFVLEVBQzdDLEdBQVEsUUFDUixHQUFPLE9BQ1gsRUFDQSxHQUFRLFFBQVUsMkJDOUJsQixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsR0FBUSx3QkFBK0IsT0FDdkMsSUFBTSxPQUNBLFFBQ0EsR0FBUSxDQUNWLFFBQVMsRUFBRyxRQUFVLFVBQWEsQUFBYSxpQ0FBZ0MsVUFDaEYsT0FBUSxFQUFHLFFBQVUsVUFBYSxBQUFhLGVBQWMsSUFDakUsRUFDTSxHQUFNLENBQ1IsUUFBUyxrQkFDVCxLQUFNLFFBQ04sV0FBWSxDQUFDLFVBQVcsUUFBUSxFQUNoQyxPQUFRLGNBQ1IsU0FDQSxJQUFJLENBQUMsRUFBSyxDQUNOLElBQVEsZUFBYyxNQUFPLEdBQ3JCLFNBQVUsRUFDbEIsR0FBSSxDQUFDLE1BQU0sUUFBUSxDQUFLLEVBQUcsQ0FDWixtQkFBaUIsRUFBSSxzRUFBc0UsRUFDdEcsT0FFSixHQUF3QixFQUFLLENBQUssRUFFMUMsRUFDQSxTQUFTLEVBQXVCLENBQUMsRUFBSyxFQUFPLENBQ3pDLElBQVEsTUFBSyxTQUFRLE9BQU0sVUFBUyxNQUFPLEVBQzNDLEVBQUcsTUFBUSxHQUNYLElBQU0sRUFBTSxFQUFJLE1BQU0sTUFBUSxBQUFhLE9BQU0sVUFBYSxFQUM5RCxHQUFJLElBQVcsR0FDWCxFQUFJLFVBQVUsQ0FBRSxJQUFLLEVBQU0sTUFBTyxDQUFDLEVBQ25DLEVBQUksS0FBTSxBQUFhLE9BQU0sUUFBVSxFQUFNLFFBQVEsRUFFcEQsUUFBSSxPQUFPLEdBQVUsVUFBWSxDQUFZLHFCQUFtQixFQUFJLENBQU0sRUFBRyxDQUM5RSxJQUFNLEVBQVEsRUFBSSxJQUFJLFFBQVUsQUFBYSxPQUFNLFFBQVUsRUFBTSxRQUFRLEVBQzNFLEVBQUksR0FBaUIsT0FBSyxDQUFLLEVBQUcsSUFBTSxFQUFjLENBQUssQ0FBQyxFQUM1RCxFQUFJLEdBQUcsQ0FBSyxFQUVoQixTQUFTLENBQWEsQ0FBQyxFQUFPLENBQzFCLEVBQUksU0FBUyxJQUFLLEVBQU0sT0FBUSxFQUFLLENBQUMsSUFBTSxDQUV4QyxHQURBLEVBQUksVUFBVSxDQUFFLFVBQVMsU0FBVSxFQUFHLGFBQXFCLFFBQUssR0FBSSxFQUFHLENBQUssRUFDeEUsQ0FBQyxFQUFHLFVBQ0osRUFBSSxHQUFpQixPQUFLLENBQUssRUFBRyxJQUFNLEVBQUksTUFBTSxDQUFDLEVBQzFELEdBR1QsR0FBUSx3QkFBMEIsR0FDbEMsR0FBUSxRQUFVLDJCQzlDbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsY0FBcUIsT0FDN0IsSUFBTSxPQUNBLFFBQ0EsUUFDQSxHQUFNLENBQ1IsUUFBUyxRQUNULEtBQU0sUUFDTixXQUFZLENBQUMsU0FBVSxRQUFTLFNBQVMsRUFDekMsT0FBUSxjQUNSLElBQUksQ0FBQyxFQUFLLENBQ04sSUFBUSxTQUFRLE1BQU8sRUFDdkIsR0FBSSxNQUFNLFFBQVEsQ0FBTSxFQUNwQixPQUFPLEdBQWMsRUFBSyxrQkFBbUIsQ0FBTSxFQUV2RCxHQURBLEVBQUcsTUFBUSxHQUNJLHFCQUFtQixFQUFJLENBQU0sRUFDeEMsT0FDSixFQUFJLEdBQWMsaUJBQWUsQ0FBRyxDQUFDLEVBRTdDLEVBQ0EsU0FBUyxFQUFhLENBQUMsRUFBSyxFQUFZLEVBQVMsRUFBSSxPQUFRLENBQ3pELElBQVEsTUFBSyxlQUFjLE9BQU0sVUFBUyxNQUFPLEVBRWpELEdBREEsRUFBaUIsQ0FBWSxFQUN6QixFQUFHLEtBQUssYUFBZSxFQUFPLFFBQVUsRUFBRyxRQUFVLEdBQ3JELEVBQUcsTUFBZSxrQkFBZSxNQUFNLEVBQUssRUFBTyxPQUFRLEVBQUcsS0FBSyxFQUV2RSxJQUFNLEVBQVEsRUFBSSxLQUFLLE9BQU8sRUFDeEIsRUFBTSxFQUFJLE1BQU0sTUFBUSxBQUFhLE9BQU0sVUFBYSxFQUM5RCxFQUFPLFFBQVEsQ0FBQyxFQUFLLElBQU0sQ0FDdkIsR0FBZSxxQkFBbUIsRUFBSSxDQUFHLEVBQ3JDLE9BQ0osRUFBSSxHQUFJLEFBQWEsT0FBTSxPQUFTLElBQUssSUFBTSxFQUFJLFVBQVUsQ0FDekQsVUFDQSxXQUFZLEVBQ1osU0FBVSxDQUNkLEVBQUcsQ0FBSyxDQUFDLEVBQ1QsRUFBSSxHQUFHLENBQUssRUFDZixFQUNELFNBQVMsQ0FBZ0IsQ0FBQyxFQUFLLENBQzNCLElBQVEsT0FBTSxpQkFBa0IsRUFDMUIsRUFBSSxFQUFPLE9BQ1gsRUFBWSxJQUFNLEVBQUksV0FBYSxJQUFNLEVBQUksVUFBWSxFQUFJLEtBQWdCLElBQ25GLEdBQUksRUFBSyxjQUFnQixDQUFDLEVBQVcsQ0FDakMsSUFBTSxFQUFNLElBQUksU0FBZSxxQ0FBcUMsNkNBQXNELEtBQy9HLG1CQUFpQixFQUFJLEVBQUssRUFBSyxZQUFZLElBSWxFLEdBQVEsY0FBZ0IsR0FDeEIsR0FBUSxRQUFVLDJCQ2pEbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sUUFDQSxHQUFNLENBQ1IsUUFBUyxjQUNULEtBQU0sUUFDTixXQUFZLENBQUMsT0FBTyxFQUNwQixPQUFRLGNBQ1IsS0FBTSxDQUFDLElBQW9CLGlCQUFlLEVBQUssT0FBTyxDQUMxRCxFQUNBLEdBQVEsUUFBVSwyQkNUbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sT0FDQSxRQUNBLFFBQ0EsUUFDQSxHQUFRLENBQ1YsUUFBUyxFQUFHLFFBQVUsVUFBYSxBQUFhLGlDQUFnQyxVQUNoRixPQUFRLEVBQUcsUUFBVSxVQUFhLEFBQWEsZUFBYyxJQUNqRSxFQUNNLEdBQU0sQ0FDUixRQUFTLFFBQ1QsS0FBTSxRQUNOLFdBQVksQ0FBQyxTQUFVLFNBQVMsRUFDaEMsT0FBUSxjQUNSLFNBQ0EsSUFBSSxDQUFDLEVBQUssQ0FDTixJQUFRLFNBQVEsZUFBYyxNQUFPLEdBQzdCLGVBQWdCLEVBRXhCLEdBREEsRUFBRyxNQUFRLEdBQ0kscUJBQW1CLEVBQUksQ0FBTSxFQUN4QyxPQUNKLEdBQUksRUFDc0IsMkJBQXlCLEVBQUssQ0FBVyxFQUUvRCxPQUFJLEdBQWMsaUJBQWUsQ0FBRyxDQUFDLEVBRWpELEVBQ0EsR0FBUSxRQUFVLDJCQzNCbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sT0FDQSxRQUNBLEdBQVEsQ0FDVixRQUFTLEVBQUcsUUFBVSxNQUFLLFVBQVksSUFBUSxPQUN4QyxBQUFhLCtCQUE4QixrQkFDM0MsQUFBYSwrQkFBOEIsc0JBQXdCLGtCQUMxRSxPQUFRLEVBQUcsUUFBVSxNQUFLLFVBQVksSUFBUSxPQUFhLEFBQWEscUJBQW9CLEtBQVUsQUFBYSxxQkFBb0IsbUJBQXFCLElBQ2hLLEVBQ00sR0FBTSxDQUNSLFFBQVMsV0FDVCxLQUFNLFFBQ04sV0FBWSxDQUFDLFNBQVUsU0FBUyxFQUNoQyxPQUFRLGNBQ1IsWUFBYSxHQUNiLFNBQ0EsSUFBSSxDQUFDLEVBQUssQ0FDTixJQUFRLE1BQUssU0FBUSxlQUFjLE9BQU0sTUFBTyxFQUM1QyxFQUNBLEdBQ0ksY0FBYSxlQUFnQixFQUNyQyxHQUFJLEVBQUcsS0FBSyxLQUNSLEVBQU0sSUFBZ0IsT0FBWSxFQUFJLEVBQ3RDLEVBQU0sRUFHTixPQUFNLEVBRVYsSUFBTSxFQUFNLEVBQUksTUFBTSxNQUFRLEFBQWEsT0FBTSxVQUFhLEVBRTlELEdBREEsRUFBSSxVQUFVLENBQUUsTUFBSyxLQUFJLENBQUMsRUFDdEIsSUFBUSxRQUFhLElBQVEsRUFBRyxDQUNyQixtQkFBaUIsRUFBSSxzRUFBc0UsRUFDdEcsT0FFSixHQUFJLElBQVEsUUFBYSxFQUFNLEVBQUssQ0FDckIsbUJBQWlCLEVBQUksaURBQWlELEVBQ2pGLEVBQUksS0FBSyxFQUNULE9BRUosR0FBZSxxQkFBbUIsRUFBSSxDQUFNLEVBQUcsQ0FDM0MsSUFBSSxFQUFRLEFBQWEsT0FBTSxRQUFVLElBQ3pDLEdBQUksSUFBUSxPQUNSLEVBQVEsQUFBYSxPQUFNLFFBQVcsUUFBVSxJQUNwRCxFQUFJLEtBQUssQ0FBSSxFQUNiLE9BRUosRUFBRyxNQUFRLEdBQ1gsSUFBTSxFQUFRLEVBQUksS0FBSyxPQUFPLEVBQzlCLEdBQUksSUFBUSxRQUFhLElBQVEsRUFDN0IsRUFBYyxFQUFPLElBQU0sRUFBSSxHQUFHLEVBQU8sSUFBTSxFQUFJLE1BQU0sQ0FBQyxDQUFDLEVBRTFELFFBQUksSUFBUSxHQUViLEdBREEsRUFBSSxJQUFJLEVBQU8sRUFBSSxFQUNmLElBQVEsT0FDUixFQUFJLEdBQUksQUFBYSxPQUFNLGVBQW1CLENBQXNCLEVBR3hFLE9BQUksSUFBSSxFQUFPLEVBQUssRUFDcEIsRUFBdUIsRUFFM0IsRUFBSSxPQUFPLEVBQU8sSUFBTSxFQUFJLE1BQU0sQ0FBQyxFQUNuQyxTQUFTLENBQXNCLEVBQUcsQ0FDOUIsSUFBTSxFQUFXLEVBQUksS0FBSyxRQUFRLEVBQzVCLEVBQVEsRUFBSSxJQUFJLFFBQVMsQ0FBQyxFQUNoQyxFQUFjLEVBQVUsSUFBTSxFQUFJLEdBQUcsRUFBVSxJQUFNLEVBQVksQ0FBSyxDQUFDLENBQUMsRUFFNUUsU0FBUyxDQUFhLENBQUMsRUFBUSxFQUFPLENBQ2xDLEVBQUksU0FBUyxJQUFLLEVBQUcsRUFBSyxDQUFDLElBQU0sQ0FDN0IsRUFBSSxVQUFVLENBQ1YsUUFBUyxXQUNULFNBQVUsRUFDVixhQUFxQixRQUFLLElBQzFCLGNBQWUsRUFDbkIsRUFBRyxDQUFNLEVBQ1QsRUFBTSxFQUNULEVBRUwsU0FBUyxDQUFXLENBQUMsRUFBTyxDQUV4QixHQURBLEVBQUksS0FBTSxBQUFhLE9BQU0sS0FBUyxFQUNsQyxJQUFRLE9BQ1IsRUFBSSxHQUFJLEFBQWEsT0FBTSxRQUFZLElBQU8sSUFBTSxFQUFJLE9BQU8sRUFBTyxFQUFJLEVBQUUsTUFBTSxDQUFDLEVBSW5GLFFBREEsRUFBSSxHQUFJLEFBQWEsT0FBTSxPQUFXLElBQU8sSUFBTSxFQUFJLE9BQU8sRUFBTyxFQUFLLEVBQUUsTUFBTSxDQUFDLEVBQy9FLElBQVEsRUFDUixFQUFJLE9BQU8sRUFBTyxFQUFJLEVBRXRCLE9BQUksR0FBSSxBQUFhLE9BQU0sUUFBWSxJQUFPLElBQU0sRUFBSSxPQUFPLEVBQU8sRUFBSSxDQUFDLEdBSS9GLEVBQ0EsR0FBUSxRQUFVLDJCQzVGbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsbUJBQXFCLEdBQVEscUJBQXVCLEdBQVEsTUFBYSxPQUNqRixJQUFNLE9BQ0EsUUFDQSxRQUNOLEdBQVEsTUFBUSxDQUNaLFFBQVMsRUFBRyxRQUFVLFdBQVUsWUFBVyxXQUUvQixBQUFhLG1CQURBLElBQWMsRUFBSSxXQUFhLGdCQUNHLG1CQUFzQixlQUVqRixPQUFRLEVBQUcsUUFBVSxXQUFVLFlBQVcsT0FBTSxzQkFBeUIsQUFBYSxrQkFBaUI7QUFBQSx1QkFDcEY7QUFBQSxpQkFDTjtBQUFBLFlBQ0wsSUFDWixFQUNBLElBQU0sR0FBTSxDQUNSLFFBQVMsZUFDVCxLQUFNLFNBQ04sV0FBWSxTQUNaLE1BQU8sR0FBUSxNQUNmLElBQUksQ0FBQyxFQUFLLENBQ04sSUFBTyxFQUFVLEdBQVcsR0FBa0IsQ0FBRyxFQUNqRCxHQUFxQixFQUFLLENBQVEsRUFDbEMsR0FBbUIsRUFBSyxDQUFPLEVBRXZDLEVBQ0EsU0FBUyxFQUFpQixFQUFHLFVBQVUsQ0FDbkMsSUFBTSxFQUFlLENBQUMsRUFDaEIsRUFBYSxDQUFDLEVBQ3BCLFFBQVcsS0FBTyxFQUFRLENBQ3RCLEdBQUksSUFBUSxZQUNSLFNBQ0osSUFBTSxFQUFPLE1BQU0sUUFBUSxFQUFPLEVBQUksRUFBSSxFQUFlLEVBQ3pELEVBQUssR0FBTyxFQUFPLEdBRXZCLE1BQU8sQ0FBQyxFQUFjLENBQVUsRUFFcEMsU0FBUyxFQUFvQixDQUFDLEVBQUssRUFBZSxFQUFJLE9BQVEsQ0FDMUQsSUFBUSxNQUFLLE9BQU0sTUFBTyxFQUMxQixHQUFJLE9BQU8sS0FBSyxDQUFZLEVBQUUsU0FBVyxFQUNyQyxPQUNKLElBQU0sRUFBVSxFQUFJLElBQUksU0FBUyxFQUNqQyxRQUFXLEtBQVEsRUFBYyxDQUM3QixJQUFNLEVBQU8sRUFBYSxHQUMxQixHQUFJLEVBQUssU0FBVyxFQUNoQixTQUNKLElBQU0sRUFBeUIsa0JBQWdCLEVBQUssRUFBTSxFQUFNLEVBQUcsS0FBSyxhQUFhLEVBTXJGLEdBTEEsRUFBSSxVQUFVLENBQ1YsU0FBVSxFQUNWLFVBQVcsRUFBSyxPQUNoQixLQUFNLEVBQUssS0FBSyxJQUFJLENBQ3hCLENBQUMsRUFDRyxFQUFHLFVBQ0gsRUFBSSxHQUFHLEVBQWEsSUFBTSxDQUN0QixRQUFXLEtBQVcsRUFDUCwwQkFBd0IsRUFBSyxDQUFPLEVBRXRELEVBR0QsT0FBSSxHQUFJLEFBQWEsT0FBTSxTQUE4QixvQkFBa0IsRUFBSyxFQUFNLENBQU8sSUFBSSxFQUN0RixxQkFBbUIsRUFBSyxDQUFPLEVBQzFDLEVBQUksS0FBSyxHQUlyQixHQUFRLHFCQUF1QixHQUMvQixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFhLEVBQUksT0FBUSxDQUN0RCxJQUFRLE1BQUssT0FBTSxVQUFTLE1BQU8sRUFDN0IsRUFBUSxFQUFJLEtBQUssT0FBTyxFQUM5QixRQUFXLEtBQVEsRUFBWSxDQUMzQixHQUFlLHFCQUFtQixFQUFJLEVBQVcsRUFBSyxFQUNsRCxTQUNKLEVBQUksR0FBYyxrQkFBZ0IsRUFBSyxFQUFNLEVBQU0sRUFBRyxLQUFLLGFBQWEsRUFBRyxJQUFNLENBQzdFLElBQU0sRUFBUyxFQUFJLFVBQVUsQ0FBRSxVQUFTLFdBQVksQ0FBSyxFQUFHLENBQUssRUFDakUsRUFBSSxvQkFBb0IsRUFBUSxDQUFLLEdBQ3RDLElBQU0sRUFBSSxJQUFJLEVBQU8sRUFBSSxDQUM1QixFQUNBLEVBQUksR0FBRyxDQUFLLEdBR3BCLEdBQVEsbUJBQXFCLEdBQzdCLEdBQVEsUUFBVSwyQkNsRmxCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLE9BQ0EsUUFDQSxHQUFRLENBQ1YsUUFBUyw4QkFDVCxPQUFRLEVBQUcsWUFBYyxBQUFhLHNCQUFxQixFQUFPLGVBQ3RFLEVBQ00sR0FBTSxDQUNSLFFBQVMsZ0JBQ1QsS0FBTSxTQUNOLFdBQVksQ0FBQyxTQUFVLFNBQVMsRUFDaEMsU0FDQSxJQUFJLENBQUMsRUFBSyxDQUNOLElBQVEsTUFBSyxTQUFRLE9BQU0sTUFBTyxFQUNsQyxHQUFlLHFCQUFtQixFQUFJLENBQU0sRUFDeEMsT0FDSixJQUFNLEVBQVEsRUFBSSxLQUFLLE9BQU8sRUFDOUIsRUFBSSxNQUFNLE1BQU8sRUFBTSxDQUFDLElBQVEsQ0FDNUIsRUFBSSxVQUFVLENBQUUsYUFBYyxDQUFJLENBQUMsRUFDbkMsRUFBSSxVQUFVLENBQ1YsUUFBUyxnQkFDVCxLQUFNLEVBQ04sVUFBVyxDQUFDLFFBQVEsRUFDcEIsYUFBYyxFQUNkLGNBQWUsRUFDbkIsRUFBRyxDQUFLLEVBQ1IsRUFBSSxHQUFpQixPQUFLLENBQUssRUFBRyxJQUFNLENBRXBDLEdBREEsRUFBSSxNQUFNLEVBQUksRUFDVixDQUFDLEVBQUcsVUFDSixFQUFJLE1BQU0sRUFDakIsRUFDSixFQUNELEVBQUksR0FBRyxDQUFLLEVBRXBCLEVBQ0EsR0FBUSxRQUFVLDJCQ25DbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sUUFDQSxPQUNBLFFBQ0EsUUFDQSxHQUFRLENBQ1YsUUFBUyxzQ0FDVCxPQUFRLEVBQUcsWUFBYyxBQUFhLDRCQUEyQixFQUFPLHFCQUM1RSxFQUNNLEdBQU0sQ0FDUixRQUFTLHVCQUNULEtBQU0sQ0FBQyxRQUFRLEVBQ2YsV0FBWSxDQUFDLFVBQVcsUUFBUSxFQUNoQyxlQUFnQixHQUNoQixZQUFhLEdBQ2IsU0FDQSxJQUFJLENBQUMsRUFBSyxDQUNOLElBQVEsTUFBSyxTQUFRLGVBQWMsT0FBTSxZQUFXLE1BQU8sRUFFM0QsR0FBSSxDQUFDLEVBQ0QsTUFBVSxNQUFNLDBCQUEwQixFQUM5QyxJQUFRLFlBQVcsUUFBUyxFQUU1QixHQURBLEVBQUcsTUFBUSxHQUNQLEVBQUssbUJBQXFCLE9BQW9CLHFCQUFtQixFQUFJLENBQU0sRUFDM0UsT0FDSixJQUFNLEVBQW1CLHVCQUFxQixFQUFhLFVBQVUsRUFDL0QsRUFBc0IsdUJBQXFCLEVBQWEsaUJBQWlCLEVBQy9FLEVBQTBCLEVBQzFCLEVBQUksR0FBSSxBQUFhLE9BQU0sU0FBaUIsR0FBUSxRQUFRLFFBQVEsRUFDcEUsU0FBUyxDQUF5QixFQUFHLENBQ2pDLEVBQUksTUFBTSxNQUFPLEVBQU0sQ0FBQyxJQUFRLENBQzVCLEdBQUksQ0FBQyxFQUFNLFFBQVUsQ0FBQyxFQUFTLE9BQzNCLEVBQXVCLENBQUcsRUFFMUIsT0FBSSxHQUFHLEVBQWEsQ0FBRyxFQUFHLElBQU0sRUFBdUIsQ0FBRyxDQUFDLEVBQ2xFLEVBRUwsU0FBUyxDQUFZLENBQUMsRUFBSyxDQUN2QixJQUFJLEVBQ0osR0FBSSxFQUFNLE9BQVMsRUFBRyxDQUVsQixJQUFNLEVBQXlCLGtCQUFnQixFQUFJLEVBQWEsV0FBWSxZQUFZLEVBQ3hGLEVBQXlCLGlCQUFlLEVBQUssRUFBYSxDQUFHLEVBRTVELFFBQUksRUFBTSxPQUNYLEVBQTRCLE1BQUksR0FBRyxFQUFNLElBQUksQ0FBQyxJQUFPLEFBQWEsT0FBTSxTQUFXLEdBQUcsQ0FBQyxFQUd2RixPQUF3QixPQUU1QixHQUFJLEVBQVMsT0FDVCxFQUE0QixNQUFJLEVBQWEsR0FBRyxFQUFTLElBQUksQ0FBQyxJQUFPLEFBQWEsT0FBaUIsY0FBWSxFQUFLLENBQUMsVUFBVSxJQUFNLENBQUMsRUFFMUksT0FBcUIsT0FBSyxDQUFXLEVBRXpDLFNBQVMsQ0FBZ0IsQ0FBQyxFQUFLLENBQzNCLEVBQUksS0FBTSxBQUFhLGNBQWEsS0FBUSxJQUFNLEVBRXRELFNBQVMsQ0FBc0IsQ0FBQyxFQUFLLENBQ2pDLEdBQUksRUFBSyxtQkFBcUIsT0FBVSxFQUFLLGtCQUFvQixJQUFXLEdBQVEsQ0FDaEYsRUFBaUIsQ0FBRyxFQUNwQixPQUVKLEdBQUksSUFBVyxHQUFPLENBR2xCLEdBRkEsRUFBSSxVQUFVLENBQUUsbUJBQW9CLENBQUksQ0FBQyxFQUN6QyxFQUFJLE1BQU0sRUFDTixDQUFDLEVBQ0QsRUFBSSxNQUFNLEVBQ2QsT0FFSixHQUFJLE9BQU8sR0FBVSxVQUFZLENBQVkscUJBQW1CLEVBQUksQ0FBTSxFQUFHLENBQ3pFLElBQU0sRUFBUSxFQUFJLEtBQUssT0FBTyxFQUM5QixHQUFJLEVBQUssbUJBQXFCLFVBQzFCLEVBQXNCLEVBQUssRUFBTyxFQUFLLEVBQ3ZDLEVBQUksR0FBaUIsT0FBSyxDQUFLLEVBQUcsSUFBTSxDQUNwQyxFQUFJLE1BQU0sRUFDVixFQUFpQixDQUFHLEVBQ3ZCLEVBSUQsUUFEQSxFQUFzQixFQUFLLENBQUssRUFDNUIsQ0FBQyxFQUNELEVBQUksR0FBaUIsT0FBSyxDQUFLLEVBQUcsSUFBTSxFQUFJLE1BQU0sQ0FBQyxHQUluRSxTQUFTLENBQXFCLENBQUMsRUFBSyxFQUFPLEVBQVEsQ0FDL0MsSUFBTSxFQUFZLENBQ2QsUUFBUyx1QkFDVCxTQUFVLEVBQ1YsYUFBcUIsUUFBSyxHQUM5QixFQUNBLEdBQUksSUFBVyxHQUNYLE9BQU8sT0FBTyxFQUFXLENBQ3JCLGNBQWUsR0FDZixhQUFjLEdBQ2QsVUFBVyxFQUNmLENBQUMsRUFFTCxFQUFJLFVBQVUsRUFBVyxDQUFLLEdBRzFDLEVBQ0EsR0FBUSxRQUFVLDJCQ3ZHbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sUUFDQSxRQUNBLFFBQ0EsUUFDQSxHQUFNLENBQ1IsUUFBUyxhQUNULEtBQU0sU0FDTixXQUFZLFNBQ1osSUFBSSxDQUFDLEVBQUssQ0FDTixJQUFRLE1BQUssU0FBUSxlQUFjLE9BQU0sTUFBTyxFQUNoRCxHQUFJLEVBQUcsS0FBSyxtQkFBcUIsT0FBUyxFQUFhLHVCQUF5QixPQUM1RSxHQUF1QixRQUFRLEtBQUssSUFBZSxjQUFXLEVBQUksR0FBdUIsUUFBUyxzQkFBc0IsQ0FBQyxFQUU3SCxJQUFNLEVBQXNCLHVCQUFxQixDQUFNLEVBQ3ZELFFBQVcsS0FBUSxFQUNmLEVBQUcsa0JBQWtCLElBQUksQ0FBSSxFQUVqQyxHQUFJLEVBQUcsS0FBSyxhQUFlLEVBQVMsUUFBVSxFQUFHLFFBQVUsR0FDdkQsRUFBRyxNQUFlLGtCQUFlLE1BQU0sRUFBZ0IsVUFBUSxDQUFRLEVBQUcsRUFBRyxLQUFLLEVBRXRGLElBQU0sRUFBYSxFQUFTLE9BQU8sQ0FBQyxJQUFNLENBQVkscUJBQW1CLEVBQUksRUFBTyxFQUFFLENBQUMsRUFDdkYsR0FBSSxFQUFXLFNBQVcsRUFDdEIsT0FDSixJQUFNLEVBQVEsRUFBSSxLQUFLLE9BQU8sRUFDOUIsUUFBVyxLQUFRLEVBQVksQ0FDM0IsR0FBSSxFQUFXLENBQUksRUFDZixFQUFvQixDQUFJLEVBRXZCLEtBR0QsR0FGQSxFQUFJLEdBQWMsa0JBQWdCLEVBQUssRUFBTSxFQUFNLEVBQUcsS0FBSyxhQUFhLENBQUMsRUFDekUsRUFBb0IsQ0FBSSxFQUNwQixDQUFDLEVBQUcsVUFDSixFQUFJLEtBQUssRUFBRSxJQUFJLEVBQU8sRUFBSSxFQUM5QixFQUFJLE1BQU0sRUFFZCxFQUFJLEdBQUcsa0JBQWtCLElBQUksQ0FBSSxFQUNqQyxFQUFJLEdBQUcsQ0FBSyxFQUVoQixTQUFTLENBQVUsQ0FBQyxFQUFNLENBQ3RCLE9BQU8sRUFBRyxLQUFLLGFBQWUsQ0FBQyxFQUFHLGVBQWlCLEVBQU8sR0FBTSxVQUFZLE9BRWhGLFNBQVMsQ0FBbUIsQ0FBQyxFQUFNLENBQy9CLEVBQUksVUFBVSxDQUNWLFFBQVMsYUFDVCxXQUFZLEVBQ1osU0FBVSxDQUNkLEVBQUcsQ0FBSyxHQUdwQixFQUNBLEdBQVEsUUFBVSwyQkNuRGxCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLFFBQ0EsT0FDQSxRQUNBLFFBQ0EsR0FBTSxDQUNSLFFBQVMsb0JBQ1QsS0FBTSxTQUNOLFdBQVksU0FDWixJQUFJLENBQUMsRUFBSyxDQUNOLElBQVEsTUFBSyxTQUFRLE9BQU0sZUFBYyxNQUFPLEdBQ3hDLFFBQVMsRUFDWCxFQUFzQix1QkFBcUIsQ0FBTSxFQUNqRCxFQUFzQixFQUFTLE9BQU8sQ0FBQyxJQUFpQixxQkFBbUIsRUFBSSxFQUFPLEVBQUUsQ0FBQyxFQUMvRixHQUFJLEVBQVMsU0FBVyxHQUNuQixFQUFvQixTQUFXLEVBQVMsU0FDcEMsQ0FBQyxFQUFHLEtBQUssYUFBZSxFQUFHLFFBQVUsSUFDMUMsT0FFSixJQUFNLEVBQWtCLEVBQUssY0FBZ0IsQ0FBQyxFQUFLLHlCQUEyQixFQUFhLFdBQ3JGLEVBQVEsRUFBSSxLQUFLLE9BQU8sRUFDOUIsR0FBSSxFQUFHLFFBQVUsSUFBUSxFQUFFLEVBQUcsaUJBQTJCLFNBQ3JELEVBQUcsTUFBbUIsd0JBQXNCLEVBQUssRUFBRyxLQUFLLEVBRTdELElBQVEsU0FBVSxFQUNsQixFQUEwQixFQUMxQixTQUFTLENBQXlCLEVBQUcsQ0FDakMsUUFBVyxLQUFPLEVBQVUsQ0FDeEIsR0FBSSxFQUNBLEVBQXdCLENBQUcsRUFDL0IsR0FBSSxFQUFHLFVBQ0gsRUFBbUIsQ0FBRyxFQUd0QixPQUFJLElBQUksRUFBTyxFQUFJLEVBQ25CLEVBQW1CLENBQUcsRUFDdEIsRUFBSSxHQUFHLENBQUssR0FJeEIsU0FBUyxDQUF1QixDQUFDLEVBQUssQ0FDbEMsUUFBVyxLQUFRLEVBQ2YsR0FBSSxJQUFJLE9BQU8sQ0FBRyxFQUFFLEtBQUssQ0FBSSxFQUNkLG1CQUFpQixFQUFJLFlBQVkscUJBQXdCLGlDQUFtQyxFQUluSCxTQUFTLENBQWtCLENBQUMsRUFBSyxDQUM3QixFQUFJLE1BQU0sTUFBTyxFQUFNLENBQUMsSUFBUSxDQUM1QixFQUFJLEdBQUksQUFBYSxPQUFpQixjQUFZLEVBQUssQ0FBRyxVQUFVLEtBQVEsSUFBTSxDQUM5RSxJQUFNLEVBQWMsRUFBb0IsU0FBUyxDQUFHLEVBQ3BELEdBQUksQ0FBQyxFQUNELEVBQUksVUFBVSxDQUNWLFFBQVMsb0JBQ1QsV0FBWSxFQUNaLFNBQVUsRUFDVixhQUFxQixRQUFLLEdBQzlCLEVBQUcsQ0FBSyxFQUVaLEdBQUksRUFBRyxLQUFLLGFBQWUsSUFBVSxHQUNqQyxFQUFJLE9BQVEsQUFBYSxPQUFNLEtBQVMsS0FBUSxFQUFJLEVBRW5ELFFBQUksQ0FBQyxHQUFlLENBQUMsRUFBRyxVQUd6QixFQUFJLEdBQWlCLE9BQUssQ0FBSyxFQUFHLElBQU0sRUFBSSxNQUFNLENBQUMsRUFFMUQsRUFDSixHQUdiLEVBQ0EsR0FBUSxRQUFVLDJCQ3hFbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sUUFDQSxHQUFNLENBQ1IsUUFBUyxNQUNULFdBQVksQ0FBQyxTQUFVLFNBQVMsRUFDaEMsWUFBYSxHQUNiLElBQUksQ0FBQyxFQUFLLENBQ04sSUFBUSxNQUFLLFNBQVEsTUFBTyxFQUM1QixHQUFlLHFCQUFtQixFQUFJLENBQU0sRUFBRyxDQUMzQyxFQUFJLEtBQUssRUFDVCxPQUVKLElBQU0sRUFBUSxFQUFJLEtBQUssT0FBTyxFQUM5QixFQUFJLFVBQVUsQ0FDVixRQUFTLE1BQ1QsY0FBZSxHQUNmLGFBQWMsR0FDZCxVQUFXLEVBQ2YsRUFBRyxDQUFLLEVBQ1IsRUFBSSxXQUFXLEVBQU8sSUFBTSxFQUFJLE1BQU0sRUFBRyxJQUFNLEVBQUksTUFBTSxDQUFDLEdBRTlELE1BQU8sQ0FBRSxRQUFTLG1CQUFvQixDQUMxQyxFQUNBLEdBQVEsUUFBVSwyQkN2QmxCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLFFBQ0EsR0FBTSxDQUNSLFFBQVMsUUFDVCxXQUFZLFFBQ1osWUFBYSxHQUNiLEtBQWEsaUJBQ2IsTUFBTyxDQUFFLFFBQVMsOEJBQStCLENBQ3JELEVBQ0EsR0FBUSxRQUFVLDJCQ1RsQixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsSUFBTSxPQUNBLFFBQ0EsR0FBUSxDQUNWLFFBQVMseUNBQ1QsT0FBUSxFQUFHLFlBQWMsQUFBYSx3QkFBdUIsRUFBTyxVQUN4RSxFQUNNLEdBQU0sQ0FDUixRQUFTLFFBQ1QsV0FBWSxRQUNaLFlBQWEsR0FDYixTQUNBLElBQUksQ0FBQyxFQUFLLENBQ04sSUFBUSxNQUFLLFNBQVEsZUFBYyxNQUFPLEVBRTFDLEdBQUksQ0FBQyxNQUFNLFFBQVEsQ0FBTSxFQUNyQixNQUFVLE1BQU0sMEJBQTBCLEVBQzlDLEdBQUksRUFBRyxLQUFLLGVBQWlCLEVBQWEsY0FDdEMsT0FDSixJQUFNLEVBQVMsRUFDVCxFQUFRLEVBQUksSUFBSSxRQUFTLEVBQUssRUFDOUIsRUFBVSxFQUFJLElBQUksVUFBVyxJQUFJLEVBQ2pDLEVBQVcsRUFBSSxLQUFLLFFBQVEsRUFDbEMsRUFBSSxVQUFVLENBQUUsU0FBUSxDQUFDLEVBRXpCLEVBQUksTUFBTSxDQUFhLEVBQ3ZCLEVBQUksT0FBTyxFQUFPLElBQU0sRUFBSSxNQUFNLEVBQUcsSUFBTSxFQUFJLE1BQU0sRUFBSSxDQUFDLEVBQzFELFNBQVMsQ0FBYSxFQUFHLENBQ3JCLEVBQU8sUUFBUSxDQUFDLEVBQUssSUFBTSxDQUN2QixJQUFJLEVBQ0osR0FBZSxxQkFBbUIsRUFBSSxDQUFHLEVBQ3JDLEVBQUksSUFBSSxFQUFVLEVBQUksRUFHdEIsT0FBUyxFQUFJLFVBQVUsQ0FDbkIsUUFBUyxRQUNULFdBQVksRUFDWixjQUFlLEVBQ25CLEVBQUcsQ0FBUSxFQUVmLEdBQUksRUFBSSxFQUNKLEVBQ0ssR0FBSSxBQUFhLE9BQU0sUUFBZSxHQUFPLEVBQzdDLE9BQU8sRUFBTyxFQUFLLEVBQ25CLE9BQU8sRUFBVSxBQUFhLFFBQU8sTUFBWSxJQUFJLEVBQ3JELEtBQUssRUFFZCxFQUFJLEdBQUcsRUFBVSxJQUFNLENBR25CLEdBRkEsRUFBSSxPQUFPLEVBQU8sRUFBSSxFQUN0QixFQUFJLE9BQU8sRUFBUyxDQUFDLEVBQ2pCLEVBQ0EsRUFBSSxlQUFlLEVBQWtCLE9BQUksRUFDaEQsRUFDSixHQUdiLEVBQ0EsR0FBUSxRQUFVLDJCQ3pEbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sUUFDQSxHQUFNLENBQ1IsUUFBUyxRQUNULFdBQVksUUFDWixJQUFJLENBQUMsRUFBSyxDQUNOLElBQVEsTUFBSyxTQUFRLE1BQU8sRUFFNUIsR0FBSSxDQUFDLE1BQU0sUUFBUSxDQUFNLEVBQ3JCLE1BQVUsTUFBTSwwQkFBMEIsRUFDOUMsSUFBTSxFQUFRLEVBQUksS0FBSyxPQUFPLEVBQzlCLEVBQU8sUUFBUSxDQUFDLEVBQUssSUFBTSxDQUN2QixHQUFlLHFCQUFtQixFQUFJLENBQUcsRUFDckMsT0FDSixJQUFNLEVBQVMsRUFBSSxVQUFVLENBQUUsUUFBUyxRQUFTLFdBQVksQ0FBRSxFQUFHLENBQUssRUFDdkUsRUFBSSxHQUFHLENBQUssRUFDWixFQUFJLGVBQWUsQ0FBTSxFQUM1QixFQUVULEVBQ0EsR0FBUSxRQUFVLDJCQ3BCbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sT0FDQSxRQUNBLEdBQVEsQ0FDVixRQUFTLEVBQUcsWUFBYyxBQUFhLHFCQUFvQixFQUFPLG1CQUNsRSxPQUFRLEVBQUcsWUFBYyxBQUFhLHdCQUF1QixFQUFPLFdBQ3hFLEVBQ00sR0FBTSxDQUNSLFFBQVMsS0FDVCxXQUFZLENBQUMsU0FBVSxTQUFTLEVBQ2hDLFlBQWEsR0FDYixTQUNBLElBQUksQ0FBQyxFQUFLLENBQ04sSUFBUSxNQUFLLGVBQWMsTUFBTyxFQUNsQyxHQUFJLEVBQWEsT0FBUyxRQUFhLEVBQWEsT0FBUyxPQUM5QyxtQkFBaUIsRUFBSSwyQ0FBMkMsRUFFL0UsSUFBTSxFQUFVLEdBQVUsRUFBSSxNQUFNLEVBQzlCLEVBQVUsR0FBVSxFQUFJLE1BQU0sRUFDcEMsR0FBSSxDQUFDLEdBQVcsQ0FBQyxFQUNiLE9BQ0osSUFBTSxFQUFRLEVBQUksSUFBSSxRQUFTLEVBQUksRUFDN0IsRUFBVyxFQUFJLEtBQUssUUFBUSxFQUdsQyxHQUZBLEVBQVcsRUFDWCxFQUFJLE1BQU0sRUFDTixHQUFXLEVBQVMsQ0FDcEIsSUFBTSxFQUFXLEVBQUksSUFBSSxVQUFVLEVBQ25DLEVBQUksVUFBVSxDQUFFLFVBQVMsQ0FBQyxFQUMxQixFQUFJLEdBQUcsRUFBVSxFQUFlLE9BQVEsQ0FBUSxFQUFHLEVBQWUsT0FBUSxDQUFRLENBQUMsRUFFbEYsUUFBSSxFQUNMLEVBQUksR0FBRyxFQUFVLEVBQWUsTUFBTSxDQUFDLEVBR3ZDLE9BQUksR0FBaUIsT0FBSyxDQUFRLEVBQUcsRUFBZSxNQUFNLENBQUMsRUFFL0QsRUFBSSxLQUFLLEVBQU8sSUFBTSxFQUFJLE1BQU0sRUFBSSxDQUFDLEVBQ3JDLFNBQVMsQ0FBVSxFQUFHLENBQ2xCLElBQU0sRUFBUyxFQUFJLFVBQVUsQ0FDekIsUUFBUyxLQUNULGNBQWUsR0FDZixhQUFjLEdBQ2QsVUFBVyxFQUNmLEVBQUcsQ0FBUSxFQUNYLEVBQUksZUFBZSxDQUFNLEVBRTdCLFNBQVMsQ0FBYyxDQUFDLEVBQVMsRUFBVSxDQUN2QyxNQUFPLElBQU0sQ0FDVCxJQUFNLEVBQVMsRUFBSSxVQUFVLENBQUUsU0FBUSxFQUFHLENBQVEsRUFHbEQsR0FGQSxFQUFJLE9BQU8sRUFBTyxDQUFRLEVBQzFCLEVBQUksb0JBQW9CLEVBQVEsQ0FBSyxFQUNqQyxFQUNBLEVBQUksT0FBTyxFQUFXLEFBQWEsT0FBTSxHQUFTLEVBRWxELE9BQUksVUFBVSxDQUFFLFNBQVUsQ0FBUSxDQUFDLElBSXZELEVBQ0EsU0FBUyxFQUFTLENBQUMsRUFBSSxFQUFTLENBQzVCLElBQU0sRUFBUyxFQUFHLE9BQU8sR0FDekIsT0FBTyxJQUFXLFFBQWEsQ0FBWSxxQkFBbUIsRUFBSSxDQUFNLEVBRTVFLEdBQVEsUUFBVSwyQkMvRGxCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLFFBQ0EsR0FBTSxDQUNSLFFBQVMsQ0FBQyxPQUFRLE1BQU0sRUFDeEIsV0FBWSxDQUFDLFNBQVUsU0FBUyxFQUNoQyxJQUFJLEVBQUcsVUFBUyxlQUFjLE1BQU0sQ0FDaEMsR0FBSSxFQUFhLEtBQU8sT0FDVCxtQkFBaUIsRUFBSSxJQUFJLDRCQUFrQyxFQUVsRixFQUNBLEdBQVEsUUFBVSwyQkNWbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDTixTQUFTLEVBQWEsQ0FBQyxFQUFZLEdBQU8sQ0FDdEMsSUFBTSxFQUFhLENBRWYsR0FBTSxRQUNOLEdBQVEsUUFDUixHQUFRLFFBQ1IsR0FBUSxRQUNSLEdBQUssUUFDTCxHQUFXLFFBRVgsR0FBZ0IsUUFDaEIsR0FBdUIsUUFDdkIsR0FBZSxRQUNmLEdBQWEsUUFDYixHQUFvQixPQUN4QixFQUVBLEdBQUksRUFDQSxFQUFXLEtBQUssR0FBYyxRQUFTLEdBQVksT0FBTyxFQUUxRCxPQUFXLEtBQUssR0FBa0IsUUFBUyxHQUFRLE9BQU8sRUFFOUQsT0FEQSxFQUFXLEtBQUssR0FBVyxPQUFPLEVBQzNCLEVBRVgsR0FBUSxRQUFVLDJCQ3pDbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sTUFDQSxHQUFRLENBQ1YsUUFBUyxFQUFHLGdCQUFrQixBQUFhLDJCQUEyQixLQUN0RSxPQUFRLEVBQUcsZ0JBQWtCLEFBQWEsZUFBZSxJQUM3RCxFQUNNLEdBQU0sQ0FDUixRQUFTLFNBQ1QsS0FBTSxDQUFDLFNBQVUsUUFBUSxFQUN6QixXQUFZLFNBQ1osTUFBTyxHQUNQLFNBQ0EsSUFBSSxDQUFDLEVBQUssRUFBVSxDQUNoQixJQUFRLE1BQUssT0FBTSxRQUFPLFNBQVEsYUFBWSxNQUFPLEdBQzdDLE9BQU0sZ0JBQWUsWUFBVyxRQUFTLEVBQ2pELEdBQUksQ0FBQyxFQUFLLGdCQUNOLE9BQ0osR0FBSSxFQUNBLEVBQW9CLEVBRXBCLE9BQWUsRUFDbkIsU0FBUyxDQUFtQixFQUFHLENBQzNCLElBQU0sRUFBTyxFQUFJLFdBQVcsVUFBVyxDQUNuQyxJQUFLLEVBQUssUUFDVixLQUFNLEVBQUssS0FBSyxPQUNwQixDQUFDLEVBQ0ssRUFBTyxFQUFJLE1BQU0sT0FBUyxBQUFhLE1BQU0sS0FBUSxJQUFhLEVBQ2xFLEVBQVEsRUFBSSxJQUFJLE9BQU8sRUFDdkIsRUFBUyxFQUFJLElBQUksUUFBUSxFQUUvQixFQUFJLEdBQUksQUFBYSxhQUFhLHNCQUF5Qix1QkFBMkIsSUFBTSxFQUFJLE9BQU8sRUFBUSxBQUFhLE1BQU0sb0JBQXVCLEVBQUUsT0FBTyxFQUFTLEFBQWEsTUFBTSxZQUFlLEVBQUcsSUFBTSxFQUFJLE9BQU8sRUFBUSxBQUFhLGFBQWEsRUFBRSxPQUFPLEVBQVEsQ0FBSSxDQUFDLEVBQ3pSLEVBQUksVUFBd0IsS0FBSSxFQUFXLEVBQUcsRUFBVyxDQUFDLENBQUMsRUFDM0QsU0FBUyxDQUFVLEVBQUcsQ0FDbEIsR0FBSSxFQUFLLGVBQWlCLEdBQ3RCLE9BQWlCLE1BQ3JCLE1BQVEsQ0FBYSxNQUFNLFNBQWtCLElBRWpELFNBQVMsQ0FBVSxFQUFHLENBQ2xCLElBQU0sRUFBYSxFQUFVLE9BQ3RCLEFBQWEsT0FBTyxtQkFBc0IsS0FBVSxRQUFXLEtBQVUsTUFDekUsQUFBYSxNQUFNLEtBQVUsS0FDOUIsRUFBYSxBQUFhLGNBQWMscUJBQTBCLE9BQWdCLFVBQWUsTUFDdkcsTUFBUSxDQUFhLE1BQU0sUUFBYSxpQkFBc0IsU0FBYSxTQUFnQixLQUduRyxTQUFTLENBQWMsRUFBRyxDQUN0QixJQUFNLEVBQVksRUFBSyxRQUFRLEdBQy9CLEdBQUksQ0FBQyxFQUFXLENBQ1osRUFBYyxFQUNkLE9BRUosR0FBSSxJQUFjLEdBQ2QsT0FDSixJQUFPLEVBQVMsRUFBUSxHQUFVLEVBQVUsQ0FBUyxFQUNyRCxHQUFJLElBQVksRUFDWixFQUFJLEtBQUssRUFBZSxDQUFDLEVBQzdCLFNBQVMsQ0FBYSxFQUFHLENBQ3JCLEdBQUksRUFBSyxlQUFpQixHQUFPLENBQzdCLEVBQUssT0FBTyxLQUFLLEVBQVcsQ0FBQyxFQUM3QixPQUVKLE1BQVUsTUFBTSxFQUFXLENBQUMsRUFDNUIsU0FBUyxDQUFVLEVBQUcsQ0FDbEIsTUFBTyxtQkFBbUIsaUNBQXNDLE1BR3hFLFNBQVMsQ0FBUyxDQUFDLEVBQVEsQ0FDdkIsSUFBTSxFQUFPLGFBQWtCLE9BQ1gsYUFBWSxDQUFNLEVBQ2hDLEVBQUssS0FBSyxRQUNMLEFBQWEsTUFBTSxFQUFLLEtBQUssVUFBd0IsY0FBYSxDQUFNLElBQ3pFLE9BQ0osRUFBTSxFQUFJLFdBQVcsVUFBVyxDQUFFLElBQUssRUFBUSxJQUFLLEVBQVEsTUFBSyxDQUFDLEVBQ3hFLEdBQUksT0FBTyxHQUFVLFVBQVksRUFBRSxhQUFrQixRQUNqRCxNQUFPLENBQUMsRUFBTyxNQUFRLFNBQVUsRUFBTyxTQUFXLEFBQWEsTUFBTSxZQUFjLEVBRXhGLE1BQU8sQ0FBQyxTQUFVLEVBQVEsQ0FBRyxFQUVqQyxTQUFTLENBQWMsRUFBRyxDQUN0QixHQUFJLE9BQU8sR0FBYSxVQUFZLEVBQUUsYUFBcUIsU0FBVyxFQUFVLE1BQU8sQ0FDbkYsR0FBSSxDQUFDLEVBQVUsT0FDWCxNQUFVLE1BQU0sNkJBQTZCLEVBQ2pELE1BQVEsQ0FBYSxZQUFZLEtBQVUsS0FFL0MsT0FBTyxPQUFPLEdBQVUsV0FBYyxBQUFhLE1BQU0sS0FBVSxLQUFXLEFBQWEsTUFBTSxVQUFlLE9BSWhJLEVBQ0EsR0FBUSxRQUFVLDJCQ3pGbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sUUFDQSxHQUFTLENBQUMsR0FBUyxPQUFPLEVBQ2hDLEdBQVEsUUFBVSwyQkNIbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsa0JBQW9CLEdBQVEsbUJBQTBCLE9BQzlELEdBQVEsbUJBQXFCLENBQ3pCLFFBQ0EsY0FDQSxVQUNBLGFBQ0EsV0FDQSxZQUNBLFVBQ0osRUFDQSxHQUFRLGtCQUFvQixDQUN4QixtQkFDQSxrQkFDQSxlQUNKLDBCQ2ZBLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxHQUFxQixDQUN2QixHQUFPLFFBQ1AsR0FBYSxTQUNaLEVBQUcsR0FBYSxTQUFTLEVBQzFCLEdBQVMsUUFDRSxzQkFDQSxvQkFDZixFQUNBLEdBQVEsUUFBVSwyQkNkbEIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsV0FBa0IsT0FDMUIsSUFBSSxJQUNILFFBQVMsQ0FBQyxFQUFZLENBQ25CLEVBQVcsSUFBUyxNQUNwQixFQUFXLFFBQWEsWUFDekIsR0FBYSxHQUFRLGFBQWUsR0FBUSxXQUFhLENBQUMsRUFBRSwwQkNOL0QsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELElBQU0sT0FDQSxRQUNBLFFBQ0EsUUFDQSxHQUFRLENBQ1YsUUFBUyxFQUFHLFFBQVUsYUFBWSxjQUFnQixJQUF1QixjQUFXLElBQzlFLFFBQVEsb0JBQ1IsaUJBQWlCLHNCQUN2QixPQUFRLEVBQUcsUUFBVSxhQUFZLE1BQUssY0FBaUIsQUFBYSxlQUFjLFdBQW9CLGdCQUFzQixJQUNoSSxFQUNNLEdBQU0sQ0FDUixRQUFTLGdCQUNULEtBQU0sU0FDTixXQUFZLFNBQ1osU0FDQSxJQUFJLENBQUMsRUFBSyxDQUNOLElBQVEsTUFBSyxPQUFNLFNBQVEsZUFBYyxNQUFPLEdBQ3hDLFNBQVUsRUFDbEIsR0FBSSxDQUFDLEVBQUcsS0FBSyxjQUNULE1BQVUsTUFBTSw4Q0FBOEMsRUFFbEUsSUFBTSxFQUFVLEVBQU8sYUFDdkIsR0FBSSxPQUFPLEdBQVcsU0FDbEIsTUFBVSxNQUFNLHNDQUFzQyxFQUMxRCxHQUFJLEVBQU8sUUFDUCxNQUFVLE1BQU0seUNBQXlDLEVBQzdELEdBQUksQ0FBQyxFQUNELE1BQVUsTUFBTSx1Q0FBdUMsRUFDM0QsSUFBTSxFQUFRLEVBQUksSUFBSSxRQUFTLEVBQUssRUFDOUIsRUFBTSxFQUFJLE1BQU0sTUFBUSxBQUFhLE9BQU0sSUFBcUIsZUFBYSxDQUFPLEdBQUcsRUFDN0YsRUFBSSxHQUFJLEFBQWEsY0FBYSxnQkFBbUIsSUFBTSxFQUFnQixFQUFHLElBQU0sRUFBSSxNQUFNLEdBQU8sQ0FBRSxXQUFvQixjQUFXLElBQUssTUFBSyxTQUFRLENBQUMsQ0FBQyxFQUMxSixFQUFJLEdBQUcsQ0FBSyxFQUNaLFNBQVMsQ0FBZSxFQUFHLENBQ3ZCLElBQU0sRUFBVSxFQUFXLEVBQzNCLEVBQUksR0FBRyxFQUFLLEVBQ1osUUFBVyxLQUFZLEVBQ25CLEVBQUksT0FBUSxBQUFhLE9BQU0sU0FBVyxHQUFVLEVBQ3BELEVBQUksT0FBTyxFQUFPLEVBQWUsRUFBUSxFQUFTLENBQUMsRUFFdkQsRUFBSSxLQUFLLEVBQ1QsRUFBSSxNQUFNLEdBQU8sQ0FBRSxXQUFvQixjQUFXLFFBQVMsTUFBSyxTQUFRLENBQUMsRUFDekUsRUFBSSxNQUFNLEVBRWQsU0FBUyxDQUFjLENBQUMsRUFBWSxDQUNoQyxJQUFNLEVBQVMsRUFBSSxLQUFLLE9BQU8sRUFDekIsRUFBUyxFQUFJLFVBQVUsQ0FBRSxRQUFTLFFBQVMsWUFBVyxFQUFHLENBQU0sRUFFckUsT0FEQSxFQUFJLGVBQWUsRUFBa0IsT0FBSSxFQUNsQyxFQUVYLFNBQVMsQ0FBVSxFQUFHLENBQ2xCLElBQUksRUFDSixJQUFNLEVBQWUsQ0FBQyxFQUNoQixFQUFjLEVBQVksQ0FBWSxFQUN4QyxFQUFjLEdBQ2xCLFFBQVMsRUFBSSxFQUFHLEVBQUksRUFBTSxPQUFRLElBQUssQ0FDbkMsSUFBSSxFQUFNLEVBQU0sR0FDaEIsSUFBSyxJQUFRLE1BQVEsSUFBYSxPQUFTLE9BQUksRUFBSSxPQUFTLENBQVksd0JBQXNCLEVBQUssRUFBRyxLQUFLLEtBQUssR0FFNUcsR0FEQSxFQUFnQixjQUFXLEtBQUssRUFBRyxLQUFNLEVBQUcsVUFBVSxLQUFNLEVBQUcsT0FBUSxJQUFRLE1BQVEsSUFBYSxPQUFTLE9BQUksRUFBSSxJQUFJLEVBQ3JILGFBQXlCLGFBQ3pCLEVBQU0sRUFBSSxPQUVsQixJQUFNLEdBQVcsRUFBSyxJQUFRLE1BQVEsSUFBYSxPQUFTLE9BQUksRUFBSSxjQUFnQixNQUFRLElBQVksT0FBUyxPQUFJLEVBQUcsR0FDeEgsR0FBSSxPQUFPLEdBQVcsU0FDbEIsTUFBVSxNQUFNLGlGQUFpRixJQUFVLEVBRS9HLEVBQWMsSUFBZ0IsR0FBZSxFQUFZLENBQUcsR0FDNUQsRUFBWSxFQUFTLENBQUMsRUFFMUIsR0FBSSxDQUFDLEVBQ0QsTUFBVSxNQUFNLG1CQUFtQixxQkFBMkIsRUFDbEUsT0FBTyxFQUNQLFNBQVMsQ0FBVyxFQUFHLFlBQVksQ0FDL0IsT0FBTyxNQUFNLFFBQVEsQ0FBUSxHQUFLLEVBQVMsU0FBUyxDQUFPLEVBRS9ELFNBQVMsQ0FBVyxDQUFDLEVBQUssRUFBRyxDQUN6QixHQUFJLEVBQUksTUFDSixFQUFXLEVBQUksTUFBTyxDQUFDLEVBRXRCLFFBQUksRUFBSSxLQUNULFFBQVcsS0FBWSxFQUFJLEtBQ3ZCLEVBQVcsRUFBVSxDQUFDLEVBSTFCLFdBQVUsTUFBTSw4QkFBOEIsZ0NBQXNDLEVBRzVGLFNBQVMsQ0FBVSxDQUFDLEVBQVUsRUFBRyxDQUM3QixHQUFJLE9BQU8sR0FBWSxVQUFZLEtBQVksRUFDM0MsTUFBVSxNQUFNLG1CQUFtQixrQ0FBd0MsRUFFL0UsRUFBYSxHQUFZLElBSXpDLEVBQ0EsR0FBUSxRQUFVLHE5RUNqR2xCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxHQUFRLGdCQUFrQixHQUFRLGdCQUFrQixHQUFRLFFBQVUsR0FBUSxLQUFPLEdBQVEsSUFBTSxHQUFRLFVBQVksR0FBUSxJQUFNLEdBQVEsRUFBSSxHQUFRLFdBQWtCLE9BQzNLLElBQU0sUUFDQSxRQUNBLFFBQ0EsUUFDQSxHQUFvQixDQUFDLGFBQWEsRUFDbEMsR0FBaUIseUNBQ3ZCLE1BQU0sV0FBWSxHQUFPLE9BQVEsQ0FDN0IsZ0JBQWdCLEVBQUcsQ0FHZixHQUZBLE1BQU0saUJBQWlCLEVBQ3ZCLEdBQVMsUUFBUSxRQUFRLENBQUMsSUFBTSxLQUFLLGNBQWMsQ0FBQyxDQUFDLEVBQ2pELEtBQUssS0FBSyxjQUNWLEtBQUssV0FBVyxHQUFnQixPQUFPLEVBRS9DLHFCQUFxQixFQUFHLENBRXBCLEdBREEsTUFBTSxzQkFBc0IsRUFDeEIsQ0FBQyxLQUFLLEtBQUssS0FDWCxPQUNKLElBQU0sRUFBYSxLQUFLLEtBQUssTUFDdkIsS0FBSyxnQkFBZ0IsR0FBa0IsRUFBaUIsRUFDeEQsR0FDTixLQUFLLGNBQWMsRUFBWSxHQUFnQixFQUFLLEVBQ3BELEtBQUssS0FBSyxpQ0FBbUMsR0FFakQsV0FBVyxFQUFHLENBQ1YsT0FBUSxLQUFLLEtBQUssWUFDZCxNQUFNLFlBQVksSUFBTSxLQUFLLFVBQVUsRUFBYyxFQUFJLEdBQWlCLFFBRXRGLENBQ0EsR0FBTyxRQUFVLEdBQVUsR0FDM0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsUUFBVSxHQUNsQixJQUFJLFFBQ0osT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBVyxXQUFjLENBQUMsRUFDckgsSUFBSSxPQUNKLE9BQU8sZUFBZSxHQUFTLElBQUssQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVUsRUFBSyxDQUFDLEVBQ2xHLE9BQU8sZUFBZSxHQUFTLE1BQU8sQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVUsSUFBTyxDQUFDLEVBQ3RHLE9BQU8sZUFBZSxHQUFTLFlBQWEsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVUsVUFBYSxDQUFDLEVBQ2xILE9BQU8sZUFBZSxHQUFTLE1BQU8sQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVUsSUFBTyxDQUFDLEVBQ3RHLE9BQU8sZUFBZSxHQUFTLE9BQVEsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVUsS0FBUSxDQUFDLEVBQ3hHLE9BQU8sZUFBZSxHQUFTLFVBQVcsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVUsUUFBVyxDQUFDLEVBQzlHLElBQUksUUFDSixPQUFPLGVBQWUsR0FBUyxrQkFBbUIsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQW1CLFFBQVcsQ0FBQyxFQUMvSCxJQUFJLFFBQ0osT0FBTyxlQUFlLEdBQVMsa0JBQW1CLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFZLFFBQVcsQ0FBQywwQkM3Q3hILE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxHQUFRLHNCQUE2QixPQUNyQyxJQUFNLFFBQ0EsT0FDQSxHQUFnQixhQUNoQixHQUFPLENBQ1QsY0FBZSxDQUFFLE1BQU8sS0FBTSxHQUFJLEdBQUksSUFBSyxLQUFNLEdBQUksRUFBRyxFQUN4RCxjQUFlLENBQUUsTUFBTyxLQUFNLEdBQUksR0FBSSxJQUFLLEtBQU0sR0FBSSxFQUFHLEVBQ3hELHVCQUF3QixDQUFFLE1BQU8sSUFBSyxHQUFJLEdBQUksR0FBSSxLQUFNLEdBQUksR0FBSSxFQUNoRSx1QkFBd0IsQ0FBRSxNQUFPLElBQUssR0FBSSxHQUFJLEdBQUksS0FBTSxHQUFJLEdBQUksQ0FDcEUsRUFDTSxHQUFRLENBQ1YsUUFBUyxFQUFHLFVBQVMsZ0JBQWlCLEFBQVUsbUJBQWlCLEdBQUssR0FBUyxTQUFTLElBQ3hGLE9BQVEsRUFBRyxVQUFTLGdCQUFpQixBQUFVLG9CQUFrQixHQUFLLEdBQVMsaUJBQWlCLElBQ3BHLEVBQ0EsR0FBUSxzQkFBd0IsQ0FDNUIsUUFBUyxPQUFPLEtBQUssRUFBSSxFQUN6QixLQUFNLFNBQ04sV0FBWSxTQUNaLE1BQU8sR0FDUCxTQUNBLElBQUksQ0FBQyxFQUFLLENBQ04sSUFBUSxNQUFLLE9BQU0sYUFBWSxVQUFTLE1BQU8sR0FDdkMsT0FBTSxRQUFTLEVBQ3ZCLEdBQUksQ0FBQyxFQUFLLGdCQUNOLE9BQ0osSUFBTSxFQUFPLElBQVUsY0FBVyxFQUFJLEVBQUssTUFBTSxJQUFJLE9BQU8sV0FBWSxRQUFRLEVBQ2hGLEdBQUksRUFBSyxNQUNMLEVBQW9CLEVBRXBCLE9BQWUsRUFDbkIsU0FBUyxDQUFtQixFQUFHLENBQzNCLElBQU0sRUFBTyxFQUFJLFdBQVcsVUFBVyxDQUNuQyxJQUFLLEVBQUssUUFDVixLQUFNLEVBQUssS0FBSyxPQUNwQixDQUFDLEVBQ0ssRUFBTSxFQUFJLE1BQU0sTUFBTyxBQUFVLE9BQUssS0FBUSxFQUFLLGFBQWEsRUFDdEUsRUFBSSxVQUFvQixNQUFHLEFBQVUsY0FBWSxnQkFBbUIsQUFBVSxPQUFLLHNCQUF5QixBQUFVLGNBQVksMEJBQTZCLEVBQVksQ0FBRyxDQUFDLENBQUMsRUFFcEwsU0FBUyxDQUFjLEVBQUcsQ0FDdEIsSUFBTSxFQUFTLEVBQUssT0FDZCxFQUFTLEVBQUssUUFBUSxHQUM1QixHQUFJLENBQUMsR0FBVSxJQUFXLEdBQ3RCLE9BQ0osR0FBSSxPQUFPLEdBQVUsVUFDakIsYUFBa0IsUUFDbEIsT0FBTyxFQUFPLFNBQVcsV0FDekIsTUFBVSxNQUFNLElBQUksZUFBcUIsdUNBQTRDLEVBRXpGLElBQU0sRUFBTSxFQUFJLFdBQVcsVUFBVyxDQUNsQyxJQUFLLEVBQ0wsSUFBSyxFQUNMLEtBQU0sRUFBSyxLQUFLLFFBQVUsQUFBVSxPQUFLLEVBQUssS0FBSyxVQUFvQixlQUFZLENBQU0sSUFBTSxNQUNuRyxDQUFDLEVBQ0QsRUFBSSxVQUFVLEVBQVksQ0FBRyxDQUFDLEVBRWxDLFNBQVMsQ0FBVyxDQUFDLEVBQUssQ0FDdEIsTUFBTyxDQUFVLE9BQUssYUFBZSxNQUFTLE1BQWUsR0FBSyxHQUFTLFdBR25GLGFBQWMsQ0FBQyxRQUFRLENBQzNCLEVBQ0EsSUFBTSxHQUFvQixDQUFDLEtBQ3ZCLEVBQUksV0FBVyxHQUFRLHFCQUFxQixFQUNyQyxHQUVYLEdBQVEsUUFBVSw4QkNsRWxCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLFFBQ0EsUUFDQSxPQUNBLEdBQVcsSUFBYyxRQUFLLGFBQWEsRUFDM0MsR0FBVyxJQUFjLFFBQUssYUFBYSxFQUMzQyxHQUFnQixDQUFDLEVBQUssRUFBTyxDQUFFLFNBQVUsRUFBSyxJQUFNLENBQ3RELEdBQUksTUFBTSxRQUFRLENBQUksRUFFbEIsT0FEQSxHQUFXLEVBQUssRUFBZ0IsZUFBYSxFQUFRLEVBQzlDLEVBRVgsSUFBTyxFQUFTLEdBQWMsRUFBSyxPQUFTLE9BQVMsQ0FBVyxlQUFhLEVBQVEsRUFBSSxDQUFXLGVBQWEsRUFBUSxFQUNuSCxFQUFPLEVBQUssU0FBcUIsZUFFdkMsR0FEQSxHQUFXLEVBQUssRUFBTSxFQUFTLENBQVUsRUFDckMsRUFBSyxTQUNMLEdBQVEsUUFBUSxDQUFHLEVBQ3ZCLE9BQU8sR0FFWCxHQUFjLElBQU0sQ0FBQyxFQUFNLEVBQU8sU0FBVyxDQUV6QyxJQUFNLEdBRFUsSUFBUyxPQUFtQixlQUF3QixnQkFDbEQsR0FDbEIsR0FBSSxDQUFDLEVBQ0QsTUFBVSxNQUFNLG1CQUFtQixJQUFPLEVBQzlDLE9BQU8sR0FFWCxTQUFTLEVBQVUsQ0FBQyxFQUFLLEVBQU0sRUFBSSxFQUFZLENBQzNDLElBQUksRUFDQSxHQUNILEdBQU0sRUFBSyxFQUFJLEtBQUssTUFBTSxXQUFhLE1BQVEsSUFBWSxTQUFVLEVBQUcsUUFBVSxBQUFVLDJDQUF5QyxLQUN0SSxRQUFXLEtBQUssRUFDWixFQUFJLFVBQVUsRUFBRyxFQUFHLEVBQUUsRUFFOUIsR0FBTyxRQUFVLEdBQVUsR0FDM0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsUUFBVSwrQkNuQ2pCLFFBQVEsQ0FBQyxFQUFNLEVBQVMsQ0FDckIsR0FBSSxPQUFPLEtBQVcsVUFBbUIsV0FDckMsR0FBTyxRQUFVLEVBQVEsRUFFekIsT0FBSyxRQUFVLEVBQVEsSUFFN0IsR0FBTSxRQUFRLEVBQUcsQ0FFZixTQUFTLENBQUksQ0FBQyxFQUFNLEVBQVMsRUFBYSxDQUt0QyxPQUpBLEtBQUssR0FBSyxFQUFFLEVBQUssVUFDakIsS0FBSyxLQUFPLEVBQ1osS0FBSyxRQUFVLEVBQ2YsS0FBSyxZQUFjLEVBQ1osS0FFWCxFQUFLLFVBQVksRUFFakIsRUFBSyxVQUFVLFNBQVcsUUFBUSxDQUFDLEVBQWMsQ0FDN0MsSUFBSSxFQUFrQixPQUFPLEVBQWlCLElBQ3ZCLEtBQUssUUFBUSxJQUFJLENBQXFCLEVBQUUsS0FBSyxHQUFHLEVBQzVDLEtBQUssUUFBUSxNQUFNLEVBQUcsQ0FBWSxFQUFFLElBQUksQ0FBcUIsRUFBRSxLQUFLLEdBQUcsRUFDdkUsTUFDQSxLQUFLLFFBQVEsTUFBTSxDQUFZLEVBQUUsSUFBSSxDQUFxQixFQUFFLEtBQUssR0FBRyxFQUMvRixPQUFPLEtBQUssS0FBTyxNQUFRLEdBSy9CLFNBQVMsQ0FBSyxDQUFDLEVBQU0sRUFBSyxFQUFXLEVBQVUsQ0FDM0MsS0FBSyxLQUFPLEVBQ1osS0FBSyxJQUFNLEVBQ1gsS0FBSyxVQUFZLEVBQ2pCLEtBQUssS0FBTyxDQUFDLEVBQ2IsS0FBSyxTQUFXLEVBQ2hCLEtBQUssV0FBYSxLQUFLLE1BQVEsRUFBSyxRQUFRLE9BR2hELEVBQU0sVUFBVSxTQUFXLFFBQVEsRUFBRyxDQUNsQyxNQUFPLElBQU0sS0FBSyxLQUFLLFNBQVMsS0FBSyxHQUFHLEVBQUksYUFBZSxLQUFLLFdBQWEsSUFHakYsRUFBTSxVQUFVLFVBQVksUUFBUSxDQUFDLEVBQU8sQ0FDeEMsSUFBSSxFQUFRLElBQUksRUFBTSxLQUFLLEtBQU0sS0FBSyxJQUFNLEVBQUcsS0FBSyxVQUFXLEtBQUssUUFBUSxFQUc1RSxHQUZBLEVBQU0sS0FBTyxLQUNiLEVBQU0sTUFBUSxFQUNWLEVBQU0sV0FDTixFQUFNLEtBQU8sRUFBTSxNQUFNLEVBR3pCLEVBQU0sTUFBUSxPQUVsQixPQUFPLEdBR1gsRUFBTSxVQUFVLE1BQVEsUUFBUSxFQUFHLENBQy9CLElBQUksRUFBVyxDQUFDLEVBQ1osRUFBTyxLQUNYLEdBQ0ksRUFBUyxLQUFLLEVBQUssTUFBTSxJQUFJLEVBQzdCLEVBQU8sRUFBSyxXQUNQLEVBQUssTUFFZCxPQURBLEVBQVMsUUFBUSxFQUNWLEdBR1gsRUFBTSxVQUFVLE9BQVMsUUFBUSxFQUFHLENBQ2hDLEdBQUksS0FBSyxLQUFLLFlBQ1YsS0FBSyxLQUFPLEtBQUssS0FBSyxZQUFZLEtBQUssS0FBTSxLQUFLLFVBQVcsRUFBTyxJQUFJLEdBS2hGLFNBQVMsQ0FBTSxDQUFDLEVBQVMsRUFBTyxDQUM1QixLQUFLLFFBQVUsRUFDZixLQUFLLE1BQVEsRUFDYixLQUFLLE9BQVMsQ0FBQyxFQUNmLEtBQUssTUFBUSxDQUFDLEVBQ2QsS0FBSyxVQUFZLENBQUMsRUFDbEIsS0FBSyxVQUFZLENBQUMsRUFJdEIsRUFBTyxVQUFVLFFBQVUsUUFBUSxDQUFDLEVBQVksQ0FDNUMsSUFBSSxFQUFTLEtBQUssT0FDZCxFQUFRLEtBQUssTUFDYixFQUFZLEtBQUssVUFFckIsUUFBUyxFQUFJLEVBQUcsRUFBSSxFQUFPLE9BQVEsSUFBSyxDQUNwQyxJQUFJLEVBQVEsRUFBTyxHQUVuQixHQUFJLEVBQU0sWUFFTixHQURBLEVBQU0sT0FBTyxFQUNULEVBQU0sT0FBUyxFQUFPLEtBQU0sQ0FFNUIsSUFBSSxFQUFXLEVBQU0sU0FDckIsUUFBUyxFQUFJLEVBQVMsT0FBUSxLQUFPLENBQ2pDLElBQUksRUFBTyxFQUFTLEdBQ3BCLEtBQUssU0FBUyxFQUFNLENBQUssRUFJN0IsR0FBSSxFQUFNLFlBQWMsS0FBSyxNQUFPLENBRWhDLElBQUksRUFBTSxFQUFNLEtBQUssTUFDcEIsS0FBSyxVQUFVLEdBQU8sS0FBSyxVQUFVLElBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBSyxJQUlqRSxLQUVILElBQUksRUFBTSxFQUFNLEtBQUssUUFBUSxFQUFNLEtBQ25DLEdBQUksT0FBTyxJQUFRLFNBQVUsQ0FDekIsS0FBSyxVQUFVLEtBQUssQ0FBSyxFQUN6QixTQUlKLEdBQUksRUFBTSxJQUdOLEdBRkEsRUFBTSxHQUFLLEtBQUssQ0FBSyxFQUVqQixFQUFVLGVBQWUsQ0FBRyxFQUFHLENBQy9CLElBQUksRUFBUSxFQUFVLEdBQ3RCLFFBQVMsRUFBSSxFQUFHLEVBQUksRUFBTSxPQUFRLElBQUssQ0FDbkMsSUFBSSxFQUFRLEVBQU0sR0FDbEIsS0FBSyxTQUFTLEVBQU8sQ0FBSyxJQUlsQyxPQUFNLEdBQU8sQ0FBQyxDQUFLLEVBQ25CLEtBQUssUUFBUSxDQUFHLEtBTWhDLEVBQU8sVUFBVSxRQUFVLFFBQVEsQ0FBQyxFQUFLLENBQ3JDLElBQUksRUFBUSxLQUFLLFFBQVEsT0FBTyxJQUFRLENBQUMsRUFFekMsUUFBUyxFQUFJLEVBQUcsRUFBSSxFQUFNLE9BQVEsSUFBSyxDQUNuQyxJQUFJLEVBQUksRUFBTSxHQUNWLEVBQVcsS0FBSyxNQUFNLEdBQ3RCLEVBQUksSUFBSSxFQUFNLEVBQUcsRUFBRyxLQUFLLE1BQU8sQ0FBUSxFQUM1QyxLQUFLLE9BQU8sS0FBSyxDQUFDLElBSTFCLEVBQU8sVUFBVSxTQUFXLFFBQVEsQ0FBQyxFQUFNLEVBQU8sQ0FDOUMsSUFBSSxFQUFPLEVBQUssVUFBVSxDQUFLLEVBQy9CLEtBQUssT0FBTyxLQUFLLENBQUksR0FJekIsU0FBUyxDQUFPLENBQUMsRUFBTyxFQUFPLENBQzNCLEtBQUssTUFBUSxFQUNiLEtBQUssTUFBUSxHQUFTLEtBQUssTUFBTSxHQUFHLEtBQ3BDLElBQUksRUFBUyxLQUFLLE9BQVMsQ0FBQyxFQUM1QixLQUFLLE1BQU0sUUFBUSxRQUFRLENBQUMsRUFBTSxDQUM5QixHQUFJLENBQUMsRUFBTyxlQUFlLEVBQUssSUFBSSxFQUNoQyxFQUFPLEVBQUssTUFBUSxDQUFDLEVBRXpCLEVBQU8sRUFBSyxNQUFNLEtBQUssQ0FBSSxFQUM5QixFQUlMLEVBQVEsYUFBZSxRQUFRLENBQUMsRUFBTyxFQUFPLENBQzFDLElBQUksRUFBUSxFQUFNLE1BQ2xCLEdBQUksRUFBTSxZQUNSLEVBQVEsRUFBTSxZQUNkLEVBQVEsRUFBTSxZQUVoQixJQUFJLEVBQVEsRUFBTSxJQUFJLFFBQVMsQ0FBQyxFQUFHLENBQUUsT0FBUSxJQUFJLEVBQUssRUFBRSxLQUFNLEVBQUUsUUFBUyxFQUFFLFdBQVcsRUFBSyxFQUN2RixFQUFJLElBQUksRUFBUSxFQUFPLENBQUssRUFFaEMsT0FEQSxFQUFFLE1BQVEsRUFDSCxHQUlYLFNBQVMsQ0FBVyxFQUFHLENBQ3JCLEtBQUssTUFBTSxFQUFFLEVBR2YsRUFBWSxVQUFVLE1BQVEsUUFBUSxDQUFDLEVBQU0sRUFBTyxDQUNoRCxLQUFLLE9BQVMsRUFDZCxLQUFLLE1BQVEsRUFDYixLQUFLLEtBQU8sRUFBUSxFQUFNLEtBQU8sRUFDakMsS0FBSyxjQUFnQixFQUFRLENBQUMsRUFBTSxJQUFNLEdBRzlDLEVBQVksVUFBVSxLQUFPLFFBQVEsRUFBRyxDQUNwQyxHQUFJLEtBQUssTUFBUSxLQUFLLE9BQU8sT0FBUSxDQUNqQyxJQUFJLEVBQUssS0FBSyxPQUFPLEtBQUssU0FDMUIsR0FBSSxJQUFPO0FBQUEsRUFDVCxLQUFLLE1BQVEsRUFDYixLQUFLLGNBQWdCLEtBQUssTUFFNUIsTUFBTyxDQUFDLE1BQU8sQ0FBRSxJQUl6QixFQUFZLFVBQVUsS0FBTyxRQUFRLEVBQUcsQ0FDdEMsTUFBTyxDQUNMLEtBQU0sS0FBSyxLQUNYLElBQUssS0FBSyxNQUFRLEtBQUssYUFDekIsR0FHRixFQUFZLFVBQVUsWUFBYyxRQUFRLENBQUMsRUFBTyxFQUFTLENBR3pELElBQUksRUFBUyxLQUFLLE9BQ2xCLEdBQUksT0FBTyxJQUFXLFNBQVUsQ0FDNUIsSUFBSSxFQUFRLEVBQ1AsTUFBTTtBQUFBLENBQUksRUFDVixNQUNHLEtBQUssSUFBSSxFQUFHLEtBQUssS0FBTyxDQUFDLEVBQ3pCLEtBQUssSUFDVCxFQUVBLEVBQWdCLEVBQU8sUUFBUTtBQUFBLEVBQU0sS0FBSyxLQUFLLEVBQ25ELEdBQUksSUFBa0IsR0FBSSxFQUFnQixFQUFPLE9BQ2pELElBQUksRUFBTSxLQUFLLE1BQVEsS0FBSyxjQUN4QixFQUFpQixPQUFPLEtBQUssSUFBSSxFQUFFLE9BUXZDLE9BUEEsR0FBVyxZQUFjLEtBQUssS0FBTyxRQUFVLEVBQU07QUFBQTtBQUFBLEVBQ3JELEdBQVcsRUFDTixJQUFJLFFBQVEsQ0FBQyxFQUFNLEVBQUcsQ0FDbkIsT0FBTyxFQUFJLEtBQUssS0FBTyxFQUFNLE9BQVMsRUFBSSxFQUFHLENBQWMsRUFBSSxJQUFNLEdBQ3RFLElBQUksRUFDTixLQUFLO0FBQUEsQ0FBSSxFQUNkLEdBQVc7QUFBQSxFQUFPLEVBQUksR0FBSSxFQUFpQixDQUFHLEVBQUk7QUFBQSxFQUMzQyxFQUVQLFlBQU8sRUFBVSxjQUFnQixLQUFLLE1BQVEsR0FHbEQsU0FBUyxDQUFHLENBQUMsRUFBRyxFQUFRLENBQ3BCLElBQUksRUFBSSxPQUFPLENBQUMsRUFDaEIsT0FBTyxNQUFNLEVBQVMsRUFBRSxPQUFTLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBSSxJQUl4RCxTQUFTLENBQU0sQ0FBQyxFQUFPLEVBQU8sRUFBUyxDQUNuQyxHQUFJLGFBQWlCLEVBQ2pCLElBQUksRUFBVSxFQUNWLEVBQVUsRUFFZCxTQUFJLEVBQVUsRUFBUSxhQUFhLEVBQU8sQ0FBSyxFQUVuRCxLQUFLLFFBQVUsRUFHZixLQUFLLFFBQVUsQ0FDWCxZQUFhLEdBQ2IsTUFBTyxFQUFRLE9BQVMsSUFBSSxDQUNoQyxFQUNBLFFBQVMsS0FBUSxHQUFXLENBQUMsRUFDekIsS0FBSyxRQUFRLEdBQU8sRUFBUSxHQUloQyxLQUFLLE1BQVEsS0FBSyxRQUFRLE1BQzFCLEtBQUssV0FBYSxPQUdsQixJQUFJLEVBQVMsSUFBSSxFQUFPLEVBQVMsQ0FBQyxFQUM5QixFQUFRLEtBQUssTUFBUSxDQUFDLENBQU0sRUFHaEMsRUFBTyxNQUFNLEVBQVEsT0FBUyxDQUFDLEVBQy9CLEVBQU8sUUFBUSxFQUFRLEtBQUssRUFFNUIsRUFBTyxRQUFRLEVBQ2YsS0FBSyxRQUFVLEVBSW5CLEVBQU8sS0FBTyxDQUFDLEVBRWYsRUFBTyxVQUFVLEtBQU8sUUFBUSxDQUFDLEVBQU8sQ0FDcEMsSUFBSSxFQUFRLEtBQUssTUFDakIsRUFBTSxNQUFNLEVBQU8sS0FBSyxVQUFVLEVBRWxDLElBQUksRUFDSixNQUFPLEdBQU0sQ0FDVCxHQUFJLENBRUEsR0FEQSxFQUFRLEVBQU0sS0FBSyxFQUNmLENBQUMsRUFDRCxNQUVOLE1BQU8sRUFBRyxDQUdSLElBQUksRUFBYSxJQUFJLEVBQU8sS0FBSyxRQUFTLEtBQUssUUFBVSxDQUFDLEVBQzFELEtBQUssTUFBTSxLQUFLLENBQVUsRUFDMUIsSUFBSSxFQUFVLE1BQU0sS0FBSyxpQkFBaUIsQ0FBQyxDQUFDLEVBRzVDLE1BRkEsRUFBSSxPQUFTLEtBQUssUUFDbEIsRUFBSSxNQUFRLEVBQUUsTUFDUixFQUdWLElBQUksRUFBUyxLQUFLLE1BQU0sS0FBSyxTQUc3QixHQUFJLENBQUMsS0FBSyxRQUFRLFlBQ2QsT0FBTyxLQUFLLE1BQU0sS0FBSyxRQUFVLEdBR3JDLElBQUksRUFBSSxLQUFLLFFBQVUsRUFDbkIsRUFBYSxJQUFJLEVBQU8sS0FBSyxRQUFTLENBQUMsRUFDM0MsS0FBSyxNQUFNLEtBQUssQ0FBVSxFQUcxQixJQUFJLEVBQVUsRUFBTSxPQUFTLE9BQVksRUFBTSxLQUFPLEVBQU0sTUFDeEQsRUFBUSxFQUFNLGNBQWdCLEVBQWMsRUFBTSxNQUFRLEVBQzFELEVBQVksRUFBTyxVQUN2QixRQUFTLEVBQUksRUFBVSxPQUFRLEtBQU8sQ0FDbEMsSUFBSSxFQUFRLEVBQVUsR0FDbEIsRUFBUyxFQUFNLEtBQUssUUFBUSxFQUFNLEtBR3RDLEdBQUksRUFBTyxLQUFPLEVBQU8sS0FBSyxDQUFLLEVBQy9CLEVBQU8sS0FBTyxFQUFPLE9BQVMsRUFBTSxLQUN0QixFQUFPLFVBQVksRUFBUyxDQUUxQyxJQUFJLEVBQU8sRUFBTSxVQUFVLENBQUMsS0FBTSxFQUFPLE1BQU8sRUFBTyxRQUFTLEdBQU0sVUFBVyxFQUFJLENBQUMsQ0FBQyxFQUN2RixFQUFXLE9BQU8sS0FBSyxDQUFJLEdBZW5DLEdBSEEsRUFBVyxRQUFRLEVBR2YsRUFBVyxPQUFPLFNBQVcsRUFBRyxDQUVoQyxJQUFJLEVBQVUsTUFBTSxLQUFLLFlBQVksQ0FBSyxDQUFDLEVBRzNDLE1BRkEsRUFBSSxPQUFTLEtBQUssUUFDbEIsRUFBSSxNQUFRLEVBQ04sRUFJVixHQUFJLEtBQUssUUFBUSxZQUNmLEVBQU8sV0FBYSxFQUFNLEtBQUssRUFHakMsS0FBSyxVQUVULEdBQUksRUFDRixLQUFLLFdBQWEsRUFBTSxLQUFLLEVBTy9CLE9BSEEsS0FBSyxRQUFVLEtBQUssT0FBTyxFQUdwQixNQUdYLEVBQU8sVUFBVSxpQkFBbUIsUUFBUSxDQUFDLEVBQVksQ0FDckQsSUFBSSxFQUFjLEVBR2QsRUFBUSxFQUFXLE1BQ3ZCLEdBQUksRUFDQSxFQUFlLFNBQVcsS0FBSyxVQUFVLEVBQU0sS0FBSyxFQUFFLEVBQUksaUJBQzFELEVBQWUsS0FBSyxNQUFNLFlBQVksRUFBTyxjQUFjLEVBRTNELE9BQWUsc0JBQ2YsRUFBZSxFQUFXLFFBRTlCLE9BQU8sS0FBSyxrQkFBa0IsRUFBYyxDQUFZLEdBRzVELEVBQU8sVUFBVSxZQUFjLFFBQVEsQ0FBQyxFQUFPLENBQzNDLElBQUksR0FBZ0IsRUFBTSxLQUFPLEVBQU0sS0FBTyxXQUFhLElBQU0sS0FBSyxVQUFVLEVBQU0sUUFBVSxPQUFZLEVBQU0sTUFBUSxDQUFLLEVBQzNILEVBQWUsS0FBSyxNQUFNLFlBQVksRUFBTyxjQUFjLEVBQy9ELE9BQU8sS0FBSyxrQkFBa0IsRUFBYyxDQUFZLEdBRzVELEVBQU8sVUFBVSxrQkFBb0IsUUFBUSxDQUFDLEVBQWMsRUFBYyxDQUN0RSxJQUFJLEVBQVEsQ0FBQyxFQUNiLEVBQU0sS0FBSyxDQUFZLEVBQ3ZCLElBQUksRUFBa0IsS0FBSyxNQUFNLE9BQVMsRUFDdEMsRUFBYSxLQUFLLE1BQU0sR0FDeEIsRUFBa0IsRUFBVyxPQUM1QixPQUFPLFFBQVEsQ0FBQyxFQUFPLENBQ3BCLElBQUksRUFBYSxFQUFNLEtBQUssUUFBUSxFQUFNLEtBQzFDLE9BQU8sR0FBYyxPQUFPLElBQWUsU0FDOUMsRUFFTCxHQUFJLEVBQWdCLFNBQVcsRUFDM0IsRUFBTSxLQUFLLGNBQWdCLEVBQWU7QUFBQSxDQUEyRSxFQUNySCxLQUFLLGtCQUFrQixFQUFXLE9BQVEsQ0FBSyxFQUM1QyxLQUNILEVBQU0sS0FBSyxjQUFnQixFQUFlO0FBQUEsQ0FBMkQsRUFJckcsSUFBSSxFQUFjLEVBQ2IsSUFBSSxRQUFRLENBQUMsRUFBTyxDQUNqQixPQUFPLEtBQUsscUJBQXFCLEVBQU8sQ0FBQyxDQUFDLEdBQUssQ0FBQyxDQUFLLEdBQ3RELElBQUksRUFFWCxFQUFZLFFBQVEsUUFBUSxDQUFDLEVBQVksQ0FDckMsSUFBSSxFQUFRLEVBQVcsR0FDbkIsRUFBYSxFQUFNLEtBQUssUUFBUSxFQUFNLEtBQ3RDLEVBQWdCLEtBQUssaUJBQWlCLENBQVUsRUFDcEQsRUFBTSxLQUFLLEtBQU8sRUFBZ0IsWUFBWSxFQUM5QyxLQUFLLGtCQUFrQixFQUFZLENBQUssR0FDekMsSUFBSSxFQUdYLE9BREEsRUFBTSxLQUFLLEVBQUUsRUFDTixFQUFNLEtBQUs7QUFBQSxDQUFJLEdBRzFCLEVBQU8sVUFBVSxrQkFBb0IsUUFBUSxDQUFDLEVBQVksRUFBTyxDQUM3RCxJQUFJLEVBQ0EsRUFBbUIsRUFDdkIsUUFBUyxFQUFJLEVBQUcsRUFBSSxFQUFXLE9BQVEsSUFBSyxDQUN4QyxJQUFJLEVBQVEsRUFBVyxHQUNuQixFQUFVLEVBQU0sS0FBSyxTQUFTLEVBQU0sR0FBRyxFQUMzQyxHQUFJLElBQVksRUFDWixJQUNHLEtBQ0gsR0FBSSxFQUFtQixFQUNuQixFQUFNLEtBQUssU0FBVyxFQUFtQiwrQkFBK0IsRUFFNUUsRUFBbUIsRUFDbkIsRUFBTSxLQUFLLE9BQVMsQ0FBTyxFQUUvQixFQUFjLElBSXRCLEVBQU8sVUFBVSxpQkFBbUIsUUFBUSxDQUFDLEVBQVEsQ0FDakQsT0FBTyxFQUFxQixDQUFNLEdBY3RDLEVBQU8sVUFBVSxxQkFBdUIsUUFBUSxDQUFDLEVBQU8sRUFBUyxDQUM3RCxHQUFJLEVBQVEsUUFBUSxDQUFLLElBQU0sR0FJM0IsT0FBTyxLQUVYLEdBQUksRUFBTSxTQUFTLFNBQVcsRUFDMUIsTUFBTyxDQUFDLENBQUssRUFFakIsSUFBSSxFQUFZLEVBQU0sU0FBUyxHQUMzQixFQUFlLENBQUMsQ0FBSyxFQUFFLE9BQU8sQ0FBTyxFQUNyQyxFQUFjLEtBQUsscUJBQXFCLEVBQVcsQ0FBWSxFQUNuRSxHQUFJLElBQWdCLEtBQ2hCLE9BQU8sS0FFWCxNQUFPLENBQUMsQ0FBSyxFQUFFLE9BQU8sQ0FBVyxHQUdyQyxFQUFPLFVBQVUsS0FBTyxRQUFRLEVBQUcsQ0FDL0IsSUFBSSxFQUFTLEtBQUssTUFBTSxLQUFLLFNBRTdCLE9BREEsRUFBTyxXQUFhLEtBQUssV0FDbEIsR0FHWCxFQUFPLFVBQVUsUUFBVSxRQUFRLENBQUMsRUFBUSxDQUN4QyxJQUFJLEVBQVEsRUFBTyxNQUNuQixLQUFLLFFBQVUsRUFDZixLQUFLLE1BQU0sR0FBUyxFQUNwQixLQUFLLE1BQU0sT0FBTyxFQUFRLENBQUMsRUFDM0IsS0FBSyxXQUFhLEVBQU8sV0FHekIsS0FBSyxRQUFVLEtBQUssT0FBTyxHQUkvQixFQUFPLFVBQVUsT0FBUyxRQUFRLENBQUMsRUFBTyxDQUN0QyxHQUFJLENBQUMsS0FBSyxRQUFRLFlBQ2QsTUFBVSxNQUFNLDhDQUE4QyxFQUlsRSxLQUFLLFFBQVEsS0FBSyxNQUFNLEVBQU0sR0FHbEMsRUFBTyxVQUFVLE9BQVMsUUFBUSxFQUFHLENBRWpDLElBQUksRUFBaUIsQ0FBQyxFQUNsQixFQUFRLEtBQUssUUFBUSxNQUNyQixFQUFTLEtBQUssTUFBTSxLQUFLLE1BQU0sT0FBUyxHQVM1QyxPQVJBLEVBQU8sT0FBTyxRQUFRLFFBQVMsQ0FBQyxFQUFHLENBQy9CLEdBQUksRUFBRSxLQUFLLE9BQVMsR0FDVCxFQUFFLE1BQVEsRUFBRSxLQUFLLFFBQVEsUUFDekIsRUFBRSxZQUFjLEdBQ2hCLEVBQUUsT0FBUyxFQUFPLEtBQ3pCLEVBQWUsS0FBSyxDQUFDLEVBRTVCLEVBQ00sRUFBZSxJQUFJLFFBQVEsQ0FBQyxFQUFHLENBQUMsT0FBTyxFQUFFLEtBQU8sR0FHM0QsU0FBUyxDQUFvQixDQUFDLEVBQVEsQ0FDbEMsSUFBSSxFQUFPLE9BQU8sRUFDbEIsR0FBSSxJQUFTLFNBQ1QsT0FBTyxFQUNKLFFBQUksSUFBUyxTQUNoQixHQUFJLEVBQU8sUUFDUCxPQUFPLEtBQUssVUFBVSxFQUFPLE9BQU8sRUFDakMsUUFBSSxhQUFrQixPQUN6QixNQUFPLHNCQUF3QixFQUM1QixRQUFJLEVBQU8sS0FDZCxPQUFPLEVBQU8sS0FBTyxTQUNsQixRQUFJLEVBQU8sS0FDZCxNQUFPLGtCQUFvQixPQUFPLEVBQU8sSUFBSSxFQUU3QyxXQUFVLE1BQU0sd0JBQTBCLENBQU0sRUFLNUQsU0FBUyxDQUFxQixDQUFDLEVBQVEsQ0FDbkMsSUFBSSxFQUFPLE9BQU8sRUFDbEIsR0FBSSxJQUFTLFNBQ1QsT0FBTyxFQUNKLFFBQUksSUFBUyxTQUNoQixHQUFJLEVBQU8sUUFDUCxPQUFPLEtBQUssVUFBVSxFQUFPLE9BQU8sRUFDakMsUUFBSSxhQUFrQixPQUN6QixPQUFPLEVBQU8sU0FBUyxFQUNwQixRQUFJLEVBQU8sS0FDZCxNQUFPLElBQU0sRUFBTyxLQUNqQixRQUFJLEVBQU8sS0FDZCxNQUFPLElBQU0sT0FBTyxFQUFPLElBQUksRUFBSSxJQUVuQyxXQUFVLE1BQU0sd0JBQTBCLENBQU0sRUFLNUQsTUFBTyxDQUNILE9BQVEsRUFDUixRQUFTLEVBQ1QsS0FBTSxDQUNWLEVBRUgsMEJDbGpCRCxPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFLNUQsU0FBUyxFQUFFLENBQUMsRUFBRyxDQUFFLE9BQU8sRUFBRSxHQUMxQixJQUFNLEdBQWMsQ0FBQyxJQUFRLENBQUMsRUFBRSxPQUFPLEdBQUcsRUFBSSxJQUFJLENBQUMsSUFBTyxNQUFNLFFBQVEsQ0FBQyxFQUFJLEdBQVksQ0FBQyxFQUFJLENBQUUsQ0FBQyxFQUNqRyxTQUFTLEVBQVcsQ0FBQyxFQUFHLENBQ3BCLEdBQUksRUFBRyxDQUNILEdBQUksTUFBTSxRQUFRLENBQUMsRUFDZixPQUFPLEdBQVksQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUNqQyxPQUFPLEVBRVgsTUFBTyxHQU1YLElBQU0sR0FBVSxDQUNaLE1BQU8sT0FDUCxZQUFhLENBQ1QsQ0FBRSxLQUFRLGVBQWdCLFFBQVcsQ0FBQyxNQUFNLENBQUUsRUFDOUMsQ0FBRSxLQUFRLHdCQUF5QixRQUFXLENBQUMsQ0FBRSxRQUFXLEdBQUksRUFBRyxDQUFFLFFBQVcsR0FBSSxDQUFDLEVBQUcsWUFBZSxDQUFDLElBQU0sRUFBRSxLQUFLLEVBQUUsQ0FBRSxFQUN6SCxDQUFFLEtBQVEsZUFBZ0IsUUFBVyxDQUFDLHVCQUF1QixDQUFFLEVBQy9ELENBQUUsS0FBUSwrQ0FBZ0QsUUFBVyxDQUFDLENBQUUsUUFBVyxHQUFJLEVBQUcsT0FBUSxPQUFRLE9BQVEsT0FBUSxPQUFRLE9BQVEsT0FBUSxPQUFRLE9BQVEsT0FBUSxDQUFFLFFBQVcsR0FBSSxDQUFDLEVBQUcsWUFBZSxRQUFTLENBQUMsRUFBRyxDQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBSyxFQUNsUCxDQUFFLEtBQVEsK0JBQWdDLFFBQVcsQ0FBQywrQ0FBZ0QsU0FBVSxDQUFFLFFBQVcsR0FBSSxDQUFDLENBQUUsRUFDcEksQ0FBRSxLQUFRLGVBQWdCLFFBQVcsQ0FBQyw4QkFBOEIsQ0FBRSxFQUN0RSxDQUFFLEtBQVEsK0JBQWdDLFFBQVcsQ0FBQyxDQUFFLFFBQVcsR0FBSSxFQUFHLE9BQVEsT0FBUSxPQUFRLE9BQVEsT0FBUSxPQUFRLE9BQVEsT0FBUSxPQUFRLE9BQVEsQ0FBRSxRQUFXLEdBQUksQ0FBQyxFQUFHLFlBQWUsUUFBUyxDQUFDLEVBQUcsQ0FBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUssRUFDbE8sQ0FBRSxLQUFRLGVBQWdCLFFBQVcsQ0FBQyw4QkFBOEIsQ0FBRSxFQUN0RSxDQUFFLEtBQVEsZUFBZ0IsUUFBVyxDQUFDLE1BQU0sQ0FBRSxFQUM5QyxDQUFFLEtBQVEsOEJBQStCLFFBQVcsQ0FBQyxRQUFTLENBQUUsUUFBVyxHQUFJLENBQUMsQ0FBRSxFQUNsRixDQUFFLEtBQVEsY0FBZSxRQUFXLENBQUMsNkJBQTZCLEVBQUcsWUFBZSxFQUFHLEVBQ3ZGLENBQUUsS0FBUSxjQUFlLFFBQVcsQ0FBQyxFQUFHLFlBQWUsSUFBTSxJQUFLLEVBQ2xFLENBQUUsS0FBUSxPQUFRLFFBQVcsQ0FBQyxDQUFFLFFBQVcsR0FBSSxFQUFHLGNBQWUsVUFBVyxDQUFFLFFBQVcsR0FBSSxDQUFDLENBQUUsRUFDaEcsQ0FBRSxLQUFRLGVBQWdCLFFBQVcsQ0FBQyxDQUFFLEVBQ3hDLENBQUUsS0FBUSwrQkFBZ0MsUUFBVyxDQUFDLENBQUUsUUFBVyxHQUFJLEVBQUcsV0FBVyxDQUFFLEVBQ3ZGLENBQUUsS0FBUSxlQUFnQixRQUFXLENBQUMsZUFBZ0IsOEJBQThCLEVBQUcsWUFBZSxDQUFDLElBQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFFLEVBQ2pJLENBQUUsS0FBUSxRQUFTLFFBQVcsQ0FBQyxZQUFhLGNBQWMsQ0FBRSxFQUM1RCxDQUFFLEtBQVEsWUFBYSxRQUFXLENBQUMsQ0FBRSxRQUFXLEdBQUksRUFBRyxRQUFRLENBQUUsRUFDakUsQ0FBRSxLQUFRLGdCQUFpQixRQUFXLENBQUMsQ0FBRSxFQUN6QyxDQUFFLEtBQVEsZ0NBQWlDLFFBQVcsQ0FBQyxDQUFFLFFBQVcsR0FBSSxFQUFHLFlBQVksQ0FBRSxFQUN6RixDQUFFLEtBQVEsZ0JBQWlCLFFBQVcsQ0FBQyxnQkFBaUIsK0JBQStCLEVBQUcsWUFBZSxDQUFDLElBQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFFLEVBQ3BJLENBQUUsS0FBUSxTQUFVLFFBQVcsQ0FBQyxhQUFjLGVBQWUsQ0FBRSxFQUMvRCxDQUFFLEtBQVEsYUFBYyxRQUFXLENBQUMsU0FBUyxDQUFFLEVBQy9DLENBQUUsS0FBUSxVQUFXLFFBQVcsQ0FBQyxhQUFhLEVBQUcsWUFBZSxFQUFHLEVBQ25FLENBQUUsS0FBUSxpQkFBa0IsUUFBVyxDQUFDLENBQUUsRUFDMUMsQ0FBRSxLQUFRLGlCQUFrQixRQUFXLENBQUMsaUJBQWtCLGdCQUFnQixFQUFHLFlBQWUsQ0FBQyxJQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBRSxFQUN2SCxDQUFFLEtBQVEsVUFBVyxRQUFXLENBQUMsaUJBQWtCLFNBQVMsQ0FBRSxFQUM5RCxDQUFFLEtBQVEsWUFBYSxRQUFXLENBQUMsZUFBZSxFQUFHLFlBQWUsRUFBRyxFQUN2RSxDQUFFLEtBQVEsbUJBQW9CLFFBQVcsQ0FBQyxDQUFFLEVBQzVDLENBQUUsS0FBUSxtQkFBb0IsUUFBVyxDQUFDLG1CQUFvQixrQkFBa0IsRUFBRyxZQUFlLENBQUMsSUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUUsRUFDN0gsQ0FBRSxLQUFRLFlBQWEsUUFBVyxDQUFDLG1CQUFvQixXQUFXLENBQUUsRUFDcEUsQ0FBRSxLQUFRLGlDQUFrQyxRQUFXLENBQUMsV0FBVyxDQUFFLEVBQ3JFLENBQUUsS0FBUSxpQkFBa0IsUUFBVyxDQUFDLGdDQUFnQyxFQUFHLFlBQWUsRUFBRyxFQUM3RixDQUFFLEtBQVEsaUJBQWtCLFFBQVcsQ0FBQyxFQUFHLFlBQWUsSUFBTSxJQUFLLEVBQ3JFLENBQUUsS0FBUSxVQUFXLFFBQVcsQ0FBQyxZQUFhLGdCQUFnQixDQUFFLEVBQ2hFLENBQUUsS0FBUSxrQ0FBbUMsUUFBVyxDQUFDLHNCQUFzQixDQUFFLEVBQ2pGLENBQUUsS0FBUSxrQ0FBbUMsUUFBVyxDQUFDLHNCQUFzQixDQUFFLEVBQ2pGLENBQUUsS0FBUSxrQ0FBbUMsUUFBVyxDQUFDLHlCQUF5QixDQUFFLEVBQ3BGLENBQUUsS0FBUSxrQkFBbUIsUUFBVyxDQUFDLENBQUUsUUFBVyxHQUFJLEVBQUcsa0NBQW1DLENBQUUsUUFBVyxHQUFJLENBQUMsQ0FBRSxFQUNwSCxDQUFFLEtBQVEsaUJBQWtCLFFBQVcsQ0FBQyxRQUFRLEVBQUcsWUFBZSxRQUFTLENBQUMsRUFBRyxDQUN2RSxNQUFPLENBQUUsV0FBWSxHQUFZLEVBQUUsRUFBRSxDQUFFLEVBRS9DLEVBQ0EsQ0FBRSxLQUFRLGlCQUFrQixRQUFXLENBQUMsaUJBQWlCLEVBQUcsWUFBZSxRQUFTLENBQUMsRUFBRyxDQUNoRixNQUFPLENBQUUsZUFBZ0IsR0FBWSxFQUFFLEVBQUUsQ0FBRSxFQUVuRCxFQUNBLENBQUUsS0FBUSxVQUFXLFFBQVcsQ0FBQyxhQUFjLENBQUUsUUFBVyxHQUFJLEVBQUcsZ0JBQWdCLEVBQUcsWUFBZSxRQUFTLENBQUMsRUFBRyxDQUMxRyxNQUFPLENBQUUsVUFBVyxHQUFZLEVBQUUsRUFBRSxFQUFHLFdBQVksR0FBWSxFQUFFLEVBQUUsQ0FBRSxFQUU3RSxFQUNBLENBQUUsS0FBUSxhQUFjLFFBQVcsQ0FBQyxZQUFZLEVBQUcsWUFBZSxRQUFTLENBQUMsRUFBRyxDQUN2RSxNQUFPLENBQUUsVUFBVyxHQUFZLEVBQUUsRUFBRSxDQUFFLEVBRTlDLEVBQ0EsQ0FBRSxLQUFRLGFBQWMsUUFBVyxDQUFDLGVBQWUsRUFBRyxZQUFlLFFBQVMsQ0FBQyxFQUFHLENBQzFFLE1BQU8sQ0FBRSxhQUFjLEdBQVksRUFBRSxFQUFFLENBQUUsRUFFakQsRUFDQSxDQUFFLEtBQVEsb0JBQXFCLFFBQVcsQ0FBQyxDQUFFLEVBQzdDLENBQUUsS0FBUSxvQ0FBcUMsUUFBVyxDQUFDLENBQUUsUUFBVyxHQUFJLEVBQUcsTUFBTSxDQUFFLEVBQ3ZGLENBQUUsS0FBUSxvQkFBcUIsUUFBVyxDQUFDLG9CQUFxQixtQ0FBbUMsRUFBRyxZQUFlLENBQUMsSUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUUsRUFDaEosQ0FBRSxLQUFRLGFBQWMsUUFBVyxDQUFDLE9BQVEsbUJBQW1CLENBQUUsRUFDakUsQ0FBRSxLQUFRLGNBQWUsUUFBVyxDQUFDLCtDQUErQyxDQUFFLEVBQ3RGLENBQUUsS0FBUSxjQUFlLFFBQVcsQ0FBQyxjQUFlLCtDQUErQyxFQUFHLFlBQWUsQ0FBQyxJQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBRSxFQUNoSixDQUFFLEtBQVEsT0FBUSxRQUFXLENBQUMsYUFBYSxDQUFFLEVBQzdDLENBQUUsS0FBUSx1QkFBd0IsUUFBVyxDQUFDLENBQUUsRUFDaEQsQ0FBRSxLQUFRLHVCQUF3QixRQUFXLENBQUMsdUJBQXdCLGNBQWMsRUFBRyxZQUFlLENBQUMsSUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUUsRUFDakksQ0FBRSxLQUFRLGdCQUFpQixRQUFXLENBQUMsU0FBVSx1QkFBd0IsUUFBUSxDQUFFLEVBQ25GLENBQUUsS0FBUSxlQUFnQixRQUFXLENBQUMsV0FBVyxDQUFFLEVBQ25ELENBQUUsS0FBUSxlQUFnQixRQUFXLENBQUMsaUJBQWlCLENBQUUsRUFDekQsQ0FBRSxLQUFRLGtCQUFtQixRQUFXLENBQUMsQ0FBRSxRQUFXLElBQUssRUFBRyxhQUFhLENBQUUsRUFDN0UsQ0FBRSxLQUFRLFlBQWEsUUFBVyxDQUFDLDRDQUE0QyxFQUFHLFlBQWUsRUFBRyxFQUNwRyxDQUFFLEtBQVEsbUNBQW9DLFFBQVcsQ0FBQyxDQUFFLFFBQVcsR0FBSSxFQUFHLE1BQU0sQ0FBRSxFQUN0RixDQUFFLEtBQVEsbUNBQW9DLFFBQVcsQ0FBQyxtQ0FBb0MsbUNBQW9DLGtDQUFrQyxDQUFFLEVBQ3RLLENBQUUsS0FBUSx1QkFBd0IsUUFBVyxDQUFDLE9BQVEsa0NBQWtDLENBQUUsRUFDMUYsQ0FBRSxLQUFRLHVDQUF3QyxRQUFXLENBQUMsT0FBUSxPQUFRLE9BQVEsQ0FBRSxRQUFXLEdBQUksRUFBRyxDQUFFLFFBQVcsR0FBSSxDQUFDLEVBQUcsWUFBZSxRQUFTLENBQUMsRUFBRyxDQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBSyxFQUNsTCxDQUFFLEtBQVEsdUJBQXdCLFFBQVcsQ0FBQyx1Q0FBd0MsV0FBVyxDQUFFLEVBQ25HLENBQUUsS0FBUSxpQ0FBa0MsUUFBVyxDQUFDLFVBQVUsQ0FBRSxFQUNwRSxDQUFFLEtBQVEsaUNBQWtDLFFBQVcsQ0FBQyxpQ0FBa0MsVUFBVSxFQUFHLFlBQWUsQ0FBQyxJQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBRSxFQUNqSixDQUFFLEtBQVEsMEJBQTJCLFFBQVcsQ0FBQyxtQkFBb0IsQ0FBRSxRQUFXLEdBQUksRUFBRyxnQ0FBZ0MsQ0FBRSxFQUMzSCxDQUFFLEtBQVEsbUJBQW9CLFFBQVcsQ0FBQyxTQUFTLENBQUUsRUFDckQsQ0FBRSxLQUFRLFdBQVksUUFBVyxDQUFDLHNCQUFzQixFQUFHLFlBQWUsRUFBRyxFQUM3RSxDQUFFLEtBQVEsT0FBUSxRQUFXLENBQUMsT0FBTyxDQUFFLEVBQ3ZDLENBQUUsS0FBUSx1QkFBd0IsUUFBVyxDQUFDLFFBQVMsT0FBTyxDQUFFLEVBQ2hFLENBQUUsS0FBUSxPQUFRLFFBQVcsQ0FBQyxzQkFBc0IsQ0FBRSxFQUN0RCxDQUFFLEtBQVEsdUJBQXdCLFFBQVcsQ0FBQyxDQUFFLFFBQVcsR0FBSSxFQUFHLFFBQVMsT0FBTyxDQUFFLEVBQ3BGLENBQUUsS0FBUSxPQUFRLFFBQVcsQ0FBQyxzQkFBc0IsQ0FBRSxFQUN0RCxDQUFFLEtBQVEsdUJBQXdCLFFBQVcsQ0FBQyxDQUFFLFFBQVcsR0FBSSxFQUFHLFFBQVMsT0FBTyxDQUFFLEVBQ3BGLENBQUUsS0FBUSxPQUFRLFFBQVcsQ0FBQyxzQkFBc0IsQ0FBRSxFQUN0RCxDQUFFLEtBQVEsdUJBQXdCLFFBQVcsQ0FBQyxDQUFFLFFBQVcsR0FBSSxFQUFHLENBQUUsUUFBVyxHQUFJLEVBQUcsT0FBTyxDQUFFLEVBQy9GLENBQUUsS0FBUSxPQUFRLFFBQVcsQ0FBQyxzQkFBc0IsQ0FBRSxFQUN0RCxDQUFFLEtBQVEsWUFBYSxRQUFXLENBQUMsV0FBVyxDQUFFLEVBQ2hELENBQUUsS0FBUSxZQUFhLFFBQVcsQ0FBQyxXQUFXLENBQUUsRUFDaEQsQ0FBRSxLQUFRLFlBQWEsUUFBVyxDQUFDLGFBQWEsQ0FBRSxFQUNsRCxDQUFFLEtBQVEsWUFBYSxRQUFXLENBQUMsYUFBYSxDQUFFLEVBQ2xELENBQUUsS0FBUSxXQUFZLFFBQVcsQ0FBQyxRQUFRLENBQUUsRUFDNUMsQ0FBRSxLQUFRLDJCQUE0QixRQUFXLENBQUMsU0FBVSxRQUFRLENBQUUsRUFDdEUsQ0FBRSxLQUFRLFdBQVksUUFBVyxDQUFDLDBCQUEwQixDQUFFLEVBQzlELENBQUUsS0FBUSwyQkFBNEIsUUFBVyxDQUFDLFNBQVUsU0FBVSxRQUFRLENBQUUsRUFDaEYsQ0FBRSxLQUFRLFdBQVksUUFBVyxDQUFDLDBCQUEwQixDQUFFLEVBQzlELENBQUUsS0FBUSwyQkFBNEIsUUFBVyxDQUFDLFNBQVUsU0FBVSxTQUFVLFFBQVEsQ0FBRSxFQUMxRixDQUFFLEtBQVEsV0FBWSxRQUFXLENBQUMsMEJBQTBCLENBQUUsRUFDOUQsQ0FBRSxLQUFRLHdCQUF5QixRQUFXLENBQUMsQ0FBRSxRQUFXLEdBQUksRUFBRyxVQUFVLENBQUUsRUFDL0UsQ0FBRSxLQUFRLHdCQUF5QixRQUFXLENBQUMsd0JBQXlCLHdCQUF5Qix3QkFBeUIsd0JBQXlCLHdCQUF5Qix3QkFBeUIsdUJBQXVCLENBQUUsRUFDOU4sQ0FBRSxLQUFRLFlBQWEsUUFBVyxDQUFDLFdBQVksdUJBQXVCLENBQUUsRUFDeEUsQ0FBRSxLQUFRLCtDQUFnRCxRQUFXLENBQUMsQ0FBRSxRQUFXLEdBQUksRUFBRyxVQUFVLENBQUUsRUFDdEcsQ0FBRSxLQUFRLCtDQUFnRCxRQUFXLENBQUMsK0NBQWdELCtDQUFnRCwrQ0FBZ0QsK0NBQWdELDhDQUE4QyxDQUFFLEVBQ3RULENBQUUsS0FBUSxtQ0FBb0MsUUFBVyxDQUFDLFdBQVksOENBQThDLENBQUUsRUFDdEgsQ0FBRSxLQUFRLG1CQUFvQixRQUFXLENBQUMsa0NBQWtDLEVBQUcsWUFBZSxFQUFHLEVBQ2pHLENBQUUsS0FBUSxtQkFBb0IsUUFBVyxDQUFDLEVBQUcsWUFBZSxJQUFNLElBQUssRUFDdkUsQ0FBRSxLQUFRLHFCQUFzQixRQUFXLENBQUMsQ0FBRSxRQUFXLEdBQUksRUFBRyxDQUFFLFFBQVcsR0FBSSxDQUFDLEVBQUcsWUFBZSxDQUFDLElBQU0sRUFBRSxLQUFLLEVBQUUsQ0FBRSxFQUN0SCxDQUFFLEtBQVEsK0NBQWdELFFBQVcsQ0FBQyxDQUFFLFFBQVcsR0FBSSxFQUFHLFVBQVUsQ0FBRSxFQUN0RyxDQUFFLEtBQVEsK0NBQWdELFFBQVcsQ0FBQywrQ0FBZ0QsK0NBQWdELCtDQUFnRCwrQ0FBZ0QsOENBQThDLENBQUUsRUFDdFQsQ0FBRSxLQUFRLG1DQUFvQyxRQUFXLENBQUMsV0FBWSw4Q0FBOEMsQ0FBRSxFQUN0SCxDQUFFLEtBQVEsbUJBQW9CLFFBQVcsQ0FBQyxrQ0FBa0MsRUFBRyxZQUFlLEVBQUcsRUFDakcsQ0FBRSxLQUFRLG1CQUFvQixRQUFXLENBQUMsRUFBRyxZQUFlLElBQU0sSUFBSyxFQUN2RSxDQUFFLEtBQVEsWUFBYSxRQUFXLENBQUMsbUJBQW9CLHFCQUFzQixrQkFBa0IsQ0FBRSxFQUNqRyxDQUFFLEtBQVEsMEJBQTJCLFFBQVcsQ0FBQyxDQUFFLFFBQVcsR0FBSSxFQUFHLFVBQVUsQ0FBRSxFQUNqRixDQUFFLEtBQVEsMEJBQTJCLFFBQVcsQ0FBQywwQkFBMkIsMEJBQTJCLDBCQUEyQiwwQkFBMkIseUJBQXlCLENBQUUsRUFDeEwsQ0FBRSxLQUFRLGNBQWUsUUFBVyxDQUFDLFdBQVksMEJBQTJCLENBQUUsUUFBVyxHQUFJLEVBQUcsc0JBQXNCLENBQUUsRUFDeEgsQ0FBRSxLQUFRLGlEQUFrRCxRQUFXLENBQUMsQ0FBRSxRQUFXLEdBQUksRUFBRyxVQUFVLENBQUUsRUFDeEcsQ0FBRSxLQUFRLGlEQUFrRCxRQUFXLENBQUMsaURBQWtELGlEQUFrRCxnREFBZ0QsQ0FBRSxFQUM5TixDQUFFLEtBQVEscUNBQXNDLFFBQVcsQ0FBQyxXQUFZLGdEQUFnRCxDQUFFLEVBQzFILENBQUUsS0FBUSxxQkFBc0IsUUFBVyxDQUFDLG9DQUFvQyxFQUFHLFlBQWUsRUFBRyxFQUNyRyxDQUFFLEtBQVEscUJBQXNCLFFBQVcsQ0FBQyxFQUFHLFlBQWUsSUFBTSxJQUFLLEVBQ3pFLENBQUUsS0FBUSx1QkFBd0IsUUFBVyxDQUFDLENBQUUsUUFBVyxHQUFJLEVBQUcsQ0FBRSxRQUFXLEdBQUksQ0FBQyxFQUFHLFlBQWUsQ0FBQyxJQUFNLEVBQUUsS0FBSyxFQUFFLENBQUUsRUFDeEgsQ0FBRSxLQUFRLGlEQUFrRCxRQUFXLENBQUMsQ0FBRSxRQUFXLEdBQUksRUFBRyxVQUFVLENBQUUsRUFDeEcsQ0FBRSxLQUFRLGlEQUFrRCxRQUFXLENBQUMsaURBQWtELGlEQUFrRCxnREFBZ0QsQ0FBRSxFQUM5TixDQUFFLEtBQVEscUNBQXNDLFFBQVcsQ0FBQyxXQUFZLGlEQUFrRCxDQUFFLFFBQVcsR0FBSSxDQUFDLENBQUUsRUFDOUksQ0FBRSxLQUFRLHFCQUFzQixRQUFXLENBQUMsb0NBQW9DLEVBQUcsWUFBZSxFQUFHLEVBQ3JHLENBQUUsS0FBUSxxQkFBc0IsUUFBVyxDQUFDLEVBQUcsWUFBZSxJQUFNLElBQUssRUFDekUsQ0FBRSxLQUFRLGNBQWUsUUFBVyxDQUFDLHFCQUFzQix1QkFBd0IscUJBQXNCLHNCQUFzQixDQUFFLEVBQ2pJLENBQUUsS0FBUSxRQUFTLFFBQVcsQ0FBQyxPQUFPLEVBQUcsWUFBZSxFQUFHLEVBQzNELENBQUUsS0FBUSxnQkFBaUIsUUFBVyxDQUFDLDBCQUEwQixFQUFHLFlBQWUsRUFBRyxFQUN0RixDQUFFLEtBQVEsY0FBZSxRQUFXLENBQUMsYUFBYSxFQUFHLFlBQWUsRUFBRyxFQUN2RSxDQUFFLEtBQVEsaUJBQWtCLFFBQVcsQ0FBQyxjQUFjLEVBQUcsWUFBZSxFQUFHLEVBQzNFLENBQUUsS0FBUSxtQkFBb0IsUUFBVyxDQUFDLDJCQUEyQixFQUFHLFlBQWUsRUFBRyxFQUMxRixDQUFFLEtBQVEsU0FBVSxRQUFXLENBQUMsYUFBYSxFQUFHLFlBQWUsRUFBRyxFQUNsRSxDQUFFLEtBQVEsU0FBVSxRQUFXLENBQUMsQ0FBRSxRQUFXLEdBQUssQ0FBQyxFQUFHLFlBQWUsRUFBRyxDQUM1RSxFQUNBLFlBQWEsY0FDakIsRUFDQSxHQUFRLFFBQVUsMkJDcktsQixJQUFJLEdBQW1CLElBQVEsR0FBSyxpQkFBb0IsUUFBUyxDQUFDLEVBQUssQ0FDbkUsT0FBUSxHQUFPLEVBQUksV0FBYyxFQUFNLENBQUUsUUFBVyxDQUFJLEdBRTVELE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxHQUFRLGFBQWUsR0FBUSwyQkFBNkIsR0FBUSxVQUFZLEdBQVEscUJBQXVCLEdBQVEsTUFBYSxPQUVwSSxJQUFNLFFBQ0EsR0FBWSxPQUFvQyxFQUN0RCxHQUFVLFFBQVEsWUFBYyxVQUNoQyxJQUFNLEdBQWtCLFdBQVEsYUFBYSxHQUFVLE9BQU8sRUFFOUQsU0FBUyxFQUFLLENBQUMsRUFBUyxDQUdwQixHQUFJLEVBQVEsT0FEVSxJQUVsQixNQUFVLE1BQU0sa0JBQWtCLEVBRXRDLElBQU0sRUFBUyxJQUFZLFVBQU8sRUFBTyxFQUV6QyxHQURBLEVBQU8sS0FBSyxDQUFPLEVBQ2YsRUFBTyxRQUFRLFNBQVcsRUFDMUIsTUFBVSxNQUFNLDJDQUEyQyxFQUcvRCxJQUFNLEVBQVMsRUFBUSxZQUFZLEdBQUcsRUFDaEMsRUFBUyxFQUFRLFVBQVUsRUFBUyxDQUFDLEVBQzNDLEdBQUksRUFBTyxLQUFPLElBQUssQ0FDbkIsR0FBSSxFQUFPLE9BQVMsSUFDaEIsTUFBVSxNQUFNLGlCQUFpQixFQUVyQyxJQUFNLEVBQVMsRUFBTyxNQUFNLEdBQUcsRUFDL0IsR0FBSSxFQUFPLE9BQVMsRUFDaEIsTUFBVSxNQUFNLDRCQUE0QixFQUVoRCxHQUFJLEVBQU8sRUFBTyxPQUFTLEdBQUcsT0FBUyxFQUNuQyxNQUFVLE1BQU0sa0NBQWtDLEVBS3RELEdBSEEsRUFBTyxLQUFLLFFBQVMsQ0FBQyxFQUFHLEVBQUcsQ0FDeEIsT0FBTyxFQUFFLE9BQVMsRUFBRSxPQUN2QixFQUNHLEVBQU8sR0FBRyxPQUFTLEdBQ25CLE1BQVUsTUFBTSx1QkFBdUIsRUFHL0MsT0FBTyxFQUFPLFFBQVEsR0FFMUIsR0FBUSxNQUFRLEdBR2hCLFNBQVMsRUFBb0IsQ0FBQyxFQUFZLENBU3RDLE9BUmlCLFFBQVMsRUFBRyxDQUN6QixJQUFNLEVBQVcsRUFBVyxRQUFRLEdBQUcsRUFDdkMsR0FBSSxJQUFhLEdBQ2IsT0FBTyxFQUVYLE9BQU8sRUFBVyxPQUFPLEVBQUcsQ0FBUSxHQUNyQyxFQUNxQixRQUFRLE1BQU8sRUFBRSxFQUMxQixZQUFZLEVBRS9CLEdBQVEscUJBQXVCLEdBRy9CLFNBQVMsRUFBUyxDQUFDLEVBQVMsQ0FDeEIsSUFBSSxFQUFJLEVBQ1IsSUFBTSxFQUFJLEdBQU0sQ0FBTyxFQUNqQixHQUFVLEVBQUssRUFBRSxXQUFXLGtCQUFvQixNQUFRLElBQVksT0FBSSxFQUFLLEVBQUUsV0FBVyxXQUFXLFlBQVksRUFFdkgsTUFBTyxJQURRLEVBQUssRUFBRSxVQUFVLGdCQUFrQixNQUFRLElBQVksT0FBSSxFQUFLLEdBQXFCLEVBQUUsVUFBVSxTQUFTLEtBQ3RHLElBRXZCLEdBQVEsVUFBWSxHQUNwQixTQUFTLEVBQTBCLENBQUMsRUFBZSxDQUkvQyxNQUFPLElBSFUsRUFBYyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUcsRUFBYyxPQUFTLENBQUMsRUFDaEQsUUFBUSxhQUFjLElBQUksRUFDekIsUUFBUSxlQUFnQixNQUFNLEtBRzlELEdBQVEsMkJBQTZCLEdBS3JDLFNBQVMsRUFBWSxDQUFDLEVBQVMsQ0FDM0IsSUFBSSxFQUNKLElBQU0sRUFBSSxHQUFNLENBQU8sRUFDakIsR0FBVSxFQUFLLEVBQUUsV0FBVyxrQkFBb0IsTUFBUSxJQUFZLE9BQUksRUFBSyxFQUFFLFdBQVcsV0FBVyxZQUFZLEVBSXZILE1BQU8sR0FITyxFQUFFLFVBQVUsYUFDcEIsR0FBMkIsRUFBRSxVQUFVLFlBQVksRUFDbkQsRUFBRSxVQUFVLGFBQ0MsSUFFdkIsR0FBUSxhQUFlLDhCQ3pGdkIsSUFBSSxHQUFTLE9BQU8sVUFBVSxlQUMxQixHQUFRLE9BQU8sVUFBVSxVQUNELGVBQXhCLEdBQ2MseUJBQWQsSUFBTyxPQUVQLEdBQVUsUUFBZ0IsQ0FBQyxFQUFLLENBQ25DLEdBQUksT0FBTyxNQUFNLFVBQVksV0FDNUIsT0FBTyxNQUFNLFFBQVEsQ0FBRyxFQUd6QixPQUFPLEdBQU0sS0FBSyxDQUFHLElBQU0sa0JBR3hCLEdBQWdCLFFBQXNCLENBQUMsRUFBSyxDQUMvQyxHQUFJLENBQUMsR0FBTyxHQUFNLEtBQUssQ0FBRyxJQUFNLGtCQUMvQixNQUFPLEdBR1IsSUFBSSxFQUFvQixHQUFPLEtBQUssRUFBSyxhQUFhLEVBQ2xELEVBQW1CLEVBQUksYUFBZSxFQUFJLFlBQVksV0FBYSxHQUFPLEtBQUssRUFBSSxZQUFZLFVBQVcsZUFBZSxFQUU3SCxHQUFJLEVBQUksYUFBZSxDQUFDLEdBQXFCLENBQUMsRUFDN0MsTUFBTyxHQUtSLElBQUksRUFDSixJQUFLLEtBQU8sRUFBSyxDQUVqQixPQUFPLE9BQU8sRUFBUSxLQUFlLEdBQU8sS0FBSyxFQUFLLENBQUcsR0FJdEQsR0FBYyxRQUFvQixDQUFDLEVBQVEsRUFBUyxDQUN2RCxHQUFJLElBQWtCLEVBQVEsT0FBUyxZQUN0QyxHQUFlLEVBQVEsRUFBUSxLQUFNLENBQ3BDLFdBQVksR0FDWixhQUFjLEdBQ2QsTUFBTyxFQUFRLFNBQ2YsU0FBVSxFQUNYLENBQUMsRUFFRCxPQUFPLEVBQVEsTUFBUSxFQUFRLFVBSzdCLEdBQWMsUUFBb0IsQ0FBQyxFQUFLLEVBQU0sQ0FDakQsR0FBSSxJQUFTLGFBQ1osR0FBSSxDQUFDLEdBQU8sS0FBSyxFQUFLLENBQUksRUFDekIsT0FDTSxRQUFJLEdBR1YsT0FBTyxHQUFLLEVBQUssQ0FBSSxFQUFFLE1BSXpCLE9BQU8sRUFBSSxJQUdaLEdBQU8sUUFBVSxTQUFTLENBQU0sRUFBRyxDQUNsQyxJQUFJLEVBQVMsRUFBTSxFQUFLLEVBQU0sRUFBYSxFQUN2QyxFQUFTLFVBQVUsR0FDbkIsRUFBSSxFQUNKLEVBQVMsVUFBVSxPQUNuQixFQUFPLEdBR1gsR0FBSSxPQUFPLElBQVcsVUFDckIsRUFBTyxFQUNQLEVBQVMsVUFBVSxJQUFNLENBQUMsRUFFMUIsRUFBSSxFQUVMLEdBQUksR0FBVSxNQUFTLE9BQU8sSUFBVyxVQUFZLE9BQU8sSUFBVyxXQUN0RSxFQUFTLENBQUMsRUFHWCxLQUFPLEVBQUksRUFBUSxFQUFFLEVBR3BCLEdBRkEsRUFBVSxVQUFVLEdBRWhCLEdBQVcsTUFFZCxJQUFLLEtBQVEsRUFLWixHQUpBLEVBQU0sR0FBWSxFQUFRLENBQUksRUFDOUIsRUFBTyxHQUFZLEVBQVMsQ0FBSSxFQUc1QixJQUFXLEdBRWQsR0FBSSxHQUFRLElBQVMsR0FBYyxDQUFJLElBQU0sRUFBYyxHQUFRLENBQUksSUFBSyxDQUMzRSxHQUFJLEVBQ0gsRUFBYyxHQUNkLEVBQVEsR0FBTyxHQUFRLENBQUcsRUFBSSxFQUFNLENBQUMsRUFFckMsT0FBUSxHQUFPLEdBQWMsQ0FBRyxFQUFJLEVBQU0sQ0FBQyxFQUk1QyxHQUFZLEVBQVEsQ0FBRSxLQUFNLEVBQU0sU0FBVSxFQUFPLEVBQU0sRUFBTyxDQUFJLENBQUUsQ0FBQyxFQUdqRSxRQUFJLE9BQU8sRUFBUyxJQUMxQixHQUFZLEVBQVEsQ0FBRSxLQUFNLEVBQU0sU0FBVSxDQUFLLENBQUMsR0FRdkQsT0FBTzs7OzJvM0JDakhSLElBQUksUUFFQSxHQUFPLENBQ1QsZUFDQSxpQkFDQSxlQUNGLEVBRUksR0FBWSxDQUFDLEVBRWpCLE9BQU8sS0FBSyxFQUFJLEVBQUUsUUFBUSxRQUFTLENBQUMsRUFBTSxDQUN4QyxHQUFLLEdBQU0sUUFBUSxRQUFTLENBQUMsRUFBVyxDQUN0QyxHQUFVLEVBQVUsUUFBVSxHQUFPLEVBQVcsQ0FBRSxLQUFNLENBQUssQ0FBQyxFQUMvRCxFQUNGLEVBRUQsR0FBSyxnQkFBOEMsT0FBTyxRQUFTLENBQUMsRUFBTSxDQUN4RSxNQUFPLENBQUMsR0FBVSxFQUFLLFFBQ3hCLEVBRUQsR0FBSyxXQUFXLFFBQVEsUUFBUyxDQUFDLEVBQVcsQ0FDM0MsR0FBVSxFQUFVLFFBQVUsR0FBTyxFQUFXLENBQUUsS0FBTSxZQUFhLENBQUMsRUFDdkUsRUFHRCxHQUFPLFFBQVUsR0FBTyxHQUFNLENBQUUsVUFBVyxFQUFVLENBQUMsNkJDM0J0RCxJQUFRLGdCQUNBLHVCQUNGLFFBRU4sU0FBUyxFQUFRLENBQUMsRUFBUyxDQUN6QixHQUFJLENBRUYsT0FEQSxHQUFjLENBQU8sRUFDZCxHQUNQLE1BQU8sRUFBSyxDQUNaLE1BQU8sSUFJWCxHQUFPLFFBQVUsQ0FBQyxJQUFVLENBQzFCLElBQU0sRUFBTSxHQUFNLENBQUssRUFDdkIsR0FBSSxFQUFJLFNBQVcsVUFBWSxFQUFJLEdBQUcsTUFBTSxFQUFRLEVBQ2xELE1BQU8sR0FFVCxHQUFJLEVBQUksWUFBYyxZQUFzQixhQUFVLEVBQUksUUFDeEQsTUFBTyxHQUVULE1BQU8sK0JDcEJULEdBQU8sUUFDTCx1S0NGRixJQUFRLGVBRVIsR0FBTyxRQUFVLENBQUMsSUFBVSxDQUMxQixHQUFJLENBRUYsT0FEQSxHQUFNLENBQUssRUFDSixHQUNQLE1BQU8sRUFBSyxDQUNaLE1BQU8saUJDUHdLLFNBQVMsRUFBWSxDQUFDLEVBQUksQ0FBQyxPQUFPLEtBQUssR0FBK3RDLFNBQVMsRUFBYyxDQUFDLEVBQUssRUFBUyxDQUFDLEtBQUssR0FBTSxHQUFjLEtBQUssS0FBSyxDQUFRLE1BQXZnRCxHQUEwQyxHQUE0QixHQUE4QixHQUE4QixHQUE2RixHQUFXLENBQUMsRUFBTyxFQUFJLElBQWUsQ0FBQyxJQUFJLEVBQUssR0FBSyxPQUFPLElBQU0sVUFBVSxPQUFPLElBQU0sV0FBVyxHQUFrQixDQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsS0FBTyxFQUFLLEdBQUcsQ0FBQyxHQUFhLEtBQUssRUFBTyxDQUFHLEdBQUcsSUFBTSxVQUFVLEdBQVUsRUFBTyxFQUFJLENBQUMsSUFBSSxHQUFhLEtBQUssRUFBSSxDQUFHLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQWEsQ0FBQyxRQUFRLEtBQU8sRUFBSyxHQUFHLENBQUMsR0FBYSxLQUFLLEVBQWEsQ0FBRyxHQUFHLElBQU0sVUFBVSxHQUFVLEVBQWEsRUFBSSxDQUFDLElBQUksR0FBYSxLQUFLLEVBQUksQ0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsT0FBTyxJQUFlLEdBQWtCLEdBQWlCLEdBQVEsQ0FBQyxFQUFJLEVBQVcsSUFBUyxDQUFDLElBQUksRUFBUyxHQUFLLE1BQU0sT0FBTyxJQUFNLFNBQVMsR0FBRyxFQUFTLENBQUMsSUFBSSxFQUFNLEVBQVcsS0FBb0IsSUFBSSxRQUFRLEtBQW1CLElBQUksUUFBUSxFQUFPLEVBQU0sSUFBSSxDQUFHLEVBQUUsR0FBRyxFQUFPLE9BQU8sRUFBTyxFQUFPLEdBQUssS0FBSyxHQUFTLEdBQWEsQ0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRyxHQUFZLENBQUMsR0FBSyxDQUFDLEVBQUksWUFBWSxDQUFDLEdBQWEsS0FBSyxFQUFJLFNBQVMsRUFBRSxHQUFVLEVBQU8sVUFBVSxDQUFDLE1BQU0sRUFBSSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQU8sR0FBRyxHQUFLLE9BQU8sSUFBTSxVQUFVLE9BQU8sSUFBTSxZQUFZLFFBQVEsS0FBTyxHQUFrQixDQUFHLEVBQUUsR0FBRyxDQUFDLEdBQWEsS0FBSyxFQUFHLENBQUcsRUFBRSxHQUFVLEVBQUcsRUFBSSxDQUFDLElBQUksR0FBYSxLQUFLLEVBQUksQ0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFTLEVBQU0sSUFBSSxFQUFJLENBQUUsRUFBRSxPQUFPLEdBQVEsR0FBVyxDQUFDLEVBQUcsSUFBTSxLQUFLLEdBQUssR0FBSSxFQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUcsRUFBRSxFQUFJLFNBQWEsR0FBYyxDQUFDLElBQUksRUFBMEYsR0FBUyxDQUFDLEVBQU8sSUFBTSxDQUFDLFFBQVEsS0FBUSxFQUFJLEdBQVUsRUFBTyxFQUFLLENBQUMsSUFBSSxFQUFJLEdBQU0sV0FBVyxHQUFHLGFBQWEsR0FBRyxJQUFJLEdBQWUsS0FBSyxFQUFJLENBQUksQ0FBQyxDQUFDLEdBQU8sR0FBaytILEdBQWtKLEdBQWdELGtCQUF6MEwsR0FBUyxPQUFPLE9BQVUsQ0FBQyxlQUFlLEdBQWEsZUFBZSxHQUFVLG9CQUFvQixJQUFtQixPQUFXLEdBQWEsT0FBTyxVQUFVLGVBQXFnRCxHQUFpQixHQUFXLFFBQVEsQ0FBQyxFQUFRLEVBQU8sQ0FBQyxJQUFJLEVBQWMsUUFBUSxFQUFjLGFBQWEsRUFBZ0IsNEJBQTRCLEVBQU8sQ0FBQyxTQUFTLGtEQUFrRCxZQUFZLGlEQUFpRCxnQkFBZ0IsZUFBZSxFQUFFLEVBQU0sS0FBSyxNQUFNLEVBQW1CLE9BQU8sYUFBYSxTQUFTLENBQUssQ0FBQyxFQUFLLENBQUMsTUFBTSxXQUFXLEVBQU8sRUFBSyxFQUFFLFNBQVMsQ0FBRyxDQUFDLEVBQU0sRUFBUyxDQUFDLElBQUksRUFBTyxDQUFDLEVBQUUsRUFBTyxFQUFNLE9BQU8sTUFBTSxJQUFTLEVBQU8sR0FBUSxFQUFTLEVBQU0sRUFBTyxFQUFFLE9BQU8sRUFBTyxTQUFTLENBQVMsQ0FBQyxFQUFPLEVBQVMsQ0FBQyxJQUFJLEVBQU0sRUFBTyxNQUFNLEdBQUcsRUFBRSxFQUFPLEdBQUcsR0FBRyxFQUFNLE9BQU8sRUFBRSxFQUFPLEVBQU0sR0FBRyxJQUFJLEVBQU8sRUFBTSxHQUFHLEVBQU8sRUFBTyxRQUFRLEVBQWdCLEdBQUcsRUFBRSxJQUFJLEdBQU8sRUFBTyxNQUFNLEdBQUcsRUFBRSxHQUFRLEVBQUksR0FBTyxDQUFRLEVBQUUsS0FBSyxHQUFHLEVBQUUsT0FBTyxFQUFPLEdBQVEsU0FBUyxDQUFVLENBQUMsRUFBTyxDQUFDLElBQUksRUFBTyxDQUFDLEVBQUUsRUFBUSxFQUFFLEVBQU8sRUFBTyxPQUFPLE1BQU0sRUFBUSxFQUFPLENBQUMsSUFBSSxHQUFNLEVBQU8sV0FBVyxHQUFTLEVBQUUsR0FBRyxJQUFPLE9BQU8sSUFBTyxPQUFPLEVBQVEsRUFBTyxDQUFDLElBQUksR0FBTSxFQUFPLFdBQVcsR0FBUyxFQUFFLElBQUksR0FBTSxRQUFRLE1BQU0sRUFBTyxPQUFPLEdBQU0sT0FBTyxLQUFLLEdBQU0sTUFBTSxLQUFLLEVBQU8sT0FBTyxLQUFLLEVBQUssRUFBRSxJQUFlLE9BQU8sS0FBSyxFQUFLLEVBQUUsT0FBTyxFQUFPLElBQUksRUFBVyxDQUFDLElBQWEsT0FBTyxjQUFjLEdBQUcsQ0FBVSxFQUFFLEVBQWEsUUFBUSxDQUFDLEVBQVUsQ0FBQyxHQUFHLEdBQVcsSUFBSSxFQUFVLEdBQUcsTUFBTyxLQUFJLEVBQVUsSUFBSSxHQUFHLEdBQVcsSUFBSSxFQUFVLEdBQUcsT0FBTyxFQUFVLEdBQUcsR0FBRyxHQUFXLElBQUksRUFBVSxJQUFJLE9BQU8sRUFBVSxHQUFHLE1BQU8sS0FBSSxFQUFhLFFBQVEsQ0FBQyxFQUFNLEVBQUssQ0FBQyxPQUFPLEVBQU0sR0FBRyxJQUFJLEVBQU0sTUFBTSxHQUFNLElBQUksSUFBSSxFQUFNLFFBQVEsQ0FBQyxFQUFNLEVBQVUsRUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQU0sRUFBVSxFQUFNLEVBQU0sR0FBRyxFQUFFLEdBQU8sRUFBRSxHQUFPLEVBQU0sRUFBTSxDQUFTLEVBQUUsS0FBSyxFQUFNLElBQUksR0FBRyxHQUFHLEVBQU0sRUFBTSxFQUFNLEVBQUUsRUFBRSxPQUFPLEVBQU0sRUFBRSxHQUFHLEdBQU8sRUFBTSxHQUFHLEdBQUcsRUFBTyxRQUFRLENBQUMsRUFBTSxDQUFDLElBQUksRUFBTyxDQUFDLEVBQUUsRUFBWSxFQUFNLE9BQU8sRUFBRSxFQUFFLEdBQUUsSUFBSSxHQUFLLEdBQUcsR0FBTSxFQUFNLFlBQVksR0FBRyxFQUFFLEdBQUcsR0FBTSxFQUFFLEdBQU0sRUFBRSxRQUFRLEdBQUUsRUFBRSxHQUFFLEdBQU0sRUFBRSxHQUFFLENBQUMsR0FBRyxFQUFNLFdBQVcsRUFBQyxHQUFHLElBQUksRUFBTSxXQUFXLEVBQUUsRUFBTyxLQUFLLEVBQU0sV0FBVyxFQUFDLENBQUMsRUFBRSxRQUFRLEdBQU0sR0FBTSxFQUFFLEdBQU0sRUFBRSxFQUFFLEdBQU0sR0FBYSxDQUFDLElBQUksR0FBSyxFQUFFLFFBQVEsR0FBRSxFQUFFLEdBQUUsSUFBSSxJQUFHLEdBQUcsQ0FBQyxHQUFHLElBQU8sRUFBWSxFQUFNLGVBQWUsRUFBRSxJQUFJLEdBQU0sRUFBYSxFQUFNLFdBQVcsSUFBTyxDQUFDLEVBQUUsR0FBRyxJQUFPLEdBQUcsRUFBTSxlQUFlLEVBQUUsR0FBRyxHQUFNLEdBQU8sV0FBVyxHQUFHLEVBQUMsRUFBRSxFQUFNLFVBQVUsRUFBRSxHQUFHLEdBQU0sR0FBRSxJQUFJLEdBQUUsSUFBRyxHQUFLLEVBQUUsSUFBRyxHQUFLLEdBQUcsR0FBRyxHQUFFLEdBQUssR0FBRyxHQUFNLEdBQUUsTUFBTSxJQUFJLEdBQVcsR0FBRyxHQUFFLEdBQUcsR0FBRSxFQUFNLFdBQVcsRUFBVSxFQUFFLEVBQU0sVUFBVSxFQUFFLElBQUcsR0FBVyxJQUFJLEdBQUksRUFBTyxPQUFPLEVBQUUsR0FBRyxHQUFLLEVBQU0sRUFBRSxHQUFLLEdBQUksSUFBTSxDQUFDLEVBQUUsRUFBTSxFQUFFLEVBQUcsRUFBRSxXQUFXLEdBQUUsRUFBTSxVQUFVLEVBQUUsSUFBRyxFQUFNLEVBQUUsRUFBRyxFQUFFLEdBQUcsR0FBSSxFQUFPLE9BQU8sSUFBSSxFQUFFLEVBQUMsRUFBRSxPQUFPLE9BQU8sY0FBYyxHQUFHLENBQU0sR0FBRyxFQUFPLFFBQVEsQ0FBQyxFQUFNLENBQUMsSUFBSSxFQUFPLENBQUMsRUFBRSxFQUFNLEVBQVcsQ0FBSyxFQUFFLElBQUksRUFBWSxFQUFNLE9BQU8sRUFBRSxJQUFJLEdBQU0sRUFBRSxHQUFLLEdBQUcsUUFBUSxNQUFnQixFQUFNLEdBQUcsR0FBYSxJQUFJLEVBQU8sS0FBSyxFQUFtQixFQUFZLENBQUMsRUFBRSxJQUFJLEdBQVksRUFBTyxPQUFPLEdBQWUsR0FBWSxHQUFHLEdBQVksRUFBTyxLQUFLLEdBQUcsRUFBRSxNQUFNLEdBQWUsRUFBWSxDQUFDLElBQUksR0FBRSxXQUFXLFFBQVEsTUFBZ0IsRUFBTSxHQUFHLElBQWMsR0FBRyxHQUFhLEdBQUUsR0FBRSxHQUFhLElBQUksR0FBc0IsR0FBZSxFQUFFLEdBQUcsR0FBRSxFQUFFLEdBQU8sV0FBVyxJQUFPLEVBQXFCLEVBQUUsRUFBTSxVQUFVLEVBQUUsS0FBUSxHQUFFLEdBQUcsR0FBc0IsRUFBRSxHQUFFLFFBQVEsTUFBZ0IsRUFBTSxDQUFDLEdBQUcsR0FBYSxHQUFHLEVBQUUsR0FBTSxXQUFXLEVBQU0sVUFBVSxFQUFFLEdBQUcsS0FBZSxFQUFFLENBQUMsSUFBSSxHQUFFLEdBQU0sUUFBUSxHQUFFLElBQUksSUFBRyxHQUFHLENBQUMsSUFBSSxHQUFFLElBQUcsR0FBSyxFQUFFLElBQUcsR0FBSyxHQUFHLEdBQUcsR0FBRSxHQUFLLEdBQUcsR0FBRSxHQUFFLE1BQU0sSUFBSSxHQUFRLEdBQUUsR0FBRSxHQUFXLEdBQUcsR0FBRSxFQUFPLEtBQUssRUFBbUIsRUFBYSxHQUFFLEdBQVEsR0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUUsRUFBTSxHQUFRLEVBQVUsRUFBRSxFQUFPLEtBQUssRUFBbUIsRUFBYSxHQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBSyxFQUFNLEdBQU0sR0FBc0IsS0FBaUIsRUFBVyxFQUFFLEdBQU0sRUFBRSxFQUFFLElBQWdCLEVBQUUsR0FBTSxFQUFFLEVBQUUsT0FBTyxFQUFPLEtBQUssRUFBRSxHQUFHLEVBQVUsUUFBUSxDQUFDLEVBQU0sQ0FBQyxPQUFPLEVBQVUsRUFBTSxRQUFRLENBQUMsRUFBTyxDQUFDLE9BQU8sRUFBYyxLQUFLLENBQU0sRUFBRSxFQUFPLEVBQU8sTUFBTSxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBTyxHQUFHLEVBQVEsUUFBUSxDQUFD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QUMsR0FBYyxDQUFRLEVBQ3ZCLE9BQU8sRUFFWCxNQUFPLElBQUksSUFBb0IsQ0FNM0IsSUFBTyxFQUFPLEdBQVUsRUFLeEIsR0FBSSxFQUhBLGFBQWlCLE9BQ2pCLEdBQWMsQ0FBSyxHQUNuQixHQUFjLENBQU0sR0FFcEIsS0FBSyxnQkFBZ0IsQ0FBUSxFQUVqQyxHQUFJLE9BQU8sSUFBYSxXQUNwQixFQUFTLEdBQUcsQ0FBSSxHQUtwQixlQUFlLENBQUMsRUFBOEIsQ0FDbEQsUUFBWSxFQUFZLEtBQVcsS0FBSyxZQUFZLFVBQVUsQ0FBTSxFQUNoRSxLQUFLLElBQUksMkJBQTJCLFFBQWlCLEdBQVEsRUFvQjdELE1BQXNDLENBQzFDLEVBQ0EsRUFDSSxDQUNKLFFBQVcsS0FBTyxFQUFNLE9BQU8sRUFBRyxDQUM5QixJQUFNLEVBQWMsR0FBd0IsQ0FBcUIsRUFDN0QsRUFBSyxHQUFhLEdBQ3RCLEdBQUksR0FBVyxDQUFXLEVBQUcsQ0FDekIsSUFBTSxFQUFTLEVBQStCLE1BRTlDLEVBQUssT0FBTyxJQUFVLFNBQVcsRUFBUSxFQUFNLEdBRW5ELEtBQUssSUFBSSxhQUFhLFNBQVksR0FBSSxFQUN0QyxLQUFLLFFBQVEsS0FBSyxFQUFNLENBQVcsR0FHL0MsRUFFQyxDQUFDLElBQW9DLENBQ2xDLEVBQU8sZ0JBQWtCLEtBRXpCLE9BQU8sYUFBZSxTQUNmLFdBQ0QsQ0FBQyxDQUNYIiwKICAiZGVidWdJZCI6ICI4QTQzNTAzMTg4NTUwQjBFNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==