@ditojs/admin 1.0.0 → 1.3.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.
- package/LICENSE +20 -0
- package/dist/dito-admin.es.js +4 -4
- package/dist/dito-admin.umd.js +4 -4
- package/dist/style.css +1 -1
- package/package.json +7 -6
- package/src/components/DitoElement.vue +0 -3
- package/src/components/DitoRoot.vue +1 -0
- package/src/types/TypeColor.vue +30 -30
- package/src/types/TypeMultiselect.vue +2 -3
package/dist/dito-admin.umd.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
var Eu=Object.defineProperty,Vu=Object.defineProperties;var ku=Object.getOwnPropertyDescriptors;var rt=Object.getOwnPropertySymbols;var Ds=Object.prototype.hasOwnProperty,Ps=Object.prototype.propertyIsEnumerable;var Et=(v,S,F)=>S in v?Eu(v,S,{enumerable:!0,configurable:!0,writable:!0,value:F}):v[S]=F,h=(v,S)=>{for(var F in S||(S={}))Ds.call(S,F)&&Et(v,F,S[F]);if(rt)for(var F of rt(S))Ps.call(S,F)&&Et(v,F,S[F]);return v},x=(v,S)=>Vu(v,ku(S));var R=(v,S)=>{var F={};for(var I in v)Ds.call(v,I)&&S.indexOf(I)<0&&(F[I]=v[I]);if(v!=null&&rt)for(var I of rt(v))S.indexOf(I)<0&&Ps.call(v,I)&&(F[I]=v[I]);return F};var Vt=(v,S,F)=>(Et(v,typeof S!="symbol"?S+"":S,F),F);(function(v,S){typeof exports=="object"&&typeof module!="undefined"?module.exports=S(require("vue"),require("vue-js-modal"),require("vue-router"),require("vue-notification"),require("axios"),require("@ditojs/utils"),require("nanoid"),require("@ditojs/ui"),require("vuedraggable"),require("codeflask"),require("tinycolor2"),require("vue-color"),require("tiptap"),require("tiptap-commands"),require("tiptap-extensions"),require("vue-multiselect"),require("vue-upload-component"),require("filesize-parser"),require("filesize")):typeof define=="function"&&define.amd?define(["vue","vue-js-modal","vue-router","vue-notification","axios","@ditojs/utils","nanoid","@ditojs/ui","vuedraggable","codeflask","tinycolor2","vue-color","tiptap","tiptap-commands","tiptap-extensions","vue-multiselect","vue-upload-component","filesize-parser","filesize"],S):(v=typeof globalThis!="undefined"?globalThis:v||self,v["dito-admin"]=S(v.vue,v["vue-js-modal"],v["vue-router"],v["vue-notification"],v.axios,v["@ditojs/utils"],v.nanoid,v["@ditojs/ui"],v.vuedraggable,v.codeflask,v.tinycolor2,v["vue-color"],v.tiptap,v["tiptap-commands"],v["tiptap-extensions"],v["vue-multiselect"],v["vue-upload-component"],v["filesize-parser"],v.filesize))})(this,function(v,S,F,I,ws,o,Ss,T,xs,Os,js,Fs,X,Es,L,Vs,ks,Ls,Bs){"use strict";function q(t){return t&&typeof t=="object"&&"default"in t?t:{default:t}}var z=q(v),Ts=q(S),kt=q(F),Rs=q(I),qs=q(ws),it=q(xs),Is=q(Os),ot=q(js),Ms=q(Vs),As=q(ks),Ns=q(Ls),zs=q(Bs),Lt={title:"",routeComponents:[],user:null,loadCache:{},activeLabel:null,clipboardData:null};function B(t,e){return t?`${t}/${e}`:e}function Us(t){const e=o.parseDataPath(t);return e==null||e.pop(),e}function lt(t,e=!1){return e?Us(t):o.parseDataPath(t)}function Hs(t,e=!1){return o.normalizeDataPath(lt(t,e))}function Bt(t,e=!1){const s=lt(t,e);if(s){let n;do n=s.pop();while(n!=null&&o.isInteger(+n));if(n!=null)return s}return null}function Ks(t,e=!1){return o.normalizeDataPath(Bt(t,e))}function ut(t,e,s=!1){const n=lt(e,s);return n?o.getValueAtDataPath(t,n):null}function ct(t,e,s=!1){const n=Bt(e,s);return n?o.getValueAtDataPath(t,n):null}function Tt(t){const e=o.parseDataPath(t);return e[e.length-1]}function Ws(t){const e=Tt(t);return e==null||o.isInteger(+e)?null:e}function dt(t){const e=Tt(t),s=e==null?null:+e;return o.isInteger(s)?s:null}let Js=0;function Qs(t,e="id"){t[e]=`@${++Js}`}function Y(t){return/^@/.test(t)}function Gs(t,e="id"){return(t==null?void 0:t[e])!=null&&Object.keys(t).length===1}const ht=new WeakMap;function D(t,e,s){const n=ht.get(t),a=n[e];return a!==void 0||n.hasOwnProperty(e)?a:o.isFunction(s)?s():s}function Xs(t,e,s){ht.get(t)[e]=s}class O{constructor(e,s){var a;s=s?o.isFunction(s)?s():h({},s):{},(a=s.nested)!=null||(s.nested=!0),s.component=e;const n=Object.setPrototypeOf(s,e);ht.set(this,n)}static get(e,s){return s instanceof O?s:new O(e,s)}get nested(){return D(this,"nested",!0)}get value(){return D(this,"value",void 0)}get dataPath(){return D(this,"dataPath","")}get name(){return D(this,"name",()=>Ws(this.dataPath))}get index(){return D(this,"index",()=>dt(this.dataPath))}get itemDataPath(){return Hs(this.dataPath,this.nested)}get parentItemDataPath(){return Ks(this.dataPath,this.nested)}get itemIndex(){return dt(this.itemDataPath)}get parentItemIndex(){return dt(this.parentItemDataPath)}get item(){return D(this,"data",()=>ut(this.rootItem,this.dataPath,this.nested))}get parentItem(){const e=ct(this.rootItem,this.dataPath,this.nested)||null;return e!==this.item?e:null}get rootItem(){return D(this,"rootData",null)}get processedItem(){return D(this,"processedData",null)}get clipboardItem(){return D(this,"clipboardData",null)}get user(){return D(this,"user",null)}get api(){return D(this,"api",null)}get views(){return D(this,"views",null)}get itemLabel(){return D(this,"itemLabel",null)}get formLabel(){return D(this,"formLabel",null)}get component(){return D(this,"component",null)}get schemaComponent(){return D(this,"schemaComponent",null)}get formComponent(){return D(this,"formComponent",null)}get viewComponent(){return D(this,"viewComponent",null)}get dialogComponent(){return D(this,"dialogComponent",null)}get panelComponent(){return D(this,"panelComponent",null)}get resourceComponent(){return D(this,"resourceComponent",null)}get sourceComponent(){return D(this,"sourceComponent",null)}get option(){return D(this,"option",void 0)}get options(){return D(this,"options",void 0)}get query(){return D(this,"query",void 0)}get error(){return D(this,"error",void 0)}get wasNotified(){return D(this,"wasNotified",!1)}get request(){return e=>this.component.request(e)}get format(){return(e,s)=>this.component.format(e,s)}get navigate(){return e=>this.component.navigate(e)}get download(){return e=>this.component.download(e)}get getResourceUrl(){return e=>this.component.getResourceUrl(e)}get notify(){return e=>{this.component.notify(e),Xs(this,"wasNotified",!0)}}}var Ys={data(){return{$events:null}},methods:{on(t,e){if(o.isArray(t))for(const s of t)this.on(s,e);else if(o.isPlainObject(t))for(const s in t)this.on(s,t[s]);else{const s=this.$events||(this.$events=Object.create(null)),{callbacks:n}=s[t]||(s[t]={callbacks:[],queue:[]});n.push(e)}return this},once(t,e){const s=(...n)=>(this.off(t,s),e.apply(this,n));return s.callback=e,this.on(t,s)},off(t,e){var s;if(!arguments.length)delete this.$events;else if(o.isArray(t))for(const n of t)this.off(n,e);else if(o.isPlainObject(t))for(const n in t)this.off(n,t[n]);else{const n=(s=this.$events)==null?void 0:s[t];if(n)if(!e)delete this.$events[t];else{const{callbacks:a}=n,r=a.findIndex(i=>i===e||i.callback===e);r!==-1&&a.splice(r,1)}}return this},emit(t,...e){var n;const s=(n=this.$events)==null?void 0:n[t];if(s){const{queue:a,callbacks:r}=s;return new Promise(i=>{const l=async()=>{const c=a.shift();if(c){let u;for(const d of r)try{const g=await d.apply(this,c.args);g!==void 0&&(u=g)}catch(g){console.error(`Error during event handler for '${t}':`,g)}c.resolve(u),l()}};a.push({args:e,resolve:i}),a.length===1&&l()})}},hasListeners(t){var e;if(o.isArray(t)){for(const s of t)if(!this.hasListeners(s))return!1;return t.length>0}else return!!((e=this.$events)!=null&&e[t])},delegate(t,e){if(e)if(o.isArray(t))for(const s of t)this.delegate(s,e);else this.on(t,(...s)=>e.emit(t,...s));return this}}};const pt={Boolean:o.isBoolean,Number:o.isNumber,String:o.isString,Date:o.isDate,Array:o.isArray,Object:o.isObject,RegExp:o.isRegExp,Function:o.isFunction},Zs={Boolean:t=>!!t,Number:t=>+t,String:t=>String(t),Date:t=>o.isDate(t)?t:new Date(t),Array:t=>o.isArray(t)?t:o.isString(t)?t.split(","):o.asArray(t),Object:t=>o.isObject(t)?t:t===!0?{}:null,RegExp:t=>o.isRegExp(t)?t:new RegExp(t)};function mt(t,e){var s;if(t&&e!=null){for(const n of t)if((s=pt[n.name])!=null&&s.call(pt,e))return!0}return!1}function tn(t,e){const s=t&&Zs[t.name||t];return s?s(e):e}function Rt(t){return!!M(t.resource)}function M(t,e={}){var r;const a=e,{parent:s}=a,n=R(a,["parent"]);return t=o.isObject(t)?h(h({},n),t):o.isString(t)?x(h({},n),{path:t}):null,t&&s!==void 0&&t.parent===void 0&&!((r=t.path)!=null&&r.startsWith("/"))&&(t.parent=s,t.path||(t.path=".")),t}function ft(t,e){return t!=null&&(e==null?void 0:e.type)==="collection"?x(h({type:"member"},o.pickBy(e,(s,n)=>["method","path","parent"].includes(n))),{id:`${t}`}):null}const qt=new Set;function en(t){qt.has(t)||(qt.add(t),console.warn(t))}var _t={mixins:[Ys],inject:["api","$verbs","$views","$isPopulated","$schemaComponent","$routeComponent","$dataComponent","$sourceComponent","$resourceComponent","$dialogComponent","$panelComponent","$tabComponent"],provide(){return this.providesData?{$dataComponent:()=>this}:{}},data(){return{appState:Lt,overrides:null}},computed:{sourceSchema(){var t;return(t=this.meta)==null?void 0:t.schema},user(){return Lt.user},verbs(){return this.$verbs()},views(){return this.$views()},isPopulated(){return this.$isPopulated()},locale(){return this.api.locale},context(){return new O(this,{nested:!1})},rootComponent(){return this.$root.$children[0]},schemaComponent(){return this.$schemaComponent()},routeComponent(){return this.$routeComponent()},formComponent(){const t=this.routeComponent;return t!=null&&t.isForm?t:null},viewComponent(){const t=this.routeComponent;return t!=null&&t.isView?t:null},dataComponent(){return this.providesData?this:this.$dataComponent()},sourceComponent(){return this.$sourceComponent()},resourceComponent(){return this.$resourceComponent()},dialogComponent(){return this.$dialogComponent()},panelComponent(){return this.$panelComponent()},tabComponent(){return this.$tabComponent()},parentSchemaComponent(){var t;return(t=this.schemaComponent)==null?void 0:t.$parent.schemaComponent},parentRouteComponent(){var t;return(t=this.routeComponent)==null?void 0:t.$parent.routeComponent},parentFormComponent(){var t;return(t=this.formComponent)==null?void 0:t.$parent.formComponent},rootData(){var t;return(t=this.dataComponent)==null?void 0:t.data}},beforeCreate(){this.$uid=++sn},methods:{getStore(t){return this.store[t]},setStore(t,e){return this.$set(this.store,t,e)},getChildStore(t){return this.getStore(t)||this.setStore(t,{})},getSchemaValue(t,{type:e,default:s,schema:n=this.schema,callback:a=!0}={}){const r=e&&o.asArray(e);let i=n?o.isArray(t)?o.getValueAtDataPath(n,t,()=>{}):n[t]:void 0;if(i===void 0&&s!==void 0)return a&&o.isFunction(s)&&!mt(r,s)&&(s=s.call(this,this.context)),s;if(mt(r,i))return i;if(a&&o.isFunction(i)&&(i=i.call(this,this.context)),r&&i!=null&&!mt(r,i))for(const l of r){const c=tn(l,i);if(c!==i)return c}return i},getLabel(t,e){return t?this.getSchemaValue("label",{type:String,schema:t})||o.labelize(e||t.name):o.labelize(e)||""},labelize:o.labelize,getButtonAttributes(t,e){const s=this.verbs[t]||t;return{class:`dito-button-${s}`,title:(e==null?void 0:e.text)||o.labelize(s)}},getDragOptions(t,e=!1){return{animation:150,disabled:!t,handle:".dito-button-drag",dragClass:"dito-drag-active",chosenClass:"dito-drag-chosen",ghostClass:"dito-drag-ghost",fallbackClass:"dito-drag-fallback",forceFallback:e}},getQueryLink(t){return{query:t,hash:this.$route.hash}},shouldRender(t=null){return!!t&&this.getSchemaValue("if",{type:Boolean,default:!0,schema:t})},showDialog({components:t,buttons:e,data:s,settings:n={width:480,height:"auto",clickToClose:!1}}){return new Promise((a,r)=>{this.$modal.show(b.component("dito-dialog"),{components:t,buttons:e,data:s,promise:{resolve:a,reject:r}},n)})},getResourcePath(t){var e;return t=M(t),t.parent===void 0&&(t.parent=(e=this.dataComponent)==null?void 0:e.resource),this.api.resources.any(M(t))},getResourceUrl(t){const e=this.getResourcePath(t);let s=null;if(e){s=`${this.api.url.replace(/\/+$/,"")}/${e.replace(/^\/+/,"")}`;const{query:n}=t;if(n){const a=Object.entries(n).map(([r,i])=>`${encodeURIComponent(r)}=${encodeURIComponent(i)}`);s=`${s}?${a.join("&")}`}}return s},async sendRequest({method:t,url:e,resource:s,data:n,params:a,internal:r}){e=e||this.getResourcePath(s),t=t||(s==null?void 0:s.method);const i=!r&&this.api.isApiRequest(e);i&&await this.rootComponent.ensureUser();const l=await this.api.request({method:t,url:e,data:n,params:a});return i&&t==="patch"&&o.equals(s,ft(this.user.id,this.api.users))&&await this.rootComponent.fetchUser(),l},request(s){var n=s,{cache:t}=n,e=R(n,["cache"]);const a=t&&{global:this.appState,local:this.dataComponent}[t],r=a==null?void 0:a.loadCache,i=r&&`${e.method||"get"} ${e.url} ${JSON.stringify(e.params||"")} ${JSON.stringify(e.data||"")}`;if(r&&i in r)return r[i];const l=this.sendRequest(e).then(c=>c.data).catch(c=>{var d;const u=(d=c.response)==null?void 0:d.data;throw u?Object.assign(new Error(u.message),u):c});return r&&(r[i]=l),l},load(t){return en("load() is deprecated. Use request() instead."),this.request(t)},format(t,a={}){var r=a,{locale:e=this.api.locale,defaults:s=this.api.formats}=r,n=R(r,["locale","defaults"]);return o.format(t,h({locale:e,defaults:s},n))},async navigate(t){return new Promise(e=>{this.$router.push(t,()=>e(!0),()=>e(!1))})},download(t={}){o.isString(t)&&(t={url:t});const{url:e,filename:s}=t,n=document.createElement("a");n.href=e,s&&(n.download=s);const{body:a}=document;a.appendChild(n),n.click(),a.removeChild(n)},notify(t){this.rootComponent.notify(t)},closeNotifications(){this.rootComponent.closeNotifications()},setupSchemaFields(){this.setupMethods(),this.setupComputed(),this.setupEvents()},setupMethods(){for(const[t,e]of Object.entries(this.schema.methods||{}))o.isFunction(e)?this[t]=e:console.error(`Invalid method definition: ${t}: ${e}`)},setupComputed(){for(const[t,e]of Object.entries(this.schema.computed||{})){const s=o.isFunction(e)?{get:e}:o.isObject(e)&&o.isFunction(e.get)?e:null;s?Object.defineProperty(this,t,s):console.error(`Invalid computed property definition: ${t}: ${e}`)}},setupEvents(){const{watch:t,events:e}=this.schema;if(t){const n=o.isFunction(t)?t.call(this):t;o.isObject(n)&&this.$nextTick(()=>{for(const[a,r]of Object.entries(n)){const i=this.schemaComponent.getComponentByName(a)?`data.${a}`:a;this.$watch(i,r)}})}const s=(n,a,r)=>{o.isFunction(r)?this.on(o.hyphenate(a),r):console.error(`Invalid event definition: ${n}: ${r}`)};if(e)for(const[n,a]of Object.entries(e))s(n,n,a);for(const[n,a]of Object.entries(this.schema))/^on[A-Z]/.test(n)&&s(n,n.slice(2),a)},async emitEvent(t,{context:e=null,parent:s=null}={}){const n=this.hasListeners(t),a=s==null?void 0:s.hasListeners(t);if(n||a){["load","change"].includes(t)&&await this.$nextTick();const r=()=>e=O.get(this,e),i=n?await this.emit(t,r()):void 0;return a&&i!==!1&&s.emit(t,r()),i}},emitSchemaEvent(t,e){return this.schemaComponent.emitEvent(t,e)}}};let sn=0;var nn=Object.freeze(Object.defineProperty({__proto__:null,creditcard:{validate:t=>o.isCreditCard(t),message:"is invalid"},decimals:{validate:(t,e)=>{const s=e==="*"?"+":`{1,${e}}`;return new RegExp(`^[-+]?\\d*(\\.\\d${s})?$`).test(t)},message:(t,e)=>`must be numeric and may contain ${!e||e==="*"?"":e} decimal points`},email:{validate:t=>o.isEmail(t),message:"must be a valid email"},hostname:{validate:t=>o.isHostname(t),message:"is not a host name"},domain:{validate:t=>o.isDomain(t),message:"is not a domain"},integer:{validate:t=>o.isInteger(t),message:"must be whole number"},max:{validate:(t,e)=>t<=e,message(t,e){return`must be ${e} or less`}},min:{validate:(t,e)=>t>=e,message(t,e){return`must be ${e} or more`}},password:{validate:()=>!0},range:{validate:(t,[e,s])=>t>=e&&t<=s,message(t,[e,s]){return`must be between ${e} and ${s}`}},required:{validate:(t,e,{password:s})=>t!=null&&t!==""||s&&t===void 0,message:"is required",nullish:!0},url:{validate:t=>o.isUrl(t),message:"is not a valid URL"}},Symbol.toStringTag,{value:"Module"})),an={data(){return{isTouched:!1,isDirty:!1,isValidated:!1,isValid:!1,errors:null}},computed:{events(){return{focus:()=>{this.isTouched=!0},blur:()=>{this.validate()},change:()=>{this.markDirty()},input:()=>{this.markDirty()}}}},methods:{resetValidation(){this.isTouched=!1,this.isDirty=!1,this.isValidated=!1,this.isValid=!1,this.clearErrors()},validate(t=!0){let e=!0;t&&this.clearErrors();const{value:s}=this;for(const[n,a]of Object.entries(this.validations)){const r=nn[n];if(r&&(r.nullish||s!=null)){const{validate:i,message:l}=r;if(!i(s,a,this.validations)&&(e=!1,t)){const c=o.isFunction(l)?l(s,a,this):l;this.addError(c,!0)}}}return t&&(this.isValidated=!0,this.isValid=e),e},verify(){return this.validate(!1)},markDirty(){this.isDirty=!0,this.isValidated=!1,this.isValid=!1,this.clearErrors()},addError(t,e=!1){this.errors||(this.errors=[]),e&&(t=`The ${this.label||this.placeholder||this.name} field ${t}.`),this.errors.push(t),this.$emit("errors",this.errors)},showValidationErrors(t,e){this.errors=[];for(const{message:s}of t)this.addError(s,!0);return e&&this.focus(),!0},getErrors(){return this.errors?[...this.errors]:null},clearErrors(){this.errors=null,this.$emit("errors",this.errors)}}};function p(t,{type:e,default:s,get:n,set:a,callback:r=!0}={}){o.isString(t)&&t.includes(".")&&(t=o.parseDataPath(t));const i=o.normalizeDataPath(t);return{get(){const l=!n||n.length>0?this.overrides&&i in this.overrides?this.overrides[i]:this.getSchemaValue(t,{type:e,default:s,callback:r}):void 0;return n?n.call(this,l):l},set(l){a?a.call(this,l):(this.overrides||(this.overrides={}),this.$set(this.overrides,i,l))}}}function vt(t,{default:e,get:s,set:n}={}){return{get(){let a=this.getStore(t);return a===void 0&&e!==void 0&&(a=o.isFunction(e)?e.call(this,this.context):e,this[t]=a,this.getStore(t)),s?s.call(this,a):a},set(a){(!n||(a=n.call(this,a))!==void 0)&&this.setStore(t,a)}}}const It=new WeakMap;let rn=0;function on(t,e){let s=It.get(t);return s||(s=s=e||`@${++rn}`,It.set(t,s)),s}class ln{constructor(){Vt(this,"graph",{});Vt(this,"references",{})}set(e,s,n){var r;e=o.parseDataPath(e);let a=this.graph;for(const i of e){const l=o.isInteger(+i)?"*":i;a=(r=a[l])!=null?r:a[l]={}}a.$settings=h(h(h({},n),a.$settings),s)}addSource(e,s){this.set(e,{type:"source",schema:s},{related:!1})}setSourceRelated(e){this.set(e,{related:!0,reference:this.getReferencePrefix(e)})}addRelation(e,s,n){this.set(e,{type:"relation",schema:n,internal:!!s,reference:this.getReferencePrefix(s)})}getReferencePrefix(e){var s,n;return e?(n=(s=this.references)[e])!=null?n:s[e]=Ss.nanoid(6):null}flatten(){const e=s=>{const n=[];for(const a of Object.entries(s)){const[l,r]=a,i=r,{$settings:c}=i,u=R(i,["$settings"]);c&&n.push([l,c]);for(const[d,g]of e(u))n.push([`${l}/${d}`,g])}return n};return e(this.graph)}process(e,s,{target:n}){const a=n==="clipboard";a&&delete s[e.idKey||"id"];for(const[r,i]of this.flatten()){const{type:l,schema:c,internal:u,related:d,reference:g}=i,_=l==="source",C=l==="relation";if(_||C&&u){const f=o.getValueAtDataPath(s,r,()=>null),P=a&&_&&!d,E=a&&(C&&u||_&&d);for(const w of o.asArray(f).flat()){const y=_&&c.idKey||C&&c.relateBy||"id";let j=w==null?void 0:w[y];if(j!=null&&(P&&delete w[y],E||Y(j))){Y(j)&&(j=j.slice(1));const k=a?y:_?"#id":"#ref",V=a?`@${j}`:g?`${g}-${j}`:j;w[k]=V,k!==y&&delete w[y]}}}}return s}}const Mt={},At={};function un(t,e){Mt[t]=e}function gt(t,e=!1){const s=Mt[t]||null;if(!s&&!e&&!At[t])throw At[t]=!0,new Error(`Unknown Dito component type: '${t}'`);return s}function Nt(t,e){const s=[...Object.values((t==null?void 0:t.tabs)||{}),t];for(const n of s)if(n){const a=e(n);if(a!==void 0)return a}}function zt(t,e){return Nt(t,s=>{for(const[n,a]of Object.entries(s.components||{})){const r=e(a,n);if(r!==void 0)return r}})}function cn(t,e){return zt(t,(s,n)=>e(s,n)?!0:void 0)===!0}async function bt(t,e=!1){if(o.isFunction(t)&&(t=t()),o.isPromise(t)&&(t=await t),o.isModule(t)&&(t=h({},t),!t.name&&(e||t.default))){const s=Object.keys(t);if(s.length===1){const n=s[0];t=t[n],t.name=n}}return t}async function yt(t,e=bt){let s=o.isFunction(t)?t():t;return s=await bt(s,!1),o.isArray(s)?s=Object.fromEntries(await Promise.all(s.map(async n=>{const a=await e(n,!0);return[a.name,a]}))):o.isObject(s)&&(s=Object.fromEntries(await Promise.all(Object.entries(s).map(async([n,a])=>{const r=await e(a,!0);return[n,r]})))),s}async function Ut(t){const{panels:e}=t;t.panels&&(t.panels=await yt(e))}async function dn(t,e,s,n,a){const r=[];Kt(e,s,n),await Ut(s),Jt(s)?await Ht(e,s,n,r,0):await $t(e,s,r,1),a.push({path:`/${s.path}`,children:r,component:t,meta:{api:e,schema:s}})}function Ht(t,e,s,n,a){var r,i;return e.level=a,(i=(r=A(e))==null?void 0:r.processSchema)==null?void 0:i.call(r,t,e,s,n,a)}function Kt(t,e,s){e.name=s,e.path=e.path||t.normalizePath(s)}async function $t(t,e,s,n){const a=[];zt(e,(r,i)=>{a.push(Ht(t,r,i,s,n))}),await Promise.all(a)}async function hn(t,e,s){let{form:n,forms:a,components:r}=e;a?a=e.forms=await yt(a,Wt):n?n=e.form=await Wt(n):r&&o.isObject(r)&&(n={components:r}),a||(a={default:n});const i=[];for(const l of Object.values(a))await $t(t,l,i,s+1);return i}async function Wt(t){return t=await bt(t,!0),t&&await Ut(t),t}function Jt(t){return!!t.type}function H(t){return o.isObject(t)&&!!(t.form||t.forms||t.components)}function pn(t){return Object.keys((t==null?void 0:t.forms)||{}).length>1}function Ct(t,e){const{view:s}=t,n=s&&e.views[s];return n?H(n)?n:Nt(n,a=>{var i;const r=(i=a.components)==null?void 0:i[s];if(H(r))return r}):null}function mn(t,e){const s=Ct(t,e);return s?s.level===0?`/${s.path}`:`/${s.path}/${s.path}`:null}function W(t,e,s){const n=Ct(t,e);if(n)t=n;else if(t.view)throw new Error(`Unknown view: '${t.view}'`);let{form:a,forms:r,components:i,compact:l}=t;if(!a&&!r)if(i)a={components:i,compact:l};else return{};return r||(r={default:a}),Object.fromEntries(Object.entries(r).map(([c,u])=>{var d;return o.isFunction(u.components)&&(u=x(h({},u),{components:u.components(e)})),[c,(d=s==null?void 0:s(u))!=null?d:u]}))}function Qt(t,e){return t[e==null?void 0:e.type]||t.default||null}function Dt(t,e,s){return Qt(W(t,s),e)}function fn(t){return t.label!==!1}function Gt(t){return!!t.compact}function Pt(t){return!!(t.inlined||t.components)}function Xt(t){var e;return!!(t.nested||((e=A(t))==null?void 0:e.defaultNested)===!0)}function _n(t){var e;return!!((e=A(t))!=null&&e.omitPadding)}function Yt(t){var n;const e=t.default,s=e!==void 0?e:(n=A(t))==null?void 0:n.defaultValue;return o.isFunction(s)?s(t):o.clone(s)}function Zt(t){var s;const e=A(t);return!!((e==null?void 0:e.excludeValue)||((s=e==null?void 0:e.ignoreMissingValue)==null?void 0:s.call(e,t)))}function vn(t){const e=s=>Object.values(s||{}).some(fn);return e(t.components)||Object.values(t.tabs||{}).some(e)}function te(t,e={},s){return Z(t,e,null,null,(r,i,l)=>{!(l in i)&&!Zt(r)&&(i[l]=Yt(r))},null,{component:s,rootData:e})}function ee(t,e,s,n,{component:a=null,rootData:r=a==null?void 0:a.rootData}={}){const{compute:i}=t;if(i){const l=i(O.get(a,{value:e[s],name:s,data:e,dataPath:n,rootData:r}));l!==void 0&&z.default.set(e,s,l)}return!(s in e)&&!Zt(t)&&z.default.set(e,s,Yt(t)),e[s]}function se(t,e,s){if(s.schemaOnly){const n={},{idKey:a="id",orderKey:r}=t,i=e[a];return i!==void 0&&(n[a]=i),pn(t)&&(n.type=e.type),r&&(n[r]=e[r]),n}else return h({},e)}function gn(t,e,s,n,{component:a,schemaOnly:r,target:i}={}){const l={component:a,schemaOnly:r,target:i,rootData:s},c=se(e,s,l),u=new ln;return Z(t,s,n,c,(_,C,f,P,E)=>{let w=ee(_,C,f,P,l);if(o.isArray(w)){const{wrapPrimitives:y,orderKey:j,idKey:k="id"}=_;y?w=w.map(V=>({[y]:V})):w=[...w],j&&i==="clipboard"&&w.sort((V,U)=>{const N=V==null?void 0:V[k],Ft=U==null?void 0:U[k];return N==null||Y(N)?1:Ft==null||Y(Ft)?-1:N-Ft})}E[f]=w},(_,C,f,P,E)=>{const{wrapPrimitives:w,exclude:y,process:j}=_;let k=E[f];const V=A(_),U=()=>O.get(a,{value:k,name:f,data:C,dataPath:P,rootData:l.rootData,processedData:E});if(w&&o.isArray(k)&&(k=k.map(N=>N[w])),j&&(k=j(U())),(V==null?void 0:V.excludeValue)||y===!0||o.isFunction(y)&&y(U()))delete E[f];else{const N=V==null?void 0:V.processValue;N&&(k=N(_,k,P,u)),E[f]=k}},l),u.process(e,c,l)}function Z(t,e,s,n,a,r,i){const l=c=>{const u=(d,g)=>d!=null?B(d,g):null;if(c)for(const[d,g]of Object.entries(c))if(!Xt(g))Z(g,e,s,n,a,r,i);else{const _=u(s,d),C=(P,E=null)=>{var U;const w=E!==null?u(_,E):_,y=O.get(i.component,{data:e,value:P,dataPath:w,index:E,rootData:i.rootData}),k=(((U=A(g))==null?void 0:U.getFormSchemasForProcessing)||W)(g,y),V=Qt(k,P);if(V){const N=n?se(g,P,i):null;return Z(V,P,w,N,a,r,i)}else return h({},P)};a==null||a(g,e,d,_,n);let f=n?n[d]:e[d];f!=null&&H(g)&&(o.isArray(f)?f=n?f.map(C):f.forEach(C):f=C(f),n&&(n[d]=f)),r==null||r(g,e,d,_,n)}};if(l(t.components),t.tabs)for(const c of Object.values(t.tabs))l(c.components);for(const c of oe(t,s))l(c.schema.components);return n||e}function K(t,e){const s=(n,a)=>n.length>0?n.reduce((r,i)=>{const l=a(i);return l&&(r[l.name]=l&&e?h(h({},e),l):l),r},{}):null;return o.isArray(t)?s(t,n=>o.isObject(n)?n:{name:o.camelize(n,!1)}):o.isObject(t)?s(Object.entries(t),([n,a])=>o.isObject(a)?h({name:n},a):o.isString(a)?{name:n,label:a}:null):null}function tt(t){return K(t,{type:"button"})}function ne(t){return o.isObject(t)?t.type:t}function A(t){var e,s;return(s=(e=gt(ne(t),!0))==null?void 0:e.options)!=null?s:null}function ae(t){var e,s,n;return(n=(s=(e=A(t))==null?void 0:e.getSourceType)==null?void 0:s.call(e,ne(t)))!=null?n:null}function re(t,e,s){return t?{schema:t,dataPath:t.name?B(e,t.name):e,tabComponent:s}:null}function ie(t,e,s,n=[]){if(t)for(const[a,r]of Object.entries(t)){const i=re(r,B(e,a),s);i&&n.push(i)}return n}function oe(t,e,s=null,n=null){var i,l;const a=(l=(i=A(t))==null?void 0:i.getPanelSchema)==null?void 0:l.call(i,t,e,s),r=a?[re(a,e,n)]:[];return ie(t.panels,e,n,r),r}function J(t){return ae(t)==="object"}function Q(t){return ae(t)==="list"}function le(t,e){const s=e[t.idKey||"id"];return s!=null?String(s):void 0}function bn(t,e){return on(e,le(t,e))}var et={mixins:[an],props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Object,Array],required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},single:{type:Boolean,default:!1},nested:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1}},data(){return{parsedValue:null,focused:!1}},computed:{name(){return this.schema.name},type(){return this.schema.type},component(){return this.resolveTypeComponent(this.schema.component)},context(){return new O(this,{nested:this.nested})},value:{get(){const t=ee(this.schema,this.data,this.name,this.dataPath,{component:this}),{format:e}=this.schema;return e?e.call(this,new O(this,{value:t})):t},set(t){const{parse:e}=this.schema;this.parsedValue=e?e.call(this,new O(this,{value:t})):t,this.$set(this.data,this.name,this.parsedValue)}},item(){return ut(this.rootItem,this.dataPath,this.nested)},parentItem(){return ct(this.rootItem,this.dataPath,this.nested)},rootItem(){return this.rootData},processedItem(){const{schemaComponent:t}=this;return ut(t.processedItem,this.dataPath.slice(t.dataPath.length),this.nested)},label:p("label",{type:[String,Boolean],get(t){return o.isString(t)?t:t!==!1&&this.$options.generateLabel?this.getLabel(this.schema):null}}),width:p("width",{type:[String,Number]}),visible:p("visible",{type:Boolean,default(){return this.typeOptions.defaultVisible}}),exclude:p("exclude",{type:Boolean,default:!1}),required:p("required",{type:Boolean,default:!1}),readonly:p("readonly",{type:Boolean,default:!1}),autofocus:p("autofocus",{type:Boolean,default:!1}),clearable:p("clearable",{type:Boolean,default:!1}),placeholder:p("placeholder",{type:String}),autocomplete:p("autocomplete",{type:String}),attributes(){const{nativeField:t,textField:e}=this.$options,s={disabled:this.disabled};return t&&(s.name=this.name,this.label&&(s.title=this.label),s.readonly=this.readonly,s.autofocus=this.autofocus,e&&(s.placeholder=this.placeholder,s.autocomplete=this.autocomplete)),s},listeners(){const t=this.getListeners(),{events:e={}}=this.schema;if(e)for(const s of Object.keys(e))t[s]||(t[s]=()=>this.emitEvent(s));return t},validations(){const t=h({},this.getValidations());this.required&&(t.required=!0);for(const[e,s]of Object.entries(this.schema.rules||{}))s===void 0?delete t[e]:t[e]=s;return t},providesData(){return!1},showClearButton(){return this.clearable&&this.value!=null}},created(){this._register(!0),this.setupSchemaFields()},beforeDestroy(){this._register(!1)},methods:{_register(t){this.nested&&(this.schemaComponent._registerComponent(this,t),this[t?"on":"off"](this.events))},getListeners(){return{focus:this.onFocus,blur:this.onBlur,input:this.onInput,change:this.onChange}},getValidations(){return null},focusElement(){const[t]=o.asArray(this.$refs.element);t&&this.$nextTick(()=>{var e,s;t.focus(),this.disabled&&((s=(e=t.$el||t).scrollIntoView)==null||s.call(e))})},focus(){var t;this.schemaComponent.focus(),(t=this.tabComponent)==null||t.focus(),this.focusElement()},clear(){this.value=null,this.onChange()},onFocus(){this.focused=!0,this.emitEvent("focus")},onBlur(){this.focused=!1,this.emitEvent("blur")},onInput(){this.emitEvent("input")},onChange(){this.emitEvent("change",{context:this.parsedValue!==void 0?{value:this.parsedValue}:null,parent:this.schemaComponent})}}};const st={},b=z.default.extend({components:st,mixins:[_t],methods:{getTypeComponent:gt,resolveComponent(t,e=[]){return t&&(async()=>{let s=o.isFunction(t)?await t():o.isPromise(t)?await t:t;return s=(s==null?void 0:s.default)||s,s.mixins=e,s.components=st,s})},resolveDitoComponent(t){return this.resolveComponent(t,[_t])},resolveTypeComponent(t){return this.resolveComponent(t,[_t,et])}}});b.component=function(t,e){if(e){e=h({name:t},e);const s=this.extend(e);return st[t]=s,s}else return st[t]||z.default.component(t)};class yn{hasRole(...e){if(this.roles){for(const s of e)if(this.roles.includes(s))return!0}return!1}}var ue={provide(){return{$schemaParentComponent:()=>this}},data(){return{schemaComponents:[]}},computed:{mainSchemaComponent(){return this.schemaComponents[0]}},methods:{_registerSchemaComponent(t,e){const{schemaComponents:s}=this;e?s.push(t):s.splice(s.indexOf(t),1)}}},ce={mixins:[ue],computed:{errors(){return this.schemaComponents.reduce((t,{errors:e})=>e&&t?t.concat(e):e,null)},isTouched(){return this.schemaComponents.some(t=>t.isTouched)},isDirty(){return this.schemaComponents.some(t=>t.isDirty)},isValid(){return this.schemaComponents.every(t=>t.isValid)},isValidated(){return this.schemaComponents.every(t=>t.isValid)}},methods:{validateAll(t,e=!0){return this.schemaComponents.every(s=>s.validateAll(t,e))},verifyAll(t){return this.schemaComponents.every(e=>e.verifyAll(t))},resetValidation(){this.schemaComponents.forEach(t=>t.resetValidation())},clearErrors(){this.schemaComponents.forEach(t=>t.clearErrors())},showValidationErrors(t,e){this.schemaComponents.forEach(s=>s.showValidationErrors(t,e))}}},de={mixins:[ce],provide(){return{$routeComponent:()=>this}},beforeRouteUpdate(t,e,s){this.beforeRouteChange(t,e,s)},beforeRouteLeave(t,e,s){this.beforeRouteChange(t,e,s)},data(){return{reload:!1,store:{},loadCache:{}}},computed:{routeComponent(){return this},routeRecord(){return this.$route.matched[this.$vnode.data.routerViewDepth]},isLastRoute(){const{matched:t}=this.$route;return this.routeRecord===t[t.length-1]},isLastUnnestedRoute(){const{matched:t}=this.$route;for(let e=t.length-1;e>=0;e--){const s=t[e];if(!s.meta.nested)return this.routeRecord===s}return!1},isNestedRoute(){return this.meta.nested},meta(){var t;return(t=this.routeRecord)==null?void 0:t.meta},path(){return this.getRoutePath(this.routeRecord.path)},label(){return this.getLabel(this.schema)},breadcrumb(){const{breadcrumb:t}=this.schema||{};return t||`${this.breadcrumbPrefix} ${this.label}`},breadcrumbPrefix(){return""},param(){var t;return this.$route.params[(t=this.meta)==null?void 0:t.param]||null},doesMutate(){return!1}},created(){this.appState.routeComponents.push(this)},destroyed(){const{routeComponents:t}=this.appState;t.splice(t.indexOf(this),1)},methods:{beforeRouteChange(t,e,s){let n=!0;e.path.startsWith(this.path)&&!t.path.startsWith(this.path)&&e.path!==t.path&&(this.isFullRouteChange(t,e)||t.path.length<=e.path.length)&&(this.doesMutate?n=this.isValidated||this.validateAll():this.isDirty&&(n=window.confirm(`You have unsaved changes. Do you really want to ${this.verbs.cancel}?`))),s(n)},getRoutePath(t){return this.$route.path.split("/").slice(0,t.split("/").length).join("/")},getChildPath(t){return`${this.path}/${t}`},isFullRouteChange(t,e){const s=this.path.match(/^(\/[^/]*)/)[1];return!o.getCommonPrefix(t.path,e.path).startsWith(s)}}},$n=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isLastRoute?t.shouldRender(t.viewSchema)?s("div",{staticClass:"dito-view dito-scroll-parent"},[s("dito-schema",{staticClass:"dito-scroll",attrs:{schema:t.viewSchema,data:t.data,meta:t.meta,store:t.getChildStore(t.name),disabled:t.isLoading,generateLabels:!1,menuHeader:!0}})],1):t._e():s("router-view",{key:t.name})},Cn=[];function m(t,e,s,n,a,r,i,l){var c=typeof t=="function"?t.options:t;e&&(c.render=e,c.staticRenderFns=s,c._compiled=!0),n&&(c.functional=!0),r&&(c._scopeId="data-v-"+r);var u;if(i?(u=function(_){_=_||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,!_&&typeof __VUE_SSR_CONTEXT__!="undefined"&&(_=__VUE_SSR_CONTEXT__),a&&a.call(this,_),_&&_._registeredComponents&&_._registeredComponents.add(i)},c._ssrRegister=u):a&&(u=l?function(){a.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:a),u)if(c.functional){c._injectStyles=u;var d=c.render;c.render=function(C,f){return u.call(f),d(C,f)}}else{var g=c.beforeCreate;c.beforeCreate=g?[].concat(g,u):[u]}return{exports:t,options:c}}const Dn=b.component("dito-view",{mixins:[de],provide(){return{$sourceComponent:()=>{var t;return((t=this.mainComponent)==null?void 0:t.sourceComponent)||null},$resourceComponent:()=>{var t;return((t=this.mainComponent)==null?void 0:t.resourceComponent)||null}}},data(){return{isView:!0,isLoading:!1,data:{}}},computed:{schema(){return this.meta.schema},name(){return this.schema.name},isSingleComponentView(){return Jt(this.schema)},mainComponent(){return this.mainSchemaComponent.getComponentByDataPath(this.name)},viewSchema(){const{schema:t}=this;return this.isSingleComponentView?{name:t.name,components:{[t.name]:x(h({},t),{label:!1})}}:t},providesData(){return cn(this.viewSchema,t=>Rt(t))}},watch:{$route(t,e){this.isFullRouteChange(t,e)&&(this.isLoading=!1,this.data={})}},methods:{setData(t){this.data=t},getChildPath(t){return this.isSingleComponentView?this.path:`${this.path}/${t}`},setLoading(t){this.isLoading=!!t}}}),he={};var Pn=m(Dn,$n,Cn,!1,wn,null,null,null);function wn(t){for(let e in he)this[e]=he[e]}var pe=function(){return Pn.exports}(),G={data(){return{domHandlers:[]}},beforeDestroy(){for(const{remove:t}of this.domHandlers)t();this.domHandlers=[]},methods:{domOn(t,e,s){const n=T.addEvents(t,o.isObject(e)?e:{[e]:s});return this.domHandlers.push(n),n}}},Sn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-root"},[s("modals-container"),s("notifications",{ref:"notifications",staticClass:"dito-notifications",attrs:{position:"top right",classes:"dito-notification"}}),s("dito-menu"),s("main",{staticClass:"dito-page dito-scroll-parent"},[s("dito-header",{attrs:{spinner:t.options.spinner,isLoading:t.isLoading}},[t.user?s("dito-account"):t.allowLogin?s("a",{staticClass:"dito-login",on:{click:function(n){return t.rootComponent.login()}}},[s("span",[t._v("Login")])]):t._e()],1),s("router-view")],1)],1)},xn=[],Zu="";const On=b.component("dito-root",{mixins:[G],provide(){return{$views:()=>this.resolvedViews}},props:{unresolvedViews:{type:[Object,Function,Promise],required:!0},options:{type:Object,default:()=>({})}},data(){return{resolvedViews:{},allowLogin:!1,loadingCount:0}},computed:{notifications(){return this.$refs.notifications},isLoading(){return this.loadingCount>0}},created(){this.appState.title=document.title||"Dito.js Admin",this.appState.routeComponents=[]},async mounted(){this.domOn(document,{click:t=>{t.target.closest(".dito-label")||(this.appState.activeLabel=null)},keyup:t=>{t.code==="Tab"&&(this.appState.activeLabel=null)}});try{this.allowLogin=!1,await this.fetchUser()?await this.resolveViews():await this.login()}catch(t){console.error(t)}this.allowLogin=!0},methods:{notify({type:t="info",title:e,text:s}={}){e||(e={warning:"Warning",error:"Error",info:"Information",success:"Success"}[t]||"Notification"),s=`<p>${o.asArray(s).join("</p> <p>")}</p>`.replace(/\n|\r\n|\r/g,"<br>");const n={warning:"warn",error:"error",info:"log",success:"log"}[t]||"error";console[n](o.stripTags(s));const{notifications:a=!0}=this.api;if(a){const{durationFactor:r=20}=a,i=(40+s.length+e.length)*r;this.$notify({type:t,title:e,text:s,duration:i})}},closeNotifications(){this.notifications.destroyAll()},registerLoading(t){this.loadingCount+=t?1:-1},async login(){var n,a;this.allowLogin=!0;const{additionalComponents:t,redirectAfterLogin:e}=this.options.login||{},s=await this.showDialog({components:h({username:{type:"text",autofocus:!0},password:{type:"password"}},t),buttons:{cancel:{},login:{type:"submit"}}});if(s)try{const r=await this.sendRequest({resource:this.api.users.login,data:s,internal:!0});e?location.replace(e):(this.setUser(r.data.user),await this.resolveViews())}catch(r){const i=(a=(n=r.response)==null?void 0:n.data)==null?void 0:a.error;this.notify({type:"error",title:"Authentication Error",text:i||r}),i||console.error(r,r.response),this.login()}},navigateHome(){return this.navigate("/")},async logout(){try{(await this.sendRequest({resource:this.api.users.logout,internal:!0})).data.success&&(this.setUser(null),this.navigateHome())}catch(t){console.error(t)}},async fetchUser(){let t=null;try{t=(await this.sendRequest({resource:this.api.users.session,internal:!0})).data.user||null}catch(e){this.notify({type:"error",title:"Authentication Error",text:e})}return this.setUser(t),t},setUser(t){this.appState.user=t&&Object.setPrototypeOf(t,yn.prototype),t||(this.resolvedViews={},this.navigateHome())},async ensureUser(){await this.fetchUser()||await this.login()},async resolveViews(){try{this.resolvedViews=await yt(this.unresolvedViews)}catch(s){return s.request||console.error(s),this.login()}const t=[],e=[];for(const[s,n]of Object.entries(this.resolvedViews))e.push(dn(pe,this.api,n,s,t));await Promise.all(e);for(const s of t)this.$router.addRoute(s)}}}),me={};var jn=m(On,Sn,xn,!1,Fn,null,null,null);function Fn(t){for(let e in me)this[e]=me[e]}var wt=function(){return jn.exports}(),En=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("nav",{staticClass:"dito-menu dito-scroll-parent"},[s("h1",[t._v(t._s(t.appState.title))]),s("ul",{staticClass:"dito-scroll"},t._l(t.views,function(n){return s("li",[t.shouldRender(n)?s("router-link",{staticClass:"dito-link",attrs:{to:"/"+n.path,"active-class":"dito-active"}},[t._v(t._s(t.getLabel(n)))]):t._e()],1)}),0)])},Vn=[],tc="";const kn=b.component("dito-menu",{}),fe={};var Ln=m(kn,En,Vn,!1,Bn,null,null,null);function Bn(t){for(let e in fe)this[e]=fe[e]}var Tn=function(){return Ln.exports}(),Rn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{directives:[{name:"show",rawName:"v-show",value:t.loading,expression:"loading"}],staticClass:"v-spinner"},[s("div",{staticClass:"v-pulse v-pulse1",style:[t.spinnerStyle,t.spinnerDelay1]}),s("div",{staticClass:"v-pulse v-pulse2",style:[t.spinnerStyle,t.spinnerDelay2]}),s("div",{staticClass:"v-pulse v-pulse3",style:[t.spinnerStyle,t.spinnerDelay3]})])},qn=[],ec="";const In={name:"PulseLoader",props:{loading:{type:Boolean,default:!0},color:{type:String,default:"#5dc596"},size:{type:String,default:"15px"},margin:{type:String,default:"2px"},radius:{type:String,default:"100%"}},data(){return{spinnerStyle:{backgroundColor:this.color,width:this.size,height:this.size,margin:this.margin,borderRadius:this.radius,display:"inline-block",animationName:"v-pulseStretchDelay",animationDuration:"0.75s",animationIterationCount:"infinite",animationTimingFunction:"cubic-bezier(.2,.68,.18,1.08)",animationFillMode:"both"},spinnerDelay1:{animationDelay:"0.12s"},spinnerDelay2:{animationDelay:"0.24s"},spinnerDelay3:{animationDelay:"0.36s"}}}},_e={};var Mn=m(In,Rn,qn,!1,An,null,null,null);function An(t){for(let e in _e)this[e]=_e[e]}var Nn=function(){return Mn.exports}(),zn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("nav",{staticClass:"dito-header"},[s("div",{staticClass:"dito-trail"},[s("ul",t._l(t.trail,function(n,a){return s("li",[a===t.trail.length-1?[s("span",{class:t.getBreadcrumbClass(n)},[t._v(t._s(n.breadcrumb))])]:s("router-link",{staticClass:"dito-breadcrumb",attrs:{to:n.path}},[s("span",{class:t.getBreadcrumbClass(n)},[t._v(t._s(n.breadcrumb))])])],2)}),0),t.isLoading?s("spinner",{staticClass:"dito-spinner"}):t._e()],1),t._t("default")],2)},Un=[],sc="";const ve=b.component("spinner",Nn),Hn=b.component("dito-header",{components:{Spinner:ve},props:{spinner:{type:Object,default:null},isLoading:{type:Boolean,default:!1}},computed:{trail(){return this.appState.routeComponents.filter(t=>!!t.routeRecord)}},created(){const{size:t="8px",color:e="#999"}=this.spinner||{},{props:s}=ve.options;s.size.default=t,s.color.default=e},methods:{getBreadcrumbClass(t){return{"dito-dirty":t.isDirty}}}}),ge={};var Kn=m(Hn,zn,Un,!1,Wn,null,null,null);function Wn(t){for(let e in ge)this[e]=ge[e]}var Jn=function(){return Kn.exports}(),be={mixins:[G],data(){return{pulldown:{open:!1,startTime:0,checkTime:!0,events:{mousedown:()=>{this.setPulldownOpen(!1),this.pulldown.handlers.remove()},mouseup:()=>{this.onPulldownMouseUp(null)&&this.pulldown.handlers.remove()}},handlers:null}}},methods:{onPulldownMouseDown(t){t?this.checkTime=!1:(this.setPulldownOpen(!0),this.checkTime=!0)},onPulldownMouseUp(t){const{startTime:e}=this.pulldown;if(!this.checkTime||e&&Date.now()-e>250)return this.setPulldownOpen(!1),t&&this.onPulldownSelect(t),!0},onPulldownSelect(){},setPulldownOpen(t){this.pulldown.open=t,this.pulldown.startTime=t?Date.now():0,t&&(this.pulldown.handlers=this.domOn(document,this.pulldown.events))}}},Qn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-account"},[s("a",{on:{mousedown:function(n){return n.stopPropagation(),t.onPulldownMouseDown()}}},[s("span",[t._v(t._s(t.user.username))])]),s("ul",{staticClass:"dito-pulldown",class:{"dito-open":t.pulldown.open}},t._l(t.items,function(n,a){return s("li",[s("a",{on:{mousedown:function(r){return r.stopPropagation(),t.onPulldownMouseDown(a)},mouseup:function(r){return t.onPulldownMouseUp(a)}}},[t._v(t._s(n))])])}),0)])},Gn=[],nc="";const Xn=b.component("dito-account",{mixins:[be],data(){return{items:{settings:"Settings",logout:"Logout"}}},methods:{onPulldownSelect(t){switch(t){case"logout":this.rootComponent.logout();break;case"settings":console.info("TODO: Implement Settings");break}}}}),ye={};var Yn=m(Xn,Qn,Gn,!1,Zn,null,null,null);function Zn(t){for(let e in ye)this[e]=ye[e]}var ta=function(){return Yn.exports}(),ea=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("form",{staticClass:"dito-dialog",on:{submit:function(n){n.preventDefault()}}},[s("dito-schema",{staticClass:"dito-scroll",attrs:{schema:t.schema,data:t.dialogData}},[s("dito-buttons",{staticClass:"dito-buttons-large",attrs:{slot:"buttons",buttons:t.buttonSchemas,data:t.dialogData},slot:"buttons"})],1)],1)},sa=[],ac="";const na=b.component("dito-dialog",{provide(){return{$dialogComponent:()=>this}},props:{components:{type:Object,required:!0},buttons:{type:Object,required:!0},promise:{type:Object,required:!0},data:{type:Object,default:()=>({})}},data(){const t=o.clone(this.data);for(const e in this.components)e in t||(t[e]=null);return{windowEvents:null,dialogData:t}},computed:{dialogComponent(){return this},name(){return this.$parent.name},schema(){return{components:this.components}},buttonSchemas(){return Object.entries(tt(this.buttons)).reduce((t,[e,s])=>{const{type:n,events:a}=s;if(!a){const r=n==="submit"?()=>this.accept():e==="cancel"?()=>this.cancel():null;r&&(s=x(h({},s),{events:{click:r}}))}return t[e]=s,t},{})},hasCancel(){return Object.keys(this.buttonSchemas).includes("cancel")}},mounted(){this.windowEvents=T.addEvents(window,{keyup:()=>{event.keyCode===27&&this.cancel()}})},destroyed(){this.windowEvents.remove()},methods:{hide(){this.$modal.hide(this.name)},resolve(t){this.promise.resolve(t),this.hide()},reject(t){this.promise.reject(t),this.hide()},accept(){this.resolve(this.dialogData)},cancel(){this.hasCancel&&this.resolve(null)}}}),$e={};var aa=m(na,ea,sa,!1,ra,null,null,null);function ra(t){for(let e in $e)this[e]=$e[e]}var ia=function(){return aa.exports}(),oa=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.content?s(t.options.tag||t.tag,{tag:"component",class:t.classes,style:t.styles},[t._v(t._s(t.options.text))]):t._e()},la=[],rc="";const ua=b.component("dito-element",{props:{tag:{type:String,default:"span"},content:{type:[String,Object]}},computed:{options(){const{content:t}=this;return o.isObject(t)?t:{text:t}},classes(){return h(h({},this.$attrs.class),Ce(this.options.class))},styles(){return h(h({},this.$attrs.style),Ce(this.options.style))}}});function Ce(t){return o.asArray(t).reduce((e,s)=>(o.isString(s)?e[s]=!0:o.isObject(s)&&Object.assign(e,s),e),{})}const De={};var ca=m(ua,oa,la,!1,da,null,null,null);function da(t){for(let e in De)this[e]=De[e]}var ha=function(){return ca.exports}(),pa=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.text||t.collapsible?s(t.tag,t._g({tag:"component",staticClass:"dito-label",class:{"dito-active":t.isActive}},t.listeners),[t.collapsible?s("div",{staticClass:"dito-chevron",class:{"dito-opened":!t.collapsed}}):t._e(),t._l(t.prefixes,function(n,a){return s("dito-element",{key:"prefix-"+a,staticClass:"dito-label-prefix",attrs:{tag:"span",content:n}})}),s("label",{attrs:{for:t.dataPath},domProps:{innerHTML:t._s(t.text)}}),t._l(t.suffixes,function(n,a){return s("dito-element",{key:"suffix-"+a,staticClass:"dito-label-suffix",attrs:{tag:"span",content:n}})}),t._t("edit-buttons")],2):t._e()},ma=[],ic="";const fa=b.component("dito-label",{props:{label:{type:[String,Object],default:null},dataPath:{type:String,default:null},collapsed:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!1}},computed:{tag(){return this.collapsible?"a":"div"},text(){const{label:t}=this;return o.isObject(t)?t==null?void 0:t.text:t},prefixes(){var t;return o.asArray((t=this.label)==null?void 0:t.prefix)},suffixes(){var t;return o.asArray((t=this.label)==null?void 0:t.suffix)},listeners(){return h({},this.collapsible&&{click:this.onClick})},isActive(){return this.appState.activeLabel===this}},methods:{onClick(){this.appState.activeLabel=this,this.$emit("expand",this.collapsed)}}}),Pe={};var _a=m(fa,pa,ma,!1,va,null,null,null);function va(t){for(let e in Pe)this[e]=Pe[e]}var ga=function(){return _a.exports}(),St={methods:{getItemFormSchema:Dt,getItemUid:bn,getItemId(t,e,s=null){return this.isTransient&&s!==null?String(s):le(t,e)},getItemDataPath(t,e){let{dataPath:s}=this;return t!==this.schema&&(s=B(s,t.name)),e!=null&&(s=B(s,e)),s},findItemIdIndex(t,e,s){const n=this.isTransient?s:e==null?void 0:e.findIndex((a,r)=>this.getItemId(t,a,r)===s);return n!==-1?n:null},getItemLabel(t,e,{index:s=null,extended:n=!1,asObject:a=!1}={}){const{itemLabel:r}=t;if(!e||!n&&r===!1)return null;let i;const l=()=>i||(i=this.getItemDataPath(t,s));let c;const u=()=>c||(c=this.getLabel(Dt(t,e,this.context)));let d,g,_;if(o.isFunction(r)){const f=r.call(this,new O(this,{nested:!1,data:e,value:e,index:s,get dataPath(){return l()},get formLabel(){return u()}}));o.isObject(f)?{text:d,prefix:g,suffix:_}=f:d=f,n=!1}else{const{columns:f}=t,P=o.isString(r)&&r||Q(t)&&f&&Object.keys(f)[0]||"name";d=e[P]}const C=!!d;if(d=d||"",d||(n=!0,Q(t)&&s!==null&&(d=`${s+1}`)),n){const f=u();f&&(d=`${f} ${C?`'${d}'`:d}`)}return a?{text:d,prefix:g,suffix:_}:d}}},ba=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-schema"},[s("div",{staticClass:"dito-schema-content"},[t.hasLabel||t.hasTabs||t.clipboard?s("div",{staticClass:"dito-schema-header",class:{"dito-schema-menu-header":t.menuHeader}},[t.hasLabel?s("dito-label",{attrs:{label:t.label,dataPath:t.dataPath,collapsible:t.collapsible,collapsed:!t.opened},on:{expand:t.onExpand},scopedSlots:t._u([t.inlined?{key:"edit-buttons",fn:function(){return[t._t("edit-buttons")]},proxy:!0}:null],null,!0)}):t._e(),t.tabs?s("dito-tabs",{attrs:{tabs:t.tabs,selectedTab:t.selectedTab}}):t._e(),s("dito-clipboard",{attrs:{clipboard:t.clipboard,dataPath:t.dataPath,data:t.data}})],1):t._e(),t._l(t.tabs,function(n,a){return t.hasTabs?s("dito-pane",{key:a,ref:"tabs",refInFor:!0,staticClass:"dito-pane-tab",attrs:{visible:t.selectedTab===a,tab:a,schema:n,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,single:!t.inlined&&!t.hasMainPane,disabled:t.disabled,generateLabels:t.generateLabels}}):t._e()}),s("transition-height",{attrs:{enabled:t.inlined}},[t.hasMainPane&&t.opened?s("dito-pane",{ref:"components",staticClass:"dito-pane-main",attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,single:!t.inlined&&!t.hasTabs,disabled:t.disabled,generateLabels:t.generateLabels}}):t._e()],1),!t.inlined&&t.isPopulated?t._t("buttons"):t._e()],2),t.inlined?[t.hasLabel?t._e():t._t("edit-buttons")]:t.isPopulated?[s("dito-panels",{attrs:{panels:t.panelSchemas,data:t.data,meta:t.meta,store:t.store,disabled:t.disabled}})]:t._e()],2)},ya=[],oc="";const $a=b.component("dito-schema",{components:{TransitionHeight:T.TransitionHeight},mixins:[St],provide(){return{$schemaComponent:()=>this}},inject:["$schemaParentComponent"],props:{schema:{type:Object,required:!0},dataPath:{type:String,default:""},data:{type:Object,default:null},meta:{type:Object,default:()=>({})},store:{type:Object,default:()=>({})},label:{type:[String,Object],default:null},inlined:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},collapsed:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!1},generateLabels:{type:Boolean,default:!0},hasOwnData:{type:Boolean,default:!1},menuHeader:{type:Boolean,default:!1}},data(){const{data:t}=this.schema;return x(h({},t&&o.isFunction(t)?t.call(this,this.context):t),{componentsRegistry:{},panesRegistry:{},panelsRegistry:{}})},computed:{schemaComponent(){return this},parentSchemaComponent(){return this.hasOwnData?null:this.$parent.schemaComponent},panelSchemas(){const t=ie(this.schema.panels,"");for(const e of this.panes)t.push(...e.panelSchemas);return t},tabs(){return K(this.schema.tabs)},selectedTab(){var s,n;const t=((s=this.$route.hash)==null?void 0:s.slice(1))||null,e=t&&this.shouldRender(this.tabs[t])?t:((n=this.defaultTab)==null?void 0:n.name)||null;return e!==t&&this.$router.replace({hash:e}),e},defaultTab(){if(this.tabs){let t=null;for(const e of Object.values(this.tabs)){const{defaultTab:s}=e;if(o.isFunction(s)?s.call(this,this.context):s)return e;t||(t=e)}return t}},clipboard(){var t;return(t=this.schema)==null?void 0:t.clipboard},processedData(){return this.processData({target:"server",schemaOnly:!0})},clipboardData(){return h({$schema:this.schema.name},this.processData({target:"clipboard",schemaOnly:!0}))},item(){return this.data},rootItem(){return this.rootData},processedItem(){return this.processedData},clipboardItem(){return this.clipboardData},parentItem(){return ct(this.rootData,this.dataPath,!1)},formLabel(){return this.getLabel(this.getItemFormSchema(this.sourceSchema,this.data,this.context))},isDirty(){return this.someComponent(t=>t.isDirty)},isTouched(){return this.someComponent(t=>t.isTouched)},isValid(){return this.everyComponent(t=>t.isValid)},isValidated(){return this.everyComponent(t=>t.isValidated)},hasData(){return!!this.data},hasLabel(){return!!this.label||this.collapsible},hasTabs(){return!this.inlined&&!!this.tabs},hasMainPane(){const{components:t}=this.schema;return!!t&&Object.keys(t).length>0},opened:vt("opened",{default(){return!this.collapsed}}),components(){return Object.values(this.componentsRegistry)},panes(){return Object.values(this.panesRegistry)},panels(){return Object.values(this.panelsRegistry)},componentsByDataPath(){return this._listEntriesByDataPath(this.componentsRegistry)},panesByDataPath(){return this._listEntriesByDataPath(this.panesRegistry)},panelsByDataPath(){return this._listEntriesByDataPath(this.panelsRegistry)}},created(){this._register(!0),this.setupSchemaFields(),this.delegate("change",this.parentSchemaComponent),this.emitEvent("initialize")},beforeDestroy(){this.emitEvent("destroy"),this._register(!1)},methods:{getComponentsByDataPath(t,e){return this._getEntriesByDataPath(this.componentsByDataPath,t,e)},getComponentByDataPath(t,e){return this.getComponentsByDataPath(t,e)[0]||null},getComponentsByName(t,e){return this._getEntriesByName(this.componentsByDataPath,t,e)},getComponentByName(t,e){return this.getComponentsByName(t,e)[0]||null},getComponents(t,e){return this._getEntries(this.componentsByDataPath,t,e)},getComponent(t,e){return this.getComponents(t,e)[0]||null},getPanelsByDataPath(t,e){return this._getEntriesByDataPath(this.panelsByDataPath,t,e)},getPanelByDataPath(t,e){return this.getPanelsByDataPath(t,e)[0]||null},getPanels(t,e){return this._getEntries(this.panelsByDataPath,t,e)},getPanel(t,e){return this.getPanels(t,e)[0]||null},someComponent(t){return this.isPopulated&&this.components.some(t)},everyComponent(t){return this.isPopulated&&this.components.every(t)},onExpand(t){this.emitEvent("expand",{context:{expand:t}}),(!this.opened||t||this.validateAll())&&(this.opened=t)},onChange(){this.emitEvent("change")},resetValidation(){for(const t of this.components)t.resetValidation()},clearErrors(){for(const t of this.components)t.clearErrors()},focus(){var t;(t=this.parentSchemaComponent)==null||t.focus(),this.opened=!0},validateAll(t,e=!0){const{componentsByDataPath:s}=this;let n;if(t){const i=o.isFunction(t)?t:o.isRegExp(t)?l=>t.test(l):null;n=i?Object.keys(s).filter(i):o.isArray(t)?t:[t]}e&&this.clearErrors();let a=!0,r=!0;n||(n=Object.keys(s));for(const i of n){const l=this.getComponentsByDataPath(i);for(const c of l)c.validate(e)||(e&&r&&c.focus(),r=!1,a=!1)}return e&&!a&&this.notifyErrors(),a},verifyAll(t){return this.validateAll(t,!1)},async showValidationErrors(t,e){var a;this.clearErrors();let s=!0;const n=[];for(const[r,i]of Object.entries(t)){const l=this.hasOwnData?B(this.dataPath,r):r,c=o.parseDataPath(l);let u=!1;const d=this.getComponentsByDataPath(c);for(const g of d)g.showValidationErrors(i,s&&e)&&(u=!0,s=!1);if(!u){const g=c.pop();for(;c.length>0;){const C=this.getComponentsByDataPath(c);for(const f of C)if(await((a=f.navigateToComponent)==null?void 0:a.call(f,l,P=>{let E=!1;for(const w of P){const y=t[w.dataPath];y&&w.showValidationErrors(y,s&&e)&&(E=!0,s=!1)}return E})))return;c.pop()}const _=o.labelize(g);for(const C of i){const f=_?`The field ${_}`:`The ${this.formLabel}`;n.push(`${f} ${C.message}`)}}s=!1}s||this.notifyErrors(n.join(`
|
|
2
|
-
`))},notifyErrors(t){this.notify({type:"error",title:"Validation Errors",text:t||"Please correct the highlighted errors."})},resetData(){Object.assign(this.data,te(this.schema,{},this)),this.clearErrors()},setData(t){for(const e in t)if(e in this.data){this.$set(this.data,e,t[e]);for(const s of this.getComponentsByName(e))s.markDirty()}},filterData(t){const e={};for(const[s,n]of Object.entries(t))(o.isArray(n)||o.isObject(n))&&this.getComponentsByName(s).some(r=>r.providesData)||(e[s]=n);return e},processData({target:t="clipboard",schemaOnly:e=!0}={}){return gn(this.schema,this.sourceSchema,this.data,this.dataPath,{component:this,schemaOnly:e,target:t})},_register(t){var e;(e=this.$schemaParentComponent())==null||e._registerSchemaComponent(this,t)},_registerComponent(t,e){var s;this._registerEntry(this.componentsRegistry,t,e),(s=this.parentSchemaComponent)==null||s._registerComponent(t,e)},_registerPane(t,e){this._registerEntry(this.panesRegistry,t,e)},_registerPanel(t,e){this._registerEntry(this.panelsRegistry,t,e)},_registerEntry(t,e,s){const n=e.$uid;s?this.$set(t,n,e):this.$delete(t,n)},_listEntriesByDataPath(t){return Object.values(t).reduce((e,s)=>{const{dataPath:n}=s;return(e[n]||(e[n]=[])).push(s),e},{})},_getEntries(t,e,s){return o.normalizeDataPath(e).startsWith(this.dataPath)?this._getEntriesByDataPath(t,e,s):this._getEntriesByName(t,e,s)},_getEntriesByDataPath(t,e,s){return this._filterEntries(t[o.normalizeDataPath(e)]||[],s)},_getEntriesByName(t,e,s){return this._filterEntries(t[B(this.dataPath,e)]||[],s)},_filterEntries(t,e){return e?t.filter(e):t}}}),we={};var Ca=m($a,ba,ya,!1,Da,null,null,null);function Da(t){for(let e in we)this[e]=we[e]}var Pa=function(){return Ca.exports}(),wa=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("dito-schema",{staticClass:"dito-schema-inlined",class:{"dito-schema-compact":t.isCompact},attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,label:t.isCompact?null:t.label,inlined:!0,disabled:t.disabled,collapsed:t.collapsed,collapsible:t.collapsible},scopedSlots:t._u([{key:"edit-buttons",fn:function(){return[t.deletable||t.draggable||t.editable?s("dito-edit-buttons",{attrs:{deletable:t.deletable,draggable:t.draggable,editable:t.editable,editPath:t.editPath,schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store},on:{delete:function(n){return t.$emit("delete")}}}):t._e()]},proxy:!0}])})},Sa=[],lc="";const xa=b.component("dito-schema-inlined",{props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},label:{type:[String,Object],default:null},disabled:{type:Boolean,required:!0},collapsed:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},editable:{type:Boolean,default:!1},deletable:{type:Boolean,default:!1},editPath:{type:String,default:null}},computed:{isCompact(){return Gt(this.schema)},hasLabel(){return!this.isCompact&&!!this.label}}}),Se={};var Oa=m(xa,wa,Sa,!1,ja,null,null,null);function ja(t){for(let e in Se)this[e]=Se[e]}var Fa=function(){return Oa.exports}(),Ea=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isPopulated&&t.componentSchemas.length>0?s("div",{directives:[{name:"show",rawName:"v-show",value:t.visible,expression:"visible"}],staticClass:"dito-pane"},[t._l(t.componentSchemas,function(n){var a=n.schema,r=n.dataPath,i=n.nestedDataPath,l=n.nested,c=n.store;return[a.break==="before"?s("div",{staticClass:"dito-break"}):t._e(),t.shouldRender(a)?s("dito-container",{key:i,attrs:{schema:a,dataPath:r,data:t.data,meta:t.meta,store:c,single:t.isSingleComponent,nested:l,disabled:t.disabled,generateLabels:t.generateLabels}}):t._e(),a.break==="after"?s("div",{staticClass:"dito-break"}):t._e()]})],2):t._e()},Va=[],uc="";const ka=b.component("dito-pane",{provide(){return{$tabComponent:()=>this.tabComponent}},props:{schema:{type:Object,required:!0},dataPath:{type:String,default:""},data:{type:Object,default:null},meta:{type:Object,required:!0},store:{type:Object,required:!0},tab:{type:String,default:null},single:{type:Boolean,default:!1},visible:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},generateLabels:{type:Boolean,default:!0}},computed:{tabComponent(){return this.tab?this:this.$tabComponent()},componentSchemas(){var e,s;const t=(e=this.sourceSchema)==null?void 0:e.wrapPrimitives;return Object.entries(((s=this.schema)==null?void 0:s.components)||{}).map(([n,a])=>{a.name=n;const r=Xt(a),i=B(this.dataPath,n);return{schema:a,dataPath:r&&!t?i:this.dataPath,nestedDataPath:i,nested:r,store:r?this.getChildStore(n):this.store}})},panelSchemas(){return this.componentSchemas.flatMap(({schema:t,nestedDataPath:e})=>oe(t,e,this.schemaComponent,this.tabComponent))},isSingleComponent(){return this.single&&this.componentSchemas.length===1}},created(){this._register(!0)},beforeDestroy(){this._register(!1)},methods:{_register(t){this.schemaComponent._registerPane(this,t)},focus(){this.tab&&this.$router.push({hash:this.tab})}}}),xe={};var La=m(ka,Ea,Va,!1,Ba,null,null,null);function Ba(t){for(let e in xe)this[e]=xe[e]}var Ta=function(){return La.exports}();function Ra(t){const e=o.isString(t)&&t.match(/^\s*([+-]?\d+)\s*\/\s*([+-]?\d+)\s*$/);if(e){const[,s,n]=e;return parseFloat(s)/parseFloat(n)}else return parseFloat(t)}var qa=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{directives:[{name:"show",rawName:"v-show",value:t.componentVisible,expression:"componentVisible"}],staticClass:"dito-container",class:t.containerClass,style:t.containerStyle},[t.label?s("dito-label",{class:t.componentClass,attrs:{label:t.label,dataPath:t.labelDataPath}}):t._e(),s(t.getTypeComponent(t.schema.type),{tag:"component",staticClass:"dito-component",class:t.componentClass,attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,single:t.single,nested:t.nested,disabled:t.componentDisabled},on:{errors:t.onErrors}}),s("dito-errors",{attrs:{errors:t.errors}})],1)},Ia=[],cc="";const Ma=b.component("dito-container",{props:{schema:{type:Object,required:!0},dataPath:{type:String,default:""},data:{type:[Object,Array],required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},single:{type:Boolean,default:!1},nested:{type:Boolean,default:!0},disabled:{type:Boolean,required:!0},generateLabels:{type:Boolean,default:!0}},data(){return{errors:null}},computed:{context(){return new O(this,{nested:this.nested})},typeOptions(){return A(this.schema)||{}},hasLabel(){const{schema:t}=this,{label:e}=t;return e!==!1&&(!!e||this.typeOptions.generateLabel&&this.generateLabels)},label(){return this.hasLabel?this.getLabel(this.schema):null},labelDataPath(){return this.nested?this.dataPath:null},componentWidth:p("width",{type:[String,Number],default(){return this.typeOptions.defaultWidth},get(t){return t===void 0?1:o.isString(t)?t.match(/^\s*[<>]?\s*(.*)$/)[1]:t}}),componentWidthOperator:p("width",{type:String,get(t){return o.isString(t)&&t.match(/^\s*([<>]?)/)[1]||null}}),componentVisible:p("visible",{type:Boolean,default(){return this.typeOptions.defaultVisible}}),componentDisabled:p("disabled",{type:Boolean,default:!1,get(t){return t||this.disabled}}),containerClass(){const{class:t}=this.schema;return h({"dito-single":this.single,"dito-omit-padding":_n(this.schema)},o.isString(t)?{[t]:!0}:t)},componentBasis(){const t=this.componentWidth,e=[null,"auto","fill"].includes(t)?"auto":/%$/.test(t)?parseFloat(t):/[a-z]/.test(t)?t:Ra(t)*100;return o.isNumber(e)?`${e}%`:e},containerStyle(){const t=this.componentWidthOperator===">"||this.componentWidth==="fill",e=this.componentWidthOperator==="<";return{flex:`${t?1:0} ${e?1:0} ${this.componentBasis}`}},componentClass(){const t=this.componentBasis==="auto";return{"dito-single":this.single,"dito-disabled":this.componentDisabled,"dito-width-fill":!t||this.componentWidth==="fill","dito-width-auto":t,"dito-has-errors":!!this.errors}}},methods:{onErrors(t){this.errors=t}}}),Oe={};var Aa=m(Ma,qa,Ia,!1,Na,null,null,null);function Na(t){for(let e in Oe)this[e]=Oe[e]}var za=function(){return Aa.exports}(),Ua=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-tabs"},t._l(t.tabs,function(n,a){return t.shouldRender(n)?s("router-link",{key:a,staticClass:"dito-link",attrs:{to:{hash:a},"active-class":"dito-active"}},[t._v(t._s(t.getLabel(n,a)))]):t._e()}),1)},Ha=[],dc="";const Ka=b.component("dito-tabs",{props:{tabs:{type:Object,default:null},selectedTab:{type:String,default:null}}}),je={};var Wa=m(Ka,Ua,Ha,!1,Ja,null,null,null);function Ja(t){for(let e in je)this[e]=je[e]}var Qa=function(){return Wa.exports}(),Ga=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s(t.panelTag,{directives:[{name:"show",rawName:"v-show",value:t.visible&&(!t.panelTabComponent||t.panelTabComponent.visible),expression:"visible && (!panelTabComponent || panelTabComponent.visible)"}],tag:"component",staticClass:"dito-panel",on:{submit:function(n){n.preventDefault()}}},[s("label",{staticClass:"dito-panel-title"},[t._v(t._s(t.getLabel(t.schema)))]),s("dito-schema",{staticClass:"dito-panel-schema",attrs:{schema:t.panelSchema,dataPath:t.panelDataPath,data:t.panelData,meta:t.meta,store:t.store,disabled:t.disabled,hasOwnData:t.hasOwnData}},[s("dito-buttons",{attrs:{slot:"buttons",buttons:t.buttonSchemas,dataPath:t.panelDataPath,data:t.panelData,meta:t.meta,store:t.store,disabled:t.disabled},slot:"buttons"})],1)],1)},Xa=[],hc="";const Ya=b.component("dito-panel",{mixins:[ce],provide(){return{$panelComponent:()=>this,$tabComponent:()=>this.panelTabComponent}},props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},disabled:{type:Boolean,required:!0},panelTabComponent:{type:b,default:null}},data(){return{ownData:null}},computed:{panelComponent(){return this},tabComponent(){return this.panelTabComponent},buttonSchemas(){return tt(this.schema.buttons)},target(){return this.schema.target||this.dataPath},hasOwnData(){return!!this.ownData},panelData(){return this.ownData||this.data},panelSchema(){if(this.hasOwnData)return this.schema;{const t=this.schema,{data:e}=t;return R(t,["data"])}},panelTag(){return this.hasOwnData?"form":"div"},panelDataPath(){return this.hasOwnData?this.dataPath:this.schemaComponent.dataPath},visible:p("visible",{type:Boolean,default:!0})},created(){this._register(!0);const{data:t}=this.schema;t&&(this.ownData=o.isFunction(t)?t.call(this,this.context):t)},beforeDestroy(){this._register(!1)},methods:{_register(t){this.schemaComponent._registerPanel(this,t)}}}),Fe={};var Za=m(Ya,Ga,Xa,!1,tr,null,null,null);function tr(t){for(let e in Fe)this[e]=Fe[e]}var er=function(){return Za.exports}(),sr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.panels.length>0?s("div",{staticClass:"dito-panels"},t._l(t.panels,function(n){var a=n.schema,r=n.dataPath,i=n.tabComponent;return t.shouldRender(a)?s("dito-panel",{key:t.getPanelKey(r,i),attrs:{schema:a,dataPath:r,data:t.data,meta:t.meta,store:t.getChildStore(a.name),disabled:a.disabled!=null?a.disabled:t.disabled,panelTabComponent:i}}):t._e()}),1):t._e()},nr=[],pc="";const ar=b.component("dito-panels",{props:{panels:{type:Array,default:null},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},disabled:{type:Boolean,required:!0}},methods:{getPanelKey(t,e){return e?`${e.tab}_${t}`:t}}}),Ee={};var rr=m(ar,sr,nr,!1,ir,null,null,null);function ir(t){for(let e in Ee)this[e]=Ee[e]}var or=function(){return rr.exports}(),lr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.buttonSchemas||t.$slots.default?s("div",t._g({staticClass:"dito-buttons"},t.$listeners),[t._l(t.buttonSchemas,function(n,a){return t.shouldRender(n)?s("dito-container",{key:a,attrs:{schema:n,dataPath:a,data:t.data,meta:t.meta,store:t.getChildStore(n.name),disabled:t.disabled,generateLabels:!1}}):t._e()}),t._l(t.$slots.default,function(n){return n.tag?s("div",{staticClass:"dito-container"},[s("dito-vnode",{attrs:{node:n}})],1):t._e()})],2):t._e()},ur=[],mc="";const cr=b.component("dito-buttons",{provide:{$tabComponent:()=>null},props:{buttons:{type:Object,default:null},dataPath:{type:String,default:""},data:{type:[Object,Array],default:null},meta:{type:Object,default:()=>({})},store:{type:Object,default:()=>({})},disabled:{type:Boolean,default:!1}},computed:{buttonSchemas(){const{dataPath:t,buttons:e}=this;return e?Object.values(e).reduce((s,n)=>(s[B(t,n.name)]=n,s),{}):null}}}),Ve={};var dr=m(cr,lr,ur,!1,hr,null,null,null);function hr(t){for(let e in Ve)this[e]=Ve[e]}var pr=function(){return dr.exports}(),mr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("dito-buttons",{staticClass:"dito-edit-buttons dito-buttons-round",attrs:{buttons:t.buttons,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store},on:{click:function(n){n.stopPropagation()}}},[t.isDraggable?s("a",t._b({staticClass:"dito-button"},"a",t.getButtonAttributes(t.verbs.drag),!1)):t._e(),t.isEditable?s("router-link",t._b({staticClass:"dito-button",attrs:{to:{path:t.editPath},append:""}},"router-link",t.getButtonAttributes(t.verbs.edit),!1)):t._e(),t.isCreatable?s("dito-create-button",{attrs:{schema:t.schema,path:t.createPath,verb:t.verbs.create,text:t.createButtonText}}):t._e(),t.isDeletable?s("button",t._b({staticClass:"dito-button",attrs:{type:"button"},on:{click:function(n){return t.$emit("delete")}}},"button",t.getButtonAttributes(t.verbs.delete),!1)):t._e()],1)},fr=[],fc="";const _r=b.component("dito-edit-buttons",{props:{draggable:{type:Boolean,default:!1},editable:{type:Boolean,default:!1},creatable:{type:Boolean,default:!1},deletable:{type:Boolean,default:!1},editPath:{type:String,default:null},createPath:{type:String,default:null},buttons:{type:Object,default:null},schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Object,Array],default:null},meta:{type:Object,required:!0},store:{type:Object,required:!0}},computed:{formLabel(){return this.getLabel(this.schema.form)},isDraggable(){return this.hasOption("draggable")},isEditable(){return this.hasOption("editable")&&!!this.editPath},isCreatable(){return this.hasOption("creatable")&&!!this.createPath},isDeletable(){return this.hasOption("deletable")},createButtonText(){var t;return((t=this.schema.creatable)==null?void 0:t.label)||this.formLabel&&`${o.capitalize(this.verbs.create)} ${this.formLabel}`||null}},methods:{hasOption(t){return!!(this[t]&&this.schema[t]!==!1)}}}),ke={};var vr=m(_r,mr,fr,!1,gr,null,null,null);function gr(t){for(let e in ke)this[e]=ke[e]}var br=function(){return vr.exports}(),yr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-create-button"},[t.showPulldown?[s("button",{staticClass:"dito-button",class:"dito-button-"+t.verb,attrs:{type:"button",title:t.labelize(t.verb)},on:{mousedown:function(n){return n.stopPropagation(),t.onPulldownMouseDown()}}},[t._v(t._s(t.text))]),s("ul",{staticClass:"dito-pulldown",class:{"dito-open":t.pulldown.open}},t._l(t.forms,function(n,a){return s("li",[t.isCreatable(n)?s("a",{class:"dito-type-"+a,on:{mousedown:function(r){return r.stopPropagation(),t.onPulldownMouseDown(a)},mouseup:function(r){return t.onPulldownMouseUp(a)}}},[t._v(t._s(t.getLabel(n)))]):t._e()])}),0)]:s("button",{staticClass:"dito-button",class:"dito-button-"+t.verb,attrs:{type:t.isInlined?"button":"submit",title:t.labelize(t.verb)},on:{click:function(n){return t.createItem(t.forms.default)}}},[t._v(t._s(t.text))])],2)},$r=[],_c="";const Cr=b.component("dito-create-button",{mixins:[be],props:{schema:{type:Object,required:!0},path:{type:String,required:!0},verb:{type:String,required:!0},text:{type:String,default:null}},computed:{forms(){return W(this.schema,this.context)},isInlined(){return Pt(this.schema)},showPulldown(){return Object.keys(this.forms).length>1||!this.forms.default}},methods:{isCreatable(t){return t.creatable!==!1},createItem(t,e=null){if(this.isCreatable(t))this.isInlined?this.sourceComponent.createItem(t,e):this.$router.push({path:`${this.path}/create`,query:{type:e},append:!0});else throw new Error("Not allowed to create item for given form")},onPulldownSelect(t){this.createItem(this.forms[t],t),this.setPulldownOpen(!1)}}}),Le={};var Dr=m(Cr,yr,$r,!1,Pr,null,null,null);function Pr(t){for(let e in Le)this[e]=Le[e]}var wr=function(){return Dr.exports}(),Sr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.clipboard?s("div",{staticClass:"dito-clipboard dito-buttons dito-buttons-round"},[s("button",{ref:"copyData",staticClass:"dito-button dito-button-copy",attrs:{type:"button",title:"Copy Data",disabled:!t.copyEnabled},on:{click:t.onCopy}}),s("button",{staticClass:"dito-button dito-button-paste",attrs:{type:"button",title:"Paste Data",disabled:!t.pasteEnabled},on:{click:t.onPaste}})]):t._e()},xr=[];const Or=b.component("dito-clipboard",{mixins:[G],props:{clipboard:{type:[Boolean,Object],default:!1},dataPath:{type:String,required:!0},data:{type:[Object,Array],default:null}},data(){return{copyEnabled:!1,pasteEnabled:!1,fixClipboard:!0}},computed:{clipboardOptions(){return o.isObject(this.clipboard)?this.clipboard:{}},copyData(){const{copy:t}=this.clipboardOptions;return t?e=>t.call(this,new O(this,{clipboardData:e})):e=>o.clone(e)},pasteData(){const{paste:t}=this.clipboardOptions;return t?e=>t.call(this,new O(this,{clipboardData:e})):e=>e}},mounted(){this.domOn(document,{copy:this.checkClipboard}),this.domOn(window,{focus:this.checkClipboard}),this.$watch("data",{immediate:!0,handler:(t,e)=>{t!==e&&this.checkClipboard()}})},methods:{async getClipboardData(t){var a,r,i,l,u;let{clipboardData:e}=this.appState;try{const d=await((r=(a=navigator.clipboard)==null?void 0:a.readText)==null?void 0:r.call(a));this.fixClipboard&&d&&(await((l=(i=navigator.clipboard)==null?void 0:i.writeText)==null?void 0:l.call(i,d)),this.fixClipboard=!1),d&&(e=JSON.parse(d))}catch(d){t&&(console.error(d,d.name,d.message),d.name==="SyntaxError"&&alert(o.deindent`
|
|
1
|
+
var Vu=Object.defineProperty,Eu=Object.defineProperties;var ku=Object.getOwnPropertyDescriptors;var rt=Object.getOwnPropertySymbols;var Ds=Object.prototype.hasOwnProperty,Ps=Object.prototype.propertyIsEnumerable;var Vt=(v,S,F)=>S in v?Vu(v,S,{enumerable:!0,configurable:!0,writable:!0,value:F}):v[S]=F,h=(v,S)=>{for(var F in S||(S={}))Ds.call(S,F)&&Vt(v,F,S[F]);if(rt)for(var F of rt(S))Ps.call(S,F)&&Vt(v,F,S[F]);return v},x=(v,S)=>Eu(v,ku(S));var R=(v,S)=>{var F={};for(var I in v)Ds.call(v,I)&&S.indexOf(I)<0&&(F[I]=v[I]);if(v!=null&&rt)for(var I of rt(v))S.indexOf(I)<0&&Ps.call(v,I)&&(F[I]=v[I]);return F};var Et=(v,S,F)=>(Vt(v,typeof S!="symbol"?S+"":S,F),F);(function(v,S){typeof exports=="object"&&typeof module!="undefined"?module.exports=S(require("vue"),require("vue-js-modal"),require("vue-router"),require("vue-notification"),require("axios"),require("@ditojs/utils"),require("nanoid"),require("@ditojs/ui"),require("vuedraggable"),require("codeflask"),require("tinycolor2"),require("vue-color"),require("tiptap"),require("tiptap-commands"),require("tiptap-extensions"),require("vue-multiselect"),require("vue-upload-component"),require("filesize-parser"),require("filesize")):typeof define=="function"&&define.amd?define(["vue","vue-js-modal","vue-router","vue-notification","axios","@ditojs/utils","nanoid","@ditojs/ui","vuedraggable","codeflask","tinycolor2","vue-color","tiptap","tiptap-commands","tiptap-extensions","vue-multiselect","vue-upload-component","filesize-parser","filesize"],S):(v=typeof globalThis!="undefined"?globalThis:v||self,v["dito-admin"]=S(v.vue,v["vue-js-modal"],v["vue-router"],v["vue-notification"],v.axios,v["@ditojs/utils"],v.nanoid,v["@ditojs/ui"],v.vuedraggable,v.codeflask,v.tinycolor2,v["vue-color"],v.tiptap,v["tiptap-commands"],v["tiptap-extensions"],v["vue-multiselect"],v["vue-upload-component"],v["filesize-parser"],v.filesize))})(this,function(v,S,F,I,ws,o,Ss,T,xs,Os,js,Fs,X,Vs,L,Es,ks,Ls,Bs){"use strict";function q(t){return t&&typeof t=="object"&&"default"in t?t:{default:t}}var z=q(v),Ts=q(S),kt=q(F),Rs=q(I),qs=q(ws),it=q(xs),Is=q(Os),ot=q(js),Ms=q(Es),As=q(ks),Ns=q(Ls),zs=q(Bs),Lt={title:"",routeComponents:[],user:null,loadCache:{},activeLabel:null,clipboardData:null};function B(t,e){return t?`${t}/${e}`:e}function Us(t){const e=o.parseDataPath(t);return e==null||e.pop(),e}function lt(t,e=!1){return e?Us(t):o.parseDataPath(t)}function Hs(t,e=!1){return o.normalizeDataPath(lt(t,e))}function Bt(t,e=!1){const s=lt(t,e);if(s){let n;do n=s.pop();while(n!=null&&o.isInteger(+n));if(n!=null)return s}return null}function Ks(t,e=!1){return o.normalizeDataPath(Bt(t,e))}function ut(t,e,s=!1){const n=lt(e,s);return n?o.getValueAtDataPath(t,n):null}function ct(t,e,s=!1){const n=Bt(e,s);return n?o.getValueAtDataPath(t,n):null}function Tt(t){const e=o.parseDataPath(t);return e[e.length-1]}function Ws(t){const e=Tt(t);return e==null||o.isInteger(+e)?null:e}function dt(t){const e=Tt(t),s=e==null?null:+e;return o.isInteger(s)?s:null}let Js=0;function Qs(t,e="id"){t[e]=`@${++Js}`}function Y(t){return/^@/.test(t)}function Gs(t,e="id"){return(t==null?void 0:t[e])!=null&&Object.keys(t).length===1}const ht=new WeakMap;function D(t,e,s){const n=ht.get(t),a=n[e];return a!==void 0||n.hasOwnProperty(e)?a:o.isFunction(s)?s():s}function Xs(t,e,s){ht.get(t)[e]=s}class O{constructor(e,s){var a;s=s?o.isFunction(s)?s():h({},s):{},(a=s.nested)!=null||(s.nested=!0),s.component=e;const n=Object.setPrototypeOf(s,e);ht.set(this,n)}static get(e,s){return s instanceof O?s:new O(e,s)}get nested(){return D(this,"nested",!0)}get value(){return D(this,"value",void 0)}get dataPath(){return D(this,"dataPath","")}get name(){return D(this,"name",()=>Ws(this.dataPath))}get index(){return D(this,"index",()=>dt(this.dataPath))}get itemDataPath(){return Hs(this.dataPath,this.nested)}get parentItemDataPath(){return Ks(this.dataPath,this.nested)}get itemIndex(){return dt(this.itemDataPath)}get parentItemIndex(){return dt(this.parentItemDataPath)}get item(){return D(this,"data",()=>ut(this.rootItem,this.dataPath,this.nested))}get parentItem(){const e=ct(this.rootItem,this.dataPath,this.nested)||null;return e!==this.item?e:null}get rootItem(){return D(this,"rootData",null)}get processedItem(){return D(this,"processedData",null)}get clipboardItem(){return D(this,"clipboardData",null)}get user(){return D(this,"user",null)}get api(){return D(this,"api",null)}get views(){return D(this,"views",null)}get itemLabel(){return D(this,"itemLabel",null)}get formLabel(){return D(this,"formLabel",null)}get component(){return D(this,"component",null)}get schemaComponent(){return D(this,"schemaComponent",null)}get formComponent(){return D(this,"formComponent",null)}get viewComponent(){return D(this,"viewComponent",null)}get dialogComponent(){return D(this,"dialogComponent",null)}get panelComponent(){return D(this,"panelComponent",null)}get resourceComponent(){return D(this,"resourceComponent",null)}get sourceComponent(){return D(this,"sourceComponent",null)}get option(){return D(this,"option",void 0)}get options(){return D(this,"options",void 0)}get query(){return D(this,"query",void 0)}get error(){return D(this,"error",void 0)}get wasNotified(){return D(this,"wasNotified",!1)}get request(){return e=>this.component.request(e)}get format(){return(e,s)=>this.component.format(e,s)}get navigate(){return e=>this.component.navigate(e)}get download(){return e=>this.component.download(e)}get getResourceUrl(){return e=>this.component.getResourceUrl(e)}get notify(){return e=>{this.component.notify(e),Xs(this,"wasNotified",!0)}}}var Ys={data(){return{$events:null}},methods:{on(t,e){if(o.isArray(t))for(const s of t)this.on(s,e);else if(o.isPlainObject(t))for(const s in t)this.on(s,t[s]);else{const s=this.$events||(this.$events=Object.create(null)),{callbacks:n}=s[t]||(s[t]={callbacks:[],queue:[]});n.push(e)}return this},once(t,e){const s=(...n)=>(this.off(t,s),e.apply(this,n));return s.callback=e,this.on(t,s)},off(t,e){var s;if(!arguments.length)delete this.$events;else if(o.isArray(t))for(const n of t)this.off(n,e);else if(o.isPlainObject(t))for(const n in t)this.off(n,t[n]);else{const n=(s=this.$events)==null?void 0:s[t];if(n)if(!e)delete this.$events[t];else{const{callbacks:a}=n,r=a.findIndex(i=>i===e||i.callback===e);r!==-1&&a.splice(r,1)}}return this},emit(t,...e){var n;const s=(n=this.$events)==null?void 0:n[t];if(s){const{queue:a,callbacks:r}=s;return new Promise(i=>{const l=async()=>{const c=a.shift();if(c){let u;for(const d of r)try{const g=await d.apply(this,c.args);g!==void 0&&(u=g)}catch(g){console.error(`Error during event handler for '${t}':`,g)}c.resolve(u),l()}};a.push({args:e,resolve:i}),a.length===1&&l()})}},hasListeners(t){var e;if(o.isArray(t)){for(const s of t)if(!this.hasListeners(s))return!1;return t.length>0}else return!!((e=this.$events)!=null&&e[t])},delegate(t,e){if(e)if(o.isArray(t))for(const s of t)this.delegate(s,e);else this.on(t,(...s)=>e.emit(t,...s));return this}}};const pt={Boolean:o.isBoolean,Number:o.isNumber,String:o.isString,Date:o.isDate,Array:o.isArray,Object:o.isObject,RegExp:o.isRegExp,Function:o.isFunction},Zs={Boolean:t=>!!t,Number:t=>+t,String:t=>String(t),Date:t=>o.isDate(t)?t:new Date(t),Array:t=>o.isArray(t)?t:o.isString(t)?t.split(","):o.asArray(t),Object:t=>o.isObject(t)?t:t===!0?{}:null,RegExp:t=>o.isRegExp(t)?t:new RegExp(t)};function mt(t,e){var s;if(t&&e!=null){for(const n of t)if((s=pt[n.name])!=null&&s.call(pt,e))return!0}return!1}function tn(t,e){const s=t&&Zs[t.name||t];return s?s(e):e}function Rt(t){return!!M(t.resource)}function M(t,e={}){var r;const a=e,{parent:s}=a,n=R(a,["parent"]);return t=o.isObject(t)?h(h({},n),t):o.isString(t)?x(h({},n),{path:t}):null,t&&s!==void 0&&t.parent===void 0&&!((r=t.path)!=null&&r.startsWith("/"))&&(t.parent=s,t.path||(t.path=".")),t}function ft(t,e){return t!=null&&(e==null?void 0:e.type)==="collection"?x(h({type:"member"},o.pickBy(e,(s,n)=>["method","path","parent"].includes(n))),{id:`${t}`}):null}const qt=new Set;function en(t){qt.has(t)||(qt.add(t),console.warn(t))}var _t={mixins:[Ys],inject:["api","$verbs","$views","$isPopulated","$schemaComponent","$routeComponent","$dataComponent","$sourceComponent","$resourceComponent","$dialogComponent","$panelComponent","$tabComponent"],provide(){return this.providesData?{$dataComponent:()=>this}:{}},data(){return{appState:Lt,overrides:null}},computed:{sourceSchema(){var t;return(t=this.meta)==null?void 0:t.schema},user(){return Lt.user},verbs(){return this.$verbs()},views(){return this.$views()},isPopulated(){return this.$isPopulated()},locale(){return this.api.locale},context(){return new O(this,{nested:!1})},rootComponent(){return this.$root.$children[0]},schemaComponent(){return this.$schemaComponent()},routeComponent(){return this.$routeComponent()},formComponent(){const t=this.routeComponent;return t!=null&&t.isForm?t:null},viewComponent(){const t=this.routeComponent;return t!=null&&t.isView?t:null},dataComponent(){return this.providesData?this:this.$dataComponent()},sourceComponent(){return this.$sourceComponent()},resourceComponent(){return this.$resourceComponent()},dialogComponent(){return this.$dialogComponent()},panelComponent(){return this.$panelComponent()},tabComponent(){return this.$tabComponent()},parentSchemaComponent(){var t;return(t=this.schemaComponent)==null?void 0:t.$parent.schemaComponent},parentRouteComponent(){var t;return(t=this.routeComponent)==null?void 0:t.$parent.routeComponent},parentFormComponent(){var t;return(t=this.formComponent)==null?void 0:t.$parent.formComponent},rootData(){var t;return(t=this.dataComponent)==null?void 0:t.data}},beforeCreate(){this.$uid=++sn},methods:{getStore(t){return this.store[t]},setStore(t,e){return this.$set(this.store,t,e)},getChildStore(t){return this.getStore(t)||this.setStore(t,{})},getSchemaValue(t,{type:e,default:s,schema:n=this.schema,callback:a=!0}={}){const r=e&&o.asArray(e);let i=n?o.isArray(t)?o.getValueAtDataPath(n,t,()=>{}):n[t]:void 0;if(i===void 0&&s!==void 0)return a&&o.isFunction(s)&&!mt(r,s)&&(s=s.call(this,this.context)),s;if(mt(r,i))return i;if(a&&o.isFunction(i)&&(i=i.call(this,this.context)),r&&i!=null&&!mt(r,i))for(const l of r){const c=tn(l,i);if(c!==i)return c}return i},getLabel(t,e){return t?this.getSchemaValue("label",{type:String,schema:t})||o.labelize(e||t.name):o.labelize(e)||""},labelize:o.labelize,getButtonAttributes(t,e){const s=this.verbs[t]||t;return{class:`dito-button-${s}`,title:(e==null?void 0:e.text)||o.labelize(s)}},getDragOptions(t,e=!1){return{animation:150,disabled:!t,handle:".dito-button-drag",dragClass:"dito-drag-active",chosenClass:"dito-drag-chosen",ghostClass:"dito-drag-ghost",fallbackClass:"dito-drag-fallback",forceFallback:e}},getQueryLink(t){return{query:t,hash:this.$route.hash}},shouldRender(t=null){return!!t&&this.getSchemaValue("if",{type:Boolean,default:!0,schema:t})},showDialog({components:t,buttons:e,data:s,settings:n={width:480,height:"auto",clickToClose:!1}}){return new Promise((a,r)=>{this.$modal.show(b.component("dito-dialog"),{components:t,buttons:e,data:s,promise:{resolve:a,reject:r}},n)})},getResourcePath(t){var e;return t=M(t),t.parent===void 0&&(t.parent=(e=this.dataComponent)==null?void 0:e.resource),this.api.resources.any(M(t))},getResourceUrl(t){const e=this.getResourcePath(t);let s=null;if(e){s=`${this.api.url.replace(/\/+$/,"")}/${e.replace(/^\/+/,"")}`;const{query:n}=t;if(n){const a=Object.entries(n).map(([r,i])=>`${encodeURIComponent(r)}=${encodeURIComponent(i)}`);s=`${s}?${a.join("&")}`}}return s},async sendRequest({method:t,url:e,resource:s,data:n,params:a,internal:r}){e=e||this.getResourcePath(s),t=t||(s==null?void 0:s.method);const i=!r&&this.api.isApiRequest(e);i&&await this.rootComponent.ensureUser();const l=await this.api.request({method:t,url:e,data:n,params:a});return i&&t==="patch"&&o.equals(s,ft(this.user.id,this.api.users))&&await this.rootComponent.fetchUser(),l},request(s){var n=s,{cache:t}=n,e=R(n,["cache"]);const a=t&&{global:this.appState,local:this.dataComponent}[t],r=a==null?void 0:a.loadCache,i=r&&`${e.method||"get"} ${e.url} ${JSON.stringify(e.params||"")} ${JSON.stringify(e.data||"")}`;if(r&&i in r)return r[i];const l=this.sendRequest(e).then(c=>c.data).catch(c=>{var d;const u=(d=c.response)==null?void 0:d.data;throw u?Object.assign(new Error(u.message),u):c});return r&&(r[i]=l),l},load(t){return en("load() is deprecated. Use request() instead."),this.request(t)},format(t,a={}){var r=a,{locale:e=this.api.locale,defaults:s=this.api.formats}=r,n=R(r,["locale","defaults"]);return o.format(t,h({locale:e,defaults:s},n))},async navigate(t){return new Promise(e=>{this.$router.push(t,()=>e(!0),()=>e(!1))})},download(t={}){o.isString(t)&&(t={url:t});const{url:e,filename:s}=t,n=document.createElement("a");n.href=e,s&&(n.download=s);const{body:a}=document;a.appendChild(n),n.click(),a.removeChild(n)},notify(t){this.rootComponent.notify(t)},closeNotifications(){this.rootComponent.closeNotifications()},setupSchemaFields(){this.setupMethods(),this.setupComputed(),this.setupEvents()},setupMethods(){for(const[t,e]of Object.entries(this.schema.methods||{}))o.isFunction(e)?this[t]=e:console.error(`Invalid method definition: ${t}: ${e}`)},setupComputed(){for(const[t,e]of Object.entries(this.schema.computed||{})){const s=o.isFunction(e)?{get:e}:o.isObject(e)&&o.isFunction(e.get)?e:null;s?Object.defineProperty(this,t,s):console.error(`Invalid computed property definition: ${t}: ${e}`)}},setupEvents(){const{watch:t,events:e}=this.schema;if(t){const n=o.isFunction(t)?t.call(this):t;o.isObject(n)&&this.$nextTick(()=>{for(const[a,r]of Object.entries(n)){const i=this.schemaComponent.getComponentByName(a)?`data.${a}`:a;this.$watch(i,r)}})}const s=(n,a,r)=>{o.isFunction(r)?this.on(o.hyphenate(a),r):console.error(`Invalid event definition: ${n}: ${r}`)};if(e)for(const[n,a]of Object.entries(e))s(n,n,a);for(const[n,a]of Object.entries(this.schema))/^on[A-Z]/.test(n)&&s(n,n.slice(2),a)},async emitEvent(t,{context:e=null,parent:s=null}={}){const n=this.hasListeners(t),a=s==null?void 0:s.hasListeners(t);if(n||a){["load","change"].includes(t)&&await this.$nextTick();const r=()=>e=O.get(this,e),i=n?await this.emit(t,r()):void 0;return a&&i!==!1&&s.emit(t,r()),i}},emitSchemaEvent(t,e){return this.schemaComponent.emitEvent(t,e)}}};let sn=0;var nn=Object.freeze(Object.defineProperty({__proto__:null,creditcard:{validate:t=>o.isCreditCard(t),message:"is invalid"},decimals:{validate:(t,e)=>{const s=e==="*"?"+":`{1,${e}}`;return new RegExp(`^[-+]?\\d*(\\.\\d${s})?$`).test(t)},message:(t,e)=>`must be numeric and may contain ${!e||e==="*"?"":e} decimal points`},email:{validate:t=>o.isEmail(t),message:"must be a valid email"},hostname:{validate:t=>o.isHostname(t),message:"is not a host name"},domain:{validate:t=>o.isDomain(t),message:"is not a domain"},integer:{validate:t=>o.isInteger(t),message:"must be whole number"},max:{validate:(t,e)=>t<=e,message(t,e){return`must be ${e} or less`}},min:{validate:(t,e)=>t>=e,message(t,e){return`must be ${e} or more`}},password:{validate:()=>!0},range:{validate:(t,[e,s])=>t>=e&&t<=s,message(t,[e,s]){return`must be between ${e} and ${s}`}},required:{validate:(t,e,{password:s})=>t!=null&&t!==""||s&&t===void 0,message:"is required",nullish:!0},url:{validate:t=>o.isUrl(t),message:"is not a valid URL"}},Symbol.toStringTag,{value:"Module"})),an={data(){return{isTouched:!1,isDirty:!1,isValidated:!1,isValid:!1,errors:null}},computed:{events(){return{focus:()=>{this.isTouched=!0},blur:()=>{this.validate()},change:()=>{this.markDirty()},input:()=>{this.markDirty()}}}},methods:{resetValidation(){this.isTouched=!1,this.isDirty=!1,this.isValidated=!1,this.isValid=!1,this.clearErrors()},validate(t=!0){let e=!0;t&&this.clearErrors();const{value:s}=this;for(const[n,a]of Object.entries(this.validations)){const r=nn[n];if(r&&(r.nullish||s!=null)){const{validate:i,message:l}=r;if(!i(s,a,this.validations)&&(e=!1,t)){const c=o.isFunction(l)?l(s,a,this):l;this.addError(c,!0)}}}return t&&(this.isValidated=!0,this.isValid=e),e},verify(){return this.validate(!1)},markDirty(){this.isDirty=!0,this.isValidated=!1,this.isValid=!1,this.clearErrors()},addError(t,e=!1){this.errors||(this.errors=[]),e&&(t=`The ${this.label||this.placeholder||this.name} field ${t}.`),this.errors.push(t),this.$emit("errors",this.errors)},showValidationErrors(t,e){this.errors=[];for(const{message:s}of t)this.addError(s,!0);return e&&this.focus(),!0},getErrors(){return this.errors?[...this.errors]:null},clearErrors(){this.errors=null,this.$emit("errors",this.errors)}}};function p(t,{type:e,default:s,get:n,set:a,callback:r=!0}={}){o.isString(t)&&t.includes(".")&&(t=o.parseDataPath(t));const i=o.normalizeDataPath(t);return{get(){const l=!n||n.length>0?this.overrides&&i in this.overrides?this.overrides[i]:this.getSchemaValue(t,{type:e,default:s,callback:r}):void 0;return n?n.call(this,l):l},set(l){a?a.call(this,l):(this.overrides||(this.overrides={}),this.$set(this.overrides,i,l))}}}function vt(t,{default:e,get:s,set:n}={}){return{get(){let a=this.getStore(t);return a===void 0&&e!==void 0&&(a=o.isFunction(e)?e.call(this,this.context):e,this[t]=a,this.getStore(t)),s?s.call(this,a):a},set(a){(!n||(a=n.call(this,a))!==void 0)&&this.setStore(t,a)}}}const It=new WeakMap;let rn=0;function on(t,e){let s=It.get(t);return s||(s=s=e||`@${++rn}`,It.set(t,s)),s}class ln{constructor(){Et(this,"graph",{});Et(this,"references",{})}set(e,s,n){var r;e=o.parseDataPath(e);let a=this.graph;for(const i of e){const l=o.isInteger(+i)?"*":i;a=(r=a[l])!=null?r:a[l]={}}a.$settings=h(h(h({},n),a.$settings),s)}addSource(e,s){this.set(e,{type:"source",schema:s},{related:!1})}setSourceRelated(e){this.set(e,{related:!0,reference:this.getReferencePrefix(e)})}addRelation(e,s,n){this.set(e,{type:"relation",schema:n,internal:!!s,reference:this.getReferencePrefix(s)})}getReferencePrefix(e){var s,n;return e?(n=(s=this.references)[e])!=null?n:s[e]=Ss.nanoid(6):null}flatten(){const e=s=>{const n=[];for(const a of Object.entries(s)){const[l,r]=a,i=r,{$settings:c}=i,u=R(i,["$settings"]);c&&n.push([l,c]);for(const[d,g]of e(u))n.push([`${l}/${d}`,g])}return n};return e(this.graph)}process(e,s,{target:n}){const a=n==="clipboard";a&&delete s[e.idKey||"id"];for(const[r,i]of this.flatten()){const{type:l,schema:c,internal:u,related:d,reference:g}=i,_=l==="source",C=l==="relation";if(_||C&&u){const f=o.getValueAtDataPath(s,r,()=>null),P=a&&_&&!d,V=a&&(C&&u||_&&d);for(const w of o.asArray(f).flat()){const y=_&&c.idKey||C&&c.relateBy||"id";let j=w==null?void 0:w[y];if(j!=null&&(P&&delete w[y],V||Y(j))){Y(j)&&(j=j.slice(1));const k=a?y:_?"#id":"#ref",E=a?`@${j}`:g?`${g}-${j}`:j;w[k]=E,k!==y&&delete w[y]}}}}return s}}const Mt={},At={};function un(t,e){Mt[t]=e}function gt(t,e=!1){const s=Mt[t]||null;if(!s&&!e&&!At[t])throw At[t]=!0,new Error(`Unknown Dito component type: '${t}'`);return s}function Nt(t,e){const s=[...Object.values((t==null?void 0:t.tabs)||{}),t];for(const n of s)if(n){const a=e(n);if(a!==void 0)return a}}function zt(t,e){return Nt(t,s=>{for(const[n,a]of Object.entries(s.components||{})){const r=e(a,n);if(r!==void 0)return r}})}function cn(t,e){return zt(t,(s,n)=>e(s,n)?!0:void 0)===!0}async function bt(t,e=!1){if(o.isFunction(t)&&(t=t()),o.isPromise(t)&&(t=await t),o.isModule(t)&&(t=h({},t),!t.name&&(e||t.default))){const s=Object.keys(t);if(s.length===1){const n=s[0];t=t[n],t.name=n}}return t}async function yt(t,e=bt){let s=o.isFunction(t)?t():t;return s=await bt(s,!1),o.isArray(s)?s=Object.fromEntries(await Promise.all(s.map(async n=>{const a=await e(n,!0);return[a.name,a]}))):o.isObject(s)&&(s=Object.fromEntries(await Promise.all(Object.entries(s).map(async([n,a])=>{const r=await e(a,!0);return[n,r]})))),s}async function Ut(t){const{panels:e}=t;t.panels&&(t.panels=await yt(e))}async function dn(t,e,s,n,a){const r=[];Kt(e,s,n),await Ut(s),Jt(s)?await Ht(e,s,n,r,0):await $t(e,s,r,1),a.push({path:`/${s.path}`,children:r,component:t,meta:{api:e,schema:s}})}function Ht(t,e,s,n,a){var r,i;return e.level=a,(i=(r=A(e))==null?void 0:r.processSchema)==null?void 0:i.call(r,t,e,s,n,a)}function Kt(t,e,s){e.name=s,e.path=e.path||t.normalizePath(s)}async function $t(t,e,s,n){const a=[];zt(e,(r,i)=>{a.push(Ht(t,r,i,s,n))}),await Promise.all(a)}async function hn(t,e,s){let{form:n,forms:a,components:r}=e;a?a=e.forms=await yt(a,Wt):n?n=e.form=await Wt(n):r&&o.isObject(r)&&(n={components:r}),a||(a={default:n});const i=[];for(const l of Object.values(a))await $t(t,l,i,s+1);return i}async function Wt(t){return t=await bt(t,!0),t&&await Ut(t),t}function Jt(t){return!!t.type}function H(t){return o.isObject(t)&&!!(t.form||t.forms||t.components)}function pn(t){return Object.keys((t==null?void 0:t.forms)||{}).length>1}function Ct(t,e){const{view:s}=t,n=s&&e.views[s];return n?H(n)?n:Nt(n,a=>{var i;const r=(i=a.components)==null?void 0:i[s];if(H(r))return r}):null}function mn(t,e){const s=Ct(t,e);return s?s.level===0?`/${s.path}`:`/${s.path}/${s.path}`:null}function W(t,e,s){const n=Ct(t,e);if(n)t=n;else if(t.view)throw new Error(`Unknown view: '${t.view}'`);let{form:a,forms:r,components:i,compact:l}=t;if(!a&&!r)if(i)a={components:i,compact:l};else return{};return r||(r={default:a}),Object.fromEntries(Object.entries(r).map(([c,u])=>{var d;return o.isFunction(u.components)&&(u=x(h({},u),{components:u.components(e)})),[c,(d=s==null?void 0:s(u))!=null?d:u]}))}function Qt(t,e){return t[e==null?void 0:e.type]||t.default||null}function Dt(t,e,s){return Qt(W(t,s),e)}function fn(t){return t.label!==!1}function Gt(t){return!!t.compact}function Pt(t){return!!(t.inlined||t.components)}function Xt(t){var e;return!!(t.nested||((e=A(t))==null?void 0:e.defaultNested)===!0)}function _n(t){var e;return!!((e=A(t))!=null&&e.omitPadding)}function Yt(t){var n;const e=t.default,s=e!==void 0?e:(n=A(t))==null?void 0:n.defaultValue;return o.isFunction(s)?s(t):o.clone(s)}function Zt(t){var s;const e=A(t);return!!((e==null?void 0:e.excludeValue)||((s=e==null?void 0:e.ignoreMissingValue)==null?void 0:s.call(e,t)))}function vn(t){const e=s=>Object.values(s||{}).some(fn);return e(t.components)||Object.values(t.tabs||{}).some(e)}function te(t,e={},s){return Z(t,e,null,null,(r,i,l)=>{!(l in i)&&!Zt(r)&&(i[l]=Yt(r))},null,{component:s,rootData:e})}function ee(t,e,s,n,{component:a=null,rootData:r=a==null?void 0:a.rootData}={}){const{compute:i}=t;if(i){const l=i(O.get(a,{value:e[s],name:s,data:e,dataPath:n,rootData:r}));l!==void 0&&z.default.set(e,s,l)}return!(s in e)&&!Zt(t)&&z.default.set(e,s,Yt(t)),e[s]}function se(t,e,s){if(s.schemaOnly){const n={},{idKey:a="id",orderKey:r}=t,i=e[a];return i!==void 0&&(n[a]=i),pn(t)&&(n.type=e.type),r&&(n[r]=e[r]),n}else return h({},e)}function gn(t,e,s,n,{component:a,schemaOnly:r,target:i}={}){const l={component:a,schemaOnly:r,target:i,rootData:s},c=se(e,s,l),u=new ln;return Z(t,s,n,c,(_,C,f,P,V)=>{let w=ee(_,C,f,P,l);if(o.isArray(w)){const{wrapPrimitives:y,orderKey:j,idKey:k="id"}=_;y?w=w.map(E=>({[y]:E})):w=[...w],j&&i==="clipboard"&&w.sort((E,U)=>{const N=E==null?void 0:E[k],Ft=U==null?void 0:U[k];return N==null||Y(N)?1:Ft==null||Y(Ft)?-1:N-Ft})}V[f]=w},(_,C,f,P,V)=>{const{wrapPrimitives:w,exclude:y,process:j}=_;let k=V[f];const E=A(_),U=()=>O.get(a,{value:k,name:f,data:C,dataPath:P,rootData:l.rootData,processedData:V});if(w&&o.isArray(k)&&(k=k.map(N=>N[w])),j&&(k=j(U())),(E==null?void 0:E.excludeValue)||y===!0||o.isFunction(y)&&y(U()))delete V[f];else{const N=E==null?void 0:E.processValue;N&&(k=N(_,k,P,u)),V[f]=k}},l),u.process(e,c,l)}function Z(t,e,s,n,a,r,i){const l=c=>{const u=(d,g)=>d!=null?B(d,g):null;if(c)for(const[d,g]of Object.entries(c))if(!Xt(g))Z(g,e,s,n,a,r,i);else{const _=u(s,d),C=(P,V=null)=>{var U;const w=V!==null?u(_,V):_,y=O.get(i.component,{data:e,value:P,dataPath:w,index:V,rootData:i.rootData}),k=(((U=A(g))==null?void 0:U.getFormSchemasForProcessing)||W)(g,y),E=Qt(k,P);if(E){const N=n?se(g,P,i):null;return Z(E,P,w,N,a,r,i)}else return h({},P)};a==null||a(g,e,d,_,n);let f=n?n[d]:e[d];f!=null&&H(g)&&(o.isArray(f)?f=n?f.map(C):f.forEach(C):f=C(f),n&&(n[d]=f)),r==null||r(g,e,d,_,n)}};if(l(t.components),t.tabs)for(const c of Object.values(t.tabs))l(c.components);for(const c of oe(t,s))l(c.schema.components);return n||e}function K(t,e){const s=(n,a)=>n.length>0?n.reduce((r,i)=>{const l=a(i);return l&&(r[l.name]=l&&e?h(h({},e),l):l),r},{}):null;return o.isArray(t)?s(t,n=>o.isObject(n)?n:{name:o.camelize(n,!1)}):o.isObject(t)?s(Object.entries(t),([n,a])=>o.isObject(a)?h({name:n},a):o.isString(a)?{name:n,label:a}:null):null}function tt(t){return K(t,{type:"button"})}function ne(t){return o.isObject(t)?t.type:t}function A(t){var e,s;return(s=(e=gt(ne(t),!0))==null?void 0:e.options)!=null?s:null}function ae(t){var e,s,n;return(n=(s=(e=A(t))==null?void 0:e.getSourceType)==null?void 0:s.call(e,ne(t)))!=null?n:null}function re(t,e,s){return t?{schema:t,dataPath:t.name?B(e,t.name):e,tabComponent:s}:null}function ie(t,e,s,n=[]){if(t)for(const[a,r]of Object.entries(t)){const i=re(r,B(e,a),s);i&&n.push(i)}return n}function oe(t,e,s=null,n=null){var i,l;const a=(l=(i=A(t))==null?void 0:i.getPanelSchema)==null?void 0:l.call(i,t,e,s),r=a?[re(a,e,n)]:[];return ie(t.panels,e,n,r),r}function J(t){return ae(t)==="object"}function Q(t){return ae(t)==="list"}function le(t,e){const s=e[t.idKey||"id"];return s!=null?String(s):void 0}function bn(t,e){return on(e,le(t,e))}var et={mixins:[an],props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Object,Array],required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},single:{type:Boolean,default:!1},nested:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1}},data(){return{parsedValue:null,focused:!1}},computed:{name(){return this.schema.name},type(){return this.schema.type},component(){return this.resolveTypeComponent(this.schema.component)},context(){return new O(this,{nested:this.nested})},value:{get(){const t=ee(this.schema,this.data,this.name,this.dataPath,{component:this}),{format:e}=this.schema;return e?e.call(this,new O(this,{value:t})):t},set(t){const{parse:e}=this.schema;this.parsedValue=e?e.call(this,new O(this,{value:t})):t,this.$set(this.data,this.name,this.parsedValue)}},item(){return ut(this.rootItem,this.dataPath,this.nested)},parentItem(){return ct(this.rootItem,this.dataPath,this.nested)},rootItem(){return this.rootData},processedItem(){const{schemaComponent:t}=this;return ut(t.processedItem,this.dataPath.slice(t.dataPath.length),this.nested)},label:p("label",{type:[String,Boolean],get(t){return o.isString(t)?t:t!==!1&&this.$options.generateLabel?this.getLabel(this.schema):null}}),width:p("width",{type:[String,Number]}),visible:p("visible",{type:Boolean,default(){return this.typeOptions.defaultVisible}}),exclude:p("exclude",{type:Boolean,default:!1}),required:p("required",{type:Boolean,default:!1}),readonly:p("readonly",{type:Boolean,default:!1}),autofocus:p("autofocus",{type:Boolean,default:!1}),clearable:p("clearable",{type:Boolean,default:!1}),placeholder:p("placeholder",{type:String}),autocomplete:p("autocomplete",{type:String}),attributes(){const{nativeField:t,textField:e}=this.$options,s={disabled:this.disabled};return t&&(s.name=this.name,this.label&&(s.title=this.label),s.readonly=this.readonly,s.autofocus=this.autofocus,e&&(s.placeholder=this.placeholder,s.autocomplete=this.autocomplete)),s},listeners(){const t=this.getListeners(),{events:e={}}=this.schema;if(e)for(const s of Object.keys(e))t[s]||(t[s]=()=>this.emitEvent(s));return t},validations(){const t=h({},this.getValidations());this.required&&(t.required=!0);for(const[e,s]of Object.entries(this.schema.rules||{}))s===void 0?delete t[e]:t[e]=s;return t},providesData(){return!1},showClearButton(){return this.clearable&&this.value!=null}},created(){this._register(!0),this.setupSchemaFields()},beforeDestroy(){this._register(!1)},methods:{_register(t){this.nested&&(this.schemaComponent._registerComponent(this,t),this[t?"on":"off"](this.events))},getListeners(){return{focus:this.onFocus,blur:this.onBlur,input:this.onInput,change:this.onChange}},getValidations(){return null},focusElement(){const[t]=o.asArray(this.$refs.element);t&&this.$nextTick(()=>{var e,s;t.focus(),this.disabled&&((s=(e=t.$el||t).scrollIntoView)==null||s.call(e))})},focus(){var t;this.schemaComponent.focus(),(t=this.tabComponent)==null||t.focus(),this.focusElement()},clear(){this.value=null,this.onChange()},onFocus(){this.focused=!0,this.emitEvent("focus")},onBlur(){this.focused=!1,this.emitEvent("blur")},onInput(){this.emitEvent("input")},onChange(){this.emitEvent("change",{context:this.parsedValue!==void 0?{value:this.parsedValue}:null,parent:this.schemaComponent})}}};const st={},b=z.default.extend({components:st,mixins:[_t],methods:{getTypeComponent:gt,resolveComponent(t,e=[]){return t&&(async()=>{let s=o.isFunction(t)?await t():o.isPromise(t)?await t:t;return s=(s==null?void 0:s.default)||s,s.mixins=e,s.components=st,s})},resolveDitoComponent(t){return this.resolveComponent(t,[_t])},resolveTypeComponent(t){return this.resolveComponent(t,[_t,et])}}});b.component=function(t,e){if(e){e=h({name:t},e);const s=this.extend(e);return st[t]=s,s}else return st[t]||z.default.component(t)};class yn{hasRole(...e){if(this.roles){for(const s of e)if(this.roles.includes(s))return!0}return!1}}var ue={provide(){return{$schemaParentComponent:()=>this}},data(){return{schemaComponents:[]}},computed:{mainSchemaComponent(){return this.schemaComponents[0]}},methods:{_registerSchemaComponent(t,e){const{schemaComponents:s}=this;e?s.push(t):s.splice(s.indexOf(t),1)}}},ce={mixins:[ue],computed:{errors(){return this.schemaComponents.reduce((t,{errors:e})=>e&&t?t.concat(e):e,null)},isTouched(){return this.schemaComponents.some(t=>t.isTouched)},isDirty(){return this.schemaComponents.some(t=>t.isDirty)},isValid(){return this.schemaComponents.every(t=>t.isValid)},isValidated(){return this.schemaComponents.every(t=>t.isValid)}},methods:{validateAll(t,e=!0){return this.schemaComponents.every(s=>s.validateAll(t,e))},verifyAll(t){return this.schemaComponents.every(e=>e.verifyAll(t))},resetValidation(){this.schemaComponents.forEach(t=>t.resetValidation())},clearErrors(){this.schemaComponents.forEach(t=>t.clearErrors())},showValidationErrors(t,e){this.schemaComponents.forEach(s=>s.showValidationErrors(t,e))}}},de={mixins:[ce],provide(){return{$routeComponent:()=>this}},beforeRouteUpdate(t,e,s){this.beforeRouteChange(t,e,s)},beforeRouteLeave(t,e,s){this.beforeRouteChange(t,e,s)},data(){return{reload:!1,store:{},loadCache:{}}},computed:{routeComponent(){return this},routeRecord(){return this.$route.matched[this.$vnode.data.routerViewDepth]},isLastRoute(){const{matched:t}=this.$route;return this.routeRecord===t[t.length-1]},isLastUnnestedRoute(){const{matched:t}=this.$route;for(let e=t.length-1;e>=0;e--){const s=t[e];if(!s.meta.nested)return this.routeRecord===s}return!1},isNestedRoute(){return this.meta.nested},meta(){var t;return(t=this.routeRecord)==null?void 0:t.meta},path(){return this.getRoutePath(this.routeRecord.path)},label(){return this.getLabel(this.schema)},breadcrumb(){const{breadcrumb:t}=this.schema||{};return t||`${this.breadcrumbPrefix} ${this.label}`},breadcrumbPrefix(){return""},param(){var t;return this.$route.params[(t=this.meta)==null?void 0:t.param]||null},doesMutate(){return!1}},created(){this.appState.routeComponents.push(this)},destroyed(){const{routeComponents:t}=this.appState;t.splice(t.indexOf(this),1)},methods:{beforeRouteChange(t,e,s){let n=!0;e.path.startsWith(this.path)&&!t.path.startsWith(this.path)&&e.path!==t.path&&(this.isFullRouteChange(t,e)||t.path.length<=e.path.length)&&(this.doesMutate?n=this.isValidated||this.validateAll():this.isDirty&&(n=window.confirm(`You have unsaved changes. Do you really want to ${this.verbs.cancel}?`))),s(n)},getRoutePath(t){return this.$route.path.split("/").slice(0,t.split("/").length).join("/")},getChildPath(t){return`${this.path}/${t}`},isFullRouteChange(t,e){const s=this.path.match(/^(\/[^/]*)/)[1];return!o.getCommonPrefix(t.path,e.path).startsWith(s)}}},$n=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isLastRoute?t.shouldRender(t.viewSchema)?s("div",{staticClass:"dito-view dito-scroll-parent"},[s("dito-schema",{staticClass:"dito-scroll",attrs:{schema:t.viewSchema,data:t.data,meta:t.meta,store:t.getChildStore(t.name),disabled:t.isLoading,generateLabels:!1,menuHeader:!0}})],1):t._e():s("router-view",{key:t.name})},Cn=[];function m(t,e,s,n,a,r,i,l){var c=typeof t=="function"?t.options:t;e&&(c.render=e,c.staticRenderFns=s,c._compiled=!0),n&&(c.functional=!0),r&&(c._scopeId="data-v-"+r);var u;if(i?(u=function(_){_=_||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,!_&&typeof __VUE_SSR_CONTEXT__!="undefined"&&(_=__VUE_SSR_CONTEXT__),a&&a.call(this,_),_&&_._registeredComponents&&_._registeredComponents.add(i)},c._ssrRegister=u):a&&(u=l?function(){a.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:a),u)if(c.functional){c._injectStyles=u;var d=c.render;c.render=function(C,f){return u.call(f),d(C,f)}}else{var g=c.beforeCreate;c.beforeCreate=g?[].concat(g,u):[u]}return{exports:t,options:c}}const Dn=b.component("dito-view",{mixins:[de],provide(){return{$sourceComponent:()=>{var t;return((t=this.mainComponent)==null?void 0:t.sourceComponent)||null},$resourceComponent:()=>{var t;return((t=this.mainComponent)==null?void 0:t.resourceComponent)||null}}},data(){return{isView:!0,isLoading:!1,data:{}}},computed:{schema(){return this.meta.schema},name(){return this.schema.name},isSingleComponentView(){return Jt(this.schema)},mainComponent(){return this.mainSchemaComponent.getComponentByDataPath(this.name)},viewSchema(){const{schema:t}=this;return this.isSingleComponentView?{name:t.name,components:{[t.name]:x(h({},t),{label:!1})}}:t},providesData(){return cn(this.viewSchema,t=>Rt(t))}},watch:{$route(t,e){this.isFullRouteChange(t,e)&&(this.isLoading=!1,this.data={})}},methods:{setData(t){this.data=t},getChildPath(t){return this.isSingleComponentView?this.path:`${this.path}/${t}`},setLoading(t){this.isLoading=!!t}}}),he={};var Pn=m(Dn,$n,Cn,!1,wn,null,null,null);function wn(t){for(let e in he)this[e]=he[e]}var pe=function(){return Pn.exports}(),G={data(){return{domHandlers:[]}},beforeDestroy(){for(const{remove:t}of this.domHandlers)t();this.domHandlers=[]},methods:{domOn(t,e,s){const n=T.addEvents(t,o.isObject(e)?e:{[e]:s});return this.domHandlers.push(n),n}}},Sn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-root"},[s("modals-container"),s("notifications",{ref:"notifications",staticClass:"dito-notifications",attrs:{position:"top right",classes:"dito-notification"}}),s("dito-menu"),s("main",{staticClass:"dito-page dito-scroll-parent"},[s("dito-header",{attrs:{spinner:t.options.spinner,isLoading:t.isLoading}},[t.user?s("dito-account"):t.allowLogin?s("a",{staticClass:"dito-login",on:{click:function(n){return t.rootComponent.login()}}},[s("span",[t._v("Login")])]):t._e()],1),s("router-view")],1)],1)},xn=[],Zu="";const On=b.component("dito-root",{mixins:[G],provide(){return{$views:()=>this.resolvedViews}},props:{unresolvedViews:{type:[Object,Function,Promise],required:!0},options:{type:Object,default:()=>({})}},data(){return{resolvedViews:{},allowLogin:!1,loadingCount:0}},computed:{notifications(){return this.$refs.notifications},isLoading(){return this.loadingCount>0}},created(){this.appState.title=document.title||"Dito.js Admin",this.appState.routeComponents=[]},async mounted(){this.domOn(document,{click:t=>{t.target.closest(".dito-label")||(this.appState.activeLabel=null)},keyup:t=>{t.code==="Tab"&&(this.appState.activeLabel=null)}});try{this.allowLogin=!1,await this.fetchUser()?await this.resolveViews():await this.login()}catch(t){console.error(t)}this.allowLogin=!0},methods:{notify({type:t="info",title:e,text:s}={}){e||(e={warning:"Warning",error:"Error",info:"Information",success:"Success"}[t]||"Notification"),s=`<p>${o.asArray(s).join("</p> <p>")}</p>`.replace(/\n|\r\n|\r/g,"<br>");const n={warning:"warn",error:"error",info:"log",success:"log"}[t]||"error";console[n](o.stripTags(s));const{notifications:a=!0}=this.api;if(a){const{durationFactor:r=20}=a,i=(40+s.length+e.length)*r;this.$notify({type:t,title:e,text:s,duration:i})}},closeNotifications(){this.notifications.destroyAll()},registerLoading(t){this.loadingCount+=t?1:-1},async login(){var n,a;this.allowLogin=!0;const{additionalComponents:t,redirectAfterLogin:e}=this.options.login||{},s=await this.showDialog({components:h({username:{type:"text",autofocus:!0},password:{type:"password"}},t),buttons:{cancel:{},login:{type:"submit"}}});if(s)try{const r=await this.sendRequest({resource:this.api.users.login,data:s,internal:!0});e?location.replace(e):(this.setUser(r.data.user),await this.resolveViews())}catch(r){const i=(a=(n=r.response)==null?void 0:n.data)==null?void 0:a.error;this.notify({type:"error",title:"Authentication Error",text:i||r}),i||console.error(r,r.response),this.login()}},navigateHome(){return this.navigate("/")},async logout(){try{(await this.sendRequest({resource:this.api.users.logout,internal:!0})).data.success&&(this.setUser(null),this.navigateHome())}catch(t){console.error(t)}},async fetchUser(){let t=null;try{t=(await this.sendRequest({resource:this.api.users.session,internal:!0})).data.user||null}catch(e){this.notify({type:"error",title:"Authentication Error",text:e})}return this.setUser(t),t},setUser(t){this.appState.user=t&&Object.setPrototypeOf(t,yn.prototype),t||(this.resolvedViews={},this.navigateHome())},async ensureUser(){await this.fetchUser()||await this.login()},async resolveViews(){try{this.resolvedViews=await yt(this.unresolvedViews)}catch(s){return s.request||console.error(s),this.login()}const t=[],e=[];for(const[s,n]of Object.entries(this.resolvedViews))e.push(dn(pe,this.api,n,s,t));await Promise.all(e);for(const s of t)this.$router.addRoute(s)}}}),me={};var jn=m(On,Sn,xn,!1,Fn,null,null,null);function Fn(t){for(let e in me)this[e]=me[e]}var wt=function(){return jn.exports}(),Vn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("nav",{staticClass:"dito-menu dito-scroll-parent"},[s("h1",[t._v(t._s(t.appState.title))]),s("ul",{staticClass:"dito-scroll"},t._l(t.views,function(n){return s("li",[t.shouldRender(n)?s("router-link",{staticClass:"dito-link",attrs:{to:"/"+n.path,"active-class":"dito-active"}},[t._v(t._s(t.getLabel(n)))]):t._e()],1)}),0)])},En=[],tc="";const kn=b.component("dito-menu",{}),fe={};var Ln=m(kn,Vn,En,!1,Bn,null,null,null);function Bn(t){for(let e in fe)this[e]=fe[e]}var Tn=function(){return Ln.exports}(),Rn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{directives:[{name:"show",rawName:"v-show",value:t.loading,expression:"loading"}],staticClass:"v-spinner"},[s("div",{staticClass:"v-pulse v-pulse1",style:[t.spinnerStyle,t.spinnerDelay1]}),s("div",{staticClass:"v-pulse v-pulse2",style:[t.spinnerStyle,t.spinnerDelay2]}),s("div",{staticClass:"v-pulse v-pulse3",style:[t.spinnerStyle,t.spinnerDelay3]})])},qn=[],ec="";const In={name:"PulseLoader",props:{loading:{type:Boolean,default:!0},color:{type:String,default:"#5dc596"},size:{type:String,default:"15px"},margin:{type:String,default:"2px"},radius:{type:String,default:"100%"}},data(){return{spinnerStyle:{backgroundColor:this.color,width:this.size,height:this.size,margin:this.margin,borderRadius:this.radius,display:"inline-block",animationName:"v-pulseStretchDelay",animationDuration:"0.75s",animationIterationCount:"infinite",animationTimingFunction:"cubic-bezier(.2,.68,.18,1.08)",animationFillMode:"both"},spinnerDelay1:{animationDelay:"0.12s"},spinnerDelay2:{animationDelay:"0.24s"},spinnerDelay3:{animationDelay:"0.36s"}}}},_e={};var Mn=m(In,Rn,qn,!1,An,null,null,null);function An(t){for(let e in _e)this[e]=_e[e]}var Nn=function(){return Mn.exports}(),zn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("nav",{staticClass:"dito-header"},[s("div",{staticClass:"dito-trail"},[s("ul",t._l(t.trail,function(n,a){return s("li",[a===t.trail.length-1?[s("span",{class:t.getBreadcrumbClass(n)},[t._v(t._s(n.breadcrumb))])]:s("router-link",{staticClass:"dito-breadcrumb",attrs:{to:n.path}},[s("span",{class:t.getBreadcrumbClass(n)},[t._v(t._s(n.breadcrumb))])])],2)}),0),t.isLoading?s("spinner",{staticClass:"dito-spinner"}):t._e()],1),t._t("default")],2)},Un=[],sc="";const ve=b.component("spinner",Nn),Hn=b.component("dito-header",{components:{Spinner:ve},props:{spinner:{type:Object,default:null},isLoading:{type:Boolean,default:!1}},computed:{trail(){return this.appState.routeComponents.filter(t=>!!t.routeRecord)}},created(){const{size:t="8px",color:e="#999"}=this.spinner||{},{props:s}=ve.options;s.size.default=t,s.color.default=e},methods:{getBreadcrumbClass(t){return{"dito-dirty":t.isDirty}}}}),ge={};var Kn=m(Hn,zn,Un,!1,Wn,null,null,null);function Wn(t){for(let e in ge)this[e]=ge[e]}var Jn=function(){return Kn.exports}(),be={mixins:[G],data(){return{pulldown:{open:!1,startTime:0,checkTime:!0,events:{mousedown:()=>{this.setPulldownOpen(!1),this.pulldown.handlers.remove()},mouseup:()=>{this.onPulldownMouseUp(null)&&this.pulldown.handlers.remove()}},handlers:null}}},methods:{onPulldownMouseDown(t){t?this.checkTime=!1:(this.setPulldownOpen(!0),this.checkTime=!0)},onPulldownMouseUp(t){const{startTime:e}=this.pulldown;if(!this.checkTime||e&&Date.now()-e>250)return this.setPulldownOpen(!1),t&&this.onPulldownSelect(t),!0},onPulldownSelect(){},setPulldownOpen(t){this.pulldown.open=t,this.pulldown.startTime=t?Date.now():0,t&&(this.pulldown.handlers=this.domOn(document,this.pulldown.events))}}},Qn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-account"},[s("a",{on:{mousedown:function(n){return n.stopPropagation(),t.onPulldownMouseDown()}}},[s("span",[t._v(t._s(t.user.username))])]),s("ul",{staticClass:"dito-pulldown",class:{"dito-open":t.pulldown.open}},t._l(t.items,function(n,a){return s("li",[s("a",{on:{mousedown:function(r){return r.stopPropagation(),t.onPulldownMouseDown(a)},mouseup:function(r){return t.onPulldownMouseUp(a)}}},[t._v(t._s(n))])])}),0)])},Gn=[],nc="";const Xn=b.component("dito-account",{mixins:[be],data(){return{items:{settings:"Settings",logout:"Logout"}}},methods:{onPulldownSelect(t){switch(t){case"logout":this.rootComponent.logout();break;case"settings":console.info("TODO: Implement Settings");break}}}}),ye={};var Yn=m(Xn,Qn,Gn,!1,Zn,null,null,null);function Zn(t){for(let e in ye)this[e]=ye[e]}var ta=function(){return Yn.exports}(),ea=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("form",{staticClass:"dito-dialog",on:{submit:function(n){n.preventDefault()}}},[s("dito-schema",{staticClass:"dito-scroll",attrs:{schema:t.schema,data:t.dialogData}},[s("dito-buttons",{staticClass:"dito-buttons-large",attrs:{slot:"buttons",buttons:t.buttonSchemas,data:t.dialogData},slot:"buttons"})],1)],1)},sa=[],ac="";const na=b.component("dito-dialog",{provide(){return{$dialogComponent:()=>this}},props:{components:{type:Object,required:!0},buttons:{type:Object,required:!0},promise:{type:Object,required:!0},data:{type:Object,default:()=>({})}},data(){const t=o.clone(this.data);for(const e in this.components)e in t||(t[e]=null);return{windowEvents:null,dialogData:t}},computed:{dialogComponent(){return this},name(){return this.$parent.name},schema(){return{components:this.components}},buttonSchemas(){return Object.entries(tt(this.buttons)).reduce((t,[e,s])=>{const{type:n,events:a}=s;if(!a){const r=n==="submit"?()=>this.accept():e==="cancel"?()=>this.cancel():null;r&&(s=x(h({},s),{events:{click:r}}))}return t[e]=s,t},{})},hasCancel(){return Object.keys(this.buttonSchemas).includes("cancel")}},mounted(){this.windowEvents=T.addEvents(window,{keyup:()=>{event.keyCode===27&&this.cancel()}})},destroyed(){this.windowEvents.remove()},methods:{hide(){this.$modal.hide(this.name)},resolve(t){this.promise.resolve(t),this.hide()},reject(t){this.promise.reject(t),this.hide()},accept(){this.resolve(this.dialogData)},cancel(){this.hasCancel&&this.resolve(null)}}}),$e={};var aa=m(na,ea,sa,!1,ra,null,null,null);function ra(t){for(let e in $e)this[e]=$e[e]}var ia=function(){return aa.exports}(),oa=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.content?s(t.options.tag||t.tag,{tag:"component",class:t.classes,style:t.styles},[t._v(t._s(t.options.text))]):t._e()},la=[];const ua=b.component("dito-element",{props:{tag:{type:String,default:"span"},content:{type:[String,Object]}},computed:{options(){const{content:t}=this;return o.isObject(t)?t:{text:t}},classes(){return h(h({},this.$attrs.class),Ce(this.options.class))},styles(){return h(h({},this.$attrs.style),Ce(this.options.style))}}});function Ce(t){return o.asArray(t).reduce((e,s)=>(o.isString(s)?e[s]=!0:o.isObject(s)&&Object.assign(e,s),e),{})}const De={};var ca=m(ua,oa,la,!1,da,null,null,null);function da(t){for(let e in De)this[e]=De[e]}var ha=function(){return ca.exports}(),pa=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.text||t.collapsible?s(t.tag,t._g({tag:"component",staticClass:"dito-label",class:{"dito-active":t.isActive}},t.listeners),[t.collapsible?s("div",{staticClass:"dito-chevron",class:{"dito-opened":!t.collapsed}}):t._e(),t._l(t.prefixes,function(n,a){return s("dito-element",{key:"prefix-"+a,staticClass:"dito-label-prefix",attrs:{tag:"span",content:n}})}),s("label",{attrs:{for:t.dataPath},domProps:{innerHTML:t._s(t.text)}}),t._l(t.suffixes,function(n,a){return s("dito-element",{key:"suffix-"+a,staticClass:"dito-label-suffix",attrs:{tag:"span",content:n}})}),t._t("edit-buttons")],2):t._e()},ma=[],rc="";const fa=b.component("dito-label",{props:{label:{type:[String,Object],default:null},dataPath:{type:String,default:null},collapsed:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!1}},computed:{tag(){return this.collapsible?"a":"div"},text(){const{label:t}=this;return o.isObject(t)?t==null?void 0:t.text:t},prefixes(){var t;return o.asArray((t=this.label)==null?void 0:t.prefix)},suffixes(){var t;return o.asArray((t=this.label)==null?void 0:t.suffix)},listeners(){return h({},this.collapsible&&{click:this.onClick})},isActive(){return this.appState.activeLabel===this}},methods:{onClick(){this.appState.activeLabel=this,this.$emit("expand",this.collapsed)}}}),Pe={};var _a=m(fa,pa,ma,!1,va,null,null,null);function va(t){for(let e in Pe)this[e]=Pe[e]}var ga=function(){return _a.exports}(),St={methods:{getItemFormSchema:Dt,getItemUid:bn,getItemId(t,e,s=null){return this.isTransient&&s!==null?String(s):le(t,e)},getItemDataPath(t,e){let{dataPath:s}=this;return t!==this.schema&&(s=B(s,t.name)),e!=null&&(s=B(s,e)),s},findItemIdIndex(t,e,s){const n=this.isTransient?s:e==null?void 0:e.findIndex((a,r)=>this.getItemId(t,a,r)===s);return n!==-1?n:null},getItemLabel(t,e,{index:s=null,extended:n=!1,asObject:a=!1}={}){const{itemLabel:r}=t;if(!e||!n&&r===!1)return null;let i;const l=()=>i||(i=this.getItemDataPath(t,s));let c;const u=()=>c||(c=this.getLabel(Dt(t,e,this.context)));let d,g,_;if(o.isFunction(r)){const f=r.call(this,new O(this,{nested:!1,data:e,value:e,index:s,get dataPath(){return l()},get formLabel(){return u()}}));o.isObject(f)?{text:d,prefix:g,suffix:_}=f:d=f,n=!1}else{const{columns:f}=t,P=o.isString(r)&&r||Q(t)&&f&&Object.keys(f)[0]||"name";d=e[P]}const C=!!d;if(d=d||"",d||(n=!0,Q(t)&&s!==null&&(d=`${s+1}`)),n){const f=u();f&&(d=`${f} ${C?`'${d}'`:d}`)}return a?{text:d,prefix:g,suffix:_}:d}}},ba=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-schema"},[s("div",{staticClass:"dito-schema-content"},[t.hasLabel||t.hasTabs||t.clipboard?s("div",{staticClass:"dito-schema-header",class:{"dito-schema-menu-header":t.menuHeader}},[t.hasLabel?s("dito-label",{attrs:{label:t.label,dataPath:t.dataPath,collapsible:t.collapsible,collapsed:!t.opened},on:{expand:t.onExpand},scopedSlots:t._u([t.inlined?{key:"edit-buttons",fn:function(){return[t._t("edit-buttons")]},proxy:!0}:null],null,!0)}):t._e(),t.tabs?s("dito-tabs",{attrs:{tabs:t.tabs,selectedTab:t.selectedTab}}):t._e(),s("dito-clipboard",{attrs:{clipboard:t.clipboard,dataPath:t.dataPath,data:t.data}})],1):t._e(),t._l(t.tabs,function(n,a){return t.hasTabs?s("dito-pane",{key:a,ref:"tabs",refInFor:!0,staticClass:"dito-pane-tab",attrs:{visible:t.selectedTab===a,tab:a,schema:n,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,single:!t.inlined&&!t.hasMainPane,disabled:t.disabled,generateLabels:t.generateLabels}}):t._e()}),s("transition-height",{attrs:{enabled:t.inlined}},[t.hasMainPane&&t.opened?s("dito-pane",{ref:"components",staticClass:"dito-pane-main",attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,single:!t.inlined&&!t.hasTabs,disabled:t.disabled,generateLabels:t.generateLabels}}):t._e()],1),!t.inlined&&t.isPopulated?t._t("buttons"):t._e()],2),t.inlined?[t.hasLabel?t._e():t._t("edit-buttons")]:t.isPopulated?[s("dito-panels",{attrs:{panels:t.panelSchemas,data:t.data,meta:t.meta,store:t.store,disabled:t.disabled}})]:t._e()],2)},ya=[],ic="";const $a=b.component("dito-schema",{components:{TransitionHeight:T.TransitionHeight},mixins:[St],provide(){return{$schemaComponent:()=>this}},inject:["$schemaParentComponent"],props:{schema:{type:Object,required:!0},dataPath:{type:String,default:""},data:{type:Object,default:null},meta:{type:Object,default:()=>({})},store:{type:Object,default:()=>({})},label:{type:[String,Object],default:null},inlined:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},collapsed:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!1},generateLabels:{type:Boolean,default:!0},hasOwnData:{type:Boolean,default:!1},menuHeader:{type:Boolean,default:!1}},data(){const{data:t}=this.schema;return x(h({},t&&o.isFunction(t)?t.call(this,this.context):t),{componentsRegistry:{},panesRegistry:{},panelsRegistry:{}})},computed:{schemaComponent(){return this},parentSchemaComponent(){return this.hasOwnData?null:this.$parent.schemaComponent},panelSchemas(){const t=ie(this.schema.panels,"");for(const e of this.panes)t.push(...e.panelSchemas);return t},tabs(){return K(this.schema.tabs)},selectedTab(){var s,n;const t=((s=this.$route.hash)==null?void 0:s.slice(1))||null,e=t&&this.shouldRender(this.tabs[t])?t:((n=this.defaultTab)==null?void 0:n.name)||null;return e!==t&&this.$router.replace({hash:e}),e},defaultTab(){if(this.tabs){let t=null;for(const e of Object.values(this.tabs)){const{defaultTab:s}=e;if(o.isFunction(s)?s.call(this,this.context):s)return e;t||(t=e)}return t}},clipboard(){var t;return(t=this.schema)==null?void 0:t.clipboard},processedData(){return this.processData({target:"server",schemaOnly:!0})},clipboardData(){return h({$schema:this.schema.name},this.processData({target:"clipboard",schemaOnly:!0}))},item(){return this.data},rootItem(){return this.rootData},processedItem(){return this.processedData},clipboardItem(){return this.clipboardData},parentItem(){return ct(this.rootData,this.dataPath,!1)},formLabel(){return this.getLabel(this.getItemFormSchema(this.sourceSchema,this.data,this.context))},isDirty(){return this.someComponent(t=>t.isDirty)},isTouched(){return this.someComponent(t=>t.isTouched)},isValid(){return this.everyComponent(t=>t.isValid)},isValidated(){return this.everyComponent(t=>t.isValidated)},hasData(){return!!this.data},hasLabel(){return!!this.label||this.collapsible},hasTabs(){return!this.inlined&&!!this.tabs},hasMainPane(){const{components:t}=this.schema;return!!t&&Object.keys(t).length>0},opened:vt("opened",{default(){return!this.collapsed}}),components(){return Object.values(this.componentsRegistry)},panes(){return Object.values(this.panesRegistry)},panels(){return Object.values(this.panelsRegistry)},componentsByDataPath(){return this._listEntriesByDataPath(this.componentsRegistry)},panesByDataPath(){return this._listEntriesByDataPath(this.panesRegistry)},panelsByDataPath(){return this._listEntriesByDataPath(this.panelsRegistry)}},created(){this._register(!0),this.setupSchemaFields(),this.delegate("change",this.parentSchemaComponent),this.emitEvent("initialize")},beforeDestroy(){this.emitEvent("destroy"),this._register(!1)},methods:{getComponentsByDataPath(t,e){return this._getEntriesByDataPath(this.componentsByDataPath,t,e)},getComponentByDataPath(t,e){return this.getComponentsByDataPath(t,e)[0]||null},getComponentsByName(t,e){return this._getEntriesByName(this.componentsByDataPath,t,e)},getComponentByName(t,e){return this.getComponentsByName(t,e)[0]||null},getComponents(t,e){return this._getEntries(this.componentsByDataPath,t,e)},getComponent(t,e){return this.getComponents(t,e)[0]||null},getPanelsByDataPath(t,e){return this._getEntriesByDataPath(this.panelsByDataPath,t,e)},getPanelByDataPath(t,e){return this.getPanelsByDataPath(t,e)[0]||null},getPanels(t,e){return this._getEntries(this.panelsByDataPath,t,e)},getPanel(t,e){return this.getPanels(t,e)[0]||null},someComponent(t){return this.isPopulated&&this.components.some(t)},everyComponent(t){return this.isPopulated&&this.components.every(t)},onExpand(t){this.emitEvent("expand",{context:{expand:t}}),(!this.opened||t||this.validateAll())&&(this.opened=t)},onChange(){this.emitEvent("change")},resetValidation(){for(const t of this.components)t.resetValidation()},clearErrors(){for(const t of this.components)t.clearErrors()},focus(){var t;(t=this.parentSchemaComponent)==null||t.focus(),this.opened=!0},validateAll(t,e=!0){const{componentsByDataPath:s}=this;let n;if(t){const i=o.isFunction(t)?t:o.isRegExp(t)?l=>t.test(l):null;n=i?Object.keys(s).filter(i):o.isArray(t)?t:[t]}e&&this.clearErrors();let a=!0,r=!0;n||(n=Object.keys(s));for(const i of n){const l=this.getComponentsByDataPath(i);for(const c of l)c.validate(e)||(e&&r&&c.focus(),r=!1,a=!1)}return e&&!a&&this.notifyErrors(),a},verifyAll(t){return this.validateAll(t,!1)},async showValidationErrors(t,e){var a;this.clearErrors();let s=!0;const n=[];for(const[r,i]of Object.entries(t)){const l=this.hasOwnData?B(this.dataPath,r):r,c=o.parseDataPath(l);let u=!1;const d=this.getComponentsByDataPath(c);for(const g of d)g.showValidationErrors(i,s&&e)&&(u=!0,s=!1);if(!u){const g=c.pop();for(;c.length>0;){const C=this.getComponentsByDataPath(c);for(const f of C)if(await((a=f.navigateToComponent)==null?void 0:a.call(f,l,P=>{let V=!1;for(const w of P){const y=t[w.dataPath];y&&w.showValidationErrors(y,s&&e)&&(V=!0,s=!1)}return V})))return;c.pop()}const _=o.labelize(g);for(const C of i){const f=_?`The field ${_}`:`The ${this.formLabel}`;n.push(`${f} ${C.message}`)}}s=!1}s||this.notifyErrors(n.join(`
|
|
2
|
+
`))},notifyErrors(t){this.notify({type:"error",title:"Validation Errors",text:t||"Please correct the highlighted errors."})},resetData(){Object.assign(this.data,te(this.schema,{},this)),this.clearErrors()},setData(t){for(const e in t)if(e in this.data){this.$set(this.data,e,t[e]);for(const s of this.getComponentsByName(e))s.markDirty()}},filterData(t){const e={};for(const[s,n]of Object.entries(t))(o.isArray(n)||o.isObject(n))&&this.getComponentsByName(s).some(r=>r.providesData)||(e[s]=n);return e},processData({target:t="clipboard",schemaOnly:e=!0}={}){return gn(this.schema,this.sourceSchema,this.data,this.dataPath,{component:this,schemaOnly:e,target:t})},_register(t){var e;(e=this.$schemaParentComponent())==null||e._registerSchemaComponent(this,t)},_registerComponent(t,e){var s;this._registerEntry(this.componentsRegistry,t,e),(s=this.parentSchemaComponent)==null||s._registerComponent(t,e)},_registerPane(t,e){this._registerEntry(this.panesRegistry,t,e)},_registerPanel(t,e){this._registerEntry(this.panelsRegistry,t,e)},_registerEntry(t,e,s){const n=e.$uid;s?this.$set(t,n,e):this.$delete(t,n)},_listEntriesByDataPath(t){return Object.values(t).reduce((e,s)=>{const{dataPath:n}=s;return(e[n]||(e[n]=[])).push(s),e},{})},_getEntries(t,e,s){return o.normalizeDataPath(e).startsWith(this.dataPath)?this._getEntriesByDataPath(t,e,s):this._getEntriesByName(t,e,s)},_getEntriesByDataPath(t,e,s){return this._filterEntries(t[o.normalizeDataPath(e)]||[],s)},_getEntriesByName(t,e,s){return this._filterEntries(t[B(this.dataPath,e)]||[],s)},_filterEntries(t,e){return e?t.filter(e):t}}}),we={};var Ca=m($a,ba,ya,!1,Da,null,null,null);function Da(t){for(let e in we)this[e]=we[e]}var Pa=function(){return Ca.exports}(),wa=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("dito-schema",{staticClass:"dito-schema-inlined",class:{"dito-schema-compact":t.isCompact},attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,label:t.isCompact?null:t.label,inlined:!0,disabled:t.disabled,collapsed:t.collapsed,collapsible:t.collapsible},scopedSlots:t._u([{key:"edit-buttons",fn:function(){return[t.deletable||t.draggable||t.editable?s("dito-edit-buttons",{attrs:{deletable:t.deletable,draggable:t.draggable,editable:t.editable,editPath:t.editPath,schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store},on:{delete:function(n){return t.$emit("delete")}}}):t._e()]},proxy:!0}])})},Sa=[],oc="";const xa=b.component("dito-schema-inlined",{props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},label:{type:[String,Object],default:null},disabled:{type:Boolean,required:!0},collapsed:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},editable:{type:Boolean,default:!1},deletable:{type:Boolean,default:!1},editPath:{type:String,default:null}},computed:{isCompact(){return Gt(this.schema)},hasLabel(){return!this.isCompact&&!!this.label}}}),Se={};var Oa=m(xa,wa,Sa,!1,ja,null,null,null);function ja(t){for(let e in Se)this[e]=Se[e]}var Fa=function(){return Oa.exports}(),Va=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isPopulated&&t.componentSchemas.length>0?s("div",{directives:[{name:"show",rawName:"v-show",value:t.visible,expression:"visible"}],staticClass:"dito-pane"},[t._l(t.componentSchemas,function(n){var a=n.schema,r=n.dataPath,i=n.nestedDataPath,l=n.nested,c=n.store;return[a.break==="before"?s("div",{staticClass:"dito-break"}):t._e(),t.shouldRender(a)?s("dito-container",{key:i,attrs:{schema:a,dataPath:r,data:t.data,meta:t.meta,store:c,single:t.isSingleComponent,nested:l,disabled:t.disabled,generateLabels:t.generateLabels}}):t._e(),a.break==="after"?s("div",{staticClass:"dito-break"}):t._e()]})],2):t._e()},Ea=[],lc="";const ka=b.component("dito-pane",{provide(){return{$tabComponent:()=>this.tabComponent}},props:{schema:{type:Object,required:!0},dataPath:{type:String,default:""},data:{type:Object,default:null},meta:{type:Object,required:!0},store:{type:Object,required:!0},tab:{type:String,default:null},single:{type:Boolean,default:!1},visible:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},generateLabels:{type:Boolean,default:!0}},computed:{tabComponent(){return this.tab?this:this.$tabComponent()},componentSchemas(){var e,s;const t=(e=this.sourceSchema)==null?void 0:e.wrapPrimitives;return Object.entries(((s=this.schema)==null?void 0:s.components)||{}).map(([n,a])=>{a.name=n;const r=Xt(a),i=B(this.dataPath,n);return{schema:a,dataPath:r&&!t?i:this.dataPath,nestedDataPath:i,nested:r,store:r?this.getChildStore(n):this.store}})},panelSchemas(){return this.componentSchemas.flatMap(({schema:t,nestedDataPath:e})=>oe(t,e,this.schemaComponent,this.tabComponent))},isSingleComponent(){return this.single&&this.componentSchemas.length===1}},created(){this._register(!0)},beforeDestroy(){this._register(!1)},methods:{_register(t){this.schemaComponent._registerPane(this,t)},focus(){this.tab&&this.$router.push({hash:this.tab})}}}),xe={};var La=m(ka,Va,Ea,!1,Ba,null,null,null);function Ba(t){for(let e in xe)this[e]=xe[e]}var Ta=function(){return La.exports}();function Ra(t){const e=o.isString(t)&&t.match(/^\s*([+-]?\d+)\s*\/\s*([+-]?\d+)\s*$/);if(e){const[,s,n]=e;return parseFloat(s)/parseFloat(n)}else return parseFloat(t)}var qa=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{directives:[{name:"show",rawName:"v-show",value:t.componentVisible,expression:"componentVisible"}],staticClass:"dito-container",class:t.containerClass,style:t.containerStyle},[t.label?s("dito-label",{class:t.componentClass,attrs:{label:t.label,dataPath:t.labelDataPath}}):t._e(),s(t.getTypeComponent(t.schema.type),{tag:"component",staticClass:"dito-component",class:t.componentClass,attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,single:t.single,nested:t.nested,disabled:t.componentDisabled},on:{errors:t.onErrors}}),s("dito-errors",{attrs:{errors:t.errors}})],1)},Ia=[],uc="";const Ma=b.component("dito-container",{props:{schema:{type:Object,required:!0},dataPath:{type:String,default:""},data:{type:[Object,Array],required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},single:{type:Boolean,default:!1},nested:{type:Boolean,default:!0},disabled:{type:Boolean,required:!0},generateLabels:{type:Boolean,default:!0}},data(){return{errors:null}},computed:{context(){return new O(this,{nested:this.nested})},typeOptions(){return A(this.schema)||{}},hasLabel(){const{schema:t}=this,{label:e}=t;return e!==!1&&(!!e||this.typeOptions.generateLabel&&this.generateLabels)},label(){return this.hasLabel?this.getLabel(this.schema):null},labelDataPath(){return this.nested?this.dataPath:null},componentWidth:p("width",{type:[String,Number],default(){return this.typeOptions.defaultWidth},get(t){return t===void 0?1:o.isString(t)?t.match(/^\s*[<>]?\s*(.*)$/)[1]:t}}),componentWidthOperator:p("width",{type:String,get(t){return o.isString(t)&&t.match(/^\s*([<>]?)/)[1]||null}}),componentVisible:p("visible",{type:Boolean,default(){return this.typeOptions.defaultVisible}}),componentDisabled:p("disabled",{type:Boolean,default:!1,get(t){return t||this.disabled}}),containerClass(){const{class:t}=this.schema;return h({"dito-single":this.single,"dito-omit-padding":_n(this.schema)},o.isString(t)?{[t]:!0}:t)},componentBasis(){const t=this.componentWidth,e=[null,"auto","fill"].includes(t)?"auto":/%$/.test(t)?parseFloat(t):/[a-z]/.test(t)?t:Ra(t)*100;return o.isNumber(e)?`${e}%`:e},containerStyle(){const t=this.componentWidthOperator===">"||this.componentWidth==="fill",e=this.componentWidthOperator==="<";return{flex:`${t?1:0} ${e?1:0} ${this.componentBasis}`}},componentClass(){const t=this.componentBasis==="auto";return{"dito-single":this.single,"dito-disabled":this.componentDisabled,"dito-width-fill":!t||this.componentWidth==="fill","dito-width-auto":t,"dito-has-errors":!!this.errors}}},methods:{onErrors(t){this.errors=t}}}),Oe={};var Aa=m(Ma,qa,Ia,!1,Na,null,null,null);function Na(t){for(let e in Oe)this[e]=Oe[e]}var za=function(){return Aa.exports}(),Ua=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-tabs"},t._l(t.tabs,function(n,a){return t.shouldRender(n)?s("router-link",{key:a,staticClass:"dito-link",attrs:{to:{hash:a},"active-class":"dito-active"}},[t._v(t._s(t.getLabel(n,a)))]):t._e()}),1)},Ha=[],cc="";const Ka=b.component("dito-tabs",{props:{tabs:{type:Object,default:null},selectedTab:{type:String,default:null}}}),je={};var Wa=m(Ka,Ua,Ha,!1,Ja,null,null,null);function Ja(t){for(let e in je)this[e]=je[e]}var Qa=function(){return Wa.exports}(),Ga=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s(t.panelTag,{directives:[{name:"show",rawName:"v-show",value:t.visible&&(!t.panelTabComponent||t.panelTabComponent.visible),expression:"visible && (!panelTabComponent || panelTabComponent.visible)"}],tag:"component",staticClass:"dito-panel",on:{submit:function(n){n.preventDefault()}}},[s("label",{staticClass:"dito-panel-title"},[t._v(t._s(t.getLabel(t.schema)))]),s("dito-schema",{staticClass:"dito-panel-schema",attrs:{schema:t.panelSchema,dataPath:t.panelDataPath,data:t.panelData,meta:t.meta,store:t.store,disabled:t.disabled,hasOwnData:t.hasOwnData}},[s("dito-buttons",{attrs:{slot:"buttons",buttons:t.buttonSchemas,dataPath:t.panelDataPath,data:t.panelData,meta:t.meta,store:t.store,disabled:t.disabled},slot:"buttons"})],1)],1)},Xa=[],dc="";const Ya=b.component("dito-panel",{mixins:[ce],provide(){return{$panelComponent:()=>this,$tabComponent:()=>this.panelTabComponent}},props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},disabled:{type:Boolean,required:!0},panelTabComponent:{type:b,default:null}},data(){return{ownData:null}},computed:{panelComponent(){return this},tabComponent(){return this.panelTabComponent},buttonSchemas(){return tt(this.schema.buttons)},target(){return this.schema.target||this.dataPath},hasOwnData(){return!!this.ownData},panelData(){return this.ownData||this.data},panelSchema(){if(this.hasOwnData)return this.schema;{const t=this.schema,{data:e}=t;return R(t,["data"])}},panelTag(){return this.hasOwnData?"form":"div"},panelDataPath(){return this.hasOwnData?this.dataPath:this.schemaComponent.dataPath},visible:p("visible",{type:Boolean,default:!0})},created(){this._register(!0);const{data:t}=this.schema;t&&(this.ownData=o.isFunction(t)?t.call(this,this.context):t)},beforeDestroy(){this._register(!1)},methods:{_register(t){this.schemaComponent._registerPanel(this,t)}}}),Fe={};var Za=m(Ya,Ga,Xa,!1,tr,null,null,null);function tr(t){for(let e in Fe)this[e]=Fe[e]}var er=function(){return Za.exports}(),sr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.panels.length>0?s("div",{staticClass:"dito-panels"},t._l(t.panels,function(n){var a=n.schema,r=n.dataPath,i=n.tabComponent;return t.shouldRender(a)?s("dito-panel",{key:t.getPanelKey(r,i),attrs:{schema:a,dataPath:r,data:t.data,meta:t.meta,store:t.getChildStore(a.name),disabled:a.disabled!=null?a.disabled:t.disabled,panelTabComponent:i}}):t._e()}),1):t._e()},nr=[],hc="";const ar=b.component("dito-panels",{props:{panels:{type:Array,default:null},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},disabled:{type:Boolean,required:!0}},methods:{getPanelKey(t,e){return e?`${e.tab}_${t}`:t}}}),Ve={};var rr=m(ar,sr,nr,!1,ir,null,null,null);function ir(t){for(let e in Ve)this[e]=Ve[e]}var or=function(){return rr.exports}(),lr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.buttonSchemas||t.$slots.default?s("div",t._g({staticClass:"dito-buttons"},t.$listeners),[t._l(t.buttonSchemas,function(n,a){return t.shouldRender(n)?s("dito-container",{key:a,attrs:{schema:n,dataPath:a,data:t.data,meta:t.meta,store:t.getChildStore(n.name),disabled:t.disabled,generateLabels:!1}}):t._e()}),t._l(t.$slots.default,function(n){return n.tag?s("div",{staticClass:"dito-container"},[s("dito-vnode",{attrs:{node:n}})],1):t._e()})],2):t._e()},ur=[],pc="";const cr=b.component("dito-buttons",{provide:{$tabComponent:()=>null},props:{buttons:{type:Object,default:null},dataPath:{type:String,default:""},data:{type:[Object,Array],default:null},meta:{type:Object,default:()=>({})},store:{type:Object,default:()=>({})},disabled:{type:Boolean,default:!1}},computed:{buttonSchemas(){const{dataPath:t,buttons:e}=this;return e?Object.values(e).reduce((s,n)=>(s[B(t,n.name)]=n,s),{}):null}}}),Ee={};var dr=m(cr,lr,ur,!1,hr,null,null,null);function hr(t){for(let e in Ee)this[e]=Ee[e]}var pr=function(){return dr.exports}(),mr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("dito-buttons",{staticClass:"dito-edit-buttons dito-buttons-round",attrs:{buttons:t.buttons,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store},on:{click:function(n){n.stopPropagation()}}},[t.isDraggable?s("a",t._b({staticClass:"dito-button"},"a",t.getButtonAttributes(t.verbs.drag),!1)):t._e(),t.isEditable?s("router-link",t._b({staticClass:"dito-button",attrs:{to:{path:t.editPath},append:""}},"router-link",t.getButtonAttributes(t.verbs.edit),!1)):t._e(),t.isCreatable?s("dito-create-button",{attrs:{schema:t.schema,path:t.createPath,verb:t.verbs.create,text:t.createButtonText}}):t._e(),t.isDeletable?s("button",t._b({staticClass:"dito-button",attrs:{type:"button"},on:{click:function(n){return t.$emit("delete")}}},"button",t.getButtonAttributes(t.verbs.delete),!1)):t._e()],1)},fr=[],mc="";const _r=b.component("dito-edit-buttons",{props:{draggable:{type:Boolean,default:!1},editable:{type:Boolean,default:!1},creatable:{type:Boolean,default:!1},deletable:{type:Boolean,default:!1},editPath:{type:String,default:null},createPath:{type:String,default:null},buttons:{type:Object,default:null},schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Object,Array],default:null},meta:{type:Object,required:!0},store:{type:Object,required:!0}},computed:{formLabel(){return this.getLabel(this.schema.form)},isDraggable(){return this.hasOption("draggable")},isEditable(){return this.hasOption("editable")&&!!this.editPath},isCreatable(){return this.hasOption("creatable")&&!!this.createPath},isDeletable(){return this.hasOption("deletable")},createButtonText(){var t;return((t=this.schema.creatable)==null?void 0:t.label)||this.formLabel&&`${o.capitalize(this.verbs.create)} ${this.formLabel}`||null}},methods:{hasOption(t){return!!(this[t]&&this.schema[t]!==!1)}}}),ke={};var vr=m(_r,mr,fr,!1,gr,null,null,null);function gr(t){for(let e in ke)this[e]=ke[e]}var br=function(){return vr.exports}(),yr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-create-button"},[t.showPulldown?[s("button",{staticClass:"dito-button",class:"dito-button-"+t.verb,attrs:{type:"button",title:t.labelize(t.verb)},on:{mousedown:function(n){return n.stopPropagation(),t.onPulldownMouseDown()}}},[t._v(t._s(t.text))]),s("ul",{staticClass:"dito-pulldown",class:{"dito-open":t.pulldown.open}},t._l(t.forms,function(n,a){return s("li",[t.isCreatable(n)?s("a",{class:"dito-type-"+a,on:{mousedown:function(r){return r.stopPropagation(),t.onPulldownMouseDown(a)},mouseup:function(r){return t.onPulldownMouseUp(a)}}},[t._v(t._s(t.getLabel(n)))]):t._e()])}),0)]:s("button",{staticClass:"dito-button",class:"dito-button-"+t.verb,attrs:{type:t.isInlined?"button":"submit",title:t.labelize(t.verb)},on:{click:function(n){return t.createItem(t.forms.default)}}},[t._v(t._s(t.text))])],2)},$r=[],fc="";const Cr=b.component("dito-create-button",{mixins:[be],props:{schema:{type:Object,required:!0},path:{type:String,required:!0},verb:{type:String,required:!0},text:{type:String,default:null}},computed:{forms(){return W(this.schema,this.context)},isInlined(){return Pt(this.schema)},showPulldown(){return Object.keys(this.forms).length>1||!this.forms.default}},methods:{isCreatable(t){return t.creatable!==!1},createItem(t,e=null){if(this.isCreatable(t))this.isInlined?this.sourceComponent.createItem(t,e):this.$router.push({path:`${this.path}/create`,query:{type:e},append:!0});else throw new Error("Not allowed to create item for given form")},onPulldownSelect(t){this.createItem(this.forms[t],t),this.setPulldownOpen(!1)}}}),Le={};var Dr=m(Cr,yr,$r,!1,Pr,null,null,null);function Pr(t){for(let e in Le)this[e]=Le[e]}var wr=function(){return Dr.exports}(),Sr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.clipboard?s("div",{staticClass:"dito-clipboard dito-buttons dito-buttons-round"},[s("button",{ref:"copyData",staticClass:"dito-button dito-button-copy",attrs:{type:"button",title:"Copy Data",disabled:!t.copyEnabled},on:{click:t.onCopy}}),s("button",{staticClass:"dito-button dito-button-paste",attrs:{type:"button",title:"Paste Data",disabled:!t.pasteEnabled},on:{click:t.onPaste}})]):t._e()},xr=[];const Or=b.component("dito-clipboard",{mixins:[G],props:{clipboard:{type:[Boolean,Object],default:!1},dataPath:{type:String,required:!0},data:{type:[Object,Array],default:null}},data(){return{copyEnabled:!1,pasteEnabled:!1,fixClipboard:!0}},computed:{clipboardOptions(){return o.isObject(this.clipboard)?this.clipboard:{}},copyData(){const{copy:t}=this.clipboardOptions;return t?e=>t.call(this,new O(this,{clipboardData:e})):e=>o.clone(e)},pasteData(){const{paste:t}=this.clipboardOptions;return t?e=>t.call(this,new O(this,{clipboardData:e})):e=>e}},mounted(){this.domOn(document,{copy:this.checkClipboard}),this.domOn(window,{focus:this.checkClipboard}),this.$watch("data",{immediate:!0,handler:(t,e)=>{t!==e&&this.checkClipboard()}})},methods:{async getClipboardData(t){var a,r,i,l,u;let{clipboardData:e}=this.appState;try{const d=await((r=(a=navigator.clipboard)==null?void 0:a.readText)==null?void 0:r.call(a));this.fixClipboard&&d&&(await((l=(i=navigator.clipboard)==null?void 0:i.writeText)==null?void 0:l.call(i,d)),this.fixClipboard=!1),d&&(e=JSON.parse(d))}catch(d){t&&(console.error(d,d.name,d.message),d.name==="SyntaxError"&&alert(o.deindent`
|
|
3
3
|
The data in the clipboard appears to be malformed:
|
|
4
4
|
${d.message}
|
|
5
|
-
`))}const c=e||{},{$schema:s}=c,n=R(c,["$schema"]);return s===((u=this.schemaComponent)==null?void 0:u.schema.name)?n:null},async checkClipboard(){this.copyEnabled=!!this.data,this.pasteEnabled=!!await this.getClipboardData(!1)},async onCopy(){var e,s,n;let t=(e=this.schemaComponent)==null?void 0:e.clipboardData;try{t=t&&this.copyData(t),this.appState.clipboardData=t;try{const a=JSON.stringify(t,null,2);await((n=(s=navigator.clipboard)==null?void 0:s.writeText)==null?void 0:n.call(s,a)),await this.checkClipboard()}catch(a){console.error(a,a.name,a.message)}}catch(a){console.error(a),alert(a.message)}},async onPaste(){let t=await this.getClipboardData(!0);try{t=t&&this.pasteData(t),t&&this.schemaComponent.setData(t)}catch(e){console.error(e),alert(e.message)}}}}),Be={};var jr=m(Or,Sr,xr,!1,Fr,null,null,null);function Fr(t){for(let e in Be)this[e]=Be[e]}var Er=function(){return jr.exports}(),Te={data(){return{isLoading:!1}},methods:{setLoading(t,{updateRoot:e=!1,updateView:s=!1}={}){!this.isLoading^!t&&(this.isLoading=!!t,e&&this.rootComponent.registerLoading(t),s&&this.viewComponent.setLoading(this.isLoading))}}},Re={mixins:[St,Te],provide(){return{$resourceComponent:()=>this,$verbs:()=>this.verbs,$isPopulated:()=>this.hasData}},data(){return{loadedData:null}},computed:{resourceComponent(){return this},resource(){return this.getResource()},providesData(){return!!this.resource},linksToView(){return!1},isTransient(){const t=this.formComponent;return!this.providesData&&!this.linksToView||t&&(t.isTransient||t.isCreating)},transientNote(){return this.isTransient&&"<b>Note</b>: the parent still needs to be saved in order to persist this change."},shouldLoad(){return!this.isTransient&&!this.isLoading},hasData(){return!!this.loadedData},verbs(){return this.getVerbs()},paginationRange(){const{paginate:t}=this.sourceSchema;if(this.isListSource&&t){const{page:e=0}=this.query||{},s=e*t;return[s,s+t-1]}},queryParams(){const t=this.paginationRange,n=this.query||{},{page:e}=n,s=R(n,["page"]);return h(h({},s),t&&{range:t.join(",")})}},created(){(this.providesData||this.isCreating)&&this.setupData()},methods:{getResource(){var t,e,s;return M((t=this.sourceSchema)==null?void 0:t.resource,{type:"collection",parent:(s=(e=this.parentFormComponent)==null?void 0:e.resource)!=null?s:null})},getVerbs(){const t=this.$verbs();return this.isTransient?x(h({},t),{create:"add",created:"added",save:"apply",saved:"applied",delete:"remove",deleted:"removed"}):t},clearData(){this.loadedData=null},setData(t){this.loadedData=t},setupData(){this.ensureData()},ensureData(){this.shouldLoad&&(this.hasData?this.reloadData():this.loadData(!0))},reloadData(){this.loadData(!1)},loadData(t){this.isTransient||(t&&this.clearData(),this.requestData())},createData(t,e){return te(t,e?{type:e}:{},this)},requestData(){const t=this.queryParams;this.handleRequest({method:"get",params:t},(e,s)=>{var n;if(e){if(s){const{data:a}=s;if((a==null?void 0:a.type)==="FilterValidation"&&((n=this.onFilterErrors)==null?void 0:n.call(this,a.errors)))return!0;if(this.isUnauthorizedError(s))return!0}}else this.setData(s.data),this.emitSchemaEvent("load")})},isValidationError(t){return(t==null?void 0:t.status)===400},isUnauthorizedError(t){return(t==null?void 0:t.status)===401},async handleRequest({method:t,resource:e=this.resource,data:s,params:n},a){const r={updateRoot:!0,updateView:this.isInView};this.setLoading(!0,r);const i={method:t,resource:e,data:s,params:n};try{const l=await this.sendRequest(i);a(null,l)}catch(l){const{response:c}=l;if(!a(l,c)){const u=c==null?void 0:c.data;u&&o.isString(u.type)?this.notify({type:"error",title:o.labelize(u.type),text:u.message||l}):this.notify({type:"error",title:"Request Error",text:l})}}this.setLoading(!1,r)},getPayloadData(t,e){return["post","put","patch"].includes(e)&&(t.getSchemaValue(["resource","data"])||t.processedItem)},async submit(t){const e=M(t.schema.resource,{parent:this.resource});if(e){const{method:s}=e,n=this.getPayloadData(t,s);return this.submitResource(t,e,s,n)}return!1},async submitResource(t,e,s,n,{setData:a=!1,onSuccess:r,onError:i,notifySuccess:l=()=>this.notify({type:"success",title:"Request Successful",text:"Request was successfully sent."}),notifyError:c=u=>this.notify({type:"error",title:"Request Error",text:[`Unable to send request${u?":":""}`,(u==null?void 0:u.message)||u]})}={}){return new Promise(u=>{this.handleRequest({method:s,data:n,resource:e},async(d,g)=>{const _=g==null?void 0:g.data;if(d){const C=this.isValidationError(g)&&_.errors;if(C)await this.showValidationErrors(C,!0);else{const f=o.isObject(_)?_:d;i==null||i(f),await this.emitButtonEvent(t,"error",{notify:c,error:f})}u(!1)}else a&&_&&this.setData(_),r==null||r(),await this.emitButtonEvent(t,"success",{notify:l}),u(!0)})})},async emitButtonEvent(t,e,{notify:s,error:n}){const a=new O(t,{nested:!1,data:this.data,itemLabel:this.itemLabel,error:n}),r=await t.emitEvent(e,{context:a});return s&&r===void 0&&!a.wasNotified&&s(n),r}}},Vr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-form dito-scroll-parent",class:{"dito-form-nested":t.isNestedRoute}},[t.isLastUnnestedRoute||t.isNestedRoute?t._e():s("router-view",{directives:[{name:"show",rawName:"v-show",value:!t.isActive,expression:"!isActive"}]}),s(t.isNestedRoute?"div":"form",{directives:[{name:"show",rawName:"v-show",value:t.isActive,expression:"isActive"}],tag:"component",staticClass:"dito-scroll",on:{submit:function(n){n.preventDefault()}}},[s("button",{directives:[{name:"show",rawName:"v-show",value:!1,expression:"false"}],attrs:{type:"submit",disabled:"true","aria-hidden":"true"}}),s("dito-schema",{attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,disabled:t.isLoading,menuHeader:!0}},[s("dito-buttons",{staticClass:"dito-buttons-round dito-buttons-main dito-buttons-large",attrs:{slot:"buttons",buttons:t.buttonSchemas,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,disabled:t.isLoading},slot:"buttons"})],1)],1)],1)},kr=[];const Lr=b.component("dito-form",{mixins:[de,Re],data(){return{createdData:null,clonedData:void 0,sourceKey:null,isForm:!0}},computed:{verbs(){const t=this.getVerbs(),{isCreating:e,providesData:s}=this;return x(h({},t),{submit:e?t.create:t.save,submitted:e?t.created:t.saved,cancel:s?t.cancel:t.close,cancelled:s?t.cancelled:t.closed})},schema(){return this.getItemFormSchema(this.sourceSchema,this.data||{type:this.type},this.context)||{}},buttonSchemas(){return tt(o.merge({cancel:{type:"button",events:{click:()=>this.cancel()}},submit:!this.doesMutate&&{type:"submit",closeForm:!0,events:{click:({component:t})=>t.submit()}}},this.schema.buttons))},isActive(){return this.isLastRoute||this.isLastUnnestedRoute},isTransient(){return!this.providesData},isCreating(){return this.param==="create"},isDirty(){var t;return!this.doesMutate&&!!((t=this.mainSchemaComponent)!=null&&t.isDirty)},selectedTab(){var t;return((t=this.mainSchemaComponent)==null?void 0:t.selectedTab)||null},doesMutate(){return this.sourceSchema.mutate},type(){return this.$route.query.type},itemId(){var t;return this.isCreating?null:(t=this.param)!=null?t:null},method(){return this.isCreating?"post":"patch"},resource(){const t=this.getResource();return ft(this.itemId,t)||t},breadcrumbPrefix(){return o.capitalize(this.isCreating?this.verbs.create:this.verbs.edit)},data(){return this.createdData||this.loadedData||this.inheritedData||null},dataPath(){return this.getDataPathFrom(this.dataComponent)},sourceData(){let{data:t}=this.parentRouteComponent;if(t){const e=o.parseDataPath(this.getDataPathFrom(this.parentRouteComponent)),s=this.routeRecord.path.split("/"),n=s.slice(s.length-e.length);this.sourceKey=null;const a=e[e.length-1];J(this.sourceSchema)&&a==="create"&&e.length--;for(let r=0,i=e.length;r<i&&t;r++){const l=e[r],c=/^:id/.test(n[r])?l==="create"?null:this.findItemIdIndex(this.sourceSchema,t,l):l;r===i-1?this.sourceKey=c:t=t[c]}}return t},inheritedData(){if(this.isTransient&&this.clonedData===void 0&&this.sourceData&&this.sourceKey!==null){let t=this.sourceData[this.sourceKey];return this.doesMutate||(this.clonedData=t=o.clone(t)),t===null&&!this.isCreating&&J(this.sourceSchema)&&this.$router.push({path:"create",append:!0}),t}return this.clonedData},hasData(){return!!this.data},itemLabel(){return this.getItemLabel(this.sourceSchema,this.data,{extended:!0})}},watch:{sourceData:"clearClonedData",create:"setupData"},methods:{emitSchemaEvent(t,e){return this.mainSchemaComponent.emitEvent(t,e)},getDataPathFrom(t){return this.api.denormalizePath(this.path.slice((t.isView?0:t.path.length)+1))},setupData(){this.isCreating?this.createdData=this.createdData||this.createData(this.schema,this.type):this.ensureData()},setSourceData(t){if(this.sourceData&&this.sourceKey!==null){const{mainSchemaComponent:e}=this;return this.$set(this.sourceData,this.sourceKey,e.filterData(t)),e.onChange(),!0}return!1},addSourceData(t){var e;return J(this.sourceSchema)?this.setSourceData(t):!!((e=this.sourceData)!=null&&e.push(t))},clearData(){this.setData(null)},setData(t){this.isTransient?this.setSourceData(t):(this.createdData=null,this.loadedData=t)},clearClonedData(t,e){t!==e&&(this.clonedData=void 0)},async cancel(){return this.close()},async close(){return this.navigate(this.parentRouteComponent.path)},getSubmitVerb(t=!0){return this.isCreating?t?"create":"created":t?"submit":"submitted"},async submit(t,{validate:e=!0,closeForm:s=!1}={}){if(e&&!this.validateAll())return!1;const n=u=>this.verbs[this.getSubmitVerb(u)],a=M(t.schema.resource,{parent:this.resource}),r=a||this.resource,i=(r==null?void 0:r.method)||this.method,l=this.getPayloadData(t,i);let c;if(!a&&this.isTransient?c=await this.submitTransient(t,r,i,l,{onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:u=>this.emitSchemaEvent("error",{context:{error:u}}),notifySuccess:()=>{const u=n(!1);this.notify({type:"info",title:this.isCreating?`Item ${o.capitalize(u)}`:`Change ${o.capitalize(u)}`,text:[this.isCreating?`${this.itemLabel} was ${u}.`:`Changes to ${this.itemLabel} were ${u}.`,this.transientNote]})},notifyError:()=>{const u=n(!0);this.notify({type:"error",title:"Request Error",text:`Unable to ${u} ${this.itemLabel}.`})}}):c=await this.submitResource(t,r,i,l,{setData:!0,onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:u=>this.emitSchemaEvent("error",{context:{error:u}}),notifySuccess:()=>{const u=n(!1);this.notify({type:"success",title:`Successfully ${o.capitalize(u)}`,text:`${this.itemLabel} was ${u}.`})},notifyError:u=>{const d=n(!0);this.notify({type:"error",title:"Request Error",text:[`Unable to ${d} ${this.itemLabel}${u?":":""}`,(u==null?void 0:u.message)||u]})}}),c){if(this.resetValidation(),s||t.closeForm)this.close();else if(this.isCreating){const u=this.getItemId(this.schema,this.data);this.$router.replace({path:`../${u}`,append:!0})}}return c},async submitTransient(t,e,s,n,{onSuccess:a,onError:r,notifySuccess:i,notifyError:l}){const c=this.isCreating?this.addSourceData(n):this.setSourceData(n);if(c)a==null||a(),await this.emitButtonEvent(t,"success",{notify:i});else{const u="Could not submit transient item";r==null||r(u),await this.emitButtonEvent(t,"error",{notify:l,error:u})}return c}}}),qe={};var Br=m(Lr,Vr,kr,!1,Tr,null,null,null);function Tr(t){for(let e in qe)this[e]=qe[e]}var Ie=function(){return Br.exports}(),vc="";const Rr=Ie.component("dito-form-nested",{});let qr,Ir;const Me={};var Mr=m(Rr,qr,Ir,!1,Ar,null,null,null);function Ar(t){for(let e in Me)this[e]=Me[e]}var Nr=function(){return Mr.exports}(),zr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.errors?s("div",{staticClass:"dito-errors"},[s("ul",t._l(t.errors,function(n){return s("li",[t._v(t._s(n))])}),0)]):t._e()},Ur=[],gc="";const Hr=b.component("dito-errors",{props:{errors:{type:Array,default:null}}}),Ae={};var Kr=m(Hr,zr,Ur,!1,Wr,null,null,null);function Wr(t){for(let e in Ae)this[e]=Ae[e]}var Jr=function(){return Kr.exports}(),Qr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-scopes"},t._l(t.scopes,function(n,a){return s("router-link",{key:a,attrs:{to:t.getScopeLink(n),custom:""},scopedSlots:t._u([{key:"default",fn:function(r){var i=r.navigate;return[s("button",{staticClass:"dito-button",class:{"dito-selected":n.name===t.query.scope},attrs:{type:"button",title:n.hint||t.getLabel(n)},on:{click:i}},[t._v(t._s(t.getLabel(n)))])]}}],null,!0)})}),1)},Gr=[],bc="";const Xr=b.component("dito-scopes",{props:{query:{type:Object,required:!0},scopes:{type:Object,required:!0}},methods:{getScopeLink(t){const e=x(h({},this.query),{scope:t.name});return e.page&&(e.page=0),this.getQueryLink(e)}}}),Ne={};var Yr=m(Xr,Qr,Gr,!1,Zr,null,null,null);function Zr(t){for(let e in Ne)this[e]=Ne[e]}var ti=function(){return Yr.exports}(),ei=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("pagination",{attrs:{pageSize:t.limit,total:t.total,page:t.page},on:{"update:page":function(n){t.page=n}}})},si=[];const ni=b.component("dito-pagination",{components:{Pagination:T.Pagination},props:{query:{type:Object,required:!0},limit:{type:Number,required:!0},total:{type:Number,required:!0}},computed:{page:{get(){return(+this.query.page||0)+1},set(t){this.page!==t&&this.$router.push(this.getQueryLink(x(h({},this.query),{page:t-1})))}}}}),ze={};var ai=m(ni,ei,si,!1,ri,null,null,null);function ri(t){for(let e in ze)this[e]=ze[e]}var ii=function(){return ai.exports}(),xt={mixins:[St],data(){return{dragging:!1}},methods:{onStartDrag(){this.dragging=!0},onEndDrag({oldIndex:t,newIndex:e}){this.dragging=!1,t!==e&&this.onChange()},updateOrder(t,e,s){const{orderKey:n}=t;if(n){const a=(s==null?void 0:s[0])||0;for(let r=0;r<e.length;r++)e[r][n]=r+a}return e}}},oi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-tree-item",class:{"dito-dragging":t.dragging,"dito-active":t.active},style:t.level>0&&{"--level":t.level},attrs:{id:t.dataPath}},[t.label?s("div",{staticClass:"dito-tree-header"},[t.numEntries?s("div",{staticClass:"dito-tree-branch",on:{click:function(n){n.stopPropagation(),t.opened=!t.opened}}},[t.numEntries?s("div",{staticClass:"dito-chevron",class:{"dito-opened":t.opened}}):t._e(),s("div",{staticClass:"dito-tree-label",domProps:{innerHTML:t._s(t.label)}}),t.details?s("div",{staticClass:"dito-tree-info"},[t._v(t._s(t.details))]):t._e()]):s("div",{staticClass:"dito-tree-leaf"},[s("div",{staticClass:"dito-tree-label",domProps:{innerHTML:t._s(t.label)}})]),t.hasEditButtons?s("div",{staticClass:"dito-buttons dito-buttons-small"},[t.draggable?s("a",t._b({staticClass:"dito-button"},"a",t.getButtonAttributes(t.verbs.drag),!1)):t._e(),t.editable?s("button",t._b({staticClass:"dito-button",attrs:{type:"button"},on:{click:t.onEdit}},"button",t.getButtonAttributes(t.verbs.edit),!1)):t._e(),t.deletable?s("button",t._b({staticClass:"dito-button",attrs:{type:"button"},on:{click:t.onDelete}},"button",t.getButtonAttributes(t.verbs.delete),!1)):t._e()]):t._e()]):t._e(),t.properties?s("table",{directives:[{name:"show",rawName:"v-show",value:t.opened,expression:"opened"}],staticClass:"dito-properties"},t._l(t.properties,function(n){return s("tr",[s("td",[n.label!==!1?s("dito-label",{attrs:{dataPath:t.getPropertyDataPath(n),label:t.getLabel(n)}}):t._e()],1),s("dito-table-cell",{attrs:{cell:n,schema:n,dataPath:t.getPropertyDataPath(n),data:t.data,meta:t.nestedMeta,store:t.store,disabled:t.disabled}})],1)}),0):t._e(),t.childrenSchema?s("vue-draggable",t._b({directives:[{name:"show",rawName:"v-show",value:t.opened,expression:"opened"}],attrs:{list:t.updateOrder(t.childrenSchema,t.childrenList)},on:{start:t.onStartDrag,end:function(n){return t.onEndDrag(n,t.childrenSchema)}}},"vue-draggable",t.getDragOptions(t.childrenDraggable,!0),!1),t._l(t.childrenItems,function(n,a){return s("dito-tree-item",{key:t.getItemUid(t.childrenSchema,n.data),attrs:{schema:t.childrenSchema,dataPath:t.getItemDataPath(t.childrenSchema,a),data:n.data,path:n.path,open:n.open,active:n.active,draggable:t.childrenDraggable,label:t.getItemLabel(t.childrenSchema,n.data,{index:a}),level:t.level+1}})}),1):t._e()],1)},li=[],yc="";const ui=b.component("dito-tree-item",{components:{VueDraggable:it.default},mixins:[xt],inject:["container"],props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Array,Object],default:null},path:{type:String,default:""},open:{type:Boolean,default:!1},active:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},label:{type:String,default:null},level:{type:Number,default:0}},data(){return{opened:this.open||this.schema.open}},computed:{meta(){return this.container.meta},store(){return this.container.store},disabled(){return this.container.disabled},nestedMeta(){return x(h({},this.meta),{schema:this.schema})},properties(){return K(this.schema.properties)},childrenSchema(){return this.schema.children},childrenList(){var e;const t=(e=this.childrenSchema)==null?void 0:e.name;return t&&this.data[t]},childrenDraggable(){var t;return((t=this.childrenList)==null?void 0:t.length)>1&&this.getSchemaValue("draggable",{type:Boolean,default:!1,schema:this.childrenSchema})},numChildren(){var t;return((t=this.childrenList)==null?void 0:t.length)||0},numProperties(){var t;return((t=this.properties)==null?void 0:t.length)||0},numEntries(){return this.numProperties+this.numChildren},childrenItems(){var e;const{childrenSchema:t}=this;if(t){const{editPath:s}=this.container,n=!this.path&&t.open;return((e=this.childrenList)==null?void 0:e.map((a,r)=>{const i=t.path&&`${this.path}/${t.path}/${r}`,l=n||s.startsWith(i)&&i.length<s.length;return{data:a,path:i,open:l,active:s===i}}))||[]}},details(){const{numChildren:t}=this;return t&&`${t} ${t===1?"item":"items"}`},hasEditButtons(){return this.draggable||this.editable||this.deletable},creatable:p("creatable",{type:Boolean,default:!1,get(t){return t&&H(this.schema)}}),editable:p("editable",{type:Boolean,default:!1,get(t){return t&&H(this.schema)}}),deletable:p("deletable",{type:Boolean,default:!1})},methods:{getPropertyDataPath(t){return B(this.dataPath,t.name)},onEdit(){this.$router.push({path:`${this.container.path}${this.path}`,query:this.$route.query})},onDelete(){},onChange(){this.container.onChange()}}}),Ue={};var ci=m(ui,oi,li,!1,di,null,null,null);function di(t){for(let e in Ue)this[e]=Ue[e]}var hi=function(){return ci.exports}(),pi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("thead",{staticClass:"dito-table-head"},[s("tr",[t._l(t.columns,function(n,a){return t.shouldRender(n)?s("th",{class:t.getColumnClass(n)},[n.sortable?s("router-link",{attrs:{to:t.getSortLink(n),custom:""},scopedSlots:t._u([{key:"default",fn:function(r){var i=r.navigate;return[s("button",{staticClass:"dito-button",class:t.getSortClass(n),attrs:{type:"button"},on:{click:i}},[s("div",{staticClass:"dito-order-arrows"}),s("span",[t._v(t._s(t.getLabel(n)))])])]}}],null,!0)}):s("span",[t._v(t._s(t.getLabel(n)))])],1):t._e()}),t.hasEditButtons?s("th",[s("span")]):t._e()],2)])},mi=[],$c="";const fi=b.component("dito-table-head",{props:{query:{type:Object,required:!0},columns:{type:Object,required:!0},hasEditButtons:{type:Boolean,required:!0}},computed:{sort(){const t=(this.query.order||"").split(/\s+/);return{name:t[0],order:t[1]}}},methods:{getColumnClass(t){return`dito-column-${o.hyphenate(t.name)}`},getSortClass(t){return this.sort.name===t.name?`dito-selected dito-order-${this.sort.order}`:null},getSortLink(t){const e=this.sort.name===t.name&&this.sort.order==="asc"?"desc":"asc";return this.getQueryLink(x(h({},this.query),{order:`${t.name} ${e}`}))}}}),He={};var _i=m(fi,pi,mi,!1,vi,null,null,null);function vi(t){for(let e in He)this[e]=He[e]}var gi=function(){return _i.exports}(),bi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("td",{class:t.cell.class,style:t.cell.style},[t.component?s(t.component,{tag:"component",attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,nested:t.nested,disabled:t.disabled}}):s("span",{domProps:{innerHTML:t._s(t.renderCell(t.data))}})],1)},yi=[];const $i=b.component("dito-table-cell",{props:{cell:{type:Object,required:!0},schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},nested:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1}},computed:{component(){return this.resolveTypeComponent(this.cell.component)}},methods:{renderCell(t){const{name:e,render:s}=this.cell,n=t[e];return s?s.call(this,new O(this,{name:e,value:n,data:t,dataPath:B(this.dataPath,e)})):o.escapeHtml(n)}}}),Ke={};var Ci=m($i,bi,yi,!1,Di,null,null,null);function Di(t){for(let e in Ke)this[e]=Ke[e]}var Pi=function(){return Ci.exports}();const wi=b.component("dito-vnode",{functional:!0,render:(t,e)=>e.props.node});let Si,xi;const We={};var Oi=m(wi,Si,xi,!1,ji,null,null,null);function ji(t){for(let e in We)this[e]=We[e]}var Fi=function(){return Oi.exports}(),Ei=Object.freeze(Object.defineProperty({__proto__:null,DitoRoot:wt,DitoMenu:Tn,DitoHeader:Jn,DitoAccount:ta,DitoDialog:ia,DitoElement:ha,DitoLabel:ga,DitoSchema:Pa,DitoSchemaInlined:Fa,DitoPane:Ta,DitoContainer:za,DitoTabs:Qa,DitoPanel:er,DitoPanels:or,DitoButtons:pr,DitoEditButtons:br,DitoCreateButton:wr,DitoClipboard:Er,DitoView:pe,DitoForm:Ie,DitoFormNested:Nr,DitoErrors:Jr,DitoScopes:ti,DitoPagination:ii,DitoTreeItem:hi,DitoTableHead:gi,DitoTableCell:Pi,DitoVNode:Fi},Symbol.toStringTag,{value:"Module"}));const $=b.extend({mixins:[et],nativeField:!1,textField:!1,defaultValue:null,defaultNested:!0,defaultVisible:!0,generateLabel:!0,excludeValue:!1,ignoreMissingValue:null,omitPadding:!1});$.register=function(t,e={}){t=o.asArray(t);const s=this.component(`dito-type-${t[0]}`,e);for(const n of t)un(n,s);return s},$.get=gt;var Vi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("button",t._g(t._b({ref:"element",staticClass:"dito-button",class:"dito-button-"+t.verb,attrs:{id:t.dataPath,type:t.type,title:t.text}},"button",t.attributes,!1),t.listeners),[t._v(t._s(t.text))])},ki=[];const Li=$.register(["button","submit"],{defaultValue:()=>{},excludeValue:!0,defaultWidth:"auto",computed:{verb(){return this.verbs[this.name]||this.name},text:p("text",{type:String,get(t){return t||o.labelize(this.verb)}}),closeForm:p("closeForm",{type:Boolean,default:!1})},methods:{getListeners(){return{focus:this.onFocus,blur:this.onBlur,click:this.onClick}},async submit(t){var e;return(e=this.resourceComponent)==null?void 0:e.submit(this,t)},async onClick(){await this.emitEvent("click",{parent:this.schemaComponent})===void 0&&Rt(this.schema)&&await this.submit()}}}),Je={};var Bi=m(Li,Vi,ki,!1,Ti,null,null,null);function Ti(t){for(let e in Je)this[e]=Je[e]}var Ri=function(){return Bi.exports}(),qi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.value,expression:"value"}],ref:"element",staticClass:"dito-checkbox",attrs:{id:t.dataPath,type:"checkbox"},domProps:{checked:Array.isArray(t.value)?t._i(t.value,null)>-1:t.value},on:{change:function(n){var a=t.value,r=n.target,i=!!r.checked;if(Array.isArray(a)){var l=null,c=t._i(a,l);r.checked?c<0&&(t.value=a.concat([l])):c>-1&&(t.value=a.slice(0,c).concat(a.slice(c+1)))}else t.value=i}}},"input",t.attributes,!1),t.listeners))},Ii=[],Cc="";const Mi=$.register("checkbox",{nativeField:!0}),Qe={};var Ai=m(Mi,qi,Ii,!1,Ni,null,null,null);function Ni(t){for(let e in Qe)this[e]=Qe[e]}var zi=function(){return Ai.exports}(),Ge={mixins:[Te],data(){return{isLoading:!1,asyncDataEntries:{}}},methods:{handleDataSchema(t,e,a={}){var r=a,{resolveCounter:s=1}=r,n=R(r,["resolveCounter"]);var u;o.isObject(t)||(t={data:t});let{data:i=void 0,dataPath:l=null}=t;const c=this.asyncDataEntries[e]||this.$set(this.asyncDataEntries,e,{dependencyFunction:null,resolveCounter:0,resolvedData:null,resolving:!1});if((u=c.dependencyFunction)==null||u.call(this,this.context),c.resolveCounter>0){const{resolvedData:d}=c;return--c.resolveCounter===0&&(c.resolvedData=null),d}if(c.resolving)i=null;else if(i){if(o.isFunction(i)){const d=i.call(this,this.context);o.isFunction(d)?(c.dependencyFunction=i,i=d.call(this,this.context)):i=d}o.isPromise(i)&&(c.resolving=!0,this.resolveData(i,n).then(d=>{c.resolveCounter=s,c.resolvedData=d,c.resolving=!1}),i=null)}else l&&(i=o.getValueAtDataPath(this.rootData,o.normalizeDataPath(`${this.dataPath}/${l}`)));return i},async resolveData(t,e={}){this.setLoading(!0,e);let s=null;try{s=await(o.isFunction(t)?t():t)}catch(n){this.addError(n.message||n)}return this.setLoading(!1,e),s}}},nt={mixins:[Ge],data(){return{hasOptions:!1}},computed:{selectedValue:{get(){const t=s=>this.relate?this.hasOption(s)?this.getValueForOption(s):null:s,e=o.isArray(this.value)?this.value.map(t).filter(s=>s!==null):t(this.value);return this.relate&&this.hasOptions&&(e===null&&this.value!==null||Gs(this.value))&&(this.selectedValue=e),e},set(t){const e=s=>this.relate?this.getOptionForValue(s):s;this.value=o.isArray(t)?t.map(e):e(t)}},selectedOption(){return this.getOptionForValue(this.selectedValue)},options(){var e;const t=(e=this.handleDataSchema(this.schema.options,"options",{resolveCounter:1}))!=null?e:[];if(!o.isArray(t))throw new Error(`Invalid options data, should be array: ${t}`);return this.hasOptions=t.length>0,this.processOptions(t)},activeOptions(){return this.options},relate:p("relate",{type:Boolean,default:!1,callback:!1}),groupBy:p("groupBy",{type:String,default:null}),optionLabel:p("options.label",{type:[String,Function],default:null,get(t){return t||this.getOptionKey("label")||null}}),optionValue:p("options.value",{type:[String,Function],default:null,get(t){return t||this.relate&&"id"||this.getOptionKey("value")||null}}),searchFilter:p("search",{type:[Object,Function],default:null,get(t){if(t){const{filter:e,debounce:s}=o.isFunction(t)?{filter:t}:t;return s?o.debounceAsync(e,s):e}}}),groupByLabel(){return this.groupBy?"label":null},groupByOptions(){return this.groupBy?"options":null}},methods:{getOptionKey(t){const[e]=this.activeOptions;return o.isObject(e)&&t in e?t:null},processOptions(t){if(t.length){if(this.relate)for(const e of t)"id"in e||Qs(e,"id");if(this.groupBy){const e={};t=t.reduce((s,n)=>{const a=n[this.groupBy];let r=e[a];return r||(r=e[a]={[this.groupByLabel]:a,[this.groupByOptions]:[]},s.push(r)),r.options.push(n),s},[])}}return t},hasOption(t){return!!this.getOptionForValue(this.getValueForOption(t))},getOptionForValue(t){const e=(s,n,a)=>{for(const r of s)if(a){const i=e(r.options,n,null);if(i)return i}else if(n===this.getValueForOption(r))return r};return this.optionValue?e(this.activeOptions,t,this.groupBy):t},getValueForOption(t){const{optionValue:e}=this;return o.isString(e)?t==null?void 0:t[e]:o.isFunction(e)?e.call(this,new O(this,{option:t})):t},getLabelForOption(t){const{optionLabel:e}=this;return o.isString(e)?t==null?void 0:t[e]:o.isFunction(e)?e.call(this,new O(this,{option:t})):o.labelize(`${t}`)}},processValue(t,e,s,n){var a;if(t.relate){const r=(a=t.options)==null?void 0:a.dataPath,i=r?o.normalizeDataPath(`${s}/${r}`):null;n.addRelation(s,i,t),i&&n.setSourceRelated(i);const l=c=>c&&{id:c.id};e=o.isArray(e)?e.map(l):l(e)}return e}},Ui=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ul",{staticClass:"dito-checkboxes",class:"dito-layout-"+(t.schema.layout||"vertical"),attrs:{id:t.dataPath}},t._l(t.options,function(n){return s("li",[s("label",[s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.selectedOptions,expression:"selectedOptions"}],ref:"element",refInFor:!0,staticClass:"dito-checkbox",attrs:{type:"checkbox"},domProps:{value:t.getValueForOption(n),checked:Array.isArray(t.selectedOptions)?t._i(t.selectedOptions,t.getValueForOption(n))>-1:t.selectedOptions},on:{change:function(a){var r=t.selectedOptions,i=a.target,l=!!i.checked;if(Array.isArray(r)){var c=t.getValueForOption(n),u=t._i(r,c);i.checked?u<0&&(t.selectedOptions=r.concat([c])):u>-1&&(t.selectedOptions=r.slice(0,u).concat(r.slice(u+1)))}else t.selectedOptions=l}}},"input",t.attributes,!1),t.listeners)),t._v(t._s(t.getLabelForOption(n)))])])}),0)},Hi=[],Dc="";const Ki=$.register("checkboxes",{mixins:[nt],nativeField:!0,defaultValue:[],computed:{selectedOptions:{get(){return(this.selectedValue||[]).filter(t=>t)},set(t){this.selectedValue=t||[]}}}}),Xe={};var Wi=m(Ki,Ui,Hi,!1,Ji,null,null,null);function Ji(t){for(let e in Xe)this[e]=Xe[e]}var Qi=function(){return Wi.exports}(),Gi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{ref:"code",staticClass:"dito-code",style:t.style,attrs:{id:t.dataPath}})},Xi=[],Pc="";const Yi=$.register("code",{mixins:[G],computed:{lines(){return this.schema.lines||3},style(){return`height: calc(${this.lines}em * var(--line-height))`}},mounted(){const t=new Is.default(this.$refs.code,{language:this.schema.language||"javascript",tabSize:this.schema.indentSize||2,lineNumbers:!1});let e=!1,s=!1,n=!1;const a=()=>{!this.focused&&e&&(e=!1,this.onChange())},r=()=>this.onFocus(),i=()=>{this.onBlur(),a()};this.domOn(this.$refs.code.querySelector("textarea"),{focus:r,blur:i});const l=u=>{u!==t.code&&(n=!0,t.updateCode(u))},c=u=>{u!==this.value&&(s=!0,this.value=u,e=!0,a())};t.onUpdate(u=>{n?n=!1:c(u)}),this.$watch("value",u=>{s?s=!1:l(u||"")}),l(this.value||"")},methods:{focusElement(){var t;(t=this.$el.querySelector("textarea"))==null||t.focus()}}}),Ye={};var Zi=m(Yi,Gi,Xi,!1,to,null,null,null);function to(t){for(let e in Ye)this[e]=Ye[e]}var eo=function(){return Zi.exports}(),so=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("trigger",{staticClass:"dito-color",attrs:{trigger:"click",show:t.showPopup},on:{"update:show":function(n){t.showPopup=n}}},[s("div",{staticClass:"dito-input",class:{"dito-focus":t.showPopup},attrs:{slot:"trigger"},slot:"trigger"},[s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.hexValue,expression:"hexValue"}],ref:"element",attrs:{id:t.dataPath,type:"input",size:"8"},domProps:{value:t.hexValue},on:{input:function(n){n.target.composing||(t.hexValue=n.target.value)}}},"input",t.attributes,!1),t.listeners)),t.value?s("div",{staticClass:"dito-color-preview dito-inherit-focus"},[s("div",{style:{background:"#"+(t.hexValue||"00000000")}})]):t._e(),t.showClearButton?s("button",{staticClass:"dito-button-clear dito-button-overlay",attrs:{disabled:t.disabled},on:{click:function(n){return n.stopPropagation(),t.clear.apply(null,arguments)}}}):t._e()]),s("sketch-picker",{staticClass:"dito-color-picker",attrs:{slot:"popup","disable-alpha":!t.alpha,"disable-fields":!t.inputs,"preset-colors":t.presets},slot:"popup",model:{value:t.colorValue,callback:function(n){t.colorValue=n},expression:"colorValue"}})],1)},no=[],wc="";const ao=$.register("color",{components:{Trigger:T.Trigger,SketchPicker:Fs.Sketch},data(){return{showPopup:!1,convertedHexValue:null}},computed:{colorValue:{get(){return this.value||{}},set(t){const e=this.colorFormat,s={hex:(t==null?void 0:t.a)<1?"hex8":"hex",rgb:"rgba"}[e]||e;s?this.value=t[s]:this.value=ot.default(t).toString(e),this.onChange()}},hexValue:{get(){if(this.value==null)this.convertedHexValue=null;else if(!this.focused){const t=ot.default(this.value);t.isValid()&&(this.convertedHexValue=t.toString(t.getAlpha()<1?"hex8":"hex6").slice(1).toUpperCase())}return this.convertedHexValue},set(t){this.convertedHexValue=t}},colorFormat:p("format",{type:String,default:"hex"}),alpha:p("alpha",{type:Boolean,default:!1}),inputs:p("inputs",{type:Boolean,default:!0}),presets:p("presets",{type:Array,default:["#ffffff","#c3c3c3","#7f7f7f","#000000","#880015","#ed1c24","#ff7f27","#fff200","#22b14c","#00a2e8","#3f48cc","#a349a4","#b97a57","#ffaec9","#ffc90e","#00000000"]})},watch:{focused(t){if(!t&&this.convertedHexValue){const e=ot.default(`#${this.convertedHexValue}`);e!=null&&e.isValid()&&(this.value=e.toString(this.colorFormat),this.onChange())}}}}),Ze={};var ro=m(ao,so,no,!1,io,null,null,null);function io(t){for(let e in Ze)this[e]=Ze[e]}var oo=function(){return ro.exports}(),lo=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s(t.component,t._b({tag:"component"},"component",t.$props,!1))},uo=[];const co=$.register("component",{defaultValue:()=>{},ignoreMissingValue:t=>!("default"in t)}),ts={};var ho=m(co,lo,uo,!1,po,null,null,null);function po(t){for(let e in ts)this[e]=ts[e]}var mo=function(){return ho.exports}(),fo=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("input",{ref:"element",staticClass:"dito-text dito-input",attrs:{id:t.dataPath,name:t.name,type:"text",disabled:t.disabled,readonly:!0},domProps:{value:t.value}})},_o=[];const vo=$.register(["computed","data","hidden"],{mixins:[Ge],defaultValue:()=>{},defaultVisible:!1,computed:{value:{get(){const{schema:t}=this;if(t.data||t.dataPath){const e=this.handleDataSchema(t,"schema",{resolveCounter:2});this.$set(this.data,this.name,e)}return et.computed.value.get.call(this)},set(t){et.computed.value.set.call(this,t)}}}}),es={};var go=m(vo,fo,_o,!1,bo,null,null,null);function bo(t){for(let e in es)this[e]=es[e]}var yo=function(){return go.exports}(),$o=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-date"},[s(t.getComponent(t.type),t._g(t._b({ref:"element",tag:"component",attrs:{id:t.dataPath,locale:t.locale,dateFormat:Object.assign({},t.api.formats.date,t.dateFormat)},model:{value:t.dateValue,callback:function(n){t.dateValue=n},expression:"dateValue"}},"component",t.attributes,!1),t.listeners))],1)},Co=[];const Do=$.register(["date","datetime","time"],{components:{DatePicker:T.DatePicker,TimePicker:T.TimePicker,DateTimePicker:T.DateTimePicker},nativeField:!0,textField:!0,computed:{dateValue:{get(){const{value:t}=this;return t&&new Date(t)},set(t){this.value=t}},dateFormat:p("dateFormat",{type:Object,default:null})},methods:{getComponent(t){return{date:"date-picker",time:"time-picker",datetime:"date-time-picker"}[t]}},processValue(t,e){return o.isDate(e)?e.toISOString():e}}),ss={};var Po=m(Do,$o,Co,!1,wo,null,null,null);function wo(t){for(let e in ss)this[e]=ss[e]}var So=function(){return Po.exports}(),at={mixins:[Re,ue],defaultValue(t){return Q(t)?[]:null},provide(){return{$sourceComponent:()=>this}},data(){return{wrappedPrimitives:null,unwrappingPrimitives:!1,ignoreRouteChange:!1}},computed:{sourceComponent(){return this},isObjectSource(){return J(this.type)},isListSource(){return Q(this.type)},hasData(){return!!this.value},isReady(){return this.hasData||!this.providesData},isInView(){return!!this.viewComponent},wrapPrimitives(){return this.schema.wrapPrimitives},listData:{get(){let t=this.value;this.isObjectSource?t=t!=null?[t]:[]:t=this.unwrapListData(t)||t,t=t||[];const{wrapPrimitives:e}=this;return e?(this.unwrappingPrimitives?this.unwrappingPrimitives=!1:this.wrappedPrimitives=t.map(s=>({[e]:s})),this.wrappedPrimitives):t},set(t){this.wrapPrimitives?this.wrappedPrimitives=t:this.value=this.isObjectSource?t&&t.length>0?t[0]:null:t}},objectData:{get(){return this.listData[0]||null},set(t){this.listData=t?[t]:[]}},sourceSchema(){return this.schema},path(){return this.routeComponent.getChildPath(this.schema.path)},defaultQuery(){const{defaultOrder:t}=this;return t?{order:t}:{}},query:vt("query",{get(t){return h(h({},this.defaultQuery),t)},set(t){var n;const{scope:e=(n=this.defaultScope)==null?void 0:n.name,page:s=this.schema.page}=this.query;return t=h(h(h(h({},this.query),e!=null&&{scope:e}),s!=null&&{page:s}),t),o.equals(t,this.$route.query)||(this.ignoreRouteChange=!0,this.$router.replace({query:t,hash:this.$route.hash})),t}}),total:vt("total"),columns(){return K(this.schema.columns)},scopes(){return K(this.schema.scopes)},defaultScope(){if(this.scopes){let t=null;for(const e of Object.values(this.scopes)){if(e.defaultScope)return e;t||(t=e)}return t}},defaultOrder(){if(this.columns)for(const t of Object.values(this.columns)){const{defaultSort:e}=t;if(e){const s=o.isString(e)?e:"asc";return`${t.name} ${s}`}}},nestedMeta(){return x(h({},this.meta),{schema:this.schema})},forms(){return Object.values(W(this.schema,this.context))},view(){return Ct(this.schema,this.context)},linksToView(){return!!this.view},buttonSchemas(){return tt(this.schema.buttons)},hasLabels(){return this.forms.some(vn)},isCompact(){return this.forms.every(Gt)},isInlined(){return Pt(this.schema)},paginate:p("paginate",{type:Number}),render:p("render",{type:Function,default:null}),creatable:p("creatable",{type:Boolean,default:!1,get(t){return t&&H(this.schema)?this.isObjectSource?!this.value:!0:!1}}),editable:p("editable",{type:Boolean,default:!1,get(t){return t&&!this.isInlined}}),deletable:p("deletable",{type:Boolean,default:!1}),draggable:p("draggable",{type:Boolean,default:!1,get(t){return this.isListSource&&this.listData.length>1&&t}}),collapsible:p("collapsible",{type:Boolean,default:null,get(t){return this.isInlined&&!!(t!=null?t:this.collapsed!==null)}}),collapsed:p("collapsed",{type:Boolean,default:null})},watch:{$route(t,e){if(this.ignoreRouteChange){this.ignoreRouteChange=!1;return}e.path===t.path&&e.hash===t.hash&&(this.query=t.query,this.loadData(!1))},wrappedPrimitives:{deep:!0,handler(t,e){const{wrapPrimitives:s}=this;s&&e!==null&&(this.unwrappingPrimitives=!0,this.value=t.map(n=>n[s]))}}},methods:{setupData(){this.query=this.$route.query,this.ensureData()},clearData(){this.total=0,this.value=null},setData(t){!t||this.isListSource&&o.isArray(t)||this.isObjectSource&&o.isObject(t)?this.value=t:this.unwrapListData(t)||o.isObject(t)&&this.isInView&&this.viewComponent.setData(t)},unwrapListData(t){if(this.isListSource&&o.isObject(t)&&o.isNumber(t.total)&&o.isArray(t.results))return this.total=t.total,this.value=t.results,this.value},createItem(t,e){const s=this.createData(t,e);return this.isObjectSource?this.objectData=s:this.listData.push(s),this.collapsible&&this.$nextTick(()=>this.openSchemaComponent(-1)),this.onChange(),s},removeItem(t){if(this.isObjectSource)this.objectData=null,this.onChange();else{const{listData:e}=this,s=e&&e.indexOf(t);s>=0&&(e.splice(s,1),this.onChange())}},deleteItem(t,e){const s=t&&this.getItemLabel(this.schema,t,{index:e,extended:!0}),n=()=>this.notify({type:this.isTransient?"info":"success",title:"Successfully Removed",text:[`${s} was ${this.verbs.deleted}.`,this.transientNote]});if(t&&window.confirm(`Do you really want to ${this.verbs.delete} ${s}?`))if(this.isTransient)this.removeItem(t),n();else{const a=this.getItemId(this.schema,t),r=ft(a,this.resource);r&&this.handleRequest({method:"delete",resource:r},i=>{i||(this.removeItem(t),n()),this.reloadData()})}},getSchemaComponent(t){const{schemaComponents:e}=this,{length:s}=e;return e[(t%s+s)%s]},openSchemaComponent(t){const e=this.getSchemaComponent(t);e&&(e.opened=!0)},async navigateToComponent(t,e){var s,n;if(this.collapsible){const a=t.startsWith(this.dataPath)?this.isListSource?(s=o.parseDataPath(t.slice(this.dataPath.length+1))[0])!=null?s:null:0:null;if(a!==null&&o.isNumber(+a)){const r=this.getSchemaComponent(+a);if(r){const{opened:i}=r;i||(r.opened=!0,await this.$nextTick());const l=r.getComponentsByDataPath(t);if(l.length>0&&((n=e==null?void 0:e(l))!=null?n:!0))return!0;r.opened=i}}}return this.navigateToRouteComponent(t,e)},navigateToRouteComponent(t,e){return new Promise((s,n)=>{const a=()=>{var c;const{routeComponents:i}=this.appState,l=i[i.length-1];s((c=e==null?void 0:e([l]))!=null?c:!0)},r=o.parseDataPath(t);for(;r.length>0;){const i=this.routeComponent.getChildPath(this.api.normalizePath(o.normalizeDataPath(r))),{matched:l}=this.$router.match(i);l.length&&(this.$route.path===i?a():this.$router.push({path:i},()=>{this.$nextTick(a)},n)),r.pop()}s(!1)})}},async processSchema(t,e,s,n,a,r=!1,i=!1,l=null){Kt(t,e,s);const c=Pt(e);if(c&&e.resource)throw new Error("Lists with nested forms cannot load data from their own resources");const u=`id${a+1}`,d={api:t,schema:e},g=x(h({},d),{flatten:i,nested:r,param:u}),_=await hn(t,e,a);if(l&&await l(_,a+1),H(e)&&!c){const C=(y,j)=>j?y?`${y}/:${j}`:`:${j}`:y,f=a===0?"":e.path,P={path:C(f,Q(e)&&u),component:b.component(r?"dito-form-nested":"dito-form"),meta:g};J(e)&&n.push(x(h({},P),{path:C(f,u)})),f&&n.push({path:f,redirect:".",meta:d});const[E,w]=_.reduce((y,j)=>(y[j.meta.flatten?0:1].push(j),y),[[],[]]);if(w.length&&(P.children=w),n.push(P),E.length)for(const y of E)n.push(x(h({},y.redirect?y:P),{path:`${P.path}/${y.path}`,meta:x(h({},y.meta),{flatten:i})}))}},processValue(t,e,s,n){return n.addSource(s,t),e}};const Ot={text(t){const e=[{label:"contains",value:"contains"},{label:"equals",value:"equals"},{label:"starts with",value:"starts-with"},{label:"ends with",value:"ends-with"}];return{operator:t.operators?{type:"select",options:o.isArray(t.operators)?e.filter(s=>t.operators.includes(s.value)):e,width:"40%"}:null,text:{type:"text",width:t.operators?"60%":"fill"}}},"date-range"(){const t={day:"2-digit",month:"2-digit",year:"numeric"};return{from:{type:"datetime",width:"50%",dateFormat:t},to:{type:"datetime",width:"50%",dateFormat:t}}}};function xo(t,e,s){const n={label:"Filters",name:"$filters",target:e,disabled:!1,data(){return Fo(n,s.query)},components:Oo(t),buttons:{clear:{text:"Clear",events:{click({schemaComponent:a}){a.resetData(),a.applyFilters()}}},filter:{type:"submit",text:"Filter",events:{click({schemaComponent:a}){a.applyFilters()}}}},methods:{applyFilters(){s.query=x(h({},s.query),{filter:jo(this.schema,this.data),page:void 0})}}};return n}function Oo(t){var n;const e={};for(const a of Object.values(t||{})){const s=a,{filter:r}=s,i=R(s,["filter"]),l=r?(n=Ot[r])==null?void 0:n.call(Ot,a):a.components;if(l){i.components={};for(const[c,u]of Object.entries(l))if(u){const d=u.label||o.labelize(u.name||c);i.components[c]=x(h({},u),{label:!1,placeholder:d})}e[a.name]={label:i.label,type:"object",default:()=>({}),form:i,inlined:!0}}else throw new Error(`Invalid filter '${a.name}': Unknown filter type '${r}'.`)}return e}function ns(t,e){var n;const s=t.components[e];return(n=s==null?void 0:s.form)==null?void 0:n.components}function jo(t,e){const s=[];for(const n in e){const a=e[n];if(a){const r=Object.keys(ns(t,n)).map(i=>{var l;return(l=a[i])!=null?l:null});r.some(i=>i!==null)&&s.push(`${n}:${r.map(JSON.stringify).join(",")}`)}}return s.length?s:void 0}function Fo(t,e){const s={};if(e)for(const a of o.asArray(e.filter)){const[,r,i]=a.match(/^(\w+):(.*)$/);try{s[r]=o.asArray(JSON.parse(`[${i}]`))}catch{}}const n={};for(const a in t.components){const r={},i=s[a];if(i){const l=ns(t,a);if(l){let c=0;for(const u in l)r[u]=i[c++]}}n[a]=r}return n}var Eo=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isReady?s("div",{staticClass:"dito-list",class:t.schema.class,style:t.schema.style,attrs:{id:t.dataPath}},[s("div",{staticClass:"dito-navigation"},[t.scopes?s("dito-scopes",{attrs:{query:t.query,scopes:t.scopes}}):t.paginate?s("div",{staticClass:"dito-spacer"}):t._e(),t.paginate?s("dito-pagination",{attrs:{query:t.query,limit:t.paginate,total:t.total||0}}):t._e()],1),s("table",{staticClass:"dito-table",class:{"dito-table-separators":t.isInlined,"dito-table-larger-padding":t.hasEditButtons&&!t.isInlined,"dito-table-alternate-colors":!t.isInlined,"dito-table-even-count":t.hasEvenCount}},[t.columns?s("dito-table-head",{attrs:{query:t.query,columns:t.columns,hasEditButtons:t.hasEditButtons}}):t._e(),s("vue-draggable",t._b({attrs:{tag:"tbody",list:t.updateOrder(t.sourceSchema,t.listData,t.paginationRange)},on:{start:t.onStartDrag,end:t.onEndDrag}},"vue-draggable",t.getDragOptions(t.draggable),!1),t._l(t.listData,function(n,a){return s("tr",{key:t.getItemUid(t.schema,n),attrs:{id:t.getDataPath(a)}},[t.columns?t._l(t.columns,function(r){return t.shouldRender(r)?s("dito-table-cell",{key:r.name,class:t.getCellClass(r),attrs:{cell:r,schema:t.schema,dataPath:t.getDataPath(a),data:n,meta:t.nestedMeta,store:t.store,nested:!1,disabled:t.disabled||t.isLoading}}):t._e()}):[s("td",[t.isInlined?s("dito-schema-inlined",{attrs:{label:t.getItemLabel(t.schema,n,{index:a,asObject:!0}),schema:t.getItemFormSchema(t.schema,n,t.context),dataPath:t.getDataPath(a),data:n,meta:t.nestedMeta,store:t.getChildStore(a),disabled:t.disabled||t.isLoading,collapsed:t.collapsed,collapsible:t.collapsible,deletable:t.deletable,draggable:t.draggable,editable:t.editable,editPath:t.getEditPath(n,a)},on:{delete:function(r){return t.deleteItem(n,a)}}}):t.component?s(t.component,{tag:"component",attrs:{dataPath:t.getDataPath(a),data:n,nested:!1}}):t.render?s("span",{domProps:{innerHTML:t._s(t.render(t.getContext(n,a)))}}):s("span",{domProps:{innerHTML:t._s(t.getItemLabel(t.schema,n,{index:a}))}})],1)],t.hasCellEditButtons?s("td",{staticClass:"dito-cell-edit-buttons"},[s("dito-edit-buttons",{attrs:{deletable:t.deletable,draggable:t.draggable,editable:t.editable,editPath:t.getEditPath(n,a),schema:t.getItemFormSchema(t.schema,n,t.context),dataPath:t.getDataPath(a),data:n,meta:t.nestedMeta,store:t.getChildStore(a)},on:{delete:function(r){return t.deleteItem(n,a)}}})],1):t._e()],2)}),0),t.hasListButtons&&!t.single?s("tfoot",[s("tr",[s("td",{staticClass:"dito-cell-edit-buttons",attrs:{colspan:t.numColumns}},[s("dito-edit-buttons",{attrs:{creatable:t.creatable,createPath:t.path,buttons:t.buttonSchemas,schema:t.schema,dataPath:t.dataPath,data:t.listData,meta:t.meta,store:t.store}})],1)])]):t._e()],1),t.hasListButtons&&t.single?s("dito-edit-buttons",{staticClass:"dito-buttons-main dito-buttons-large",attrs:{creatable:t.creatable,createPath:t.path,buttons:t.buttonSchemas,schema:t.schema,dataPath:t.dataPath,data:t.listData,meta:t.meta,store:t.store}}):t._e()],1):t._e()},Vo=[],Sc="";const ko=$.register("list",{components:{VueDraggable:it.default},mixins:[at,xt],getSourceType(t){return t},getPanelSchema(t,e,s){const{filters:n}=t;if(n){const a=()=>s.getComponentByDataPath(e,r=>r.type==="list");return xo(K(n),e,{get query(){var r;return(r=a())==null?void 0:r.query},set query(r){const i=a();if(i){const l=c=>o.pickBy(c,u=>u!==void 0);o.equals(l(r),l(i.query))||(i.query=r,i.loadData(!1))}}})}},computed:{hasListButtons(){return!!(this.buttonSchemas||this.creatable)},hasEditButtons(){const{listData:t}=this;return t.length>0&&(this.editable||this.deletable||this.draggable)},hasCellEditButtons(){return!this.isInlined&&this.hasEditButtons},hasEvenCount(){return!(this.listData.length%2)},numColumns(){return(this.columns?Object.keys(this.columns).length:1)+(this.hasCellEditButtons?1:0)}},methods:{getDataPath(t){return B(this.dataPath,t)},getEditPath(t,e){if(this.editable){const s=mn(this.schema,this.context)||this.path,n=this.getItemId(this.schema,t,e);return`${s}/${n}`}return null},getCellClass(t){return`dito-cell-${o.hyphenate(t.name)}`},getContext(t,e){return new O(this,{data:t,value:t,index:e,dataPath:this.getDataPath(e)})},onFilterErrors(t){const e=B(this.dataPath,"$filters"),s=this.schemaComponent.getPanelByDataPath(e);if(s)return s.showValidationErrors(t,!0),!0}}}),as={};var Lo=m(ko,Eo,Vo,!1,Bo,null,null,null);function Bo(t){for(let e in as)this[e]=as[e]}var To=function(){return Lo.exports}(),Ro=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("dito-label",{staticClass:"dito-label-component",attrs:{label:t.value,dataPath:t.dataPath}})},qo=[],xc="";const Io=$.register("label",{generateLabel:!1}),rs={};var Mo=m(Io,Ro,qo,!1,Ao,null,null,null);function Ao(t){for(let e in rs)this[e]=rs[e]}var No=function(){return Mo.exports}(),zo=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-markup",attrs:{id:t.dataPath}},[s("editor-menu-bar",{staticClass:"dito-markup-toolbar",attrs:{editor:t.editor}},[t.groupedButtons.length>0?s("div",{staticClass:"dito-buttons dito-buttons-toolbar"},t._l(t.groupedButtons,function(n){return s("div",{staticClass:"dito-button-group"},t._l(n,function(a){a.name;var r=a.icon,i=a.isActive,l=a.onClick;return s("button",{staticClass:"dito-button",class:{"dito-active":i},on:{click:l}},[s("icon",{attrs:{name:r}})],1)}),0)}),0):t._e()]),s("editor-content",{ref:"editor",staticClass:"dito-markup-editor",style:t.styles,attrs:{editor:t.editor}}),t.resizable?s("div",{staticClass:"dito-resize",on:{mousedown:function(n){return n.stopPropagation(),n.preventDefault(),t.onDragResize.apply(null,arguments)}}}):t._e()],1)},Uo=[],Oc="";const Ho=$.register("markup",{components:{EditorContent:X.EditorContent,EditorMenuBar:X.EditorMenuBar,Icon:T.Icon},mixins:[G],data(){return{editor:null,height:null}},computed:{lines(){return this.schema.lines||10},styles(){return{height:this.height||`calc(${this.lines}em * var(--line-height))`}},markButtons(){return this.getButtons("marks",{bold:!0,italic:!0,underline:!0,strike:!0,small:!0,code:!0,link:{onClick:t=>this.onClickLink(t)}})},basicNodeButtons(){return this.getButtons("nodes",{paragraph:{ignoreActive:()=>this.otherNodeButtons.some(t=>t.isActive)},heading:{attr:"level",values:[1,2,3,4,5,6]}})},otherNodeButtons(){return this.getButtons("nodes",{bulletList:!0,orderedList:!0,blockquote:!0,codeBlock:!0})},toolButtons(){return this.getButtons("tools",{undo:!0,redo:!0})},groupedButtons(){const{markButtons:t,basicNodeButtons:e,otherNodeButtons:s,toolButtons:n}=this;return[t,e,s,n].filter(a=>a.length>0)},parseOptions(){return{preserveWhitespace:{collapse:!1,preserve:!0,"preserve-all":"full"}[this.whitespace]}},editorOptions(){return{editable:!this.readyonly,autoFocus:this.autofocus,disableInputRules:!this.enableRules.input,disablePasteRules:!this.enableRules.paste,parseOptions:this.parseOptions}},resizable:p("resizable",{type:Boolean,default:!1}),whitespace:p("whitespace",{type:String,default:"collapse"}),enableRules:p("enableRules",{type:[Object,Boolean],default:!1,get(t){return o.isObject(t)?t:{input:!!t,paste:!!t}}})},watch:{readyonly:"updateEditorOptions",autofocus:"updateEditorOptions",enableRules:"updateEditorOptions"},created(){let t=!1,e=!1;const s=()=>{!this.focused&&t&&(t=!1,this.onChange())},n=()=>this.onFocus(),a=()=>{this.onBlur(),s()},r=o.debounce(l=>{e=!0,this.value=l(),t=!0,s()},100),i=({getHTML:l})=>{r(l),this.onInput()};this.$watch("value",l=>{e?e=!1:this.editor.setContent(l,!1,this.parseOptions)}),this.editor=new X.Editor(x(h({},this.editorOptions),{onFocus:n,onBlur:a,onUpdate:i,extensions:this.createExtensions(),content:this.value||""}))},beforeDestroy(){this.editor.destroy()},methods:{onDragResize(t){const e=({clientX:i,clientY:l})=>({x:i,y:l});let s=e(t).y,n=parseFloat(getComputedStyle(this.$refs.editor.$el).height);const a=i=>{const{y:l}=e(i);n+=l-s,s=l,this.height=`${Math.max(n,0)}px`},r=this.domOn(document,{mousemove:a,mouseup(i){a(i),r.remove()}})},updateEditorOptions(){this.editor.setOptions(this.editorOptions)},async onClickLink(t){const e=await this.showDialog({components:{href:{type:"url",label:"Link",autofocus:!0},title:{type:"text",label:"Title"}},buttons:{cancel:{},apply:{type:"submit"},remove:{events:{click({dialogComponent:s}){s.resolve({href:null,title:null})}}}},data:this.editor.getMarkAttrs("link")});if(e){let{href:s,title:n}=e;if(s)try{new URL(s)}catch{s=`http://${s}`}t({href:s,title:n})}},createExtensions(){const{marks:t={},nodes:e={},tools:s={}}=this.schema;return[t.bold&&new L.Bold,t.italic&&new L.Italic,t.underline&&new L.Underline,t.strike&&new L.Strike,t.small&&new Ko,t.code&&new L.Code,t.link&&new Wo,e.blockquote&&new L.Blockquote,e.codeBlock&&new L.CodeBlock,new L.HardBreak,e.heading&&new L.Heading({levels:e.heading}),e.horizontalRule&&new L.HorizontalRule,(e.orderedList||e.bulletList)&&new L.ListItem,e.bulletList&&new L.BulletList,e.orderedList&&new L.OrderedList,s.history&&new L.History].filter(n=>!!n)},getButtons(t,e){const s=[],n=({name:r,icon:i,attrs:l,ignoreActive:c,onClick:u})=>{const d=this.editor.isActive[r],g=this.editor.commands[r];s.push({name:r,icon:i,isActive:(d==null?void 0:d(l))&&(c==null||!c()),onClick:()=>u?u(g,l):g(l)})},a=this.schema[t];if(a)for(const[r,i]of Object.entries(e)){const l=["undo","redo"].includes(r)?"history":r,c=a[l],u=o.underscore(r),d=o.hyphenate(r);if(c){if(i===!0)n({name:u,icon:d});else if(o.isObject(i)){const{attr:g,values:_,ignoreActive:C,onClick:f}=i;if(g){if(o.isArray(_)&&o.isArray(c))for(const P of _)c.includes(P)&&n({name:u,icon:`${d}-${P}`,attrs:{[g]:P},ignoreActive:C,onClick:f})}else n({name:u,icon:d,ignoreActive:C,onClick:f})}}}return s},focusElement(){var t,e;(e=(t=this.$el).scrollIntoView)==null||e.call(t),this.editor.focus()}}});class Ko extends X.Mark{get name(){return"small"}get schema(){return{parseDOM:[{tag:"small"}],toDOM:()=>["small",0]}}commands({type:e}){return()=>Es.toggleMark(e)}}class Wo extends L.Link{get schema(){return{attrs:{href:{default:null},title:{default:null}},inclusive:!1,parseDOM:[{tag:"a",getAttrs:e=>({href:e.getAttribute("href"),title:e.getAttribute("title")})}],toDOM:e=>["a",e.attrs,0]}}}const is={};var Jo=m(Ho,zo,Uo,!1,Qo,null,null,null);function Qo(t){for(let e in is)this[e]=is[e]}var Go=function(){return Jo.exports}(),jc="",Xo=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-multiselect",class:{"dito-multiselect-single":!t.multiple,"dito-multiselect-multiple":t.multiple}},[s("vue-multiselect",t._g(t._b({ref:"element",attrs:{"show-labels":!1,placeholder:t.placeholder,"tag-placeholder":"Press enter to add new tag",options:t.populate&&t.activeOptions||[],"custom-label":t.getLabelForOption,"track-by":t.optionValue,"group-label":t.groupByLabel,"group-values":t.groupByOptions,multiple:t.multiple,taggable:t.taggable,searchable:t.searchable,"internal-search":!t.searchFilter,"preserve-search":!!t.searchFilter,"clear-on-select":!t.searchFilter,"close-on-select":!t.stayOpen,loading:t.isLoading},on:{open:function(n){t.populate=!0},tag:t.onAddTag,"search-change":t.onSearchChange},model:{value:t.selectedOptions,callback:function(n){t.selectedOptions=n},expression:"selectedOptions"}},"vue-multiselect",t.attributes,!1),t.listeners)),t.showClearButton?s("button",{staticClass:"dito-button-clear dito-button-overlay",attrs:{type:"button",disabled:t.disabled},on:{click:t.clear}}):t._e()],1)},Yo=[],Fc="";const Zo=$.register("multiselect",{components:{VueMultiselect:Ms.default},mixins:[nt],data(){return{searchedOptions:null,populate:!1}},computed:{selectedOptions:{get(){return this.multiple?(this.selectedValue||[]).map(t=>this.getOptionForValue(t)||this.addTagOption(t)).filter(t=>t):this.selectedOption},set(t){this.selectedValue=this.multiple?(t||[]).map(e=>this.getValueForOption(e)):this.getValueForOption(t)}},activeOptions(){return this.searchedOptions||this.options},multiple:p("multiple",{type:Boolean,default:!1}),searchable:p("searchable",{type:Boolean,default:!1}),taggable:p("taggable",{type:Boolean,default:!1}),stayOpen:p("stayOpen",{type:Boolean,default:!1}),placeholder(){const{placeholder:t,searchable:e,taggable:s}=this.schema;return t||(e&&s?"Search or add a tag":e?"Select or search entry":void 0)}},mounted(){this.autofocus&&this.focus()},methods:{getListeners(){return{focus:this.onFocus,blur:this.onBlur,input:this.onChange}},addTagOption(t){if(this.taggable){const{optionLabel:e,optionValue:s}=this,n=e&&s?{[e]:t,[s]:t}:t;return this.options.push(n),n}},focusElement(){this.$refs.element.activate()},onAddTag(t){const e=this.addTagOption(t);e&&this.value.push(this.getValueForOption(e))},async onSearchChange(t){this.searchFilter&&(t?(this.searchedOptions=[],this.searchedOptions=await this.resolveData(()=>this.searchFilter(new O(this,{query:t})))):this.searchedOptions=null)}}}),os={};var tl=m(Zo,Xo,Yo,!1,el,null,null,null);function el(t){for(let e in os)this[e]=os[e]}var sl=function(){return tl.exports}(),jt={computed:{inputValue:{get(){return this.value!==null?this.value:""},set(t){this.value=t!==""?this.isInteger?parseInt(t,10):parseFloat(t):null}},isInteger(){return!1},stepValue(){return this.step==null&&!this.isInteger?"any":this.step},decimals:p("decimals",{type:Number}),step:p("step",{type:Number,get(t){return this.isInteger&&t!=null?Math.ceil(t):t}}),min:p("min",{type:Number,get(t){var e;return t=t===void 0?(e=this.getSchemaValue("range",{type:Array}))==null?void 0:e[0]:t,this.isInteger&&t!=null?Math.floor(t):t}}),max:p("max",{type:Number,get(t){var e;return t=t===void 0?(e=this.getSchemaValue("range",{type:Array}))==null?void 0:e[1]:t,this.isInteger&&t!=null?Math.ceil(t):t}}),range:p("range",{type:Array,get(){const{min:t,max:e}=this;return t!=null&&e!=null?[t,e]:void 0},set(t){o.isArray(t)&&([this.min,this.max]=t)}})},methods:{getValidations(){const t={},{range:e,min:s,max:n,decimals:a,step:r}=this;if(e?t.range=e:(s!=null&&(t.min=s),n!=null&&(t.max=n)),a!=null)t.decimals=a;else if(r){const i=(`${r}`.split(".")[1]||"").length;i>0?t.decimals=i:t.integer=!0}return this.isInteger&&(t.integer=!0),t}}},nl=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("input-field",t._g(t._b({ref:"element",staticClass:"dito-number",attrs:{id:t.dataPath,type:"number",min:t.min,max:t.max,step:t.stepValue},model:{value:t.inputValue,callback:function(n){t.inputValue=n},expression:"inputValue"}},"input-field",t.attributes,!1),t.listeners))},al=[],Ec="";const rl=$.register(["number","integer"],{components:{InputField:T.InputField},mixins:[jt],nativeField:!0,textField:!0,computed:{isInteger(){return this.type==="integer"}}}),ls={};var il=m(rl,nl,al,!1,ol,null,null,null);function ol(t){for(let e in ls)this[e]=ls[e]}var ll=function(){return il.exports}(),ul=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isReady?s("div",{staticClass:"dito-object",class:t.schema.class,style:t.schema.style,attrs:{id:t.dataPath}},[t.objectData?s("div",{staticClass:"dito-object-content"},[t.isInlined?s("dito-schema-inlined",{attrs:{schema:t.getItemFormSchema(t.schema,t.objectData,t.context),dataPath:t.dataPath,data:t.objectData,meta:t.nestedMeta,store:t.store,disabled:t.disabled||t.isLoading,collapsed:t.collapsed,collapsible:t.collapsible}}):t.component?s(t.component,{tag:"component",attrs:{dataPath:t.dataPath,data:t.objectData,nested:!1}}):t.render?s("span",{domProps:{innerHTML:t._s(t.render(t.getContext()))}}):s("span",{domProps:{innerHTML:t._s(t.getItemLabel(t.schema,t.objectData))}})],1):t._e(),s("dito-edit-buttons",{attrs:{creatable:t.creatable,deletable:t.objectData&&t.deletable,editable:t.objectData&&t.editable,createPath:t.path,editPath:t.path,buttons:t.buttonSchemas,schema:t.schema,dataPath:t.dataPath,data:t.objectData,path:t.path,meta:t.meta,store:t.store},on:{delete:function(n){return t.deleteItem(t.objectData)}}})],1):t._e()},cl=[],Vc="";const dl=$.register("object",{mixins:[at],getSourceType(t){return t},methods:{getContext(){return new O(this,{data:this.objectData})}}}),us={};var hl=m(dl,ul,cl,!1,pl,null,null,null);function pl(t){for(let e in us)this[e]=us[e]}var ml=function(){return hl.exports}();const fl=$.register("panel",{defaultValue:()=>{},excludeValue:!0,generateLabel:!1,omitPadding:!0,getPanelSchema(t){const n=t,{name:e}=n;return R(n,["name"])}});let _l,vl;const cs={};var gl=m(fl,_l,vl,!1,bl,null,null,null);function bl(t){for(let e in cs)this[e]=cs[e]}var yl=function(){return gl.exports}(),$l=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("progress",t._g(t._b({ref:"element",staticClass:"dito-progress",attrs:{id:t.dataPath,max:t.progressMax},domProps:{value:t.progressValue}},"progress",t.attributes,!1),t.listeners))},Cl=[];const Dl=$.register("progress",{mixins:[jt],computed:{progressValue(){let{value:t,range:e,step:s}=this;return t!==null?(e&&(t-=e[0]),s&&(t=Math.round(t/s)*s)):t="",t},progressMax(){const{range:t}=this;if(t)return t[1]-t[0]}}}),ds={};var Pl=m(Dl,$l,Cl,!1,wl,null,null,null);function wl(t){for(let e in ds)this[e]=ds[e]}var Sl=function(){return Pl.exports}(),xl=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ul",{staticClass:"dito-radio-buttons",class:"dito-layout-"+(t.schema.layout||"vertical"),attrs:{id:t.dataPath}},t._l(t.options,function(n){return s("li",[s("label",[s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.selectedValue,expression:"selectedValue"}],ref:"element",refInFor:!0,staticClass:"dito-radio-button",attrs:{type:"radio"},domProps:{value:t.getValueForOption(n),checked:t._q(t.selectedValue,t.getValueForOption(n))},on:{change:function(a){t.selectedValue=t.getValueForOption(n)}}},"input",t.attributes,!1),t.listeners)),t._v(t._s(t.getLabelForOption(n)))])])}),0)},Ol=[],kc="";const jl=$.register("radio",{mixins:[nt],nativeField:!0}),hs={};var Fl=m(jl,xl,Ol,!1,El,null,null,null);function El(t){for(let e in hs)this[e]=hs[e]}var Vl=function(){return Fl.exports}(),kl=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-section",class:{"dito-section-labelled":!!t.schema.label}},[s("dito-pane",{staticClass:"dito-section-pane",attrs:{schema:t.getItemFormSchema(t.schema,t.item,t.context),dataPath:t.dataPath,data:t.item,meta:t.meta,store:t.store,disabled:t.disabled}})],1)},Ll=[],Lc="";const Bl=$.register("section",{defaultValue:()=>{},ignoreMissingValue:t=>!t.nested&&!("default"in t),defaultNested:!1,generateLabel:!1,omitFlexGrow:!0,computed:{item(){return this.nested?this.value:this.data}},methods:{getItemFormSchema:Dt},async processSchema(t,e,s,n,a){await $t(t,e,n,a)}}),ps={};var Tl=m(Bl,kl,Ll,!1,Rl,null,null,null);function Rl(t){for(let e in ps)this[e]=ps[e]}var ql=function(){return Tl.exports}(),Il=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-select"},[s("select",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.selectedValue,expression:"selectedValue"}],ref:"element",attrs:{id:t.dataPath},on:{mousedown:function(n){t.populate=!0},focus:function(n){t.populate=!0},change:function(n){var a=Array.prototype.filter.call(n.target.options,function(r){return r.selected}).map(function(r){var i="_value"in r?r._value:r.value;return i});t.selectedValue=n.target.multiple?a:a[0]}}},"select",t.attributes,!1),t.listeners),[t.populate?[t._l(t.options,function(n){return[t.groupBy?s("optgroup",{attrs:{label:n[t.groupByLabel]}},t._l(n[t.groupByOptions],function(a){return s("option",{domProps:{value:t.getValueForOption(a)}},[t._v(t._s(t.getLabelForOption(a)))])}),0):s("option",{domProps:{value:t.getValueForOption(n)}},[t._v(t._s(t.getLabelForOption(n)))])]})]:t.selectedOption?[s("option",{domProps:{value:t.selectedValue}},[t._v(t._s(t.getLabelForOption(t.selectedOption)))])]:t._e()],2),t.showClearButton?s("button",{staticClass:"dito-button-clear dito-button-overlay",attrs:{disabled:t.disabled},on:{click:t.clear}}):t._e()])},Ml=[],Bc="";const Al=$.register("select",{mixins:[nt],nativeField:!0,data(){return{populate:!0}}}),ms={};var Nl=m(Al,Il,Ml,!1,zl,null,null,null);function zl(t){for(let e in ms)this[e]=ms[e]}var Ul=function(){return Nl.exports}(),Hl=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-slider"},[s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.inputValue,expression:"inputValue"}],ref:"element",staticClass:"dito-range",attrs:{id:t.dataPath,type:"range",min:t.min,max:t.max,step:t.stepValue},domProps:{value:t.inputValue},on:{__r:function(n){t.inputValue=n.target.value}}},"input",t.attributes,!1),t.listeners)),t.input?s("input-field",t._g(t._b({staticClass:"dito-number",attrs:{type:"number",min:t.min,max:t.max,step:t.stepValue},model:{value:t.inputValue,callback:function(n){t.inputValue=n},expression:"inputValue"}},"input-field",t.attributes,!1),t.listeners)):t._e()],1)},Kl=[],Tc="";const Wl=$.register("slider",{components:{InputField:T.InputField},mixins:[jt],nativeField:!0,computed:{input:p("input",{type:Boolean,default:!0})}}),fs={};var Jl=m(Wl,Hl,Kl,!1,Ql,null,null,null);function Ql(t){for(let e in fs)this[e]=fs[e]}var Gl=function(){return Jl.exports}(),Xl=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("switch-button",t._g(t._b({ref:"element",staticClass:"dito-switch",attrs:{id:t.dataPath,sync:!0,labels:t.labels},model:{value:t.value,callback:function(n){t.value=n},expression:"value"}},"switch-button",t.attributes,!1),t.listeners))},Yl=[],Rc="";const Zl=$.register("switch",{defaultValue:!1,defaultWidth:"auto",components:{SwitchButton:T.SwitchButton},computed:{labels(){return this.schema.labels}}}),_s={};var tu=m(Zl,Xl,Yl,!1,eu,null,null,null);function eu(t){for(let e in _s)this[e]=_s[e]}var su=function(){return tu.exports}(),nu=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("input-field",t._g(t._b({ref:"element",staticClass:"dito-text",attrs:{id:t.dataPath,type:t.inputType},model:{value:t.inputValue,callback:function(n){t.inputValue=n},expression:"inputValue"}},"input-field",t.attributes,!1),t.listeners))},au=[];const ru="****************",iu=$.register(["text","email","url","hostname","domain","tel","password","creditcard"],{components:{InputField:T.InputField},nativeField:!0,textField:!0,ignoreMissingValue:t=>t.type==="password",computed:{inputType(){return{creditcard:"text",hostname:"text",domain:"text"}[this.type]||this.type},inputValue:{get(){return this.type==="password"&&this.value===void 0&&!this.focused?ru:this.value},set(t){this.value=t}}},methods:{getValidations(){const t={email:"email",url:"url",hostname:"hostname",domain:"domain",password:"password",creditcard:"creditcard"}[this.type];return t?{[t]:!0}:{}}}}),vs={};var ou=m(iu,nu,au,!1,lu,null,null,null);function lu(t){for(let e in vs)this[e]=vs[e]}var uu=function(){return ou.exports}(),cu=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("textarea",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.value,expression:"value"}],ref:"element",staticClass:"dito-textarea dito-input",class:{"dito-resizable":t.resizable},attrs:{id:t.dataPath,rows:t.lines},domProps:{value:t.value},on:{input:function(n){n.target.composing||(t.value=n.target.value)}}},"textarea",t.attributes,!1),t.listeners))},du=[],qc="";const hu=$.register("textarea",{nativeField:!0,textField:!0,computed:{lines(){return this.schema.lines||4},resizable:p("resizable",{type:Boolean,default:!1})}}),gs={};var pu=m(hu,cu,du,!1,mu,null,null,null);function mu(t){for(let e in gs)this[e]=gs[e]}var fu=function(){return pu.exports}(),_u=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-tree-list"},[t.scopes?s("dito-scopes",{attrs:{query:t.query,scopes:t.scopes}}):t._e(),s("div",{staticClass:"dito-tree-panel"},[s("dito-tree-item",{attrs:{schema:t.treeSchema,dataPath:t.treeDataPath,data:t.treeData,draggable:t.draggable,open:!0}}),t.hasEditableForms?s("div",{staticClass:"dito-tree-form-container"},[s("router-view")],1):t._e()],1)],1)},vu=[],Ic="";const gu=$.register(["tree-list","tree-object"],{mixins:[at],provide(){return{container:this}},getSourceType(t){return t==="tree-object"?"object":"list"},computed:{path(){var t;return(t=this.formComponent)==null?void 0:t.path},editPath(){var t;return this.$route.path.slice((t=this.path)==null?void 0:t.length)},treeData(){return this.isListSource?{[this.name]:this.value}:this.value},treeDataPath(){return this.isListSource?this.dataPath.slice(0,this.dataPath.length-this.name.length):this.dataPath},treeSchema(){return this.isListSource?{children:h({name:this.name},this.schema)}:this.schema},hasEditableForms(){const t=e=>H(e)&&(this.getSchemaValue("editable",{type:Boolean,default:!1,schema:e})||e.children&&t(e.children));return t(this.schema)}},async processSchema(t,e,s,n,a,r=!0,i=!1,l=null){return at.processSchema(t,e,s,n,a,r,i,(c,u)=>{const{children:d}=e;if(d)return d.type="tree-list",this.processSchema(t,d,d.name,c,u,r,!0,l)})},getFormSchemasForProcessing(t,e){const{children:s}=t;return W(t,e,s?n=>x(h({},n),{components:x(h({},n.components),{[s.name]:s})}):null)}}),bs={};var bu=m(gu,_u,vu,!1,yu,null,null,null);function yu(t){for(let e in bs)this[e]=bs[e]}var $u=function(){return bu.exports}();function ys(t){return zs.default(t,{base:10})}var Cu=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-upload"},[s("table",{staticClass:"dito-table dito-table-separators dito-table-background"},[t._m(0),s("vue-draggable",t._b({attrs:{tag:"tbody",list:t.files},on:{start:t.onStartDrag,end:t.onEndDrag}},"vue-draggable",t.getDragOptions(t.draggable),!1),t._l(t.files,function(n,a){return s("tr",{key:n.key},[s("td",{domProps:{innerHTML:t._s(t.renderFile(n,a))}}),s("td",[t._v(t._s(t._f("formatFileSize")(n.size)))]),s("td",[n.upload?[n.upload.error?[t._v("Error: "+t._s(n.upload.error))]:n.upload.active?[t._v("Uploading...")]:n.upload.success?[t._v("Uploaded")]:t._e()]:[t._v("Stored")]],2),s("td",{staticClass:"dito-cell-edit-buttons"},[s("div",{staticClass:"dito-buttons dito-buttons-round"},[t.draggable?s("a",t._b({staticClass:"dito-button"},"a",t.getButtonAttributes(t.verbs.drag),!1)):t._e(),t.deletable?s("button",t._b({staticClass:"dito-button",attrs:{type:"button"},on:{click:function(r){return t.deleteFile(n,a)}}},"button",t.getButtonAttributes(t.verbs.delete),!1)):t._e()])])])}),0),s("tfoot",[s("tr",[s("td",{attrs:{colspan:4}},[s("div",{staticClass:"dito-upload-footer"},[t.isUploadActive?s("progress",{staticClass:"dito-progress",attrs:{max:"100"},domProps:{value:t.uploadProgress}}):t._e(),s("div",{staticClass:"dito-buttons dito-buttons-round"},[t.isUploadActive?s("button",{staticClass:"dito-button",attrs:{type:"button"},on:{click:function(n){n.preventDefault(),t.upload.active=!1}}},[t._v("Cancel All")]):t.isUploadReady?s("button",{staticClass:"dito-button",attrs:{type:"button"},on:{click:function(n){n.preventDefault(),t.upload.active=!0}}},[t._v("Upload All")]):t._e(),s("vue-upload",{ref:"upload",staticClass:"dito-button dito-button-add-upload",attrs:{"input-id":t.dataPath,name:t.dataPath,disabled:t.disabled,"post-action":t.uploadPath,extensions:t.extensions,accept:t.accept,multiple:t.multiple,size:t.maxSize,title:"Upload Files"},on:{"input-filter":t.inputFilter,"input-file":t.inputFile},model:{value:t.uploads,callback:function(n){t.uploads=n},expression:"uploads"}})],1)])])])])],1)])},Du=[function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("thead",{staticClass:"dito-table-head"},[s("tr",[s("th",[s("span",[t._v("Name")])]),s("th",[s("span",[t._v("Size")])]),s("th",[s("span",[t._v("Status")])]),s("th",[s("span")])])])}],Mc="";const Pu=$.register("upload",{components:{VueUpload:As.default,VueDraggable:it.default},filters:{formatFileSize:ys},mixins:[xt],data(){return{uploads:[]}},computed:{upload(){return this.$refs.upload},files(){return $s(this.value)},multiple:p("multiple",{type:Boolean,default:!1,callback:!1}),extensions:p("extensions",{type:[Array,String,RegExp]}),accept:p("accept",{type:Array,get(t){return o.isArray(t)?t.join(","):t}}),maxSize:p("maxSize",{type:[String,Number],get(t){return t?Ns.default(t):void 0}}),draggable:p("draggable",{type:Boolean,default:!1,get(t){return t&&this.files.length>1}}),deletable:p("deletable",{type:Boolean,default:!1}),isUploadReady(){return this.uploads.length&&!(this.upload.active||this.upload.uploaded)},isUploadActive(){return this.uploads.length&&this.upload.active},uploadProgress(){return this.uploads.reduce((t,e)=>t+e.progress,0)/this.uploads.length},uploadPath(){return this.getResourceUrl({type:"upload",path:this.api.normalizePath(this.dataPath)})}},methods:{renderFile(t,e){const{render:s}=this.schema;return s?s.call(this,new O(this,{value:t,data:this.files,index:e,dataPath:B(this.dataPath,e)})):o.escapeHtml(t.name)},deleteFile(t,e){const{name:s}=t;t&&window.confirm(`Do you really want to ${this.verbs.remove} ${s}?`)&&(this.multiple?this.value.splice(e,1):this.value=null,t.upload&&this.upload.remove(t.upload),this.onChange(),this.notify({type:"info",title:"Successfully Removed",text:`${s} was ${this.verbs.deleted}.`}))},getFileIndex(t){return this.multiple&&this.value?this.value.findIndex(e=>e.id===t.id):-1},addFile(t){this.multiple?this.value?this.value.push(t):this.value=[t]:this.value=t},replaceFile(t,e){if(this.multiple){const s=this.getFileIndex(t);s>=0&&(e?this.$set(this.value,s,e):this.value.splice(s,1))}else this.value=e},removeFile(t){this.replaceFile(t,null)},inputFile(t,e){if(t&&!e){const{id:s,name:n,size:a}=t;this.addFile({id:s,name:n,size:a,upload:t})}if(t&&e){const{success:s,error:n}=t;if(s){this.onChange();const a=t.response[0];a?(a.upload=t,this.replaceFile(t,a)):this.removeFile(t)}else if(n){const a={abort:"Upload aborted",denied:"Upload denied",extension:`Unsupported file-type: ${t.name}`,network:"Network error encountered during upload",server:"Server error occurred during upload",size:`File is too large: ${ys(t.size)}`,timeout:"Timeout occurred during upload"}[n]||`Unknown File Upload Error: '${n}'`;this.notify({type:"error",title:"File Upload Error",text:a}),this.removeFile(t)}}},inputFilter(t){var s;const e=t==null?void 0:t.xhr;((s=this.api.cors)==null?void 0:s.credentials)&&e&&!e.withCredentials&&(e.withCredentials=!0)}},processValue(t,e){const s=$s(e).map(r=>{var i=r,{upload:n}=i,a=R(i,["upload"]);return!n||n.success?a:null}).filter(n=>n);return t.multiple?s:s[0]||null}});function $s(t){return t?o.asArray(t):[]}const Cs={};var wu=m(Pu,Cu,Du,!1,Su,null,null,null);function Su(t){for(let e in Cs)this[e]=Cs[e]}var xu=function(){return wu.exports}(),Ou=Object.freeze(Object.defineProperty({__proto__:null,TypeButton:Ri,TypeCheckbox:zi,TypeCheckboxes:Qi,TypeCode:eo,TypeColor:oo,TypeComponent:mo,TypeComputed:yo,TypeDate:So,TypeList:To,TypeLabel:No,TypeMarkup:Go,TypeMultiselect:sl,TypeNumber:ll,TypeObject:ml,TypePanel:yl,TypeProgress:Sl,TypeRadio:Vl,TypeSection:ql,TypeSelect:Ul,TypeSlider:Gl,TypeSwitch:su,TypeText:uu,TypeTextarea:fu,TypeTreeList:$u,TypeUpload:xu},Symbol.toStringTag,{value:"Module"})),ju=["create","created","save","saved","submit","submitted","delete","deleted","edit","edited","close","closed","cancel","cancelled","drag","dragged"].reduce((t,e)=>(t[e]=e,t),{});z.default.config.productionTip=!1,z.default.use(kt.default),z.default.use(Ts.default,{dynamic:!0}),z.default.use(Rs.default);class Fu{constructor(e,i={}){var l=i,{dito:s={},api:n,views:a={}}=l,r=R(l,["dito","api","views"]);this.el=e,this.api=n=o.merge({base:"/"},s.api,n),this.options=r,n.locale||(n.locale="en-US"),n.formats=o.merge({},o.defaultFormats,n.formats),n.request||(n.request=u=>this.request(u)),n.normalizePath=n.normalizePath||n.normalizePaths?o.hyphenate:u=>u,n.denormalizePath=n.denormalizePath||n.normalizePaths?o.camelize:u=>u;const c=n.users=M(n.users,{type:"collection"})||{};c.login=M(c.login||"login",{method:"post",parent:c}),c.logout=M(c.logout||"logout",{method:"post",parent:c}),c.session=M(c.session||"session",{method:"get",parent:c}),n.resources=h({any(u){const d=this[u==null?void 0:u.type]||this.default;return u&&d.call(this,u)},default(u){const d=this.any(u.parent);return d?`${d}/${u.path}`:u.path},collection(u){return this.default(u)},member(u){return`${u.path}/${u.id}`},upload(u){return`${this.collection(u.parent)}/upload/${u.path}`}},n.resources),n.headers=h({"Content-Type":"application/json"},n.headers),n.isApiRequest=n.isApiRequest||function(u){return!o.isAbsoluteUrl(u)||u.startsWith(n.url)},o.isString(e)&&(e=document.querySelector(e)),this.root=new z.default({el:e,router:new kt.default({mode:"history",base:s.base,linkActiveClass:"",linkExactActiveClass:""}),components:{DitoRoot:wt},provide:{api:n,$verbs:()=>ju,$views:()=>{},$isPopulated:()=>!0,$schemaComponent:()=>null,$schemaParentComponent:()=>null,$routeComponent:()=>null,$dataComponent:()=>null,$sourceComponent:()=>null,$resourceComponent:()=>null,$dialogComponent:()=>null,$panelComponent:()=>null,$tabComponent:()=>null},render:u=>u(wt,{attrs:{id:e.id},props:{unresolvedViews:a,options:r},components:h(h({},Ei),Ou)})})}register(e,s){return $.register(e,s)}request({url:e,method:s="get",data:n=null,params:a=null,headers:r=null}){var l;const i=this.api.isApiRequest(e);return qs.default.request(x(h({url:e,method:s,params:a},n&&{data:n}),{baseURL:i?this.api.url:null,headers:h(h({},i&&this.api.headers),r),withCredentials:i&&!!((l=this.api.cors)!=null&&l.credentials)}))}}return Fu});
|
|
6
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi51bWQuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBTdGF0ZS5qcyIsIi4uL3NyYy91dGlscy9kYXRhLmpzIiwiLi4vc3JjL0RpdG9Db250ZXh0LmpzIiwiLi4vc3JjL21peGlucy9FbWl0dGVyTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvdHlwZS5qcyIsIi4uL3NyYy91dGlscy9yZXNvdXJjZS5qcyIsIi4uL3NyYy91dGlscy9kZXByZWNhdGUuanMiLCIuLi9zcmMvbWl4aW5zL0RpdG9NaXhpbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fY3JlZGl0Y2FyZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZGVjaW1hbHMuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2VtYWlsLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19ob3N0bmFtZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZG9tYWluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19pbnRlZ2VyLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19tYXguanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX21pbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcGFzc3dvcmQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3JhbmdlLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19yZXF1aXJlZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fdXJsLmpzIiwiLi4vc3JjL21peGlucy9WYWxpZGF0aW9uTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvYWNjZXNzb3IuanMiLCIuLi9zcmMvdXRpbHMvdWlkLmpzIiwiLi4vc3JjL3V0aWxzL1NjaGVtYUdyYXBoLmpzIiwiLi4vc3JjL3V0aWxzL3NjaGVtYS5qcyIsIi4uL3NyYy9taXhpbnMvVHlwZU1peGluLmpzIiwiLi4vc3JjL0RpdG9Db21wb25lbnQuanMiLCIuLi9zcmMvRGl0b1VzZXIuanMiLCIuLi9zcmMvbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzIiwiLi4vc3JjL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUm91dGVNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlIiwiLi4vc3JjL21peGlucy9Eb21NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Sb290LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b01lbnUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTWVudS52dWUiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLXNwaW5uZXIvc3JjL1B1bHNlTG9hZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zcGlubmVyL3NyYy9QdWxzZUxvYWRlci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvSGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0hlYWRlci52dWUiLCIuLi9zcmMvbWl4aW5zL1B1bGxkb3duTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQWNjb3VudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9BY2NvdW50LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9EaWFsb2cudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRGlhbG9nLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VsZW1lbnQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0xhYmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0xhYmVsLnZ1ZSIsIi4uL3NyYy9taXhpbnMvSXRlbU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWEudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYUlubGluZWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hSW5saW5lZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lLnZ1ZSIsIi4uL3NyYy91dGlscy9tYXRoLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NvbnRhaW5lci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Db250YWluZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFicy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVscy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbHMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0J1dHRvbnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQnV0dG9ucy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWRpdEJ1dHRvbnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWRpdEJ1dHRvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NyZWF0ZUJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DcmVhdGVCdXR0b24udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NsaXBib2FyZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DbGlwYm9hcmQudnVlIiwiLi4vc3JjL21peGlucy9Mb2FkaW5nTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1Jlc291cmNlTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtTmVzdGVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FcnJvcnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRXJyb3JzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY29wZXMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NvcGVzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYWdpbmF0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhZ2luYXRpb24udnVlIiwiLi4vc3JjL21peGlucy9PcmRlcmVkTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVHJlZUl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVHJlZUl0ZW0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlSGVhZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUhlYWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlQ2VsbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUNlbGwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1ZOb2RlLnZ1ZSIsIi4uL3NyYy9UeXBlQ29tcG9uZW50LmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVCdXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUJ1dHRvbi52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDaGVja2JveC52dWUiLCIuLi9zcmMvbWl4aW5zL0RhdGFNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvT3B0aW9uc01peGluLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDaGVja2JveGVzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDaGVja2JveGVzLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29kZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ29kZS52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2xvci52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbXBvbmVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ29tcG9uZW50LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29tcHV0ZWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbXB1dGVkLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlRGF0ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlRGF0ZS52dWUiLCIuLi9zcmMvbWl4aW5zL1NvdXJjZU1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2ZpbHRlci5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTGlzdC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUxhYmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVMYWJlbC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZU1hcmt1cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTWFya3VwLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlTXVsdGlzZWxlY3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU11bHRpc2VsZWN0LnZ1ZSIsIi4uL3NyYy9taXhpbnMvTnVtYmVyTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvVHlwZU51bWJlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTnVtYmVyLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlT2JqZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVPYmplY3QudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVQYW5lbC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVByb2dyZXNzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVQcm9ncmVzcy52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVJhZGlvLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVSYWRpby52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVNlY3Rpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVNlY3Rpb24udnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWxlY3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVNlbGVjdC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVNsaWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU2xpZGVyLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU3dpdGNoLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTd2l0Y2gudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVUZXh0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVUZXh0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dGFyZWEudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHRhcmVhLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlVHJlZUxpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVRyZWVMaXN0LnZ1ZSIsIi4uL3NyYy91dGlscy91bml0cy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVXBsb2FkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVVcGxvYWQudnVlIiwiLi4vc3JjL3ZlcmJzLmpzIiwiLi4vc3JjL0RpdG9BZG1pbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB7XG4gIHRpdGxlOiAnJyxcbiAgcm91dGVDb21wb25lbnRzOiBbXSxcbiAgdXNlcjogbnVsbCxcbiAgbG9hZENhY2hlOiB7fSwgLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgYWN0aXZlTGFiZWw6IG51bGwsXG4gIGNsaXBib2FyZERhdGE6IG51bGxcbn1cbiIsImltcG9ydCB7XG4gIGlzSW50ZWdlciwgcGFyc2VEYXRhUGF0aCwgZ2V0VmFsdWVBdERhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKSB7XG4gIHJldHVybiBkYXRhUGF0aFxuICAgID8gYCR7ZGF0YVBhdGh9LyR7dG9rZW59YFxuICAgIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHBhdGg/LnBvcCgpXG4gIHJldHVybiBwYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5lc3RlZCA/IHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIDogcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICBpZiAocGF0aCkge1xuICAgIC8vIFJlbW92ZSB0aGUgcGFyZW50IHRva2VuLiBJZiBpdCdzIGEgbnVtYmVyLCB0aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBhblxuICAgIC8vIGFycmF5IGFuZCBuZWVkIHRvIHJlbW92ZSBtb3JlIHRva2VucyB1bnRpbCB3ZSBtZWV0IHRoZSBhY3R1YWwgcGFyZW50OlxuICAgIGxldCB0b2tlblxuICAgIGRvIHtcbiAgICAgIHRva2VuID0gcGF0aC5wb3AoKVxuICAgIH0gd2hpbGUgKHRva2VuICE9IG51bGwgJiYgaXNJbnRlZ2VyKCt0b2tlbikpXG4gICAgLy8gSWYgdGhlIHJlbW92ZWQgdG9rZW4gaXMgdmFsaWQsIHdlIGNhbiBnZXQgdGhlIHBhcmVudCBkYXRhOlxuICAgIGlmICh0b2tlbiAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gcGF0aFxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtKHJvb3RJdGVtLCBkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIHJldHVybiBwYXRoID8gZ2V0VmFsdWVBdERhdGFQYXRoKHJvb3RJdGVtLCBwYXRoKSA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHJldHVybiBwYXRoW3BhdGgubGVuZ3RoIC0gMV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aE5hbWUoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgcmV0dXJuIHRva2VuID09IG51bGwgfHwgaXNJbnRlZ2VyKCt0b2tlbikgPyBudWxsIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aEluZGV4KGRhdGFQYXRoKSB7XG4gIGNvbnN0IHRva2VuID0gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpXG4gIGNvbnN0IGluZGV4ID0gdG9rZW4gPT0gbnVsbCA/IG51bGwgOiArdG9rZW5cbiAgcmV0dXJuIGlzSW50ZWdlcihpbmRleCkgPyBpbmRleCA6IG51bGxcbn1cblxubGV0IHRlbXBvcmFyeUlkID0gMFxuZXhwb3J0IGZ1bmN0aW9uIHNldFRlbXBvcmFyeUlkKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICAvLyBUZW1wb3JhcnkgaWRzIGFyZSBtYXJrZWQgd2l0aCBhICdAJyBhdCB0aGUgYmVnaW5uaW5nLlxuICBkYXRhW2lkS2V5XSA9IGBAJHsrK3RlbXBvcmFyeUlkfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVtcG9yYXJ5SWQoaWQpIHtcbiAgcmV0dXJuIC9eQC8udGVzdChpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1RlbXBvcmFyeUlkKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICByZXR1cm4gaXNUZW1wb3JhcnlJZChkYXRhPy5baWRLZXldKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWZlcmVuY2UoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFJldHVybnMgdHJ1ZSBpZiB2YWx1ZSBpcyBhbiBvYmplY3QgdGhhdCBob2xkcyBub3RoaW5nIG1vcmUgdGhhbiBhbiBpZC5cbiAgcmV0dXJuIGRhdGE/LltpZEtleV0gIT0gbnVsbCAmJiBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDFcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbURhdGFQYXRoLCBnZXRQYXJlbnRJdGVtRGF0YVBhdGgsIGdldFBhcmVudEl0ZW0sIGdldEl0ZW0sXG4gIGdldExhc3REYXRhUGF0aE5hbWUsIGdldExhc3REYXRhUGF0aEluZGV4XG59IGZyb20gJy4vdXRpbHMvZGF0YS5qcydcblxuLy8gYERpdG9Db250ZXh0YCBpbnN0YW5jZXMgYXJlIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCByYXcgYGNvbnRleHRgIG9iamVjdHMsXG4vLyB3aGljaCB0aGVtc2VsdmVzIGFjdHVhbGx5IGluaGVyaXQgZnJvbSB0aGUgbGlua2VkIGBjb21wb25lbnRgIGluc3RhbmNlLCBzb1xuLy8gdGhhdCB0aGV5IG9ubHkgbmVlZCB0byBwcm92aWRlIHRoZSB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgZGlmZmVyZW50IHRoYW5cbi8vIGluIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudC4gSW4gb3JkZXIgdG8gbm90IGV4cG9zZSBhbGwgZmllbGRzIGZyb20gdGhlXG4vLyBjb21wb25lbnQsIHRoZSB3cmFwcGVyIGlzIGludHJvZHVjZWQ6XG4vLyBVc2UgV2Vha01hcCBmb3IgdGhlIHJhdyBgY29udGV4dGAgb2JqZWN0cywgc28gd2UgZG9uJ3QgaGF2ZSB0byBwb2xsdXRlIHRoZVxuLy8gYWN0dWFsIGBEaXRvQ29udGV4dGAgaW5zdGFuY2Ugd2l0aCBpdC5cbmNvbnN0IGNvbnRleHRzID0gbmV3IFdlYWtNYXAoKVxuXG5mdW5jdGlvbiBnZXQoY29udGV4dCwga2V5LCBkZWZhdWx0VmFsdWUpIHtcbiAgY29uc3Qgb2JqZWN0ID0gY29udGV4dHMuZ2V0KGNvbnRleHQpXG4gIGNvbnN0IHZhbHVlID0gb2JqZWN0W2tleV1cbiAgLy8gSWYgYG9iamVjdGAgZXhwbGljaXRseSBzZXRzIHRoZSBrZXkgdG8gYHVuZGVmaW5lZGAsIHJldHVybiBpdC5cbiAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgfHwgb2JqZWN0Lmhhc093blByb3BlcnR5KGtleSlcbiAgICA/IHZhbHVlXG4gICAgOiBpc0Z1bmN0aW9uKGRlZmF1bHRWYWx1ZSlcbiAgICAgID8gZGVmYXVsdFZhbHVlKClcbiAgICAgIDogZGVmYXVsdFZhbHVlXG59XG5cbmZ1bmN0aW9uIHNldChjb250ZXh0LCBrZXksIHZhbHVlKSB7XG4gIGNvbnRleHRzLmdldChjb250ZXh0KVtrZXldID0gdmFsdWVcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0NvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb21wb25lbnQsIGNvbnRleHQpIHtcbiAgICAvLyBVc2UgdGhlIHByb3ZpZGVkIHBhcmFtcyBvYmplY3QgLyBmdW5jdGlvbiwgb3IgY3JlYXRlIGEgbmV3IG9uZTpcbiAgICBjb250ZXh0ID0gY29udGV4dFxuICAgICAgPyAoaXNGdW5jdGlvbihjb250ZXh0KSA/IGNvbnRleHQoKSA6IHsgLi4uY29udGV4dCB9KVxuICAgICAgOiB7fVxuICAgIC8vIElmIG5vdCBleHBsaWNpdGx5IHNldCAodG8gZmFsc2UpLCBkZWZhdWx0IHRvIHRydWUgc28gd2UgZG9uJ3QgZmFsbCBiYWNrXG4gICAgLy8gdG8gYGNvbXBvbmVudGAgZm9yIGl0cyB2YWx1ZS5cbiAgICBjb250ZXh0Lm5lc3RlZCA/Pz0gdHJ1ZVxuICAgIGNvbnRleHQuY29tcG9uZW50ID0gY29tcG9uZW50XG4gICAgLy8gSGF2ZSBgb2JqZWN0YCBpbmhlcml0IGZyb20gdGhlIGBjb21wb25lbnRgIGluc3RhbmNlLCBzbyBpdCBjYW4gb3ZlcnJpZGVcbiAgICAvLyBpdHMgdmFsdWVzIGFuZCBzdGlsbCByZXRyaWV2ZSBmcm9tIGl0LCBhbmQgYXNzb2NpYXRlIGl0IHdpdGggYHRoaXNgXG4gICAgLy8gdGhyb3VnaCBgY29udGV4dHNgIG1hcDpcbiAgICBjb25zdCBvYmplY3QgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YoY29udGV4dCwgY29tcG9uZW50KVxuICAgIGNvbnRleHRzLnNldCh0aGlzLCBvYmplY3QpXG4gIH1cblxuICBzdGF0aWMgZ2V0KGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0IGluc3RhbmNlb2YgRGl0b0NvbnRleHRcbiAgICAgID8gY29udGV4dFxuICAgICAgOiBuZXcgRGl0b0NvbnRleHQoY29tcG9uZW50LCBjb250ZXh0KVxuICB9XG5cbiAgLy8gYG5lc3RlZGAgaXMgYHRydWVgIHdoZW4gdGhlIGRhdGEtcGF0aCBwb2ludHMgYSB2YWx1ZSBpbnNpZGUgYW4gaXRlbSwgYW5kXG4gIC8vIGBmYWxzZWAgd2hlbiBpdCBwb2ludHMgdG8gdGhlIGl0ZW0gaXRzZWxmLlxuICBnZXQgbmVzdGVkKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25lc3RlZCcsIHRydWUpXG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmFsdWUnLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgZGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YVBhdGgnLCAnJylcbiAgfVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25hbWUnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhOYW1lKHRoaXMuZGF0YVBhdGgpKVxuICB9XG5cbiAgZ2V0IGluZGV4KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2luZGV4JywgKCkgPT4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgcGFyZW50SXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgaXRlbUluZGV4KCkge1xuICAgIHJldHVybiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLml0ZW1EYXRhUGF0aClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMucGFyZW50SXRlbURhdGFQYXRoKVxuICB9XG5cbiAgZ2V0IGl0ZW0oKSB7XG4gICAgLy8gTk9URTogV2hpbGUgaW50ZXJuYWxseSwgd2Ugc3BlYWsgb2YgYGRhdGFgLCBpbiB0aGUgQVBJIHN1cmZhY2UgdGhlXG4gICAgLy8gdGVybSBgaXRlbWAgaXMgdXNlZCBmb3IgdGhlIGRhdGEgdGhhdCByZWxhdGVzIHRvIGVkaXRpbmcgb2JqZWN0czpcbiAgICAvLyBJZiBgZGF0YWAgaXNuJ3QgcHJvdmlkZWQsIHdlIGNhbiBkZXRlcm1pbmUgaXQgZnJvbSByb290RGF0YSAmIGRhdGFQYXRoOlxuICAgIHJldHVybiBnZXQodGhpcywgJ2RhdGEnLCAoKSA9PlxuICAgICAgZ2V0SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICApXG4gIH1cblxuICAvLyBOT1RFOiBgcGFyZW50SXRlbWAgaXNuJ3QgdGhlIGNsb3Nlc3QgZGF0YSBwYXJlbnQgdG8gYGl0ZW1gLCBpdCdzIHRoZVxuICAvLyBjbG9zZXN0IHBhcmVudCB0aGF0IGlzbid0IGFuIGFycmF5LCBlLmcuIGZvciByZWxhdGlvbnMgb3IgbmVzdGVkIEpTT05cbiAgLy8gZGF0YS4gIFRoaXMgaXMgd2h5IHRoZSB0ZXJtIGBpdGVtYCB3YXMgY2hvc2VuIG92ZXIgYGRhdGFgLCBlLmcuIFZTIHRoZVxuICAvLyB1c2Ugb2YgYHBhcmVudERhdGFgIGluIHNlcnZlci1zaWRlZCB2YWxpZGF0aW9uLCB3aGljaCBpcyB0aGUgY2xvc2VzdFxuICAvLyBwYXJlbnQuIElmIG5lZWRlZCwgd2UgY291bGQgZXhwb3NlIHRoaXMgZGF0YSBoZXJlIHRvbywgYXMgd2UgY2FuIGRvIGFsbFxuICAvLyBzb3J0cyBvZiBkYXRhIHByb2Nlc3Npbmcgd2l0aCBgcm9vdERhdGFgIGFuZCBgZGF0YVBhdGhgLlxuICBnZXQgcGFyZW50SXRlbSgpIHtcbiAgICBjb25zdCBwYXJlbnRJdGVtID1cbiAgICAgIGdldFBhcmVudEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpIHx8IG51bGxcbiAgICByZXR1cm4gcGFyZW50SXRlbSAhPT0gdGhpcy5pdGVtID8gcGFyZW50SXRlbSA6IG51bGxcbiAgfVxuXG4gIGdldCByb290SXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdyb290RGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwcm9jZXNzZWREYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBjbGlwYm9hcmRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2NsaXBib2FyZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHVzZXIoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndXNlcicsIG51bGwpXG4gIH1cblxuICBnZXQgYXBpKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2FwaScsIG51bGwpXG4gIH1cblxuICBnZXQgdmlld3MoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld3MnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGl0ZW1MYWJlbCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdpdGVtTGFiZWwnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGZvcm1MYWJlbCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmb3JtTGFiZWwnLCBudWxsKVxuICB9XG5cbiAgLy8gVE9ETzogUmVtb3ZlIGV4cG9zdXJlIHNpbmNlIHRoZSBhc3NvY2lhdGVkIGNvbXBvbmVudCBkb2Vzbid0IGFsd2F5cyBleGlzdCxcbiAgLy8gZS5nLiBuZXN0ZWQgZm9ybXMgaW4gYHByb2Nlc3NEYXRhKClgLiBJbnN0ZWFkLCBiaW5kIGNvbXBvbmVudCB0byBgdGhpc2BcbiAgLy8gb25seSB3aGVyZSBhdmFpbGFibGUuXG4gIGdldCBjb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFRPRE86IEFkZCBgY29tcG9uZW50U2NoZW1hYCBnZXR0ZXIgZm9yIHRoZSBzY2hlbWEgb2YgdGhlIGN1cnJlbnQgY29tcG9uZW50LFxuICAvLyBldmVuIHdoZW4gdGhlIGNvbXBvbmVudCBpc24ndCBhY3R1YWxseSBpbnN0YW50aWF0ZWQuIENvbnNpZGVyIGFkZGluZ1xuICAvLyBgc291cmNlU2NoZW1hYCBhcyB3ZWxsP1xuXG4gIC8vIFRPRE86IEZpeCB1bmNsZWFyIG5hbWluZzogV2hpY2ggc2NoZW1hIGlzIHRoaXMsIHRoYXQgb2YgdGhlIGNvbXBvbmVudCBvciBvZlxuICAvLyBpdHMgcGFyZW50PyBJc24ndCBleHBvc2luZyBgZm9ybUNvbXBvbmVudGAgYW5kIGB2aWV3Q29tcG9uZW50YCBlbm91Z2gsIG9uY2VcbiAgLy8gd2Ugb2ZmZXIgYWNjZXNzIHRvIHRoZWlyIGNvbXBvbmVudHMgdGhlcmUgdGhyb3VnaCBgZ2V0Q29tcG9uZW50KClgICYgY28uIG9uXG4gIC8vIGBEaXRvTWl4aW5gIHBlcmhhcHM/ICBBbHNvLCB0aGVyZSBjb3VsZCBiZSBhIGB0YWJDb21wb25lbnRgIGdldHRlciBmb3JcbiAgLy8gc2NoZW1hcyBpbiB0YWJzP1xuICBnZXQgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NjaGVtYUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmb3JtQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3Q29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZpZXdDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkaWFsb2dDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHBhbmVsQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3BhbmVsQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdyZXNvdXJjZUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NvdXJjZUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICAvLyBXaGVuIHVzZWQgaW4gT3B0aW9uc01peGluIGZvciBgc2NoZW1hLm9wdGlvbnMudmFsdWUoKWAsXG4gIC8vIGBzY2hlbWEub3B0aW9ucy5sYWJlbCgpYCBhbmQgIGBzY2hlbWEuc2VhcmNoLmZpbHRlcigpYCBjYWxsYmFja3M6XG4gIGdldCBvcHRpb24oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnb3B0aW9uJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnb3B0aW9ucycsIHVuZGVmaW5lZClcbiAgfVxuXG4gIC8vIFRPRE86IFJlbmFtZSB0aGlzIHRvIGBzZWFyY2hUZXJtYCBvciBgc2VhcmNoUXVlcnlgLCB0byBwZXJoYXBzIGZyZWUgYHF1ZXJ5YFxuICAvLyBmb3IgdGhlIGFjdHVhbCBgcmVzb3VyY2VDb21wb25lbnQucXVlcnlgIG9iamVjdD9cbiAgZ2V0IHF1ZXJ5KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3F1ZXJ5JywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVGhlIGVycm9yIGZpZWxkIGlzIG9ubHkgcG9wdWxhdGVkIGluIHRoZSBjb250ZXh0IG9mIGJ1dHRvbnMgdGhhdCBzZW5kXG4gIC8vIHJlcXVlc3RzLCBzZWUgYFJlc291cmNlTWl4aW4uZW1pdEJ1dHRvbkV2ZW50KClgOlxuICBnZXQgZXJyb3IoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZXJyb3InLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgd2FzTm90aWZpZWQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnd2FzTm90aWZpZWQnLCBmYWxzZSlcbiAgfVxuXG4gIC8vIEhlbHBlciBNZXRob2RzXG5cbiAgZ2V0IHJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQucmVxdWVzdChvcHRpb25zKVxuICB9XG5cbiAgZ2V0IGZvcm1hdCgpIHtcbiAgICByZXR1cm4gKHZhbHVlLCBvcHRpb25zKSA9PiB0aGlzLmNvbXBvbmVudC5mb3JtYXQodmFsdWUsIG9wdGlvbnMpXG4gIH1cblxuICBnZXQgbmF2aWdhdGUoKSB7XG4gICAgcmV0dXJuIGxvY2F0aW9uID0+IHRoaXMuY29tcG9uZW50Lm5hdmlnYXRlKGxvY2F0aW9uKVxuICB9XG5cbiAgZ2V0IGRvd25sb2FkKCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHRoaXMuY29tcG9uZW50LmRvd25sb2FkKG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZ2V0UmVzb3VyY2VVcmwoKSB7XG4gICAgcmV0dXJuIHJlc291cmNlID0+IHRoaXMuY29tcG9uZW50LmdldFJlc291cmNlVXJsKHJlc291cmNlKVxuICB9XG5cbiAgZ2V0IG5vdGlmeSgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB7XG4gICAgICB0aGlzLmNvbXBvbmVudC5ub3RpZnkob3B0aW9ucylcbiAgICAgIHNldCh0aGlzLCAnd2FzTm90aWZpZWQnLCB0cnVlKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNBcnJheSwgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRldmVudHM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIEFzeW5jIHZlcnNpb25zIG9mIFZ1ZSdzICRvbigpIGFuZCAkb2ZmKCkgbWV0aG9kcyB0aGF0IGtlZXAgdHJhY2sgb2YgdGhlXG4gICAgLy8gZXZlbnRzIGFkZGVkIC8gcmVtb3ZlZCwgYW5kIHByb3ZpZGUgYSBoYXNMaXN0ZW5lcnMoKSBtZXRob2QgdGhhdCBjaGVja3NcbiAgICAvLyBpZiB0aGUgY29tcG9uZW50IGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQuXG5cbiAgICAvLyBBbHNvIGFkZHMgcHJvcGVyIGhhbmRsaW5nIG9mIGFzeW5jIGV2ZW50cywgaW5jbHVkaW5nIGEgYXN5bmMgZW1pdCgpIHRoYXRcbiAgICAvLyBkZWFscyB3aXRoIHByb3BlciBldmVudCBxdWV1ZWluZy5cbiAgICBvbihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vbihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy4kZXZlbnRzIHx8ICh0aGlzLiRldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpKVxuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZXZlbnRzW2V2ZW50XSB8fCAoZXZlbnRzW2V2ZW50XSA9IHtcbiAgICAgICAgICBjYWxsYmFja3M6IFtdLFxuICAgICAgICAgIHF1ZXVlOiBbXVxuICAgICAgICB9KVxuICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjaylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG9uY2UoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBvbiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHRoaXMub2ZmKGV2ZW50LCBvbilcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9XG4gICAgICBvbi5jYWxsYmFjayA9IGNhbGxiYWNrIC8vIE5lZWRlZCBmb3IgYG9mZigpYCwgc2VlIGJlbG93LlxuICAgICAgcmV0dXJuIHRoaXMub24oZXZlbnQsIG9uKVxuICAgIH0sXG5cbiAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBldmVudHNcbiAgICAgICAgZGVsZXRlIHRoaXMuJGV2ZW50c1xuICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vZmYoZXYsIGNhbGxiYWNrKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vZmYoa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgc3BlY2lmaWMgZXZlbnRcbiAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGFsbCBoYW5kbGVycyBmb3IgdGhpcyBldmVudFxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuJGV2ZW50c1tldmVudF1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGEgc3BlY2lmaWMgaGFuZGxlcjogZmluZCB0aGUgaW5kZXggaW4gY2FsbGJhY2tzXG4gICAgICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2FsbGJhY2tzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgLy8gTWF0Y2ggYGNiLmNhbGxiYWNrYCBhbHNvLCBhcyB1c2VkIGJ5IGBvbmNlKClgLCBzZWUgIGFib3ZlOlxuICAgICAgICAgICAgICBjYiA9PiBjYiA9PT0gY2FsbGJhY2sgfHwgY2IuY2FsbGJhY2sgPT09IGNhbGxiYWNrXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAvLyBPbmx5IHF1ZXVlIGV2ZW50IGlmIHRoZXJlIGFjdHVhbGx5IGFyZSBsaXN0ZW5lcnMgZm9yIGl0LlxuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICBjb25zdCB7IHF1ZXVlLCBjYWxsYmFja3MgfSA9IGVudHJ5XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICBjb25zdCBuZXh0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgLy8gRW1pdCB0aGUgbmV4dCBldmVudCBpbiB0aGUgcXVldWUgd2l0aCBpdHMgcGFyYW1zLlxuICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGl0IG9ubHkgZ2V0cyByZW1vdmVkIG9uY2UgYG5leHQoKWAgaXMgY2FsbGVkLlxuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBxdWV1ZS5zaGlmdCgpXG4gICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgbGV0IHJlc3VsdFxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIGNhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjYWxsYmFjay5hcHBseSh0aGlzLCBlbnRyeS5hcmdzKVxuICAgICAgICAgICAgICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgRXJyb3IgZHVyaW5nIGV2ZW50IGhhbmRsZXIgZm9yICcke2V2ZW50fSc6YCwgZXJyb3JcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gUmVzb2x2ZSB0aGUgcHJvbWlzZSB0aGF0IHdhcyBhZGRlZCB0byB0aGUgcXVldWUgZm9yIHRoZSBldmVudFxuICAgICAgICAgICAgICAvLyB0aGF0IHdhcyBqdXN0IGNvbXBsZXRlZCBieSB0aGUgd3JhcHBlciB0aGF0IGNhbGxlZCBgbmV4dCgpYFxuICAgICAgICAgICAgICBlbnRyeS5yZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgICAgbmV4dCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHF1ZXVlLnB1c2goeyBhcmdzLCByZXNvbHZlIH0pXG4gICAgICAgICAgLy8gRm9yIG5ldyBxdWV1ZXMgKD0gb25seSBvbmUgZW50cnkpIGVtaXQgdGhlIGZpcnN0IGV2ZW50IGltbWVkaWF0ZWx5LFxuICAgICAgICAgIC8vIHRvIGdldCB0aGUgcXVldWUgcnVubmluZy5cbiAgICAgICAgICBpZiAocXVldWUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIENoZWNrcyBpZiB0aGUgY29tcG9uZW50IGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQgdHlwZTpcbiAgICBoYXNMaXN0ZW5lcnMoZXZlbnQpIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycyhldikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlbnQubGVuZ3RoID4gMFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy4kZXZlbnRzPy5bZXZlbnRdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGVnYXRlKGV2ZW50LCB0YXJnZXQpIHtcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZShldiwgdGFyZ2V0KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uKGV2ZW50LCAoLi4uYXJncykgPT4gdGFyZ2V0LmVtaXQoZXZlbnQsIC4uLmFyZ3MpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaXNBcnJheSwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0Jvb2xlYW4sIGlzTnVtYmVyLCBpc0Z1bmN0aW9uLCBpc0RhdGUsXG4gIGlzUmVnRXhwLCBhc0FycmF5XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IHR5cGVDaGVja2VycyA9IHtcbiAgQm9vbGVhbjogaXNCb29sZWFuLFxuICBOdW1iZXI6IGlzTnVtYmVyLFxuICBTdHJpbmc6IGlzU3RyaW5nLFxuICBEYXRlOiBpc0RhdGUsXG4gIEFycmF5OiBpc0FycmF5LFxuICBPYmplY3Q6IGlzT2JqZWN0LFxuICBSZWdFeHA6IGlzUmVnRXhwLFxuICBGdW5jdGlvbjogaXNGdW5jdGlvblxufVxuXG4vLyBEZWNsYXJlIHRoZXNlIHNlcGFyYXRlbHkgZnJvbSB0aGUgYHR5cGVDb252ZXJ0ZXJzYCBvYmplY3QsIHRvIHByZXZlbnRcbi8vIEJhYmVsIGlzc3VlcyB3aXRoIGBPYmplY3RgIG92ZXJyaWRpbmcgdGhlIGdsb2JhbCBgT2JqZWN0YDpcbmNvbnN0IHRvQm9vbGVhbiA9IHZhbHVlID0+ICEhdmFsdWVcbmNvbnN0IHRvTnVtYmVyID0gdmFsdWUgPT4gK3ZhbHVlXG5jb25zdCB0b1N0cmluZyA9IHZhbHVlID0+IFN0cmluZyh2YWx1ZSlcblxuY29uc3QgdG9EYXRlID0gdmFsdWUgPT4gaXNEYXRlKHZhbHVlKVxuICA/IHZhbHVlXG4gIDogbmV3IERhdGUodmFsdWUpXG5cbmNvbnN0IHRvQXJyYXkgPSB2YWx1ZSA9PiBpc0FycmF5KHZhbHVlKVxuICA/IHZhbHVlXG4gIDogaXNTdHJpbmcodmFsdWUpXG4gICAgPyB2YWx1ZS5zcGxpdCgnLCcpXG4gICAgOiBhc0FycmF5KHZhbHVlKVxuXG5jb25zdCB0b09iamVjdCA9IHZhbHVlID0+IGlzT2JqZWN0KHZhbHVlKVxuICA/IHZhbHVlXG4gIC8vIElmIGEgT2JqZWN0IGlzIGV4cGVjdGVkIGJ1dCBhIEJvb2xlYW4gcHJvdmlkZSwgY29udmVydCB0byBhbiBlbXB0eVxuICAvLyBvYmplY3QuIFVzZWQgYnkgYGNyZWF0YWJsZWAgJiBjbywgdGhhdCBjYW4gYmUgYm90aC5cbiAgOiB2YWx1ZSA9PT0gdHJ1ZVxuICAgID8ge31cbiAgICA6IG51bGxcblxuY29uc3QgdG9SZWdFeHAgPSB2YWx1ZSA9PiBpc1JlZ0V4cCh2YWx1ZSlcbiAgPyB2YWx1ZVxuICA6IG5ldyBSZWdFeHAodmFsdWUpXG5cbmNvbnN0IHR5cGVDb252ZXJ0ZXJzID0ge1xuICBCb29sZWFuOiB0b0Jvb2xlYW4sXG4gIE51bWJlcjogdG9OdW1iZXIsXG4gIFN0cmluZzogdG9TdHJpbmcsXG4gIERhdGU6IHRvRGF0ZSxcbiAgQXJyYXk6IHRvQXJyYXksXG4gIE9iamVjdDogdG9PYmplY3QsXG4gIFJlZ0V4cDogdG9SZWdFeHBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkge1xuICAvLyBTZWUgaWYgYW55IG9mIHRoZSBleHBlY3QgdHlwZXMgbWF0Y2gsIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGV5IGRvOlxuICBpZiAodHlwZXMgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKHR5cGVDaGVja2Vyc1t0eXBlLm5hbWVdPy4odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGUodHlwZSwgdmFsdWUpIHtcbiAgY29uc3QgY29udmVydGVyID0gdHlwZSAmJiB0eXBlQ29udmVydGVyc1t0eXBlLm5hbWUgfHwgdHlwZV1cbiAgcmV0dXJuIGNvbnZlcnRlciA/IGNvbnZlcnRlcih2YWx1ZSkgOiB2YWx1ZVxufVxuIiwiaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBwaWNrQnkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUmVzb3VyY2Uoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFJlc291cmNlKHNjaGVtYS5yZXNvdXJjZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc291cmNlKHJlc291cmNlLCBkZWZhdWx0cyA9IHt9KSB7XG4gIGNvbnN0IHsgcGFyZW50LCAuLi5kZWZzIH0gPSBkZWZhdWx0c1xuICByZXNvdXJjZSA9IGlzT2JqZWN0KHJlc291cmNlKSA/IHsgLi4uZGVmcywgLi4ucmVzb3VyY2UgfVxuICAgIDogaXNTdHJpbmcocmVzb3VyY2UpID8geyAuLi5kZWZzLCBwYXRoOiByZXNvdXJjZSB9XG4gICAgOiBudWxsXG4gIC8vIE9ubHkgc2V0IHBhcmVudCBpZiBwYXRoIGRvZXNuJ3Qgc3RhcnQgd2l0aCAnLycsIHNvIHJlbGF0aXZlIFVSTHMgYXJlXG4gIC8vIGRlYWx0IHdpdGggY29ycmVjdGx5LlxuICBpZiAoXG4gICAgcmVzb3VyY2UgJiZcbiAgICBwYXJlbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgIHJlc291cmNlLnBhcmVudCA9PT0gdW5kZWZpbmVkICYmXG4gICAgIXJlc291cmNlLnBhdGg/LnN0YXJ0c1dpdGgoJy8nKVxuICApIHtcbiAgICByZXNvdXJjZS5wYXJlbnQgPSBwYXJlbnRcbiAgICBpZiAoIXJlc291cmNlLnBhdGgpIHtcbiAgICAgIHJlc291cmNlLnBhdGggPSAnLidcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc291cmNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW1iZXJSZXNvdXJjZShpZCwgcmVzb3VyY2UpIHtcbiAgcmV0dXJuIGlkICE9IG51bGwgJiYgcmVzb3VyY2U/LnR5cGUgPT09ICdjb2xsZWN0aW9uJ1xuICAgID8ge1xuICAgICAgdHlwZTogJ21lbWJlcicsXG4gICAgICAuLi5waWNrQnkoXG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICAodmFsdWUsIGtleSkgPT4gWydtZXRob2QnLCAncGF0aCcsICdwYXJlbnQnXS5pbmNsdWRlcyhrZXkpXG4gICAgICApLFxuICAgICAgaWQ6IGAke2lkfWBcbiAgICB9XG4gICAgOiBudWxsXG59XG4iLCJjb25zdCBsb2dnZWREZXByZWNhdGlvbnMgPSBuZXcgU2V0KClcblxuZXhwb3J0IGZ1bmN0aW9uIGRlcHJlY2F0ZShtZXNzYWdlKSB7XG4gIC8vIE9ubHkgbG9nIGRlcHJlY2F0aW9uIG1lc3NhZ2VzIG9uY2UuXG4gIGlmICghbG9nZ2VkRGVwcmVjYXRpb25zLmhhcyhtZXNzYWdlKSkge1xuICAgIGxvZ2dlZERlcHJlY2F0aW9ucy5hZGQobWVzc2FnZSlcbiAgICBjb25zb2xlLndhcm4obWVzc2FnZSlcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzQXJyYXksIGlzU3RyaW5nLCBpc0Z1bmN0aW9uLCBhc0FycmF5LCBlcXVhbHMsXG4gIGdldFZhbHVlQXREYXRhUGF0aCwgbGFiZWxpemUsIGh5cGhlbmF0ZSwgZm9ybWF0XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgYXBwU3RhdGUgZnJvbSAnLi4vYXBwU3RhdGUuanMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IEVtaXR0ZXJNaXhpbiBmcm9tICcuL0VtaXR0ZXJNaXhpbi5qcydcbmltcG9ydCB7IGlzTWF0Y2hpbmdUeXBlLCBjb252ZXJ0VHlwZSB9IGZyb20gJy4uL3V0aWxzL3R5cGUuanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGRlcHJlY2F0ZSB9IGZyb20gJy4uL3V0aWxzL2RlcHJlY2F0ZS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRW1pdHRlck1peGluXSxcblxuICBpbmplY3Q6IFtcbiAgICAnYXBpJyxcbiAgICAnJHZlcmJzJyxcbiAgICAnJHZpZXdzJyxcbiAgICAnJGlzUG9wdWxhdGVkJyxcbiAgICAnJHNjaGVtYUNvbXBvbmVudCcsXG4gICAgJyRyb3V0ZUNvbXBvbmVudCcsXG4gICAgJyRkYXRhQ29tcG9uZW50JyxcbiAgICAnJHNvdXJjZUNvbXBvbmVudCcsXG4gICAgJyRyZXNvdXJjZUNvbXBvbmVudCcsXG4gICAgJyRkaWFsb2dDb21wb25lbnQnLFxuICAgICckcGFuZWxDb21wb25lbnQnLFxuICAgICckdGFiQ29tcG9uZW50J1xuICBdLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhXG4gICAgICA/IHsgJGRhdGFDb21wb25lbnQ6ICgpID0+IHRoaXMgfVxuICAgICAgOiB7fVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcFN0YXRlLFxuICAgICAgb3ZlcnJpZGVzOiBudWxsIC8vIFNlZSBhY2Nlc3Nvci5qc1xuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvdXJjZVNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGE/LnNjaGVtYVxuICAgIH0sXG5cbiAgICB1c2VyKCkge1xuICAgICAgcmV0dXJuIGFwcFN0YXRlLnVzZXJcbiAgICB9LFxuXG4gICAgLy8gJHZlcmJzLCAkdmVyYnMgYW5kICRpc1BvcHVsYXRlZCBhcmUgZGVmaW5lZCBhcyBmdW5jdGlvbnMsIHRvIHByZXNlcnZlXG4gICAgLy8gcmVhY3RpdmVuZXNzIGFjcm9zcyBwcm92aWRlL2luamVjdC5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvaXNzdWVzLzcwMTcjaXNzdWVjb21tZW50LTQ4MDkwNjY5MVxuICAgIHZlcmJzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHZlcmJzKClcbiAgICB9LFxuXG4gICAgdmlld3MoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdmlld3MoKVxuICAgIH0sXG5cbiAgICBpc1BvcHVsYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRpc1BvcHVsYXRlZCgpXG4gICAgfSxcblxuICAgIGxvY2FsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwaS5sb2NhbGVcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IGZhbHNlIH0pXG4gICAgfSxcblxuICAgIHJvb3RDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm9vdC4kY2hpbGRyZW5bMF1cbiAgICB9LFxuXG4gICAgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gVXNlIGNvbXB1dGVkIHByb3BlcnRpZXMgYXMgbGlua3MgdG8gaW5qZWN0cywgc28gRGl0b1NjaGVtYSBjYW5cbiAgICAgIC8vIG92ZXJyaWRlIHRoZSBwcm9wZXJ0eSBhbmQgcmV0dXJuIGB0aGlzYCBpbnN0ZWFkIG9mIHRoZSBwYXJlbnQuXG4gICAgICByZXR1cm4gdGhpcy4kc2NoZW1hQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICAvLyBVc2UgY29tcHV0ZWQgcHJvcGVydGllcyBhcyBsaW5rcyB0byBpbmplY3RzLCBzbyBSb3V0ZU1peGluIGNhblxuICAgICAgLy8gb3ZlcnJpZGUgdGhlIHByb3BlcnR5IGFuZCByZXR1cm4gYHRoaXNgIGluc3RlYWQgb2YgdGhlIHBhcmVudC5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGZvcm1Db21wb25lbnQoKSB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLnJvdXRlQ29tcG9uZW50XG4gICAgICByZXR1cm4gY29tcG9uZW50Py5pc0Zvcm0gPyBjb21wb25lbnQgOiBudWxsXG4gICAgfSxcblxuICAgIHZpZXdDb21wb25lbnQoKSB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLnJvdXRlQ29tcG9uZW50XG4gICAgICByZXR1cm4gY29tcG9uZW50Py5pc1ZpZXcgPyBjb21wb25lbnQgOiBudWxsXG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGZpcnN0IHJvdXRlIGNvbXBvbmVudCBpbiB0aGUgY2hhaW4gb2YgcGFyZW50cywgaW5jbHVkaW5nXG4gICAgLy8gdGhpcyBjdXJyZW50IGNvbXBvbmVudCwgdGhhdCBpcyBsaW5rZWQgdG8gYSByZXNvdXJjZSAoYW5kIHRodXMgbG9hZHMgaXRzXG4gICAgLy8gb3duIGRhdGEgYW5kIGRvZXNuJ3QgaG9sZCBuZXN0ZWQgZGF0YSkuXG4gICAgZGF0YUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVzRGF0YSA/IHRoaXMgOiB0aGlzLiRkYXRhQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHNvdXJjZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlc291cmNlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGRpYWxvZ0NvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHBhbmVsQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHBhbmVsQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHRhYkNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHBhcmVudFNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudD8uJHBhcmVudC5zY2hlbWFDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFyZW50Um91dGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudD8uJHBhcmVudC5yb3V0ZUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYXJlbnRGb3JtQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbXBvbmVudD8uJHBhcmVudC5mb3JtQ29tcG9uZW50XG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGRhdGEgb2YgdGhlIGZpcnN0IHJvdXRlIGNvbXBvbmVudCBpbiB0aGUgY2hhaW4gb2YgcGFyZW50c1xuICAgIC8vIHRoYXQgbG9hZHMgaXRzIG93biBkYXRhIGZyb20gYW4gYXNzb2NpYXRlZCBBUEkgcmVzb3VyY2UuXG4gICAgcm9vdERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhQ29tcG9uZW50Py5kYXRhXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZUNyZWF0ZSgpIHtcbiAgICB0aGlzLiR1aWQgPSArK3VpZFxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBUaGUgc3RhdGUgb2YgY29tcG9uZW50cyBpcyBvbmx5IGF2YWlsYWJsZSBkdXJpbmcgdGhlIGxpZmUtY3ljbGUgb2YgYVxuICAgIC8vIGNvbXBvbmVudC4gU29tZSBpbmZvcm1hdGlvbiB3ZSBuZWVkIGF2YWlsYWJsZSBsb25nZXIgdGhhbiB0aGF0LCBlLmcuXG4gICAgLy8gYHF1ZXJ5YCAmIGB0b3RhbGAgb24gVHlwZUxpc3QsIHNvIHRoYXQgd2hlbiB0aGUgdXNlciBuYXZpZ2F0ZXMgYmFjayBmcm9tXG4gICAgLy8gZWRpdGluZyBhbiBpdGVtIGluIHRoZSBsaXN0LCB0aGUgc3RhdGUgb2YgdGhlIGxpc3QgaXMgc3RpbGwgdGhlIHNhbWUuXG4gICAgLy8gV2UgY2FuJ3Qgc3RvcmUgdGhpcyBpbiBgZGF0YWAsIGFzIHRoaXMgaXMgYWxyZWFkeSB0aGUgcHVyZSBkYXRhIGZyb20gdGhlXG4gICAgLy8gQVBJIHNlcnZlci4gVGhhdCdzIHdoYXQgdGhlIGBzdG9yZWAgaXMgZm9yOiBNZW1vcnkgdGhhdCdzIGF2YWlsYWJsZSBhc1xuICAgIC8vIGxvbmcgYXMgdGhlIGN1cnJlbnQgZWRpdGluZyBwYXRoIGlzIHN0aWxsIHZhbGlkLiBGb3IgdHlwZSBjb21wb25lbnRzLFxuICAgIC8vIHRoaXMgbWVtb3J5IGlzIHByb3ZpZGVkIGJ5IHRoZSBwYXJlbnQsIHNlZSBSb3V0ZU1peGluIGFuZCBEaXRvUGFuZS5cbiAgICBnZXRTdG9yZShrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlW2tleV1cbiAgICB9LFxuXG4gICAgc2V0U3RvcmUoa2V5LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuJHNldCh0aGlzLnN0b3JlLCBrZXksIHZhbHVlKVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFN0b3JlKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RvcmUoa2V5KSB8fCB0aGlzLnNldFN0b3JlKGtleSwge30pXG4gICAgfSxcblxuICAgIGdldFNjaGVtYVZhbHVlKFxuICAgICAga2V5T3JEYXRhUGF0aCxcbiAgICAgIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBzY2hlbWEgPSB0aGlzLnNjaGVtYSwgY2FsbGJhY2sgPSB0cnVlIH0gPSB7fVxuICAgICkge1xuICAgICAgY29uc3QgdHlwZXMgPSB0eXBlICYmIGFzQXJyYXkodHlwZSlcbiAgICAgIC8vIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBkYXRhLXBhdGhzIGluIGBrZXlPckRhdGFQYXRoYCBjYW4gb25seSBiZVxuICAgICAgLy8gcHJvdmlkZWQgaW4gaW4gYXJyYXkgZm9ybWF0IGhlcmU6XG4gICAgICBsZXQgdmFsdWUgPSBzY2hlbWFcbiAgICAgICAgPyBpc0FycmF5KGtleU9yRGF0YVBhdGgpXG4gICAgICAgICAgPyBnZXRWYWx1ZUF0RGF0YVBhdGgoc2NoZW1hLCBrZXlPckRhdGFQYXRoLCAoKSA9PiB1bmRlZmluZWQpXG4gICAgICAgICAgOiBzY2hlbWFba2V5T3JEYXRhUGF0aF1cbiAgICAgICAgOiB1bmRlZmluZWRcblxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgZGVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oZGVmKSAmJiAhaXNNYXRjaGluZ1R5cGUodHlwZXMsIGRlZikpIHtcbiAgICAgICAgICAvLyBTdXBwb3J0IGBkZWZhdWx0KClgIGZ1bmN0aW9ucyBmb3IgYW55IHR5cGUgZXhjZXB0IGBGdW5jdGlvbmA6XG4gICAgICAgICAgZGVmID0gZGVmLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICB9XG4gICAgICAvLyBBbnkgc2NoZW1hIHZhbHVlIGhhbmRsZWQgdGhyb3VnaCBgZ2V0U2NoZW1hVmFsdWUoKWAgY2FuIHByb3ZpZGVcbiAgICAgIC8vIGEgZnVuY3Rpb24gdGhhdCdzIHJlc29sdmVkIHdoZW4gdGhlIHZhbHVlIGlzIGV2YWx1YXRlZDpcbiAgICAgIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gTm93IGZpbmFsbHkgc2VlIGlmIHdlIGNhbiBjb252ZXJ0IHRvIHRoZSBleHBlY3QgdHlwZXMuXG4gICAgICBpZiAodHlwZXMgJiYgdmFsdWUgIT0gbnVsbCAmJiAhaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgICAgICBjb25zdCBjb252ZXJ0ZWQgPSBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSlcbiAgICAgICAgICBpZiAoY29udmVydGVkICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIGdldExhYmVsKHNjaGVtYSwgbmFtZSkge1xuICAgICAgcmV0dXJuIHNjaGVtYVxuICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2xhYmVsJywgeyB0eXBlOiBTdHJpbmcsIHNjaGVtYSB9KSB8fFxuICAgICAgICAgIGxhYmVsaXplKG5hbWUgfHwgc2NoZW1hLm5hbWUpXG4gICAgICAgIDogbGFiZWxpemUobmFtZSkgfHwgJydcbiAgICB9LFxuXG4gICAgbGFiZWxpemUsXG5cbiAgICBnZXRCdXR0b25BdHRyaWJ1dGVzKG5hbWUsIGJ1dHRvbikge1xuICAgICAgY29uc3QgdmVyYiA9IHRoaXMudmVyYnNbbmFtZV0gfHwgbmFtZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xhc3M6IGBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YCxcbiAgICAgICAgdGl0bGU6IGJ1dHRvbj8udGV4dCB8fCBsYWJlbGl6ZSh2ZXJiKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUsIGZhbGxiYWNrID0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFuaW1hdGlvbjogMTUwLFxuICAgICAgICBkaXNhYmxlZDogIWRyYWdnYWJsZSxcbiAgICAgICAgaGFuZGxlOiAnLmRpdG8tYnV0dG9uLWRyYWcnLFxuICAgICAgICBkcmFnQ2xhc3M6ICdkaXRvLWRyYWctYWN0aXZlJyxcbiAgICAgICAgY2hvc2VuQ2xhc3M6ICdkaXRvLWRyYWctY2hvc2VuJyxcbiAgICAgICAgZ2hvc3RDbGFzczogJ2RpdG8tZHJhZy1naG9zdCcsXG4gICAgICAgIGZhbGxiYWNrQ2xhc3M6ICdkaXRvLWRyYWctZmFsbGJhY2snLFxuICAgICAgICBmb3JjZUZhbGxiYWNrOiBmYWxsYmFja1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRRdWVyeUxpbmsocXVlcnkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICAvLyBQcmVzZXJ2ZSBoYXNoIGZvciB0YWJzOlxuICAgICAgICBoYXNoOiB0aGlzLiRyb3V0ZS5oYXNoXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNob3VsZFJlbmRlcihzY2hlbWEgPSBudWxsKSB7XG4gICAgICByZXR1cm4gISFzY2hlbWEgJiYgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnaWYnLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIHNjaGVtYVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2hvd0RpYWxvZyh7XG4gICAgICBjb21wb25lbnRzLFxuICAgICAgYnV0dG9ucyxcbiAgICAgIGRhdGEsXG4gICAgICBzZXR0aW5ncyA9IHtcbiAgICAgICAgd2lkdGg6IDQ4MCxcbiAgICAgICAgaGVpZ2h0OiAnYXV0bycsXG4gICAgICAgIGNsaWNrVG9DbG9zZTogZmFsc2VcbiAgICAgIH1cbiAgICB9KSB7XG4gICAgICAvLyBTaG93cyBhIGRpdG8tZGlhbG9nIGNvbXBvbmVudCB0aHJvdWdoIHZ1ZS1qcy1tb2RhbCwgYW5kIHdyYXBzIGl0IGluIGFcbiAgICAgIC8vIHByb21pc2Ugc28gdGhhdCB0aGUgYnV0dG9ucyBpbiB0aGUgZGlhbG9nIGNhbiB1c2UgYGRpYWxvZy5yZXNvbHZlKClgXG4gICAgICAvLyBhbmQgYGRpYWxvZy5yZWplY3QoKWAgdG8gY2xvc2UgdGhlIG1vZGFsIGRpYWxvZyBhbmQgcmVzb2x2ZSAvIHJlamVjdFxuICAgICAgLy8gdGhlIHByb21pc2UgYXQgb25jZS5cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRoaXMuJG1vZGFsLnNob3coRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZGlhbG9nJyksIHtcbiAgICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICAgIGJ1dHRvbnMsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBwcm9taXNlOiB7IHJlc29sdmUsIHJlamVjdCB9XG4gICAgICAgIH0sIHNldHRpbmdzKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKSB7XG4gICAgICByZXNvdXJjZSA9IGdldFJlc291cmNlKHJlc291cmNlKVxuICAgICAgLy8gUmVzb3VyY2VzIHdpdGhvdXQgYSBwYXJlbnQgaW5oZXJpdCB0aGUgb25lIGZyb20gYGRhdGFDb21wb25lbnRgXG4gICAgICAvLyBhdXRvbWF0aWNhbGx5LlxuICAgICAgaWYgKHJlc291cmNlLnBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc291cmNlLnBhcmVudCA9IHRoaXMuZGF0YUNvbXBvbmVudD8ucmVzb3VyY2VcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmFwaS5yZXNvdXJjZXMuYW55KGdldFJlc291cmNlKHJlc291cmNlKSlcbiAgICB9LFxuXG4gICAgZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpIHtcbiAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIGxldCB1cmwgPSBudWxsXG4gICAgICBpZiAocGF0aCkge1xuICAgICAgICAvLyBVc2Ugc2FtZSBhcHByb2FjaCBhcyBheGlvcyBpbnRlcm5hbGx5IHRvIGpvaW4gYmFzZVVSTCB3aXRoIHBhdGg6XG4gICAgICAgIHVybCA9IGAke1xuICAgICAgICAgIHRoaXMuYXBpLnVybC5yZXBsYWNlKC9cXC8rJC8sICcnKVxuICAgICAgICB9LyR7XG4gICAgICAgICAgcGF0aC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgICAgICB9YFxuICAgICAgICAvLyBTdXBwb3J0IG9wdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMsIHdoaWNoIGFyZSBhZGRlZCB0byB0aGUgVVJMOlxuICAgICAgICBjb25zdCB7IHF1ZXJ5IH0gPSByZXNvdXJjZVxuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICBjb25zdCBwYXJhbXMgPSBPYmplY3QuZW50cmllcyhxdWVyeSkubWFwKFxuICAgICAgICAgICAgKFtrZXksIHZhbHVlXSkgPT5cbiAgICAgICAgICAgICAgYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKX1gXG4gICAgICAgICAgKVxuICAgICAgICAgIHVybCA9IGAke3VybH0/JHtwYXJhbXMuam9pbignJicpfWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVybFxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kUmVxdWVzdCh7IG1ldGhvZCwgdXJsLCByZXNvdXJjZSwgZGF0YSwgcGFyYW1zLCBpbnRlcm5hbCB9KSB7XG4gICAgICB1cmwgPSB1cmwgfHwgdGhpcy5nZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpXG4gICAgICBtZXRob2QgPSBtZXRob2QgfHwgcmVzb3VyY2U/Lm1ldGhvZFxuICAgICAgY29uc3QgY2hlY2tVc2VyID0gIWludGVybmFsICYmIHRoaXMuYXBpLmlzQXBpUmVxdWVzdCh1cmwpXG4gICAgICBpZiAoY2hlY2tVc2VyKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm9vdENvbXBvbmVudC5lbnN1cmVVc2VyKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5hcGkucmVxdWVzdCh7IG1ldGhvZCwgdXJsLCBkYXRhLCBwYXJhbXMgfSlcbiAgICAgIC8vIERldGVjdCBjaGFuZ2Ugb2YgdGhlIG93biB1c2VyLCBhbmQgZmV0Y2ggaXQgYWdhaW4gaWYgaXQgd2FzIGNoYW5nZWQuXG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrVXNlciAmJlxuICAgICAgICBtZXRob2QgPT09ICdwYXRjaCcgJiZcbiAgICAgICAgZXF1YWxzKHJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLnVzZXIuaWQsIHRoaXMuYXBpLnVzZXJzKSlcbiAgICAgICkge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZmV0Y2hVc2VyKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH0sXG5cbiAgICByZXF1ZXN0KHsgY2FjaGUsIC4uLm9wdGlvbnMgfSkge1xuICAgICAgLy8gQWxsb3cgY2FjaGluZyBvZiBsb2FkZWQgZGF0YSBvbiB0d28gbGV2ZWxzOlxuICAgICAgLy8gLSAnZ2xvYmFsJzogY2FjaGUgZ2xvYmFsbHksIGZvciB0aGUgZW50aXJlIGFkbWluIHNlc3Npb25cbiAgICAgIC8vIC0gJ2xvY2FsJzogY2FjaGUgbG9jYWxseSB3aXRoaW4gdGhlIGNsb3Nlc3Qgcm91dGUgY29tcG9uZW50IHRoYXQgaXNcbiAgICAgIC8vICAgIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlIGFuZCBsb2FkcyBpdHMgb3duIGRhdGEuXG4gICAgICBjb25zdCBjYWNoZVBhcmVudCA9IGNhY2hlICYmIHtcbiAgICAgICAgZ2xvYmFsOiB0aGlzLmFwcFN0YXRlLFxuICAgICAgICBsb2NhbDogdGhpcy5kYXRhQ29tcG9uZW50XG4gICAgICB9W2NhY2hlXVxuICAgICAgY29uc3QgbG9hZENhY2hlID0gY2FjaGVQYXJlbnQ/LmxvYWRDYWNoZVxuICAgICAgLy8gQnVpbGQgYSBjYWNoZSBrZXkgZnJvbSB0aGUgY29uZmlnOlxuICAgICAgY29uc3QgY2FjaGVLZXkgPSBsb2FkQ2FjaGUgJiYgYCR7XG4gICAgICAgIG9wdGlvbnMubWV0aG9kIHx8ICdnZXQnfSAke1xuICAgICAgICBvcHRpb25zLnVybH0gJHtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5wYXJhbXMgfHwgJycpfSAke1xuICAgICAgICBKU09OLnN0cmluZ2lmeShvcHRpb25zLmRhdGEgfHwgJycpXG4gICAgICB9YFxuICAgICAgaWYgKGxvYWRDYWNoZSAmJiAoY2FjaGVLZXkgaW4gbG9hZENhY2hlKSkge1xuICAgICAgICByZXR1cm4gbG9hZENhY2hlW2NhY2hlS2V5XVxuICAgICAgfVxuICAgICAgLy8gTk9URTogTm8gYXdhaXQgaGVyZSwgcmVzIGlzIGEgcHJvbWlzZSB0aGF0IHdlIGNhbiBlYXNpbHkgY2FjaGUuXG4gICAgICAvLyBUaGF0J3MgZmluZSBiZWNhdXNlIHByb21pc2VzIGNhbiBiZSByZXNvbHZlZCBvdmVyIGFuZCBvdmVyIGFnYWluLlxuICAgICAgY29uc3QgcmVzID0gdGhpcy5zZW5kUmVxdWVzdChvcHRpb25zKVxuICAgICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5kYXRhKVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIC8vIENvbnZlcnQgYXhpb3MgZXJyb3JzIHRvIG5vcm1hbCBlcnJvcnNcbiAgICAgICAgICBjb25zdCBkYXRhID0gZXJyb3IucmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICB0aHJvdyBkYXRhXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGRhdGEubWVzc2FnZSksIGRhdGEpXG4gICAgICAgICAgICA6IGVycm9yXG4gICAgICAgIH0pXG4gICAgICBpZiAobG9hZENhY2hlKSB7XG4gICAgICAgIGxvYWRDYWNoZVtjYWNoZUtleV0gPSByZXNcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9LFxuXG4gICAgbG9hZChvcHRpb25zKSB7XG4gICAgICBkZXByZWNhdGUoJ2xvYWQoKSBpcyBkZXByZWNhdGVkLiBVc2UgcmVxdWVzdCgpIGluc3RlYWQuJylcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3Qob3B0aW9ucylcbiAgICB9LFxuXG4gICAgZm9ybWF0KHZhbHVlLCB7XG4gICAgICBsb2NhbGUgPSB0aGlzLmFwaS5sb2NhbGUsXG4gICAgICBkZWZhdWx0cyA9IHRoaXMuYXBpLmZvcm1hdHMsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gZm9ybWF0KHZhbHVlLCB7XG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgIC4uLm9wdGlvbnNcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIG5hdmlnYXRlKGxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKFxuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgICgpID0+IHJlc29sdmUodHJ1ZSksXG4gICAgICAgICAgKCkgPT4gcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZG93bmxvYWQob3B0aW9ucyA9IHt9KSB7XG4gICAgICBpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcbiAgICAgICAgb3B0aW9ucyA9IHsgdXJsOiBvcHRpb25zIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdXJsLCBmaWxlbmFtZSB9ID0gb3B0aW9uc1xuICAgICAgLy8gU2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDk5MTcwNjYvMTE2MzcwOFxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgYS5ocmVmID0gdXJsXG4gICAgICBpZiAoZmlsZW5hbWUpIHtcbiAgICAgICAgYS5kb3dubG9hZCA9IGZpbGVuYW1lXG4gICAgICB9XG4gICAgICBjb25zdCB7IGJvZHkgfSA9IGRvY3VtZW50XG4gICAgICBib2R5LmFwcGVuZENoaWxkKGEpXG4gICAgICBhLmNsaWNrKClcbiAgICAgIGJvZHkucmVtb3ZlQ2hpbGQoYSlcbiAgICB9LFxuXG4gICAgbm90aWZ5KG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5ub3RpZnkob3B0aW9ucylcbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50LmNsb3NlTm90aWZpY2F0aW9ucygpXG4gICAgfSxcblxuICAgIHNldHVwU2NoZW1hRmllbGRzKCkge1xuICAgICAgdGhpcy5zZXR1cE1ldGhvZHMoKVxuICAgICAgdGhpcy5zZXR1cENvbXB1dGVkKClcbiAgICAgIHRoaXMuc2V0dXBFdmVudHMoKVxuICAgIH0sXG5cbiAgICBzZXR1cE1ldGhvZHMoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5tZXRob2RzIHx8IHt9KSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgbWV0aG9kIGRlZmluaXRpb246ICR7a2V5fTogJHt2YWx1ZX1gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldHVwQ29tcHV0ZWQoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5jb21wdXRlZCB8fCB7fSkpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzb3IgPSBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgICAgICAgID8geyBnZXQ6IHZhbHVlIH1cbiAgICAgICAgICA6IGlzT2JqZWN0KHZhbHVlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmdldClcbiAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoYWNjZXNzb3IpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCBhY2Nlc3NvcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgY29tcHV0ZWQgcHJvcGVydHkgZGVmaW5pdGlvbjogJHtrZXl9OiAke3ZhbHVlfWBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBFdmVudHMoKSB7XG4gICAgICBjb25zdCB7IHdhdGNoLCBldmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAod2F0Y2gpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBpc0Z1bmN0aW9uKHdhdGNoKSA/IHdhdGNoLmNhbGwodGhpcykgOiB3YXRjaFxuICAgICAgICBpZiAoaXNPYmplY3QoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgLy8gSW5zdGFsbCB0aGUgd2F0Y2ggaGFuZGxlcnMgaW4gdGhlIG5leHQgdGljaywgc28gYWxsIGNvbXBvbmVudHMgYXJlXG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZWQgYW5kIHdlIGNhbiBjaGVjayBhZ2FpbnN0IHRoZWlyIG5hbWVzLlxuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGhhbmRsZXJzKSkge1xuICAgICAgICAgICAgICAvLyBFeHBhbmQgcHJvcGVydHkgbmFtZXMgdG8gJ2RhdGEucHJvcGVydHknOlxuICAgICAgICAgICAgICBjb25zdCBleHByID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlOYW1lKGtleSlcbiAgICAgICAgICAgICAgICA/IGBkYXRhLiR7a2V5fWBcbiAgICAgICAgICAgICAgICA6IGtleVxuICAgICAgICAgICAgICB0aGlzLiR3YXRjaChleHByLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFkZEV2ZW50ID0gKGtleSwgZXZlbnQsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgIHRoaXMub24oaHlwaGVuYXRlKGV2ZW50KSwgY2FsbGJhY2spXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBldmVudCBkZWZpbml0aW9uOiAke2tleX06ICR7Y2FsbGJhY2t9YClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50cykpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFsc28gc2NhbiBzY2hlbWEgZm9yIGBvbltBLVpdYC1zdHlsZSBjYWxsYmFja3MgYW5kIGFkZCB0aGVtXG4gICAgICAvLyBUT0RPOiBEZXBlcmVjYXRlIG9uZSBmb3JtYXQgb3IgdGhlIG90aGVyLCBpbiBmYXZvdXIgb2Ygb25seSBvbmUgd2F5IG9mXG4gICAgICAvLyBkb2luZyB0aGluZ3MuIERlY2lkZSB3aGljaCBvbmUgdG8gcmVtb3ZlLlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEpKSB7XG4gICAgICAgIGlmICgvXm9uW0EtWl0vLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LnNsaWNlKDIpLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0RXZlbnQoZXZlbnQsIHtcbiAgICAgIGNvbnRleHQgPSBudWxsLFxuICAgICAgcGFyZW50ID0gbnVsbFxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgaGFzTGlzdGVuZXJzID0gdGhpcy5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBjb25zdCBwYXJlbnRIYXNMaXN0ZW5lcnMgPSBwYXJlbnQ/Lmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGlmIChoYXNMaXN0ZW5lcnMgfHwgcGFyZW50SGFzTGlzdGVuZXJzKSB7XG4gICAgICAgIC8vIFRoZSBlZmZlY3RzIG9mIHNvbWUgZXZlbnRzIG5lZWQgc29tZSB0aW1lIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIFZ1ZS5cbiAgICAgICAgLy8gVXNlICRuZXh0VGljaygpIHRvIG1ha2Ugc3VyZSBvdXIgaGFuZGxlcnMgc2VlIHRoZXNlIGNoYW5nZXMuXG4gICAgICAgIC8vIEZvciBleGFtcGxlLCBgcHJvY2Vzc2VkSXRlbWAgaXMgb25seSBjb3JyZWN0IGFmdGVyIGNvbXBvbmVudHMgdGhhdFxuICAgICAgICAvLyBhcmUgbmV3bHkgcmVuZGVyZWQgZHVlIHRvIGRhdGEgY2hhbmdlcyBoYXZlIHJlZ2lzdGVyZWQgdGhlbXNlbHZlcy5cbiAgICAgICAgaWYgKFsnbG9hZCcsICdjaGFuZ2UnXS5pbmNsdWRlcyhldmVudCkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLiRuZXh0VGljaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gKGNvbnRleHQgPSBEaXRvQ29udGV4dC5nZXQodGhpcywgY29udGV4dCkpXG4gICAgICAgIGNvbnN0IHJlcyA9IGhhc0xpc3RlbmVyc1xuICAgICAgICAgID8gYXdhaXQgdGhpcy5lbWl0KGV2ZW50LCBnZXRDb250ZXh0KCkpXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgLy8gRG9uJ3QgYnViYmxlIHRvIHBhcmVudCBpZiBoYW5kbGVkIGV2ZW50IHJldHVybmVkIGBmYWxzZWBcbiAgICAgICAgaWYgKHBhcmVudEhhc0xpc3RlbmVycyAmJiByZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgcGFyZW50LmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfVxuICB9XG59XG5cbmxldCB1aWQgPSAwXG4iLCJpbXBvcnQgeyBpc0NyZWRpdENhcmQgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgY3JlZGl0Y2FyZCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzQ3JlZGl0Q2FyZCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBpbnZhbGlkJ1xufVxuIiwiZXhwb3J0IGNvbnN0IGRlY2ltYWxzID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBkZWNpbWFscykgPT4ge1xuICAgIGNvbnN0IG1hdGNoID0gZGVjaW1hbHMgPT09ICcqJyA/ICcrJyA6IGB7MSwke2RlY2ltYWxzfX1gXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF5bLStdP1xcXFxkKihcXFxcLlxcXFxkJHttYXRjaH0pPyRgKS50ZXN0KHZhbHVlKVxuICB9LFxuXG4gIG1lc3NhZ2U6ICh2YWx1ZSwgZGVjaW1hbHMpID0+IChcbiAgICBgbXVzdCBiZSBudW1lcmljIGFuZCBtYXkgY29udGFpbiAke1xuICAgICAgIWRlY2ltYWxzIHx8IGRlY2ltYWxzID09PSAnKicgPyAnJyA6IGRlY2ltYWxzXG4gICAgfSBkZWNpbWFsIHBvaW50c2BcbiAgKVxufVxuIiwiaW1wb3J0IHsgaXNFbWFpbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBlbWFpbCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRW1haWwodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSBhIHZhbGlkIGVtYWlsJ1xufVxuIiwiaW1wb3J0IHsgaXNIb3N0bmFtZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBob3N0bmFtZSA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSG9zdG5hbWUodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgaG9zdCBuYW1lJ1xufVxuIiwiaW1wb3J0IHsgaXNEb21haW4gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZG9tYWluID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNEb21haW4odmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgZG9tYWluJ1xufVxuIiwiaW1wb3J0IHsgaXNJbnRlZ2VyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGludGVnZXIgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0ludGVnZXIodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSB3aG9sZSBudW1iZXInXG59XG4iLCJleHBvcnQgY29uc3QgbWF4ID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtYXgpID0+IHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgbWF4KSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWF4fSBvciBsZXNzYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgbWluID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtaW4pID0+IHZhbHVlID49IG1pbixcbiAgbWVzc2FnZSh2YWx1ZSwgbWluKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWlufSBvciBtb3JlYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcGFzc3dvcmQgPSB7XG4gIC8vIEFsbG93IGFueSB2YWx1ZS4gRm9yIG5vdyB0aGlzIGlzIG9ubHkgdXNlZCBhcyBhIG1hcmtlciwgdG8gYWxsb3cgdGhlXG4gIC8vIHJlcXVpcmVkIHZhbGlkYXRpb24gdG8gaGFuZGxlIHVuY2hhbmdlZCBwYXNzd29yZHMgc2VwYXJhdGVseS5cbiAgdmFsaWRhdGU6ICgpID0+IHRydWVcbn1cbiIsImV4cG9ydCBjb25zdCByYW5nZSA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgW21pbiwgbWF4XSkgPT4gdmFsdWUgPj0gbWluICYmIHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgW21pbiwgbWF4XSkge1xuICAgIHJldHVybiBgbXVzdCBiZSBiZXR3ZWVuICR7bWlufSBhbmQgJHttYXh9YFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcmVxdWlyZWQgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIHNldHRpbmdzLCB7IHBhc3N3b3JkIH0pID0+IChcbiAgICAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHx8XG4gICAgLy8gUGFzc3dvcmQgZmllbGRzIHVzZSBgdW5kZWZpbmVkYCBhcyBvcHBvc2VkIHRvIGBudWxsYCB3aGVuIHRoZXkncmUgc2V0XG4gICAgLy8gYnV0IHVuY2hhbmdlZCwgYWxsb3cgdGhpcyB0byBwYXNzIHRocm91Z2g6XG4gICAgKHBhc3N3b3JkICYmIHZhbHVlID09PSB1bmRlZmluZWQpXG4gICksXG4gIG1lc3NhZ2U6ICdpcyByZXF1aXJlZCcsXG4gIG51bGxpc2g6IHRydWVcbn1cbiIsImltcG9ydCB7IGlzVXJsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IHVybCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzVXJsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIHZhbGlkIFVSTCdcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgdmFsaWRhdGlvbnMgZnJvbSAnLi4vdmFsaWRhdGlvbnMvaW5kZXguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVG91Y2hlZDogZmFsc2UsXG4gICAgICBpc0RpcnR5OiBmYWxzZSxcbiAgICAgIGlzVmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgZXJyb3JzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZXZlbnRzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzVG91Y2hlZCA9IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxuICAgICAgICB9LFxuICAgICAgICBjaGFuZ2U6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICAgIH0sXG4gICAgICAgIGlucHV0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHZhbGlkYXRlKG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZScsIHRoaXMuZGF0YVBhdGgsIHZhbHVlLCB0aGlzLnZhbGlkYXRpb25zKVxuICAgICAgZm9yIChjb25zdCBbcnVsZSwgc2V0dGluZ10gb2YgT2JqZWN0LmVudHJpZXModGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdmFsaWRhdGlvbnNbcnVsZV1cbiAgICAgICAgaWYgKHZhbGlkYXRvciAmJiAodmFsaWRhdG9yLm51bGxpc2ggfHwgdmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbGlkYXRlLCBtZXNzYWdlIH0gPSB2YWxpZGF0b3JcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlKHZhbHVlLCBzZXR0aW5nLCB0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNGdW5jdGlvbihtZXNzYWdlKVxuICAgICAgICAgICAgICAgID8gbWVzc2FnZSh2YWx1ZSwgc2V0dGluZywgdGhpcylcbiAgICAgICAgICAgICAgICA6IG1lc3NhZ2VcbiAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvciwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IHRydWVcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gaXNWYWxpZFxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoZmFsc2UpXG4gICAgfSxcblxuICAgIG1hcmtEaXJ0eSgpIHtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIG9uIG5ldyBpbnB1dC5cbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBhZGRFcnJvcihlcnJvciwgYWRkTGFiZWwgPSBmYWxzZSkge1xuICAgICAgdGhpcy5lcnJvcnMgfHw9IFtdXG4gICAgICBpZiAoYWRkTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsIHx8IHRoaXMucGxhY2Vob2xkZXIgfHwgdGhpcy5uYW1lXG4gICAgICAgIGVycm9yID0gYFRoZSAke2xhYmVsfSBmaWVsZCAke2Vycm9yfS5gXG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIC8vIENvbnZlcnQgZnJvbSBBSlYgZXJyb3JzIG9iamVjdHMgdG8gYW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHRoaXMuZXJyb3JzID0gW11cbiAgICAgIGZvciAoY29uc3QgeyBtZXNzYWdlIH0gb2YgZXJyb3JzKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IobWVzc2FnZSwgdHJ1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGdldEVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVycm9ycyA/IFsuLi50aGlzLmVycm9yc10gOiBudWxsXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5lcnJvcnMgPSBudWxsXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBwYXJzZURhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hQWNjZXNzb3IoXG4gIGtleU9yRGF0YVBhdGgsXG4gIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBnZXQsIHNldCwgY2FsbGJhY2sgPSB0cnVlIH0gPSB7fVxuKSB7XG4gIC8vIGBrZXlPckRhdGFQYXRoYCBjYW4gYmUgYSBzaW1wbGUgcHJvcGVydHkga2V5LFxuICAvLyBvciBhIGRhdGEtcGF0aCBpbnRvIHN1Yi1wcm9wZXJ0aWVzLCBib3RoIGluIGFycmF5IG9yIHN0cmluZyBmb3JtYXQuXG4gIGlmIChpc1N0cmluZyhrZXlPckRhdGFQYXRoKSAmJiBrZXlPckRhdGFQYXRoLmluY2x1ZGVzKCcuJykpIHtcbiAgICBrZXlPckRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICB9XG4gIC8vIFVzZSB0aGUgbm9ybWFsaXplZCBkYXRhIHBhdGggZm9yIHRoZSBoYW5kbGluZyBvdmVycmlkZXNcbiAgY29uc3QgbmFtZSA9IG5vcm1hbGl6ZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgLy8gT25seSBkZXRlcm1pbmUgc2NoZW1hIHZhbHVlIGlmIHdlIGhhdmUgbm8gZ2V0dGVyLCBvciB0aGUgZ2V0dGVyXG4gICAgICAvLyB3YW50cyB0byByZWNlaXZlIHRoZSB2YWx1ZSBhbmQgcHJvY2VzcyBpdCBmdXJ0aGVyOlxuICAgICAgY29uc3QgdmFsdWUgPSAhZ2V0IHx8IGdldC5sZW5ndGggPiAwXG4gICAgICAgIC8vIE5PVEU6IEJlY2F1c2UgYHNjaGVtYWAgb2JqZWN0cyBhcmUgcmV0cmlldmVkIGZyb20gYG1ldGFgIG9iamVjdCwgdGhleVxuICAgICAgICAvLyBkb24ndCBzZWVtIHRvIGJlIHJlYWN0aXZlLiBUbyBhbGxvdyBjaGFuZ2VkIGluIGBzY2hlbWFgIHZhbHVlcyxcbiAgICAgICAgLy8gYHNldCgpYCBzdG9yZXMgY2hhbmdlZCB2YWx1ZXMgaW4gdGhlIHNlcGFyYXRlIGBvdmVycmlkZXNgIG9iamVjdC5cbiAgICAgICAgPyB0aGlzLm92ZXJyaWRlcyAmJiBuYW1lIGluIHRoaXMub3ZlcnJpZGVzXG4gICAgICAgICAgPyB0aGlzLm92ZXJyaWRlc1tuYW1lXVxuICAgICAgICAgIDogdGhpcy5nZXRTY2hlbWFWYWx1ZShrZXlPckRhdGFQYXRoLCB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgY2FsbGJhY2sgfSlcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIGlmIChzZXQpIHtcbiAgICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm92ZXJyaWRlcyB8fD0ge31cbiAgICAgICAgdGhpcy4kc2V0KHRoaXMub3ZlcnJpZGVzLCBuYW1lLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0b3JlQWNjZXNzb3IobmFtZSwgeyBkZWZhdWx0OiBkZWYsIGdldCwgc2V0IH0gPSB7fSkge1xuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zOlxuICAgICAgICB2YWx1ZSA9IGlzRnVuY3Rpb24oZGVmKSA/IGRlZi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dCkgOiBkZWZcbiAgICAgICAgLy8gVHJpZ2dlciBzZXR0ZXIgYnkgc2V0dGluZyB2YWx1ZSBhbmQgYWNjZXNzb3IgdG8gZGVmYXVsdDpcbiAgICAgICAgdGhpc1tuYW1lXSA9IHZhbHVlXG4gICAgICAgIC8vIE5vdyBhY2Nlc3Mgc3RvcmUgYWdhaW4sIGZvciByZWFjdGl2aXR5IHRyYWNraW5nXG4gICAgICAgIHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBnZXR0ZXIgdG8gZnVydGhlciBjaGFuZ2Ugb3IgcHJvY2VzcyB0aGUgdmFsdWVcbiAgICAgIC8vIHJldHJpZXZlZCBmcm9tIHRoZSBzdG9yZTpcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBzZXR0ZXIgdG8gcmV0dXJuIGEgbmV3IHZhbHVlIHRvIHNldCwgb3IgZG8gdGhlXG4gICAgICAvLyBzZXR0aW5nIGl0c2VsZiwgYW5kIHRoZW4gcmV0dXJuIGB1bmRlZmluZWRgOlxuICAgICAgaWYgKCFzZXQgfHwgKHZhbHVlID0gc2V0LmNhbGwodGhpcywgdmFsdWUpKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2V0U3RvcmUobmFtZSwgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJjb25zdCB1aWRNYXAgPSBuZXcgV2Vha01hcCgpXG5cbi8vIEdlbmVyYXRlZCBhbmQgcmVtZW1iZXJzIHVuaXF1ZSBpZHMgcGVyIHBhc3NlZCBvYmplY3QgdXNpbmcgYSB3ZWFrIG1hcC5cbmxldCB1aWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gZ2V0VWlkKG9iamVjdCwgaXRlbUlkKSB7XG4gIGxldCBpZCA9IHVpZE1hcC5nZXQob2JqZWN0KVxuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBpZCA9IGl0ZW1JZCB8fCBgQCR7Kyt1aWR9YFxuICAgIHVpZE1hcC5zZXQob2JqZWN0LCBpZClcbiAgfVxuICByZXR1cm4gaWRcbn1cbiIsImltcG9ydCB7IGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc0ludGVnZXIsIGFzQXJyYXksIHBhcnNlRGF0YVBhdGgsIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJ1xuXG4vLyBTY2hlbWFHcmFwaCBpcyBhIGNsYXNzIHRvIGNvbGxlY3Qgc2NoZW1hIGdyYXBoIG1ldGEgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG9cbi8vIHByb2Nlc3Mgc291cmNlcyBhbmQgcmVsYXRpb25zIGZvciB0aGUgZ2l2ZW4gdGFyZ2V0cyAnc2VydmVyJyBhbmQgJ2NsaXBib2FyZCcsXG4vLyBhY2Njb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgdGFibGU6XG4vL1xuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcbi8vIHwgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlcnZlciAgICB8IGNsaXBib2FyZCB8XG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogZmFsc2UgICAgICAgICAgIHwga2VlcCBpZCAgIHwga2VlcCBpZCAgIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IHRydWUgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlZiwgI3JlZiB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiB0cnVlLCB0ZW1wb3JhcnkgfCByZWYsICNyZWYgfCByZWYsICNyZWYgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogZmFsc2UgICAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVtb3ZlIGlkIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IGZhbHNlLCB0ZW1wb3JhcnkgICB8IHJlZiwgI2lkICB8IHJlbW92ZSBpZCB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiB0cnVlICAgICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZWYsICNpZCAgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogdHJ1ZSwgdGVtcG9yYXJ5ICAgIHwgcmVmLCAjaWQgIHwgcmVmLCAjaWQgIHxcbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG5cbmV4cG9ydCBjbGFzcyBTY2hlbWFHcmFwaCB7XG4gIGdyYXBoID0ge31cbiAgcmVmZXJlbmNlcyA9IHt9XG5cbiAgc2V0KGRhdGFQYXRoLCBzZXR0aW5ncywgZGVmYXVsdHMpIHtcbiAgICBkYXRhUGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgbGV0IHN1YkdyYXBoID0gdGhpcy5ncmFwaFxuICAgIGZvciAoY29uc3QgcGFydCBvZiBkYXRhUGF0aCkge1xuICAgICAgY29uc3Qga2V5ID0gaXNJbnRlZ2VyKCtwYXJ0KSA/ICcqJyA6IHBhcnRcbiAgICAgIHN1YkdyYXBoID0gKHN1YkdyYXBoW2tleV0gPz89IHt9KVxuICAgIH1cbiAgICBzdWJHcmFwaC4kc2V0dGluZ3MgPSB7XG4gICAgICAuLi5kZWZhdWx0cywgLy8gU2VlIGBhZGRTb3VyY2UoZGF0YVBhdGgpYFxuICAgICAgLi4uc3ViR3JhcGguJHNldHRpbmdzLFxuICAgICAgLi4uc2V0dGluZ3NcbiAgICB9XG4gIH1cblxuICBhZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIC8vIE9ubHkgc2V0IGByZWxhdGVkOiBmYWxzZWAgdGhyb3VnaCB0aGUgZGVmYXVsdHMsIGFzIGBzZXRTb3VyY2VSZWxhdGVkKClgXG4gICAgLy8gbWF5IGJlIGNhbGxlZCBiZWZvcmUgYGFkZFNvdXJjZSgpYCwgZGVwZW5kaW5nIG9uIHRoZSBncmFwaCBzdHJ1Y3R1cmUuXG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHsgdHlwZTogJ3NvdXJjZScsIHNjaGVtYSB9LCB7IHJlbGF0ZWQ6IGZhbHNlIH0pXG4gIH1cblxuICBzZXRTb3VyY2VSZWxhdGVkKGRhdGFQYXRoKSB7XG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHtcbiAgICAgIHJlbGF0ZWQ6IHRydWUsXG4gICAgICByZWZlcmVuY2U6IHRoaXMuZ2V0UmVmZXJlbmNlUHJlZml4KGRhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBhZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgdHlwZTogJ3JlbGF0aW9uJyxcbiAgICAgIHNjaGVtYSxcbiAgICAgIGludGVybmFsOiAhIXJlbGF0ZWREYXRhUGF0aCxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgocmVsYXRlZERhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBnZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpIHtcbiAgICByZXR1cm4gZGF0YVBhdGhcbiAgICAgID8gKHRoaXMucmVmZXJlbmNlc1tkYXRhUGF0aF0gPz89IG5hbm9pZCg2KSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgZmxhdHRlbigpIHtcbiAgICBjb25zdCBmbGF0dGVuID0gZ3JhcGggPT4ge1xuICAgICAgY29uc3QgZW50cmllcyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHsgJHNldHRpbmdzLCAuLi5zdWJHcmFwaCB9XSBvZiBPYmplY3QuZW50cmllcyhncmFwaCkpIHtcbiAgICAgICAgaWYgKCRzZXR0aW5ncykge1xuICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCAkc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3N1YktleSwgc2V0dGluZ3NdIG9mIGZsYXR0ZW4oc3ViR3JhcGgpKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtgJHtrZXl9LyR7c3ViS2V5fWAsIHNldHRpbmdzXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdHRlbih0aGlzLmdyYXBoKVxuICB9XG5cbiAgcHJvY2Vzcyhzb3VyY2VTY2hlbWEsIGRhdGEsIHsgdGFyZ2V0IH0pIHtcbiAgICBjb25zdCBjbGlwYm9hcmQgPSB0YXJnZXQgPT09ICdjbGlwYm9hcmQnXG4gICAgaWYgKGNsaXBib2FyZCkge1xuICAgICAgZGVsZXRlIGRhdGFbc291cmNlU2NoZW1hLmlkS2V5IHx8ICdpZCddXG4gICAgfVxuICAgIGZvciAoY29uc3QgW2RhdGFQYXRoLCBzZXR0aW5nc10gb2YgdGhpcy5mbGF0dGVuKCkpIHtcbiAgICAgIGNvbnN0IHsgdHlwZSwgc2NoZW1hLCBpbnRlcm5hbCwgcmVsYXRlZCwgcmVmZXJlbmNlIH0gPSBzZXR0aW5nc1xuICAgICAgY29uc3Qgc291cmNlID0gdHlwZSA9PT0gJ3NvdXJjZSdcbiAgICAgIGNvbnN0IHJlbGF0aW9uID0gdHlwZSA9PT0gJ3JlbGF0aW9uJ1xuICAgICAgaWYgKHNvdXJjZSB8fCByZWxhdGlvbiAmJiBpbnRlcm5hbCkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBnZXRWYWx1ZUF0RGF0YVBhdGgoZGF0YSwgZGF0YVBhdGgsICgpID0+IG51bGwpXG4gICAgICAgIGNvbnN0IHJlbW92ZUlkID0gY2xpcGJvYXJkICYmIHNvdXJjZSAmJiAhcmVsYXRlZFxuICAgICAgICBjb25zdCByZWZlcmVuY2VJZCA9IGNsaXBib2FyZCAmJiAoXG4gICAgICAgICAgcmVsYXRpb24gJiYgaW50ZXJuYWwgfHxcbiAgICAgICAgICBzb3VyY2UgJiYgcmVsYXRlZFxuICAgICAgICApXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgYXNBcnJheSh2YWx1ZXMpLmZsYXQoKSkge1xuICAgICAgICAgIGNvbnN0IGlkS2V5ID0gKFxuICAgICAgICAgICAgc291cmNlICYmIHNjaGVtYS5pZEtleSB8fFxuICAgICAgICAgICAgcmVsYXRpb24gJiYgc2NoZW1hLnJlbGF0ZUJ5IHx8XG4gICAgICAgICAgICAnaWQnXG4gICAgICAgICAgKVxuICAgICAgICAgIGxldCBpZCA9IHZhbHVlPy5baWRLZXldXG4gICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChyZW1vdmVJZCkge1xuICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICB9IGlmIChyZWZlcmVuY2VJZCB8fCBpc1RlbXBvcmFyeUlkKGlkKSkge1xuICAgICAgICAgICAgICBpZiAoaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgICBpZCA9IGlkLnNsaWNlKDEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmVmS2V5ID0gY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgLy8gQ2xpcGJvYXJkIGp1c3QgbmVlZHMgdGVtcG9yYXJ5IGlkcyB1bmRlciB0aGUgYWN0dWFsIGBpZEtleWAuXG4gICAgICAgICAgICAgICAgPyBpZEtleVxuICAgICAgICAgICAgICAgIC8vIFNlcnZlciB3YW50cyBPYmplY3Rpb24tc3R5bGUgJyNpZCcgLyAnI3JlZicgcGFpcnMuXG4gICAgICAgICAgICAgICAgOiBzb3VyY2UgPyAnI2lkJyA6ICcjcmVmJ1xuICAgICAgICAgICAgICBjb25zdCByZXZWYWx1ZSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgID8gYEAke2lkfWBcbiAgICAgICAgICAgICAgICAvLyBLZWVwIHRoZSBpZHMgdW5pcXVlIGluIHJlZmVyZW5jZSBncm91cHMsIHNpbmNlIHRoZXkgcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgLy8gYWNjcm9zcyB0aGUgZnVsbCBncmFwaC5cbiAgICAgICAgICAgICAgICA6IHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgICAgPyBgJHtyZWZlcmVuY2V9LSR7aWR9YFxuICAgICAgICAgICAgICAgICAgOiBpZCAvLyBBIHRlbXBvcmFyeSBpZCB3aXRob3V0IGEgcmVsYXRlZCwganVzdCBwcmVzZXJ2ZSBpdC5cbiAgICAgICAgICAgICAgdmFsdWVbcmVmS2V5XSA9IHJldlZhbHVlXG4gICAgICAgICAgICAgIGlmIChyZWZLZXkgIT09IGlkS2V5KSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2lkS2V5XVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhXG4gIH1cbn1cbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgZ2V0VWlkIH0gZnJvbSAnLi91aWQuanMnXG5pbXBvcnQgeyBTY2hlbWFHcmFwaCB9IGZyb20gJy4vU2NoZW1hR3JhcGguanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc1N0cmluZywgaXNBcnJheSwgaXNGdW5jdGlvbiwgaXNQcm9taXNlLCBjbG9uZSwgY2FtZWxpemUsIGlzTW9kdWxlXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IHR5cGVDb21wb25lbnRzID0ge31cbmNvbnN0IHVua25vd25UeXBlUmVwb3J0ZWQgPSB7fVxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUeXBlQ29tcG9uZW50KHR5cGUsIGNvbXBvbmVudCkge1xuICB0eXBlQ29tcG9uZW50c1t0eXBlXSA9IGNvbXBvbmVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZUNvbXBvbmVudCh0eXBlLCBhbGxvd051bGwgPSBmYWxzZSkge1xuICBjb25zdCBjb21wb25lbnQgPSB0eXBlQ29tcG9uZW50c1t0eXBlXSB8fCBudWxsXG4gIGlmICghY29tcG9uZW50ICYmICFhbGxvd051bGwgJiYgIXVua25vd25UeXBlUmVwb3J0ZWRbdHlwZV0pIHtcbiAgICAvLyBSZXBvcnQgZWFjaCBtaXNzaW5nIHR5cGUgb25seSBvbmNlLCB0byBhdm9pZCBmbG9vZGluZyB0aGUgY29uc29sZTpcbiAgICB1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdID0gdHJ1ZVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBEaXRvIGNvbXBvbmVudCB0eXBlOiAnJHt0eXBlfSdgKVxuICB9XG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2hTY2hlbWEoc2NoZW1hLCBjYWxsYmFjaykge1xuICBjb25zdCBzY2hlbWFzID0gW1xuICAgIC4uLk9iamVjdC52YWx1ZXMoc2NoZW1hPy50YWJzIHx8IHt9KSxcbiAgICBzY2hlbWFcbiAgXVxuICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgaWYgKHNjaGVtYSkge1xuICAgICAgY29uc3QgcmVzID0gY2FsbGJhY2soc2NoZW1hKVxuICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2hTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gZm9yRWFjaFNjaGVtYShzY2hlbWEsIHNjaGVtYSA9PiB7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyhzY2hlbWEuY29tcG9uZW50cyB8fCB7fSkpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSlcbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KFxuICAgIHNjaGVtYSxcbiAgICAoY29tcG9uZW50LCBuYW1lKSA9PiBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpID8gY29tcG9uZW50IDogdW5kZWZpbmVkXG4gICkgfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZVNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KFxuICAgIHNjaGVtYSxcbiAgICAoY29tcG9uZW50LCBuYW1lKSA9PiBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpID8gdHJ1ZSA6IHVuZGVmaW5lZFxuICApID09PSB0cnVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeVNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KFxuICAgIHNjaGVtYSxcbiAgICAoY29tcG9uZW50LCBuYW1lKSA9PiAhY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKSA/IGZhbHNlIDogdW5kZWZpbmVkXG4gICkgIT09IGZhbHNlXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdW53cmFwTW9kdWxlID0gZmFsc2UpIHtcbiAgaWYgKGlzRnVuY3Rpb24oc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IHNjaGVtYSgpXG4gIH1cbiAgaWYgKGlzUHJvbWlzZShzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gYXdhaXQgc2NoZW1hXG4gIH1cbiAgaWYgKGlzTW9kdWxlKHNjaGVtYSkpIHtcbiAgICAvLyBDb3B5IHRvIGNvbnZlcnQgZnJvbSBtb2R1bGUgdG8gb2JqZWN0OlxuICAgIHNjaGVtYSA9IHsgLi4uc2NoZW1hIH1cbiAgICAvLyBVbndyYXAgZGVmYXVsdCBvciBuYW1lZCBzY2hlbWFcbiAgICBpZiAoIXNjaGVtYS5uYW1lICYmICh1bndyYXBNb2R1bGUgfHwgc2NoZW1hLmRlZmF1bHQpKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hKVxuICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBrZXlzWzBdXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVtuYW1lXVxuICAgICAgICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYXMoXG4gIHVucmVzb2x2ZWRTY2hlbWFzLFxuICByZXNvbHZlSXRlbSA9IHJlc29sdmVTY2hlbWFcbikge1xuICBsZXQgc2NoZW1hcyA9IGlzRnVuY3Rpb24odW5yZXNvbHZlZFNjaGVtYXMpXG4gICAgPyB1bnJlc29sdmVkU2NoZW1hcygpXG4gICAgOiB1bnJlc29sdmVkU2NoZW1hc1xuICBzY2hlbWFzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWFzLCBmYWxzZSlcbiAgaWYgKGlzQXJyYXkoc2NoZW1hcykpIHtcbiAgICAvLyBUcmFuc2xhdGUgYW4gYXJyYXkgb2YgZHluYW1pYyBpbXBvcnQsIGVhY2ggaW1wb3J0aW5nIG9uZSBuYW1lZCBzY2hlbWFcbiAgICAvLyBtb2R1bGUgdG8gYW4gb2JqZWN0IHdpdGggbmFtZWQgZW50cmllcy5cbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKGF3YWl0IFByb21pc2UuYWxsKHNjaGVtYXMubWFwKFxuICAgICAgYXN5bmMgaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHJlc29sdmVJdGVtKGl0ZW0sIHRydWUpXG4gICAgICAgIHJldHVybiBbc2NoZW1hLm5hbWUsIHNjaGVtYV1cbiAgICAgIH1cbiAgICApKSlcbiAgfSBlbHNlIGlmIChpc09iamVjdChzY2hlbWFzKSkge1xuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXMoc2NoZW1hcykubWFwKFxuICAgICAgYXN5bmMgKFtrZXksIGl0ZW1dKSA9PiB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHJlc29sdmVJdGVtKGl0ZW0sIHRydWUpXG4gICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICB9XG4gICAgKSkpXG4gIH1cbiAgcmV0dXJuIHNjaGVtYXNcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQYW5lbHMoc2NoZW1hKSB7XG4gIGNvbnN0IHsgcGFuZWxzIH0gPSBzY2hlbWFcbiAgaWYgKHNjaGVtYS5wYW5lbHMpIHtcbiAgICBzY2hlbWEucGFuZWxzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMocGFuZWxzKVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzVmlldyhjb21wb25lbnQsIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMpIHtcbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuICBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUpXG4gIGF3YWl0IHJlc29sdmVQYW5lbHMoc2NoZW1hKVxuICBpZiAoaXNTaW5nbGVDb21wb25lbnRWaWV3KHNjaGVtYSkpIHtcbiAgICBhd2FpdCBwcm9jZXNzQ29tcG9uZW50KGFwaSwgc2NoZW1hLCBuYW1lLCBjaGlsZHJlbiwgMClcbiAgfSBlbHNlIHtcbiAgICAvLyBBIG11bHRpLWNvbXBvbmVudCB2aWV3LCBzdGFydCBhdCBsZXZlbCAxXG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIGNoaWxkcmVuLCAxKVxuICB9XG4gIHJvdXRlcy5wdXNoKHtcbiAgICBwYXRoOiBgLyR7c2NoZW1hLnBhdGh9YCxcbiAgICBjaGlsZHJlbixcbiAgICBjb21wb25lbnQsXG4gICAgbWV0YToge1xuICAgICAgYXBpLFxuICAgICAgc2NoZW1hXG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0NvbXBvbmVudChhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCkge1xuICBzY2hlbWEubGV2ZWwgPSBsZXZlbFxuICAvLyBEZWxlZ2F0ZSBzY2hlbWEgcHJvY2Vzc2luZyB0byB0aGUgYWN0dWFsIHR5cGUgY29tcG9uZW50cy5cbiAgcmV0dXJuIGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LnByb2Nlc3NTY2hlbWE/LihcbiAgICBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbFxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUpIHtcbiAgLy8gVXNlZCBmb3IgdmlldyBhbmQgc291cmNlIHNjaGVtYXMsIHNlZSBTb3VyY2VNaXhpblxuICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgc2NoZW1hLnBhdGggPSBzY2hlbWEucGF0aCB8fCBhcGkubm9ybWFsaXplUGF0aChuYW1lKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwpIHtcbiAgY29uc3QgcHJvbWlzZXMgPSBbXVxuICBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgKGNvbXBvbmVudCwgbmFtZSkgPT4ge1xuICAgIHByb21pc2VzLnB1c2gocHJvY2Vzc0NvbXBvbmVudChhcGksIGNvbXBvbmVudCwgbmFtZSwgcm91dGVzLCBsZXZlbCkpXG4gIH0pXG4gIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbCkge1xuICAvLyBGaXJzdCByZXNvbHZlIHRoZSBmb3JtcyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgYmFjayBvbiB0aGUgc2NoZW1hLlxuICBsZXQgeyBmb3JtLCBmb3JtcywgY29tcG9uZW50cyB9ID0gc2NoZW1hXG4gIGlmIChmb3Jtcykge1xuICAgIGZvcm1zID0gc2NoZW1hLmZvcm1zID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoZm9ybXMsIHJlc29sdmVGb3JtKVxuICB9IGVsc2UgaWYgKGZvcm0pIHtcbiAgICBmb3JtID0gc2NoZW1hLmZvcm0gPSBhd2FpdCByZXNvbHZlRm9ybShmb3JtKVxuICB9IGVsc2UgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAvLyBOT1RFOiBQcm9jZXNzaW5nIGZvcm1zIGluIGNvbXB1dGVkIGNvbXBvbmVudHMgaXMgbm90IHN1cHBvcnRlZCwgc2luY2UgaXRcbiAgICAvLyBvbmx5IGNhbiBiZSBjb21wdXRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGFjdHVhbCBkYXRhLlxuICAgIGlmIChpc09iamVjdChjb21wb25lbnRzKSkge1xuICAgICAgZm9ybSA9IHsgY29tcG9uZW50cyB9XG4gICAgfVxuICB9XG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfSAvLyBPbmx5IHVzZWQgZm9yIHByb2Nlc3MgbG9vcCBiZWxvdy5cbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuICBmb3IgKGNvbnN0IGZvcm0gb2YgT2JqZWN0LnZhbHVlcyhmb3JtcykpIHtcbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIGZvcm0sIGNoaWxkcmVuLCBsZXZlbCArIDEpXG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlRm9ybShmb3JtKSB7XG4gIGZvcm0gPSBhd2FpdCByZXNvbHZlU2NoZW1hKGZvcm0sIHRydWUpXG4gIGlmIChmb3JtKSB7XG4gICAgYXdhaXQgcmVzb2x2ZVBhbmVscyhmb3JtKVxuICB9XG4gIHJldHVybiBmb3JtXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NpbmdsZUNvbXBvbmVudFZpZXcoc2NoZW1hKSB7XG4gIC8vIElmIHRoZSBzY2hlbWEgaGFzIGEgdHlwZSwgaXQgaXMgYSBzaW5nbGUtY29tcG9uZW50IHZpZXcuXG4gIHJldHVybiAhIXNjaGVtYS50eXBlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNGb3JtU2NoZW1hKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGJvdGggc2luZ2xlIGZvcm0gYW5kIG11bHRpcGxlIGZvcm1zIG5vdGF0aW9uLCBhcyB3ZWxsIGFzIGlubGluZWRcbiAgLy8gY29tcG9uZW50cy5cbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYSkgJiYgISEoXG4gICAgc2NoZW1hLmZvcm0gfHxcbiAgICBzY2hlbWEuZm9ybXMgfHxcbiAgICBzY2hlbWEuY29tcG9uZW50c1xuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gT2JqZWN0LmtleXMoc2NoZW1hPy5mb3JtcyB8fCB7fSkubGVuZ3RoID4gMVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgY29uc3QgeyB2aWV3IH0gPSBzY2hlbWFcbiAgY29uc3Qgdmlld1NjaGVtYSA9IHZpZXcgJiYgY29udGV4dC52aWV3c1t2aWV3XVxuICByZXR1cm4gdmlld1NjaGVtYVxuICAgID8gaGFzRm9ybVNjaGVtYSh2aWV3U2NoZW1hKVxuICAgICAgPyB2aWV3U2NoZW1hXG4gICAgICAvLyBOT1RFOiBWaWV3cyBjYW4gaGF2ZSB0YWJzLCBpbiB3aGljaCBjYXNlIHRoZSB2aWV3IGNvbXBvbmVudCBpcyBuZXN0ZWRcbiAgICAgIC8vIGluIG9uZSBvZiB0aGUgdGFicywgZ28gZmluZCBpdC5cbiAgICAgIDogZm9yRWFjaFNjaGVtYSh2aWV3U2NoZW1hLCBzY2hlbWEgPT4ge1xuICAgICAgICBjb25zdCB2aWV3Q29tcG9uZW50ID0gc2NoZW1hLmNvbXBvbmVudHM/Llt2aWV3XVxuICAgICAgICBpZiAoaGFzRm9ybVNjaGVtYSh2aWV3Q29tcG9uZW50KSkge1xuICAgICAgICAgIHJldHVybiB2aWV3Q29tcG9uZW50XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3RWRpdFBhdGgoc2NoZW1hLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZpZXcgPSBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgcmV0dXJuIHZpZXdcbiAgICA/IHZpZXcubGV2ZWwgPT09IDBcbiAgICAgID8gYC8ke3ZpZXcucGF0aH1gIC8vIEEgc2luZ2xlLWNvbXBvbmVudCB2aWV3XG4gICAgICA6IGAvJHt2aWV3LnBhdGh9LyR7dmlldy5wYXRofWAgLy8gQSBtdWx0aS1jb21wb25lbnQgdmlld1xuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0LCBtb2RpZnlGb3JtKSB7XG4gIGNvbnN0IHZpZXcgPSBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgaWYgKHZpZXcpIHtcbiAgICBzY2hlbWEgPSB2aWV3XG4gIH0gZWxzZSBpZiAoc2NoZW1hLnZpZXcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdmlldzogJyR7c2NoZW1hLnZpZXd9J2ApXG4gIH1cblxuICBsZXQgeyBmb3JtLCBmb3JtcywgY29tcG9uZW50cywgY29tcGFjdCB9ID0gc2NoZW1hXG4gIGlmICghZm9ybSAmJiAhZm9ybXMpIHtcbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgLy8gQ29udmVydCBpbmxpbmVkIGNvbXBvbmVudHMgdG8gZm9ybXMsIHN1cHBvcnRpbmcgYGNvbXBhY3RgIHNldHRpbmcuXG4gICAgICBmb3JtID0geyBjb21wb25lbnRzLCBjb21wYWN0IH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gYGZvcm1zYCwgYGZvcm1gIG9yIGBjb21wb25lbnRzYCwgcmV0dXJuIGFuZCBlbXB0eSBgZm9ybXNgIG9iamVjdC5cbiAgICAgIHJldHVybiB7fVxuICAgIH1cbiAgfVxuICBmb3JtcyB8fD0geyBkZWZhdWx0OiBmb3JtIH1cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhmb3JtcykubWFwKChbdHlwZSwgZm9ybV0pID0+IHtcbiAgICAgIC8vIFN1cHBvcnQgYHNjaGVtYS5jb21wb25lbnRzYCBjYWxsYmFja3MgdG8gY3JlYXRlIGNvbXBvbmVudHMgb24gdGhlIGZseS5cbiAgICAgIGlmIChpc0Z1bmN0aW9uKGZvcm0uY29tcG9uZW50cykpIHtcbiAgICAgICAgZm9ybSA9IHtcbiAgICAgICAgICAuLi5mb3JtLFxuICAgICAgICAgIGNvbXBvbmVudHM6IGZvcm0uY29tcG9uZW50cyhjb250ZXh0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gW3R5cGUsIG1vZGlmeUZvcm0/Lihmb3JtKSA/PyBmb3JtXVxuICAgIH0pXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKSB7XG4gIHJldHVybiBmb3Jtc1tpdGVtPy50eXBlXSB8fCBmb3Jtcy5kZWZhdWx0IHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dCkge1xuICByZXR1cm4gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0KSwgaXRlbSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0xhYmVsKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hLmxhYmVsICE9PSBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wYWN0KHNjaGVtYSkge1xuICByZXR1cm4gISFzY2hlbWEuY29tcGFjdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJbmxpbmVkKHNjaGVtYSkge1xuICByZXR1cm4gISEoc2NoZW1hLmlubGluZWQgfHwgc2NoZW1hLmNvbXBvbmVudHMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05lc3RlZChzY2hlbWEpIHtcbiAgcmV0dXJuICEhKFxuICAgIHNjaGVtYS5uZXN0ZWQgfHxcbiAgICBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5kZWZhdWx0TmVzdGVkID09PSB0cnVlXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZE9taXRQYWRkaW5nKHNjaGVtYSkge1xuICByZXR1cm4gISFnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5vbWl0UGFkZGluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGRlZmF1bHQgdmFsdWVzIGJvdGggb24gc2NoZW1hIGFuZCBvbiBjb21wb25lbnQgbGV2ZWwuXG4gIC8vIE5PVEU6IEF0IHRoZSB0aW1lIG9mIGNyZWF0aW9uLCBjb21wb25lbnRzIG1heSBub3QgYmUgaW5zdGFudGlhdGVkLCAoZS5nLiBpZlxuICAvLyBlbnRyaWVzIGFyZSBjcmVhdGVkIHRocm91Z2ggbmVzdGVkIGZvcm1zLCB0aGUgcGFyZW50IGZvcm0gaXNuJ3QgbW91bnRlZCkgc29cbiAgLy8gd2UgY2FuJ3QgdXNlIGBkYXRhUGF0aGAgdG8gZ2V0IHRvIGNvbXBvbmVudHMsIGFuZCB0aGUgYGRlZmF1bHRWYWx1ZWAgZnJvbVxuICAvLyB0aGVyZS4gVGhhdCdzIHdoeSBgZGVmYXVsdFZhbHVlYCBpcyBkZWZpbmVkIHN0YXRpY2FsbHkgaW4gdGhlIGNvbXBvbmVudHM6XG4gIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHNjaGVtYS5kZWZhdWx0XG4gIGNvbnN0IHZhbHVlID0gZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICA/IGRlZmF1bHRWYWx1ZVxuICAgIDogZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdFZhbHVlXG4gIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgID8gdmFsdWUoc2NoZW1hKVxuICAgIDogY2xvbmUodmFsdWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSB7XG4gIGNvbnN0IHR5cGVPcHRpb25zID0gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKVxuICByZXR1cm4gISEoXG4gICAgdHlwZU9wdGlvbnM/LmV4Y2x1ZGVWYWx1ZSB8fFxuICAgIHR5cGVPcHRpb25zPy5pZ25vcmVNaXNzaW5nVmFsdWU/LihzY2hlbWEpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0xhYmVscyhzY2hlbWEpIHtcbiAgY29uc3QgY2hlY2tDb21wb25lbnRzID0gY29tcG9uZW50cyA9PlxuICAgIE9iamVjdC52YWx1ZXMoY29tcG9uZW50cyB8fCB7fSkuc29tZShoYXNMYWJlbClcblxuICByZXR1cm4gKFxuICAgIGNoZWNrQ29tcG9uZW50cyhzY2hlbWEuY29tcG9uZW50cykgfHxcbiAgICBPYmplY3QudmFsdWVzKHNjaGVtYS50YWJzIHx8IHt9KS5zb21lKGNoZWNrQ29tcG9uZW50cylcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RGVmYXVsdHMoc2NoZW1hLCBkYXRhID0ge30sIGNvbXBvbmVudCkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHJvb3REYXRhOiBkYXRhIH1cblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSkgPT4ge1xuICAgIGlmICghKG5hbWUgaW4gZGF0YSkgJiYgIWlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpKSB7XG4gICAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSlcbiAgICB9XG4gIH1cblxuICAvLyBTZXRzIHVwIGEgZGF0YSBvYmplY3QgdGhhdCBoYXMga2V5cyB3aXRoIGRlZmF1bHQgdmFsdWVzIGZvciBhbGxcbiAgLy8gZm9ybSBmaWVsZHMsIHNvIHRoZXkgY2FuIGJlIGNvcnJlY3RseSB3YXRjaGVkIGZvciBjaGFuZ2VzLlxuICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLCBkYXRhLCBudWxsLCBudWxsLCBwcm9jZXNzQmVmb3JlLCBudWxsLCBvcHRpb25zXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCA9IG51bGwsXG4gIHJvb3REYXRhID0gY29tcG9uZW50Py5yb290RGF0YVxufSA9IHt9KSB7XG4gIGNvbnN0IHsgY29tcHV0ZSB9ID0gc2NoZW1hXG4gIGlmIChjb21wdXRlKSB7XG4gICAgY29uc3QgdmFsdWUgPSBjb21wdXRlKERpdG9Db250ZXh0LmdldChjb21wb25lbnQsIHtcbiAgICAgIC8vIE92ZXJyaWRlIHZhbHVlIHRvIHByZXZlbnQgZW5kbGVzcyByZWN1cnNpb24gdGhyb3VnaCBjYWxsaW5nIHRoZVxuICAgICAgLy8gZ2V0dGVyIGZvciBgdGhpcy52YWx1ZWAgaW4gYERpdG9Db250ZXh0YDpcbiAgICAgIHZhbHVlOiBkYXRhW25hbWVdLFxuICAgICAgbmFtZSxcbiAgICAgIGRhdGEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIHJvb3REYXRhXG4gICAgfSkpXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFVzZSBgJHNldCgpYCBkaXJlY3RseSBpbnN0ZWFkIG9mIGB0aGlzLnZhbHVlID0g4oCmYCB0byB1cGRhdGUgdGhlXG4gICAgICAvLyB2YWx1ZSB3aXRob3V0IGNhbGxpbmcgcGFyc2UoKTpcbiAgICAgIFZ1ZS5zZXQoZGF0YSwgbmFtZSwgdmFsdWUpXG4gICAgfVxuICB9XG4gIC8vIElmIHRoZSB2YWx1ZSBpcyBzdGlsbCBtaXNzaW5nIGFmdGVyIGNvbXB1dGUsIHNldCB0aGUgZGVmYXVsdCBmb3IgaXQ6XG4gIGlmICghKG5hbWUgaW4gZGF0YSkgJiYgIWlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpKSB7XG4gICAgVnVlLnNldChkYXRhLCBuYW1lLCBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKSlcbiAgfVxuICAvLyBOb3cgYWNjZXNzIHRoZSB2YWx1ZS4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHJlYWN0aXZpdHkgYW5kIG5lZWRzIHRvXG4gIC8vIGhhcHBlbiBhZnRlciBhbGwgcHJpb3IgbWFuaXB1bGF0aW9uIHRocm91Z2ggYCRzZXQoKWAsIHNlZSBhYm92ZTpcbiAgcmV0dXJuIGRhdGFbbmFtZV1cbn1cblxuZnVuY3Rpb24gY2xvbmVJdGVtKHNvdXJjZVNjaGVtYSwgaXRlbSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucy5zY2hlbWFPbmx5KSB7XG4gICAgY29uc3QgY29weSA9IHt9XG4gICAgY29uc3QgeyBpZEtleSA9ICdpZCcsIG9yZGVyS2V5IH0gPSBzb3VyY2VTY2hlbWFcbiAgICBjb25zdCBpZCA9IGl0ZW1baWRLZXldXG4gICAgaWYgKGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvcHlbaWRLZXldID0gaWRcbiAgICB9XG4gICAgLy8gQ29weSBvdmVyIHR5cGUgaW4gY2FzZSB0aGVyZSBhcmUgbXVsdGlwbGUgZm9ybXMgdG8gY2hvb3NlIGZyb20uXG4gICAgaWYgKGhhc011bHRpcGxlRm9ybVNjaGVtYXMoc291cmNlU2NoZW1hKSkge1xuICAgICAgY29weS50eXBlID0gaXRlbS50eXBlXG4gICAgfVxuICAgIGlmIChvcmRlcktleSkge1xuICAgICAgY29weVtvcmRlcktleV0gPSBpdGVtW29yZGVyS2V5XVxuICAgIH1cbiAgICByZXR1cm4gY29weVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRGF0YShzY2hlbWEsIHNvdXJjZVNjaGVtYSwgZGF0YSwgZGF0YVBhdGgsIHtcbiAgY29tcG9uZW50LFxuICBzY2hlbWFPbmx5LCAvLyB3ZXRoZXIgdG8gb25seSBpbmNsdWRlIGRhdGEgY292ZXJlZCBieSB0aGUgc2NoZW1hLCBvciBhbGwgZGF0YVxuICB0YXJnZXRcbn0gPSB7fSkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHNjaGVtYU9ubHksIHRhcmdldCwgcm9vdERhdGE6IGRhdGEgfVxuICBjb25zdCBwcm9jZXNzZWREYXRhID0gY2xvbmVJdGVtKHNvdXJjZVNjaGVtYSwgZGF0YSwgb3B0aW9ucylcbiAgY29uc3QgZ3JhcGggPSBuZXcgU2NoZW1hR3JhcGgoKVxuXG4gIGNvbnN0IHByb2Nlc3NCZWZvcmUgPSAoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YSkgPT4ge1xuICAgIGxldCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBvcHRpb25zKVxuICAgIC8vIFRoZSBzY2hlbWEgZXhwZWN0cyB0aGUgYHdyYXBQcmltaXRpdmVzYCB0cmFuc2Zvcm1hdGlvbnMgdG8gYmUgcHJlc2VudCBvblxuICAgIC8vIHRoZSBkYXRhIHRoYXQgaXQgaXMgYXBwbGllZCBvbiwgc28gd2FycCBiZWZvcmUgYW5kIHVud3JhcCBhZnRlci5cbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMsIG9yZGVyS2V5LCBpZEtleSA9ICdpZCcgfSA9IHNjaGVtYVxuICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUubWFwKGVudHJ5ID0+ICh7XG4gICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogZW50cnlcbiAgICAgICAgfSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBbHdheXMgc2hhbGxvdy1jbG9uZSBhcnJheSB2YWx1ZXM6XG4gICAgICAgIHZhbHVlID0gWy4uLnZhbHVlXVxuICAgICAgfVxuICAgICAgaWYgKG9yZGVyS2V5ICYmIHRhcmdldCA9PT0gJ2NsaXBib2FyZCcpIHtcbiAgICAgICAgLy8gU29ydCB0aGUgZGF0YSBiYWNrIGludG8gdGhlIG5hdHVyYWwgc2VxdWVuY2UgYXMgZGVmaW5lZCBieSB0aGVpciBpZHMsXG4gICAgICAgIC8vIHNvIGNvcHktcGFzdGluZyBiZXR3ZWVuIHNlcnZlcnMgKGUuZy4gbmVzdGVkIGZvbnQtY3V0cyBvbiBMaW5ldG8pXG4gICAgICAgIC8vIG5hdHVyYWxseSBnZXRzIG1hcHBlZCB0byB0aGUgc2FtZSBlbnRyaWVzIGluIHRoZSBncmFwaC5cbiAgICAgICAgdmFsdWUuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkMSA9IGE/LltpZEtleV1cbiAgICAgICAgICBjb25zdCBpZDIgPSBiPy5baWRLZXldXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlkMSA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQxKSA/IDFcbiAgICAgICAgICAgIDogaWQyID09IG51bGwgfHwgaXNUZW1wb3JhcnlJZChpZDIpID8gLTFcbiAgICAgICAgICAgIDogaWQxIC0gaWQyXG4gICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgfVxuXG4gIGNvbnN0IHByb2Nlc3NBZnRlciA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgZXhjbHVkZSwgcHJvY2VzcyB9ID0gc2NoZW1hXG4gICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YVtuYW1lXVxuXG4gICAgY29uc3QgdHlwZU9wdGlvbnMgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpXG5cbiAgICAvLyBOT1RFOiBXZSBkb24ndCBjYWNoZSB0aGlzIGNvbnRleHQsIHNpbmNlIGB2YWx1ZWAgaXMgY2hhbmdpbmcuXG4gICAgY29uc3QgZ2V0Q29udGV4dCA9ICgpID0+IERpdG9Db250ZXh0LmdldChjb21wb25lbnQsIHtcbiAgICAgIHZhbHVlLFxuICAgICAgbmFtZSxcbiAgICAgIGRhdGEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhLFxuICAgICAgLy8gUGFzcyB0aGUgYWxyZWFkeSBwcm9jZXNzZWQgZGF0YSB0byBgcHJvY2VzcygpYCwgc28gaXQgY2FuIGJlIG1vZGlmaWVkXG4gICAgICAvLyB0aHJvdWdoIGBwcm9jZXNzZWRJdGVtYCBmcm9tIHRoZXJlLlxuICAgICAgcHJvY2Vzc2VkRGF0YVxuICAgIH0pXG5cbiAgICAvLyBGaXJzdCB1bndyYXAgdGhlIHdyYXBwZWQgcHJpbWl0aXZlcyBhZ2FpbiwgdG8gYnJpbmcgdGhlIGRhdGEgYmFjayBpbnRvXG4gICAgLy8gaXRzIG5hdGl2ZSBmb3JtLiBTZSBgcHJvY2Vzc0JlZm9yZSgpYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHRoZSB1c2VyJ3MgYHByb2Nlc3MoKWAgY2FsbGJhY2sgZmlyc3QsIGlmIG9uZSBpcyBwcm92aWRlZCwgc28gdGhhdFxuICAgIC8vIGl0IGNhbiBtb2RpZnkgZGF0YSBpbiBgcHJvY2Vzc2VkRGF0YWAgZXZlbiBpZiBpdCBwcm92aWRlcyBgZXhjbHVkZTogdHJ1ZWBcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgdmFsdWUgPSBwcm9jZXNzKGdldENvbnRleHQoKSlcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8XG4gICAgICAvLyBTdXBwb3J0IGZ1bmN0aW9ucyBuZXh0IHRvIGJvb2xlYW5zIGZvciBgc2NoZW1hLmV4Y2x1ZGVgOlxuICAgICAgZXhjbHVkZSA9PT0gdHJ1ZSB8fFxuICAgICAgaXNGdW5jdGlvbihleGNsdWRlKSAmJiBleGNsdWRlKGdldENvbnRleHQoKSlcbiAgICApIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzZWREYXRhW25hbWVdXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVhY2ggY29tcG9uZW50IHR5cGUgY2FuIHByb3ZpZGUgaXRzIG93biBzdGF0aWMgYHByb2Nlc3NWYWx1ZSgpYCBtZXRob2RcbiAgICAgIC8vIHRvIGNvbnZlcnQgdGhlIGRhdGEgZm9yIHN0b3JhZ2UuXG4gICAgICBjb25zdCBwcm9jZXNzVmFsdWUgPSB0eXBlT3B0aW9ucz8ucHJvY2Vzc1ZhbHVlXG4gICAgICBpZiAocHJvY2Vzc1ZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaClcbiAgICAgIH1cbiAgICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhLFxuICAgIGRhdGFQYXRoLFxuICAgIHByb2Nlc3NlZERhdGEsXG4gICAgcHJvY2Vzc0JlZm9yZSxcbiAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgb3B0aW9uc1xuICApXG5cbiAgcmV0dXJuIGdyYXBoLnByb2Nlc3Moc291cmNlU2NoZW1hLCBwcm9jZXNzZWREYXRhLCBvcHRpb25zKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYURhdGEoXG4gIHNjaGVtYSxcbiAgZGF0YSxcbiAgZGF0YVBhdGgsXG4gIHByb2Nlc3NlZERhdGEsXG4gIHByb2Nlc3NCZWZvcmUsXG4gIHByb2Nlc3NBZnRlcixcbiAgb3B0aW9uc1xuKSB7XG4gIGNvbnN0IHByb2Nlc3NDb21wb25lbnRzID0gY29tcG9uZW50cyA9PiB7XG4gICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoZGF0YVBhdGgsIHRva2VuKSA9PiBkYXRhUGF0aCAhPSBudWxsXG4gICAgICA/IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCB0b2tlbilcbiAgICAgIDogbnVsbFxuXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKCFpc05lc3RlZChjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBkYXRhIG9uIHVubmVzdGVkIGNvbXBvbmVudHMuXG4gICAgICAgICAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhLFxuICAgICAgICAgICAgcHJvY2Vzc0JlZm9yZSxcbiAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50RGF0YVBhdGggPSBnZXREYXRhUGF0aChkYXRhUGF0aCwgbmFtZSlcblxuICAgICAgICAgIGNvbnN0IHByb2Nlc3NJdGVtID0gKGl0ZW0sIGluZGV4ID0gbnVsbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YVBhdGggPSBpbmRleCAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IGdldERhdGFQYXRoKGNvbXBvbmVudERhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICAgICAgOiBjb21wb25lbnREYXRhUGF0aFxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IERpdG9Db250ZXh0LmdldChvcHRpb25zLmNvbXBvbmVudCwge1xuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICByb290RGF0YTogb3B0aW9ucy5yb290RGF0YVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGNvbnN0IGdldEZvcm1zID0gKFxuICAgICAgICAgICAgICBnZXRUeXBlT3B0aW9ucyhjb21wb25lbnRTY2hlbWEpPy5nZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3NpbmcgfHxcbiAgICAgICAgICAgICAgIGdldEZvcm1TY2hlbWFzXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBmb3JtcyA9IGdldEZvcm1zKGNvbXBvbmVudFNjaGVtYSwgY29udGV4dClcbiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSlcbiAgICAgICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZEl0ZW0gPSBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgICAgICAgPyBjbG9uZUl0ZW0oY29tcG9uZW50U2NoZW1hLCBpdGVtLCBvcHRpb25zKVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICAgICAgZm9ybSxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NlZEl0ZW0sXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0JlZm9yZSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBJdGVtcyB3aXRob3V0IGZvcm1zIHN0aWxsIGdldCBmdWxseSAoYnV0IHNoYWxsb3dseSkgY2xvbmVkLlxuICAgICAgICAgICAgICAvLyBUT0RPOiBGaW5kIG91dCBvZiB0aGlzIGlzIGFjdHVhbGx5IG5lZWRlZCAvIHVzZWQgYXQgYWxsP1xuICAgICAgICAgICAgICByZXR1cm4geyAuLi5pdGVtIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcm9jZXNzQmVmb3JlPy4oXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsIGRhdGEsIG5hbWUsIGNvbXBvbmVudERhdGFQYXRoLCBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuICAgICAgICAgIGxldCB2YWx1ZSA9IHByb2Nlc3NlZERhdGEgPyBwcm9jZXNzZWREYXRhW25hbWVdIDogZGF0YVtuYW1lXVxuICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIGhhc0Zvcm1TY2hlbWEoY29tcG9uZW50U2NoZW1hKSkge1xuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBkYXRhIG9uIG5lc3RlZCBmb3JtIGl0ZW1zLlxuICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgIC8vIE9wdGltaXphdGlvbjogTm8gbmVlZCB0byBjb2xsZWN0IHZhbHVlcyBpZiB3ZSdyZSBub3QgY2xvbmluZyFcbiAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICAgICAgOiB2YWx1ZS5mb3JFYWNoKHByb2Nlc3NJdGVtKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jZXNzSXRlbSh2YWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9jZXNzZWREYXRhKSB7XG4gICAgICAgICAgICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwcm9jZXNzQWZ0ZXI/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSwgZGF0YSwgbmFtZSwgY29tcG9uZW50RGF0YVBhdGgsIHByb2Nlc3NlZERhdGFcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm9jZXNzQ29tcG9uZW50cyhzY2hlbWEuY29tcG9uZW50cylcbiAgaWYgKHNjaGVtYS50YWJzKSB7XG4gICAgZm9yIChjb25zdCB0YWIgb2YgT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicykpIHtcbiAgICAgIHByb2Nlc3NDb21wb25lbnRzKHRhYi5jb21wb25lbnRzKVxuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IHBhbmVsIG9mIGdldEFsbFBhbmVsU2NoZW1hcyhzY2hlbWEsIGRhdGFQYXRoKSkge1xuICAgIHByb2Nlc3NDb21wb25lbnRzKHBhbmVsLnNjaGVtYS5jb21wb25lbnRzKVxuICB9XG5cbiAgcmV0dXJuIHByb2Nlc3NlZERhdGEgfHwgZGF0YVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZWRTY2hlbWFzKGRlc2NyaXB0aW9ucywgZGVmYXVsdHMpIHtcbiAgY29uc3QgdG9PYmplY3QgPSAoYXJyYXksIHRvU2NoZW1hKSA9PiB7XG4gICAgcmV0dXJuIGFycmF5Lmxlbmd0aCA+IDBcbiAgICAgID8gYXJyYXkucmVkdWNlKChvYmplY3QsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHRvU2NoZW1hKHZhbHVlKVxuICAgICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgICAgb2JqZWN0W3NjaGVtYS5uYW1lXSA9IHNjaGVtYSAmJiBkZWZhdWx0c1xuICAgICAgICAgICAgPyB7IC4uLmRlZmF1bHRzLCAuLi5zY2hlbWEgfVxuICAgICAgICAgICAgOiBzY2hlbWFcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqZWN0XG4gICAgICB9LCB7fSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgcmV0dXJuIGlzQXJyYXkoZGVzY3JpcHRpb25zKVxuICAgID8gdG9PYmplY3QoZGVzY3JpcHRpb25zLCB2YWx1ZSA9PiAoXG4gICAgICBpc09iamVjdCh2YWx1ZSkgPyB2YWx1ZSA6IHtcbiAgICAgICAgbmFtZTogY2FtZWxpemUodmFsdWUsIGZhbHNlKVxuICAgICAgfVxuICAgICkpXG4gICAgOiBpc09iamVjdChkZXNjcmlwdGlvbnMpXG4gICAgICA/IHRvT2JqZWN0KFxuICAgICAgICBPYmplY3QuZW50cmllcyhkZXNjcmlwdGlvbnMpLFxuICAgICAgICAoW25hbWUsIHZhbHVlXSkgPT5cbiAgICAgICAgICBpc09iamVjdCh2YWx1ZSkgPyB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgLi4udmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgOiBpc1N0cmluZyh2YWx1ZSkgPyB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgbGFiZWw6IHZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICAgIDogbnVsbFxuICAgICAgKVxuICAgICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdXR0b25TY2hlbWFzKGJ1dHRvbnMpIHtcbiAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyhcbiAgICBidXR0b25zLFxuICAgIHsgdHlwZTogJ2J1dHRvbicgfSAvLyBEZWZhdWx0c1xuICApXG59XG5cbmZ1bmN0aW9uIGdldFR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBpc09iamVjdChzY2hlbWFPclR5cGUpID8gc2NoZW1hT3JUeXBlLnR5cGUgOiBzY2hlbWFPclR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0VHlwZUNvbXBvbmVudChnZXRUeXBlKHNjaGVtYU9yVHlwZSksIHRydWUpPy5vcHRpb25zID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRUeXBlT3B0aW9ucyhzY2hlbWFPclR5cGUpPy5nZXRTb3VyY2VUeXBlPy4oXG4gICAgZ2V0VHlwZShzY2hlbWFPclR5cGUpXG4gICkgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxTY2hlbWEoc2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KSB7XG4gIHJldHVybiBzY2hlbWFcbiAgICA/IHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIG5hbWUsIGFwcGVuZCBpdCB0byB0aGUgZGF0YVBhdGguXG4gICAgICAvLyBUaGlzIGlzIHVzZWQgZS5nLiBmb3IgJGZpbHRlcnMgcGFuZWxzLlxuICAgICAgZGF0YVBhdGg6IHNjaGVtYS5uYW1lXG4gICAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNjaGVtYS5uYW1lKVxuICAgICAgICA6IGRhdGFQYXRoLFxuICAgICAgdGFiQ29tcG9uZW50XG4gICAgfVxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYXMsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQsIHBhbmVscyA9IFtdKSB7XG4gIGlmIChzY2hlbWFzKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCBzY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpKSB7XG4gICAgICBjb25zdCBwYW5lbCA9IGdldFBhbmVsU2NoZW1hKFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBrZXkpLFxuICAgICAgICB0YWJDb21wb25lbnRcbiAgICAgIClcbiAgICAgIGlmIChwYW5lbCkge1xuICAgICAgICBwYW5lbHMucHVzaChwYW5lbClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhbmVsc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsUGFuZWxTY2hlbWFzKFxuICBzY2hlbWEsXG4gIGRhdGFQYXRoLFxuICBzY2hlbWFDb21wb25lbnQgPSBudWxsLFxuICB0YWJDb21wb25lbnQgPSBudWxsXG4pIHtcbiAgY29uc3QgcGFuZWwgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5nZXRQYW5lbFNjaGVtYT8uKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhUGF0aCxcbiAgICBzY2hlbWFDb21wb25lbnRcbiAgKVxuICBjb25zdCBwYW5lbHMgPSBwYW5lbCA/IFtnZXRQYW5lbFNjaGVtYShwYW5lbCwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCldIDogW11cbiAgLy8gQWxsb3cgZWFjaCBjb21wb25lbnQgdG8gcHJvdmlkZSBpdHMgb3duIHNldCBvZiBwYW5lbHMsIGluXG4gIC8vIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0IG9uZSAoZS5nLiAkZmlsdGVyKTpcbiAgZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYS5wYW5lbHMsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQsIHBhbmVscylcbiAgcmV0dXJuIHBhbmVsc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3RTb3VyY2Uoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRTb3VyY2VUeXBlKHNjaGVtYU9yVHlwZSkgPT09ICdvYmplY3QnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xpc3RTb3VyY2Uoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRTb3VyY2VUeXBlKHNjaGVtYU9yVHlwZSkgPT09ICdsaXN0J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSkge1xuICBjb25zdCBpZCA9IGl0ZW1bc291cmNlU2NoZW1hLmlkS2V5IHx8ICdpZCddXG4gIHJldHVybiBpZCAhPSBudWxsID8gU3RyaW5nKGlkKSA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbVVpZChzb3VyY2VTY2hlbWEsIGl0ZW0pIHtcbiAgLy8gVHJ5IHRvIHVzZSB0aGUgaXRlbSBpZCBhcyB0aGUgdWlkLCBmYWxsaW5nIGJhY2sgb24gYXV0by1nZW5lcmF0ZWQgaWRzLCBidXRcbiAgLy8gZWl0aGVyIHdheSwgcGFzcyB0aHJvdWdoIGBnZXRVaWQoKWAgc28gdGhhdCB0aGUgaWRzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlXG4gIC8vIGl0ZW0gdGhyb3VnaCBhIHdlYWsgbWFwLCBhcyB0aGUgaWRzIGNhbiBiZSBmaWx0ZXJlZCBvdXQgaW4gYHByb2Nlc3NEYXRhKClgXG4gIC8vIHdoaWxlIHRoZSBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSB1aWRzIGFzIGtleSBhcmUgc3RpbGwgdmlzaWJsZS5cbiAgcmV0dXJuIGdldFVpZChpdGVtLCBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSlcbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBWYWxpZGF0aW9uTWl4aW4gZnJvbSAnLi9WYWxpZGF0aW9uTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgY29tcHV0ZVZhbHVlIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0SXRlbSwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbGlkYXRpb25NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIC8vIE5PVEU6IFdoaWxlIGBkYXRhUGF0aGAgcG9pbnRzIHRvIHRoZSBhY3R1YWwgYHZhbHVlYCwgYGRhdGFgIHJlcHJlc2VudHNcbiAgICAvLyB0aGUgYGl0ZW1gIGluIHdoaWNoIHRoZSBgdmFsdWVgIGlzIGNvbnRhaW5lZCwgdW5kZXIgdGhlIGtleSBgbmFtZWAuXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZWRWYWx1ZTogbnVsbCxcbiAgICAgIGZvY3VzZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIHR5cGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEudHlwZVxuICAgIH0sXG5cbiAgICBjb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlVHlwZUNvbXBvbmVudCh0aGlzLnNjaGVtYS5jb21wb25lbnQpXG4gICAgfSxcblxuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiB0aGlzLm5lc3RlZCB9KVxuICAgIH0sXG5cbiAgICB2YWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShcbiAgICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgICAgdGhpcy5uYW1lLFxuICAgICAgICAgIHRoaXMuZGF0YVBhdGgsXG4gICAgICAgICAgeyBjb21wb25lbnQ6IHRoaXMgfVxuICAgICAgICApXG4gICAgICAgIGNvbnN0IHsgZm9ybWF0IH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICAvLyBgc2NoZW1hLmZvcm1hdGAgaXMgb25seSBldmVyIGNhbGxlZCBpbiB0aGUgbGlmZS1jeWNsZVxuICAgICAgICAvLyBvZiB0aGUgY29tcG9uZW50IGFuZCB0aHVzIGl0J3Mgb2sgdG8gYmluZCBpdCB0byBgdGhpc2BcbiAgICAgICAgcmV0dXJuIGZvcm1hdFxuICAgICAgICAgID8gZm9ybWF0LmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgdmFsdWUgfSkpXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHsgcGFyc2UgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIC8vIGBzY2hlbWEucGFyc2VgIGlzIG9ubHkgZXZlciBjYWxsZWQgaW4gdGhlIGxpZmUtY3ljbGVcbiAgICAgICAgLy8gb2YgdGhlIGNvbXBvbmVudCBhbmQgdGh1cyBpdCdzIG9rIHRvIGJpbmQgaXQgdG8gYHRoaXNgXG4gICAgICAgIHRoaXMucGFyc2VkVmFsdWUgPSBwYXJzZVxuICAgICAgICAgID8gcGFyc2UuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIHRoaXMuJHNldCh0aGlzLmRhdGEsIHRoaXMubmFtZSwgdGhpcy5wYXJzZWRWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBzaW1pbGFyIHRvIGBEaXRvQ29udGV4dGBcbiAgICAvLyBwcm9wZXJ0aWVzLCBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlc2Ugb24gYHRoaXNgIGFzIHdlbGw6XG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIGdldFBhcmVudEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgfSxcblxuICAgIHJvb3RJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdERhdGFcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICAgIC8vIFdlIGNhbiBvbmx5IGdldCB0aGUgcHJvY2Vzc2VkIGl0ZW1zIHRocm91Z2ggdGhlIHNjaGVtYUNvbXBvbmVudCwgYnV0XG4gICAgICAvLyB0aGF0J3Mgbm90IG5lY2Vzc2FyaWx5IHRoZSBpdGVtIHJlcHJlc2VudGVkIGJ5IHRoaXMgY29tcG9uZW50LlxuICAgICAgLy8gU29sdXRpb246IEZpbmQgdGhlIHJlbGF0aXZlIHBhdGggYW5kIHRoZSBwcm9jZXNzZWQgc3ViLWl0ZW0gZnJvbSB0aGVyZTpcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICByZXR1cm4gZ2V0SXRlbShcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50LnByb2Nlc3NlZEl0ZW0sXG4gICAgICAgIC8vIEdldCB0aGUgZGF0YVBhdGggcmVsYXRpdmUgdG8gdGhlIHNjaGVtYUNvbXBvbmVudCdzIGRhdGE6XG4gICAgICAgIHRoaXMuZGF0YVBhdGguc2xpY2Uoc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoLmxlbmd0aCksXG4gICAgICAgIHRoaXMubmVzdGVkXG4gICAgICApXG4gICAgfSxcblxuICAgIGxhYmVsOiBnZXRTY2hlbWFBY2Nlc3NvcignbGFiZWwnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBCb29sZWFuXSxcbiAgICAgIGdldChsYWJlbCkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcobGFiZWwpXG4gICAgICAgICAgPyBsYWJlbFxuICAgICAgICAgIDogbGFiZWwgIT09IGZhbHNlICYmIHRoaXMuJG9wdGlvbnMuZ2VuZXJhdGVMYWJlbFxuICAgICAgICAgICAgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB3aWR0aDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXVxuICAgIH0pLFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZU9wdGlvbnMuZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgZXhjbHVkZWRgIGZvciBjb25zaXN0ZW50IG5hbWluZ1xuICAgIGV4Y2x1ZGU6IGdldFNjaGVtYUFjY2Vzc29yKCdleGNsdWRlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICByZXF1aXJlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlcXVpcmVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBNb3ZlIHRoZXNlIHRvIGEgc3ViLWNsYXNzIGNvbXBvbmVudCB1c2VkIGZvciBhbGwgaW5wdXQgY29tcG9uZW50cz9cbiAgICByZWFkb25seTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlYWRvbmx5Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBhdXRvZm9jdXM6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvZm9jdXMnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRvIGJlIHVzZWQgZm9yIHNlbGVjdHMgYW5kIGlucHV0cyBvbmx5P1xuICAgIGNsZWFyYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NsZWFyYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcGxhY2Vob2xkZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdwbGFjZWhvbGRlcicsIHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0pLFxuXG4gICAgYXV0b2NvbXBsZXRlOiBnZXRTY2hlbWFBY2Nlc3NvcignYXV0b2NvbXBsZXRlJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyBuYXRpdmVGaWVsZCwgdGV4dEZpZWxkIH0gPSB0aGlzLiRvcHRpb25zXG5cbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG5cbiAgICAgIGlmIChuYXRpdmVGaWVsZCkge1xuICAgICAgICBhdHRyaWJ1dGVzLm5hbWUgPSB0aGlzLm5hbWVcbiAgICAgICAgaWYgKHRoaXMubGFiZWwpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnRpdGxlID0gdGhpcy5sYWJlbFxuICAgICAgICB9XG4gICAgICAgIGF0dHJpYnV0ZXMucmVhZG9ubHkgPSB0aGlzLnJlYWRvbmx5XG4gICAgICAgIGF0dHJpYnV0ZXMuYXV0b2ZvY3VzID0gdGhpcy5hdXRvZm9jdXNcbiAgICAgICAgaWYgKHRleHRGaWVsZCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyXG4gICAgICAgICAgYXR0cmlidXRlcy5hdXRvY29tcGxldGUgPSB0aGlzLmF1dG9jb21wbGV0ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH0sXG5cbiAgICBsaXN0ZW5lcnMoKSB7XG4gICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmdldExpc3RlbmVycygpXG4gICAgICBjb25zdCB7IGV2ZW50cyA9IHt9IH0gPSB0aGlzLnNjaGVtYVxuICAgICAgaWYgKGV2ZW50cykge1xuICAgICAgICAvLyBSZWdpc3RlciBjYWxsYmFja3MgZm9yIGFsbCBwcm92aWRlcyBub24tcmVjb2duaXplZCBldmVudHMsXG4gICAgICAgIC8vIGFzc3VtaW5nIHRoZXkgYXJlIG5hdGl2ZSBldmVudHMuXG4gICAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgT2JqZWN0LmtleXMoZXZlbnRzKSkge1xuICAgICAgICAgIGxpc3RlbmVyc1tldmVudF0gfHw9ICgpID0+IHRoaXMuZW1pdEV2ZW50KGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdGVuZXJzXG4gICAgfSxcblxuICAgIHZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7IC4uLnRoaXMuZ2V0VmFsaWRhdGlvbnMoKSB9XG4gICAgICBpZiAodGhpcy5yZXF1aXJlZCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yZXF1aXJlZCA9IHRydWVcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBkZWZhdWx0IHJ1bGVzIGFuZCBhZGQgYW55IG5ldyBvbmVzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEucnVsZXMgfHwge30pKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVsZXRlIHZhbGlkYXRpb25zW2tleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9uc1trZXldID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIC8vIE5PVEU6IFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiBSZXNvdXJjZU1peGluLCB1c2VkIGJ5IGxpc3RzLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIHNob3dDbGVhckJ1dHRvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyYWJsZSAmJiB0aGlzLnZhbHVlICE9IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIFByZXZlbnQgdW5uZXN0ZWQgdHlwZSBjb21wb25lbnRzIGZyb20gb3ZlcnJpZGluZyBwYXJlbnQgZGF0YSBwYXRoc1xuICAgICAgaWYgKHRoaXMubmVzdGVkKSB7XG4gICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlckNvbXBvbmVudCh0aGlzLCBhZGQpXG4gICAgICAgIC8vIEluc3RhbGwgLyByZW1vdmUgdGhlIGZpZWxkIGV2ZW50cyB0byB3YXRjaCBvZiBjaGFuZ2VzIGFuZCBoYW5kbGVcbiAgICAgICAgLy8gdmFsaWRhdGlvbiBmbGFncy4gYGV2ZW50c2AgaXMgcHJvdmlkZWQgYnkgYFZhbGlkYXRpb25NaXhpbi5ldmVudHMoKWBcbiAgICAgICAgdGhpc1thZGQgPyAnb24nIDogJ29mZiddKHRoaXMuZXZlbnRzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBnZXRMaXN0ZW5lcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBibHVyOiB0aGlzLm9uQmx1cixcbiAgICAgICAgaW5wdXQ6IHRoaXMub25JbnB1dCxcbiAgICAgICAgY2hhbmdlOiB0aGlzLm9uQ2hhbmdlXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgY29uc3QgW2VsZW1lbnRdID0gYXNBcnJheSh0aGlzLiRyZWZzLmVsZW1lbnQpXG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgZWxlbWVudC5mb2N1cygpXG4gICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgZGlzYWJsZWQsIGBmb2N1cygpYCB3aWxsIGxpa2VseSBub3QgaGF2ZSB0aGVcbiAgICAgICAgICAvLyBkZXNpcmVkIGVmZmVjdC4gVXNlIGBzY3JvbGxJbnRvVmlldygpYCBpZiBhdmFpbGFibGU6XG4gICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIChlbGVtZW50LiRlbCB8fCBlbGVtZW50KS5zY3JvbGxJbnRvVmlldz8uKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgLy8gQWxzbyBmb2N1cyB0aGlzIGNvbXBvbmVudCdzIHNjaGVtYSBhbmQgcGFuZWwgaW4gY2FzZSBpdCdzIGEgdGFiLlxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuZm9jdXMoKVxuICAgICAgdGhpcy50YWJDb21wb25lbnQ/LmZvY3VzKClcbiAgICAgIHRoaXMuZm9jdXNFbGVtZW50KClcbiAgICB9LFxuXG4gICAgY2xlYXIoKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgfSxcblxuICAgIG9uRm9jdXMoKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlXG4gICAgICB0aGlzLmVtaXRFdmVudCgnZm9jdXMnKVxuICAgIH0sXG5cbiAgICBvbkJsdXIoKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2JsdXInKVxuICAgIH0sXG5cbiAgICBvbklucHV0KCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2lucHV0JylcbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJywge1xuICAgICAgICBjb250ZXh0OiB0aGlzLnBhcnNlZFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHsgdmFsdWU6IHRoaXMucGFyc2VkVmFsdWUgfVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgLy8gUGFzcyBgc2NoZW1hQ29tcG9uZW50YCBhcyBwYXJlbnQsIHNvIGNoYW5nZSBldmVudHMgY2FuIHByb3BhZ2F0ZSB1cC5cbiAgICAgICAgcGFyZW50OiB0aGlzLnNjaGVtYUNvbXBvbmVudFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNQcm9taXNlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvTWl4aW4gZnJvbSAnLi9taXhpbnMvRGl0b01peGluLmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRUeXBlQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9zY2hlbWEuanMnXG5cbmNvbnN0IGNvbXBvbmVudHMgPSB7fVxuXG5jb25zdCBEaXRvQ29tcG9uZW50ID0gVnVlLmV4dGVuZCh7XG4gIC8vIE1ha2Ugc3VyZSB0aGF0IHJlZ2lzdGVyZWQgY29tcG9uZW50cyBhcmUgcHJlc2VudCBpbiBhbGwgRGl0b0NvbXBvbmVudC5cbiAgY29tcG9uZW50cyxcbiAgbWl4aW5zOiBbRGl0b01peGluXSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VHlwZUNvbXBvbmVudCxcblxuICAgIHJlc29sdmVDb21wb25lbnQoY29tcG9uZW50LCBtaXhpbnMgPSBbXSkge1xuICAgICAgLy8gQSBoZWxwZXIgbWV0aG9kIHRvIGFsbG93IHRocmVlIHRoaW5nczpcbiAgICAgIC8vIC0gV2hlbiB1c2VkIGluIGEgY29tcHV0ZWQgcHJvcGVydHksIGl0IHJlbW92ZXMgdGhlIG5lZWQgdG8gaGF2ZSB0b1xuICAgICAgLy8gICBsb2FkIGNvbXBvbmVudHMgd2l0aCBhc3luYyBmdW5jdGlvbnMgYGNvbXBvbmVudDogKCkgPT4gaW1wb3J0KC4uLilgLlxuICAgICAgLy8gICBpbnN0ZWFkLCB0aGV5IGNhbiBiZSBkaXJlY3RseSBwcm92aWRlZDogYGNvbXBvbmVudDogaW1wb3J0KC4uLilgXG4gICAgICAvLyAtIFRoZSBwcm9wZXJ0aWVzIHBhc3NlZCB0byBzdWNoIGNvbXBvbmVudHMgZG9uJ3QgbmVlZCB0byBiZSBkZWZpbmVkLlxuICAgICAgLy8gICBJbnN0ZWFkLCB0aGUgcHJvdmlkZWQgbWl4aW5zIGFyZSBhdXRvbWF0aWNhbGx5IGluaGVyaXRlZC5cbiAgICAgIC8vIC0gVGhlIGNvbXBvbmVudCBjYW4gdXNlIGFsbCBpbnRlcm5hbCBjb21wb25lbnRzIGtub3duIHRvIERpdG8uanMgQWRtaW4uXG4gICAgICByZXR1cm4gY29tcG9uZW50XG4gICAgICAgID8gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIC8vIEF0IGZpcnN0LCByZXNvbHZlIGNvbXBvbmVudCBpcyBpdCBpcyBsb2FkZWQgYXN5bmNocm9ub3VzbHkuXG4gICAgICAgICAgbGV0IGNvbXAgPSBpc0Z1bmN0aW9uKGNvbXBvbmVudCkgPyBhd2FpdCBjb21wb25lbnQoKVxuICAgICAgICAgICAgOiBpc1Byb21pc2UoY29tcG9uZW50KSA/IGF3YWl0IGNvbXBvbmVudFxuICAgICAgICAgICAgOiBjb21wb25lbnRcbiAgICAgICAgICBjb21wID0gY29tcD8uZGVmYXVsdCB8fCBjb21wXG4gICAgICAgICAgY29tcC5taXhpbnMgPSBtaXhpbnNcbiAgICAgICAgICBjb21wLmNvbXBvbmVudHMgPSBjb21wb25lbnRzXG4gICAgICAgICAgcmV0dXJuIGNvbXBcbiAgICAgICAgfVxuICAgICAgICA6IGNvbXBvbmVudFxuICAgIH0sXG5cbiAgICByZXNvbHZlRGl0b0NvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVDb21wb25lbnQoY29tcG9uZW50LCBbRGl0b01peGluXSlcbiAgICB9LFxuXG4gICAgcmVzb2x2ZVR5cGVDb21wb25lbnQoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlQ29tcG9uZW50KGNvbXBvbmVudCwgW0RpdG9NaXhpbiwgVHlwZU1peGluXSlcbiAgICB9XG4gIH1cbn0pXG5cbkRpdG9Db21wb25lbnQuY29tcG9uZW50ID0gZnVuY3Rpb24obmFtZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICBuYW1lLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH1cbiAgICBjb25zdCBjdG9yID0gdGhpcy5leHRlbmQob3B0aW9ucylcbiAgICBjb21wb25lbnRzW25hbWVdID0gY3RvclxuICAgIHJldHVybiBjdG9yXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudHNbbmFtZV0gfHwgVnVlLmNvbXBvbmVudChuYW1lKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnRcbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9Vc2VyIHtcbiAgaGFzUm9sZSguLi5yb2xlcykge1xuICAgIGlmICh0aGlzLnJvbGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHJvbGUgb2Ygcm9sZXMpIHtcbiAgICAgICAgaWYgKHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjaGVtYUNvbXBvbmVudHM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbWFpblNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHNbMF1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBgRGl0b1NjaGVtYS5jcmVhdGVkKCkvZGVzdHJveWVkKClgIG9uIGl0c1xuICAgIC8vICRwYXJlbnQsIGlmIHRoZSBwYXJlbnQgdXNlcyB0aGUgYFNjaGVtYVBhcmVudE1peGluYDpcbiAgICBfcmVnaXN0ZXJTY2hlbWFDb21wb25lbnQoc2NoZW1hQ29tcG9uZW50LCBhZGQpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50cyB9ID0gdGhpc1xuICAgICAgaWYgKGFkZCkge1xuICAgICAgICBzY2hlbWFDb21wb25lbnRzLnB1c2goc2NoZW1hQ29tcG9uZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50cy5zcGxpY2Uoc2NoZW1hQ29tcG9uZW50cy5pbmRleE9mKHNjaGVtYUNvbXBvbmVudCksIDEpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi9TY2hlbWFQYXJlbnRNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbU2NoZW1hUGFyZW50TWl4aW5dLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZXJyb3JzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQsIHsgZXJyb3JzIH0pID0+XG4gICAgICAgICAgZXJyb3JzICYmIHJlc3VsdCA/IHJlc3VsdC5jb25jYXQoZXJyb3JzKSA6IGVycm9ycyxcbiAgICAgICAgbnVsbFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5zb21lKGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQudmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSkpXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52ZXJpZnlBbGwobWF0Y2gpKVxuICAgIH0sXG5cbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5yZXNldFZhbGlkYXRpb24oKSlcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5jbGVhckVycm9ycygpKVxuICAgIH0sXG5cbiAgICBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChcbiAgICAgICAgaXQgPT4gaXQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cylcbiAgICAgIClcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRDb21tb25QcmVmaXggfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtWYWxpZGF0b3JNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlVXBkYXRlKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgdGhpcy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBiZWZvcmVSb3V0ZUxlYXZlKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgdGhpcy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZWxvYWQ6IGZhbHNlLFxuICAgICAgLy8gRWFjaCByb3V0ZS1jb21wb25lbnQgZGVmaW5lcyBhIHN0b3JlIHRoYXQgZ2V0cyBwYXNzZWQgb24gdG8gaXRzXG4gICAgICAvLyBjaGlsZCBjb21wb25lbnRzLCBzbyB0aGV5IGNhbiBzdG9yZSB2YWx1ZXMgaW4gdGhlbSB0aGF0IGxpdmUgYmV5b25kXG4gICAgICAvLyB0aGVpciBsaWZlLWN5Y2xlLiBTZWU6IERpdG9QYW5lLCBTb3VyY2VNaXhpblxuICAgICAgc3RvcmU6IHt9LFxuICAgICAgbG9hZENhY2hlOiB7fSAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgcm91dGVDb21wb25lbnQoKSB3aGljaCB1c2VzIHRoZSBpbmplY3RlZCB2YWx1ZS5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJvdXRlUmVjb3JkKCkge1xuICAgICAgLy8gVE9ETzogQ2FuIHRoaXMuJHJvdXRlLmN1cnJlbnRSb3V0ZSBiZSBvZiB1c2Ugc29tZXdoZXJlIGhlcmU/XG4gICAgICAvLyBSZXRyaWV2ZSB0aGUgcm91dGUtcmVjb3JkIHRvIHdoaWNoIHRoaXMgY29tcG9uZW50IHdhcyBtYXBwZWQgdG86XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTMzOCNpc3N1ZWNvbW1lbnQtMjk2MzgxNDU5XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUubWF0Y2hlZFt0aGlzLiR2bm9kZS5kYXRhLnJvdXRlclZpZXdEZXB0aF1cbiAgICB9LFxuXG4gICAgaXNMYXN0Um91dGUoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGlzIHJvdXRlciBjb21wb25lbnQgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSByb3V0ZS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkID09PSBtYXRjaGVkW21hdGNoZWQubGVuZ3RoIC0gMV1cbiAgICB9LFxuXG4gICAgaXNMYXN0VW5uZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHJvdXRlIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlIHRoYXRcbiAgICAgIC8vIG5lZWRzIGl0cyBvd24gcm91dGVyLXZpZXcgKD0gaXMgbm90IG5lc3RlZCkuXG4gICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlXG4gICAgICBmb3IgKGxldCBpID0gbWF0Y2hlZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBtYXRjaGVkW2ldXG4gICAgICAgIGlmICghcmVjb3JkLm1ldGEubmVzdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IHJlY29yZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgaXNOZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEubmVzdGVkXG4gICAgfSxcblxuICAgIG1ldGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZD8ubWV0YVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Um91dGVQYXRoKHRoaXMucm91dGVSZWNvcmQucGF0aClcbiAgICB9LFxuXG4gICAgbGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYigpIHtcbiAgICAgIGNvbnN0IHsgYnJlYWRjcnVtYiB9ID0gdGhpcy5zY2hlbWEgfHwge31cbiAgICAgIHJldHVybiBicmVhZGNydW1iIHx8IGAke3RoaXMuYnJlYWRjcnVtYlByZWZpeH0gJHt0aGlzLmxhYmVsfWBcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYlByZWZpeCgpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH0sXG5cbiAgICBwYXJhbSgpIHtcbiAgICAgIC8vIFdvcmthcm91bmQgZm9yIHZ1ZS1yb3V0ZXIgbm90IGJlaW5nIGFibGUgdG8gbWFwIG11bHRpcGxlIHVybCBwYXJhbWV0ZXJzXG4gICAgICAvLyB3aXRoIHRoZSBzYW1lIG5hbWUgdG8gbXVsdGlwbGUgY29tcG9uZW50cywgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzNDVcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5wYXJhbXNbdGhpcy5tZXRhPy5wYXJhbV0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGUsIHNlZSBEaXRvRm9ybVxuICAgIGRvZXNNdXRhdGUoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBLZWVwIGEgc2hhcmVkIHN0YWNrIG9mIHJvb3QgY29tcG9uZW50cyBmb3IgRGl0b1RyYWlsIHRvIHVzZSB0byByZW5kZXJcbiAgICAvLyBsYWJlbHMuIENhbid0IHJlbHkgb24gJHJvdXRlLm1hdGNoZWRbaV0uaW5zdGFuY2VzLmRlZmF1bHQgdW5mb3J0dW5hdGVseSxcbiAgICAvLyBhcyBpbnN0YW5jZXMgYXJlbid0IGltbWVkaWF0ZWx5IHJlYWR5LCBhbmQgaW5zdGFuY2VzIGlzIG5vdCByZWFjdGl2ZS5cbiAgICB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5wdXNoKHRoaXMpXG4gIH0sXG5cbiAgZGVzdHJveWVkKCkge1xuICAgIGNvbnN0IHsgcm91dGVDb21wb25lbnRzIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgcm91dGVDb21wb25lbnRzLnNwbGljZShyb3V0ZUNvbXBvbmVudHMuaW5kZXhPZih0aGlzKSwgMSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgYmVmb3JlUm91dGVDaGFuZ2UodG8sIGZyb20sIG5leHQpIHtcbiAgICAgIGxldCBvayA9IHRydWVcbiAgICAgIGNvbnN0IGlzQ2xvc2luZyA9IChcbiAgICAgICAgLy8gT25seSBoYW5kbGUgdGhpcyByb3V0ZSBjaGFuZ2UgaWYgdGhlIGZvcm0gaXMgYWN0dWFsbHkgbWFwcGVkIHRvIHRoZVxuICAgICAgICAvLyBgZnJvbWAgcm91dGUsIGJ1dCBpbmNsdWRlIHBhcmVudCBmb3JtcyBvZiBjbG9zaW5nIG5lc3RlZCBmb3JtcyBhcyBhc1xuICAgICAgICAvLyB3ZWxsLCBieSBtYXRjaGluZyB0aGUgdGhlIHN0YXJ0IG9mIGZyb20vdG8gcGF0aCBhZ2FpbnN0IGB0aGlzLnBhdGhgOlxuICAgICAgICBmcm9tLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgICF0by5wYXRoLnN0YXJ0c1dpdGgodGhpcy5wYXRoKSAmJlxuICAgICAgICAvLyBFeGNsdWRlIGhhc2ggY2hhbmdlcyBvbmx5ICg9IHRhYiBjaGFuZ2VzKTpcbiAgICAgICAgZnJvbS5wYXRoICE9PSB0by5wYXRoICYmIChcbiAgICAgICAgICB0aGlzLmlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSB8fFxuICAgICAgICAgIC8vIERlY2lkZSBpZiB3ZSdyZSBtb3ZpbmcgdG93YXJkcyBhIG5ldyBuZXN0ZWQgZm9ybSwgb3IgY2xvc2luZyAvXG4gICAgICAgICAgLy8gcmVwbGFjaW5nIGFuIGFscmVhZHkgb3BlbiBvbmUgYnkgY29tcGFyaW5nIHBhdGggbGVuZ3Rocy5cbiAgICAgICAgICAvLyBUaGUgY2FzZSBvZiBgPWAgbWF0Y2hlcyB0aGUgcmVwbGFjaW5nIG9mIGFuIGFscmVhZHkgb3BlbiBvbmUuXG4gICAgICAgICAgdG8ucGF0aC5sZW5ndGggPD0gZnJvbS5wYXRoLmxlbmd0aFxuICAgICAgICApXG4gICAgICApXG4gICAgICBpZiAoaXNDbG9zaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmRvZXNNdXRhdGUpIHtcbiAgICAgICAgICAvLyBGb3IgYWN0aXZlIGRpcmVjdGx5IG11dGF0aW5nIChuZXN0ZWQpIGZvcm1zIHRoYXQgd2VyZSBub3QgdmFsaWRhdGVkXG4gICAgICAgICAgLy8geWV0LCB2YWxpZGF0ZSB0aGVtIG9uY2UuIElmIHRoZSB1c2VyIHRoZW4gc3RpbGwgd2FudHMgdG8gbGVhdmVcbiAgICAgICAgICAvLyB0aGVtLCB0aGV5IGNhbiBjbGljayBjbG9zZSAvIG5hdmlnYXRlIGF3YXkgYWdhaW4uXG4gICAgICAgICAgb2sgPSAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRhdGVkIHx8XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlQWxsKClcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVGhlIGZvcm0gZG9lc24ndCBkaXJlY3RseSBtdXRhdGUgZGF0YS4gSWYgaXQgaXMgZGlydHksIGFzayBpZiB1c2VyXG4gICAgICAgICAgLy8gd2FudHMgdG8gcGVyc2lzdCBkYXRhIGZpcnN0LlxuICAgICAgICAgIGlmICh0aGlzLmlzRGlydHkpIHtcbiAgICAgICAgICAgIG9rID0gd2luZG93LmNvbmZpcm0oXG4gICAgICAgICAgICAgIGBZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMuIERvIHlvdSByZWFsbHkgd2FudCB0byAke1xuICAgICAgICAgICAgICAgIHRoaXMudmVyYnMuY2FuY2VsXG4gICAgICAgICAgICAgIH0/YFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV4dChvaylcbiAgICB9LFxuXG4gICAgZ2V0Um91dGVQYXRoKHRlbXBsYXRlUGF0aCkge1xuICAgICAgLy8gTWFwcyB0aGUgcm91dGUncyBhY3R1YWwgcGF0aCB0byB0aGUgbWF0Y2hlZCByb3V0ZXMgYnkgY291bnRpbmcgaXRzXG4gICAgICAvLyBwYXJ0cyBzZXBhcmF0ZWQgYnkgJy8nLCBzcGxpdHRpbmcgdGhlIHBhdGggaW50byB0aGUgbWFwcGVkIHBhcnRzXG4gICAgICAvLyBjb250YWluaW5nIGFjdHVhbCBwYXJhbWV0ZXJzLlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGhcbiAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgLnNsaWNlKDAsIHRlbXBsYXRlUGF0aC5zcGxpdCgnLycpLmxlbmd0aClcbiAgICAgICAgLmpvaW4oJy8nKVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHtcbiAgICAgIC8vIFRoZSByb3V0ZSBwYXRoIGlzIHRoZSBwYXRoIHVwIHRvIHRoZSBmaXJzdCAvIChleGNsdWRpbmcgdGhlIGluaXRpYWwgLyk6XG4gICAgICBjb25zdCByb290UGF0aCA9IHRoaXMucGF0aC5tYXRjaCgvXihcXC9bXi9dKikvKVsxXVxuICAgICAgcmV0dXJuICFnZXRDb21tb25QcmVmaXgodG8ucGF0aCwgZnJvbS5wYXRoKS5zdGFydHNXaXRoKHJvb3RQYXRoKVxuICAgIH1cbiAgfVxufVxuIiwiXG4vLyBPbmx5IHJlbmRlciBEaXRvVmlldyB3aGVuIGl0IGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIGEgbm9ybWFsIHJvdXRlci12aWV3XG4vLyBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbi8vIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuLy8gdXNlZCB0byBhbHdheXMgcmVuZGVyIGZvcm1zIGV2ZW4gd2hlbiBvdGhlciBuZXN0ZWQgZm9ybXMgYXJlIHByZXNlbnQuXG5yb3V0ZXItdmlldyhcbiAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gIDprZXk9XCJuYW1lXCJcbilcbi5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICB2LWVsc2UtaWY9XCJzaG91bGRSZW5kZXIodmlld1NjaGVtYSlcIlxuKVxuICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICA6c2NoZW1hPVwidmlld1NjaGVtYVwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUobmFtZSlcIlxuICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vIE9ubHkgcmVuZGVyIERpdG9WaWV3IHdoZW4gaXQgaXMgYWN0aXZlLCBvdGhlcndpc2UgYSBub3JtYWwgcm91dGVyLXZpZXdcbiAgLy8gaW5zdGVhZCwgdG8gbmVzdCBmdXJ0aGVyIHJvdXRlIGNvbXBvbmVudHMuXG4gIC8vIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuICAvLyB1c2VkIHRvIGFsd2F5cyByZW5kZXIgZm9ybXMgZXZlbiB3aGVuIG90aGVyIG5lc3RlZCBmb3JtcyBhcmUgcHJlc2VudC5cbiAgcm91dGVyLXZpZXcoXG4gICAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gICAgOmtleT1cIm5hbWVcIlxuICApXG4gIC5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICAgIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlcih2aWV3U2NoZW1hKVwiXG4gIClcbiAgICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICAgIDpzY2hlbWE9XCJ2aWV3U2NoZW1hXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShuYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICAgICAgOm1lbnVIZWFkZXI9XCJ0cnVlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSb3V0ZU1peGluIGZyb20gJy4uL21peGlucy9Sb3V0ZU1peGluLmpzJ1xuaW1wb3J0IHsgc29tZVNjaGVtYUNvbXBvbmVudCwgaXNTaW5nbGVDb21wb25lbnRWaWV3IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXZpZXcnLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgLy8gUmVkaXJlY3QgJHNvdXJjZUNvbXBvbmVudCBhbmQgJHJlc291cmNlQ29tcG9uZW50IHRvIHRoZSBtYWluIGNvbXBvbmVudDpcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5zb3VyY2VDb21wb25lbnQgfHwgbnVsbCxcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5yZXNvdXJjZUNvbXBvbmVudCB8fCBudWxsXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmlldzogdHJ1ZSxcbiAgICAgIC8vIFVwZGF0ZWQgZnJvbSBMb2FkaW5nTWl4aW4gdGhyb3VnaCBgc2V0TG9hZGluZyhpc0xvYWRpbmcpYDpcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAvLyBOT1RFOiBEYXRhIGlzIHNoYXJlZCBhY3Jvc3MgYWxsIHZpZXdzIGJlY2F1c2UgdGhlIHJvdXRlciByZWN5Y2xlcyB0aGVcbiAgICAgIC8vIERpdG9WaWV3IGNvbXBvbmVudC5cbiAgICAgIGRhdGE6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5zY2hlbWFcbiAgICB9LFxuXG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50VmlldygpIHtcbiAgICAgIHJldHVybiBpc1NpbmdsZUNvbXBvbmVudFZpZXcodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIG1haW5Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5RGF0YVBhdGgodGhpcy5uYW1lKVxuICAgIH0sXG5cbiAgICB2aWV3U2NoZW1hKCkge1xuICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHRoaXNcbiAgICAgIC8vIFRyYW5zbGF0ZSBzaW5nbGUtY29tcG9uZW50IHNjaGVtYXMgaW50byBtdWx0aS1jb21wb25lbnQgc2NoZW1hcyxcbiAgICAgIC8vIHNvIHRoZXkgY2FuIGJlIHJlbmRlcmVkIGRpcmVjdGx5IHRocm91Z2ggRGl0b1NjaGVtYSBhbHNvOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgIG5hbWU6IHNjaGVtYS5uYW1lLFxuICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgIFtzY2hlbWEubmFtZV06IHtcbiAgICAgICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgICAgICBsYWJlbDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgOiBzY2hlbWFcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgcmV0dXJuIHNvbWVTY2hlbWFDb21wb25lbnQoXG4gICAgICAgIHRoaXMudmlld1NjaGVtYSxcbiAgICAgICAgY29tcG9uZW50ID0+IGhhc1Jlc291cmNlKGNvbXBvbmVudClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGUodG8sIGZyb20pIHtcbiAgICAgIC8vIFNlZSBpZiB0aGUgcm91dGUgY2hhbmdlcyBjb21wbGV0ZWx5LCBhbmQgY2xlYXIgdGhlIGRhdGEgaWYgaXQgZG9lcy5cbiAgICAgIGlmICh0aGlzLmlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSkge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGF0YSA9IHt9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRQYXRoKHBhdGgpIHtcbiAgICAgIC8vIExpc3RzIGluc2lkZSBzaW5nbGUtY29tcG9uZW50IHZpZXdzIHVzZSB0aGUgdmlldydzIHBhdGggZm9yIHN1Yi1wYXRoczpcbiAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50Vmlld1xuICAgICAgICA/IHRoaXMucGF0aFxuICAgICAgICA6IGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJ0BkaXRvanMvdWknXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRvbUhhbmRsZXJzOiBbXVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIGZvciAoY29uc3QgeyByZW1vdmUgfSBvZiB0aGlzLmRvbUhhbmRsZXJzKSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgICB0aGlzLmRvbUhhbmRsZXJzID0gW11cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZG9tT24oZWxlbWVudCwgdHlwZSwgaGFuZGxlcikge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYWRkRXZlbnRzKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBpc09iamVjdCh0eXBlKSA/IHR5cGUgOiB7IFt0eXBlXTogaGFuZGxlciB9XG4gICAgICApXG4gICAgICB0aGlzLmRvbUhhbmRsZXJzLnB1c2gocmVzdWx0KVxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1yb290XG4gIG1vZGFscy1jb250YWluZXJcbiAgbm90aWZpY2F0aW9ucy5kaXRvLW5vdGlmaWNhdGlvbnMoXG4gICAgcmVmPVwibm90aWZpY2F0aW9uc1wiXG4gICAgcG9zaXRpb249XCJ0b3AgcmlnaHRcIlxuICAgIGNsYXNzZXM9XCJkaXRvLW5vdGlmaWNhdGlvblwiXG4gIClcbiAgZGl0by1tZW51XG4gIG1haW4uZGl0by1wYWdlLmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgIGRpdG8taGVhZGVyKFxuICAgICAgOnNwaW5uZXI9XCJvcHRpb25zLnNwaW5uZXJcIlxuICAgICAgOmlzTG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgKVxuICAgICAgZGl0by1hY2NvdW50KFxuICAgICAgICB2LWlmPVwidXNlclwiXG4gICAgICApXG4gICAgICBhLmRpdG8tbG9naW4oXG4gICAgICAgIHYtZWxzZS1pZj1cImFsbG93TG9naW5cIlxuICAgICAgICBAY2xpY2s9XCJyb290Q29tcG9uZW50LmxvZ2luKClcIlxuICAgICAgKVxuICAgICAgICBzcGFuIExvZ2luXG4gICAgcm91dGVyLXZpZXdcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXJvb3RcbiAgICBtb2RhbHMtY29udGFpbmVyXG4gICAgbm90aWZpY2F0aW9ucy5kaXRvLW5vdGlmaWNhdGlvbnMoXG4gICAgICByZWY9XCJub3RpZmljYXRpb25zXCJcbiAgICAgIHBvc2l0aW9uPVwidG9wIHJpZ2h0XCJcbiAgICAgIGNsYXNzZXM9XCJkaXRvLW5vdGlmaWNhdGlvblwiXG4gICAgKVxuICAgIGRpdG8tbWVudVxuICAgIG1haW4uZGl0by1wYWdlLmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgICAgZGl0by1oZWFkZXIoXG4gICAgICAgIDpzcGlubmVyPVwib3B0aW9ucy5zcGlubmVyXCJcbiAgICAgICAgOmlzTG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgICApXG4gICAgICAgIGRpdG8tYWNjb3VudChcbiAgICAgICAgICB2LWlmPVwidXNlclwiXG4gICAgICAgIClcbiAgICAgICAgYS5kaXRvLWxvZ2luKFxuICAgICAgICAgIHYtZWxzZS1pZj1cImFsbG93TG9naW5cIlxuICAgICAgICAgIEBjbGljaz1cInJvb3RDb21wb25lbnQubG9naW4oKVwiXG4gICAgICAgIClcbiAgICAgICAgICBzcGFuIExvZ2luXG4gICAgICByb3V0ZXItdmlld1xuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9zdHlsZS5zYXNzJ1xuICAuZGl0by1yb290XG4gICAgaGVpZ2h0OiAxMDAlXG4gICAgZGlzcGxheTogZmxleFxuICAgIC5kaXRvLXBhZ2VcbiAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmRcbiAgICAgIC8vIFRoZSByb290LWxldmVsIHZpZXdzIGFuZCBmb3JtcyBtYXkgaGF2ZSBhIGAuZGl0by1zY2hlbWEtaGVhZGVyYCB0aGF0XG4gICAgICAvLyBzaG91bGQgYXBwZWFyIGxheWVyZWQgb3ZlciBgLmRpdG8tbWVudWAsIHdoaWxlIGhhdmluZyBgb3ZlcmxheTogaGlkZGVuYFxuICAgICAgLy8gc2V0IGJ5IGAuZGl0by1zY3JvbGwtcGFyZW50YCB0byBkZWxlZ2F0ZSBzY3JvbGxpbmcgdG8gYC5kaXRvLXNjcm9sbGAuXG4gICAgICAvLyBJbiBvcmRlciB0byBub3QgaGF2ZSB0aGUgaGVhZGVyIGNsaXBwZWQsIGFkanVzdCB0aGUgdG9wIGhlcmU6XG4gICAgICA+IC5kaXRvLWZvcm0sXG4gICAgICA+IC5kaXRvLXZpZXdcbiAgICAgICAgbWFyZ2luLXRvcDogLSRtZW51LWhlaWdodFxuICAgICAgICBwYWRkaW5nLXRvcDogJG1lbnUtaGVpZ2h0XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgYXNBcnJheSwgc3RyaXBUYWdzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b1VzZXIgZnJvbSAnLi4vRGl0b1VzZXIuanMnXG5pbXBvcnQgRGl0b1ZpZXcgZnJvbSAnLi4vY29tcG9uZW50cy9EaXRvVmlldy52dWUnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgcHJvY2Vzc1ZpZXcsIHJlc29sdmVTY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcm9vdCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICR2aWV3czogKCkgPT4gdGhpcy5yZXNvbHZlZFZpZXdzXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgdW5yZXNvbHZlZFZpZXdzOiB7IHR5cGU6IFtPYmplY3QsIEZ1bmN0aW9uLCBQcm9taXNlXSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBvcHRpb25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzb2x2ZWRWaWV3czoge30sXG4gICAgICBhbGxvd0xvZ2luOiBmYWxzZSxcbiAgICAgIGxvYWRpbmdDb3VudDogMFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy5ub3RpZmljYXRpb25zXG4gICAgfSxcblxuICAgIGlzTG9hZGluZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRpbmdDb3VudCA+IDBcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLmFwcFN0YXRlLnRpdGxlID0gZG9jdW1lbnQudGl0bGUgfHwgJ0RpdG8uanMgQWRtaW4nXG4gICAgLy8gV2l0aCBob3QtcmVsb2FkaW5nLCBpdCBsb29rcyBsaWtlIGRlc3Ryb3llZCBob29rcyBhcmVuJ3QgYWx3YXlzIGNhbGxlZFxuICAgIC8vIGZvciByb3V0ZSBjb21wb25lbnRzIHNvIHJlc2V0IHRoZSBhcnJheSBvZiByZWdpc3RlcmVkIGNvbXBvbmVudHMgaW5zdGVhZC5cbiAgICB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cyA9IFtdXG4gIH0sXG5cbiAgYXN5bmMgbW91bnRlZCgpIHtcbiAgICAvLyBDbGVhciB0aGUgbGFiZWwgbWFya2VkIGFzIGFjdGl2ZSBvbiBhbGwgbW91c2UgYW5kIGtleWJvYXJkIGV2ZW50cywgZXhjZXB0XG4gICAgLy8gdGhlIG9uZXMgdGhhdCBEaXRvTGFiZWwgaXRzZWxmIGludGVyY2VwdHMuXG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgY2xpY2s6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKCFldmVudC50YXJnZXQuY2xvc2VzdCgnLmRpdG8tbGFiZWwnKSkge1xuICAgICAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGtleXVwOiBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5jb2RlID09PSAnVGFiJykge1xuICAgICAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIHRyeSB7XG4gICAgICB0aGlzLmFsbG93TG9naW4gPSBmYWxzZVxuICAgICAgaWYgKGF3YWl0IHRoaXMuZmV0Y2hVc2VyKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlVmlld3MoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICB9XG4gICAgdGhpcy5hbGxvd0xvZ2luID0gdHJ1ZVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBub3RpZnkoeyB0eXBlID0gJ2luZm8nLCB0aXRsZSwgdGV4dCB9ID0ge30pIHtcbiAgICAgIHRpdGxlIHx8PSB7XG4gICAgICAgIHdhcm5pbmc6ICdXYXJuaW5nJyxcbiAgICAgICAgZXJyb3I6ICdFcnJvcicsXG4gICAgICAgIGluZm86ICdJbmZvcm1hdGlvbicsXG4gICAgICAgIHN1Y2Nlc3M6ICdTdWNjZXNzJ1xuICAgICAgfVt0eXBlXSB8fCAnTm90aWZpY2F0aW9uJ1xuICAgICAgdGV4dCA9IGA8cD4ke1xuICAgICAgICBhc0FycmF5KHRleHQpLmpvaW4oJzwvcD4gPHA+JylcbiAgICAgIH08L3A+YC5yZXBsYWNlKC9cXG58XFxyXFxufFxcci9nLCAnPGJyPicpXG4gICAgICBjb25zdCBsb2cgPSB7XG4gICAgICAgIHdhcm5pbmc6ICd3YXJuJyxcbiAgICAgICAgZXJyb3I6ICdlcnJvcicsXG4gICAgICAgIGluZm86ICdsb2cnLFxuICAgICAgICBzdWNjZXNzOiAnbG9nJ1xuICAgICAgfVt0eXBlXSB8fCAnZXJyb3InXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZVtsb2ddKHN0cmlwVGFncyh0ZXh0KSlcbiAgICAgIGNvbnN0IHsgbm90aWZpY2F0aW9ucyA9IHRydWUgfSA9IHRoaXMuYXBpXG4gICAgICBpZiAobm90aWZpY2F0aW9ucykge1xuICAgICAgICAvLyBDYWxjdWxhdGUgZGlzcGxheS1kdXJhdGlvbiBmb3IgdGhlIG5vdGlmaWNhdGlvbiBiYXNlZCBvbiBpdHMgY29udGVudFxuICAgICAgICAvLyBhbmQgdGhlIHNldHRpbmcgb2YgdGhlIGBkdXJhdGlvbkZhY3RvcmAgY29uZmlndXJhdGlvbi4gSXQgZGVmaW5lcyB0aGVcbiAgICAgICAgLy8gYW1vdW50IG9mIG1pbGxpc2Vjb25kcyBtdWx0aXBsaWVkIHdpdGggdGhlIGFtb3VudCBvZiBjaGFyYWN0ZXJzXG4gICAgICAgIC8vIGRpc3BsYXllZCBpbiB0aGUgbm90aWZpY2F0aW9uLCBwbHVzIDQwICg0MCArIHRpdGxlICsgbWVzc2FnZSk6XG4gICAgICAgIGNvbnN0IHsgZHVyYXRpb25GYWN0b3IgPSAyMCB9ID0gbm90aWZpY2F0aW9uc1xuICAgICAgICBjb25zdCBkdXJhdGlvbiA9ICg0MCArIHRleHQubGVuZ3RoICsgdGl0bGUubGVuZ3RoKSAqIGR1cmF0aW9uRmFjdG9yXG4gICAgICAgIHRoaXMuJG5vdGlmeSh7IHR5cGUsIHRpdGxlLCB0ZXh0LCBkdXJhdGlvbiB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbG9zZU5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuZGVzdHJveUFsbCgpXG4gICAgfSxcblxuICAgIHJlZ2lzdGVyTG9hZGluZyhpc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMubG9hZGluZ0NvdW50ICs9IGlzTG9hZGluZyA/IDEgOiAtMVxuICAgIH0sXG5cbiAgICBhc3luYyBsb2dpbigpIHtcbiAgICAgIHRoaXMuYWxsb3dMb2dpbiA9IHRydWVcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYWRkaXRpb25hbENvbXBvbmVudHMsXG4gICAgICAgIHJlZGlyZWN0QWZ0ZXJMb2dpblxuICAgICAgfSA9IHRoaXMub3B0aW9ucy5sb2dpbiB8fCB7fVxuICAgICAgY29uc3QgbG9naW5EYXRhID0gYXdhaXQgdGhpcy5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIHVzZXJuYW1lOiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBhdXRvZm9jdXM6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBhc3N3b3JkOiB7XG4gICAgICAgICAgICB0eXBlOiAncGFzc3dvcmQnXG4gICAgICAgICAgfSxcbiAgICAgICAgICAuLi5hZGRpdGlvbmFsQ29tcG9uZW50c1xuICAgICAgICB9LFxuICAgICAgICBidXR0b25zOiB7XG4gICAgICAgICAgY2FuY2VsOiB7fSxcbiAgICAgICAgICBsb2dpbjogeyB0eXBlOiAnc3VibWl0JyB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBpZiAobG9naW5EYXRhKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5sb2dpbixcbiAgICAgICAgICAgIGRhdGE6IGxvZ2luRGF0YSxcbiAgICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAocmVkaXJlY3RBZnRlckxvZ2luKSB7XG4gICAgICAgICAgICBsb2NhdGlvbi5yZXBsYWNlKHJlZGlyZWN0QWZ0ZXJMb2dpbilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRVc2VyKHJlc3BvbnNlLmRhdGEudXNlcilcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzb2x2ZVZpZXdzKClcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gZXJyLnJlc3BvbnNlPy5kYXRhPy5lcnJvclxuICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICB0aXRsZTogJ0F1dGhlbnRpY2F0aW9uIEVycm9yJyxcbiAgICAgICAgICAgIHRleHQ6IGVycm9yIHx8IGVyclxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5yZXNwb25zZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2dpbigpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbmF2aWdhdGVIb21lKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGUoJy8nKVxuICAgIH0sXG5cbiAgICBhc3luYyBsb2dvdXQoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5sb2dvdXQsXG4gICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuc2V0VXNlcihudWxsKVxuICAgICAgICAgIHRoaXMubmF2aWdhdGVIb21lKClcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFVzZXIoKSB7XG4gICAgICBsZXQgdXNlciA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLnNlc3Npb24sXG4gICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgdXNlciA9IHJlc3BvbnNlLmRhdGEudXNlciB8fCBudWxsXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbiBFcnJvcicsXG4gICAgICAgICAgdGV4dDogZXJyXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICB0aGlzLnNldFVzZXIodXNlcilcbiAgICAgIHJldHVybiB1c2VyXG4gICAgfSxcblxuICAgIHNldFVzZXIodXNlcikge1xuICAgICAgdGhpcy5hcHBTdGF0ZS51c2VyID0gKFxuICAgICAgICB1c2VyICYmXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih1c2VyLCBEaXRvVXNlci5wcm90b3R5cGUpXG4gICAgICApXG4gICAgICAvLyBDbGVhciByZXNvbHZlZCB2aWV3cyB3aGVuIHVzZXIgaXMgbG9nZ2VkIG91dC5cbiAgICAgIGlmICghdXNlcikge1xuICAgICAgICB0aGlzLnJlc29sdmVkVmlld3MgPSB7fVxuICAgICAgICB0aGlzLm5hdmlnYXRlSG9tZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGVuc3VyZVVzZXIoKSB7XG4gICAgICBpZiAoIShhd2FpdCB0aGlzLmZldGNoVXNlcigpKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgcmVzb2x2ZVZpZXdzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFZpZXdzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXModGhpcy51bnJlc29sdmVkVmlld3MpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIWVycm9yLnJlcXVlc3QpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICAgIC8vIENvbGxlY3QgYWxsIHJvdXRlcyBmcm9tIHRoZSByb290IHNjaGVtYSBjb21wb25lbnRzXG4gICAgICBjb25zdCByb3V0ZXMgPSBbXVxuICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXVxuICAgICAgZm9yIChjb25zdCBbbmFtZSwgc2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnJlc29sdmVkVmlld3MpKSB7XG4gICAgICAgIHByb21pc2VzLnB1c2gocHJvY2Vzc1ZpZXcoRGl0b1ZpZXcsIHRoaXMuYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcykpXG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcbiAgICAgIGZvciAoY29uc3Qgcm91dGUgb2Ygcm91dGVzKSB7XG4gICAgICAgIHRoaXMuJHJvdXRlci5hZGRSb3V0ZShyb3V0ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxubmF2LmRpdG8tbWVudS5kaXRvLXNjcm9sbC1wYXJlbnRcbiAgaDEge3sgYXBwU3RhdGUudGl0bGUgfX1cbiAgdWwuZGl0by1zY3JvbGxcbiAgICBsaSh2LWZvcj1cInZpZXcgaW4gdmlld3NcIilcbiAgICAgIHJvdXRlci1saW5rLmRpdG8tbGluayhcbiAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcih2aWV3KVwiXG4gICAgICAgIDp0bz1cImAvJHt2aWV3LnBhdGh9YFwiXG4gICAgICAgIGFjdGl2ZS1jbGFzcz1cImRpdG8tYWN0aXZlXCJcbiAgICAgICkge3sgZ2V0TGFiZWwodmlldykgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIG5hdi5kaXRvLW1lbnUuZGl0by1zY3JvbGwtcGFyZW50XG4gICAgaDEge3sgYXBwU3RhdGUudGl0bGUgfX1cbiAgICB1bC5kaXRvLXNjcm9sbFxuICAgICAgbGkodi1mb3I9XCJ2aWV3IGluIHZpZXdzXCIpXG4gICAgICAgIHJvdXRlci1saW5rLmRpdG8tbGluayhcbiAgICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHZpZXcpXCJcbiAgICAgICAgICA6dG89XCJgLyR7dmlldy5wYXRofWBcIlxuICAgICAgICAgIGFjdGl2ZS1jbGFzcz1cImRpdG8tYWN0aXZlXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbCh2aWV3KSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLW1lbnVcbiAgICBmbGV4OiBpbml0aWFsXG4gICAgZm9udC1zaXplOiAkbWVudS1mb250LXNpemVcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgdWxcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyXG4gICAgICBib3JkZXItcmlnaHQ6ICRib3JkZXItc3R5bGVcbiAgICBhLFxuICAgIGgxXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgIGgxXG4gICAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nXG4gICAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHRcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyXG4gICAgICBib3JkZXItcmlnaHQ6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWRhcmtlc3RcbiAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAuZGl0by1saW5rXG4gICAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nXG4gICAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHRcbiAgICAgICYuZGl0by1hY3RpdmVcbiAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gIC5kaXRvLWxpbmtcbiAgICAmOmZvY3VzOm5vdCg6YWN0aXZlKTpub3QoLmRpdG8tYWN0aXZlKVxuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy1mb2N1c1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1tZW51Jywge30pXG48L3NjcmlwdD5cbiIsIlxuPGRpdiBjbGFzcz1cInYtc3Bpbm5lclwiIHYtc2hvdz1cImxvYWRpbmdcIj5cbiAgICA8ZGl2IGNsYXNzPVwidi1wdWxzZSB2LXB1bHNlMVwiIHYtYmluZDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5MV1cIj5cbiAgICA8L2Rpdj48ZGl2IGNsYXNzPVwidi1wdWxzZSB2LXB1bHNlMlwiIHYtYmluZDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5Ml1cIj5cbiAgICA8L2Rpdj48ZGl2IGNsYXNzPVwidi1wdWxzZSB2LXB1bHNlM1wiIHYtYmluZDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5M11cIj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4iLCI8dGVtcGxhdGU+XG48ZGl2IGNsYXNzPVwidi1zcGlubmVyXCIgdi1zaG93PVwibG9hZGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UxXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkxXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UyXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkyXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UzXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkzXVwiPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIFxuICBuYW1lOiAnUHVsc2VMb2FkZXInLFxuXG4gIHByb3BzOiB7XG4gICAgbG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGNvbG9yOiB7IFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJyM1ZGM1OTYnXG4gICAgfSxcbiAgICBzaXplOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMTVweCdcbiAgICB9LFxuICAgIG1hcmdpbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJzJweCdcbiAgICB9LFxuICAgIHJhZGl1czoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJzEwMCUnXG4gICAgfVxuICB9LFxuICBkYXRhICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3Bpbm5lclN0eWxlOiB7XG4gICAgICBcdGJhY2tncm91bmRDb2xvcjogdGhpcy5jb2xvcixcbiAgICAgIFx0d2lkdGg6IHRoaXMuc2l6ZSxcbiAgICAgICAgaGVpZ2h0OiB0aGlzLnNpemUsXG4gICAgICBcdG1hcmdpbjogdGhpcy5tYXJnaW4sXG4gICAgICBcdGJvcmRlclJhZGl1czogdGhpcy5yYWRpdXMsXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgICAgICBhbmltYXRpb25OYW1lOiAndi1wdWxzZVN0cmV0Y2hEZWxheScsXG4gICAgICAgIGFuaW1hdGlvbkR1cmF0aW9uOiAnMC43NXMnLFxuICAgICAgICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogJ2luZmluaXRlJyxcbiAgICAgICAgYW5pbWF0aW9uVGltaW5nRnVuY3Rpb246ICdjdWJpYy1iZXppZXIoLjIsLjY4LC4xOCwxLjA4KScsXG4gICAgICAgIGFuaW1hdGlvbkZpbGxNb2RlOiAnYm90aCdcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkxOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4xMnMnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5Mjoge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMjRzJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTM6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjM2cydcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cbi8qLnYtc3Bpbm5lclxue1xuICAgIG1hcmdpbjogMTAwcHggYXV0bztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4qL1xuXG5ALXdlYmtpdC1rZXlmcmFtZXMgdi1wdWxzZVN0cmV0Y2hEZWxheVxue1xuICAgIDAlLFxuICAgIDgwJVxuICAgIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMTsgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNDUlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMC43OyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgfVxufVxuXG5Aa2V5ZnJhbWVzIHYtcHVsc2VTdHJldGNoRGVsYXlcbntcbiAgICAwJSxcbiAgICA4MCVcbiAgICB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAtd2Via2l0LW9wYWNpdHk6IDE7ICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDQ1JVxuICAgIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgICAgICAtd2Via2l0LW9wYWNpdHk6IDAuNzsgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMC43O1xuICAgIH1cbn1cbjwvc3R5bGU+IiwiXG5uYXYuZGl0by1oZWFkZXJcbiAgLmRpdG8tdHJhaWxcbiAgICB1bFxuICAgICAgbGkoXG4gICAgICAgIHYtZm9yPVwiKGNvbXBvbmVudCwgaW5kZXgpIGluIHRyYWlsXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUodi1pZj1cImluZGV4ID09PSB0cmFpbC5sZW5ndGggLSAxXCIpXG4gICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgICAgICByb3V0ZXItbGluay5kaXRvLWJyZWFkY3J1bWIodi1lbHNlLCA6dG89XCJjb21wb25lbnQucGF0aFwiKVxuICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgICBzcGlubmVyLmRpdG8tc3Bpbm5lcih2LWlmPVwiaXNMb2FkaW5nXCIpXG4gIHNsb3RcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIG5hdi5kaXRvLWhlYWRlclxuICAgIC5kaXRvLXRyYWlsXG4gICAgICB1bFxuICAgICAgICBsaShcbiAgICAgICAgICB2LWZvcj1cIihjb21wb25lbnQsIGluZGV4KSBpbiB0cmFpbFwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiaW5kZXggPT09IHRyYWlsLmxlbmd0aCAtIDFcIilcbiAgICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgICAgICAgIHJvdXRlci1saW5rLmRpdG8tYnJlYWRjcnVtYih2LWVsc2UsIDp0bz1cImNvbXBvbmVudC5wYXRoXCIpXG4gICAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgICAgIHNwaW5uZXIuZGl0by1zcGlubmVyKHYtaWY9XCJpc0xvYWRpbmdcIilcbiAgICBzbG90XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8taGVhZGVyXG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWJsYWNrXG4gICAgZm9udC1zaXplOiAkbWVudS1mb250LXNpemVcbiAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHRcbiAgICB6LWluZGV4OiAkbWVudS16LWluZGV4XG4gICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgc3BhblxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nXG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLmRpdG8tdHJhaWxcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIGhlaWdodDogM2VtXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aCArICRjb250ZW50LXBhZGRpbmdcbiAgICAgIHVsXG4gICAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGFcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDAuNGVtXG4gICAgICAgICRhbmdsZTogMzNkZWdcbiAgICAgICAgJjpob3ZlclxuICAgICAgICAgIGNvbG9yOiAjOTk5XG4gICAgICAgICY6OmJlZm9yZSxcbiAgICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICAgIHdpZHRoOiAxcHhcbiAgICAgICAgICBoZWlnaHQ6IDEuMmVtXG4gICAgICAgICAgcmlnaHQ6IC0xcHhcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya1xuICAgICAgICAmOjpiZWZvcmVcbiAgICAgICAgICB0b3A6IDUwJVxuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKCRhbmdsZSlcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3BcbiAgICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgICBib3R0b206IDUwJVxuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0kYW5nbGUpXG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tXG4gICAgLmRpdG8tc3Bpbm5lclxuICAgICAgbWFyZ2luLXRvcDogJG1lbnUtcGFkZGluZy12ZXJcbiAgICAuZGl0by1kaXJ0eVxuICAgICAgJjphZnRlclxuICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICAgIHdpZHRoOiA4cHhcbiAgICAgICAgaGVpZ2h0OiA4cHhcbiAgICAgICAgbWFyZ2luOiAycHhcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDAuNWVtXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCVcbiAgICAuZGl0by1hY2NvdW50LFxuICAgIC5kaXRvLWxvZ2luXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIHRvcDogMFxuICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgLmRpdG8tYWNjb3VudFxuICAgICAgbGVmdDogJGNvbnRlbnQtd2lkdGggKyAkY29udGVudC1wYWRkaW5nICogMlxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUHVsc2VMb2FkZXIgZnJvbSAndnVlLXNwaW5uZXIvc3JjL1B1bHNlTG9hZGVyLnZ1ZSdcblxuY29uc3QgU3Bpbm5lciA9IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdzcGlubmVyJywgUHVsc2VMb2FkZXIpXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1oZWFkZXInLCB7XG4gIGNvbXBvbmVudHM6IHsgU3Bpbm5lciB9LFxuXG4gIHByb3BzOiB7XG4gICAgc3Bpbm5lcjoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgaXNMb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmFpbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5maWx0ZXIoXG4gICAgICAgIGNvbXBvbmVudCA9PiAhIWNvbXBvbmVudC5yb3V0ZVJlY29yZFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNpemUgPSAnOHB4JyxcbiAgICAgIGNvbG9yID0gJyM5OTknXG4gICAgfSA9IHRoaXMuc3Bpbm5lciB8fCB7fVxuICAgIGNvbnN0IHsgcHJvcHMgfSA9IFNwaW5uZXIub3B0aW9uc1xuICAgIHByb3BzLnNpemUuZGVmYXVsdCA9IHNpemVcbiAgICBwcm9wcy5jb2xvci5kZWZhdWx0ID0gY29sb3JcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tZGlydHknOiBjb21wb25lbnQuaXNEaXJ0eVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IERvbU1peGluIGZyb20gJy4vRG9tTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwdWxsZG93bjoge1xuICAgICAgICBvcGVuOiBmYWxzZSxcbiAgICAgICAgc3RhcnRUaW1lOiAwLFxuICAgICAgICBjaGVja1RpbWU6IHRydWUsXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIG1vdXNlZG93bjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIG1vdXNldXA6ICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9uUHVsbGRvd25Nb3VzZVVwKG51bGwpKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZXJzOiBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblB1bGxkb3duTW91c2VEb3duKHZhbHVlKSB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKHRydWUpXG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGVja1RpbWUgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duTW91c2VVcCh2YWx1ZSkge1xuICAgICAgY29uc3QgeyBzdGFydFRpbWUgfSA9IHRoaXMucHVsbGRvd25cbiAgICAgIGlmICghdGhpcy5jaGVja1RpbWUgfHwgc3RhcnRUaW1lICYmIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lID4gMjUwKSkge1xuICAgICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5vblB1bGxkb3duU2VsZWN0KHZhbHVlKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25TZWxlY3QoLyogdmFsdWUgKi8pIHtcbiAgICAgIC8vIE5PVEU6IFRvIGJlIG92ZXJyaWRkZW4uXG4gICAgfSxcblxuICAgIHNldFB1bGxkb3duT3BlbihvcGVuKSB7XG4gICAgICB0aGlzLnB1bGxkb3duLm9wZW4gPSBvcGVuXG4gICAgICB0aGlzLnB1bGxkb3duLnN0YXJ0VGltZSA9IG9wZW4gPyBEYXRlLm5vdygpIDogMFxuICAgICAgaWYgKG9wZW4pIHtcbiAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHRoaXMucHVsbGRvd24uZXZlbnRzKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1hY2NvdW50XG4gIGEoXG4gICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgKVxuICAgIHNwYW4ge3sgdXNlci51c2VybmFtZSB9fVxuICB1bC5kaXRvLXB1bGxkb3duKFxuICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gIClcbiAgICBsaShcbiAgICAgIHYtZm9yPVwiKGxhYmVsLCB2YWx1ZSkgb2YgaXRlbXNcIlxuICAgIClcbiAgICAgIGEoXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpXCJcbiAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh2YWx1ZSlcIlxuICAgICAgKSB7eyBsYWJlbCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tYWNjb3VudFxuICAgIGEoXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgIClcbiAgICAgIHNwYW4ge3sgdXNlci51c2VybmFtZSB9fVxuICAgIHVsLmRpdG8tcHVsbGRvd24oXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIlxuICAgIClcbiAgICAgIGxpKFxuICAgICAgICB2LWZvcj1cIihsYWJlbCwgdmFsdWUpIG9mIGl0ZW1zXCJcbiAgICAgIClcbiAgICAgICAgYShcbiAgICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHZhbHVlKVwiXG4gICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh2YWx1ZSlcIlxuICAgICAgICApIHt7IGxhYmVsIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tYWNjb3VudFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC5kaXRvLXB1bGxkb3duXG4gICAgICB0b3A6ICRwdWxsZG93bi1wYWRkaW5nLXZlclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUHVsbGRvd25NaXhpbiBmcm9tICcuLi9taXhpbnMvUHVsbGRvd25NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWFjY291bnQnLCB7XG4gIG1peGluczogW1B1bGxkb3duTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiB7XG4gICAgICAgIHNldHRpbmdzOiAnU2V0dGluZ3MnLFxuICAgICAgICBsb2dvdXQ6ICdMb2dvdXQnXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblB1bGxkb3duU2VsZWN0KHZhbHVlKSB7XG4gICAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICBjYXNlICdsb2dvdXQnOlxuICAgICAgICB0aGlzLnJvb3RDb21wb25lbnQubG9nb3V0KClcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3NldHRpbmdzJzpcbiAgICAgICAgY29uc29sZS5pbmZvKCdUT0RPOiBJbXBsZW1lbnQgU2V0dGluZ3MnKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5mb3JtLmRpdG8tZGlhbG9nKEBzdWJtaXQucHJldmVudD1cIlwiKVxuICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICApXG4gICAgZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGZvcm0uZGl0by1kaWFsb2coQHN1Ym1pdC5wcmV2ZW50PVwiXCIpXG4gICAgZGl0by1zY2hlbWEuZGl0by1zY3JvbGwoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC52LS1tb2RhbC1vdmVybGF5XG4gICAgei1pbmRleDogMjAwMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNsb25lIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJ0BkaXRvanMvdWknXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWRpYWxvZycsIHtcbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGRpYWxvZ0NvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIGNvbXBvbmVudHM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHByb21pc2U6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIC8vIE1ha2Ugc3VyZSBkaWFsb2cgZGF0YSBjb250YWlucyBhbGwgdGhlIGV4cGVjdGVkIGtleXNcbiAgICBjb25zdCBkaWFsb2dEYXRhID0gY2xvbmUodGhpcy5kYXRhKVxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgaWYgKCEoa2V5IGluIGRpYWxvZ0RhdGEpKSB7XG4gICAgICAgIGRpYWxvZ0RhdGFba2V5XSA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpbmRvd0V2ZW50czogbnVsbCxcbiAgICAgIGRpYWxvZ0RhdGFcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHBhcmVudC5uYW1lXG4gICAgfSxcblxuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbXBvbmVudHM6IHRoaXMuY29tcG9uZW50c1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGdldEJ1dHRvblNjaGVtYXModGhpcy5idXR0b25zKSkucmVkdWNlKFxuICAgICAgICAvLyBQcm9jZXNzIHRoZSBidXR0b24gc2NoZW1hcyB0byBhZGQgZGVmYXVsdCBjbGljayBldmVudHNcbiAgICAgICAgLy8gZm9yIGJvdGggJ3N1Ym1pdCcgYW5kICdjYW5jZWwnIGJ1dHRvbnM6XG4gICAgICAgIChzY2hlbWFzLCBba2V5LCBzY2hlbWFdKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyB0eXBlLCBldmVudHMgfSA9IHNjaGVtYVxuICAgICAgICAgIGlmICghZXZlbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBjbGljayA9IHR5cGUgPT09ICdzdWJtaXQnID8gKCkgPT4gdGhpcy5hY2NlcHQoKVxuICAgICAgICAgICAgICA6IGtleSA9PT0gJ2NhbmNlbCcgPyAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgaWYgKGNsaWNrKSB7XG4gICAgICAgICAgICAgIHNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgICAgICAgZXZlbnRzOiB7IGNsaWNrIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBzY2hlbWFzW2tleV0gPSBzY2hlbWFcbiAgICAgICAgICByZXR1cm4gc2NoZW1hc1xuICAgICAgICB9LFxuICAgICAgICB7fVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNDYW5jZWwoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5idXR0b25TY2hlbWFzKS5pbmNsdWRlcygnY2FuY2VsJylcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLndpbmRvd0V2ZW50cyA9IGFkZEV2ZW50cyh3aW5kb3csIHtcbiAgICAgIGtleXVwOiAoKSA9PiB7XG4gICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAyNykge1xuICAgICAgICAgIHRoaXMuY2FuY2VsKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgZGVzdHJveWVkKCkge1xuICAgIHRoaXMud2luZG93RXZlbnRzLnJlbW92ZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhpZGUoKSB7XG4gICAgICB0aGlzLiRtb2RhbC5oaWRlKHRoaXMubmFtZSlcbiAgICB9LFxuXG4gICAgcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlc29sdmUodmFsdWUpXG4gICAgICB0aGlzLmhpZGUoKVxuICAgIH0sXG5cbiAgICByZWplY3QodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvbWlzZS5yZWplY3QodmFsdWUpXG4gICAgICB0aGlzLmhpZGUoKVxuICAgIH0sXG5cbiAgICBhY2NlcHQoKSB7XG4gICAgICB0aGlzLnJlc29sdmUodGhpcy5kaWFsb2dEYXRhKVxuICAgIH0sXG5cbiAgICBjYW5jZWwoKSB7XG4gICAgICBpZiAodGhpcy5oYXNDYW5jZWwpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlKG51bGwpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudChcbiAgdi1pZj1cImNvbnRlbnRcIlxuICA6aXM9XCJvcHRpb25zLnRhZyB8fCB0YWdcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbikge3sgb3B0aW9ucy50ZXh0IH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBjb21wb25lbnQoXG4gICAgdi1pZj1cImNvbnRlbnRcIlxuICAgIDppcz1cIm9wdGlvbnMudGFnIHx8IHRhZ1wiXG4gICAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKSB7eyBvcHRpb25zLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZWxlbWVudCcsIHtcbiAgcHJvcHM6IHtcbiAgICB0YWc6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc3BhbicgfSxcbiAgICBjb250ZW50OiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0gfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IHsgY29udGVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KGNvbnRlbnQpID8gY29udGVudCA6IHsgdGV4dDogY29udGVudCB9XG4gICAgfSxcblxuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLiRhdHRycy5jbGFzcyxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLmNsYXNzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdHlsZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLiRhdHRycy5zdHlsZSxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLnN0eWxlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuZnVuY3Rpb24gYXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLnJlZHVjZSgob2JqZWN0LCBlbnRyeSkgPT4ge1xuICAgIGlmIChpc1N0cmluZyhlbnRyeSkpIHtcbiAgICAgIG9iamVjdFtlbnRyeV0gPSB0cnVlXG4gICAgfSBlbHNlIGlmIChpc09iamVjdChlbnRyeSkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqZWN0LCBlbnRyeSlcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdFxuICB9LCB7fSlcbn1cblxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudC5kaXRvLWxhYmVsKFxuICB2LWlmPVwidGV4dCB8fCBjb2xsYXBzaWJsZVwiXG4gIDppcz1cInRhZ1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuKVxuICAuZGl0by1jaGV2cm9uKFxuICAgIHYtaWY9XCJjb2xsYXBzaWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiAhY29sbGFwc2VkIH1cIlxuICApXG4gIGRpdG8tZWxlbWVudC5kaXRvLWxhYmVsLXByZWZpeChcbiAgICB2LWZvcj1cIihwcmVmaXgsIGluZGV4KSBvZiBwcmVmaXhlc1wiXG4gICAgdGFnPVwic3BhblwiXG4gICAgOmtleT1cImBwcmVmaXgtJHtpbmRleH1gXCJcbiAgICA6Y29udGVudD1cInByZWZpeFwiXG4gIClcbiAgbGFiZWwoOmZvcj1cImRhdGFQYXRoXCIgdi1odG1sPVwidGV4dFwiKVxuICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1zdWZmaXgoXG4gICAgdi1mb3I9XCIoc3VmZml4LCBpbmRleCkgb2Ygc3VmZml4ZXNcIlxuICAgIHRhZz1cInNwYW5cIlxuICAgIDprZXk9XCJgc3VmZml4LSR7aW5kZXh9YFwiXG4gICAgOmNvbnRlbnQ9XCJzdWZmaXhcIlxuICApXG4gIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgY29tcG9uZW50LmRpdG8tbGFiZWwoXG4gICAgdi1pZj1cInRleHQgfHwgY29sbGFwc2libGVcIlxuICAgIDppcz1cInRhZ1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbiAgKVxuICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICB2LWlmPVwiY29sbGFwc2libGVcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiAhY29sbGFwc2VkIH1cIlxuICAgIClcbiAgICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1wcmVmaXgoXG4gICAgICB2LWZvcj1cIihwcmVmaXgsIGluZGV4KSBvZiBwcmVmaXhlc1wiXG4gICAgICB0YWc9XCJzcGFuXCJcbiAgICAgIDprZXk9XCJgcHJlZml4LSR7aW5kZXh9YFwiXG4gICAgICA6Y29udGVudD1cInByZWZpeFwiXG4gICAgKVxuICAgIGxhYmVsKDpmb3I9XCJkYXRhUGF0aFwiIHYtaHRtbD1cInRleHRcIilcbiAgICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1zdWZmaXgoXG4gICAgICB2LWZvcj1cIihzdWZmaXgsIGluZGV4KSBvZiBzdWZmaXhlc1wiXG4gICAgICB0YWc9XCJzcGFuXCJcbiAgICAgIDprZXk9XCJgc3VmZml4LSR7aW5kZXh9YFwiXG4gICAgICA6Y29udGVudD1cInN1ZmZpeFwiXG4gICAgKVxuICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWxhYmVsXG4gICAgLS1sYWJlbC1wYWRkaW5nOiAwXG4gICAgLy8gRm9yIGJ1dHRvbnMgYW5kIGNoZXZyb24gdG8gYWxpZ24gcmlnaHQ6XG4gICAgZGlzcGxheTogZmxleFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC8vIFZlcnRpY2FsbHkgY2VudGVyIGFsbCBpdGVtcyBpbiB0aGUgbGFiZWwsIGUuZy4gY2hldnJvbiwgZWRpdC1idXR0b25zLlxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXJcbiAgICBwYWRkaW5nOiB2YXIoLS1sYWJlbC1wYWRkaW5nKVxuICAgIG1hcmdpbjogMCAwICRmb3JtLXNwYWNpbmctaGFsZiAwXG5cbiAgICBsYWJlbFxuICAgICAgZGlzcGxheTogaW5saW5lXG4gICAgICBjdXJzb3I6IGluaGVyaXRcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG5cbiAgICBsYWJlbCxcbiAgICAuZGl0by1sYWJlbC1wcmVmaXgsXG4gICAgLmRpdG8tbGFiZWwtc3VmZml4XG4gICAgICAmOm50aC1sYXN0LWNoaWxkKDIpXG4gICAgICAgIC8vIFRvIHN0cmV0Y2ggZWl0aGVyIGxhYmVsIG9yIC5kaXRvLWxhYmVsLXN1ZmZpeCB0byBmdWxsIGF2YWlsYWJsZSB3aWR0aFxuICAgICAgICAvLyBzbyB0aGF0IGJ1dHRvbnMgYWx3YXlzIGFwcGVhciByaWdodC1hbGlnbmVkOlxuICAgICAgICBmbGV4OiAxIDEgYXV0b1xuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgY29udGVudDogJ1xcYTAnIC8vICZuYnBzO1xuXG4gICAgLmRpdG8tbGFiZWwtcHJlZml4LFxuICAgIC5kaXRvLWxhYmVsLXN1ZmZpeFxuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICArZWxsaXBzaXNcblxuICAgIC5kaXRvLWJ1dHRvbnNcbiAgICAgIC8vIE1vdmUgdGhlIGxhYmVsIHBhZGRpbmcgaW5zaWRlIC5kaXRvLWJ1dHRvbnMsIHNvIHRoYXQgaXQgY2FwdHVyZXMgYWxsXG4gICAgICAvLyBuZWFyIG1vdXNlIGV2ZW50czpcbiAgICAgIG1hcmdpbjogY2FsYygtMSAqIHZhcigtLWxhYmVsLXBhZGRpbmcpKVxuICAgICAgbWFyZ2luLWxlZnQ6IDBcbiAgICAgIHBhZGRpbmc6IHZhcigtLWxhYmVsLXBhZGRpbmcpXG5cbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIC8vIEluIG9yZGVyIGZvciBlbGxpcHNpcyB0byB3b3JrIG9uIGxhYmVscyB3aXRob3V0IGFmZmVjdGluZyBvdGhlciBsYXlvdXQsXG4gICAgICAvLyB3ZSBuZWVkIHRvIHBvc2l0aW9uIGl0IGFic29sdXRlbHkgaW5zaWRlIGl0cyBjb250YWluZXIuXG4gICAgICBsYWJlbFxuICAgICAgICArZWxsaXBzaXNcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgIG1heC13aWR0aDogMTAwJVxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gU2luY2UgPGxhYmVsPiB1c2VzIGBwb3NpdGlvbjogYWJzb2x1dGVgLCBzZXQgY29udGVudCB0byBhIHplcm8td2lkdGhcbiAgICAgICAgLy8gc3BhY2Ugb24gaXRzIHBhcmVudCB0byBlbmZvcmNlIHRoZSByaWdodCB0ZXh0IGhlaWdodCBpbiB0aGUgY29udGFpbmVyXG4gICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInIC8vIHplcm8td2lkdGggc3BhY2VcblxuICBhLmRpdG8tbGFiZWxcbiAgICAmOmhvdmVyXG4gICAgICAuZGl0by1jaGV2cm9uXG4gICAgICAgIGNvbG9yOiAkY29sb3ItZGFya2VyXG4gICAgJjpmb2N1czpub3QoOmFjdGl2ZSk6bm90KC5kaXRvLWFjdGl2ZSlcbiAgICAgIC5kaXRvLWNoZXZyb25cbiAgICAgICAgLXdlYmtpdC10ZXh0LXN0cm9rZTogJGJvcmRlci13aWR0aCAkY29sb3ItYWN0aXZlXG5cbiAgLy8gRGlzcGxheSBsYWJlbHMgaW4gY29tcGFjdCBzY2hlbWEgYXMgaW5saW5lLWJsb2NrcywgdG8gYWxsb3cgY29tcGFjdCBsYXlvdXRzXG4gIC8vIHdpdGggYHdpZHRoOiAnYXV0bydgIGVsZW1lbnRzOlxuICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byBjb250cm9sIHRoaXMgYmVoYXZpb3IuXG4gIC5kaXRvLXNjaGVtYS1jb21wYWN0XG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgPiAuZGl0by1wYW5lXG4gICAgICAgID4gLmRpdG8tY29udGFpbmVyXG4gICAgICAgICAgPiAuZGl0by1sYWJlbDpub3QoLmRpdG8tbGFiZWwtY29tcG9uZW50KVxuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWxhYmVsJywge1xuICBwcm9wczoge1xuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZSA/ICdhJyA6ICdkaXYnXG4gICAgfSxcblxuICAgIHRleHQoKSB7XG4gICAgICBjb25zdCB7IGxhYmVsIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNPYmplY3QobGFiZWwpID8gbGFiZWw/LnRleHQgOiBsYWJlbFxuICAgIH0sXG5cbiAgICBwcmVmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnByZWZpeClcbiAgICB9LFxuXG4gICAgc3VmZml4ZXMoKSB7XG4gICAgICByZXR1cm4gYXNBcnJheSh0aGlzLmxhYmVsPy5zdWZmaXgpXG4gICAgfSxcblxuICAgIGxpc3RlbmVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLih0aGlzLmNvbGxhcHNpYmxlICYmIHtcbiAgICAgICAgICBjbGljazogdGhpcy5vbkNsaWNrXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPT09IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2soKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gdGhpc1xuICAgICAgdGhpcy4kZW1pdCgnZXhwYW5kJywgdGhpcy5jb2xsYXBzZWQpXG4gICAgfVxuICB9XG59KVxuXG48L3NjcmlwdD5cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7XG4gIGdldEl0ZW1Gb3JtU2NoZW1hLCBnZXRJdGVtSWQsIGdldEl0ZW1VaWQsIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWEsXG5cbiAgICBnZXRJdGVtVWlkLFxuXG4gICAgZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXggPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudCAmJiBpbmRleCAhPT0gbnVsbFxuICAgICAgICA/IFN0cmluZyhpbmRleClcbiAgICAgICAgOiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKVxuICAgIH0sXG5cbiAgICBnZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkge1xuICAgICAgbGV0IHsgZGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGlmIChzb3VyY2VTY2hlbWEgIT09IHRoaXMuc2NoZW1hKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNvdXJjZVNjaGVtYS5uYW1lKVxuICAgICAgfVxuICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgaW5kZXgpXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgZmluZEl0ZW1JZEluZGV4KHNvdXJjZVNjaGVtYSwgZGF0YSwgaXRlbUlkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgLy8gRm9yIHRyYW5zaWVudCBkYXRhLCB0aGUgaW5kZXggaXMgdXNlZCBhcyB0aGUgaWRcbiAgICAgICAgPyBpdGVtSWRcbiAgICAgICAgOiBkYXRhPy5maW5kSW5kZXgoXG4gICAgICAgICAgKGl0ZW0sIGluZGV4KSA9PlxuICAgICAgICAgICAgdGhpcy5nZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCkgPT09IGl0ZW1JZFxuICAgICAgICApXG4gICAgICByZXR1cm4gaW5kZXggIT09IC0xID8gaW5kZXggOiBudWxsXG4gICAgfSxcblxuICAgIGdldEl0ZW1MYWJlbChzb3VyY2VTY2hlbWEsIGl0ZW0sIHtcbiAgICAgIGluZGV4ID0gbnVsbCxcbiAgICAgIGV4dGVuZGVkID0gZmFsc2UsXG4gICAgICBhc09iamVjdCA9IGZhbHNlXG4gICAgfSA9IHt9KSB7XG4gICAgICBjb25zdCB7IGl0ZW1MYWJlbCB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAoIWl0ZW0gfHwgIWV4dGVuZGVkICYmIGl0ZW1MYWJlbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgbGV0IGRhdGFQYXRoXG4gICAgICBjb25zdCBnZXREYXRhUGF0aCA9ICgpID0+XG4gICAgICAgIChkYXRhUGF0aCB8fD0gdGhpcy5nZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkpXG5cbiAgICAgIGxldCBmb3JtTGFiZWxcbiAgICAgIGNvbnN0IGdldEZvcm1MYWJlbCA9ICgpID0+XG4gICAgICAgIChmb3JtTGFiZWwgfHw9IHRoaXMuZ2V0TGFiZWwoXG4gICAgICAgICAgZ2V0SXRlbUZvcm1TY2hlbWEoc291cmNlU2NoZW1hLCBpdGVtLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICkpXG5cbiAgICAgIGxldCB0ZXh0XG4gICAgICBsZXQgcHJlZml4XG4gICAgICBsZXQgc3VmZml4XG4gICAgICBpZiAoaXNGdW5jdGlvbihpdGVtTGFiZWwpKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbUxhYmVsLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgbmVzdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgICAgIGluZGV4LFxuXG4gICAgICAgICAgICBnZXQgZGF0YVBhdGgoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXREYXRhUGF0aCgpXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZXQgZm9ybUxhYmVsKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Rm9ybUxhYmVsKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIGlmIChpc09iamVjdChsYWJlbCkpIHtcbiAgICAgICAgICAoeyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9ID0gbGFiZWwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dCA9IGxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgLy8gSXQncyB1cCB0byBgaXRlbUxhYmVsKClgIGVudGlyZWx5IHRvIHByb2R1Y2UgdGhlIGxhYmVsOlxuICAgICAgICBleHRlbmRlZCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMb29rIHVwIHRoZSBuYW1lIG9uIHRoZSBpdGVtLCBieSB0aGVzZSBydWxlczpcbiAgICAgICAgLy8gMS4gSWYgYGl0ZW1MYWJlbGAgaXMgYSBzdHJpbmcsIHVzZSBpdCBhcyB0aGUgcHJvcGVydHkga2V5XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgdGhlcmUgYXJlIGNvbHVtbnMsIHVzZSB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0XG4gICAgICAgIC8vIDMuIE90aGVyd2lzZSwgc2VlIGlmIHRoZSBpdGVtIGhhcyBhIHByb3BlcnR5IG5hbWVkICduYW1lJ1xuICAgICAgICBjb25zdCB7IGNvbHVtbnMgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgICBjb25zdCBrZXkgPSAoXG4gICAgICAgICAgaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiBpdGVtTGFiZWwgfHxcbiAgICAgICAgICBpc0xpc3RTb3VyY2Uoc291cmNlU2NoZW1hKSAmJiBjb2x1bW5zICYmIE9iamVjdC5rZXlzKGNvbHVtbnMpWzBdIHx8XG4gICAgICAgICAgJ25hbWUnXG4gICAgICAgIClcbiAgICAgICAgdGV4dCA9IGl0ZW1ba2V5XVxuICAgICAgfVxuICAgICAgY29uc3QgaGFkTGFiZWwgPSAhIXRleHRcbiAgICAgIHRleHQgPSB0ZXh0IHx8ICcnXG4gICAgICAvLyBJZiBubyBsYWJlbCB3YXMgZm91bmQgc28gZmFyLCB0cnkgdG8gcHJvZHVjZSBvbmUgZnJvbSB0aGVpbmRleC5cbiAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAvLyBBbHdheXMgdXNlIGV4dGVuZGVkIHN0eWxlIHdoZW4gYXV0by1nZW5lcmF0aW5nIGxhYmVscyBmcm9tIGluZGV4L2lkOlxuICAgICAgICBleHRlbmRlZCA9IHRydWVcbiAgICAgICAgaWYgKGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgdGV4dCA9IGAke2luZGV4ICsgMX1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChleHRlbmRlZCkge1xuICAgICAgICBjb25zdCBmb3JtTGFiZWwgPSBnZXRGb3JtTGFiZWwoKVxuICAgICAgICBpZiAoZm9ybUxhYmVsKSB7XG4gICAgICAgICAgLy8gSWYgYSBsYWJlbCB3YXMgcHJvdmlkZWQsIHB1dCBpbiBxdW90ZXMgd2hlbiBwcmVmaXhlZCB3aXRoIHRoZVxuICAgICAgICAgIC8vIGZvcm0gbGFiZWwgZm9yIHRoZSBleHRlbmRlZCBzdHlsZTpcbiAgICAgICAgICB0ZXh0ID0gYCR7Zm9ybUxhYmVsfSAke2hhZExhYmVsID8gYCcke3RleHR9J2AgOiB0ZXh0fWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzT2JqZWN0ID8geyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9IDogdGV4dFxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1zY2hlbWFcbiAgLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAuZGl0by1zY2hlbWEtaGVhZGVyKFxuICAgICAgdi1pZj1cImhhc0xhYmVsIHx8IGhhc1RhYnMgfHwgY2xpcGJvYXJkXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLW1lbnUtaGVhZGVyJzogbWVudUhlYWRlciB9XCJcbiAgICApXG4gICAgICBkaXRvLWxhYmVsKFxuICAgICAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICA6Y29sbGFwc2VkPVwiIW9wZW5lZFwiXG4gICAgICAgIEBleHBhbmQ9XCJvbkV4cGFuZFwiXG4gICAgICApXG4gICAgICAgIC8vIFBhc3MgZWRpdC1idXR0b25zIHRocm91Z2ggdG8gZGl0by1sYWJlbCdzIG93biBlZGl0LWJ1dHRvbnMgc2xvdDpcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgI2VkaXQtYnV0dG9uc1xuICAgICAgICAgIHYtaWY9XCJpbmxpbmVkXCJcbiAgICAgICAgKVxuICAgICAgICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuICAgICAgZGl0by10YWJzKFxuICAgICAgICB2LWlmPVwidGFic1wiXG4gICAgICAgIDp0YWJzPVwidGFic1wiXG4gICAgICAgIDpzZWxlY3RlZFRhYj1cInNlbGVjdGVkVGFiXCJcbiAgICAgIClcbiAgICAgIGRpdG8tY2xpcGJvYXJkKFxuICAgICAgICA6Y2xpcGJvYXJkPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgKVxuICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtdGFiKFxuICAgICAgdi1pZj1cImhhc1RhYnNcIlxuICAgICAgdi1mb3I9XCIoc2NoZW1hLCB0YWIpIGluIHRhYnNcIlxuICAgICAgcmVmPVwidGFic1wiXG4gICAgICA6a2V5PVwidGFiXCJcbiAgICAgIDp2aXNpYmxlPVwic2VsZWN0ZWRUYWIgPT09IHRhYlwiXG4gICAgICA6dGFiPVwidGFiXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc01haW5QYW5lXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICApXG4gICAgdHJhbnNpdGlvbi1oZWlnaHQoXG4gICAgICA6ZW5hYmxlZD1cImlubGluZWRcIlxuICAgIClcbiAgICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtbWFpbihcbiAgICAgICAgdi1pZj1cImhhc01haW5QYW5lICYmIG9wZW5lZFwiXG4gICAgICAgIHJlZj1cImNvbXBvbmVudHNcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzVGFic1wiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgIHNsb3QoXG4gICAgICBuYW1lPVwiYnV0dG9uc1wiXG4gICAgICB2LWlmPVwiIWlubGluZWQgJiYgaXNQb3B1bGF0ZWRcIlxuICAgIClcbiAgdGVtcGxhdGUodi1pZj1cImlubGluZWRcIilcbiAgICBzbG90KFxuICAgICAgdi1pZj1cIiFoYXNMYWJlbFwiXG4gICAgICBuYW1lPVwiZWRpdC1idXR0b25zXCJcbiAgICApXG4gIHRlbXBsYXRlKHYtZWxzZS1pZj1cImlzUG9wdWxhdGVkXCIpXG4gICAgZGl0by1wYW5lbHMoXG4gICAgICA6cGFuZWxzPVwicGFuZWxTY2hlbWFzXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXNjaGVtYVxuICAgIC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICAuZGl0by1zY2hlbWEtaGVhZGVyKFxuICAgICAgICB2LWlmPVwiaGFzTGFiZWwgfHwgaGFzVGFicyB8fCBjbGlwYm9hcmRcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1tZW51LWhlYWRlcic6IG1lbnVIZWFkZXIgfVwiXG4gICAgICApXG4gICAgICAgIGRpdG8tbGFiZWwoXG4gICAgICAgICAgdi1pZj1cImhhc0xhYmVsXCJcbiAgICAgICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICA6Y29sbGFwc2VkPVwiIW9wZW5lZFwiXG4gICAgICAgICAgQGV4cGFuZD1cIm9uRXhwYW5kXCJcbiAgICAgICAgKVxuICAgICAgICAgIC8vIFBhc3MgZWRpdC1idXR0b25zIHRocm91Z2ggdG8gZGl0by1sYWJlbCdzIG93biBlZGl0LWJ1dHRvbnMgc2xvdDpcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICNlZGl0LWJ1dHRvbnNcbiAgICAgICAgICAgIHYtaWY9XCJpbmxpbmVkXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbiAgICAgICAgZGl0by10YWJzKFxuICAgICAgICAgIHYtaWY9XCJ0YWJzXCJcbiAgICAgICAgICA6dGFicz1cInRhYnNcIlxuICAgICAgICAgIDpzZWxlY3RlZFRhYj1cInNlbGVjdGVkVGFiXCJcbiAgICAgICAgKVxuICAgICAgICBkaXRvLWNsaXBib2FyZChcbiAgICAgICAgICA6Y2xpcGJvYXJkPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgKVxuICAgICAgZGl0by1wYW5lLmRpdG8tcGFuZS10YWIoXG4gICAgICAgIHYtaWY9XCJoYXNUYWJzXCJcbiAgICAgICAgdi1mb3I9XCIoc2NoZW1hLCB0YWIpIGluIHRhYnNcIlxuICAgICAgICByZWY9XCJ0YWJzXCJcbiAgICAgICAgOmtleT1cInRhYlwiXG4gICAgICAgIDp2aXNpYmxlPVwic2VsZWN0ZWRUYWIgPT09IHRhYlwiXG4gICAgICAgIDp0YWI9XCJ0YWJcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzTWFpblBhbmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgIClcbiAgICAgIHRyYW5zaXRpb24taGVpZ2h0KFxuICAgICAgICA6ZW5hYmxlZD1cImlubGluZWRcIlxuICAgICAgKVxuICAgICAgICBkaXRvLXBhbmUuZGl0by1wYW5lLW1haW4oXG4gICAgICAgICAgdi1pZj1cImhhc01haW5QYW5lICYmIG9wZW5lZFwiXG4gICAgICAgICAgcmVmPVwiY29tcG9uZW50c1wiXG4gICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNUYWJzXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgICApXG4gICAgICBzbG90KFxuICAgICAgICBuYW1lPVwiYnV0dG9uc1wiXG4gICAgICAgIHYtaWY9XCIhaW5saW5lZCAmJiBpc1BvcHVsYXRlZFwiXG4gICAgICApXG4gICAgdGVtcGxhdGUodi1pZj1cImlubGluZWRcIilcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCIhaGFzTGFiZWxcIlxuICAgICAgICBuYW1lPVwiZWRpdC1idXR0b25zXCJcbiAgICAgIClcbiAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJpc1BvcHVsYXRlZFwiKVxuICAgICAgZGl0by1wYW5lbHMoXG4gICAgICAgIDpwYW5lbHM9XCJwYW5lbFNjaGVtYXNcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zY2hlbWFcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgLy8gVG8gZGlzcGxheSBzY2hlbWEgbmV4dCB0byBwYW5lbHM6XG4gICAgZGlzcGxheTogZmxleFxuICAgIG1pbi1oZWlnaHQ6IDEwMCVcbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICBmbGV4OiAxIDEgMTAwJVxuICAgICAgLy8gU28gdGhhdCBzY2hlbWEgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgICBkaXNwbGF5OiBncmlkXG4gICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICA+ICo6b25seS1jaGlsZFxuICAgICAgICBncmlkLXJvdy1lbmQ6IG5vbmVcbiAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgIHBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmdcbiAgICA+IC5kaXRvLWJ1dHRvbnMsXG4gICAgPiAuZGl0by1wYW5lbHNcbiAgICAgIGZsZXg6IDEgMSAwJVxuICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmdcbiAgICA+IC5kaXRvLXBhbmVsc1xuICAgICAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZyAkY29udGVudC1wYWRkaW5nICRjb250ZW50LXBhZGRpbmcgMFxuICAgIC8vIERpc3BsYXkgYSBydWxlciBiZXR3ZWVuIHRhYmJlZCBjb21wb25lbnRzIGFuZCB0b3dhcmRzIHRoZSAuZGl0by1idXR0b25zXG4gICAgLmRpdG8tcGFuZS10YWIgKyAuZGl0by1wYW5lLW1haW5cbiAgICAgICY6OmJlZm9yZVxuICAgICAgICAvLyBVc2UgYSBwc2V1ZG8gZWxlbWVudCB0byBkaXNwbGF5IGEgcnVsZXIgd2l0aCBwcm9wZXIgbWFyZ2luc1xuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXN0eWxlXG4gICAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW4gdG8gdGhlIHJ1bGVyXG4gICAgICAgIG1hcmdpbjogJGNvbnRlbnQtcGFkZGluZyAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZy1oYWxmXG4gIC5kaXRvLXNjaGVtYS1oZWFkZXJcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgLmRpdG8tdGFicyxcbiAgICAuZGl0by1jbGlwYm9hcmRcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kXG4gICAgLmRpdG8tY2xpcGJvYXJkXG4gICAgICAmOm9ubHktY2hpbGRcbiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG9cbiAgICAgIC5kaXRvLWJ1dHRvblxuICAgICAgICBtYXJnaW46IDAgMCAkdGFiLW1hcmdpbiAkdGFiLW1hcmdpblxuICAgICYuZGl0by1zY2hlbWEtbWVudS1oZWFkZXJcbiAgICAgIC8vIEJyaW5nIHRoZSB0YWJzIHVwIHRvIHRoZSBtZW51LlxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICBoZWlnaHQ6ICRtZW51LWhlaWdodFxuICAgICAgcGFkZGluZzogMCAkbWVudS1wYWRkaW5nLWhvclxuICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aFxuICAgICAgdG9wOiAwXG4gICAgICBsZWZ0OiAwXG4gICAgICByaWdodDogMFxuICAgICAgei1pbmRleDogJG1lbnUtei1pbmRleFxuICAgICAgLy8gVHVybiBvZmYgcG9pbnRlciBldmVudHMgc28gdGhhdCBEaXRvVHJhaWwga2VlcHMgcmVjZWl2aW5nIGV2ZW50cy4uLlxuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmVcbiAgICAgIC8vIC4uLmJ1dCBhbGxvdyBpbnRlcmFjdGlvbiB3aXRoIHRoZSB0YWJzIGFuZCBidXR0b25zIChlLmcuIGNsaXBib2FyZClcbiAgICAgIC8vIGxheWVyZWQgb24gdG9wIG9mIERpdG9UcmFpbC5cbiAgICAgIC5kaXRvLXRhYnMsXG4gICAgICAuZGl0by1idXR0b25zXG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIGJ1dHRvbi5kaXRvLWxhYmVsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgLy8gQ2F0Y2ggYWxsIGNsaWNrcywgZXZlbiB3aGVuIGl0IHdvdWxkIGJlIHBhcnRpYWxseSBjb3ZlcmVkIGJ5IHNjaGVtYS5cbiAgICAgIHotaW5kZXg6IDFcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNBcnJheSwgaXNGdW5jdGlvbiwgaXNSZWdFeHAsXG4gIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoLCBsYWJlbGl6ZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgVHJhbnNpdGlvbkhlaWdodCB9IGZyb20gJ0BkaXRvanMvdWknXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuLi9taXhpbnMvSXRlbU1peGluLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGgsIGdldFBhcmVudEl0ZW0gfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgZ2V0TmFtZWRTY2hlbWFzLCBnZXRQYW5lbFNjaGVtYXMsIHNldERlZmF1bHRzLCBwcm9jZXNzRGF0YVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTdG9yZUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1zY2hlbWEnLCB7XG4gIGNvbXBvbmVudHM6IHsgVHJhbnNpdGlvbkhlaWdodCB9LFxuICBtaXhpbnM6IFtJdGVtTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJyRzY2hlbWFQYXJlbnRDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGlubGluZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhhc093bkRhdGE6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBtZW51SGVhZGVyOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICByZXR1cm4ge1xuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIHByb3ZpZGUgbW9yZSBkYXRhIHRocm91Z2ggYHNjaGVtYS5kYXRhYCwgdnVlLXN0eWxlOlxuICAgICAgLi4uKFxuICAgICAgICBkYXRhICYmIGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgICA/IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgOiBkYXRhXG4gICAgICApLFxuICAgICAgY29tcG9uZW50c1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZWxzUmVnaXN0cnk6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgc2NoZW1hQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBEb24ndCByZXR1cm4gdGhlIGFjdHVhbCBwYXJlbnQgc2NoZW1hIGlzIHRoaXMgc2NoZW1hIGhhbmRsZXMgaXRzIG93blxuICAgICAgLy8gZGF0YS4gVGhpcyBwcmV2ZW50cyBkZWxlZ2F0aW5nIGV2ZW50cyB0byB0aGUgcGFyZW50LCBhbmQgcmVnaXN0ZXJpbmdcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCB0aGUgcGFyZW50IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gc2V0IGlzRGlydHkgZmxhZ3MuXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gbnVsbCA6IHRoaXMuJHBhcmVudC5zY2hlbWFDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWFzKCkge1xuICAgICAgY29uc3QgcGFuZWxzID0gZ2V0UGFuZWxTY2hlbWFzKHRoaXMuc2NoZW1hLnBhbmVscywgJycpXG4gICAgICBmb3IgKGNvbnN0IHBhbmUgb2YgdGhpcy5wYW5lcykge1xuICAgICAgICBwYW5lbHMucHVzaCguLi5wYW5lLnBhbmVsU2NoZW1hcylcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYW5lbHNcbiAgICB9LFxuXG4gICAgdGFicygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEudGFicylcbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRUYWIoKSB7XG4gICAgICBjb25zdCBjdXJyZW50VGFiID0gdGhpcy4kcm91dGUuaGFzaD8uc2xpY2UoMSkgfHwgbnVsbFxuICAgICAgY29uc3QgdGFiID0gY3VycmVudFRhYiAmJiB0aGlzLnNob3VsZFJlbmRlcih0aGlzLnRhYnNbY3VycmVudFRhYl0pXG4gICAgICAgID8gY3VycmVudFRhYlxuICAgICAgICA6IHRoaXMuZGVmYXVsdFRhYj8ubmFtZSB8fCBudWxsXG4gICAgICBpZiAodGFiICE9PSBjdXJyZW50VGFiKSB7XG4gICAgICAgIC8vIEFueSB0YWIgY2hhbmdlIG5lZWRzIHRvIGJlIHJlZmxlY3RlZCBpbiB0aGUgcm91dGVyIGFsc28uXG4gICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgaGFzaDogdGFiIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gdGFiXG4gICAgfSxcblxuICAgIGRlZmF1bHRUYWIoKSB7XG4gICAgICBpZiAodGhpcy50YWJzKSB7XG4gICAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgICAgZm9yIChjb25zdCB0YWIgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnRhYnMpKSB7XG4gICAgICAgICAgY29uc3QgeyBkZWZhdWx0VGFiIH0gPSB0YWJcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihkZWZhdWx0VGFiKVxuICAgICAgICAgICAgPyBkZWZhdWx0VGFiLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICAgICAgOiBkZWZhdWx0VGFiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFiXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgICAgIGZpcnN0ID0gdGFiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaXJzdFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWE/LmNsaXBib2FyZFxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdzZXJ2ZXInLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGNsaXBib2FyZERhdGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAkc2NoZW1hOiB0aGlzLnNjaGVtYS5uYW1lLFxuICAgICAgICAuLi50aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnY2xpcGJvYXJkJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzLlxuICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgYXM6XG4gICAgLy8gcmV0dXJuIGdldEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkRGF0YVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xpcGJvYXJkRGF0YVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIGdldFBhcmVudEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgfSxcblxuICAgIGZvcm1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKFxuICAgICAgICB0aGlzLmdldEl0ZW1Gb3JtU2NoZW1hKHRoaXMuc291cmNlU2NoZW1hLCB0aGlzLmRhdGEsIHRoaXMuY29udGV4dClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNUb3VjaGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZXJ5Q29tcG9uZW50KGl0ID0+IGl0LmlzVmFsaWRhdGVkKVxuICAgIH0sXG5cbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5sYWJlbCB8fCB0aGlzLmNvbGxhcHNpYmxlXG4gICAgfSxcblxuICAgIGhhc1RhYnMoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaW5saW5lZCAmJiAhIXRoaXMudGFic1xuICAgIH0sXG5cbiAgICBoYXNNYWluUGFuZSgpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiAhIWNvbXBvbmVudHMgJiYgT2JqZWN0LmtleXMoY29tcG9uZW50cykubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBvcGVuZWQ6IGdldFN0b3JlQWNjZXNzb3IoJ29wZW5lZCcsIHtcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jb2xsYXBzZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVscygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucGFuZWxzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIGNvbXBvbmVudHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZXNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVsc0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZWxzUmVnaXN0cnkpXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICB0aGlzLnNldHVwU2NoZW1hRmllbGRzKClcbiAgICAvLyBEZWxlZ2F0ZSBjaGFuZ2UgZXZlbnRzIHRocm91Z2ggdG8gcGFyZW50IHNjaGVtYTpcbiAgICB0aGlzLmRlbGVnYXRlKCdjaGFuZ2UnLCB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudClcbiAgICB0aGlzLmVtaXRFdmVudCgnaW5pdGlhbGl6ZScpIC8vIE5vdCBgJ2NyZWF0ZSdgLCBzaW5jZSB0aGF0J3MgZm9yIGRhdGEuXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLmVtaXRFdmVudCgnZGVzdHJveScpXG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKFxuICAgICAgICB0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRzQnlOYW1lKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeU5hbWUodGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRCeU5hbWUobmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoT3JOYW1lLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50KGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldFBhbmVsKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBzb21lQ29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuc29tZShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgZXZlcnlDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5ldmVyeShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgb25FeHBhbmQoZXhwYW5kKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnZXhwYW5kJywge1xuICAgICAgICAvLyBUT0RPOiBBY3R1YWxseSBleHBvc2UgdGhpcyBvbiBEaXRvQ29udGV4dD9cbiAgICAgICAgY29udGV4dDogeyBleHBhbmQgfVxuICAgICAgfSlcbiAgICAgIC8vIFByZXZlbnQgY2xvc2luZyB0aGUgc2NoZW1hIHdpdGggaW52YWxpZCBkYXRhLCBzaW5jZSB0aGUgaW4tY29tcG9uZW50XG4gICAgICAvLyB2YWxpZGF0aW9uIHdpbGwgbm90IGJlIGV4ZWN1dGVkIG9uY2UgaXQncyBjbG9zZWQuXG5cbiAgICAgIC8vIFRPRE86IE1vdmUgdmFsaWRhdGlvbiBvdXQgb2YgY29tcG9uZW50cywgdG8gc2NoZW1hLCBqdXN0IGxpa2VcbiAgICAgIC8vIHByb2Nlc3NpbmcsIGFuZCB1c2UgYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIGZvciB0aGUgcmVzdWx0aW5nIGVycm9ycyxcbiAgICAgIC8vIHRoZW4gcmVtb3ZlIHRoaXMgcmVxdWlyZW1lbnQsIHNpbmNlIHdlIGNhbiB2YWxpZGF0ZSBjbG9zZWQgZm9ybXMgYW5kXG4gICAgICAvLyBzY2hlbWFzIHRoZW4uXG4gICAgICBpZiAoIXRoaXMub3BlbmVkIHx8IGV4cGFuZCB8fCB0aGlzLnZhbGlkYXRlQWxsKCkpIHtcbiAgICAgICAgdGhpcy5vcGVuZWQgPSBleHBhbmRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJylcbiAgICB9LFxuXG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICAgIGNvbXBvbmVudC5yZXNldFZhbGlkYXRpb24oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50Py5mb2N1cygpXG4gICAgICB0aGlzLm9wZW5lZCA9IHRydWVcbiAgICB9LFxuXG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50c0J5RGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGxldCBkYXRhUGF0aHNcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBjaGVjayA9IGlzRnVuY3Rpb24obWF0Y2gpXG4gICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgIDogaXNSZWdFeHAobWF0Y2gpXG4gICAgICAgICAgICA/IGZpZWxkID0+IG1hdGNoLnRlc3QoZmllbGQpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgZGF0YVBhdGhzID0gY2hlY2tcbiAgICAgICAgICA/IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKS5maWx0ZXIoY2hlY2spXG4gICAgICAgICAgOiBpc0FycmF5KG1hdGNoKVxuICAgICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgICAgOiBbbWF0Y2hdXG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBkYXRhUGF0aHMgfHw9IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKVxuICAgICAgZm9yIChjb25zdCBkYXRhUGF0aCBvZiBkYXRhUGF0aHMpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoIWNvbXBvbmVudC52YWxpZGF0ZShub3RpZnkpKSB7XG4gICAgICAgICAgICAvLyBGb2N1cyBmaXJzdCBlcnJvciBmaWVsZFxuICAgICAgICAgICAgaWYgKG5vdGlmeSAmJiBmaXJzdCkge1xuICAgICAgICAgICAgICBjb21wb25lbnQuZm9jdXMoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5ICYmICFpc1ZhbGlkKSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1ZhbGlkXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBbGwobWF0Y2gsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIGxldCBmaXJzdCA9IHRydWVcbiAgICAgIGNvbnN0IHVubWF0Y2hlZCA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgZXJyc10gb2YgT2JqZWN0LmVudHJpZXMoZXJyb3JzKSkge1xuICAgICAgICAvLyBJZiB0aGUgc2NoZW1hIGlzIGEgZGF0YS1yb290LCBwcmVmaXggaXRzIG93biBkYXRhUGF0aCB0byBhbGwgZXJyb3JzLFxuICAgICAgICAvLyBzaW5jZSB0aGUgZGF0YSB0aGF0IGl0IHNlbmRzIGFuZCB2YWxpZGF0ZXMgd2lsbCBiZSB1bnByZWZpeGVkLlxuICAgICAgICBjb25zdCBmdWxsRGF0YVBhdGggPSB0aGlzLmhhc093bkRhdGFcbiAgICAgICAgICA/IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgICAgICAgIDogZGF0YVBhdGhcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcywgdGhpcy5kYXRhUGF0aCwgdGhpcy5oYXNPd25EYXRhLCBmdWxsRGF0YVBhdGgpXG4gICAgICAgIC8vIENvbnZlcnQgZnJvbSBKYXZhU2NyaXB0IHByb3BlcnR5IGFjY2VzcyBub3RhdGlvbiwgdG8gb3VyIG93biBmb3JtXG4gICAgICAgIC8vIG9mIHJlbGF0aXZlIEpTT04gcG9pbnRlcnMgYXMgZGF0YS1wYXRoczpcbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZnVsbERhdGFQYXRoKVxuICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cykpIHtcbiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgLy8gQ291bGRuJ3QgZmluZCBhIGNvbXBvbmVudCBpbiBhbiBhY3RpdmUgZm9ybSBmb3IgdGhlIGdpdmVuIGRhdGFQYXRoLlxuICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIGNvbXBvbmVudCBzZXJ2aW5nIGEgcGFydCBvZiB0aGUgZGF0YVBhdGgsXG4gICAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgICBpZiAoYXdhaXQgY29tcG9uZW50Lm5hdmlnYXRlVG9Db21wb25lbnQ/LihcbiAgICAgICAgICAgICAgICBmdWxsRGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgc3ViQ29tcG9uZW50cyA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2Ygc3ViQ29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJzID0gZXJyb3JzW2NvbXBvbmVudC5kYXRhUGF0aF1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIGVycnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJycywgZmlyc3QgJiYgZm9jdXMpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgICAgLy8gRm91bmQgYSBuZXN0ZWQgZm9ybSB0byBkaXNwbGF5IGF0IGxlYXN0IHBhcnRzIGZvIHRoZSBlcnJvcnMuXG4gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc2hvdyBhbGwgZXJyb3JzIGF0IG9uY2UsIHNvIHdlJ3JlIGRvbmUuIERvbid0IGNhbGxcbiAgICAgICAgICAgICAgICAvLyBgbm90aWZ5RXJyb3JzKClgIHlldCwgYXMgd2UgY2FuIG9ubHkgZGlzcGxheSBpdCBvbmNlXG4gICAgICAgICAgICAgICAgLy8gYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIHdhcyBjYWxsZWQgZnJvbSBgRGl0b0Zvcm0ubW91bnRlZCgpYFxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdGlsbCBoZXJlLCBzbyBrZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBXaGVuIHRoZSBlcnJvciBjYW4ndCBiZSBtYXRjaGVkLCBhZGQgaXQgdG8gYSBsaXN0IG9mIHVubWF0Y2hlZFxuICAgICAgICAgIC8vIGVycm9ycyB3aXRoIGRlY2VudCBtZXNzYWdlLCB0byByZXBvcnQgYXQgdGhlIGVuZC5cbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGxhYmVsaXplKHByb3BlcnR5KVxuICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IGZpZWxkXG4gICAgICAgICAgICAgID8gYFRoZSBmaWVsZCAke2ZpZWxkfWBcbiAgICAgICAgICAgICAgOiBgVGhlICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICAgICAgdW5tYXRjaGVkLnB1c2goYCR7cHJlZml4fSAke2Vyci5tZXNzYWdlfWApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgIH1cbiAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnModW5tYXRjaGVkLmpvaW4oJ1xcbicpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBub3RpZnlFcnJvcnMobWVzc2FnZSkge1xuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICB0aXRsZTogJ1ZhbGlkYXRpb24gRXJyb3JzJyxcbiAgICAgICAgdGV4dDogbWVzc2FnZSB8fCAnUGxlYXNlIGNvcnJlY3QgdGhlIGhpZ2hsaWdodGVkIGVycm9ycy4nXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICByZXNldERhdGEoKSB7XG4gICAgICAvLyBXZSBjYW4ndCBzZXQgYHRoaXMuZGF0YSA9IC4uLmAgYmVjYXVzZSBpdCdzIGEgcHJvcGVydHksIGJ1dCB3ZSBjYW5cbiAgICAgIC8vIHNldCBhbGwga25vd24gcHJvcGVydGllcyBvbiBpdCB0byB0aGUgdmFsdWVzIHJldHVybmVkIGJ5XG4gICAgICAvLyBgc2V0RGVmYXVsdHMoKWAsIGFzIHRoZXkgYXJlIGFsbCByZWFjdGl2ZSBhbHJlYWR5IGZyb20gdGhlIHN0YXJ0czpcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5kYXRhLCBzZXREZWZhdWx0cyh0aGlzLnNjaGVtYSwge30sIHRoaXMpKVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgZm9yIChjb25zdCBuYW1lIGluIGRhdGEpIHtcbiAgICAgICAgaWYgKG5hbWUgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgbmFtZSwgZGF0YVtuYW1lXSlcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSkpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5tYXJrRGlydHkoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmaWx0ZXJEYXRhKGRhdGEpIHtcbiAgICAgIC8vIEZpbHRlcnMgb3V0IGFycmF5cyBhbmQgb2JqZWN0cyB0aGF0IGFyZSBiYWNrIGJ5IGRhdGEgcmVzb3VyY2VzXG4gICAgICAvLyB0aGVtc2VsdmVzLCBhcyB0aG9zZSBhcmUgYWxyZWFkeSB0YWtpbmcgY2FyZSBvZiB0aHJvdWdoIHRoZWlyIG93biBBUElcbiAgICAgIC8vIHJlc291cmNlIGVuZC1wb2ludHMgYW5kIHNob3VsZG4ndCBiZSBzZXQuXG4gICAgICBjb25zdCBjb3B5ID0ge31cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkgfHwgaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKVxuICAgICAgICAgIGlmIChjb21wb25lbnRzLnNvbWUoY29tcG9uZW50ID0+IGNvbXBvbmVudC5wcm92aWRlc0RhdGEpKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb3B5W25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb3B5XG4gICAgfSxcblxuICAgIHByb2Nlc3NEYXRhKHsgdGFyZ2V0ID0gJ2NsaXBib2FyZCcsIHNjaGVtYU9ubHkgPSB0cnVlIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIHByb2Nlc3NEYXRhKFxuICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgdGhpcy5kYXRhUGF0aCwge1xuICAgICAgICAgIC8vIE5lZWRlZCBmb3IgRGl0b0NvbnRleHQgaGFuZGxpbmcgaW5zaWRlIGBwcm9jZXNzRGF0YWAgYW5kXG4gICAgICAgICAgLy8gYHByb2Nlc3NTY2hlbWFEYXRhKClgOlxuICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICBzY2hlbWFPbmx5LFxuICAgICAgICAgIHRhcmdldFxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIGAkc2NoZW1hUGFyZW50Q29tcG9uZW50KClgIGlzIG9ubHkgc2V0IGlmIG9uZSBvZiB0aGUgYW5jZXN0b3JzIHVzZXNcbiAgICAgIC8vIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgICAgdGhpcy4kc2NoZW1hUGFyZW50Q29tcG9uZW50KCk/Ll9yZWdpc3RlclNjaGVtYUNvbXBvbmVudCh0aGlzLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSwgY29tcG9uZW50LCBhZGQpXG4gICAgICAvLyBPbmx5IHJlZ2lzdGVyIHdpdGggdGhlIHBhcmVudCBpZiBzY2hlbWEgc2hhcmVzIGRhdGEgd2l0aCBpdC5cbiAgICAgIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50Py5fcmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50LCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmUocGFuZSwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMucGFuZXNSZWdpc3RyeSwgcGFuZSwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJQYW5lbChwYW5lbCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMucGFuZWxzUmVnaXN0cnksIHBhbmVsLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlckVudHJ5KHJlZ2lzdHJ5LCBlbnRyeSwgYWRkKSB7XG4gICAgICBjb25zdCB1aWQgPSBlbnRyeS4kdWlkXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHRoaXMuJHNldChyZWdpc3RyeSwgdWlkLCBlbnRyeSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJGRlbGV0ZShyZWdpc3RyeSwgdWlkKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfbGlzdEVudHJpZXNCeURhdGFQYXRoKHJlZ2lzdHJ5KSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZWdpc3RyeSkucmVkdWNlKChlbnRyaWVzQnlEYXRhUGF0aCwgZW50cnkpID0+IHtcbiAgICAgICAgLy8gTXVsdGlwbGUgZW50cmllcyBjYW4gYmUgbGlua2VkIHRvIHRoZSBzYW1lIGRhdGEtcGF0aCwgZS5nLiB3aGVuXG4gICAgICAgIC8vIHRoZXJlIGFyZSB0YWJzLiBMaW5rIGVhY2ggZGF0YS1wYXRoIHRvIGFuIGFycmF5IG9mIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IHsgZGF0YVBhdGggfSA9IGVudHJ5XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBlbnRyaWVzQnlEYXRhUGF0aFtkYXRhUGF0aF0gfHw9IFtdXG4gICAgICAgIGVudHJpZXMucHVzaChlbnRyeSlcbiAgICAgICAgcmV0dXJuIGVudHJpZXNCeURhdGFQYXRoXG4gICAgICB9LCB7fSlcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXMoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKS5zdGFydHNXaXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICAgID8gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICAgICAgOiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRW50cmllcyhcbiAgICAgICAgZW50cmllc0J5RGF0YVBhdGhbbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpXSB8fCBbXSxcbiAgICAgICAgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIG5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRW50cmllcyhcbiAgICAgICAgZW50cmllc0J5RGF0YVBhdGhbYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSldIHx8IFtdLFxuICAgICAgICBtYXRjaFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfZmlsdGVyRW50cmllcyhlbnRyaWVzLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hdGNoID8gZW50cmllcy5maWx0ZXIobWF0Y2gpIDogZW50cmllc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5kaXRvLXNjaGVtYS5kaXRvLXNjaGVtYS1pbmxpbmVkKFxuICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICA6ZGF0YT1cImRhdGFcIlxuICA6bWV0YT1cIm1ldGFcIlxuICA6c3RvcmU9XCJzdG9yZVwiXG4gIDpsYWJlbD1cImlzQ29tcGFjdCA/IG51bGwgOiBsYWJlbFwiXG4gIDppbmxpbmVkPVwidHJ1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtY29tcGFjdCc6IGlzQ29tcGFjdCB9XCJcbilcbiAgLy8gUmVuZGVyIGRpdG8tZWRpdC1idXR0b25zIGZvciBpbmxpbmVkIHNoZW1hcyBzZXBhcmF0ZWx5IGZyb20gYWxsXG4gIC8vIG90aGVycyBpbiBgVHlwZUxpc3RgIGFzIGEgc2NvcGUsIGZvciBiZXR0ZXIgaGFuZGxpbmcgb2YgbGF5b3V0LlxuICB0ZW1wbGF0ZSgjZWRpdC1idXR0b25zKVxuICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgdi1pZj1cImRlbGV0YWJsZSB8fCBkcmFnZ2FibGUgfHwgZWRpdGFibGVcIlxuICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICBAZGVsZXRlPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBkaXRvLXNjaGVtYS5kaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpsYWJlbD1cImlzQ29tcGFjdCA/IG51bGwgOiBsYWJlbFwiXG4gICAgOmlubGluZWQ9XCJ0cnVlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLWNvbXBhY3QnOiBpc0NvbXBhY3QgfVwiXG4gIClcbiAgICAvLyBSZW5kZXIgZGl0by1lZGl0LWJ1dHRvbnMgZm9yIGlubGluZWQgc2hlbWFzIHNlcGFyYXRlbHkgZnJvbSBhbGxcbiAgICAvLyBvdGhlcnMgaW4gYFR5cGVMaXN0YCBhcyBhIHNjb3BlLCBmb3IgYmV0dGVyIGhhbmRsaW5nIG9mIGxheW91dC5cbiAgICB0ZW1wbGF0ZSgjZWRpdC1idXR0b25zKVxuICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgIHYtaWY9XCJkZWxldGFibGUgfHwgZHJhZ2dhYmxlIHx8IGVkaXRhYmxlXCJcbiAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICBAZGVsZXRlPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zY2hlbWEtaW5saW5lZFxuICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgID4gLmRpdG8tc2NoZW1hLWhlYWRlclxuICAgICAgICAvLyBDaGFuZ2Ugc3BhY2luZyBzbyAuZGl0by1sYWJlbCBjb3ZlcnMgdGhlIGZ1bGwgLmRpdG8tc2NoZW1hLWhlYWRlci5cbiAgICAgICAgbWFyZ2luOiAtJGZvcm0tc3BhY2luZ1xuICAgICAgICAuZGl0by1sYWJlbFxuICAgICAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW5cbiAgICAgICAgICAtLWxhYmVsLXBhZGRpbmc6ICN7JGZvcm0tc3BhY2luZ31cbiAgICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgICAgICAvLyBCZWNhdXNlIHRhYmxlcyBoYXZlIGEgZnVubnkgd2F5IG9mIGFsbG93aW5nIHRvbyBtdWNoIHdpZHRoIGdyb3d0aDpcbiAgICAgICAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoXG4gICAgICAgICYgKy5kaXRvLXBhbmVcbiAgICAgICAgICAvLyBOZWVkZWQgZm9yIHRyYW5zaXRpb24taGVpZ2h0IGluIERpdG9TY2hlbWE6XG4gICAgICAgICAgbWluLWhlaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc0NvbXBhY3QgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tc2NoZW1hLWlubGluZWQnLCB7XG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIGlzQ29tcGFjdCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNDb21wYWN0ICYmICEhdGhpcy5sYWJlbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1wYW5lKFxuICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgdi1zaG93PVwidmlzaWJsZVwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPWB7XG4gICAgICBzY2hlbWEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgbmVzdGVkLFxuICAgICAgc3RvcmVcbiAgICB9IGluIGNvbXBvbmVudFNjaGVtYXNgXG4gIClcbiAgICAuZGl0by1icmVhayhcbiAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdiZWZvcmUnXCJcbiAgICApXG4gICAgZGl0by1jb250YWluZXIoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwiaXNTaW5nbGVDb21wb25lbnRcIlxuICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgKVxuICAgIC5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2FmdGVyJ1wiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcGFuZShcbiAgICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgICB2LXNob3c9XCJ2aXNpYmxlXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1mb3I9YHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICAgIG5lc3RlZCxcbiAgICAgICAgc3RvcmVcbiAgICAgIH0gaW4gY29tcG9uZW50U2NoZW1hc2BcbiAgICApXG4gICAgICAuZGl0by1icmVhayhcbiAgICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgICAgKVxuICAgICAgZGl0by1jb250YWluZXIoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICAgIDprZXk9XCJuZXN0ZWREYXRhUGF0aFwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cImlzU2luZ2xlQ29tcG9uZW50XCJcbiAgICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tYnJlYWsoXG4gICAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdhZnRlcidcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXBhbmVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgZmxleC1mbG93OiByb3cgd3JhcFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnRcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmVcbiAgICAvLyBSZW1vdmUgcGFkZGluZyBhZGRlZCBieSBgLmRpdG8tY29udGFpbmVyYFxuICAgIG1hcmdpbjogKC0kZm9ybS1zcGFjaW5nKSAoLSRmb3JtLXNwYWNpbmctaGFsZilcbiAgICAvLyBBZGQgcmVtb3ZlZCBob3Jpem9udGFsIG1hcmdpbiBhZ2FpbiB0byBtYXgtd2lkdGg6XG4gICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aCArIDIgKiAkZm9ybS1zcGFjaW5nLWhhbGZcbiAgICAvLyBVc2UgYGZsZXg6IDAlYCBmb3IgYWxsIGAuZGl0by1wYW5lYCBleGNlcHQgYC5kaXRvLXBhbmUtbWFpbmAsXG4gICAgLy8gc28gdGhhdCB0aGUgYC5kaXRvLWJ1dHRvbnMtbWFpbmAgY2FuIGJlIG1vdmVkIGFsbCB0aGUgd2F5IHRvIHRoZSBib3R0b20uXG4gICAgZmxleDogMCVcblxuICAgICYuZGl0by1wYW5lLW1haW5cbiAgICAgIGZsZXg6IDEwMCVcblxuICAgIC5kaXRvLXNjaGVtYS1oZWFkZXI6bm90KC5kaXRvLXNjaGVtYS1tZW51LWhlYWRlcikgKyAmXG4gICAgICAvLyBDbGVhciB0b3AtbWFyZ2luIGlmIHRoZSBjb21wb25lbnRzIGFyZSBwcmVjZWRlZCBieSBhIHNjaGVtYSBoZWFkZXIuXG4gICAgICBtYXJnaW4tdG9wOiAwXG5cbiAgICAuZGl0by1jb250YWluZXIuZGl0by1vbWl0LXBhZGRpbmcgPiAmXG4gICAgICAvLyBDbGVhciBtYXJnaW5zIHNldCBhYm92ZSBhZ2FpbiBpZiBwYXJlbnQgaXMgb21pdHRpbmcgcGFkZGluZy5cbiAgICAgIG1hcmdpbjogMFxuICAgICAgbWF4LXdpZHRoOiB1bnNldFxuXG4gICAgLmRpdG8tYnJlYWtcbiAgICAgIGZsZXg6IDEwMCVcbiAgICAgIGhlaWdodDogMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRBbGxQYW5lbFNjaGVtYXMsIGlzTmVzdGVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFuZScsIHtcbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy50YWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0YWI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdmlzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYiA/IHRoaXMgOiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRTY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGNvbXBvbmVudHMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXNcbiAgICAgIC8vIGFuZCBhZGRzIHRoZSBrZXkgYXMgdGhlIG5hbWUgdG8gZWFjaCBjb21wb25lbnQsIHVzZWQgZm9yIGxhYmVscywgZXRjLlxuICAgICAgLy8gTk9URTogc2NoZW1hIGNhbiBiZSBudWxsIHdoaWxlIG11bHRpLWZvcm0gbGlzdHMgbG9hZCB0aGVpciBkYXRhLFxuICAgICAgLy8gYmVjYXVzZSBvbmx5IHRoZSBhdmFpbGFibGUgZGF0YSB3aWxsIGRldGVybWluZSB0aGUgdHlwZSBvZiBmb3JtLlxuICAgICAgLy8gV2hlbiBlZGl0aW5nIHByaW1pdGl2ZSB2YWx1ZXMgdGhyb3VnaCBhIGZvcm0sIGRvIG5vdCBhcHBlbmQgJ25hbWUnIHRvXG4gICAgICAvLyB0aGUgY29tcG9uZW50J3MgZGF0YVBhdGggc28gaXQgY2FuIGJlIG1hcHBlZCB0byBmcm9tIHZhbGlkYXRpb24gZXJyb3JzLlxuICAgICAgLy8gTk9URTogTm90IGFsbCBzY2hlbWFzIC8gY29tcG9uZW50cyBoYXZlIGEgc291cmNlU2NoZW1hLCBlLmcuIGRpYWxvZ3MuXG4gICAgICBjb25zdCB3cmFwUHJpbWl0aXZlcyA9IHRoaXMuc291cmNlU2NoZW1hPy53cmFwUHJpbWl0aXZlc1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hPy5jb21wb25lbnRzIHx8IHt9KS5tYXAoXG4gICAgICAgIChbbmFtZSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgIC8vIEFsd2F5cyBhZGQgbmFtZSB0byBjb21wb25lbnQgc2NoZW1hLlxuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICAgIC8vIFNoYXJlIGRhdGFQYXRoIGFuZCBzdG9yZSB3aXRoIHBhcmVudCBpZiBub3QgbmVzdGVkOlxuICAgICAgICAgIGNvbnN0IG5lc3RlZCA9IGlzTmVzdGVkKHNjaGVtYSlcbiAgICAgICAgICBjb25zdCBuZXN0ZWREYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIGRhdGFQYXRoOiBuZXN0ZWQgJiYgIXdyYXBQcmltaXRpdmVzXG4gICAgICAgICAgICAgID8gbmVzdGVkRGF0YVBhdGhcbiAgICAgICAgICAgICAgOiB0aGlzLmRhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICAgICAgICBuZXN0ZWQsXG4gICAgICAgICAgICBzdG9yZTogbmVzdGVkID8gdGhpcy5nZXRDaGlsZFN0b3JlKG5hbWUpIDogdGhpcy5zdG9yZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYXMoKSB7XG4gICAgICAvLyBHYXRoZXIgYWxsIHBhbmVsIHNjaGVtYXMgZnJvbSBhbGwgY29tcG9uZW50IHNjaGVtYXMsIGJ5IGZpbmRpbmcgdGhvc2VcbiAgICAgIC8vIHRoYXQgd2FudCB0byBwcm92aWRlIGEgcGFuZWwuIFNlZSBgZ2V0QWxsUGFuZWxTY2hlbWFzKClgIGZvciBkZXRhaWxzLlxuICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50U2NoZW1hcy5mbGF0TWFwKFxuICAgICAgICAoeyBzY2hlbWEsIG5lc3RlZERhdGFQYXRoOiBkYXRhUGF0aCB9KSA9PiBnZXRBbGxQYW5lbFNjaGVtYXMoXG4gICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50LFxuICAgICAgICAgIHRoaXMudGFiQ29tcG9uZW50XG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNTaW5nbGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaW5nbGUgJiYgdGhpcy5jb21wb25lbnRTY2hlbWFzLmxlbmd0aCA9PT0gMVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZSh0aGlzLCBhZGQpXG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgaWYgKHRoaXMudGFiKSB7XG4gICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgaGFzaDogdGhpcy50YWIgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRnJhY3Rpb24odmFsdWUpIHtcbiAgY29uc3QgbWF0Y2ggPSAoXG4gICAgaXNTdHJpbmcodmFsdWUpICYmXG4gICAgdmFsdWUubWF0Y2goL15cXHMqKFsrLV0/XFxkKylcXHMqXFwvXFxzKihbKy1dP1xcZCspXFxzKiQvKVxuICApXG4gIGlmIChtYXRjaCkge1xuICAgIGNvbnN0IFssIGRpdmlkZW5kLCBkaXZpc29yXSA9IG1hdGNoXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoZGl2aWRlbmQpIC8gcGFyc2VGbG9hdChkaXZpc29yKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKVxuICB9XG59XG4iLCJcbi5kaXRvLWNvbnRhaW5lcihcbiAgdi1zaG93PVwiY29tcG9uZW50VmlzaWJsZVwiXG4gIDpjbGFzcz1cImNvbnRhaW5lckNsYXNzXCJcbiAgOnN0eWxlPVwiY29udGFpbmVyU3R5bGVcIlxuKVxuICBkaXRvLWxhYmVsKFxuICAgIHYtaWY9XCJsYWJlbFwiXG4gICAgOmxhYmVsPVwibGFiZWxcIlxuICAgIDpkYXRhUGF0aD1cImxhYmVsRGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgKVxuICBjb21wb25lbnQuZGl0by1jb21wb25lbnQoXG4gICAgOmlzPVwiZ2V0VHlwZUNvbXBvbmVudChzY2hlbWEudHlwZSlcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpzaW5nbGU9XCJzaW5nbGVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImNvbXBvbmVudERpc2FibGVkXCJcbiAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gICAgQGVycm9ycz1cIm9uRXJyb3JzXCJcbiAgKVxuICBkaXRvLWVycm9ycyhcbiAgICA6ZXJyb3JzPVwiZXJyb3JzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tY29udGFpbmVyKFxuICAgIHYtc2hvdz1cImNvbXBvbmVudFZpc2libGVcIlxuICAgIDpjbGFzcz1cImNvbnRhaW5lckNsYXNzXCJcbiAgICA6c3R5bGU9XCJjb250YWluZXJTdHlsZVwiXG4gIClcbiAgICBkaXRvLWxhYmVsKFxuICAgICAgdi1pZj1cImxhYmVsXCJcbiAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgIDpkYXRhUGF0aD1cImxhYmVsRGF0YVBhdGhcIlxuICAgICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICAgIClcbiAgICBjb21wb25lbnQuZGl0by1jb21wb25lbnQoXG4gICAgICA6aXM9XCJnZXRUeXBlQ29tcG9uZW50KHNjaGVtYS50eXBlKVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOnNpbmdsZT1cInNpbmdsZVwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImNvbXBvbmVudERpc2FibGVkXCJcbiAgICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICAgIEBlcnJvcnM9XCJvbkVycm9yc1wiXG4gICAgKVxuICAgIGRpdG8tZXJyb3JzKFxuICAgICAgOmVycm9ycz1cImVycm9yc1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNvbnRhaW5lclxuICAgIC8vIE5lZWRlZCBmb3IgYmV0dGVyIHZlcnRpY2FsIGFsaWdubWVudDpcbiAgICBhbGlnbi1zZWxmOiBzdHJldGNoXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgIC8vIFRvIHByZXZlbnQgbGlzdCB0YWJsZXMgZnJvbSBibG93aW5nIG91dCBvZiB0aGVpciBmbGV4IGJveCBjb250YWluZXJzLlxuICAgIG1heC13aWR0aDogMTAwJVxuICAgIC8vIENhbm5vdCB1c2UgbWFyZ2luIGhlcmUgYXMgaXQgbmVlZHMgdG8gYmUgcGFydCBvZiBib3gtc2l6aW5nIGZvclxuICAgIC8vIHBlcmNlbnRhZ2VzIGluIGZsZXgtYmFzaXMgdG8gd29yay5cbiAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nICRmb3JtLXNwYWNpbmctaGFsZlxuICAgICY6ZW1wdHlcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAmLmRpdG8tb21pdC1wYWRkaW5nXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICA+IC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogJGZvcm0tc3BhY2luZyAkZm9ybS1zcGFjaW5nLWhhbGYgMFxuICAgICYuZGl0by1zaW5nbGVcbiAgICAgIGhlaWdodDogMTAwJSAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IGF0IHRoZSBib3R0b21cbiAgLy8gTk9URTogVGhpcyBpcyBub3QgbmVzdGVkIGluc2lkZSBgLmRpdG8tY29udGFpbmVyYCBzbyB0aGF0IG90aGVyXG4gIC8vIHR5cGUgY29tcG9uZW50cyBjYW4gb3ZlcnJpZGUgYC5kaXRvLXdpZHRoLWZpbGxgIGNsYXNzIChmaWx0ZXIgcHJlY2VkZW5jZSkuXG4gIC5kaXRvLWNvbXBvbmVudFxuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgJi5kaXRvLWNoZWNrYm94LFxuICAgICAgJi5kaXRvLXJhZGlvLWJ1dHRvblxuICAgICAgICAvLyBXZWJLaXQgZG9lc24ndCBsaWtlIGNoYW5nZWQgd2lkdGggb24gY2hlY2tib3hlcyBhbmQgcmFkaW9zLCBvdmVycmlkZTpcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgIHdpZHRoOiBhdXRvXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNTdHJpbmcsIGlzTnVtYmVyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0VHlwZU9wdGlvbnMsIHNob3VsZE9taXRQYWRkaW5nIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgcGFyc2VGcmFjdGlvbiB9IGZyb20gJy4uL3V0aWxzL21hdGguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1jb250YWluZXInLCB7XG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogdGhpcy5uZXN0ZWQgfSlcbiAgICB9LFxuXG4gICAgdHlwZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gZ2V0VHlwZU9wdGlvbnModGhpcy5zY2hlbWEpIHx8IHt9XG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IHNjaGVtYVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgbGFiZWwgIT09IGZhbHNlICYmXG4gICAgICAgICghIWxhYmVsIHx8IHRoaXMudHlwZU9wdGlvbnMuZ2VuZXJhdGVMYWJlbCAmJiB0aGlzLmdlbmVyYXRlTGFiZWxzKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc0xhYmVsID8gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSkgOiBudWxsXG4gICAgfSxcblxuICAgIGxhYmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBVbm5lc3RlZCB0eXBlcyBkb24ndCBoYXZlIGEgZGF0YVBhdGggZm9yIHRoZW1zZWx2ZXMsIGRvbid0IHVzZSBpdDpcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMuZGF0YVBhdGggOiBudWxsXG4gICAgfSxcblxuICAgIGNvbXBvbmVudFdpZHRoOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZU9wdGlvbnMuZGVmYXVsdFdpZHRoXG4gICAgICB9LFxuICAgICAgZ2V0KHdpZHRoKSB7XG4gICAgICAgIC8vIFVzZSAxMDAlID09IDEuMCBhcyBkZWZhdWx0IHdpZHRoIHdoZW4gbm90aGluZyBpcyBzZXQ6XG4gICAgICAgIHJldHVybiB3aWR0aCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAxLjBcbiAgICAgICAgICA6IGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgICAgPyB3aWR0aC5tYXRjaCgvXlxccypbPD5dP1xccyooLiopJC8pWzFdIC8vIFJlbW92ZSB3aWR0aCBvcGVyYXRvclxuICAgICAgICAgICAgOiB3aWR0aFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50V2lkdGhPcGVyYXRvcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZ2V0KHdpZHRoKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyh3aWR0aClcbiAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKihbPD5dPykvKVsxXSB8fCBudWxsXG4gICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRWaXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0VmlzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50RGlzYWJsZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdkaXNhYmxlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkaXNhYmxlZCkge1xuICAgICAgICByZXR1cm4gZGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29udGFpbmVyQ2xhc3MoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzOiBjb250YWluZXJDbGFzcyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXNpbmdsZSc6IHRoaXMuc2luZ2xlLFxuICAgICAgICAnZGl0by1vbWl0LXBhZGRpbmcnOiBzaG91bGRPbWl0UGFkZGluZyh0aGlzLnNjaGVtYSksXG4gICAgICAgIC4uLihcbiAgICAgICAgICBpc1N0cmluZyhjb250YWluZXJDbGFzcylcbiAgICAgICAgICAgID8geyBbY29udGFpbmVyQ2xhc3NdOiB0cnVlIH1cbiAgICAgICAgICAgIDogY29udGFpbmVyQ2xhc3NcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRCYXNpcygpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5jb21wb25lbnRXaWR0aFxuICAgICAgLy8gJ2F1dG8nID0gbm8gZml0dGluZzpcbiAgICAgIGNvbnN0IGJhc2lzID0gKFxuICAgICAgICBbbnVsbCwgJ2F1dG8nLCAnZmlsbCddLmluY2x1ZGVzKHdpZHRoKSA/ICdhdXRvJ1xuICAgICAgICA6IC8lJC8udGVzdCh3aWR0aCkgPyBwYXJzZUZsb2F0KHdpZHRoKSAvLyBwZXJjZW50YWdlXG4gICAgICAgIDogL1thLXpdLy50ZXN0KHdpZHRoKSA/IHdpZHRoIC8vIG5hdGl2ZSB1bml0c1xuICAgICAgICA6IHBhcnNlRnJhY3Rpb24od2lkdGgpICogMTAwIC8vIGZyYWN0aW9uXG4gICAgICApXG4gICAgICByZXR1cm4gaXNOdW1iZXIoYmFzaXMpID8gYCR7YmFzaXN9JWAgOiBiYXNpc1xuICAgIH0sXG5cbiAgICBjb250YWluZXJTdHlsZSgpIHtcbiAgICAgIC8vIEludGVycHJldCAnPjUwJScgYXMgJzUwJSwgZmxleC1ncm93OiAxYFxuICAgICAgY29uc3QgZ3JvdyA9IChcbiAgICAgICAgdGhpcy5jb21wb25lbnRXaWR0aE9wZXJhdG9yID09PSAnPicgfHxcbiAgICAgICAgdGhpcy5jb21wb25lbnRXaWR0aCA9PT0gJ2ZpbGwnXG4gICAgICApXG4gICAgICAvLyBJbnRlcnByZXQgJzw1MCUnIGFzICc1MCUsIGZsZXgtc2hyaW5rOiAxYFxuICAgICAgY29uc3Qgc2hyaW5rID0gdGhpcy5jb21wb25lbnRXaWR0aE9wZXJhdG9yID09PSAnPCdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZsZXg6IGAke2dyb3cgPyAxIDogMH0gJHtzaHJpbmsgPyAxIDogMH0gJHt0aGlzLmNvbXBvbmVudEJhc2lzfWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcG9uZW50Q2xhc3MoKSB7XG4gICAgICBjb25zdCBiYXNpc0lzQXV0byA9IHRoaXMuY29tcG9uZW50QmFzaXMgPT09ICdhdXRvJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5jb21wb25lbnREaXNhYmxlZCxcbiAgICAgICAgJ2RpdG8td2lkdGgtZmlsbCc6ICFiYXNpc0lzQXV0byB8fCB0aGlzLmNvbXBvbmVudFdpZHRoID09PSAnZmlsbCcsXG4gICAgICAgICdkaXRvLXdpZHRoLWF1dG8nOiBiYXNpc0lzQXV0byxcbiAgICAgICAgJ2RpdG8taGFzLWVycm9ycyc6ICEhdGhpcy5lcnJvcnNcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRXJyb3JzKGVycm9ycykge1xuICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tdGFic1xuICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgdi1mb3I9XCIodGFiU2NoZW1hLCBrZXkpIGluIHRhYnNcIlxuICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodGFiU2NoZW1hKVwiXG4gICAgOmtleT1cImtleVwiXG4gICAgOnRvPVwieyBoYXNoOiBrZXkgfVwiXG4gICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICApXG4gICAgfCB7eyBnZXRMYWJlbCh0YWJTY2hlbWEsIGtleSkgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRhYnNcbiAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICB2LWZvcj1cIih0YWJTY2hlbWEsIGtleSkgaW4gdGFic1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHRhYlNjaGVtYSlcIlxuICAgICAgOmtleT1cImtleVwiXG4gICAgICA6dG89XCJ7IGhhc2g6IGtleSB9XCJcbiAgICAgIGFjdGl2ZS1jbGFzcz1cImRpdG8tYWN0aXZlXCJcbiAgICApXG4gICAgICB8IHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gICR0YWItY29sb3ItYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0XG4gICR0YWItY29sb3ItaW5hY3RpdmU6ICRjb2xvci1saWdodFxuICAkdGFiLWNvbG9yLWFjdGl2ZTogJGNvbG9yLWxpZ2h0ZXN0XG4gICR0YWItY29sb3ItaG92ZXI6ICRjb2xvci13aGl0ZVxuXG4gIC5kaXRvLXRhYnNcbiAgICAvLyBTZWU6IGh0dHBzOi8vY29kZXBlbi5pby90aG9sZXgvcGVuL2h2ZUJ4L1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvXG4gICAgYVxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1pbmFjdGl2ZVxuICAgICAgcGFkZGluZzogJHRhYi1wYWRkaW5nLXZlciAkdGFiLXBhZGRpbmctaG9yXG4gICAgICBtYXJnaW4tbGVmdDogJHRhYi1tYXJnaW5cbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR0YWItcmFkaXVzXG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHRhYi1yYWRpdXNcbiAgICAgICY6aG92ZXJcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1ob3ZlclxuICAgICAgJjphY3RpdmVcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1hY3RpdmVcbiAgICAgICYuZGl0by1hY3RpdmVcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1iYWNrZ3JvdW5kXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYnMnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFiczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzZWxlY3RlZFRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi8vIE9ubHkgc2hvdyBwYW5lbHMgaW4gdGFicyB3aGVuIHRoZSB0YWJzIGFyZSBhbHNvIHZpc2libGUuXG5jb21wb25lbnQuZGl0by1wYW5lbChcbiAgOmlzPVwicGFuZWxUYWdcIlxuICB2LXNob3c9XCJ2aXNpYmxlICYmICghcGFuZWxUYWJDb21wb25lbnQgfHwgcGFuZWxUYWJDb21wb25lbnQudmlzaWJsZSlcIlxuICBAc3VibWl0LnByZXZlbnRcbilcbiAgbGFiZWwuZGl0by1wYW5lbC10aXRsZSB7eyBnZXRMYWJlbChzY2hlbWEpIH19XG4gIGRpdG8tc2NoZW1hLmRpdG8tcGFuZWwtc2NoZW1hKFxuICAgIDpzY2hlbWE9XCJwYW5lbFNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6aGFzT3duRGF0YT1cImhhc093bkRhdGFcIlxuICApXG4gICAgZGl0by1idXR0b25zKFxuICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAvLyBPbmx5IHNob3cgcGFuZWxzIGluIHRhYnMgd2hlbiB0aGUgdGFicyBhcmUgYWxzbyB2aXNpYmxlLlxuICBjb21wb25lbnQuZGl0by1wYW5lbChcbiAgICA6aXM9XCJwYW5lbFRhZ1wiXG4gICAgdi1zaG93PVwidmlzaWJsZSAmJiAoIXBhbmVsVGFiQ29tcG9uZW50IHx8IHBhbmVsVGFiQ29tcG9uZW50LnZpc2libGUpXCJcbiAgICBAc3VibWl0LnByZXZlbnRcbiAgKVxuICAgIGxhYmVsLmRpdG8tcGFuZWwtdGl0bGUge3sgZ2V0TGFiZWwoc2NoZW1hKSB9fVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tcGFuZWwtc2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpoYXNPd25EYXRhPVwiaGFzT3duRGF0YVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXBhbmVsXG4gICAgbWFyZ2luLWJvdHRvbTogJGNvbnRlbnQtcGFkZGluZ1xuICAgIC5kaXRvLXBhbmVsLXRpdGxlXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgIGJhY2tncm91bmQ6ICRidXR0b24tY29sb3JcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgIC5kaXRvLXBhbmVsLXNjaGVtYVxuICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsXG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci10b3A6IDBcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmICRmb3JtLXNwYWNpbmdcbiAgICAgICAgPiAuZGl0by1idXR0b25zXG4gICAgICAgICAgLS1idXR0b24tbWFyZ2luOiAjeyRmb3JtLXNwYWNpbmd9XG4gICAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmIDBcbiAgICAgIC5kaXRvLW9iamVjdFxuICAgICAgICBib3JkZXI6IDBcbiAgICAgICAgcGFkZGluZzogMFxuICAgICAgLmRpdG8tbGFiZWxcbiAgICAgICAgbWFyZ2luOiAwXG4gICAgICAgIGxhYmVsXG4gICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbFxuICAgICAgLmRpdG8tcGFuZVxuICAgICAgICBtYXJnaW46IDAgKC0kZm9ybS1zcGFjaW5nLWhhbGYpXG4gICAgICAuZGl0by1jb250YWluZXJcbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFuZWwnLCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFuZWxUYWJDb21wb25lbnQ6IHsgdHlwZTogRGl0b0NvbXBvbmVudCwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3duRGF0YTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhbmVsQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFuZWxUYWJDb21wb25lbnRcbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKHRoaXMuc2NoZW1hLmJ1dHRvbnMpXG4gICAgfSxcblxuICAgIHRhcmdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS50YXJnZXQgfHwgdGhpcy5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICBoYXNPd25EYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5vd25EYXRhXG4gICAgfSxcblxuICAgIHBhbmVsRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm93bkRhdGEgfHwgdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIHBhbmVsU2NoZW1hKCkge1xuICAgICAgaWYgKHRoaXMuaGFzT3duRGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY2hlbWFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBgZGF0YWAgZnJvbSB0aGUgc2NoZW1hLCBzbyB0aGF0IERpdG9TY2hlbWEgaXNuJ3QgdXNpbmcgaXQgdG9cbiAgICAgICAgLy8gcHJvZHVjZSBpdHMgb3duIGRhdGEuIFNlZSAkZmlsdGVycyBwYW5lbCBmb3IgbW9yZSBkZXRhaWxzIG9uIGRhdGEuXG4gICAgICAgIGNvbnN0IHsgZGF0YSwgLi4uc2NoZW1hIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICByZXR1cm4gc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhbmVsVGFnKCkge1xuICAgICAgLy8gUGFuZWxzIHRoYXQgcHJvdmlkZSB0aGVpciBvd24gZGF0YSBuZWVkIHRoZWlyIG93biBmb3JtLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/ICdmb3JtJyA6ICdkaXYnXG4gICAgfSxcblxuICAgIHBhbmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBJZiB0aGUgcGFuZWwgcHJvdmlkZXMgaXRzIG93biBkYXRhLCB0aGVuIGl0IG5lZWRzIHRvIHByZWZpeCBhbGxcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCBpdHMgZGF0YS1wYXRoLCBidXQgaWYgaXQgc2hhcmVzIGRhdGEgd2l0aCB0aGUgc2NoZW1hXG4gICAgICAvLyBjb21wb25lbnQsIHRoZW4gaXQgc2hvdWxkIHNoYXJlIHRoZSBkYXRhLXBhdGggbmFtZSBzcGFjZSB0b28uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gdGhpcy5kYXRhUGF0aCA6IHRoaXMuc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoXG4gICAgfSxcblxuICAgIHZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICAvLyBOT1RFOiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBhcyBgc2NoZW1hLmRhdGFgIGhhbmRsaW5nIGluIERpdG9TY2hlbWEsXG4gICAgLy8gd2hlcmUgdGhlIGRhdGEgaXMgYWRkZWQgdG8gdGhlIGFjdHVhbCBjb21wb25lbnQuXG4gICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLnNjaGVtYVxuICAgIGlmIChkYXRhKSB7XG4gICAgICB0aGlzLm93bkRhdGEgPSBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgID8gZGF0YS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgOiBkYXRhXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIFJlZ2lzdGVyIHRoZSBwYW5lbHMgc28gdGhhdCBvdGhlciBjb21wb25lbnRzIGNhbiBmaW5kIHRoZW0gYnkgdGhlaXJcbiAgICAgIC8vIGRhdGEtcGF0aCwgZS5nLiBpbiBUeXBlTGlzdC5vbkZpbHRlckVycm9ycygpXG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lbCh0aGlzLCBhZGQpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXBhbmVscyhcbiAgdi1pZj1cInBhbmVscy5sZW5ndGggPiAwXCJcbilcbiAgZGl0by1wYW5lbChcbiAgICB2LWZvcj1cInsgc2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50IH0gaW4gcGFuZWxzXCJcbiAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgIDprZXk9XCJnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKHNjaGVtYS5uYW1lKVwiXG4gICAgOmRpc2FibGVkPVwic2NoZW1hLmRpc2FibGVkICE9IG51bGwgPyBzY2hlbWEuZGlzYWJsZWQgOiBkaXNhYmxlZFwiXG4gICAgOnBhbmVsVGFiQ29tcG9uZW50PVwidGFiQ29tcG9uZW50XCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcGFuZWxzKFxuICAgIHYtaWY9XCJwYW5lbHMubGVuZ3RoID4gMFwiXG4gIClcbiAgICBkaXRvLXBhbmVsKFxuICAgICAgdi1mb3I9XCJ7IHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCB9IGluIHBhbmVsc1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgICAgOmtleT1cImdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKHNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJzY2hlbWEuZGlzYWJsZWQgIT0gbnVsbCA/IHNjaGVtYS5kaXNhYmxlZCA6IGRpc2FibGVkXCJcbiAgICAgIDpwYW5lbFRhYkNvbXBvbmVudD1cInRhYkNvbXBvbmVudFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXBhbmVsc1xuICAgIG1heC13aWR0aDogJGNvbnRlbnQtc2lkZWJhci13aWR0aFxuICAgIG1pbi13aWR0aDogY2FsYygkY29udGVudC1zaWRlYmFyLXdpZHRoIC8gMilcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFuZWxzJywge1xuICBwcm9wczoge1xuICAgIHBhbmVsczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgICAgIC8vIEFsbG93IHNlcGFyYXRlIHRhYnMgdG8gdXNlIHBhbmVscyBvZiB0aGUgc2FtZSBuYW1lLCBieVxuICAgICAgLy8gcHJlZml4aW5nIHRoZWlyIGtleSB3aXRoIHRoZSB0YWIgbmFtZS5cbiAgICAgIHJldHVybiB0YWJDb21wb25lbnQgPyBgJHt0YWJDb21wb25lbnQudGFifV8ke2RhdGFQYXRofWAgOiBkYXRhUGF0aFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1idXR0b25zKFxuICB2LWlmPVwiYnV0dG9uU2NoZW1hcyB8fCAkc2xvdHMuZGVmYXVsdFwiXG4gIC8qIFBhc3Mgb24gJGxpc3RlbmVycyBzbyB0aGF0IGRpdG8tZWRpdC1idXR0b25zIGNhbiBwYXNzIGV2ZW50cy4gKi9cbiAgdi1vbj1cIiRsaXN0ZW5lcnNcIlxuKVxuICBkaXRvLWNvbnRhaW5lcihcbiAgICB2LWZvcj1cIihidXR0b25TY2hlbWEsIGJ1dHRvbkRhdGFQYXRoKSBpbiBidXR0b25TY2hlbWFzXCJcbiAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGJ1dHRvblNjaGVtYSlcIlxuICAgIDprZXk9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGJ1dHRvblNjaGVtYS5uYW1lKVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgKVxuICAvLyBSZW5kZXIgZWFjaCBub2RlIGluIHRoZSBkZWZhdWx0IHNsb3QgdGhyb3VnaCBgZGl0by12bm9kZWAsIHNvIGl0IGNhbiBiZVxuICAvLyB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gIC5kaXRvLWNvbnRhaW5lcihcbiAgICB2LWZvcj1cIm5vZGUgaW4gJHNsb3RzLmRlZmF1bHRcIlxuICAgIHYtaWY9XCJub2RlLnRhZ1wiXG4gIClcbiAgICBkaXRvLXZub2RlKDpub2RlPVwibm9kZVwiKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tYnV0dG9ucyhcbiAgICB2LWlmPVwiYnV0dG9uU2NoZW1hcyB8fCAkc2xvdHMuZGVmYXVsdFwiXG4gICAgLyogUGFzcyBvbiAkbGlzdGVuZXJzIHNvIHRoYXQgZGl0by1lZGl0LWJ1dHRvbnMgY2FuIHBhc3MgZXZlbnRzLiAqL1xuICAgIHYtb249XCIkbGlzdGVuZXJzXCJcbiAgKVxuICAgIGRpdG8tY29udGFpbmVyKFxuICAgICAgdi1mb3I9XCIoYnV0dG9uU2NoZW1hLCBidXR0b25EYXRhUGF0aCkgaW4gYnV0dG9uU2NoZW1hc1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGJ1dHRvblNjaGVtYSlcIlxuICAgICAgOmtleT1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJidXR0b25TY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGJ1dHRvblNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgKVxuICAgIC8vIFJlbmRlciBlYWNoIG5vZGUgaW4gdGhlIGRlZmF1bHQgc2xvdCB0aHJvdWdoIGBkaXRvLXZub2RlYCwgc28gaXQgY2FuIGJlXG4gICAgLy8gd3JhcHBlZCBpbiBhIGAuZGl0by1jb250YWluZXJgIGNsYXNzLlxuICAgIC5kaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtZm9yPVwibm9kZSBpbiAkc2xvdHMuZGVmYXVsdFwiXG4gICAgICB2LWlmPVwibm9kZS50YWdcIlxuICAgIClcbiAgICAgIGRpdG8tdm5vZGUoOm5vZGU9XCJub2RlXCIpXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbi5kaXRvLWJ1dHRvbnNcbiAgPiAuZGl0by1jb250YWluZXJcbiAgICBwYWRkaW5nOiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWJ1dHRvbnMnLCB7XG4gIHByb3ZpZGU6IHtcbiAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIC8vIENvbXB1dGUgYSBidXR0b25zIGxpc3Qgd2hpY2ggaGFzIHRoZSBkYXRhUGF0aCBiYWtlZCBpbnRvIGl0cyBrZXlzLlxuICAgICAgY29uc3QgeyBkYXRhUGF0aCwgYnV0dG9ucyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGJ1dHRvbnNcbiAgICAgICAgPyBPYmplY3QudmFsdWVzKGJ1dHRvbnMpLnJlZHVjZSgoc2NoZW1hcywgYnV0dG9uKSA9PiB7XG4gICAgICAgICAgc2NoZW1hc1thcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgYnV0dG9uLm5hbWUpXSA9IGJ1dHRvblxuICAgICAgICAgIHJldHVybiBzY2hlbWFzXG4gICAgICAgIH0sIHt9KVxuICAgICAgICA6IG51bGxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZGl0by1idXR0b25zLmRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgOmJ1dHRvbnM9XCJidXR0b25zXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICA6ZGF0YT1cImRhdGFcIlxuICA6bWV0YT1cIm1ldGFcIlxuICA6c3RvcmU9XCJzdG9yZVwiXG4gIC8qIFByZXZlbnQgY2xpY2sgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gZGl0by1sYWJlbDogKi9cbiAgQGNsaWNrLnN0b3BcbilcbiAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgYS5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNEcmFnZ2FibGVcIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICApXG4gIHJvdXRlci1saW5rLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0VkaXRhYmxlXCJcbiAgICA6dG89XCJ7IHBhdGg6IGVkaXRQYXRoIH1cIiBhcHBlbmRcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgKVxuICBkaXRvLWNyZWF0ZS1idXR0b24oXG4gICAgdi1pZj1cImlzQ3JlYXRhYmxlXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6cGF0aD1cImNyZWF0ZVBhdGhcIlxuICAgIDp2ZXJiPVwidmVyYnMuY3JlYXRlXCJcbiAgICA6dGV4dD1cImNyZWF0ZUJ1dHRvblRleHRcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNEZWxldGFibGVcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgQGNsaWNrPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZGl0by1idXR0b25zLmRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIC8qIFByZXZlbnQgY2xpY2sgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gZGl0by1sYWJlbDogKi9cbiAgICBAY2xpY2suc3RvcFxuICApXG4gICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgdi1pZj1cImlzRHJhZ2dhYmxlXCJcbiAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgIClcbiAgICByb3V0ZXItbGluay5kaXRvLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0VkaXRhYmxlXCJcbiAgICAgIDp0bz1cInsgcGF0aDogZWRpdFBhdGggfVwiIGFwcGVuZFxuICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgKVxuICAgIGRpdG8tY3JlYXRlLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgICA6dmVyYj1cInZlcmJzLmNyZWF0ZVwiXG4gICAgICA6dGV4dD1cImNyZWF0ZUJ1dHRvblRleHRcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB2LWlmPVwiaXNEZWxldGFibGVcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgQGNsaWNrPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tZWRpdC1idXR0b25zXG4gICAgLy8gT3ZlcnJpZGUgY3Vyc29yIGZyb20gY29sbGFwc2libGUgZGl0by1sYWJlbDpcbiAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICBmbGV4OiBub25lXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZWRpdC1idXR0b25zJywge1xuICBwcm9wczoge1xuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY3JlYXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3JlYXRlUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYS5mb3JtKVxuICAgIH0sXG5cbiAgICBpc0RyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZHJhZ2dhYmxlJylcbiAgICB9LFxuXG4gICAgaXNFZGl0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZWRpdGFibGUnKSAmJiAhIXRoaXMuZWRpdFBhdGhcbiAgICB9LFxuXG4gICAgaXNDcmVhdGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2NyZWF0YWJsZScpICYmICEhdGhpcy5jcmVhdGVQYXRoXG4gICAgfSxcblxuICAgIGlzRGVsZXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdkZWxldGFibGUnKVxuICAgIH0sXG5cbiAgICBjcmVhdGVCdXR0b25UZXh0KCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIG92ZXJyaWRlIGNyZWF0ZSBidXR0b24gdGhyb3VnaCBjcmVhdGFibGUgb2JqZWN0OlxuICAgICAgICB0aGlzLnNjaGVtYS5jcmVhdGFibGU/LmxhYmVsIHx8XG4gICAgICAgIChcbiAgICAgICAgICAvLyBBdXRvLWdlbmVyYXRlIGNyZWF0ZSBidXR0b24gbGFiZWxzIGZyb20gZnJvbSBsYWJlbHMgZm9yIGxpc3RcbiAgICAgICAgICAvLyBzb3VyY2VzIHdpdGggb25seSBvbmUgZm9ybTpcbiAgICAgICAgICB0aGlzLmZvcm1MYWJlbCAmJlxuICAgICAgICAgIGAke2NhcGl0YWxpemUodGhpcy52ZXJicy5jcmVhdGUpfSAke3RoaXMuZm9ybUxhYmVsfWBcbiAgICAgICAgKSB8fFxuICAgICAgICBudWxsXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYXNPcHRpb24obmFtZSkge1xuICAgICAgLy8gVGhlIG9wdGlvbnMgb2YgdGhlIG91dGVyIGNvbXBvbmVudCBhcmUgcGFzc2VkIHRvIHRoZSBidXR0b25zIGNvbXBvbmVudFxuICAgICAgLy8gdGhyb3VnaCBwcm9wZXJ0aWVzIGB0aGlzW25hbWVdYCwgYnV0IGNhbiBiZSBkaXNhYmxlZCBvbiBhIHBlci1mb3JtXG4gICAgICAvLyBiYXNpcyBieSBzZXR0aW5nIGBzY2hlbWFbbmFtZV1gIHRvIGBmYWxzZWAuXG4gICAgICByZXR1cm4gISEodGhpc1tuYW1lXSAmJiB0aGlzLnNjaGVtYVtuYW1lXSAhPT0gZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNyZWF0ZS1idXR0b25cbiAgdGVtcGxhdGUodi1pZj1cInNob3dQdWxsZG93blwiKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICAgKSB7eyB0ZXh0IH19XG4gICAgdWwuZGl0by1wdWxsZG93bihcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gICAgKVxuICAgICAgbGkodi1mb3I9XCIoZm9ybSwgdHlwZSkgaW4gZm9ybXNcIilcbiAgICAgICAgYShcbiAgICAgICAgICB2LWlmPVwiaXNDcmVhdGFibGUoZm9ybSlcIlxuICAgICAgICAgIDpjbGFzcz1cImBkaXRvLXR5cGUtJHt0eXBlfWBcIlxuICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odHlwZSlcIlxuICAgICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodHlwZSlcIlxuICAgICAgICApIHt7IGdldExhYmVsKGZvcm0pIH19XG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWVsc2VcbiAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgIEBjbGljaz1cImNyZWF0ZUl0ZW0oZm9ybXMuZGVmYXVsdClcIlxuICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgOnRpdGxlPVwibGFiZWxpemUodmVyYilcIlxuICApIHt7IHRleHQgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNyZWF0ZS1idXR0b25cbiAgICB0ZW1wbGF0ZSh2LWlmPVwic2hvd1B1bGxkb3duXCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgICAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgICAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICAgICApIHt7IHRleHQgfX1cbiAgICAgIHVsLmRpdG8tcHVsbGRvd24oXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gICAgICApXG4gICAgICAgIGxpKHYtZm9yPVwiKGZvcm0sIHR5cGUpIGluIGZvcm1zXCIpXG4gICAgICAgICAgYShcbiAgICAgICAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZShmb3JtKVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJgZGl0by10eXBlLSR7dHlwZX1gXCJcbiAgICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odHlwZSlcIlxuICAgICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh0eXBlKVwiXG4gICAgICAgICAgKSB7eyBnZXRMYWJlbChmb3JtKSB9fVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtZWxzZVxuICAgICAgOnR5cGU9XCJpc0lubGluZWQgPyAnYnV0dG9uJyA6ICdzdWJtaXQnXCJcbiAgICAgIEBjbGljaz1cImNyZWF0ZUl0ZW0oZm9ybXMuZGVmYXVsdClcIlxuICAgICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICApIHt7IHRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1jcmVhdGUtYnV0dG9uXG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLmRpdG8tcHVsbGRvd25cbiAgICAgIHJpZ2h0OiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Rm9ybVNjaGVtYXMsIGlzSW5saW5lZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNyZWF0ZS1idXR0b24nLCB7XG4gIG1peGluczogW1B1bGxkb3duTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB2ZXJiOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0ZXh0OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBzaG93UHVsbGRvd24oKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5mb3JtcykubGVuZ3RoID4gMSB8fCAhdGhpcy5mb3Jtcy5kZWZhdWx0XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBpc0NyZWF0YWJsZShmb3JtKSB7XG4gICAgICAvLyBGb3JtcyBjYW4gYmUgZXhjbHVkZWQgZnJvbSB0aGUgbGlzdCBieSBwcm92aWRpbmcgYGNyZWF0YWJsZTogZmFsc2VgXG4gICAgICByZXR1cm4gZm9ybS5jcmVhdGFibGUgIT09IGZhbHNlXG4gICAgfSxcblxuICAgIGNyZWF0ZUl0ZW0oZm9ybSwgdHlwZSA9IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRhYmxlKGZvcm0pKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5saW5lZCkge1xuICAgICAgICAgIHRoaXMuc291cmNlQ29tcG9uZW50LmNyZWF0ZUl0ZW0oZm9ybSwgdHlwZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgICAgICBwYXRoOiBgJHt0aGlzLnBhdGh9L2NyZWF0ZWAsXG4gICAgICAgICAgICBxdWVyeTogeyB0eXBlIH0sXG4gICAgICAgICAgICBhcHBlbmQ6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhbGxvd2VkIHRvIGNyZWF0ZSBpdGVtIGZvciBnaXZlbiBmb3JtJylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93blNlbGVjdCh0eXBlKSB7XG4gICAgICB0aGlzLmNyZWF0ZUl0ZW0odGhpcy5mb3Jtc1t0eXBlXSwgdHlwZSlcbiAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1jbGlwYm9hcmQuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgdi1pZj1cImNsaXBib2FyZFwiXG4pXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1jb3B5KFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHJlZj1cImNvcHlEYXRhXCJcbiAgICB0aXRsZT1cIkNvcHkgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIWNvcHlFbmFibGVkXCJcbiAgICBAY2xpY2s9XCJvbkNvcHlcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1wYXN0ZShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0aXRsZT1cIlBhc3RlIERhdGFcIlxuICAgIDpkaXNhYmxlZD1cIiFwYXN0ZUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uUGFzdGVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jbGlwYm9hcmQuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgICB2LWlmPVwiY2xpcGJvYXJkXCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1jb3B5KFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICByZWY9XCJjb3B5RGF0YVwiXG4gICAgICB0aXRsZT1cIkNvcHkgRGF0YVwiXG4gICAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgICAgQGNsaWNrPVwib25Db3B5XCJcbiAgICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB0aXRsZT1cIlBhc3RlIERhdGFcIlxuICAgICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgICBAY2xpY2s9XCJvblBhc3RlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNPYmplY3QsIGNsb25lLCBkZWluZGVudCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNsaXBib2FyZCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgY2xpcGJvYXJkOiB7IHR5cGU6IFtCb29sZWFuLCBPYmplY3RdLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29weUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgcGFzdGVFbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpeENsaXBib2FyZDogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsaXBib2FyZE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3QodGhpcy5jbGlwYm9hcmQpID8gdGhpcy5jbGlwYm9hcmQgOiB7fVxuICAgIH0sXG5cbiAgICBjb3B5RGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgY29weSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gY29weVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT4gY29weS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YVxuICAgICAgICB9KSlcbiAgICAgICAgOiBjbGlwYm9hcmREYXRhID0+IGNsb25lKGNsaXBib2FyZERhdGEpXG4gICAgfSxcblxuICAgIHBhc3RlRGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgcGFzdGUgfSA9IHRoaXMuY2xpcGJvYXJkT3B0aW9uc1xuICAgICAgcmV0dXJuIHBhc3RlXG4gICAgICAgID8gY2xpcGJvYXJkRGF0YSA9PiBwYXN0ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YVxuICAgICAgICB9KSlcbiAgICAgICAgOiBjbGlwYm9hcmREYXRhID0+IGNsaXBib2FyZERhdGFcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICAvLyBDaGVjayBjbGlwYm9hcmQgY29udGVudCB3aGVuZXZlciBzb21ldGhpbmcgZ2V0cyBjb3BpZWQgb3IgdGhlIHdpbmRvdyBnZXRzXG4gICAgLy8gKHJlKWFjdGl2YXRlZCwgYXMgdGhvc2UgYXJlIHRoZSBtb21lbnRzIHdoZW4gdGhlIGNsaXBib2FyZCBjYW4gY2hhbmdlOlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgIGNvcHk6IHRoaXMuY2hlY2tDbGlwYm9hcmRcbiAgICB9KVxuICAgIHRoaXMuZG9tT24od2luZG93LCB7XG4gICAgICBmb2N1czogdGhpcy5jaGVja0NsaXBib2FyZFxuICAgIH0pXG4gICAgdGhpcy4kd2F0Y2goJ2RhdGEnLCB7XG4gICAgICAvLyBDaGVjayByaWdodCBhd2F5IGFsc28gaW4gY2FzZSB0aGVyZSdzIGFscmVhZHkgZGF0YSAoZS5nLiBjcmVhdGUgZm9ybSkuXG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiAodG8sIGZyb20pID0+IHtcbiAgICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgICAgdGhpcy5jaGVja0NsaXBib2FyZCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBhc3luYyBnZXRDbGlwYm9hcmREYXRhKHJlcG9ydCkge1xuICAgICAgLy8gVXNlIHRoZSBpbnRlcm5hbCBjbGlwYm9hcmQgYXMgZmFsbGJhY2suXG4gICAgICBsZXQgeyBjbGlwYm9hcmREYXRhIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBqc29uID0gYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ucmVhZFRleHQ/LigpXG4gICAgICAgIGlmICh0aGlzLmZpeENsaXBib2FyZCAmJiBqc29uKSB7XG4gICAgICAgICAgLy8gVGhpcyBhcHBlYXJzIHRvIGJlIG5lZWRlZCBvbiBTYWZhcmkgdG8gcHJldmVudCBhIHN0cmFuZ2UgXCJQYXN0ZVwiXG4gICAgICAgICAgLy8gYnV0dG9uIGZyb20gYXBwZWFyaW5nIHdoZW4gdGhlIGNsaXBib2FyZCBpcyBhY2Nlc3NlZCAod2h5PyEpLlxuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LndyaXRlVGV4dD8uKGpzb24pXG4gICAgICAgICAgdGhpcy5maXhDbGlwYm9hcmQgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmIChqc29uKSB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YSA9IEpTT04ucGFyc2UoanNvbilcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChyZXBvcnQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLm5hbWUsIGVyci5tZXNzYWdlKVxuICAgICAgICAgIGlmIChlcnIubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgYWxlcnQoZGVpbmRlbnRgXG4gICAgICAgICAgICAgIFRoZSBkYXRhIGluIHRoZSBjbGlwYm9hcmQgYXBwZWFycyB0byBiZSBtYWxmb3JtZWQ6XG4gICAgICAgICAgICAgICR7ZXJyLm1lc3NhZ2V9XG4gICAgICAgICAgICBgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgeyAkc2NoZW1hLCAuLi5kYXRhIH0gPSBjbGlwYm9hcmREYXRhIHx8IHt9XG4gICAgICByZXR1cm4gJHNjaGVtYSA9PT0gdGhpcy5zY2hlbWFDb21wb25lbnQ/LnNjaGVtYS5uYW1lID8gZGF0YSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgY2hlY2tDbGlwYm9hcmQoKSB7XG4gICAgICB0aGlzLmNvcHlFbmFibGVkID0gISF0aGlzLmRhdGFcbiAgICAgIC8vIFNlZSBpZiB0aGUgY2xpcGJvYXJkIGNvbnRlbnQgaXMgdmFsaWQgSlNPTiBkYXRhIHRoYXQgaXMgY29tcGF0aWJsZVxuICAgICAgLy8gd2l0aCB0aGUgY3VycmVudCB0YXJnZXQgc2NoZW1hLCBhbmQgb25seSB0aGVuIGFjdGl2YXRlIHRoZSBwYXN0aW5nOlxuICAgICAgdGhpcy5wYXN0ZUVuYWJsZWQgPSAhIShhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEoZmFsc2UpKSAvLyBkb24ndCByZXBvcnRcbiAgICB9LFxuXG4gICAgYXN5bmMgb25Db3B5KCkge1xuICAgICAgbGV0IGRhdGEgPSB0aGlzLnNjaGVtYUNvbXBvbmVudD8uY2xpcGJvYXJkRGF0YVxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGRhdGEgJiYgdGhpcy5jb3B5RGF0YShkYXRhKVxuICAgICAgICAvLyBLZWVwIGFuIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgICAgdGhpcy5hcHBTdGF0ZS5jbGlwYm9hcmREYXRhID0gZGF0YVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKVxuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LndyaXRlVGV4dD8uKGpzb24pXG4gICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBhY3RpdmF0ZSB0aGUgcGFzdGUgYnV0dG9uLCBkZXBlbmRkaW5nIG9uIGJyb3dzZXJzOlxuICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tDbGlwYm9hcmQoKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLm5hbWUsIGVyci5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblBhc3RlKCkge1xuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEodHJ1ZSkgLy8gcmVwb3J0XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLnBhc3RlRGF0YShkYXRhKVxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50LnNldERhdGEoZGF0YSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgYWxlcnQoZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldExvYWRpbmcoaXNMb2FkaW5nLCB7IHVwZGF0ZVJvb3QgPSBmYWxzZSwgdXBkYXRlVmlldyA9IGZhbHNlIH0gPSB7fSkge1xuICAgICAgaWYgKCF0aGlzLmlzTG9hZGluZyBeICFpc0xvYWRpbmcpIHsgLy8gQm9vbGVhbiB4b3JcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgICAgICBpZiAodXBkYXRlUm9vdCkge1xuICAgICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5yZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVWaWV3KSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldExvYWRpbmcodGhpcy5pc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi9JdGVtTWl4aW4uanMnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuaW1wb3J0IHsgc2V0RGVmYXVsdHMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgTG9hZGluZ01peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAvLyBQYXNzIGxvY2FsIHZlcmJzIG92ZXJyaWRlcyBvbiB0byBjaGlsZHJlbiwgc2VlIHZlcmJzKCkgY29tcHV0ZWQgcHJvcC5cbiAgICAgICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyxcbiAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdGhpcy5oYXNEYXRhXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRlZERhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgLy8gUmV0dXJucyB0aGUgcmVzb3VyY2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVzb3VyY2UgZm9yIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBzb3VyY2Ugc2NoZW1hLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBhIGRhdGEtc291cmNlIGlmIGl0IGhhcyBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZTpcbiAgICAgIHJldHVybiAhIXRoaXMucmVzb3VyY2VcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICAvLyBSZXR1cm5zIGBmYWxzZWBoZXJlLCBidXQgaXMgb3ZlcnJpZGRlbiB0byByZXR1cm4gYHRydWVgIGluXG4gICAgICAvLyBgU291cmNlTWl4aW5gIGZvciBjb21wb25lbnQgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGVpciBvd24gZGF0YSwgYnV0XG4gICAgICAvLyBlZGl0IHRoZWlyIGl0ZW1zIHRocm91Z2ggYSBsaW5rZWQgdmlldy4gIEluIHRoaXMgY2FzZSwgcmVhbCBpZHMgbmVlZCB0b1xuICAgICAgLy8gYmUgdXNlZC5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIC8vIENoZWNrIHRoZSBmb3JtIHRoYXQgdGhpcyBjb21wb25lbnQgYmVsb25ncyB0byBhcyB3ZWxsLCBzaW5jZSBpdCBtYXkgYmVcbiAgICAgIC8vIGluIGNyZWF0aW9uIG1vZGUsIHdoaWNoIG1ha2VzIGl0IHRyYW5zaWVudC5cbiAgICAgIC8vIE5PVEU6IFRoaXMgZG9lcyBub3QgbG9vcCBlbmRsZXNzbHkgYmVjYXVzZSBEaXRvRm9ybSByZWRlZmluZXNcbiAgICAgIC8vIGBpc1RyYW5zaWVudCgpYCB0byBvbmx5IHJldHVybiBgIXRoaXMucHJvdmlkZXNEYXRhYC5cbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1Db21wb25lbnRcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAhdGhpcy5saW5rc1RvVmlldyB8fFxuICAgICAgICBmb3JtICYmIChcbiAgICAgICAgICBmb3JtLmlzVHJhbnNpZW50IHx8XG4gICAgICAgICAgZm9ybS5pc0NyZWF0aW5nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdHJhbnNpZW50Tm90ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgJzxiPk5vdGU8L2I+OiB0aGUgcGFyZW50IHN0aWxsIG5lZWRzIHRvIGJlIHNhdmVkICcgK1xuICAgICAgICAnaW4gb3JkZXIgdG8gcGVyc2lzdCB0aGlzIGNoYW5nZS4nXG4gICAgICApXG4gICAgfSxcblxuICAgIHNob3VsZExvYWQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAhdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICAhdGhpcy5pc0xvYWRpbmdcbiAgICAgIClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIC8vIEJhc2UgZGVmaW5pdGlvbiwgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IERpdG9Gb3JtIGFuZCBTb3VyY2VNaXhpblxuICAgICAgcmV0dXJuICEhdGhpcy5sb2FkZWREYXRhXG4gICAgfSxcblxuICAgIHZlcmJzKCkge1xuICAgICAgLy8gVGhlIGFjdHVhbCBjb2RlIGlzIHRoZSBgZ2V0VmVyYnMoKWAgbWV0aG9kLCBmb3IgZWFzaWVyIG92ZXJyaWRpbmcgb2ZcbiAgICAgIC8vIHRoaXMgY29tcHV0ZWQgcHJvcGVydHkgaW4gY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgUmVzb3VyY2VNaXhpbi5cbiAgICAgIHJldHVybiB0aGlzLmdldFZlcmJzKClcbiAgICB9LFxuXG4gICAgcGFnaW5hdGlvblJhbmdlKCkge1xuICAgICAgLy8gT25seSBhcHBseSBwYWdpbmF0aW9uIHRvIGxpc3RzLlxuICAgICAgY29uc3QgeyBwYWdpbmF0ZTogYW1vdW50IH0gPSB0aGlzLnNvdXJjZVNjaGVtYVxuICAgICAgaWYgKHRoaXMuaXNMaXN0U291cmNlICYmIGFtb3VudCkge1xuICAgICAgICBjb25zdCB7IHBhZ2UgPSAwIH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcGFnZSAqIGFtb3VudFxuICAgICAgICByZXR1cm4gW3N0YXJ0LCBzdGFydCArIGFtb3VudCAtIDFdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHF1ZXJ5UGFyYW1zKCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnBhZ2luYXRpb25SYW5nZVxuICAgICAgY29uc3QgeyBwYWdlLCAuLi5xdWVyeSB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucXVlcnksIC8vIFF1ZXJ5IG1heSBvdmVycmlkZSBzY29wZS5cbiAgICAgICAgLi4uKHJhbmdlICYmIHtcbiAgICAgICAgICAvLyBQYXNzIHBhZ2luYXRpb24gYXMgcmFuZ2UsIHNvIHRoYXQgd2UgYXV0b21hdGljYWxseSBnZXQgT2JqZWN0aW9uJ3NcbiAgICAgICAgICAvLyByZXN1bHRzIGNvdW50aW5nOlxuICAgICAgICAgIHJhbmdlOiByYW5nZS5qb2luKCcsJylcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBXaGVuIGNyZWF0aW5nIG5lc3RlZCBkYXRhLCB3ZSBzdGlsbCBuZWVkIHRvIGNhbGwgc2V0dXBEYXRhKClcbiAgICBpZiAodGhpcy5wcm92aWRlc0RhdGEgfHwgdGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICB0aGlzLnNldHVwRGF0YSgpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRSZXNvdXJjZSgpIHtcbiAgICAgIC8vIFRoaXMgaXMgZGVmaW5lZCBhcyBhIG1ldGhvZCBzbyB0aGUgY29tcHV0ZWQgYHJlc291cmNlYCBnZXR0ZXIgY2FuXG4gICAgICAvLyBiZSBvdmVycmlkZGVuIGFuZCBgc3VwZXJgIGZ1bmN0aW9uYWxpdHkgY2FuIHN0aWxsIGJlIGFjY2Vzc2VkLlxuICAgICAgcmV0dXJuIGdldFJlc291cmNlKHRoaXMuc291cmNlU2NoZW1hPy5yZXNvdXJjZSwge1xuICAgICAgICB0eXBlOiAnY29sbGVjdGlvbicsXG4gICAgICAgIHBhcmVudDogdGhpcy5wYXJlbnRGb3JtQ29tcG9uZW50Py5yZXNvdXJjZSA/PyBudWxsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRWZXJicygpIHtcbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy4kdmVyYnMoKVxuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyB7XG4gICAgICAgICAgLi4udmVyYnMsXG4gICAgICAgICAgLy8gT3ZlcnJpZGUgZGVmYXVsdCB2ZXJicyB3aXRoIHRoZWlyIHRyYW5zaWVudCB2ZXJzaW9uczpcbiAgICAgICAgICBjcmVhdGU6ICdhZGQnLFxuICAgICAgICAgIGNyZWF0ZWQ6ICdhZGRlZCcsXG4gICAgICAgICAgc2F2ZTogJ2FwcGx5JyxcbiAgICAgICAgICBzYXZlZDogJ2FwcGxpZWQnLFxuICAgICAgICAgIGRlbGV0ZTogJ3JlbW92ZScsXG4gICAgICAgICAgZGVsZXRlZDogJ3JlbW92ZWQnXG4gICAgICAgIH1cbiAgICAgICAgOiB2ZXJic1xuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICAvLyBBY3R1YWwgY29kZSBpcyBpbiBzZXBhcmF0ZSBmdW5jdGlvbiBzbyBpdCdzIGVhc2VyIHRvIG92ZXJyaWRlXG4gICAgICAvLyBgc2V0dXBEYXRhKClgIGFuZCBhbmQgY2FsbCBgZW5zdXJlRGF0YSgpYCBmcm9tIHRoZSBvdmVycmlkZXMsXG4gICAgICAvLyBzZWUgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluLlxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgZW5zdXJlRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZExvYWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGF0YSkge1xuICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2FkRGF0YSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbG9hZERhdGEoKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgIH0sXG5cbiAgICBsb2FkRGF0YShjbGVhcikge1xuICAgICAgaWYgKCF0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIGlmIChjbGVhcikge1xuICAgICAgICAgIHRoaXMuY2xlYXJEYXRhKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlcXVlc3REYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIHJldHVybiBzZXREZWZhdWx0cyhzY2hlbWEsIHR5cGUgPyB7IHR5cGUgfSA6IHt9LCB0aGlzKVxuICAgIH0sXG5cbiAgICByZXF1ZXN0RGF0YSgpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMucXVlcnlQYXJhbXNcbiAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2dldCcsIHBhcmFtcyB9LCAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGRhdGE/LnR5cGUgPT09ICdGaWx0ZXJWYWxpZGF0aW9uJyAmJlxuICAgICAgICAgICAgICB0aGlzLm9uRmlsdGVyRXJyb3JzPy4oZGF0YS5lcnJvcnMpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNVbmF1dGhvcml6ZWRFcnJvcihyZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgLy8gVE9ETzogQ2FuIHdlIHJlYWxseSBzd2FsbG93IHRoZXNlIGVycm9ycz9cbiAgICAgICAgICAgICAgLy8gSXMgY2FsbGluZyBgZW5zdXJlVXNlcigpYCBpbiBgb25CZWZvcmVSZXF1ZXN0KClgIGVub3VnaD9cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhKHJlc3BvbnNlLmRhdGEpXG4gICAgICAgICAgdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2xvYWQnKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRpb25FcnJvcihyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMFxuICAgIH0sXG5cbiAgICBpc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAxXG4gICAgfSxcblxuICAgIGFzeW5jIGhhbmRsZVJlcXVlc3Qoe1xuICAgICAgbWV0aG9kLFxuICAgICAgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlLFxuICAgICAgZGF0YSxcbiAgICAgIHBhcmFtc1xuICAgIH0sIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBsb2FkaW5nT3B0aW9ucyA9IHtcbiAgICAgICAgdXBkYXRlUm9vdDogdHJ1ZSwgLy8gRGlzcGxheSBzcGlubmVyIGluIGhlYWRlciB3aGVuIGxvYWRpbmcgaW4gcmVzb3VyY2VzXG4gICAgICAgIHVwZGF0ZVZpZXc6IHRoaXMuaXNJblZpZXcgLy8gTm90aWZ5IHZpZXcgb2YgbG9hZGluZyBmb3IgdmlldyBjb21wb25lbnRzXG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICBjb25zdCByZXF1ZXN0ID0geyBtZXRob2QsIHJlc291cmNlLCBkYXRhLCBwYXJhbXMgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICAgIC8vIFBhc3MgYm90aCByZXF1ZXN0IGFuZCByZXNwb25zZSB0byB0aGUgY2FsbGJhY2ssIHNvIHRoZXkgY2FuIGJlXG4gICAgICAgIC8vIGV4cG9zZWQgdG8gZnVydGhlciBjYWxsYmFja3MgdGhyb3VnaCBEaXRvQ29udGV4dC5cbiAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiBjYWxsYmFjayByZXR1cm5zIHRydWUsIGVycm9ycyB3ZXJlIGFscmVhZHkgaGFuZGxlZC5cbiAgICAgICAgY29uc3QgeyByZXNwb25zZSB9ID0gZXJyb3JcbiAgICAgICAgaWYgKCFjYWxsYmFjayhlcnJvciwgcmVzcG9uc2UpKSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgaWYgKGRhdGEgJiYgaXNTdHJpbmcoZGF0YS50eXBlKSkge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogbGFiZWxpemUoZGF0YS50eXBlKSxcbiAgICAgICAgICAgICAgdGV4dDogZGF0YS5tZXNzYWdlIHx8IGVycm9yXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IGVycm9yXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlLCBsb2FkaW5nT3B0aW9ucylcbiAgICB9LFxuXG4gICAgZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpIHtcbiAgICAgIC8vIENvbnZlbnRpb246IG9ubHkgcG9zdCwgcHV0IGFuZCBwYXRjaCByZXF1ZXN0cyBwYXNzIHRoZSBkYXRhIGFzIHBheWxvYWQuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5jbHVkZXMobWV0aG9kKSAmJiAoXG4gICAgICAgICAgLy8gVE9ETzogVXNlIGBoYW5kbGVEYXRhU2NoZW1hKClgIGFzeW5jaHJvbm91c2x5IGhlcmUgaW5zdGVhZCwgdG9cbiAgICAgICAgICAvLyBvZmZlciB0aGUgc2FtZSBhbW91bnQgb2YgcG9zc2liaWxpdGllcyBmb3IgZGF0YSBsb2FkaW5nLlxuICAgICAgICAgIGJ1dHRvbi5nZXRTY2hlbWFWYWx1ZShbJ3Jlc291cmNlJywgJ2RhdGEnXSkgfHxcbiAgICAgICAgICBidXR0b24ucHJvY2Vzc2VkSXRlbVxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChidXR0b24pIHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gZ2V0UmVzb3VyY2UoYnV0dG9uLnNjaGVtYS5yZXNvdXJjZSwge1xuICAgICAgICBwYXJlbnQ6IHRoaXMucmVzb3VyY2VcbiAgICAgIH0pXG4gICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgeyBtZXRob2QgfSA9IHJlc291cmNlXG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKVxuICAgICAgICByZXR1cm4gdGhpcy5zdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEpXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICBzZXREYXRhID0gZmFsc2UsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBvbkVycm9yLFxuICAgICAgbm90aWZ5U3VjY2VzcyA9ICgpID0+IHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICB0aXRsZTogJ1JlcXVlc3QgU3VjY2Vzc2Z1bCcsXG4gICAgICAgIHRleHQ6ICdSZXF1ZXN0IHdhcyBzdWNjZXNzZnVsbHkgc2VudC4nXG4gICAgICB9KSxcbiAgICAgIG5vdGlmeUVycm9yID0gZXJyb3IgPT4gdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgYFVuYWJsZSB0byBzZW5kIHJlcXVlc3Qke2Vycm9yID8gJzonIDogJyd9YCxcbiAgICAgICAgICBlcnJvcj8ubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICBdXG4gICAgICB9KVxuICAgIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoXG4gICAgICAgICAgeyBtZXRob2QsIGRhdGEsIHJlc291cmNlIH0sXG4gICAgICAgICAgYXN5bmMgKGVyciwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAvLyBTZWUgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgRGl0byB2YWxpZGF0aW9uIGVycm9yOlxuICAgICAgICAgICAgICBjb25zdCBlcnJvcnMgPSB0aGlzLmlzVmFsaWRhdGlvbkVycm9yKHJlc3BvbnNlKSAmJiBkYXRhLmVycm9yc1xuICAgICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIHRydWUpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBpc09iamVjdChkYXRhKSA/IGRhdGEgOiBlcnJcbiAgICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IpXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnZXJyb3InLCB7XG4gICAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeUVycm9yLFxuICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHVuZGVybHlpbmcgZGF0YSBiZWZvcmUgY2FsbGluZyBgbm90aWZ5KClgIG9yXG4gICAgICAgICAgICAgIC8vIGB0aGlzLml0ZW1MYWJlbGAsIHNvIGlkIGlzIHNldCBhZnRlciBjcmVhdGluZyBuZXcgaXRlbXMuXG4gICAgICAgICAgICAgIGlmIChzZXREYXRhICYmIGRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGEoZGF0YSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvblN1Y2Nlc3M/LigpXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ3N1Y2Nlc3MnLCB7XG4gICAgICAgICAgICAgICAgbm90aWZ5OiBub3RpZnlTdWNjZXNzXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVtaXRCdXR0b25FdmVudChidXR0b24sIGV2ZW50LCB7IG5vdGlmeSwgZXJyb3IgfSkge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBjb250ZXh0IG91dHNpZGUgb2YgYGVtaXRFdmVudCgpYCwgc28gdGhhdFxuICAgICAgLy8gYGNvbnRleHQud2FzTm90aWZpZWRgIGNhbiBiZSBjaGVja2VkIGFmdGVyLlxuICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBEaXRvQ29udGV4dChidXR0b24sIHtcbiAgICAgICAgbmVzdGVkOiBmYWxzZSxcbiAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgICAgICBpdGVtTGFiZWw6IHRoaXMuaXRlbUxhYmVsLFxuICAgICAgICBlcnJvclxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJ1dHRvbi5lbWl0RXZlbnQoZXZlbnQsIHsgY29udGV4dCB9KVxuICAgICAgaWYgKFxuICAgICAgICBub3RpZnkgJiZcbiAgICAgICAgLy8gUHJldmVudCBkZWZhdWx0IGlmIGFueXRoaW5nIHdhcyByZXR1cm5lZCBmcm9tIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAgICByZXMgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAvLyBEbyBub3QgZGlzcGxheSBkZWZhdWx0IG5vdGlmaWNhdGlvbiBpZiB0aGUgZXZlbnQgaGFuZGxlciBhbHJlYWR5XG4gICAgICAgIC8vIGRpc3BsYXllZCBhIG5vdGlmaWNhdGlvbi5cbiAgICAgICAgIWNvbnRleHQud2FzTm90aWZpZWRcbiAgICAgICkge1xuICAgICAgICBub3RpZnkoZXJyb3IpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLWZvcm0uZGl0by1zY3JvbGwtcGFyZW50KFxuICA6Y2xhc3M9XCJ7ICdkaXRvLWZvcm0tbmVzdGVkJzogaXNOZXN0ZWRSb3V0ZSB9XCJcbilcbiAgLy8gTk9URTogTmVzdGVkIGZvcm0gY29tcG9uZW50cyBhcmUga2VwdCBhbGl2ZSBieSB1c2luZyBgdi1zaG93YCBpbnN0ZWFkIG9mXG4gIC8vIGB2LWlmYCBoZXJlLCBzbyBldmVudCBoYW5kbGluZyBhbmQgb3RoZXIgdGhpbmdzIHN0aWxsIHdvcmsgd2l0aCBuZXN0ZWRcbiAgLy8gZWRpdGluZy4gT25seSByZW5kZXIgYSByb3V0ZXItdmlldyBoZXJlIGlmIHRoaXMgaXNuJ3QgdGhlIGxhc3QgZGF0YSByb3V0ZVxuICAvLyBhbmQgbm90IGEgbmVzdGVkIGZvcm0gcm91dGUsIHdoaWNoIHdpbGwgYXBwZWFyIGVsc2V3aGVyZSBpbiBpdHMgb3duIHZpZXcuXG4gIHJvdXRlci12aWV3KFxuICAgIHYtaWY9XCIhKGlzTGFzdFVubmVzdGVkUm91dGUgfHwgaXNOZXN0ZWRSb3V0ZSlcIlxuICAgIHYtc2hvdz1cIiFpc0FjdGl2ZVwiXG4gIClcbiAgLy8gVXNlIGEgPGRpdj4gZm9yIGlubGluZWQgZm9ybXMsIGFzIHdlIHNob3VsZG4ndCBuZXN0IGFjdHVhbCA8Zm9ybT4gdGFncy5cbiAgY29tcG9uZW50LmRpdG8tc2Nyb2xsKFxuICAgIHYtc2hvdz1cImlzQWN0aXZlXCJcbiAgICA6aXM9XCJpc05lc3RlZFJvdXRlID8gJ2RpdicgOiAnZm9ybSdcIlxuICAgIEBzdWJtaXQucHJldmVudFxuICApXG4gICAgLy8gUHJldmVudCBpbXBsaWNpdCBzdWJtaXNzaW9uIG9mIHRoZSBmb3JtLCBmb3IgZXhhbXBsZSB3aGVuIHR5cGluZyBlbnRlclxuICAgIC8vIGluIGFuIGlucHV0IGZpZWxkLlxuICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTUwNzgwNlxuICAgIGJ1dHRvbihcbiAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgZGlzYWJsZWQ9XCJ0cnVlXCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIGRpdG8tc2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWZvcm0uZGl0by1zY3JvbGwtcGFyZW50KFxuICA6Y2xhc3M9XCJ7ICdkaXRvLWZvcm0tbmVzdGVkJzogaXNOZXN0ZWRSb3V0ZSB9XCJcbilcbiAgLy8gTk9URTogTmVzdGVkIGZvcm0gY29tcG9uZW50cyBhcmUga2VwdCBhbGl2ZSBieSB1c2luZyBgdi1zaG93YCBpbnN0ZWFkIG9mXG4gIC8vIGB2LWlmYCBoZXJlLCBzbyBldmVudCBoYW5kbGluZyBhbmQgb3RoZXIgdGhpbmdzIHN0aWxsIHdvcmsgd2l0aCBuZXN0ZWRcbiAgLy8gZWRpdGluZy4gT25seSByZW5kZXIgYSByb3V0ZXItdmlldyBoZXJlIGlmIHRoaXMgaXNuJ3QgdGhlIGxhc3QgZGF0YSByb3V0ZVxuICAvLyBhbmQgbm90IGEgbmVzdGVkIGZvcm0gcm91dGUsIHdoaWNoIHdpbGwgYXBwZWFyIGVsc2V3aGVyZSBpbiBpdHMgb3duIHZpZXcuXG4gIHJvdXRlci12aWV3KFxuICAgIHYtaWY9XCIhKGlzTGFzdFVubmVzdGVkUm91dGUgfHwgaXNOZXN0ZWRSb3V0ZSlcIlxuICAgIHYtc2hvdz1cIiFpc0FjdGl2ZVwiXG4gIClcbiAgLy8gVXNlIGEgPGRpdj4gZm9yIGlubGluZWQgZm9ybXMsIGFzIHdlIHNob3VsZG4ndCBuZXN0IGFjdHVhbCA8Zm9ybT4gdGFncy5cbiAgY29tcG9uZW50LmRpdG8tc2Nyb2xsKFxuICAgIHYtc2hvdz1cImlzQWN0aXZlXCJcbiAgICA6aXM9XCJpc05lc3RlZFJvdXRlID8gJ2RpdicgOiAnZm9ybSdcIlxuICAgIEBzdWJtaXQucHJldmVudFxuICApXG4gICAgLy8gUHJldmVudCBpbXBsaWNpdCBzdWJtaXNzaW9uIG9mIHRoZSBmb3JtLCBmb3IgZXhhbXBsZSB3aGVuIHR5cGluZyBlbnRlclxuICAgIC8vIGluIGFuIGlucHV0IGZpZWxkLlxuICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTUwNzgwNlxuICAgIGJ1dHRvbihcbiAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgZGlzYWJsZWQ9XCJ0cnVlXCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIGRpdG8tc2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNsb25lLCBjYXBpdGFsaXplLCBwYXJzZURhdGFQYXRoLCBtZXJnZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcywgaXNPYmplY3RTb3VyY2UgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1mb3JtJywge1xuICBtaXhpbnM6IFtSb3V0ZU1peGluLCBSZXNvdXJjZU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGVkRGF0YTogbnVsbCxcbiAgICAgIGNsb25lZERhdGE6IHVuZGVmaW5lZCxcbiAgICAgIHNvdXJjZUtleTogbnVsbCxcbiAgICAgIGlzRm9ybTogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHZlcmJzKCkge1xuICAgICAgLy8gQWRkIHN1Ym1pdCAvIHN1Ym1pdHRlZCB0byB0aGUgdmVyYnMgcmV0dXJuZWQgYnkgUmVzb3VyY2VNaXhpblxuICAgICAgLy8gTk9URTogVGhlc2UgZ2V0IHBhc3NlZCBvbiB0byBjaGlsZHJlbiB0aHJvdWdoOlxuICAgICAgLy8gYHByb3ZpZGUoKSAuLi4geyAkdmVyYnM6ICgpID0+IHRoaXMudmVyYnMgfWAgaW4gUmVzb3VyY2VNaXhpblxuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLmdldFZlcmJzKClcbiAgICAgIGNvbnN0IHsgaXNDcmVhdGluZywgcHJvdmlkZXNEYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgc3VibWl0OiBpc0NyZWF0aW5nID8gdmVyYnMuY3JlYXRlIDogdmVyYnMuc2F2ZSxcbiAgICAgICAgc3VibWl0dGVkOiBpc0NyZWF0aW5nID8gdmVyYnMuY3JlYXRlZCA6IHZlcmJzLnNhdmVkLFxuICAgICAgICBjYW5jZWw6IHByb3ZpZGVzRGF0YSA/IHZlcmJzLmNhbmNlbCA6IHZlcmJzLmNsb3NlLFxuICAgICAgICBjYW5jZWxsZWQ6IHByb3ZpZGVzRGF0YSA/IHZlcmJzLmNhbmNlbGxlZCA6IHZlcmJzLmNsb3NlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtRm9ybVNjaGVtYShcbiAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGRhdGEgeWV0LCBwcm92aWRlIGFuIGVtcHR5IG9iamVjdCB3aXRoIGp1c3QgdGhlIHJpZ2h0XG4gICAgICAgIC8vIHR5cGUgc2V0LCBzbyB0aGUgZm9ybSBjYW4gYWx3YXlzIGJlIGRldGVybWluZWQuXG4gICAgICAgIHRoaXMuZGF0YSB8fCB7IHR5cGU6IHRoaXMudHlwZSB9LFxuICAgICAgICB0aGlzLmNvbnRleHRcbiAgICAgICkgfHwge30gLy8gQWx3YXlzIHJldHVybiBhIHNjaGVtYSBvYmplY3Qgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgaXQuXG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyhcbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2FuY2VsOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzdWJtaXQ6ICF0aGlzLmRvZXNNdXRhdGUgJiYge1xuICAgICAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICAgICAgLy8gU3VibWl0IGJ1dHRvbnMgY2xvc2UgdGhlIGZvcm0gYnkgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY2xvc2VGb3JtOiB0cnVlLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKHsgY29tcG9uZW50OiBidXR0b24gfSkgPT4gYnV0dG9uLnN1Ym1pdCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMuc2NoZW1hLmJ1dHRvbnNcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGFzdFJvdXRlIHx8IHRoaXMuaXNMYXN0VW5uZXN0ZWRSb3V0ZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNDcmVhdGluZygpIHtcbiAgICAgIC8vIHRoaXMucGFyYW0gaXMgaW5oZXJpdGVkIGZyb20gUm91dGVNaXhpblxuICAgICAgcmV0dXJuIHRoaXMucGFyYW0gPT09ICdjcmVhdGUnXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuZG9lc011dGF0ZSAmJiAhIXRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uaXNEaXJ0eVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYigpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQ/LnNlbGVjdGVkVGFiIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZG9lc011dGF0ZSgpIHtcbiAgICAgIC8vIFdoZW4gYHNvdXJjZVNjaGVtYS5tdXRhdGVgIGlzIHRydWUsIHRoZSBmb3JtIGVkaXRzIHRoZSBpbmhlcml0ZWQgZGF0YVxuICAgICAgLy8gZGlyZWN0bHkgaW5zdGVhZCBvZiBtYWtpbmcgYSBjb3B5IGZvciBhcHBsaWNhdGlvbiB1cG9uIHN1Ym1pdC5cbiAgICAgIC8vIFNlZSBgaW5oZXJpdGVkRGF0YSgpYCBjb21wdXRlZCBwcm9wZXJ0eSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuIHRoaXMuc291cmNlU2NoZW1hLm11dGF0ZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgLy8gVGhlIHR5cGUgb2YgZm9ybSB0byBjcmVhdGUsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5xdWVyeS50eXBlXG4gICAgfSxcblxuICAgIGl0ZW1JZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogKHRoaXMucGFyYW0gPz8gbnVsbClcbiAgICB9LFxuXG4gICAgbWV0aG9kKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZyA/ICdwb3N0JyA6ICdwYXRjaCdcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgICAgcmV0dXJuIGdldE1lbWJlclJlc291cmNlKHRoaXMuaXRlbUlkLCByZXNvdXJjZSkgfHwgcmVzb3VyY2VcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYlByZWZpeCgpIHtcbiAgICAgIHJldHVybiBjYXBpdGFsaXplKHRoaXMuaXNDcmVhdGluZyA/IHRoaXMudmVyYnMuY3JlYXRlIDogdGhpcy52ZXJicy5lZGl0KVxuICAgIH0sXG5cbiAgICBkYXRhKCkge1xuICAgICAgLy8gUmV0dXJuIGRpZmZlcmVudCBkYXRhIFwiY29udGFpbmVyc1wiIGJhc2VkIG9uIGRpZmZlcmVudCBzY2VuYXJpb3M6XG4gICAgICAvLyAxLiBjcmVhdGVkRGF0YSwgaWYgd2UncmUgaW4gYSBmb3JtIGZvciBhIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LlxuICAgICAgLy8gMi4gbG9hZGVkRGF0YSwgaWYgdGhlIGZvcm0gaXRzZWxmIGlzIHRoZSByb290IG9mIHRoZSBkYXRhIChlLmcuIHdoZW5cbiAgICAgIC8vICAgIGRpcmVjdGx5IGxvYWRpbmcgYW4gZWRpdGluZyByb290KS5cbiAgICAgIC8vIDMuIFRoZSBkYXRhIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQsIHdoaWNoIGl0c2VsZiBtYXkgYmUgZWl0aGVyIGFcbiAgICAgIC8vICAgIHZpZXcgdGhhdCBsb2FkZWQgdGhlIGRhdGEsIG9yIGEgZm9ybSB0aGF0IGVpdGhlciBsb2FkZWQgdGhlIGRhdGEsIG9yXG4gICAgICAvLyAgICBhbHNvIGluaGVyaXRlZCBpdCBmcm9tIGl0cyBwYXJlbnQuIE5vdGUgdGhhdCB3ZSB1c2UgYSBjbG9uZSBvZiBpdCxcbiAgICAgIC8vICAgIHNvLCBkYXRhIGNoYW5nZXMgYXJlbid0IGFwcGxpZWQgdW50aWwgc2V0U291cmNlRGF0YSgpIGlzIGNhbGxlZC5cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZWREYXRhIHx8IHRoaXMubG9hZGVkRGF0YSB8fCB0aGlzLmluaGVyaXRlZERhdGEgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBkYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLmRhdGFDb21wb25lbnQpXG4gICAgfSxcblxuICAgIHNvdXJjZURhdGEoKSB7XG4gICAgICAvLyBQb3NzaWJsZSBwYXJlbnRzIGFyZSBEaXRvRm9ybSBmb3IgZm9ybXMsIG9yIERpdG9WaWV3IGZvciByb290IGxpc3RzLlxuICAgICAgLy8gQm90aCBoYXZlIGEgZGF0YSBwcm9wZXJ0eSB3aGljaCBhYnN0cmFjdHMgYXdheSBsb2FkaW5nIGFuZCBpbmhlcml0aW5nXG4gICAgICAvLyBvZiBkYXRhLlxuICAgICAgbGV0IHsgZGF0YSB9ID0gdGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudFxuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgLy8gSGFuZGxlIG5lc3RlZCBkYXRhIGJ5IHNwbGl0dGluZyB0aGUgZGF0YVBhdGgsIGl0ZXJhdGUgdGhyb3VnaCB0aGVcbiAgICAgICAgLy8gYWN0dWFsIGRhdGEgYW5kIGxvb2sgbmVzdCBjaGlsZC1kYXRhIHVwLlxuICAgICAgICBjb25zdCBkYXRhUGFydHMgPSBwYXJzZURhdGFQYXRoKFxuICAgICAgICAgIHRoaXMuZ2V0RGF0YVBhdGhGcm9tKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQpXG4gICAgICAgIClcbiAgICAgICAgLy8gQ29tcGFyZSBkYXRhUGFydHMgYWdhaW5zdCBtYXRjaGVkIHJvdXRlUGF0aCBwYXJ0cywgdG8gaWRlbnRpZnkgdGhvc2VcbiAgICAgICAgLy8gcGFydHMgdGhhdCBuZWVkIHRvIGJlIHRyZWF0ZWQgbGlrZSBpZHMgYW5kIG1hcHBlZCB0byBpbmRpY2VzIGluIGRhdGEuXG4gICAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IHRoaXMucm91dGVSZWNvcmQucGF0aC5zcGxpdCgnLycpXG4gICAgICAgIGNvbnN0IHJvdXRlUGFydHMgPSBwYXRoUGFydHMuc2xpY2UocGF0aFBhcnRzLmxlbmd0aCAtIGRhdGFQYXJ0cy5sZW5ndGgpXG4gICAgICAgIHRoaXMuc291cmNlS2V5ID0gbnVsbFxuICAgICAgICBjb25zdCBsYXN0RGF0YVBhcnQgPSBkYXRhUGFydHNbZGF0YVBhcnRzLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmIChpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSkgJiYgbGFzdERhdGFQYXJ0ID09PSAnY3JlYXRlJykge1xuICAgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gb2JqZWN0IHNvdXJjZSBhbmQgYXJlIGNyZWF0aW5nLCB0aGUgZGF0YVBhdGggbmVlZHMgdG9cbiAgICAgICAgICAvLyBiZSBzaG9ydGVuZWQgYnkgdGhlICdjcmVhdGUnIGVudHJ5LiBUaGlzIGlzbid0IG5lZWRlZCBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMsIGFzIHRoZXJlIHRoZSBwYXJhbWV0ZXIgaXMgYWN0dWFsbHkgbWFwcGVkIHRvIHRoZSBpdGVtIGlkLlxuICAgICAgICAgIGRhdGFQYXJ0cy5sZW5ndGgtLVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gZGF0YVBhcnRzLmxlbmd0aDsgaSA8IGwgJiYgZGF0YTsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0YVBhcnQgPSBkYXRhUGFydHNbaV1cbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIDppZCBwYXJ0LCBmaW5kIHRoZSBpbmRleCBvZiB0aGUgaXRlbSB3aXRoIGdpdmVuIGlkLlxuICAgICAgICAgIGNvbnN0IGtleSA9IC9eOmlkLy50ZXN0KHJvdXRlUGFydHNbaV0pXG4gICAgICAgICAgICA/IGRhdGFQYXJ0ID09PSAnY3JlYXRlJ1xuICAgICAgICAgICAgICA/IG51bGwgLy8gVGhlcmUncyBubyBpbmRleCBmb3IgZW50cmllcyBhYm91dCB0byBiZSBjcmVhdGVkXG4gICAgICAgICAgICAgIDogdGhpcy5maW5kSXRlbUlkSW5kZXgodGhpcy5zb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXJ0KVxuICAgICAgICAgICAgOiBkYXRhUGFydFxuICAgICAgICAgIC8vIFNraXAgdGhlIGZpbmFsIGxvb2t1cCBidXQgcmVtZW1iZXIgYHNvdXJjZUtleWAsIGFzIHdlIHdhbnQgdGhlXG4gICAgICAgICAgLy8gcGFyZW50IGRhdGEgc28gd2UgY2FuIHJlcGxhY2UgdGhlIGVudHJ5IGF0IGBzb3VyY2VLZXlgIG9uIGl0LlxuICAgICAgICAgIGlmIChpID09PSBsIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBrZXlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IGRhdGFba2V5XVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9LFxuXG4gICAgaW5oZXJpdGVkRGF0YSgpIHtcbiAgICAgIC8vIERhdGEgaW5oZXJpdGVkIGZyb20gcGFyZW50LCBhbmQgY2xvbmVkIHRvIHByb3RlY3QgYWdhaW5zdCByZWFjdGl2ZVxuICAgICAgLy8gY2hhbmdlcyB1bnRpbCBjaGFuZ2VzIGFyZSBhcHBsaWVkIHRocm91Z2ggc2V0U291cmNlRGF0YSgpLCB1bmxlc3NcbiAgICAgIC8vIGBzb3VyY2VTY2hlbWEubXV0YXRlYCBpcyB0cnVlLCBpbiB3aGljaCBjYXNlIGRhdGEgaXMgbXV0YXRlZCBkaXJlY3RseS5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICB0aGlzLmNsb25lZERhdGEgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0aGlzLnNvdXJjZURhdGEgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgIT09IG51bGxcbiAgICAgICkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuc291cmNlRGF0YVt0aGlzLnNvdXJjZUtleV1cbiAgICAgICAgaWYgKCF0aGlzLmRvZXNNdXRhdGUpIHtcbiAgICAgICAgICAvLyBVc2UgYSB0cmljayB0byBzdG9yZSBjbG9uZWQgaW5oZXJpdGVkIGRhdGEgaW4gY2xvbmVkRGF0YSwgdG8gbWFrZVxuICAgICAgICAgIC8vIGl0IHJlYWN0aXZlIGFuZCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgY2xvbmVkIG11bHRpcGxlIHRpbWVzLlxuICAgICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IGRhdGEgPSBjbG9uZShkYXRhKVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhID09PSBudWxsICYmXG4gICAgICAgICAgIXRoaXMuaXNDcmVhdGluZyAmJlxuICAgICAgICAgIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIG9mIGFuIG9iamVjdCBzb3VyY2UgaXMgbnVsbCwgcmVkaXJlY3QgdG8gaXRzIGNyZWF0ZSByb3V0ZS5cbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IHBhdGg6ICdjcmVhdGUnLCBhcHBlbmQ6IHRydWUgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY2xvbmVkRGF0YVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5oYXNEYXRhKClcbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGl0ZW1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB7IGV4dGVuZGVkOiB0cnVlIH0pXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgc291cmNlRGF0YTogJ2NsZWFyQ2xvbmVkRGF0YScsXG4gICAgLy8gTmVlZGVkIGZvciB0aGUgJ2NyZWF0ZScgcmVkaXJlY3QgaW4gYGluaGVyaXRlZERhdGEoKWAgdG8gd29yazpcbiAgICBjcmVhdGU6ICdzZXR1cERhdGEnXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmVtaXRFdmVudChldmVudCwgcGFyYW1zKVxuICAgIH0sXG5cbiAgICBnZXREYXRhUGF0aEZyb20ocm91dGUpIHtcbiAgICAgIC8vIEdldCB0aGUgZGF0YSBwYXRoIGJ5IGRlbm9ybWFsaXplUGF0aCB0aGUgcmVsYXRpdmUgcm91dGUgcGF0aFxuICAgICAgcmV0dXJuIHRoaXMuYXBpLmRlbm9ybWFsaXplUGF0aCh0aGlzLnBhdGhcbiAgICAgICAgLy8gRGl0b1ZpZXdzIGhhdmUgbmVzdGVkIHJvdXRlcywgc28gZG9uJ3QgcmVtb3ZlIHRoZWlyIHBhdGguXG4gICAgICAgIC5zbGljZSgocm91dGUuaXNWaWV3ID8gMCA6IHJvdXRlLnBhdGgubGVuZ3RoKSArIDEpKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXR1cERhdGEoKVxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0YSA9IHRoaXMuY3JlYXRlZERhdGEgfHxcbiAgICAgICAgICB0aGlzLmNyZWF0ZURhdGEodGhpcy5zY2hlbWEsIHRoaXMudHlwZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldFNvdXJjZURhdGEoZGF0YSkge1xuICAgICAgaWYgKHRoaXMuc291cmNlRGF0YSAmJiB0aGlzLnNvdXJjZUtleSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB7IG1haW5TY2hlbWFDb21wb25lbnQgfSA9IHRoaXNcbiAgICAgICAgdGhpcy4kc2V0KFxuICAgICAgICAgIHRoaXMuc291cmNlRGF0YSxcbiAgICAgICAgICB0aGlzLnNvdXJjZUtleSxcbiAgICAgICAgICBtYWluU2NoZW1hQ29tcG9uZW50LmZpbHRlckRhdGEoZGF0YSlcbiAgICAgICAgKVxuICAgICAgICBtYWluU2NoZW1hQ29tcG9uZW50Lm9uQ2hhbmdlKClcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhZGRTb3VyY2VEYXRhKGRhdGEpIHtcbiAgICAgIHJldHVybiBpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSlcbiAgICAgICAgPyB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgICAgOiAhIXRoaXMuc291cmNlRGF0YT8ucHVzaChkYXRhKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5jbGVhckRhdGEoKVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMuc2V0RGF0YShudWxsKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXREYXRhKClcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIC8vIHNldERhdGEoKSBpcyBjYWxsZWQgYWZ0ZXIgc3VibWl0IHdoZW4gZGF0YSBoYXMgY2hhbmdlZC5cbiAgICAgIGlmICh0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIC8vIEZvciBjb21wb25lbnRzIHdpdGggdHJhbnNpZW50IGRhdGEsIG1vZGlmeSB0aGlzLnNvdXJjZURhdGEuXG4gICAgICAgIHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0YSA9IG51bGxcbiAgICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGVhckNsb25lZERhdGEobmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gICAgICAvLyBPbmx5IGNsZWFyIGlmIHRoZSB3YXRjaGVkIHNvdXJjZURhdGEgaXRzZWxmIGNoYW5nZXMgaW4gdGhlIGZvcm0uXG4gICAgICBpZiAobmV3VmFsdWUgIT09IG9sZFZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbG9zZSgpXG4gICAgfSxcblxuICAgIGFzeW5jIGNsb3NlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGUodGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudC5wYXRoKVxuICAgIH0sXG5cbiAgICBnZXRTdWJtaXRWZXJiKHByZXNlbnQgPSB0cnVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gcHJlc2VudCA/ICdjcmVhdGUnIDogJ2NyZWF0ZWQnXG4gICAgICAgIDogcHJlc2VudCA/ICdzdWJtaXQnIDogJ3N1Ym1pdHRlZCdcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KGJ1dHRvbiwgeyB2YWxpZGF0ZSA9IHRydWUsIGNsb3NlRm9ybSA9IGZhbHNlIH0gPSB7fSkge1xuICAgICAgaWYgKHZhbGlkYXRlICYmICF0aGlzLnZhbGlkYXRlQWxsKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdldFZlcmIgPSBwcmVzZW50ID0+IHRoaXMudmVyYnNbdGhpcy5nZXRTdWJtaXRWZXJiKHByZXNlbnQpXVxuXG4gICAgICAvLyBBbGxvdyBidXR0b25zIHRvIG92ZXJyaWRlIGJvdGggbWV0aG9kIGFuZCByZXNvdXJjZSBwYXRoIHRvIHN1Ym1pdCB0bzpcbiAgICAgIGNvbnN0IGJ1dHR0b25SZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzb3VyY2UgPSBidXR0dG9uUmVzb3VyY2UgfHwgdGhpcy5yZXNvdXJjZVxuICAgICAgY29uc3QgbWV0aG9kID0gcmVzb3VyY2U/Lm1ldGhvZCB8fCB0aGlzLm1ldGhvZFxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpXG4gICAgICBsZXQgc3VjY2Vzc1xuICAgICAgaWYgKCFidXR0dG9uUmVzb3VyY2UgJiYgdGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5zdWJtaXRUcmFuc2llbnQoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCh0aGlzLmdldFN1Ym1pdFZlcmIoKSksXG4gICAgICAgICAgb25FcnJvcjogZXJyb3IgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2Vycm9yJywge1xuICAgICAgICAgICAgY29udGV4dDogeyBlcnJvciB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbm90aWZ5U3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIoZmFsc2UpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICAgICAgICAgID8gYEl0ZW0gJHtjYXBpdGFsaXplKHZlcmIpfWBcbiAgICAgICAgICAgICAgICA6IGBDaGFuZ2UgJHtjYXBpdGFsaXplKHZlcmIpfWAsXG4gICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgICAgICAgICAgID8gYCR7dGhpcy5pdGVtTGFiZWx9IHdhcyAke3ZlcmJ9LmBcbiAgICAgICAgICAgICAgICAgIDogYENoYW5nZXMgdG8gJHt0aGlzLml0ZW1MYWJlbH0gd2VyZSAke3ZlcmJ9LmAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2llbnROb3RlXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub3RpZnlFcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIodHJ1ZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogYFVuYWJsZSB0byAke3ZlcmJ9ICR7dGhpcy5pdGVtTGFiZWx9LmBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICAgICAgc2V0RGF0YTogdHJ1ZSxcbiAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KHRoaXMuZ2V0U3VibWl0VmVyYigpKSxcbiAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgICBjb250ZXh0OiB7IGVycm9yIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBub3RpZnlTdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICB0aXRsZTogYFN1Y2Nlc3NmdWxseSAke2NhcGl0YWxpemUodmVyYil9YCxcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5pdGVtTGFiZWx9IHdhcyAke3ZlcmJ9LmBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub3RpZnlFcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIodHJ1ZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgIGBVbmFibGUgdG8gJHt2ZXJifSAke3RoaXMuaXRlbUxhYmVsfSR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgICAgICAgIGVycm9yPy5tZXNzYWdlIHx8IGVycm9yXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb24oKVxuICAgICAgICBpZiAoY2xvc2VGb3JtIHx8IGJ1dHRvbi5jbG9zZUZvcm0pIHtcbiAgICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgICAgICAvLyBSZWRpcmVjdCB0byB0aGUgZm9ybSBlZGl0aW5nIHRoZSBuZXdseSBjcmVhdGVkIGl0ZW06XG4gICAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgdGhpcy5kYXRhKVxuICAgICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgcGF0aDogYC4uLyR7aWR9YCwgYXBwZW5kOiB0cnVlIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFRyYW5zaWVudChidXR0b24sIF9yZXNvdXJjZSwgX21ldGhvZCwgZGF0YSwge1xuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MsXG4gICAgICBub3RpZnlFcnJvclxuICAgIH0pIHtcbiAgICAgIC8vIEhhbmRsZSB0aGUgZGVmYXVsdCBcInN1Ym1pdHRpbmdcIiBvZiB0cmFuc2llbnQsIG5lc3RlZCBkYXRhOlxuICAgICAgY29uc3Qgc3VjY2VzcyA9IHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IHRoaXMuYWRkU291cmNlRGF0YShkYXRhKVxuICAgICAgICA6IHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgb25TdWNjZXNzPy4oKVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdzdWNjZXNzJywge1xuICAgICAgICAgIG5vdGlmeTogbm90aWZ5U3VjY2Vzc1xuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSAnQ291bGQgbm90IHN1Ym1pdCB0cmFuc2llbnQgaXRlbSdcbiAgICAgICAgb25FcnJvcj8uKGVycm9yKVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICBub3RpZnk6IG5vdGlmeUVycm9yLFxuICAgICAgICAgIGVycm9yXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2Vzc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWZvcm0tbmVzdGVkXG4gICAgJixcbiAgICAuZGl0by1zY3JvbGxcbiAgICAgIC8vIE5vIHNjcm9sbGluZyBpbnNpZGUgbmVzdGVkIGZvcm1zLCBhbmQgcHJldmVudCBvcGVuIC5tdWx0aXNlbGVjdCBmcm9tXG4gICAgICAvLyBiZWluZyBjcm9wcGVkLlxuICAgICAgb3ZlcmZsb3c6IHZpc2libGVcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0Zvcm0gZnJvbSAnLi9EaXRvRm9ybS52dWUnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9Gb3JtLmNvbXBvbmVudCgnZGl0by1mb3JtLW5lc3RlZCcsIHt9KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWVycm9ycyhcbiAgdi1pZj1cImVycm9yc1wiXG4pXG4gIHVsXG4gICAgbGkodi1mb3I9XCJlcnJvciBvZiBlcnJvcnNcIilcbiAgICAgIHwge3sgZXJyb3IgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWVycm9ycyhcbiAgICB2LWlmPVwiZXJyb3JzXCJcbiAgKVxuICAgIHVsXG4gICAgICBsaSh2LWZvcj1cImVycm9yIG9mIGVycm9yc1wiKVxuICAgICAgICB8IHt7IGVycm9yIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tZXJyb3JzXG4gICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgei1pbmRleDogMVxuICAgIHVsXG4gICAgICBtYXJnaW4tdG9wOiAxcHhcbiAgICAgIGNvbG9yOiAkY29sb3ItZXJyb3Jcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZXJyb3JzJywge1xuICBwcm9wczoge1xuICAgIGVycm9yczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tc2NvcGVzXG4gIHJvdXRlci1saW5rKFxuICAgIHYtZm9yPVwiKHNjb3BlLCBrZXkpIGluIHNjb3Blc1wiXG4gICAgOmtleT1cImtleVwiXG4gICAgOnRvPVwiZ2V0U2NvcGVMaW5rKHNjb3BlKVwiXG4gICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2VsZWN0ZWQnOiBzY29wZS5uYW1lID09PSBxdWVyeS5zY29wZSB9XCJcbiAgICAgIDp0aXRsZT1cInNjb3BlLmhpbnQgfHwgZ2V0TGFiZWwoc2NvcGUpXCJcbiAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICApIHt7IGdldExhYmVsKHNjb3BlKSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2NvcGVzXG4gICAgcm91dGVyLWxpbmsoXG4gICAgICB2LWZvcj1cIihzY29wZSwga2V5KSBpbiBzY29wZXNcIlxuICAgICAgOmtleT1cImtleVwiXG4gICAgICA6dG89XCJnZXRTY29wZUxpbmsoc2NvcGUpXCJcbiAgICAgIGN1c3RvbSB2LXNsb3Q9XCJ7IG5hdmlnYXRlIH1cIlxuICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2VsZWN0ZWQnOiBzY29wZS5uYW1lID09PSBxdWVyeS5zY29wZSB9XCJcbiAgICAgICAgOnRpdGxlPVwic2NvcGUuaGludCB8fCBnZXRMYWJlbChzY29wZSlcIlxuICAgICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgICApIHt7IGdldExhYmVsKHNjb3BlKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXNjb3Blc1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tYnV0dG9uXG4gICAgICArZWxsaXBzaXNcbiAgICAgIGJvcmRlci1yYWRpdXM6IDBcbiAgICAgIC8vIEEgYml0IG1vcmUgdGhhbiB0aGUgd2lkdGggb2YgZWxsaXBzaXMsIHRvIHByZXZlbnQgcmVwbGFjaW5nIHNob3J0IHdvcmRzXG4gICAgICAvLyB3aXRoIGVsbGlwc2lzLlxuICAgICAgbWluLXdpZHRoOiAzZW1cbiAgICAgIGZsZXg6IDAgMSBhdXRvXG4gICAgICAmOmZpcnN0LWNoaWxkXG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDFlbVxuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAxZW1cbiAgICAgICAgcGFkZGluZy1sZWZ0OiAxZW1cbiAgICAgICY6bGFzdC1jaGlsZFxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMWVtXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAxZW1cbiAgICAgICAgcGFkZGluZy1yaWdodDogMWVtXG4gICAgICAmICsgLmRpdG8tYnV0dG9uXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4XG4gICAgICAvLyBEb24ndCBjb3ZlciB0aGUgZm9jdXNlZCBib3JkZXIgb2YgYnV0dG9uczpcbiAgICAgICY6Zm9jdXNcbiAgICAgICAgei1pbmRleDogMVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1zY29wZXMnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNjb3BlczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0U2NvcGVMaW5rKHNjb3BlKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHsgLi4udGhpcy5xdWVyeSwgc2NvcGU6IHNjb3BlLm5hbWUgfVxuICAgICAgaWYgKHF1ZXJ5LnBhZ2UpIHtcbiAgICAgICAgcXVlcnkucGFnZSA9IDBcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5TGluayhxdWVyeSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxucGFnaW5hdGlvbihcbiAgOnBhZ2VTaXplPVwibGltaXRcIlxuICA6dG90YWw9XCJ0b3RhbFwiXG4gIDpwYWdlLnN5bmM9XCJwYWdlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHBhZ2luYXRpb24oXG4gICAgOnBhZ2VTaXplPVwibGltaXRcIlxuICAgIDp0b3RhbD1cInRvdGFsXCJcbiAgICA6cGFnZS5zeW5jPVwicGFnZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBQYWdpbmF0aW9uIH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1wYWdpbmF0aW9uJywge1xuICBjb21wb25lbnRzOiB7IFBhZ2luYXRpb24gfSxcblxuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBsaW1pdDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdG90YWw6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYWdlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAoK3RoaXMucXVlcnkucGFnZSB8fCAwKSArIDFcbiAgICAgIH0sXG5cbiAgICAgIHNldChwYWdlKSB7XG4gICAgICAgIGlmICh0aGlzLnBhZ2UgIT09IHBhZ2UpIHtcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh0aGlzLmdldFF1ZXJ5TGluayh7XG4gICAgICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnZTogKHBhZ2UgLSAxKVxuICAgICAgICAgIH0pKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZHJhZ2dpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblN0YXJ0RHJhZygpIHtcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlXG4gICAgfSxcblxuICAgIG9uRW5kRHJhZyh7IG9sZEluZGV4LCBuZXdJbmRleCB9KSB7XG4gICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2VcbiAgICAgIGlmIChvbGRJbmRleCAhPT0gbmV3SW5kZXgpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdCwgcGFnaW5hdGlvblJhbmdlKSB7XG4gICAgICBjb25zdCB7IG9yZGVyS2V5IH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgIGlmIChvcmRlcktleSkge1xuICAgICAgICAvLyBSZW9yZGVyIHRoZSBjaGFuZ2VkIGVudHJpZXMgYnkgdGhlaXIgb3JkZXIga2V5LCB0YWtpbmcgcGFnaW5hdGlvblxuICAgICAgICAvLyBvZmZzZXRzIGludG8gYWNjb3VudDpcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcGFnaW5hdGlvblJhbmdlPy5bMF0gfHwgMFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBsaXN0W2ldW29yZGVyS2V5XSA9IGkgKyBvZmZzZXRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3RcbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tdHJlZS1pdGVtKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1ge1xuICAgICdkaXRvLWRyYWdnaW5nJzogZHJhZ2dpbmcsXG4gICAgJ2RpdG8tYWN0aXZlJzogYWN0aXZlXG4gIH1gXG4gIDpzdHlsZT1cImxldmVsID4gMCAmJiB7ICctLWxldmVsJzogbGV2ZWwgfVwiXG4pXG4gIC5kaXRvLXRyZWUtaGVhZGVyKHYtaWY9XCJsYWJlbFwiKVxuICAgIC5kaXRvLXRyZWUtYnJhbmNoKFxuICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgQGNsaWNrLnN0b3A9XCJvcGVuZWQgPSAhb3BlbmVkXCJcbiAgICApXG4gICAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogb3BlbmVkIH1cIlxuICAgICAgKVxuICAgICAgLmRpdG8tdHJlZS1sYWJlbCh2LWh0bWw9XCJsYWJlbFwiKVxuICAgICAgLmRpdG8tdHJlZS1pbmZvKHYtaWY9XCJkZXRhaWxzXCIpIHt7IGRldGFpbHMgfX1cbiAgICAuZGl0by10cmVlLWxlYWYodi1lbHNlKVxuICAgICAgLmRpdG8tdHJlZS1sYWJlbCh2LWh0bWw9XCJsYWJlbFwiKVxuICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXNtYWxsKHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiKVxuICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIEBjbGljaz1cIm9uRWRpdFwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIEBjbGljaz1cIm9uRGVsZXRlXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgIClcbiAgdGFibGUuZGl0by1wcm9wZXJ0aWVzKFxuICAgIHYtaWY9XCJwcm9wZXJ0aWVzXCJcbiAgICB2LXNob3c9XCJvcGVuZWRcIlxuICApXG4gICAgdHIoXG4gICAgICB2LWZvcj1cInByb3BlcnR5IGluIHByb3BlcnRpZXNcIlxuICAgIClcbiAgICAgIHRkXG4gICAgICAgIGRpdG8tbGFiZWwoXG4gICAgICAgICAgdi1pZj1cInByb3BlcnR5LmxhYmVsICE9PSBmYWxzZVwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICAgIDpsYWJlbD1cImdldExhYmVsKHByb3BlcnR5KVwiXG4gICAgICAgIClcbiAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgOmNlbGw9XCJwcm9wZXJ0eVwiXG4gICAgICAgIDpzY2hlbWE9XCJwcm9wZXJ0eVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG4gIHZ1ZS1kcmFnZ2FibGUoXG4gICAgdi1pZj1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICB2LXNob3c9XCJvcGVuZWRcIlxuICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGNoaWxkcmVuRHJhZ2dhYmxlLCB0cnVlKVwiXG4gICAgOmxpc3Q9XCJ1cGRhdGVPcmRlcihjaGlsZHJlblNjaGVtYSwgY2hpbGRyZW5MaXN0KVwiXG4gICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgIEBlbmQ9XCJvbkVuZERyYWcoJGV2ZW50LCBjaGlsZHJlblNjaGVtYSlcIlxuICApXG4gICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gY2hpbGRyZW5JdGVtc1wiXG4gICAgICA6a2V5PVwiZ2V0SXRlbVVpZChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhKVwiXG4gICAgICA6c2NoZW1hPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZ2V0SXRlbURhdGFQYXRoKGNoaWxkcmVuU2NoZW1hLCBpbmRleClcIlxuICAgICAgOmRhdGE9XCJpdGVtLmRhdGFcIlxuICAgICAgOnBhdGg9XCJpdGVtLnBhdGhcIlxuICAgICAgOm9wZW49XCJpdGVtLm9wZW5cIlxuICAgICAgOmFjdGl2ZT1cIml0ZW0uYWN0aXZlXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJjaGlsZHJlbkRyYWdnYWJsZVwiXG4gICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSwgeyBpbmRleCB9KVwiXG4gICAgICA6bGV2ZWw9XCJsZXZlbCArIDFcIlxuICAgIClcbiAgICAvLyBUT0RPOiBDb252ZXJ0IGRpdG8tdHJlZS1pdGVtIHRvIHVzZSBkaXRvLWxhYmVsIGludGVybmFsbHksIGFuZCB0aGVuXG4gICAgLy8gcGFzcyBgYXNPYmplY3Q6IHRydWVgIGluIHRoZSBgZ2V0SXRlbUxhYmVsKClgIGNhbGwgYWJvdmUuXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by10cmVlLWl0ZW0oXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1ge1xuICAgICAgJ2RpdG8tZHJhZ2dpbmcnOiBkcmFnZ2luZyxcbiAgICAgICdkaXRvLWFjdGl2ZSc6IGFjdGl2ZVxuICAgIH1gXG4gICAgOnN0eWxlPVwibGV2ZWwgPiAwICYmIHsgJy0tbGV2ZWwnOiBsZXZlbCB9XCJcbiAgKVxuICAgIC5kaXRvLXRyZWUtaGVhZGVyKHYtaWY9XCJsYWJlbFwiKVxuICAgICAgLmRpdG8tdHJlZS1icmFuY2goXG4gICAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgICAgQGNsaWNrLnN0b3A9XCJvcGVuZWQgPSAhb3BlbmVkXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2hldnJvbihcbiAgICAgICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiBvcGVuZWQgfVwiXG4gICAgICAgIClcbiAgICAgICAgLmRpdG8tdHJlZS1sYWJlbCh2LWh0bWw9XCJsYWJlbFwiKVxuICAgICAgICAuZGl0by10cmVlLWluZm8odi1pZj1cImRldGFpbHNcIikge3sgZGV0YWlscyB9fVxuICAgICAgLmRpdG8tdHJlZS1sZWFmKHYtZWxzZSlcbiAgICAgICAgLmRpdG8tdHJlZS1sYWJlbCh2LWh0bWw9XCJsYWJlbFwiKVxuICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtc21hbGwodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgQGNsaWNrPVwib25FZGl0XCJcbiAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgICAgICAgKVxuICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgQGNsaWNrPVwib25EZWxldGVcIlxuICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICAgIClcbiAgICB0YWJsZS5kaXRvLXByb3BlcnRpZXMoXG4gICAgICB2LWlmPVwicHJvcGVydGllc1wiXG4gICAgICB2LXNob3c9XCJvcGVuZWRcIlxuICAgIClcbiAgICAgIHRyKFxuICAgICAgICB2LWZvcj1cInByb3BlcnR5IGluIHByb3BlcnRpZXNcIlxuICAgICAgKVxuICAgICAgICB0ZFxuICAgICAgICAgIGRpdG8tbGFiZWwoXG4gICAgICAgICAgICB2LWlmPVwicHJvcGVydHkubGFiZWwgIT09IGZhbHNlXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICAgIDpsYWJlbD1cImdldExhYmVsKHByb3BlcnR5KVwiXG4gICAgICAgICAgKVxuICAgICAgICBkaXRvLXRhYmxlLWNlbGwoXG4gICAgICAgICAgOmNlbGw9XCJwcm9wZXJ0eVwiXG4gICAgICAgICAgOnNjaGVtYT1cInByb3BlcnR5XCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIClcbiAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgdi1pZj1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhjaGlsZHJlbkRyYWdnYWJsZSwgdHJ1ZSlcIlxuICAgICAgOmxpc3Q9XCJ1cGRhdGVPcmRlcihjaGlsZHJlblNjaGVtYSwgY2hpbGRyZW5MaXN0KVwiXG4gICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICBAZW5kPVwib25FbmREcmFnKCRldmVudCwgY2hpbGRyZW5TY2hlbWEpXCJcbiAgICApXG4gICAgICBkaXRvLXRyZWUtaXRlbShcbiAgICAgICAgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIGNoaWxkcmVuSXRlbXNcIlxuICAgICAgICA6a2V5PVwiZ2V0SXRlbVVpZChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhKVwiXG4gICAgICAgIDpzY2hlbWE9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImdldEl0ZW1EYXRhUGF0aChjaGlsZHJlblNjaGVtYSwgaW5kZXgpXCJcbiAgICAgICAgOmRhdGE9XCJpdGVtLmRhdGFcIlxuICAgICAgICA6cGF0aD1cIml0ZW0ucGF0aFwiXG4gICAgICAgIDpvcGVuPVwiaXRlbS5vcGVuXCJcbiAgICAgICAgOmFjdGl2ZT1cIml0ZW0uYWN0aXZlXCJcbiAgICAgICAgOmRyYWdnYWJsZT1cImNoaWxkcmVuRHJhZ2dhYmxlXCJcbiAgICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEsIHsgaW5kZXggfSlcIlxuICAgICAgICA6bGV2ZWw9XCJsZXZlbCArIDFcIlxuICAgICAgKVxuICAgICAgLy8gVE9ETzogQ29udmVydCBkaXRvLXRyZWUtaXRlbSB0byB1c2UgZGl0by1sYWJlbCBpbnRlcm5hbGx5LCBhbmQgdGhlblxuICAgICAgLy8gcGFzcyBgYXNPYmplY3Q6IHRydWVgIGluIHRoZSBgZ2V0SXRlbUxhYmVsKClgIGNhbGwgYWJvdmUuXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tdHJlZS1pdGVtXG4gICAgLS1jaGV2cm9uLWluZGVudDogI3skY2hldnJvbi1pbmRlbnR9XG4gICAgPiAuZGl0by10cmVlLWhlYWRlclxuICAgICAgPiAuZGl0by10cmVlLWJyYW5jaCxcbiAgICAgID4gLmRpdG8tdHJlZS1sZWFmXG4gICAgICAgIC8vIFVzZSBgLS1sZXZlbGAgQ1NTIHZhcmlhYmxlIHRvIGNhbGN1bGF0ZWQgdGhlIGFjY3VtdWxhdGVkIGluZGVudFxuICAgICAgICAvLyBwYWRkaW5nIGRpcmVjdGx5IGluc3RlYWQgb2YgaGF2aW5nIGl0IGFjY3VtdWxhdGUgaW4gbmVzdGVkIENTUy5cbiAgICAgICAgLy8gVGhpcyB3YXksIHdlIGNhbiBrZWVwIHRoZSAuZGl0by1hY3RpdmUgYXJlYSBjb3ZlciB0aGUgZnVsbCB3aWR0aDpcbiAgICAgICAgcGFkZGluZy1sZWZ0OiBjYWxjKHZhcigtLWNoZXZyb24taW5kZW50KSAqICh2YXIoLS1sZXZlbCwgMSkgLSAxKSlcbiAgICAuZGl0by10cmVlLWJyYW5jaFxuICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgLmRpdG8tdHJlZS1oZWFkZXJcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgIC5kaXRvLXRyZWUtYnJhbmNoLFxuICAgIC5kaXRvLXRyZWUtbGVhZlxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgZmxleDogYXV0b1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICBtYXJnaW46IDFweCAwXG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAuZGl0by10cmVlLWxhYmVsLFxuICAgIC5kaXRvLXRyZWUtaW5mb1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgIC5kaXRvLXRyZWUtaW5mb1xuICAgICAgcGFkZGluZy1sZWZ0OiAwLjM1ZW1cbiAgICAgIGNvbG9yOiByZ2JhKCRjb2xvci1ibGFjaywgLjIpXG4gICAgLmRpdG8tYnV0dG9uc1xuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgdmlzaWJpbGl0eTogaGlkZGVuXG4gICAgICBoZWlnaHQ6IDEwMCVcbiAgICAgIG1hcmdpbi1sZWZ0OiAxZW1cbiAgICAgIG1hcmdpbjogMXB4IDAgMXB4IDFlbVxuICAgIC5kaXRvLXRyZWUtaGVhZGVyOmhvdmVyXG4gICAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZVxuICAgIC8vIEhpZGUgYnV0dG9ucyBkdXJpbmcgZHJhZ2dpbmdcbiAgICAmLmRpdG8tZHJhZ2dpbmdcbiAgICAgIC5kaXRvLXRyZWUtaGVhZGVyXG4gICAgICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlblxuICAgICYuZGl0by1hY3RpdmVcbiAgICAgID4gLmRpdG8tdHJlZS1oZWFkZXJcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZVxuICAgICAgICBwYWRkaW5nOiAwICRpbnB1dC1wYWRkaW5nLWhvclxuICAgICAgICBtYXJnaW46IDAgKC0kaW5wdXQtcGFkZGluZy1ob3IpXG4gICAgICAgID4gLmRpdG8tdHJlZS1icmFuY2hcbiAgICAgICAgICA+IC5kaXRvLWNoZXZyb246OmJlZm9yZVxuICAgICAgICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICAgID4gKiA+IC5kaXRvLXRyZWUtbGFiZWxcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLmRpdG8tcHJvcGVydGllc1xuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgIG1hcmdpbi1sZWZ0OiAkY2hldnJvbi1pbmRlbnRcbiAgICAgID4gdHJcbiAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lXG4gICAgICAuZGl0by1sYWJlbFxuICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgICBjb250ZW50OiAnOiAnXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFZ1ZURyYWdnYWJsZSBmcm9tICd2dWVkcmFnZ2FibGUnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9yZGVyZWRNaXhpbiBmcm9tICcuLi9taXhpbnMvT3JkZXJlZE1peGluLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE5hbWVkU2NoZW1hcywgaGFzRm9ybVNjaGVtYSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRyZWUtaXRlbScsIHtcbiAgY29tcG9uZW50czogeyBWdWVEcmFnZ2FibGUgfSxcbiAgbWl4aW5zOiBbT3JkZXJlZE1peGluXSxcbiAgaW5qZWN0OiBbJ2NvbnRhaW5lciddLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbQXJyYXksIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBvcGVuOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWN0aXZlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbGV2ZWw6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvcGVuZWQ6IHRoaXMub3BlbiB8fCB0aGlzLnNjaGVtYS5vcGVuXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbWV0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5tZXRhXG4gICAgfSxcblxuICAgIHN0b3JlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLnN0b3JlXG4gICAgfSxcblxuICAgIGRpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLmRpc2FibGVkXG4gICAgfSxcblxuICAgIG5lc3RlZE1ldGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLm1ldGEsXG4gICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEucHJvcGVydGllcylcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogU2hvdWxkIHRoaXMgYmUgbmFtZWQgYHNvdXJjZVNjaGVtYWAgaW5zdGVhZD8gVXNlIFNvdXJjZU1peGluP1xuICAgIGNoaWxkcmVuU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmNoaWxkcmVuXG4gICAgfSxcblxuICAgIGNoaWxkcmVuTGlzdCgpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNoaWxkcmVuU2NoZW1hPy5uYW1lXG4gICAgICByZXR1cm4gbmFtZSAmJiB0aGlzLmRhdGFbbmFtZV1cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5EcmFnZ2FibGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoID4gMSAmJlxuICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdkcmFnZ2FibGUnLCB7XG4gICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICBzY2hlbWE6IHRoaXMuY2hpbGRyZW5TY2hlbWFcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbnVtQ2hpbGRyZW4oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbkxpc3Q/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bVByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzPy5sZW5ndGggfHwgMFxuICAgIH0sXG5cbiAgICBudW1FbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMubnVtUHJvcGVydGllcyArIHRoaXMubnVtQ2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5JdGVtcygpIHtcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW5TY2hlbWEgfSA9IHRoaXNcbiAgICAgIGlmIChjaGlsZHJlblNjaGVtYSkge1xuICAgICAgICBjb25zdCB7IGVkaXRQYXRoIH0gPSB0aGlzLmNvbnRhaW5lclxuICAgICAgICBjb25zdCBjaGlsZHJlbk9wZW4gPSAhdGhpcy5wYXRoICYmIGNoaWxkcmVuU2NoZW1hLm9wZW5cbiAgICAgICAgLy8gQnVpbGQgYSBjaGlsZHJlbiBsaXN0IHdpdGggY2hpbGQgbWV0YSBpbmZvcm1hdGlvbiBmb3IgdGhlIHRlbXBsYXRlLlxuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbkxpc3Q/Lm1hcCgoZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXRoID0gKFxuICAgICAgICAgICAgY2hpbGRyZW5TY2hlbWEucGF0aCAmJlxuICAgICAgICAgICAgYCR7dGhpcy5wYXRofS8ke2NoaWxkcmVuU2NoZW1hLnBhdGh9LyR7aW5kZXh9YFxuICAgICAgICAgIClcbiAgICAgICAgICBjb25zdCBvcGVuID0gY2hpbGRyZW5PcGVuIHx8XG4gICAgICAgICAgICAvLyBPbmx5IGNvdW50IGFzIFwiaW4gZWRpdCBwYXRoXCIgd2hlbiBpdCdzIG5vdCB0aGUgZnVsbCBlZGl0IHBhdGguXG4gICAgICAgICAgICBlZGl0UGF0aC5zdGFydHNXaXRoKHBhdGgpICYmIHBhdGgubGVuZ3RoIDwgZWRpdFBhdGgubGVuZ3RoXG4gICAgICAgICAgY29uc3QgYWN0aXZlID0gZWRpdFBhdGggPT09IHBhdGhcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICBvcGVuLFxuICAgICAgICAgICAgYWN0aXZlXG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBbXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZXRhaWxzKCkge1xuICAgICAgY29uc3QgeyBudW1DaGlsZHJlbiB9ID0gdGhpc1xuICAgICAgcmV0dXJuIG51bUNoaWxkcmVuICYmIGAke251bUNoaWxkcmVufSAke1xuICAgICAgICBudW1DaGlsZHJlbiA9PT0gMSA/ICdpdGVtJyA6ICdpdGVtcydcbiAgICAgIH1gXG4gICAgfSxcblxuICAgIGhhc0VkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZHJhZ2dhYmxlIHx8IHRoaXMuZWRpdGFibGUgfHwgdGhpcy5kZWxldGFibGVcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogU3VwcG9ydCBjcmVhdGFibGUhXG4gICAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIGNyZWF0YWJsZSwgZWRpdGFibGUgYW5kIGRlbGV0YWJsZSBvdmVycmlkZXMgb24gdGhlXG4gICAgLy8gYXNzb2NpYXRlZCBmb3JtcywganVzdCBsaWtlIGluIGBUeXBlTGlzdGAgYW5kIGBUeXBlT2JqZWN0YCwgdGhyb3VnaFxuICAgIC8vIGBEaXRvRWRpdEJ1dHRvbnNgLiBJdCB3b3VsZCBiZSBiZXN0IHRvIHVzZSBgRGl0b0VkaXRCdXR0b25zYCBoZXJlIHRvby5cbiAgICBjcmVhdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjcmVhdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY3JlYXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZWRpdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGVkaXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgcHJvcGVydHkubmFtZSlcbiAgICB9LFxuXG4gICAgb25FZGl0KCkge1xuICAgICAgLy8gQWxsIHdlIGdvdCB0byBkbyBpcyBwdXNoIHRoZSByaWdodCBlZGl0IHBhdGggdG8gdGhlIHJvdXRlciwgdGhlIHJlc3RcbiAgICAgIC8vIGlzIGhhbmRsZWQgYnkgb3VyIHJvdXRlcywgYWxsb3dpbmcgcmVsb2FkcyBhcyB3ZWxsLlxuICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICBwYXRoOiBgJHt0aGlzLmNvbnRhaW5lci5wYXRofSR7dGhpcy5wYXRofWAsXG4gICAgICAgIC8vIFByZXNlcnZlIGN1cnJlbnQgcXVlcnlcbiAgICAgICAgcXVlcnk6IHRoaXMuJHJvdXRlLnF1ZXJ5XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkRlbGV0ZSgpIHtcbiAgICAgIC8vIFRPRE86IEltcGxlbWVudCFcbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5vbkNoYW5nZSgpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICB0clxuICAgIHRoKFxuICAgICAgdi1mb3I9XCIoY29sdW1uLCBpbmRleCkgaW4gY29sdW1uc1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGNvbHVtbilcIlxuICAgICAgOmNsYXNzPVwiZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKVwiXG4gICAgKVxuICAgICAgcm91dGVyLWxpbmsoXG4gICAgICAgIHYtaWY9XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgICA6dG89XCJnZXRTb3J0TGluayhjb2x1bW4pXCJcbiAgICAgICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICA6Y2xhc3M9XCJnZXRTb3J0Q2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICAgICApXG4gICAgICAgICAgLmRpdG8tb3JkZXItYXJyb3dzXG4gICAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgICBzcGFuKFxuICAgICAgICB2LWVsc2VcbiAgICAgICkge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgIHRoKHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiKVxuICAgICAgLy8gRW1wdHkgPHNwYW4+IGlzIG5lZWRlZCBmb3Igc3R5bGluZywgc2VlIF90YWJsZS5zYXNzXG4gICAgICBzcGFuXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgICB0clxuICAgICAgdGgoXG4gICAgICAgIHYtZm9yPVwiKGNvbHVtbiwgaW5kZXgpIGluIGNvbHVtbnNcIlxuICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGNvbHVtbilcIlxuICAgICAgICA6Y2xhc3M9XCJnZXRDb2x1bW5DbGFzcyhjb2x1bW4pXCJcbiAgICAgIClcbiAgICAgICAgcm91dGVyLWxpbmsoXG4gICAgICAgICAgdi1pZj1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgICAgOnRvPVwiZ2V0U29ydExpbmsoY29sdW1uKVwiXG4gICAgICAgICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgICAgIClcbiAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImdldFNvcnRDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1vcmRlci1hcnJvd3NcbiAgICAgICAgICAgIHNwYW4ge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgICBzcGFuKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICApIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICAgIHRoKHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiKVxuICAgICAgICAvLyBFbXB0eSA8c3Bhbj4gaXMgbmVlZGVkIGZvciBzdHlsaW5nLCBzZWUgX3RhYmxlLnNhc3NcbiAgICAgICAgc3BhblxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXRhYmxlLWhlYWRcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB0clxuICAgICAgdGhcbiAgICAgICAgcGFkZGluZzogMFxuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsXG4gICAgICAgIHRleHQtYWxpZ246IGxlZnRcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICAuZGl0by1idXR0b25cbiAgICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmcsIHNlZSBiZWxvd1xuICAgICAgICAgIHBhZGRpbmc6IDBcbiAgICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICAgIHRleHQtYWxpZ246IGluaGVyaXRcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwXG4gICAgICAgIHNwYW5cbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmdcbiAgICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgICAgICY6ZW1wdHk6OmFmdGVyXG4gICAgICAgICAgICAvLyBQcmV2ZW50IGVtcHR5IDx0aD4gZnJvbSBjb2xsYXBzaW5nXG4gICAgICAgICAgICBjb250ZW50OiAnXFwyMDBiJyAvLyB6ZXJvLXdpZHRoIHNwYWNlXG4gICAgICAgID4gc3BhblxuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by10YWJsZS1oZWFkJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2x1bW5zOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBoYXNFZGl0QnV0dG9uczogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3J0KCkge1xuICAgICAgY29uc3Qgb3JkZXIgPSAodGhpcy5xdWVyeS5vcmRlciB8fCAnJykuc3BsaXQoL1xccysvKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogb3JkZXJbMF0sXG4gICAgICAgIG9yZGVyOiBvcmRlclsxXVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gYGRpdG8tY29sdW1uLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldFNvcnRDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWVcbiAgICAgICAgPyBgZGl0by1zZWxlY3RlZCBkaXRvLW9yZGVyLSR7dGhpcy5zb3J0Lm9yZGVyfWBcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdldFNvcnRMaW5rKGNvbHVtbikge1xuICAgICAgLy8gVG9nZ2xlIG9yZGVyIGlmIHRoZSBzYW1lIGNvbHVtbiBpcyBjbGlja2VkIGFnYWluLlxuICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWUgJiYgdGhpcy5zb3J0Lm9yZGVyID09PSAnYXNjJ1xuICAgICAgICA/ICdkZXNjJ1xuICAgICAgICA6ICdhc2MnXG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICBvcmRlcjogYCR7Y29sdW1uLm5hbWV9ICR7b3JkZXJ9YFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGQoXG4gIDpjbGFzcz1cImNlbGwuY2xhc3NcIlxuICA6c3R5bGU9XCJjZWxsLnN0eWxlXCJcbilcbiAgLy8gVE9ETzogSW1wbGVtZW50IGlubGluZWQgY29tcG9uZW50cyBpbiBjZWxsIG1vZGUhXG4gIGNvbXBvbmVudChcbiAgICB2LWlmPVwiY29tcG9uZW50XCJcbiAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuICBzcGFuKFxuICAgIHYtZWxzZVxuICAgIHYtaHRtbD1cInJlbmRlckNlbGwoZGF0YSlcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0ZChcbiAgICA6Y2xhc3M9XCJjZWxsLmNsYXNzXCJcbiAgICA6c3R5bGU9XCJjZWxsLnN0eWxlXCJcbiAgKVxuICAgIC8vIFRPRE86IEltcGxlbWVudCBpbmxpbmVkIGNvbXBvbmVudHMgaW4gY2VsbCBtb2RlIVxuICAgIGNvbXBvbmVudChcbiAgICAgIHYtaWY9XCJjb21wb25lbnRcIlxuICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZVxuICAgICAgdi1odG1sPVwicmVuZGVyQ2VsbChkYXRhKVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBlc2NhcGVIdG1sIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYmxlLWNlbGwnLCB7XG4gIHByb3BzOiB7XG4gICAgY2VsbDogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZVR5cGVDb21wb25lbnQodGhpcy5jZWxsLmNvbXBvbmVudClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbmRlckNlbGwoaXRlbSkge1xuICAgICAgY29uc3QgeyBuYW1lLCByZW5kZXIgfSA9IHRoaXMuY2VsbFxuICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW25hbWVdXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgOiBlc2NhcGVIdG1sKHZhbHVlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEEgY29tcG9uZW50IHRvIHNpbXBseSBwYXNzIHRocm91Z2ggYW4gZXhpc3RpbmcgdnVlIHZub2RlLlxuLy8gU2VlOiBodHRwczovL2ZvcnVtLnZ1ZWpzLm9yZy90LzI4MTYyLzRcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXZub2RlJywge1xuICBmdW5jdGlvbmFsOiB0cnVlLFxuICByZW5kZXI6IChoLCBjb250ZXh0KSA9PiBjb250ZXh0LnByb3BzLm5vZGVcbn0pXG48L3NjcmlwdD5cbiIsIi8vIFR5cGVDb21wb25lbnQgaXMgdGhlIGFic3RyYWN0IGJhc2UgY29tcG9uZW50IGZvciBhbGwgb3RoZXIgdHlwZSBjb21wb25lbnRzXG4vLyBpbnNpZGUgdGhlIHR5cGVzLyBmb2xkZXIuIFRoZXJlJ3MgYWxzbyBhIHNlcGFyYXRlIGNvbmNyZXRlXG4vLyBgVHlwZUNvbXBvbmVudC52dWVgIGNvbXBvbmVudCwgdXNlIHRvIHJlbmRlciB0aGUgYHR5cGU6ICdjb21wb25lbnQnYCB0eXBlcy5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyByZWdpc3RlclR5cGVDb21wb25lbnQsIGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcblxuY29uc3QgVHlwZUNvbXBvbmVudCA9IERpdG9Db21wb25lbnQuZXh0ZW5kKHtcbiAgbWl4aW5zOiBbVHlwZU1peGluXSxcblxuICBuYXRpdmVGaWVsZDogZmFsc2UsXG4gIHRleHRGaWVsZDogZmFsc2UsXG4gIC8vIFNldCByZWFzb25hYmxlIGRlZmF1bHRzIGZvciBhbGwgb2YgdGhlc2UgdGhhdCBhcmUgdXNlZCBieSBtb3N0IHR5cGVcbiAgLy8gY29tcG9uZW50cy4gVGhlc2Ugb25seSBuZWVkIGRlZmluaW5nIGluIHN1Yi1jbGFzc2VzIHdoZW4gdGhleSBkaWZmZXIuXG4gIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgZGVmYXVsdE5lc3RlZDogdHJ1ZSxcbiAgZGVmYXVsdFZpc2libGU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IHRydWUsXG4gIGV4Y2x1ZGVWYWx1ZTogZmFsc2UsXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogbnVsbCxcbiAgb21pdFBhZGRpbmc6IGZhbHNlXG59KVxuXG5UeXBlQ29tcG9uZW50LnJlZ2lzdGVyID0gZnVuY3Rpb24odHlwZXMsIGRlZmluaXRpb24gPSB7fSkge1xuICB0eXBlcyA9IGFzQXJyYXkodHlwZXMpXG4gIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50KGBkaXRvLXR5cGUtJHt0eXBlc1swXX1gLCBkZWZpbml0aW9uKVxuICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KVxuICB9XG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuVHlwZUNvbXBvbmVudC5nZXQgPSBnZXRUeXBlQ29tcG9uZW50XG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnRcbiIsIlxuYnV0dG9uLmRpdG8tYnV0dG9uKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6dHlwZT1cInR5cGVcIlxuICA6dGl0bGU9XCJ0ZXh0XCJcbiAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKSB7eyB0ZXh0IH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDp0eXBlPVwidHlwZVwiXG4gICAgOnRpdGxlPVwidGV4dFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKSB7eyB0ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ2J1dHRvbicsICdzdWJtaXQnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG4gIC8vIFRPRE86IENvbnNpZGVyIG1ha2luZyB0aGlzIHdvcmsgbmljZWx5OlxuICAvLyBvbWl0RmxleEdyb3c6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2ZXJiKCkge1xuICAgICAgcmV0dXJuIHRoaXMudmVyYnNbdGhpcy5uYW1lXSB8fCB0aGlzLm5hbWVcbiAgICB9LFxuXG4gICAgdGV4dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RleHQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQodGV4dCkge1xuICAgICAgICByZXR1cm4gdGV4dCB8fCBsYWJlbGl6ZSh0aGlzLnZlcmIpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjbG9zZUZvcm06IGdldFNjaGVtYUFjY2Vzc29yKCdjbG9zZUZvcm0nLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBAb3ZlcnJpZGVcbiAgICBnZXRMaXN0ZW5lcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBibHVyOiB0aGlzLm9uQmx1cixcbiAgICAgICAgY2xpY2s6IHRoaXMub25DbGlja1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VDb21wb25lbnQ/LnN1Ym1pdCh0aGlzLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrKCkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5lbWl0RXZlbnQoJ2NsaWNrJywge1xuICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICB9KVxuICAgICAgLy8gSGF2ZSBidXR0b25zIHRoYXQgZGVmaW5lIHJlc291cmNlcyBjYWxsIGB0aGlzLnN1Ym1pdCgpYCBieSBkZWZhdWx0OlxuICAgICAgaWYgKFxuICAgICAgICByZXMgPT09IHVuZGVmaW5lZCAmJiAvLyBNZWFuaW5nOiBkb24ndCBwcmV2ZW50IGRlZmF1bHQuXG4gICAgICAgIGhhc1Jlc291cmNlKHRoaXMuc2NoZW1hKVxuICAgICAgKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3VibWl0KClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuaW5wdXQuZGl0by1jaGVja2JveChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgdHlwZT1cImNoZWNrYm94XCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQuZGl0by1jaGVja2JveChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tY2hlY2tib3hcbiAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NoZWNrYm94Jywge1xuICBuYXRpdmVGaWVsZDogdHJ1ZVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzRnVuY3Rpb24sIGlzUHJvbWlzZSwgbm9ybWFsaXplRGF0YVBhdGgsIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IExvYWRpbmdNaXhpbiBmcm9tICcuL0xvYWRpbmdNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbTG9hZGluZ01peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgYXN5bmNEYXRhRW50cmllczoge31cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCBuYW1lLCB7XG4gICAgICByZXNvbHZlQ291bnRlciA9IDEsXG4gICAgICAuLi5sb2FkaW5nT3B0aW9uc1xuICAgIH0gPSB7fSkge1xuICAgICAgaWYgKCFpc09iamVjdChzY2hlbWEpKSB7XG4gICAgICAgIHNjaGVtYSA9IHsgZGF0YTogc2NoZW1hIH1cbiAgICAgIH1cbiAgICAgIGxldCB7IGRhdGEgPSB1bmRlZmluZWQsIGRhdGFQYXRoID0gbnVsbCB9ID0gc2NoZW1hXG4gICAgICAvLyBTZWUgaWYgdGhlcmUgaXMgYXN5bmMgZGF0YSBsb2FkaW5nIGFscmVhZHkgaW4gcHJvY2Vzcy5cbiAgICAgIGNvbnN0IGFzeW5jRW50cnkgPSAoXG4gICAgICAgIHRoaXMuYXN5bmNEYXRhRW50cmllc1tuYW1lXSB8fFxuICAgICAgICB0aGlzLiRzZXQodGhpcy5hc3luY0RhdGFFbnRyaWVzLCBuYW1lLCB7XG4gICAgICAgICAgZGVwZW5kZW5jeUZ1bmN0aW9uOiBudWxsLFxuICAgICAgICAgIHJlc29sdmVDb3VudGVyOiAwLFxuICAgICAgICAgIHJlc29sdmVkRGF0YTogbnVsbCxcbiAgICAgICAgICByZXNvbHZpbmc6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAvLyBJZiB0aGUgZGF0YSBjYWxsYmFjayBwcm92aWRlZCBhIGRlcGVuZGVuY3kgZnVuY3Rpb24gd2hlbiBpdCB3YXMgY2FsbGVkLFxuICAgICAgLy8gY2FsIGl0IGluIGV2ZXJ5IGNhbGwgb2YgYGhhbmRsZURhdGFTY2hlbWEoKWAgdG8gZm9yY2UgVnVlIHRvIGtlZXAgdHJhY2tcbiAgICAgIC8vIG9mIHRoZSBhc3luYyBkZXBlbmRlbmNpZXMuXG4gICAgICBhc3luY0VudHJ5LmRlcGVuZGVuY3lGdW5jdGlvbj8uY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG5cbiAgICAgIGlmIChhc3luY0VudHJ5LnJlc29sdmVDb3VudGVyID4gMCkge1xuICAgICAgICAvLyBJZiB0aGUgZGF0YSB3YXMgcmVzb2x2ZWQgYWxyZWFkeSwgcmV0dXJuIGl0IGFuZCBjbGVhciB0aGUgdmFsdWUgb25jZVxuICAgICAgICAvLyBgcmVzb2x2ZUNvdW50ZXJgIHJlYWNoZXMgemVyby4gQ291bnRpbmcgaXMgbmVlZGVkIGJlY2F1c2UgZGVwZW5kaW5nXG4gICAgICAgIC8vIG9uIHRoZSB1c2Ugb2YgZGF0YSBhbmQgcmVhY3Rpdml0eSwgbXVsdGlwbGUgY2FsbHMgdG8gdGhlIGNvbXB1dGVkXG4gICAgICAgIC8vIGdldHRlciBhcmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGRhdGEgaXMgY2hhbmdpbmcuIENsZWFyaW5nIHRoZSByZXNvbHZlZFxuICAgICAgICAvLyBkYXRhIHdvcmtzIGJlY2F1c2UgVnVlIGNhY2hlcyB0aGUgcmVzdWx0IG9mIGNvbXB1dGVkIGdldHRlcnMgYW5kIG9ubHlcbiAgICAgICAgLy8gcmVldmFsdWF0ZXMgaWYgb25lIG9mIHRoZSBkZXBlbmRlbmNpZXMgY2hhbmdlZC4gVGhpcyBpcyB0byBlbnN1cmVcbiAgICAgICAgLy8gdGhhdCBhIGNhY2hlZCB2YWx1ZSBoZXJlIGRvZXNuJ3QgYmxvY2sgLyBvdmVycmlkZSByZWV2YWx1YXRpb246XG4gICAgICAgIGNvbnN0IHsgcmVzb2x2ZWREYXRhIH0gPSBhc3luY0VudHJ5XG4gICAgICAgIGlmICgtLWFzeW5jRW50cnkucmVzb2x2ZUNvdW50ZXIgPT09IDApIHtcbiAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkRGF0YSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzb2x2ZWREYXRhXG4gICAgICB9XG4gICAgICAvLyBBdm9pZCBjYWxsaW5nIHRoZSBkYXRhIGZ1bmN0aW9uIHR3aWNlOlxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2aW5nKSB7XG4gICAgICAgIGRhdGEgPSBudWxsXG4gICAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGF0YSkpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBkYXRhLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICAgIC8vIElmIHRoZSByZXN1bHQgb2YgdGhlIGRhdGEgZnVuY3Rpb24gaXMgYW5vdGhlciBmdW5jdGlvbiwgdGhlbiB0aGVcbiAgICAgICAgICAvLyBmaXJzdCBkYXRhIGZ1bmN0aW9uIGlzIHRoZXJlIHRvIHRyYWNrIGRlcGVuZGVuY2llcyBhbmQgdGhlIHJlYWxcbiAgICAgICAgICAvLyBkYXRhIGxvYWRpbmcgaGFwcGVucyBpbiB0aGUgZnVuY3Rpb24gdGhhdCBpdCByZXR1cm5lZC4gS2VlcCB0cmFja1xuICAgICAgICAgIC8vIGl0IGluIGBkZXBlbmRlbmN5RnVuY3Rpb25gIHNvIGl0IGNhbiBiZSBjYWxsZWQgb24gZWFjaCBjYWxsIG9mXG4gICAgICAgICAgLy8gYGhhbmRsZURhdGFTY2hlbWEoKWAgdG8ga2VlcCB0aGUgZGVwZW5kZW5jaWVzIGludGFjdCwgYW5kIGNhbGxcbiAgICAgICAgICAvLyB0aGUgZnVuY3Rpb24gdGhhdCBpdCByZXR1cm5lZCBvbmNlIHRvIGdldCB0aGUgYWN0dWFsIGRhdGE6XG4gICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocmVzdWx0KSkge1xuICAgICAgICAgICAgYXN5bmNFbnRyeS5kZXBlbmRlbmN5RnVuY3Rpb24gPSBkYXRhXG4gICAgICAgICAgICBkYXRhID0gcmVzdWx0LmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gcmVzdWx0XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoZGF0YSkpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGF0YSBpcyBhc3luY2hyb25vdXMsIGl0IGNhbid0IGJlIHJldHVybmVkIHN0cmFpZ2h0IGF3YXkuXG4gICAgICAgICAgLy8gQnV0IHdlIGNhbiBjaGVhdCB1c2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFuZCBgcmVzb2x2ZWREYXRhYCxcbiAgICAgICAgICAvLyB3aGljaCBpcyBnb2luZyB0byByZWNlaXZlIHRoZSBsb2FkZWQgZGF0YSBhc3luY2hyb25vdXNseSxcbiAgICAgICAgICAvLyB0cmlnZ2VyaW5nIGEgcmVjb21wdXRlIG9mIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSB0aGF0IGNhbGxzXG4gICAgICAgICAgLy8gYGhhbmRsZURhdGFTY2hlbWEoKWAuXG4gICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSB0cnVlXG4gICAgICAgICAgdGhpcy5yZXNvbHZlRGF0YShkYXRhLCBsb2FkaW5nT3B0aW9ucykudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZUNvdW50ZXIgPSByZXNvbHZlQ291bnRlclxuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlZERhdGEgPSBkYXRhXG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IGZhbHNlXG4gICAgICAgICAgfSlcbiAgICAgICAgICAvLyBDbGVhciBkYXRhIHVudGlsIHByb21pc2UgaXMgcmVzb2x2ZWQgYW5kIGByZXNvbHZlZERhdGFgIGlzIHNldFxuICAgICAgICAgIGRhdGEgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YVBhdGgpIHtcbiAgICAgICAgZGF0YSA9IGdldFZhbHVlQXREYXRhUGF0aChcbiAgICAgICAgICB0aGlzLnJvb3REYXRhLFxuICAgICAgICAgIG5vcm1hbGl6ZURhdGFQYXRoKGAke3RoaXMuZGF0YVBhdGh9LyR7ZGF0YVBhdGh9YClcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVzb2x2ZURhdGEobG9hZCwgbG9hZGluZ09wdGlvbnMgPSB7fSkge1xuICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgbGV0IGRhdGEgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gYXdhaXQgKGlzRnVuY3Rpb24obG9hZCkgPyBsb2FkKCkgOiBsb2FkKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvci5tZXNzYWdlIHx8IGVycm9yKVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIHJldHVybiBkYXRhXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRGF0YU1peGluIGZyb20gJy4vRGF0YU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IHNldFRlbXBvcmFyeUlkLCBpc1JlZmVyZW5jZSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNBcnJheSwgaXNTdHJpbmcsIGlzRnVuY3Rpb24sXG4gIG5vcm1hbGl6ZURhdGFQYXRoLCBsYWJlbGl6ZSwgZGVib3VuY2VBc3luY1xufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhc09wdGlvbnM6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCBjb252ZXJ0VmFsdWUgPSB2YWx1ZSA9PiB0aGlzLnJlbGF0ZVxuICAgICAgICAgID8gdGhpcy5oYXNPcHRpb24odmFsdWUpXG4gICAgICAgICAgICA/IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXNBcnJheSh0aGlzLnZhbHVlKVxuICAgICAgICAgID8gdGhpcy52YWx1ZS5tYXAoY29udmVydFZhbHVlKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUgIT09IG51bGwpXG4gICAgICAgICAgOiBjb252ZXJ0VmFsdWUodGhpcy52YWx1ZSlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIC8vIFdoZW4gcmVsYXRpbmcgYW5kIGFzIHNvb24gYXMgdGhlIG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4uLlxuICAgICAgICAgIHRoaXMucmVsYXRlICYmIHRoaXMuaGFzT3B0aW9ucyAmJiAoXG4gICAgICAgICAgICAvLyAuLi5pZiB0aGUgdmFsdWUgaXMgZm9yY2VkIHRvIG51bGwgYmVjYXVzZSBhIGRpc2FwcGVhcmVkIG9wdGlvbi4uLlxuICAgICAgICAgICAgdmFsdWUgPT09IG51bGwgJiYgdGhpcy52YWx1ZSAhPT0gbnVsbCB8fFxuICAgICAgICAgICAgLy8gLi4ub3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVmZXJlbmNlLCByZXBsYWNlIGl0IHdpdGggaXRzIG9wdGlvblxuICAgICAgICAgICAgLy8gdmFsdWUsIHNvIHRoYXQgaXQnbGwgaG9sZCBhY3R1YWwgZGF0YSwgbm90IGp1c3QgYSByZWZlcmVuY2UgaWQuXG4gICAgICAgICAgICBpc1JlZmVyZW5jZSh0aGlzLnZhbHVlKVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjb252ZXJ0ID0gdmFsdWUgPT4gdGhpcy5yZWxhdGVcbiAgICAgICAgICA/IHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgICB0aGlzLnZhbHVlID0gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlLm1hcChjb252ZXJ0KVxuICAgICAgICAgIDogY29udmVydCh2YWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRPcHRpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWUpXG4gICAgfSxcblxuICAgIG9wdGlvbnMoKSB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5oYW5kbGVEYXRhU2NoZW1hKHRoaXMuc2NoZW1hLm9wdGlvbnMsICdvcHRpb25zJywge1xuICAgICAgICByZXNvbHZlQ291bnRlcjogMVxuICAgICAgfSkgPz8gW11cbiAgICAgIGlmICghaXNBcnJheShkYXRhKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgb3B0aW9ucyBkYXRhLCBzaG91bGQgYmUgYXJyYXk6ICR7ZGF0YX1gKVxuICAgICAgfVxuICAgICAgdGhpcy5oYXNPcHRpb25zID0gZGF0YS5sZW5ndGggPiAwXG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzT3B0aW9ucyhkYXRhKVxuICAgIH0sXG5cbiAgICBhY3RpdmVPcHRpb25zKCkge1xuICAgICAgLy8gVGhpcyBpcyBvdmVycmlkZGVuIGluIGBUeXBlTXVsdGlzZWxlY3RgIHRvIHJldHVybiB0aGUgYHNlYXJjaGVkT3B0aW9uc2BcbiAgICAgIC8vIHdoZW4gYSBzZWFyY2ggZmlsdGVyIHdhcyBhcHBsaWVkLlxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1xuICAgIH0sXG5cbiAgICByZWxhdGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZWxhdGUnLCB7XG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IHRvIGByZWxhdGVCeTogJ2lkJ2BcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIC8vIFdlIGNhbm5vdCB1c2Ugc2NoZW1hIGFjY2Vzc29yIGNhbGxiYWNrIG1hZ2ljIGZvciBgcmVsYXRlYCBhcyB3ZSBuZWVkXG4gICAgICAvLyB0aGlzIG91dHNpZGUgb2YgdGhlIGNvbXBvbmVudCdzIGxpZmUtc3Bhbiwgc2VlIGBwcm9jZXNzRGF0YSgpYCBiZWxvdy5cbiAgICAgIGNhbGxiYWNrOiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZ3JvdXBCeTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2dyb3VwQnknLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSksXG5cbiAgICBvcHRpb25MYWJlbDogZ2V0U2NoZW1hQWNjZXNzb3IoJ29wdGlvbnMubGFiZWwnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KGxhYmVsKSB7XG4gICAgICAgIC8vIElmIG5vIGBsYWJlbGAgd2FzIHByb3ZpZGVkIGJ1dCB0aGUgb3B0aW9ucyBhcmUgb2JqZWN0cywgYXNzdW1lIGFcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBvZiAnbGFiZWwnOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGxhYmVsIHx8XG4gICAgICAgICAgdGhpcy5nZXRPcHRpb25LZXkoJ2xhYmVsJykgfHxcbiAgICAgICAgICBudWxsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG9wdGlvblZhbHVlOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy52YWx1ZScsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQodmFsdWUpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICd2YWx1ZSc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdmFsdWUgfHxcbiAgICAgICAgICB0aGlzLnJlbGF0ZSAmJiAnaWQnIHx8XG4gICAgICAgICAgdGhpcy5nZXRPcHRpb25LZXkoJ3ZhbHVlJykgfHxcbiAgICAgICAgICBudWxsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IENvbnNpZGVyIG1vdmluZyBzZWFyY2ggdG8gYG9wdGlvbnMuc2VhcmNoYD9cbiAgICBzZWFyY2hGaWx0ZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdzZWFyY2gnLCB7XG4gICAgICB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KHNlYXJjaCkge1xuICAgICAgICBpZiAoc2VhcmNoKSB7XG4gICAgICAgICAgY29uc3QgeyBmaWx0ZXIsIGRlYm91bmNlIH0gPSBpc0Z1bmN0aW9uKHNlYXJjaClcbiAgICAgICAgICAgID8geyBmaWx0ZXI6IHNlYXJjaCB9XG4gICAgICAgICAgICA6IHNlYXJjaFxuICAgICAgICAgIHJldHVybiBkZWJvdW5jZSA/IGRlYm91bmNlQXN5bmMoZmlsdGVyLCBkZWJvdW5jZSkgOiBmaWx0ZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZ3JvdXBCeUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBCeSA/ICdsYWJlbCcgOiBudWxsXG4gICAgfSxcblxuICAgIGdyb3VwQnlPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBCeSA/ICdvcHRpb25zJyA6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE9wdGlvbktleShrZXkpIHtcbiAgICAgIGNvbnN0IFtvcHRpb25dID0gdGhpcy5hY3RpdmVPcHRpb25zXG4gICAgICByZXR1cm4gaXNPYmplY3Qob3B0aW9uKSAmJiBrZXkgaW4gb3B0aW9uID8ga2V5IDogbnVsbFxuICAgIH0sXG5cbiAgICBwcm9jZXNzT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVsYXRlKSB7XG4gICAgICAgICAgLy8gSWYgaWRzIGFyZSBtaXNzaW5nIGFuZCB3ZSB3YW50IHRvIHJlbGF0ZSwgc2V0IHRlbXBvcmFyeSBpZHMuXG4gICAgICAgICAgLy8gTk9URTogV2UgbmVlZCB0byBtb2RpZnkgdGhlIGFjdHVhbCBkYXRhLCBtYWtpbmcgYSBjb3B5IHdvbid0IHdvcmtcbiAgICAgICAgICAvLyBhcyBpdCB3b24ndCBwcm9wYWdhdGUuXG4gICAgICAgICAgLy8gTk9URTogVGhpcyBvbmx5IG1ha2VzIHNlbnNlIGlmIHRoZSBkYXRhIGlzIGZyb20gdGhlIGdyYXBoIHRoYXRcbiAgICAgICAgICAvLyB3ZSdyZSBjdXJyZW50bHkgZWRpdGluZy5cbiAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAoISgnaWQnIGluIG9wdGlvbikpIHtcbiAgICAgICAgICAgICAgc2V0VGVtcG9yYXJ5SWQob3B0aW9uLCAnaWQnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncm91cEJ5KSB7XG4gICAgICAgICAgY29uc3QgZ3JvdXBlZCA9IHt9XG4gICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMucmVkdWNlKFxuICAgICAgICAgICAgKHJlc3VsdHMsIG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBncm91cCA9IG9wdGlvblt0aGlzLmdyb3VwQnldXG4gICAgICAgICAgICAgIGxldCBlbnRyeSA9IGdyb3VwZWRbZ3JvdXBdXG4gICAgICAgICAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgICAgICAgICBlbnRyeSA9IGdyb3VwZWRbZ3JvdXBdID0ge1xuICAgICAgICAgICAgICAgICAgW3RoaXMuZ3JvdXBCeUxhYmVsXTogZ3JvdXAsXG4gICAgICAgICAgICAgICAgICBbdGhpcy5ncm91cEJ5T3B0aW9uc106IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChlbnRyeSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbnRyeS5vcHRpb25zLnB1c2gob3B0aW9uKVxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0c1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtdXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9uc1xuICAgIH0sXG5cbiAgICBoYXNPcHRpb24ob3B0aW9uKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSlcbiAgICB9LFxuXG4gICAgZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgIGNvbnN0IGZpbmRPcHRpb24gPSAob3B0aW9ucywgdmFsdWUsIGdyb3VwQnkpID0+IHtcbiAgICAgICAgLy8gU2VhcmNoIGZvciB0aGUgb3B0aW9uIG9iamVjdCB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBhbmQgcmV0dXJuIHRoZVxuICAgICAgICAvLyB3aG9sZSBvYmplY3QuXG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAoZ3JvdXBCeSkge1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSBmaW5kT3B0aW9uKG9wdGlvbi5vcHRpb25zLCB2YWx1ZSwgbnVsbClcbiAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uVmFsdWVcbiAgICAgICAgPyBmaW5kT3B0aW9uKHRoaXMuYWN0aXZlT3B0aW9ucywgdmFsdWUsIHRoaXMuZ3JvdXBCeSlcbiAgICAgICAgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uVmFsdWUgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25WYWx1ZSlcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25WYWx1ZV1cbiAgICAgICAgOiBpc0Z1bmN0aW9uKG9wdGlvblZhbHVlKVxuICAgICAgICAgID8gb3B0aW9uVmFsdWUuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBvcHRpb24gfSkpXG4gICAgICAgICAgOiBvcHRpb25cbiAgICB9LFxuXG4gICAgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgICBjb25zdCB7IG9wdGlvbkxhYmVsIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNTdHJpbmcob3B0aW9uTGFiZWwpXG4gICAgICAgID8gb3B0aW9uPy5bb3B0aW9uTGFiZWxdXG4gICAgICAgIDogaXNGdW5jdGlvbihvcHRpb25MYWJlbClcbiAgICAgICAgICA/IG9wdGlvbkxhYmVsLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgb3B0aW9uIH0pKVxuICAgICAgICAgIDogbGFiZWxpemUoYCR7b3B0aW9ufWApXG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpIHtcbiAgICBpZiAoc2NoZW1hLnJlbGF0ZSkge1xuICAgICAgLy8gRm9yIGludGVybmFsbHkgcmVsYXRpbmcgZGF0YSAoYHNjaGVtYS5vcHRpb25zLmRhdGFQYXRoYCksIHdlIG5lZWQgdG9cbiAgICAgIC8vIHByb2Nlc3MgYm90aCB0aGUgb3B0aW9ucyAoZm9yICcjcmVmJykgYW5kIHRoZSB2YWx1ZSAoJyNpZCcpLlxuICAgICAgLy8gU2VlIGBEYXRhTWl4aW4uaGFuZGxlRGF0YVNjaGVtYSgpYDpcbiAgICAgIGNvbnN0IHBhdGggPSBzY2hlbWEub3B0aW9ucz8uZGF0YVBhdGhcbiAgICAgIGNvbnN0IHJlbGF0ZWREYXRhUGF0aCA9IHBhdGhcbiAgICAgICAgPyBub3JtYWxpemVEYXRhUGF0aChgJHtkYXRhUGF0aH0vJHtwYXRofWApXG4gICAgICAgIDogbnVsbFxuICAgICAgZ3JhcGguYWRkUmVsYXRpb24oZGF0YVBhdGgsIHJlbGF0ZWREYXRhUGF0aCwgc2NoZW1hKVxuICAgICAgaWYgKHJlbGF0ZWREYXRhUGF0aCkge1xuICAgICAgICBncmFwaC5zZXRTb3VyY2VSZWxhdGVkKHJlbGF0ZWREYXRhUGF0aClcbiAgICAgIH1cbiAgICAgIC8vIENvbnZlcnQgcmVsYXRpbmcgb2JqZWN0cyB0byBhIHNoYWxsb3cgY29weSB3aXRoIG9ubHkgdGhlIGlkIGxlZnQuXG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IHRvIHVzaW5nIGByZWxhdGVCeWA6XG4gICAgICBjb25zdCBwcm9jZXNzUmVsYXRlID0gdmFsdWUgPT4gdmFsdWUgPyB7IGlkOiB2YWx1ZS5pZCB9IDogdmFsdWVcbiAgICAgIC8vIFNlbGVjdGVkIG9wdGlvbnMgY2FuIGJlIGJvdGggb2JqZWN0cyAmIGFycmF5cywgZS5nLiAnY2hlY2tib3hlcyc6XG4gICAgICB2YWx1ZSA9IGlzQXJyYXkodmFsdWUpXG4gICAgICAgID8gdmFsdWUubWFwKHByb2Nlc3NSZWxhdGUpXG4gICAgICAgIDogcHJvY2Vzc1JlbGF0ZSh2YWx1ZSlcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cbiIsIlxudWwuZGl0by1jaGVja2JveGVzKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbilcbiAgbGkodi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiKVxuICAgIGxhYmVsXG4gICAgICBpbnB1dC5kaXRvLWNoZWNrYm94KFxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICApXG4gICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHVsLmRpdG8tY2hlY2tib3hlcyhcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuICApXG4gICAgbGkodi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiKVxuICAgICAgbGFiZWxcbiAgICAgICAgaW5wdXQuZGl0by1jaGVja2JveChcbiAgICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgICApXG4gICAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNoZWNrYm94ZXNcbiAgICBsYWJlbFxuICAgICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzc1xuICAgIC5kaXRvLWNoZWNrYm94XG4gICAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3hlcycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgZGVmYXVsdFZhbHVlOiBbXSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkT3B0aW9uczoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuc2VsZWN0ZWRWYWx1ZSB8fCBbXSkuZmlsdGVyKHZhbHVlID0+IHZhbHVlKVxuICAgICAgfSxcblxuICAgICAgc2V0KG9wdGlvbikge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSAob3B0aW9uIHx8IFtdKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1jb2RlKFxuICByZWY9XCJjb2RlXCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6c3R5bGU9XCJzdHlsZVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jb2RlKFxuICAgIHJlZj1cImNvZGVcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6c3R5bGU9XCJzdHlsZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1jb2RlXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAvLyBGb3IgcHJvcHBlciBzaXppbmcgb2YgY29udGVudCBhbG9uZyB3aXRoIDpzdHlsZT1cInN0eWxlXCIgc2V0dGluZyBhYm92ZSxcbiAgICAvLyBmb3IgcHJvcGVyIGxpbmUtaGVpZ2h0IGNhbGN1bGF0aW9uLlxuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgJi5kaXRvLXdpZHRoLWZpbGxcbiAgICAgIHdpZHRoOiBhdXRvXG4gICAgLmNvZGVmbGFza1xuICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgLy8gSWdub3JlIHRoZXBhcmVudCBwYWRkaW5nIGRlZmluZWQgYWJvdmUgd2hpY2ggaXMgb25seSBuZWVkZWQgdG8gc2V0XG4gICAgICAvLyB0aGUgZGVzaXJlZCBoZWlnaHQgd2l0aCA6c3R5bGU9XCJzdHlsZVwiLlxuICAgICAgdG9wOiAwXG4gICAgICBsZWZ0OiAwXG4gICAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gICAgLmNvZGVmbGFza19fcHJlXG4gICAgICAvLyBVc2Ugc2FtZSBwYWRkaW5nIGFzIC5kaXRvLWNvZGVcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gICAgLmNvZGVmbGFza19fY29kZSxcbiAgICAuY29kZWZsYXNrX19saW5lc1xuICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vXG4gICAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZSlcbiAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodClcbiAgICAuY29kZWZsYXNrX19saW5lc1xuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCBDb2RlRmxhc2sgZnJvbSAnY29kZWZsYXNrJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29kZScsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgM1xuICAgIH0sXG5cbiAgICBzdHlsZSgpIHtcbiAgICAgIHJldHVybiBgaGVpZ2h0OiBjYWxjKCR7dGhpcy5saW5lc31lbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlgXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgZmxhc2sgPSBuZXcgQ29kZUZsYXNrKHRoaXMuJHJlZnMuY29kZSwge1xuICAgICAgbGFuZ3VhZ2U6IHRoaXMuc2NoZW1hLmxhbmd1YWdlIHx8ICdqYXZhc2NyaXB0JyxcbiAgICAgIHRhYlNpemU6IHRoaXMuc2NoZW1hLmluZGVudFNpemUgfHwgMixcbiAgICAgIGxpbmVOdW1iZXJzOiBmYWxzZVxuICAgIH0pXG5cbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICBsZXQgaWdub3JlVXBkYXRlID0gZmFsc2VcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvY3VzZWQgJiYgY2hhbmdlZCkge1xuICAgICAgICBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfVxuXG4gICAgdGhpcy5kb21Pbih0aGlzLiRyZWZzLmNvZGUucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKSwge1xuICAgICAgZm9jdXM6IG9uRm9jdXMsXG4gICAgICBibHVyOiBvbkJsdXJcbiAgICB9KVxuXG4gICAgY29uc3Qgc2V0Q29kZSA9IGNvZGUgPT4ge1xuICAgICAgaWYgKGNvZGUgIT09IGZsYXNrLmNvZGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gdHJ1ZVxuICAgICAgICBmbGFzay51cGRhdGVDb2RlKGNvZGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgICBvbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZmxhc2sub25VcGRhdGUodmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVVwZGF0ZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VmFsdWUodmFsdWUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRDb2RlKHZhbHVlIHx8ICcnKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBzZXRDb2RlKHRoaXMudmFsdWUgfHwgJycpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk/LmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudHJpZ2dlci5kaXRvLWNvbG9yKFxuICB0cmlnZ2VyPVwiY2xpY2tcIlxuICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbilcbiAgLmRpdG8taW5wdXQoXG4gICAgc2xvdD1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gIClcbiAgICBpbnB1dChcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgdHlwZT1cImlucHV0XCJcbiAgICAgIHNpemU9XCI4XCJcbiAgICAgIHYtbW9kZWw9XCJoZXhWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIClcbiAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgIHYtaWY9XCJ2YWx1ZVwiXG4gICAgKVxuICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgc2tldGNoLXBpY2tlci5kaXRvLWNvbG9yLXBpY2tlcihcbiAgICBzbG90PVwicG9wdXBcIlxuICAgIHYtbW9kZWw9XCJjb2xvclZhbHVlXCJcbiAgICA6ZGlzYWJsZS1hbHBoYT1cIiFhbHBoYVwiXG4gICAgOmRpc2FibGUtZmllbGRzPVwiIWlucHV0c1wiXG4gICAgOnByZXNldC1jb2xvcnM9XCJwcmVzZXRzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdHJpZ2dlci5kaXRvLWNvbG9yKFxuICAgIHRyaWdnZXI9XCJjbGlja1wiXG4gICAgOnNob3cuc3luYz1cInNob3dQb3B1cFwiXG4gIClcbiAgICAuZGl0by1pbnB1dChcbiAgICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gICAgKVxuICAgICAgaW5wdXQoXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgIHR5cGU9XCJpbnB1dFwiXG4gICAgICAgIHNpemU9XCI4XCJcbiAgICAgICAgdi1tb2RlbD1cImhleFZhbHVlXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tY29sb3ItcHJldmlldy5kaXRvLWluaGVyaXQtZm9jdXMoXG4gICAgICAgIHYtaWY9XCJ2YWx1ZVwiXG4gICAgICApXG4gICAgICAgIGRpdig6c3R5bGU9XCJ7IGJhY2tncm91bmQ6IGAjJHtoZXhWYWx1ZSB8fCAnMDAwMDAwMDAnfWAgfVwiKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuICAgIHNrZXRjaC1waWNrZXIuZGl0by1jb2xvci1waWNrZXIoXG4gICAgICBzbG90PVwicG9wdXBcIlxuICAgICAgdi1tb2RlbD1cImNvbG9yVmFsdWVcIlxuICAgICAgOmRpc2FibGUtYWxwaGE9XCIhYWxwaGFcIlxuICAgICAgOmRpc2FibGUtZmllbGRzPVwiIWlucHV0c1wiXG4gICAgICA6cHJlc2V0LWNvbG9ycz1cInByZXNldHNcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAgICRjb2xvci1zd2F0Y2gtd2lkdGg6ICRwYXR0ZXJuLXRyYW5zcGFyZW5jeS1zaXplXG4gICAgJGNvbG9yLXN3YXRjaC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gJGJvcmRlci13aWR0aFxuICAgIC5kaXRvLWNvbG9yXG4gICAgICAuZGl0by1pbnB1dFxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgICAgaW5wdXRcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGhcbiAgICAgIC5kaXRvLWJ1dHRvbi1jbGVhclxuICAgICAgICBtYXJnaW4tcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGhcbiAgICAgIC5kaXRvLWNvbG9yLXBpY2tlclxuICAgICAgICBtYXJnaW46ICRwb3B1cC1tYXJnaW5cbiAgICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgICAgICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvd1xuICAgICAgLmRpdG8tY29sb3ItcHJldmlld1xuICAgICAgICBiYWNrZ3JvdW5kOiAkcGF0dGVybi10cmFuc3BhcmVuY3lcbiAgICAgICAgYm9yZGVyLWxlZnQ6ICRib3JkZXItc3R5bGVcbiAgICAgICAgJixcbiAgICAgICAgZGl2XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgICAgd2lkdGg6ICRjb2xvci1zd2F0Y2gtd2lkdGhcbiAgICAgICAgICB0b3A6IDBcbiAgICAgICAgICByaWdodDogMFxuICAgICAgICAgIGJvdHRvbTogMFxuICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1c1xuICAgICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1c1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB0aW55Y29sb3IgZnJvbSAndGlueWNvbG9yMidcbmltcG9ydCB7IFNrZXRjaCBhcyBTa2V0Y2hQaWNrZXIgfSBmcm9tICd2dWUtY29sb3InXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgVHJpZ2dlciB9IGZyb20gJ0BkaXRvanMvdWknXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29sb3InLCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgU2tldGNoUGlja2VyIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1BvcHVwOiBmYWxzZSxcbiAgICAgIGNvbnZlcnRlZEhleFZhbHVlOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29sb3JWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSB8fCB7fVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMuY29sb3JGb3JtYXRcbiAgICAgICAgY29uc3Qga2V5ID0ge1xuICAgICAgICAgIC8vIE5PVEU6IHZ1ZS1jb2xvciBjYWxscyBpdCAnaGV4Jywgd2hpbGUgdGlueWNvbG9yIGNhbGxzIGl0ICdoZXg2J1xuICAgICAgICAgIGhleDogdmFsdWU/LmEgPCAxID8gJ2hleDgnIDogJ2hleCcsXG4gICAgICAgICAgcmdiOiAncmdiYSdcbiAgICAgICAgfVtmb3JtYXRdIHx8IGZvcm1hdFxuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlW2tleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGlueWNvbG9yKHZhbHVlKS50b1N0cmluZyhmb3JtYXQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGhleFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gbnVsbFxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcih0aGlzLnZhbHVlKVxuICAgICAgICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSBjb2xvclxuICAgICAgICAgICAgICAudG9TdHJpbmcoY29sb3IuZ2V0QWxwaGEoKSA8IDEgPyAnaGV4OCcgOiAnaGV4NicpXG4gICAgICAgICAgICAgIC5zbGljZSgxKVxuICAgICAgICAgICAgICAudG9VcHBlckNhc2UoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBgZm9ybWF0YCBjbGFzaGVzIHdpdGggVHlwZU1peGluLmZvcm1hdCgpYCwgd2hpY2ggc2hhbGwgYmUgcmVuYW1lZFxuICAgIC8vIHNvb24gdG8gYGZvcm1hdFZhbHVlKClgLiBSZW5hbWUgYGNvbG9yRm9ybWF0YCBiYWNrIHRvIGBmb3JtYXRgIGFmdGVyLlxuICAgIGNvbG9yRm9ybWF0OiBnZXRTY2hlbWFBY2Nlc3NvcignZm9ybWF0Jywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2hleCdcbiAgICB9KSxcblxuICAgIGFscGhhOiBnZXRTY2hlbWFBY2Nlc3NvcignYWxwaGEnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGlucHV0czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2lucHV0cycsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSksXG5cbiAgICBwcmVzZXRzOiBnZXRTY2hlbWFBY2Nlc3NvcigncHJlc2V0cycsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZGVmYXVsdDogW1xuICAgICAgICAnI2ZmZmZmZicsXG4gICAgICAgICcjYzNjM2MzJyxcbiAgICAgICAgJyM3ZjdmN2YnLFxuICAgICAgICAnIzAwMDAwMCcsXG4gICAgICAgICcjODgwMDE1JyxcbiAgICAgICAgJyNlZDFjMjQnLFxuICAgICAgICAnI2ZmN2YyNycsXG4gICAgICAgICcjZmZmMjAwJyxcblxuICAgICAgICAnIzIyYjE0YycsXG4gICAgICAgICcjMDBhMmU4JyxcbiAgICAgICAgJyMzZjQ4Y2MnLFxuICAgICAgICAnI2EzNDlhNCcsXG4gICAgICAgICcjYjk3YTU3JyxcbiAgICAgICAgJyNmZmFlYzknLFxuICAgICAgICAnI2ZmYzkwZScsXG4gICAgICAgICcjMDAwMDAwMDAnXG4gICAgICBdXG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGZvY3VzZWQoZm9jdXNlZCkge1xuICAgICAgaWYgKCFmb2N1c2VkICYmIHRoaXMuY29udmVydGVkSGV4VmFsdWUpIHtcbiAgICAgICAgY29uc3QgY29sb3IgPSB0aW55Y29sb3IoYCMke3RoaXMuY29udmVydGVkSGV4VmFsdWV9YClcbiAgICAgICAgaWYgKGNvbG9yPy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gY29sb3IudG9TdHJpbmcodGhpcy5jb2xvckZvcm1hdClcbiAgICAgICAgICAvLyBUT0RPOiBFbWl0ICdpbnB1dCcgaGVyZSBpbnN0ZWFkLCBhbmQgJ2NoYW5nZScgaW4gYmx1ciwgbGlrZSBvdGhlcnMuXG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbjwvc2NyaXB0PlxuIiwiXG5jb21wb25lbnQoXG4gIDppcz1cImNvbXBvbmVudFwiXG4gIHYtYmluZD1cIiRwcm9wc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBjb21wb25lbnQoXG4gICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICB2LWJpbmQ9XCIkcHJvcHNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuLy8gVGhpcyBpcyB0aGUgZ2VuZXJhbCBwdXJwb3NlICdjb21wb25lbnQnIHR5cGUsIHdoaWNoIGNhbiByZXNvbHZlIHRvIGFueSBjdXN0b21cbi8vIGNvbXBvbmVudCB0aHJvdWdoIGBzY2hlbWEuY29tcG9uZW50YCwgc2VlIGByZXNvbHZlVHlwZUNvbXBvbmVudCgpYC4gVGhpcyBjYW5cbi8vIGJlIHVzZWQgdG8gbmVzdCBhcmJpdHJhcnkgdnVlIGNvbXBvbmVudHMgaW4gc2NoZW1hOlxuLy8ge1xuLy8gICB0eXBlOiAnY29tcG9uZW50Jyxcbi8vICAgY29tcG9uZW50OiBpbXBvcnQoJy4vY29tcG9uZW50Jylcbi8vIH1cblxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvbXBvbmVudCcsIHtcbiAgLy8gT3ZlcnJpZGUgdGhlIHN0YW5kYXJkIGBkZWZhdWx0VmFsdWU6IG51bGxgIHRvIG5vdCBzZXQgYW55IGRhdGEgZm9yIGN1c3RvbVxuICAvLyBjb21wb25lbnRzLCB1bmxlc3MgdGhleSBwcm92aWRlIGEgZGVmYXVsdCB2YWx1ZS5cbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+ICEoJ2RlZmF1bHQnIGluIHNjaGVtYSlcbn0pXG48L3NjcmlwdD5cbiIsIlxuLy8tIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHRyaWdnZXIgZXZhbHVhdGlvbiBvZiBgdmFsdWVgIHRoYXQgZG9zZSBub3Rcbi8vICBpbnZvbHZlIGFjdHVhbGx5IHJlbmRlcmluZyBpdCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IHZpc2libGUuXG5pbnB1dC5kaXRvLXRleHQuZGl0by1pbnB1dChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOm5hbWU9XCJuYW1lXCJcbiAgdHlwZT1cInRleHRcIlxuICA6dmFsdWU9XCJ2YWx1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOnJlYWRvbmx5PVwidHJ1ZVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAvLy0gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gdHJpZ2dlciBldmFsdWF0aW9uIG9mIGB2YWx1ZWAgdGhhdCBkb3NlIG5vdFxuICAvLyAgaW52b2x2ZSBhY3R1YWxseSByZW5kZXJpbmcgaXQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCB2aXNpYmxlLlxuICBpbnB1dC5kaXRvLXRleHQuZGl0by1pbnB1dChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOm5hbWU9XCJuYW1lXCJcbiAgICB0eXBlPVwidGV4dFwiXG4gICAgOnZhbHVlPVwidmFsdWVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6cmVhZG9ubHk9XCJ0cnVlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4uL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgRGF0YU1peGluIGZyb20gJy4uL21peGlucy9EYXRhTWl4aW4uanMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnY29tcHV0ZWQnLCAnZGF0YScsICdoaWRkZW4nXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZGVmYXVsdFZpc2libGU6IGZhbHNlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHRoaXNcbiAgICAgICAgaWYgKHNjaGVtYS5kYXRhIHx8IHNjaGVtYS5kYXRhUGF0aCkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5oYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgJ3NjaGVtYScsIHtcbiAgICAgICAgICAgIC8vIE1vZGlmeWluZyBgdGhpcy5kYXRhYCBiZWxvdyB0cmlnZ2VycyBhbm90aGVyIGNhbGwgb2YgdGhlIGB2YWx1ZWBcbiAgICAgICAgICAgIC8vIGdldHRlciwgc28gdXNlIGEgdmFsdWUgb2YgMiBmb3IgYHJlc29sdmVDb3VudGVyYCB0byByZXR1cm4gdGhlXG4gICAgICAgICAgICAvLyByZXNvbHZlZCBkYXRhIHR3aWNlLlxuICAgICAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDJcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMuJHNldCh0aGlzLmRhdGEsIHRoaXMubmFtZSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFR5cGVNaXhpbi5jb21wdXRlZC52YWx1ZS5nZXQuY2FsbCh0aGlzKVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIFR5cGVNaXhpbi5jb21wdXRlZC52YWx1ZS5zZXQuY2FsbCh0aGlzLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tZGF0ZVxuICBjb21wb25lbnQoXG4gICAgOmlzPVwiZ2V0Q29tcG9uZW50KHR5cGUpXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmxvY2FsZT1cImxvY2FsZVwiXG4gICAgOmRhdGVGb3JtYXQ9XCJ7IC4uLmFwaS5mb3JtYXRzLmRhdGUsIC4uLmRhdGVGb3JtYXQgfVwiXG4gICAgdi1tb2RlbD1cImRhdGVWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWRhdGVcbiAgICBjb21wb25lbnQoXG4gICAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICAgIDpkYXRlRm9ybWF0PVwieyAuLi5hcGkuZm9ybWF0cy5kYXRlLCAuLi5kYXRlRm9ybWF0IH1cIlxuICAgICAgdi1tb2RlbD1cImRhdGVWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIsIERhdGVUaW1lUGlja2VyIH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCB7IGlzRGF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnZGF0ZScsICdkYXRldGltZScsICd0aW1lJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGNvbXBvbmVudHM6IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSxcbiAgLy8gVE9ETzogVGhpcyBpcyBvbmx5IGhlcmUgc28gd2UgZ2V0IHBsYWNlaG9sZGVyIGFkZGVkLiBDb21lIHVwIHdpdGggYSBiZXR0ZXJcbiAgLy8gd2F5IHRvIHN1cHBvcnQgYXR0cmlidXRlcyBwZXIgY29tcG9uZW50IChhIGxpc3Qgb2YgYWN0dWFsbHkgc3VwcG9ydGVkXG4gIC8vIGF0dHJpYnV0ZXMpXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBkYXRlVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkYXRlRm9ybWF0OiBnZXRTY2hlbWFBY2Nlc3NvcignZGF0ZUZvcm1hdCcsIHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb21wb25lbnQodHlwZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0ZTogJ2RhdGUtcGlja2VyJyxcbiAgICAgICAgdGltZTogJ3RpbWUtcGlja2VyJyxcbiAgICAgICAgZGF0ZXRpbWU6ICdkYXRlLXRpbWUtcGlja2VyJ1xuICAgICAgfVt0eXBlXVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgIHJldHVybiBpc0RhdGUodmFsdWUpID8gdmFsdWUudG9JU09TdHJpbmcoKSA6IHZhbHVlXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IsIGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQge1xuICBwcm9jZXNzUm91dGVTY2hlbWEsIHByb2Nlc3NGb3JtcywgZ2V0TmFtZWRTY2hlbWFzLCBnZXRCdXR0b25TY2hlbWFzLFxuICBoYXNGb3JtU2NoZW1hLCBnZXRGb3JtU2NoZW1hcywgZ2V0Vmlld1NjaGVtYSxcbiAgaGFzTGFiZWxzLCBpc0NvbXBhY3QsIGlzSW5saW5lZCxcbiAgaXNPYmplY3RTb3VyY2UsIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNTdHJpbmcsIGlzQXJyYXksIGlzTnVtYmVyLCBlcXVhbHMsXG4gIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1Jlc291cmNlTWl4aW4sIFNjaGVtYVBhcmVudE1peGluXSxcblxuICBkZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gICAgcmV0dXJuIGlzTGlzdFNvdXJjZShzY2hlbWEpID8gW10gOiBudWxsXG4gIH0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cmFwcGVkUHJpbWl0aXZlczogbnVsbCxcbiAgICAgIHVud3JhcHBpbmdQcmltaXRpdmVzOiBmYWxzZSxcbiAgICAgIGlnbm9yZVJvdXRlQ2hhbmdlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGlzT2JqZWN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgaXNMaXN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzTGlzdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZhbHVlXG4gICAgfSxcblxuICAgIGlzUmVhZHkoKSB7XG4gICAgICAvLyBMaXN0cyB0aGF0IGhhdmUgbm8gZGF0YSBhbmQgbm8gYXNzb2NpYXRlZCByZXNvdXJjZSBzaG91bGQgc3RpbGwgcmVuZGVyLFxuICAgICAgLy8gYXMgdGhleSBtYXkgYmUgZ2V0dGluZyB0aGVpciBkYXRhIGVsc2V3aGVyZSwgZS5nLiBgY29tcHV0ZSgpYC5cbiAgICAgIHJldHVybiB0aGlzLmhhc0RhdGEgfHwgIXRoaXMucHJvdmlkZXNEYXRhXG4gICAgfSxcblxuICAgIGlzSW5WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3Q29tcG9uZW50XG4gICAgfSxcblxuICAgIHdyYXBQcmltaXRpdmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLndyYXBQcmltaXRpdmVzXG4gICAgfSxcblxuICAgIGxpc3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy52YWx1ZVxuICAgICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICAgIC8vIENvbnZlcnQgdG8gbGlzdCBhcnJheS5cbiAgICAgICAgICBkYXRhID0gZGF0YSAhPSBudWxsID8gW2RhdGFdIDogW11cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIGdldHMgaW5oZXJpdGVkIGZyb20gcGFyZW50LCB1bndyYXBwaW5nIGlzIG5vdCBoYXBwZW5pbmdcbiAgICAgICAgICAvLyBhdCB0aGUgcm9vdCBpbiBgc2V0RGF0YSgpYCwgYnV0IGhlcmUgaW5zdGVhZC5cbiAgICAgICAgICBkYXRhID0gdGhpcy51bndyYXBMaXN0RGF0YShkYXRhKSB8fCBkYXRhXG4gICAgICAgIH1cbiAgICAgICAgZGF0YSA9IGRhdGEgfHwgW11cbiAgICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcyB9ID0gdGhpc1xuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICBpZiAodGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcykge1xuICAgICAgICAgICAgLy8gV2UncmUgZG9uZSB1bndyYXBwaW5nIG9uY2UgYGxpc3REYXRhYCBpcyByZWV2YWx1YXRlZCwgc28gc2V0XG4gICAgICAgICAgICAvLyB0aGlzIHRvIGBmYWxzZWAgYWdhaW4uIFNlZSBgd3JhcHBlZFByaW1pdGl2ZXNgIHdhdGNoZXIgYWJvdmUuXG4gICAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ29udmVydCBkYXRhIHRvIGEgbGlzdCBvZiB3cmFwcGVkIHByaW1pdGl2ZXMsIGFuZCByZXR1cm4gaXQuXG4gICAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YS5tYXAodmFsdWUgPT4gKHtcbiAgICAgICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogdmFsdWVcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVkUHJpbWl0aXZlc1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICBpZiAodGhpcy53cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNPYmplY3RTb3VyY2VcbiAgICAgICAgICAgID8gKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwID8gZGF0YVswXSA6IG51bGwpXG4gICAgICAgICAgICA6IGRhdGFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvYmplY3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIEFsd2F5cyBnbyB0aHJvdWdoIGBsaXN0RGF0YWAgaW50ZXJuYWxseSwgd2hpY2ggZG9lcyBhbGwgdGhlXG4gICAgICAgIC8vIHByb2Nlc3Npbmcgb2YgYHdyYXBQcmltaXRpdmVzYCwgZXRjLlxuICAgICAgICByZXR1cm4gdGhpcy5saXN0RGF0YVswXSB8fCBudWxsXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICB0aGlzLmxpc3REYXRhID0gZGF0YSA/IFtkYXRhXSA6IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNvdXJjZVNjaGVtYSgpIHtcbiAgICAgIC8vIFRoZSBzb3VyY2VTY2hlbWEgb2YgYSBsaXN0IGlzIHRoZSBsaXN0J3Mgc2NoZW1hIGl0c2VsZi5cbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgLy8gVGhpcyBpcyB1c2VkIGluIFR5cGVMaXN0IGZvciBEaXRvRm9ybUNob29zZXIuXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgodGhpcy5zY2hlbWEucGF0aClcbiAgICB9LFxuXG4gICAgZGVmYXVsdFF1ZXJ5KCkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0T3JkZXI6IG9yZGVyIH0gPSB0aGlzXG4gICAgICByZXR1cm4gb3JkZXIgPyB7IG9yZGVyIH0gOiB7fVxuICAgIH0sXG5cbiAgICBxdWVyeTogZ2V0U3RvcmVBY2Nlc3NvcigncXVlcnknLCB7XG4gICAgICBnZXQocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmRlZmF1bHRRdWVyeSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBzZXQocXVlcnkpIHtcbiAgICAgICAgLy8gQWx3YXlzIGtlZXAgdGhlIGRpc3BsYXllZCBxdWVyeSBwYXJhbWV0ZXJzIGluIHN5bmMgd2l0aCB0aGUgc3RvcmVkXG4gICAgICAgIC8vIG9uZXMuIFVzZSBzY29wZSBhbmQgcGFnZSBmcm9tIHRoZSBsaXN0IHNjaGVtYSBhcyBkZWZhdWx0cywgYnV0IGFsbG93XG4gICAgICAgIC8vIHRoZSByb3V0ZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIG92ZXJyaWRlIHRoZW0uXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBzY29wZSA9IHRoaXMuZGVmYXVsdFNjb3BlPy5uYW1lLFxuICAgICAgICAgIHBhZ2UgPSB0aGlzLnNjaGVtYS5wYWdlXG4gICAgICAgIH0gPSB0aGlzLnF1ZXJ5XG4gICAgICAgIC8vIFByZXNlcnZlIC8gbWVyZ2UgY3VycmVudGx5IHN0b3JlZCB2YWx1ZXMuXG4gICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgLi4uKHNjb3BlICE9IG51bGwgJiYgeyBzY29wZSB9KSxcbiAgICAgICAgICAuLi4ocGFnZSAhPSBudWxsICYmIHsgcGFnZSB9KSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICAgIGlmICghZXF1YWxzKHF1ZXJ5LCB0aGlzLiRyb3V0ZS5xdWVyeSkpIHtcbiAgICAgICAgICAvLyBUZWxsIHRoZSBgJHJvdXRlYCB3YXRjaGVyIHRvIGlnbm9yZSB0aGUgY2hhbmdlZCB0cmlnZ2VyZWQgaGVyZTpcbiAgICAgICAgICB0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgcXVlcnksIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2ggfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVlcnkgLy8gTGV0IGdldFN0b3JlQWNjZXNzb3IoKSBkbyB0aGUgYWN0dWFsIHNldHRpbmdcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHRvdGFsOiBnZXRTdG9yZUFjY2Vzc29yKCd0b3RhbCcpLFxuXG4gICAgY29sdW1ucygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuY29sdW1ucylcbiAgICB9LFxuXG4gICAgc2NvcGVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5zY29wZXMpXG4gICAgfSxcblxuICAgIGRlZmF1bHRTY29wZSgpIHtcbiAgICAgIGlmICh0aGlzLnNjb3Blcykge1xuICAgICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICAgIGZvciAoY29uc3Qgc2NvcGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnNjb3BlcykpIHtcbiAgICAgICAgICBpZiAoc2NvcGUuZGVmYXVsdFNjb3BlKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NvcGVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgZmlyc3QgPSBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVmYXVsdE9yZGVyKCkge1xuICAgICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuY29sdW1ucykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRTb3J0IH0gPSBjb2x1bW5cbiAgICAgICAgICBpZiAoZGVmYXVsdFNvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGlzU3RyaW5nKGRlZmF1bHRTb3J0KSA/IGRlZmF1bHRTb3J0IDogJ2FzYydcbiAgICAgICAgICAgIHJldHVybiBgJHtjb2x1bW4ubmFtZX0gJHtkaXJlY3Rpb259YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZ2V0Rm9ybVNjaGVtYXModGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dCkpXG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGxpbmtlZCB2aWV3IHNjaGVtYSBpZiB0aGlzIHNvdXJjZSBlZGl0cyBpdCBpdHMgaXRlbXMgdGhyb3VnaFxuICAgIC8vIGEgbGlua2VkIHZpZXcuXG4gICAgdmlldygpIHtcbiAgICAgIHJldHVybiBnZXRWaWV3U2NoZW1hKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGxpbmtzVG9WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3Jtcy5zb21lKGhhc0xhYmVscylcbiAgICB9LFxuXG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybXMuZXZlcnkoaXNDb21wYWN0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BhZ2luYXRlJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICByZW5kZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdyZW5kZXInLCB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgICAgID8gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAhdGhpcy52YWx1ZVxuICAgICAgICAgICAgOiB0cnVlXG4gICAgICAgICAgOiBmYWxzZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgIXRoaXMuaXNJbmxpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlICYmIHRoaXMubGlzdERhdGEubGVuZ3RoID4gMSAmJiBkcmFnZ2FibGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbCwgLy8gc28gdGhhdCBgPz9gIGJlbG93IGNhbiBkbyBpdHMgdGhpbmc6XG4gICAgICBnZXQoY29sbGFwc2libGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbmxpbmVkICYmICEhKGNvbGxhcHNpYmxlID8/IHRoaXMuY29sbGFwc2VkICE9PSBudWxsKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2VkOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2VkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodGhpcy5pZ25vcmVSb3V0ZUNoYW5nZSkge1xuICAgICAgICB0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoZnJvbS5wYXRoID09PSB0by5wYXRoICYmIGZyb20uaGFzaCA9PT0gdG8uaGFzaCkge1xuICAgICAgICAvLyBQYXRocyBhbmQgaGFzaGVzIHJlbWFpbiB0aGUgc2FtZSwgc28gb25seSBxdWVyaWVzIGhhdmUgY2hhbmdlZC5cbiAgICAgICAgLy8gVXBkYXRlIGZpbHRlciBhbmQgcmVsb2FkIGRhdGEgd2l0aG91dCBjbGVhcmluZy5cbiAgICAgICAgdGhpcy5xdWVyeSA9IHRvLnF1ZXJ5XG4gICAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHdyYXBwZWRQcmltaXRpdmVzOiB7XG4gICAgICBkZWVwOiB0cnVlLFxuICAgICAgaGFuZGxlcihuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcyB9ID0gdGhpc1xuICAgICAgICAvLyBTa2lwIHRoZSBpbml0aWFsIHNldHRpbmcgb2Ygd3JhcHBlZFByaW1pdGl2ZXMgYXJyYXlcbiAgICAgICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIG9sZFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2hlbmV2ZXIgdGhlIHdyYXBwZWRQcmltaXRpdmVzIGNoYW5nZSwgbWFwIHRoZWlyIHZhbHVlcyBiYWNrIHRvXG4gICAgICAgICAgLy8gdGhlIGFycmF5IG9mIHByaW1pdGl2ZXMsIGluIGEgcHJpbWl0aXZlIHdheSA6KVxuICAgICAgICAgIC8vIEJ1dCBzZXQgYHVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZWAsIHNvIHRoZSBgbGlzdERhdGFgIGNvbXB1dGVkXG4gICAgICAgICAgLy8gcHJvcGVydHkga25vd3MgYWJvdXQgaXQsIHdoaWNoIHNldHMgaXQgdG8gYGZhbHNlYCBhZ2Fpbi5cbiAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZVxuICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZS5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIHRoaXMucXVlcnkgPSB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnRvdGFsID0gMFxuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBXaGVuIG5ldyBkYXRhIGlzIGxvYWRlZCwgd2UgY2FuIHN0b3JlIGl0IHJpZ2h0IGJhY2sgaW4gdGhlIGRhdGEgb2YgdGhlXG4gICAgICAvLyB2aWV3IG9yIGZvcm0gdGhhdCBjcmVhdGVkIHRoaXMgbGlzdCBjb21wb25lbnQuXG4gICAgICAvLyBTdXBwb3J0IHR3byBmb3JtYXRzIGZvciBsaXN0IGRhdGE6XG4gICAgICAvLyAtIEFycmF5OiBgWy4uLl1gXG4gICAgICAvLyAtIE9iamVjdDogYHsgcmVzdWx0czogWy4uLl0sIHRvdGFsIH1gLCBzZWUgYHVud3JhcExpc3REYXRhKClgXG4gICAgICBpZiAoXG4gICAgICAgICFkYXRhIHx8XG4gICAgICAgIHRoaXMuaXNMaXN0U291cmNlICYmIGlzQXJyYXkoZGF0YSkgfHxcbiAgICAgICAgdGhpcy5pc09iamVjdFNvdXJjZSAmJiBpc09iamVjdChkYXRhKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkpIHtcbiAgICAgICAgLy8gVGhlIGZvcm1hdCBkaWRuJ3QgbWF0Y2gsIHNlZSBpZiB3ZSByZWNlaXZlZCBhIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIG9iamVjdCwgaW4gd2hpY2ggY2FzZSBgdGhpcy52YWx1ZWAgd2FzIGFscmVhZHkgc2V0IGJ5XG4gICAgICAgIC8vIGB1bndyYXBMaXN0RGF0YSgpYCBhbmQgd2UncmUgZG9uZSBub3cuXG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRhdGEpICYmIHRoaXMuaXNJblZpZXcpIHtcbiAgICAgICAgLy8gVGhlIGNvbnRyb2xsZXIgaXMgc2VuZGluZyBkYXRhIGZvciBhIGZ1bGwgbXVsdGktY29tcG9uZW50IHZpZXcsXG4gICAgICAgIC8vIGluY2x1ZGluZyB0aGUgbmVzdGVkIGxpc3QgZGF0YS5cbiAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldERhdGEoZGF0YSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdW53cmFwTGlzdERhdGEoZGF0YSkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJlxuICAgICAgICBpc09iamVjdChkYXRhKSAmJlxuICAgICAgICBpc051bWJlcihkYXRhLnRvdGFsKSAmJlxuICAgICAgICBpc0FycmF5KGRhdGEucmVzdWx0cylcbiAgICAgICkge1xuICAgICAgICAvLyBJZiBAZGl0b2pzL3NlcnZlciBzZW5kcyBkYXRhIGluIHRoZSBmb3JtIG9mIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIHJlcGxhY2UgdGhlIHZhbHVlIHdpdGggcmVzdWx0LCBidXQgcmVtZW1iZXIgdGhlIHRvdGFsIGluIHRoZSBzdG9yZS5cbiAgICAgICAgdGhpcy50b3RhbCA9IGRhdGEudG90YWxcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGEucmVzdWx0c1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKHNjaGVtYSwgdHlwZSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpXG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBpdGVtXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxpc3REYXRhLnB1c2goaXRlbSlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMub3BlblNjaGVtYUNvbXBvbmVudCgtMSkpXG4gICAgICB9XG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIHJldHVybiBpdGVtXG4gICAgfSxcblxuICAgIHJlbW92ZUl0ZW0oaXRlbSkge1xuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gbnVsbFxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgICAgY29uc3QgaW5kZXggPSBsaXN0RGF0YSAmJiBsaXN0RGF0YS5pbmRleE9mKGl0ZW0pXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgbGlzdERhdGEuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IGxhYmVsID0gaXRlbSAmJiB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNjaGVtYSwgaXRlbSwge1xuICAgICAgICBpbmRleCxcbiAgICAgICAgZXh0ZW5kZWQ6IHRydWVcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IG5vdGlmeSA9ICgpID0+IHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogdGhpcy5pc1RyYW5zaWVudCA/ICdpbmZvJyA6ICdzdWNjZXNzJyxcbiAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgIHRleHQ6IFtcbiAgICAgICAgICBgJHtsYWJlbH0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gLFxuICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICBdXG4gICAgICB9KVxuXG4gICAgICBpZiAoaXRlbSAmJiB3aW5kb3cuY29uZmlybShcbiAgICAgICAgYERvIHlvdSByZWFsbHkgd2FudCB0byAke3RoaXMudmVyYnMuZGVsZXRlfSAke2xhYmVsfT9gKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0pXG4gICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpdGVtSWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSlcbiAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IGdldE1lbWJlclJlc291cmNlKGl0ZW1JZCwgdGhpcy5yZXNvdXJjZSlcbiAgICAgICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2RlbGV0ZScsIHJlc291cmNlIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0pXG4gICAgICAgICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnJlbG9hZERhdGEoKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBzY2hlbWFDb21wb25lbnRzXG4gICAgICByZXR1cm4gc2NoZW1hQ29tcG9uZW50c1soKGluZGV4ICUgbGVuZ3RoKSArIGxlbmd0aCkgJSBsZW5ndGhdXG4gICAgfSxcblxuICAgIG9wZW5TY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KVxuICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBuYXZpZ2F0ZVRvQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGRhdGFQYXRoLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgICA/IHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgICA/IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGguc2xpY2UodGhpcy5kYXRhUGF0aC5sZW5ndGggKyAxKSlbMF0gPz8gbnVsbFxuICAgICAgICAgICAgOiAwXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChpbmRleCAhPT0gbnVsbCAmJiBpc051bWJlcigraW5kZXgpKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoK2luZGV4KVxuICAgICAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb3BlbmVkIH0gPSBzY2hlbWFDb21wb25lbnRcbiAgICAgICAgICAgIGlmICghb3BlbmVkKSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50cy5sZW5ndGggPiAwICYmIChvbkNvbXBsZXRlPy4oY29tcG9uZW50cykgPz8gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSBvcGVuZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSlcbiAgICB9LFxuXG4gICAgbmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsT25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQsIHdoaWNoIHdpbGwgYmUgdGhlIGNvbXBvbmVudCB0aGF0XG4gICAgICAgICAgLy8gd2UganVzdCBuYXZpZ2F0ZWQgdG8sIGFuZCBwYXNzIGl0IG9uIHRvIGBvbkNvbXBsZXRlKClgXG4gICAgICAgICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgICAgICBjb25zdCByb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50c1tyb3V0ZUNvbXBvbmVudHMubGVuZ3RoIC0gMV1cbiAgICAgICAgICByZXNvbHZlKG9uQ29tcGxldGU/Lihbcm91dGVDb21wb25lbnRdKSA/PyB0cnVlKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIHJvdXRlIHRoYXQgY2FuIHNlcnZlIHBhcnQgb2YgdGhlIGdpdmVuIGRhdGFQYXRoLFxuICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMucm91dGVDb21wb25lbnQuZ2V0Q2hpbGRQYXRoKFxuICAgICAgICAgICAgdGhpcy5hcGkubm9ybWFsaXplUGF0aChub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aFBhcnRzKSlcbiAgICAgICAgICApXG4gICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGFjdHVhbGx5IGlzIGEgcm91dGUgZm9yIHRoaXMgc3ViLWNvbXBvbmVudDpcbiAgICAgICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlci5tYXRjaChwYXRoKVxuICAgICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuJHJvdXRlLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgdGhlcmUsIHNvIGp1c3QgY2FsbCBgb25Db21wbGV0ZSgpYDpcbiAgICAgICAgICAgICAgY2FsbE9uQ29tcGxldGUoKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBjb21wb25lbnQncyBwYXRoLCB0aGVuIGNhbGwgYG9uQ29tcGxldGUoKWBfOlxuICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaChcbiAgICAgICAgICAgICAgICB7IHBhdGggfSxcbiAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQgdG8gYmUgbW91bnRlZCBpbiB0aGUgbmV4dFxuICAgICAgICAgICAgICAgIC8vIHRpY2sgYmVmb3JlIGNhbGxpbmcgYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljayhjYWxsT25Db21wbGV0ZSlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICB9KVxuICAgIH1cbiAgfSwgLy8gZW5kIG9mIGBtZXRob2RzYFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUpXG4gICAgY29uc3QgaW5saW5lZCA9IGlzSW5saW5lZChzY2hlbWEpXG4gICAgaWYgKGlubGluZWQgJiYgc2NoZW1hLnJlc291cmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdMaXN0cyB3aXRoIG5lc3RlZCBmb3JtcyBjYW5ub3QgbG9hZCBkYXRhIGZyb20gdGhlaXIgb3duIHJlc291cmNlcydcbiAgICAgIClcbiAgICB9XG4gICAgLy8gVXNlIGRpZmZlcmVudGx5IG5hbWVkIHVybCBwYXJhbWV0ZXJzIG9uIGVhY2ggbmVzdGVkIGxldmVsIGZvciBpZCBhc1xuICAgIC8vIG90aGVyd2lzZSB0aGV5IHdvdWxkIGNsYXNoIGFuZCBvdmVycmlkZSBlYWNoIG90aGVyIGluc2lkZSAkcm91dGUucGFyYW1zXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgIGNvbnN0IHBhcmFtID0gYGlkJHtsZXZlbCArIDF9YFxuICAgIGNvbnN0IG1ldGEgPSB7XG4gICAgICBhcGksXG4gICAgICBzY2hlbWFcbiAgICB9XG4gICAgY29uc3QgZm9ybU1ldGEgPSB7XG4gICAgICAuLi5tZXRhLFxuICAgICAgLy8gV2hlbiBjaGlsZHJlbiBhcmUgZmxhdHRlbmVkIChlLmcuIHRyZWUtbGlzdHMpLCBpbmNsdWRlIHRoZSBgZmxhdHRlbmBcbiAgICAgIC8vIHNldHRpbmcgYWxzbywgZm9yIGZsYXR0ZW5pbmcgYmVsb3cuXG4gICAgICBmbGF0dGVuLFxuICAgICAgbmVzdGVkLFxuICAgICAgcGFyYW1cbiAgICB9XG4gICAgY29uc3QgY2hpbGRSb3V0ZXMgPSBhd2FpdCBwcm9jZXNzRm9ybXMoYXBpLCBzY2hlbWEsIGxldmVsKVxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICBhd2FpdCBwcm9jZXNzKGNoaWxkUm91dGVzLCBsZXZlbCArIDEpXG4gICAgfVxuICAgIC8vIElubGluZWQgZm9ybXMgZG9uJ3QgbmVlZCB0byBhY3R1YWxseSBhZGQgcm91dGVzLlxuICAgIGlmIChoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgIWlubGluZWQpIHtcbiAgICAgIGNvbnN0IGdldFBhdGhXaXRoUGFyYW0gPSAocGF0aCwgcGFyYW0pID0+IHBhcmFtXG4gICAgICAgID8gcGF0aFxuICAgICAgICAgID8gYCR7cGF0aH0vOiR7cGFyYW19YFxuICAgICAgICAgIDogYDoke3BhcmFtfWBcbiAgICAgICAgOiBwYXRoXG5cbiAgICAgIC8vIExpc3RzIGluIHNpbmdsZS1jb21wb25lbnQtdmlld3MgKGxldmVsID09PSAwKSB1c2UgdGhlaXIgdmlldydzIHBhdGgsXG4gICAgICAvLyB3aGlsZSBhbGwgb3RoZXJzIG5lZWQgdGhlaXIgcGF0aCBwcmVmaXhlZCB3aXRoIHRoZSBwYXJlbnQncyBwYXRoOlxuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGxldmVsID09PSAwID8gJycgOiBzY2hlbWEucGF0aFxuICAgICAgY29uc3QgZm9ybVJvdXRlID0ge1xuICAgICAgICAvLyBPYmplY3Qgc291cmNlcyBkb24ndCBuZWVkIGlkIHBhcmFtcyBpbiB0aGVpciBmb3JtIHBhdGhzLCBhcyB0aGV5XG4gICAgICAgIC8vIGRpcmVjdGx5IGVkaXQgb25lIG9iamVjdC5cbiAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShzb3VyY2VQYXRoLCBpc0xpc3RTb3VyY2Uoc2NoZW1hKSAmJiBwYXJhbSksXG4gICAgICAgIGNvbXBvbmVudDogRGl0b0NvbXBvbmVudC5jb21wb25lbnQoXG4gICAgICAgICAgbmVzdGVkID8gJ2RpdG8tZm9ybS1uZXN0ZWQnIDogJ2RpdG8tZm9ybSdcbiAgICAgICAgKSxcbiAgICAgICAgbWV0YTogZm9ybU1ldGFcbiAgICAgIH1cbiAgICAgIGlmIChpc09iamVjdFNvdXJjZShzY2hlbWEpKSB7XG4gICAgICAgIC8vIEFsc28gYWRkIGEgcGFyYW0gcm91dGUsIHNpbXBseSB0byBoYW5kbGUgJy9jcmVhdGUnIGxpbmtzIHRoZSBzYW1lXG4gICAgICAgIC8vIHdheSB0aGF0IGxpc3RzIGRvLCB3aGVyZSBpdCBvdmVybGFwcyB3aXRoIDppZCBmb3IgaXRlbSBpZHMuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICAuLi5mb3JtUm91dGUsXG4gICAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShzb3VyY2VQYXRoLCBwYXJhbSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzb3VyY2VQYXRoKSB7XG4gICAgICAgIC8vIEp1c3QgcmVkaXJlY3QgYmFjayB0byB0aGUgcGFyZW50IHdoZW4gYSBuZXN0ZWQgc291cmNlIHJvdXRlIGlzIGhpdC5cbiAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgIHBhdGg6IHNvdXJjZVBhdGgsXG4gICAgICAgICAgcmVkaXJlY3Q6ICcuJyxcbiAgICAgICAgICBtZXRhXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICAvLyBQYXJ0aXRpb24gY2hpbGRSb3V0ZXMgaW50byB0aG9zZSB0aGF0IG5lZWQgZmxhdHRlbmluZyAoZS5nLiB0cmVlLWxpc3RzKVxuICAgICAgLy8gYW5kIHRob3NlIHRoYXQgZG9uJ3QsIGFuZCBwcm9jZXNzIGVhY2ggZ3JvdXAgc2VwYXJhdGVseSBhZnRlci5cbiAgICAgIGNvbnN0IFtmbGF0Um91dGVzLCBzdWJSb3V0ZXNdID0gY2hpbGRSb3V0ZXMucmVkdWNlKFxuICAgICAgICAocmVzLCByb3V0ZSkgPT4ge1xuICAgICAgICAgIHJlc1tyb3V0ZS5tZXRhLmZsYXR0ZW4gPyAwIDogMV0ucHVzaChyb3V0ZSlcbiAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgIH0sXG4gICAgICAgIFtbXSwgW11dXG4gICAgICApXG4gICAgICBpZiAoc3ViUm91dGVzLmxlbmd0aCkge1xuICAgICAgICBmb3JtUm91dGUuY2hpbGRyZW4gPSBzdWJSb3V0ZXNcbiAgICAgIH1cbiAgICAgIHJvdXRlcy5wdXNoKGZvcm1Sb3V0ZSlcbiAgICAgIC8vIEFkZCB0aGUgcHJlZml4ZWQgZm9ybVJvdXRlcyB3aXRoIHRoZWlyIGNoaWxkcmVuIGZvciBuZXN0ZWQgbGlzdHMuXG4gICAgICBpZiAoZmxhdFJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZFJvdXRlIG9mIGZsYXRSb3V0ZXMpIHtcbiAgICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgICAuLi4oY2hpbGRSb3V0ZS5yZWRpcmVjdCA/IGNoaWxkUm91dGUgOiBmb3JtUm91dGUpLFxuICAgICAgICAgICAgcGF0aDogYCR7Zm9ybVJvdXRlLnBhdGh9LyR7Y2hpbGRSb3V0ZS5wYXRofWAsXG4gICAgICAgICAgICBtZXRhOiB7XG4gICAgICAgICAgICAgIC4uLmNoaWxkUm91dGUubWV0YSxcbiAgICAgICAgICAgICAgZmxhdHRlblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGdyYXBoLmFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJDb21wb25lbnRzID0ge1xuICB0ZXh0KGZpbHRlcikge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnY29udGFpbnMnLFxuICAgICAgICB2YWx1ZTogJ2NvbnRhaW5zJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlcXVhbHMnLFxuICAgICAgICB2YWx1ZTogJ2VxdWFscydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnc3RhcnRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ3N0YXJ0cy13aXRoJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlbmRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ2VuZHMtd2l0aCdcbiAgICAgIH1cbiAgICBdXG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3JzXG4gICAgICAgID8ge1xuICAgICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgIG9wdGlvbnM6XG4gICAgICAgICAgICBpc0FycmF5KGZpbHRlci5vcGVyYXRvcnMpXG4gICAgICAgICAgICAgID8gb3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgb3B0aW9uID0+IGZpbHRlci5vcGVyYXRvcnMuaW5jbHVkZXMob3B0aW9uLnZhbHVlKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogb3B0aW9ucyxcbiAgICAgICAgICB3aWR0aDogJzQwJSdcbiAgICAgICAgfVxuICAgICAgICA6IG51bGwsXG4gICAgICB0ZXh0OiB7XG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgd2lkdGg6IGZpbHRlci5vcGVyYXRvcnMgPyAnNjAlJyA6ICdmaWxsJ1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAnZGF0ZS1yYW5nZScoKSB7XG4gICAgLy8gVXNlIHNob3J0ZXIgZGF0ZSBmb3JtYXQgaW4gZGF0ZS1yYW5nZSBmaWx0ZXJzOlxuICAgIGNvbnN0IGRhdGVGb3JtYXQgPSB7XG4gICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXG4gICAgICB5ZWFyOiAnbnVtZXJpYydcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGZyb206IHtcbiAgICAgICAgdHlwZTogJ2RhdGV0aW1lJyxcbiAgICAgICAgd2lkdGg6ICc1MCUnLFxuICAgICAgICBkYXRlRm9ybWF0XG4gICAgICB9LFxuICAgICAgdG86IHtcbiAgICAgICAgdHlwZTogJ2RhdGV0aW1lJyxcbiAgICAgICAgd2lkdGg6ICc1MCUnLFxuICAgICAgICBkYXRlRm9ybWF0XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJzUGFuZWwoZmlsdGVycywgZGF0YVBhdGgsIHByb3h5KSB7XG4gIGNvbnN0IHBhbmVsID0ge1xuICAgIGxhYmVsOiAnRmlsdGVycycsXG4gICAgbmFtZTogJyRmaWx0ZXJzJyxcbiAgICB0YXJnZXQ6IGRhdGFQYXRoLFxuICAgIC8vIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIC8vIE5PVEU6IE9uIHBhbmVscywgdGhlIGRhdGEoKSBjYWxsYmFjayBkb2VzIHNvbWV0aGluZyBlbHNlIHRoYW4gb24gbm9ybWFsXG4gICAgLy8gc2NoZW1hOiBJdCBwcm9kdWNlcyB0aGUgYGRhdGFgIHByb3BlcnR5IHRvIGJlIHBhc3NlZCB0byB0aGUgcGFuZWwnc1xuICAgIC8vIHNjaGVtYSwgbm90IHRoZSBkYXRhIHRvIGJlIHVzZWQgZm9yIHRoZSBwYW5lbCBjb21wb25lbnQgZGlyZWN0bHkuXG4gICAgZGF0YSgpIHtcbiAgICAgIHJldHVybiBwYXJzZUZpbHRlcnNEYXRhKFxuICAgICAgICBwYW5lbCxcbiAgICAgICAgcHJveHkucXVlcnlcbiAgICAgIClcbiAgICB9LFxuICAgIGNvbXBvbmVudHM6IGdldEZpbHRlcnNDb21wb25lbnRzKGZpbHRlcnMpLFxuICAgIGJ1dHRvbnM6IHtcbiAgICAgIGNsZWFyOiB7XG4gICAgICAgIHRleHQ6ICdDbGVhcicsXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5yZXNldERhdGEoKVxuICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50LmFwcGx5RmlsdGVycygpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBmaWx0ZXI6IHtcbiAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgIHRleHQ6ICdGaWx0ZXInLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBjbGljayh7IHNjaGVtYUNvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICBzY2hlbWFDb21wb25lbnQuYXBwbHlGaWx0ZXJzKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGFwcGx5RmlsdGVycygpIHtcbiAgICAgICAgcHJveHkucXVlcnkgPSB7XG4gICAgICAgICAgLi4ucHJveHkucXVlcnksXG4gICAgICAgICAgZmlsdGVyOiBmb3JtYXRGaWx0ZXJzRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy5kYXRhKSxcbiAgICAgICAgICAvLyBDbGVhciBwYWdpbmF0aW9uIHdoZW4gYXBwbHlpbmcgb3IgY2xlYXJpbmcgZmlsdGVyczpcbiAgICAgICAgICBwYWdlOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxcbn1cblxuZnVuY3Rpb24gZ2V0RmlsdGVyc0NvbXBvbmVudHMoZmlsdGVycykge1xuICBjb25zdCBjb21wcyA9IHt9XG4gIGZvciAoY29uc3QgZmlsdGVyIG9mIE9iamVjdC52YWx1ZXMoZmlsdGVycyB8fCB7fSkpIHtcbiAgICAvLyBTdXBwb3J0IGJvdGggY3VzdG9tIGZvcm1zIGFuZCBkZWZhdWx0IGZpbHRlciBjb21wb25lbnRzLCB0aHJvdWdoIHRoZVxuICAgIC8vIGBmaWx0ZXJDb21wb25lbnRzYCByZWdpc3RyeS4gRXZlbiBmb3IgZGVmYXVsdCBmaWx0ZXJzLCBzdGlsbCB1c2UgdGhlXG4gICAgLy8gcHJvcGVydGllcyBpbiBgZmlsdGVyYCBhcyB0aGUgYmFzZSBmb3IgYGZvcm1gLCBzbyB0aGluZ3MgbGlrZSBgbGFiZWxgXG4gICAgLy8gY2FuIGJlIGNoYW5nZWQgb24gdGhlIHJlc3VsdGluZyBmb3JtLlxuICAgIGNvbnN0IHsgZmlsdGVyOiB0eXBlLCAuLi5mb3JtIH0gPSBmaWx0ZXJcbiAgICBjb25zdCBjb21wb25lbnRzID0gdHlwZVxuICAgICAgPyBmaWx0ZXJDb21wb25lbnRzW3R5cGVdPy4oZmlsdGVyKVxuICAgICAgOiBmaWx0ZXIuY29tcG9uZW50c1xuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICBmb3JtLmNvbXBvbmVudHMgPSB7fVxuICAgICAgLy8gQ29udmVydCBsYWJlbHMgdG8gcGxhY2Vob2xkZXJzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKGNvbXBvbmVudHMpKSB7XG4gICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IGNvbXBvbmVudC5sYWJlbCB8fCBsYWJlbGl6ZShjb21wb25lbnQubmFtZSB8fCBrZXkpXG4gICAgICAgICAgZm9ybS5jb21wb25lbnRzW2tleV0gPSB7XG4gICAgICAgICAgICAuLi5jb21wb25lbnQsXG4gICAgICAgICAgICBsYWJlbDogZmFsc2UsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogbGFiZWxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbXBzW2ZpbHRlci5uYW1lXSA9IHtcbiAgICAgICAgbGFiZWw6IGZvcm0ubGFiZWwsXG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pLFxuICAgICAgICBmb3JtLFxuICAgICAgICBpbmxpbmVkOiB0cnVlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgZmlsdGVyICcke2ZpbHRlci5uYW1lfSc6IFVua25vd24gZmlsdGVyIHR5cGUgJyR7dHlwZX0nLmBcbiAgICAgIClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbXBzXG59XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKSB7XG4gIGNvbnN0IGNvbXBvbmVudCA9IHNjaGVtYS5jb21wb25lbnRzW25hbWVdXG4gIHJldHVybiBjb21wb25lbnQ/LmZvcm0/LmNvbXBvbmVudHNcbn1cblxuZnVuY3Rpb24gZm9ybWF0RmlsdGVyc0RhdGEoc2NoZW1hLCBkYXRhKSB7XG4gIGNvbnN0IGZpbHRlcnMgPSBbXVxuICBmb3IgKGNvbnN0IG5hbWUgaW4gZGF0YSkge1xuICAgIGNvbnN0IGVudHJ5ID0gZGF0YVtuYW1lXVxuICAgIGlmIChlbnRyeSkge1xuICAgICAgLy8gTWFwIGNvbXBvbmVudHMgc2VxdWVuY2UgdG8gYXJndW1lbnRzOlxuICAgICAgY29uc3QgYXJncyA9IE9iamVjdC5rZXlzKGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKSkubWFwKFxuICAgICAgICBrZXkgPT4gZW50cnlba2V5XSA/PyBudWxsXG4gICAgICApXG4gICAgICAvLyBPbmx5IGFwcGx5IGZpbHRlciBpZiB0aGVyZSBhcmUgc29tZSBhcmd1bWVudHMgdGhhdCBhcmVuJ3QgbnVsbDpcbiAgICAgIGlmIChhcmdzLnNvbWUodmFsdWUgPT4gdmFsdWUgIT09IG51bGwpKSB7XG4gICAgICAgIGZpbHRlcnMucHVzaChgJHtuYW1lfToke2FyZ3MubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKCcsJyl9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbHRlcnMubGVuZ3RoID8gZmlsdGVycyA6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBwYXJzZUZpbHRlcnNEYXRhKHNjaGVtYSwgcXVlcnkpIHtcbiAgY29uc3QgZmlsdGVycyA9IHt9XG4gIC8vIFNhbWUgYXMgQGRpdG9qcy9zZXJ2ZXIncyBRdWVyeVBhcmFtZXRlcnMuZmlsdGVyOiBUcmFuc2xhdGUgdGhlIHN0cmluZyBkYXRhXG4gIC8vIGZyb20gJHJvdXRlLnF1ZXJ5IGJhY2sgdG8gcGFyYW0gbGlzdHMgcGVyIGZpbHRlcjpcbiAgaWYgKHF1ZXJ5KSB7XG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgYXNBcnJheShxdWVyeS5maWx0ZXIpKSB7XG4gICAgICBjb25zdCBbLCBuYW1lLCBqc29uXSA9IGZpbHRlci5tYXRjaCgvXihcXHcrKTooLiopJC8pXG4gICAgICB0cnkge1xuICAgICAgICBmaWx0ZXJzW25hbWVdID0gYXNBcnJheShKU09OLnBhcnNlKGBbJHtqc29ufV1gKSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IGZpbHRlcnNEYXRhID0ge31cbiAgZm9yIChjb25zdCBuYW1lIGluIHNjaGVtYS5jb21wb25lbnRzKSB7XG4gICAgY29uc3QgZGF0YSA9IHt9XG4gICAgLy8gSWYgd2UgaGF2ZSByZXRyaWV2ZWQgcGFyYW1zIGZyb20gdGhlIHF1ZXJ5LCBmZXRjaCB0aGUgYXNzb2NpYXRlZFxuICAgIC8vIGZvcm0gY29tcG9uZW50cyBzbyB3ZSBjYW4gbWFwIHRoZSB2YWx1ZXMgYmFjayB0byBvYmplY3Qga2V5czpcbiAgICBjb25zdCBhcmdzID0gZmlsdGVyc1tuYW1lXVxuICAgIGlmIChhcmdzKSB7XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpXG4gICAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgICBsZXQgaW5kZXggPSAwXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBkYXRhW2tleV0gPSBhcmdzW2luZGV4KytdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZmlsdGVyc0RhdGFbbmFtZV0gPSBkYXRhXG4gIH1cbiAgcmV0dXJuIGZpbHRlcnNEYXRhXG59XG4iLCJcbi5kaXRvLWxpc3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuKVxuICAuZGl0by1uYXZpZ2F0aW9uXG4gICAgZGl0by1zY29wZXMoXG4gICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICAgIClcbiAgICAvLyBXaGVuIHRoZXJlJ3Mgb25seSBwYWdpbmF0aW9uIHdpdGhvdXQgc2NvcGVzLCB3ZSBuZWVkIGEgZ29vZCBvbCcgc3BhY2VyXG4gICAgLy8gZGl2LCBmb3IgdGhlIGxheW91dCBub3QgdG8gYnJlYWsuLi5cbiAgICAuZGl0by1zcGFjZXIoXG4gICAgICB2LWVsc2UtaWY9XCJwYWdpbmF0ZVwiXG4gICAgKVxuICAgIGRpdG8tcGFnaW5hdGlvbihcbiAgICAgIHYtaWY9XCJwYWdpbmF0ZVwiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6bGltaXQ9XCJwYWdpbmF0ZVwiXG4gICAgICA6dG90YWw9XCJ0b3RhbCB8fCAwXCJcbiAgICApXG4gIHRhYmxlLmRpdG8tdGFibGUoXG4gICAgOmNsYXNzPWB7XG4gICAgICAnZGl0by10YWJsZS1zZXBhcmF0b3JzJzogaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtbGFyZ2VyLXBhZGRpbmcnOiBoYXNFZGl0QnV0dG9ucyAmJiAhaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtYWx0ZXJuYXRlLWNvbG9ycyc6ICFpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1ldmVuLWNvdW50JzogaGFzRXZlbkNvdW50XG4gICAgfWBcbiAgKVxuICAgIGRpdG8tdGFibGUtaGVhZChcbiAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpjb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICA6aGFzRWRpdEJ1dHRvbnM9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0RGF0YSwgcGFnaW5hdGlvblJhbmdlKVwiXG4gICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCJpdGVtLCBpbmRleCBpbiBsaXN0RGF0YVwiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKHNjaGVtYSwgaXRlbSlcIlxuICAgICAgICA6aWQ9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiY29sdW1uc1wiKVxuICAgICAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihjb2x1bW4pXCJcbiAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJnZXRDZWxsQ2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICA6Y2VsbD1cImNvbHVtblwiXG4gICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgIClcbiAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCwgYXNPYmplY3Q6IHRydWUgfSlcIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb21wb25lbnQoXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dChpdGVtLCBpbmRleCkpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4IH0pXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICB2LWlmPVwiaGFzQ2VsbEVkaXRCdXR0b25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgIClcbiAgICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgaW5zaWRlIHRhYmxlIHdoZW4gbm90IGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgIHRmb290KFxuICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmICFzaW5nbGVcIlxuICAgIClcbiAgICAgIHRyXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgOmNvbHNwYW49XCJudW1Db2x1bW5zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIClcbiAgLy8gUmVuZGVyIGNyZWF0ZSBidXR0b25zIG91dHNpZGUgdGFibGUgd2hlbiBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiBzaW5nbGVcIlxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWxpc3QoXG4gICAgdi1pZj1cImlzUmVhZHlcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICAgIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4gIClcbiAgICAuZGl0by1uYXZpZ2F0aW9uXG4gICAgICBkaXRvLXNjb3BlcyhcbiAgICAgICAgdi1pZj1cInNjb3Blc1wiXG4gICAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgICApXG4gICAgICAvLyBXaGVuIHRoZXJlJ3Mgb25seSBwYWdpbmF0aW9uIHdpdGhvdXQgc2NvcGVzLCB3ZSBuZWVkIGEgZ29vZCBvbCcgc3BhY2VyXG4gICAgICAvLyBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgICAgLmRpdG8tc3BhY2VyKFxuICAgICAgICB2LWVsc2UtaWY9XCJwYWdpbmF0ZVwiXG4gICAgICApXG4gICAgICBkaXRvLXBhZ2luYXRpb24oXG4gICAgICAgIHYtaWY9XCJwYWdpbmF0ZVwiXG4gICAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgICAgOmxpbWl0PVwicGFnaW5hdGVcIlxuICAgICAgICA6dG90YWw9XCJ0b3RhbCB8fCAwXCJcbiAgICAgIClcbiAgICB0YWJsZS5kaXRvLXRhYmxlKFxuICAgICAgOmNsYXNzPWB7XG4gICAgICAgICdkaXRvLXRhYmxlLXNlcGFyYXRvcnMnOiBpc0lubGluZWQsXG4gICAgICAgICdkaXRvLXRhYmxlLWxhcmdlci1wYWRkaW5nJzogaGFzRWRpdEJ1dHRvbnMgJiYgIWlzSW5saW5lZCxcbiAgICAgICAgJ2RpdG8tdGFibGUtYWx0ZXJuYXRlLWNvbG9ycyc6ICFpc0lubGluZWQsXG4gICAgICAgICdkaXRvLXRhYmxlLWV2ZW4tY291bnQnOiBoYXNFdmVuQ291bnRcbiAgICAgIH1gXG4gICAgKVxuICAgICAgZGl0by10YWJsZS1oZWFkKFxuICAgICAgICB2LWlmPVwiY29sdW1uc1wiXG4gICAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgICAgOmNvbHVtbnM9XCJjb2x1bW5zXCJcbiAgICAgICAgOmhhc0VkaXRCdXR0b25zPVwiaGFzRWRpdEJ1dHRvbnNcIlxuICAgICAgKVxuICAgICAgdnVlLWRyYWdnYWJsZShcbiAgICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICAgICAgOmxpc3Q9XCJ1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3REYXRhLCBwYWdpbmF0aW9uUmFuZ2UpXCJcbiAgICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICAgIClcbiAgICAgICAgdHIoXG4gICAgICAgICAgdi1mb3I9XCJpdGVtLCBpbmRleCBpbiBsaXN0RGF0YVwiXG4gICAgICAgICAgOmtleT1cImdldEl0ZW1VaWQoc2NoZW1hLCBpdGVtKVwiXG4gICAgICAgICAgOmlkPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJjb2x1bW5zXCIpXG4gICAgICAgICAgICBkaXRvLXRhYmxlLWNlbGwoXG4gICAgICAgICAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgICAgICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGNvbHVtbilcIlxuICAgICAgICAgICAgICA6a2V5PVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRDZWxsQ2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDpjZWxsPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UpXG4gICAgICAgICAgICB0ZFxuICAgICAgICAgICAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgICAgICAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXgsIGFzT2JqZWN0OiB0cnVlIH0pXCJcbiAgICAgICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShpbmRleClcIlxuICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29tcG9uZW50KFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICAgICAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoaXRlbSwgaW5kZXgpKVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4IH0pXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICB2LWlmPVwiaGFzQ2VsbEVkaXRCdXR0b25zXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShpbmRleClcIlxuICAgICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgKVxuICAgICAgLy8gUmVuZGVyIGNyZWF0ZSBidXR0b25zIGluc2lkZSB0YWJsZSB3aGVuIG5vdCBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgICAgIHRmb290KFxuICAgICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgIXNpbmdsZVwiXG4gICAgICApXG4gICAgICAgIHRyXG4gICAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgIDpjb2xzcGFuPVwibnVtQ29sdW1uc1wiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgICAgICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgKVxuICAgIC8vIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBvdXRzaWRlIHRhYmxlIHdoZW4gaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmIHNpbmdsZVwiXG4gICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWxpc3RcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAuZGl0by1uYXZpZ2F0aW9uXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW5cbiAgICAgIHBhZGRpbmctYm90dG9tOiAkY29udGVudC1wYWRkaW5nLWhhbGZcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgJjplbXB0eVxuICAgICAgICBkaXNwbGF5OiBub25lXG4gICAgICAuZGl0by1zY29wZXMsXG4gICAgICAuZGl0by1wYWdpbmF0aW9uXG4gICAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgICAgZmxleDogMCAxIGF1dG9cbiAgICAgICAgbWluLXdpZHRoOiAwXG4gICAgJi5kaXRvLXNpbmdsZVxuICAgICAgLy8gU28gdGhhdCBsaXN0IGJ1dHRvbnMgY2FuIGJlIHN0aWNreSB0byB0aGUgYm90dG9tOlxuICAgICAgZGlzcGxheTogZ3JpZFxuICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW4tY29udGVudFxuICAgICAgaGVpZ2h0OiAxMDAlXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgVnVlRHJhZ2dhYmxlIGZyb20gJ3Z1ZWRyYWdnYWJsZSdcbmltcG9ydCB7IGdldE5hbWVkU2NoZW1hcywgZ2V0Vmlld0VkaXRQYXRoIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0RmlsdGVyc1BhbmVsIH0gZnJvbSAnLi4vdXRpbHMvZmlsdGVyLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgcGlja0J5LCBlcXVhbHMsIGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdsaXN0Jywge1xuICBjb21wb25lbnRzOiB7IFZ1ZURyYWdnYWJsZSB9LFxuICBtaXhpbnM6IFtTb3VyY2VNaXhpbiwgT3JkZXJlZE1peGluXSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAvLyBObyBuZWVkIGZvciB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBTZWUgVHlwZVRyZWVMaXN0IGZvciBkZXRhaWxzLlxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgZ2V0UGFuZWxTY2hlbWEoc2NoZW1hLCBkYXRhUGF0aCwgc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgY29uc3QgeyBmaWx0ZXJzIH0gPSBzY2hlbWFcbiAgICAvLyBTZWUgaWYgdGhpcyBsaXN0IGNvbXBvbmVudCB3YW50cyB0byBkaXNwbGF5IGEgZmlsdGVyIHBhbmVsLCBhbmQgaWYgc28sXG4gICAgLy8gY3JlYXRlIHRoZSBwYW5lbCBzY2hlbWEgZm9yIGl0IHRocm91Z2ggYGdldEZpbHRlcnNQYW5lbCgpYC5cbiAgICBpZiAoZmlsdGVycykge1xuICAgICAgLy8gQXQgdGhlIHRpbWUgb2YgdGhlIGNyZWF0aW9uIG9mIHRoZSBwYW5lbCBzY2hlbWEsIHRoZSBzY2hlbWFDb21wb25lbnQgaXNcbiAgICAgIC8vIG5vdCBmaWxsZWQgeWV0LCBzbyB3ZSBjYW4ndCBnZXQgdGhlIHRhcmdldCBjb21wb25lbnQgKGRhdGFQYXRoKSByaWdodFxuICAgICAgLy8gYXdheS4gVXNlIGEgcHJveHkgYW5kIGEgZ2V0dGVyIGluc3RlYWQsIHRvIGdldCBhcm91bmQgdGhpczpcbiAgICAgIGNvbnN0IGdldExpc3RDb21wb25lbnQgPSAoKSA9PiBzY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlEYXRhUGF0aChcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIGNvbXBvbmVudCA9PiBjb21wb25lbnQudHlwZSA9PT0gJ2xpc3QnXG4gICAgICApXG5cbiAgICAgIHJldHVybiBnZXRGaWx0ZXJzUGFuZWwoXG4gICAgICAgIGdldE5hbWVkU2NoZW1hcyhmaWx0ZXJzKSxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIHsgLy8gQ3JlYXRlIGEgc2ltcGxlIHByb3h5IHRvIGdldCAvIHNldCB0aGUgcXVlcnksIHNlZSBnZXRGaWx0ZXJzUGFuZWwoKVxuICAgICAgICAgIGdldCBxdWVyeSgpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRMaXN0Q29tcG9uZW50KCk/LnF1ZXJ5XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXQgcXVlcnkocXVlcnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGdldExpc3RDb21wb25lbnQoKVxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHVuZGVmaW5lZCB2YWx1ZXMgZm9yIGNvbXBhcmluZyB3aXRoIGVxdWFscygpXG4gICAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IG9iaiA9PiBwaWNrQnkob2JqLCB2YWx1ZSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICBpZiAoIWVxdWFscyhmaWx0ZXIocXVlcnkpLCBmaWx0ZXIoY29tcG9uZW50LnF1ZXJ5KSkpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQucXVlcnkgPSBxdWVyeVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5sb2FkRGF0YShmYWxzZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGhhc0xpc3RCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICEhKFxuICAgICAgICB0aGlzLmJ1dHRvblNjaGVtYXMgfHxcbiAgICAgICAgdGhpcy5jcmVhdGFibGVcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4gbGlzdERhdGEubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIHRoaXMuZWRpdGFibGUgfHxcbiAgICAgICAgdGhpcy5kZWxldGFibGUgfHxcbiAgICAgICAgdGhpcy5kcmFnZ2FibGVcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzQ2VsbEVkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzSW5saW5lZCAmJiB0aGlzLmhhc0VkaXRCdXR0b25zXG4gICAgfSxcblxuICAgIGhhc0V2ZW5Db3VudCgpIHtcbiAgICAgIHJldHVybiAhKHRoaXMubGlzdERhdGEubGVuZ3RoICUgMilcbiAgICB9LFxuXG4gICAgbnVtQ29sdW1ucygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICh0aGlzLmNvbHVtbnMgPyBPYmplY3Qua2V5cyh0aGlzLmNvbHVtbnMpLmxlbmd0aCA6IDEpICtcbiAgICAgICAgKHRoaXMuaGFzQ2VsbEVkaXRCdXR0b25zID8gMSA6IDApXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXREYXRhUGF0aChpbmRleCkge1xuICAgICAgcmV0dXJuIGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgIH0sXG5cbiAgICBnZXRFZGl0UGF0aChpdGVtLCBpbmRleCkge1xuICAgICAgaWYgKHRoaXMuZWRpdGFibGUpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IGdldFZpZXdFZGl0UGF0aCh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KSB8fCB0aGlzLnBhdGhcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSwgaW5kZXgpXG4gICAgICAgIHJldHVybiBgJHtwYXRofS8ke2lkfWBcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIGdldENlbGxDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jZWxsLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldENvbnRleHQoaXRlbSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGRhdGFQYXRoOiB0aGlzLmdldERhdGFQYXRoKGluZGV4KVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25GaWx0ZXJFcnJvcnMoZXJyb3JzKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzRGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCAnJGZpbHRlcnMnKVxuICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRQYW5lbEJ5RGF0YVBhdGgoZmlsdGVyc0RhdGFQYXRoKVxuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVsLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZGl0by1sYWJlbC5kaXRvLWxhYmVsLWNvbXBvbmVudCg6bGFiZWw9XCJ2YWx1ZVwiIDpkYXRhUGF0aD1cImRhdGFQYXRoXCIpXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBkaXRvLWxhYmVsLmRpdG8tbGFiZWwtY29tcG9uZW50KDpsYWJlbD1cInZhbHVlXCIgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1sYWJlbC1jb21wb25lbnRcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgaGVpZ2h0OiAyZW1cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGFiZWwnLCB7XG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlXG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLW1hcmt1cChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuKVxuICBlZGl0b3ItbWVudS1iYXIuZGl0by1tYXJrdXAtdG9vbGJhcig6ZWRpdG9yPVwiZWRpdG9yXCIpXG4gICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtdG9vbGJhcihcbiAgICAgIHYtaWY9XCJncm91cGVkQnV0dG9ucy5sZW5ndGggPiAwXCJcbiAgICApXG4gICAgICAuZGl0by1idXR0b24tZ3JvdXAoXG4gICAgICAgIHYtZm9yPVwiYnV0dG9ucyBpbiBncm91cGVkQnV0dG9uc1wiXG4gICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWZvcj1cInsgbmFtZSwgaWNvbiwgaXNBY3RpdmUsIG9uQ2xpY2sgfSBpbiBidXR0b25zXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIixcbiAgICAgICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICAgICAgKVxuICAgICAgICAgIGljb24oOm5hbWU9XCJpY29uXCIpXG4gIGVkaXRvci1jb250ZW50LmRpdG8tbWFya3VwLWVkaXRvcihcbiAgICByZWY9XCJlZGl0b3JcIlxuICAgIDplZGl0b3I9XCJlZGl0b3JcIlxuICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gIClcbiAgLmRpdG8tcmVzaXplKFxuICAgIHYtaWY9XCJyZXNpemFibGVcIlxuICAgIEBtb3VzZWRvd24uc3RvcC5wcmV2ZW50PVwib25EcmFnUmVzaXplXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tbWFya3VwKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgKVxuICAgIGVkaXRvci1tZW51LWJhci5kaXRvLW1hcmt1cC10b29sYmFyKDplZGl0b3I9XCJlZGl0b3JcIilcbiAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXRvb2xiYXIoXG4gICAgICAgIHYtaWY9XCJncm91cGVkQnV0dG9ucy5sZW5ndGggPiAwXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tYnV0dG9uLWdyb3VwKFxuICAgICAgICAgIHYtZm9yPVwiYnV0dG9ucyBpbiBncm91cGVkQnV0dG9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICB2LWZvcj1cInsgbmFtZSwgaWNvbiwgaXNBY3RpdmUsIG9uQ2xpY2sgfSBpbiBidXR0b25zXCJcbiAgICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiLFxuICAgICAgICAgICAgQGNsaWNrPVwib25DbGlja1wiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgaWNvbig6bmFtZT1cImljb25cIilcbiAgICBlZGl0b3ItY29udGVudC5kaXRvLW1hcmt1cC1lZGl0b3IoXG4gICAgICByZWY9XCJlZGl0b3JcIlxuICAgICAgOmVkaXRvcj1cImVkaXRvclwiXG4gICAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICAgIClcbiAgICAuZGl0by1yZXNpemUoXG4gICAgICB2LWlmPVwicmVzaXphYmxlXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcC5wcmV2ZW50PVwib25EcmFnUmVzaXplXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tbWFya3VwXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAgIC5kaXRvLXJlc2l6ZVxuICAgICAgQGV4dGVuZCAlaWNvbi1yZXNpemVcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgdG9wOiB1bnNldFxuICAgICAgbGVmdDogdW5zZXRcbiAgICAgIHJpZ2h0OiAwXG4gICAgICBib3R0b206IDBcbiAgICAgIHdpZHRoOiAxZW1cbiAgICAgIGhlaWdodDogMWVtXG5cbiAgICAuUHJvc2VNaXJyb3JcbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgb3V0bGluZTogbm9uZVxuXG4gICAgLmRpdG8tbWFya3VwLWVkaXRvclxuICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsXG4gICAgICAvLyBNb3ZlIHBhZGRpbmcgXCJpbnNpZGVcIiBlZGl0b3IgdG8gY29ycmVjdGx5IHBvc2l0aW9uIHNjcm9sbGJhclxuICAgICAgbWFyZ2luLXJpZ2h0OiAtJGlucHV0LXBhZGRpbmctaG9yXG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkaW5wdXQtcGFkZGluZy1ob3JcblxuICAgIC5kaXRvLWJ1dHRvbnMtdG9vbGJhclxuICAgICAgbWFyZ2luOiAkaW5wdXQtcGFkZGluZy12ZXIgMFxuXG4gICAgaDEsXG4gICAgaDIsXG4gICAgaDMsXG4gICAgcCxcbiAgICB1bCxcbiAgICBvbCxcbiAgICBwcmUsXG4gICAgYmxvY2txdW90ZVxuICAgICAgbWFyZ2luOiAxcmVtIDBcbiAgICAgICY6Zmlyc3QtY2hpbGRcbiAgICAgICAgbWFyZ2luLXRvcDogMFxuICAgICAgJjpsYXN0LWNoaWxkXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDBcbiAgICBoMSxcbiAgICBoMixcbiAgICBoM1xuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICBoMVxuICAgICAgZm9udC1zaXplOiAxLjRyZW1cbiAgICBoMlxuICAgICAgZm9udC1zaXplOiAxLjJyZW1cbiAgICB1bFxuICAgICAgbGlzdC1zdHlsZTogZGlzY1xuICAgIGNvZGVcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ub1xuICAgIHByZVxuICAgICAgcGFkZGluZzogMC43cmVtIDFyZW1cbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyXG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICBvdmVyZmxvdy14OiBhdXRvXG4gICAgICBjb2RlXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgcCBjb2RlXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIHBhZGRpbmc6IDAgMC4zcmVtXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXJcbiAgICBhXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZVxuICAgICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgICBjb2xvcjogYmx1ZVxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmVcbiAgICB1bCxcbiAgICBvbFxuICAgICAgcGFkZGluZy1sZWZ0OiAycmVtXG4gICAgbGlcbiAgICAgICYgPiBwLFxuICAgICAgJiA+IG9sLFxuICAgICAgJiA+IHVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgIGJsb2NrcXVvdGVcbiAgICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgJGNvbG9yLWxpZ2h0ZXJcbiAgICAgIHBhZGRpbmctbGVmdDogMXJlbVxuICAgICAgZm9udC1zdHlsZTogaXRhbGljXG4gICAgICBwXG4gICAgICAgIG1hcmdpbjogMFxuXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRWRpdG9yLCBFZGl0b3JDb250ZW50LCBFZGl0b3JNZW51QmFyLCBNYXJrIH0gZnJvbSAndGlwdGFwJ1xuaW1wb3J0IHsgdG9nZ2xlTWFyayB9IGZyb20gJ3RpcHRhcC1jb21tYW5kcydcbmltcG9ydCB7XG4gIC8vIE1hcmtzOlxuICBCb2xkLCBDb2RlLCBJdGFsaWMsIExpbmssIFN0cmlrZSwgVW5kZXJsaW5lLFxuICAvLyBOb2RlczpcbiAgQmxvY2txdW90ZSwgQ29kZUJsb2NrLCBIYXJkQnJlYWssIEhlYWRpbmcsIEhvcml6b250YWxSdWxlLFxuICBPcmRlcmVkTGlzdCwgQnVsbGV0TGlzdCwgTGlzdEl0ZW0sXG4gIC8vIFRPRE86XG4gIC8vIC0gSW1hZ2UsIE1lbnRpb24sIENvZGVCbG9ja0hpZ2hsaWdodFxuICAvLyAtIFRhYmxlLCBUYWJsZUNlbGwsIFRhYmxlSGVhZGVyLCBUYWJsZU5vZGVzLCBUYWJsZVJvdyxcbiAgLy8gLSBUb2RvSXRlbSwgVG9kb0xpc3RcbiAgLy8gVG9vbHM6XG4gIEhpc3Rvcnlcbn0gZnJvbSAndGlwdGFwLWV4dGVuc2lvbnMnXG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCB7XG4gIGlzQXJyYXksIGlzT2JqZWN0LCB1bmRlcnNjb3JlLCBoeXBoZW5hdGUsIGRlYm91bmNlXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdtYXJrdXAnLCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICBFZGl0b3JDb250ZW50LFxuICAgIEVkaXRvck1lbnVCYXIsXG4gICAgSWNvblxuICB9LFxuXG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlZGl0b3I6IG51bGwsXG4gICAgICBoZWlnaHQ6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCAxMFxuICAgIH0sXG5cbiAgICBzdHlsZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0IHx8IGBjYWxjKCR7dGhpcy5saW5lc31lbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlgXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1hcmtCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbWFya3MnLCB7XG4gICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgIGl0YWxpYzogdHJ1ZSxcbiAgICAgICAgdW5kZXJsaW5lOiB0cnVlLFxuICAgICAgICBzdHJpa2U6IHRydWUsXG4gICAgICAgIHNtYWxsOiB0cnVlLFxuICAgICAgICBjb2RlOiB0cnVlLFxuICAgICAgICBsaW5rOiB7XG4gICAgICAgICAgb25DbGljazogY29tbWFuZCA9PiB0aGlzLm9uQ2xpY2tMaW5rKGNvbW1hbmQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGJhc2ljTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgcGFyYWdyYXBoOiB7XG4gICAgICAgIC8vIERvIG5vdCBzaG93IHRoZSBwYXJhZ3JhcGggY29tbWFuZCBhcyBhY3RpdmUgaWYgYW55IG9mIHRoZSBibG9ja1xuICAgICAgICAvLyBjb21tYW5kcyBhcmUgYWxzbyBhY3RpdmU6XG4gICAgICAgICAgaWdub3JlQWN0aXZlOiAoKSA9PlxuICAgICAgICAgICAgdGhpcy5vdGhlck5vZGVCdXR0b25zLnNvbWUoYnV0dG9uID0+IGJ1dHRvbi5pc0FjdGl2ZSlcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZGluZzoge1xuICAgICAgICAgIGF0dHI6ICdsZXZlbCcsXG4gICAgICAgICAgdmFsdWVzOiBbMSwgMiwgMywgNCwgNSwgNl1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb3RoZXJOb2RlQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ25vZGVzJywge1xuICAgICAgICBidWxsZXRMaXN0OiB0cnVlLFxuICAgICAgICBvcmRlcmVkTGlzdDogdHJ1ZSxcbiAgICAgICAgYmxvY2txdW90ZTogdHJ1ZSxcbiAgICAgICAgY29kZUJsb2NrOiB0cnVlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB0b29sQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ3Rvb2xzJywge1xuICAgICAgICB1bmRvOiB0cnVlLFxuICAgICAgICByZWRvOiB0cnVlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBncm91cGVkQnV0dG9ucygpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFya0J1dHRvbnMsXG4gICAgICAgIGJhc2ljTm9kZUJ1dHRvbnMsXG4gICAgICAgIG90aGVyTm9kZUJ1dHRvbnMsXG4gICAgICAgIHRvb2xCdXR0b25zXG4gICAgICB9ID0gdGhpc1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgbWFya0J1dHRvbnMsXG4gICAgICAgIGJhc2ljTm9kZUJ1dHRvbnMsXG4gICAgICAgIG90aGVyTm9kZUJ1dHRvbnMsXG4gICAgICAgIHRvb2xCdXR0b25zXG4gICAgICBdLmZpbHRlcihidXR0b25zID0+IGJ1dHRvbnMubGVuZ3RoID4gMClcbiAgICB9LFxuXG4gICAgcGFyc2VPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJlc2VydmVXaGl0ZXNwYWNlOiB7XG4gICAgICAgICAgJ2NvbGxhcHNlJzogZmFsc2UsXG4gICAgICAgICAgJ3ByZXNlcnZlJzogdHJ1ZSxcbiAgICAgICAgICAncHJlc2VydmUtYWxsJzogJ2Z1bGwnXG4gICAgICAgIH1bdGhpcy53aGl0ZXNwYWNlXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBlZGl0b3JPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWRpdGFibGU6ICF0aGlzLnJlYWR5b25seSxcbiAgICAgICAgYXV0b0ZvY3VzOiB0aGlzLmF1dG9mb2N1cyxcbiAgICAgICAgZGlzYWJsZUlucHV0UnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLmlucHV0LFxuICAgICAgICBkaXNhYmxlUGFzdGVSdWxlczogIXRoaXMuZW5hYmxlUnVsZXMucGFzdGUsXG4gICAgICAgIHBhcnNlT3B0aW9uczogdGhpcy5wYXJzZU9wdGlvbnNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVzaXphYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVzaXphYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICB3aGl0ZXNwYWNlOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2hpdGVzcGFjZScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdjb2xsYXBzZSdcbiAgICAgIC8vIFBvc3NpYmxlIHZhbHVlcyBhcmU6ICdjb2xsYXBzZScsICdwcmVzZXJ2ZScsICdwcmVzZXJ2ZS1hbGwnXG4gICAgfSksXG5cbiAgICBlbmFibGVSdWxlczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VuYWJsZVJ1bGVzJywge1xuICAgICAgdHlwZTogW09iamVjdCwgQm9vbGVhbl0sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlbmFibGVSdWxlcykge1xuICAgICAgICByZXR1cm4gaXNPYmplY3QoZW5hYmxlUnVsZXMpXG4gICAgICAgICAgPyBlbmFibGVSdWxlc1xuICAgICAgICAgIDoge1xuICAgICAgICAgICAgaW5wdXQ6ICEhZW5hYmxlUnVsZXMsXG4gICAgICAgICAgICBwYXN0ZTogISFlbmFibGVSdWxlc1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgcmVhZHlvbmx5OiAndXBkYXRlRWRpdG9yT3B0aW9ucycsXG4gICAgYXV0b2ZvY3VzOiAndXBkYXRlRWRpdG9yT3B0aW9ucycsXG4gICAgZW5hYmxlUnVsZXM6ICd1cGRhdGVFZGl0b3JPcHRpb25zJ1xuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZVxuICAgIGxldCBpZ25vcmVXYXRjaCA9IGZhbHNlXG5cbiAgICBjb25zdCBvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5mb2N1c2VkICYmIGNoYW5nZWQpIHtcbiAgICAgICAgY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9uRm9jdXMgPSAoKSA9PiB0aGlzLm9uRm9jdXMoKVxuXG4gICAgY29uc3Qgb25CbHVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5vbkJsdXIoKVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH1cblxuICAgIGNvbnN0IHNldFZhbHVlRGVib3VuY2VkID0gZGVib3VuY2UoZ2V0VmFsdWUgPT4ge1xuICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICB0aGlzLnZhbHVlID0gZ2V0VmFsdWUoKVxuICAgICAgY2hhbmdlZCA9IHRydWVcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9LCAxMDApXG5cbiAgICBjb25zdCBvblVwZGF0ZSA9ICh7IGdldEhUTUwgfSkgPT4ge1xuICAgICAgc2V0VmFsdWVEZWJvdW5jZWQoZ2V0SFRNTClcbiAgICAgIHRoaXMub25JbnB1dCgpXG4gICAgfVxuXG4gICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVdhdGNoKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZWRpdG9yLnNldENvbnRlbnQodmFsdWUsIGZhbHNlLCB0aGlzLnBhcnNlT3B0aW9ucylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5lZGl0b3IgPSBuZXcgRWRpdG9yKHtcbiAgICAgIC4uLnRoaXMuZWRpdG9yT3B0aW9ucyxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbkJsdXIsXG4gICAgICBvblVwZGF0ZSxcbiAgICAgIGV4dGVuc2lvbnM6IHRoaXMuY3JlYXRlRXh0ZW5zaW9ucygpLFxuICAgICAgY29udGVudDogdGhpcy52YWx1ZSB8fCAnJ1xuICAgIH0pXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLmVkaXRvci5kZXN0cm95KClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25EcmFnUmVzaXplKGV2ZW50KSB7XG4gICAgICBjb25zdCBnZXRQb2ludCA9ICh7IGNsaWVudFg6IHgsIGNsaWVudFk6IHkgfSkgPT4gKHsgeCwgeSB9KVxuXG4gICAgICBsZXQgcHJldlkgPSBnZXRQb2ludChldmVudCkueVxuICAgICAgbGV0IGhlaWdodCA9IHBhcnNlRmxvYXQoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiRyZWZzLmVkaXRvci4kZWwpLmhlaWdodClcblxuICAgICAgY29uc3QgbW91c2Vtb3ZlID0gZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCB7IHkgfSA9IGdldFBvaW50KGV2ZW50KVxuICAgICAgICBoZWlnaHQgKz0geSAtIHByZXZZXG4gICAgICAgIHByZXZZID0geVxuICAgICAgICB0aGlzLmhlaWdodCA9IGAke01hdGgubWF4KGhlaWdodCwgMCl9cHhgXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgICBtb3VzZW1vdmUsXG5cbiAgICAgICAgbW91c2V1cChldmVudCkge1xuICAgICAgICAgIG1vdXNlbW92ZShldmVudClcbiAgICAgICAgICBoYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB1cGRhdGVFZGl0b3JPcHRpb25zKCkge1xuICAgICAgdGhpcy5lZGl0b3Iuc2V0T3B0aW9ucyh0aGlzLmVkaXRvck9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ2xpY2tMaW5rKGNvbW1hbmQpIHtcbiAgICAgIGNvbnN0IGF0dHJzID0gYXdhaXQgdGhpcy5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIGhyZWY6IHtcbiAgICAgICAgICAgIHR5cGU6ICd1cmwnLFxuICAgICAgICAgICAgbGFiZWw6ICdMaW5rJyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGxhYmVsOiAnVGl0bGUnXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBidXR0b25zOiB7XG4gICAgICAgICAgY2FuY2VsOiB7fSxcbiAgICAgICAgICBhcHBseTogeyB0eXBlOiAnc3VibWl0JyB9LFxuICAgICAgICAgIHJlbW92ZToge1xuICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgIGNsaWNrKHsgZGlhbG9nQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb21wb25lbnQucmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICBocmVmOiBudWxsLFxuICAgICAgICAgICAgICAgICAgdGl0bGU6IG51bGxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXRhOiB0aGlzLmVkaXRvci5nZXRNYXJrQXR0cnMoJ2xpbmsnKVxuICAgICAgfSlcbiAgICAgIGlmIChhdHRycykge1xuICAgICAgICBsZXQgeyBocmVmLCB0aXRsZSB9ID0gYXR0cnNcbiAgICAgICAgaWYgKGhyZWYpIHtcbiAgICAgICAgICAvLyBTZWUgaWYgYGhyZWZgIGNhbiBiZSBwYXJzZWQgYXMgYSBVUkwsIGFuZCBpZiBub3QsIHByZWZpeCBpdCB3aXRoXG4gICAgICAgICAgLy8gYSBkZWZhdWx0IHByb3RvY29sLlxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgVVJMKGhyZWYpXG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICBocmVmID0gYGh0dHA6Ly8ke2hyZWZ9YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb21tYW5kKHsgaHJlZiwgdGl0bGUgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlRXh0ZW5zaW9ucygpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFya3MgPSB7fSxcbiAgICAgICAgbm9kZXMgPSB7fSxcbiAgICAgICAgdG9vbHMgPSB7fVxuICAgICAgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gW1xuICAgICAgICAvLyBzY2hlbWEubWFya3M6XG4gICAgICAgIG1hcmtzLmJvbGQgJiYgbmV3IEJvbGQoKSxcbiAgICAgICAgbWFya3MuaXRhbGljICYmIG5ldyBJdGFsaWMoKSxcbiAgICAgICAgbWFya3MudW5kZXJsaW5lICYmIG5ldyBVbmRlcmxpbmUoKSxcbiAgICAgICAgbWFya3Muc3RyaWtlICYmIG5ldyBTdHJpa2UoKSxcbiAgICAgICAgbWFya3Muc21hbGwgJiYgbmV3IFNtYWxsKCksXG4gICAgICAgIG1hcmtzLmNvZGUgJiYgbmV3IENvZGUoKSxcbiAgICAgICAgbWFya3MubGluayAmJiBuZXcgTGlua1dpdGhUaXRsZSgpLFxuXG4gICAgICAgIC8vIHNjaGVtYS5ub2RlczpcbiAgICAgICAgbm9kZXMuYmxvY2txdW90ZSAmJiBuZXcgQmxvY2txdW90ZSgpLFxuICAgICAgICBub2Rlcy5jb2RlQmxvY2sgJiYgbmV3IENvZGVCbG9jaygpLFxuICAgICAgICBuZXcgSGFyZEJyZWFrKCksIC8vIFRPRE86IFNob3VsZCB0aGlzIGFsd2F5cyBvbj9cbiAgICAgICAgbm9kZXMuaGVhZGluZyAmJiBuZXcgSGVhZGluZyh7IGxldmVsczogbm9kZXMuaGVhZGluZyB9KSxcbiAgICAgICAgbm9kZXMuaG9yaXpvbnRhbFJ1bGUgJiYgbmV3IEhvcml6b250YWxSdWxlKCksXG4gICAgICAgIChub2Rlcy5vcmRlcmVkTGlzdCB8fCBub2Rlcy5idWxsZXRMaXN0KSAmJiBuZXcgTGlzdEl0ZW0oKSxcbiAgICAgICAgbm9kZXMuYnVsbGV0TGlzdCAmJiBuZXcgQnVsbGV0TGlzdCgpLFxuICAgICAgICBub2Rlcy5vcmRlcmVkTGlzdCAmJiBuZXcgT3JkZXJlZExpc3QoKSxcbiAgICAgICAgLy8gVE9ETzpcbiAgICAgICAgLy8gbm9kZXMudG9kb0xpc3QgJiYgbmV3IFRvZG9JdGVtKCksXG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIG5ldyBUb2RvTGlzdCgpLFxuXG4gICAgICAgIC8vIHNjaGVtYS50b29sczpcbiAgICAgICAgdG9vbHMuaGlzdG9yeSAmJiBuZXcgSGlzdG9yeSgpXG4gICAgICBdLmZpbHRlcihleHRlbnNpb24gPT4gISFleHRlbnNpb24pXG4gICAgfSxcblxuICAgIGdldEJ1dHRvbnMoc2V0dGluZ3NOYW1lLCBkZXNjcmlwdGlvbnMpIHtcbiAgICAgIGNvbnN0IGxpc3QgPSBbXVxuXG4gICAgICBjb25zdCBhZGRCdXR0b24gPSAoeyBuYW1lLCBpY29uLCBhdHRycywgaWdub3JlQWN0aXZlLCBvbkNsaWNrIH0pID0+IHtcbiAgICAgICAgY29uc3QgaXNBY3RpdmUgPSB0aGlzLmVkaXRvci5pc0FjdGl2ZVtuYW1lXVxuICAgICAgICBjb25zdCBjb21tYW5kID0gdGhpcy5lZGl0b3IuY29tbWFuZHNbbmFtZV1cbiAgICAgICAgbGlzdC5wdXNoKHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGljb24sXG4gICAgICAgICAgaXNBY3RpdmU6IChcbiAgICAgICAgICAgIGlzQWN0aXZlPy4oYXR0cnMpICYmXG4gICAgICAgICAgICAoaWdub3JlQWN0aXZlID09IG51bGwgfHwgIWlnbm9yZUFjdGl2ZSgpKVxuICAgICAgICAgICksXG4gICAgICAgICAgb25DbGljazogKCkgPT4gb25DbGlja1xuICAgICAgICAgICAgPyBvbkNsaWNrKGNvbW1hbmQsIGF0dHJzKVxuICAgICAgICAgICAgOiBjb21tYW5kKGF0dHJzKVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuc2NoZW1hW3NldHRpbmdzTmFtZV1cbiAgICAgIGlmIChzZXR0aW5ncykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGRlc2NyaXB0aW9uXSBvZiBPYmplY3QuZW50cmllcyhkZXNjcmlwdGlvbnMpKSB7XG4gICAgICAgICAgY29uc3Qgc2V0dGluZ05hbWUgPSBbJ3VuZG8nLCAncmVkbyddLmluY2x1ZGVzKGtleSkgPyAnaGlzdG9yeScgOiBrZXlcbiAgICAgICAgICBjb25zdCBzZXR0aW5nID0gc2V0dGluZ3Nbc2V0dGluZ05hbWVdXG4gICAgICAgICAgY29uc3QgbmFtZSA9IHVuZGVyc2NvcmUoa2V5KVxuICAgICAgICAgIGNvbnN0IGljb24gPSBoeXBoZW5hdGUoa2V5KVxuICAgICAgICAgIGlmIChzZXR0aW5nKSB7XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgYWRkQnV0dG9uKHsgbmFtZSwgaWNvbiB9KVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkZXNjcmlwdGlvbikpIHtcbiAgICAgICAgICAgICAgY29uc3QgeyBhdHRyLCB2YWx1ZXMsIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9ID0gZGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgaWYgKGF0dHIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZXMpICYmIGlzQXJyYXkoc2V0dGluZykpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgaGVhZGluZyBsZXZlbCBhdHRyczpcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogYCR7aWNvbn0tJHt2YWx1ZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgW2F0dHJdOiB2YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkQnV0dG9uKHsgbmFtZSwgaWNvbiwgaWdub3JlQWN0aXZlLCBvbkNsaWNrIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfSxcblxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnNjcm9sbEludG9WaWV3Py4oKVxuICAgICAgdGhpcy5lZGl0b3IuZm9jdXMoKVxuICAgIH1cbiAgfVxufSlcblxuY2xhc3MgU21hbGwgZXh0ZW5kcyBNYXJrIHtcbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuICdzbWFsbCdcbiAgfVxuXG4gIGdldCBzY2hlbWEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlRE9NOiBbXG4gICAgICAgIHsgdGFnOiAnc21hbGwnIH1cbiAgICAgIF0sXG4gICAgICB0b0RPTTogKCkgPT4gWydzbWFsbCcsIDBdXG4gICAgfVxuICB9XG5cbiAgY29tbWFuZHMoeyB0eXBlIH0pIHtcbiAgICByZXR1cm4gKCkgPT4gdG9nZ2xlTWFyayh0eXBlKVxuICB9XG59XG5jbGFzcyBMaW5rV2l0aFRpdGxlIGV4dGVuZHMgTGluayB7XG4gIGdldCBzY2hlbWEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIGhyZWY6IHtcbiAgICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICAgIH0sXG4gICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgIHBhcnNlRE9NOiBbe1xuICAgICAgICB0YWc6ICdhJyxcbiAgICAgICAgZ2V0QXR0cnM6IGRvbSA9PiAoe1xuICAgICAgICAgIGhyZWY6IGRvbS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSxcbiAgICAgICAgICB0aXRsZTogZG9tLmdldEF0dHJpYnV0ZSgndGl0bGUnKVxuICAgICAgICB9KVxuICAgICAgfV0sXG4gICAgICB0b0RPTTogbm9kZSA9PiBbJ2EnLCBub2RlLmF0dHJzLCAwXVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLW11bHRpc2VsZWN0KFxuICA6Y2xhc3M9YHtcbiAgICAnZGl0by1tdWx0aXNlbGVjdC1zaW5nbGUnOiAhbXVsdGlwbGUsXG4gICAgJ2RpdG8tbXVsdGlzZWxlY3QtbXVsdGlwbGUnOiBtdWx0aXBsZVxuICB9YFxuKVxuICB2dWUtbXVsdGlzZWxlY3QoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOnNob3ctbGFiZWxzPVwiZmFsc2VcIlxuICAgIDpwbGFjZWhvbGRlcj1cInBsYWNlaG9sZGVyXCJcbiAgICB0YWctcGxhY2Vob2xkZXI9XCJQcmVzcyBlbnRlciB0byBhZGQgbmV3IHRhZ1wiLFxuICAgIDpvcHRpb25zPVwicG9wdWxhdGUgJiYgYWN0aXZlT3B0aW9ucyB8fCBbXVwiXG4gICAgOmN1c3RvbS1sYWJlbD1cImdldExhYmVsRm9yT3B0aW9uXCJcbiAgICA6dHJhY2stYnk9XCJvcHRpb25WYWx1ZVwiXG4gICAgOmdyb3VwLWxhYmVsPVwiZ3JvdXBCeUxhYmVsXCJcbiAgICA6Z3JvdXAtdmFsdWVzPVwiZ3JvdXBCeU9wdGlvbnNcIlxuICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICA6dGFnZ2FibGU9XCJ0YWdnYWJsZVwiXG4gICAgOnNlYXJjaGFibGU9XCJzZWFyY2hhYmxlXCJcbiAgICA6aW50ZXJuYWwtc2VhcmNoPVwiIXNlYXJjaEZpbHRlclwiXG4gICAgOnByZXNlcnZlLXNlYXJjaD1cIiEhc2VhcmNoRmlsdGVyXCJcbiAgICA6Y2xlYXItb24tc2VsZWN0PVwiIXNlYXJjaEZpbHRlclwiXG4gICAgOmNsb3NlLW9uLXNlbGVjdD1cIiFzdGF5T3BlblwiXG4gICAgOmxvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgIEBvcGVuPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICBAdGFnPVwib25BZGRUYWdcIlxuICAgIEBzZWFyY2gtY2hhbmdlPVwib25TZWFyY2hDaGFuZ2VcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLW11bHRpc2VsZWN0KFxuICAgIDpjbGFzcz1ge1xuICAgICAgJ2RpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlJzogIW11bHRpcGxlLFxuICAgICAgJ2RpdG8tbXVsdGlzZWxlY3QtbXVsdGlwbGUnOiBtdWx0aXBsZVxuICAgIH1gXG4gIClcbiAgICB2dWUtbXVsdGlzZWxlY3QoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIDpzaG93LWxhYmVscz1cImZhbHNlXCJcbiAgICAgIDpwbGFjZWhvbGRlcj1cInBsYWNlaG9sZGVyXCJcbiAgICAgIHRhZy1wbGFjZWhvbGRlcj1cIlByZXNzIGVudGVyIHRvIGFkZCBuZXcgdGFnXCIsXG4gICAgICA6b3B0aW9ucz1cInBvcHVsYXRlICYmIGFjdGl2ZU9wdGlvbnMgfHwgW11cIlxuICAgICAgOmN1c3RvbS1sYWJlbD1cImdldExhYmVsRm9yT3B0aW9uXCJcbiAgICAgIDp0cmFjay1ieT1cIm9wdGlvblZhbHVlXCJcbiAgICAgIDpncm91cC1sYWJlbD1cImdyb3VwQnlMYWJlbFwiXG4gICAgICA6Z3JvdXAtdmFsdWVzPVwiZ3JvdXBCeU9wdGlvbnNcIlxuICAgICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgICAgOnRhZ2dhYmxlPVwidGFnZ2FibGVcIlxuICAgICAgOnNlYXJjaGFibGU9XCJzZWFyY2hhYmxlXCJcbiAgICAgIDppbnRlcm5hbC1zZWFyY2g9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICAgIDpwcmVzZXJ2ZS1zZWFyY2g9XCIhIXNlYXJjaEZpbHRlclwiXG4gICAgICA6Y2xlYXItb24tc2VsZWN0PVwiIXNlYXJjaEZpbHRlclwiXG4gICAgICA6Y2xvc2Utb24tc2VsZWN0PVwiIXN0YXlPcGVuXCJcbiAgICAgIDpsb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICAgIEBvcGVuPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICAgIEB0YWc9XCJvbkFkZFRhZ1wiXG4gICAgICBAc2VhcmNoLWNoYW5nZT1cIm9uU2VhcmNoQ2hhbmdlXCJcbiAgICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAvLyBUZW1wb3JhcnkgZml4IGZvciB0aGlzIHZ1ZS1jbGkgaXNzdWU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtY2xpL2lzc3Vlcy8yMDU1I2lzc3VlY29tbWVudC00MTc4MTc1MjdcbiAgLy8gQGltcG9ydCAnfnZ1ZS1tdWx0aXNlbGVjdC9kaXN0L3Z1ZS1tdWx0aXNlbGVjdC5taW4uY3NzJ1xuICAkc3Bpbm5lci13aWR0aDogJHNlbGVjdC1hcnJvdy13aWR0aFxuICAkdGFnLWljb24td2lkdGg6IDEuOGVtXG4gICR0YWctbWFyZ2luOiAycHhcbiAgJHRhZy1wYWRkaW5nOiAzcHhcbiAgJHRhZy1saW5lLWhlaWdodDogMS4xZW1cblxuICAuZGl0by1tdWx0aXNlbGVjdFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gICAgLm11bHRpc2VsZWN0XG4gICAgICBmb250LXNpemU6IGluaGVyaXRcbiAgICAgIG1pbi1oZWlnaHQ6IGluaGVyaXRcbiAgICAgIGNvbG9yOiAkY29sb3ItYmxhY2tcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0XG4gICAgICBvdmVyZmxvdzogYXV0b1xuICAgICAgbWluLWhlaWdodDogaW5oZXJpdFxuICAgICAgcGFkZGluZzogMCAkc3Bpbm5lci13aWR0aCAwIDBcbiAgICAgIC8vIFNvIHRhZ3MgY2FuIGZsb2F0IG9uIG11bHRpcGxlIGxpbmVzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zOlxuICAgICAgcGFkZGluZy1ib3R0b206ICR0YWctbWFyZ2luXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZ1xuICAgICAgZmxvYXQ6IGxlZnRcbiAgICAgIG1hcmdpbjogJHRhZy1tYXJnaW4gMCAwICR0YWctbWFyZ2luXG4gICAgICBib3JkZXItcmFkaXVzOiAxZW1cbiAgICAgIHBhZGRpbmc6ICR0YWctcGFkZGluZyAkdGFnLWljb24td2lkdGggJHRhZy1wYWRkaW5nIDAuOGVtXG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuXG4gICAgLm11bHRpc2VsZWN0X190YWdzLXdyYXBcbiAgICAgIG92ZXJmbG93OiBhdXRvXG4gICAgICBsaW5lLWhlaWdodDogMFxuXG4gICAgLm11bHRpc2VsZWN0X19zaW5nbGUsXG4gICAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlcixcbiAgICAubXVsdGlzZWxlY3RfX2lucHV0XG4gICAgICBmb250LXNpemU6IGluaGVyaXRcbiAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0XG4gICAgICBtaW4taGVpZ2h0OiAwXG4gICAgICBtYXJnaW46IDAgMCAxcHggMFxuICAgICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBzdHlsZT1cInBhZGRpbmc6IC4uLjtcIiBpbiBhZGRpdGlvbiB0byB1c2luZ1xuICAgICAgLy8gY2xhc3Nlcywgc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nICFpbXBvcnRhbnRcbiAgICAgIC8vIFNvIGlucHV0IGNhbiBmbG9hdCBuZXh0IHRvIHRhZ3MgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnMgd2l0aFxuICAgICAgLy8gLm11bHRpc2VsZWN0X190YWdzOlxuICAgICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudFxuICAgICAgYmFja2dyb3VuZDogbm9uZVxuXG4gICAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlcixcbiAgICAubXVsdGlzZWxlY3RfX2lucHV0OjpwbGFjZWhvbGRlclxuICAgICAgY29sb3I6ICRjb2xvci1wbGFjZWhvbGRlclxuXG4gICAgLm11bHRpc2VsZWN0LS1hY3RpdmVcbiAgICAgIC5tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXJcbiAgICAgICAgLy8gRG9uJ3QgdXNlIGBkaXNwbGF5OiBub25lYCB0byBoaWRlIHBsYWNlLWhvbGRlciwgYXMgdGhlIGxheW91dCB3b3VsZFxuICAgICAgICAvLyBjb2xsYXBzZS5cbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlblxuXG4gICAgLm11bHRpc2VsZWN0X19zZWxlY3QsXG4gICAgLm11bHRpc2VsZWN0X19zcGlubmVyXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICAvLyAkYm9yZGVyLXdpZHRoIHRvIHByZXZlbnQgbWFza2luZyBib3JkZXIgd2l0aCAubXVsdGlzZWxlY3RfX3NwaW5uZXJcbiAgICAgIHRvcDogJGJvcmRlci13aWR0aFxuICAgICAgcmlnaHQ6ICRib3JkZXItd2lkdGhcbiAgICAgIGJvdHRvbTogJGJvcmRlci13aWR0aFxuICAgICAgaGVpZ2h0OiBpbmhlcml0XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuXG4gICAgLm11bHRpc2VsZWN0X19zZWxlY3RcbiAgICAgIHdpZHRoOiAwXG4gICAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoJHNlbGVjdC1hcnJvdy13aWR0aCAvIDIpXG4gICAgICAmOjpiZWZvcmVcbiAgICAgICAgK2Fycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSlcbiAgICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbVxuICAgICAgICByaWdodDogY2FsYygtMSAqICRzZWxlY3QtYXJyb3ctc2l6ZSAvIDIpXG5cbiAgICAubXVsdGlzZWxlY3RfX3NwaW5uZXJcbiAgICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aFxuICAgICAgJjo6YmVmb3JlLFxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gQ2hhbmdlIHRoZSB3aWR0aCBvZiB0aGUgbG9hZGluZyBzcGlubmVyXG4gICAgICAgIGJvcmRlci13aWR0aDogM3B4XG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgaW5zZXQ6IDBcbiAgICAgICAgbWFyZ2luOiBhdXRvXG5cbiAgICAubXVsdGlzZWxlY3RfX29wdGlvblxuICAgICAgbWluLWhlaWdodDogdW5zZXRcbiAgICAgIGhlaWdodDogdW5zZXRcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gdGV4dCBmb3Igb3B0aW9uc1xuICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudFxuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLm11bHRpc2VsZWN0X19vcHRpb24tLWRpc2FibGVkXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZy1pY29uXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICBib3JkZXItcmFkaXVzOiAxZW1cbiAgICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0XG4gICAgICBsaW5lLWhlaWdodDogMS40ZW1cbiAgICAgIHdpZHRoOiAkdGFnLWljb24td2lkdGhcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuICAgICAgICBmb250LXNpemU6IDEuM2VtXG4gICAgICAmOmhvdmVyOjphZnRlclxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHRcblxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1zZWxlY3RlZFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodFxuICAgICAgY29sb3I6ICRjb2xvci10ZXh0XG4gICAgICBmb250LXdlaWdodDogbm9ybWFsXG4gICAgICAmLm11bHRpc2VsZWN0X19vcHRpb24tLWhpZ2hsaWdodFxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnLFxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuXG4gICAgLm11bHRpc2VsZWN0X190YWdzLFxuICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG5cbiAgICAmLmRpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlXG4gICAgICAtLWlucHV0LXdpZHRoOiAxMDAlXG4gICAgJi5kaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlXG4gICAgICAtLWlucHV0LXdpZHRoOiBhdXRvXG5cbiAgICAubXVsdGlzZWxlY3QtLWFjdGl2ZVxuICAgICAgLm11bHRpc2VsZWN0X19zaW5nbGUsXG4gICAgICAubXVsdGlzZWxlY3RfX2lucHV0XG4gICAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgYHN0eWxlPVwid2lkdGhcImAgaW4gYWRkaXRpb24gdG8gdXNpbmcgY2xhc3Nlc1xuICAgICAgICAvLyBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgICB3aWR0aDogdmFyKC0taW5wdXQtd2lkdGgpICFpbXBvcnRhbnRcblxuICAgICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlXG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRib3JkZXItY29sb3JcbiAgICAgICAgbWFyZ2luOiAtMXB4IDAgMFxuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAgICYubXVsdGlzZWxlY3QtLWFib3ZlXG4gICAgICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMFxuICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwXG4gICAgICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmVcbiAgICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG4gICAgICAgICAgbWFyZ2luOiAwIDAgLTFweFxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMFxuICAgICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAmLmRpdG8taGFzLWVycm9yc1xuICAgICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWVycm9yXG5cbiAgICAuZGl0by1idXR0b24tY2xlYXJcbiAgICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5pbXBvcnQgVnVlTXVsdGlzZWxlY3QgZnJvbSAndnVlLW11bHRpc2VsZWN0J1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCAndnVlLW11bHRpc2VsZWN0L2Rpc3QvdnVlLW11bHRpc2VsZWN0Lm1pbi5jc3MnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdtdWx0aXNlbGVjdCcsIHtcbiAgY29tcG9uZW50czogeyBWdWVNdWx0aXNlbGVjdCB9LFxuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlYXJjaGVkT3B0aW9uczogbnVsbCxcbiAgICAgIHBvcHVsYXRlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkT3B0aW9uczoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKHRoaXMuc2VsZWN0ZWRWYWx1ZSB8fCBbXSlcbiAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgIC8vIElmIGFuIG9wdGlvbiBjYW5ub3QgYmUgZm91bmQsIHdlIG1heSBiZSBpbiB0YWdnYWJsZSBtb2RlIGFuZFxuICAgICAgICAgICAgICAvLyBjYW4gYWRkIGl0LlxuICAgICAgICAgICAgICB2YWx1ZSA9PiB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB8fCB0aGlzLmFkZFRhZ09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgb3B0aW9ucyB0aGF0IHdlIGNvdWxkbid0IG1hdGNoLlxuICAgICAgICAgICAgLy8gVE9ETzogV2UgcmVhbGx5IHNob3VsZCBkaXNwbGF5IGFuIGVycm9yIGluc3RlYWRcbiAgICAgICAgICAgIC5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICAgICAgOiB0aGlzLnNlbGVjdGVkT3B0aW9uXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIC8vIENvbnZlcnQgdmFsdWUgdG8gb3B0aW9ucyBvYmplY3QsIHNpbmNlIHZ1ZS1tdWx0aXNlbGVjdCBjYW4ndCBtYXAgdGhhdFxuICAgICAgICAvLyBpdHNlbGYgdW5mb3J0dW5hdGVseS4gYHRyYWNrLWJ5YCBpcyB1c2VkIGZvciA6a2V5IG1hcHBpbmcgaXQgc2VlbXMuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/IChvcHRpb24gfHwgW10pLm1hcCh2YWx1ZSA9PiB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKHZhbHVlKSlcbiAgICAgICAgICA6IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhY3RpdmVPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoZWRPcHRpb25zIHx8IHRoaXMub3B0aW9uc1xuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzZWFyY2hhYmxlOiBnZXRTY2hlbWFBY2Nlc3Nvcignc2VhcmNoYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgdGFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCd0YWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgc3RheU9wZW46IGdldFNjaGVtYUFjY2Vzc29yKCdzdGF5T3BlbicsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcGxhY2Vob2xkZXIoKSB7XG4gICAgICBjb25zdCB7IHBsYWNlaG9sZGVyLCBzZWFyY2hhYmxlLCB0YWdnYWJsZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiBwbGFjZWhvbGRlciB8fCAoXG4gICAgICAgIHNlYXJjaGFibGUgJiYgdGFnZ2FibGUgPyAnU2VhcmNoIG9yIGFkZCBhIHRhZydcbiAgICAgICAgOiBzZWFyY2hhYmxlID8gJ1NlbGVjdCBvciBzZWFyY2ggZW50cnknXG4gICAgICAgIDogdW5kZWZpbmVkXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgaWYgKHRoaXMuYXV0b2ZvY3VzKSB7XG4gICAgICAvLyB2dWUtbXVsdGlzZWxlY3QgZG9lc24ndCBzdXBwb3J0IHRoZSBhdXRvZm9jdXMgYXR0cmlidXRlLiBXZSBuZWVkIHRvXG4gICAgICAvLyBoYW5kbGUgaXQgaGVyZS5cbiAgICAgIHRoaXMuZm9jdXMoKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gQG92ZXJyaWRlXG4gICAgZ2V0TGlzdGVuZXJzKCkge1xuICAgICAgLy8gb3ZlcnJpZGUgYFR5cGVNaXhpbi5nZXRMaXN0ZW5lcnMoKWAgdG8gcmUtcm91dGUgJ2lucHV0JyB0byBgb25DaGFuZ2UoKWBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIGJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBpbnB1dDogdGhpcy5vbkNoYW5nZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhZGRUYWdPcHRpb24odGFnKSB7XG4gICAgICBpZiAodGhpcy50YWdnYWJsZSkge1xuICAgICAgICBjb25zdCB7IG9wdGlvbkxhYmVsLCBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgICBjb25zdCBvcHRpb24gPSBvcHRpb25MYWJlbCAmJiBvcHRpb25WYWx1ZVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgW29wdGlvbkxhYmVsXTogdGFnLFxuICAgICAgICAgICAgLy8gVE9ETzogRGVmaW5lIGEgc2ltcGxlIHNjaGVtYSBvcHRpb24gdG8gY29udmVydCB0aGUgdGFnIHZhbHVlIHRvXG4gICAgICAgICAgICAvLyBzb21ldGhpbmcgZWxzZSwgZS5nLiBgdG9UYWc6IHRhZyA9PiB1bmRlcnNjb3JlKHRhZylgXG4gICAgICAgICAgICBbb3B0aW9uVmFsdWVdOiB0YWdcbiAgICAgICAgICB9XG4gICAgICAgICAgOiB0YWdcbiAgICAgICAgdGhpcy5vcHRpb25zLnB1c2gob3B0aW9uKVxuICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJHJlZnMuZWxlbWVudC5hY3RpdmF0ZSgpXG4gICAgfSxcblxuICAgIG9uQWRkVGFnKHRhZykge1xuICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5hZGRUYWdPcHRpb24odGFnKVxuICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICB0aGlzLnZhbHVlLnB1c2godGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblNlYXJjaENoYW5nZShxdWVyeSkge1xuICAgICAgaWYgKHRoaXMuc2VhcmNoRmlsdGVyKSB7XG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgIC8vIFNldCBgc2VhcmNoZWRPcHRpb25zYCB0byBhbiBlbXB0eSBhcnJheSwgYmVmb3JlIGl0IHdpbGwgYmVcbiAgICAgICAgICAvLyBwb3B1bGF0ZWQgYXN5bmNocm9ub3VzbHkgd2l0aCB0aGUgYWN0dWFsIHJlc3VsdHMuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBbXVxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gYXdhaXQgdGhpcy5yZXNvbHZlRGF0YShcbiAgICAgICAgICAgICgpID0+IHRoaXMuc2VhcmNoRmlsdGVyKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHF1ZXJ5IH0pKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDbGVhciBgc2VhcmNoZWRPcHRpb25zYCB3aGVuIHRoZSBxdWVyeSBpcyBjbGVhcmVkLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgaW5wdXRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSAhPT0gbnVsbCA/IHRoaXMudmFsdWUgOiAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZSAhPT0gJydcbiAgICAgICAgICA/IHRoaXMuaXNJbnRlZ2VyID8gcGFyc2VJbnQodmFsdWUsIDEwKSA6IHBhcnNlRmxvYXQodmFsdWUpXG4gICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGlzSW50ZWdlcigpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzdGVwVmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGVwID09IG51bGwgJiYgIXRoaXMuaXNJbnRlZ2VyID8gJ2FueScgOiB0aGlzLnN0ZXBcbiAgICB9LFxuXG4gICAgZGVjaW1hbHM6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWNpbWFscycsIHtcbiAgICAgIHR5cGU6IE51bWJlclxuICAgIH0pLFxuXG4gICAgc3RlcDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0ZXAnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQoc3RlcCkge1xuICAgICAgICAvLyBGb3IgaW50ZWdlcnMsIHJvdW5kIHRoZSBzdGVwcyB0byB0aGUgbmV4dCBiaWdnZXIgaW50ZWdlciB2YWx1ZTpcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIHN0ZXAgIT0gbnVsbCA/IE1hdGguY2VpbChzdGVwKSA6IHN0ZXBcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1pbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ21pbicsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtaW4pIHtcbiAgICAgICAgbWluID0gbWluID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzBdXG4gICAgICAgICAgOiBtaW5cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1pbiAhPSBudWxsID8gTWF0aC5mbG9vcihtaW4pIDogbWluXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXg6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXgnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQobWF4KSB7XG4gICAgICAgIG1heCA9IG1heCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdyYW5nZScsIHsgdHlwZTogQXJyYXkgfSk/LlsxXVxuICAgICAgICAgIDogbWF4XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBtYXggIT0gbnVsbCA/IE1hdGguY2VpbChtYXgpIDogbWF4XG4gICAgICB9XG4gICAgfSksXG5cbiAgICByYW5nZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JhbmdlJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIGB0aGlzLm1pbmAsIGB0aGlzLm1heGAgYWxyZWFkeSBzdXBwb3J0IGBzY2hlbWEucmFuZ2VgLFxuICAgICAgICAvLyBzbyByZWRpcmVjdCB0aGVyZS5cbiAgICAgICAgY29uc3QgeyBtaW4sIG1heCB9ID0gdGhpc1xuICAgICAgICByZXR1cm4gbWluICE9IG51bGwgJiYgbWF4ICE9IG51bGwgPyBbbWluLCBtYXhdIDogdW5kZWZpbmVkXG4gICAgICB9LFxuXG4gICAgICBzZXQocmFuZ2UpIHtcbiAgICAgICAgLy8gUHJvdmlkZSBhIHNldHRlciB0aGF0IGRlbGVnYXRlcyB0byBgW3RoaXMubWluLCB0aGlzLm1heF1gLFxuICAgICAgICAvLyBzaW5jZSB0aG9zZSBhbHJlYWR5IGhhbmRsZSBgc2NoZW1hLnJhbmdlYC5cbiAgICAgICAgaWYgKGlzQXJyYXkocmFuZ2UpKSB7XG4gICAgICAgICAgW3RoaXMubWluLCB0aGlzLm1heF0gPSByYW5nZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHt9XG4gICAgICBjb25zdCB7IHJhbmdlLCBtaW4sIG1heCwgZGVjaW1hbHMsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yYW5nZSA9IHJhbmdlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobWluICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5taW4gPSBtaW5cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4ICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5tYXggPSBtYXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRlY2ltYWxzICE9IG51bGwpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgfSBlbHNlIGlmIChzdGVwKSB7XG4gICAgICAgIGNvbnN0IGRlY2ltYWxzID0gKGAke3N0ZXB9YC5zcGxpdCgnLicpWzFdIHx8ICcnKS5sZW5ndGhcbiAgICAgICAgaWYgKGRlY2ltYWxzID4gMCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmRlY2ltYWxzID0gZGVjaW1hbHNcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc0ludGVnZXIpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuaW50ZWdlciA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uc1xuICAgIH1cbiAgfVxufVxuIiwiXG5pbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgdHlwZT1cIm51bWJlclwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuICA6bWluPVwibWluXCJcbiAgOm1heD1cIm1heFwiXG4gIDpzdGVwPVwic3RlcFZhbHVlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB0eXBlPVwibnVtYmVyXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLy8gT25seSBzaG93IHNwaW4gYnV0dG9ucyBpZiB0aGUgbnVtYmVyIGNvbXBvbmVudCBkZWZpbmVzIGEgc3RlcCBzaXplLlxuICBpbnB1dFt0eXBlPVwibnVtYmVyXCJdOm5vdChbc3RlcF0pXG4gICAgJjo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgICAmOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uXG4gICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmVcbiAgICAgIG1hcmdpbjogMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWknXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnbnVtYmVyJywgJ2ludGVnZXInXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGlzSW50ZWdlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdpbnRlZ2VyJ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1vYmplY3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuKVxuICAuZGl0by1vYmplY3QtY29udGVudChcbiAgICB2LWlmPVwib2JqZWN0RGF0YVwiXG4gIClcbiAgICAvLyBTdXBwb3J0IHRoZSBzYW1lIHJlbmRlcmluZyBvcHRpb25zIGFzIFR5cGVMaXN0OlxuICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIG9iamVjdERhdGEsIGNvbnRleHQpXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIClcbiAgICBjb21wb25lbnQoXG4gICAgICB2LWVsc2UtaWY9XCJjb21wb25lbnRcIlxuICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KCkpXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZVxuICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgb2JqZWN0RGF0YSlcIlxuICAgIClcbiAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgOmRlbGV0YWJsZT1cIm9iamVjdERhdGEgJiYgZGVsZXRhYmxlXCJcbiAgICA6ZWRpdGFibGU9XCJvYmplY3REYXRhICYmIGVkaXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgOnBhdGg9XCJwYXRoXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShvYmplY3REYXRhKVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLW9iamVjdChcbiAgICB2LWlmPVwiaXNSZWFkeVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gICAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbiAgKVxuICAgIC5kaXRvLW9iamVjdC1jb250ZW50KFxuICAgICAgdi1pZj1cIm9iamVjdERhdGFcIlxuICAgIClcbiAgICAgIC8vIFN1cHBvcnQgdGhlIHNhbWUgcmVuZGVyaW5nIG9wdGlvbnMgYXMgVHlwZUxpc3Q6XG4gICAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgb2JqZWN0RGF0YSwgY29udGV4dClcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgIClcbiAgICAgIGNvbXBvbmVudChcbiAgICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoKSlcIlxuICAgICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1lbHNlXG4gICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIG9iamVjdERhdGEpXCJcbiAgICAgIClcbiAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgOmRlbGV0YWJsZT1cIm9iamVjdERhdGEgJiYgZGVsZXRhYmxlXCJcbiAgICAgIDplZGl0YWJsZT1cIm9iamVjdERhdGEgJiYgZWRpdGFibGVcIlxuICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDpwYXRoPVwicGF0aFwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0ob2JqZWN0RGF0YSlcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1vYmplY3RcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICBtYXJnaW46IDBcbiAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgIC5kaXRvLW9iamVjdC1jb250ZW50XG4gICAgICBmbGV4OiAwIDEgMTAwJVxuICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgZmxleDogMSAwIDAlXG4gICAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignb2JqZWN0Jywge1xuICBtaXhpbnM6IFtTb3VyY2VNaXhpbl0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgLy8gTm8gbmVlZCBmb3IgdHJhbnNmb3JtYXRpb24gaGVyZS4gU2VlIFR5cGVUcmVlTGlzdCBmb3IgZGV0YWlscy5cbiAgICByZXR1cm4gdHlwZVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IGRhdGE6IHRoaXMub2JqZWN0RGF0YSB9KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdwYW5lbCcsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gIG9taXRQYWRkaW5nOiB0cnVlLFxuXG4gIGdldFBhbmVsU2NoZW1hKHNjaGVtYSkge1xuICAgIC8vIEZvciBhIFR5cGVQYW5lbCwgdGhlIGNvbXBvbmVudCBzY2hlbWEgaXMgYWxzbyB0aGUgcGFuZWwgc2NoZW1hLCBidXRcbiAgICAvLyByZW1vdmUgdGhlIGFkZGVkIG5hbWUsIHNvIGl0IGRvZXNuJ3QgZ2V0IGFwcGVuZGVkIHR3aWNlIHRvIGRhdGEtcGF0aC5cbiAgICBjb25zdCB7IG5hbWUsIC4uLnBhbmVsIH0gPSBzY2hlbWFcbiAgICByZXR1cm4gcGFuZWxcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5wcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6dmFsdWU9XCJwcm9ncmVzc1ZhbHVlXCJcbiAgOm1heD1cInByb2dyZXNzTWF4XCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOnZhbHVlPVwicHJvZ3Jlc3NWYWx1ZVwiXG4gICAgOm1heD1cInByb2dyZXNzTWF4XCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncHJvZ3Jlc3MnLCB7XG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBwcm9ncmVzc1ZhbHVlKCkge1xuICAgICAgbGV0IHsgdmFsdWUsIHJhbmdlLCBzdGVwIH0gPSB0aGlzXG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgdmFsdWUgLT0gcmFuZ2VbMF1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcCkge1xuICAgICAgICAgIHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSAvIHN0ZXApICogc3RlcFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICcnXG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgcHJvZ3Jlc3NNYXgoKSB7XG4gICAgICBjb25zdCB7IHJhbmdlIH0gPSB0aGlzXG4gICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHJhbmdlWzFdIC0gcmFuZ2VbMF1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudWwuZGl0by1yYWRpby1idXR0b25zKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbilcbiAgbGkodi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiKVxuICAgIGxhYmVsXG4gICAgICBpbnB1dC5kaXRvLXJhZGlvLWJ1dHRvbihcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdWwuZGl0by1yYWRpby1idXR0b25zKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4gIClcbiAgICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgICBsYWJlbFxuICAgICAgICBpbnB1dC5kaXRvLXJhZGlvLWJ1dHRvbihcbiAgICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgICAgKVxuICAgICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1yYWRpby1idXR0b25zXG4gICAgbGFiZWxcbiAgICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3NcbiAgICAuZGl0by1yYWRpby1idXR0b25cbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdyYWRpbycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zZWN0aW9uKFxuICA6Y2xhc3M9XCJ7ICdkaXRvLXNlY3Rpb24tbGFiZWxsZWQnIDogISFzY2hlbWEubGFiZWwgfVwiXG4pXG4gIGRpdG8tcGFuZS5kaXRvLXNlY3Rpb24tcGFuZShcbiAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zZWN0aW9uKFxuICAgIDpjbGFzcz1cInsgJ2RpdG8tc2VjdGlvbi1sYWJlbGxlZCcgOiAhIXNjaGVtYS5sYWJlbCB9XCJcbiAgKVxuICAgIGRpdG8tcGFuZS5kaXRvLXNlY3Rpb24tcGFuZShcbiAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zZWN0aW9uXG4gICAgJi5kaXRvLXNlY3Rpb24tbGFiZWxsZWRcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmdcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0SXRlbUZvcm1TY2hlbWEsIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VjdGlvbicsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+ICFzY2hlbWEubmVzdGVkICYmICEoJ2RlZmF1bHQnIGluIHNjaGVtYSksXG4gIGRlZmF1bHROZXN0ZWQ6IGZhbHNlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcbiAgb21pdEZsZXhHcm93OiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMudmFsdWUgOiB0aGlzLmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEl0ZW1Gb3JtU2NoZW1hXG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCkge1xuICAgIC8vIFByb2Nlc3Mgc2VjdGlvbiBjb21wb25lbnRzIHNvIHRoZWlyIGZvcm1zIGdldCByZXNvbHZlZCB0b28uXG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwpXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuLmRpdG8tc2VsZWN0XG4gIHNlbGVjdChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIEBtb3VzZWRvd249XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIEBmb2N1cz1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJwb3B1bGF0ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICAgICAgKVxuICAgICAgICBvcHRncm91cChcbiAgICAgICAgICB2LWlmPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgOmxhYmVsPVwib3B0aW9uW2dyb3VwQnlMYWJlbF1cIlxuICAgICAgICApXG4gICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgdi1mb3I9XCJvcHQgaW4gb3B0aW9uW2dyb3VwQnlPcHRpb25zXVwiXG4gICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHQpXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdCkgfX1cbiAgICAgICAgb3B0aW9uKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZWxzZS1pZj1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICApXG4gICAgICBvcHRpb24oXG4gICAgICAgIDp2YWx1ZT1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihzZWxlY3RlZE9wdGlvbikgfX1cbiAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuICAuZGl0by1zZWxlY3RcbiAgICBzZWxlY3QoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICBAbW91c2Vkb3duPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICAgIEBmb2N1cz1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJwb3B1bGF0ZVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgb3B0Z3JvdXAoXG4gICAgICAgICAgICB2LWlmPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgICA6bGFiZWw9XCJvcHRpb25bZ3JvdXBCeUxhYmVsXVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgICB2LWZvcj1cIm9wdCBpbiBvcHRpb25bZ3JvdXBCeU9wdGlvbnNdXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0KVwiXG4gICAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdCkgfX1cbiAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICAgIClcbiAgICAgICAgb3B0aW9uKFxuICAgICAgICAgIDp2YWx1ZT1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKHNlbGVjdGVkT3B0aW9uKSB9fVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC8vIFRPRE86IE1vdmUgdG8gZGl0by11aVxuICAkc2VsZWN0LWFycm93LXJpZ2h0OiBjYWxjKCgkc2VsZWN0LWFycm93LXdpZHRoIC0gJHNlbGVjdC1hcnJvdy1zaXplKSAvIDIpXG5cbiAgLmRpdG8tc2VsZWN0XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG5cbiAgICBzZWxlY3RcbiAgICAgIHBhZGRpbmctcmlnaHQ6ICRzZWxlY3QtYXJyb3ctd2lkdGhcblxuICAgIC8vIEhhbmRsZSAuZGl0by13aWR0aC1maWxsIHNlcGFyYXRlbHkgZHVlIHRvIHJlcXVpcmVkIG5lc3Rpbmcgb2Ygc2VsZWN0OlxuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICBzZWxlY3RcbiAgICAgICAgd2lkdGg6IDEwMCVcblxuICAgICY6OmFmdGVyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICthcnJvdygkc2VsZWN0LWFycm93LXNpemUpXG4gICAgICBib3R0b206ICRzZWxlY3QtYXJyb3ctYm90dG9tXG4gICAgICByaWdodDogY2FsYygjeyRzZWxlY3QtYXJyb3ctcmlnaHR9ICsgI3skYm9yZGVyLXdpZHRofSlcblxuICAgICYuZGl0by1kaXNhYmxlZDo6YWZ0ZXJcbiAgICAgIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzZWxlY3QnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gRGlzYWJsZSBsYXp5LXBvcHVsYXRpb24gZm9yIG5vdy5cbiAgICAgIC8vIFRPRE86IFNldCB0byBgZmFsc2VgIE9uY2UgbGluZXRvIGUyZSB0ZXN0cyBhZGRyZXNzIHRoZWlyIGlzc3Vlcy5cbiAgICAgIHBvcHVsYXRlOiB0cnVlXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXNsaWRlclxuICBpbnB1dC5kaXRvLXJhbmdlKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB0eXBlPVwicmFuZ2VcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbiAgaW5wdXQtZmllbGQuZGl0by1udW1iZXIoXG4gICAgdi1pZj1cImlucHV0XCJcbiAgICB0eXBlPVwibnVtYmVyXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zbGlkZXJcbiAgICBpbnB1dC5kaXRvLXJhbmdlKFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICB0eXBlPVwicmFuZ2VcIlxuICAgICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIDptaW49XCJtaW5cIlxuICAgICAgOm1heD1cIm1heFwiXG4gICAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gICAgKVxuICAgIGlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICAgICAgdi1pZj1cImlucHV0XCJcbiAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIDptaW49XCJtaW5cIlxuICAgICAgOm1heD1cIm1heFwiXG4gICAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXNsaWRlclxuICAgIEBleHRlbmQgJWlucHV0XG4gICAgZGlzcGxheTogZmxleFxuICAgIC5kaXRvLXJhbmdlXG4gICAgICBmbGV4OiBhdXRvXG4gICAgICBoZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpKVxuICAgIC5kaXRvLW51bWJlclxuICAgICAgYm9yZGVyOiAwXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICB0ZXh0LWFsaWduOiByaWdodFxuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2xpZGVyJywge1xuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGlucHV0OiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuc3dpdGNoLWJ1dHRvbi5kaXRvLXN3aXRjaChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnN5bmM9XCJ0cnVlXCJcbiAgOmxhYmVscz1cImxhYmVsc1wiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHN3aXRjaC1idXR0b24uZGl0by1zd2l0Y2goXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpzeW5jPVwidHJ1ZVwiXG4gICAgOmxhYmVscz1cImxhYmVsc1wiXG4gICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXN3aXRjaFxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IFN3aXRjaEJ1dHRvbiB9IGZyb20gJ0BkaXRvanMvdWknXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzd2l0Y2gnLCB7XG4gIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBTd2l0Y2hCdXR0b25cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5sYWJlbHNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuaW5wdXQtZmllbGQuZGl0by10ZXh0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6dHlwZT1cImlucHV0VHlwZVwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQtZmllbGQuZGl0by10ZXh0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6dHlwZT1cImlucHV0VHlwZVwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpJ1xuXG5jb25zdCBtYXNrZWRQYXNzd29yZCA9ICcqKioqKioqKioqKioqKioqJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ3RleHQnLCAnZW1haWwnLCAndXJsJywgJ2hvc3RuYW1lJywgJ2RvbWFpbicsICd0ZWwnLCAncGFzc3dvcmQnLCAnY3JlZGl0Y2FyZCdcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gc2NoZW1hLnR5cGUgPT09ICdwYXNzd29yZCcsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpbnB1dFR5cGUoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjcmVkaXRjYXJkOiAndGV4dCcsXG4gICAgICAgIGhvc3RuYW1lOiAndGV4dCcsXG4gICAgICAgIGRvbWFpbjogJ3RleHQnXG4gICAgICB9W3RoaXMudHlwZV0gfHwgdGhpcy50eXBlXG4gICAgfSxcblxuICAgIGlucHV0VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB0aGlzLnR5cGUgPT09ICdwYXNzd29yZCcgJiZcbiAgICAgICAgICB0aGlzLnZhbHVlID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAhdGhpcy5mb2N1c2VkXG4gICAgICAgIClcbiAgICAgICAgICA/IG1hc2tlZFBhc3N3b3JkXG4gICAgICAgICAgOiB0aGlzLnZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHJ1bGUgPSB7XG4gICAgICAgIGVtYWlsOiAnZW1haWwnLFxuICAgICAgICB1cmw6ICd1cmwnLFxuICAgICAgICBob3N0bmFtZTogJ2hvc3RuYW1lJyxcbiAgICAgICAgZG9tYWluOiAnZG9tYWluJyxcbiAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZCcsXG4gICAgICAgIGNyZWRpdGNhcmQ6ICdjcmVkaXRjYXJkJ1xuICAgICAgfVt0aGlzLnR5cGVdXG4gICAgICByZXR1cm4gcnVsZSA/IHsgW3J1bGVdOiB0cnVlIH0gOiB7fVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG50ZXh0YXJlYS5kaXRvLXRleHRhcmVhLmRpdG8taW5wdXQoXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgOnJvd3M9XCJsaW5lc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tcmVzaXphYmxlJzogcmVzaXphYmxlIH1cIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdGV4dGFyZWEuZGl0by10ZXh0YXJlYS5kaXRvLWlucHV0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDpyb3dzPVwibGluZXNcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tcmVzaXphYmxlJzogcmVzaXphYmxlIH1cIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tdGV4dGFyZWFcbiAgICBkaXNwbGF5OiBibG9ja1xuICAgIHJlc2l6ZTogbm9uZVxuICAgIG1pbi1oZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpICsgI3sgMiAqICRpbnB1dC1wYWRkaW5nLXZlciB9KVxuICAgICYuZGl0by1yZXNpemFibGVcbiAgICAgIHJlc2l6ZTogdmVydGljYWxcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3RleHRhcmVhJywge1xuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgNFxuICAgIH0sXG5cbiAgICByZXNpemFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXNpemFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXRyZWUtbGlzdFxuICBkaXRvLXNjb3BlcyhcbiAgICB2LWlmPVwic2NvcGVzXCJcbiAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gIClcbiAgLmRpdG8tdHJlZS1wYW5lbFxuICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgOnNjaGVtYT1cInRyZWVTY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwidHJlZURhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwidHJlZURhdGFcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6b3Blbj1cInRydWVcIlxuICAgIClcbiAgICAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyKFxuICAgICAgdi1pZj1cImhhc0VkaXRhYmxlRm9ybXNcIlxuICAgIClcbiAgICAgIC8vIEluY2x1ZGUgYSByb3V0ZXItdmlldyBmb3IgdGhlIG9wdGlvbmFsIERpdG9Gb3JtSW5saW5lZFxuICAgICAgcm91dGVyLXZpZXdcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRyZWUtbGlzdFxuICAgIGRpdG8tc2NvcGVzKFxuICAgICAgdi1pZj1cInNjb3Blc1wiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgICApXG4gICAgLmRpdG8tdHJlZS1wYW5lbFxuICAgICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICAgIDpzY2hlbWE9XCJ0cmVlU2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwidHJlZURhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJ0cmVlRGF0YVwiXG4gICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICA6b3Blbj1cInRydWVcIlxuICAgICAgKVxuICAgICAgLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lcihcbiAgICAgICAgdi1pZj1cImhhc0VkaXRhYmxlRm9ybXNcIlxuICAgICAgKVxuICAgICAgICAvLyBJbmNsdWRlIGEgcm91dGVyLXZpZXcgZm9yIHRoZSBvcHRpb25hbCBEaXRvRm9ybUlubGluZWRcbiAgICAgICAgcm91dGVyLXZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by10cmVlLWxpc3RcbiAgICBAZXh0ZW5kICVmaWVsZFxuICAgIC5kaXRvLXRyZWUtcGFuZWxcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgICAgPiAuZGl0by10cmVlLWl0ZW1cbiAgICAgICAgZmxleDogMSAxIDI1JVxuICAgICAgPiAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyXG4gICAgICAgIGZsZXg6IDAgMSA3NSVcbiAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaFxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDFcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMVxuICAgICAgICBtYXJnaW46ICgtJGlucHV0LXBhZGRpbmctdmVyKSAoLSRpbnB1dC1wYWRkaW5nLWhvcilcbiAgICAgICAgbWFyZ2luLWxlZnQ6ICRpbnB1dC1wYWRkaW5nLWhvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgaGFzRm9ybVNjaGVtYSwgZ2V0Rm9ybVNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAndHJlZS1saXN0JywgJ3RyZWUtb2JqZWN0J1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7IGNvbnRhaW5lcjogdGhpcyB9XG4gIH0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgPT09ICd0cmVlLW9iamVjdCcgPyAnb2JqZWN0JyA6ICdsaXN0J1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGF0aCgpIHtcbiAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5wYXRoYDpcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LnBhdGhcbiAgICB9LFxuXG4gICAgZWRpdFBhdGgoKSB7XG4gICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIuZWRpdFBhdGhgOlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGguc2xpY2UodGhpcy5wYXRoPy5sZW5ndGgpXG4gICAgfSxcblxuICAgIHRyZWVEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgID8geyBbdGhpcy5uYW1lXTogdGhpcy52YWx1ZSB9XG4gICAgICAgIDogdGhpcy52YWx1ZVxuICAgIH0sXG5cbiAgICB0cmVlRGF0YVBhdGgoKSB7XG4gICAgICAvLyBSZW1vdmUgYG5hbWVgIGZyb20gYGRhdGFQYXRoYCwgYXMgaXQgaXMgYWRkZWVkXG4gICAgICAvLyB0byBgdHJlZURhdGFgIGFuZCBgdHJlZVNjaGVtYWBcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHRoaXMuZGF0YVBhdGguc2xpY2UoMCwgdGhpcy5kYXRhUGF0aC5sZW5ndGggLSB0aGlzLm5hbWUubGVuZ3RoKVxuICAgICAgICA6IHRoaXMuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgdHJlZVNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHtcbiAgICAgICAgICBjaGlsZHJlbjoge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgLi4udGhpcy5zY2hlbWFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgOiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBoYXNFZGl0YWJsZUZvcm1zKCkge1xuICAgICAgY29uc3QgaGFzRWRpdGFibGVGb3JtcyA9IHNjaGVtYSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmIChcbiAgICAgICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2VkaXRhYmxlJywge1xuICAgICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgc2NoZW1hXG4gICAgICAgICAgICB9KSB8fFxuICAgICAgICAgICAgc2NoZW1hLmNoaWxkcmVuICYmXG4gICAgICAgICAgICBoYXNFZGl0YWJsZUZvcm1zKHNjaGVtYS5jaGlsZHJlbilcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNFZGl0YWJsZUZvcm1zKHRoaXMuc2NoZW1hKVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgIG5lc3RlZCA9IHRydWUsIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgICAgbmVzdGVkLCBmbGF0dGVuLFxuICAgICAgLy8gUGFzcyBwcm9jZXNzKCkgdG8gYWRkIG1vcmUgcm91dGVzIHRvIGNoaWxkUm91dGVzOlxuICAgICAgKGNoaWxkUm91dGVzLCBsZXZlbCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgLy8gQWRkIGB0eXBlYCB0byB0aGUgbmVzdGVkIHRyZWUgbGlzdC5cbiAgICAgICAgICBjaGlsZHJlbi50eXBlID0gJ3RyZWUtbGlzdCdcbiAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2NoZW1hKFxuICAgICAgICAgICAgYXBpLCBjaGlsZHJlbiwgY2hpbGRyZW4ubmFtZSwgY2hpbGRSb3V0ZXMsIGxldmVsLFxuICAgICAgICAgICAgbmVzdGVkLCB0cnVlLCAvLyBQYXNzIGB0cnVlYCBmb3IgYGZsYXR0ZW5gIGluIHRyZWUgbGlzdHMuXG4gICAgICAgICAgICBwcm9jZXNzXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuICB9LFxuXG4gIGdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyhzY2hlbWEsIGNvbnRleHQpIHtcbiAgICAvLyBDb252ZXJ0IG5lc3RlZCBjaGlsZHJlbiBzY2hlbWEgdG8gc3RhbmQtYWxvbmUgc2NoZW1hIGNvbXBvbmVudCxcbiAgICAvLyBwcmVzZW50IGluIGVhY2ggb2YgdGhlIGZvcm1zLCBhcyByZXF1aXJlZCBieSBgcHJvY2Vzc1NjaGVtYURhdGEoKWBcbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICByZXR1cm4gZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0LCBjaGlsZHJlblxuICAgICAgPyBmb3JtID0+ICh7XG4gICAgICAgIC4uLmZvcm0sXG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAuLi5mb3JtLmNvbXBvbmVudHMsXG4gICAgICAgICAgW2NoaWxkcmVuLm5hbWVdOiBjaGlsZHJlblxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgOiBudWxsXG4gICAgKVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgZmlsZXNpemUgZnJvbSAnZmlsZXNpemUnXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRGaWxlU2l6ZShzaXplKSB7XG4gIHJldHVybiBmaWxlc2l6ZShzaXplLCB7IGJhc2U6IDEwIH0pXG59XG4iLCJcbi5kaXRvLXVwbG9hZFxuICB0YWJsZS5kaXRvLXRhYmxlLmRpdG8tdGFibGUtc2VwYXJhdG9ycy5kaXRvLXRhYmxlLWJhY2tncm91bmRcbiAgICAvLy0gU3R5bGluZyBjb21lcyBmcm9tIERpdG9UYWJsZUhlYWRcbiAgICB0aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgICAgIHRyXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBOYW1lXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBTaXplXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBTdGF0dXNcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuXG4gICAgdnVlLWRyYWdnYWJsZShcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgOmxpc3Q9XCJmaWxlc1wiXG4gICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCIoZmlsZSwgaW5kZXgpIGluIGZpbGVzXCJcbiAgICAgICAgOmtleT1cImZpbGUua2V5XCJcbiAgICAgIClcbiAgICAgICAgdGQodi1odG1sPVwicmVuZGVyRmlsZShmaWxlLCBpbmRleClcIilcbiAgICAgICAgdGQge3sgZmlsZS5zaXplIHwgZm9ybWF0RmlsZVNpemUgfX1cbiAgICAgICAgdGRcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWRcIilcbiAgICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJmaWxlLnVwbG9hZC5lcnJvclwiKVxuICAgICAgICAgICAgICB8IEVycm9yOiB7eyBmaWxlLnVwbG9hZC5lcnJvciB9fVxuICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuYWN0aXZlXCIpXG4gICAgICAgICAgICAgIHwgVXBsb2FkaW5nLi4uXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5zdWNjZXNzXCIpXG4gICAgICAgICAgICAgIHwgVXBsb2FkZWRcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UpXG4gICAgICAgICAgICB8IFN0b3JlZFxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zXG4gICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiZGVsZXRlRmlsZShmaWxlLCBpbmRleClcIlxuICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICAgICAgKVxuICAgIHRmb290XG4gICAgICB0clxuICAgICAgICB0ZCg6Y29sc3Bhbj1cIjRcIilcbiAgICAgICAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICAgICAgICBwcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICA6dmFsdWU9XCJ1cGxvYWRQcm9ncmVzc1wiXG4gICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICkgQ2FuY2VsIEFsbFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiaXNVcGxvYWRSZWFkeVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICkgVXBsb2FkIEFsbFxuICAgICAgICAgICAgICB2dWUtdXBsb2FkLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWFkZC11cGxvYWQoXG4gICAgICAgICAgICAgICAgOmlucHV0LWlkPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICAgIDpuYW1lPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICA6cG9zdC1hY3Rpb249XCJ1cGxvYWRQYXRoXCJcbiAgICAgICAgICAgICAgICA6ZXh0ZW5zaW9ucz1cImV4dGVuc2lvbnNcIlxuICAgICAgICAgICAgICAgIDphY2NlcHQ9XCJhY2NlcHRcIlxuICAgICAgICAgICAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICA6c2l6ZT1cIm1heFNpemVcIlxuICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1cGxvYWRzXCJcbiAgICAgICAgICAgICAgICBAaW5wdXQtZmlsdGVyPVwiaW5wdXRGaWx0ZXJcIlxuICAgICAgICAgICAgICAgIEBpbnB1dC1maWxlPVwiaW5wdXRGaWxlXCJcbiAgICAgICAgICAgICAgICByZWY9XCJ1cGxvYWRcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwiVXBsb2FkIEZpbGVzXCJcbiAgICAgICAgICAgICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdXBsb2FkXG4gICAgdGFibGUuZGl0by10YWJsZS5kaXRvLXRhYmxlLXNlcGFyYXRvcnMuZGl0by10YWJsZS1iYWNrZ3JvdW5kXG4gICAgICAvLy0gU3R5bGluZyBjb21lcyBmcm9tIERpdG9UYWJsZUhlYWRcbiAgICAgIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgICAgICB0clxuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuIE5hbWVcbiAgICAgICAgICB0aFxuICAgICAgICAgICAgc3BhbiBTaXplXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW4gU3RhdHVzXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW5cbiAgICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICAgIDpsaXN0PVwiZmlsZXNcIlxuICAgICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgICAgKVxuICAgICAgICB0cihcbiAgICAgICAgICB2LWZvcj1cIihmaWxlLCBpbmRleCkgaW4gZmlsZXNcIlxuICAgICAgICAgIDprZXk9XCJmaWxlLmtleVwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZCh2LWh0bWw9XCJyZW5kZXJGaWxlKGZpbGUsIGluZGV4KVwiKVxuICAgICAgICAgIHRkIHt7IGZpbGUuc2l6ZSB8IGZvcm1hdEZpbGVTaXplIH19XG4gICAgICAgICAgdGRcbiAgICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJmaWxlLnVwbG9hZFwiKVxuICAgICAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWQuZXJyb3JcIilcbiAgICAgICAgICAgICAgICB8IEVycm9yOiB7eyBmaWxlLnVwbG9hZC5lcnJvciB9fVxuICAgICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5hY3RpdmVcIilcbiAgICAgICAgICAgICAgICB8IFVwbG9hZGluZy4uLlxuICAgICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5zdWNjZXNzXCIpXG4gICAgICAgICAgICAgICAgfCBVcGxvYWRlZFxuICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgICAgICB8IFN0b3JlZFxuICAgICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnNcbiAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICAgICAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cImRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICAgICAgICApXG4gICAgICB0Zm9vdFxuICAgICAgICB0clxuICAgICAgICAgIHRkKDpjb2xzcGFuPVwiNFwiKVxuICAgICAgICAgICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgICAgICAgICBwcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgOnZhbHVlPVwidXBsb2FkUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKSBDYW5jZWwgQWxsXG4gICAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiaXNVcGxvYWRSZWFkeVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IHRydWVcIlxuICAgICAgICAgICAgICAgICkgVXBsb2FkIEFsbFxuICAgICAgICAgICAgICAgIHZ1ZS11cGxvYWQuZGl0by1idXR0b24uZGl0by1idXR0b24tYWRkLXVwbG9hZChcbiAgICAgICAgICAgICAgICAgIDppbnB1dC1pZD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICAgIDpuYW1lPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgOnBvc3QtYWN0aW9uPVwidXBsb2FkUGF0aFwiXG4gICAgICAgICAgICAgICAgICA6ZXh0ZW5zaW9ucz1cImV4dGVuc2lvbnNcIlxuICAgICAgICAgICAgICAgICAgOmFjY2VwdD1cImFjY2VwdFwiXG4gICAgICAgICAgICAgICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgICA6c2l6ZT1cIm1heFNpemVcIlxuICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInVwbG9hZHNcIlxuICAgICAgICAgICAgICAgICAgQGlucHV0LWZpbHRlcj1cImlucHV0RmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgIEBpbnB1dC1maWxlPVwiaW5wdXRGaWxlXCJcbiAgICAgICAgICAgICAgICAgIHJlZj1cInVwbG9hZFwiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIlVwbG9hZCBGaWxlc1wiXG4gICAgICAgICAgICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXVwbG9hZFxuICAgIC5kaXRvLXRhYmxlXG4gICAgICB0clxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlXG4gICAgLmRpdG8tYnV0dG9uLWFkZC11cGxvYWRcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgID4gKlxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZFxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlclxuICAgICAgLmRpdG8tcHJvZ3Jlc3NcbiAgICAgICAgZmxleDogYXV0b1xuICAgICAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IE9yZGVyZWRNaXhpbiBmcm9tICcuLi9taXhpbnMvT3JkZXJlZE1peGluLmpzJ1xuaW1wb3J0IFZ1ZVVwbG9hZCBmcm9tICd2dWUtdXBsb2FkLWNvbXBvbmVudCdcbmltcG9ydCBWdWVEcmFnZ2FibGUgZnJvbSAndnVlZHJhZ2dhYmxlJ1xuaW1wb3J0IHBhcnNlRmlsZVNpemUgZnJvbSAnZmlsZXNpemUtcGFyc2VyJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGZvcm1hdEZpbGVTaXplIH0gZnJvbSAnLi4vdXRpbHMvdW5pdHMuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBlc2NhcGVIdG1sIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3VwbG9hZCcsIHtcbiAgY29tcG9uZW50czogeyBWdWVVcGxvYWQsIFZ1ZURyYWdnYWJsZSB9LFxuICBmaWx0ZXJzOiB7IGZvcm1hdEZpbGVTaXplIH0sXG4gIG1peGluczogW09yZGVyZWRNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBsb2FkczogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB1cGxvYWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy51cGxvYWRcbiAgICB9LFxuXG4gICAgZmlsZXMoKSB7XG4gICAgICByZXR1cm4gYXNGaWxlcyh0aGlzLnZhbHVlKVxuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gTm8gY2FsbGJhY2sgYXMgaXQncyB1c2VkIGluIGBwcm9jZXNzVmFsdWUoKWBcbiAgICAgIGNhbGxiYWNrOiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZXh0ZW5zaW9uczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4dGVuc2lvbnMnLCB7XG4gICAgICB0eXBlOiBbQXJyYXksIFN0cmluZywgUmVnRXhwXVxuICAgIH0pLFxuXG4gICAgYWNjZXB0OiBnZXRTY2hlbWFBY2Nlc3NvcignYWNjZXB0Jywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoYWNjZXB0KSB7XG4gICAgICAgIHJldHVybiBpc0FycmF5KGFjY2VwdCkgPyBhY2NlcHQuam9pbignLCcpIDogYWNjZXB0XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXhTaXplOiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4U2l6ZScsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBnZXQobWF4U2l6ZSkge1xuICAgICAgICByZXR1cm4gbWF4U2l6ZSA/IHBhcnNlRmlsZVNpemUobWF4U2l6ZSkgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIGRyYWdnYWJsZSAmJiB0aGlzLmZpbGVzLmxlbmd0aCA+IDFcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgaXNVcGxvYWRSZWFkeSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZHMubGVuZ3RoICYmXG4gICAgICAgICEodGhpcy51cGxvYWQuYWN0aXZlIHx8IHRoaXMudXBsb2FkLnVwbG9hZGVkKVxuICAgIH0sXG5cbiAgICBpc1VwbG9hZEFjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZHMubGVuZ3RoICYmIHRoaXMudXBsb2FkLmFjdGl2ZVxuICAgIH0sXG5cbiAgICB1cGxvYWRQcm9ncmVzcygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMudXBsb2Fkcy5yZWR1Y2UoKHRvdGFsLCBmaWxlKSA9PiB0b3RhbCArIGZpbGUucHJvZ3Jlc3MsIDApIC9cbiAgICAgICAgdGhpcy51cGxvYWRzLmxlbmd0aFxuICAgICAgKVxuICAgIH0sXG5cbiAgICB1cGxvYWRQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VVcmwoe1xuICAgICAgICB0eXBlOiAndXBsb2FkJyxcbiAgICAgICAgcGF0aDogdGhpcy5hcGkubm9ybWFsaXplUGF0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbmRlckZpbGUoZmlsZSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgcmVuZGVyIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHJlbmRlclxuICAgICAgICA/IHJlbmRlci5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIHZhbHVlOiBmaWxlLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5maWxlcyxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgZGF0YVBhdGg6IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgOiBlc2NhcGVIdG1sKGZpbGUubmFtZSlcbiAgICB9LFxuXG4gICAgZGVsZXRlRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgY29uc3QgeyBuYW1lIH0gPSBmaWxlXG5cbiAgICAgIGlmIChmaWxlICYmIHdpbmRvdy5jb25maXJtKFxuICAgICAgICBgRG8geW91IHJlYWxseSB3YW50IHRvICR7dGhpcy52ZXJicy5yZW1vdmV9ICR7bmFtZX0/YClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbGUudXBsb2FkKSB7XG4gICAgICAgICAgdGhpcy51cGxvYWQucmVtb3ZlKGZpbGUudXBsb2FkKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICAgIHRleHQ6IGAke25hbWV9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRGaWxlSW5kZXgoZmlsZSkge1xuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgJiYgdGhpcy52YWx1ZVxuICAgICAgICA/IHRoaXMudmFsdWUuZmluZEluZGV4KGl0ID0+IGl0LmlkID09PSBmaWxlLmlkKVxuICAgICAgICA6IC0xXG4gICAgfSxcblxuICAgIGFkZEZpbGUoZmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goZmlsZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gW2ZpbGVdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBmaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlcGxhY2VGaWxlKGZpbGUsIG5ld0ZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRGaWxlSW5kZXgoZmlsZSlcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBpZiAobmV3RmlsZSkge1xuICAgICAgICAgICAgdGhpcy4kc2V0KHRoaXMudmFsdWUsIGluZGV4LCBuZXdGaWxlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXdGaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbW92ZUZpbGUoZmlsZSkge1xuICAgICAgdGhpcy5yZXBsYWNlRmlsZShmaWxlLCBudWxsKVxuICAgIH0sXG5cbiAgICBpbnB1dEZpbGUobmV3RmlsZSwgb2xkRmlsZSkge1xuICAgICAgaWYgKG5ld0ZpbGUgJiYgIW9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBpZCwgbmFtZSwgc2l6ZSB9ID0gbmV3RmlsZVxuICAgICAgICB0aGlzLmFkZEZpbGUoeyBpZCwgbmFtZSwgc2l6ZSwgdXBsb2FkOiBuZXdGaWxlIH0pXG4gICAgICB9XG4gICAgICBpZiAobmV3RmlsZSAmJiBvbGRGaWxlKSB7XG4gICAgICAgIGNvbnN0IHsgc3VjY2VzcywgZXJyb3IgfSA9IG5ld0ZpbGVcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgICBjb25zdCBmaWxlID0gbmV3RmlsZS5yZXNwb25zZVswXVxuICAgICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgICBmaWxlLnVwbG9hZCA9IG5ld0ZpbGVcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIHVwbG9hZCBmaWxlIG9iamVjdCB3aXRoIHRoZSBmaWxlIG9iamVjdCByZWNlaXZlZFxuICAgICAgICAgICAgLy8gZnJvbSB0aGUgdXBsb2FkIHJlc3BvbnNlLlxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlRmlsZShuZXdGaWxlLCBmaWxlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUobmV3RmlsZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zdCB0ZXh0ID0ge1xuICAgICAgICAgICAgYWJvcnQ6ICdVcGxvYWQgYWJvcnRlZCcsXG4gICAgICAgICAgICBkZW5pZWQ6ICdVcGxvYWQgZGVuaWVkJyxcbiAgICAgICAgICAgIGV4dGVuc2lvbjogYFVuc3VwcG9ydGVkIGZpbGUtdHlwZTogJHtuZXdGaWxlLm5hbWV9YCxcbiAgICAgICAgICAgIG5ldHdvcms6ICdOZXR3b3JrIGVycm9yIGVuY291bnRlcmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgc2VydmVyOiAnU2VydmVyIGVycm9yIG9jY3VycmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgc2l6ZTogYEZpbGUgaXMgdG9vIGxhcmdlOiAke2Zvcm1hdEZpbGVTaXplKG5ld0ZpbGUuc2l6ZSl9YCxcbiAgICAgICAgICAgIHRpbWVvdXQ6ICdUaW1lb3V0IG9jY3VycmVkIGR1cmluZyB1cGxvYWQnXG5cbiAgICAgICAgICB9W2Vycm9yXSB8fCBgVW5rbm93biBGaWxlIFVwbG9hZCBFcnJvcjogJyR7ZXJyb3J9J2BcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdGaWxlIFVwbG9hZCBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0XG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUobmV3RmlsZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBpbnB1dEZpbHRlcihuZXdGaWxlLyosIG9sZEZpbGUsIHByZXZlbnQgKi8pIHtcbiAgICAgIGNvbnN0IHhociA9IG5ld0ZpbGU/LnhoclxuICAgICAgaWYgKHRoaXMuYXBpLmNvcnM/LmNyZWRlbnRpYWxzICYmIHhociAmJiAheGhyLndpdGhDcmVkZW50aWFscykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgIC8vIEZpbHRlciBvdXQgYWxsIG5ld2x5IGFkZGVkIGZpbGVzIHRoYXQgd2VyZW4ndCBhY3R1YWxseSB1cGxvYWRlZC5cbiAgICBjb25zdCBmaWxlcyA9IGFzRmlsZXModmFsdWUpXG4gICAgICAubWFwKFxuICAgICAgICAoeyB1cGxvYWQsIC4uLmZpbGUgfSkgPT4gIXVwbG9hZCB8fCB1cGxvYWQuc3VjY2VzcyA/IGZpbGUgOiBudWxsXG4gICAgICApXG4gICAgICAuZmlsdGVyKGZpbGUgPT4gZmlsZSlcbiAgICByZXR1cm4gc2NoZW1hLm11bHRpcGxlID8gZmlsZXMgOiBmaWxlc1swXSB8fCBudWxsXG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGFzRmlsZXModmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID8gYXNBcnJheSh2YWx1ZSkgOiBbXVxufVxuXG48L3NjcmlwdD5cbiIsImV4cG9ydCBkZWZhdWx0IFtcbiAgJ2NyZWF0ZScsICdjcmVhdGVkJyxcbiAgJ3NhdmUnLCAnc2F2ZWQnLFxuICAnc3VibWl0JywgJ3N1Ym1pdHRlZCcsXG4gICdkZWxldGUnLCAnZGVsZXRlZCcsXG4gICdlZGl0JywgJ2VkaXRlZCcsXG4gICdjbG9zZScsICdjbG9zZWQnLFxuICAnY2FuY2VsJywgJ2NhbmNlbGxlZCcsXG4gICdkcmFnJywgJ2RyYWdnZWQnXG5dLnJlZHVjZSgodmVyYnMsIHZlcmIpID0+IHtcbiAgdmVyYnNbdmVyYl0gPSB2ZXJiXG4gIHJldHVybiB2ZXJic1xufSwge30pXG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBWdWVNb2RhbCBmcm9tICd2dWUtanMtbW9kYWwnXG5pbXBvcnQgVnVlUm91dGVyIGZyb20gJ3Z1ZS1yb3V0ZXInXG5pbXBvcnQgVnVlTm90aWZpY2F0aW9ucyBmcm9tICd2dWUtbm90aWZpY2F0aW9uJ1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xuaW1wb3J0IHtcbiAgaXNTdHJpbmcsIGlzQWJzb2x1dGVVcmwsIG1lcmdlLCBoeXBoZW5hdGUsIGNhbWVsaXplLCBkZWZhdWx0Rm9ybWF0c1xufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgY29tcG9uZW50cyBmcm9tICcuL2NvbXBvbmVudHMvaW5kZXguanMnXG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuL3R5cGVzL2luZGV4LmpzJ1xuaW1wb3J0IERpdG9Sb290IGZyb20gJy4vY29tcG9uZW50cy9EaXRvUm9vdC52dWUnXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSB9IGZyb20gJy4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgdmVyYnMgZnJvbSAnLi92ZXJicy5qcydcblxuVnVlLmNvbmZpZy5wcm9kdWN0aW9uVGlwID0gZmFsc2VcblxuLy8gQWxsIGdsb2JhbCBwbHVnaW5zIHRoYXQgbmVlZCB0byBiZSByZWdpc3RlcmVkIG9uIGBWdWVgOlxuVnVlLnVzZShWdWVSb3V0ZXIpXG5WdWUudXNlKFZ1ZU1vZGFsLCB7IGR5bmFtaWM6IHRydWUgfSlcblZ1ZS51c2UoVnVlTm90aWZpY2F0aW9ucylcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0FkbWluIHtcbiAgY29uc3RydWN0b3IoZWwsIHtcbiAgICAvLyBgZGl0b2AgY29udGFpbnMgdGhlIGJhc2UgYW5kIGFwaSBzZXR0aW5ncyBwYXNzZWQgZnJvbSBgQWRtaW5Db250cm9sbGVyYFxuICAgIGRpdG8gPSB7fSxcbiAgICBhcGksXG4gICAgdmlld3MgPSB7fSxcbiAgICAuLi5vcHRpb25zXG4gIH0gPSB7fSkge1xuICAgIHRoaXMuZWwgPSBlbFxuICAgIC8vIE1lcmdlIGluIGBhcGlgIHNldHRpbmdzIGFzIHBhc3NlZCBmcm9tIGBjb25maWcuYWRtaW5gIGFuZCB0aHJvdWdoIHRoZVxuICAgIC8vIGBBZG1pbkNvbnRyb2xsZXJgIHdpdGggYGFwaWAgdmFsdWVzIGZyb20gZnJvbSAnYWRtaW4vaW5kZXguanMnXG4gICAgLy8gTk9URTogYEFkbWluQ29udHJvbGxlcmAgcHJvdmlkZXMgYGRpdG8uYXBpLmJhc2VgXG4gICAgdGhpcy5hcGkgPSBhcGkgPSBtZXJnZSh7IGJhc2U6ICcvJyB9LCBkaXRvLmFwaSwgYXBpKVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcblxuICAgIC8vIFNldHVwIGRlZmF1bHQgYXBpIHNldHR0aW5nczpcbiAgICBhcGkubG9jYWxlIHx8PSAnZW4tVVMnXG5cbiAgICBhcGkuZm9ybWF0cyA9IG1lcmdlKHt9LCBkZWZhdWx0Rm9ybWF0cywgYXBpLmZvcm1hdHMpXG5cbiAgICBhcGkucmVxdWVzdCB8fD0gb3B0aW9ucyA9PiB0aGlzLnJlcXVlc3Qob3B0aW9ucylcblxuICAgIC8vIFNldHRpbmcgYGFwaS5ub3JtYWxpemVQYXRocyA9IHRydWUgKHBsdXJhbCkgc2V0cyBib3RoOlxuICAgIC8vIGBhcGkubm9ybWFsaXplUGF0aCA9IGh5cGhlbmF0ZWAgYW5kIGBhcGkuZGVub3JtYWxpemVQYXRoID0gY2FtZWxpemVgXG4gICAgYXBpLm5vcm1hbGl6ZVBhdGggPSAoXG4gICAgICBhcGkubm9ybWFsaXplUGF0aCB8fFxuICAgICAgYXBpLm5vcm1hbGl6ZVBhdGhzXG4gICAgICAgID8gaHlwaGVuYXRlXG4gICAgICAgIDogdmFsID0+IHZhbFxuICAgIClcbiAgICBhcGkuZGVub3JtYWxpemVQYXRoID0gKFxuICAgICAgYXBpLmRlbm9ybWFsaXplUGF0aCB8fFxuICAgICAgYXBpLm5vcm1hbGl6ZVBhdGhzXG4gICAgICAgID8gY2FtZWxpemVcbiAgICAgICAgOiB2YWwgPT4gdmFsXG4gICAgKVxuXG4gICAgLy8gQWxsb3cgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYWxsIGF1dGggcmVzb3VyY2VzLCBsaWtlIHNvOlxuICAgIC8vIGFwaS51c2VycyA9IHtcbiAgICAvLyAgIHBhdGg6ICcvYWRtaW5zJyxcbiAgICAvLyAgIC8vIFRoZXNlIGFyZSB0aGUgZGVmYXVsdHM6XG4gICAgLy8gICBsb2dpbjoge1xuICAgIC8vICAgICBwYXRoOiAnbG9naW4nLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIGxvZ291dDoge1xuICAgIC8vICAgICBwYXRoOiAnbG9nb3V0JyxcbiAgICAvLyAgICAgbWV0aG9kOiAncG9zdCdcbiAgICAvLyAgIH0sXG4gICAgLy8gICBzZXNzaW9uOiB7XG4gICAgLy8gICAgIHBhdGg6ICdzZXNzaW9uJyxcbiAgICAvLyAgICAgbWV0aG9kOiAnZ2V0J1xuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICBjb25zdCB1c2VycyA9IGFwaS51c2VycyA9IGdldFJlc291cmNlKGFwaS51c2Vycywge1xuICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nXG4gICAgfSkgfHwge31cbiAgICB1c2Vycy5sb2dpbiA9IGdldFJlc291cmNlKHVzZXJzLmxvZ2luIHx8ICdsb2dpbicsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMubG9nb3V0ID0gZ2V0UmVzb3VyY2UodXNlcnMubG9nb3V0IHx8ICdsb2dvdXQnLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIHVzZXJzLnNlc3Npb24gPSBnZXRSZXNvdXJjZSh1c2Vycy5zZXNzaW9uIHx8ICdzZXNzaW9uJywge1xuICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuXG4gICAgLy8gQWxsb3cgb3ZlcnJpZGluZyBvZiByZXNvdXJjZSBwYXRoIGhhbmRsZXJzOlxuICAgIC8vIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgLy8gICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgLy8gICAgIHJldHVybiByZXNvdXJjZS5wYXJlbnRcbiAgICAvLyAgICAgICA/IGAke3Jlc291cmNlLnBhdGh9PyR7cmVzb3VyY2UucGFyZW50LnBhdGh9X2lkPSR7XG4gICAgLy8gICAgICAgICAgcmVzb3VyY2UucGFyZW50LmlkfWBcbiAgICAvLyAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICBhcGkucmVzb3VyY2VzID0ge1xuICAgICAgYW55KHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzW3Jlc291cmNlPy50eXBlXSB8fCB0aGlzLmRlZmF1bHRcbiAgICAgICAgcmV0dXJuIHJlc291cmNlICYmIGhhbmRsZXIuY2FsbCh0aGlzLCByZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIGRlZmF1bHQocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgcGFyZW50UGF0aCA9IHRoaXMuYW55KHJlc291cmNlLnBhcmVudClcbiAgICAgICAgcmV0dXJuIHBhcmVudFBhdGhcbiAgICAgICAgICA/IGAke3BhcmVudFBhdGh9LyR7cmVzb3VyY2UucGF0aH1gXG4gICAgICAgICAgOiByZXNvdXJjZS5wYXRoXG4gICAgICB9LFxuXG4gICAgICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHQocmVzb3VyY2UpXG4gICAgICB9LFxuXG4gICAgICBtZW1iZXIocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gTk9URTogV2UgYXNzdW1lIHRoYXQgYWxsIG1lbWJlcnMgaGF2ZSByb290LWxldmVsIGNvbGxlY3Rpb24gcm91dGVzLFxuICAgICAgICAvLyB0byBhdm9pZCBleGNlc3NpdmUgbmVzdGluZyBvZiAoc3ViLSljb2xsZWN0aW9uIHJvdXRlcy5cbiAgICAgICAgcmV0dXJuIGAke3Jlc291cmNlLnBhdGh9LyR7cmVzb3VyY2UuaWR9YFxuICAgICAgfSxcblxuICAgICAgdXBsb2FkKHJlc291cmNlKSB7XG4gICAgICAgIC8vIERpdG8gU2VydmVyIGhhbmRsZXMgdXBsb2FkIHJvdXRlcyBvbiB0aGUgY29sbGVjdGlvbiByZXNvdXJjZTpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29sbGVjdGlvbihyZXNvdXJjZS5wYXJlbnQpfS91cGxvYWQvJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgIH0sXG5cbiAgICAgIC4uLmFwaS5yZXNvdXJjZXNcbiAgICB9XG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIC8gZXh0ZW5kaW5nIG9mIGhlYWRlcnM6XG4gICAgLy8gYXBpLmhlYWRlcnMgPSB7XG4gICAgLy8gICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgLy8gfVxuICAgIGFwaS5oZWFkZXJzID0ge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIC4uLmFwaS5oZWFkZXJzXG4gICAgfVxuXG4gICAgYXBpLmlzQXBpUmVxdWVzdCA9IGFwaS5pc0FwaVJlcXVlc3QgfHwgZnVuY3Rpb24odXJsKSB7XG4gICAgICByZXR1cm4gIWlzQWJzb2x1dGVVcmwodXJsKSB8fCB1cmwuc3RhcnRzV2l0aChhcGkudXJsKVxuICAgIH1cblxuICAgIGlmIChpc1N0cmluZyhlbCkpIHtcbiAgICAgIGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbClcbiAgICB9XG5cbiAgICB0aGlzLnJvb3QgPSBuZXcgVnVlKHtcbiAgICAgIGVsLFxuICAgICAgcm91dGVyOiBuZXcgVnVlUm91dGVyKHtcbiAgICAgICAgbW9kZTogJ2hpc3RvcnknLFxuICAgICAgICBiYXNlOiBkaXRvLmJhc2UsXG4gICAgICAgIGxpbmtBY3RpdmVDbGFzczogJycsXG4gICAgICAgIGxpbmtFeGFjdEFjdGl2ZUNsYXNzOiAnJ1xuICAgICAgfSksXG4gICAgICBjb21wb25lbnRzOiB7IERpdG9Sb290IH0sXG4gICAgICAvLyBNb3N0IGluamVjdHMgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZSByZWFjdGl2ZW5lc3MgYWNyb3NzXG4gICAgICAvLyBwcm92aWRlL2luamVjdCwgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgICBwcm92aWRlOiB7XG4gICAgICAgIGFwaSxcbiAgICAgICAgLy8gQSBkZWZhdWx0IGxpc3Qgb2YgdmVyYnMgYXJlIHByb3ZpZGVkIGJ5ICR2ZXJicygpIGFuZCBjYW4gYmVcbiAgICAgICAgLy8gb3ZlcnJpZGRlbiBhdCBhbnkgcG9pbnQgaW4gdGhlIGNvbXBvbmVudCBoaWVyYXJjaHkuXG4gICAgICAgICR2ZXJiczogKCkgPT4gdmVyYnMsXG4gICAgICAgIC8vIFByb3ZpZGUgZGVmYXVsdHMgc28gRGl0b01peGluIGNhbiBpbmplY3QgdGhlbSBmb3IgYWxsIGNvbXBvbmVudHM6XG4gICAgICAgIC8vICAgaW5qZWN0OiBbICAnJGlzUG9wdWxhdGVkJywgJyRzY2hlbWFDb21wb25lbnQnLCAnJHJvdXRlQ29tcG9uZW50JyBdXG4gICAgICAgICR2aWV3czogKCkgPT4ge30sXG4gICAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdHJ1ZSxcbiAgICAgICAgJHNjaGVtYUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNjaGVtYVBhcmVudENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGF0YUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHJlbmRlcjogY3JlYXRlRWxlbWVudCA9PiBjcmVhdGVFbGVtZW50KERpdG9Sb290LCB7XG4gICAgICAgIC8vIFByZXNlcnZlIHRoZSByb290IGNvbnRhaW5lcidzIGlkLCBhcyByZXF1aXJlZCBieSBob3QtcmVsb2FkaW5nOlxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGlkOiBlbC5pZFxuICAgICAgICB9LFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIHVucmVzb2x2ZWRWaWV3czogdmlld3MsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICB9LFxuICAgICAgICAvLyBUaGlzIG1heSBvbmx5IGJlIG5lZWRlZCB0byBhdm9pZCB0cmVlLXNoYWNraW5nIG9mIHRoZXNlIGNvbXBvbmVudHMsXG4gICAgICAgIC8vIHNpbmNlIHRoZXkgYWN0dWFsbHkgaGFuZGxlIHJlZ2lzdHJ5IGludGVybmFsbHkgYWxyZWFkeS5cbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIC4uLmNvbXBvbmVudHMsXG4gICAgICAgICAgLi4udHlwZXNcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgcmVnaXN0ZXIodHlwZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKHR5cGUsIG9wdGlvbnMpXG4gIH1cblxuICByZXF1ZXN0KHtcbiAgICB1cmwsXG4gICAgbWV0aG9kID0gJ2dldCcsXG4gICAgZGF0YSA9IG51bGwsXG4gICAgcGFyYW1zID0gbnVsbCxcbiAgICBoZWFkZXJzID0gbnVsbFxuICB9KSB7XG4gICAgY29uc3QgaXNBcGlSZXF1ZXN0ID0gdGhpcy5hcGkuaXNBcGlSZXF1ZXN0KHVybClcbiAgICByZXR1cm4gYXhpb3MucmVxdWVzdCh7XG4gICAgICB1cmwsXG4gICAgICBtZXRob2QsXG4gICAgICBwYXJhbXMsXG4gICAgICAuLi4oZGF0YSAmJiB7IGRhdGEgfSksXG4gICAgICBiYXNlVVJMOiBpc0FwaVJlcXVlc3QgPyB0aGlzLmFwaS51cmwgOiBudWxsLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAuLi4oaXNBcGlSZXF1ZXN0ICYmIHRoaXMuYXBpLmhlYWRlcnMpLFxuICAgICAgICAuLi5oZWFkZXJzXG4gICAgICB9LFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiBpc0FwaVJlcXVlc3QgJiYgISF0aGlzLmFwaS5jb3JzPy5jcmVkZW50aWFsc1xuICAgIH0pXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJwYXJzZURhdGFQYXRoIiwibm9ybWFsaXplRGF0YVBhdGgiLCJpc0ludGVnZXIiLCJnZXRWYWx1ZUF0RGF0YVBhdGgiLCJpc0Z1bmN0aW9uIiwiaXNBcnJheSIsImlzUGxhaW5PYmplY3QiLCJpc0Jvb2xlYW4iLCJpc051bWJlciIsImlzU3RyaW5nIiwiaXNEYXRlIiwiaXNPYmplY3QiLCJpc1JlZ0V4cCIsImFzQXJyYXkiLCJwaWNrQnkiLCJ1aWQiLCJsYWJlbGl6ZSIsImVxdWFscyIsImZvcm1hdCIsImh5cGhlbmF0ZSIsImlzQ3JlZGl0Q2FyZCIsImlzRW1haWwiLCJpc0hvc3RuYW1lIiwiaXNEb21haW4iLCJpc1VybCIsIm5hbm9pZCIsImlzUHJvbWlzZSIsImlzTW9kdWxlIiwiY2xvbmUiLCJWdWUiLCJjYW1lbGl6ZSIsImNvbXBvbmVudHMiLCJnZXRDb21tb25QcmVmaXgiLCJyZW5kZXIiLCJzdGF0aWNSZW5kZXJGbnMiLCJfX3Z1ZTJfc2NyaXB0IiwiYWRkRXZlbnRzIiwic3RyaXBUYWdzIiwiVHJhbnNpdGlvbkhlaWdodCIsImNhcGl0YWxpemUiLCJkZWluZGVudCIsIm1lcmdlIiwiUGFnaW5hdGlvbiIsIlZ1ZURyYWdnYWJsZSIsImVzY2FwZUh0bWwiLCJUeXBlQ29tcG9uZW50IiwiZGVib3VuY2VBc3luYyIsIkNvZGVGbGFzayIsIlRyaWdnZXIiLCJTa2V0Y2hQaWNrZXIiLCJ0aW55Y29sb3IiLCJEYXRlUGlja2VyIiwiVGltZVBpY2tlciIsIkRhdGVUaW1lUGlja2VyIiwiRWRpdG9yQ29udGVudCIsIkVkaXRvck1lbnVCYXIiLCJJY29uIiwiZGVib3VuY2UiLCJFZGl0b3IiLCJCb2xkIiwiSXRhbGljIiwiVW5kZXJsaW5lIiwiU3RyaWtlIiwiQ29kZSIsIkJsb2NrcXVvdGUiLCJDb2RlQmxvY2siLCJIYXJkQnJlYWsiLCJIZWFkaW5nIiwiSG9yaXpvbnRhbFJ1bGUiLCJMaXN0SXRlbSIsIkJ1bGxldExpc3QiLCJPcmRlcmVkTGlzdCIsIkhpc3RvcnkiLCJ1bmRlcnNjb3JlIiwiTWFyayIsInRvZ2dsZU1hcmsiLCJMaW5rIiwiVnVlTXVsdGlzZWxlY3QiLCJJbnB1dEZpZWxkIiwiU3dpdGNoQnV0dG9uIiwiZmlsZXNpemUiLCJWdWVVcGxvYWQiLCJwYXJzZUZpbGVTaXplIiwiVnVlUm91dGVyIiwiVnVlTW9kYWwiLCJWdWVOb3RpZmljYXRpb25zIiwiZGVmYXVsdEZvcm1hdHMiLCJpc0Fic29sdXRlVXJsIiwiYXhpb3MiXSwibWFwcGluZ3MiOiI0bEVBQWUsR0FBQSxDQUNiLE1BQU8sR0FDUCxnQkFBaUIsQ0FBRSxFQUNuQixLQUFNLEtBQ04sVUFBVyxDQUFFLEVBQ2IsWUFBYSxLQUNiLGNBQWUsSUFDakIsRUNITyxXQUF3QixFQUFVLEVBQU8sQ0FDOUMsTUFBTyxHQUNILEdBQUcsS0FBWSxJQUNmLENBQ04sQ0FFTyxZQUE2QixFQUFVLENBQzVDLEtBQU0sR0FBT0EsRUFBYSxjQUFDLENBQVEsRUFDbkMsa0JBQU0sTUFDQyxDQUNULENBTU8sWUFBMkIsRUFBVSxFQUFTLEdBQU8sQ0FDMUQsTUFBTyxHQUFTLEdBQW9CLENBQVEsRUFBSUEsRUFBQUEsY0FBYyxDQUFRLENBQ3hFLENBRU8sWUFBeUIsRUFBVSxFQUFTLEdBQU8sQ0FDeEQsTUFBT0MscUJBQWtCLEdBQWtCLEVBQVUsQ0FBTSxDQUFDLENBQzlELENBRU8sWUFBaUMsRUFBVSxFQUFTLEdBQU8sQ0FDaEUsS0FBTSxHQUFPLEdBQWtCLEVBQVUsQ0FBTSxFQUMvQyxHQUFJLEVBQU0sQ0FHUixHQUFJLEdBQ0osRUFDRSxHQUFRLEVBQUssSUFBSyxRQUNYLEdBQVMsTUFBUUMsWUFBVSxDQUFDLENBQUssR0FFMUMsR0FBSSxHQUFTLEtBQ1gsTUFBTyxFQUVWLENBQ0QsTUFBTyxLQUNULENBRU8sWUFBK0IsRUFBVSxFQUFTLEdBQU8sQ0FDOUQsTUFBT0QscUJB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QUFFLENBQUUsRUFBSSxLQUFNLEVBQUcsY0FBYyxFQUFHLEVBQUksV0FBWSxFQUFHLElBQUksQ0FBQyxZQUFZLGFBQWEsR0FBRyxDQUFDLE1BQVEsU0FBUyxFQUFPLENBQUMsTUFBTyxHQUFJLGNBQWMsTUFBSyxDQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRyxPQUFPLENBQUMsRUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUksR0FBRSxDQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUcsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ2xwQkMsR0FBa0IsQ0FBQSxRQ2tEdEIsS0FBQUMsSUFBQSxFQUFBLFVBQUEsWUFBQSxDQUNBLE9BQUEsQ0FBQSxDQUFBLEVBRUEsU0FBQSxDQUNBLE1BQUEsQ0FDQSxPQUFBLElBQUEsS0FBQSxhQUNBLENBQ0EsRUFFQSxNQUFBLENBQ0EsZ0JBQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxTQUFBLE9BQUEsRUFBQSxTQUFBLEVBQUEsRUFDQSxRQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQSxFQUFBLEVBQUEsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLENBQ0EsY0FBQSxDQUFBLEVBQ0EsV0FBQSxHQUNBLGFBQUEsQ0FDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLGVBQUEsQ0FDQSxNQUFBLE1BQUEsTUFBQSxhQUNBLEVBRUEsV0FBQSxDQUNBLE1BQUEsTUFBQSxhQUFBLENBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxLQUFBLFNBQUEsTUFBQSxTQUFBLE9BQUEsZ0JBR0EsS0FBQSxTQUFBLGdCQUFBLENBQUEsQ0FDQSxPQUVBLFVBQUEsQ0FHQSxLQUFBLE1BQUEsU0FBQSxDQUNBLE1BQUEsR0FBQSxDQUNBLEFBQUEsRUFBQSxPQUFBLFFBQUEsYUFBQSxHQUNBLE1BQUEsU0FBQSxZQUFBLEtBRUEsRUFFQSxNQUFBLEdBQUEsQ0FDQSxBQUFBLEVBQUEsT0FBQSxPQUNBLE1BQUEsU0FBQSxZQUFBLEtBRUEsQ0FDQSxDQUFBLEVBQ0EsR0FBQSxDQUNBLEtBQUEsV0FBQSxHQUNBLEFBQUEsS0FBQSxNQUFBLFlBQ0EsS0FBQSxNQUFBLGFBQUEsRUFFQSxLQUFBLE1BQUEsTUFBQSxDQUVBLE9BQUEsRUFBQSxDQUNBLFFBQUEsTUFBQSxDQUFBLENBQ0EsQ0FDQSxLQUFBLFdBQUEsRUFDQSxFQUVBLFFBQUEsQ0FDQSxPQUFBLENBQUEsT0FBQSxPQUFBLFFBQUEsUUFBQSxHQUFBLENBQ0EsTUFBQSxDQUNBLFFBQUEsVUFDQSxNQUFBLFFBQ0EsS0FBQSxjQUNBLFFBQUEsU0FDQSxFQUFBLElBQUEsZ0JBQ0EsRUFBQSxNQUNBdEIsRUFBQUEsUUFBQSxDQUFBLEVBQUEsS0FBQSxVQUFBLFFBQ0EsUUFBQSxjQUFBLE1BQUEsRUFDQSxLQUFBLEdBQUEsQ0FDQSxRQUFBLE9BQ0EsTUFBQSxRQUNBLEtBQUEsTUFDQSxRQUFBLEtBQ0EsRUFBQSxJQUFBLFFBRUEsUUFBQSxHQUFBd0IsRUFBQSxVQUFBLENBQUEsQ0FBQSxFQUNBLEtBQUEsQ0FBQSxnQkFBQSxJQUFBLEtBQUEsSUFDQSxHQUFBLEVBQUEsQ0FLQSxLQUFBLENBQUEsaUJBQUEsSUFBQSxFQUNBLEVBQUEsSUFBQSxFQUFBLE9BQUEsRUFBQSxRQUFBLEVBQ0EsS0FBQSxRQUFBLENBQUEsT0FBQSxRQUFBLE9BQUEsV0FBQSxDQUNBLENBQ0EsRUFFQSxvQkFBQSxDQUNBLEtBQUEsY0FBQSxXQUFBLENBQ0EsRUFFQSxnQkFBQSxFQUFBLENBQ0EsS0FBQSxjQUFBLEVBQUEsRUFBQSxFQUNBLE9BRUEsUUFBQSxTQUNBLEtBQUEsV0FBQSxHQUNBLEtBQUEsQ0FDQSx1QkFDQSxzQkFDQSxLQUFBLFFBQUEsT0FBQSxDQUFBLEVBQ0EsRUFBQSxLQUFBLE1BQUEsV0FBQSxDQUNBLFdBQUEsR0FDQSxTQUFBLENBQ0EsS0FBQSxPQUNBLFVBQUEsRUFDQSxFQUNBLFNBQUEsQ0FDQSxLQUFBLFVBQ0EsR0FDQSxHQUVBLFFBQUEsQ0FDQSxPQUFBLENBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxRQUFBLENBQ0EsQ0FDQSxDQUFBLEVBQ0EsR0FBQSxFQUNBLEdBQUEsQ0FDQSxLQUFBLEdBQUEsS0FBQSxNQUFBLFlBQUEsQ0FDQSxTQUFBLEtBQUEsSUFBQSxNQUFBLE1BQ0EsS0FBQSxFQUNBLFNBQUEsRUFDQSxDQUFBLEVBQ0EsQUFBQSxFQUNBLFNBQUEsUUFBQSxDQUFBLEVBRUEsTUFBQSxRQUFBLEVBQUEsS0FBQSxJQUFBLEVBQ0EsS0FBQSxNQUFBLGFBQUEsRUFFQSxPQUFBLEVBQUEsQ0FDQSxLQUFBLEdBQUEsUUFBQSxXQUFBLGNBQUEsT0FBQSxjQUFBLE1BQ0EsS0FBQSxPQUFBLENBQ0EsS0FBQSxRQUNBLE1BQUEsdUJBQ0EsS0FBQSxHQUFBLENBQ0EsQ0FBQSxFQUNBLEdBQ0EsUUFBQSxNQUFBLEVBQUEsRUFBQSxRQUFBLEVBRUEsS0FBQSxNQUFBLENBQ0EsQ0FFQSxFQUVBLGNBQUEsQ0FDQSxNQUFBLE1BQUEsU0FBQSxHQUFBLENBQ0EsT0FFQSxTQUFBLENBQ0EsR0FBQSxDQUtBLEFBQUEsQUFKQSxNQUFBLE1BQUEsWUFBQSxDQUNBLFNBQUEsS0FBQSxJQUFBLE1BQUEsT0FDQSxTQUFBLEVBQ0EsQ0FBQSxHQUNBLEtBQUEsU0FDQSxNQUFBLFFBQUEsSUFBQSxFQUNBLEtBQUEsYUFBQSxFQUVBLE9BQUEsRUFBQSxDQUNBLFFBQUEsTUFBQSxDQUFBLENBQ0EsQ0FDQSxPQUVBLFlBQUEsQ0FDQSxHQUFBLEdBQUEsS0FDQSxHQUFBLENBS0EsRUFBQSxBQUpBLE1BQUEsTUFBQSxZQUFBLENBQ0EsU0FBQSxLQUFBLElBQUEsTUFBQSxRQUNBLFNBQUEsRUFDQSxDQUFBLEdBQ0EsS0FBQSxNQUFBLElBQ0EsT0FBQSxFQUFBLENBQ0EsS0FBQSxPQUFBLENBQ0EsS0FBQSxRQUNBLE1BQUEsdUJBQ0EsS0FBQSxDQUNBLENBQUEsQ0FDQSxDQUNBLFlBQUEsUUFBQSxDQUFBLEVBQ0EsQ0FDQSxFQUVBLFFBQUEsRUFBQSxDQUNBLEtBQUEsU0FBQSxLQUNBLEdBQ0EsT0FBQSxlQUFBLEVBQUEsR0FBQSxTQUFBLEVBR0EsR0FDQSxNQUFBLGNBQUEsQ0FBQSxFQUNBLEtBQUEsYUFBQSxFQUVBLE9BRUEsYUFBQSxDQUNBLEFBQUEsS0FBQSxNQUFBLFVBQUEsR0FDQSxLQUFBLE1BQUEsTUFBQSxDQUVBLE9BRUEsZUFBQSxDQUNBLEdBQUEsQ0FDQSxLQUFBLGNBQUEsS0FBQSxJQUFBLEtBQUEsZUFBQSxDQUNBLE9BQUEsRUFBQSxDQUNBLE1BQUEsR0FBQSxTQUNBLFFBQUEsTUFBQSxDQUFBLEVBRUEsS0FBQSxNQUFBLENBQ0EsQ0FFQSxLQUFBLEdBQUEsQ0FBQSxFQUNBLEVBQUEsQ0FBQSxFQUNBLFNBQUEsQ0FBQSxFQUFBLElBQUEsUUFBQSxRQUFBLEtBQUEsYUFBQSxFQUNBLEVBQUEsS0FBQSxHQUFBLEdBQUEsS0FBQSxJQUFBLEVBQUEsRUFBQSxDQUFBLENBQUEsRUFFQSxLQUFBLFNBQUEsSUFBQSxDQUFBLEVBQ0EsU0FBQSxLQUFBLEdBQ0EsS0FBQSxRQUFBLFNBQUEsQ0FBQSxDQUVBLENBQ0EsQ0FDQSxDQUFBLG9JQzdSSUosR0FBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFPLEdBQUcsTUFBTSxDQUFDLFlBQVksOEJBQThCLEVBQUUsQ0FBQyxFQUFHLEtBQUssQ0FBQyxFQUFJLEdBQUcsRUFBSSxHQUFHLEVBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRyxLQUFLLENBQUMsWUFBWSxhQUFhLEVBQUUsRUFBSSxHQUFJLEVBQUksTUFBTyxTQUFTLEVBQUssQ0FBQyxNQUFPLEdBQUcsS0FBSyxDQUFFLEVBQUksYUFBYSxDQUFJLEVBQUcsRUFBRyxjQUFjLENBQUMsWUFBWSxZQUFZLE1BQU0sQ0FBQyxHQUFNLElBQU8sRUFBSyxLQUFPLGVBQWUsYUFBYSxDQUFDLEVBQUUsQ0FBQyxFQUFJLEdBQUcsRUFBSSxHQUFHLEVBQUksU0FBUyxDQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFJLElBQUksRUFBRSxD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QUEsV0FDQSxBQUFBLElBQUEsSUFDQSxHQUFBLEdBQUEsTUFHQSxNQUFBLENBQ0EsYUFBQSxLQUNBLFlBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxpQkFBQSxDQUNBLE1BQUEsS0FDQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLE1BQUEsUUFBQSxJQUNBLEVBRUEsUUFBQSxDQUNBLE1BQUEsQ0FDQSxXQUFBLEtBQUEsVUFDQSxDQUNBLEVBRUEsZUFBQSxDQUNBLE1BQUEsUUFBQSxRQUFBLEdBQUEsS0FBQSxPQUFBLENBQUEsRUFBQSxPQUdBLENBQUEsRUFBQSxDQUFBLEVBQUEsS0FBQSxDQUNBLEtBQUEsQ0FBQSxPQUFBLFVBQUEsRUFDQSxHQUFBLENBQUEsRUFBQSxDQUNBLEtBQUEsR0FBQSxJQUFBLFNBQUEsSUFBQSxLQUFBLE9BQUEsRUFDQSxJQUFBLFNBQUEsSUFBQSxLQUFBLE9BQUEsRUFDQSxLQUNBLEFBQUEsR0FDQSxHQUFBLE9BQ0EsR0FEQSxDQUVBLE9BQUEsQ0FBQSxPQUFBLENBQ0EsR0FFQSxDQUNBLFNBQUEsR0FBQSxFQUNBLENBQ0EsRUFDQSxDQUFBLENBQ0EsQ0FDQSxFQUVBLFdBQUEsQ0FDQSxNQUFBLFFBQUEsS0FBQSxLQUFBLGFBQUEsRUFBQSxTQUFBLFFBQUEsQ0FDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLEtBQUEsYUFBQVEsRUFBQSxVQUFBLE9BQUEsQ0FDQSxNQUFBLElBQUEsQ0FDQSxBQUFBLE1BQUEsVUFBQSxJQUNBLEtBQUEsT0FBQSxDQUVBLENBQ0EsQ0FBQSxDQUNBLEVBRUEsV0FBQSxDQUNBLEtBQUEsYUFBQSxPQUFBLENBQ0EsRUFFQSxRQUFBLENBQ0EsTUFBQSxDQUNBLEtBQUEsT0FBQSxLQUFBLEtBQUEsSUFBQSxDQUNBLEVBRUEsUUFBQSxFQUFBLENBQ0EsS0FBQSxRQUFBLFFBQUEsQ0FBQSxFQUNBLEtBQUEsS0FBQSxDQUNBLEVBRUEsT0FBQSxFQUFBLENBQ0EsS0FBQSxRQUFBLE9BQUEsQ0FBQSxFQUNBLEtBQUEsS0FBQSxDQUNBLEVBRUEsUUFBQSxDQUNBLEtBQUEs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UUFBUSxFQUFHLENBQzlDLENBQ0YsQ0FDSCxFQzVISXdCLEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBTyxHQUFHLE1BQU0sQ0FBQyxZQUFZLGFBQWEsRUFBRSxDQUFDLEVBQUcsTUFBTSxDQUFDLFlBQVkscUJBQXFCLEVBQUUsQ0FBRSxFQUFJLFVBQVksRUFBSSxTQUFXLEVBQUksVUFBVyxFQUFHLE1BQU0sQ0FBQyxZQUFZLHFCQUFxQixNQUFNLENBQUUsMEJBQTJCLEVBQUksVUFBVSxDQUFFLEVBQUUsQ0FBRSxFQUFJLFNBQVUsRUFBRyxhQUFhLENBQUMsTUFBTSxDQUFDLE1BQVEsRUFBSSxNQUFNLFNBQVcsRUFBSSxTQUFTLFlBQWMsRUFBSSxZQUFZLFVBQVksQ0FBQyxFQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsT0FBUyxFQUFJLFFBQVEsRUFBRSxZQUFZLEVBQUksR0FBRyxDQUFFLEVBQUksUUFBUyxDQUFDLElBQUksZUFBZSxHQUFHLFVBQVUsQ0FBQyxNQUFPLENBQUMsRUFBSSxHQUFHLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBSSxDQUFDLENBQUMsRUFBRSxFQUFJLEdBQUksRUFBRSxFQUFJLEtBQU0sRUFBRyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQU8sRUFBSSxLQUFLLFlBQWMsRUFBSSxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUksR0FBRSxFQUFHLEVBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFVBQVksRUFBSSxVQUFVLFNBQVcsRUFBSSxTQUFTLEtBQU8sRUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUksS0FBSyxFQUFJLEdBQUksRUFBSSxLQUFNLFNBQVMsRUFBTyxFQUFJLENBQUMsTUFBUSxHQUFJLFFBQVMsRUFBRyxZQUFZLENBQUMsSUFBSSxFQUFJLElBQUksT0FBTyxTQUFTLEdBQUssWUFBWSxnQkFBZ0IsTUFBTSxDQUFDLFFBQVUsRUFBSSxjQUFnQixFQUFJLElBQU0sRUFBSSxPQUFTLEVBQU8sU0FBVyxFQUFJLFNBQVMsS0FBTyxFQUFJLEtBQUssS0FBTyxFQUFJLEtBQUssTUFBUSxFQUFJLE1BQU0sT0FBUyxDQUFDLEVBQUksU0FBVyxDQUFDLEVBQUksWUFBWSxTQUFXLEVBQUksU0FBUyxlQUFpQixFQUFJLGNBQWMsQ0FBQyxDQUFDLEVBQUUsRUFBSSxHQUFJLENBQUEsQ0FBQyxFQUFFLEVBQUcsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFFBQVUsRUFBSSxPQUFPLENBQUMsRUFBRSxDQUFFLEVBQUksYUFBZSxFQUFJLE9BQVEsRUFBRyxZQUFZLENBQUMsSUFBSSxhQUFhLFlBQVksaUJBQWlCLE1BQU0sQ0FBQyxPQUFTLEVBQUksT0FBTyxTQUFXLEVBQUksU0FBUyxLQUFPLEVBQUksS0FBSyxLQUFPLEVBQUksS0FBSyxNQUFRLEVBQUksTUFBTSxPQUFTLENBQUMsRUFBSSxTQUFXLENBQUMsRUFBSSxRQUFRLFNBQVcsRUFBSSxTQUFTLGVBQWlCLEVBQUksY0FBYyxDQUFDLENBQUMsRUFBRSxFQUFJLElBQUksRUFBRSxDQUFDLEVBQUcsQ0FBQyxFQUFJLFNBQVcsRUFBSSxZQUFhLEVBQUksR0FBRyxTQUFTLEVBQUUsRUFBSSxHQUFFLENBQUUsRUFBRSxDQUFDLEVBQUcsRUFBSSxRQUFTLENBQUUsQUFBQyxFQUFJLFNBQWlDLEVBQUksR0FBRSxFQUE3QixFQUFJLEdBQUcsY0FBYyxDQUFVLEVBQUcsRUFBSSxZQUFhLENBQUMsRUFBRyxjQUFjLENBQUMsTUFBTSxDQUFDLE9BQVMsRUFBSSxhQUFhLEtBQU8sRUFBSSxLQUFLLEtBQU8sRUFBSSxLQUFLLE1BQVEsRUFBSSxNQUFNLFNBQVcsRUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBSSxHQUFJLENBQUEsRUFBRSxDQUFDLENBQUMsRUFDbDFEQyxHQUFrQixDQUFBLFFDb0t0QixLQUFBQyxJQUFBLEVBQUEsVUFBQSxjQUFBLENBQ0EsV0FBQSxDQUFBRyxpQkFBQUEsRUFBQUEsZ0JBQUEsRUFDQSxPQUFBLENBQUEsRUFBQSxFQUVBLFNBQUEsQ0FDQSxNQUFBLENBQ0EsaUJBQUEsSUFBQSxJQUNBLENBQ0EsRUFFQSxPQUFBLENBQ0Esd0JBQ0EsRUFFQSxNQUFBLENBQ0EsT0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsRUFBQSxFQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsRUFBQSxFQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLE1BQUEsRUFBQSxRQUFBLElBQUEsRUFDQSxRQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsVUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxZQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLGVBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsV0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxXQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxDQUNBLEVBRUEsTUFBQSxDQUNBLEtBQUEsQ0FBQSxRQUFBLEtBQUEsT0FDQSxNQUFBLFFBR0EsR0FBQWxDLEVBQUEsV0FBQSxDQUFBLEVBQ0EsRUFBQSxLQUFBLEtBQUEsS0FBQSxPQUFBLEVBQ0EsR0FMQSxDQU9BLG1CQUFBLENBQUEsRUFDQSxjQUFBLENBQUEsRUFDQSxlQUFBLENBQUEsQ0FDQSxFQUNBLEVBRUEsU0FBQSxDQUNBLGlCQUFBLENBRUEsTUFBQSxLQUNBLEVBRUEsdUJBQUEsQ0FJQSxNQUFBLE1BQUEsV0FBQSxLQUFBLEtBQUEsUUFBQSxlQUNBLEVBRUEsY0FBQSxDQUNBLEtBQUEsR0FBQSxHQUFBLEtBQUEsT0FBQSxPQUFBLEVBQUEsRUFDQSxTQUFBLEtBQUEsTUFBQSxNQUNBLEVBQUEsS0FBQSxHQUFBLEVBQUEsWUFBQSxFQUVBLE1BQUEsRUFDQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLEdBQUEsS0FBQSxPQUFBLElBQUEsQ0FDQSxFQUVBLGFBQUEsU0FDQSxLQUFBLEdBQUEsU0FBQSxPQUFBLE9BQUEsY0FBQSxNQUFBLEtBQUEsS0FDQSxFQUFBLEdBQUEsS0FBQSxhQUFBLEtBQUEsS0FBQSxFQUFBLEVBQ0EsRUFDQSxTQUFBLGFBQUEsY0FBQSxPQUFBLEtBQ0EsTUFBQSxLQUFBLEdBRUEsS0FBQSxRQUFBLFFBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxFQUVBLENBQ0EsRUFFQSxZQUFBLENBQ0EsR0FBQSxLQUFBLEtBQUEsQ0FDQSxHQUFBLEdBQUEsS0FDQSxTQUFBLEtBQUEsUUFBQSxPQUFBLEtBQUEsSUFBQSxFQUFBLENBQ0EsS0FBQSxDQUFBLGNBQUEsRUFDQSxHQUFBQSxFQUFBQSxXQUFBLENBQUEsRUFDQSxFQUFBLEtBQUEsS0FBQSxLQUFBLE9BQUEsRUFDQSxFQUVBLE1BQUEsR0FFQSxBQUFBLEdBQ0EsR0FBQSxFQUVBLENBQ0EsTUFBQSxFQUNBLENBQ0EsRUFFQSxXQUFBLE9BQ0EsTUFBQSxRQUFBLFNBQUEsY0FBQSxTQUNBLEVBRUEsZUFBQSxDQUNBLE1BQUEsTUFBQSxZQUFBLENBQUEsT0FBQSxTQUFBLFdBQUEsR0FBQSxDQUNBLEVBRUEsZUFBQSxDQUNBLE1BQUEsSUFDQSxRQUFBLEtBQUEsT0FBQSxNQUNBLEtBQUEsWUFBQSxDQUFBLE9BQUEsWUFBQSxXQUFBLEdBQUEsRUFFQSxFQVFBLE1BQUEsQ0FDQSxNQUFBLE1BQUEsSUFDQSxFQUVBLFVBQUEsQ0FDQSxNQUFBLE1BQUEsUUFDQSxFQUVBLGVBQUEsQ0FDQSxNQUFBLE1BQUEsYUFDQSxFQUVBLGVBQUEsQ0FDQSxNQUFBLE1BQUEsYUFDQSxFQUVBLFlBQUEsQ0FDQSxNQUFBLElBQUEsS0FBQSxTQUFBLEtBQUEsU0FBQSxFQUFBLENBQ0EsRUFFQSxXQUFBLENBQ0EsTUFBQSxNQUFBLFNBQ0EsS0FBQSxrQkFBQSxLQUFBLGFBQUEsS0FBQSxLQUFBLEtBQUEsT0FBQSxDQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsTUFBQSxNQUFBLGNBQUEsR0FBQSxFQUFBLE9BQUEsQ0FDQSxFQUVBLFdBQUEsQ0FDQSxNQUFBLE1BQUEsY0FBQSxHQUFBLEVBQUEsU0FBQSxDQUNBLEVBRUEsU0FBQSxDQUNBLE1BQUEsTUFBQSxlQUFBLEdBQUEsRUFBQSxPQUFBLENBQ0EsRUFFQSxhQUFBLENBQ0EsTUFBQSxNQUFBLGVBQUEsR0FBQSxFQUFBLFdBQUEsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxNQUFBLENBQUEsQ0FBQSxLQUFBLElBQ0EsRUFFQSxVQUFBLENBQ0EsTUFBQSxDQUFBLENBQUEsS0FBQSxPQUFBLEtBQUEsV0FDQSxFQUVBLFNBQUEsQ0FDQSxNQUFBLENBQUEsS0FBQSxTQUFBLENBQUEsQ0FBQSxLQUFBLElBQ0EsRUFFQSxhQUFBLENBQ0EsS0FBQSxDQUFBLGNBQUEsS0FBQSxPQUNBLE1BQUEsQ0FBQSxDQUFBLEdBQUEsT0FBQSxLQUFBLENBQUEsRUFBQSxPQUFBLENBQ0EsRUFFQSxPQUFBLEdBQUEsU0FBQSxDQUNBLFNBQUEsQ0FDQSxNQUFBLENBQUEsS0FBQSxTQUNBLENBQ0EsQ0FBQSxFQUVBLFlBQUEsQ0FDQSxNQUFBLFFBQUEsT0FBQSxLQUFBLGtCQUFBLENBQ0EsRUFFQSxPQUFBLENBQ0EsTUFBQSxRQUFBLE9BQUEsS0FBQSxhQUFBLENBQ0EsRUFFQSxRQUFBLENBQ0EsTUFBQSxRQUFBLE9BQUEsS0FBQSxjQUFBLENBQ0EsRUFFQSxzQkFBQSxDQUNBLE1BQUEsTUFBQSx1QkFBQSxLQUFBLGtCQUFBLENBQ0EsRUFFQSxpQkFBQSxDQUNBLE1BQUEsTUFBQSx1QkFBQSxLQUFBLGFBQUEsQ0FDQSxFQUVBLGtCQUFBLENBQ0EsTUFBQSxNQUFBLHVCQUFBLEtBQUEsY0FBQSxDQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsS0FBQSxVQUFBLEVBQUEsRUFDQSxLQUFBLGtCQUFBLEVBRUEsS0FBQSxTQUFBLFNBQUEsS0FBQSxxQkFBQSxFQUNBLEtBQUEsVUFBQSxZQUFBLENBQ0EsRUFFQSxlQUFBLENBQ0EsS0FBQSxVQUFBLFNBQUEsRUFDQSxLQUFBLFVBQUEsRUFBQSxDQUNBLEVBRUEsUUFBQSxDQUNBLHdCQUFBLEVBQUEsRUFBQSxDQUNBLE1BQUEsTUFBQSxzQkFDQSxLQUFBLHFCQUFBLEVBQUEsQ0FDQSxDQUNBLEVBRUEsdUJBQUEsRUFBQSxFQUFBLENBQ0EsTUFBQSxNQUFBLHdCQUFBLEVBQUEsQ0FBQSxFQUFBLElBQUEsSUFDQSxFQUVBLG9CQUFBLEVBQUEsRUFBQSxDQUNBLE1BQUEsTUFBQSxrQkFBQSxLQUFBLHFCQUFBLEVBQUEsQ0FBQSxDQUNBLEVBRUEsbUJBQUEsRUFBQSxFQUFBLENBQ0EsTUFBQSxNQUFBLG9CQUFBLEVBQUEsQ0FBQSxFQUFBLElBQUEsSUFDQSxFQUVBLGNBQUEsRUFBQSxFQUFBLENBQ0EsTUFBQSxNQUFBLFlBQUEsS0FBQSxxQkFBQSxFQUFBLENBQUEsQ0FDQSxFQUVBLGFBQUEsRUFBQSxFQUFBLENBQ0EsTUFBQSxNQUFBLGNBQUEsRUFBQSxDQUFBLEVBQUEsSUFBQSxJQUNBLEVBRUEsb0JBQUEsRUFBQSxFQUFBLENBQ0EsTUFBQSxNQUFBLHNCQUFBLEtBQUEsaUJBQUEsRUFBQSxDQUFBLENBQ0EsRUFFQSxtQkFBQSxFQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsb0JBQUEsRUFBQSxDQUFBLEVBQUEsSUFBQSxJQUNBLEVBRUEsVUFBQSxFQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsWUFBQSxLQUFBLGlCQUFBLEVBQUEsQ0FBQSxDQUNBLEVBRUEsU0FBQSxFQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsVUFBQSxFQUFBLENBQUEsRUFBQSxJQUFBLElBQ0EsRUFFQSxjQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsYUFBQSxLQUFBLFdBQUEsS0FBQSxDQUFBLENBQ0EsRUFFQSxlQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsYUFBQSxLQUFBLFdBQUEsTUFBQSxDQUFBLENBQ0EsRUFFQSxTQUFBLEVBQUEsQ0FDQSxLQUFBLFVBQUEsU0FBQSxDQUVBLFFBQUEsQ0FBQSxRQUFBLENBQ0EsQ0FBQSxFQVFBLEVBQUEsS0FBQSxRQUFBLEdBQUEsS0FBQSxZQUFBLElBQ0EsTUFBQSxPQUFBLEVBRUEsRUFFQSxVQUFBLENBQ0EsS0FBQSxVQUFBLFFBQUEsQ0FDQSxFQUVBLGlCQUFBLENBQ0EsU0FBQSxLQUFBLE1BQUEsV0FDQSxFQUFBLGdCQUFBLENBRUEsRUFFQSxhQUFBLENBQ0EsU0FBQSxLQUFBLE1BQUEsV0FDQSxFQUFBLFlBQUEsQ0FFQSxFQUVBLE9BQUEsT0FDQSxRQUFBLHdCQUFBLFFBQUEsUUFDQSxLQUFBLE9BQUEsRUFDQSxFQUVBLFlBQUEsRUFBQSxFQUFBLEdBQUEsQ0FDQSxLQUFBLENBQUEsd0JBQUEsS0FDQSxHQUFBLEdBQ0EsR0FBQSxFQUFBLENBQ0EsS0FBQSxHQUFBQSxFQUFBLFdBQUEsQ0FBQSxFQUNBLEVBQ0FRLEVBQUFBLFNBQUEsQ0FBQSxFQUNBLEdBQUEsRUFBQSxLQUFBLENBQUEsRUFDQSxLQUNBLEVBQUEsRUFDQSxPQUFBLEtBQUEsQ0FBQSxFQUFBLE9BQUEsQ0FBQSxFQUNBUCxFQUFBQSxRQUFBLENBQUEsRUFDQSxFQUNBLENBQUEsQ0FBQSxDQUNBLENBQ0EsQUFBQSxHQUNBLEtBQUEsWUFBQSxFQUVBLEdBQUEsR0FBQSxHQUNBLEVBQUEsR0FDQSxNQUFBLE9BQUEsS0FBQSxDQUFBLEdBQ0EsU0FBQSxLQUFBLEdBQUEsQ0FDQSxLQUFBLEdBQUEsS0FBQSx3QkFBQSxDQUFBLEVBQ0EsU0FBQSxLQUFBLEdBQ0EsQUFBQSxFQUFBLFNBQUEsQ0FBQSxHQUVBLElBQUEsR0FDQSxFQUFBLE1BQUEsRUFFQSxFQUFBLEdBQ0EsRUFBQSxHQUdBLENBQ0EsTUFBQSxJQUFBLENBQUEsR0FDQSxLQUFBLGFBQUEsRUFFQSxDQUNBLEVBRUEsVUFBQSxFQUFBLENBQ0EsTUFBQSxNQUFBLFlBQUEsRUFBQSxFQUFBLENBQ0EsT0FFQSxzQkFBQSxFQUFBLEVBQUEsT0FDQSxLQUFBLFlBQUEsRUFDQSxHQUFBLEdBQUEsR0FDQSxLQUFBLEdBQUEsQ0FBQSxFQUNBLFNBQUEsQ0FBQSxFQUFBLElBQUEsUUFBQSxRQUFBLENBQUEsRUFBQSxDQUdBLEtBQUEsR0FBQSxLQUFBLFdBQ0EsRUFBQSxLQUFBLFNBQUEsQ0FBQSxFQUNBLEVBSUEsRUFBQUwsRUFBQSxjQUFBLENBQUEsRUFDQSxHQUFBLEdBQUEsR0FDQSxLQUFBLEdBQUEsS0FBQSx3QkFBQSxDQUFBLEVBQ0EsU0FBQSxLQUFBLEdBQ0EsQUFBQSxFQUFBLHFCQUFBLEVBQUEsR0FBQSxDQUFBLEdBQ0EsR0FBQSxHQUNBLEVBQUEsSUFHQSxHQUFBLENBQUEsRUFBQSxDQUlBLEtBQUEsR0FBQSxFQUFBLElBQUEsRUFDQSxLQUFBLEVBQUEsT0FBQSxHQUFBLENBQ0EsS0FBQSxHQUFBLEtBQUEsd0JBQUEsQ0FBQSxFQUNBLFNBQUEsS0FBQSxHQUNBLEdBQUEsS0FBQSxNQUFBLHNCQUFBLHFCQUNBLEVBQ0EsR0FBQSxDQUNBLEdBQUEsR0FBQSxHQUNBLFNBQUEsS0FBQSxHQUFBLENBQ0EsS0FBQSxHQUFBLEVBQUEsRUFBQSxVQUNBLEFBQ0EsR0FDQSxFQUFBLHFCQUFBLEVBQUEsR0FBQSxDQUFBLEdBRUEsR0FBQSxHQUNBLEVBQUEsR0FFQSxDQUNBLE1BQUEsRUFDQSxJQU1BLE9BSUEsRUFBQSxJQUFBLENBQ0EsQ0FHQSxLQUFBLEdBQUFnQixFQUFBLFNBQUEsQ0FBQSxFQUNBLFNBQUEsS0FBQSxHQUFBLENBQ0EsS0FBQSxHQUFBLEVBQ0EsYUFBQSxJQUNBLE9BQUEsS0FBQSxZQUNBLEVBQUEsS0FBQSxHQUFBLEtBQUEsRUFBQSxTQUFBLENBQ0EsQ0FDQSxDQUNBLEVBQUEsRUFDQSxDQUNBLEFBQUEsR0FDQSxLQUFBLGFBQUEsRUFBQSxLQUFBO0FBQUEsQ0FBQSxDQUFBLENBRUEsRUFFQSxhQUFBLEVBQUEsQ0FDQSxLQUFBLE9BQUEsQ0FDQSxLQUFBLFFBQ0EsTUFBQSxvQkFDQSxLQUFBLEdBQUEsd0NBQ0EsQ0FBQSxDQUNBLEVBRUEsV0FBQSxDQUlBLE9BQUEsT0FBQSxLQUFBLEtBQUEsR0FBQSxLQUFBLE9BQUEsR0FBQSxJQUFBLENBQUEsRUFDQSxLQUFBLFlBQUEsQ0FDQSxFQUVBLFFBQUEsRUFBQSxDQUNBLFNBQUEsS0FBQSxHQUNBLEdBQUEsSUFBQSxNQUFBLEtBQUEsQ0FDQSxLQUFBLEtBQUEsS0FBQSxLQUFBLEVBQUEsRUFBQSxFQUFBLEVBQ0EsU0FBQSxLQUFBLE1BQUEsb0JBQUEsQ0FBQSxFQUNBLEVBQUEsVUFBQSxDQUVBLENBRUEsRUFFQSxXQUFBLEVBQUEsQ0FJQSxLQUFBLEdBQUEsQ0FBQSxFQUNBLFNBQUEsQ0FBQSxFQUFBLElBQUEsUUFBQSxRQUFBLENBQUEsRUFDQSxBQUFBWCxHQUFBLFFBQUEsQ0FBQSxHQUFBTSxFQUFBLFNBQUEsQ0FBQSxJQUVBLEFBREEsS0FBQSxvQkFBQSxDQUFBLEVBQ0EsS0FBQSxHQUFBLEVBQUEsWUFBQSxHQUlBLEdBQUEsR0FBQSxHQUVBLE1BQUEsRUFDQSxFQUVBLFlBQUEsQ0FBQSxTQUFBLFlBQUEsYUFBQSxJQUFBLEdBQUEsQ0FDQSxNQUFBLElBQ0EsS0FBQSxPQUNBLEtBQUEsYUFDQSxLQUFBLEtBQ0EsS0FBQSxTQUFBLENBR0EsVUFBQSxLQUNBLGFBQ0EsUUFDQSxDQUNBLENBQ0EsRUFFQSxVQUFBLEVBQUEsT0FHQSxRQUFBLHVCQUFBLElBQUEsUUFBQSx5QkFBQSxLQUFBLEVBQ0EsRUFFQSxtQkFBQSxFQUFBLEVBQUEsT0FDQSxLQUFBLGVBQUEsS0FBQSxtQkFBQSxFQUFBLENBQUEsRUFFQSxRQUFBLHdCQUFBLFFBQUEsbUJBQUEsRUFBQSxFQUNBLEVBRUEsY0FBQSxFQUFBLEVBQUEsQ0FDQSxLQUFBLGVBQUEsS0FBQSxjQUFBLEVBQUEsQ0FBQSxDQUNBLEVBRUEsZUFBQSxFQUFBLEVBQUEsQ0FDQSxLQUFBLGVBQUEsS0FBQSxlQUFBLEVBQUEsQ0FBQSxDQUNBLEVBRUEsZUFBQSxFQUFBLEVBQUEsRUFBQSxDQUNBLEtBQUEsR0FBQSxFQUFBLEtBQ0EsQUFBQSxFQUNBLEtBQUEsS0FBQSxFQUFBLEVBQUEsQ0FBQSxFQUVBLEtBQUEsUUFBQSxFQUFBLENBQUEsQ0FFQSxFQUVBLHVCQUFBLEVBQUEsQ0FDQSxNQUFBLFFBQUEsT0FBQSxDQUFBLEVBQUEsT0FBQSxDQUFBLEVBQUEsSUFBQSxDQUdBLEtBQUEsQ0FBQSxZQUFBLEVBRUEsTUFEQSxhQUFBLENBQUEsSUFDQSxLQUFBLENBQUEsRUFDQSxDQUNBLEVBQUEsRUFBQSxDQUNBLEVBRUEsWUFBQSxFQUFBLEVBQUEsRUFBQSxDQUNBLE1BQUFWLEdBQUEsa0JBQUEsQ0FBQSxFQUFBLFdBQUEsS0FBQSxRQUFBLEVBQ0EsS0FBQSxzQkFBQSxFQUFBLEVBQUEsQ0FBQSxFQUNBLEtBQUEsa0JBQUEsRUFBQSxFQUFBLENBQUEsQ0FDQSxFQUVBLHNCQUFBLEVBQUEsRUFBQSxFQUFBLENBQ0EsTUFBQSxNQUFBLGVBQ0EsRUFBQUEsRUFBQSxrQkFBQSxDQUFBLElBQUEsQ0FBQSxFQUNBLENBQ0EsQ0FDQSxFQUVBLGtCQUFBLEVBQUEsRUFBQSxFQUFBLENBQ0EsTUFBQSxNQUFBLGVBQ0EsRUFBQSxFQUFBLEtBQUEsU0FBQSxDQUFBLElBQUEsQ0FBQSxFQUNBLENBQ0EsQ0FDQSxFQUVBLGVBQUEsRUFBQSxFQUFBLENBQ0EsTUFBQSxHQUFBLEVBQUEsT0FBQSxDQUFBLEVBQUEsQ0FDQSxDQUNBLENBQ0EsQ0FBQSxvSUNodEJJZ0MsR0FBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFPLEdBQUcsY0FBYyxDQUFDLFlBQVksc0JBQXNCLE1BQU0sQ0FBRSxzQkFBdUIsRUFBSSxTQUFTLEVBQUcsTUFBTSxDQUFDLE9BQVMsRUFBSSxPQUFPLFNBQVcsRUFBSSxTQUFTLEtBQU8sRUFBSSxLQUFLLEtBQU8sRUFBSSxLQUFLLE1BQVEsRUFBSSxNQUFNLE1BQVEsRUFBSSxVQUFZLEtBQU8sRUFBSSxNQUFNLFFBQVUsR0FBSyxTQUFXLEVBQUksU0FBUyxVQUFZLEVBQUksVUFBVSxZQUFjLEVBQUksV0FBVyxFQUFFLFlBQVksRUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLGVBQWUsR0FBRyxVQUFVLENBQUMsTUFBTyxDQUFFLEVBQUksV0FBYSxFQUFJLFdBQWEsRUFBSSxTQUFVLEVBQUcsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFVBQVksRUFBSSxVQUFVLFVBQVksRUFBSSxVQUFVLFNBQVcsRUFBSSxTQUFTLFNBQVcsRUFBSSxTQUFTLE9BQVMsRUFBSSxPQUFPLFNBQVcsRUFBSSxTQUFTLEtBQU8sRUFBSSxLQUFLLEtBQU8sRUFBSSxLQUFLLE1BQVEsRUFBSSxLQUFLLEVBQUUsR0FBRyxDQUFDLE9BQVMsU0FBUyxFQUFPLENBQUMsTUFBTyxHQUFJLE1BQU0sUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBSSxHQUFJLENBQUEsQ0FBQyxFQUFFLE1BQU0sRUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDcjFCQyxHQUFrQixDQUFBLFFDdUR0QixLQUFBQyxJQUFBLEVBQUEsVUFBQSxzQkFBQSxDQUNBLE1BQUEsQ0FDQSxPQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLE1BQUEsRUFBQSxRQUFBLElBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxRQUFBLFNBQUEsRUFBQSxFQUNBLFVBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsWUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxVQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsVUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQSxDQUNBLEVBRUEsU0FBQSxDQUNBLFdBQUEsQ0FDQSxNQUFBLElBQUEsS0FBQSxNQUFBLENBQ0EsRUFFQSxVQUFBLENBQ0EsTUFBQSxDQUFBLEtBQUEsV0FBQSxDQUFBLENBQUEsS0FBQSxLQUNBLENBQ0EsQ0FDQSxDQUFBLG9JQ2xGSUYsR0FBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFRLEdBQUksYUFBZSxFQUFJLGlCQUFpQixPQUFTLEVBQUcsRUFBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxPQUFPLFFBQVEsU0FBUyxNQUFPLEVBQUksUUFBUyxXQUFXLFNBQVMsQ0FBQyxFQUFFLFlBQVksV0FBVyxFQUFFLENBQUMsRUFBSSxHQUFJLEVBQUksaUJBQWtCLFNBQVMsRUFBSSxDQUNyVCxHQUFJLEdBQVMsRUFBSSxPQUNiLEVBQVcsRUFBSSxTQUNmLEVBQWlCLEVBQUksZUFDckIsRUFBUyxFQUFJLE9BQ2IsRUFBUSxFQUFJLE1BQ3BCLE1BQU8sQ0FBRSxFQUFPLFFBQVUsU0FBVSxFQUFHLE1BQU0sQ0FBQyxZQUFZLFlBQVksQ0FBQyxFQUFFLEVBQUksR0FBRSxFQUFJLEVBQUksYUFBYSxDQUFNLEVBQUcsRUFBRyxpQkFBaUIsQ0FBQyxJQUFJLEVBQWUsTUFBTSxDQUFDLE9BQVMsRUFBTyxTQUFXLEVBQVMsS0FBTyxFQUFJLEtBQUssS0FBTyxFQUFJLEtBQUssTUFBUSxFQUFNLE9BQVMsRUFBSSxrQkFBa0IsT0FBUyxFQUFPLFNBQVcsRUFBSSxTQUFTLGVBQWlCLEVBQUksY0FBYyxDQUFDLENBQUMsRUFBRSxFQUFJLEdBQUUsRUFBSSxFQUFPLFFBQVUsUUFBUyxFQUFHLE1BQU0sQ0FBQyxZQUFZLFlBQVksQ0FBQyxFQUFFLEVBQUksR0FBSSxDQUFBLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUksSUFBSSxFQUN6YkMsR0FBa0IsQ0FBQSxRQ2tFdEIsS0FBQUMsSUFBQSxFQUFBLFVBQUEsWUFBQSxDQUNBLFNBQUEsQ0FDQSxNQUFBLENBQ0EsY0FBQSxJQUFBLEtBQUEsWUFDQSxDQUNBLEVBRUEsTUFBQSxDQUNBLE9BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxJQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQSxFQUNBLE9BQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsUUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLGVBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLENBQ0EsRUFFQSxTQUFBLENBQ0EsY0FBQSxDQUNBLE1BQUEsTUFBQSxJQUFBLEtBQUEsS0FBQSxjQUFBLENBQ0EsRUFFQSxrQkFBQSxTQVFBLEtBQUEsR0FBQSxRQUFBLGVBQUEsY0FBQSxlQUNBLE1BQUEsUUFBQSxRQUFBLFNBQUEsU0FBQSxjQUFBLGFBQUEsQ0FBQSxDQUFBLEVBQUEsSUFDQSxDQUFBLENBQUEsRUFBQSxLQUFBLENBRUEsRUFBQSxLQUFBLEVBRUEsS0FBQSxHQUFBLEdBQUEsQ0FBQSxFQUNBLEVBQUEsRUFBQSxLQUFBLFNBQUEsQ0FBQSxFQUNBLE1BQUEsQ0FDQSxTQUNBLFNBQUEsR0FBQSxDQUFBLEVBQ0EsRUFDQSxLQUFBLFNBQ0EsaUJBQ0EsU0FDQSxNQUFBLEVBQUEsS0FBQSxjQUFBLENBQUEsRUFBQSxLQUFBLEtBQ0EsQ0FDQSxDQUNBLENBQ0EsRUFFQSxjQUFBLENBR0EsTUFBQSxNQUFBLGlCQUFBLFFBQ0EsQ0FBQSxDQUFBLFNBQUEsZUFBQSxLQUFBLEdBQ0EsRUFDQSxFQUNBLEtBQUEsZ0JBQ0EsS0FBQSxZQUNBLENBQ0EsQ0FDQSxFQUVBLG1CQUFBLENBQ0EsTUFBQSxNQUFBLFFBQUEsS0FBQSxpQkFBQSxTQUFBLENBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxLQUFBLFVBQUEsRUFBQSxDQUNBLEVBRUEsZUFBQSxDQUNBLEtBQUEsVUFBQSxFQUFBLENBQ0EsRUFFQSxRQUFBLENBQ0EsVUFBQSxFQUFBLENBQ0EsS0FBQSxnQkFBQSxjQUFBLEtBQUEsQ0FBQSxDQUNBLEVBRUEsT0FBQSxDQUNBLEFBQUEsS0FBQSxLQUNBLEtBQUEsUUFBQSxLQUFBLENBQUEsS0FBQSxLQUFBLElBQUEsQ0FFQSxDQUNBLENBQ0EsQ0FBQSxvSUNsS08sWUFBdUIsRUFBTyxDQUNuQyxLQUFNLEdBQ0oxQixFQUFBQSxTQUFTLENBQUssR0FDZCxFQUFNLE1BQU0sc0NBQXNDLEVBRXBELEdBQUksRUFBTyxDQUNULEtBQU0sQ0FBRyxDQUFBLEVBQVUsR0FBVyxFQUM5QixNQUFPLFlBQVcsQ0FBUSxFQUFJLFdBQVcsQ0FBTyxDQUNwRCxLQUNJLE9BQU8sWUFBVyxDQUFLLENBRTNCLENDYkEsR0FBSXdCLElBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBTyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLE9BQU8sUUFBUSxTQUFTLE1BQU8sRUFBSSxpQkFBa0IsV0FBVyxrQkFBa0IsQ0FBQyxFQUFFLFlBQVksaUJBQWlCLE1BQU0sRUFBSSxlQUFlLE1BQU8sRUFBSSxjQUFlLEVBQUUsQ0FBRSxFQUFJLE1BQU8sRUFBRyxhQUFhLENBQUMsTUFBTSxFQUFJLGVBQWUsTUFBTSxDQUFDLE1BQVEsRUFBSSxNQUFNLFNBQVcsRUFBSSxhQUFhLENBQUMsQ0FBQyxFQUFFLEVBQUksS0FBSyxFQUFHLEVBQUksaUJBQWlCLEVBQUksT0FBTyxJQUFJLEVBQUUsQ0FBQyxJQUFJLFlBQVksWUFBWSxpQkFBaUIsTUFBTSxFQUFJLGVBQWUsTUFBTSxDQUFDLE9BQVMsRUFBSSxPQUFPLFNBQVcsRUFBSSxTQUFTLEtBQU8sRUFBSSxLQUFLLEtBQU8sRUFBSSxLQUFLLE1BQVEsRUFBSSxNQUFNLE9BQVMsRUFBSSxPQUFPLE9BQVMsRUFBSSxPQUFPLFNBQVcsRUFBSSxpQkFBaUIsRUFBRSxHQUFHLENBQUMsT0FBUyxFQUFJLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRyxjQUFjLENBQUMsTUFBTSxDQUFDLE9BQVMsRUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ3Z3QkMsR0FBa0IsQ0FBQSxRQ29FdEIsS0FBQUMsSUFBQSxFQUFBLFVBQUEsaUJBQUEsQ0FDQSxNQUFBLENBQ0EsT0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxLQUFBLEVBQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLE9BQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsT0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxRQUFBLFNBQUEsRUFBQSxFQUNBLGVBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLENBQ0EsRUFFQSxNQUFBLENBQ0EsTUFBQSxDQUNBLE9BQUEsSUFDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLFNBQUEsQ0FDQSxNQUFBLElBQUEsR0FBQSxLQUFBLENBQUEsT0FBQSxLQUFBLE9BQUEsQ0FDQSxFQUVBLGFBQUEsQ0FDQSxNQUFBLEdBQUEsS0FBQSxNQUFBLEdBQUEsQ0FBQSxDQUNBLEVBRUEsVUFBQSxDQUNBLEtBQUEsQ0FBQSxVQUFBLEtBQ0EsQ0FBQSxTQUFBLEVBQ0EsTUFDQSxLQUFBLElBQ0EsRUFBQSxDQUFBLEdBQUEsS0FBQSxZQUFBLGVBQUEsS0FBQSxlQUVBLEVBRUEsT0FBQSxDQUNBLE1BQUEsTUFBQSxTQUFBLEtBQUEsU0FBQSxLQUFBLE1BQUEsRUFBQSxJQUNBLEVBRUEsZUFBQSxDQUVBLE1BQUEsTUFBQSxPQUFBLEtBQUEsU0FBQSxJQUNBLEVBRUEsZUFBQSxFQUFBLFFBQUEsQ0FDQSxLQUFBLENBQUEsT0FBQSxNQUFBLEVBQ0EsU0FBQSxDQUNBLE1BQUEsTUFBQSxZQUFBLFlBQ0EsRUFDQSxJQUFBLEVBQUEsQ0FFQSxNQUFBLEtBQUEsT0FDQSxFQUNBMUIsRUFBQUEsU0FBQSxDQUFBLEVBQ0EsRUFBQSxNQUFBLG1CQUFBLEVBQUEsR0FDQSxDQUNBLENBQ0EsQ0FBQSxFQUVBLHVCQUFBLEVBQUEsUUFBQSxDQUNBLEtBQUEsT0FDQSxJQUFBLEVBQUEsQ0FDQSxNQUFBQSxHQUFBQSxTQUFBLENBQUEsR0FDQSxFQUFBLE1BQUEsYUFBQSxFQUFBLElBQUEsSUFFQSxDQUNBLENBQUEsRUFFQSxpQkFBQSxFQUFBLFVBQUEsQ0FDQSxLQUFBLFFBQ0EsU0FBQSxDQUNBLE1BQUEsTUFBQSxZQUFBLGNBQ0EsQ0FDQSxDQUFBLEVBRUEsa0JBQUEsRUFBQSxXQUFBLENBQ0EsS0FBQSxRQUNBLFFBQUEsR0FDQSxJQUFBLEVBQUEsQ0FDQSxNQUFBLElBQUEsS0FBQSxRQUNBLENBQ0EsQ0FBQSxFQUVBLGdCQUFBLENBQ0EsS0FBQSxDQUFBLE1BQUEsR0FBQSxLQUFBLE9BQ0EsTUFBQSxJQUNBLGNBQUEsS0FBQSxPQUNBLG9CQUFBLEdBQUEsS0FBQSxNQUFBLEdBRUFBLEVBQUFBLFNBQUEsQ0FBQSxFQUNBLEVBQUEsR0FBQSxFQUFBLEVBQ0EsRUFHQSxFQUVBLGdCQUFBLENBQ0EsS0FBQSxHQUFBLEtBQUEsZUFFQSxFQUNBLENBQUEsS0FBQSxPQUFBLE1BQUEsRUFBQSxTQUFBLENBQUEsRUFBQSxPQUNBLEtBQUEsS0FBQSxDQUFBLEVBQUEsV0FBQSxDQUFBLEVBQ0EsUUFBQSxLQUFBLENBQUEsRUFBQSxFQUNBLEdBQUEsQ0FBQSxFQUFBLElBRUEsTUFBQUQsR0FBQUEsU0FBQSxDQUFBLEVBQUEsR0FBQSxLQUFBLENBQ0EsRUFFQSxnQkFBQSxDQUVBLEtBQUEsR0FDQSxLQUFBLHlCQUFBLEtBQ0EsS0FBQSxpQkFBQSxPQUdBLEVBQUEsS0FBQSx5QkFBQSxJQUNBLE1BQUEsQ0FDQSxLQUFBLEdBQUEsRUFBQSxFQUFBLEtBQUEsRUFBQSxFQUFBLEtBQUEsS0FBQSxnQkFDQSxDQUNBLEVBRUEsZ0JBQUEsQ0FDQSxLQUFBLEdBQUEsS0FBQSxpQkFBQSxPQUNBLE1BQUEsQ0FDQSxjQUFBLEtBQUEsT0FDQSxnQkFBQSxLQUFBLGtCQUNBLGtCQUFBLENBQUEsR0FBQSxLQUFBLGlCQUFBLE9BQ0Esa0JBQUEsRUFDQSxrQkFBQSxDQUFBLENBQUEsS0FBQSxNQUNBLENBQ0EsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxTQUFBLEVBQUEsQ0FDQSxLQUFBLE9BQUEsQ0FDQSxDQUNBLENBQ0EsQ0FBQSxvSUNqTkl5QixHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQU8sR0FBRyxNQUFNLENBQUMsWUFBWSxXQUFXLEVBQUUsRUFBSSxHQUFJLEVBQUksS0FBTSxTQUFTLEVBQVUsRUFBSSxDQUFDLE1BQVEsR0FBSSxhQUFhLENBQVMsRUFBRyxFQUFHLGNBQWMsQ0FBQyxJQUFJLEVBQUksWUFBWSxZQUFZLE1BQU0sQ0FBQyxHQUFLLENBQUUsS0FBTSxDQUFHLEVBQUcsZUFBZSxhQUFhLENBQUMsRUFBRSxDQUFDLEVBQUksR0FBRyxFQUFJLEdBQUcsRUFBSSxTQUFTLEVBQVcsQ0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBSSxHQUFJLENBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUN0WEMsR0FBa0IsQ0FBQSxRQ3dDdEIsS0FBQUMsSUFBQSxFQUFBLFVBQUEsWUFBQSxDQUNBLE1BQUEsQ0FDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQSxFQUNBLFlBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLENBQ0EsQ0FDQSxDQUFBLG9JQzlDSUYsR0FBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFPLEdBQUcsRUFBSSxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxPQUFPLFFBQVEsU0FBUyxNQUFPLEVBQUksU0FBWSxFQUFDLEVBQUksbUJBQXFCLEVBQUksa0JBQWtCLFNBQVUsV0FBVyw4REFBOEQsQ0FBQyxFQUFFLElBQUksWUFBWSxZQUFZLGFBQWEsR0FBRyxDQUFDLE9BQVMsU0FBUyxFQUFPLENBQUMsRUFBTyxlQUFjLENBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFHLFFBQVEsQ0FBQyxZQUFZLGtCQUFrQixFQUFFLENBQUMsRUFBSSxHQUFHLEVBQUksR0FBRyxFQUFJLFNBQVMsRUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFHLGNBQWMsQ0FBQyxZQUFZLG9CQUFvQixNQUFNLENBQUMsT0FBUyxFQUFJLFlBQVksU0FBVyxFQUFJLGNBQWMsS0FBTyxFQUFJLFVBQVUsS0FBTyxFQUFJLEtBQUssTUFBUSxFQUFJLE1BQU0sU0FBVyxFQUFJLFNBQVMsV0FBYSxFQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRyxlQUFlLENBQUMsTUFBTSxDQUFDLEtBQU8sVUFBVSxRQUFVLEVBQUksY0FBYyxTQUFXLEVBQUksY0FBYyxLQUFPLEVBQUksVUFBVSxLQUFPLEVBQUksS0FBSyxNQUFRLEVBQUksTUFBTSxTQUFXLEVBQUksUUFBUSxFQUFFLEtBQUssU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDejVCQyxHQUFrQixDQUFBLFFDdUV0QixLQUFBQyxJQUFBLEVBQUEsVUFBQSxhQUFBLENBQ0EsT0FBQSxDQUFBLEVBQUEsRUFFQSxTQUFBLENBQ0EsTUFBQSxDQUNBLGdCQUFBLElBQUEsS0FDQSxjQUFBLElBQUEsS0FBQSxpQkFDQSxDQUNBLEVBRUEsTUFBQSxDQUNBLE9BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxRQUFBLFNBQUEsRUFBQSxFQUNBLGtCQUFBLENBQUEsS0FBQSxFQUFBLFFBQUEsSUFBQSxDQUNBLEVBRUEsTUFBQSxDQUNBLE1BQUEsQ0FDQSxRQUFBLElBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxnQkFBQSxDQUNBLE1BQUEsS0FDQSxFQUVBLGNBQUEsQ0FDQSxNQUFBLE1BQUEsaUJBQ0EsRUFFQSxlQUFBLENBQ0EsTUFBQSxJQUFBLEtBQUEsT0FBQSxPQUFBLENBQ0EsRUFFQSxRQUFBLENBQ0EsTUFBQSxNQUFBLE9BQUEsUUFBQSxLQUFBLFFBQ0EsRUFFQSxZQUFBLENBQ0EsTUFBQSxDQUFBLENBQUEsS0FBQSxPQUNBLEVBRUEsV0FBQSxDQUNBLE1BQUEsTUFBQSxTQUFBLEtBQUEsSUFDQSxFQUVBLGFBQUEsQ0FDQSxHQUFBLEtBQUEsV0FDQSxNQUFBLE1BQUEsT0FDQSxDQUdBLEtBQUEsUUFBQSxPQUFBLFNBQUEsRUFDQSxNQURBLEdBQUEsRUFBQSxDQUFBLFFBRUEsQ0FDQSxFQUVBLFVBQUEsQ0FFQSxNQUFBLE1BQUEsV0FBQSxPQUFBLEtBQ0EsRUFFQSxlQUFBLENBSUEsTUFBQSxNQUFBLFdBQUEsS0FBQSxTQUFBLEtBQUEsZ0JBQUEsUUFDQSxFQUVBLFFBQUEsRUFBQSxVQUFBLENBQ0EsS0FBQSxRQUNBLFFBQUEsRUFDQSxDQUFBLENBQ0EsRUFFQSxTQUFBLENBQ0EsS0FBQSxVQUFBLEVBQUEsRUFHQSxLQUFBLENBQUEsUUFBQSxLQUFBLE9BQ0EsQUFBQSxHQUNBLE1BQUEsUUFB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QUksRUFBRyxFQUFHLElBQUksQ0FBQyxNQUFPLGFBQWUsRUFBTSxHQUFHLENBQUMsVUFBWSxTQUFTLEVBQU8sQ0FBQyxTQUFPLGdCQUFpQixFQUFRLEVBQUksb0JBQW9CLENBQUksQ0FBQyxFQUFFLFFBQVUsU0FBUyxFQUFPLENBQUMsTUFBTyxHQUFJLGtCQUFrQixDQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFJLEdBQUcsRUFBSSxHQUFHLEVBQUksU0FBUyxDQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFJLEdBQUUsQ0FBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUcsU0FBUyxDQUFDLFlBQVksY0FBYyxNQUFPLGVBQWlCLEVBQUksS0FBTSxNQUFNLENBQUMsS0FBTyxFQUFJLFVBQVksU0FBVyxTQUFTLE1BQVEsRUFBSSxTQUFTLEVBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQVEsU0FBUyxFQUFPLENBQUMsTUFBTyxHQUFJLFdBQVcsRUFBSSxNQUFNLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUksR0FBRyxFQUFJLEdBQUcsRUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDcGpDQyxHQUFrQixDQUFBLFFDd0N0QixLQUFBQyxJQUFBLEVBQUEsVUFBQSxxQkFBQSxDQUNBLE9BQUEsQ0FBQSxFQUFBLEVBRUEsTUFBQSxDQUNBLE9BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLENBQ0EsRUFFQSxTQUFBLENBQ0EsT0FBQSxDQUNBLE1BQUEsR0FBQSxLQUFBLE9BQUEsS0FBQSxPQUFBLENBQ0EsRUFFQSxXQUFBLENBQ0EsTUFBQSxJQUFBLEtBQUEsTUFBQSxDQUNBLEVBRUEsY0FBQSxDQUNBLE1BQUEsUUFBQSxLQUFBLEtBQUEsS0FBQSxFQUFBLE9BQUEsR0FBQSxDQUFBLEtBQUEsTUFBQSxPQUNBLENBQ0EsRUFFQSxRQUFBLENBQ0EsWUFBQSxFQUFBLENBRUEsTUFBQSxHQUFBLFlBQUEsRUFDQSxFQUVBLFdBQUEsRUFBQSxFQUFBLEtBQUEsQ0FDQSxHQUFBLEtBQUEsWUFBQSxDQUFBLEVBQ0EsQUFBQSxLQUFBLFVBQ0EsS0FBQSxnQkFBQSxXQUFBLEVBQUEsQ0FBQSxFQUVBLEtBQUEsUUFBQSxLQUFBLENBQ0EsS0FBQSxHQUFBLEtBQUEsY0FDQSxNQUFBLENBQUEsTUFBQSxFQUNBLE9BQUEsRUFDQSxDQUFBLE1BR0EsTUFBQSxJQUFBLE9BQUEsMkNBQUEsQ0FFQSxFQUVBLGlCQUFBLEVBQUEsQ0FDQSxLQUFBLFdBQUEsS0FBQSxNQUFBLEdBQUEsQ0FBQSxFQUNBLEtBQUEsZ0JBQUEsRUFBQSxDQUNBLENBQ0EsQ0FDQSxDQUFBLG9JQzVGSUYsR0FBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFRLEdBQUksVUFBVyxFQUFHLE1BQU0sQ0FBQyxZQUFZLGdEQUFnRCxFQUFFLENBQUMsRUFBRyxTQUFTLENBQUMsSUFBSSxXQUFXLFlBQVksK0JBQStCLE1BQU0sQ0FBQyxLQUFPLFNBQVMsTUFBUSxZQUFZLFNBQVcsQ0FBQyxFQUFJLFdBQVcsRUFBRSxHQUFHLENBQUMsTUFBUSxFQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRyxTQUFTLENBQUMsWUFBWSxnQ0FBZ0MsTUFBTSxDQUFDLEtBQU8sU0FBUyxNQUFRLGFBQWEsU0FBVyxDQUFDLEVBQUksWUFBWSxFQUFFLEdBQUcsQ0FBQyxNQUFRLEVBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBSSxJQUFJLEVBQ3RnQkMsR0FBa0IsQ0FBQSxFQ3lCdEIsS0FBQUMsSUFBQSxFQUFBLFVBQUEsaUJBQUEsQ0FDQSxPQUFBLENBQUEsQ0FBQSxFQUVBLE1BQUEsQ0FDQSxVQUFBLENBQUEsS0FBQSxDQUFBLFFBQUEsTUFBQSxFQUFBLFFBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLEtBQUEsRUFBQSxRQUFBLElBQUEsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLENBQ0EsWUFBQSxHQUNBLGFBQUEsR0FDQSxhQUFBLEVBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxrQkFBQSxDQUNBLE1BQUF4QixHQUFBQSxTQUFBLEtBQUEsU0FBQSxFQUFBLEtBQUEsVUFBQSxDQUFBLENBQ0EsRUFFQSxVQUFBLENBQ0EsS0FBQSxDQUFBLFFBQUEsS0FBQSxpQkFDQSxNQUFBLEdBQ0EsR0FBQSxFQUFBLEtBQUEsS0FBQSxHQUFBLEdBQUEsS0FBQSxDQUNBLGVBQ0EsQ0FBQSxDQUFBLEVBQ0EsR0FBQWlCLEVBQUEsTUFBQSxDQUFBLENBQ0EsRUFFQSxXQUFBLENBQ0EsS0FBQSxDQUFBLFNBQUEsS0FBQSxpQkFDQSxNQUFBLEdBQ0EsR0FBQSxFQUFBLEtBQUEsS0FBQSxHQUFBLEdBQUEsS0FBQSxDQUNBLGVBQ0EsQ0FBQSxDQUFBLEVBQ0EsR0FBQSxDQUNBLENBQ0EsRUFFQSxTQUFBLENBR0EsS0FBQSxNQUFBLFNBQUEsQ0FDQSxLQUFBLEtBQUEsY0FDQSxDQUFBLEVBQ0EsS0FBQSxNQUFBLE9BQUEsQ0FDQSxNQUFBLEtBQUEsY0FDQSxDQUFBLEVBQ0EsS0FBQSxPQUFBLE9BQUEsQ0FFQSxVQUFBLEdBQ0EsUUFBQSxDQUFBLEVBQUEsSUFBQSxDQUNBLEFBQUEsSUFBQSxHQUNBLEtBQUEsZUFBQSxDQUVBLENBQ0EsQ0FBQSxDQUNBLEVBRUEsUUFBQSxNQUNBLGtCQUFBLEVBQUEsZUFFQSxHQUFBLENBQUEsaUJBQUEsS0FBQSxTQUNBLEdBQUEsQ0FDQSxLQUFBLEdBQUEsS0FBQSxpQkFBQSxZQUFBLGNBQUEsV0FBQSx1QkFDQSxBQUFBLEtBQUEsY0FBQSxHQUdBLE1BQUEsaUJBQUEsWUFBQSxjQUFBLFlBQUEscUJBQUEsSUFDQSxLQUFBLGFBQUEsSUFFQSxHQUNBLEdBQUEsS0FBQSxNQUFBLENBQUEsRUFFQSxPQUFBLEVBQUEsQ0FDQSxBQUFBLEdBQ0EsU0FBQSxNQUFBLEVBQUEsRUFBQSxLQUFBLEVBQUEsT0FBQSxFQUNBLEVBQUEsT0FBQSxlQUNBLE1BQUFZLEVBQUFBO0FBQUFBO0FBQUFBLGdCQUVBLEVBQUE7QUFBQSxhQUNBLEVBR0EsQ0FDQSxLQUFBLE1BQUEsQ0FBQSxFQUFBLFlBQUEsRUFBQSxJQUFBLEVBQUEsQ0FBQSxZQUNBLE1BQUEsS0FBQSxTQUFBLGtCQUFBLGNBQUEsT0FBQSxNQUFBLEVBQUEsSUFDQSxPQUVBLGlCQUFBLENBQ0EsS0FBQSxZQUFBLENBQUEsQ0FBQSxLQUFBLEtBR0EsS0FBQSxhQUFBLENBQUEsQ0FBQSxLQUFBLE1BQUEsaUJBQUEsRUFBQSxDQUNBLE9BRUEsU0FBQSxXQUNBLEdBQUEsR0FBQSxRQUFBLGtCQUFBLGNBQUEsY0FDQSxHQUFBLENBQ0EsRUFBQSxHQUFBLEtBQUEsU0FBQSxDQUFBLEVBRUEsS0FBQSxTQUFBLGNBQUEsRUFDQSxHQUFBLENBQ0EsS0FBQSxHQUFBLEtBQUEsVUFBQSxFQUFBLEtBQUEsQ0FBQSxFQUNBLEtBQUEsaUJBQUEsWUFBQSxjQUFBLFlBQUEscUJBQUEsSUFFQSxLQUFBLE1BQUEsZUFBQSxDQUNBLE9BQUEsRUFBQSxDQUNBLFFBQUEsTUFBQSxFQUFBLEVBQUEsS0FBQSxFQUFBLE9BQUEsQ0FDQSxDQUNBLE9BQUEsRUFBQSxDQUNBLFFBQUEsTUFBQSxDQUFBLEVBQ0EsTUFBQSxFQUFBLE9BQUEsQ0FDQSxDQUNBLE9BRUEsVUFBQSxDQUNBLEdBQUEsR0FBQSxLQUFBLE1BQUEsaUJBQUEsRUFBQSxFQUNBLEdBQUEsQ0FDQSxFQUFBLEdBQUEsS0FBQSxVQUFBLENBQUEsRUFDQSxHQUNBLEtBQUEsZ0JBQUEsUUFBQSxDQUFBLENBRUEsT0FBQSxFQUFBLENBQ0EsUUFBQSxNQUFBLENBQUEsRUFDQSxNQUFBLEVBQUEsT0FBQSxDQUNBLENBQ0EsQ0FD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QVMsRUFBTyxDQUFDLEVBQU8sZUFBYyxDQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxPQUFPLFFBQVEsU0FBUyxNQUFPLEdBQU8sV0FBVyxPQUFPLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBTyxTQUFTLFNBQVcsT0FBTyxjQUFjLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRyxjQUFjLENBQUMsTUFBTSxDQUFDLE9BQVMsRUFBSSxPQUFPLFNBQVcsRUFBSSxTQUFTLEtBQU8sRUFBSSxLQUFLLEtBQU8sRUFBSSxLQUFLLE1BQVEsRUFBSSxNQUFNLFNBQVcsRUFBSSxVQUFVLFdBQWEsRUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFHLGVBQWUsQ0FBQyxZQUFZLDBEQUEwRCxNQUFNLENBQUMsS0FBTyxVQUFVLFFBQVUsRUFBSSxjQUFjLFNBQVcsRUFBSSxTQUFTLEtBQU8sRUFBSSxLQUFLLEtBQU8sRUFBSSxLQUFLLE1BQVEsRUFBSSxNQUFNLFNBQVcsRUFBSSxTQUFTLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUMzcENDLEdBQWtCLENBQUEsRUN1RHRCLEtBQUFDLElBQUEsRUFBQSxVQUFBLFlBQUEsQ0FDQSxPQUFBLENBQUEsR0FBQSxFQUFBLEVBRUEsTUFBQSxDQUNBLE1BQUEsQ0FDQSxZQUFBLEtBQ0EsV0FBQSxPQUNBLFVBQUEsS0FDQSxPQUFBLEVBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxPQUFBLENBSUEsS0FBQSxHQUFBLEtBQUEsU0FBQSxFQUNBLENBQUEsYUFBQSxnQkFBQSxLQUNBLE1BQUEsUUFDQSxHQURBLENBRUEsT0FBQSxFQUFBLEVBQUEsT0FBQSxFQUFBLEtBQ0EsVUFBQSxFQUFBLEVBQUEsUUFBQSxFQUFBLE1BQ0EsT0FBQSxFQUFBLEVBQUEsT0FBQSxFQUFBLE1BQ0EsVUFBQSxFQUFBLEVBQUEsVUFBQSxFQUFBLE1BQ0EsRUFDQSxFQUVBLFFBQUEsQ0FDQSxNQUFBLE1BQUEsa0JBQ0EsS0FBQSxhQUdBLEtBQUEsTUFBQSxDQUFBLEtBQUEsS0FBQSxJQUFBLEVBQ0EsS0FBQSxPQUNBLEdBQUEsQ0FBQSxDQUNBLEVBRUEsZUFBQSxDQUNBLE1BQUEsSUFDQU0sRUFBQSxNQUNBLENBQ0EsT0FBQSxDQUNBLEtBQUEsU0FDQSxPQUFBLENBQ0EsTUFBQSxJQUFBLEtBQUEsT0FBQSxDQUNBLENBQ0EsRUFFQSxPQUFBLENBQUEsS0FBQSxZQUFBLENBQ0EsS0FBQSxTQUVBLFVBQUEsR0FDQSxPQUFBLENBQ0EsTUFBQSxDQUFBLENBQUEsVUFBQSxLQUFBLEVBQUEsT0FBQSxDQUNBLENBQ0EsQ0FDQSxFQUNBLEtBQUEsT0FBQSxPQUNBLENBQ0EsQ0FDQSxFQUVBLFVBQUEsQ0FDQSxNQUFBLE1BQUEsYUFBQSxLQUFBLG1CQUNBLEVBRUEsYUFBQSxDQUNBLE1BQUEsQ0FBQSxLQUFBLFlBQ0EsRUFFQSxZQUFBLENBRUEsTUFBQSxNQUFBLFFBQUEsUUFDQSxFQUVBLFNBQUEsT0FDQSxNQUFBLENBQUEsS0FBQSxZQUFBLENBQUEsQ0FBQSxTQUFBLHNCQUFBLFFBQUEsUUFDQSxFQUVBLGFBQUEsT0FDQSxNQUFBLFNBQUEsc0JBQUEsY0FBQSxjQUFBLElBQ0EsRUFFQSxZQUFBLENBSUEsTUFBQSxNQUFBLGFBQUEsTUFDQSxFQUVBLE1BQUEsQ0FFQSxNQUFBLE1BQUEsT0FBQSxNQUFBLElBQ0EsRUFFQSxRQUFBLE9BQ0EsTUFBQSxNQUFBLFdBQ0EsS0FDQSxRQUFBLFFBQUEsT0FBQSxJQUNBLEVBRUEsUUFBQSxDQUNBLE1BQUEsTUFBQSxXQUFBLE9BQUEsT0FDQSxFQUVBLFVBQUEsQ0FDQSxLQUFBLEdBQUEsS0FBQSxZQUFBLEVBQ0EsTUFBQSxJQUFBLEtBQUEsT0FBQSxDQUFBLEdBQUEsQ0FDQSxFQUVBLGtCQUFBLENBQ0EsTUFBQUYsR0FBQSxXQUFBLEtBQUEsV0FBQSxLQUFBLE1BQUEsT0FBQSxLQUFBLE1BQUEsSUFBQSxDQUNBLEVBRUEsTUFBQSxDQVNBLE1BQUEsTUFBQSxhQUFBLEtBQUEsWUFBQSxLQUFBLGVBQUEsSUFDQSxFQUVBLFVBQUEsQ0FDQSxNQUFBLE1BQUEsZ0JBQUEsS0FBQSxhQUFBLENBQ0EsRUFFQSxZQUFBLENBSUEsR0FBQSxDQUFBLFFBQUEsS0FBQSxxQkFDQSxHQUFBLEVBQUEsQ0FHQSxLQUFBLEdBQUF2QyxFQUFBLGNBQ0EsS0FBQSxnQkFBQSxLQUFBLG9CQUFBLENBQ0EsRUFHQSxFQUFBLEtBQUEsWUFBQSxLQUFBLE1BQUEsR0FBQSxFQUNBLEVBQUEsRUFBQSxNQUFBLEVBQUEsT0FBQSxFQUFBLE1BQUEsRUFDQSxLQUFBLFVBQUEsS0FDQSxLQUFBLEdBQUEsRUFBQSxFQUFBLE9BQUEsR0FDQSxBQUFBLEVBQUEsS0FBQSxZQUFBLEdBQUEsSUFBQSxVQUlBLEVBQUEsU0FFQSxPQUFBLEdBQUEsRUFBQSxFQUFBLEVBQUEsT0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLENBQ0EsS0FBQSxHQUFBLEVBQUEsR0FFQSxFQUFBLE9BQUEsS0FBQSxFQUFBLEVBQUEsRUFDQSxJQUFBLFNBQ0EsS0FDQSxLQUFBLGdCQUFBLEtBQUEsYUFBQSxFQUFBLENBQUEsRUFDQSxFQUdBLEFBQUEsSUFBQSxFQUFBLEVBQ0EsS0FBQSxVQUFBLEVBRUEsRUFBQSxFQUFBLEVBRUEsQ0FDQSxDQUNBLE1BQUEsRUFDQSxFQUVBLGVBQUEsQ0FJQSxHQUNBLEtBQUEsYUFDQSxLQUFBLGFBQUEsUUFDQSxLQUFBLFlBQ0EsS0FBQSxZQUFBLEtBQ0EsQ0FDQSxHQUFBLEdBQUEsS0FBQSxXQUFBLEtBQUEsV0FDQSxNQUFBLE1BQUEsWUFHQSxNQUFBLFdBQUEsRUFBQTRCLEVBQUFBLE1BQUEsQ0FBQSxHQUdBLElBQUEsTUFDQSxDQUFBLEtBQUEsWUFDQSxFQUFBLEtBQUEsWUFBQSxHQUdBLEtBQUEsUUFBQSxLQUFBLENBQUEsS0FBQSxTQUFBLE9BQUEsR0FBQSxFQUVBLENBQ0EsQ0FDQSxNQUFBLE1BQUEsVUFDQSxFQUdBLFNBQUEsQ0FDQSxNQUFBLENBQUEsQ0FBQSxLQUFBLElBQ0EsRUFFQSxXQUFBLENBQ0EsTUFBQSxNQUFBLGFBQUEsS0FBQSxhQUFBLEtBQUEsS0FBQSxDQUFBLFNBQUEsR0FBQSxDQUNBLENBQ0EsRUFFQSxNQUFBLENBQ0EsV0FBQSxrQkFFQSxPQUFBLFdBQ0EsRUFFQSxRQUFBLENBQ0EsZ0JBQUEsRUFBQSxFQUFBLENBQ0EsTUFBQSxNQUFBLG9CQUFBLFVBQUEsRUFBQSxDQUFBLENBQ0EsRUFFQSxnQkFBQSxFQUFBLENBRUEsTUFBQSxNQUFBLElBQUEsZ0JBQUEsS0FBQSxLQUVBLE1BQUEsR0FBQSxPQUFBLEVBQUEsRUFBQSxLQUFBLFFBQUEsQ0FBQSxDQUFBLENBQ0EsRUFHQSxXQUFBLENBQ0EsQUFBQSxLQUFBLFdBQ0EsS0FBQSxZQUFBLEtBQUEsYUFDQSxLQUFBLFdBQUEsS0FBQSxPQUFBLEtBQUEsSUFBQSxFQUVBLEtBQUEsV0FBQSxDQUVBLEVBRUEsY0FBQSxFQUFBLENBQ0EsR0FBQSxLQUFBLFlBQUEsS0FBQSxZQUFBLEtBQUEsQ0FDQSxLQUFBLENBQUEsdUJBQUEsS0FDQSxZQUFBLEtBQ0EsS0FBQSxXQUNBLEtBQUEsVUFDQSxFQUFBLFdBQUEsQ0FBQSxDQUNBLEVBQ0EsRUFBQSxTQUFBLEVBQ0EsRUFDQSxDQUNBLE1BQUEsRUFDQSxFQUVBLGNBQUEsRUFBQSxPQUNBLE1BQUEsR0FBQSxLQUFBLFlBQUEsRUFDQSxLQUFBLGNBQUEsQ0FBQSxFQUNBLENBQUEsQ0FBQSxTQUFBLGFBQUEsUUFBQSxLQUFBLEdBQ0EsRUFHQSxXQUFBLENBQ0EsS0FBQSxRQUFBLElBQUEsQ0FDQSxFQUdBLFFBQUEsRUFBQSxDQUVBLEFBQUEsS0FBQSxZQUVBLEtBQUEsY0FBQSxDQUFBLEVBRUEsTUFBQSxZQUFBLEtBQ0EsS0FBQSxXQUFBLEVBRUEsRUFFQSxnQkFBQSxFQUFBLEVBQUEsQ0FFQSxBQUFBLElBQUEsR0FDQSxNQUFBLFdBQUEsT0FFQSxPQUVBLFNBQUEsQ0FDQSxNQUFBLE1BQUEsTUFBQSxDQUNBLE9BRUEsUUFBQSxDQUNBLE1BQUEsTUFBQSxTQUFBLEtBQUEscUJBQUEsSUFBQSxDQUNBLEVBRUEsY0FBQSxFQUFBLEdBQUEsQ0FDQSxNQUFBLE1BQUEsV0FDQSxFQUFBLFNBQUEsVUFDQSxFQUFBLFNBQUEsV0FDQSxPQUVBLFFBQUEsRUFBQSxDQUFBLFdBQUEsR0FBQSxZQUFBLElBQUEsR0FBQSxDQUNBLEdBQUEsR0FBQSxDQUFBLEtBQUEsY0FDQSxNQUFBLEdBR0EsS0FBQSxHQUFBLEdBQUEsS0FBQSxNQUFBLEtBQUEsY0FBQSxDQUFBLEdBR0EsRUFBQSxFQUFBLEVBQUEsT0FBQSxTQUFBLENBQ0EsT0FBQSxLQUFBLFFBQ0EsQ0FBQSxFQUNBLEVBQUEsR0FBQSxLQUFBLFNBQ0EsRUFBQSxrQkFBQSxTQUFBLEtBQUEsT0FDQSxFQUFBLEtBQUEsZUFBQSxFQUFBLENBQUEsRUFDQSxHQUFBLEdBMkRBLEdBMURBLEFBQUEsQ0FBQSxHQUFBLEtBQUEsWUFDQSxFQUFBLEtBQUEsTUFBQSxnQkFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLENBQ0EsVUFBQSxJQUFBLEtBQUEsZ0JBQUEsS0FBQSxjQUFBLENBQUEsRUFDQSxRQUFBLEdBQUEsS0FBQSxnQkFBQSxRQUFBLENBQ0EsUUFBQSxDQUFBLE9BQUEsQ0FDQSxDQUFBLEVBQ0EsY0FBQSxJQUFBLENBQ0EsS0FBQSxHQUFBLEVBQUEsRUFBQSxFQUNBLEtBQUEsT0FBQSxDQUNBLEtBQUEsT0FDQSxNQUFBLEtBQUEsV0FDQSxRQUFBVyxFQUFBQSxXQUFBLENBQUEsSUFDQSxVQUFBQSxFQUFBQSxXQUFBLENBQUEsSUFDQSxLQUFBLENBQ0EsS0FBQSxXQUNBLEdBQUEsS0FBQSxpQkFBQSxLQUNBLGNBQUEsS0FBQSxrQkFBQSxLQUNBLEtBQUEsYUFDQSxDQUNBLENBQUEsQ0FDQSxFQUNBLFlBQUEsSUFBQSxDQUNBLEtBQUEsR0FBQSxFQUFBLEVBQUEsRUFDQSxLQUFBLE9BQUEsQ0FDQSxLQUFBLFFBQ0EsTUFBQSxnQkFDQSxLQUFBLGFBQUEsS0FBQSxLQUFBLFlBQ0EsQ0FBQSxDQUNBLENBQ0EsQ0FBQSxFQUVBLEVBQUEsS0FBQSxNQUFBLGVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxDQUNBLFFBQUEsR0FDQSxVQUFBLElBQUEsS0FBQSxnQkFBQSxLQUFBLGNBQUEsQ0FBQSxFQUNBLFFBQUEsR0FBQSxLQUFBLGdCQUFBLFFBQUEsQ0FDQSxRQUFBLENBQUEsT0FBQSxDQUNBLENBQUEsRUFDQSxjQUFBLElBQUEsQ0FDQSxLQUFBLEdBQUEsRUFBQSxFQUFBLEVBQ0EsS0FBQSxPQUFBLENBQ0EsS0FBQSxVQUNBLE1BQUEsZ0JBQUFBLGFBQUEsQ0FBQSxJQUNBLEtBQUEsR0FBQSxLQUFBLGlCQUFBLElBQ0EsQ0FBQSxDQUNBLEVBQ0EsWUFBQSxHQUFBLENBQ0EsS0FBQSxHQUFBLEVBQUEsRUFBQSxFQUNBLEtBQUEsT0FBQSxDQUNBLEtBQUEsUUFDQSxNQUFBLGdCQUNBLEtBQUEsQ0FDQSxhQUFBLEtBQUEsS0FBQSxZQUFBLEVBQUEsSUFBQSxLQUNBLGtCQUFBLFVBQUEsQ0FDQSxDQUNBLENBQUEsQ0FDQSxDQUNBLENBQUEsRUFFQSxHQUVBLEdBREEsS0FBQSxnQkFBQSxFQUNBLEdBQUEsRUFBQSxVQUNBLEtBQUEsTUFBQSxVQUNBLEtBQUEsV0FBQSxDQUVBLEtBQUEsR0FBQSxLQUFBLFVBQUEsS0FBQSxPQUFBLEtBQUEsSUFBQSxFQUNBLEtBQUEsUUFBQSxRQUFBLENBQUEsS0FBQSxNQUFBLElBQUEsT0FBQSxHQUFBLENBQ0EsRUFFQSxNQUFBLEVBQ0EsT0FFQSxpQkFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLENBQ0EsWUFDQSxVQUNBLGdCQUNBLGVBQ0EsQ0FFQSxLQUFBLEdBQUEsS0FBQSxXQUNBLEtBQUEsY0FBQSxDQUFBLEVBQ0EsS0FBQSxjQUFBLENBQUEsRUFDQSxHQUFBLEVBQ0EsYUFDQSxLQUFBLE1BQUEsZ0JBQUEsRUFBQSxVQUFBLENBQ0EsT0FBQSxDQUNBLENBQUEsTUFDQSxDQUNBLEtBQUEsR0FBQSxrQ0FDQSxXQUFBLEdBQ0EsS0FBQSxNQUFBLGdCQUFBLEVBQUEsUUFBQSxDQUNBLE9BQUEsRUFDQSxPQUNBLENBQUEsQ0FDQSxDQUNBLE1BQUEsRUFDQSxDQUNBLENBQ0EsQ0FBQSwwSUN2Y0EsS0FBQUosSUFBQSxHQUFBLFVBQUEsbUJBQUEsQ0FBQSxDQUFBLG9KQ1pJRixHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQVEsR0FBSSxPQUFRLEVBQUcsTUFBTSxDQUFDLFlBQVksYUFBYSxFQUFFLENBQUMsRUFBRyxLQUFLLEVBQUksR0FBSSxFQUFJLE9BQVEsU0FBUyxFQUFNLENBQUMsTUFBTyxHQUFHLEtBQUssQ0FBQyxFQUFJLEdBQUcsRUFBSSxHQUFHLENBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFJLElBQUksRUFDbFBDLEdBQWtCLENBQUEsUUNxQnRCLEtBQUFDLElBQUEsRUFBQSxVQUFBLGNBQUEsQ0FDQSxNQUFBLENBQ0EsT0FBQSxDQUFBLEtBQUEsTUFBQSxRQUFBLElBQUEsQ0FDQSxDQUNBLENBQUEsb0lDMUJJRixHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQU8sR0FBRyxNQUFNLENBQUMsWUFBWSxhQUFhLEVBQUUsRUFBSSxHQUFJLEVBQUksT0FBUSxTQUFTLEVBQU0sRUFBSSxDQUFDLE1BQU8sR0FBRyxjQUFjLENBQUMsSUFBSSxFQUFJLE1BQU0sQ0FBQyxHQUFLLEVBQUksYUFBYSxDQUFLLEVBQUUsT0FBUyxFQUFFLEVBQUUsWUFBWSxFQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksVUFBVSxHQUFHLFNBQVMsRUFBSSxDQUNsVCxHQUFJLEdBQVcsRUFBSSxTQUNuQixNQUFPLENBQUMsRUFBRyxTQUFTLENBQUMsWUFBWSxjQUFjLE1BQU0sQ0FBRSxnQkFBaUIsRUFBTSxPQUFTLEVBQUksTUFBTSxPQUFRLE1BQU0sQ0FBQyxLQUFPLFNBQVMsTUFBUSxFQUFNLE1BQVEsRUFBSSxTQUFTLENBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFRLENBQVEsQ0FBQyxFQUFFLENBQUMsRUFBSSxHQUFHLEVBQUksR0FBRyxFQUFJLFNBQVMsQ0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUMxUEMsR0FBa0IsQ0FBQSxRQzJDdEIsS0FBQUMsSUFBQSxFQUFBLFVBQUEsY0FBQSxDQUNBLE1BQUEsQ0FDQSxNQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLE9BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLENBQ0EsRUFFQSxRQUFBLENBQ0EsYUFBQSxFQUFBLENBQ0EsS0FBQSxHQUFBLE9BQUEsS0FBQSxPQUFBLENBQUEsTUFBQSxFQUFBLElBQUEsR0FDQSxNQUFBLEdBQUEsTUFDQSxHQUFBLEtBQUEsR0FFQSxLQUFBLGFBQUEsQ0FBQSxDQUNBLENBQ0EsQ0FDQSxDQUFBLG9JQzdESUYsR0FBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFPLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxTQUFXLEVBQUksTUFBTSxNQUFRLEVBQUksTUFBTSxLQUFPLEVBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxjQUFjLFNBQVMsRUFBTyxDQUFDLEVBQUksS0FBSyxDQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDbE9DLEdBQWtCLENBQUEsRUNZdEIsS0FBQUMsSUFBQSxFQUFBLFVBQUEsa0JBQUEsQ0FDQSxXQUFBLENBQUFPLFdBQUFBLEVBQUFBLFVBQUEsRUFFQSxNQUFBLENBQ0EsTUFBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLENBQ0EsRUFFQSxTQUFBLENBQ0EsS0FBQSxD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LE9BQUEsUUFBQSxDQUFBLENBQ0EsRUFFQSxNQUFBLENBQ0EsTUFBQSxDQUNBLE9BQUEsS0FBQSxNQUFBLEtBQUEsT0FBQSxJQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsTUFBQSxDQUNBLE1BQUEsTUFBQSxVQUFBLElBQ0EsRUFFQSxPQUFBLENBQ0EsTUFBQSxNQUFBLFVBQUEsS0FDQSxFQUVBLFVBQUEsQ0FDQSxNQUFBLE1BQUEsVUFBQSxRQUNBLEVBRUEsWUFBQSxDQUNBLE1BQUEsUUFDQSxLQUFBLE1BREEsQ0FFQSxPQUFBLEtBQUEsTUFDQSxFQUNBLEVBRUEsWUFBQSxDQUNBLE1BQUEsR0FBQSxLQUFBLE9BQUEsVUFBQSxDQUNBLEVBR0EsZ0JBQUEsQ0FDQSxNQUFBLE1BQUEsT0FBQSxRQUNBLEVBRUEsY0FBQSxPQUNBLEtBQUEsR0FBQSxRQUFBLGlCQUFBLGNBQUEsS0FDQSxNQUFBLElBQUEsS0FBQSxLQUFBLEVBQ0EsRUFFQSxtQkFBQSxPQUNBLE1BQ0EsU0FBQSxlQUFBLGNBQUEsUUFBQSxHQUNBLEtBQUEsZUFBQSxZQUFBLENBQ0EsS0FBQSxRQUNBLFFBQUEsR0FDQSxPQUFBLEtBQUEsY0FDQSxDQUFBLENBRUEsRUFFQSxhQUFBLE9BQ0EsTUFBQSxTQUFBLGVBQUEsY0FBQSxTQUFBLENBQ0EsRUFFQSxlQUFBLE9BQ0EsTUFBQSxTQUFBLGFBQUEsY0FBQSxTQUFBLENBQ0EsRUFFQSxZQUFBLENBQ0EsTUFBQSxNQUFBLGNBQUEsS0FBQSxXQUNBLEVBRUEsZUFBQSxPQUNBLEtBQUEsQ0FBQSxrQkFBQSxLQUNBLEdBQUEsRUFBQSxDQUNBLEtBQUEsQ0FBQSxZQUFBLEtBQUEsVUFDQSxFQUFBLENBQUEsS0FBQSxNQUFBLEVBQUEsS0FFQSxNQUFBLFNBQUEsZUFBQSxjQUFBLElBQUEsQ0FBQSxFQUFBLElBQUEsQ0FDQSxLQUFBLEdBQ0EsRUFBQSxNQUNBLEdBQUEsS0FBQSxRQUFBLEVBQUEsUUFBQSxJQUVBLEVBQUEsR0FFQSxFQUFBLFdBQUEsQ0FBQSxHQUFBLEVBQUEsT0FBQSxFQUFBLE9BRUEsTUFBQSxDQUNBLE9BQ0EsT0FDQSxPQUNBLE9BTEEsSUFBQSxDQU1BLENBQ0EsS0FBQSxDQUFBLENBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxLQUFBLENBQUEsZUFBQSxLQUNBLE1BQUEsSUFBQSxHQUFBLEtBQ0EsSUFBQSxFQUFBLE9BQUEsU0FFQSxFQUVBLGdCQUFBLENBQ0EsTUFBQSxNQUFBLFdBQUEsS0FBQSxVQUFBLEtBQUEsU0FDQSxFQU1BLFVBQUEsRUFBQSxZQUFBLENBQ0EsS0FBQSxRQUNBLFFBQUEsR0FDQSxJQUFBLEVBQUEsQ0FDQSxNQUFBLElBQUEsRUFBQSxLQUFBLE1BQUEsQ0FDQSxDQUNBLENBQUEsRUFFQSxTQUFBLEVBQUEsV0FBQSxDQUNBLEtBQUEsUUFDQSxRQUFBLEdBQ0EsSUFBQSxFQUFBLENBQ0EsTUFBQSxJQUFBLEVBQUEsS0FBQSxNQUFBLENBQ0EsQ0FDQSxDQUFBLEVBRUEsVUFBQSxFQUFBLFlBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxFQUNBLENBQUEsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxvQkFBQSxFQUFBLENBQ0EsTUFBQSxHQUFBLEtBQUEsU0FBQSxFQUFBLElBQUEsQ0FDQSxFQUVBLFFBQUEsQ0FHQSxLQUFBLFFBQUEsS0FBQSxDQUNBLEtBQUEsR0FBQSxLQUFBLFVBQUEsT0FBQSxLQUFBLE9BRUEsTUFBQSxLQUFBLE9BQUEsS0FDQSxDQUFBLENBQ0EsRUFFQSxVQUFBLENBRUEsRUFFQSxVQUFBLENBQ0EsS0FBQSxVQUFBLFNBQUEsQ0FDQSxDQUNBLENBQ0EsQ0FBQSxvSUNwVUlWLEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBTyxHQUFHLFFBQVEsQ0FBQyxZQUFZLGlCQUFpQixFQUFFLENBQUMsRUFBRyxLQUFLLENBQUMsRUFBSSxHQUFJLEVBQUksUUFBUyxTQUFTLEVBQU8sRUFBTSxDQUFDLE1BQVEsR0FBSSxhQUFhLENBQU0sRUFBRyxFQUFHLEtBQUssQ0FBQyxNQUFNLEVB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Q0EsRUFBQSxXQUFBLENBQUEsRUFFQSxFQUVBLEVBQUEsR0FBQSxDQUNBLEFBQUEsSUFBQSxLQUFBLE9BQ0EsR0FBQSxHQUNBLEtBQUEsTUFBQSxFQUNBLEVBQUEsR0FDQSxFQUFBLEVBRUEsRUFFQSxFQUFBLFNBQUEsR0FBQSxDQUNBLEFBQUEsRUFDQSxFQUFBLEdBRUEsRUFBQSxDQUFBLENBRUEsQ0FBQSxFQUVBLEtBQUEsT0FBQSxRQUFBLEdBQUEsQ0FDQSxBQUFBLEVBQ0EsRUFBQSxHQUVBLEVBQUEsR0FBQSxFQUFBLENBRUEsQ0FBQSxFQUVBLEVBQUEsS0FBQSxPQUFBLEVBQUEsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxjQUFBLE9BQ0EsUUFBQSxJQUFBLGNBQUEsVUFBQSxJQUFBLFFBQUEsT0FDQSxDQUNBLENBQ0EsQ0FBQSxvSUM5SElkLEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBTyxHQUFHLFVBQVUsQ0FBQyxZQUFZLGFBQWEsTUFBTSxDQUFDLFFBQVUsUUFBUSxLQUFPLEVBQUksU0FBUyxFQUFFLEdBQUcsQ0FBQyxjQUFjLFNBQVMsRUFBTyxDQUFDLEVBQUksVUFBVSxDQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRyxNQUFNLENBQUMsWUFBWSxhQUFhLE1BQU0sQ0FBRSxhQUFjLEVBQUksU0FBVyxFQUFDLE1BQU0sQ0FBQyxLQUFPLFNBQVMsRUFBRSxLQUFLLFNBQVMsRUFBRSxDQUFDLEVBQUcsUUFBUSxFQUFJLEdBQUcsRUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxRQUFRLFFBQVEsVUFBVSxNQUFPLEVBQUksU0FBVSxXQUFXLFVBQVUsQ0FBQyxFQUFFLElBQUksVUFBVSxNQUFNLENBQUMsR0FBSyxFQUFJLFNBQVMsS0FBTyxRQUFRLEtBQU8sR0FBRyxFQUFFLFNBQVMsQ0FBQyxNQUFTLEVBQUksUUFBUyxFQUFFLEdBQUcsQ0FBQyxNQUFRLFNBQVMsRUFBTyxDQUFDLEFBQUcsRUFBTyxPQUFPLFdBQXFCLEdBQUksU0FBUyxFQUFPLE9BQU8sTUFBSyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUksV0FBVyxFQUFLLEVBQUUsRUFBSSxTQUFTLENBQUMsRUFBRyxFQUFJLE1BQU8sRUFBRyxNQUFNLENBQUMsWUFBWSx1Q0FBdUMsRUFBRSxDQUFDLEVBQUcsTUFBTSxDQUFDLE1BQU8sQ0FBRSxXQUFhLElBQU8sR0FBSSxVQUFZLFdBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUksR0FBRSxFQUFJLEVBQUksZ0JBQWlCLEVBQUcsU0FBUyxDQUFDLFlBQVksd0NBQXdDLE1BQU0sQ0FBQyxTQUFXLEVBQUksUUFBUSxFQUFFLEdBQUcsQ0FBQyxNQUFRLFNBQVMsRUFBTyxDQUFDLFNBQU8sZ0JBQWlCLEVBQVEsRUFBSSxNQUFNLE1BQU0sS0FBTSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFJLEdBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBRyxnQkFBZ0IsQ0FBQyxZQUFZLG9CQUFvQixNQUFNLENBQUMsS0FBTyxRQUFRLGdCQUFnQixDQUFDLEVBQUksTUFBTSxpQkFBaUIsQ0FBQyxFQUFJLE9BQU8sZ0JBQWdCLEVBQUksT0FBTyxFQUFFLEtBQUssUUFBUSxNQUFNLENBQUMsTUFBTyxFQUFJLFdBQVksU0FBUyxTQUFVLEVBQUssQ0FBQyxFQUFJLFdBQVcsQ0FBRyxFQUFFLFdBQVcsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUN0MkNDLEdBQWtCLENBQUEsUUM0RXRCLEtBQUFDLElBQUFVLEVBQUEsU0FBQSxRQUFBLENBQ0EsV0FBQSxDQUFBLFFBQUFHLEVBQUEsUUFBQSxhQUFBQyxTQUFBLEVBRUEsTUFBQSxDQUNBLE1BQUEsQ0FDQSxVQUFBLEdBQ0Esa0JBQUEsSUFDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLFdBQUEsQ0FDQSxLQUFBLENBQ0EsTUFBQSxNQUFBLE9BQUEsQ0FBQSxDQUNBLEVBRUEsSUFBQSxFQUFBLENBQ0EsS0FBQSxHQUFBLEtBQUEsWUFDQSxFQUFBLENBRUEsSUFBQSxrQkFBQSxHQUFBLEVBQUEsT0FBQSxNQUNBLElBQUEsTUFDQSxFQUFBLElBQUEsRUFDQSxBQUFBLEVBQ0EsS0FBQSxNQUFBLEVBQUEsR0FFQSxLQUFBLE1BQUFDLEdBQUEsUUFBQSxDQUFBLEVBQUEsU0FBQSxDQUFBLEVBRUEsS0FBQSxTQUFBLENBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxLQUFBLENBQ0EsR0FBQSxLQUFBLE9BQUEsS0FDQSxLQUFBLGtCQUFBLGFBQ0EsQ0FBQSxLQUFBLFFBQUEsQ0FDQSxLQUFBLEdBQUFBLEdBQUFBLFFBQUEsS0FBQSxLQUFBLEVBQ0EsQUFBQSxFQUFBLFdBQ0EsTUFBQSxrQkFBQSxFQUNBLFNBQUEsRUFBQSxTQUFBLEVBQUEsRUFBQSxPQUFBLE1BQUEsRUFDQSxNQUFBLENBQUEsRUFDQSxZQUFBLEVBRUEsQ0FDQSxNQUFBLE1BQUEsaUJBQ0EsRUFFQSxJQUFBLEVBQUEsQ0FDQSxLQUFBLGtCQUFBLENBQ0EsQ0FDQSxFQUlBLFlBQUEsRUFBQSxTQUFBLENBQ0EsS0FBQSxPQUNBLFFBQUEsS0FDQSxDQUFBLEVBRUEsTUFBQSxFQUFBLFFBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxFQUNBLENBQUEsRUFFQSxPQUFBLEVBQUEsU0FBQSxDQUNBLEtBQUEsUUFDQSxRQUFBLEVBQ0EsQ0FBQSxFQUVBLFFBQUEsRUFBQSxVQUFBLENBQ0EsS0FBQSxNQUNBLFFBQUEsQ0FDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBRUEsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxXQUNBLENBQ0EsQ0FBQSxDQUNBLEVBRUEsTUFBQSxDQUNBLFFBQUEsRUFBQSxDQUNBLEdBQUEsQ0FBQSxHQUFBLEtBQUEsa0JBQUEsQ0FDQSxLQUFBLEdBQUFBLEdBQUFBLFFBQUEsSUFBQSxLQUFBLG1CQUFBLEVBQ0EsQUFBQSxXQUFBLFdBQ0EsTUFBQSxNQUFBLEVBQUEsU0FBQSxLQUFBLFdBQUEsRUFFQSxLQUFBLFNBQUEsRUFFQSxD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QUFRLEdBQUksYUFBYSxDQUFNLEVBQUcsRUFBRyxrQkFBa0IsQ0FBQyxJQUFJLEVBQU8sS0FBSyxNQUFNLEVBQUksYUFBYSxDQUFNLEVBQUUsTUFBTSxDQUFDLEtBQU8sRUFBTyxPQUFTLEVBQUksT0FBTyxTQUFXLEVBQUksWUFBWSxDQUFLLEVBQUUsS0FBTyxFQUFLLEtBQU8sRUFBSSxXQUFXLE1BQVEsRUFBSSxNQUFNLE9BQVMsR0FBTSxTQUFXLEVBQUksVUFBWSxFQUFJLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUcsS0FBSyxDQUFFLEVBQUksVUFBVyxFQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxNQUFRLEVBQUksYUFBYSxFQUFJLE9BQVEsRUFBTSxDQUFFLE1BQU8sRUFBTyxTQUFVLEVBQU0sQ0FBQSxFQUFFLE9BQVMsRUFBSSxrQkFBa0IsRUFBSSxPQUFRLEVBQU0sRUFBSSxPQUFPLEVBQUUsU0FBVyxFQUFJLFlBQVksQ0FBSyxFQUFFLEtBQU8sRUFBSyxLQUFPLEVBQUksV0FBVyxNQUFRLEVBQUksY0FBYyxDQUFLLEVBQUUsU0FBVyxFQUFJLFVBQVksRUFBSSxVQUFVLFVBQVksRUFBSSxVQUFVLFlBQWMsRUFBSSxZQUFZLFVBQVksRUFBSSxVQUFVLFVBQVksRUFBSSxVQUFVLFNBQVcsRUFBSSxTQUFTLFNBQVcsRUFBSSxZQUFZLEVBQU0sQ0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLE9BQVMsU0FBUyxFQUFPLENBQUMsTUFBTyxHQUFJLFdBQVcsRUFBTSxDQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRyxFQUFJLFVBQVcsRUFBRyxFQUFJLFVBQVUsQ0FBQyxJQUFJLFlBQVksTUFBTSxDQUFDLFNBQVcsRUFBSSxZQUFZLENBQUssRUFBRSxLQUFPLEVBQUssT0FBUyxFQUFLLENBQUMsQ0FBQyxFQUFHLEVBQUksT0FBUSxFQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBWSxFQUFJLEdBQUcsRUFBSSxPQUFPLEVBQUksV0FBVyxFQUFNLENBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVksRUFBSSxHQUFHLEVBQUksYUFBYSxFQUFJLE9BQVEsRUFBTSxDQUFFLE1BQU8sQ0FBSyxDQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFHLEVBQUksbUJBQW9CLEVBQUcsS0FBSyxDQUFDLFlBQVksd0JBQXdCLEVBQUUsQ0FBQyxFQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxVQUFZLEVBQUksVUFBVSxVQUFZLEVBQUksVUFBVSxTQUFXLEVBQUksU0FBUyxTQUFXLEVBQUksWUFBWSxFQUFNLENBQUssRUFBRSxPQUFTLEVBQUksa0JBQWtCLEVBQUksT0FBUSxFQUFNLEVBQUksT0FBTyxFQUFFLFNBQVcsRUFBSSxZQUFZLENBQUssRUFBRSxLQUFPLEVBQUssS0FBTyxFQUFJLFdBQVcsTUFBUSxFQUFJLGNBQWMsQ0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLE9BQVMsU0FBUyxFQUFPLENBQUMsTUFBTyxHQUFJLFdBQVcsRUFBTSxDQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFJLEdBQUUsQ0FBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFHLEVBQUksZ0JBQWtCLENBQUMsRUFBSSxPQUFRLEVBQUcsUUFBUSxDQUFDLEVBQUcsS0FBSyxDQUFDLEVBQUcsS0FBSyxDQUFDLFlBQVkseUJBQXlCLE1BQU0sQ0FBQyxRQUFVLEVBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxVQUFZLEVBQUksVUFBVSxXQUFhLEVBQUksS0FBSyxRQUFVLEVBQUksY0FBYyxPQUFTLEVBQUksT0FBTyxTQUFXLEVBQUksU0FBUyxLQUFPLEVBQUksU0FBUyxLQUFPLEVBQUksS0FBSyxNQUFRLEVBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUksR0FBSSxDQUFBLEVBQUUsQ0FBQyxFQUFHLEVBQUksZ0JBQWtCLEVBQUksT0FBUSxFQUFHLG9CQUFvQixDQUFDLFlBQVksdUNBQXVDLE1BQU0sQ0FBQyxVQUFZLEVBQUksVUFBVSxXQUFhLEVBQUksS0FBSyxRQUFVLEVBQUksY0FBYyxPQUFTLEVBQUksT0FBTyxTQUFXLEVBQUksU0FBUyxLQUFPLEVBQUksU0FBUyxLQUFPLEVBQUksS0FBSyxNQUFRLEVBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFJLEdBQUUsQ0FBRSxFQUFFLENBQUMsRUFBRSxFQUFJLEdBQUUsQ0FBRSxFQUNoMkZDLEdBQWtCLENBQUEsUUM4S3RCLEtBQUFDLElBQUFVLEVBQUEsU0FBQSxPQUFBLENBQ0EsV0FBQSxDQUFBRixhQUFBQSxHQUFBQSxPQUFBLEVBQ0EsT0FBQSxDQUFBLEdBQUEsRUFBQSxFQUVBLGNBQUEsRUFBQSxDQUVBLE1BQUEsRUFDQSxFQUVBLGVBQUEsRUFBQSxFQUFBLEVBQUEsQ0FDQSxLQUFBLENBQUEsV0FBQSxFQUdBLEdBQUEsRUFBQSxDQUlBLEtBQUEsR0FBQSxJQUFBLEVBQUEsdUJBQ0EsRUFDQSxHQUFBLEVBQUEsT0FBQSxNQUNBLEVBRUEsTUFBQSxJQUNBLEVBQUEsQ0FBQSxFQUNBLEVBQ0EsSUFDQSxRQUFBLE9BQ0EsTUFBQSxLQUFBLElBQUEsY0FBQSxLQUNBLEtBQ0EsT0FBQSxFQUFBLENBQ0EsS0FBQSxHQUFBLEVBQUEsRUFDQSxHQUFBLEVBQUEsQ0FFQSxLQUFBLEdBQUEsR0FBQTdCLEVBQUEsT0FBQSxFQUFBLEdBQUEsSUFBQSxNQUFBLEVBQ0EsQUFBQUcsRUFBQUEsT0FBQSxFQUFBLENBQUEsRUFBQSxFQUFBLEVBQUEsS0FBQSxDQUFBLEdBQ0EsR0FBQSxNQUFBLEVBQ0EsRUFBQSxTQUFBLEVBQUEsRUFFQSxDQUNBLENBQ0EsQ0FDQSxDQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsZ0JBQUEsQ0FDQSxNQUFBLENBQUEsQ0FDQSxNQUFBLGVBQ0EsS0FBQSxVQUVBLEVBRUEsZ0JBQUEsQ0FDQSxLQUFBLENBQUEsWUFBQSxLQUNBLE1BQUEsR0FBQSxPQUFBLEdBQ0EsTUFBQSxVQUNBLEtBQUEsV0FDQSxLQUFBLFVBRUEsRUFFQSxvQkFBQSxDQUNBLE1BQUEsQ0FBQSxLQUFBLFdBQUEsS0FBQSxjQUNBLEVBRUEsY0FBQSxDQUNBLE1BQUEsQ0FBQSxNQUFBLFNBQUEsT0FBQSxFQUNBLEVBRUEsWUFBQSxDQUNBLE1BQ0EsTUFBQSxRQUFBLE9BQUEsS0FBQSxLQUFBLE9BQUEsRUFBQSxPQUFBLEdBQ0EsTUFBQSxtQkFBQSxFQUFBLEVBRUEsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxZQUFBLEVBQUEsQ0FDQSxNQUFBLEdBQUEsS0FBQSxTQUFBLENBQUEsQ0FDQSxFQUVBLFlBQUEsRUFBQSxFQUFBLENBQ0EsR0FBQSxLQUFBLFNBQUEsQ0FDQSxLQUFBLEdBQUEsR0FBQSxLQUFBLE9BQUEsS0FBQSxPQUFBLEdBQUEsS0FBQSxLQUNBLEVBQUEsS0FBQSxVQUFBLEtBQUEsT0FBQSxFQUFBLENBQUEsRUFDQSxNQUFBLEdBQUEsS0FBQSxHQUNBLENBQ0EsTUFBQSxLQUNBLEVBRUEsYUFBQSxFQUFBLENBQ0EsTUFBQSxhQUFBRSxFQUFBQSxVQUFBLEVBQUEsSUFBQSxHQUNBLEVBRUEsV0FBQSxFQUFBLEVBQUEsQ0FDQSxNQUFBLElBQUEsR0FBQSxLQUFBLENBQ0EsS0FBQSxFQUNBLE1BQUEsRUFDQSxRQUNBLFNBQUEsS0FBQSxZQUFBLENBQUEsQ0FDQSxDQUFBLENBQ0EsRUFFQSxlQUFBLEVBQUEsQ0FDQSxLQUFBLEdBQUEsRUFBQSxLQUFBLFNBQUEsVUFBQSxFQUNBLEVBQUEsS0FBQSxnQkFBQSxtQkFBQSxDQUFBLEVBQ0EsR0FBQSxFQUNBLFNBQUEscUJBQUEsRUFBQSxFQUFBLEVBQ0EsRUFFQSxDQUNBLENBQ0EsQ0FBQSxvSUN0U0ljLEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBTyxHQUFHLGFBQWEsQ0FBQyxZ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QUFBLFdBQUEsUUFBQSxDQUNBLEtBQUEsR0FDQSxLQUFBLEVBQ0EsQ0FBQSxDQUNBLEVBRUEsZ0JBQUEsQ0FDQSxLQUFBLENBQ0EsY0FDQSxtQkFDQSxtQkFDQSxlQUNBLEtBQ0EsTUFBQSxDQUNBLEVBQ0EsRUFDQSxFQUNBLENBQ0EsRUFBQSxPQUFBLEdBQUEsRUFBQSxPQUFBLENBQUEsQ0FDQSxFQUVBLGNBQUEsQ0FDQSxNQUFBLENBQ0EsbUJBQUEsQ0FDQSxTQUFBLEdBQ0EsU0FBQSxHQUNBLGVBQUEsTUFDQSxFQUFBLEtBQUEsV0FDQSxDQUNBLEVBRUEsZUFBQSxDQUNBLE1BQUEsQ0FDQSxTQUFBLENBQUEsS0FBQSxVQUNBLFVBQUEsS0FBQSxVQUNBLGtCQUFBLENBQUEsS0FBQSxZQUFBLE1BQ0Esa0JBQUEsQ0FBQSxLQUFBLFlBQUEsTUFDQSxhQUFBLEtBQUEsWUFDQSxDQUNBLEVBRUEsVUFBQSxFQUFBLFlBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxFQUNBLENBQUEsRUFFQSxXQUFBLEVBQUEsYUFBQSxDQUNBLEtBQUEsT0FDQSxRQUFBLFVBRUEsQ0FBQSxFQUVBLFlBQUEsRUFBQSxjQUFBLENBQ0EsS0FBQSxDQUFBLE9BQUEsT0FBQSxFQUNBLFFBQUEsR0FDQSxJQUFBLEVBQUEsQ0FDQSxNQUFBN0MsR0FBQUEsU0FBQSxDQUFBLEVBQ0EsRUFDQSxDQUNBLE1BQUEsQ0FBQSxDQUFBLEVBQ0EsTUFBQSxDQUFBLENBQUEsQ0FDQSxDQUNBLENBQ0EsQ0FBQSxDQUNBLEVBRUEsTUFBQSxDQUNBLFVBQUEsc0JBQ0EsVUFBQSxzQkFDQSxZQUFBLHFCQUNBLEVBRUEsU0FBQSxDQUNBLEdBQUEsR0FBQSxHQUNBLEVBQUEsR0FFQSxLQUFBLEdBQUEsSUFBQSxDQUNBLEFBQUEsQ0FBQSxLQUFBLFNBQUEsR0FDQSxHQUFBLEdBQ0EsS0FBQSxTQUFBLEVBRUEsRUFFQSxFQUFBLElBQUEsS0FBQSxRQUFBLEVBRUEsRUFBQSxJQUFBLENBQ0EsS0FBQSxPQUFBLEVBQ0EsRUFBQSxDQUNBLEVBRUEsRUFBQThDLEVBQUEsU0FBQSxHQUFBLENBQ0EsRUFBQSxHQUNBLEtBQUEsTUFBQSxFQUFBLEVBQ0EsRUFBQSxHQUNBLEVBQUEsQ0FDQSxFQUFBLEdBQUEsRUFFQSxFQUFBLENBQUEsQ0FBQSxhQUFBLENBQ0EsRUFBQSxDQUFBLEVBQ0EsS0FBQSxRQUFBLENBQ0EsRUFFQSxLQUFBLE9BQUEsUUFBQSxHQUFBLENBQ0EsQUFBQSxFQUNBLEVBQUEsR0FFQSxLQUFBLE9BQUEsV0FBQSxFQUFBLEdBQUEsS0FBQSxZQUFBLENBRUEsQ0FBQSxFQUVBLEtBQUEsT0FBQSxHQUFBQyxVQUFBLE9BQ0EsS0FBQSxlQURBLENBRUEsVUFDQSxTQUNBLFdBQ0EsV0FBQSxLQUFBLGlCQUFBLEVBQ0EsUUFBQSxLQUFBLE9BQUEsRUFDQSxFQUFBLENBQ0EsRUFFQSxlQUFBLENBQ0EsS0FBQSxPQUFBLFFBQUEsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxhQUFBLEVBQUEsQ0FDQSxLQUFBLEdBQUEsQ0FBQSxDQUFBLFFBQUEsRUFBQSxRQUFBLEtBQUEsRUFBQSxJQUFBLE1BRUEsR0FBQSxHQUFBLEVBQUEsQ0FBQSxFQUFBLEVBQ0EsRUFBQSxXQUFBLGlCQUFBLEtBQUEsTUFBQSxPQUFBLEdBQUEsRUFBQSxNQUFBLEVBRUEsS0FBQSxHQUFBLEdBQUEsQ0FDQSxLQUFBLENBQUEsS0FBQSxFQUFBLENBQUEsRUFDQSxHQUFBLEVBQUEsRUFDQSxFQUFBLEVBQ0EsS0FBQSxPQUFBLEdBQUEsS0FBQSxJQUFBLEVBQUEsQ0FBQSxLQUNBLEVBRUEsRUFBQSxLQUFBLE1BQUEsU0FBQSxDQUNBLFlBRUEsUUFBQSxFQUFBLENBQ0EsRUFBQSxDQUFBLEVBQ0EsRUFBQSxPQUFBLENBQ0EsQ0FDQSxDQUFBLENBQ0EsRUFFQSxxQkFBQSxDQUNBLEtBQUEsT0FBQSxXQUFBLEtBQUEsYUFBQSxDQUNBLE9BRUEsYUFBQSxFQUFBLENBQ0EsS0FBQSxHQUFBLEtBQUEsTUFBQSxXQUFBLENBQ0EsV0FBQSxDQUNBLEtBQUEsQ0FDQSxLQUFBLE1BQ0EsTUFBQSxPQUNBLFVBQUEsRUFDQSxFQUNBLE1BQUEsQ0FDQSxLQUFBLE9BQ0EsTUFBQSxPQUNBLENBQ0EsRUFDQSxRQUFBLENBQ0EsT0FBQSxDQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsUUFBQSxFQUNBLE9BQUEsQ0FDQSxPQUFBLENBQ0EsTUFBQSxDQUFBLG1CQUFBLENBQ0EsRUFBQSxRQUFBLENBQ0EsS0FBQSxLQUNBLE1BQUEsSUFDQSxDQUFBLENBQ0EsQ0FDQSxDQUNBLENBQ0EsRUFDQSxLQUFBLEtBQUEsT0FBQSxhQUFBLE1BQUEsQ0FDQSxDQUFBLEVBQ0EsR0FBQSxFQUFBLENBQ0EsR0FBQSxDQUFBLE9BQUEsU0FBQSxFQUNBLEdBQUEsRUFHQSxHQUFBLENBQ0EsR0FBQSxLQUFBLENBQUEsQ0FDQSxNQUFBLENBQ0EsRUFBQSxVQUFBLEdBQ0EsQ0FFQSxFQUFBLENBQUEsT0FBQSxRQUFBLENBQ0EsQ0FDQSxFQUVBLGtCQUFBLENBQ0EsS0FBQSxDQUNBLFFBQUEsQ0FBQSxFQUNBLFFBQUEsQ0FBQSxFQUNBLFFBQUEsQ0FBQSxHQUNBLEtBQUEsT0FDQSxNQUFBLENBRUEsRUFBQSxNQUFBLEdBQUFDLFFBQ0EsRUFBQSxRQUFBLEdBQUFDLFVBQ0EsRUFBQSxXQUFBLEdBQUFDLGFBQ0EsRUFBQSxRQUFBLEdBQUFDLFVBQ0EsRUFBQSxPQUFBLEdBQUEsSUFDQSxFQUFBLE1BQUEsR0FBQUMsUUFDQSxFQUFBLE1BQUEsR0FBQSxJQUdBLEVBQUEsWUFBQSxHQUFBQyxjQUNBLEVBQUEsV0FBQSxHQUFBQyxhQUNBLEdBQUFDLGFBQ0EsRUFBQSxTQUFBLEdBQUFDLEdBQUEsUUFBQSxDQUFBLE9BQUEsRUFBQSxRQUFBLEVBQ0EsRUFBQSxnQkFBQSxHQUFBQyxrQkFDQSxHQUFBLGFBQUEsRUFBQSxhQUFBLEdBQUFDLEdBQUFBLFNBQ0EsRUFBQSxZQUFBLEdBQUFDLGNBQ0EsRUFBQSxhQUFBLEdBQUFDLGVBTUEsRUFBQSxTQUFBLEdBQUFDLFVBQ0EsRUFBQSxPQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FDQSxFQUVBLFdBQUEsRUFBQSxFQUFBLENBQ0EsS0FBQSxHQUFBLENBQUEsRUFFQSxFQUFBLENBQUEsQ0FBQSxPQUFBLE9BQUEsUUFBQSxlQUFBLGFBQUEsQ0FDQSxLQUFBLEdBQUEsS0FBQSxPQUFBLFNBQUEsR0FDQSxFQUFBLEtBQUEsT0FBQSxTQUFBLEdBQ0EsRUFBQSxLQUFBLENBQ0EsT0FDQSxPQUNBLFNBQ0Esa0JBQUEsS0FDQSxJQUFBLE1BQUEsQ0FBQSxLQUVBLFFBQUEsSUFBQSxFQUNBLEVBQUEsRUFBQSxDQUFBLEVBQ0EsRUFBQSxDQUFBLENBQ0EsQ0FBQSxDQUNBLEVBRUEsRUFBQSxLQUFBLE9BQUEsR0FDQSxHQUFBLEVBQ0EsU0FBQSxDQUFBLEVBQUEsSUFBQSxRQUFBLFFBQUEsQ0FBQSxFQUFBLENBQ0EsS0FBQSxHQUFBLENBQUEsT0FBQSxNQUFBLEVBQUEsU0FBQSxDQUFBLEVBQUEsVUFBQSxFQUNBLEVBQUEsRUFBQSxHQUNBLEVBQUFDLEVBQUEsV0FBQSxDQUFBLEVBQ0EsRUFBQXRELEVBQUEsVUFBQSxDQUFBLEVBQ0EsR0FBQSxHQUNBLEdBQUEsSUFBQSxHQUNBLEVBQUEsQ0FBQSxPQUFBLE9BQUEsVUFDQVIsRUFBQUEsU0FBQSxDQUFBLEVBQUEsQ0FDQSxLQUFBLENBQUEsT0FBQSxTQUFBLGVBQUEsV0FBQSxFQUNBLEdBQUEsR0FDQSxHQUFBTixFQUFBLFFBQUEsQ0FBQSxHQUFBQSxFQUFBLFFBQUEsQ0FBQSxFQUVBLFNBQUEsS0FBQSxHQUNBLEFBQUEsRUFBQSxTQUFBLENBQUEsR0FDQSxFQUFBLENBQ0EsT0FDQSxLQUFBLEdBQUEsS0FBQSxJQUNBLE1BQUEsRUFBQSxHQUFBLENBQUEsRUFDQSxlQUNBLFNBQ0EsQ0FBQSxNQUtBLEdBQUEsQ0FBQSxPQUFBLE9BQUEsZUFBQSxTQUFBLENBQUEsQ0FFQSxFQUVBLENBRUEsTUFBQSxFQUNBLEVBRUEsY0FBQSxTQUNBLFdBQUEsS0FBQSxpQkFBQSxnQkFDQSxLQUFBLE9BQUEsTUFBQSxDQUNBLENBQ0EsQ0FDQSxDQUFBLEVBRUEsTUFBQSxVQUFBcUUsR0FBQUEsSUFBQSxJ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RUFFQSxlQUFBLENBQ0EsTUFBQSxNQUFBLGlCQUFBLEtBQUEsT0FDQSxFQUVBLFNBQUEsRUFBQSxXQUFBLENBQ0EsS0FBQSxRQUNBLFFBQUEsRUFDQSxDQUFBLEVBRUEsV0FBQSxFQUFBLGFBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxFQUNBLENBQUEsRUFFQSxTQUFBLEVBQUEsV0FBQSxDQUNBLEtBQUEsUUFDQSxRQUFBLEVBQ0EsQ0FBQSxFQUVBLFNBQUEsRUFBQSxXQUFBLENBQ0EsS0FBQSxRQUNBLFFBQUEsRUFDQSxDQUFBLEVBRUEsYUFBQSxDQUNBLEtBQUEsQ0FBQSxjQUFBLGFBQUEsWUFBQSxLQUFBLE9BQ0EsTUFBQSxJQUNBLElBQUEsRUFBQSxzQkFDQSxFQUFBLHlCQUNBLE9BRUEsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxBQUFBLEtBQUEsV0FHQSxLQUFBLE1BQUEsQ0FFQSxFQUVBLFFBQUEsQ0FFQSxjQUFBLENBRUEsTUFBQSxDQUNBLE1BQUEsS0FBQSxRQUNBLEtBQUEsS0FBQSxPQUNBLE1BQUEsS0FBQSxRQUNBLENBQ0EsRUFFQSxhQUFBLEVBQUEsQ0FDQSxHQUFBLEtBQUEsU0FBQSxDQUNBLEtBQUEsQ0FBQSxjQUFBLGVBQUEsS0FDQSxFQUFBLEdBQUEsRUFDQSxFQUNBLEdBQUEsR0FHQSxHQUFBLENBQ0EsRUFDQSxFQUNBLFlBQUEsUUFBQSxLQUFBLENBQUEsRUFDQSxDQUNBLENBQ0EsRUFFQSxjQUFBLENBQ0EsS0FBQSxNQUFBLFFBQUEsU0FBQSxDQUNBLEVBRUEsU0FBQSxFQUFBLENBQ0EsS0FBQSxHQUFBLEtBQUEsYUFBQSxDQUFBLEVBQ0EsQUFBQSxHQUNBLEtBQUEsTUFBQSxLQUFBLEtBQUEsa0JBQUEsQ0FBQSxDQUFBLENBRUEsT0FFQSxnQkFBQSxFQUFBLENBQ0EsQUFBQSxLQUFBLGNBQ0EsQ0FBQSxFQUdBLE1BQUEsZ0JBQUEsQ0FBQSxFQUNBLEtBQUEsZ0JBQUEsS0FBQSxNQUFBLFlBQ0EsSUFBQSxLQUFBLGFBQUEsR0FBQSxHQUFBLEtBQUEsQ0FBQSxPQUFBLENBQUEsQ0FBQSxDQUNBLEdBR0EsS0FBQSxnQkFBQSxLQUdBLENBQ0EsQ0FDQSxDQUFBLG9JQ3pXZSxHQUFBLENBQ2IsU0FBVSxDQUNSLFdBQVksQ0FDVixLQUFNLENBQ0osTUFBTyxNQUFLLFFBQVUsS0FBTyxLQUFLLE1BQVEsRUFDM0MsRUFFRCxJQUFJLEVBQU8sQ0FDVCxLQUFLLE1BQVEsSUFBVSxHQUNuQixLQUFLLFVBQVksU0FBUyxFQUFPLEVBQUUsRUFBSSxXQUFXLENBQUssRUFDdkQsSUFDTCxDQUNGLEVBR0QsV0FBWSxDQUNWLE1BQU8sRUFDUixFQUVELFdBQVksQ0FDVixNQUFPLE1BQUssTUFBUSxNQUFRLENBQUMsS0FBSyxVQUFZLE1BQVEsS0FBSyxJQUM1RCxFQUVELFNBQVUsRUFBa0IsV0FBWSxDQUN0QyxLQUFNLE1BQ1osQ0FBSyxFQUVELEtBQU0sRUFBa0IsT0FBUSxDQUM5QixLQUFNLE9BQ04sSUFBSSxFQUFNLENBRVIsTUFBTyxNQUFLLFdBQWEsR0FBUSxLQUFPLEtBQUssS0FBSyxDQUFJLEVBQUksQ0FDM0QsQ0FDUCxDQUFLLEVBRUQsSUFBSyxFQUFrQixNQUFPLENBQzVCLEtBQU0sT0FDTixJQUFJLEVBQUssT0FDUCxTQUFNLElBQVEsT0FDVixRQUFLLGVBQWUsUUFBUyxDQUFFLEtBQU0sS0FBSyxDQUFFLElBQTVDLGNBQWdELEdBQ2hELEVBQ0csS0FBSyxXQUFhLEdBQU8sS0FBTyxLQUFLLE1BQU0sQ0FBRyxFQUFJLENBQzFELENBQ1AsQ0FBSyxFQUVELElBQUssRUFBa0IsTUFBTyxDQUM1QixLQUFNLE9BQ04sSUFBSSxFQUFLLE9BQ1AsU0FBTSxJQUFRLE9BQ1YsUUFBSyxlQUFlLFFBQVMsQ0FBRSxLQUFNLEtBQUssQ0FBRSxJQUE1QyxjQUFnRCxHQUNoRCxFQUNHLEtBQUssV0FBYSxHQUFPLEtBQU8sS0FBSyxLQUFLLENBQUcsRUFBSSxDQUN6RCxDQUNQLENBQUssRUFFRCxNQUFPLEVBQWtCLFFBQVMsQ0FDaEMsS0FBTSxNQUNOLEtBQU0sQ0FHSixLQUFNLENBQUUsTUFBSyxPQUFRLEtBQ3JCLE1BQU8sSUFBTyxNQUFRLEdBQU8sS0FBTyxDQUFDLEVBQUssQ0FBRyxFQUFJLE1BQ2xELEVBRUQsSUFBSSxFQUFPLENBR1QsQUFBSXhFLEVBQUFBLFFBQVEsQ0FBSyxHQUNmLEVBQUMsS0FBSyxJQUFLLEtBQUssR0FBRyxFQUFJLEVBRTFCLENBQ1AsQ0FBSyxDQUNGLEVBRUQsUUFBUyxDQUNQLGdCQUFpQixDQUNmLEtBQU0sR0FBYyxDQUFFLEVBQ2hCLENBQUUsUUFBTyxNQUFLLE1BQUssV0FBVSxRQUFTLEtBVzVDLEdBVkEsQUFBSSxFQUNGLEVBQVksTUFBUSxFQUVoQixJQUFPLE1BQ1QsR0FBWSxJQUFNLEdBRWhCLEdBQU8sTUFDVCxHQUFZLElBQU0sSUFHbEIsR0FBWSxLQUNkLEVBQVksU0FBVyxVQUNkLEVBQU0sQ0FDZixLQUFNLEdBQVksSUFBRyxJQUFPLE1BQU0sR0FBRyxFQUFFLElBQU0sSUFBSSxPQUNqRCxBQUFJLEVBQVcsRUFDYixFQUFZLFNBQVcsRUFFdkIsRUFBWSxRQUFVLEVBRXpCLENBQ0QsTUFBSSxNQUFLLFdBQ1AsR0FBWSxRQUFVLElBRWpCLENBQ1IsQ0FDRixDQUNILEVDNUdJNEIsR0FBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFPLEdBQUcsY0FBYyxFQUFJLEdBQUcsRUFBSSxHQUFHLENBQUMsSUFBSSxVQUFVLFlBQVksY0FBYyxNQUFNLENBQUMsR0FBSyxFQUFJLFNBQVMsS0FBTyxTQUFTLElBQU0sRUFBSSxJQUFJLElBQU0sRUFBSSxJQUFJLEtBQU8sRUFBSSxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU8sRUFBSSxXQUFZLFNBQVMsU0FBVSxFQUFLLENBQUMsRUFBSSxXQUFXLENBQUcsRUFBRSxXQUFXLFlBQVksQ0FBQyxFQUFFLGNBQWMsRUFBSSxXQUFXLEVBQUssRUFBRSxFQUFJLFNBQVMsQ0FBQyxDQUFDLEVBQ3ZaQyxHQUFrQixDQUFBLFFDMkJ0QixLQUFBQyxJQUFBVSxFQUFBLFNBQUEsQ0FDQSxTQUFBLFNBQ0EsRUFFQSxDQUNBLFdBQUEsQ0FBQWlDLFdBQUFBLEVBQUFBLFVBQUEsRUFDQSxPQUFBLENBQUEsRUFBQSxFQUNBLFlBQUEsR0FDQSxVQUFBLEdBRUEsU0FBQSxDQUNBLFdBQUEsQ0FDQSxNQUFBLE1BQUEsT0FBQSxTQUNBLENBQ0EsQ0FDQSxDQUFBLG9JQzNDSTdDLEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBUSxHQUFJLFFBQVMsRUFBRyxNQUFNLENBQUMsWUFBWSxjQUFjLE1BQU0sRUFBSSxPQUFPLE1BQU0sTUFBTyxFQUFJLE9BQU8sTUFBTyxNQUFNLENBQUMsR0FBSyxFQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUUsRUFBSSxXQUFZLEVBQUcsTUFBTSxDQUFDLFlBQVkscUJBQXFCLEVBQUUsQ0FBRSxFQUFJLFVBQVcsRUFBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsT0FBUyxFQUFJLGtCQUFrQixFQUFJLE9BQVEsRUFBSSxXQUFZLEVBQUksT0FBTyxFQUFFLFNBQVcsRUFBSSxTQUFTLEtBQU8sRUFBSSxXQUFXLEtBQU8sRUFBSSxXQUFXLE1BQVEsRUFBSSxNQUFNLFNBQVcsRUFBSSxVQUFZLEVBQUksVUFBVSxVQUFZLEVBQUksVUFBVSxZQUFjLEVBQUksV0FBVyxDQUFDLENBQUMsRUFBRyxFQUFJLFVBQVcsRUFBRyxFQUFJLFVBQVUsQ0FBQyxJQUFJLFlBQVksTUFBTSxDQUFDLFNBQVcsRUFBSSxTQUFTLEtBQU8sRUFBSSxXQUFXLE9BQVMsRUFBSyxDQUFDLENBQUMsRUFBRyxFQUFJLE9BQVEsRUFBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVksRUFBSSxHQUFHLEVBQUksT0FBTyxFQUFJLFdBQVUsQ0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVksRUFBSSxHQUFHLEVBQUksYUFBYSxFQUFJLE9BQVEsRUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFJLEtBQUssRUFBRyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsVUFBWSxFQUFJLFVBQVUsVUFBWSxFQUFJLFlBQWMsRUFBSSxVQUFVLFNBQVcsRUFBSSxZQUFjLEVBQUksU0FBUyxXQUFhLEVBQUksS0FBSyxTQUFXLEVBQUksS0FBSyxRQUFVLEVBQUksY0FBYyxPQUFTLEVBQUksT0FBTyxTQUFXLEVBQUksU0FBUyxLQUFPLEVBQUksV0FBVyxLQUFPLEVBQUksS0FBSyxLQUFPLEVBQUksS0FBSyxNQUFRLEVBQUksS0FBSyxFQUFFLEdBQUcsQ0FBQyxPQUFTLFNBQVMsRUFBTyxDQUFDLE1BQU8sR0FBSSxXQUFXLEVBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBSSxHQUFFLENBQUUsRUFDL3hDQyxHQUFrQixDQUFBLFFDMEV0QixLQUFBQyxJQUFBVSxFQUFBLFNBQUEsU0FBQSxDQUNBLE9BQUEsQ0FBQSxFQUFBLEVBRUEsY0FBQSxFQUFBLENBRUEsTUFBQSxFQUNBLEVBRUEsUUFBQSxDQUNBLFlBQUEsQ0FDQSxNQUFBLElBQUEsR0FBQSxLQUFBLENBQUEsS0FBQSxLQUFBLFdBQUEsQ0FDQSxDQUNBLENBQ0EsQ0FBQSxvSUNyRkEsS0FBQVYsSUFBQVUsRUFBQSxTQUFBLFFBQUEsQ0FDQSxhQUFBLElBQUEsR0FDQSxhQUFBLEdBQ0EsY0FBQSxHQUNBLFlBQUEscUJBS0EsS0FBQSxLQUFBLFNBQUEsRUFDQSxNQURBLEdBQUEsRUFBQSxDQUFBLFFBRUEsQ0FDQSxDQUFBLG9KQ2ZJWixHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQU8sR0FBRyxXQUFXLEVBQUksR0FBRyxFQUFJLEdBQUcsQ0FBQyxJQUFJLFVBQVUsWUFBWSxnQkFBZ0IsTUFBTSxDQUFDLEdBQUssRUFBSSxTQUFTLElBQU0sRUFBSSxXQUFXLEVBQUUsU0FBUyxDQUFDLE1BQVEsRUFBSSxhQUFhLENBQUMsRUFBRSxXQUFXLEVBQUksV0FBVyxFQUFLLEVBQUUsRUFBSSxTQUFTLENBQUMsQ0FBQyxFQUN6U0MsR0FBa0IsQ0FBQSxFQ2V0QixLQUFBQyxJQUFBVSxFQUFBLFNBQUEsV0FBQSxDQUNBLE9BQUEsQ0FBQSxFQUFBLEVBQ0EsU0FBQSxDQUNBLGVBQUEsQ0FDQSxHQUFBLENBQUEsUUFBQSxRQUFBLFFBQUEsS0FDQSxNQUFBLEtBQUEsS0FDQSxJQUNBLElBQUEsRUFBQSxJQUVBLEdBQ0EsR0FBQSxLQUFBLE1BQUEsRUFBQSxDQUFBLEVBQUEsSUFHQSxFQUFBLEdBRUEsQ0FDQSxFQUVBLGFBQUEsQ0FDQSxLQUFBLENBQUEsU0FBQSxLQUNBLEdBQUEsRUFDQSxNQUFBLEdBQUEsR0FBQSxFQUFBLEVBRUEsQ0FDQSxDQUNBLENBQUEsb0lDekNJWixHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQU8sR0FBRyxLQUFLLENBQUMsWUFBWSxxQkFBcUIsTUFBTyxlQUFrQixHQUFJLE9BQU8sUUFBVSxZQUFhLE1BQU0sQ0FBQyxHQUFLLEVBQUksUUFBUSxDQUFDLEVBQUUsRUFBSSxHQUFJLEVBQUksUUFBUyxTQUFTLEVBQU8sQ0FBQyxNQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUcsUUFBUSxDQUFDLEVBQUcsUUFBUSxFQUFJLEdBQUcsRUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxRQUFRLFFBQVEsVUFBVSxNQUFPLEVBQUksY0FBZSxXQUFXLGVBQWUsQ0FBQyxFQUFFLElBQUksVUFBVSxTQUFTLEdBQUssWUFBWSxvQkFBb0IsTUFBTSxDQUFDLEtBQU8sT0FBTyxFQUFFLFNBQVMsQ0FBQyxNQUFRLEVBQUksa0JBQWtCLENBQU0sRUFBRSxRQUFVLEVBQUksR0FBRyxFQUFJLGNBQWMsRUFBSSxrQkFBa0IsQ0FBTSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsT0FBUyxTQUFTLEVBQU8sQ0FBQyxFQUFJLGNBQWMsRUFBSSxrQkFBa0IsQ0FBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBSSxXQUFXLEVBQUssRUFBRSxFQUFJLFNBQVMsQ0FBQyxFQUFFLEVBQUksR0FBRyxFQUFJLEdBQUcsRUFBSSxrQkFBa0IsQ0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDdHhCQyxHQUFrQixDQUFBLFFDOEJ0QixLQUFBQyxJQUFBVSxFQUFBLFNBQUEsUUFBQSxDQUNBLE9BQUEsQ0FBQSxFQUFBLEVBRUEsWUFBQSxFQUNBLENBQUEsb0lDbkNJWixHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQU8sR0FBRyxNQUFNLENBQUMsWUFBWSxlQUFlLE1BQU0sQ0FBRSx3QkFBMEIsQ0FBQyxDQUFDLEVBQUksT0FBTyxLQUFLLENBQUUsRUFBRSxDQUFDLEVBQUcsWUFBWSxDQUFDLFlBQVksb0JBQW9CLE1BQU0sQ0FBQyxPQUFTLEVBQUksa0JBQWtCLEVBQUksT0FBUSxFQUFJLEtBQU0sRUFBSSxPQUFPLEVBQUUsU0FBVyxFQUFJLFNBQVMsS0FBTyxFQUFJLEtBQUssS0FBTyxFQUFJLEtBQUssTUFBUSxFQUFJLE1BQU0sU0FBVyxFQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDM1pDLEdBQWtCLENBQUEsUUMyQnRCLEtBQUFDLElBQUFVLEVBQUEsU0FBQSxVQUFBLENBQ0EsYUFBQSxJQUFBLEdBQ0EsbUJBQUEsR0FBQSxDQUFBLEVBQUEsUUFBQSxDQUFBLFlBQUEsSUFDQSxjQUFBLEdBQ0EsY0FBQSxHQUNBLGFBQUEsR0FFQSxTQUFBLENBQ0EsTUFBQSxDQUNBLE1BQUEsTUFBQSxPQUFBLEtBQUEsTUFBQSxLQUFBLElBQ0EsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxvQkFDQSxPQUVBLGVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLENBRUEsS0FBQSxJQUFBLEVBQUEsRUFBQSxFQUFBLENBQUEsQ0FDQSxDQUNBLENBQUEsb0lDakRJWixHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQU8sR0FBRyxNQUFNLENBQUMsWUFBWSxhQUFhLEVBQUUsQ0FBQyxFQUFHLFNBQVMsRUFBSSxHQUFHLEVBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssUUFBUSxRQUFRLFVBQVUsTUFBTyxFQUFJLGNBQWUsV0FBVyxlQUFlLENBQUMsRUFBRSxJQUFJLFVBQVUsTUFBTSxDQUFDLEdBQUssRUFBSSxRQUFRLEVBQUUsR0FBRyxDQUFDLFVBQVksU0FBUyxFQUFPLENBQUMsRUFBSSxTQUFXLEVBQUksRUFBRSxNQUFRLFNBQVMsRUFBTyxDQUFDLEVBQUksU0FBVyxFQUFJLEVBQUUsT0FBUyxTQUFTLEVBQU8sQ0FBQyxHQUFJLEdBQWdCLE1BQU0sVUFBVSxPQUFPLEtBQUssRUFBTyxPQUFPLFFBQVEsU0FBUyxFQUFFLENBQUMsTUFBTyxHQUFFLFFBQVEsQ0FBQyxFQUFFLElBQUksU0FBUyxFQUFFLENBQUMsR0FBSSxHQUFNLFVBQVksR0FBSSxFQUFFLE9BQVMsRUFBRSxNQUFNLE1BQU8sRUFBRyxDQUFDLEVBQUcsRUFBSSxjQUFjLEVBQU8sT0FBTyxTQUFXLEVBQWdCLEVBQWMsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUksV0FBVyxFQUFLLEVBQUUsRUFBSSxTQUFTLEVBQUUsQ0FBRSxFQUFJLFNBQVUsQ0FBQyxFQUFJLEdBQUksRUFBSSxRQUFTLFNBQVMsRUFBTyxDQUFDLE1BQU8sQ0FBRSxFQUFJLFFBQVMsRUFBRyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQVEsRUFBTyxFQUFJLGFBQWEsQ0FBQyxFQUFFLEVBQUksR0FBSSxFQUFPLEVBQUksZ0JBQWlCLFNBQVMsRUFBSSxDQUFDLE1BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQVEsRUFBSSxrQkFBa0IsQ0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUksR0FBRyxFQUFJLEdBQUcsRUFBSSxrQkFBa0IsQ0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBUSxFQUFJLGtCQUFrQixDQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBSSxHQUFHLEVBQUksR0FBRyxFQUFJLGtCQUFrQixDQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFHLEVBQUksZUFBZ0IsQ0FBQyxFQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBUSxFQUFJLGFBQWEsQ0FBQyxFQUFFLENBQUMsRUFBSSxHQUFHLEVBQUksR0FBRyxFQUFJLGtCQUFrQixFQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBSSxHQUFJLENBQUEsRUFBRSxDQUFDLEVBQUcsRUFBSSxnQkFBaUIsRUFBRyxTQUFTLENBQUMsWUFBWSx3Q0FBd0MsTUFBTSxDQUFDLFNBQVcsRUFBSSxRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQVEsRUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUksR0FBRSxDQUFFLENBQUMsQ0FBQyxFQUNwNkNDLEdBQWtCLENBQUEsUUN5RXRCLEtBQUFDLElBQUFVLEVBQUEsU0FBQSxTQUFBLENBQ0EsT0FBQSxDQUFBLEVBQUEsRUFFQSxZQUFBLEdBRUEsTUFBQSxDQUNBLE1BQUEsQ0FHQSxTQUFBLEVBQ0EsQ0FDQSxDQUNBLENBQUEsb0lDdEZJWixHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQU8sR0FBRyxNQUFNLENBQUMsWUFBWSxhQUFhLEVBQUUsQ0FBQyxFQUFHLFFBQVEsRUFBSSxHQUFHLEVBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssUUFBUSxRQUFRLFVBQVUsTUFBTyxFQUFJLFdBQVksV0FBVyxZQUFZLENBQUMsRUFBRSxJQUFJLFVBQVUsWUFBWSxhQUFhLE1BQU0sQ0FBQyxHQUFLLEVBQUksU0FBUyxLQUFPLFFBQVEsSUFBTSxFQUFJLElBQUksSUFBTSxFQUFJLElBQUksS0FBTyxFQUFJLFNBQVMsRUFBRSxTQUFTLENBQUMsTUFBUyxFQUFJLFVBQVcsRUFBRSxHQUFHLENBQUMsSUFBTSxTQUFTLEVBQU8sQ0FBQyxFQUFJLFdBQVcsRUFBTyxPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFJLFdBQVcsRUFBSyxFQUFFLEVBQUksU0FBUyxDQUFDLEVBQUcsRUFBSSxNQUFPLEVBQUcsY0FBYyxFQUFJLEdBQUcsRUFBSSxHQUFHLENBQUMsWUFBWSxjQUFjLE1BQU0sQ0FBQyxLQUFPLFNBQVMsSUFBTSxFQUFJLElBQUksSUFBTSxFQUFJLElBQUksS0FBTyxFQUFJLFNBQVMsRUFBRSxNQUFNLENBQUMsTUFBTyxFQUFJLFdBQVksU0FBUyxTQUFVLEVBQUssQ0FBQyxFQUFJLFdBQVcsQ0FBRyxFQUFFLFdBQVcsWUFBWSxDQUFDLEVBQUUsY0FBYyxFQUFJLFdBQVcsRUFBSyxFQUFFLEVBQUksU0FBUyxDQUFDLEVBQUUsRUFBSSxHQUFJLENBQUEsRUFBRSxDQUFDLENBQUMsRUFDajBCQyxHQUFrQixDQUFBLFFDNkN0QixLQUFBQyxJQUFBVSxFQUFBLFNBQUEsU0FBQSxDQUNBLFdBQUEsQ0FBQWlDLFdBQUFBLEVBQUFBLFVBQUEsRUFDQSxPQUFBLENBQUEsRUFBQSxFQUNBLFlBQUEsR0FFQSxTQUFBLENBQ0EsTUFBQSxFQUFBLFFBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxFQUNBLENBQUEsQ0FDQSxDQUNBLENBQUEsb0lDekRJN0MsR0FBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFPLEdBQUcsZ0JBQWdCLEVBQUksR0FBRyxFQUFJLEdBQUcsQ0FBQyxJQUFJLFVBQVUsWUFBWSxjQUFjLE1BQU0sQ0FBQyxHQUFLLEVBQUksU0FBUyxLQUFPLEdBQUssT0FBUyxFQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTyxFQUFJLE1BQU8sU0FBUyxTQUFVLEVBQUssQ0FBQyxFQUFJLE1BQU0sQ0FBRyxFQUFFLFdBQVcsT0FBTyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUksV0FBVyxFQUFLLEVBQUUsRUFBSSxTQUFTLENBQUMsQ0FBQyxFQUMzV0MsR0FBa0IsQ0FBQSxRQ3NCdEIsS0FBQUMsSUFBQVUsRUFBQSxTQUFBLFNBQUEsQ0FDQSxhQUFBLEdBQ0EsYUFBQSxPQUVBLFdBQUEsQ0FDQSxhQUFBa0MsRUFBQSxZQUNBLEVBRUEsU0FBQSxDQUNBLFFBQUEsQ0FDQSxNQUFBLE1BQUEsT0FBQSxNQUNBLENBQ0EsQ0FDQSxDQUFBLG9JQ3BDSTlDLEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBTyxHQUFHLGNBQWMsRUFBSSxHQUFHLEVBQUksR0FBRyxDQUFDLElBQUksVUFBVSxZQUFZLFlBQVksTUFBTSxDQUFDLEdBQUssRUFBSSxTQUFTLEtBQU8sRUFBSSxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU8sRUFBSSxXQUFZLFNBQVMsU0FBVSxFQUFLLENBQUMsRUFBSSxXQUFXLENBQUcsRUFBRSxXQUFXLFlBQVksQ0FBQyxFQUFFLGNBQWMsRUFBSSxXQUFXLEVBQUssRUFBRSxFQUFJLFNBQVMsQ0FBQyxDQUFDLEVBQ3pXQyxHQUFrQixDQUFBLEVDY3RCLEtBQUEsSUFBQSxtQkFFQUMsR0FBQVUsRUFBQSxTQUFBLENBQ0EsT0FBQSxRQUFBLE1BQUEsV0FBQSxTQUFBLE1BQUEsV0FBQSxZQUNBLEVBRUEsQ0FDQSxXQUFBLENBQUFpQyxXQUFBQSxFQUFBQSxVQUFBLEVBQ0EsWUFBQSxHQUNBLFVBQUEsR0FDQSxtQkFBQSxHQUFBLEVBQUEsT0FBQSxXQUVBLFNBQUEsQ0FDQSxXQUFBLENBQ0EsTUFBQSxDQUNBLFdBQUEsT0FDQSxTQUFBLE9BQ0EsT0FBQSxNQUNBLEVBQUEsS0FBQSxPQUFBLEtBQUEsSUFDQSxFQUVBLFdBQUEsQ0FDQSxLQUFBLENBQ0EsTUFDQSxNQUFBLE9BQUEsWUFDQSxLQUFBLFFBQUEsUUFDQSxDQUFBLEtBQUEsUUFFQSxHQUNBLEtBQUEsS0FDQSxFQUVBLElBQUEsRUFBQSxDQUNBLEtBQUEsTUFBQSxDQUNBLENBQ0EsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxnQkFBQSxDQUNBLEtBQUEsR0FBQSxDQUNBLE1BQUEsUUFDQSxJQUFBLE1BQ0EsU0FBQSxXQUNBLE9BQUEsU0FDQSxTQUFBLFdBQ0EsV0FBQSxZQUNBLEVBQUEsS0FBQSxNQUNBLE1BQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxFQUFBLENBQUEsQ0FDQSxDQUNBLENBQ0EsQ0FBQSxvSUNsRUk3QyxHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQU8sR0FBRyxXQUFXLEVBQUksR0FBRyxFQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLFFBQVEsUUFBUSxVQUFVLE1BQU8sRUFBSSxNQUFPLFdBQVcsT0FBTyxDQUFDLEVBQUUsSUFBSSxVQUFVLFlBQVksMkJBQTJCLE1BQU0sQ0FBRSxpQkFBa0IsRUFBSSxTQUFTLEVBQUcsTUFBTSxDQUFDLEdBQUssRUFBSSxTQUFTLEtBQU8sRUFBSSxLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQVMsRUFBSSxLQUFNLEVBQUUsR0FBRyxDQUFDLE1BQVEsU0FBUyxFQUFPLENBQUMsQUFBRyxFQUFPLE9BQU8sV0FBcUIsR0FBSSxNQUFNLEVBQU8sT0FBTyxNQUFLLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBSSxXQUFXLEVBQUssRUFBRSxFQUFJLFNBQVMsQ0FBQyxDQUFDLEVBQ3pnQkMsR0FBa0IsQ0FBQSxRQ3lCdEIsS0FBQUMsSUFBQVUsRUFBQSxTQUFBLFdBQUEsQ0FDQSxZQUFBLEdBQ0EsVUFBQSxHQUVBLFNBQUEsQ0FD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QUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUNzSGhULEtBQUEsSUFBQW5DLEVBQUEsU0FBQSxTQUFBLENBQ0EsV0FBQSxDQUFBLFVBQUFvQyxHQUFBLFFBQUEsYUFBQXRDLFVBQUEsRUFDQSxRQUFBLENBQUEsaUJBQUEsRUFDQSxPQUFBLENBQUEsRUFBQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLENBQ0EsUUFBQSxDQUFBLENBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxRQUFBLENBQ0EsTUFBQSxNQUFBLE1BQUEsTUFDQSxFQUVBLE9BQUEsQ0FDQSxNQUFBLElBQUEsS0FBQSxLQUFBLENBQ0EsRUFFQSxTQUFBLEVBQUEsV0FBQSxDQUNBLEtBQUEsUUFDQSxRQUFBLEdBRUEsU0FBQSxFQUNBLENBQUEsRUFFQSxXQUFBLEVBQUEsYUFBQSxDQUNBLEtBQUEsQ0FBQSxNQUFBLE9BQUEsTUFBQSxDQUNBLENBQUEsRUFFQSxPQUFBLEVBQUEsU0FBQSxDQUNBLEtBQUEsTUFDQSxJQUFBLEVBQUEsQ0FDQSxNQUFBdEMsR0FBQUEsUUFBQSxDQUFBLEVBQUEsRUFBQSxLQUFBLEdBQUEsRUFBQSxDQUNBLENBQ0EsQ0FBQSxFQUVBLFFBQUEsRUFBQSxVQUFBLENBQ0EsS0FBQSxDQUFBLE9BQUEsTUFBQSxFQUNBLElBQUEsRUFBQSxDQUNBLE1BQUEsR0FBQTZFLEdBQUFBLFFBQUEsQ0FBQSxFQUFBLE1BQ0EsQ0FDQSxDQUFBLEVBRUEsVUFBQSxFQUFBLFlBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxHQUNBLElBQUEsRUFBQSxDQUNBLE1BQUEsSUFBQSxLQUFBLE1BQUEsT0FBQSxDQUNBLENBQ0EsQ0FBQSxFQUVBLFVBQUEsRUFBQSxZQUFBLENBQ0EsS0FBQSxRQUNBLFFBQUEsRUFDQSxDQUFBLEVBRUEsZUFBQSxDQUNBLE1BQUEsTUFBQSxRQUFBLFFBQ0EsQ0FBQSxNQUFBLE9BQUEsUUFBQSxLQUFBLE9BQUEsU0FDQSxFQUVBLGdCQUFBLENBQ0EsTUFBQSxNQUFBLFFBQUEsUUFBQSxLQUFBLE9BQUEsTUFDQSxFQUVBLGdCQUFBLENBQ0EsTUFDQSxNQUFBLFFBQUEsT0FBQSxDQUFBLEVBQUEsSUFBQSxFQUFBLEVBQUEsU0FBQSxDQUFBLEVBQ0EsS0FBQSxRQUFBLE1BRUEsRUFFQSxZQUFBLENBQ0EsTUFBQSxNQUFBLGVBQUEsQ0FDQSxLQUFBLFNBQ0EsS0FBQSxLQUFBLElBQUEsY0FBQSxLQUFBLFFBQUEsQ0FDQSxDQUFBLENBQ0EsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxXQUFBLEVBQUEsRUFBQSxDQUNBLEtBQUEsQ0FBQSxVQUFBLEtBQUEsT0FDQSxNQUFBLEdBQ0EsRUFBQSxLQUNBLEtBQ0EsR0FBQSxHQUFBLEtBQUEsQ0FDQSxNQUFBLEVBQ0EsS0FBQSxLQUFBLE1BQ0EsUUFDQSxTQUFBLEVBQUEsS0FBQSxTQUFBLENBQUEsQ0FDQSxDQUFBLENBQ0EsRUFDQXRDLEVBQUEsV0FBQSxFQUFBLElBQUEsQ0FDQSxFQUVBLFdBQUEsRUFBQSxFQUFBLENBQ0EsS0FBQSxDQUFBLFFBQUEsRUFFQSxBQUFBLEdBQUEsT0FBQSxRQUNBLHlCQUFBLEtBQUEsTUFBQSxVQUFBLElBQUEsR0FFQSxDQUFBLEtBQUEsU0FDQSxLQUFBLE1BQUEsT0FBQSxFQUFBLENBQUEsRUFFQSxLQUFBLE1BQUEsS0FFQSxFQUFBLFFBQ0EsS0FBQSxPQUFBLE9BQUEsRUFBQSxNQUFBLEVBRUEsS0FBQSxTQUFBLEVBQ0EsS0FBQSxPQUFBLENBQ0EsS0FBQSxPQUNBLE1BQUEsdUJBQ0EsS0FBQSxHQUFBLFNBQUEsS0FBQSxNQUFBLFVBQ0EsQ0FBQSxFQUVBLEVBRUEsYUFBQSxFQUFBLENBQ0EsTUFBQSxNQUFBLFVBQUEsS0FBQSxNQUNBLEtBQUEsTUFBQSxVQUFBLEdBQUEsRUFBQSxLQUFBLEVBQUEsRUFBQSxFQUNBLEVBQ0EsRUFFQSxRQUFBLEVBQUEsQ0FDQSxBQUFBLEtBQUEsU0FDQSxBQUFBLEtBQUEsTUFDQSxLQUFBLE1BQUEsS0FBQSxDQUFBLEVBRUEsS0FBQSxNQUFBLENBQUEsQ0FBQSxFQUdBLEtBQUEsTUFBQSxDQUVBLEVBRUEsWUFBQSxFQUFBLEVBQUEsQ0FDQSxHQUFBLEtBQUEsU0FBQSxDQUNBLEtBQUEsR0FBQSxLQUFBLGFBQUEsQ0FBQSxFQUNBLEFBQUEsR0FBQSxHQUNBLENBQUEsRUFDQSxLQUFBLEtBQUEsS0FBQSxNQUFBLEVBQUEsQ0FBQSxFQUVBLEtBQUEsTUFBQSxPQUFBLEVBQUEsQ0FBQSxFQUdBLEtBQ0EsTUFBQSxNQUFBLENBRUEsRUFFQSxXQUFBLEVBQUEsQ0FDQSxLQUFBLFlBQUEsRUFBQSxJQUFBLENBQ0EsRUFFQSxVQUFBLEVBQUEsRUFBQSxDQUNBLEdBQUEsR0FBQSxDQUFBLEVBQUEsQ0FDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsRUFDQSxLQUFBLFFBQUEsQ0FBQSxLQUFBLE9BQUEsT0FBQSxPQUFBLEVBQUEsQ0FDQSxDQUNBLEdBQUEsR0FBQSxFQUFBLENBQ0EsS0FBQSxDQUFBLFVBQUEsU0FBQSxFQUNBLEdBQUEsRUFBQSxDQUNBLEtBQUEsU0FBQSxFQUNBLEtBQUEsR0FBQSxFQUFBLFNBQUEsR0FDQSxBQUFBLEVBQ0EsR0FBQSxPQUFBLEVBR0EsS0FBQSxZQUFBLEVBQUEsQ0FBQSxHQUVBLEtBQUEsV0FBQSxDQUFBLENBRUEsU0FBQSxFQUFBLENBQ0EsS0FBQSxHQUFBLENBQ0EsTUFBQSxpQkFDQSxPQUFBLGdCQUNBLFVBQUEsMEJBQUEsRUFBQSxPQUNBLFFBQUEsMENBQ0EsT0FBQSxzQ0FDQSxLQUFBLHNCQUFBLEdBQUEsRUFBQSxJQUFBLElBQ0EsUUFBQSxnQ0FFQSxFQUFBLElBQUEsK0JBQUEsS0FDQSxLQUFBLE9BQUEsQ0FDQSxLQUFBLFFBQ0EsTUFBQSxvQkFDQSxNQUNBLENBQUEsRUFDQSxLQUFBLFdBQUEsQ0FBQSxDQUNBLENBQ0EsQ0FDQSxFQUVBLFlBQUEsRUFBQSxPQUNBLEtBQUEsR0FBQSxpQkFBQSxJQUNBLEFBQUEsU0FBQSxJQUFBLE9BQUEsY0FBQSxjQUFBLEdBQUEsQ0FBQSxFQUFBLGlCQUNBLEdBQUEsZ0JBQUEsR0FFQSxDQUNBLEVBRUEsYUFBQSxFQUFBLEVBQUEsQ0FFQSxLQUFBLEdBQUEsR0FB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
|
|
5
|
+
`))}const c=e||{},{$schema:s}=c,n=R(c,["$schema"]);return s===((u=this.schemaComponent)==null?void 0:u.schema.name)?n:null},async checkClipboard(){this.copyEnabled=!!this.data,this.pasteEnabled=!!await this.getClipboardData(!1)},async onCopy(){var e,s,n;let t=(e=this.schemaComponent)==null?void 0:e.clipboardData;try{t=t&&this.copyData(t),this.appState.clipboardData=t;try{const a=JSON.stringify(t,null,2);await((n=(s=navigator.clipboard)==null?void 0:s.writeText)==null?void 0:n.call(s,a)),await this.checkClipboard()}catch(a){console.error(a,a.name,a.message)}}catch(a){console.error(a),alert(a.message)}},async onPaste(){let t=await this.getClipboardData(!0);try{t=t&&this.pasteData(t),t&&this.schemaComponent.setData(t)}catch(e){console.error(e),alert(e.message)}}}}),Be={};var jr=m(Or,Sr,xr,!1,Fr,null,null,null);function Fr(t){for(let e in Be)this[e]=Be[e]}var Vr=function(){return jr.exports}(),Te={data(){return{isLoading:!1}},methods:{setLoading(t,{updateRoot:e=!1,updateView:s=!1}={}){!this.isLoading^!t&&(this.isLoading=!!t,e&&this.rootComponent.registerLoading(t),s&&this.viewComponent.setLoading(this.isLoading))}}},Re={mixins:[St,Te],provide(){return{$resourceComponent:()=>this,$verbs:()=>this.verbs,$isPopulated:()=>this.hasData}},data(){return{loadedData:null}},computed:{resourceComponent(){return this},resource(){return this.getResource()},providesData(){return!!this.resource},linksToView(){return!1},isTransient(){const t=this.formComponent;return!this.providesData&&!this.linksToView||t&&(t.isTransient||t.isCreating)},transientNote(){return this.isTransient&&"<b>Note</b>: the parent still needs to be saved in order to persist this change."},shouldLoad(){return!this.isTransient&&!this.isLoading},hasData(){return!!this.loadedData},verbs(){return this.getVerbs()},paginationRange(){const{paginate:t}=this.sourceSchema;if(this.isListSource&&t){const{page:e=0}=this.query||{},s=e*t;return[s,s+t-1]}},queryParams(){const t=this.paginationRange,n=this.query||{},{page:e}=n,s=R(n,["page"]);return h(h({},s),t&&{range:t.join(",")})}},created(){(this.providesData||this.isCreating)&&this.setupData()},methods:{getResource(){var t,e,s;return M((t=this.sourceSchema)==null?void 0:t.resource,{type:"collection",parent:(s=(e=this.parentFormComponent)==null?void 0:e.resource)!=null?s:null})},getVerbs(){const t=this.$verbs();return this.isTransient?x(h({},t),{create:"add",created:"added",save:"apply",saved:"applied",delete:"remove",deleted:"removed"}):t},clearData(){this.loadedData=null},setData(t){this.loadedData=t},setupData(){this.ensureData()},ensureData(){this.shouldLoad&&(this.hasData?this.reloadData():this.loadData(!0))},reloadData(){this.loadData(!1)},loadData(t){this.isTransient||(t&&this.clearData(),this.requestData())},createData(t,e){return te(t,e?{type:e}:{},this)},requestData(){const t=this.queryParams;this.handleRequest({method:"get",params:t},(e,s)=>{var n;if(e){if(s){const{data:a}=s;if((a==null?void 0:a.type)==="FilterValidation"&&((n=this.onFilterErrors)==null?void 0:n.call(this,a.errors)))return!0;if(this.isUnauthorizedError(s))return!0}}else this.setData(s.data),this.emitSchemaEvent("load")})},isValidationError(t){return(t==null?void 0:t.status)===400},isUnauthorizedError(t){return(t==null?void 0:t.status)===401},async handleRequest({method:t,resource:e=this.resource,data:s,params:n},a){const r={updateRoot:!0,updateView:this.isInView};this.setLoading(!0,r);const i={method:t,resource:e,data:s,params:n};try{const l=await this.sendRequest(i);a(null,l)}catch(l){const{response:c}=l;if(!a(l,c)){const u=c==null?void 0:c.data;u&&o.isString(u.type)?this.notify({type:"error",title:o.labelize(u.type),text:u.message||l}):this.notify({type:"error",title:"Request Error",text:l})}}this.setLoading(!1,r)},getPayloadData(t,e){return["post","put","patch"].includes(e)&&(t.getSchemaValue(["resource","data"])||t.processedItem)},async submit(t){const e=M(t.schema.resource,{parent:this.resource});if(e){const{method:s}=e,n=this.getPayloadData(t,s);return this.submitResource(t,e,s,n)}return!1},async submitResource(t,e,s,n,{setData:a=!1,onSuccess:r,onError:i,notifySuccess:l=()=>this.notify({type:"success",title:"Request Successful",text:"Request was successfully sent."}),notifyError:c=u=>this.notify({type:"error",title:"Request Error",text:[`Unable to send request${u?":":""}`,(u==null?void 0:u.message)||u]})}={}){return new Promise(u=>{this.handleRequest({method:s,data:n,resource:e},async(d,g)=>{const _=g==null?void 0:g.data;if(d){const C=this.isValidationError(g)&&_.errors;if(C)await this.showValidationErrors(C,!0);else{const f=o.isObject(_)?_:d;i==null||i(f),await this.emitButtonEvent(t,"error",{notify:c,error:f})}u(!1)}else a&&_&&this.setData(_),r==null||r(),await this.emitButtonEvent(t,"success",{notify:l}),u(!0)})})},async emitButtonEvent(t,e,{notify:s,error:n}){const a=new O(t,{nested:!1,data:this.data,itemLabel:this.itemLabel,error:n}),r=await t.emitEvent(e,{context:a});return s&&r===void 0&&!a.wasNotified&&s(n),r}}},Er=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-form dito-scroll-parent",class:{"dito-form-nested":t.isNestedRoute}},[t.isLastUnnestedRoute||t.isNestedRoute?t._e():s("router-view",{directives:[{name:"show",rawName:"v-show",value:!t.isActive,expression:"!isActive"}]}),s(t.isNestedRoute?"div":"form",{directives:[{name:"show",rawName:"v-show",value:t.isActive,expression:"isActive"}],tag:"component",staticClass:"dito-scroll",on:{submit:function(n){n.preventDefault()}}},[s("button",{directives:[{name:"show",rawName:"v-show",value:!1,expression:"false"}],attrs:{type:"submit",disabled:"true","aria-hidden":"true"}}),s("dito-schema",{attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,disabled:t.isLoading,menuHeader:!0}},[s("dito-buttons",{staticClass:"dito-buttons-round dito-buttons-main dito-buttons-large",attrs:{slot:"buttons",buttons:t.buttonSchemas,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,disabled:t.isLoading},slot:"buttons"})],1)],1)],1)},kr=[];const Lr=b.component("dito-form",{mixins:[de,Re],data(){return{createdData:null,clonedData:void 0,sourceKey:null,isForm:!0}},computed:{verbs(){const t=this.getVerbs(),{isCreating:e,providesData:s}=this;return x(h({},t),{submit:e?t.create:t.save,submitted:e?t.created:t.saved,cancel:s?t.cancel:t.close,cancelled:s?t.cancelled:t.closed})},schema(){return this.getItemFormSchema(this.sourceSchema,this.data||{type:this.type},this.context)||{}},buttonSchemas(){return tt(o.merge({cancel:{type:"button",events:{click:()=>this.cancel()}},submit:!this.doesMutate&&{type:"submit",closeForm:!0,events:{click:({component:t})=>t.submit()}}},this.schema.buttons))},isActive(){return this.isLastRoute||this.isLastUnnestedRoute},isTransient(){return!this.providesData},isCreating(){return this.param==="create"},isDirty(){var t;return!this.doesMutate&&!!((t=this.mainSchemaComponent)!=null&&t.isDirty)},selectedTab(){var t;return((t=this.mainSchemaComponent)==null?void 0:t.selectedTab)||null},doesMutate(){return this.sourceSchema.mutate},type(){return this.$route.query.type},itemId(){var t;return this.isCreating?null:(t=this.param)!=null?t:null},method(){return this.isCreating?"post":"patch"},resource(){const t=this.getResource();return ft(this.itemId,t)||t},breadcrumbPrefix(){return o.capitalize(this.isCreating?this.verbs.create:this.verbs.edit)},data(){return this.createdData||this.loadedData||this.inheritedData||null},dataPath(){return this.getDataPathFrom(this.dataComponent)},sourceData(){let{data:t}=this.parentRouteComponent;if(t){const e=o.parseDataPath(this.getDataPathFrom(this.parentRouteComponent)),s=this.routeRecord.path.split("/"),n=s.slice(s.length-e.length);this.sourceKey=null;const a=e[e.length-1];J(this.sourceSchema)&&a==="create"&&e.length--;for(let r=0,i=e.length;r<i&&t;r++){const l=e[r],c=/^:id/.test(n[r])?l==="create"?null:this.findItemIdIndex(this.sourceSchema,t,l):l;r===i-1?this.sourceKey=c:t=t[c]}}return t},inheritedData(){if(this.isTransient&&this.clonedData===void 0&&this.sourceData&&this.sourceKey!==null){let t=this.sourceData[this.sourceKey];return this.doesMutate||(this.clonedData=t=o.clone(t)),t===null&&!this.isCreating&&J(this.sourceSchema)&&this.$router.push({path:"create",append:!0}),t}return this.clonedData},hasData(){return!!this.data},itemLabel(){return this.getItemLabel(this.sourceSchema,this.data,{extended:!0})}},watch:{sourceData:"clearClonedData",create:"setupData"},methods:{emitSchemaEvent(t,e){return this.mainSchemaComponent.emitEvent(t,e)},getDataPathFrom(t){return this.api.denormalizePath(this.path.slice((t.isView?0:t.path.length)+1))},setupData(){this.isCreating?this.createdData=this.createdData||this.createData(this.schema,this.type):this.ensureData()},setSourceData(t){if(this.sourceData&&this.sourceKey!==null){const{mainSchemaComponent:e}=this;return this.$set(this.sourceData,this.sourceKey,e.filterData(t)),e.onChange(),!0}return!1},addSourceData(t){var e;return J(this.sourceSchema)?this.setSourceData(t):!!((e=this.sourceData)!=null&&e.push(t))},clearData(){this.setData(null)},setData(t){this.isTransient?this.setSourceData(t):(this.createdData=null,this.loadedData=t)},clearClonedData(t,e){t!==e&&(this.clonedData=void 0)},async cancel(){return this.close()},async close(){return this.navigate(this.parentRouteComponent.path)},getSubmitVerb(t=!0){return this.isCreating?t?"create":"created":t?"submit":"submitted"},async submit(t,{validate:e=!0,closeForm:s=!1}={}){if(e&&!this.validateAll())return!1;const n=u=>this.verbs[this.getSubmitVerb(u)],a=M(t.schema.resource,{parent:this.resource}),r=a||this.resource,i=(r==null?void 0:r.method)||this.method,l=this.getPayloadData(t,i);let c;if(!a&&this.isTransient?c=await this.submitTransient(t,r,i,l,{onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:u=>this.emitSchemaEvent("error",{context:{error:u}}),notifySuccess:()=>{const u=n(!1);this.notify({type:"info",title:this.isCreating?`Item ${o.capitalize(u)}`:`Change ${o.capitalize(u)}`,text:[this.isCreating?`${this.itemLabel} was ${u}.`:`Changes to ${this.itemLabel} were ${u}.`,this.transientNote]})},notifyError:()=>{const u=n(!0);this.notify({type:"error",title:"Request Error",text:`Unable to ${u} ${this.itemLabel}.`})}}):c=await this.submitResource(t,r,i,l,{setData:!0,onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:u=>this.emitSchemaEvent("error",{context:{error:u}}),notifySuccess:()=>{const u=n(!1);this.notify({type:"success",title:`Successfully ${o.capitalize(u)}`,text:`${this.itemLabel} was ${u}.`})},notifyError:u=>{const d=n(!0);this.notify({type:"error",title:"Request Error",text:[`Unable to ${d} ${this.itemLabel}${u?":":""}`,(u==null?void 0:u.message)||u]})}}),c){if(this.resetValidation(),s||t.closeForm)this.close();else if(this.isCreating){const u=this.getItemId(this.schema,this.data);this.$router.replace({path:`../${u}`,append:!0})}}return c},async submitTransient(t,e,s,n,{onSuccess:a,onError:r,notifySuccess:i,notifyError:l}){const c=this.isCreating?this.addSourceData(n):this.setSourceData(n);if(c)a==null||a(),await this.emitButtonEvent(t,"success",{notify:i});else{const u="Could not submit transient item";r==null||r(u),await this.emitButtonEvent(t,"error",{notify:l,error:u})}return c}}}),qe={};var Br=m(Lr,Er,kr,!1,Tr,null,null,null);function Tr(t){for(let e in qe)this[e]=qe[e]}var Ie=function(){return Br.exports}(),_c="";const Rr=Ie.component("dito-form-nested",{});let qr,Ir;const Me={};var Mr=m(Rr,qr,Ir,!1,Ar,null,null,null);function Ar(t){for(let e in Me)this[e]=Me[e]}var Nr=function(){return Mr.exports}(),zr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.errors?s("div",{staticClass:"dito-errors"},[s("ul",t._l(t.errors,function(n){return s("li",[t._v(t._s(n))])}),0)]):t._e()},Ur=[],vc="";const Hr=b.component("dito-errors",{props:{errors:{type:Array,default:null}}}),Ae={};var Kr=m(Hr,zr,Ur,!1,Wr,null,null,null);function Wr(t){for(let e in Ae)this[e]=Ae[e]}var Jr=function(){return Kr.exports}(),Qr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-scopes"},t._l(t.scopes,function(n,a){return s("router-link",{key:a,attrs:{to:t.getScopeLink(n),custom:""},scopedSlots:t._u([{key:"default",fn:function(r){var i=r.navigate;return[s("button",{staticClass:"dito-button",class:{"dito-selected":n.name===t.query.scope},attrs:{type:"button",title:n.hint||t.getLabel(n)},on:{click:i}},[t._v(t._s(t.getLabel(n)))])]}}],null,!0)})}),1)},Gr=[],gc="";const Xr=b.component("dito-scopes",{props:{query:{type:Object,required:!0},scopes:{type:Object,required:!0}},methods:{getScopeLink(t){const e=x(h({},this.query),{scope:t.name});return e.page&&(e.page=0),this.getQueryLink(e)}}}),Ne={};var Yr=m(Xr,Qr,Gr,!1,Zr,null,null,null);function Zr(t){for(let e in Ne)this[e]=Ne[e]}var ti=function(){return Yr.exports}(),ei=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("pagination",{attrs:{pageSize:t.limit,total:t.total,page:t.page},on:{"update:page":function(n){t.page=n}}})},si=[];const ni=b.component("dito-pagination",{components:{Pagination:T.Pagination},props:{query:{type:Object,required:!0},limit:{type:Number,required:!0},total:{type:Number,required:!0}},computed:{page:{get(){return(+this.query.page||0)+1},set(t){this.page!==t&&this.$router.push(this.getQueryLink(x(h({},this.query),{page:t-1})))}}}}),ze={};var ai=m(ni,ei,si,!1,ri,null,null,null);function ri(t){for(let e in ze)this[e]=ze[e]}var ii=function(){return ai.exports}(),xt={mixins:[St],data(){return{dragging:!1}},methods:{onStartDrag(){this.dragging=!0},onEndDrag({oldIndex:t,newIndex:e}){this.dragging=!1,t!==e&&this.onChange()},updateOrder(t,e,s){const{orderKey:n}=t;if(n){const a=(s==null?void 0:s[0])||0;for(let r=0;r<e.length;r++)e[r][n]=r+a}return e}}},oi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-tree-item",class:{"dito-dragging":t.dragging,"dito-active":t.active},style:t.level>0&&{"--level":t.level},attrs:{id:t.dataPath}},[t.label?s("div",{staticClass:"dito-tree-header"},[t.numEntries?s("div",{staticClass:"dito-tree-branch",on:{click:function(n){n.stopPropagation(),t.opened=!t.opened}}},[t.numEntries?s("div",{staticClass:"dito-chevron",class:{"dito-opened":t.opened}}):t._e(),s("div",{staticClass:"dito-tree-label",domProps:{innerHTML:t._s(t.label)}}),t.details?s("div",{staticClass:"dito-tree-info"},[t._v(t._s(t.details))]):t._e()]):s("div",{staticClass:"dito-tree-leaf"},[s("div",{staticClass:"dito-tree-label",domProps:{innerHTML:t._s(t.label)}})]),t.hasEditButtons?s("div",{staticClass:"dito-buttons dito-buttons-small"},[t.draggable?s("a",t._b({staticClass:"dito-button"},"a",t.getButtonAttributes(t.verbs.drag),!1)):t._e(),t.editable?s("button",t._b({staticClass:"dito-button",attrs:{type:"button"},on:{click:t.onEdit}},"button",t.getButtonAttributes(t.verbs.edit),!1)):t._e(),t.deletable?s("button",t._b({staticClass:"dito-button",attrs:{type:"button"},on:{click:t.onDelete}},"button",t.getButtonAttributes(t.verbs.delete),!1)):t._e()]):t._e()]):t._e(),t.properties?s("table",{directives:[{name:"show",rawName:"v-show",value:t.opened,expression:"opened"}],staticClass:"dito-properties"},t._l(t.properties,function(n){return s("tr",[s("td",[n.label!==!1?s("dito-label",{attrs:{dataPath:t.getPropertyDataPath(n),label:t.getLabel(n)}}):t._e()],1),s("dito-table-cell",{attrs:{cell:n,schema:n,dataPath:t.getPropertyDataPath(n),data:t.data,meta:t.nestedMeta,store:t.store,disabled:t.disabled}})],1)}),0):t._e(),t.childrenSchema?s("vue-draggable",t._b({directives:[{name:"show",rawName:"v-show",value:t.opened,expression:"opened"}],attrs:{list:t.updateOrder(t.childrenSchema,t.childrenList)},on:{start:t.onStartDrag,end:function(n){return t.onEndDrag(n,t.childrenSchema)}}},"vue-draggable",t.getDragOptions(t.childrenDraggable,!0),!1),t._l(t.childrenItems,function(n,a){return s("dito-tree-item",{key:t.getItemUid(t.childrenSchema,n.data),attrs:{schema:t.childrenSchema,dataPath:t.getItemDataPath(t.childrenSchema,a),data:n.data,path:n.path,open:n.open,active:n.active,draggable:t.childrenDraggable,label:t.getItemLabel(t.childrenSchema,n.data,{index:a}),level:t.level+1}})}),1):t._e()],1)},li=[],bc="";const ui=b.component("dito-tree-item",{components:{VueDraggable:it.default},mixins:[xt],inject:["container"],props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Array,Object],default:null},path:{type:String,default:""},open:{type:Boolean,default:!1},active:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},label:{type:String,default:null},level:{type:Number,default:0}},data(){return{opened:this.open||this.schema.open}},computed:{meta(){return this.container.meta},store(){return this.container.store},disabled(){return this.container.disabled},nestedMeta(){return x(h({},this.meta),{schema:this.schema})},properties(){return K(this.schema.properties)},childrenSchema(){return this.schema.children},childrenList(){var e;const t=(e=this.childrenSchema)==null?void 0:e.name;return t&&this.data[t]},childrenDraggable(){var t;return((t=this.childrenList)==null?void 0:t.length)>1&&this.getSchemaValue("draggable",{type:Boolean,default:!1,schema:this.childrenSchema})},numChildren(){var t;return((t=this.childrenList)==null?void 0:t.length)||0},numProperties(){var t;return((t=this.properties)==null?void 0:t.length)||0},numEntries(){return this.numProperties+this.numChildren},childrenItems(){var e;const{childrenSchema:t}=this;if(t){const{editPath:s}=this.container,n=!this.path&&t.open;return((e=this.childrenList)==null?void 0:e.map((a,r)=>{const i=t.path&&`${this.path}/${t.path}/${r}`,l=n||s.startsWith(i)&&i.length<s.length;return{data:a,path:i,open:l,active:s===i}}))||[]}},details(){const{numChildren:t}=this;return t&&`${t} ${t===1?"item":"items"}`},hasEditButtons(){return this.draggable||this.editable||this.deletable},creatable:p("creatable",{type:Boolean,default:!1,get(t){return t&&H(this.schema)}}),editable:p("editable",{type:Boolean,default:!1,get(t){return t&&H(this.schema)}}),deletable:p("deletable",{type:Boolean,default:!1})},methods:{getPropertyDataPath(t){return B(this.dataPath,t.name)},onEdit(){this.$router.push({path:`${this.container.path}${this.path}`,query:this.$route.query})},onDelete(){},onChange(){this.container.onChange()}}}),Ue={};var ci=m(ui,oi,li,!1,di,null,null,null);function di(t){for(let e in Ue)this[e]=Ue[e]}var hi=function(){return ci.exports}(),pi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("thead",{staticClass:"dito-table-head"},[s("tr",[t._l(t.columns,function(n,a){return t.shouldRender(n)?s("th",{class:t.getColumnClass(n)},[n.sortable?s("router-link",{attrs:{to:t.getSortLink(n),custom:""},scopedSlots:t._u([{key:"default",fn:function(r){var i=r.navigate;return[s("button",{staticClass:"dito-button",class:t.getSortClass(n),attrs:{type:"button"},on:{click:i}},[s("div",{staticClass:"dito-order-arrows"}),s("span",[t._v(t._s(t.getLabel(n)))])])]}}],null,!0)}):s("span",[t._v(t._s(t.getLabel(n)))])],1):t._e()}),t.hasEditButtons?s("th",[s("span")]):t._e()],2)])},mi=[],yc="";const fi=b.component("dito-table-head",{props:{query:{type:Object,required:!0},columns:{type:Object,required:!0},hasEditButtons:{type:Boolean,required:!0}},computed:{sort(){const t=(this.query.order||"").split(/\s+/);return{name:t[0],order:t[1]}}},methods:{getColumnClass(t){return`dito-column-${o.hyphenate(t.name)}`},getSortClass(t){return this.sort.name===t.name?`dito-selected dito-order-${this.sort.order}`:null},getSortLink(t){const e=this.sort.name===t.name&&this.sort.order==="asc"?"desc":"asc";return this.getQueryLink(x(h({},this.query),{order:`${t.name} ${e}`}))}}}),He={};var _i=m(fi,pi,mi,!1,vi,null,null,null);function vi(t){for(let e in He)this[e]=He[e]}var gi=function(){return _i.exports}(),bi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("td",{class:t.cell.class,style:t.cell.style},[t.component?s(t.component,{tag:"component",attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,nested:t.nested,disabled:t.disabled}}):s("span",{domProps:{innerHTML:t._s(t.renderCell(t.data))}})],1)},yi=[];const $i=b.component("dito-table-cell",{props:{cell:{type:Object,required:!0},schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},nested:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1}},computed:{component(){return this.resolveTypeComponent(this.cell.component)}},methods:{renderCell(t){const{name:e,render:s}=this.cell,n=t[e];return s?s.call(this,new O(this,{name:e,value:n,data:t,dataPath:B(this.dataPath,e)})):o.escapeHtml(n)}}}),Ke={};var Ci=m($i,bi,yi,!1,Di,null,null,null);function Di(t){for(let e in Ke)this[e]=Ke[e]}var Pi=function(){return Ci.exports}();const wi=b.component("dito-vnode",{functional:!0,render:(t,e)=>e.props.node});let Si,xi;const We={};var Oi=m(wi,Si,xi,!1,ji,null,null,null);function ji(t){for(let e in We)this[e]=We[e]}var Fi=function(){return Oi.exports}(),Vi=Object.freeze(Object.defineProperty({__proto__:null,DitoRoot:wt,DitoMenu:Tn,DitoHeader:Jn,DitoAccount:ta,DitoDialog:ia,DitoElement:ha,DitoLabel:ga,DitoSchema:Pa,DitoSchemaInlined:Fa,DitoPane:Ta,DitoContainer:za,DitoTabs:Qa,DitoPanel:er,DitoPanels:or,DitoButtons:pr,DitoEditButtons:br,DitoCreateButton:wr,DitoClipboard:Vr,DitoView:pe,DitoForm:Ie,DitoFormNested:Nr,DitoErrors:Jr,DitoScopes:ti,DitoPagination:ii,DitoTreeItem:hi,DitoTableHead:gi,DitoTableCell:Pi,DitoVNode:Fi},Symbol.toStringTag,{value:"Module"}));const $=b.extend({mixins:[et],nativeField:!1,textField:!1,defaultValue:null,defaultNested:!0,defaultVisible:!0,generateLabel:!0,excludeValue:!1,ignoreMissingValue:null,omitPadding:!1});$.register=function(t,e={}){t=o.asArray(t);const s=this.component(`dito-type-${t[0]}`,e);for(const n of t)un(n,s);return s},$.get=gt;var Ei=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("button",t._g(t._b({ref:"element",staticClass:"dito-button",class:"dito-button-"+t.verb,attrs:{id:t.dataPath,type:t.type,title:t.text}},"button",t.attributes,!1),t.listeners),[t._v(t._s(t.text))])},ki=[];const Li=$.register(["button","submit"],{defaultValue:()=>{},excludeValue:!0,defaultWidth:"auto",computed:{verb(){return this.verbs[this.name]||this.name},text:p("text",{type:String,get(t){return t||o.labelize(this.verb)}}),closeForm:p("closeForm",{type:Boolean,default:!1})},methods:{getListeners(){return{focus:this.onFocus,blur:this.onBlur,click:this.onClick}},async submit(t){var e;return(e=this.resourceComponent)==null?void 0:e.submit(this,t)},async onClick(){await this.emitEvent("click",{parent:this.schemaComponent})===void 0&&Rt(this.schema)&&await this.submit()}}}),Je={};var Bi=m(Li,Ei,ki,!1,Ti,null,null,null);function Ti(t){for(let e in Je)this[e]=Je[e]}var Ri=function(){return Bi.exports}(),qi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.value,expression:"value"}],ref:"element",staticClass:"dito-checkbox",attrs:{id:t.dataPath,type:"checkbox"},domProps:{checked:Array.isArray(t.value)?t._i(t.value,null)>-1:t.value},on:{change:function(n){var a=t.value,r=n.target,i=!!r.checked;if(Array.isArray(a)){var l=null,c=t._i(a,l);r.checked?c<0&&(t.value=a.concat([l])):c>-1&&(t.value=a.slice(0,c).concat(a.slice(c+1)))}else t.value=i}}},"input",t.attributes,!1),t.listeners))},Ii=[],$c="";const Mi=$.register("checkbox",{nativeField:!0}),Qe={};var Ai=m(Mi,qi,Ii,!1,Ni,null,null,null);function Ni(t){for(let e in Qe)this[e]=Qe[e]}var zi=function(){return Ai.exports}(),Ge={mixins:[Te],data(){return{isLoading:!1,asyncDataEntries:{}}},methods:{handleDataSchema(t,e,a={}){var r=a,{resolveCounter:s=1}=r,n=R(r,["resolveCounter"]);var u;o.isObject(t)||(t={data:t});let{data:i=void 0,dataPath:l=null}=t;const c=this.asyncDataEntries[e]||this.$set(this.asyncDataEntries,e,{dependencyFunction:null,resolveCounter:0,resolvedData:null,resolving:!1});if((u=c.dependencyFunction)==null||u.call(this,this.context),c.resolveCounter>0){const{resolvedData:d}=c;return--c.resolveCounter===0&&(c.resolvedData=null),d}if(c.resolving)i=null;else if(i){if(o.isFunction(i)){const d=i.call(this,this.context);o.isFunction(d)?(c.dependencyFunction=i,i=d.call(this,this.context)):i=d}o.isPromise(i)&&(c.resolving=!0,this.resolveData(i,n).then(d=>{c.resolveCounter=s,c.resolvedData=d,c.resolving=!1}),i=null)}else l&&(i=o.getValueAtDataPath(this.rootData,o.normalizeDataPath(`${this.dataPath}/${l}`)));return i},async resolveData(t,e={}){this.setLoading(!0,e);let s=null;try{s=await(o.isFunction(t)?t():t)}catch(n){this.addError(n.message||n)}return this.setLoading(!1,e),s}}},nt={mixins:[Ge],data(){return{hasOptions:!1}},computed:{selectedValue:{get(){const t=s=>this.relate?this.hasOption(s)?this.getValueForOption(s):null:s,e=o.isArray(this.value)?this.value.map(t).filter(s=>s!==null):t(this.value);return this.relate&&this.hasOptions&&(e===null&&this.value!==null||Gs(this.value))&&(this.selectedValue=e),e},set(t){const e=s=>this.relate?this.getOptionForValue(s):s;this.value=o.isArray(t)?t.map(e):e(t)}},selectedOption(){return this.getOptionForValue(this.selectedValue)},options(){var e;const t=(e=this.handleDataSchema(this.schema.options,"options",{resolveCounter:1}))!=null?e:[];if(!o.isArray(t))throw new Error(`Invalid options data, should be array: ${t}`);return this.hasOptions=t.length>0,this.processOptions(t)},activeOptions(){return this.options},relate:p("relate",{type:Boolean,default:!1,callback:!1}),groupBy:p("groupBy",{type:String,default:null}),optionLabel:p("options.label",{type:[String,Function],default:null,get(t){return t||this.getOptionKey("label")||null}}),optionValue:p("options.value",{type:[String,Function],default:null,get(t){return t||this.relate&&"id"||this.getOptionKey("value")||null}}),searchFilter:p("search",{type:[Object,Function],default:null,get(t){if(t){const{filter:e,debounce:s}=o.isFunction(t)?{filter:t}:t;return s?o.debounceAsync(e,s):e}}}),groupByLabel(){return this.groupBy?"label":null},groupByOptions(){return this.groupBy?"options":null}},methods:{getOptionKey(t){const[e]=this.activeOptions;return o.isObject(e)&&t in e?t:null},processOptions(t){if(t.length){if(this.relate)for(const e of t)"id"in e||Qs(e,"id");if(this.groupBy){const e={};t=t.reduce((s,n)=>{const a=n[this.groupBy];let r=e[a];return r||(r=e[a]={[this.groupByLabel]:a,[this.groupByOptions]:[]},s.push(r)),r.options.push(n),s},[])}}return t},hasOption(t){return!!this.getOptionForValue(this.getValueForOption(t))},getOptionForValue(t){const e=(s,n,a)=>{for(const r of s)if(a){const i=e(r.options,n,null);if(i)return i}else if(n===this.getValueForOption(r))return r};return this.optionValue?e(this.activeOptions,t,this.groupBy):t},getValueForOption(t){const{optionValue:e}=this;return o.isString(e)?t==null?void 0:t[e]:o.isFunction(e)?e.call(this,new O(this,{option:t})):t},getLabelForOption(t){const{optionLabel:e}=this;return o.isString(e)?t==null?void 0:t[e]:o.isFunction(e)?e.call(this,new O(this,{option:t})):o.labelize(`${t}`)}},processValue(t,e,s,n){var a;if(t.relate){const r=(a=t.options)==null?void 0:a.dataPath,i=r?o.normalizeDataPath(`${s}/${r}`):null;n.addRelation(s,i,t),i&&n.setSourceRelated(i);const l=c=>c&&{id:c.id};e=o.isArray(e)?e.map(l):l(e)}return e}},Ui=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ul",{staticClass:"dito-checkboxes",class:"dito-layout-"+(t.schema.layout||"vertical"),attrs:{id:t.dataPath}},t._l(t.options,function(n){return s("li",[s("label",[s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.selectedOptions,expression:"selectedOptions"}],ref:"element",refInFor:!0,staticClass:"dito-checkbox",attrs:{type:"checkbox"},domProps:{value:t.getValueForOption(n),checked:Array.isArray(t.selectedOptions)?t._i(t.selectedOptions,t.getValueForOption(n))>-1:t.selectedOptions},on:{change:function(a){var r=t.selectedOptions,i=a.target,l=!!i.checked;if(Array.isArray(r)){var c=t.getValueForOption(n),u=t._i(r,c);i.checked?u<0&&(t.selectedOptions=r.concat([c])):u>-1&&(t.selectedOptions=r.slice(0,u).concat(r.slice(u+1)))}else t.selectedOptions=l}}},"input",t.attributes,!1),t.listeners)),t._v(t._s(t.getLabelForOption(n)))])])}),0)},Hi=[],Cc="";const Ki=$.register("checkboxes",{mixins:[nt],nativeField:!0,defaultValue:[],computed:{selectedOptions:{get(){return(this.selectedValue||[]).filter(t=>t)},set(t){this.selectedValue=t||[]}}}}),Xe={};var Wi=m(Ki,Ui,Hi,!1,Ji,null,null,null);function Ji(t){for(let e in Xe)this[e]=Xe[e]}var Qi=function(){return Wi.exports}(),Gi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{ref:"code",staticClass:"dito-code",style:t.style,attrs:{id:t.dataPath}})},Xi=[],Dc="";const Yi=$.register("code",{mixins:[G],computed:{lines(){return this.schema.lines||3},style(){return`height: calc(${this.lines}em * var(--line-height))`}},mounted(){const t=new Is.default(this.$refs.code,{language:this.schema.language||"javascript",tabSize:this.schema.indentSize||2,lineNumbers:!1});let e=!1,s=!1,n=!1;const a=()=>{!this.focused&&e&&(e=!1,this.onChange())},r=()=>this.onFocus(),i=()=>{this.onBlur(),a()};this.domOn(this.$refs.code.querySelector("textarea"),{focus:r,blur:i});const l=u=>{u!==t.code&&(n=!0,t.updateCode(u))},c=u=>{u!==this.value&&(s=!0,this.value=u,e=!0,a())};t.onUpdate(u=>{n?n=!1:c(u)}),this.$watch("value",u=>{s?s=!1:l(u||"")}),l(this.value||"")},methods:{focusElement(){var t;(t=this.$el.querySelector("textarea"))==null||t.focus()}}}),Ye={};var Zi=m(Yi,Gi,Xi,!1,to,null,null,null);function to(t){for(let e in Ye)this[e]=Ye[e]}var eo=function(){return Zi.exports}(),so=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("trigger",{staticClass:"dito-color",attrs:{trigger:"click",show:t.showPopup},on:{"update:show":function(n){t.showPopup=n}}},[s("div",{staticClass:"dito-input",class:{"dito-focus":t.showPopup},attrs:{slot:"trigger"},slot:"trigger"},[s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.hexValue,expression:"hexValue"}],ref:"element",attrs:{id:t.dataPath,type:"input",size:"8"},domProps:{value:t.hexValue},on:{input:function(n){n.target.composing||(t.hexValue=n.target.value)}}},"input",t.attributes,!1),t.listeners)),t.value?s("div",{staticClass:"dito-color-preview dito-inherit-focus"},[s("div",{style:{background:"#"+(t.hexValue||"00000000")}})]):t._e(),t.showClearButton?s("button",{staticClass:"dito-button-clear dito-button-overlay",attrs:{disabled:t.disabled},on:{click:function(n){return n.stopPropagation(),t.clear.apply(null,arguments)}}}):t._e()]),s("sketch-picker",{staticClass:"dito-color-picker",attrs:{slot:"popup","disable-alpha":!t.alpha,"disable-fields":!t.inputs,"preset-colors":t.presets},slot:"popup",model:{value:t.colorValue,callback:function(n){t.colorValue=n},expression:"colorValue"}})],1)},no=[],Pc="";const ao=$.register("color",{components:{Trigger:T.Trigger,SketchPicker:Fs.Sketch},data(){return{showPopup:!1,convertedHexValue:null}},computed:{colorValue:{get(){return this.value||{}},set(t){const e=this.colorFormat,s={hex:(t==null?void 0:t.a)<1?"hex8":"hex",rgb:"rgba"}[e]||e;s?this.value=t[s]:this.value=ot.default(t).toString(e),this.onChange()}},hexValue:{get(){if(this.value==null)this.convertedHexValue=null;else if(!this.focused){const t=ot.default(this.value);t.isValid()&&(this.convertedHexValue=t.toString(t.getAlpha()<1?"hex8":"hex6").slice(1).toUpperCase())}return this.convertedHexValue},set(t){this.convertedHexValue=t}},colorFormat:p("format",{type:String,default:"hex"}),alpha:p("alpha",{type:Boolean,default:!1}),inputs:p("inputs",{type:Boolean,default:!0}),presets:p("presets",{type:Array,default:["#ffffff","#c3c3c3","#7f7f7f","#000000","#880015","#ed1c24","#ff7f27","#fff200","#22b14c","#00a2e8","#3f48cc","#a349a4","#b97a57","#ffaec9","#ffc90e","#00000000"]})},watch:{focused(t){if(!t&&this.convertedHexValue){const e=ot.default(`#${this.convertedHexValue}`);e!=null&&e.isValid()&&(this.value=e.toString(this.colorFormat),this.onChange())}}}}),Ze={};var ro=m(ao,so,no,!1,io,null,null,null);function io(t){for(let e in Ze)this[e]=Ze[e]}var oo=function(){return ro.exports}(),lo=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s(t.component,t._b({tag:"component"},"component",t.$props,!1))},uo=[];const co=$.register("component",{defaultValue:()=>{},ignoreMissingValue:t=>!("default"in t)}),ts={};var ho=m(co,lo,uo,!1,po,null,null,null);function po(t){for(let e in ts)this[e]=ts[e]}var mo=function(){return ho.exports}(),fo=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("input",{ref:"element",staticClass:"dito-text dito-input",attrs:{id:t.dataPath,name:t.name,type:"text",disabled:t.disabled,readonly:!0},domProps:{value:t.value}})},_o=[];const vo=$.register(["computed","data","hidden"],{mixins:[Ge],defaultValue:()=>{},defaultVisible:!1,computed:{value:{get(){const{schema:t}=this;if(t.data||t.dataPath){const e=this.handleDataSchema(t,"schema",{resolveCounter:2});this.$set(this.data,this.name,e)}return et.computed.value.get.call(this)},set(t){et.computed.value.set.call(this,t)}}}}),es={};var go=m(vo,fo,_o,!1,bo,null,null,null);function bo(t){for(let e in es)this[e]=es[e]}var yo=function(){return go.exports}(),$o=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-date"},[s(t.getComponent(t.type),t._g(t._b({ref:"element",tag:"component",attrs:{id:t.dataPath,locale:t.locale,dateFormat:Object.assign({},t.api.formats.date,t.dateFormat)},model:{value:t.dateValue,callback:function(n){t.dateValue=n},expression:"dateValue"}},"component",t.attributes,!1),t.listeners))],1)},Co=[];const Do=$.register(["date","datetime","time"],{components:{DatePicker:T.DatePicker,TimePicker:T.TimePicker,DateTimePicker:T.DateTimePicker},nativeField:!0,textField:!0,computed:{dateValue:{get(){const{value:t}=this;return t&&new Date(t)},set(t){this.value=t}},dateFormat:p("dateFormat",{type:Object,default:null})},methods:{getComponent(t){return{date:"date-picker",time:"time-picker",datetime:"date-time-picker"}[t]}},processValue(t,e){return o.isDate(e)?e.toISOString():e}}),ss={};var Po=m(Do,$o,Co,!1,wo,null,null,null);function wo(t){for(let e in ss)this[e]=ss[e]}var So=function(){return Po.exports}(),at={mixins:[Re,ue],defaultValue(t){return Q(t)?[]:null},provide(){return{$sourceComponent:()=>this}},data(){return{wrappedPrimitives:null,unwrappingPrimitives:!1,ignoreRouteChange:!1}},computed:{sourceComponent(){return this},isObjectSource(){return J(this.type)},isListSource(){return Q(this.type)},hasData(){return!!this.value},isReady(){return this.hasData||!this.providesData},isInView(){return!!this.viewComponent},wrapPrimitives(){return this.schema.wrapPrimitives},listData:{get(){let t=this.value;this.isObjectSource?t=t!=null?[t]:[]:t=this.unwrapListData(t)||t,t=t||[];const{wrapPrimitives:e}=this;return e?(this.unwrappingPrimitives?this.unwrappingPrimitives=!1:this.wrappedPrimitives=t.map(s=>({[e]:s})),this.wrappedPrimitives):t},set(t){this.wrapPrimitives?this.wrappedPrimitives=t:this.value=this.isObjectSource?t&&t.length>0?t[0]:null:t}},objectData:{get(){return this.listData[0]||null},set(t){this.listData=t?[t]:[]}},sourceSchema(){return this.schema},path(){return this.routeComponent.getChildPath(this.schema.path)},defaultQuery(){const{defaultOrder:t}=this;return t?{order:t}:{}},query:vt("query",{get(t){return h(h({},this.defaultQuery),t)},set(t){var n;const{scope:e=(n=this.defaultScope)==null?void 0:n.name,page:s=this.schema.page}=this.query;return t=h(h(h(h({},this.query),e!=null&&{scope:e}),s!=null&&{page:s}),t),o.equals(t,this.$route.query)||(this.ignoreRouteChange=!0,this.$router.replace({query:t,hash:this.$route.hash})),t}}),total:vt("total"),columns(){return K(this.schema.columns)},scopes(){return K(this.schema.scopes)},defaultScope(){if(this.scopes){let t=null;for(const e of Object.values(this.scopes)){if(e.defaultScope)return e;t||(t=e)}return t}},defaultOrder(){if(this.columns)for(const t of Object.values(this.columns)){const{defaultSort:e}=t;if(e){const s=o.isString(e)?e:"asc";return`${t.name} ${s}`}}},nestedMeta(){return x(h({},this.meta),{schema:this.schema})},forms(){return Object.values(W(this.schema,this.context))},view(){return Ct(this.schema,this.context)},linksToView(){return!!this.view},buttonSchemas(){return tt(this.schema.buttons)},hasLabels(){return this.forms.some(vn)},isCompact(){return this.forms.every(Gt)},isInlined(){return Pt(this.schema)},paginate:p("paginate",{type:Number}),render:p("render",{type:Function,default:null}),creatable:p("creatable",{type:Boolean,default:!1,get(t){return t&&H(this.schema)?this.isObjectSource?!this.value:!0:!1}}),editable:p("editable",{type:Boolean,default:!1,get(t){return t&&!this.isInlined}}),deletable:p("deletable",{type:Boolean,default:!1}),draggable:p("draggable",{type:Boolean,default:!1,get(t){return this.isListSource&&this.listData.length>1&&t}}),collapsible:p("collapsible",{type:Boolean,default:null,get(t){return this.isInlined&&!!(t!=null?t:this.collapsed!==null)}}),collapsed:p("collapsed",{type:Boolean,default:null})},watch:{$route(t,e){if(this.ignoreRouteChange){this.ignoreRouteChange=!1;return}e.path===t.path&&e.hash===t.hash&&(this.query=t.query,this.loadData(!1))},wrappedPrimitives:{deep:!0,handler(t,e){const{wrapPrimitives:s}=this;s&&e!==null&&(this.unwrappingPrimitives=!0,this.value=t.map(n=>n[s]))}}},methods:{setupData(){this.query=this.$route.query,this.ensureData()},clearData(){this.total=0,this.value=null},setData(t){!t||this.isListSource&&o.isArray(t)||this.isObjectSource&&o.isObject(t)?this.value=t:this.unwrapListData(t)||o.isObject(t)&&this.isInView&&this.viewComponent.setData(t)},unwrapListData(t){if(this.isListSource&&o.isObject(t)&&o.isNumber(t.total)&&o.isArray(t.results))return this.total=t.total,this.value=t.results,this.value},createItem(t,e){const s=this.createData(t,e);return this.isObjectSource?this.objectData=s:this.listData.push(s),this.collapsible&&this.$nextTick(()=>this.openSchemaComponent(-1)),this.onChange(),s},removeItem(t){if(this.isObjectSource)this.objectData=null,this.onChange();else{const{listData:e}=this,s=e&&e.indexOf(t);s>=0&&(e.splice(s,1),this.onChange())}},deleteItem(t,e){const s=t&&this.getItemLabel(this.schema,t,{index:e,extended:!0}),n=()=>this.notify({type:this.isTransient?"info":"success",title:"Successfully Removed",text:[`${s} was ${this.verbs.deleted}.`,this.transientNote]});if(t&&window.confirm(`Do you really want to ${this.verbs.delete} ${s}?`))if(this.isTransient)this.removeItem(t),n();else{const a=this.getItemId(this.schema,t),r=ft(a,this.resource);r&&this.handleRequest({method:"delete",resource:r},i=>{i||(this.removeItem(t),n()),this.reloadData()})}},getSchemaComponent(t){const{schemaComponents:e}=this,{length:s}=e;return e[(t%s+s)%s]},openSchemaComponent(t){const e=this.getSchemaComponent(t);e&&(e.opened=!0)},async navigateToComponent(t,e){var s,n;if(this.collapsible){const a=t.startsWith(this.dataPath)?this.isListSource?(s=o.parseDataPath(t.slice(this.dataPath.length+1))[0])!=null?s:null:0:null;if(a!==null&&o.isNumber(+a)){const r=this.getSchemaComponent(+a);if(r){const{opened:i}=r;i||(r.opened=!0,await this.$nextTick());const l=r.getComponentsByDataPath(t);if(l.length>0&&((n=e==null?void 0:e(l))!=null?n:!0))return!0;r.opened=i}}}return this.navigateToRouteComponent(t,e)},navigateToRouteComponent(t,e){return new Promise((s,n)=>{const a=()=>{var c;const{routeComponents:i}=this.appState,l=i[i.length-1];s((c=e==null?void 0:e([l]))!=null?c:!0)},r=o.parseDataPath(t);for(;r.length>0;){const i=this.routeComponent.getChildPath(this.api.normalizePath(o.normalizeDataPath(r))),{matched:l}=this.$router.match(i);l.length&&(this.$route.path===i?a():this.$router.push({path:i},()=>{this.$nextTick(a)},n)),r.pop()}s(!1)})}},async processSchema(t,e,s,n,a,r=!1,i=!1,l=null){Kt(t,e,s);const c=Pt(e);if(c&&e.resource)throw new Error("Lists with nested forms cannot load data from their own resources");const u=`id${a+1}`,d={api:t,schema:e},g=x(h({},d),{flatten:i,nested:r,param:u}),_=await hn(t,e,a);if(l&&await l(_,a+1),H(e)&&!c){const C=(y,j)=>j?y?`${y}/:${j}`:`:${j}`:y,f=a===0?"":e.path,P={path:C(f,Q(e)&&u),component:b.component(r?"dito-form-nested":"dito-form"),meta:g};J(e)&&n.push(x(h({},P),{path:C(f,u)})),f&&n.push({path:f,redirect:".",meta:d});const[V,w]=_.reduce((y,j)=>(y[j.meta.flatten?0:1].push(j),y),[[],[]]);if(w.length&&(P.children=w),n.push(P),V.length)for(const y of V)n.push(x(h({},y.redirect?y:P),{path:`${P.path}/${y.path}`,meta:x(h({},y.meta),{flatten:i})}))}},processValue(t,e,s,n){return n.addSource(s,t),e}};const Ot={text(t){const e=[{label:"contains",value:"contains"},{label:"equals",value:"equals"},{label:"starts with",value:"starts-with"},{label:"ends with",value:"ends-with"}];return{operator:t.operators?{type:"select",options:o.isArray(t.operators)?e.filter(s=>t.operators.includes(s.value)):e,width:"40%"}:null,text:{type:"text",width:t.operators?"60%":"fill"}}},"date-range"(){const t={day:"2-digit",month:"2-digit",year:"numeric"};return{from:{type:"datetime",width:"50%",dateFormat:t},to:{type:"datetime",width:"50%",dateFormat:t}}}};function xo(t,e,s){const n={label:"Filters",name:"$filters",target:e,disabled:!1,data(){return Fo(n,s.query)},components:Oo(t),buttons:{clear:{text:"Clear",events:{click({schemaComponent:a}){a.resetData(),a.applyFilters()}}},filter:{type:"submit",text:"Filter",events:{click({schemaComponent:a}){a.applyFilters()}}}},methods:{applyFilters(){s.query=x(h({},s.query),{filter:jo(this.schema,this.data),page:void 0})}}};return n}function Oo(t){var n;const e={};for(const a of Object.values(t||{})){const s=a,{filter:r}=s,i=R(s,["filter"]),l=r?(n=Ot[r])==null?void 0:n.call(Ot,a):a.components;if(l){i.components={};for(const[c,u]of Object.entries(l))if(u){const d=u.label||o.labelize(u.name||c);i.components[c]=x(h({},u),{label:!1,placeholder:d})}e[a.name]={label:i.label,type:"object",default:()=>({}),form:i,inlined:!0}}else throw new Error(`Invalid filter '${a.name}': Unknown filter type '${r}'.`)}return e}function ns(t,e){var n;const s=t.components[e];return(n=s==null?void 0:s.form)==null?void 0:n.components}function jo(t,e){const s=[];for(const n in e){const a=e[n];if(a){const r=Object.keys(ns(t,n)).map(i=>{var l;return(l=a[i])!=null?l:null});r.some(i=>i!==null)&&s.push(`${n}:${r.map(JSON.stringify).join(",")}`)}}return s.length?s:void 0}function Fo(t,e){const s={};if(e)for(const a of o.asArray(e.filter)){const[,r,i]=a.match(/^(\w+):(.*)$/);try{s[r]=o.asArray(JSON.parse(`[${i}]`))}catch{}}const n={};for(const a in t.components){const r={},i=s[a];if(i){const l=ns(t,a);if(l){let c=0;for(const u in l)r[u]=i[c++]}}n[a]=r}return n}var Vo=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isReady?s("div",{staticClass:"dito-list",class:t.schema.class,style:t.schema.style,attrs:{id:t.dataPath}},[s("div",{staticClass:"dito-navigation"},[t.scopes?s("dito-scopes",{attrs:{query:t.query,scopes:t.scopes}}):t.paginate?s("div",{staticClass:"dito-spacer"}):t._e(),t.paginate?s("dito-pagination",{attrs:{query:t.query,limit:t.paginate,total:t.total||0}}):t._e()],1),s("table",{staticClass:"dito-table",class:{"dito-table-separators":t.isInlined,"dito-table-larger-padding":t.hasEditButtons&&!t.isInlined,"dito-table-alternate-colors":!t.isInlined,"dito-table-even-count":t.hasEvenCount}},[t.columns?s("dito-table-head",{attrs:{query:t.query,columns:t.columns,hasEditButtons:t.hasEditButtons}}):t._e(),s("vue-draggable",t._b({attrs:{tag:"tbody",list:t.updateOrder(t.sourceSchema,t.listData,t.paginationRange)},on:{start:t.onStartDrag,end:t.onEndDrag}},"vue-draggable",t.getDragOptions(t.draggable),!1),t._l(t.listData,function(n,a){return s("tr",{key:t.getItemUid(t.schema,n),attrs:{id:t.getDataPath(a)}},[t.columns?t._l(t.columns,function(r){return t.shouldRender(r)?s("dito-table-cell",{key:r.name,class:t.getCellClass(r),attrs:{cell:r,schema:t.schema,dataPath:t.getDataPath(a),data:n,meta:t.nestedMeta,store:t.store,nested:!1,disabled:t.disabled||t.isLoading}}):t._e()}):[s("td",[t.isInlined?s("dito-schema-inlined",{attrs:{label:t.getItemLabel(t.schema,n,{index:a,asObject:!0}),schema:t.getItemFormSchema(t.schema,n,t.context),dataPath:t.getDataPath(a),data:n,meta:t.nestedMeta,store:t.getChildStore(a),disabled:t.disabled||t.isLoading,collapsed:t.collapsed,collapsible:t.collapsible,deletable:t.deletable,draggable:t.draggable,editable:t.editable,editPath:t.getEditPath(n,a)},on:{delete:function(r){return t.deleteItem(n,a)}}}):t.component?s(t.component,{tag:"component",attrs:{dataPath:t.getDataPath(a),data:n,nested:!1}}):t.render?s("span",{domProps:{innerHTML:t._s(t.render(t.getContext(n,a)))}}):s("span",{domProps:{innerHTML:t._s(t.getItemLabel(t.schema,n,{index:a}))}})],1)],t.hasCellEditButtons?s("td",{staticClass:"dito-cell-edit-buttons"},[s("dito-edit-buttons",{attrs:{deletable:t.deletable,draggable:t.draggable,editable:t.editable,editPath:t.getEditPath(n,a),schema:t.getItemFormSchema(t.schema,n,t.context),dataPath:t.getDataPath(a),data:n,meta:t.nestedMeta,store:t.getChildStore(a)},on:{delete:function(r){return t.deleteItem(n,a)}}})],1):t._e()],2)}),0),t.hasListButtons&&!t.single?s("tfoot",[s("tr",[s("td",{staticClass:"dito-cell-edit-buttons",attrs:{colspan:t.numColumns}},[s("dito-edit-buttons",{attrs:{creatable:t.creatable,createPath:t.path,buttons:t.buttonSchemas,schema:t.schema,dataPath:t.dataPath,data:t.listData,meta:t.meta,store:t.store}})],1)])]):t._e()],1),t.hasListButtons&&t.single?s("dito-edit-buttons",{staticClass:"dito-buttons-main dito-buttons-large",attrs:{creatable:t.creatable,createPath:t.path,buttons:t.buttonSchemas,schema:t.schema,dataPath:t.dataPath,data:t.listData,meta:t.meta,store:t.store}}):t._e()],1):t._e()},Eo=[],wc="";const ko=$.register("list",{components:{VueDraggable:it.default},mixins:[at,xt],getSourceType(t){return t},getPanelSchema(t,e,s){const{filters:n}=t;if(n){const a=()=>s.getComponentByDataPath(e,r=>r.type==="list");return xo(K(n),e,{get query(){var r;return(r=a())==null?void 0:r.query},set query(r){const i=a();if(i){const l=c=>o.pickBy(c,u=>u!==void 0);o.equals(l(r),l(i.query))||(i.query=r,i.loadData(!1))}}})}},computed:{hasListButtons(){return!!(this.buttonSchemas||this.creatable)},hasEditButtons(){const{listData:t}=this;return t.length>0&&(this.editable||this.deletable||this.draggable)},hasCellEditButtons(){return!this.isInlined&&this.hasEditButtons},hasEvenCount(){return!(this.listData.length%2)},numColumns(){return(this.columns?Object.keys(this.columns).length:1)+(this.hasCellEditButtons?1:0)}},methods:{getDataPath(t){return B(this.dataPath,t)},getEditPath(t,e){if(this.editable){const s=mn(this.schema,this.context)||this.path,n=this.getItemId(this.schema,t,e);return`${s}/${n}`}return null},getCellClass(t){return`dito-cell-${o.hyphenate(t.name)}`},getContext(t,e){return new O(this,{data:t,value:t,index:e,dataPath:this.getDataPath(e)})},onFilterErrors(t){const e=B(this.dataPath,"$filters"),s=this.schemaComponent.getPanelByDataPath(e);if(s)return s.showValidationErrors(t,!0),!0}}}),as={};var Lo=m(ko,Vo,Eo,!1,Bo,null,null,null);function Bo(t){for(let e in as)this[e]=as[e]}var To=function(){return Lo.exports}(),Ro=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("dito-label",{staticClass:"dito-label-component",attrs:{label:t.value,dataPath:t.dataPath}})},qo=[],Sc="";const Io=$.register("label",{generateLabel:!1}),rs={};var Mo=m(Io,Ro,qo,!1,Ao,null,null,null);function Ao(t){for(let e in rs)this[e]=rs[e]}var No=function(){return Mo.exports}(),zo=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-markup",attrs:{id:t.dataPath}},[s("editor-menu-bar",{staticClass:"dito-markup-toolbar",attrs:{editor:t.editor}},[t.groupedButtons.length>0?s("div",{staticClass:"dito-buttons dito-buttons-toolbar"},t._l(t.groupedButtons,function(n){return s("div",{staticClass:"dito-button-group"},t._l(n,function(a){a.name;var r=a.icon,i=a.isActive,l=a.onClick;return s("button",{staticClass:"dito-button",class:{"dito-active":i},on:{click:l}},[s("icon",{attrs:{name:r}})],1)}),0)}),0):t._e()]),s("editor-content",{ref:"editor",staticClass:"dito-markup-editor",style:t.styles,attrs:{editor:t.editor}}),t.resizable?s("div",{staticClass:"dito-resize",on:{mousedown:function(n){return n.stopPropagation(),n.preventDefault(),t.onDragResize.apply(null,arguments)}}}):t._e()],1)},Uo=[],xc="";const Ho=$.register("markup",{components:{EditorContent:X.EditorContent,EditorMenuBar:X.EditorMenuBar,Icon:T.Icon},mixins:[G],data(){return{editor:null,height:null}},computed:{lines(){return this.schema.lines||10},styles(){return{height:this.height||`calc(${this.lines}em * var(--line-height))`}},markButtons(){return this.getButtons("marks",{bold:!0,italic:!0,underline:!0,strike:!0,small:!0,code:!0,link:{onClick:t=>this.onClickLink(t)}})},basicNodeButtons(){return this.getButtons("nodes",{paragraph:{ignoreActive:()=>this.otherNodeButtons.some(t=>t.isActive)},heading:{attr:"level",values:[1,2,3,4,5,6]}})},otherNodeButtons(){return this.getButtons("nodes",{bulletList:!0,orderedList:!0,blockquote:!0,codeBlock:!0})},toolButtons(){return this.getButtons("tools",{undo:!0,redo:!0})},groupedButtons(){const{markButtons:t,basicNodeButtons:e,otherNodeButtons:s,toolButtons:n}=this;return[t,e,s,n].filter(a=>a.length>0)},parseOptions(){return{preserveWhitespace:{collapse:!1,preserve:!0,"preserve-all":"full"}[this.whitespace]}},editorOptions(){return{editable:!this.readyonly,autoFocus:this.autofocus,disableInputRules:!this.enableRules.input,disablePasteRules:!this.enableRules.paste,parseOptions:this.parseOptions}},resizable:p("resizable",{type:Boolean,default:!1}),whitespace:p("whitespace",{type:String,default:"collapse"}),enableRules:p("enableRules",{type:[Object,Boolean],default:!1,get(t){return o.isObject(t)?t:{input:!!t,paste:!!t}}})},watch:{readyonly:"updateEditorOptions",autofocus:"updateEditorOptions",enableRules:"updateEditorOptions"},created(){let t=!1,e=!1;const s=()=>{!this.focused&&t&&(t=!1,this.onChange())},n=()=>this.onFocus(),a=()=>{this.onBlur(),s()},r=o.debounce(l=>{e=!0,this.value=l(),t=!0,s()},100),i=({getHTML:l})=>{r(l),this.onInput()};this.$watch("value",l=>{e?e=!1:this.editor.setContent(l,!1,this.parseOptions)}),this.editor=new X.Editor(x(h({},this.editorOptions),{onFocus:n,onBlur:a,onUpdate:i,extensions:this.createExtensions(),content:this.value||""}))},beforeDestroy(){this.editor.destroy()},methods:{onDragResize(t){const e=({clientX:i,clientY:l})=>({x:i,y:l});let s=e(t).y,n=parseFloat(getComputedStyle(this.$refs.editor.$el).height);const a=i=>{const{y:l}=e(i);n+=l-s,s=l,this.height=`${Math.max(n,0)}px`},r=this.domOn(document,{mousemove:a,mouseup(i){a(i),r.remove()}})},updateEditorOptions(){this.editor.setOptions(this.editorOptions)},async onClickLink(t){const e=await this.showDialog({components:{href:{type:"url",label:"Link",autofocus:!0},title:{type:"text",label:"Title"}},buttons:{cancel:{},apply:{type:"submit"},remove:{events:{click({dialogComponent:s}){s.resolve({href:null,title:null})}}}},data:this.editor.getMarkAttrs("link")});if(e){let{href:s,title:n}=e;if(s)try{new URL(s)}catch{s=`http://${s}`}t({href:s,title:n})}},createExtensions(){const{marks:t={},nodes:e={},tools:s={}}=this.schema;return[t.bold&&new L.Bold,t.italic&&new L.Italic,t.underline&&new L.Underline,t.strike&&new L.Strike,t.small&&new Ko,t.code&&new L.Code,t.link&&new Wo,e.blockquote&&new L.Blockquote,e.codeBlock&&new L.CodeBlock,new L.HardBreak,e.heading&&new L.Heading({levels:e.heading}),e.horizontalRule&&new L.HorizontalRule,(e.orderedList||e.bulletList)&&new L.ListItem,e.bulletList&&new L.BulletList,e.orderedList&&new L.OrderedList,s.history&&new L.History].filter(n=>!!n)},getButtons(t,e){const s=[],n=({name:r,icon:i,attrs:l,ignoreActive:c,onClick:u})=>{const d=this.editor.isActive[r],g=this.editor.commands[r];s.push({name:r,icon:i,isActive:(d==null?void 0:d(l))&&(c==null||!c()),onClick:()=>u?u(g,l):g(l)})},a=this.schema[t];if(a)for(const[r,i]of Object.entries(e)){const l=["undo","redo"].includes(r)?"history":r,c=a[l],u=o.underscore(r),d=o.hyphenate(r);if(c){if(i===!0)n({name:u,icon:d});else if(o.isObject(i)){const{attr:g,values:_,ignoreActive:C,onClick:f}=i;if(g){if(o.isArray(_)&&o.isArray(c))for(const P of _)c.includes(P)&&n({name:u,icon:`${d}-${P}`,attrs:{[g]:P},ignoreActive:C,onClick:f})}else n({name:u,icon:d,ignoreActive:C,onClick:f})}}}return s},focusElement(){var t,e;(e=(t=this.$el).scrollIntoView)==null||e.call(t),this.editor.focus()}}});class Ko extends X.Mark{get name(){return"small"}get schema(){return{parseDOM:[{tag:"small"}],toDOM:()=>["small",0]}}commands({type:e}){return()=>Vs.toggleMark(e)}}class Wo extends L.Link{get schema(){return{attrs:{href:{default:null},title:{default:null}},inclusive:!1,parseDOM:[{tag:"a",getAttrs:e=>({href:e.getAttribute("href"),title:e.getAttribute("title")})}],toDOM:e=>["a",e.attrs,0]}}}const is={};var Jo=m(Ho,zo,Uo,!1,Qo,null,null,null);function Qo(t){for(let e in is)this[e]=is[e]}var Go=function(){return Jo.exports}(),Oc="",Xo=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-multiselect",class:{"dito-multiselect-single":!t.multiple,"dito-multiselect-multiple":t.multiple}},[s("vue-multiselect",t._g(t._b({ref:"element",attrs:{"show-labels":!1,placeholder:t.placeholder,"tag-placeholder":"Press enter to add new tag",options:t.populate&&t.activeOptions||[],"custom-label":t.getLabelForOption,"track-by":t.optionValue,"group-label":t.groupByLabel,"group-values":t.groupByOptions,multiple:t.multiple,taggable:t.taggable,searchable:t.searchable,"internal-search":!t.searchFilter,"preserve-search":!!t.searchFilter,"clear-on-select":!t.searchFilter,"close-on-select":!t.stayOpen,loading:t.isLoading},on:{open:function(n){t.populate=!0},tag:t.onAddTag,"search-change":t.onSearchChange},model:{value:t.selectedOptions,callback:function(n){t.selectedOptions=n},expression:"selectedOptions"}},"vue-multiselect",t.attributes,!1),t.listeners)),t.showClearButton?s("button",{staticClass:"dito-button-clear dito-button-overlay",attrs:{type:"button",disabled:t.disabled},on:{click:t.clear}}):t._e()],1)},Yo=[],jc="";const Zo=$.register("multiselect",{components:{VueMultiselect:Ms.default},mixins:[nt],data(){return{searchedOptions:null,populate:!1}},computed:{selectedOptions:{get(){return this.multiple?(this.selectedValue||[]).map(t=>this.getOptionForValue(t)||this.addTagOption(t)).filter(t=>t):this.selectedOption},set(t){this.selectedValue=this.multiple?(t||[]).map(e=>this.getValueForOption(e)):this.getValueForOption(t)}},activeOptions(){return this.searchedOptions||this.options},multiple:p("multiple",{type:Boolean,default:!1}),searchable:p("searchable",{type:Boolean,default:!1}),taggable:p("taggable",{type:Boolean,default:!1}),stayOpen:p("stayOpen",{type:Boolean,default:!1}),placeholder(){const{placeholder:t,searchable:e,taggable:s}=this.schema;return t||(e&&s?"Search or add a tag":e?"Select or search entry":void 0)}},mounted(){this.autofocus&&this.focus()},methods:{getListeners(){return{focus:this.onFocus,blur:this.onBlur,input:this.onChange}},addTagOption(t){if(this.taggable){const{optionLabel:e,optionValue:s}=this,n=e&&s?{[e]:t,[s]:t}:t;return this.options.push(n),n}},focusElement(){this.$refs.element.activate()},onAddTag(t){const e=this.addTagOption(t);e&&this.value.push(this.getValueForOption(e))},async onSearchChange(t){this.searchFilter&&(t?(this.searchedOptions=[],this.searchedOptions=await this.resolveData(()=>this.searchFilter(new O(this,{query:t})))):this.searchedOptions=null)}}}),os={};var tl=m(Zo,Xo,Yo,!1,el,null,null,null);function el(t){for(let e in os)this[e]=os[e]}var sl=function(){return tl.exports}(),jt={computed:{inputValue:{get(){return this.value!==null?this.value:""},set(t){this.value=t!==""?this.isInteger?parseInt(t,10):parseFloat(t):null}},isInteger(){return!1},stepValue(){return this.step==null&&!this.isInteger?"any":this.step},decimals:p("decimals",{type:Number}),step:p("step",{type:Number,get(t){return this.isInteger&&t!=null?Math.ceil(t):t}}),min:p("min",{type:Number,get(t){var e;return t=t===void 0?(e=this.getSchemaValue("range",{type:Array}))==null?void 0:e[0]:t,this.isInteger&&t!=null?Math.floor(t):t}}),max:p("max",{type:Number,get(t){var e;return t=t===void 0?(e=this.getSchemaValue("range",{type:Array}))==null?void 0:e[1]:t,this.isInteger&&t!=null?Math.ceil(t):t}}),range:p("range",{type:Array,get(){const{min:t,max:e}=this;return t!=null&&e!=null?[t,e]:void 0},set(t){o.isArray(t)&&([this.min,this.max]=t)}})},methods:{getValidations(){const t={},{range:e,min:s,max:n,decimals:a,step:r}=this;if(e?t.range=e:(s!=null&&(t.min=s),n!=null&&(t.max=n)),a!=null)t.decimals=a;else if(r){const i=(`${r}`.split(".")[1]||"").length;i>0?t.decimals=i:t.integer=!0}return this.isInteger&&(t.integer=!0),t}}},nl=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("input-field",t._g(t._b({ref:"element",staticClass:"dito-number",attrs:{id:t.dataPath,type:"number",min:t.min,max:t.max,step:t.stepValue},model:{value:t.inputValue,callback:function(n){t.inputValue=n},expression:"inputValue"}},"input-field",t.attributes,!1),t.listeners))},al=[],Fc="";const rl=$.register(["number","integer"],{components:{InputField:T.InputField},mixins:[jt],nativeField:!0,textField:!0,computed:{isInteger(){return this.type==="integer"}}}),ls={};var il=m(rl,nl,al,!1,ol,null,null,null);function ol(t){for(let e in ls)this[e]=ls[e]}var ll=function(){return il.exports}(),ul=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isReady?s("div",{staticClass:"dito-object",class:t.schema.class,style:t.schema.style,attrs:{id:t.dataPath}},[t.objectData?s("div",{staticClass:"dito-object-content"},[t.isInlined?s("dito-schema-inlined",{attrs:{schema:t.getItemFormSchema(t.schema,t.objectData,t.context),dataPath:t.dataPath,data:t.objectData,meta:t.nestedMeta,store:t.store,disabled:t.disabled||t.isLoading,collapsed:t.collapsed,collapsible:t.collapsible}}):t.component?s(t.component,{tag:"component",attrs:{dataPath:t.dataPath,data:t.objectData,nested:!1}}):t.render?s("span",{domProps:{innerHTML:t._s(t.render(t.getContext()))}}):s("span",{domProps:{innerHTML:t._s(t.getItemLabel(t.schema,t.objectData))}})],1):t._e(),s("dito-edit-buttons",{attrs:{creatable:t.creatable,deletable:t.objectData&&t.deletable,editable:t.objectData&&t.editable,createPath:t.path,editPath:t.path,buttons:t.buttonSchemas,schema:t.schema,dataPath:t.dataPath,data:t.objectData,path:t.path,meta:t.meta,store:t.store},on:{delete:function(n){return t.deleteItem(t.objectData)}}})],1):t._e()},cl=[],Vc="";const dl=$.register("object",{mixins:[at],getSourceType(t){return t},methods:{getContext(){return new O(this,{data:this.objectData})}}}),us={};var hl=m(dl,ul,cl,!1,pl,null,null,null);function pl(t){for(let e in us)this[e]=us[e]}var ml=function(){return hl.exports}();const fl=$.register("panel",{defaultValue:()=>{},excludeValue:!0,generateLabel:!1,omitPadding:!0,getPanelSchema(t){const n=t,{name:e}=n;return R(n,["name"])}});let _l,vl;const cs={};var gl=m(fl,_l,vl,!1,bl,null,null,null);function bl(t){for(let e in cs)this[e]=cs[e]}var yl=function(){return gl.exports}(),$l=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("progress",t._g(t._b({ref:"element",staticClass:"dito-progress",attrs:{id:t.dataPath,max:t.progressMax},domProps:{value:t.progressValue}},"progress",t.attributes,!1),t.listeners))},Cl=[];const Dl=$.register("progress",{mixins:[jt],computed:{progressValue(){let{value:t,range:e,step:s}=this;return t!==null?(e&&(t-=e[0]),s&&(t=Math.round(t/s)*s)):t="",t},progressMax(){const{range:t}=this;if(t)return t[1]-t[0]}}}),ds={};var Pl=m(Dl,$l,Cl,!1,wl,null,null,null);function wl(t){for(let e in ds)this[e]=ds[e]}var Sl=function(){return Pl.exports}(),xl=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ul",{staticClass:"dito-radio-buttons",class:"dito-layout-"+(t.schema.layout||"vertical"),attrs:{id:t.dataPath}},t._l(t.options,function(n){return s("li",[s("label",[s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.selectedValue,expression:"selectedValue"}],ref:"element",refInFor:!0,staticClass:"dito-radio-button",attrs:{type:"radio"},domProps:{value:t.getValueForOption(n),checked:t._q(t.selectedValue,t.getValueForOption(n))},on:{change:function(a){t.selectedValue=t.getValueForOption(n)}}},"input",t.attributes,!1),t.listeners)),t._v(t._s(t.getLabelForOption(n)))])])}),0)},Ol=[],Ec="";const jl=$.register("radio",{mixins:[nt],nativeField:!0}),hs={};var Fl=m(jl,xl,Ol,!1,Vl,null,null,null);function Vl(t){for(let e in hs)this[e]=hs[e]}var El=function(){return Fl.exports}(),kl=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-section",class:{"dito-section-labelled":!!t.schema.label}},[s("dito-pane",{staticClass:"dito-section-pane",attrs:{schema:t.getItemFormSchema(t.schema,t.item,t.context),dataPath:t.dataPath,data:t.item,meta:t.meta,store:t.store,disabled:t.disabled}})],1)},Ll=[],kc="";const Bl=$.register("section",{defaultValue:()=>{},ignoreMissingValue:t=>!t.nested&&!("default"in t),defaultNested:!1,generateLabel:!1,omitFlexGrow:!0,computed:{item(){return this.nested?this.value:this.data}},methods:{getItemFormSchema:Dt},async processSchema(t,e,s,n,a){await $t(t,e,n,a)}}),ps={};var Tl=m(Bl,kl,Ll,!1,Rl,null,null,null);function Rl(t){for(let e in ps)this[e]=ps[e]}var ql=function(){return Tl.exports}(),Il=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-select"},[s("select",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.selectedValue,expression:"selectedValue"}],ref:"element",attrs:{id:t.dataPath},on:{mousedown:function(n){t.populate=!0},focus:function(n){t.populate=!0},change:function(n){var a=Array.prototype.filter.call(n.target.options,function(r){return r.selected}).map(function(r){var i="_value"in r?r._value:r.value;return i});t.selectedValue=n.target.multiple?a:a[0]}}},"select",t.attributes,!1),t.listeners),[t.populate?[t._l(t.options,function(n){return[t.groupBy?s("optgroup",{attrs:{label:n[t.groupByLabel]}},t._l(n[t.groupByOptions],function(a){return s("option",{domProps:{value:t.getValueForOption(a)}},[t._v(t._s(t.getLabelForOption(a)))])}),0):s("option",{domProps:{value:t.getValueForOption(n)}},[t._v(t._s(t.getLabelForOption(n)))])]})]:t.selectedOption?[s("option",{domProps:{value:t.selectedValue}},[t._v(t._s(t.getLabelForOption(t.selectedOption)))])]:t._e()],2),t.showClearButton?s("button",{staticClass:"dito-button-clear dito-button-overlay",attrs:{disabled:t.disabled},on:{click:t.clear}}):t._e()])},Ml=[],Lc="";const Al=$.register("select",{mixins:[nt],nativeField:!0,data(){return{populate:!0}}}),ms={};var Nl=m(Al,Il,Ml,!1,zl,null,null,null);function zl(t){for(let e in ms)this[e]=ms[e]}var Ul=function(){return Nl.exports}(),Hl=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-slider"},[s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.inputValue,expression:"inputValue"}],ref:"element",staticClass:"dito-range",attrs:{id:t.dataPath,type:"range",min:t.min,max:t.max,step:t.stepValue},domProps:{value:t.inputValue},on:{__r:function(n){t.inputValue=n.target.value}}},"input",t.attributes,!1),t.listeners)),t.input?s("input-field",t._g(t._b({staticClass:"dito-number",attrs:{type:"number",min:t.min,max:t.max,step:t.stepValue},model:{value:t.inputValue,callback:function(n){t.inputValue=n},expression:"inputValue"}},"input-field",t.attributes,!1),t.listeners)):t._e()],1)},Kl=[],Bc="";const Wl=$.register("slider",{components:{InputField:T.InputField},mixins:[jt],nativeField:!0,computed:{input:p("input",{type:Boolean,default:!0})}}),fs={};var Jl=m(Wl,Hl,Kl,!1,Ql,null,null,null);function Ql(t){for(let e in fs)this[e]=fs[e]}var Gl=function(){return Jl.exports}(),Xl=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("switch-button",t._g(t._b({ref:"element",staticClass:"dito-switch",attrs:{id:t.dataPath,sync:!0,labels:t.labels},model:{value:t.value,callback:function(n){t.value=n},expression:"value"}},"switch-button",t.attributes,!1),t.listeners))},Yl=[],Tc="";const Zl=$.register("switch",{defaultValue:!1,defaultWidth:"auto",components:{SwitchButton:T.SwitchButton},computed:{labels(){return this.schema.labels}}}),_s={};var tu=m(Zl,Xl,Yl,!1,eu,null,null,null);function eu(t){for(let e in _s)this[e]=_s[e]}var su=function(){return tu.exports}(),nu=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("input-field",t._g(t._b({ref:"element",staticClass:"dito-text",attrs:{id:t.dataPath,type:t.inputType},model:{value:t.inputValue,callback:function(n){t.inputValue=n},expression:"inputValue"}},"input-field",t.attributes,!1),t.listeners))},au=[];const ru="****************",iu=$.register(["text","email","url","hostname","domain","tel","password","creditcard"],{components:{InputField:T.InputField},nativeField:!0,textField:!0,ignoreMissingValue:t=>t.type==="password",computed:{inputType(){return{creditcard:"text",hostname:"text",domain:"text"}[this.type]||this.type},inputValue:{get(){return this.type==="password"&&this.value===void 0&&!this.focused?ru:this.value},set(t){this.value=t}}},methods:{getValidations(){const t={email:"email",url:"url",hostname:"hostname",domain:"domain",password:"password",creditcard:"creditcard"}[this.type];return t?{[t]:!0}:{}}}}),vs={};var ou=m(iu,nu,au,!1,lu,null,null,null);function lu(t){for(let e in vs)this[e]=vs[e]}var uu=function(){return ou.exports}(),cu=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("textarea",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.value,expression:"value"}],ref:"element",staticClass:"dito-textarea dito-input",class:{"dito-resizable":t.resizable},attrs:{id:t.dataPath,rows:t.lines},domProps:{value:t.value},on:{input:function(n){n.target.composing||(t.value=n.target.value)}}},"textarea",t.attributes,!1),t.listeners))},du=[],Rc="";const hu=$.register("textarea",{nativeField:!0,textField:!0,computed:{lines(){return this.schema.lines||4},resizable:p("resizable",{type:Boolean,default:!1})}}),gs={};var pu=m(hu,cu,du,!1,mu,null,null,null);function mu(t){for(let e in gs)this[e]=gs[e]}var fu=function(){return pu.exports}(),_u=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-tree-list"},[t.scopes?s("dito-scopes",{attrs:{query:t.query,scopes:t.scopes}}):t._e(),s("div",{staticClass:"dito-tree-panel"},[s("dito-tree-item",{attrs:{schema:t.treeSchema,dataPath:t.treeDataPath,data:t.treeData,draggable:t.draggable,open:!0}}),t.hasEditableForms?s("div",{staticClass:"dito-tree-form-container"},[s("router-view")],1):t._e()],1)],1)},vu=[],qc="";const gu=$.register(["tree-list","tree-object"],{mixins:[at],provide(){return{container:this}},getSourceType(t){return t==="tree-object"?"object":"list"},computed:{path(){var t;return(t=this.formComponent)==null?void 0:t.path},editPath(){var t;return this.$route.path.slice((t=this.path)==null?void 0:t.length)},treeData(){return this.isListSource?{[this.name]:this.value}:this.value},treeDataPath(){return this.isListSource?this.dataPath.slice(0,this.dataPath.length-this.name.length):this.dataPath},treeSchema(){return this.isListSource?{children:h({name:this.name},this.schema)}:this.schema},hasEditableForms(){const t=e=>H(e)&&(this.getSchemaValue("editable",{type:Boolean,default:!1,schema:e})||e.children&&t(e.children));return t(this.schema)}},async processSchema(t,e,s,n,a,r=!0,i=!1,l=null){return at.processSchema(t,e,s,n,a,r,i,(c,u)=>{const{children:d}=e;if(d)return d.type="tree-list",this.processSchema(t,d,d.name,c,u,r,!0,l)})},getFormSchemasForProcessing(t,e){const{children:s}=t;return W(t,e,s?n=>x(h({},n),{components:x(h({},n.components),{[s.name]:s})}):null)}}),bs={};var bu=m(gu,_u,vu,!1,yu,null,null,null);function yu(t){for(let e in bs)this[e]=bs[e]}var $u=function(){return bu.exports}();function ys(t){return zs.default(t,{base:10})}var Cu=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-upload"},[s("table",{staticClass:"dito-table dito-table-separators dito-table-background"},[t._m(0),s("vue-draggable",t._b({attrs:{tag:"tbody",list:t.files},on:{start:t.onStartDrag,end:t.onEndDrag}},"vue-draggable",t.getDragOptions(t.draggable),!1),t._l(t.files,function(n,a){return s("tr",{key:n.key},[s("td",{domProps:{innerHTML:t._s(t.renderFile(n,a))}}),s("td",[t._v(t._s(t._f("formatFileSize")(n.size)))]),s("td",[n.upload?[n.upload.error?[t._v("Error: "+t._s(n.upload.error))]:n.upload.active?[t._v("Uploading...")]:n.upload.success?[t._v("Uploaded")]:t._e()]:[t._v("Stored")]],2),s("td",{staticClass:"dito-cell-edit-buttons"},[s("div",{staticClass:"dito-buttons dito-buttons-round"},[t.draggable?s("a",t._b({staticClass:"dito-button"},"a",t.getButtonAttributes(t.verbs.drag),!1)):t._e(),t.deletable?s("button",t._b({staticClass:"dito-button",attrs:{type:"button"},on:{click:function(r){return t.deleteFile(n,a)}}},"button",t.getButtonAttributes(t.verbs.delete),!1)):t._e()])])])}),0),s("tfoot",[s("tr",[s("td",{attrs:{colspan:4}},[s("div",{staticClass:"dito-upload-footer"},[t.isUploadActive?s("progress",{staticClass:"dito-progress",attrs:{max:"100"},domProps:{value:t.uploadProgress}}):t._e(),s("div",{staticClass:"dito-buttons dito-buttons-round"},[t.isUploadActive?s("button",{staticClass:"dito-button",attrs:{type:"button"},on:{click:function(n){n.preventDefault(),t.upload.active=!1}}},[t._v("Cancel All")]):t.isUploadReady?s("button",{staticClass:"dito-button",attrs:{type:"button"},on:{click:function(n){n.preventDefault(),t.upload.active=!0}}},[t._v("Upload All")]):t._e(),s("vue-upload",{ref:"upload",staticClass:"dito-button dito-button-add-upload",attrs:{"input-id":t.dataPath,name:t.dataPath,disabled:t.disabled,"post-action":t.uploadPath,extensions:t.extensions,accept:t.accept,multiple:t.multiple,size:t.maxSize,title:"Upload Files"},on:{"input-filter":t.inputFilter,"input-file":t.inputFile},model:{value:t.uploads,callback:function(n){t.uploads=n},expression:"uploads"}})],1)])])])])],1)])},Du=[function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("thead",{staticClass:"dito-table-head"},[s("tr",[s("th",[s("span",[t._v("Name")])]),s("th",[s("span",[t._v("Size")])]),s("th",[s("span",[t._v("Status")])]),s("th",[s("span")])])])}],Ic="";const Pu=$.register("upload",{components:{VueUpload:As.default,VueDraggable:it.default},filters:{formatFileSize:ys},mixins:[xt],data(){return{uploads:[]}},computed:{upload(){return this.$refs.upload},files(){return $s(this.value)},multiple:p("multiple",{type:Boolean,default:!1,callback:!1}),extensions:p("extensions",{type:[Array,String,RegExp]}),accept:p("accept",{type:Array,get(t){return o.isArray(t)?t.join(","):t}}),maxSize:p("maxSize",{type:[String,Number],get(t){return t?Ns.default(t):void 0}}),draggable:p("draggable",{type:Boolean,default:!1,get(t){return t&&this.files.length>1}}),deletable:p("deletable",{type:Boolean,default:!1}),isUploadReady(){return this.uploads.length&&!(this.upload.active||this.upload.uploaded)},isUploadActive(){return this.uploads.length&&this.upload.active},uploadProgress(){return this.uploads.reduce((t,e)=>t+e.progress,0)/this.uploads.length},uploadPath(){return this.getResourceUrl({type:"upload",path:this.api.normalizePath(this.dataPath)})}},methods:{renderFile(t,e){const{render:s}=this.schema;return s?s.call(this,new O(this,{value:t,data:this.files,index:e,dataPath:B(this.dataPath,e)})):o.escapeHtml(t.name)},deleteFile(t,e){const{name:s}=t;t&&window.confirm(`Do you really want to ${this.verbs.remove} ${s}?`)&&(this.multiple?this.value.splice(e,1):this.value=null,t.upload&&this.upload.remove(t.upload),this.onChange(),this.notify({type:"info",title:"Successfully Removed",text:`${s} was ${this.verbs.deleted}.`}))},getFileIndex(t){return this.multiple&&this.value?this.value.findIndex(e=>e.id===t.id):-1},addFile(t){this.multiple?this.value?this.value.push(t):this.value=[t]:this.value=t},replaceFile(t,e){if(this.multiple){const s=this.getFileIndex(t);s>=0&&(e?this.$set(this.value,s,e):this.value.splice(s,1))}else this.value=e},removeFile(t){this.replaceFile(t,null)},inputFile(t,e){if(t&&!e){const{id:s,name:n,size:a}=t;this.addFile({id:s,name:n,size:a,upload:t})}if(t&&e){const{success:s,error:n}=t;if(s){this.onChange();const a=t.response[0];a?(a.upload=t,this.replaceFile(t,a)):this.removeFile(t)}else if(n){const a={abort:"Upload aborted",denied:"Upload denied",extension:`Unsupported file-type: ${t.name}`,network:"Network error encountered during upload",server:"Server error occurred during upload",size:`File is too large: ${ys(t.size)}`,timeout:"Timeout occurred during upload"}[n]||`Unknown File Upload Error: '${n}'`;this.notify({type:"error",title:"File Upload Error",text:a}),this.removeFile(t)}}},inputFilter(t){var s;const e=t==null?void 0:t.xhr;((s=this.api.cors)==null?void 0:s.credentials)&&e&&!e.withCredentials&&(e.withCredentials=!0)}},processValue(t,e){const s=$s(e).map(r=>{var i=r,{upload:n}=i,a=R(i,["upload"]);return!n||n.success?a:null}).filter(n=>n);return t.multiple?s:s[0]||null}});function $s(t){return t?o.asArray(t):[]}const Cs={};var wu=m(Pu,Cu,Du,!1,Su,null,null,null);function Su(t){for(let e in Cs)this[e]=Cs[e]}var xu=function(){return wu.exports}(),Ou=Object.freeze(Object.defineProperty({__proto__:null,TypeButton:Ri,TypeCheckbox:zi,TypeCheckboxes:Qi,TypeCode:eo,TypeColor:oo,TypeComponent:mo,TypeComputed:yo,TypeDate:So,TypeList:To,TypeLabel:No,TypeMarkup:Go,TypeMultiselect:sl,TypeNumber:ll,TypeObject:ml,TypePanel:yl,TypeProgress:Sl,TypeRadio:El,TypeSection:ql,TypeSelect:Ul,TypeSlider:Gl,TypeSwitch:su,TypeText:uu,TypeTextarea:fu,TypeTreeList:$u,TypeUpload:xu},Symbol.toStringTag,{value:"Module"})),ju=["create","created","save","saved","submit","submitted","delete","deleted","edit","edited","close","closed","cancel","cancelled","drag","dragged"].reduce((t,e)=>(t[e]=e,t),{});z.default.config.productionTip=!1,z.default.use(kt.default),z.default.use(Ts.default,{dynamic:!0}),z.default.use(Rs.default);class Fu{constructor(e,i={}){var l=i,{dito:s={},api:n,views:a={}}=l,r=R(l,["dito","api","views"]);this.el=e,this.api=n=o.merge({base:"/"},s.api,n),this.options=r,n.locale||(n.locale="en-US"),n.formats=o.merge({},o.defaultFormats,n.formats),n.request||(n.request=u=>this.request(u)),n.normalizePath=n.normalizePath||n.normalizePaths?o.hyphenate:u=>u,n.denormalizePath=n.denormalizePath||n.normalizePaths?o.camelize:u=>u;const c=n.users=M(n.users,{type:"collection"})||{};c.login=M(c.login||"login",{method:"post",parent:c}),c.logout=M(c.logout||"logout",{method:"post",parent:c}),c.session=M(c.session||"session",{method:"get",parent:c}),n.resources=h({any(u){const d=this[u==null?void 0:u.type]||this.default;return u&&d.call(this,u)},default(u){const d=this.any(u.parent);return d?`${d}/${u.path}`:u.path},collection(u){return this.default(u)},member(u){return`${u.path}/${u.id}`},upload(u){return`${this.collection(u.parent)}/upload/${u.path}`}},n.resources),n.headers=h({"Content-Type":"application/json"},n.headers),n.isApiRequest=n.isApiRequest||function(u){return!o.isAbsoluteUrl(u)||u.startsWith(n.url)},o.isString(e)&&(e=document.querySelector(e)),this.root=new z.default({el:e,router:new kt.default({mode:"history",base:s.base,linkActiveClass:"",linkExactActiveClass:""}),components:{DitoRoot:wt},provide:{api:n,$verbs:()=>ju,$views:()=>{},$isPopulated:()=>!0,$schemaComponent:()=>null,$schemaParentComponent:()=>null,$routeComponent:()=>null,$dataComponent:()=>null,$sourceComponent:()=>null,$resourceComponent:()=>null,$dialogComponent:()=>null,$panelComponent:()=>null,$tabComponent:()=>null},render:u=>u(wt,{attrs:{id:e.id},props:{unresolvedViews:a,options:r},components:h(h({},Vi),Ou)})})}register(e,s){return $.register(e,s)}request({url:e,method:s="get",data:n=null,params:a=null,headers:r=null}){var l;const i=this.api.isApiRequest(e);return qs.default.request(x(h({url:e,method:s,params:a},n&&{data:n}),{baseURL:i?this.api.url:null,headers:h(h({},i&&this.api.headers),r),withCredentials:i&&!!((l=this.api.cors)!=null&&l.credentials)}))}}return Fu});
|
|
6
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi51bWQuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBTdGF0ZS5qcyIsIi4uL3NyYy91dGlscy9kYXRhLmpzIiwiLi4vc3JjL0RpdG9Db250ZXh0LmpzIiwiLi4vc3JjL21peGlucy9FbWl0dGVyTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvdHlwZS5qcyIsIi4uL3NyYy91dGlscy9yZXNvdXJjZS5qcyIsIi4uL3NyYy91dGlscy9kZXByZWNhdGUuanMiLCIuLi9zcmMvbWl4aW5zL0RpdG9NaXhpbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fY3JlZGl0Y2FyZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZGVjaW1hbHMuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2VtYWlsLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19ob3N0bmFtZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZG9tYWluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19pbnRlZ2VyLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19tYXguanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX21pbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcGFzc3dvcmQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3JhbmdlLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19yZXF1aXJlZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fdXJsLmpzIiwiLi4vc3JjL21peGlucy9WYWxpZGF0aW9uTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvYWNjZXNzb3IuanMiLCIuLi9zcmMvdXRpbHMvdWlkLmpzIiwiLi4vc3JjL3V0aWxzL1NjaGVtYUdyYXBoLmpzIiwiLi4vc3JjL3V0aWxzL3NjaGVtYS5qcyIsIi4uL3NyYy9taXhpbnMvVHlwZU1peGluLmpzIiwiLi4vc3JjL0RpdG9Db21wb25lbnQuanMiLCIuLi9zcmMvRGl0b1VzZXIuanMiLCIuLi9zcmMvbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzIiwiLi4vc3JjL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUm91dGVNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlIiwiLi4vc3JjL21peGlucy9Eb21NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Sb290LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b01lbnUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTWVudS52dWUiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLXNwaW5uZXIvc3JjL1B1bHNlTG9hZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zcGlubmVyL3NyYy9QdWxzZUxvYWRlci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvSGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0hlYWRlci52dWUiLCIuLi9zcmMvbWl4aW5zL1B1bGxkb3duTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQWNjb3VudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9BY2NvdW50LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9EaWFsb2cudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRGlhbG9nLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VsZW1lbnQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0xhYmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0xhYmVsLnZ1ZSIsIi4uL3NyYy9taXhpbnMvSXRlbU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWEudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYUlubGluZWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hSW5saW5lZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lLnZ1ZSIsIi4uL3NyYy91dGlscy9tYXRoLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NvbnRhaW5lci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Db250YWluZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFicy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVscy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbHMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0J1dHRvbnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQnV0dG9ucy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWRpdEJ1dHRvbnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWRpdEJ1dHRvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NyZWF0ZUJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DcmVhdGVCdXR0b24udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NsaXBib2FyZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DbGlwYm9hcmQudnVlIiwiLi4vc3JjL21peGlucy9Mb2FkaW5nTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1Jlc291cmNlTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtTmVzdGVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FcnJvcnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRXJyb3JzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY29wZXMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NvcGVzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYWdpbmF0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhZ2luYXRpb24udnVlIiwiLi4vc3JjL21peGlucy9PcmRlcmVkTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVHJlZUl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVHJlZUl0ZW0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlSGVhZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUhlYWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlQ2VsbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUNlbGwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1ZOb2RlLnZ1ZSIsIi4uL3NyYy9UeXBlQ29tcG9uZW50LmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVCdXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUJ1dHRvbi52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDaGVja2JveC52dWUiLCIuLi9zcmMvbWl4aW5zL0RhdGFNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvT3B0aW9uc01peGluLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDaGVja2JveGVzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDaGVja2JveGVzLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29kZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ29kZS52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2xvci52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbXBvbmVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ29tcG9uZW50LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29tcHV0ZWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbXB1dGVkLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlRGF0ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlRGF0ZS52dWUiLCIuLi9zcmMvbWl4aW5zL1NvdXJjZU1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2ZpbHRlci5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTGlzdC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUxhYmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVMYWJlbC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZU1hcmt1cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTWFya3VwLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlTXVsdGlzZWxlY3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU11bHRpc2VsZWN0LnZ1ZSIsIi4uL3NyYy9taXhpbnMvTnVtYmVyTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvVHlwZU51bWJlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTnVtYmVyLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlT2JqZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVPYmplY3QudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVQYW5lbC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVByb2dyZXNzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVQcm9ncmVzcy52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVJhZGlvLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVSYWRpby52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVNlY3Rpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVNlY3Rpb24udnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWxlY3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVNlbGVjdC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVNsaWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU2xpZGVyLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU3dpdGNoLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTd2l0Y2gudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVUZXh0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVUZXh0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dGFyZWEudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHRhcmVhLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlVHJlZUxpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVRyZWVMaXN0LnZ1ZSIsIi4uL3NyYy91dGlscy91bml0cy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVXBsb2FkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVVcGxvYWQudnVlIiwiLi4vc3JjL3ZlcmJzLmpzIiwiLi4vc3JjL0RpdG9BZG1pbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB7XG4gIHRpdGxlOiAnJyxcbiAgcm91dGVDb21wb25lbnRzOiBbXSxcbiAgdXNlcjogbnVsbCxcbiAgbG9hZENhY2hlOiB7fSwgLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgYWN0aXZlTGFiZWw6IG51bGwsXG4gIGNsaXBib2FyZERhdGE6IG51bGxcbn1cbiIsImltcG9ydCB7XG4gIGlzSW50ZWdlciwgcGFyc2VEYXRhUGF0aCwgZ2V0VmFsdWVBdERhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKSB7XG4gIHJldHVybiBkYXRhUGF0aFxuICAgID8gYCR7ZGF0YVBhdGh9LyR7dG9rZW59YFxuICAgIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHBhdGg/LnBvcCgpXG4gIHJldHVybiBwYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5lc3RlZCA/IHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIDogcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICBpZiAocGF0aCkge1xuICAgIC8vIFJlbW92ZSB0aGUgcGFyZW50IHRva2VuLiBJZiBpdCdzIGEgbnVtYmVyLCB0aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBhblxuICAgIC8vIGFycmF5IGFuZCBuZWVkIHRvIHJlbW92ZSBtb3JlIHRva2VucyB1bnRpbCB3ZSBtZWV0IHRoZSBhY3R1YWwgcGFyZW50OlxuICAgIGxldCB0b2tlblxuICAgIGRvIHtcbiAgICAgIHRva2VuID0gcGF0aC5wb3AoKVxuICAgIH0gd2hpbGUgKHRva2VuICE9IG51bGwgJiYgaXNJbnRlZ2VyKCt0b2tlbikpXG4gICAgLy8gSWYgdGhlIHJlbW92ZWQgdG9rZW4gaXMgdmFsaWQsIHdlIGNhbiBnZXQgdGhlIHBhcmVudCBkYXRhOlxuICAgIGlmICh0b2tlbiAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gcGF0aFxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtKHJvb3RJdGVtLCBkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIHJldHVybiBwYXRoID8gZ2V0VmFsdWVBdERhdGFQYXRoKHJvb3RJdGVtLCBwYXRoKSA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHJldHVybiBwYXRoW3BhdGgubGVuZ3RoIC0gMV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aE5hbWUoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgcmV0dXJuIHRva2VuID09IG51bGwgfHwgaXNJbnRlZ2VyKCt0b2tlbikgPyBudWxsIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aEluZGV4KGRhdGFQYXRoKSB7XG4gIGNvbnN0IHRva2VuID0gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpXG4gIGNvbnN0IGluZGV4ID0gdG9rZW4gPT0gbnVsbCA/IG51bGwgOiArdG9rZW5cbiAgcmV0dXJuIGlzSW50ZWdlcihpbmRleCkgPyBpbmRleCA6IG51bGxcbn1cblxubGV0IHRlbXBvcmFyeUlkID0gMFxuZXhwb3J0IGZ1bmN0aW9uIHNldFRlbXBvcmFyeUlkKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICAvLyBUZW1wb3JhcnkgaWRzIGFyZSBtYXJrZWQgd2l0aCBhICdAJyBhdCB0aGUgYmVnaW5uaW5nLlxuICBkYXRhW2lkS2V5XSA9IGBAJHsrK3RlbXBvcmFyeUlkfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVtcG9yYXJ5SWQoaWQpIHtcbiAgcmV0dXJuIC9eQC8udGVzdChpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1RlbXBvcmFyeUlkKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICByZXR1cm4gaXNUZW1wb3JhcnlJZChkYXRhPy5baWRLZXldKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWZlcmVuY2UoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFJldHVybnMgdHJ1ZSBpZiB2YWx1ZSBpcyBhbiBvYmplY3QgdGhhdCBob2xkcyBub3RoaW5nIG1vcmUgdGhhbiBhbiBpZC5cbiAgcmV0dXJuIGRhdGE/LltpZEtleV0gIT0gbnVsbCAmJiBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDFcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbURhdGFQYXRoLCBnZXRQYXJlbnRJdGVtRGF0YVBhdGgsIGdldFBhcmVudEl0ZW0sIGdldEl0ZW0sXG4gIGdldExhc3REYXRhUGF0aE5hbWUsIGdldExhc3REYXRhUGF0aEluZGV4XG59IGZyb20gJy4vdXRpbHMvZGF0YS5qcydcblxuLy8gYERpdG9Db250ZXh0YCBpbnN0YW5jZXMgYXJlIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCByYXcgYGNvbnRleHRgIG9iamVjdHMsXG4vLyB3aGljaCB0aGVtc2VsdmVzIGFjdHVhbGx5IGluaGVyaXQgZnJvbSB0aGUgbGlua2VkIGBjb21wb25lbnRgIGluc3RhbmNlLCBzb1xuLy8gdGhhdCB0aGV5IG9ubHkgbmVlZCB0byBwcm92aWRlIHRoZSB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgZGlmZmVyZW50IHRoYW5cbi8vIGluIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudC4gSW4gb3JkZXIgdG8gbm90IGV4cG9zZSBhbGwgZmllbGRzIGZyb20gdGhlXG4vLyBjb21wb25lbnQsIHRoZSB3cmFwcGVyIGlzIGludHJvZHVjZWQ6XG4vLyBVc2UgV2Vha01hcCBmb3IgdGhlIHJhdyBgY29udGV4dGAgb2JqZWN0cywgc28gd2UgZG9uJ3QgaGF2ZSB0byBwb2xsdXRlIHRoZVxuLy8gYWN0dWFsIGBEaXRvQ29udGV4dGAgaW5zdGFuY2Ugd2l0aCBpdC5cbmNvbnN0IGNvbnRleHRzID0gbmV3IFdlYWtNYXAoKVxuXG5mdW5jdGlvbiBnZXQoY29udGV4dCwga2V5LCBkZWZhdWx0VmFsdWUpIHtcbiAgY29uc3Qgb2JqZWN0ID0gY29udGV4dHMuZ2V0KGNvbnRleHQpXG4gIGNvbnN0IHZhbHVlID0gb2JqZWN0W2tleV1cbiAgLy8gSWYgYG9iamVjdGAgZXhwbGljaXRseSBzZXRzIHRoZSBrZXkgdG8gYHVuZGVmaW5lZGAsIHJldHVybiBpdC5cbiAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgfHwgb2JqZWN0Lmhhc093blByb3BlcnR5KGtleSlcbiAgICA/IHZhbHVlXG4gICAgOiBpc0Z1bmN0aW9uKGRlZmF1bHRWYWx1ZSlcbiAgICAgID8gZGVmYXVsdFZhbHVlKClcbiAgICAgIDogZGVmYXVsdFZhbHVlXG59XG5cbmZ1bmN0aW9uIHNldChjb250ZXh0LCBrZXksIHZhbHVlKSB7XG4gIGNvbnRleHRzLmdldChjb250ZXh0KVtrZXldID0gdmFsdWVcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0NvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb21wb25lbnQsIGNvbnRleHQpIHtcbiAgICAvLyBVc2UgdGhlIHByb3ZpZGVkIHBhcmFtcyBvYmplY3QgLyBmdW5jdGlvbiwgb3IgY3JlYXRlIGEgbmV3IG9uZTpcbiAgICBjb250ZXh0ID0gY29udGV4dFxuICAgICAgPyAoaXNGdW5jdGlvbihjb250ZXh0KSA/IGNvbnRleHQoKSA6IHsgLi4uY29udGV4dCB9KVxuICAgICAgOiB7fVxuICAgIC8vIElmIG5vdCBleHBsaWNpdGx5IHNldCAodG8gZmFsc2UpLCBkZWZhdWx0IHRvIHRydWUgc28gd2UgZG9uJ3QgZmFsbCBiYWNrXG4gICAgLy8gdG8gYGNvbXBvbmVudGAgZm9yIGl0cyB2YWx1ZS5cbiAgICBjb250ZXh0Lm5lc3RlZCA/Pz0gdHJ1ZVxuICAgIGNvbnRleHQuY29tcG9uZW50ID0gY29tcG9uZW50XG4gICAgLy8gSGF2ZSBgb2JqZWN0YCBpbmhlcml0IGZyb20gdGhlIGBjb21wb25lbnRgIGluc3RhbmNlLCBzbyBpdCBjYW4gb3ZlcnJpZGVcbiAgICAvLyBpdHMgdmFsdWVzIGFuZCBzdGlsbCByZXRyaWV2ZSBmcm9tIGl0LCBhbmQgYXNzb2NpYXRlIGl0IHdpdGggYHRoaXNgXG4gICAgLy8gdGhyb3VnaCBgY29udGV4dHNgIG1hcDpcbiAgICBjb25zdCBvYmplY3QgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YoY29udGV4dCwgY29tcG9uZW50KVxuICAgIGNvbnRleHRzLnNldCh0aGlzLCBvYmplY3QpXG4gIH1cblxuICBzdGF0aWMgZ2V0KGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0IGluc3RhbmNlb2YgRGl0b0NvbnRleHRcbiAgICAgID8gY29udGV4dFxuICAgICAgOiBuZXcgRGl0b0NvbnRleHQoY29tcG9uZW50LCBjb250ZXh0KVxuICB9XG5cbiAgLy8gYG5lc3RlZGAgaXMgYHRydWVgIHdoZW4gdGhlIGRhdGEtcGF0aCBwb2ludHMgYSB2YWx1ZSBpbnNpZGUgYW4gaXRlbSwgYW5kXG4gIC8vIGBmYWxzZWAgd2hlbiBpdCBwb2ludHMgdG8gdGhlIGl0ZW0gaXRzZWxmLlxuICBnZXQgbmVzdGVkKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25lc3RlZCcsIHRydWUpXG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmFsdWUnLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgZGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YVBhdGgnLCAnJylcbiAgfVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25hbWUnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhOYW1lKHRoaXMuZGF0YVBhdGgpKVxuICB9XG5cbiAgZ2V0IGluZGV4KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2luZGV4JywgKCkgPT4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgcGFyZW50SXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgaXRlbUluZGV4KCkge1xuICAgIHJldHVybiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLml0ZW1EYXRhUGF0aClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMucGFyZW50SXRlbURhdGFQYXRoKVxuICB9XG5cbiAgZ2V0IGl0ZW0oKSB7XG4gICAgLy8gTk9URTogV2hpbGUgaW50ZXJuYWxseSwgd2Ugc3BlYWsgb2YgYGRhdGFgLCBpbiB0aGUgQVBJIHN1cmZhY2UgdGhlXG4gICAgLy8gdGVybSBgaXRlbWAgaXMgdXNlZCBmb3IgdGhlIGRhdGEgdGhhdCByZWxhdGVzIHRvIGVkaXRpbmcgb2JqZWN0czpcbiAgICAvLyBJZiBgZGF0YWAgaXNuJ3QgcHJvdmlkZWQsIHdlIGNhbiBkZXRlcm1pbmUgaXQgZnJvbSByb290RGF0YSAmIGRhdGFQYXRoOlxuICAgIHJldHVybiBnZXQodGhpcywgJ2RhdGEnLCAoKSA9PlxuICAgICAgZ2V0SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICApXG4gIH1cblxuICAvLyBOT1RFOiBgcGFyZW50SXRlbWAgaXNuJ3QgdGhlIGNsb3Nlc3QgZGF0YSBwYXJlbnQgdG8gYGl0ZW1gLCBpdCdzIHRoZVxuICAvLyBjbG9zZXN0IHBhcmVudCB0aGF0IGlzbid0IGFuIGFycmF5LCBlLmcuIGZvciByZWxhdGlvbnMgb3IgbmVzdGVkIEpTT05cbiAgLy8gZGF0YS4gIFRoaXMgaXMgd2h5IHRoZSB0ZXJtIGBpdGVtYCB3YXMgY2hvc2VuIG92ZXIgYGRhdGFgLCBlLmcuIFZTIHRoZVxuICAvLyB1c2Ugb2YgYHBhcmVudERhdGFgIGluIHNlcnZlci1zaWRlZCB2YWxpZGF0aW9uLCB3aGljaCBpcyB0aGUgY2xvc2VzdFxuICAvLyBwYXJlbnQuIElmIG5lZWRlZCwgd2UgY291bGQgZXhwb3NlIHRoaXMgZGF0YSBoZXJlIHRvbywgYXMgd2UgY2FuIGRvIGFsbFxuICAvLyBzb3J0cyBvZiBkYXRhIHByb2Nlc3Npbmcgd2l0aCBgcm9vdERhdGFgIGFuZCBgZGF0YVBhdGhgLlxuICBnZXQgcGFyZW50SXRlbSgpIHtcbiAgICBjb25zdCBwYXJlbnRJdGVtID1cbiAgICAgIGdldFBhcmVudEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpIHx8IG51bGxcbiAgICByZXR1cm4gcGFyZW50SXRlbSAhPT0gdGhpcy5pdGVtID8gcGFyZW50SXRlbSA6IG51bGxcbiAgfVxuXG4gIGdldCByb290SXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdyb290RGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwcm9jZXNzZWREYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBjbGlwYm9hcmRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2NsaXBib2FyZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHVzZXIoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndXNlcicsIG51bGwpXG4gIH1cblxuICBnZXQgYXBpKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2FwaScsIG51bGwpXG4gIH1cblxuICBnZXQgdmlld3MoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld3MnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGl0ZW1MYWJlbCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdpdGVtTGFiZWwnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGZvcm1MYWJlbCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmb3JtTGFiZWwnLCBudWxsKVxuICB9XG5cbiAgLy8gVE9ETzogUmVtb3ZlIGV4cG9zdXJlIHNpbmNlIHRoZSBhc3NvY2lhdGVkIGNvbXBvbmVudCBkb2Vzbid0IGFsd2F5cyBleGlzdCxcbiAgLy8gZS5nLiBuZXN0ZWQgZm9ybXMgaW4gYHByb2Nlc3NEYXRhKClgLiBJbnN0ZWFkLCBiaW5kIGNvbXBvbmVudCB0byBgdGhpc2BcbiAgLy8gb25seSB3aGVyZSBhdmFpbGFibGUuXG4gIGdldCBjb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFRPRE86IEFkZCBgY29tcG9uZW50U2NoZW1hYCBnZXR0ZXIgZm9yIHRoZSBzY2hlbWEgb2YgdGhlIGN1cnJlbnQgY29tcG9uZW50LFxuICAvLyBldmVuIHdoZW4gdGhlIGNvbXBvbmVudCBpc24ndCBhY3R1YWxseSBpbnN0YW50aWF0ZWQuIENvbnNpZGVyIGFkZGluZ1xuICAvLyBgc291cmNlU2NoZW1hYCBhcyB3ZWxsP1xuXG4gIC8vIFRPRE86IEZpeCB1bmNsZWFyIG5hbWluZzogV2hpY2ggc2NoZW1hIGlzIHRoaXMsIHRoYXQgb2YgdGhlIGNvbXBvbmVudCBvciBvZlxuICAvLyBpdHMgcGFyZW50PyBJc24ndCBleHBvc2luZyBgZm9ybUNvbXBvbmVudGAgYW5kIGB2aWV3Q29tcG9uZW50YCBlbm91Z2gsIG9uY2VcbiAgLy8gd2Ugb2ZmZXIgYWNjZXNzIHRvIHRoZWlyIGNvbXBvbmVudHMgdGhlcmUgdGhyb3VnaCBgZ2V0Q29tcG9uZW50KClgICYgY28uIG9uXG4gIC8vIGBEaXRvTWl4aW5gIHBlcmhhcHM/ICBBbHNvLCB0aGVyZSBjb3VsZCBiZSBhIGB0YWJDb21wb25lbnRgIGdldHRlciBmb3JcbiAgLy8gc2NoZW1hcyBpbiB0YWJzP1xuICBnZXQgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NjaGVtYUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmb3JtQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3Q29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZpZXdDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkaWFsb2dDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHBhbmVsQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3BhbmVsQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdyZXNvdXJjZUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NvdXJjZUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICAvLyBXaGVuIHVzZWQgaW4gT3B0aW9uc01peGluIGZvciBgc2NoZW1hLm9wdGlvbnMudmFsdWUoKWAsXG4gIC8vIGBzY2hlbWEub3B0aW9ucy5sYWJlbCgpYCBhbmQgIGBzY2hlbWEuc2VhcmNoLmZpbHRlcigpYCBjYWxsYmFja3M6XG4gIGdldCBvcHRpb24oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnb3B0aW9uJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnb3B0aW9ucycsIHVuZGVmaW5lZClcbiAgfVxuXG4gIC8vIFRPRE86IFJlbmFtZSB0aGlzIHRvIGBzZWFyY2hUZXJtYCBvciBgc2VhcmNoUXVlcnlgLCB0byBwZXJoYXBzIGZyZWUgYHF1ZXJ5YFxuICAvLyBmb3IgdGhlIGFjdHVhbCBgcmVzb3VyY2VDb21wb25lbnQucXVlcnlgIG9iamVjdD9cbiAgZ2V0IHF1ZXJ5KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3F1ZXJ5JywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVGhlIGVycm9yIGZpZWxkIGlzIG9ubHkgcG9wdWxhdGVkIGluIHRoZSBjb250ZXh0IG9mIGJ1dHRvbnMgdGhhdCBzZW5kXG4gIC8vIHJlcXVlc3RzLCBzZWUgYFJlc291cmNlTWl4aW4uZW1pdEJ1dHRvbkV2ZW50KClgOlxuICBnZXQgZXJyb3IoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZXJyb3InLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgd2FzTm90aWZpZWQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnd2FzTm90aWZpZWQnLCBmYWxzZSlcbiAgfVxuXG4gIC8vIEhlbHBlciBNZXRob2RzXG5cbiAgZ2V0IHJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQucmVxdWVzdChvcHRpb25zKVxuICB9XG5cbiAgZ2V0IGZvcm1hdCgpIHtcbiAgICByZXR1cm4gKHZhbHVlLCBvcHRpb25zKSA9PiB0aGlzLmNvbXBvbmVudC5mb3JtYXQodmFsdWUsIG9wdGlvbnMpXG4gIH1cblxuICBnZXQgbmF2aWdhdGUoKSB7XG4gICAgcmV0dXJuIGxvY2F0aW9uID0+IHRoaXMuY29tcG9uZW50Lm5hdmlnYXRlKGxvY2F0aW9uKVxuICB9XG5cbiAgZ2V0IGRvd25sb2FkKCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHRoaXMuY29tcG9uZW50LmRvd25sb2FkKG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZ2V0UmVzb3VyY2VVcmwoKSB7XG4gICAgcmV0dXJuIHJlc291cmNlID0+IHRoaXMuY29tcG9uZW50LmdldFJlc291cmNlVXJsKHJlc291cmNlKVxuICB9XG5cbiAgZ2V0IG5vdGlmeSgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB7XG4gICAgICB0aGlzLmNvbXBvbmVudC5ub3RpZnkob3B0aW9ucylcbiAgICAgIHNldCh0aGlzLCAnd2FzTm90aWZpZWQnLCB0cnVlKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNBcnJheSwgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRldmVudHM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIEFzeW5jIHZlcnNpb25zIG9mIFZ1ZSdzICRvbigpIGFuZCAkb2ZmKCkgbWV0aG9kcyB0aGF0IGtlZXAgdHJhY2sgb2YgdGhlXG4gICAgLy8gZXZlbnRzIGFkZGVkIC8gcmVtb3ZlZCwgYW5kIHByb3ZpZGUgYSBoYXNMaXN0ZW5lcnMoKSBtZXRob2QgdGhhdCBjaGVja3NcbiAgICAvLyBpZiB0aGUgY29tcG9uZW50IGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQuXG5cbiAgICAvLyBBbHNvIGFkZHMgcHJvcGVyIGhhbmRsaW5nIG9mIGFzeW5jIGV2ZW50cywgaW5jbHVkaW5nIGEgYXN5bmMgZW1pdCgpIHRoYXRcbiAgICAvLyBkZWFscyB3aXRoIHByb3BlciBldmVudCBxdWV1ZWluZy5cbiAgICBvbihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vbihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy4kZXZlbnRzIHx8ICh0aGlzLiRldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpKVxuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZXZlbnRzW2V2ZW50XSB8fCAoZXZlbnRzW2V2ZW50XSA9IHtcbiAgICAgICAgICBjYWxsYmFja3M6IFtdLFxuICAgICAgICAgIHF1ZXVlOiBbXVxuICAgICAgICB9KVxuICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjaylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG9uY2UoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBvbiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHRoaXMub2ZmKGV2ZW50LCBvbilcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9XG4gICAgICBvbi5jYWxsYmFjayA9IGNhbGxiYWNrIC8vIE5lZWRlZCBmb3IgYG9mZigpYCwgc2VlIGJlbG93LlxuICAgICAgcmV0dXJuIHRoaXMub24oZXZlbnQsIG9uKVxuICAgIH0sXG5cbiAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBldmVudHNcbiAgICAgICAgZGVsZXRlIHRoaXMuJGV2ZW50c1xuICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vZmYoZXYsIGNhbGxiYWNrKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vZmYoa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgc3BlY2lmaWMgZXZlbnRcbiAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGFsbCBoYW5kbGVycyBmb3IgdGhpcyBldmVudFxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuJGV2ZW50c1tldmVudF1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGEgc3BlY2lmaWMgaGFuZGxlcjogZmluZCB0aGUgaW5kZXggaW4gY2FsbGJhY2tzXG4gICAgICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2FsbGJhY2tzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgLy8gTWF0Y2ggYGNiLmNhbGxiYWNrYCBhbHNvLCBhcyB1c2VkIGJ5IGBvbmNlKClgLCBzZWUgIGFib3ZlOlxuICAgICAgICAgICAgICBjYiA9PiBjYiA9PT0gY2FsbGJhY2sgfHwgY2IuY2FsbGJhY2sgPT09IGNhbGxiYWNrXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAvLyBPbmx5IHF1ZXVlIGV2ZW50IGlmIHRoZXJlIGFjdHVhbGx5IGFyZSBsaXN0ZW5lcnMgZm9yIGl0LlxuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICBjb25zdCB7IHF1ZXVlLCBjYWxsYmFja3MgfSA9IGVudHJ5XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICBjb25zdCBuZXh0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgLy8gRW1pdCB0aGUgbmV4dCBldmVudCBpbiB0aGUgcXVldWUgd2l0aCBpdHMgcGFyYW1zLlxuICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGl0IG9ubHkgZ2V0cyByZW1vdmVkIG9uY2UgYG5leHQoKWAgaXMgY2FsbGVkLlxuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBxdWV1ZS5zaGlmdCgpXG4gICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgbGV0IHJlc3VsdFxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIGNhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjYWxsYmFjay5hcHBseSh0aGlzLCBlbnRyeS5hcmdzKVxuICAgICAgICAgICAgICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgRXJyb3IgZHVyaW5nIGV2ZW50IGhhbmRsZXIgZm9yICcke2V2ZW50fSc6YCwgZXJyb3JcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gUmVzb2x2ZSB0aGUgcHJvbWlzZSB0aGF0IHdhcyBhZGRlZCB0byB0aGUgcXVldWUgZm9yIHRoZSBldmVudFxuICAgICAgICAgICAgICAvLyB0aGF0IHdhcyBqdXN0IGNvbXBsZXRlZCBieSB0aGUgd3JhcHBlciB0aGF0IGNhbGxlZCBgbmV4dCgpYFxuICAgICAgICAgICAgICBlbnRyeS5yZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgICAgbmV4dCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHF1ZXVlLnB1c2goeyBhcmdzLCByZXNvbHZlIH0pXG4gICAgICAgICAgLy8gRm9yIG5ldyBxdWV1ZXMgKD0gb25seSBvbmUgZW50cnkpIGVtaXQgdGhlIGZpcnN0IGV2ZW50IGltbWVkaWF0ZWx5LFxuICAgICAgICAgIC8vIHRvIGdldCB0aGUgcXVldWUgcnVubmluZy5cbiAgICAgICAgICBpZiAocXVldWUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIENoZWNrcyBpZiB0aGUgY29tcG9uZW50IGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQgdHlwZTpcbiAgICBoYXNMaXN0ZW5lcnMoZXZlbnQpIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycyhldikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlbnQubGVuZ3RoID4gMFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy4kZXZlbnRzPy5bZXZlbnRdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGVnYXRlKGV2ZW50LCB0YXJnZXQpIHtcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZShldiwgdGFyZ2V0KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uKGV2ZW50LCAoLi4uYXJncykgPT4gdGFyZ2V0LmVtaXQoZXZlbnQsIC4uLmFyZ3MpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaXNBcnJheSwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0Jvb2xlYW4sIGlzTnVtYmVyLCBpc0Z1bmN0aW9uLCBpc0RhdGUsXG4gIGlzUmVnRXhwLCBhc0FycmF5XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IHR5cGVDaGVja2VycyA9IHtcbiAgQm9vbGVhbjogaXNCb29sZWFuLFxuICBOdW1iZXI6IGlzTnVtYmVyLFxuICBTdHJpbmc6IGlzU3RyaW5nLFxuICBEYXRlOiBpc0RhdGUsXG4gIEFycmF5OiBpc0FycmF5LFxuICBPYmplY3Q6IGlzT2JqZWN0LFxuICBSZWdFeHA6IGlzUmVnRXhwLFxuICBGdW5jdGlvbjogaXNGdW5jdGlvblxufVxuXG4vLyBEZWNsYXJlIHRoZXNlIHNlcGFyYXRlbHkgZnJvbSB0aGUgYHR5cGVDb252ZXJ0ZXJzYCBvYmplY3QsIHRvIHByZXZlbnRcbi8vIEJhYmVsIGlzc3VlcyB3aXRoIGBPYmplY3RgIG92ZXJyaWRpbmcgdGhlIGdsb2JhbCBgT2JqZWN0YDpcbmNvbnN0IHRvQm9vbGVhbiA9IHZhbHVlID0+ICEhdmFsdWVcbmNvbnN0IHRvTnVtYmVyID0gdmFsdWUgPT4gK3ZhbHVlXG5jb25zdCB0b1N0cmluZyA9IHZhbHVlID0+IFN0cmluZyh2YWx1ZSlcblxuY29uc3QgdG9EYXRlID0gdmFsdWUgPT4gaXNEYXRlKHZhbHVlKVxuICA/IHZhbHVlXG4gIDogbmV3IERhdGUodmFsdWUpXG5cbmNvbnN0IHRvQXJyYXkgPSB2YWx1ZSA9PiBpc0FycmF5KHZhbHVlKVxuICA/IHZhbHVlXG4gIDogaXNTdHJpbmcodmFsdWUpXG4gICAgPyB2YWx1ZS5zcGxpdCgnLCcpXG4gICAgOiBhc0FycmF5KHZhbHVlKVxuXG5jb25zdCB0b09iamVjdCA9IHZhbHVlID0+IGlzT2JqZWN0KHZhbHVlKVxuICA/IHZhbHVlXG4gIC8vIElmIGEgT2JqZWN0IGlzIGV4cGVjdGVkIGJ1dCBhIEJvb2xlYW4gcHJvdmlkZSwgY29udmVydCB0byBhbiBlbXB0eVxuICAvLyBvYmplY3QuIFVzZWQgYnkgYGNyZWF0YWJsZWAgJiBjbywgdGhhdCBjYW4gYmUgYm90aC5cbiAgOiB2YWx1ZSA9PT0gdHJ1ZVxuICAgID8ge31cbiAgICA6IG51bGxcblxuY29uc3QgdG9SZWdFeHAgPSB2YWx1ZSA9PiBpc1JlZ0V4cCh2YWx1ZSlcbiAgPyB2YWx1ZVxuICA6IG5ldyBSZWdFeHAodmFsdWUpXG5cbmNvbnN0IHR5cGVDb252ZXJ0ZXJzID0ge1xuICBCb29sZWFuOiB0b0Jvb2xlYW4sXG4gIE51bWJlcjogdG9OdW1iZXIsXG4gIFN0cmluZzogdG9TdHJpbmcsXG4gIERhdGU6IHRvRGF0ZSxcbiAgQXJyYXk6IHRvQXJyYXksXG4gIE9iamVjdDogdG9PYmplY3QsXG4gIFJlZ0V4cDogdG9SZWdFeHBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkge1xuICAvLyBTZWUgaWYgYW55IG9mIHRoZSBleHBlY3QgdHlwZXMgbWF0Y2gsIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGV5IGRvOlxuICBpZiAodHlwZXMgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKHR5cGVDaGVja2Vyc1t0eXBlLm5hbWVdPy4odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGUodHlwZSwgdmFsdWUpIHtcbiAgY29uc3QgY29udmVydGVyID0gdHlwZSAmJiB0eXBlQ29udmVydGVyc1t0eXBlLm5hbWUgfHwgdHlwZV1cbiAgcmV0dXJuIGNvbnZlcnRlciA/IGNvbnZlcnRlcih2YWx1ZSkgOiB2YWx1ZVxufVxuIiwiaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBwaWNrQnkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUmVzb3VyY2Uoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFJlc291cmNlKHNjaGVtYS5yZXNvdXJjZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc291cmNlKHJlc291cmNlLCBkZWZhdWx0cyA9IHt9KSB7XG4gIGNvbnN0IHsgcGFyZW50LCAuLi5kZWZzIH0gPSBkZWZhdWx0c1xuICByZXNvdXJjZSA9IGlzT2JqZWN0KHJlc291cmNlKSA/IHsgLi4uZGVmcywgLi4ucmVzb3VyY2UgfVxuICAgIDogaXNTdHJpbmcocmVzb3VyY2UpID8geyAuLi5kZWZzLCBwYXRoOiByZXNvdXJjZSB9XG4gICAgOiBudWxsXG4gIC8vIE9ubHkgc2V0IHBhcmVudCBpZiBwYXRoIGRvZXNuJ3Qgc3RhcnQgd2l0aCAnLycsIHNvIHJlbGF0aXZlIFVSTHMgYXJlXG4gIC8vIGRlYWx0IHdpdGggY29ycmVjdGx5LlxuICBpZiAoXG4gICAgcmVzb3VyY2UgJiZcbiAgICBwYXJlbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgIHJlc291cmNlLnBhcmVudCA9PT0gdW5kZWZpbmVkICYmXG4gICAgIXJlc291cmNlLnBhdGg/LnN0YXJ0c1dpdGgoJy8nKVxuICApIHtcbiAgICByZXNvdXJjZS5wYXJlbnQgPSBwYXJlbnRcbiAgICBpZiAoIXJlc291cmNlLnBhdGgpIHtcbiAgICAgIHJlc291cmNlLnBhdGggPSAnLidcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc291cmNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW1iZXJSZXNvdXJjZShpZCwgcmVzb3VyY2UpIHtcbiAgcmV0dXJuIGlkICE9IG51bGwgJiYgcmVzb3VyY2U/LnR5cGUgPT09ICdjb2xsZWN0aW9uJ1xuICAgID8ge1xuICAgICAgdHlwZTogJ21lbWJlcicsXG4gICAgICAuLi5waWNrQnkoXG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICAodmFsdWUsIGtleSkgPT4gWydtZXRob2QnLCAncGF0aCcsICdwYXJlbnQnXS5pbmNsdWRlcyhrZXkpXG4gICAgICApLFxuICAgICAgaWQ6IGAke2lkfWBcbiAgICB9XG4gICAgOiBudWxsXG59XG4iLCJjb25zdCBsb2dnZWREZXByZWNhdGlvbnMgPSBuZXcgU2V0KClcblxuZXhwb3J0IGZ1bmN0aW9uIGRlcHJlY2F0ZShtZXNzYWdlKSB7XG4gIC8vIE9ubHkgbG9nIGRlcHJlY2F0aW9uIG1lc3NhZ2VzIG9uY2UuXG4gIGlmICghbG9nZ2VkRGVwcmVjYXRpb25zLmhhcyhtZXNzYWdlKSkge1xuICAgIGxvZ2dlZERlcHJlY2F0aW9ucy5hZGQobWVzc2FnZSlcbiAgICBjb25zb2xlLndhcm4obWVzc2FnZSlcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzQXJyYXksIGlzU3RyaW5nLCBpc0Z1bmN0aW9uLCBhc0FycmF5LCBlcXVhbHMsXG4gIGdldFZhbHVlQXREYXRhUGF0aCwgbGFiZWxpemUsIGh5cGhlbmF0ZSwgZm9ybWF0XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgYXBwU3RhdGUgZnJvbSAnLi4vYXBwU3RhdGUuanMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IEVtaXR0ZXJNaXhpbiBmcm9tICcuL0VtaXR0ZXJNaXhpbi5qcydcbmltcG9ydCB7IGlzTWF0Y2hpbmdUeXBlLCBjb252ZXJ0VHlwZSB9IGZyb20gJy4uL3V0aWxzL3R5cGUuanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGRlcHJlY2F0ZSB9IGZyb20gJy4uL3V0aWxzL2RlcHJlY2F0ZS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRW1pdHRlck1peGluXSxcblxuICBpbmplY3Q6IFtcbiAgICAnYXBpJyxcbiAgICAnJHZlcmJzJyxcbiAgICAnJHZpZXdzJyxcbiAgICAnJGlzUG9wdWxhdGVkJyxcbiAgICAnJHNjaGVtYUNvbXBvbmVudCcsXG4gICAgJyRyb3V0ZUNvbXBvbmVudCcsXG4gICAgJyRkYXRhQ29tcG9uZW50JyxcbiAgICAnJHNvdXJjZUNvbXBvbmVudCcsXG4gICAgJyRyZXNvdXJjZUNvbXBvbmVudCcsXG4gICAgJyRkaWFsb2dDb21wb25lbnQnLFxuICAgICckcGFuZWxDb21wb25lbnQnLFxuICAgICckdGFiQ29tcG9uZW50J1xuICBdLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhXG4gICAgICA/IHsgJGRhdGFDb21wb25lbnQ6ICgpID0+IHRoaXMgfVxuICAgICAgOiB7fVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcFN0YXRlLFxuICAgICAgb3ZlcnJpZGVzOiBudWxsIC8vIFNlZSBhY2Nlc3Nvci5qc1xuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvdXJjZVNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGE/LnNjaGVtYVxuICAgIH0sXG5cbiAgICB1c2VyKCkge1xuICAgICAgcmV0dXJuIGFwcFN0YXRlLnVzZXJcbiAgICB9LFxuXG4gICAgLy8gJHZlcmJzLCAkdmVyYnMgYW5kICRpc1BvcHVsYXRlZCBhcmUgZGVmaW5lZCBhcyBmdW5jdGlvbnMsIHRvIHByZXNlcnZlXG4gICAgLy8gcmVhY3RpdmVuZXNzIGFjcm9zcyBwcm92aWRlL2luamVjdC5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvaXNzdWVzLzcwMTcjaXNzdWVjb21tZW50LTQ4MDkwNjY5MVxuICAgIHZlcmJzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHZlcmJzKClcbiAgICB9LFxuXG4gICAgdmlld3MoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdmlld3MoKVxuICAgIH0sXG5cbiAgICBpc1BvcHVsYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRpc1BvcHVsYXRlZCgpXG4gICAgfSxcblxuICAgIGxvY2FsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwaS5sb2NhbGVcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IGZhbHNlIH0pXG4gICAgfSxcblxuICAgIHJvb3RDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm9vdC4kY2hpbGRyZW5bMF1cbiAgICB9LFxuXG4gICAgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gVXNlIGNvbXB1dGVkIHByb3BlcnRpZXMgYXMgbGlua3MgdG8gaW5qZWN0cywgc28gRGl0b1NjaGVtYSBjYW5cbiAgICAgIC8vIG92ZXJyaWRlIHRoZSBwcm9wZXJ0eSBhbmQgcmV0dXJuIGB0aGlzYCBpbnN0ZWFkIG9mIHRoZSBwYXJlbnQuXG4gICAgICByZXR1cm4gdGhpcy4kc2NoZW1hQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICAvLyBVc2UgY29tcHV0ZWQgcHJvcGVydGllcyBhcyBsaW5rcyB0byBpbmplY3RzLCBzbyBSb3V0ZU1peGluIGNhblxuICAgICAgLy8gb3ZlcnJpZGUgdGhlIHByb3BlcnR5IGFuZCByZXR1cm4gYHRoaXNgIGluc3RlYWQgb2YgdGhlIHBhcmVudC5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGZvcm1Db21wb25lbnQoKSB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLnJvdXRlQ29tcG9uZW50XG4gICAgICByZXR1cm4gY29tcG9uZW50Py5pc0Zvcm0gPyBjb21wb25lbnQgOiBudWxsXG4gICAgfSxcblxuICAgIHZpZXdDb21wb25lbnQoKSB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLnJvdXRlQ29tcG9uZW50XG4gICAgICByZXR1cm4gY29tcG9uZW50Py5pc1ZpZXcgPyBjb21wb25lbnQgOiBudWxsXG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGZpcnN0IHJvdXRlIGNvbXBvbmVudCBpbiB0aGUgY2hhaW4gb2YgcGFyZW50cywgaW5jbHVkaW5nXG4gICAgLy8gdGhpcyBjdXJyZW50IGNvbXBvbmVudCwgdGhhdCBpcyBsaW5rZWQgdG8gYSByZXNvdXJjZSAoYW5kIHRodXMgbG9hZHMgaXRzXG4gICAgLy8gb3duIGRhdGEgYW5kIGRvZXNuJ3QgaG9sZCBuZXN0ZWQgZGF0YSkuXG4gICAgZGF0YUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVzRGF0YSA/IHRoaXMgOiB0aGlzLiRkYXRhQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHNvdXJjZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlc291cmNlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGRpYWxvZ0NvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHBhbmVsQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHBhbmVsQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHRhYkNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHBhcmVudFNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudD8uJHBhcmVudC5zY2hlbWFDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFyZW50Um91dGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudD8uJHBhcmVudC5yb3V0ZUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYXJlbnRGb3JtQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbXBvbmVudD8uJHBhcmVudC5mb3JtQ29tcG9uZW50XG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGRhdGEgb2YgdGhlIGZpcnN0IHJvdXRlIGNvbXBvbmVudCBpbiB0aGUgY2hhaW4gb2YgcGFyZW50c1xuICAgIC8vIHRoYXQgbG9hZHMgaXRzIG93biBkYXRhIGZyb20gYW4gYXNzb2NpYXRlZCBBUEkgcmVzb3VyY2UuXG4gICAgcm9vdERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhQ29tcG9uZW50Py5kYXRhXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZUNyZWF0ZSgpIHtcbiAgICB0aGlzLiR1aWQgPSArK3VpZFxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBUaGUgc3RhdGUgb2YgY29tcG9uZW50cyBpcyBvbmx5IGF2YWlsYWJsZSBkdXJpbmcgdGhlIGxpZmUtY3ljbGUgb2YgYVxuICAgIC8vIGNvbXBvbmVudC4gU29tZSBpbmZvcm1hdGlvbiB3ZSBuZWVkIGF2YWlsYWJsZSBsb25nZXIgdGhhbiB0aGF0LCBlLmcuXG4gICAgLy8gYHF1ZXJ5YCAmIGB0b3RhbGAgb24gVHlwZUxpc3QsIHNvIHRoYXQgd2hlbiB0aGUgdXNlciBuYXZpZ2F0ZXMgYmFjayBmcm9tXG4gICAgLy8gZWRpdGluZyBhbiBpdGVtIGluIHRoZSBsaXN0LCB0aGUgc3RhdGUgb2YgdGhlIGxpc3QgaXMgc3RpbGwgdGhlIHNhbWUuXG4gICAgLy8gV2UgY2FuJ3Qgc3RvcmUgdGhpcyBpbiBgZGF0YWAsIGFzIHRoaXMgaXMgYWxyZWFkeSB0aGUgcHVyZSBkYXRhIGZyb20gdGhlXG4gICAgLy8gQVBJIHNlcnZlci4gVGhhdCdzIHdoYXQgdGhlIGBzdG9yZWAgaXMgZm9yOiBNZW1vcnkgdGhhdCdzIGF2YWlsYWJsZSBhc1xuICAgIC8vIGxvbmcgYXMgdGhlIGN1cnJlbnQgZWRpdGluZyBwYXRoIGlzIHN0aWxsIHZhbGlkLiBGb3IgdHlwZSBjb21wb25lbnRzLFxuICAgIC8vIHRoaXMgbWVtb3J5IGlzIHByb3ZpZGVkIGJ5IHRoZSBwYXJlbnQsIHNlZSBSb3V0ZU1peGluIGFuZCBEaXRvUGFuZS5cbiAgICBnZXRTdG9yZShrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlW2tleV1cbiAgICB9LFxuXG4gICAgc2V0U3RvcmUoa2V5LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuJHNldCh0aGlzLnN0b3JlLCBrZXksIHZhbHVlKVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFN0b3JlKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RvcmUoa2V5KSB8fCB0aGlzLnNldFN0b3JlKGtleSwge30pXG4gICAgfSxcblxuICAgIGdldFNjaGVtYVZhbHVlKFxuICAgICAga2V5T3JEYXRhUGF0aCxcbiAgICAgIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBzY2hlbWEgPSB0aGlzLnNjaGVtYSwgY2FsbGJhY2sgPSB0cnVlIH0gPSB7fVxuICAgICkge1xuICAgICAgY29uc3QgdHlwZXMgPSB0eXBlICYmIGFzQXJyYXkodHlwZSlcbiAgICAgIC8vIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBkYXRhLXBhdGhzIGluIGBrZXlPckRhdGFQYXRoYCBjYW4gb25seSBiZVxuICAgICAgLy8gcHJvdmlkZWQgaW4gaW4gYXJyYXkgZm9ybWF0IGhlcmU6XG4gICAgICBsZXQgdmFsdWUgPSBzY2hlbWFcbiAgICAgICAgPyBpc0FycmF5KGtleU9yRGF0YVBhdGgpXG4gICAgICAgICAgPyBnZXRWYWx1ZUF0RGF0YVBhdGgoc2NoZW1hLCBrZXlPckRhdGFQYXRoLCAoKSA9PiB1bmRlZmluZWQpXG4gICAgICAgICAgOiBzY2hlbWFba2V5T3JEYXRhUGF0aF1cbiAgICAgICAgOiB1bmRlZmluZWRcblxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgZGVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oZGVmKSAmJiAhaXNNYXRjaGluZ1R5cGUodHlwZXMsIGRlZikpIHtcbiAgICAgICAgICAvLyBTdXBwb3J0IGBkZWZhdWx0KClgIGZ1bmN0aW9ucyBmb3IgYW55IHR5cGUgZXhjZXB0IGBGdW5jdGlvbmA6XG4gICAgICAgICAgZGVmID0gZGVmLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICB9XG4gICAgICAvLyBBbnkgc2NoZW1hIHZhbHVlIGhhbmRsZWQgdGhyb3VnaCBgZ2V0U2NoZW1hVmFsdWUoKWAgY2FuIHByb3ZpZGVcbiAgICAgIC8vIGEgZnVuY3Rpb24gdGhhdCdzIHJlc29sdmVkIHdoZW4gdGhlIHZhbHVlIGlzIGV2YWx1YXRlZDpcbiAgICAgIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gTm93IGZpbmFsbHkgc2VlIGlmIHdlIGNhbiBjb252ZXJ0IHRvIHRoZSBleHBlY3QgdHlwZXMuXG4gICAgICBpZiAodHlwZXMgJiYgdmFsdWUgIT0gbnVsbCAmJiAhaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgICAgICBjb25zdCBjb252ZXJ0ZWQgPSBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSlcbiAgICAgICAgICBpZiAoY29udmVydGVkICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIGdldExhYmVsKHNjaGVtYSwgbmFtZSkge1xuICAgICAgcmV0dXJuIHNjaGVtYVxuICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2xhYmVsJywgeyB0eXBlOiBTdHJpbmcsIHNjaGVtYSB9KSB8fFxuICAgICAgICAgIGxhYmVsaXplKG5hbWUgfHwgc2NoZW1hLm5hbWUpXG4gICAgICAgIDogbGFiZWxpemUobmFtZSkgfHwgJydcbiAgICB9LFxuXG4gICAgbGFiZWxpemUsXG5cbiAgICBnZXRCdXR0b25BdHRyaWJ1dGVzKG5hbWUsIGJ1dHRvbikge1xuICAgICAgY29uc3QgdmVyYiA9IHRoaXMudmVyYnNbbmFtZV0gfHwgbmFtZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xhc3M6IGBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YCxcbiAgICAgICAgdGl0bGU6IGJ1dHRvbj8udGV4dCB8fCBsYWJlbGl6ZSh2ZXJiKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUsIGZhbGxiYWNrID0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFuaW1hdGlvbjogMTUwLFxuICAgICAgICBkaXNhYmxlZDogIWRyYWdnYWJsZSxcbiAgICAgICAgaGFuZGxlOiAnLmRpdG8tYnV0dG9uLWRyYWcnLFxuICAgICAgICBkcmFnQ2xhc3M6ICdkaXRvLWRyYWctYWN0aXZlJyxcbiAgICAgICAgY2hvc2VuQ2xhc3M6ICdkaXRvLWRyYWctY2hvc2VuJyxcbiAgICAgICAgZ2hvc3RDbGFzczogJ2RpdG8tZHJhZy1naG9zdCcsXG4gICAgICAgIGZhbGxiYWNrQ2xhc3M6ICdkaXRvLWRyYWctZmFsbGJhY2snLFxuICAgICAgICBmb3JjZUZhbGxiYWNrOiBmYWxsYmFja1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRRdWVyeUxpbmsocXVlcnkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICAvLyBQcmVzZXJ2ZSBoYXNoIGZvciB0YWJzOlxuICAgICAgICBoYXNoOiB0aGlzLiRyb3V0ZS5oYXNoXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNob3VsZFJlbmRlcihzY2hlbWEgPSBudWxsKSB7XG4gICAgICByZXR1cm4gISFzY2hlbWEgJiYgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnaWYnLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIHNjaGVtYVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2hvd0RpYWxvZyh7XG4gICAgICBjb21wb25lbnRzLFxuICAgICAgYnV0dG9ucyxcbiAgICAgIGRhdGEsXG4gICAgICBzZXR0aW5ncyA9IHtcbiAgICAgICAgd2lkdGg6IDQ4MCxcbiAgICAgICAgaGVpZ2h0OiAnYXV0bycsXG4gICAgICAgIGNsaWNrVG9DbG9zZTogZmFsc2VcbiAgICAgIH1cbiAgICB9KSB7XG4gICAgICAvLyBTaG93cyBhIGRpdG8tZGlhbG9nIGNvbXBvbmVudCB0aHJvdWdoIHZ1ZS1qcy1tb2RhbCwgYW5kIHdyYXBzIGl0IGluIGFcbiAgICAgIC8vIHByb21pc2Ugc28gdGhhdCB0aGUgYnV0dG9ucyBpbiB0aGUgZGlhbG9nIGNhbiB1c2UgYGRpYWxvZy5yZXNvbHZlKClgXG4gICAgICAvLyBhbmQgYGRpYWxvZy5yZWplY3QoKWAgdG8gY2xvc2UgdGhlIG1vZGFsIGRpYWxvZyBhbmQgcmVzb2x2ZSAvIHJlamVjdFxuICAgICAgLy8gdGhlIHByb21pc2UgYXQgb25jZS5cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRoaXMuJG1vZGFsLnNob3coRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZGlhbG9nJyksIHtcbiAgICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICAgIGJ1dHRvbnMsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBwcm9taXNlOiB7IHJlc29sdmUsIHJlamVjdCB9XG4gICAgICAgIH0sIHNldHRpbmdzKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKSB7XG4gICAgICByZXNvdXJjZSA9IGdldFJlc291cmNlKHJlc291cmNlKVxuICAgICAgLy8gUmVzb3VyY2VzIHdpdGhvdXQgYSBwYXJlbnQgaW5oZXJpdCB0aGUgb25lIGZyb20gYGRhdGFDb21wb25lbnRgXG4gICAgICAvLyBhdXRvbWF0aWNhbGx5LlxuICAgICAgaWYgKHJlc291cmNlLnBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc291cmNlLnBhcmVudCA9IHRoaXMuZGF0YUNvbXBvbmVudD8ucmVzb3VyY2VcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmFwaS5yZXNvdXJjZXMuYW55KGdldFJlc291cmNlKHJlc291cmNlKSlcbiAgICB9LFxuXG4gICAgZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpIHtcbiAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIGxldCB1cmwgPSBudWxsXG4gICAgICBpZiAocGF0aCkge1xuICAgICAgICAvLyBVc2Ugc2FtZSBhcHByb2FjaCBhcyBheGlvcyBpbnRlcm5hbGx5IHRvIGpvaW4gYmFzZVVSTCB3aXRoIHBhdGg6XG4gICAgICAgIHVybCA9IGAke1xuICAgICAgICAgIHRoaXMuYXBpLnVybC5yZXBsYWNlKC9cXC8rJC8sICcnKVxuICAgICAgICB9LyR7XG4gICAgICAgICAgcGF0aC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgICAgICB9YFxuICAgICAgICAvLyBTdXBwb3J0IG9wdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMsIHdoaWNoIGFyZSBhZGRlZCB0byB0aGUgVVJMOlxuICAgICAgICBjb25zdCB7IHF1ZXJ5IH0gPSByZXNvdXJjZVxuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICBjb25zdCBwYXJhbXMgPSBPYmplY3QuZW50cmllcyhxdWVyeSkubWFwKFxuICAgICAgICAgICAgKFtrZXksIHZhbHVlXSkgPT5cbiAgICAgICAgICAgICAgYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKX1gXG4gICAgICAgICAgKVxuICAgICAgICAgIHVybCA9IGAke3VybH0/JHtwYXJhbXMuam9pbignJicpfWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVybFxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kUmVxdWVzdCh7IG1ldGhvZCwgdXJsLCByZXNvdXJjZSwgZGF0YSwgcGFyYW1zLCBpbnRlcm5hbCB9KSB7XG4gICAgICB1cmwgPSB1cmwgfHwgdGhpcy5nZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpXG4gICAgICBtZXRob2QgPSBtZXRob2QgfHwgcmVzb3VyY2U/Lm1ldGhvZFxuICAgICAgY29uc3QgY2hlY2tVc2VyID0gIWludGVybmFsICYmIHRoaXMuYXBpLmlzQXBpUmVxdWVzdCh1cmwpXG4gICAgICBpZiAoY2hlY2tVc2VyKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm9vdENvbXBvbmVudC5lbnN1cmVVc2VyKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5hcGkucmVxdWVzdCh7IG1ldGhvZCwgdXJsLCBkYXRhLCBwYXJhbXMgfSlcbiAgICAgIC8vIERldGVjdCBjaGFuZ2Ugb2YgdGhlIG93biB1c2VyLCBhbmQgZmV0Y2ggaXQgYWdhaW4gaWYgaXQgd2FzIGNoYW5nZWQuXG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrVXNlciAmJlxuICAgICAgICBtZXRob2QgPT09ICdwYXRjaCcgJiZcbiAgICAgICAgZXF1YWxzKHJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLnVzZXIuaWQsIHRoaXMuYXBpLnVzZXJzKSlcbiAgICAgICkge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZmV0Y2hVc2VyKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH0sXG5cbiAgICByZXF1ZXN0KHsgY2FjaGUsIC4uLm9wdGlvbnMgfSkge1xuICAgICAgLy8gQWxsb3cgY2FjaGluZyBvZiBsb2FkZWQgZGF0YSBvbiB0d28gbGV2ZWxzOlxuICAgICAgLy8gLSAnZ2xvYmFsJzogY2FjaGUgZ2xvYmFsbHksIGZvciB0aGUgZW50aXJlIGFkbWluIHNlc3Npb25cbiAgICAgIC8vIC0gJ2xvY2FsJzogY2FjaGUgbG9jYWxseSB3aXRoaW4gdGhlIGNsb3Nlc3Qgcm91dGUgY29tcG9uZW50IHRoYXQgaXNcbiAgICAgIC8vICAgIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlIGFuZCBsb2FkcyBpdHMgb3duIGRhdGEuXG4gICAgICBjb25zdCBjYWNoZVBhcmVudCA9IGNhY2hlICYmIHtcbiAgICAgICAgZ2xvYmFsOiB0aGlzLmFwcFN0YXRlLFxuICAgICAgICBsb2NhbDogdGhpcy5kYXRhQ29tcG9uZW50XG4gICAgICB9W2NhY2hlXVxuICAgICAgY29uc3QgbG9hZENhY2hlID0gY2FjaGVQYXJlbnQ/LmxvYWRDYWNoZVxuICAgICAgLy8gQnVpbGQgYSBjYWNoZSBrZXkgZnJvbSB0aGUgY29uZmlnOlxuICAgICAgY29uc3QgY2FjaGVLZXkgPSBsb2FkQ2FjaGUgJiYgYCR7XG4gICAgICAgIG9wdGlvbnMubWV0aG9kIHx8ICdnZXQnfSAke1xuICAgICAgICBvcHRpb25zLnVybH0gJHtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5wYXJhbXMgfHwgJycpfSAke1xuICAgICAgICBKU09OLnN0cmluZ2lmeShvcHRpb25zLmRhdGEgfHwgJycpXG4gICAgICB9YFxuICAgICAgaWYgKGxvYWRDYWNoZSAmJiAoY2FjaGVLZXkgaW4gbG9hZENhY2hlKSkge1xuICAgICAgICByZXR1cm4gbG9hZENhY2hlW2NhY2hlS2V5XVxuICAgICAgfVxuICAgICAgLy8gTk9URTogTm8gYXdhaXQgaGVyZSwgcmVzIGlzIGEgcHJvbWlzZSB0aGF0IHdlIGNhbiBlYXNpbHkgY2FjaGUuXG4gICAgICAvLyBUaGF0J3MgZmluZSBiZWNhdXNlIHByb21pc2VzIGNhbiBiZSByZXNvbHZlZCBvdmVyIGFuZCBvdmVyIGFnYWluLlxuICAgICAgY29uc3QgcmVzID0gdGhpcy5zZW5kUmVxdWVzdChvcHRpb25zKVxuICAgICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5kYXRhKVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIC8vIENvbnZlcnQgYXhpb3MgZXJyb3JzIHRvIG5vcm1hbCBlcnJvcnNcbiAgICAgICAgICBjb25zdCBkYXRhID0gZXJyb3IucmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICB0aHJvdyBkYXRhXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGRhdGEubWVzc2FnZSksIGRhdGEpXG4gICAgICAgICAgICA6IGVycm9yXG4gICAgICAgIH0pXG4gICAgICBpZiAobG9hZENhY2hlKSB7XG4gICAgICAgIGxvYWRDYWNoZVtjYWNoZUtleV0gPSByZXNcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9LFxuXG4gICAgbG9hZChvcHRpb25zKSB7XG4gICAgICBkZXByZWNhdGUoJ2xvYWQoKSBpcyBkZXByZWNhdGVkLiBVc2UgcmVxdWVzdCgpIGluc3RlYWQuJylcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3Qob3B0aW9ucylcbiAgICB9LFxuXG4gICAgZm9ybWF0KHZhbHVlLCB7XG4gICAgICBsb2NhbGUgPSB0aGlzLmFwaS5sb2NhbGUsXG4gICAgICBkZWZhdWx0cyA9IHRoaXMuYXBpLmZvcm1hdHMsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gZm9ybWF0KHZhbHVlLCB7XG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgIC4uLm9wdGlvbnNcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIG5hdmlnYXRlKGxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKFxuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgICgpID0+IHJlc29sdmUodHJ1ZSksXG4gICAgICAgICAgKCkgPT4gcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZG93bmxvYWQob3B0aW9ucyA9IHt9KSB7XG4gICAgICBpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcbiAgICAgICAgb3B0aW9ucyA9IHsgdXJsOiBvcHRpb25zIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdXJsLCBmaWxlbmFtZSB9ID0gb3B0aW9uc1xuICAgICAgLy8gU2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDk5MTcwNjYvMTE2MzcwOFxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgYS5ocmVmID0gdXJsXG4gICAgICBpZiAoZmlsZW5hbWUpIHtcbiAgICAgICAgYS5kb3dubG9hZCA9IGZpbGVuYW1lXG4gICAgICB9XG4gICAgICBjb25zdCB7IGJvZHkgfSA9IGRvY3VtZW50XG4gICAgICBib2R5LmFwcGVuZENoaWxkKGEpXG4gICAgICBhLmNsaWNrKClcbiAgICAgIGJvZHkucmVtb3ZlQ2hpbGQoYSlcbiAgICB9LFxuXG4gICAgbm90aWZ5KG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5ub3RpZnkob3B0aW9ucylcbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50LmNsb3NlTm90aWZpY2F0aW9ucygpXG4gICAgfSxcblxuICAgIHNldHVwU2NoZW1hRmllbGRzKCkge1xuICAgICAgdGhpcy5zZXR1cE1ldGhvZHMoKVxuICAgICAgdGhpcy5zZXR1cENvbXB1dGVkKClcbiAgICAgIHRoaXMuc2V0dXBFdmVudHMoKVxuICAgIH0sXG5cbiAgICBzZXR1cE1ldGhvZHMoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5tZXRob2RzIHx8IHt9KSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgbWV0aG9kIGRlZmluaXRpb246ICR7a2V5fTogJHt2YWx1ZX1gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldHVwQ29tcHV0ZWQoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5jb21wdXRlZCB8fCB7fSkpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzb3IgPSBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgICAgICAgID8geyBnZXQ6IHZhbHVlIH1cbiAgICAgICAgICA6IGlzT2JqZWN0KHZhbHVlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmdldClcbiAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoYWNjZXNzb3IpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCBhY2Nlc3NvcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgY29tcHV0ZWQgcHJvcGVydHkgZGVmaW5pdGlvbjogJHtrZXl9OiAke3ZhbHVlfWBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBFdmVudHMoKSB7XG4gICAgICBjb25zdCB7IHdhdGNoLCBldmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAod2F0Y2gpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBpc0Z1bmN0aW9uKHdhdGNoKSA/IHdhdGNoLmNhbGwodGhpcykgOiB3YXRjaFxuICAgICAgICBpZiAoaXNPYmplY3QoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgLy8gSW5zdGFsbCB0aGUgd2F0Y2ggaGFuZGxlcnMgaW4gdGhlIG5leHQgdGljaywgc28gYWxsIGNvbXBvbmVudHMgYXJlXG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZWQgYW5kIHdlIGNhbiBjaGVjayBhZ2FpbnN0IHRoZWlyIG5hbWVzLlxuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGhhbmRsZXJzKSkge1xuICAgICAgICAgICAgICAvLyBFeHBhbmQgcHJvcGVydHkgbmFtZXMgdG8gJ2RhdGEucHJvcGVydHknOlxuICAgICAgICAgICAgICBjb25zdCBleHByID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlOYW1lKGtleSlcbiAgICAgICAgICAgICAgICA/IGBkYXRhLiR7a2V5fWBcbiAgICAgICAgICAgICAgICA6IGtleVxuICAgICAgICAgICAgICB0aGlzLiR3YXRjaChleHByLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFkZEV2ZW50ID0gKGtleSwgZXZlbnQsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgIHRoaXMub24oaHlwaGVuYXRlKGV2ZW50KSwgY2FsbGJhY2spXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBldmVudCBkZWZpbml0aW9uOiAke2tleX06ICR7Y2FsbGJhY2t9YClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50cykpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFsc28gc2NhbiBzY2hlbWEgZm9yIGBvbltBLVpdYC1zdHlsZSBjYWxsYmFja3MgYW5kIGFkZCB0aGVtXG4gICAgICAvLyBUT0RPOiBEZXBlcmVjYXRlIG9uZSBmb3JtYXQgb3IgdGhlIG90aGVyLCBpbiBmYXZvdXIgb2Ygb25seSBvbmUgd2F5IG9mXG4gICAgICAvLyBkb2luZyB0aGluZ3MuIERlY2lkZSB3aGljaCBvbmUgdG8gcmVtb3ZlLlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEpKSB7XG4gICAgICAgIGlmICgvXm9uW0EtWl0vLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LnNsaWNlKDIpLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0RXZlbnQoZXZlbnQsIHtcbiAgICAgIGNvbnRleHQgPSBudWxsLFxuICAgICAgcGFyZW50ID0gbnVsbFxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgaGFzTGlzdGVuZXJzID0gdGhpcy5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBjb25zdCBwYXJlbnRIYXNMaXN0ZW5lcnMgPSBwYXJlbnQ/Lmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGlmIChoYXNMaXN0ZW5lcnMgfHwgcGFyZW50SGFzTGlzdGVuZXJzKSB7XG4gICAgICAgIC8vIFRoZSBlZmZlY3RzIG9mIHNvbWUgZXZlbnRzIG5lZWQgc29tZSB0aW1lIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIFZ1ZS5cbiAgICAgICAgLy8gVXNlICRuZXh0VGljaygpIHRvIG1ha2Ugc3VyZSBvdXIgaGFuZGxlcnMgc2VlIHRoZXNlIGNoYW5nZXMuXG4gICAgICAgIC8vIEZvciBleGFtcGxlLCBgcHJvY2Vzc2VkSXRlbWAgaXMgb25seSBjb3JyZWN0IGFmdGVyIGNvbXBvbmVudHMgdGhhdFxuICAgICAgICAvLyBhcmUgbmV3bHkgcmVuZGVyZWQgZHVlIHRvIGRhdGEgY2hhbmdlcyBoYXZlIHJlZ2lzdGVyZWQgdGhlbXNlbHZlcy5cbiAgICAgICAgaWYgKFsnbG9hZCcsICdjaGFuZ2UnXS5pbmNsdWRlcyhldmVudCkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLiRuZXh0VGljaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gKGNvbnRleHQgPSBEaXRvQ29udGV4dC5nZXQodGhpcywgY29udGV4dCkpXG4gICAgICAgIGNvbnN0IHJlcyA9IGhhc0xpc3RlbmVyc1xuICAgICAgICAgID8gYXdhaXQgdGhpcy5lbWl0KGV2ZW50LCBnZXRDb250ZXh0KCkpXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgLy8gRG9uJ3QgYnViYmxlIHRvIHBhcmVudCBpZiBoYW5kbGVkIGV2ZW50IHJldHVybmVkIGBmYWxzZWBcbiAgICAgICAgaWYgKHBhcmVudEhhc0xpc3RlbmVycyAmJiByZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgcGFyZW50LmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfVxuICB9XG59XG5cbmxldCB1aWQgPSAwXG4iLCJpbXBvcnQgeyBpc0NyZWRpdENhcmQgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgY3JlZGl0Y2FyZCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzQ3JlZGl0Q2FyZCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBpbnZhbGlkJ1xufVxuIiwiZXhwb3J0IGNvbnN0IGRlY2ltYWxzID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBkZWNpbWFscykgPT4ge1xuICAgIGNvbnN0IG1hdGNoID0gZGVjaW1hbHMgPT09ICcqJyA/ICcrJyA6IGB7MSwke2RlY2ltYWxzfX1gXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF5bLStdP1xcXFxkKihcXFxcLlxcXFxkJHttYXRjaH0pPyRgKS50ZXN0KHZhbHVlKVxuICB9LFxuXG4gIG1lc3NhZ2U6ICh2YWx1ZSwgZGVjaW1hbHMpID0+IChcbiAgICBgbXVzdCBiZSBudW1lcmljIGFuZCBtYXkgY29udGFpbiAke1xuICAgICAgIWRlY2ltYWxzIHx8IGRlY2ltYWxzID09PSAnKicgPyAnJyA6IGRlY2ltYWxzXG4gICAgfSBkZWNpbWFsIHBvaW50c2BcbiAgKVxufVxuIiwiaW1wb3J0IHsgaXNFbWFpbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBlbWFpbCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRW1haWwodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSBhIHZhbGlkIGVtYWlsJ1xufVxuIiwiaW1wb3J0IHsgaXNIb3N0bmFtZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBob3N0bmFtZSA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSG9zdG5hbWUodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgaG9zdCBuYW1lJ1xufVxuIiwiaW1wb3J0IHsgaXNEb21haW4gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZG9tYWluID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNEb21haW4odmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgZG9tYWluJ1xufVxuIiwiaW1wb3J0IHsgaXNJbnRlZ2VyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGludGVnZXIgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0ludGVnZXIodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSB3aG9sZSBudW1iZXInXG59XG4iLCJleHBvcnQgY29uc3QgbWF4ID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtYXgpID0+IHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgbWF4KSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWF4fSBvciBsZXNzYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgbWluID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtaW4pID0+IHZhbHVlID49IG1pbixcbiAgbWVzc2FnZSh2YWx1ZSwgbWluKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWlufSBvciBtb3JlYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcGFzc3dvcmQgPSB7XG4gIC8vIEFsbG93IGFueSB2YWx1ZS4gRm9yIG5vdyB0aGlzIGlzIG9ubHkgdXNlZCBhcyBhIG1hcmtlciwgdG8gYWxsb3cgdGhlXG4gIC8vIHJlcXVpcmVkIHZhbGlkYXRpb24gdG8gaGFuZGxlIHVuY2hhbmdlZCBwYXNzd29yZHMgc2VwYXJhdGVseS5cbiAgdmFsaWRhdGU6ICgpID0+IHRydWVcbn1cbiIsImV4cG9ydCBjb25zdCByYW5nZSA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgW21pbiwgbWF4XSkgPT4gdmFsdWUgPj0gbWluICYmIHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgW21pbiwgbWF4XSkge1xuICAgIHJldHVybiBgbXVzdCBiZSBiZXR3ZWVuICR7bWlufSBhbmQgJHttYXh9YFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcmVxdWlyZWQgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIHNldHRpbmdzLCB7IHBhc3N3b3JkIH0pID0+IChcbiAgICAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHx8XG4gICAgLy8gUGFzc3dvcmQgZmllbGRzIHVzZSBgdW5kZWZpbmVkYCBhcyBvcHBvc2VkIHRvIGBudWxsYCB3aGVuIHRoZXkncmUgc2V0XG4gICAgLy8gYnV0IHVuY2hhbmdlZCwgYWxsb3cgdGhpcyB0byBwYXNzIHRocm91Z2g6XG4gICAgKHBhc3N3b3JkICYmIHZhbHVlID09PSB1bmRlZmluZWQpXG4gICksXG4gIG1lc3NhZ2U6ICdpcyByZXF1aXJlZCcsXG4gIG51bGxpc2g6IHRydWVcbn1cbiIsImltcG9ydCB7IGlzVXJsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IHVybCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzVXJsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIHZhbGlkIFVSTCdcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgdmFsaWRhdGlvbnMgZnJvbSAnLi4vdmFsaWRhdGlvbnMvaW5kZXguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVG91Y2hlZDogZmFsc2UsXG4gICAgICBpc0RpcnR5OiBmYWxzZSxcbiAgICAgIGlzVmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgZXJyb3JzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZXZlbnRzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzVG91Y2hlZCA9IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxuICAgICAgICB9LFxuICAgICAgICBjaGFuZ2U6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICAgIH0sXG4gICAgICAgIGlucHV0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHZhbGlkYXRlKG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZScsIHRoaXMuZGF0YVBhdGgsIHZhbHVlLCB0aGlzLnZhbGlkYXRpb25zKVxuICAgICAgZm9yIChjb25zdCBbcnVsZSwgc2V0dGluZ10gb2YgT2JqZWN0LmVudHJpZXModGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdmFsaWRhdGlvbnNbcnVsZV1cbiAgICAgICAgaWYgKHZhbGlkYXRvciAmJiAodmFsaWRhdG9yLm51bGxpc2ggfHwgdmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbGlkYXRlLCBtZXNzYWdlIH0gPSB2YWxpZGF0b3JcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlKHZhbHVlLCBzZXR0aW5nLCB0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNGdW5jdGlvbihtZXNzYWdlKVxuICAgICAgICAgICAgICAgID8gbWVzc2FnZSh2YWx1ZSwgc2V0dGluZywgdGhpcylcbiAgICAgICAgICAgICAgICA6IG1lc3NhZ2VcbiAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvciwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IHRydWVcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gaXNWYWxpZFxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoZmFsc2UpXG4gICAgfSxcblxuICAgIG1hcmtEaXJ0eSgpIHtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIG9uIG5ldyBpbnB1dC5cbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBhZGRFcnJvcihlcnJvciwgYWRkTGFiZWwgPSBmYWxzZSkge1xuICAgICAgdGhpcy5lcnJvcnMgfHw9IFtdXG4gICAgICBpZiAoYWRkTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsIHx8IHRoaXMucGxhY2Vob2xkZXIgfHwgdGhpcy5uYW1lXG4gICAgICAgIGVycm9yID0gYFRoZSAke2xhYmVsfSBmaWVsZCAke2Vycm9yfS5gXG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIC8vIENvbnZlcnQgZnJvbSBBSlYgZXJyb3JzIG9iamVjdHMgdG8gYW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHRoaXMuZXJyb3JzID0gW11cbiAgICAgIGZvciAoY29uc3QgeyBtZXNzYWdlIH0gb2YgZXJyb3JzKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IobWVzc2FnZSwgdHJ1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGdldEVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVycm9ycyA/IFsuLi50aGlzLmVycm9yc10gOiBudWxsXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5lcnJvcnMgPSBudWxsXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBwYXJzZURhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hQWNjZXNzb3IoXG4gIGtleU9yRGF0YVBhdGgsXG4gIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBnZXQsIHNldCwgY2FsbGJhY2sgPSB0cnVlIH0gPSB7fVxuKSB7XG4gIC8vIGBrZXlPckRhdGFQYXRoYCBjYW4gYmUgYSBzaW1wbGUgcHJvcGVydHkga2V5LFxuICAvLyBvciBhIGRhdGEtcGF0aCBpbnRvIHN1Yi1wcm9wZXJ0aWVzLCBib3RoIGluIGFycmF5IG9yIHN0cmluZyBmb3JtYXQuXG4gIGlmIChpc1N0cmluZyhrZXlPckRhdGFQYXRoKSAmJiBrZXlPckRhdGFQYXRoLmluY2x1ZGVzKCcuJykpIHtcbiAgICBrZXlPckRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICB9XG4gIC8vIFVzZSB0aGUgbm9ybWFsaXplZCBkYXRhIHBhdGggZm9yIHRoZSBoYW5kbGluZyBvdmVycmlkZXNcbiAgY29uc3QgbmFtZSA9IG5vcm1hbGl6ZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgLy8gT25seSBkZXRlcm1pbmUgc2NoZW1hIHZhbHVlIGlmIHdlIGhhdmUgbm8gZ2V0dGVyLCBvciB0aGUgZ2V0dGVyXG4gICAgICAvLyB3YW50cyB0byByZWNlaXZlIHRoZSB2YWx1ZSBhbmQgcHJvY2VzcyBpdCBmdXJ0aGVyOlxuICAgICAgY29uc3QgdmFsdWUgPSAhZ2V0IHx8IGdldC5sZW5ndGggPiAwXG4gICAgICAgIC8vIE5PVEU6IEJlY2F1c2UgYHNjaGVtYWAgb2JqZWN0cyBhcmUgcmV0cmlldmVkIGZyb20gYG1ldGFgIG9iamVjdCwgdGhleVxuICAgICAgICAvLyBkb24ndCBzZWVtIHRvIGJlIHJlYWN0aXZlLiBUbyBhbGxvdyBjaGFuZ2VkIGluIGBzY2hlbWFgIHZhbHVlcyxcbiAgICAgICAgLy8gYHNldCgpYCBzdG9yZXMgY2hhbmdlZCB2YWx1ZXMgaW4gdGhlIHNlcGFyYXRlIGBvdmVycmlkZXNgIG9iamVjdC5cbiAgICAgICAgPyB0aGlzLm92ZXJyaWRlcyAmJiBuYW1lIGluIHRoaXMub3ZlcnJpZGVzXG4gICAgICAgICAgPyB0aGlzLm92ZXJyaWRlc1tuYW1lXVxuICAgICAgICAgIDogdGhpcy5nZXRTY2hlbWFWYWx1ZShrZXlPckRhdGFQYXRoLCB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgY2FsbGJhY2sgfSlcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIGlmIChzZXQpIHtcbiAgICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm92ZXJyaWRlcyB8fD0ge31cbiAgICAgICAgdGhpcy4kc2V0KHRoaXMub3ZlcnJpZGVzLCBuYW1lLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0b3JlQWNjZXNzb3IobmFtZSwgeyBkZWZhdWx0OiBkZWYsIGdldCwgc2V0IH0gPSB7fSkge1xuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zOlxuICAgICAgICB2YWx1ZSA9IGlzRnVuY3Rpb24oZGVmKSA/IGRlZi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dCkgOiBkZWZcbiAgICAgICAgLy8gVHJpZ2dlciBzZXR0ZXIgYnkgc2V0dGluZyB2YWx1ZSBhbmQgYWNjZXNzb3IgdG8gZGVmYXVsdDpcbiAgICAgICAgdGhpc1tuYW1lXSA9IHZhbHVlXG4gICAgICAgIC8vIE5vdyBhY2Nlc3Mgc3RvcmUgYWdhaW4sIGZvciByZWFjdGl2aXR5IHRyYWNraW5nXG4gICAgICAgIHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBnZXR0ZXIgdG8gZnVydGhlciBjaGFuZ2Ugb3IgcHJvY2VzcyB0aGUgdmFsdWVcbiAgICAgIC8vIHJldHJpZXZlZCBmcm9tIHRoZSBzdG9yZTpcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBzZXR0ZXIgdG8gcmV0dXJuIGEgbmV3IHZhbHVlIHRvIHNldCwgb3IgZG8gdGhlXG4gICAgICAvLyBzZXR0aW5nIGl0c2VsZiwgYW5kIHRoZW4gcmV0dXJuIGB1bmRlZmluZWRgOlxuICAgICAgaWYgKCFzZXQgfHwgKHZhbHVlID0gc2V0LmNhbGwodGhpcywgdmFsdWUpKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2V0U3RvcmUobmFtZSwgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJjb25zdCB1aWRNYXAgPSBuZXcgV2Vha01hcCgpXG5cbi8vIEdlbmVyYXRlZCBhbmQgcmVtZW1iZXJzIHVuaXF1ZSBpZHMgcGVyIHBhc3NlZCBvYmplY3QgdXNpbmcgYSB3ZWFrIG1hcC5cbmxldCB1aWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gZ2V0VWlkKG9iamVjdCwgaXRlbUlkKSB7XG4gIGxldCBpZCA9IHVpZE1hcC5nZXQob2JqZWN0KVxuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBpZCA9IGl0ZW1JZCB8fCBgQCR7Kyt1aWR9YFxuICAgIHVpZE1hcC5zZXQob2JqZWN0LCBpZClcbiAgfVxuICByZXR1cm4gaWRcbn1cbiIsImltcG9ydCB7IGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc0ludGVnZXIsIGFzQXJyYXksIHBhcnNlRGF0YVBhdGgsIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJ1xuXG4vLyBTY2hlbWFHcmFwaCBpcyBhIGNsYXNzIHRvIGNvbGxlY3Qgc2NoZW1hIGdyYXBoIG1ldGEgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG9cbi8vIHByb2Nlc3Mgc291cmNlcyBhbmQgcmVsYXRpb25zIGZvciB0aGUgZ2l2ZW4gdGFyZ2V0cyAnc2VydmVyJyBhbmQgJ2NsaXBib2FyZCcsXG4vLyBhY2Njb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgdGFibGU6XG4vL1xuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcbi8vIHwgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlcnZlciAgICB8IGNsaXBib2FyZCB8XG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogZmFsc2UgICAgICAgICAgIHwga2VlcCBpZCAgIHwga2VlcCBpZCAgIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IHRydWUgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlZiwgI3JlZiB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiB0cnVlLCB0ZW1wb3JhcnkgfCByZWYsICNyZWYgfCByZWYsICNyZWYgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogZmFsc2UgICAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVtb3ZlIGlkIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IGZhbHNlLCB0ZW1wb3JhcnkgICB8IHJlZiwgI2lkICB8IHJlbW92ZSBpZCB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiB0cnVlICAgICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZWYsICNpZCAgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogdHJ1ZSwgdGVtcG9yYXJ5ICAgIHwgcmVmLCAjaWQgIHwgcmVmLCAjaWQgIHxcbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG5cbmV4cG9ydCBjbGFzcyBTY2hlbWFHcmFwaCB7XG4gIGdyYXBoID0ge31cbiAgcmVmZXJlbmNlcyA9IHt9XG5cbiAgc2V0KGRhdGFQYXRoLCBzZXR0aW5ncywgZGVmYXVsdHMpIHtcbiAgICBkYXRhUGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgbGV0IHN1YkdyYXBoID0gdGhpcy5ncmFwaFxuICAgIGZvciAoY29uc3QgcGFydCBvZiBkYXRhUGF0aCkge1xuICAgICAgY29uc3Qga2V5ID0gaXNJbnRlZ2VyKCtwYXJ0KSA/ICcqJyA6IHBhcnRcbiAgICAgIHN1YkdyYXBoID0gKHN1YkdyYXBoW2tleV0gPz89IHt9KVxuICAgIH1cbiAgICBzdWJHcmFwaC4kc2V0dGluZ3MgPSB7XG4gICAgICAuLi5kZWZhdWx0cywgLy8gU2VlIGBhZGRTb3VyY2UoZGF0YVBhdGgpYFxuICAgICAgLi4uc3ViR3JhcGguJHNldHRpbmdzLFxuICAgICAgLi4uc2V0dGluZ3NcbiAgICB9XG4gIH1cblxuICBhZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIC8vIE9ubHkgc2V0IGByZWxhdGVkOiBmYWxzZWAgdGhyb3VnaCB0aGUgZGVmYXVsdHMsIGFzIGBzZXRTb3VyY2VSZWxhdGVkKClgXG4gICAgLy8gbWF5IGJlIGNhbGxlZCBiZWZvcmUgYGFkZFNvdXJjZSgpYCwgZGVwZW5kaW5nIG9uIHRoZSBncmFwaCBzdHJ1Y3R1cmUuXG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHsgdHlwZTogJ3NvdXJjZScsIHNjaGVtYSB9LCB7IHJlbGF0ZWQ6IGZhbHNlIH0pXG4gIH1cblxuICBzZXRTb3VyY2VSZWxhdGVkKGRhdGFQYXRoKSB7XG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHtcbiAgICAgIHJlbGF0ZWQ6IHRydWUsXG4gICAgICByZWZlcmVuY2U6IHRoaXMuZ2V0UmVmZXJlbmNlUHJlZml4KGRhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBhZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgdHlwZTogJ3JlbGF0aW9uJyxcbiAgICAgIHNjaGVtYSxcbiAgICAgIGludGVybmFsOiAhIXJlbGF0ZWREYXRhUGF0aCxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgocmVsYXRlZERhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBnZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpIHtcbiAgICByZXR1cm4gZGF0YVBhdGhcbiAgICAgID8gKHRoaXMucmVmZXJlbmNlc1tkYXRhUGF0aF0gPz89IG5hbm9pZCg2KSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgZmxhdHRlbigpIHtcbiAgICBjb25zdCBmbGF0dGVuID0gZ3JhcGggPT4ge1xuICAgICAgY29uc3QgZW50cmllcyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHsgJHNldHRpbmdzLCAuLi5zdWJHcmFwaCB9XSBvZiBPYmplY3QuZW50cmllcyhncmFwaCkpIHtcbiAgICAgICAgaWYgKCRzZXR0aW5ncykge1xuICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCAkc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3N1YktleSwgc2V0dGluZ3NdIG9mIGZsYXR0ZW4oc3ViR3JhcGgpKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtgJHtrZXl9LyR7c3ViS2V5fWAsIHNldHRpbmdzXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdHRlbih0aGlzLmdyYXBoKVxuICB9XG5cbiAgcHJvY2Vzcyhzb3VyY2VTY2hlbWEsIGRhdGEsIHsgdGFyZ2V0IH0pIHtcbiAgICBjb25zdCBjbGlwYm9hcmQgPSB0YXJnZXQgPT09ICdjbGlwYm9hcmQnXG4gICAgaWYgKGNsaXBib2FyZCkge1xuICAgICAgZGVsZXRlIGRhdGFbc291cmNlU2NoZW1hLmlkS2V5IHx8ICdpZCddXG4gICAgfVxuICAgIGZvciAoY29uc3QgW2RhdGFQYXRoLCBzZXR0aW5nc10gb2YgdGhpcy5mbGF0dGVuKCkpIHtcbiAgICAgIGNvbnN0IHsgdHlwZSwgc2NoZW1hLCBpbnRlcm5hbCwgcmVsYXRlZCwgcmVmZXJlbmNlIH0gPSBzZXR0aW5nc1xuICAgICAgY29uc3Qgc291cmNlID0gdHlwZSA9PT0gJ3NvdXJjZSdcbiAgICAgIGNvbnN0IHJlbGF0aW9uID0gdHlwZSA9PT0gJ3JlbGF0aW9uJ1xuICAgICAgaWYgKHNvdXJjZSB8fCByZWxhdGlvbiAmJiBpbnRlcm5hbCkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBnZXRWYWx1ZUF0RGF0YVBhdGgoZGF0YSwgZGF0YVBhdGgsICgpID0+IG51bGwpXG4gICAgICAgIGNvbnN0IHJlbW92ZUlkID0gY2xpcGJvYXJkICYmIHNvdXJjZSAmJiAhcmVsYXRlZFxuICAgICAgICBjb25zdCByZWZlcmVuY2VJZCA9IGNsaXBib2FyZCAmJiAoXG4gICAgICAgICAgcmVsYXRpb24gJiYgaW50ZXJuYWwgfHxcbiAgICAgICAgICBzb3VyY2UgJiYgcmVsYXRlZFxuICAgICAgICApXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgYXNBcnJheSh2YWx1ZXMpLmZsYXQoKSkge1xuICAgICAgICAgIGNvbnN0IGlkS2V5ID0gKFxuICAgICAgICAgICAgc291cmNlICYmIHNjaGVtYS5pZEtleSB8fFxuICAgICAgICAgICAgcmVsYXRpb24gJiYgc2NoZW1hLnJlbGF0ZUJ5IHx8XG4gICAgICAgICAgICAnaWQnXG4gICAgICAgICAgKVxuICAgICAgICAgIGxldCBpZCA9IHZhbHVlPy5baWRLZXldXG4gICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChyZW1vdmVJZCkge1xuICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICB9IGlmIChyZWZlcmVuY2VJZCB8fCBpc1RlbXBvcmFyeUlkKGlkKSkge1xuICAgICAgICAgICAgICBpZiAoaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgICBpZCA9IGlkLnNsaWNlKDEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmVmS2V5ID0gY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgLy8gQ2xpcGJvYXJkIGp1c3QgbmVlZHMgdGVtcG9yYXJ5IGlkcyB1bmRlciB0aGUgYWN0dWFsIGBpZEtleWAuXG4gICAgICAgICAgICAgICAgPyBpZEtleVxuICAgICAgICAgICAgICAgIC8vIFNlcnZlciB3YW50cyBPYmplY3Rpb24tc3R5bGUgJyNpZCcgLyAnI3JlZicgcGFpcnMuXG4gICAgICAgICAgICAgICAgOiBzb3VyY2UgPyAnI2lkJyA6ICcjcmVmJ1xuICAgICAgICAgICAgICBjb25zdCByZXZWYWx1ZSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgID8gYEAke2lkfWBcbiAgICAgICAgICAgICAgICAvLyBLZWVwIHRoZSBpZHMgdW5pcXVlIGluIHJlZmVyZW5jZSBncm91cHMsIHNpbmNlIHRoZXkgcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgLy8gYWNjcm9zcyB0aGUgZnVsbCBncmFwaC5cbiAgICAgICAgICAgICAgICA6IHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgICAgPyBgJHtyZWZlcmVuY2V9LSR7aWR9YFxuICAgICAgICAgICAgICAgICAgOiBpZCAvLyBBIHRlbXBvcmFyeSBpZCB3aXRob3V0IGEgcmVsYXRlZCwganVzdCBwcmVzZXJ2ZSBpdC5cbiAgICAgICAgICAgICAgdmFsdWVbcmVmS2V5XSA9IHJldlZhbHVlXG4gICAgICAgICAgICAgIGlmIChyZWZLZXkgIT09IGlkS2V5KSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2lkS2V5XVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhXG4gIH1cbn1cbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgZ2V0VWlkIH0gZnJvbSAnLi91aWQuanMnXG5pbXBvcnQgeyBTY2hlbWFHcmFwaCB9IGZyb20gJy4vU2NoZW1hR3JhcGguanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc1N0cmluZywgaXNBcnJheSwgaXNGdW5jdGlvbiwgaXNQcm9taXNlLCBjbG9uZSwgY2FtZWxpemUsIGlzTW9kdWxlXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IHR5cGVDb21wb25lbnRzID0ge31cbmNvbnN0IHVua25vd25UeXBlUmVwb3J0ZWQgPSB7fVxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUeXBlQ29tcG9uZW50KHR5cGUsIGNvbXBvbmVudCkge1xuICB0eXBlQ29tcG9uZW50c1t0eXBlXSA9IGNvbXBvbmVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZUNvbXBvbmVudCh0eXBlLCBhbGxvd051bGwgPSBmYWxzZSkge1xuICBjb25zdCBjb21wb25lbnQgPSB0eXBlQ29tcG9uZW50c1t0eXBlXSB8fCBudWxsXG4gIGlmICghY29tcG9uZW50ICYmICFhbGxvd051bGwgJiYgIXVua25vd25UeXBlUmVwb3J0ZWRbdHlwZV0pIHtcbiAgICAvLyBSZXBvcnQgZWFjaCBtaXNzaW5nIHR5cGUgb25seSBvbmNlLCB0byBhdm9pZCBmbG9vZGluZyB0aGUgY29uc29sZTpcbiAgICB1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdID0gdHJ1ZVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBEaXRvIGNvbXBvbmVudCB0eXBlOiAnJHt0eXBlfSdgKVxuICB9XG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2hTY2hlbWEoc2NoZW1hLCBjYWxsYmFjaykge1xuICBjb25zdCBzY2hlbWFzID0gW1xuICAgIC4uLk9iamVjdC52YWx1ZXMoc2NoZW1hPy50YWJzIHx8IHt9KSxcbiAgICBzY2hlbWFcbiAgXVxuICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgaWYgKHNjaGVtYSkge1xuICAgICAgY29uc3QgcmVzID0gY2FsbGJhY2soc2NoZW1hKVxuICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2hTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gZm9yRWFjaFNjaGVtYShzY2hlbWEsIHNjaGVtYSA9PiB7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyhzY2hlbWEuY29tcG9uZW50cyB8fCB7fSkpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSlcbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KFxuICAgIHNjaGVtYSxcbiAgICAoY29tcG9uZW50LCBuYW1lKSA9PiBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpID8gY29tcG9uZW50IDogdW5kZWZpbmVkXG4gICkgfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZVNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KFxuICAgIHNjaGVtYSxcbiAgICAoY29tcG9uZW50LCBuYW1lKSA9PiBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpID8gdHJ1ZSA6IHVuZGVmaW5lZFxuICApID09PSB0cnVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeVNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KFxuICAgIHNjaGVtYSxcbiAgICAoY29tcG9uZW50LCBuYW1lKSA9PiAhY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKSA/IGZhbHNlIDogdW5kZWZpbmVkXG4gICkgIT09IGZhbHNlXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdW53cmFwTW9kdWxlID0gZmFsc2UpIHtcbiAgaWYgKGlzRnVuY3Rpb24oc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IHNjaGVtYSgpXG4gIH1cbiAgaWYgKGlzUHJvbWlzZShzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gYXdhaXQgc2NoZW1hXG4gIH1cbiAgaWYgKGlzTW9kdWxlKHNjaGVtYSkpIHtcbiAgICAvLyBDb3B5IHRvIGNvbnZlcnQgZnJvbSBtb2R1bGUgdG8gb2JqZWN0OlxuICAgIHNjaGVtYSA9IHsgLi4uc2NoZW1hIH1cbiAgICAvLyBVbndyYXAgZGVmYXVsdCBvciBuYW1lZCBzY2hlbWFcbiAgICBpZiAoIXNjaGVtYS5uYW1lICYmICh1bndyYXBNb2R1bGUgfHwgc2NoZW1hLmRlZmF1bHQpKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hKVxuICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBrZXlzWzBdXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVtuYW1lXVxuICAgICAgICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYXMoXG4gIHVucmVzb2x2ZWRTY2hlbWFzLFxuICByZXNvbHZlSXRlbSA9IHJlc29sdmVTY2hlbWFcbikge1xuICBsZXQgc2NoZW1hcyA9IGlzRnVuY3Rpb24odW5yZXNvbHZlZFNjaGVtYXMpXG4gICAgPyB1bnJlc29sdmVkU2NoZW1hcygpXG4gICAgOiB1bnJlc29sdmVkU2NoZW1hc1xuICBzY2hlbWFzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWFzLCBmYWxzZSlcbiAgaWYgKGlzQXJyYXkoc2NoZW1hcykpIHtcbiAgICAvLyBUcmFuc2xhdGUgYW4gYXJyYXkgb2YgZHluYW1pYyBpbXBvcnQsIGVhY2ggaW1wb3J0aW5nIG9uZSBuYW1lZCBzY2hlbWFcbiAgICAvLyBtb2R1bGUgdG8gYW4gb2JqZWN0IHdpdGggbmFtZWQgZW50cmllcy5cbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKGF3YWl0IFByb21pc2UuYWxsKHNjaGVtYXMubWFwKFxuICAgICAgYXN5bmMgaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHJlc29sdmVJdGVtKGl0ZW0sIHRydWUpXG4gICAgICAgIHJldHVybiBbc2NoZW1hLm5hbWUsIHNjaGVtYV1cbiAgICAgIH1cbiAgICApKSlcbiAgfSBlbHNlIGlmIChpc09iamVjdChzY2hlbWFzKSkge1xuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXMoc2NoZW1hcykubWFwKFxuICAgICAgYXN5bmMgKFtrZXksIGl0ZW1dKSA9PiB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHJlc29sdmVJdGVtKGl0ZW0sIHRydWUpXG4gICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICB9XG4gICAgKSkpXG4gIH1cbiAgcmV0dXJuIHNjaGVtYXNcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQYW5lbHMoc2NoZW1hKSB7XG4gIGNvbnN0IHsgcGFuZWxzIH0gPSBzY2hlbWFcbiAgaWYgKHNjaGVtYS5wYW5lbHMpIHtcbiAgICBzY2hlbWEucGFuZWxzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMocGFuZWxzKVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzVmlldyhjb21wb25lbnQsIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMpIHtcbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuICBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUpXG4gIGF3YWl0IHJlc29sdmVQYW5lbHMoc2NoZW1hKVxuICBpZiAoaXNTaW5nbGVDb21wb25lbnRWaWV3KHNjaGVtYSkpIHtcbiAgICBhd2FpdCBwcm9jZXNzQ29tcG9uZW50KGFwaSwgc2NoZW1hLCBuYW1lLCBjaGlsZHJlbiwgMClcbiAgfSBlbHNlIHtcbiAgICAvLyBBIG11bHRpLWNvbXBvbmVudCB2aWV3LCBzdGFydCBhdCBsZXZlbCAxXG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIGNoaWxkcmVuLCAxKVxuICB9XG4gIHJvdXRlcy5wdXNoKHtcbiAgICBwYXRoOiBgLyR7c2NoZW1hLnBhdGh9YCxcbiAgICBjaGlsZHJlbixcbiAgICBjb21wb25lbnQsXG4gICAgbWV0YToge1xuICAgICAgYXBpLFxuICAgICAgc2NoZW1hXG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0NvbXBvbmVudChhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCkge1xuICBzY2hlbWEubGV2ZWwgPSBsZXZlbFxuICAvLyBEZWxlZ2F0ZSBzY2hlbWEgcHJvY2Vzc2luZyB0byB0aGUgYWN0dWFsIHR5cGUgY29tcG9uZW50cy5cbiAgcmV0dXJuIGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LnByb2Nlc3NTY2hlbWE/LihcbiAgICBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbFxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUpIHtcbiAgLy8gVXNlZCBmb3IgdmlldyBhbmQgc291cmNlIHNjaGVtYXMsIHNlZSBTb3VyY2VNaXhpblxuICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgc2NoZW1hLnBhdGggPSBzY2hlbWEucGF0aCB8fCBhcGkubm9ybWFsaXplUGF0aChuYW1lKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwpIHtcbiAgY29uc3QgcHJvbWlzZXMgPSBbXVxuICBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgKGNvbXBvbmVudCwgbmFtZSkgPT4ge1xuICAgIHByb21pc2VzLnB1c2gocHJvY2Vzc0NvbXBvbmVudChhcGksIGNvbXBvbmVudCwgbmFtZSwgcm91dGVzLCBsZXZlbCkpXG4gIH0pXG4gIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbCkge1xuICAvLyBGaXJzdCByZXNvbHZlIHRoZSBmb3JtcyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgYmFjayBvbiB0aGUgc2NoZW1hLlxuICBsZXQgeyBmb3JtLCBmb3JtcywgY29tcG9uZW50cyB9ID0gc2NoZW1hXG4gIGlmIChmb3Jtcykge1xuICAgIGZvcm1zID0gc2NoZW1hLmZvcm1zID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoZm9ybXMsIHJlc29sdmVGb3JtKVxuICB9IGVsc2UgaWYgKGZvcm0pIHtcbiAgICBmb3JtID0gc2NoZW1hLmZvcm0gPSBhd2FpdCByZXNvbHZlRm9ybShmb3JtKVxuICB9IGVsc2UgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAvLyBOT1RFOiBQcm9jZXNzaW5nIGZvcm1zIGluIGNvbXB1dGVkIGNvbXBvbmVudHMgaXMgbm90IHN1cHBvcnRlZCwgc2luY2UgaXRcbiAgICAvLyBvbmx5IGNhbiBiZSBjb21wdXRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGFjdHVhbCBkYXRhLlxuICAgIGlmIChpc09iamVjdChjb21wb25lbnRzKSkge1xuICAgICAgZm9ybSA9IHsgY29tcG9uZW50cyB9XG4gICAgfVxuICB9XG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfSAvLyBPbmx5IHVzZWQgZm9yIHByb2Nlc3MgbG9vcCBiZWxvdy5cbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuICBmb3IgKGNvbnN0IGZvcm0gb2YgT2JqZWN0LnZhbHVlcyhmb3JtcykpIHtcbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIGZvcm0sIGNoaWxkcmVuLCBsZXZlbCArIDEpXG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlRm9ybShmb3JtKSB7XG4gIGZvcm0gPSBhd2FpdCByZXNvbHZlU2NoZW1hKGZvcm0sIHRydWUpXG4gIGlmIChmb3JtKSB7XG4gICAgYXdhaXQgcmVzb2x2ZVBhbmVscyhmb3JtKVxuICB9XG4gIHJldHVybiBmb3JtXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NpbmdsZUNvbXBvbmVudFZpZXcoc2NoZW1hKSB7XG4gIC8vIElmIHRoZSBzY2hlbWEgaGFzIGEgdHlwZSwgaXQgaXMgYSBzaW5nbGUtY29tcG9uZW50IHZpZXcuXG4gIHJldHVybiAhIXNjaGVtYS50eXBlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNGb3JtU2NoZW1hKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGJvdGggc2luZ2xlIGZvcm0gYW5kIG11bHRpcGxlIGZvcm1zIG5vdGF0aW9uLCBhcyB3ZWxsIGFzIGlubGluZWRcbiAgLy8gY29tcG9uZW50cy5cbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYSkgJiYgISEoXG4gICAgc2NoZW1hLmZvcm0gfHxcbiAgICBzY2hlbWEuZm9ybXMgfHxcbiAgICBzY2hlbWEuY29tcG9uZW50c1xuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gT2JqZWN0LmtleXMoc2NoZW1hPy5mb3JtcyB8fCB7fSkubGVuZ3RoID4gMVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgY29uc3QgeyB2aWV3IH0gPSBzY2hlbWFcbiAgY29uc3Qgdmlld1NjaGVtYSA9IHZpZXcgJiYgY29udGV4dC52aWV3c1t2aWV3XVxuICByZXR1cm4gdmlld1NjaGVtYVxuICAgID8gaGFzRm9ybVNjaGVtYSh2aWV3U2NoZW1hKVxuICAgICAgPyB2aWV3U2NoZW1hXG4gICAgICAvLyBOT1RFOiBWaWV3cyBjYW4gaGF2ZSB0YWJzLCBpbiB3aGljaCBjYXNlIHRoZSB2aWV3IGNvbXBvbmVudCBpcyBuZXN0ZWRcbiAgICAgIC8vIGluIG9uZSBvZiB0aGUgdGFicywgZ28gZmluZCBpdC5cbiAgICAgIDogZm9yRWFjaFNjaGVtYSh2aWV3U2NoZW1hLCBzY2hlbWEgPT4ge1xuICAgICAgICBjb25zdCB2aWV3Q29tcG9uZW50ID0gc2NoZW1hLmNvbXBvbmVudHM/Llt2aWV3XVxuICAgICAgICBpZiAoaGFzRm9ybVNjaGVtYSh2aWV3Q29tcG9uZW50KSkge1xuICAgICAgICAgIHJldHVybiB2aWV3Q29tcG9uZW50XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3RWRpdFBhdGgoc2NoZW1hLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZpZXcgPSBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgcmV0dXJuIHZpZXdcbiAgICA/IHZpZXcubGV2ZWwgPT09IDBcbiAgICAgID8gYC8ke3ZpZXcucGF0aH1gIC8vIEEgc2luZ2xlLWNvbXBvbmVudCB2aWV3XG4gICAgICA6IGAvJHt2aWV3LnBhdGh9LyR7dmlldy5wYXRofWAgLy8gQSBtdWx0aS1jb21wb25lbnQgdmlld1xuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0LCBtb2RpZnlGb3JtKSB7XG4gIGNvbnN0IHZpZXcgPSBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgaWYgKHZpZXcpIHtcbiAgICBzY2hlbWEgPSB2aWV3XG4gIH0gZWxzZSBpZiAoc2NoZW1hLnZpZXcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdmlldzogJyR7c2NoZW1hLnZpZXd9J2ApXG4gIH1cblxuICBsZXQgeyBmb3JtLCBmb3JtcywgY29tcG9uZW50cywgY29tcGFjdCB9ID0gc2NoZW1hXG4gIGlmICghZm9ybSAmJiAhZm9ybXMpIHtcbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgLy8gQ29udmVydCBpbmxpbmVkIGNvbXBvbmVudHMgdG8gZm9ybXMsIHN1cHBvcnRpbmcgYGNvbXBhY3RgIHNldHRpbmcuXG4gICAgICBmb3JtID0geyBjb21wb25lbnRzLCBjb21wYWN0IH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gYGZvcm1zYCwgYGZvcm1gIG9yIGBjb21wb25lbnRzYCwgcmV0dXJuIGFuZCBlbXB0eSBgZm9ybXNgIG9iamVjdC5cbiAgICAgIHJldHVybiB7fVxuICAgIH1cbiAgfVxuICBmb3JtcyB8fD0geyBkZWZhdWx0OiBmb3JtIH1cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhmb3JtcykubWFwKChbdHlwZSwgZm9ybV0pID0+IHtcbiAgICAgIC8vIFN1cHBvcnQgYHNjaGVtYS5jb21wb25lbnRzYCBjYWxsYmFja3MgdG8gY3JlYXRlIGNvbXBvbmVudHMgb24gdGhlIGZseS5cbiAgICAgIGlmIChpc0Z1bmN0aW9uKGZvcm0uY29tcG9uZW50cykpIHtcbiAgICAgICAgZm9ybSA9IHtcbiAgICAgICAgICAuLi5mb3JtLFxuICAgICAgICAgIGNvbXBvbmVudHM6IGZvcm0uY29tcG9uZW50cyhjb250ZXh0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gW3R5cGUsIG1vZGlmeUZvcm0/Lihmb3JtKSA/PyBmb3JtXVxuICAgIH0pXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKSB7XG4gIHJldHVybiBmb3Jtc1tpdGVtPy50eXBlXSB8fCBmb3Jtcy5kZWZhdWx0IHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dCkge1xuICByZXR1cm4gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0KSwgaXRlbSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0xhYmVsKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hLmxhYmVsICE9PSBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wYWN0KHNjaGVtYSkge1xuICByZXR1cm4gISFzY2hlbWEuY29tcGFjdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJbmxpbmVkKHNjaGVtYSkge1xuICByZXR1cm4gISEoc2NoZW1hLmlubGluZWQgfHwgc2NoZW1hLmNvbXBvbmVudHMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05lc3RlZChzY2hlbWEpIHtcbiAgcmV0dXJuICEhKFxuICAgIHNjaGVtYS5uZXN0ZWQgfHxcbiAgICBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5kZWZhdWx0TmVzdGVkID09PSB0cnVlXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZE9taXRQYWRkaW5nKHNjaGVtYSkge1xuICByZXR1cm4gISFnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5vbWl0UGFkZGluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGRlZmF1bHQgdmFsdWVzIGJvdGggb24gc2NoZW1hIGFuZCBvbiBjb21wb25lbnQgbGV2ZWwuXG4gIC8vIE5PVEU6IEF0IHRoZSB0aW1lIG9mIGNyZWF0aW9uLCBjb21wb25lbnRzIG1heSBub3QgYmUgaW5zdGFudGlhdGVkLCAoZS5nLiBpZlxuICAvLyBlbnRyaWVzIGFyZSBjcmVhdGVkIHRocm91Z2ggbmVzdGVkIGZvcm1zLCB0aGUgcGFyZW50IGZvcm0gaXNuJ3QgbW91bnRlZCkgc29cbiAgLy8gd2UgY2FuJ3QgdXNlIGBkYXRhUGF0aGAgdG8gZ2V0IHRvIGNvbXBvbmVudHMsIGFuZCB0aGUgYGRlZmF1bHRWYWx1ZWAgZnJvbVxuICAvLyB0aGVyZS4gVGhhdCdzIHdoeSBgZGVmYXVsdFZhbHVlYCBpcyBkZWZpbmVkIHN0YXRpY2FsbHkgaW4gdGhlIGNvbXBvbmVudHM6XG4gIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHNjaGVtYS5kZWZhdWx0XG4gIGNvbnN0IHZhbHVlID0gZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICA/IGRlZmF1bHRWYWx1ZVxuICAgIDogZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdFZhbHVlXG4gIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgID8gdmFsdWUoc2NoZW1hKVxuICAgIDogY2xvbmUodmFsdWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSB7XG4gIGNvbnN0IHR5cGVPcHRpb25zID0gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKVxuICByZXR1cm4gISEoXG4gICAgdHlwZU9wdGlvbnM/LmV4Y2x1ZGVWYWx1ZSB8fFxuICAgIHR5cGVPcHRpb25zPy5pZ25vcmVNaXNzaW5nVmFsdWU/LihzY2hlbWEpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0xhYmVscyhzY2hlbWEpIHtcbiAgY29uc3QgY2hlY2tDb21wb25lbnRzID0gY29tcG9uZW50cyA9PlxuICAgIE9iamVjdC52YWx1ZXMoY29tcG9uZW50cyB8fCB7fSkuc29tZShoYXNMYWJlbClcblxuICByZXR1cm4gKFxuICAgIGNoZWNrQ29tcG9uZW50cyhzY2hlbWEuY29tcG9uZW50cykgfHxcbiAgICBPYmplY3QudmFsdWVzKHNjaGVtYS50YWJzIHx8IHt9KS5zb21lKGNoZWNrQ29tcG9uZW50cylcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RGVmYXVsdHMoc2NoZW1hLCBkYXRhID0ge30sIGNvbXBvbmVudCkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHJvb3REYXRhOiBkYXRhIH1cblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSkgPT4ge1xuICAgIGlmICghKG5hbWUgaW4gZGF0YSkgJiYgIWlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpKSB7XG4gICAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSlcbiAgICB9XG4gIH1cblxuICAvLyBTZXRzIHVwIGEgZGF0YSBvYmplY3QgdGhhdCBoYXMga2V5cyB3aXRoIGRlZmF1bHQgdmFsdWVzIGZvciBhbGxcbiAgLy8gZm9ybSBmaWVsZHMsIHNvIHRoZXkgY2FuIGJlIGNvcnJlY3RseSB3YXRjaGVkIGZvciBjaGFuZ2VzLlxuICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLCBkYXRhLCBudWxsLCBudWxsLCBwcm9jZXNzQmVmb3JlLCBudWxsLCBvcHRpb25zXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCA9IG51bGwsXG4gIHJvb3REYXRhID0gY29tcG9uZW50Py5yb290RGF0YVxufSA9IHt9KSB7XG4gIGNvbnN0IHsgY29tcHV0ZSB9ID0gc2NoZW1hXG4gIGlmIChjb21wdXRlKSB7XG4gICAgY29uc3QgdmFsdWUgPSBjb21wdXRlKERpdG9Db250ZXh0LmdldChjb21wb25lbnQsIHtcbiAgICAgIC8vIE92ZXJyaWRlIHZhbHVlIHRvIHByZXZlbnQgZW5kbGVzcyByZWN1cnNpb24gdGhyb3VnaCBjYWxsaW5nIHRoZVxuICAgICAgLy8gZ2V0dGVyIGZvciBgdGhpcy52YWx1ZWAgaW4gYERpdG9Db250ZXh0YDpcbiAgICAgIHZhbHVlOiBkYXRhW25hbWVdLFxuICAgICAgbmFtZSxcbiAgICAgIGRhdGEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIHJvb3REYXRhXG4gICAgfSkpXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFVzZSBgJHNldCgpYCBkaXJlY3RseSBpbnN0ZWFkIG9mIGB0aGlzLnZhbHVlID0g4oCmYCB0byB1cGRhdGUgdGhlXG4gICAgICAvLyB2YWx1ZSB3aXRob3V0IGNhbGxpbmcgcGFyc2UoKTpcbiAgICAgIFZ1ZS5zZXQoZGF0YSwgbmFtZSwgdmFsdWUpXG4gICAgfVxuICB9XG4gIC8vIElmIHRoZSB2YWx1ZSBpcyBzdGlsbCBtaXNzaW5nIGFmdGVyIGNvbXB1dGUsIHNldCB0aGUgZGVmYXVsdCBmb3IgaXQ6XG4gIGlmICghKG5hbWUgaW4gZGF0YSkgJiYgIWlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpKSB7XG4gICAgVnVlLnNldChkYXRhLCBuYW1lLCBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKSlcbiAgfVxuICAvLyBOb3cgYWNjZXNzIHRoZSB2YWx1ZS4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHJlYWN0aXZpdHkgYW5kIG5lZWRzIHRvXG4gIC8vIGhhcHBlbiBhZnRlciBhbGwgcHJpb3IgbWFuaXB1bGF0aW9uIHRocm91Z2ggYCRzZXQoKWAsIHNlZSBhYm92ZTpcbiAgcmV0dXJuIGRhdGFbbmFtZV1cbn1cblxuZnVuY3Rpb24gY2xvbmVJdGVtKHNvdXJjZVNjaGVtYSwgaXRlbSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucy5zY2hlbWFPbmx5KSB7XG4gICAgY29uc3QgY29weSA9IHt9XG4gICAgY29uc3QgeyBpZEtleSA9ICdpZCcsIG9yZGVyS2V5IH0gPSBzb3VyY2VTY2hlbWFcbiAgICBjb25zdCBpZCA9IGl0ZW1baWRLZXldXG4gICAgaWYgKGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvcHlbaWRLZXldID0gaWRcbiAgICB9XG4gICAgLy8gQ29weSBvdmVyIHR5cGUgaW4gY2FzZSB0aGVyZSBhcmUgbXVsdGlwbGUgZm9ybXMgdG8gY2hvb3NlIGZyb20uXG4gICAgaWYgKGhhc011bHRpcGxlRm9ybVNjaGVtYXMoc291cmNlU2NoZW1hKSkge1xuICAgICAgY29weS50eXBlID0gaXRlbS50eXBlXG4gICAgfVxuICAgIGlmIChvcmRlcktleSkge1xuICAgICAgY29weVtvcmRlcktleV0gPSBpdGVtW29yZGVyS2V5XVxuICAgIH1cbiAgICByZXR1cm4gY29weVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRGF0YShzY2hlbWEsIHNvdXJjZVNjaGVtYSwgZGF0YSwgZGF0YVBhdGgsIHtcbiAgY29tcG9uZW50LFxuICBzY2hlbWFPbmx5LCAvLyB3ZXRoZXIgdG8gb25seSBpbmNsdWRlIGRhdGEgY292ZXJlZCBieSB0aGUgc2NoZW1hLCBvciBhbGwgZGF0YVxuICB0YXJnZXRcbn0gPSB7fSkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHNjaGVtYU9ubHksIHRhcmdldCwgcm9vdERhdGE6IGRhdGEgfVxuICBjb25zdCBwcm9jZXNzZWREYXRhID0gY2xvbmVJdGVtKHNvdXJjZVNjaGVtYSwgZGF0YSwgb3B0aW9ucylcbiAgY29uc3QgZ3JhcGggPSBuZXcgU2NoZW1hR3JhcGgoKVxuXG4gIGNvbnN0IHByb2Nlc3NCZWZvcmUgPSAoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YSkgPT4ge1xuICAgIGxldCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBvcHRpb25zKVxuICAgIC8vIFRoZSBzY2hlbWEgZXhwZWN0cyB0aGUgYHdyYXBQcmltaXRpdmVzYCB0cmFuc2Zvcm1hdGlvbnMgdG8gYmUgcHJlc2VudCBvblxuICAgIC8vIHRoZSBkYXRhIHRoYXQgaXQgaXMgYXBwbGllZCBvbiwgc28gd2FycCBiZWZvcmUgYW5kIHVud3JhcCBhZnRlci5cbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMsIG9yZGVyS2V5LCBpZEtleSA9ICdpZCcgfSA9IHNjaGVtYVxuICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUubWFwKGVudHJ5ID0+ICh7XG4gICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogZW50cnlcbiAgICAgICAgfSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBbHdheXMgc2hhbGxvdy1jbG9uZSBhcnJheSB2YWx1ZXM6XG4gICAgICAgIHZhbHVlID0gWy4uLnZhbHVlXVxuICAgICAgfVxuICAgICAgaWYgKG9yZGVyS2V5ICYmIHRhcmdldCA9PT0gJ2NsaXBib2FyZCcpIHtcbiAgICAgICAgLy8gU29ydCB0aGUgZGF0YSBiYWNrIGludG8gdGhlIG5hdHVyYWwgc2VxdWVuY2UgYXMgZGVmaW5lZCBieSB0aGVpciBpZHMsXG4gICAgICAgIC8vIHNvIGNvcHktcGFzdGluZyBiZXR3ZWVuIHNlcnZlcnMgKGUuZy4gbmVzdGVkIGZvbnQtY3V0cyBvbiBMaW5ldG8pXG4gICAgICAgIC8vIG5hdHVyYWxseSBnZXRzIG1hcHBlZCB0byB0aGUgc2FtZSBlbnRyaWVzIGluIHRoZSBncmFwaC5cbiAgICAgICAgdmFsdWUuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkMSA9IGE/LltpZEtleV1cbiAgICAgICAgICBjb25zdCBpZDIgPSBiPy5baWRLZXldXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlkMSA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQxKSA/IDFcbiAgICAgICAgICAgIDogaWQyID09IG51bGwgfHwgaXNUZW1wb3JhcnlJZChpZDIpID8gLTFcbiAgICAgICAgICAgIDogaWQxIC0gaWQyXG4gICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgfVxuXG4gIGNvbnN0IHByb2Nlc3NBZnRlciA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgZXhjbHVkZSwgcHJvY2VzcyB9ID0gc2NoZW1hXG4gICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YVtuYW1lXVxuXG4gICAgY29uc3QgdHlwZU9wdGlvbnMgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpXG5cbiAgICAvLyBOT1RFOiBXZSBkb24ndCBjYWNoZSB0aGlzIGNvbnRleHQsIHNpbmNlIGB2YWx1ZWAgaXMgY2hhbmdpbmcuXG4gICAgY29uc3QgZ2V0Q29udGV4dCA9ICgpID0+IERpdG9Db250ZXh0LmdldChjb21wb25lbnQsIHtcbiAgICAgIHZhbHVlLFxuICAgICAgbmFtZSxcbiAgICAgIGRhdGEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhLFxuICAgICAgLy8gUGFzcyB0aGUgYWxyZWFkeSBwcm9jZXNzZWQgZGF0YSB0byBgcHJvY2VzcygpYCwgc28gaXQgY2FuIGJlIG1vZGlmaWVkXG4gICAgICAvLyB0aHJvdWdoIGBwcm9jZXNzZWRJdGVtYCBmcm9tIHRoZXJlLlxuICAgICAgcHJvY2Vzc2VkRGF0YVxuICAgIH0pXG5cbiAgICAvLyBGaXJzdCB1bndyYXAgdGhlIHdyYXBwZWQgcHJpbWl0aXZlcyBhZ2FpbiwgdG8gYnJpbmcgdGhlIGRhdGEgYmFjayBpbnRvXG4gICAgLy8gaXRzIG5hdGl2ZSBmb3JtLiBTZSBgcHJvY2Vzc0JlZm9yZSgpYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHRoZSB1c2VyJ3MgYHByb2Nlc3MoKWAgY2FsbGJhY2sgZmlyc3QsIGlmIG9uZSBpcyBwcm92aWRlZCwgc28gdGhhdFxuICAgIC8vIGl0IGNhbiBtb2RpZnkgZGF0YSBpbiBgcHJvY2Vzc2VkRGF0YWAgZXZlbiBpZiBpdCBwcm92aWRlcyBgZXhjbHVkZTogdHJ1ZWBcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgdmFsdWUgPSBwcm9jZXNzKGdldENvbnRleHQoKSlcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8XG4gICAgICAvLyBTdXBwb3J0IGZ1bmN0aW9ucyBuZXh0IHRvIGJvb2xlYW5zIGZvciBgc2NoZW1hLmV4Y2x1ZGVgOlxuICAgICAgZXhjbHVkZSA9PT0gdHJ1ZSB8fFxuICAgICAgaXNGdW5jdGlvbihleGNsdWRlKSAmJiBleGNsdWRlKGdldENvbnRleHQoKSlcbiAgICApIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzZWREYXRhW25hbWVdXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVhY2ggY29tcG9uZW50IHR5cGUgY2FuIHByb3ZpZGUgaXRzIG93biBzdGF0aWMgYHByb2Nlc3NWYWx1ZSgpYCBtZXRob2RcbiAgICAgIC8vIHRvIGNvbnZlcnQgdGhlIGRhdGEgZm9yIHN0b3JhZ2UuXG4gICAgICBjb25zdCBwcm9jZXNzVmFsdWUgPSB0eXBlT3B0aW9ucz8ucHJvY2Vzc1ZhbHVlXG4gICAgICBpZiAocHJvY2Vzc1ZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaClcbiAgICAgIH1cbiAgICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhLFxuICAgIGRhdGFQYXRoLFxuICAgIHByb2Nlc3NlZERhdGEsXG4gICAgcHJvY2Vzc0JlZm9yZSxcbiAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgb3B0aW9uc1xuICApXG5cbiAgcmV0dXJuIGdyYXBoLnByb2Nlc3Moc291cmNlU2NoZW1hLCBwcm9jZXNzZWREYXRhLCBvcHRpb25zKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYURhdGEoXG4gIHNjaGVtYSxcbiAgZGF0YSxcbiAgZGF0YVBhdGgsXG4gIHByb2Nlc3NlZERhdGEsXG4gIHByb2Nlc3NCZWZvcmUsXG4gIHByb2Nlc3NBZnRlcixcbiAgb3B0aW9uc1xuKSB7XG4gIGNvbnN0IHByb2Nlc3NDb21wb25lbnRzID0gY29tcG9uZW50cyA9PiB7XG4gICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoZGF0YVBhdGgsIHRva2VuKSA9PiBkYXRhUGF0aCAhPSBudWxsXG4gICAgICA/IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCB0b2tlbilcbiAgICAgIDogbnVsbFxuXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKCFpc05lc3RlZChjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBkYXRhIG9uIHVubmVzdGVkIGNvbXBvbmVudHMuXG4gICAgICAgICAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhLFxuICAgICAgICAgICAgcHJvY2Vzc0JlZm9yZSxcbiAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50RGF0YVBhdGggPSBnZXREYXRhUGF0aChkYXRhUGF0aCwgbmFtZSlcblxuICAgICAgICAgIGNvbnN0IHByb2Nlc3NJdGVtID0gKGl0ZW0sIGluZGV4ID0gbnVsbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YVBhdGggPSBpbmRleCAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IGdldERhdGFQYXRoKGNvbXBvbmVudERhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICAgICAgOiBjb21wb25lbnREYXRhUGF0aFxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IERpdG9Db250ZXh0LmdldChvcHRpb25zLmNvbXBvbmVudCwge1xuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICByb290RGF0YTogb3B0aW9ucy5yb290RGF0YVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGNvbnN0IGdldEZvcm1zID0gKFxuICAgICAgICAgICAgICBnZXRUeXBlT3B0aW9ucyhjb21wb25lbnRTY2hlbWEpPy5nZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3NpbmcgfHxcbiAgICAgICAgICAgICAgIGdldEZvcm1TY2hlbWFzXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBmb3JtcyA9IGdldEZvcm1zKGNvbXBvbmVudFNjaGVtYSwgY29udGV4dClcbiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSlcbiAgICAgICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZEl0ZW0gPSBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgICAgICAgPyBjbG9uZUl0ZW0oY29tcG9uZW50U2NoZW1hLCBpdGVtLCBvcHRpb25zKVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICAgICAgZm9ybSxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NlZEl0ZW0sXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0JlZm9yZSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBJdGVtcyB3aXRob3V0IGZvcm1zIHN0aWxsIGdldCBmdWxseSAoYnV0IHNoYWxsb3dseSkgY2xvbmVkLlxuICAgICAgICAgICAgICAvLyBUT0RPOiBGaW5kIG91dCBvZiB0aGlzIGlzIGFjdHVhbGx5IG5lZWRlZCAvIHVzZWQgYXQgYWxsP1xuICAgICAgICAgICAgICByZXR1cm4geyAuLi5pdGVtIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcm9jZXNzQmVmb3JlPy4oXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsIGRhdGEsIG5hbWUsIGNvbXBvbmVudERhdGFQYXRoLCBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuICAgICAgICAgIGxldCB2YWx1ZSA9IHByb2Nlc3NlZERhdGEgPyBwcm9jZXNzZWREYXRhW25hbWVdIDogZGF0YVtuYW1lXVxuICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIGhhc0Zvcm1TY2hlbWEoY29tcG9uZW50U2NoZW1hKSkge1xuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBkYXRhIG9uIG5lc3RlZCBmb3JtIGl0ZW1zLlxuICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgIC8vIE9wdGltaXphdGlvbjogTm8gbmVlZCB0byBjb2xsZWN0IHZhbHVlcyBpZiB3ZSdyZSBub3QgY2xvbmluZyFcbiAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICAgICAgOiB2YWx1ZS5mb3JFYWNoKHByb2Nlc3NJdGVtKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jZXNzSXRlbSh2YWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9jZXNzZWREYXRhKSB7XG4gICAgICAgICAgICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwcm9jZXNzQWZ0ZXI/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSwgZGF0YSwgbmFtZSwgY29tcG9uZW50RGF0YVBhdGgsIHByb2Nlc3NlZERhdGFcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm9jZXNzQ29tcG9uZW50cyhzY2hlbWEuY29tcG9uZW50cylcbiAgaWYgKHNjaGVtYS50YWJzKSB7XG4gICAgZm9yIChjb25zdCB0YWIgb2YgT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicykpIHtcbiAgICAgIHByb2Nlc3NDb21wb25lbnRzKHRhYi5jb21wb25lbnRzKVxuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IHBhbmVsIG9mIGdldEFsbFBhbmVsU2NoZW1hcyhzY2hlbWEsIGRhdGFQYXRoKSkge1xuICAgIHByb2Nlc3NDb21wb25lbnRzKHBhbmVsLnNjaGVtYS5jb21wb25lbnRzKVxuICB9XG5cbiAgcmV0dXJuIHByb2Nlc3NlZERhdGEgfHwgZGF0YVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZWRTY2hlbWFzKGRlc2NyaXB0aW9ucywgZGVmYXVsdHMpIHtcbiAgY29uc3QgdG9PYmplY3QgPSAoYXJyYXksIHRvU2NoZW1hKSA9PiB7XG4gICAgcmV0dXJuIGFycmF5Lmxlbmd0aCA+IDBcbiAgICAgID8gYXJyYXkucmVkdWNlKChvYmplY3QsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHRvU2NoZW1hKHZhbHVlKVxuICAgICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgICAgb2JqZWN0W3NjaGVtYS5uYW1lXSA9IHNjaGVtYSAmJiBkZWZhdWx0c1xuICAgICAgICAgICAgPyB7IC4uLmRlZmF1bHRzLCAuLi5zY2hlbWEgfVxuICAgICAgICAgICAgOiBzY2hlbWFcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqZWN0XG4gICAgICB9LCB7fSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgcmV0dXJuIGlzQXJyYXkoZGVzY3JpcHRpb25zKVxuICAgID8gdG9PYmplY3QoZGVzY3JpcHRpb25zLCB2YWx1ZSA9PiAoXG4gICAgICBpc09iamVjdCh2YWx1ZSkgPyB2YWx1ZSA6IHtcbiAgICAgICAgbmFtZTogY2FtZWxpemUodmFsdWUsIGZhbHNlKVxuICAgICAgfVxuICAgICkpXG4gICAgOiBpc09iamVjdChkZXNjcmlwdGlvbnMpXG4gICAgICA/IHRvT2JqZWN0KFxuICAgICAgICBPYmplY3QuZW50cmllcyhkZXNjcmlwdGlvbnMpLFxuICAgICAgICAoW25hbWUsIHZhbHVlXSkgPT5cbiAgICAgICAgICBpc09iamVjdCh2YWx1ZSkgPyB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgLi4udmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgOiBpc1N0cmluZyh2YWx1ZSkgPyB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgbGFiZWw6IHZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICAgIDogbnVsbFxuICAgICAgKVxuICAgICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdXR0b25TY2hlbWFzKGJ1dHRvbnMpIHtcbiAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyhcbiAgICBidXR0b25zLFxuICAgIHsgdHlwZTogJ2J1dHRvbicgfSAvLyBEZWZhdWx0c1xuICApXG59XG5cbmZ1bmN0aW9uIGdldFR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBpc09iamVjdChzY2hlbWFPclR5cGUpID8gc2NoZW1hT3JUeXBlLnR5cGUgOiBzY2hlbWFPclR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0VHlwZUNvbXBvbmVudChnZXRUeXBlKHNjaGVtYU9yVHlwZSksIHRydWUpPy5vcHRpb25zID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRUeXBlT3B0aW9ucyhzY2hlbWFPclR5cGUpPy5nZXRTb3VyY2VUeXBlPy4oXG4gICAgZ2V0VHlwZShzY2hlbWFPclR5cGUpXG4gICkgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxTY2hlbWEoc2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KSB7XG4gIHJldHVybiBzY2hlbWFcbiAgICA/IHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIG5hbWUsIGFwcGVuZCBpdCB0byB0aGUgZGF0YVBhdGguXG4gICAgICAvLyBUaGlzIGlzIHVzZWQgZS5nLiBmb3IgJGZpbHRlcnMgcGFuZWxzLlxuICAgICAgZGF0YVBhdGg6IHNjaGVtYS5uYW1lXG4gICAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNjaGVtYS5uYW1lKVxuICAgICAgICA6IGRhdGFQYXRoLFxuICAgICAgdGFiQ29tcG9uZW50XG4gICAgfVxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYXMsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQsIHBhbmVscyA9IFtdKSB7XG4gIGlmIChzY2hlbWFzKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCBzY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpKSB7XG4gICAgICBjb25zdCBwYW5lbCA9IGdldFBhbmVsU2NoZW1hKFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBrZXkpLFxuICAgICAgICB0YWJDb21wb25lbnRcbiAgICAgIClcbiAgICAgIGlmIChwYW5lbCkge1xuICAgICAgICBwYW5lbHMucHVzaChwYW5lbClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhbmVsc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsUGFuZWxTY2hlbWFzKFxuICBzY2hlbWEsXG4gIGRhdGFQYXRoLFxuICBzY2hlbWFDb21wb25lbnQgPSBudWxsLFxuICB0YWJDb21wb25lbnQgPSBudWxsXG4pIHtcbiAgY29uc3QgcGFuZWwgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5nZXRQYW5lbFNjaGVtYT8uKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhUGF0aCxcbiAgICBzY2hlbWFDb21wb25lbnRcbiAgKVxuICBjb25zdCBwYW5lbHMgPSBwYW5lbCA/IFtnZXRQYW5lbFNjaGVtYShwYW5lbCwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCldIDogW11cbiAgLy8gQWxsb3cgZWFjaCBjb21wb25lbnQgdG8gcHJvdmlkZSBpdHMgb3duIHNldCBvZiBwYW5lbHMsIGluXG4gIC8vIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0IG9uZSAoZS5nLiAkZmlsdGVyKTpcbiAgZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYS5wYW5lbHMsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQsIHBhbmVscylcbiAgcmV0dXJuIHBhbmVsc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3RTb3VyY2Uoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRTb3VyY2VUeXBlKHNjaGVtYU9yVHlwZSkgPT09ICdvYmplY3QnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xpc3RTb3VyY2Uoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRTb3VyY2VUeXBlKHNjaGVtYU9yVHlwZSkgPT09ICdsaXN0J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSkge1xuICBjb25zdCBpZCA9IGl0ZW1bc291cmNlU2NoZW1hLmlkS2V5IHx8ICdpZCddXG4gIHJldHVybiBpZCAhPSBudWxsID8gU3RyaW5nKGlkKSA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbVVpZChzb3VyY2VTY2hlbWEsIGl0ZW0pIHtcbiAgLy8gVHJ5IHRvIHVzZSB0aGUgaXRlbSBpZCBhcyB0aGUgdWlkLCBmYWxsaW5nIGJhY2sgb24gYXV0by1nZW5lcmF0ZWQgaWRzLCBidXRcbiAgLy8gZWl0aGVyIHdheSwgcGFzcyB0aHJvdWdoIGBnZXRVaWQoKWAgc28gdGhhdCB0aGUgaWRzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlXG4gIC8vIGl0ZW0gdGhyb3VnaCBhIHdlYWsgbWFwLCBhcyB0aGUgaWRzIGNhbiBiZSBmaWx0ZXJlZCBvdXQgaW4gYHByb2Nlc3NEYXRhKClgXG4gIC8vIHdoaWxlIHRoZSBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSB1aWRzIGFzIGtleSBhcmUgc3RpbGwgdmlzaWJsZS5cbiAgcmV0dXJuIGdldFVpZChpdGVtLCBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSlcbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBWYWxpZGF0aW9uTWl4aW4gZnJvbSAnLi9WYWxpZGF0aW9uTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgY29tcHV0ZVZhbHVlIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0SXRlbSwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbGlkYXRpb25NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIC8vIE5PVEU6IFdoaWxlIGBkYXRhUGF0aGAgcG9pbnRzIHRvIHRoZSBhY3R1YWwgYHZhbHVlYCwgYGRhdGFgIHJlcHJlc2VudHNcbiAgICAvLyB0aGUgYGl0ZW1gIGluIHdoaWNoIHRoZSBgdmFsdWVgIGlzIGNvbnRhaW5lZCwgdW5kZXIgdGhlIGtleSBgbmFtZWAuXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZWRWYWx1ZTogbnVsbCxcbiAgICAgIGZvY3VzZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIHR5cGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEudHlwZVxuICAgIH0sXG5cbiAgICBjb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlVHlwZUNvbXBvbmVudCh0aGlzLnNjaGVtYS5jb21wb25lbnQpXG4gICAgfSxcblxuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiB0aGlzLm5lc3RlZCB9KVxuICAgIH0sXG5cbiAgICB2YWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShcbiAgICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgICAgdGhpcy5uYW1lLFxuICAgICAgICAgIHRoaXMuZGF0YVBhdGgsXG4gICAgICAgICAgeyBjb21wb25lbnQ6IHRoaXMgfVxuICAgICAgICApXG4gICAgICAgIGNvbnN0IHsgZm9ybWF0IH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICAvLyBgc2NoZW1hLmZvcm1hdGAgaXMgb25seSBldmVyIGNhbGxlZCBpbiB0aGUgbGlmZS1jeWNsZVxuICAgICAgICAvLyBvZiB0aGUgY29tcG9uZW50IGFuZCB0aHVzIGl0J3Mgb2sgdG8gYmluZCBpdCB0byBgdGhpc2BcbiAgICAgICAgcmV0dXJuIGZvcm1hdFxuICAgICAgICAgID8gZm9ybWF0LmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgdmFsdWUgfSkpXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHsgcGFyc2UgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIC8vIGBzY2hlbWEucGFyc2VgIGlzIG9ubHkgZXZlciBjYWxsZWQgaW4gdGhlIGxpZmUtY3ljbGVcbiAgICAgICAgLy8gb2YgdGhlIGNvbXBvbmVudCBhbmQgdGh1cyBpdCdzIG9rIHRvIGJpbmQgaXQgdG8gYHRoaXNgXG4gICAgICAgIHRoaXMucGFyc2VkVmFsdWUgPSBwYXJzZVxuICAgICAgICAgID8gcGFyc2UuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIHRoaXMuJHNldCh0aGlzLmRhdGEsIHRoaXMubmFtZSwgdGhpcy5wYXJzZWRWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBzaW1pbGFyIHRvIGBEaXRvQ29udGV4dGBcbiAgICAvLyBwcm9wZXJ0aWVzLCBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlc2Ugb24gYHRoaXNgIGFzIHdlbGw6XG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIGdldFBhcmVudEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgfSxcblxuICAgIHJvb3RJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdERhdGFcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICAgIC8vIFdlIGNhbiBvbmx5IGdldCB0aGUgcHJvY2Vzc2VkIGl0ZW1zIHRocm91Z2ggdGhlIHNjaGVtYUNvbXBvbmVudCwgYnV0XG4gICAgICAvLyB0aGF0J3Mgbm90IG5lY2Vzc2FyaWx5IHRoZSBpdGVtIHJlcHJlc2VudGVkIGJ5IHRoaXMgY29tcG9uZW50LlxuICAgICAgLy8gU29sdXRpb246IEZpbmQgdGhlIHJlbGF0aXZlIHBhdGggYW5kIHRoZSBwcm9jZXNzZWQgc3ViLWl0ZW0gZnJvbSB0aGVyZTpcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICByZXR1cm4gZ2V0SXRlbShcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50LnByb2Nlc3NlZEl0ZW0sXG4gICAgICAgIC8vIEdldCB0aGUgZGF0YVBhdGggcmVsYXRpdmUgdG8gdGhlIHNjaGVtYUNvbXBvbmVudCdzIGRhdGE6XG4gICAgICAgIHRoaXMuZGF0YVBhdGguc2xpY2Uoc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoLmxlbmd0aCksXG4gICAgICAgIHRoaXMubmVzdGVkXG4gICAgICApXG4gICAgfSxcblxuICAgIGxhYmVsOiBnZXRTY2hlbWFBY2Nlc3NvcignbGFiZWwnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBCb29sZWFuXSxcbiAgICAgIGdldChsYWJlbCkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcobGFiZWwpXG4gICAgICAgICAgPyBsYWJlbFxuICAgICAgICAgIDogbGFiZWwgIT09IGZhbHNlICYmIHRoaXMuJG9wdGlvbnMuZ2VuZXJhdGVMYWJlbFxuICAgICAgICAgICAgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB3aWR0aDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXVxuICAgIH0pLFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZU9wdGlvbnMuZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgZXhjbHVkZWRgIGZvciBjb25zaXN0ZW50IG5hbWluZ1xuICAgIGV4Y2x1ZGU6IGdldFNjaGVtYUFjY2Vzc29yKCdleGNsdWRlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICByZXF1aXJlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlcXVpcmVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBNb3ZlIHRoZXNlIHRvIGEgc3ViLWNsYXNzIGNvbXBvbmVudCB1c2VkIGZvciBhbGwgaW5wdXQgY29tcG9uZW50cz9cbiAgICByZWFkb25seTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlYWRvbmx5Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBhdXRvZm9jdXM6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvZm9jdXMnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRvIGJlIHVzZWQgZm9yIHNlbGVjdHMgYW5kIGlucHV0cyBvbmx5P1xuICAgIGNsZWFyYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NsZWFyYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcGxhY2Vob2xkZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdwbGFjZWhvbGRlcicsIHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0pLFxuXG4gICAgYXV0b2NvbXBsZXRlOiBnZXRTY2hlbWFBY2Nlc3NvcignYXV0b2NvbXBsZXRlJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyBuYXRpdmVGaWVsZCwgdGV4dEZpZWxkIH0gPSB0aGlzLiRvcHRpb25zXG5cbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG5cbiAgICAgIGlmIChuYXRpdmVGaWVsZCkge1xuICAgICAgICBhdHRyaWJ1dGVzLm5hbWUgPSB0aGlzLm5hbWVcbiAgICAgICAgaWYgKHRoaXMubGFiZWwpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnRpdGxlID0gdGhpcy5sYWJlbFxuICAgICAgICB9XG4gICAgICAgIGF0dHJpYnV0ZXMucmVhZG9ubHkgPSB0aGlzLnJlYWRvbmx5XG4gICAgICAgIGF0dHJpYnV0ZXMuYXV0b2ZvY3VzID0gdGhpcy5hdXRvZm9jdXNcbiAgICAgICAgaWYgKHRleHRGaWVsZCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyXG4gICAgICAgICAgYXR0cmlidXRlcy5hdXRvY29tcGxldGUgPSB0aGlzLmF1dG9jb21wbGV0ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH0sXG5cbiAgICBsaXN0ZW5lcnMoKSB7XG4gICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmdldExpc3RlbmVycygpXG4gICAgICBjb25zdCB7IGV2ZW50cyA9IHt9IH0gPSB0aGlzLnNjaGVtYVxuICAgICAgaWYgKGV2ZW50cykge1xuICAgICAgICAvLyBSZWdpc3RlciBjYWxsYmFja3MgZm9yIGFsbCBwcm92aWRlcyBub24tcmVjb2duaXplZCBldmVudHMsXG4gICAgICAgIC8vIGFzc3VtaW5nIHRoZXkgYXJlIG5hdGl2ZSBldmVudHMuXG4gICAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgT2JqZWN0LmtleXMoZXZlbnRzKSkge1xuICAgICAgICAgIGxpc3RlbmVyc1tldmVudF0gfHw9ICgpID0+IHRoaXMuZW1pdEV2ZW50KGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdGVuZXJzXG4gICAgfSxcblxuICAgIHZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7IC4uLnRoaXMuZ2V0VmFsaWRhdGlvbnMoKSB9XG4gICAgICBpZiAodGhpcy5yZXF1aXJlZCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yZXF1aXJlZCA9IHRydWVcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBkZWZhdWx0IHJ1bGVzIGFuZCBhZGQgYW55IG5ldyBvbmVzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEucnVsZXMgfHwge30pKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVsZXRlIHZhbGlkYXRpb25zW2tleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9uc1trZXldID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIC8vIE5PVEU6IFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiBSZXNvdXJjZU1peGluLCB1c2VkIGJ5IGxpc3RzLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIHNob3dDbGVhckJ1dHRvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyYWJsZSAmJiB0aGlzLnZhbHVlICE9IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIFByZXZlbnQgdW5uZXN0ZWQgdHlwZSBjb21wb25lbnRzIGZyb20gb3ZlcnJpZGluZyBwYXJlbnQgZGF0YSBwYXRoc1xuICAgICAgaWYgKHRoaXMubmVzdGVkKSB7XG4gICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlckNvbXBvbmVudCh0aGlzLCBhZGQpXG4gICAgICAgIC8vIEluc3RhbGwgLyByZW1vdmUgdGhlIGZpZWxkIGV2ZW50cyB0byB3YXRjaCBvZiBjaGFuZ2VzIGFuZCBoYW5kbGVcbiAgICAgICAgLy8gdmFsaWRhdGlvbiBmbGFncy4gYGV2ZW50c2AgaXMgcHJvdmlkZWQgYnkgYFZhbGlkYXRpb25NaXhpbi5ldmVudHMoKWBcbiAgICAgICAgdGhpc1thZGQgPyAnb24nIDogJ29mZiddKHRoaXMuZXZlbnRzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBnZXRMaXN0ZW5lcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBibHVyOiB0aGlzLm9uQmx1cixcbiAgICAgICAgaW5wdXQ6IHRoaXMub25JbnB1dCxcbiAgICAgICAgY2hhbmdlOiB0aGlzLm9uQ2hhbmdlXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgY29uc3QgW2VsZW1lbnRdID0gYXNBcnJheSh0aGlzLiRyZWZzLmVsZW1lbnQpXG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgZWxlbWVudC5mb2N1cygpXG4gICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgZGlzYWJsZWQsIGBmb2N1cygpYCB3aWxsIGxpa2VseSBub3QgaGF2ZSB0aGVcbiAgICAgICAgICAvLyBkZXNpcmVkIGVmZmVjdC4gVXNlIGBzY3JvbGxJbnRvVmlldygpYCBpZiBhdmFpbGFibGU6XG4gICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIChlbGVtZW50LiRlbCB8fCBlbGVtZW50KS5zY3JvbGxJbnRvVmlldz8uKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgLy8gQWxzbyBmb2N1cyB0aGlzIGNvbXBvbmVudCdzIHNjaGVtYSBhbmQgcGFuZWwgaW4gY2FzZSBpdCdzIGEgdGFiLlxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuZm9jdXMoKVxuICAgICAgdGhpcy50YWJDb21wb25lbnQ/LmZvY3VzKClcbiAgICAgIHRoaXMuZm9jdXNFbGVtZW50KClcbiAgICB9LFxuXG4gICAgY2xlYXIoKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgfSxcblxuICAgIG9uRm9jdXMoKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlXG4gICAgICB0aGlzLmVtaXRFdmVudCgnZm9jdXMnKVxuICAgIH0sXG5cbiAgICBvbkJsdXIoKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2JsdXInKVxuICAgIH0sXG5cbiAgICBvbklucHV0KCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2lucHV0JylcbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJywge1xuICAgICAgICBjb250ZXh0OiB0aGlzLnBhcnNlZFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHsgdmFsdWU6IHRoaXMucGFyc2VkVmFsdWUgfVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgLy8gUGFzcyBgc2NoZW1hQ29tcG9uZW50YCBhcyBwYXJlbnQsIHNvIGNoYW5nZSBldmVudHMgY2FuIHByb3BhZ2F0ZSB1cC5cbiAgICAgICAgcGFyZW50OiB0aGlzLnNjaGVtYUNvbXBvbmVudFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNQcm9taXNlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvTWl4aW4gZnJvbSAnLi9taXhpbnMvRGl0b01peGluLmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRUeXBlQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9zY2hlbWEuanMnXG5cbmNvbnN0IGNvbXBvbmVudHMgPSB7fVxuXG5jb25zdCBEaXRvQ29tcG9uZW50ID0gVnVlLmV4dGVuZCh7XG4gIC8vIE1ha2Ugc3VyZSB0aGF0IHJlZ2lzdGVyZWQgY29tcG9uZW50cyBhcmUgcHJlc2VudCBpbiBhbGwgRGl0b0NvbXBvbmVudC5cbiAgY29tcG9uZW50cyxcbiAgbWl4aW5zOiBbRGl0b01peGluXSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VHlwZUNvbXBvbmVudCxcblxuICAgIHJlc29sdmVDb21wb25lbnQoY29tcG9uZW50LCBtaXhpbnMgPSBbXSkge1xuICAgICAgLy8gQSBoZWxwZXIgbWV0aG9kIHRvIGFsbG93IHRocmVlIHRoaW5nczpcbiAgICAgIC8vIC0gV2hlbiB1c2VkIGluIGEgY29tcHV0ZWQgcHJvcGVydHksIGl0IHJlbW92ZXMgdGhlIG5lZWQgdG8gaGF2ZSB0b1xuICAgICAgLy8gICBsb2FkIGNvbXBvbmVudHMgd2l0aCBhc3luYyBmdW5jdGlvbnMgYGNvbXBvbmVudDogKCkgPT4gaW1wb3J0KC4uLilgLlxuICAgICAgLy8gICBpbnN0ZWFkLCB0aGV5IGNhbiBiZSBkaXJlY3RseSBwcm92aWRlZDogYGNvbXBvbmVudDogaW1wb3J0KC4uLilgXG4gICAgICAvLyAtIFRoZSBwcm9wZXJ0aWVzIHBhc3NlZCB0byBzdWNoIGNvbXBvbmVudHMgZG9uJ3QgbmVlZCB0byBiZSBkZWZpbmVkLlxuICAgICAgLy8gICBJbnN0ZWFkLCB0aGUgcHJvdmlkZWQgbWl4aW5zIGFyZSBhdXRvbWF0aWNhbGx5IGluaGVyaXRlZC5cbiAgICAgIC8vIC0gVGhlIGNvbXBvbmVudCBjYW4gdXNlIGFsbCBpbnRlcm5hbCBjb21wb25lbnRzIGtub3duIHRvIERpdG8uanMgQWRtaW4uXG4gICAgICByZXR1cm4gY29tcG9uZW50XG4gICAgICAgID8gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIC8vIEF0IGZpcnN0LCByZXNvbHZlIGNvbXBvbmVudCBpcyBpdCBpcyBsb2FkZWQgYXN5bmNocm9ub3VzbHkuXG4gICAgICAgICAgbGV0IGNvbXAgPSBpc0Z1bmN0aW9uKGNvbXBvbmVudCkgPyBhd2FpdCBjb21wb25lbnQoKVxuICAgICAgICAgICAgOiBpc1Byb21pc2UoY29tcG9uZW50KSA/IGF3YWl0IGNvbXBvbmVudFxuICAgICAgICAgICAgOiBjb21wb25lbnRcbiAgICAgICAgICBjb21wID0gY29tcD8uZGVmYXVsdCB8fCBjb21wXG4gICAgICAgICAgY29tcC5taXhpbnMgPSBtaXhpbnNcbiAgICAgICAgICBjb21wLmNvbXBvbmVudHMgPSBjb21wb25lbnRzXG4gICAgICAgICAgcmV0dXJuIGNvbXBcbiAgICAgICAgfVxuICAgICAgICA6IGNvbXBvbmVudFxuICAgIH0sXG5cbiAgICByZXNvbHZlRGl0b0NvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVDb21wb25lbnQoY29tcG9uZW50LCBbRGl0b01peGluXSlcbiAgICB9LFxuXG4gICAgcmVzb2x2ZVR5cGVDb21wb25lbnQoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlQ29tcG9uZW50KGNvbXBvbmVudCwgW0RpdG9NaXhpbiwgVHlwZU1peGluXSlcbiAgICB9XG4gIH1cbn0pXG5cbkRpdG9Db21wb25lbnQuY29tcG9uZW50ID0gZnVuY3Rpb24obmFtZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICBuYW1lLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH1cbiAgICBjb25zdCBjdG9yID0gdGhpcy5leHRlbmQob3B0aW9ucylcbiAgICBjb21wb25lbnRzW25hbWVdID0gY3RvclxuICAgIHJldHVybiBjdG9yXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudHNbbmFtZV0gfHwgVnVlLmNvbXBvbmVudChuYW1lKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnRcbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9Vc2VyIHtcbiAgaGFzUm9sZSguLi5yb2xlcykge1xuICAgIGlmICh0aGlzLnJvbGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHJvbGUgb2Ygcm9sZXMpIHtcbiAgICAgICAgaWYgKHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjaGVtYUNvbXBvbmVudHM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbWFpblNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHNbMF1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBgRGl0b1NjaGVtYS5jcmVhdGVkKCkvZGVzdHJveWVkKClgIG9uIGl0c1xuICAgIC8vICRwYXJlbnQsIGlmIHRoZSBwYXJlbnQgdXNlcyB0aGUgYFNjaGVtYVBhcmVudE1peGluYDpcbiAgICBfcmVnaXN0ZXJTY2hlbWFDb21wb25lbnQoc2NoZW1hQ29tcG9uZW50LCBhZGQpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50cyB9ID0gdGhpc1xuICAgICAgaWYgKGFkZCkge1xuICAgICAgICBzY2hlbWFDb21wb25lbnRzLnB1c2goc2NoZW1hQ29tcG9uZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50cy5zcGxpY2Uoc2NoZW1hQ29tcG9uZW50cy5pbmRleE9mKHNjaGVtYUNvbXBvbmVudCksIDEpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi9TY2hlbWFQYXJlbnRNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbU2NoZW1hUGFyZW50TWl4aW5dLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZXJyb3JzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQsIHsgZXJyb3JzIH0pID0+XG4gICAgICAgICAgZXJyb3JzICYmIHJlc3VsdCA/IHJlc3VsdC5jb25jYXQoZXJyb3JzKSA6IGVycm9ycyxcbiAgICAgICAgbnVsbFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5zb21lKGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQudmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSkpXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52ZXJpZnlBbGwobWF0Y2gpKVxuICAgIH0sXG5cbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5yZXNldFZhbGlkYXRpb24oKSlcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5jbGVhckVycm9ycygpKVxuICAgIH0sXG5cbiAgICBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChcbiAgICAgICAgaXQgPT4gaXQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cylcbiAgICAgIClcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRDb21tb25QcmVmaXggfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtWYWxpZGF0b3JNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlVXBkYXRlKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgdGhpcy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBiZWZvcmVSb3V0ZUxlYXZlKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgdGhpcy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZWxvYWQ6IGZhbHNlLFxuICAgICAgLy8gRWFjaCByb3V0ZS1jb21wb25lbnQgZGVmaW5lcyBhIHN0b3JlIHRoYXQgZ2V0cyBwYXNzZWQgb24gdG8gaXRzXG4gICAgICAvLyBjaGlsZCBjb21wb25lbnRzLCBzbyB0aGV5IGNhbiBzdG9yZSB2YWx1ZXMgaW4gdGhlbSB0aGF0IGxpdmUgYmV5b25kXG4gICAgICAvLyB0aGVpciBsaWZlLWN5Y2xlLiBTZWU6IERpdG9QYW5lLCBTb3VyY2VNaXhpblxuICAgICAgc3RvcmU6IHt9LFxuICAgICAgbG9hZENhY2hlOiB7fSAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgcm91dGVDb21wb25lbnQoKSB3aGljaCB1c2VzIHRoZSBpbmplY3RlZCB2YWx1ZS5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJvdXRlUmVjb3JkKCkge1xuICAgICAgLy8gVE9ETzogQ2FuIHRoaXMuJHJvdXRlLmN1cnJlbnRSb3V0ZSBiZSBvZiB1c2Ugc29tZXdoZXJlIGhlcmU/XG4gICAgICAvLyBSZXRyaWV2ZSB0aGUgcm91dGUtcmVjb3JkIHRvIHdoaWNoIHRoaXMgY29tcG9uZW50IHdhcyBtYXBwZWQgdG86XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTMzOCNpc3N1ZWNvbW1lbnQtMjk2MzgxNDU5XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUubWF0Y2hlZFt0aGlzLiR2bm9kZS5kYXRhLnJvdXRlclZpZXdEZXB0aF1cbiAgICB9LFxuXG4gICAgaXNMYXN0Um91dGUoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGlzIHJvdXRlciBjb21wb25lbnQgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSByb3V0ZS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkID09PSBtYXRjaGVkW21hdGNoZWQubGVuZ3RoIC0gMV1cbiAgICB9LFxuXG4gICAgaXNMYXN0VW5uZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHJvdXRlIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlIHRoYXRcbiAgICAgIC8vIG5lZWRzIGl0cyBvd24gcm91dGVyLXZpZXcgKD0gaXMgbm90IG5lc3RlZCkuXG4gICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlXG4gICAgICBmb3IgKGxldCBpID0gbWF0Y2hlZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBtYXRjaGVkW2ldXG4gICAgICAgIGlmICghcmVjb3JkLm1ldGEubmVzdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IHJlY29yZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgaXNOZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEubmVzdGVkXG4gICAgfSxcblxuICAgIG1ldGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZD8ubWV0YVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Um91dGVQYXRoKHRoaXMucm91dGVSZWNvcmQucGF0aClcbiAgICB9LFxuXG4gICAgbGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYigpIHtcbiAgICAgIGNvbnN0IHsgYnJlYWRjcnVtYiB9ID0gdGhpcy5zY2hlbWEgfHwge31cbiAgICAgIHJldHVybiBicmVhZGNydW1iIHx8IGAke3RoaXMuYnJlYWRjcnVtYlByZWZpeH0gJHt0aGlzLmxhYmVsfWBcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYlByZWZpeCgpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH0sXG5cbiAgICBwYXJhbSgpIHtcbiAgICAgIC8vIFdvcmthcm91bmQgZm9yIHZ1ZS1yb3V0ZXIgbm90IGJlaW5nIGFibGUgdG8gbWFwIG11bHRpcGxlIHVybCBwYXJhbWV0ZXJzXG4gICAgICAvLyB3aXRoIHRoZSBzYW1lIG5hbWUgdG8gbXVsdGlwbGUgY29tcG9uZW50cywgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzNDVcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5wYXJhbXNbdGhpcy5tZXRhPy5wYXJhbV0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGUsIHNlZSBEaXRvRm9ybVxuICAgIGRvZXNNdXRhdGUoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBLZWVwIGEgc2hhcmVkIHN0YWNrIG9mIHJvb3QgY29tcG9uZW50cyBmb3IgRGl0b1RyYWlsIHRvIHVzZSB0byByZW5kZXJcbiAgICAvLyBsYWJlbHMuIENhbid0IHJlbHkgb24gJHJvdXRlLm1hdGNoZWRbaV0uaW5zdGFuY2VzLmRlZmF1bHQgdW5mb3J0dW5hdGVseSxcbiAgICAvLyBhcyBpbnN0YW5jZXMgYXJlbid0IGltbWVkaWF0ZWx5IHJlYWR5LCBhbmQgaW5zdGFuY2VzIGlzIG5vdCByZWFjdGl2ZS5cbiAgICB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5wdXNoKHRoaXMpXG4gIH0sXG5cbiAgZGVzdHJveWVkKCkge1xuICAgIGNvbnN0IHsgcm91dGVDb21wb25lbnRzIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgcm91dGVDb21wb25lbnRzLnNwbGljZShyb3V0ZUNvbXBvbmVudHMuaW5kZXhPZih0aGlzKSwgMSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgYmVmb3JlUm91dGVDaGFuZ2UodG8sIGZyb20sIG5leHQpIHtcbiAgICAgIGxldCBvayA9IHRydWVcbiAgICAgIGNvbnN0IGlzQ2xvc2luZyA9IChcbiAgICAgICAgLy8gT25seSBoYW5kbGUgdGhpcyByb3V0ZSBjaGFuZ2UgaWYgdGhlIGZvcm0gaXMgYWN0dWFsbHkgbWFwcGVkIHRvIHRoZVxuICAgICAgICAvLyBgZnJvbWAgcm91dGUsIGJ1dCBpbmNsdWRlIHBhcmVudCBmb3JtcyBvZiBjbG9zaW5nIG5lc3RlZCBmb3JtcyBhcyBhc1xuICAgICAgICAvLyB3ZWxsLCBieSBtYXRjaGluZyB0aGUgdGhlIHN0YXJ0IG9mIGZyb20vdG8gcGF0aCBhZ2FpbnN0IGB0aGlzLnBhdGhgOlxuICAgICAgICBmcm9tLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgICF0by5wYXRoLnN0YXJ0c1dpdGgodGhpcy5wYXRoKSAmJlxuICAgICAgICAvLyBFeGNsdWRlIGhhc2ggY2hhbmdlcyBvbmx5ICg9IHRhYiBjaGFuZ2VzKTpcbiAgICAgICAgZnJvbS5wYXRoICE9PSB0by5wYXRoICYmIChcbiAgICAgICAgICB0aGlzLmlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSB8fFxuICAgICAgICAgIC8vIERlY2lkZSBpZiB3ZSdyZSBtb3ZpbmcgdG93YXJkcyBhIG5ldyBuZXN0ZWQgZm9ybSwgb3IgY2xvc2luZyAvXG4gICAgICAgICAgLy8gcmVwbGFjaW5nIGFuIGFscmVhZHkgb3BlbiBvbmUgYnkgY29tcGFyaW5nIHBhdGggbGVuZ3Rocy5cbiAgICAgICAgICAvLyBUaGUgY2FzZSBvZiBgPWAgbWF0Y2hlcyB0aGUgcmVwbGFjaW5nIG9mIGFuIGFscmVhZHkgb3BlbiBvbmUuXG4gICAgICAgICAgdG8ucGF0aC5sZW5ndGggPD0gZnJvbS5wYXRoLmxlbmd0aFxuICAgICAgICApXG4gICAgICApXG4gICAgICBpZiAoaXNDbG9zaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmRvZXNNdXRhdGUpIHtcbiAgICAgICAgICAvLyBGb3IgYWN0aXZlIGRpcmVjdGx5IG11dGF0aW5nIChuZXN0ZWQpIGZvcm1zIHRoYXQgd2VyZSBub3QgdmFsaWRhdGVkXG4gICAgICAgICAgLy8geWV0LCB2YWxpZGF0ZSB0aGVtIG9uY2UuIElmIHRoZSB1c2VyIHRoZW4gc3RpbGwgd2FudHMgdG8gbGVhdmVcbiAgICAgICAgICAvLyB0aGVtLCB0aGV5IGNhbiBjbGljayBjbG9zZSAvIG5hdmlnYXRlIGF3YXkgYWdhaW4uXG4gICAgICAgICAgb2sgPSAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRhdGVkIHx8XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlQWxsKClcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVGhlIGZvcm0gZG9lc24ndCBkaXJlY3RseSBtdXRhdGUgZGF0YS4gSWYgaXQgaXMgZGlydHksIGFzayBpZiB1c2VyXG4gICAgICAgICAgLy8gd2FudHMgdG8gcGVyc2lzdCBkYXRhIGZpcnN0LlxuICAgICAgICAgIGlmICh0aGlzLmlzRGlydHkpIHtcbiAgICAgICAgICAgIG9rID0gd2luZG93LmNvbmZpcm0oXG4gICAgICAgICAgICAgIGBZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMuIERvIHlvdSByZWFsbHkgd2FudCB0byAke1xuICAgICAgICAgICAgICAgIHRoaXMudmVyYnMuY2FuY2VsXG4gICAgICAgICAgICAgIH0/YFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV4dChvaylcbiAgICB9LFxuXG4gICAgZ2V0Um91dGVQYXRoKHRlbXBsYXRlUGF0aCkge1xuICAgICAgLy8gTWFwcyB0aGUgcm91dGUncyBhY3R1YWwgcGF0aCB0byB0aGUgbWF0Y2hlZCByb3V0ZXMgYnkgY291bnRpbmcgaXRzXG4gICAgICAvLyBwYXJ0cyBzZXBhcmF0ZWQgYnkgJy8nLCBzcGxpdHRpbmcgdGhlIHBhdGggaW50byB0aGUgbWFwcGVkIHBhcnRzXG4gICAgICAvLyBjb250YWluaW5nIGFjdHVhbCBwYXJhbWV0ZXJzLlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGhcbiAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgLnNsaWNlKDAsIHRlbXBsYXRlUGF0aC5zcGxpdCgnLycpLmxlbmd0aClcbiAgICAgICAgLmpvaW4oJy8nKVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHtcbiAgICAgIC8vIFRoZSByb3V0ZSBwYXRoIGlzIHRoZSBwYXRoIHVwIHRvIHRoZSBmaXJzdCAvIChleGNsdWRpbmcgdGhlIGluaXRpYWwgLyk6XG4gICAgICBjb25zdCByb290UGF0aCA9IHRoaXMucGF0aC5tYXRjaCgvXihcXC9bXi9dKikvKVsxXVxuICAgICAgcmV0dXJuICFnZXRDb21tb25QcmVmaXgodG8ucGF0aCwgZnJvbS5wYXRoKS5zdGFydHNXaXRoKHJvb3RQYXRoKVxuICAgIH1cbiAgfVxufVxuIiwiXG4vLyBPbmx5IHJlbmRlciBEaXRvVmlldyB3aGVuIGl0IGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIGEgbm9ybWFsIHJvdXRlci12aWV3XG4vLyBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbi8vIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuLy8gdXNlZCB0byBhbHdheXMgcmVuZGVyIGZvcm1zIGV2ZW4gd2hlbiBvdGhlciBuZXN0ZWQgZm9ybXMgYXJlIHByZXNlbnQuXG5yb3V0ZXItdmlldyhcbiAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gIDprZXk9XCJuYW1lXCJcbilcbi5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICB2LWVsc2UtaWY9XCJzaG91bGRSZW5kZXIodmlld1NjaGVtYSlcIlxuKVxuICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICA6c2NoZW1hPVwidmlld1NjaGVtYVwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUobmFtZSlcIlxuICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vIE9ubHkgcmVuZGVyIERpdG9WaWV3IHdoZW4gaXQgaXMgYWN0aXZlLCBvdGhlcndpc2UgYSBub3JtYWwgcm91dGVyLXZpZXdcbiAgLy8gaW5zdGVhZCwgdG8gbmVzdCBmdXJ0aGVyIHJvdXRlIGNvbXBvbmVudHMuXG4gIC8vIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuICAvLyB1c2VkIHRvIGFsd2F5cyByZW5kZXIgZm9ybXMgZXZlbiB3aGVuIG90aGVyIG5lc3RlZCBmb3JtcyBhcmUgcHJlc2VudC5cbiAgcm91dGVyLXZpZXcoXG4gICAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gICAgOmtleT1cIm5hbWVcIlxuICApXG4gIC5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICAgIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlcih2aWV3U2NoZW1hKVwiXG4gIClcbiAgICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICAgIDpzY2hlbWE9XCJ2aWV3U2NoZW1hXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShuYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICAgICAgOm1lbnVIZWFkZXI9XCJ0cnVlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSb3V0ZU1peGluIGZyb20gJy4uL21peGlucy9Sb3V0ZU1peGluLmpzJ1xuaW1wb3J0IHsgc29tZVNjaGVtYUNvbXBvbmVudCwgaXNTaW5nbGVDb21wb25lbnRWaWV3IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXZpZXcnLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgLy8gUmVkaXJlY3QgJHNvdXJjZUNvbXBvbmVudCBhbmQgJHJlc291cmNlQ29tcG9uZW50IHRvIHRoZSBtYWluIGNvbXBvbmVudDpcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5zb3VyY2VDb21wb25lbnQgfHwgbnVsbCxcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5yZXNvdXJjZUNvbXBvbmVudCB8fCBudWxsXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmlldzogdHJ1ZSxcbiAgICAgIC8vIFVwZGF0ZWQgZnJvbSBMb2FkaW5nTWl4aW4gdGhyb3VnaCBgc2V0TG9hZGluZyhpc0xvYWRpbmcpYDpcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAvLyBOT1RFOiBEYXRhIGlzIHNoYXJlZCBhY3Jvc3MgYWxsIHZpZXdzIGJlY2F1c2UgdGhlIHJvdXRlciByZWN5Y2xlcyB0aGVcbiAgICAgIC8vIERpdG9WaWV3IGNvbXBvbmVudC5cbiAgICAgIGRhdGE6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5zY2hlbWFcbiAgICB9LFxuXG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50VmlldygpIHtcbiAgICAgIHJldHVybiBpc1NpbmdsZUNvbXBvbmVudFZpZXcodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIG1haW5Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5RGF0YVBhdGgodGhpcy5uYW1lKVxuICAgIH0sXG5cbiAgICB2aWV3U2NoZW1hKCkge1xuICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHRoaXNcbiAgICAgIC8vIFRyYW5zbGF0ZSBzaW5nbGUtY29tcG9uZW50IHNjaGVtYXMgaW50byBtdWx0aS1jb21wb25lbnQgc2NoZW1hcyxcbiAgICAgIC8vIHNvIHRoZXkgY2FuIGJlIHJlbmRlcmVkIGRpcmVjdGx5IHRocm91Z2ggRGl0b1NjaGVtYSBhbHNvOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgIG5hbWU6IHNjaGVtYS5uYW1lLFxuICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgIFtzY2hlbWEubmFtZV06IHtcbiAgICAgICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgICAgICBsYWJlbDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgOiBzY2hlbWFcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgcmV0dXJuIHNvbWVTY2hlbWFDb21wb25lbnQoXG4gICAgICAgIHRoaXMudmlld1NjaGVtYSxcbiAgICAgICAgY29tcG9uZW50ID0+IGhhc1Jlc291cmNlKGNvbXBvbmVudClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGUodG8sIGZyb20pIHtcbiAgICAgIC8vIFNlZSBpZiB0aGUgcm91dGUgY2hhbmdlcyBjb21wbGV0ZWx5LCBhbmQgY2xlYXIgdGhlIGRhdGEgaWYgaXQgZG9lcy5cbiAgICAgIGlmICh0aGlzLmlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSkge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGF0YSA9IHt9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRQYXRoKHBhdGgpIHtcbiAgICAgIC8vIExpc3RzIGluc2lkZSBzaW5nbGUtY29tcG9uZW50IHZpZXdzIHVzZSB0aGUgdmlldydzIHBhdGggZm9yIHN1Yi1wYXRoczpcbiAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50Vmlld1xuICAgICAgICA/IHRoaXMucGF0aFxuICAgICAgICA6IGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJ0BkaXRvanMvdWknXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRvbUhhbmRsZXJzOiBbXVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIGZvciAoY29uc3QgeyByZW1vdmUgfSBvZiB0aGlzLmRvbUhhbmRsZXJzKSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgICB0aGlzLmRvbUhhbmRsZXJzID0gW11cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZG9tT24oZWxlbWVudCwgdHlwZSwgaGFuZGxlcikge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYWRkRXZlbnRzKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBpc09iamVjdCh0eXBlKSA/IHR5cGUgOiB7IFt0eXBlXTogaGFuZGxlciB9XG4gICAgICApXG4gICAgICB0aGlzLmRvbUhhbmRsZXJzLnB1c2gocmVzdWx0KVxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1yb290XG4gIG1vZGFscy1jb250YWluZXJcbiAgbm90aWZpY2F0aW9ucy5kaXRvLW5vdGlmaWNhdGlvbnMoXG4gICAgcmVmPVwibm90aWZpY2F0aW9uc1wiXG4gICAgcG9zaXRpb249XCJ0b3AgcmlnaHRcIlxuICAgIGNsYXNzZXM9XCJkaXRvLW5vdGlmaWNhdGlvblwiXG4gIClcbiAgZGl0by1tZW51XG4gIG1haW4uZGl0by1wYWdlLmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgIGRpdG8taGVhZGVyKFxuICAgICAgOnNwaW5uZXI9XCJvcHRpb25zLnNwaW5uZXJcIlxuICAgICAgOmlzTG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgKVxuICAgICAgZGl0by1hY2NvdW50KFxuICAgICAgICB2LWlmPVwidXNlclwiXG4gICAgICApXG4gICAgICBhLmRpdG8tbG9naW4oXG4gICAgICAgIHYtZWxzZS1pZj1cImFsbG93TG9naW5cIlxuICAgICAgICBAY2xpY2s9XCJyb290Q29tcG9uZW50LmxvZ2luKClcIlxuICAgICAgKVxuICAgICAgICBzcGFuIExvZ2luXG4gICAgcm91dGVyLXZpZXdcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXJvb3RcbiAgICBtb2RhbHMtY29udGFpbmVyXG4gICAgbm90aWZpY2F0aW9ucy5kaXRvLW5vdGlmaWNhdGlvbnMoXG4gICAgICByZWY9XCJub3RpZmljYXRpb25zXCJcbiAgICAgIHBvc2l0aW9uPVwidG9wIHJpZ2h0XCJcbiAgICAgIGNsYXNzZXM9XCJkaXRvLW5vdGlmaWNhdGlvblwiXG4gICAgKVxuICAgIGRpdG8tbWVudVxuICAgIG1haW4uZGl0by1wYWdlLmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgICAgZGl0by1oZWFkZXIoXG4gICAgICAgIDpzcGlubmVyPVwib3B0aW9ucy5zcGlubmVyXCJcbiAgICAgICAgOmlzTG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgICApXG4gICAgICAgIGRpdG8tYWNjb3VudChcbiAgICAgICAgICB2LWlmPVwidXNlclwiXG4gICAgICAgIClcbiAgICAgICAgYS5kaXRvLWxvZ2luKFxuICAgICAgICAgIHYtZWxzZS1pZj1cImFsbG93TG9naW5cIlxuICAgICAgICAgIEBjbGljaz1cInJvb3RDb21wb25lbnQubG9naW4oKVwiXG4gICAgICAgIClcbiAgICAgICAgICBzcGFuIExvZ2luXG4gICAgICByb3V0ZXItdmlld1xuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9zdHlsZS5zYXNzJ1xuXG4gIC5kaXRvLXJvb3RcbiAgICBoZWlnaHQ6IDEwMCVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tcGFnZVxuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZFxuICAgICAgLy8gVGhlIHJvb3QtbGV2ZWwgdmlld3MgYW5kIGZvcm1zIG1heSBoYXZlIGEgYC5kaXRvLXNjaGVtYS1oZWFkZXJgIHRoYXRcbiAgICAgIC8vIHNob3VsZCBhcHBlYXIgbGF5ZXJlZCBvdmVyIGAuZGl0by1tZW51YCwgd2hpbGUgaGF2aW5nIGBvdmVybGF5OiBoaWRkZW5gXG4gICAgICAvLyBzZXQgYnkgYC5kaXRvLXNjcm9sbC1wYXJlbnRgIHRvIGRlbGVnYXRlIHNjcm9sbGluZyB0byBgLmRpdG8tc2Nyb2xsYC5cbiAgICAgIC8vIEluIG9yZGVyIHRvIG5vdCBoYXZlIHRoZSBoZWFkZXIgY2xpcHBlZCwgYWRqdXN0IHRoZSB0b3AgaGVyZTpcbiAgICAgID4gLmRpdG8tZm9ybSxcbiAgICAgID4gLmRpdG8tdmlld1xuICAgICAgICBtYXJnaW4tdG9wOiAtJG1lbnUtaGVpZ2h0XG4gICAgICAgIHBhZGRpbmctdG9wOiAkbWVudS1oZWlnaHRcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBhc0FycmF5LCBzdHJpcFRhZ3MgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvVXNlciBmcm9tICcuLi9EaXRvVXNlci5qcydcbmltcG9ydCBEaXRvVmlldyBmcm9tICcuLi9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSdcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBwcm9jZXNzVmlldywgcmVzb2x2ZVNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1yb290Jywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHZpZXdzOiAoKSA9PiB0aGlzLnJlc29sdmVkVmlld3NcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB1bnJlc29sdmVkVmlld3M6IHsgdHlwZTogW09iamVjdCwgRnVuY3Rpb24sIFByb21pc2VdLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG9wdGlvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZXNvbHZlZFZpZXdzOiB7fSxcbiAgICAgIGFsbG93TG9naW46IGZhbHNlLFxuICAgICAgbG9hZGluZ0NvdW50OiAwXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLm5vdGlmaWNhdGlvbnNcbiAgICB9LFxuXG4gICAgaXNMb2FkaW5nKCkge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGluZ0NvdW50ID4gMFxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuYXBwU3RhdGUudGl0bGUgPSBkb2N1bWVudC50aXRsZSB8fCAnRGl0by5qcyBBZG1pbidcbiAgICAvLyBXaXRoIGhvdC1yZWxvYWRpbmcsIGl0IGxvb2tzIGxpa2UgZGVzdHJveWVkIGhvb2tzIGFyZW4ndCBhbHdheXMgY2FsbGVkXG4gICAgLy8gZm9yIHJvdXRlIGNvbXBvbmVudHMgc28gcmVzZXQgdGhlIGFycmF5IG9mIHJlZ2lzdGVyZWQgY29tcG9uZW50cyBpbnN0ZWFkLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzID0gW11cbiAgfSxcblxuICBhc3luYyBtb3VudGVkKCkge1xuICAgIC8vIENsZWFyIHRoZSBsYWJlbCBtYXJrZWQgYXMgYWN0aXZlIG9uIGFsbCBtb3VzZSBhbmQga2V5Ym9hcmQgZXZlbnRzLCBleGNlcHRcbiAgICAvLyB0aGUgb25lcyB0aGF0IERpdG9MYWJlbCBpdHNlbGYgaW50ZXJjZXB0cy5cbiAgICB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICBjbGljazogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5jbG9zZXN0KCcuZGl0by1sYWJlbCcpKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAga2V5dXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdUYWInKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuYWxsb3dMb2dpbiA9IGZhbHNlXG4gICAgICBpZiAoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgIH1cbiAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG5vdGlmeSh7IHR5cGUgPSAnaW5mbycsIHRpdGxlLCB0ZXh0IH0gPSB7fSkge1xuICAgICAgdGl0bGUgfHw9IHtcbiAgICAgICAgd2FybmluZzogJ1dhcm5pbmcnLFxuICAgICAgICBlcnJvcjogJ0Vycm9yJyxcbiAgICAgICAgaW5mbzogJ0luZm9ybWF0aW9uJyxcbiAgICAgICAgc3VjY2VzczogJ1N1Y2Nlc3MnXG4gICAgICB9W3R5cGVdIHx8ICdOb3RpZmljYXRpb24nXG4gICAgICB0ZXh0ID0gYDxwPiR7XG4gICAgICAgIGFzQXJyYXkodGV4dCkuam9pbignPC9wPiA8cD4nKVxuICAgICAgfTwvcD5gLnJlcGxhY2UoL1xcbnxcXHJcXG58XFxyL2csICc8YnI+JylcbiAgICAgIGNvbnN0IGxvZyA9IHtcbiAgICAgICAgd2FybmluZzogJ3dhcm4nLFxuICAgICAgICBlcnJvcjogJ2Vycm9yJyxcbiAgICAgICAgaW5mbzogJ2xvZycsXG4gICAgICAgIHN1Y2Nlc3M6ICdsb2cnXG4gICAgICB9W3R5cGVdIHx8ICdlcnJvcidcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlW2xvZ10oc3RyaXBUYWdzKHRleHQpKVxuICAgICAgY29uc3QgeyBub3RpZmljYXRpb25zID0gdHJ1ZSB9ID0gdGhpcy5hcGlcbiAgICAgIGlmIChub3RpZmljYXRpb25zKSB7XG4gICAgICAgIC8vIENhbGN1bGF0ZSBkaXNwbGF5LWR1cmF0aW9uIGZvciB0aGUgbm90aWZpY2F0aW9uIGJhc2VkIG9uIGl0cyBjb250ZW50XG4gICAgICAgIC8vIGFuZCB0aGUgc2V0dGluZyBvZiB0aGUgYGR1cmF0aW9uRmFjdG9yYCBjb25maWd1cmF0aW9uLiBJdCBkZWZpbmVzIHRoZVxuICAgICAgICAvLyBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIG11bHRpcGxpZWQgd2l0aCB0aGUgYW1vdW50IG9mIGNoYXJhY3RlcnNcbiAgICAgICAgLy8gZGlzcGxheWVkIGluIHRoZSBub3RpZmljYXRpb24sIHBsdXMgNDAgKDQwICsgdGl0bGUgKyBtZXNzYWdlKTpcbiAgICAgICAgY29uc3QgeyBkdXJhdGlvbkZhY3RvciA9IDIwIH0gPSBub3RpZmljYXRpb25zXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKDQwICsgdGV4dC5sZW5ndGggKyB0aXRsZS5sZW5ndGgpICogZHVyYXRpb25GYWN0b3JcbiAgICAgICAgdGhpcy4kbm90aWZ5KHsgdHlwZSwgdGl0bGUsIHRleHQsIGR1cmF0aW9uIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5kZXN0cm95QWxsKClcbiAgICB9LFxuXG4gICAgcmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5sb2FkaW5nQ291bnQgKz0gaXNMb2FkaW5nID8gMSA6IC0xXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ2luKCkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gdHJ1ZVxuICAgICAgY29uc3Qge1xuICAgICAgICBhZGRpdGlvbmFsQ29tcG9uZW50cyxcbiAgICAgICAgcmVkaXJlY3RBZnRlckxvZ2luXG4gICAgICB9ID0gdGhpcy5vcHRpb25zLmxvZ2luIHx8IHt9XG4gICAgICBjb25zdCBsb2dpbkRhdGEgPSBhd2FpdCB0aGlzLnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgdXNlcm5hbWU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFzc3dvcmQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdwYXNzd29yZCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLmFkZGl0aW9uYWxDb21wb25lbnRzXG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICBjYW5jZWw6IHt9LFxuICAgICAgICAgIGxvZ2luOiB7IHR5cGU6ICdzdWJtaXQnIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGlmIChsb2dpbkRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ2luLFxuICAgICAgICAgICAgZGF0YTogbG9naW5EYXRhLFxuICAgICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChyZWRpcmVjdEFmdGVyTG9naW4pIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLnJlcGxhY2UocmVkaXJlY3RBZnRlckxvZ2luKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFVzZXIocmVzcG9uc2UuZGF0YS51c2VyKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlVmlld3MoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBlcnIucmVzcG9uc2U/LmRhdGE/LmVycm9yXG4gICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgICAgdGV4dDogZXJyb3IgfHwgZXJyXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLnJlc3BvbnNlKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZ2luKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZUhvbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSgnLycpXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ291dCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ291dCxcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5zZXRVc2VyKG51bGwpXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVXNlcigpIHtcbiAgICAgIGxldCB1c2VyID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMuc2Vzc2lvbixcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICB1c2VyID0gcmVzcG9uc2UuZGF0YS51c2VyIHx8IG51bGxcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICB0aXRsZTogJ0F1dGhlbnRpY2F0aW9uIEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBlcnJcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0VXNlcih1c2VyKVxuICAgICAgcmV0dXJuIHVzZXJcbiAgICB9LFxuXG4gICAgc2V0VXNlcih1c2VyKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLnVzZXIgPSAoXG4gICAgICAgIHVzZXIgJiZcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHVzZXIsIERpdG9Vc2VyLnByb3RvdHlwZSlcbiAgICAgIClcbiAgICAgIC8vIENsZWFyIHJlc29sdmVkIHZpZXdzIHdoZW4gdXNlciBpcyBsb2dnZWQgb3V0LlxuICAgICAgaWYgKCF1c2VyKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IHt9XG4gICAgICAgIHRoaXMubmF2aWdhdGVIb21lKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZW5zdXJlVXNlcigpIHtcbiAgICAgIGlmICghKGF3YWl0IHRoaXMuZmV0Y2hVc2VyKCkpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlVmlld3MoKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnJlc29sdmVkVmlld3MgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyh0aGlzLnVucmVzb2x2ZWRWaWV3cylcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghZXJyb3IucmVxdWVzdCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgICAgLy8gQ29sbGVjdCBhbGwgcm91dGVzIGZyb20gdGhlIHJvb3Qgc2NoZW1hIGNvbXBvbmVudHNcbiAgICAgIGNvbnN0IHJvdXRlcyA9IFtdXG4gICAgICBjb25zdCBwcm9taXNlcyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBzY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucmVzb2x2ZWRWaWV3cykpIHtcbiAgICAgICAgcHJvbWlzZXMucHVzaChwcm9jZXNzVmlldyhEaXRvVmlldywgdGhpcy5hcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzKSlcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXMpIHtcbiAgICAgICAgdGhpcy4kcm91dGVyLmFkZFJvdXRlKHJvdXRlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5uYXYuZGl0by1tZW51LmRpdG8tc2Nyb2xsLXBhcmVudFxuICBoMSB7eyBhcHBTdGF0ZS50aXRsZSB9fVxuICB1bC5kaXRvLXNjcm9sbFxuICAgIGxpKHYtZm9yPVwidmlldyBpbiB2aWV3c1wiKVxuICAgICAgcm91dGVyLWxpbmsuZGl0by1saW5rKFxuICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHZpZXcpXCJcbiAgICAgICAgOnRvPVwiYC8ke3ZpZXcucGF0aH1gXCJcbiAgICAgICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICAgICAgKSB7eyBnZXRMYWJlbCh2aWV3KSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgbmF2LmRpdG8tbWVudS5kaXRvLXNjcm9sbC1wYXJlbnRcbiAgICBoMSB7eyBhcHBTdGF0ZS50aXRsZSB9fVxuICAgIHVsLmRpdG8tc2Nyb2xsXG4gICAgICBsaSh2LWZvcj1cInZpZXcgaW4gdmlld3NcIilcbiAgICAgICAgcm91dGVyLWxpbmsuZGl0by1saW5rKFxuICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodmlldylcIlxuICAgICAgICAgIDp0bz1cImAvJHt2aWV3LnBhdGh9YFwiXG4gICAgICAgICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICAgICAgICApIHt7IGdldExhYmVsKHZpZXcpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tbWVudVxuICAgIGZsZXg6IGluaXRpYWxcbiAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB1bFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXJcbiAgICAgIGJvcmRlci1yaWdodDogJGJvcmRlci1zdHlsZVxuICAgIGEsXG4gICAgaDFcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgaDFcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXJcbiAgICAgIGJvcmRlci1yaWdodDogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItZGFya2VzdFxuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5kaXRvLWxpbmtcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgLmRpdG8tbGlua1xuICAgICY6Zm9jdXM6bm90KDphY3RpdmUpOm5vdCguZGl0by1hY3RpdmUpXG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLW1lbnUnLCB7fSlcbjwvc2NyaXB0PlxuIiwiXG48ZGl2IGNsYXNzPVwidi1zcGlubmVyXCIgdi1zaG93PVwibG9hZGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UxXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkxXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UyXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkyXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UzXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkzXVwiPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiIsIjx0ZW1wbGF0ZT5cbjxkaXYgY2xhc3M9XCJ2LXNwaW5uZXJcIiB2LXNob3c9XCJsb2FkaW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTFcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTFdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTJcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTJdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTNcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTNdXCI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXG4gIG5hbWU6ICdQdWxzZUxvYWRlcicsXG5cbiAgcHJvcHM6IHtcbiAgICBsb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgY29sb3I6IHsgXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnIzVkYzU5NidcbiAgICB9LFxuICAgIHNpemU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcxNXB4J1xuICAgIH0sXG4gICAgbWFyZ2luOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMnB4J1xuICAgIH0sXG4gICAgcmFkaXVzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMTAwJSdcbiAgICB9XG4gIH0sXG4gIGRhdGEgKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzcGlubmVyU3R5bGU6IHtcbiAgICAgIFx0YmFja2dyb3VuZENvbG9yOiB0aGlzLmNvbG9yLFxuICAgICAgXHR3aWR0aDogdGhpcy5zaXplLFxuICAgICAgICBoZWlnaHQ6IHRoaXMuc2l6ZSxcbiAgICAgIFx0bWFyZ2luOiB0aGlzLm1hcmdpbixcbiAgICAgIFx0Ym9yZGVyUmFkaXVzOiB0aGlzLnJhZGl1cyxcbiAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICAgIGFuaW1hdGlvbk5hbWU6ICd2LXB1bHNlU3RyZXRjaERlbGF5JyxcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246ICcwLjc1cycsXG4gICAgICAgIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAnaW5maW5pdGUnLFxuICAgICAgICBhbmltYXRpb25UaW1pbmdGdW5jdGlvbjogJ2N1YmljLWJlemllciguMiwuNjgsLjE4LDEuMDgpJyxcbiAgICAgICAgYW5pbWF0aW9uRmlsbE1vZGU6ICdib3RoJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTE6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjEycydcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkyOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4yNHMnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5Mzoge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMzZzJ1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuLyoudi1zcGlubmVyXG57XG4gICAgbWFyZ2luOiAxMDBweCBhdXRvO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbiovXG5cbkAtd2Via2l0LWtleWZyYW1lcyB2LXB1bHNlU3RyZXRjaERlbGF5XG57XG4gICAgMCUsXG4gICAgODAlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAxOyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICA0NSVcbiAgICB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAwLjc7ICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICB9XG59XG5cbkBrZXlmcmFtZXMgdi1wdWxzZVN0cmV0Y2hEZWxheVxue1xuICAgIDAlLFxuICAgIDgwJVxuICAgIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMTsgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNDUlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMC43OyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgfVxufVxuPC9zdHlsZT4iLCJcbm5hdi5kaXRvLWhlYWRlclxuICAuZGl0by10cmFpbFxuICAgIHVsXG4gICAgICBsaShcbiAgICAgICAgdi1mb3I9XCIoY29tcG9uZW50LCBpbmRleCkgaW4gdHJhaWxcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiaW5kZXggPT09IHRyYWlsLmxlbmd0aCAtIDFcIilcbiAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICAgIHJvdXRlci1saW5rLmRpdG8tYnJlYWRjcnVtYih2LWVsc2UsIDp0bz1cImNvbXBvbmVudC5wYXRoXCIpXG4gICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgIHNwaW5uZXIuZGl0by1zcGlubmVyKHYtaWY9XCJpc0xvYWRpbmdcIilcbiAgc2xvdFxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgbmF2LmRpdG8taGVhZGVyXG4gICAgLmRpdG8tdHJhaWxcbiAgICAgIHVsXG4gICAgICAgIGxpKFxuICAgICAgICAgIHYtZm9yPVwiKGNvbXBvbmVudCwgaW5kZXgpIGluIHRyYWlsXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJpbmRleCA9PT0gdHJhaWwubGVuZ3RoIC0gMVwiKVxuICAgICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICAgICAgcm91dGVyLWxpbmsuZGl0by1icmVhZGNydW1iKHYtZWxzZSwgOnRvPVwiY29tcG9uZW50LnBhdGhcIilcbiAgICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgICAgc3Bpbm5lci5kaXRvLXNwaW5uZXIodi1pZj1cImlzTG9hZGluZ1wiKVxuICAgIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1oZWFkZXJcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYmxhY2tcbiAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgIHotaW5kZXg6ICRtZW51LXotaW5kZXhcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICBzcGFuXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAuZGl0by10cmFpbFxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgaGVpZ2h0OiAzZW1cbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoICsgJGNvbnRlbnQtcGFkZGluZ1xuICAgICAgdWxcbiAgICAgICAgZGlzcGxheTogZmxleFxuICAgICAgYVxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICAgcGFkZGluZy1yaWdodDogMC40ZW1cbiAgICAgICAgJGFuZ2xlOiAzM2RlZ1xuICAgICAgICAmOmhvdmVyXG4gICAgICAgICAgY29sb3I6ICM5OTlcbiAgICAgICAgJjo6YmVmb3JlLFxuICAgICAgICAmOjphZnRlclxuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICAgIGNvbnRlbnQ6ICcnXG4gICAgICAgICAgd2lkdGg6IDFweFxuICAgICAgICAgIGhlaWdodDogMS4yZW1cbiAgICAgICAgICByaWdodDogLTFweFxuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrXG4gICAgICAgICY6OmJlZm9yZVxuICAgICAgICAgIHRvcDogNTAlXG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoJGFuZ2xlKVxuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcFxuICAgICAgICAmOjphZnRlclxuICAgICAgICAgIGJvdHRvbTogNTAlXG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLSRhbmdsZSlcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b21cbiAgICAuZGl0by1zcGlubmVyXG4gICAgICBtYXJnaW4tdG9wOiAkbWVudS1wYWRkaW5nLXZlclxuICAgIC5kaXRvLWRpcnR5XG4gICAgICAmOmFmdGVyXG4gICAgICAgIGNvbnRlbnQ6ICcnXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgICAgd2lkdGg6IDhweFxuICAgICAgICBoZWlnaHQ6IDhweFxuICAgICAgICBtYXJnaW46IDJweFxuICAgICAgICBtYXJnaW4tbGVmdDogMC41ZW1cbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJVxuICAgIC5kaXRvLWFjY291bnQsXG4gICAgLmRpdG8tbG9naW5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgdG9wOiAwXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by1hY2NvdW50XG4gICAgICBsZWZ0OiAkY29udGVudC13aWR0aCArICRjb250ZW50LXBhZGRpbmcgKiAyXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxzZUxvYWRlciBmcm9tICd2dWUtc3Bpbm5lci9zcmMvUHVsc2VMb2FkZXIudnVlJ1xuXG5jb25zdCBTcGlubmVyID0gRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ3NwaW5uZXInLCBQdWxzZUxvYWRlcilcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWhlYWRlcicsIHtcbiAgY29tcG9uZW50czogeyBTcGlubmVyIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzcGlubmVyOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgICBpc0xvYWRpbmc6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRyYWlsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLmZpbHRlcihcbiAgICAgICAgY29tcG9uZW50ID0+ICEhY29tcG9uZW50LnJvdXRlUmVjb3JkXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgc2l6ZSA9ICc4cHgnLFxuICAgICAgY29sb3IgPSAnIzk5OSdcbiAgICB9ID0gdGhpcy5zcGlubmVyIHx8IHt9XG4gICAgY29uc3QgeyBwcm9wcyB9ID0gU3Bpbm5lci5vcHRpb25zXG4gICAgcHJvcHMuc2l6ZS5kZWZhdWx0ID0gc2l6ZVxuICAgIHByb3BzLmNvbG9yLmRlZmF1bHQgPSBjb2xvclxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1kaXJ0eSc6IGNvbXBvbmVudC5pc0RpcnR5XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi9Eb21NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1bGxkb3duOiB7XG4gICAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgICBzdGFydFRpbWU6IDAsXG4gICAgICAgIGNoZWNrVGltZTogdHJ1ZSxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgbW91c2Vkb3duOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgbW91c2V1cDogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub25QdWxsZG93bk1vdXNlVXAobnVsbCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlcnM6IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4odHJ1ZSlcbiAgICAgICAgdGhpcy5jaGVja1RpbWUgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNoZWNrVGltZSA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKSB7XG4gICAgICBjb25zdCB7IHN0YXJ0VGltZSB9ID0gdGhpcy5wdWxsZG93blxuICAgICAgaWYgKCF0aGlzLmNoZWNrVGltZSB8fCBzdGFydFRpbWUgJiYgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPiAyNTApKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLm9uUHVsbGRvd25TZWxlY3QodmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93blNlbGVjdCgvKiB2YWx1ZSAqLykge1xuICAgICAgLy8gTk9URTogVG8gYmUgb3ZlcnJpZGRlbi5cbiAgICB9LFxuXG4gICAgc2V0UHVsbGRvd25PcGVuKG9wZW4pIHtcbiAgICAgIHRoaXMucHVsbGRvd24ub3BlbiA9IG9wZW5cbiAgICAgIHRoaXMucHVsbGRvd24uc3RhcnRUaW1lID0gb3BlbiA/IERhdGUubm93KCkgOiAwXG4gICAgICBpZiAob3Blbikge1xuICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwgdGhpcy5wdWxsZG93bi5ldmVudHMpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLWFjY291bnRcbiAgYShcbiAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICApXG4gICAgc3BhbiB7eyB1c2VyLnVzZXJuYW1lIH19XG4gIHVsLmRpdG8tcHVsbGRvd24oXG4gICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgKVxuICAgIGxpKFxuICAgICAgdi1mb3I9XCIobGFiZWwsIHZhbHVlKSBvZiBpdGVtc1wiXG4gICAgKVxuICAgICAgYShcbiAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSlcIlxuICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKVwiXG4gICAgICApIHt7IGxhYmVsIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1hY2NvdW50XG4gICAgYShcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gICAgKVxuICAgICAgc3BhbiB7eyB1c2VyLnVzZXJuYW1lIH19XG4gICAgdWwuZGl0by1wdWxsZG93bihcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gICAgKVxuICAgICAgbGkoXG4gICAgICAgIHYtZm9yPVwiKGxhYmVsLCB2YWx1ZSkgb2YgaXRlbXNcIlxuICAgICAgKVxuICAgICAgICBhKFxuICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpXCJcbiAgICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKVwiXG4gICAgICAgICkge3sgbGFiZWwgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1hY2NvdW50XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLmRpdG8tcHVsbGRvd25cbiAgICAgIHRvcDogJHB1bGxkb3duLXBhZGRpbmctdmVyXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tYWNjb3VudCcsIHtcbiAgbWl4aW5zOiBbUHVsbGRvd25NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHtcbiAgICAgICAgc2V0dGluZ3M6ICdTZXR0aW5ncycsXG4gICAgICAgIGxvZ291dDogJ0xvZ291dCdcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUHVsbGRvd25TZWxlY3QodmFsdWUpIHtcbiAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgIGNhc2UgJ2xvZ291dCc6XG4gICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5sb2dvdXQoKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnc2V0dGluZ3MnOlxuICAgICAgICBjb25zb2xlLmluZm8oJ1RPRE86IEltcGxlbWVudCBTZXR0aW5ncycpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmZvcm0uZGl0by1kaWFsb2coQHN1Ym1pdC5wcmV2ZW50PVwiXCIpXG4gIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gIClcbiAgICBkaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZm9ybS5kaXRvLWRpYWxvZyhAc3VibWl0LnByZXZlbnQ9XCJcIilcbiAgICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICApXG4gICAgICBkaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLnYtLW1vZGFsLW92ZXJsYXlcbiAgICB6LWluZGV4OiAyMDAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZGlhbG9nJywge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgY29tcG9uZW50czogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcHJvbWlzZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgLy8gTWFrZSBzdXJlIGRpYWxvZyBkYXRhIGNvbnRhaW5zIGFsbCB0aGUgZXhwZWN0ZWQga2V5c1xuICAgIGNvbnN0IGRpYWxvZ0RhdGEgPSBjbG9uZSh0aGlzLmRhdGEpXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gZGlhbG9nRGF0YSkpIHtcbiAgICAgICAgZGlhbG9nRGF0YVtrZXldID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgd2luZG93RXZlbnRzOiBudWxsLFxuICAgICAgZGlhbG9nRGF0YVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50Lm5hbWVcbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tcG9uZW50czogdGhpcy5jb21wb25lbnRzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLmJ1dHRvbnMpKS5yZWR1Y2UoXG4gICAgICAgIC8vIFByb2Nlc3MgdGhlIGJ1dHRvbiBzY2hlbWFzIHRvIGFkZCBkZWZhdWx0IGNsaWNrIGV2ZW50c1xuICAgICAgICAvLyBmb3IgYm90aCAnc3VibWl0JyBhbmQgJ2NhbmNlbCcgYnV0dG9uczpcbiAgICAgICAgKHNjaGVtYXMsIFtrZXksIHNjaGVtYV0pID0+IHtcbiAgICAgICAgICBjb25zdCB7IHR5cGUsIGV2ZW50cyB9ID0gc2NoZW1hXG4gICAgICAgICAgaWYgKCFldmVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsaWNrID0gdHlwZSA9PT0gJ3N1Ym1pdCcgPyAoKSA9PiB0aGlzLmFjY2VwdCgpXG4gICAgICAgICAgICAgIDoga2V5ID09PSAnY2FuY2VsJyA/ICgpID0+IHRoaXMuY2FuY2VsKClcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICBpZiAoY2xpY2spIHtcbiAgICAgICAgICAgICAgc2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgICAgICBldmVudHM6IHsgY2xpY2sgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHNjaGVtYXNba2V5XSA9IHNjaGVtYVxuICAgICAgICAgIHJldHVybiBzY2hlbWFzXG4gICAgICAgIH0sXG4gICAgICAgIHt9XG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0NhbmNlbCgpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmJ1dHRvblNjaGVtYXMpLmluY2x1ZGVzKCdjYW5jZWwnKVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMud2luZG93RXZlbnRzID0gYWRkRXZlbnRzKHdpbmRvdywge1xuICAgICAga2V5dXA6ICgpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgdGhpcy5jYW5jZWwoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBkZXN0cm95ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMucmVtb3ZlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGlkZSgpIHtcbiAgICAgIHRoaXMuJG1vZGFsLmhpZGUodGhpcy5uYW1lKVxuICAgIH0sXG5cbiAgICByZXNvbHZlKHZhbHVlKSB7XG4gICAgICB0aGlzLnByb21pc2UucmVzb2x2ZSh2YWx1ZSlcbiAgICAgIHRoaXMuaGlkZSgpXG4gICAgfSxcblxuICAgIHJlamVjdCh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlamVjdCh2YWx1ZSlcbiAgICAgIHRoaXMuaGlkZSgpXG4gICAgfSxcblxuICAgIGFjY2VwdCgpIHtcbiAgICAgIHRoaXMucmVzb2x2ZSh0aGlzLmRpYWxvZ0RhdGEpXG4gICAgfSxcblxuICAgIGNhbmNlbCgpIHtcbiAgICAgIGlmICh0aGlzLmhhc0NhbmNlbCkge1xuICAgICAgICB0aGlzLnJlc29sdmUobnVsbClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuY29tcG9uZW50KFxuICB2LWlmPVwiY29udGVudFwiXG4gIDppcz1cIm9wdGlvbnMudGFnIHx8IHRhZ1wiXG4gIDpjbGFzcz1cImNsYXNzZXNcIlxuICA6c3R5bGU9XCJzdHlsZXNcIlxuKSB7eyBvcHRpb25zLnRleHQgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGNvbXBvbmVudChcbiAgICB2LWlmPVwiY29udGVudFwiXG4gICAgOmlzPVwib3B0aW9ucy50YWcgfHwgdGFnXCJcbiAgICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApIHt7IG9wdGlvbnMudGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZWxlbWVudCcsIHtcbiAgcHJvcHM6IHtcbiAgICB0YWc6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc3BhbicgfSxcbiAgICBjb250ZW50OiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0gfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IHsgY29udGVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KGNvbnRlbnQpID8gY29udGVudCA6IHsgdGV4dDogY29udGVudCB9XG4gICAgfSxcblxuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLiRhdHRycy5jbGFzcyxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLmNsYXNzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdHlsZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLiRhdHRycy5zdHlsZSxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLnN0eWxlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuZnVuY3Rpb24gYXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLnJlZHVjZSgob2JqZWN0LCBlbnRyeSkgPT4ge1xuICAgIGlmIChpc1N0cmluZyhlbnRyeSkpIHtcbiAgICAgIG9iamVjdFtlbnRyeV0gPSB0cnVlXG4gICAgfSBlbHNlIGlmIChpc09iamVjdChlbnRyeSkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqZWN0LCBlbnRyeSlcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdFxuICB9LCB7fSlcbn1cblxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudC5kaXRvLWxhYmVsKFxuICB2LWlmPVwidGV4dCB8fCBjb2xsYXBzaWJsZVwiXG4gIDppcz1cInRhZ1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuKVxuICAuZGl0by1jaGV2cm9uKFxuICAgIHYtaWY9XCJjb2xsYXBzaWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiAhY29sbGFwc2VkIH1cIlxuICApXG4gIGRpdG8tZWxlbWVudC5kaXRvLWxhYmVsLXByZWZpeChcbiAgICB2LWZvcj1cIihwcmVmaXgsIGluZGV4KSBvZiBwcmVmaXhlc1wiXG4gICAgdGFnPVwic3BhblwiXG4gICAgOmtleT1cImBwcmVmaXgtJHtpbmRleH1gXCJcbiAgICA6Y29udGVudD1cInByZWZpeFwiXG4gIClcbiAgbGFiZWwoOmZvcj1cImRhdGFQYXRoXCIgdi1odG1sPVwidGV4dFwiKVxuICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1zdWZmaXgoXG4gICAgdi1mb3I9XCIoc3VmZml4LCBpbmRleCkgb2Ygc3VmZml4ZXNcIlxuICAgIHRhZz1cInNwYW5cIlxuICAgIDprZXk9XCJgc3VmZml4LSR7aW5kZXh9YFwiXG4gICAgOmNvbnRlbnQ9XCJzdWZmaXhcIlxuICApXG4gIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgY29tcG9uZW50LmRpdG8tbGFiZWwoXG4gICAgdi1pZj1cInRleHQgfHwgY29sbGFwc2libGVcIlxuICAgIDppcz1cInRhZ1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbiAgKVxuICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICB2LWlmPVwiY29sbGFwc2libGVcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiAhY29sbGFwc2VkIH1cIlxuICAgIClcbiAgICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1wcmVmaXgoXG4gICAgICB2LWZvcj1cIihwcmVmaXgsIGluZGV4KSBvZiBwcmVmaXhlc1wiXG4gICAgICB0YWc9XCJzcGFuXCJcbiAgICAgIDprZXk9XCJgcHJlZml4LSR7aW5kZXh9YFwiXG4gICAgICA6Y29udGVudD1cInByZWZpeFwiXG4gICAgKVxuICAgIGxhYmVsKDpmb3I9XCJkYXRhUGF0aFwiIHYtaHRtbD1cInRleHRcIilcbiAgICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1zdWZmaXgoXG4gICAgICB2LWZvcj1cIihzdWZmaXgsIGluZGV4KSBvZiBzdWZmaXhlc1wiXG4gICAgICB0YWc9XCJzcGFuXCJcbiAgICAgIDprZXk9XCJgc3VmZml4LSR7aW5kZXh9YFwiXG4gICAgICA6Y29udGVudD1cInN1ZmZpeFwiXG4gICAgKVxuICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWxhYmVsXG4gICAgLS1sYWJlbC1wYWRkaW5nOiAwXG4gICAgLy8gRm9yIGJ1dHRvbnMgYW5kIGNoZXZyb24gdG8gYWxpZ24gcmlnaHQ6XG4gICAgZGlzcGxheTogZmxleFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC8vIFZlcnRpY2FsbHkgY2VudGVyIGFsbCBpdGVtcyBpbiB0aGUgbGFiZWwsIGUuZy4gY2hldnJvbiwgZWRpdC1idXR0b25zLlxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXJcbiAgICBwYWRkaW5nOiB2YXIoLS1sYWJlbC1wYWRkaW5nKVxuICAgIG1hcmdpbjogMCAwICRmb3JtLXNwYWNpbmctaGFsZiAwXG5cbiAgICBsYWJlbFxuICAgICAgZGlzcGxheTogaW5saW5lXG4gICAgICBjdXJzb3I6IGluaGVyaXRcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG5cbiAgICBsYWJlbCxcbiAgICAuZGl0by1sYWJlbC1wcmVmaXgsXG4gICAgLmRpdG8tbGFiZWwtc3VmZml4XG4gICAgICAmOm50aC1sYXN0LWNoaWxkKDIpXG4gICAgICAgIC8vIFRvIHN0cmV0Y2ggZWl0aGVyIGxhYmVsIG9yIC5kaXRvLWxhYmVsLXN1ZmZpeCB0byBmdWxsIGF2YWlsYWJsZSB3aWR0aFxuICAgICAgICAvLyBzbyB0aGF0IGJ1dHRvbnMgYWx3YXlzIGFwcGVhciByaWdodC1hbGlnbmVkOlxuICAgICAgICBmbGV4OiAxIDEgYXV0b1xuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgY29udGVudDogJ1xcYTAnIC8vICZuYnBzO1xuXG4gICAgLmRpdG8tbGFiZWwtcHJlZml4LFxuICAgIC5kaXRvLWxhYmVsLXN1ZmZpeFxuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICArZWxsaXBzaXNcblxuICAgIC5kaXRvLWJ1dHRvbnNcbiAgICAgIC8vIE1vdmUgdGhlIGxhYmVsIHBhZGRpbmcgaW5zaWRlIC5kaXRvLWJ1dHRvbnMsIHNvIHRoYXQgaXQgY2FwdHVyZXMgYWxsXG4gICAgICAvLyBuZWFyIG1vdXNlIGV2ZW50czpcbiAgICAgIG1hcmdpbjogY2FsYygtMSAqIHZhcigtLWxhYmVsLXBhZGRpbmcpKVxuICAgICAgbWFyZ2luLWxlZnQ6IDBcbiAgICAgIHBhZGRpbmc6IHZhcigtLWxhYmVsLXBhZGRpbmcpXG5cbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIC8vIEluIG9yZGVyIGZvciBlbGxpcHNpcyB0byB3b3JrIG9uIGxhYmVscyB3aXRob3V0IGFmZmVjdGluZyBvdGhlciBsYXlvdXQsXG4gICAgICAvLyB3ZSBuZWVkIHRvIHBvc2l0aW9uIGl0IGFic29sdXRlbHkgaW5zaWRlIGl0cyBjb250YWluZXIuXG4gICAgICBsYWJlbFxuICAgICAgICArZWxsaXBzaXNcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgIG1heC13aWR0aDogMTAwJVxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gU2luY2UgPGxhYmVsPiB1c2VzIGBwb3NpdGlvbjogYWJzb2x1dGVgLCBzZXQgY29udGVudCB0byBhIHplcm8td2lkdGhcbiAgICAgICAgLy8gc3BhY2Ugb24gaXRzIHBhcmVudCB0byBlbmZvcmNlIHRoZSByaWdodCB0ZXh0IGhlaWdodCBpbiB0aGUgY29udGFpbmVyXG4gICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInIC8vIHplcm8td2lkdGggc3BhY2VcblxuICBhLmRpdG8tbGFiZWxcbiAgICAmOmhvdmVyXG4gICAgICAuZGl0by1jaGV2cm9uXG4gICAgICAgIGNvbG9yOiAkY29sb3ItZGFya2VyXG4gICAgJjpmb2N1czpub3QoOmFjdGl2ZSk6bm90KC5kaXRvLWFjdGl2ZSlcbiAgICAgIC5kaXRvLWNoZXZyb25cbiAgICAgICAgLXdlYmtpdC10ZXh0LXN0cm9rZTogJGJvcmRlci13aWR0aCAkY29sb3ItYWN0aXZlXG5cbiAgLy8gRGlzcGxheSBsYWJlbHMgaW4gY29tcGFjdCBzY2hlbWEgYXMgaW5saW5lLWJsb2NrcywgdG8gYWxsb3cgY29tcGFjdCBsYXlvdXRzXG4gIC8vIHdpdGggYHdpZHRoOiAnYXV0bydgIGVsZW1lbnRzOlxuICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byBjb250cm9sIHRoaXMgYmVoYXZpb3IuXG4gIC5kaXRvLXNjaGVtYS1jb21wYWN0XG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgPiAuZGl0by1wYW5lXG4gICAgICAgID4gLmRpdG8tY29udGFpbmVyXG4gICAgICAgICAgPiAuZGl0by1sYWJlbDpub3QoLmRpdG8tbGFiZWwtY29tcG9uZW50KVxuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWxhYmVsJywge1xuICBwcm9wczoge1xuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZSA/ICdhJyA6ICdkaXYnXG4gICAgfSxcblxuICAgIHRleHQoKSB7XG4gICAgICBjb25zdCB7IGxhYmVsIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNPYmplY3QobGFiZWwpID8gbGFiZWw/LnRleHQgOiBsYWJlbFxuICAgIH0sXG5cbiAgICBwcmVmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnByZWZpeClcbiAgICB9LFxuXG4gICAgc3VmZml4ZXMoKSB7XG4gICAgICByZXR1cm4gYXNBcnJheSh0aGlzLmxhYmVsPy5zdWZmaXgpXG4gICAgfSxcblxuICAgIGxpc3RlbmVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLih0aGlzLmNvbGxhcHNpYmxlICYmIHtcbiAgICAgICAgICBjbGljazogdGhpcy5vbkNsaWNrXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPT09IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2soKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gdGhpc1xuICAgICAgdGhpcy4kZW1pdCgnZXhwYW5kJywgdGhpcy5jb2xsYXBzZWQpXG4gICAgfVxuICB9XG59KVxuXG48L3NjcmlwdD5cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7XG4gIGdldEl0ZW1Gb3JtU2NoZW1hLCBnZXRJdGVtSWQsIGdldEl0ZW1VaWQsIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWEsXG5cbiAgICBnZXRJdGVtVWlkLFxuXG4gICAgZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXggPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudCAmJiBpbmRleCAhPT0gbnVsbFxuICAgICAgICA/IFN0cmluZyhpbmRleClcbiAgICAgICAgOiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKVxuICAgIH0sXG5cbiAgICBnZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkge1xuICAgICAgbGV0IHsgZGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGlmIChzb3VyY2VTY2hlbWEgIT09IHRoaXMuc2NoZW1hKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNvdXJjZVNjaGVtYS5uYW1lKVxuICAgICAgfVxuICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgaW5kZXgpXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgZmluZEl0ZW1JZEluZGV4KHNvdXJjZVNjaGVtYSwgZGF0YSwgaXRlbUlkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgLy8gRm9yIHRyYW5zaWVudCBkYXRhLCB0aGUgaW5kZXggaXMgdXNlZCBhcyB0aGUgaWRcbiAgICAgICAgPyBpdGVtSWRcbiAgICAgICAgOiBkYXRhPy5maW5kSW5kZXgoXG4gICAgICAgICAgKGl0ZW0sIGluZGV4KSA9PlxuICAgICAgICAgICAgdGhpcy5nZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCkgPT09IGl0ZW1JZFxuICAgICAgICApXG4gICAgICByZXR1cm4gaW5kZXggIT09IC0xID8gaW5kZXggOiBudWxsXG4gICAgfSxcblxuICAgIGdldEl0ZW1MYWJlbChzb3VyY2VTY2hlbWEsIGl0ZW0sIHtcbiAgICAgIGluZGV4ID0gbnVsbCxcbiAgICAgIGV4dGVuZGVkID0gZmFsc2UsXG4gICAgICBhc09iamVjdCA9IGZhbHNlXG4gICAgfSA9IHt9KSB7XG4gICAgICBjb25zdCB7IGl0ZW1MYWJlbCB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAoIWl0ZW0gfHwgIWV4dGVuZGVkICYmIGl0ZW1MYWJlbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgbGV0IGRhdGFQYXRoXG4gICAgICBjb25zdCBnZXREYXRhUGF0aCA9ICgpID0+XG4gICAgICAgIChkYXRhUGF0aCB8fD0gdGhpcy5nZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkpXG5cbiAgICAgIGxldCBmb3JtTGFiZWxcbiAgICAgIGNvbnN0IGdldEZvcm1MYWJlbCA9ICgpID0+XG4gICAgICAgIChmb3JtTGFiZWwgfHw9IHRoaXMuZ2V0TGFiZWwoXG4gICAgICAgICAgZ2V0SXRlbUZvcm1TY2hlbWEoc291cmNlU2NoZW1hLCBpdGVtLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICkpXG5cbiAgICAgIGxldCB0ZXh0XG4gICAgICBsZXQgcHJlZml4XG4gICAgICBsZXQgc3VmZml4XG4gICAgICBpZiAoaXNGdW5jdGlvbihpdGVtTGFiZWwpKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbUxhYmVsLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgbmVzdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgICAgIGluZGV4LFxuXG4gICAgICAgICAgICBnZXQgZGF0YVBhdGgoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXREYXRhUGF0aCgpXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZXQgZm9ybUxhYmVsKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Rm9ybUxhYmVsKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIGlmIChpc09iamVjdChsYWJlbCkpIHtcbiAgICAgICAgICAoeyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9ID0gbGFiZWwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dCA9IGxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgLy8gSXQncyB1cCB0byBgaXRlbUxhYmVsKClgIGVudGlyZWx5IHRvIHByb2R1Y2UgdGhlIGxhYmVsOlxuICAgICAgICBleHRlbmRlZCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMb29rIHVwIHRoZSBuYW1lIG9uIHRoZSBpdGVtLCBieSB0aGVzZSBydWxlczpcbiAgICAgICAgLy8gMS4gSWYgYGl0ZW1MYWJlbGAgaXMgYSBzdHJpbmcsIHVzZSBpdCBhcyB0aGUgcHJvcGVydHkga2V5XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgdGhlcmUgYXJlIGNvbHVtbnMsIHVzZSB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0XG4gICAgICAgIC8vIDMuIE90aGVyd2lzZSwgc2VlIGlmIHRoZSBpdGVtIGhhcyBhIHByb3BlcnR5IG5hbWVkICduYW1lJ1xuICAgICAgICBjb25zdCB7IGNvbHVtbnMgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgICBjb25zdCBrZXkgPSAoXG4gICAgICAgICAgaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiBpdGVtTGFiZWwgfHxcbiAgICAgICAgICBpc0xpc3RTb3VyY2Uoc291cmNlU2NoZW1hKSAmJiBjb2x1bW5zICYmIE9iamVjdC5rZXlzKGNvbHVtbnMpWzBdIHx8XG4gICAgICAgICAgJ25hbWUnXG4gICAgICAgIClcbiAgICAgICAgdGV4dCA9IGl0ZW1ba2V5XVxuICAgICAgfVxuICAgICAgY29uc3QgaGFkTGFiZWwgPSAhIXRleHRcbiAgICAgIHRleHQgPSB0ZXh0IHx8ICcnXG4gICAgICAvLyBJZiBubyBsYWJlbCB3YXMgZm91bmQgc28gZmFyLCB0cnkgdG8gcHJvZHVjZSBvbmUgZnJvbSB0aGVpbmRleC5cbiAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAvLyBBbHdheXMgdXNlIGV4dGVuZGVkIHN0eWxlIHdoZW4gYXV0by1nZW5lcmF0aW5nIGxhYmVscyBmcm9tIGluZGV4L2lkOlxuICAgICAgICBleHRlbmRlZCA9IHRydWVcbiAgICAgICAgaWYgKGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgdGV4dCA9IGAke2luZGV4ICsgMX1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChleHRlbmRlZCkge1xuICAgICAgICBjb25zdCBmb3JtTGFiZWwgPSBnZXRGb3JtTGFiZWwoKVxuICAgICAgICBpZiAoZm9ybUxhYmVsKSB7XG4gICAgICAgICAgLy8gSWYgYSBsYWJlbCB3YXMgcHJvdmlkZWQsIHB1dCBpbiBxdW90ZXMgd2hlbiBwcmVmaXhlZCB3aXRoIHRoZVxuICAgICAgICAgIC8vIGZvcm0gbGFiZWwgZm9yIHRoZSBleHRlbmRlZCBzdHlsZTpcbiAgICAgICAgICB0ZXh0ID0gYCR7Zm9ybUxhYmVsfSAke2hhZExhYmVsID8gYCcke3RleHR9J2AgOiB0ZXh0fWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzT2JqZWN0ID8geyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9IDogdGV4dFxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1zY2hlbWFcbiAgLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAuZGl0by1zY2hlbWEtaGVhZGVyKFxuICAgICAgdi1pZj1cImhhc0xhYmVsIHx8IGhhc1RhYnMgfHwgY2xpcGJvYXJkXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLW1lbnUtaGVhZGVyJzogbWVudUhlYWRlciB9XCJcbiAgICApXG4gICAgICBkaXRvLWxhYmVsKFxuICAgICAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICA6Y29sbGFwc2VkPVwiIW9wZW5lZFwiXG4gICAgICAgIEBleHBhbmQ9XCJvbkV4cGFuZFwiXG4gICAgICApXG4gICAgICAgIC8vIFBhc3MgZWRpdC1idXR0b25zIHRocm91Z2ggdG8gZGl0by1sYWJlbCdzIG93biBlZGl0LWJ1dHRvbnMgc2xvdDpcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgI2VkaXQtYnV0dG9uc1xuICAgICAgICAgIHYtaWY9XCJpbmxpbmVkXCJcbiAgICAgICAgKVxuICAgICAgICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuICAgICAgZGl0by10YWJzKFxuICAgICAgICB2LWlmPVwidGFic1wiXG4gICAgICAgIDp0YWJzPVwidGFic1wiXG4gICAgICAgIDpzZWxlY3RlZFRhYj1cInNlbGVjdGVkVGFiXCJcbiAgICAgIClcbiAgICAgIGRpdG8tY2xpcGJvYXJkKFxuICAgICAgICA6Y2xpcGJvYXJkPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgKVxuICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtdGFiKFxuICAgICAgdi1pZj1cImhhc1RhYnNcIlxuICAgICAgdi1mb3I9XCIoc2NoZW1hLCB0YWIpIGluIHRhYnNcIlxuICAgICAgcmVmPVwidGFic1wiXG4gICAgICA6a2V5PVwidGFiXCJcbiAgICAgIDp2aXNpYmxlPVwic2VsZWN0ZWRUYWIgPT09IHRhYlwiXG4gICAgICA6dGFiPVwidGFiXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc01haW5QYW5lXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICApXG4gICAgdHJhbnNpdGlvbi1oZWlnaHQoXG4gICAgICA6ZW5hYmxlZD1cImlubGluZWRcIlxuICAgIClcbiAgICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtbWFpbihcbiAgICAgICAgdi1pZj1cImhhc01haW5QYW5lICYmIG9wZW5lZFwiXG4gICAgICAgIHJlZj1cImNvbXBvbmVudHNcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzVGFic1wiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgIHNsb3QoXG4gICAgICBuYW1lPVwiYnV0dG9uc1wiXG4gICAgICB2LWlmPVwiIWlubGluZWQgJiYgaXNQb3B1bGF0ZWRcIlxuICAgIClcbiAgdGVtcGxhdGUodi1pZj1cImlubGluZWRcIilcbiAgICBzbG90KFxuICAgICAgdi1pZj1cIiFoYXNMYWJlbFwiXG4gICAgICBuYW1lPVwiZWRpdC1idXR0b25zXCJcbiAgICApXG4gIHRlbXBsYXRlKHYtZWxzZS1pZj1cImlzUG9wdWxhdGVkXCIpXG4gICAgZGl0by1wYW5lbHMoXG4gICAgICA6cGFuZWxzPVwicGFuZWxTY2hlbWFzXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXNjaGVtYVxuICAgIC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICAuZGl0by1zY2hlbWEtaGVhZGVyKFxuICAgICAgICB2LWlmPVwiaGFzTGFiZWwgfHwgaGFzVGFicyB8fCBjbGlwYm9hcmRcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1tZW51LWhlYWRlcic6IG1lbnVIZWFkZXIgfVwiXG4gICAgICApXG4gICAgICAgIGRpdG8tbGFiZWwoXG4gICAgICAgICAgdi1pZj1cImhhc0xhYmVsXCJcbiAgICAgICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICA6Y29sbGFwc2VkPVwiIW9wZW5lZFwiXG4gICAgICAgICAgQGV4cGFuZD1cIm9uRXhwYW5kXCJcbiAgICAgICAgKVxuICAgICAgICAgIC8vIFBhc3MgZWRpdC1idXR0b25zIHRocm91Z2ggdG8gZGl0by1sYWJlbCdzIG93biBlZGl0LWJ1dHRvbnMgc2xvdDpcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICNlZGl0LWJ1dHRvbnNcbiAgICAgICAgICAgIHYtaWY9XCJpbmxpbmVkXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbiAgICAgICAgZGl0by10YWJzKFxuICAgICAgICAgIHYtaWY9XCJ0YWJzXCJcbiAgICAgICAgICA6dGFicz1cInRhYnNcIlxuICAgICAgICAgIDpzZWxlY3RlZFRhYj1cInNlbGVjdGVkVGFiXCJcbiAgICAgICAgKVxuICAgICAgICBkaXRvLWNsaXBib2FyZChcbiAgICAgICAgICA6Y2xpcGJvYXJkPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgKVxuICAgICAgZGl0by1wYW5lLmRpdG8tcGFuZS10YWIoXG4gICAgICAgIHYtaWY9XCJoYXNUYWJzXCJcbiAgICAgICAgdi1mb3I9XCIoc2NoZW1hLCB0YWIpIGluIHRhYnNcIlxuICAgICAgICByZWY9XCJ0YWJzXCJcbiAgICAgICAgOmtleT1cInRhYlwiXG4gICAgICAgIDp2aXNpYmxlPVwic2VsZWN0ZWRUYWIgPT09IHRhYlwiXG4gICAgICAgIDp0YWI9XCJ0YWJcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzTWFpblBhbmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgIClcbiAgICAgIHRyYW5zaXRpb24taGVpZ2h0KFxuICAgICAgICA6ZW5hYmxlZD1cImlubGluZWRcIlxuICAgICAgKVxuICAgICAgICBkaXRvLXBhbmUuZGl0by1wYW5lLW1haW4oXG4gICAgICAgICAgdi1pZj1cImhhc01haW5QYW5lICYmIG9wZW5lZFwiXG4gICAgICAgICAgcmVmPVwiY29tcG9uZW50c1wiXG4gICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNUYWJzXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgICApXG4gICAgICBzbG90KFxuICAgICAgICBuYW1lPVwiYnV0dG9uc1wiXG4gICAgICAgIHYtaWY9XCIhaW5saW5lZCAmJiBpc1BvcHVsYXRlZFwiXG4gICAgICApXG4gICAgdGVtcGxhdGUodi1pZj1cImlubGluZWRcIilcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCIhaGFzTGFiZWxcIlxuICAgICAgICBuYW1lPVwiZWRpdC1idXR0b25zXCJcbiAgICAgIClcbiAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJpc1BvcHVsYXRlZFwiKVxuICAgICAgZGl0by1wYW5lbHMoXG4gICAgICAgIDpwYW5lbHM9XCJwYW5lbFNjaGVtYXNcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zY2hlbWFcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgLy8gVG8gZGlzcGxheSBzY2hlbWEgbmV4dCB0byBwYW5lbHM6XG4gICAgZGlzcGxheTogZmxleFxuICAgIG1pbi1oZWlnaHQ6IDEwMCVcbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICBmbGV4OiAxIDEgMTAwJVxuICAgICAgLy8gU28gdGhhdCBzY2hlbWEgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgICBkaXNwbGF5OiBncmlkXG4gICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICA+ICo6b25seS1jaGlsZFxuICAgICAgICBncmlkLXJvdy1lbmQ6IG5vbmVcbiAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgIHBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmdcbiAgICA+IC5kaXRvLWJ1dHRvbnMsXG4gICAgPiAuZGl0by1wYW5lbHNcbiAgICAgIGZsZXg6IDEgMSAwJVxuICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmdcbiAgICA+IC5kaXRvLXBhbmVsc1xuICAgICAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZyAkY29udGVudC1wYWRkaW5nICRjb250ZW50LXBhZGRpbmcgMFxuICAgIC8vIERpc3BsYXkgYSBydWxlciBiZXR3ZWVuIHRhYmJlZCBjb21wb25lbnRzIGFuZCB0b3dhcmRzIHRoZSAuZGl0by1idXR0b25zXG4gICAgLmRpdG8tcGFuZS10YWIgKyAuZGl0by1wYW5lLW1haW5cbiAgICAgICY6OmJlZm9yZVxuICAgICAgICAvLyBVc2UgYSBwc2V1ZG8gZWxlbWVudCB0byBkaXNwbGF5IGEgcnVsZXIgd2l0aCBwcm9wZXIgbWFyZ2luc1xuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXN0eWxlXG4gICAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW4gdG8gdGhlIHJ1bGVyXG4gICAgICAgIG1hcmdpbjogJGNvbnRlbnQtcGFkZGluZyAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZy1oYWxmXG4gIC5kaXRvLXNjaGVtYS1oZWFkZXJcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgLmRpdG8tdGFicyxcbiAgICAuZGl0by1jbGlwYm9hcmRcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kXG4gICAgLmRpdG8tY2xpcGJvYXJkXG4gICAgICAmOm9ubHktY2hpbGRcbiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG9cbiAgICAgIC5kaXRvLWJ1dHRvblxuICAgICAgICBtYXJnaW46IDAgMCAkdGFiLW1hcmdpbiAkdGFiLW1hcmdpblxuICAgICYuZGl0by1zY2hlbWEtbWVudS1oZWFkZXJcbiAgICAgIC8vIEJyaW5nIHRoZSB0YWJzIHVwIHRvIHRoZSBtZW51LlxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICBoZWlnaHQ6ICRtZW51LWhlaWdodFxuICAgICAgcGFkZGluZzogMCAkbWVudS1wYWRkaW5nLWhvclxuICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aFxuICAgICAgdG9wOiAwXG4gICAgICBsZWZ0OiAwXG4gICAgICByaWdodDogMFxuICAgICAgei1pbmRleDogJG1lbnUtei1pbmRleFxuICAgICAgLy8gVHVybiBvZmYgcG9pbnRlciBldmVudHMgc28gdGhhdCBEaXRvVHJhaWwga2VlcHMgcmVjZWl2aW5nIGV2ZW50cy4uLlxuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmVcbiAgICAgIC8vIC4uLmJ1dCBhbGxvdyBpbnRlcmFjdGlvbiB3aXRoIHRoZSB0YWJzIGFuZCBidXR0b25zIChlLmcuIGNsaXBib2FyZClcbiAgICAgIC8vIGxheWVyZWQgb24gdG9wIG9mIERpdG9UcmFpbC5cbiAgICAgIC5kaXRvLXRhYnMsXG4gICAgICAuZGl0by1idXR0b25zXG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIGJ1dHRvbi5kaXRvLWxhYmVsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgLy8gQ2F0Y2ggYWxsIGNsaWNrcywgZXZlbiB3aGVuIGl0IHdvdWxkIGJlIHBhcnRpYWxseSBjb3ZlcmVkIGJ5IHNjaGVtYS5cbiAgICAgIHotaW5kZXg6IDFcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNBcnJheSwgaXNGdW5jdGlvbiwgaXNSZWdFeHAsXG4gIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoLCBsYWJlbGl6ZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgVHJhbnNpdGlvbkhlaWdodCB9IGZyb20gJ0BkaXRvanMvdWknXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuLi9taXhpbnMvSXRlbU1peGluLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGgsIGdldFBhcmVudEl0ZW0gfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgZ2V0TmFtZWRTY2hlbWFzLCBnZXRQYW5lbFNjaGVtYXMsIHNldERlZmF1bHRzLCBwcm9jZXNzRGF0YVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTdG9yZUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1zY2hlbWEnLCB7XG4gIGNvbXBvbmVudHM6IHsgVHJhbnNpdGlvbkhlaWdodCB9LFxuICBtaXhpbnM6IFtJdGVtTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJyRzY2hlbWFQYXJlbnRDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGlubGluZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhhc093bkRhdGE6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBtZW51SGVhZGVyOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICByZXR1cm4ge1xuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIHByb3ZpZGUgbW9yZSBkYXRhIHRocm91Z2ggYHNjaGVtYS5kYXRhYCwgdnVlLXN0eWxlOlxuICAgICAgLi4uKFxuICAgICAgICBkYXRhICYmIGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgICA/IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgOiBkYXRhXG4gICAgICApLFxuICAgICAgY29tcG9uZW50c1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZWxzUmVnaXN0cnk6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgc2NoZW1hQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBEb24ndCByZXR1cm4gdGhlIGFjdHVhbCBwYXJlbnQgc2NoZW1hIGlzIHRoaXMgc2NoZW1hIGhhbmRsZXMgaXRzIG93blxuICAgICAgLy8gZGF0YS4gVGhpcyBwcmV2ZW50cyBkZWxlZ2F0aW5nIGV2ZW50cyB0byB0aGUgcGFyZW50LCBhbmQgcmVnaXN0ZXJpbmdcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCB0aGUgcGFyZW50IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gc2V0IGlzRGlydHkgZmxhZ3MuXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gbnVsbCA6IHRoaXMuJHBhcmVudC5zY2hlbWFDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWFzKCkge1xuICAgICAgY29uc3QgcGFuZWxzID0gZ2V0UGFuZWxTY2hlbWFzKHRoaXMuc2NoZW1hLnBhbmVscywgJycpXG4gICAgICBmb3IgKGNvbnN0IHBhbmUgb2YgdGhpcy5wYW5lcykge1xuICAgICAgICBwYW5lbHMucHVzaCguLi5wYW5lLnBhbmVsU2NoZW1hcylcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYW5lbHNcbiAgICB9LFxuXG4gICAgdGFicygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEudGFicylcbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRUYWIoKSB7XG4gICAgICBjb25zdCBjdXJyZW50VGFiID0gdGhpcy4kcm91dGUuaGFzaD8uc2xpY2UoMSkgfHwgbnVsbFxuICAgICAgY29uc3QgdGFiID0gY3VycmVudFRhYiAmJiB0aGlzLnNob3VsZFJlbmRlcih0aGlzLnRhYnNbY3VycmVudFRhYl0pXG4gICAgICAgID8gY3VycmVudFRhYlxuICAgICAgICA6IHRoaXMuZGVmYXVsdFRhYj8ubmFtZSB8fCBudWxsXG4gICAgICBpZiAodGFiICE9PSBjdXJyZW50VGFiKSB7XG4gICAgICAgIC8vIEFueSB0YWIgY2hhbmdlIG5lZWRzIHRvIGJlIHJlZmxlY3RlZCBpbiB0aGUgcm91dGVyIGFsc28uXG4gICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgaGFzaDogdGFiIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gdGFiXG4gICAgfSxcblxuICAgIGRlZmF1bHRUYWIoKSB7XG4gICAgICBpZiAodGhpcy50YWJzKSB7XG4gICAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgICAgZm9yIChjb25zdCB0YWIgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnRhYnMpKSB7XG4gICAgICAgICAgY29uc3QgeyBkZWZhdWx0VGFiIH0gPSB0YWJcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihkZWZhdWx0VGFiKVxuICAgICAgICAgICAgPyBkZWZhdWx0VGFiLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICAgICAgOiBkZWZhdWx0VGFiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFiXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgICAgIGZpcnN0ID0gdGFiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaXJzdFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWE/LmNsaXBib2FyZFxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdzZXJ2ZXInLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGNsaXBib2FyZERhdGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAkc2NoZW1hOiB0aGlzLnNjaGVtYS5uYW1lLFxuICAgICAgICAuLi50aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnY2xpcGJvYXJkJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzLlxuICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgYXM6XG4gICAgLy8gcmV0dXJuIGdldEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkRGF0YVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xpcGJvYXJkRGF0YVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIGdldFBhcmVudEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgfSxcblxuICAgIGZvcm1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKFxuICAgICAgICB0aGlzLmdldEl0ZW1Gb3JtU2NoZW1hKHRoaXMuc291cmNlU2NoZW1hLCB0aGlzLmRhdGEsIHRoaXMuY29udGV4dClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNUb3VjaGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZXJ5Q29tcG9uZW50KGl0ID0+IGl0LmlzVmFsaWRhdGVkKVxuICAgIH0sXG5cbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5sYWJlbCB8fCB0aGlzLmNvbGxhcHNpYmxlXG4gICAgfSxcblxuICAgIGhhc1RhYnMoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaW5saW5lZCAmJiAhIXRoaXMudGFic1xuICAgIH0sXG5cbiAgICBoYXNNYWluUGFuZSgpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiAhIWNvbXBvbmVudHMgJiYgT2JqZWN0LmtleXMoY29tcG9uZW50cykubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBvcGVuZWQ6IGdldFN0b3JlQWNjZXNzb3IoJ29wZW5lZCcsIHtcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jb2xsYXBzZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVscygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucGFuZWxzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIGNvbXBvbmVudHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZXNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVsc0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZWxzUmVnaXN0cnkpXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICB0aGlzLnNldHVwU2NoZW1hRmllbGRzKClcbiAgICAvLyBEZWxlZ2F0ZSBjaGFuZ2UgZXZlbnRzIHRocm91Z2ggdG8gcGFyZW50IHNjaGVtYTpcbiAgICB0aGlzLmRlbGVnYXRlKCdjaGFuZ2UnLCB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudClcbiAgICB0aGlzLmVtaXRFdmVudCgnaW5pdGlhbGl6ZScpIC8vIE5vdCBgJ2NyZWF0ZSdgLCBzaW5jZSB0aGF0J3MgZm9yIGRhdGEuXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLmVtaXRFdmVudCgnZGVzdHJveScpXG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKFxuICAgICAgICB0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRzQnlOYW1lKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeU5hbWUodGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRCeU5hbWUobmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoT3JOYW1lLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50KGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldFBhbmVsKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBzb21lQ29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuc29tZShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgZXZlcnlDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5ldmVyeShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgb25FeHBhbmQoZXhwYW5kKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnZXhwYW5kJywge1xuICAgICAgICAvLyBUT0RPOiBBY3R1YWxseSBleHBvc2UgdGhpcyBvbiBEaXRvQ29udGV4dD9cbiAgICAgICAgY29udGV4dDogeyBleHBhbmQgfVxuICAgICAgfSlcbiAgICAgIC8vIFByZXZlbnQgY2xvc2luZyB0aGUgc2NoZW1hIHdpdGggaW52YWxpZCBkYXRhLCBzaW5jZSB0aGUgaW4tY29tcG9uZW50XG4gICAgICAvLyB2YWxpZGF0aW9uIHdpbGwgbm90IGJlIGV4ZWN1dGVkIG9uY2UgaXQncyBjbG9zZWQuXG5cbiAgICAgIC8vIFRPRE86IE1vdmUgdmFsaWRhdGlvbiBvdXQgb2YgY29tcG9uZW50cywgdG8gc2NoZW1hLCBqdXN0IGxpa2VcbiAgICAgIC8vIHByb2Nlc3NpbmcsIGFuZCB1c2UgYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIGZvciB0aGUgcmVzdWx0aW5nIGVycm9ycyxcbiAgICAgIC8vIHRoZW4gcmVtb3ZlIHRoaXMgcmVxdWlyZW1lbnQsIHNpbmNlIHdlIGNhbiB2YWxpZGF0ZSBjbG9zZWQgZm9ybXMgYW5kXG4gICAgICAvLyBzY2hlbWFzIHRoZW4uXG4gICAgICBpZiAoIXRoaXMub3BlbmVkIHx8IGV4cGFuZCB8fCB0aGlzLnZhbGlkYXRlQWxsKCkpIHtcbiAgICAgICAgdGhpcy5vcGVuZWQgPSBleHBhbmRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJylcbiAgICB9LFxuXG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICAgIGNvbXBvbmVudC5yZXNldFZhbGlkYXRpb24oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50Py5mb2N1cygpXG4gICAgICB0aGlzLm9wZW5lZCA9IHRydWVcbiAgICB9LFxuXG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50c0J5RGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGxldCBkYXRhUGF0aHNcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBjaGVjayA9IGlzRnVuY3Rpb24obWF0Y2gpXG4gICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgIDogaXNSZWdFeHAobWF0Y2gpXG4gICAgICAgICAgICA/IGZpZWxkID0+IG1hdGNoLnRlc3QoZmllbGQpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgZGF0YVBhdGhzID0gY2hlY2tcbiAgICAgICAgICA/IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKS5maWx0ZXIoY2hlY2spXG4gICAgICAgICAgOiBpc0FycmF5KG1hdGNoKVxuICAgICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgICAgOiBbbWF0Y2hdXG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBkYXRhUGF0aHMgfHw9IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKVxuICAgICAgZm9yIChjb25zdCBkYXRhUGF0aCBvZiBkYXRhUGF0aHMpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoIWNvbXBvbmVudC52YWxpZGF0ZShub3RpZnkpKSB7XG4gICAgICAgICAgICAvLyBGb2N1cyBmaXJzdCBlcnJvciBmaWVsZFxuICAgICAgICAgICAgaWYgKG5vdGlmeSAmJiBmaXJzdCkge1xuICAgICAgICAgICAgICBjb21wb25lbnQuZm9jdXMoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5ICYmICFpc1ZhbGlkKSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1ZhbGlkXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBbGwobWF0Y2gsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIGxldCBmaXJzdCA9IHRydWVcbiAgICAgIGNvbnN0IHVubWF0Y2hlZCA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgZXJyc10gb2YgT2JqZWN0LmVudHJpZXMoZXJyb3JzKSkge1xuICAgICAgICAvLyBJZiB0aGUgc2NoZW1hIGlzIGEgZGF0YS1yb290LCBwcmVmaXggaXRzIG93biBkYXRhUGF0aCB0byBhbGwgZXJyb3JzLFxuICAgICAgICAvLyBzaW5jZSB0aGUgZGF0YSB0aGF0IGl0IHNlbmRzIGFuZCB2YWxpZGF0ZXMgd2lsbCBiZSB1bnByZWZpeGVkLlxuICAgICAgICBjb25zdCBmdWxsRGF0YVBhdGggPSB0aGlzLmhhc093bkRhdGFcbiAgICAgICAgICA/IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgICAgICAgIDogZGF0YVBhdGhcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcywgdGhpcy5kYXRhUGF0aCwgdGhpcy5oYXNPd25EYXRhLCBmdWxsRGF0YVBhdGgpXG4gICAgICAgIC8vIENvbnZlcnQgZnJvbSBKYXZhU2NyaXB0IHByb3BlcnR5IGFjY2VzcyBub3RhdGlvbiwgdG8gb3VyIG93biBmb3JtXG4gICAgICAgIC8vIG9mIHJlbGF0aXZlIEpTT04gcG9pbnRlcnMgYXMgZGF0YS1wYXRoczpcbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZnVsbERhdGFQYXRoKVxuICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cykpIHtcbiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgLy8gQ291bGRuJ3QgZmluZCBhIGNvbXBvbmVudCBpbiBhbiBhY3RpdmUgZm9ybSBmb3IgdGhlIGdpdmVuIGRhdGFQYXRoLlxuICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIGNvbXBvbmVudCBzZXJ2aW5nIGEgcGFydCBvZiB0aGUgZGF0YVBhdGgsXG4gICAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgICBpZiAoYXdhaXQgY29tcG9uZW50Lm5hdmlnYXRlVG9Db21wb25lbnQ/LihcbiAgICAgICAgICAgICAgICBmdWxsRGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgc3ViQ29tcG9uZW50cyA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2Ygc3ViQ29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJzID0gZXJyb3JzW2NvbXBvbmVudC5kYXRhUGF0aF1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIGVycnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJycywgZmlyc3QgJiYgZm9jdXMpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgICAgLy8gRm91bmQgYSBuZXN0ZWQgZm9ybSB0byBkaXNwbGF5IGF0IGxlYXN0IHBhcnRzIGZvIHRoZSBlcnJvcnMuXG4gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc2hvdyBhbGwgZXJyb3JzIGF0IG9uY2UsIHNvIHdlJ3JlIGRvbmUuIERvbid0IGNhbGxcbiAgICAgICAgICAgICAgICAvLyBgbm90aWZ5RXJyb3JzKClgIHlldCwgYXMgd2UgY2FuIG9ubHkgZGlzcGxheSBpdCBvbmNlXG4gICAgICAgICAgICAgICAgLy8gYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIHdhcyBjYWxsZWQgZnJvbSBgRGl0b0Zvcm0ubW91bnRlZCgpYFxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdGlsbCBoZXJlLCBzbyBrZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBXaGVuIHRoZSBlcnJvciBjYW4ndCBiZSBtYXRjaGVkLCBhZGQgaXQgdG8gYSBsaXN0IG9mIHVubWF0Y2hlZFxuICAgICAgICAgIC8vIGVycm9ycyB3aXRoIGRlY2VudCBtZXNzYWdlLCB0byByZXBvcnQgYXQgdGhlIGVuZC5cbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGxhYmVsaXplKHByb3BlcnR5KVxuICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IGZpZWxkXG4gICAgICAgICAgICAgID8gYFRoZSBmaWVsZCAke2ZpZWxkfWBcbiAgICAgICAgICAgICAgOiBgVGhlICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICAgICAgdW5tYXRjaGVkLnB1c2goYCR7cHJlZml4fSAke2Vyci5tZXNzYWdlfWApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgIH1cbiAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnModW5tYXRjaGVkLmpvaW4oJ1xcbicpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBub3RpZnlFcnJvcnMobWVzc2FnZSkge1xuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICB0aXRsZTogJ1ZhbGlkYXRpb24gRXJyb3JzJyxcbiAgICAgICAgdGV4dDogbWVzc2FnZSB8fCAnUGxlYXNlIGNvcnJlY3QgdGhlIGhpZ2hsaWdodGVkIGVycm9ycy4nXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICByZXNldERhdGEoKSB7XG4gICAgICAvLyBXZSBjYW4ndCBzZXQgYHRoaXMuZGF0YSA9IC4uLmAgYmVjYXVzZSBpdCdzIGEgcHJvcGVydHksIGJ1dCB3ZSBjYW5cbiAgICAgIC8vIHNldCBhbGwga25vd24gcHJvcGVydGllcyBvbiBpdCB0byB0aGUgdmFsdWVzIHJldHVybmVkIGJ5XG4gICAgICAvLyBgc2V0RGVmYXVsdHMoKWAsIGFzIHRoZXkgYXJlIGFsbCByZWFjdGl2ZSBhbHJlYWR5IGZyb20gdGhlIHN0YXJ0czpcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5kYXRhLCBzZXREZWZhdWx0cyh0aGlzLnNjaGVtYSwge30sIHRoaXMpKVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgZm9yIChjb25zdCBuYW1lIGluIGRhdGEpIHtcbiAgICAgICAgaWYgKG5hbWUgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgbmFtZSwgZGF0YVtuYW1lXSlcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSkpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5tYXJrRGlydHkoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmaWx0ZXJEYXRhKGRhdGEpIHtcbiAgICAgIC8vIEZpbHRlcnMgb3V0IGFycmF5cyBhbmQgb2JqZWN0cyB0aGF0IGFyZSBiYWNrIGJ5IGRhdGEgcmVzb3VyY2VzXG4gICAgICAvLyB0aGVtc2VsdmVzLCBhcyB0aG9zZSBhcmUgYWxyZWFkeSB0YWtpbmcgY2FyZSBvZiB0aHJvdWdoIHRoZWlyIG93biBBUElcbiAgICAgIC8vIHJlc291cmNlIGVuZC1wb2ludHMgYW5kIHNob3VsZG4ndCBiZSBzZXQuXG4gICAgICBjb25zdCBjb3B5ID0ge31cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkgfHwgaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKVxuICAgICAgICAgIGlmIChjb21wb25lbnRzLnNvbWUoY29tcG9uZW50ID0+IGNvbXBvbmVudC5wcm92aWRlc0RhdGEpKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb3B5W25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb3B5XG4gICAgfSxcblxuICAgIHByb2Nlc3NEYXRhKHsgdGFyZ2V0ID0gJ2NsaXBib2FyZCcsIHNjaGVtYU9ubHkgPSB0cnVlIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIHByb2Nlc3NEYXRhKFxuICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgdGhpcy5kYXRhUGF0aCwge1xuICAgICAgICAgIC8vIE5lZWRlZCBmb3IgRGl0b0NvbnRleHQgaGFuZGxpbmcgaW5zaWRlIGBwcm9jZXNzRGF0YWAgYW5kXG4gICAgICAgICAgLy8gYHByb2Nlc3NTY2hlbWFEYXRhKClgOlxuICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICBzY2hlbWFPbmx5LFxuICAgICAgICAgIHRhcmdldFxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIGAkc2NoZW1hUGFyZW50Q29tcG9uZW50KClgIGlzIG9ubHkgc2V0IGlmIG9uZSBvZiB0aGUgYW5jZXN0b3JzIHVzZXNcbiAgICAgIC8vIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgICAgdGhpcy4kc2NoZW1hUGFyZW50Q29tcG9uZW50KCk/Ll9yZWdpc3RlclNjaGVtYUNvbXBvbmVudCh0aGlzLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSwgY29tcG9uZW50LCBhZGQpXG4gICAgICAvLyBPbmx5IHJlZ2lzdGVyIHdpdGggdGhlIHBhcmVudCBpZiBzY2hlbWEgc2hhcmVzIGRhdGEgd2l0aCBpdC5cbiAgICAgIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50Py5fcmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50LCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmUocGFuZSwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMucGFuZXNSZWdpc3RyeSwgcGFuZSwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJQYW5lbChwYW5lbCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMucGFuZWxzUmVnaXN0cnksIHBhbmVsLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlckVudHJ5KHJlZ2lzdHJ5LCBlbnRyeSwgYWRkKSB7XG4gICAgICBjb25zdCB1aWQgPSBlbnRyeS4kdWlkXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHRoaXMuJHNldChyZWdpc3RyeSwgdWlkLCBlbnRyeSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJGRlbGV0ZShyZWdpc3RyeSwgdWlkKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfbGlzdEVudHJpZXNCeURhdGFQYXRoKHJlZ2lzdHJ5KSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZWdpc3RyeSkucmVkdWNlKChlbnRyaWVzQnlEYXRhUGF0aCwgZW50cnkpID0+IHtcbiAgICAgICAgLy8gTXVsdGlwbGUgZW50cmllcyBjYW4gYmUgbGlua2VkIHRvIHRoZSBzYW1lIGRhdGEtcGF0aCwgZS5nLiB3aGVuXG4gICAgICAgIC8vIHRoZXJlIGFyZSB0YWJzLiBMaW5rIGVhY2ggZGF0YS1wYXRoIHRvIGFuIGFycmF5IG9mIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IHsgZGF0YVBhdGggfSA9IGVudHJ5XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBlbnRyaWVzQnlEYXRhUGF0aFtkYXRhUGF0aF0gfHw9IFtdXG4gICAgICAgIGVudHJpZXMucHVzaChlbnRyeSlcbiAgICAgICAgcmV0dXJuIGVudHJpZXNCeURhdGFQYXRoXG4gICAgICB9LCB7fSlcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXMoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKS5zdGFydHNXaXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICAgID8gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICAgICAgOiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRW50cmllcyhcbiAgICAgICAgZW50cmllc0J5RGF0YVBhdGhbbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpXSB8fCBbXSxcbiAgICAgICAgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIG5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRW50cmllcyhcbiAgICAgICAgZW50cmllc0J5RGF0YVBhdGhbYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSldIHx8IFtdLFxuICAgICAgICBtYXRjaFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfZmlsdGVyRW50cmllcyhlbnRyaWVzLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hdGNoID8gZW50cmllcy5maWx0ZXIobWF0Y2gpIDogZW50cmllc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5kaXRvLXNjaGVtYS5kaXRvLXNjaGVtYS1pbmxpbmVkKFxuICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICA6ZGF0YT1cImRhdGFcIlxuICA6bWV0YT1cIm1ldGFcIlxuICA6c3RvcmU9XCJzdG9yZVwiXG4gIDpsYWJlbD1cImlzQ29tcGFjdCA/IG51bGwgOiBsYWJlbFwiXG4gIDppbmxpbmVkPVwidHJ1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtY29tcGFjdCc6IGlzQ29tcGFjdCB9XCJcbilcbiAgLy8gUmVuZGVyIGRpdG8tZWRpdC1idXR0b25zIGZvciBpbmxpbmVkIHNoZW1hcyBzZXBhcmF0ZWx5IGZyb20gYWxsXG4gIC8vIG90aGVycyBpbiBgVHlwZUxpc3RgIGFzIGEgc2NvcGUsIGZvciBiZXR0ZXIgaGFuZGxpbmcgb2YgbGF5b3V0LlxuICB0ZW1wbGF0ZSgjZWRpdC1idXR0b25zKVxuICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgdi1pZj1cImRlbGV0YWJsZSB8fCBkcmFnZ2FibGUgfHwgZWRpdGFibGVcIlxuICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICBAZGVsZXRlPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBkaXRvLXNjaGVtYS5kaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpsYWJlbD1cImlzQ29tcGFjdCA/IG51bGwgOiBsYWJlbFwiXG4gICAgOmlubGluZWQ9XCJ0cnVlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLWNvbXBhY3QnOiBpc0NvbXBhY3QgfVwiXG4gIClcbiAgICAvLyBSZW5kZXIgZGl0by1lZGl0LWJ1dHRvbnMgZm9yIGlubGluZWQgc2hlbWFzIHNlcGFyYXRlbHkgZnJvbSBhbGxcbiAgICAvLyBvdGhlcnMgaW4gYFR5cGVMaXN0YCBhcyBhIHNjb3BlLCBmb3IgYmV0dGVyIGhhbmRsaW5nIG9mIGxheW91dC5cbiAgICB0ZW1wbGF0ZSgjZWRpdC1idXR0b25zKVxuICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgIHYtaWY9XCJkZWxldGFibGUgfHwgZHJhZ2dhYmxlIHx8IGVkaXRhYmxlXCJcbiAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICBAZGVsZXRlPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zY2hlbWEtaW5saW5lZFxuICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgID4gLmRpdG8tc2NoZW1hLWhlYWRlclxuICAgICAgICAvLyBDaGFuZ2Ugc3BhY2luZyBzbyAuZGl0by1sYWJlbCBjb3ZlcnMgdGhlIGZ1bGwgLmRpdG8tc2NoZW1hLWhlYWRlci5cbiAgICAgICAgbWFyZ2luOiAtJGZvcm0tc3BhY2luZ1xuICAgICAgICAuZGl0by1sYWJlbFxuICAgICAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW5cbiAgICAgICAgICAtLWxhYmVsLXBhZGRpbmc6ICN7JGZvcm0tc3BhY2luZ31cbiAgICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgICAgICAvLyBCZWNhdXNlIHRhYmxlcyBoYXZlIGEgZnVubnkgd2F5IG9mIGFsbG93aW5nIHRvbyBtdWNoIHdpZHRoIGdyb3d0aDpcbiAgICAgICAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoXG4gICAgICAgICYgKy5kaXRvLXBhbmVcbiAgICAgICAgICAvLyBOZWVkZWQgZm9yIHRyYW5zaXRpb24taGVpZ2h0IGluIERpdG9TY2hlbWE6XG4gICAgICAgICAgbWluLWhlaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc0NvbXBhY3QgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tc2NoZW1hLWlubGluZWQnLCB7XG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIGlzQ29tcGFjdCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNDb21wYWN0ICYmICEhdGhpcy5sYWJlbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1wYW5lKFxuICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgdi1zaG93PVwidmlzaWJsZVwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPWB7XG4gICAgICBzY2hlbWEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgbmVzdGVkLFxuICAgICAgc3RvcmVcbiAgICB9IGluIGNvbXBvbmVudFNjaGVtYXNgXG4gIClcbiAgICAuZGl0by1icmVhayhcbiAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdiZWZvcmUnXCJcbiAgICApXG4gICAgZGl0by1jb250YWluZXIoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwiaXNTaW5nbGVDb21wb25lbnRcIlxuICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgKVxuICAgIC5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2FmdGVyJ1wiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcGFuZShcbiAgICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgICB2LXNob3c9XCJ2aXNpYmxlXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1mb3I9YHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICAgIG5lc3RlZCxcbiAgICAgICAgc3RvcmVcbiAgICAgIH0gaW4gY29tcG9uZW50U2NoZW1hc2BcbiAgICApXG4gICAgICAuZGl0by1icmVhayhcbiAgICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgICAgKVxuICAgICAgZGl0by1jb250YWluZXIoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICAgIDprZXk9XCJuZXN0ZWREYXRhUGF0aFwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cImlzU2luZ2xlQ29tcG9uZW50XCJcbiAgICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tYnJlYWsoXG4gICAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdhZnRlcidcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXBhbmVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgZmxleC1mbG93OiByb3cgd3JhcFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnRcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmVcbiAgICAvLyBSZW1vdmUgcGFkZGluZyBhZGRlZCBieSBgLmRpdG8tY29udGFpbmVyYFxuICAgIG1hcmdpbjogKC0kZm9ybS1zcGFjaW5nKSAoLSRmb3JtLXNwYWNpbmctaGFsZilcbiAgICAvLyBBZGQgcmVtb3ZlZCBob3Jpem9udGFsIG1hcmdpbiBhZ2FpbiB0byBtYXgtd2lkdGg6XG4gICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aCArIDIgKiAkZm9ybS1zcGFjaW5nLWhhbGZcbiAgICAvLyBVc2UgYGZsZXg6IDAlYCBmb3IgYWxsIGAuZGl0by1wYW5lYCBleGNlcHQgYC5kaXRvLXBhbmUtbWFpbmAsXG4gICAgLy8gc28gdGhhdCB0aGUgYC5kaXRvLWJ1dHRvbnMtbWFpbmAgY2FuIGJlIG1vdmVkIGFsbCB0aGUgd2F5IHRvIHRoZSBib3R0b20uXG4gICAgZmxleDogMCVcblxuICAgICYuZGl0by1wYW5lLW1haW5cbiAgICAgIGZsZXg6IDEwMCVcblxuICAgIC5kaXRvLXNjaGVtYS1oZWFkZXI6bm90KC5kaXRvLXNjaGVtYS1tZW51LWhlYWRlcikgKyAmXG4gICAgICAvLyBDbGVhciB0b3AtbWFyZ2luIGlmIHRoZSBjb21wb25lbnRzIGFyZSBwcmVjZWRlZCBieSBhIHNjaGVtYSBoZWFkZXIuXG4gICAgICBtYXJnaW4tdG9wOiAwXG5cbiAgICAuZGl0by1jb250YWluZXIuZGl0by1vbWl0LXBhZGRpbmcgPiAmXG4gICAgICAvLyBDbGVhciBtYXJnaW5zIHNldCBhYm92ZSBhZ2FpbiBpZiBwYXJlbnQgaXMgb21pdHRpbmcgcGFkZGluZy5cbiAgICAgIG1hcmdpbjogMFxuICAgICAgbWF4LXdpZHRoOiB1bnNldFxuXG4gICAgLmRpdG8tYnJlYWtcbiAgICAgIGZsZXg6IDEwMCVcbiAgICAgIGhlaWdodDogMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRBbGxQYW5lbFNjaGVtYXMsIGlzTmVzdGVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFuZScsIHtcbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy50YWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0YWI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdmlzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYiA/IHRoaXMgOiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRTY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGNvbXBvbmVudHMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXNcbiAgICAgIC8vIGFuZCBhZGRzIHRoZSBrZXkgYXMgdGhlIG5hbWUgdG8gZWFjaCBjb21wb25lbnQsIHVzZWQgZm9yIGxhYmVscywgZXRjLlxuICAgICAgLy8gTk9URTogc2NoZW1hIGNhbiBiZSBudWxsIHdoaWxlIG11bHRpLWZvcm0gbGlzdHMgbG9hZCB0aGVpciBkYXRhLFxuICAgICAgLy8gYmVjYXVzZSBvbmx5IHRoZSBhdmFpbGFibGUgZGF0YSB3aWxsIGRldGVybWluZSB0aGUgdHlwZSBvZiBmb3JtLlxuICAgICAgLy8gV2hlbiBlZGl0aW5nIHByaW1pdGl2ZSB2YWx1ZXMgdGhyb3VnaCBhIGZvcm0sIGRvIG5vdCBhcHBlbmQgJ25hbWUnIHRvXG4gICAgICAvLyB0aGUgY29tcG9uZW50J3MgZGF0YVBhdGggc28gaXQgY2FuIGJlIG1hcHBlZCB0byBmcm9tIHZhbGlkYXRpb24gZXJyb3JzLlxuICAgICAgLy8gTk9URTogTm90IGFsbCBzY2hlbWFzIC8gY29tcG9uZW50cyBoYXZlIGEgc291cmNlU2NoZW1hLCBlLmcuIGRpYWxvZ3MuXG4gICAgICBjb25zdCB3cmFwUHJpbWl0aXZlcyA9IHRoaXMuc291cmNlU2NoZW1hPy53cmFwUHJpbWl0aXZlc1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hPy5jb21wb25lbnRzIHx8IHt9KS5tYXAoXG4gICAgICAgIChbbmFtZSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgIC8vIEFsd2F5cyBhZGQgbmFtZSB0byBjb21wb25lbnQgc2NoZW1hLlxuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICAgIC8vIFNoYXJlIGRhdGFQYXRoIGFuZCBzdG9yZSB3aXRoIHBhcmVudCBpZiBub3QgbmVzdGVkOlxuICAgICAgICAgIGNvbnN0IG5lc3RlZCA9IGlzTmVzdGVkKHNjaGVtYSlcbiAgICAgICAgICBjb25zdCBuZXN0ZWREYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIGRhdGFQYXRoOiBuZXN0ZWQgJiYgIXdyYXBQcmltaXRpdmVzXG4gICAgICAgICAgICAgID8gbmVzdGVkRGF0YVBhdGhcbiAgICAgICAgICAgICAgOiB0aGlzLmRhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICAgICAgICBuZXN0ZWQsXG4gICAgICAgICAgICBzdG9yZTogbmVzdGVkID8gdGhpcy5nZXRDaGlsZFN0b3JlKG5hbWUpIDogdGhpcy5zdG9yZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYXMoKSB7XG4gICAgICAvLyBHYXRoZXIgYWxsIHBhbmVsIHNjaGVtYXMgZnJvbSBhbGwgY29tcG9uZW50IHNjaGVtYXMsIGJ5IGZpbmRpbmcgdGhvc2VcbiAgICAgIC8vIHRoYXQgd2FudCB0byBwcm92aWRlIGEgcGFuZWwuIFNlZSBgZ2V0QWxsUGFuZWxTY2hlbWFzKClgIGZvciBkZXRhaWxzLlxuICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50U2NoZW1hcy5mbGF0TWFwKFxuICAgICAgICAoeyBzY2hlbWEsIG5lc3RlZERhdGFQYXRoOiBkYXRhUGF0aCB9KSA9PiBnZXRBbGxQYW5lbFNjaGVtYXMoXG4gICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50LFxuICAgICAgICAgIHRoaXMudGFiQ29tcG9uZW50XG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNTaW5nbGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaW5nbGUgJiYgdGhpcy5jb21wb25lbnRTY2hlbWFzLmxlbmd0aCA9PT0gMVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZSh0aGlzLCBhZGQpXG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgaWYgKHRoaXMudGFiKSB7XG4gICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgaGFzaDogdGhpcy50YWIgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRnJhY3Rpb24odmFsdWUpIHtcbiAgY29uc3QgbWF0Y2ggPSAoXG4gICAgaXNTdHJpbmcodmFsdWUpICYmXG4gICAgdmFsdWUubWF0Y2goL15cXHMqKFsrLV0/XFxkKylcXHMqXFwvXFxzKihbKy1dP1xcZCspXFxzKiQvKVxuICApXG4gIGlmIChtYXRjaCkge1xuICAgIGNvbnN0IFssIGRpdmlkZW5kLCBkaXZpc29yXSA9IG1hdGNoXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoZGl2aWRlbmQpIC8gcGFyc2VGbG9hdChkaXZpc29yKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKVxuICB9XG59XG4iLCJcbi5kaXRvLWNvbnRhaW5lcihcbiAgdi1zaG93PVwiY29tcG9uZW50VmlzaWJsZVwiXG4gIDpjbGFzcz1cImNvbnRhaW5lckNsYXNzXCJcbiAgOnN0eWxlPVwiY29udGFpbmVyU3R5bGVcIlxuKVxuICBkaXRvLWxhYmVsKFxuICAgIHYtaWY9XCJsYWJlbFwiXG4gICAgOmxhYmVsPVwibGFiZWxcIlxuICAgIDpkYXRhUGF0aD1cImxhYmVsRGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgKVxuICBjb21wb25lbnQuZGl0by1jb21wb25lbnQoXG4gICAgOmlzPVwiZ2V0VHlwZUNvbXBvbmVudChzY2hlbWEudHlwZSlcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpzaW5nbGU9XCJzaW5nbGVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImNvbXBvbmVudERpc2FibGVkXCJcbiAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gICAgQGVycm9ycz1cIm9uRXJyb3JzXCJcbiAgKVxuICBkaXRvLWVycm9ycyhcbiAgICA6ZXJyb3JzPVwiZXJyb3JzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tY29udGFpbmVyKFxuICAgIHYtc2hvdz1cImNvbXBvbmVudFZpc2libGVcIlxuICAgIDpjbGFzcz1cImNvbnRhaW5lckNsYXNzXCJcbiAgICA6c3R5bGU9XCJjb250YWluZXJTdHlsZVwiXG4gIClcbiAgICBkaXRvLWxhYmVsKFxuICAgICAgdi1pZj1cImxhYmVsXCJcbiAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgIDpkYXRhUGF0aD1cImxhYmVsRGF0YVBhdGhcIlxuICAgICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICAgIClcbiAgICBjb21wb25lbnQuZGl0by1jb21wb25lbnQoXG4gICAgICA6aXM9XCJnZXRUeXBlQ29tcG9uZW50KHNjaGVtYS50eXBlKVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOnNpbmdsZT1cInNpbmdsZVwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImNvbXBvbmVudERpc2FibGVkXCJcbiAgICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICAgIEBlcnJvcnM9XCJvbkVycm9yc1wiXG4gICAgKVxuICAgIGRpdG8tZXJyb3JzKFxuICAgICAgOmVycm9ycz1cImVycm9yc1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNvbnRhaW5lclxuICAgIC8vIE5lZWRlZCBmb3IgYmV0dGVyIHZlcnRpY2FsIGFsaWdubWVudDpcbiAgICBhbGlnbi1zZWxmOiBzdHJldGNoXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgIC8vIFRvIHByZXZlbnQgbGlzdCB0YWJsZXMgZnJvbSBibG93aW5nIG91dCBvZiB0aGVpciBmbGV4IGJveCBjb250YWluZXJzLlxuICAgIG1heC13aWR0aDogMTAwJVxuICAgIC8vIENhbm5vdCB1c2UgbWFyZ2luIGhlcmUgYXMgaXQgbmVlZHMgdG8gYmUgcGFydCBvZiBib3gtc2l6aW5nIGZvclxuICAgIC8vIHBlcmNlbnRhZ2VzIGluIGZsZXgtYmFzaXMgdG8gd29yay5cbiAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nICRmb3JtLXNwYWNpbmctaGFsZlxuICAgICY6ZW1wdHlcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAmLmRpdG8tb21pdC1wYWRkaW5nXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICA+IC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogJGZvcm0tc3BhY2luZyAkZm9ybS1zcGFjaW5nLWhhbGYgMFxuICAgICYuZGl0by1zaW5nbGVcbiAgICAgIGhlaWdodDogMTAwJSAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IGF0IHRoZSBib3R0b21cbiAgLy8gTk9URTogVGhpcyBpcyBub3QgbmVzdGVkIGluc2lkZSBgLmRpdG8tY29udGFpbmVyYCBzbyB0aGF0IG90aGVyXG4gIC8vIHR5cGUgY29tcG9uZW50cyBjYW4gb3ZlcnJpZGUgYC5kaXRvLXdpZHRoLWZpbGxgIGNsYXNzIChmaWx0ZXIgcHJlY2VkZW5jZSkuXG4gIC5kaXRvLWNvbXBvbmVudFxuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgJi5kaXRvLWNoZWNrYm94LFxuICAgICAgJi5kaXRvLXJhZGlvLWJ1dHRvblxuICAgICAgICAvLyBXZWJLaXQgZG9lc24ndCBsaWtlIGNoYW5nZWQgd2lkdGggb24gY2hlY2tib3hlcyBhbmQgcmFkaW9zLCBvdmVycmlkZTpcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgIHdpZHRoOiBhdXRvXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNTdHJpbmcsIGlzTnVtYmVyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0VHlwZU9wdGlvbnMsIHNob3VsZE9taXRQYWRkaW5nIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgcGFyc2VGcmFjdGlvbiB9IGZyb20gJy4uL3V0aWxzL21hdGguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1jb250YWluZXInLCB7XG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogdGhpcy5uZXN0ZWQgfSlcbiAgICB9LFxuXG4gICAgdHlwZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gZ2V0VHlwZU9wdGlvbnModGhpcy5zY2hlbWEpIHx8IHt9XG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IHNjaGVtYVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgbGFiZWwgIT09IGZhbHNlICYmXG4gICAgICAgICghIWxhYmVsIHx8IHRoaXMudHlwZU9wdGlvbnMuZ2VuZXJhdGVMYWJlbCAmJiB0aGlzLmdlbmVyYXRlTGFiZWxzKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc0xhYmVsID8gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSkgOiBudWxsXG4gICAgfSxcblxuICAgIGxhYmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBVbm5lc3RlZCB0eXBlcyBkb24ndCBoYXZlIGEgZGF0YVBhdGggZm9yIHRoZW1zZWx2ZXMsIGRvbid0IHVzZSBpdDpcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMuZGF0YVBhdGggOiBudWxsXG4gICAgfSxcblxuICAgIGNvbXBvbmVudFdpZHRoOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZU9wdGlvbnMuZGVmYXVsdFdpZHRoXG4gICAgICB9LFxuICAgICAgZ2V0KHdpZHRoKSB7XG4gICAgICAgIC8vIFVzZSAxMDAlID09IDEuMCBhcyBkZWZhdWx0IHdpZHRoIHdoZW4gbm90aGluZyBpcyBzZXQ6XG4gICAgICAgIHJldHVybiB3aWR0aCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAxLjBcbiAgICAgICAgICA6IGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgICAgPyB3aWR0aC5tYXRjaCgvXlxccypbPD5dP1xccyooLiopJC8pWzFdIC8vIFJlbW92ZSB3aWR0aCBvcGVyYXRvclxuICAgICAgICAgICAgOiB3aWR0aFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50V2lkdGhPcGVyYXRvcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZ2V0KHdpZHRoKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyh3aWR0aClcbiAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKihbPD5dPykvKVsxXSB8fCBudWxsXG4gICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRWaXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0VmlzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50RGlzYWJsZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdkaXNhYmxlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkaXNhYmxlZCkge1xuICAgICAgICByZXR1cm4gZGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29udGFpbmVyQ2xhc3MoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzOiBjb250YWluZXJDbGFzcyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXNpbmdsZSc6IHRoaXMuc2luZ2xlLFxuICAgICAgICAnZGl0by1vbWl0LXBhZGRpbmcnOiBzaG91bGRPbWl0UGFkZGluZyh0aGlzLnNjaGVtYSksXG4gICAgICAgIC4uLihcbiAgICAgICAgICBpc1N0cmluZyhjb250YWluZXJDbGFzcylcbiAgICAgICAgICAgID8geyBbY29udGFpbmVyQ2xhc3NdOiB0cnVlIH1cbiAgICAgICAgICAgIDogY29udGFpbmVyQ2xhc3NcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRCYXNpcygpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5jb21wb25lbnRXaWR0aFxuICAgICAgLy8gJ2F1dG8nID0gbm8gZml0dGluZzpcbiAgICAgIGNvbnN0IGJhc2lzID0gKFxuICAgICAgICBbbnVsbCwgJ2F1dG8nLCAnZmlsbCddLmluY2x1ZGVzKHdpZHRoKSA/ICdhdXRvJ1xuICAgICAgICA6IC8lJC8udGVzdCh3aWR0aCkgPyBwYXJzZUZsb2F0KHdpZHRoKSAvLyBwZXJjZW50YWdlXG4gICAgICAgIDogL1thLXpdLy50ZXN0KHdpZHRoKSA/IHdpZHRoIC8vIG5hdGl2ZSB1bml0c1xuICAgICAgICA6IHBhcnNlRnJhY3Rpb24od2lkdGgpICogMTAwIC8vIGZyYWN0aW9uXG4gICAgICApXG4gICAgICByZXR1cm4gaXNOdW1iZXIoYmFzaXMpID8gYCR7YmFzaXN9JWAgOiBiYXNpc1xuICAgIH0sXG5cbiAgICBjb250YWluZXJTdHlsZSgpIHtcbiAgICAgIC8vIEludGVycHJldCAnPjUwJScgYXMgJzUwJSwgZmxleC1ncm93OiAxYFxuICAgICAgY29uc3QgZ3JvdyA9IChcbiAgICAgICAgdGhpcy5jb21wb25lbnRXaWR0aE9wZXJhdG9yID09PSAnPicgfHxcbiAgICAgICAgdGhpcy5jb21wb25lbnRXaWR0aCA9PT0gJ2ZpbGwnXG4gICAgICApXG4gICAgICAvLyBJbnRlcnByZXQgJzw1MCUnIGFzICc1MCUsIGZsZXgtc2hyaW5rOiAxYFxuICAgICAgY29uc3Qgc2hyaW5rID0gdGhpcy5jb21wb25lbnRXaWR0aE9wZXJhdG9yID09PSAnPCdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZsZXg6IGAke2dyb3cgPyAxIDogMH0gJHtzaHJpbmsgPyAxIDogMH0gJHt0aGlzLmNvbXBvbmVudEJhc2lzfWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcG9uZW50Q2xhc3MoKSB7XG4gICAgICBjb25zdCBiYXNpc0lzQXV0byA9IHRoaXMuY29tcG9uZW50QmFzaXMgPT09ICdhdXRvJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5jb21wb25lbnREaXNhYmxlZCxcbiAgICAgICAgJ2RpdG8td2lkdGgtZmlsbCc6ICFiYXNpc0lzQXV0byB8fCB0aGlzLmNvbXBvbmVudFdpZHRoID09PSAnZmlsbCcsXG4gICAgICAgICdkaXRvLXdpZHRoLWF1dG8nOiBiYXNpc0lzQXV0byxcbiAgICAgICAgJ2RpdG8taGFzLWVycm9ycyc6ICEhdGhpcy5lcnJvcnNcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRXJyb3JzKGVycm9ycykge1xuICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tdGFic1xuICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgdi1mb3I9XCIodGFiU2NoZW1hLCBrZXkpIGluIHRhYnNcIlxuICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodGFiU2NoZW1hKVwiXG4gICAgOmtleT1cImtleVwiXG4gICAgOnRvPVwieyBoYXNoOiBrZXkgfVwiXG4gICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICApXG4gICAgfCB7eyBnZXRMYWJlbCh0YWJTY2hlbWEsIGtleSkgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRhYnNcbiAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICB2LWZvcj1cIih0YWJTY2hlbWEsIGtleSkgaW4gdGFic1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHRhYlNjaGVtYSlcIlxuICAgICAgOmtleT1cImtleVwiXG4gICAgICA6dG89XCJ7IGhhc2g6IGtleSB9XCJcbiAgICAgIGFjdGl2ZS1jbGFzcz1cImRpdG8tYWN0aXZlXCJcbiAgICApXG4gICAgICB8IHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gICR0YWItY29sb3ItYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0XG4gICR0YWItY29sb3ItaW5hY3RpdmU6ICRjb2xvci1saWdodFxuICAkdGFiLWNvbG9yLWFjdGl2ZTogJGNvbG9yLWxpZ2h0ZXN0XG4gICR0YWItY29sb3ItaG92ZXI6ICRjb2xvci13aGl0ZVxuXG4gIC5kaXRvLXRhYnNcbiAgICAvLyBTZWU6IGh0dHBzOi8vY29kZXBlbi5pby90aG9sZXgvcGVuL2h2ZUJ4L1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvXG4gICAgYVxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1pbmFjdGl2ZVxuICAgICAgcGFkZGluZzogJHRhYi1wYWRkaW5nLXZlciAkdGFiLXBhZGRpbmctaG9yXG4gICAgICBtYXJnaW4tbGVmdDogJHRhYi1tYXJnaW5cbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR0YWItcmFkaXVzXG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHRhYi1yYWRpdXNcbiAgICAgICY6aG92ZXJcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1ob3ZlclxuICAgICAgJjphY3RpdmVcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1hY3RpdmVcbiAgICAgICYuZGl0by1hY3RpdmVcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1iYWNrZ3JvdW5kXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYnMnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFiczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzZWxlY3RlZFRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi8vIE9ubHkgc2hvdyBwYW5lbHMgaW4gdGFicyB3aGVuIHRoZSB0YWJzIGFyZSBhbHNvIHZpc2libGUuXG5jb21wb25lbnQuZGl0by1wYW5lbChcbiAgOmlzPVwicGFuZWxUYWdcIlxuICB2LXNob3c9XCJ2aXNpYmxlICYmICghcGFuZWxUYWJDb21wb25lbnQgfHwgcGFuZWxUYWJDb21wb25lbnQudmlzaWJsZSlcIlxuICBAc3VibWl0LnByZXZlbnRcbilcbiAgbGFiZWwuZGl0by1wYW5lbC10aXRsZSB7eyBnZXRMYWJlbChzY2hlbWEpIH19XG4gIGRpdG8tc2NoZW1hLmRpdG8tcGFuZWwtc2NoZW1hKFxuICAgIDpzY2hlbWE9XCJwYW5lbFNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6aGFzT3duRGF0YT1cImhhc093bkRhdGFcIlxuICApXG4gICAgZGl0by1idXR0b25zKFxuICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAvLyBPbmx5IHNob3cgcGFuZWxzIGluIHRhYnMgd2hlbiB0aGUgdGFicyBhcmUgYWxzbyB2aXNpYmxlLlxuICBjb21wb25lbnQuZGl0by1wYW5lbChcbiAgICA6aXM9XCJwYW5lbFRhZ1wiXG4gICAgdi1zaG93PVwidmlzaWJsZSAmJiAoIXBhbmVsVGFiQ29tcG9uZW50IHx8IHBhbmVsVGFiQ29tcG9uZW50LnZpc2libGUpXCJcbiAgICBAc3VibWl0LnByZXZlbnRcbiAgKVxuICAgIGxhYmVsLmRpdG8tcGFuZWwtdGl0bGUge3sgZ2V0TGFiZWwoc2NoZW1hKSB9fVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tcGFuZWwtc2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpoYXNPd25EYXRhPVwiaGFzT3duRGF0YVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXBhbmVsXG4gICAgbWFyZ2luLWJvdHRvbTogJGNvbnRlbnQtcGFkZGluZ1xuICAgIC5kaXRvLXBhbmVsLXRpdGxlXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgIGJhY2tncm91bmQ6ICRidXR0b24tY29sb3JcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgIC5kaXRvLXBhbmVsLXNjaGVtYVxuICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsXG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci10b3A6IDBcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmICRmb3JtLXNwYWNpbmdcbiAgICAgICAgPiAuZGl0by1idXR0b25zXG4gICAgICAgICAgLS1idXR0b24tbWFyZ2luOiAjeyRmb3JtLXNwYWNpbmd9XG4gICAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmIDBcbiAgICAgIC5kaXRvLW9iamVjdFxuICAgICAgICBib3JkZXI6IDBcbiAgICAgICAgcGFkZGluZzogMFxuICAgICAgLmRpdG8tbGFiZWxcbiAgICAgICAgbWFyZ2luOiAwXG4gICAgICAgIGxhYmVsXG4gICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbFxuICAgICAgLmRpdG8tcGFuZVxuICAgICAgICBtYXJnaW46IDAgKC0kZm9ybS1zcGFjaW5nLWhhbGYpXG4gICAgICAuZGl0by1jb250YWluZXJcbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFuZWwnLCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFuZWxUYWJDb21wb25lbnQ6IHsgdHlwZTogRGl0b0NvbXBvbmVudCwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3duRGF0YTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhbmVsQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFuZWxUYWJDb21wb25lbnRcbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKHRoaXMuc2NoZW1hLmJ1dHRvbnMpXG4gICAgfSxcblxuICAgIHRhcmdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS50YXJnZXQgfHwgdGhpcy5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICBoYXNPd25EYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5vd25EYXRhXG4gICAgfSxcblxuICAgIHBhbmVsRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm93bkRhdGEgfHwgdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIHBhbmVsU2NoZW1hKCkge1xuICAgICAgaWYgKHRoaXMuaGFzT3duRGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY2hlbWFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBgZGF0YWAgZnJvbSB0aGUgc2NoZW1hLCBzbyB0aGF0IERpdG9TY2hlbWEgaXNuJ3QgdXNpbmcgaXQgdG9cbiAgICAgICAgLy8gcHJvZHVjZSBpdHMgb3duIGRhdGEuIFNlZSAkZmlsdGVycyBwYW5lbCBmb3IgbW9yZSBkZXRhaWxzIG9uIGRhdGEuXG4gICAgICAgIGNvbnN0IHsgZGF0YSwgLi4uc2NoZW1hIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICByZXR1cm4gc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhbmVsVGFnKCkge1xuICAgICAgLy8gUGFuZWxzIHRoYXQgcHJvdmlkZSB0aGVpciBvd24gZGF0YSBuZWVkIHRoZWlyIG93biBmb3JtLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/ICdmb3JtJyA6ICdkaXYnXG4gICAgfSxcblxuICAgIHBhbmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBJZiB0aGUgcGFuZWwgcHJvdmlkZXMgaXRzIG93biBkYXRhLCB0aGVuIGl0IG5lZWRzIHRvIHByZWZpeCBhbGxcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCBpdHMgZGF0YS1wYXRoLCBidXQgaWYgaXQgc2hhcmVzIGRhdGEgd2l0aCB0aGUgc2NoZW1hXG4gICAgICAvLyBjb21wb25lbnQsIHRoZW4gaXQgc2hvdWxkIHNoYXJlIHRoZSBkYXRhLXBhdGggbmFtZSBzcGFjZSB0b28uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gdGhpcy5kYXRhUGF0aCA6IHRoaXMuc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoXG4gICAgfSxcblxuICAgIHZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICAvLyBOT1RFOiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBhcyBgc2NoZW1hLmRhdGFgIGhhbmRsaW5nIGluIERpdG9TY2hlbWEsXG4gICAgLy8gd2hlcmUgdGhlIGRhdGEgaXMgYWRkZWQgdG8gdGhlIGFjdHVhbCBjb21wb25lbnQuXG4gICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLnNjaGVtYVxuICAgIGlmIChkYXRhKSB7XG4gICAgICB0aGlzLm93bkRhdGEgPSBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgID8gZGF0YS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgOiBkYXRhXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIFJlZ2lzdGVyIHRoZSBwYW5lbHMgc28gdGhhdCBvdGhlciBjb21wb25lbnRzIGNhbiBmaW5kIHRoZW0gYnkgdGhlaXJcbiAgICAgIC8vIGRhdGEtcGF0aCwgZS5nLiBpbiBUeXBlTGlzdC5vbkZpbHRlckVycm9ycygpXG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lbCh0aGlzLCBhZGQpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXBhbmVscyhcbiAgdi1pZj1cInBhbmVscy5sZW5ndGggPiAwXCJcbilcbiAgZGl0by1wYW5lbChcbiAgICB2LWZvcj1cInsgc2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50IH0gaW4gcGFuZWxzXCJcbiAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgIDprZXk9XCJnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKHNjaGVtYS5uYW1lKVwiXG4gICAgOmRpc2FibGVkPVwic2NoZW1hLmRpc2FibGVkICE9IG51bGwgPyBzY2hlbWEuZGlzYWJsZWQgOiBkaXNhYmxlZFwiXG4gICAgOnBhbmVsVGFiQ29tcG9uZW50PVwidGFiQ29tcG9uZW50XCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcGFuZWxzKFxuICAgIHYtaWY9XCJwYW5lbHMubGVuZ3RoID4gMFwiXG4gIClcbiAgICBkaXRvLXBhbmVsKFxuICAgICAgdi1mb3I9XCJ7IHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCB9IGluIHBhbmVsc1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgICAgOmtleT1cImdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKHNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJzY2hlbWEuZGlzYWJsZWQgIT0gbnVsbCA/IHNjaGVtYS5kaXNhYmxlZCA6IGRpc2FibGVkXCJcbiAgICAgIDpwYW5lbFRhYkNvbXBvbmVudD1cInRhYkNvbXBvbmVudFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXBhbmVsc1xuICAgIG1heC13aWR0aDogJGNvbnRlbnQtc2lkZWJhci13aWR0aFxuICAgIG1pbi13aWR0aDogY2FsYygkY29udGVudC1zaWRlYmFyLXdpZHRoIC8gMilcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFuZWxzJywge1xuICBwcm9wczoge1xuICAgIHBhbmVsczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgICAgIC8vIEFsbG93IHNlcGFyYXRlIHRhYnMgdG8gdXNlIHBhbmVscyBvZiB0aGUgc2FtZSBuYW1lLCBieVxuICAgICAgLy8gcHJlZml4aW5nIHRoZWlyIGtleSB3aXRoIHRoZSB0YWIgbmFtZS5cbiAgICAgIHJldHVybiB0YWJDb21wb25lbnQgPyBgJHt0YWJDb21wb25lbnQudGFifV8ke2RhdGFQYXRofWAgOiBkYXRhUGF0aFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1idXR0b25zKFxuICB2LWlmPVwiYnV0dG9uU2NoZW1hcyB8fCAkc2xvdHMuZGVmYXVsdFwiXG4gIC8qIFBhc3Mgb24gJGxpc3RlbmVycyBzbyB0aGF0IGRpdG8tZWRpdC1idXR0b25zIGNhbiBwYXNzIGV2ZW50cy4gKi9cbiAgdi1vbj1cIiRsaXN0ZW5lcnNcIlxuKVxuICBkaXRvLWNvbnRhaW5lcihcbiAgICB2LWZvcj1cIihidXR0b25TY2hlbWEsIGJ1dHRvbkRhdGFQYXRoKSBpbiBidXR0b25TY2hlbWFzXCJcbiAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGJ1dHRvblNjaGVtYSlcIlxuICAgIDprZXk9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGJ1dHRvblNjaGVtYS5uYW1lKVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgKVxuICAvLyBSZW5kZXIgZWFjaCBub2RlIGluIHRoZSBkZWZhdWx0IHNsb3QgdGhyb3VnaCBgZGl0by12bm9kZWAsIHNvIGl0IGNhbiBiZVxuICAvLyB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gIC5kaXRvLWNvbnRhaW5lcihcbiAgICB2LWZvcj1cIm5vZGUgaW4gJHNsb3RzLmRlZmF1bHRcIlxuICAgIHYtaWY9XCJub2RlLnRhZ1wiXG4gIClcbiAgICBkaXRvLXZub2RlKDpub2RlPVwibm9kZVwiKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tYnV0dG9ucyhcbiAgICB2LWlmPVwiYnV0dG9uU2NoZW1hcyB8fCAkc2xvdHMuZGVmYXVsdFwiXG4gICAgLyogUGFzcyBvbiAkbGlzdGVuZXJzIHNvIHRoYXQgZGl0by1lZGl0LWJ1dHRvbnMgY2FuIHBhc3MgZXZlbnRzLiAqL1xuICAgIHYtb249XCIkbGlzdGVuZXJzXCJcbiAgKVxuICAgIGRpdG8tY29udGFpbmVyKFxuICAgICAgdi1mb3I9XCIoYnV0dG9uU2NoZW1hLCBidXR0b25EYXRhUGF0aCkgaW4gYnV0dG9uU2NoZW1hc1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGJ1dHRvblNjaGVtYSlcIlxuICAgICAgOmtleT1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJidXR0b25TY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGJ1dHRvblNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgKVxuICAgIC8vIFJlbmRlciBlYWNoIG5vZGUgaW4gdGhlIGRlZmF1bHQgc2xvdCB0aHJvdWdoIGBkaXRvLXZub2RlYCwgc28gaXQgY2FuIGJlXG4gICAgLy8gd3JhcHBlZCBpbiBhIGAuZGl0by1jb250YWluZXJgIGNsYXNzLlxuICAgIC5kaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtZm9yPVwibm9kZSBpbiAkc2xvdHMuZGVmYXVsdFwiXG4gICAgICB2LWlmPVwibm9kZS50YWdcIlxuICAgIClcbiAgICAgIGRpdG8tdm5vZGUoOm5vZGU9XCJub2RlXCIpXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbi5kaXRvLWJ1dHRvbnNcbiAgPiAuZGl0by1jb250YWluZXJcbiAgICBwYWRkaW5nOiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWJ1dHRvbnMnLCB7XG4gIHByb3ZpZGU6IHtcbiAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIC8vIENvbXB1dGUgYSBidXR0b25zIGxpc3Qgd2hpY2ggaGFzIHRoZSBkYXRhUGF0aCBiYWtlZCBpbnRvIGl0cyBrZXlzLlxuICAgICAgY29uc3QgeyBkYXRhUGF0aCwgYnV0dG9ucyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGJ1dHRvbnNcbiAgICAgICAgPyBPYmplY3QudmFsdWVzKGJ1dHRvbnMpLnJlZHVjZSgoc2NoZW1hcywgYnV0dG9uKSA9PiB7XG4gICAgICAgICAgc2NoZW1hc1thcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgYnV0dG9uLm5hbWUpXSA9IGJ1dHRvblxuICAgICAgICAgIHJldHVybiBzY2hlbWFzXG4gICAgICAgIH0sIHt9KVxuICAgICAgICA6IG51bGxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZGl0by1idXR0b25zLmRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgOmJ1dHRvbnM9XCJidXR0b25zXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICA6ZGF0YT1cImRhdGFcIlxuICA6bWV0YT1cIm1ldGFcIlxuICA6c3RvcmU9XCJzdG9yZVwiXG4gIC8qIFByZXZlbnQgY2xpY2sgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gZGl0by1sYWJlbDogKi9cbiAgQGNsaWNrLnN0b3BcbilcbiAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgYS5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNEcmFnZ2FibGVcIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICApXG4gIHJvdXRlci1saW5rLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0VkaXRhYmxlXCJcbiAgICA6dG89XCJ7IHBhdGg6IGVkaXRQYXRoIH1cIiBhcHBlbmRcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgKVxuICBkaXRvLWNyZWF0ZS1idXR0b24oXG4gICAgdi1pZj1cImlzQ3JlYXRhYmxlXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6cGF0aD1cImNyZWF0ZVBhdGhcIlxuICAgIDp2ZXJiPVwidmVyYnMuY3JlYXRlXCJcbiAgICA6dGV4dD1cImNyZWF0ZUJ1dHRvblRleHRcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNEZWxldGFibGVcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgQGNsaWNrPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZGl0by1idXR0b25zLmRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIC8qIFByZXZlbnQgY2xpY2sgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gZGl0by1sYWJlbDogKi9cbiAgICBAY2xpY2suc3RvcFxuICApXG4gICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgdi1pZj1cImlzRHJhZ2dhYmxlXCJcbiAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgIClcbiAgICByb3V0ZXItbGluay5kaXRvLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0VkaXRhYmxlXCJcbiAgICAgIDp0bz1cInsgcGF0aDogZWRpdFBhdGggfVwiIGFwcGVuZFxuICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgKVxuICAgIGRpdG8tY3JlYXRlLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgICA6dmVyYj1cInZlcmJzLmNyZWF0ZVwiXG4gICAgICA6dGV4dD1cImNyZWF0ZUJ1dHRvblRleHRcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB2LWlmPVwiaXNEZWxldGFibGVcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgQGNsaWNrPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tZWRpdC1idXR0b25zXG4gICAgLy8gT3ZlcnJpZGUgY3Vyc29yIGZyb20gY29sbGFwc2libGUgZGl0by1sYWJlbDpcbiAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICBmbGV4OiBub25lXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZWRpdC1idXR0b25zJywge1xuICBwcm9wczoge1xuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY3JlYXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3JlYXRlUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYS5mb3JtKVxuICAgIH0sXG5cbiAgICBpc0RyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZHJhZ2dhYmxlJylcbiAgICB9LFxuXG4gICAgaXNFZGl0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZWRpdGFibGUnKSAmJiAhIXRoaXMuZWRpdFBhdGhcbiAgICB9LFxuXG4gICAgaXNDcmVhdGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2NyZWF0YWJsZScpICYmICEhdGhpcy5jcmVhdGVQYXRoXG4gICAgfSxcblxuICAgIGlzRGVsZXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdkZWxldGFibGUnKVxuICAgIH0sXG5cbiAgICBjcmVhdGVCdXR0b25UZXh0KCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIG92ZXJyaWRlIGNyZWF0ZSBidXR0b24gdGhyb3VnaCBjcmVhdGFibGUgb2JqZWN0OlxuICAgICAgICB0aGlzLnNjaGVtYS5jcmVhdGFibGU/LmxhYmVsIHx8XG4gICAgICAgIChcbiAgICAgICAgICAvLyBBdXRvLWdlbmVyYXRlIGNyZWF0ZSBidXR0b24gbGFiZWxzIGZyb20gZnJvbSBsYWJlbHMgZm9yIGxpc3RcbiAgICAgICAgICAvLyBzb3VyY2VzIHdpdGggb25seSBvbmUgZm9ybTpcbiAgICAgICAgICB0aGlzLmZvcm1MYWJlbCAmJlxuICAgICAgICAgIGAke2NhcGl0YWxpemUodGhpcy52ZXJicy5jcmVhdGUpfSAke3RoaXMuZm9ybUxhYmVsfWBcbiAgICAgICAgKSB8fFxuICAgICAgICBudWxsXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYXNPcHRpb24obmFtZSkge1xuICAgICAgLy8gVGhlIG9wdGlvbnMgb2YgdGhlIG91dGVyIGNvbXBvbmVudCBhcmUgcGFzc2VkIHRvIHRoZSBidXR0b25zIGNvbXBvbmVudFxuICAgICAgLy8gdGhyb3VnaCBwcm9wZXJ0aWVzIGB0aGlzW25hbWVdYCwgYnV0IGNhbiBiZSBkaXNhYmxlZCBvbiBhIHBlci1mb3JtXG4gICAgICAvLyBiYXNpcyBieSBzZXR0aW5nIGBzY2hlbWFbbmFtZV1gIHRvIGBmYWxzZWAuXG4gICAgICByZXR1cm4gISEodGhpc1tuYW1lXSAmJiB0aGlzLnNjaGVtYVtuYW1lXSAhPT0gZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNyZWF0ZS1idXR0b25cbiAgdGVtcGxhdGUodi1pZj1cInNob3dQdWxsZG93blwiKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICAgKSB7eyB0ZXh0IH19XG4gICAgdWwuZGl0by1wdWxsZG93bihcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gICAgKVxuICAgICAgbGkodi1mb3I9XCIoZm9ybSwgdHlwZSkgaW4gZm9ybXNcIilcbiAgICAgICAgYShcbiAgICAgICAgICB2LWlmPVwiaXNDcmVhdGFibGUoZm9ybSlcIlxuICAgICAgICAgIDpjbGFzcz1cImBkaXRvLXR5cGUtJHt0eXBlfWBcIlxuICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odHlwZSlcIlxuICAgICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodHlwZSlcIlxuICAgICAgICApIHt7IGdldExhYmVsKGZvcm0pIH19XG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWVsc2VcbiAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgIEBjbGljaz1cImNyZWF0ZUl0ZW0oZm9ybXMuZGVmYXVsdClcIlxuICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgOnRpdGxlPVwibGFiZWxpemUodmVyYilcIlxuICApIHt7IHRleHQgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNyZWF0ZS1idXR0b25cbiAgICB0ZW1wbGF0ZSh2LWlmPVwic2hvd1B1bGxkb3duXCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgICAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgICAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICAgICApIHt7IHRleHQgfX1cbiAgICAgIHVsLmRpdG8tcHVsbGRvd24oXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gICAgICApXG4gICAgICAgIGxpKHYtZm9yPVwiKGZvcm0sIHR5cGUpIGluIGZvcm1zXCIpXG4gICAgICAgICAgYShcbiAgICAgICAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZShmb3JtKVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJgZGl0by10eXBlLSR7dHlwZX1gXCJcbiAgICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odHlwZSlcIlxuICAgICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh0eXBlKVwiXG4gICAgICAgICAgKSB7eyBnZXRMYWJlbChmb3JtKSB9fVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtZWxzZVxuICAgICAgOnR5cGU9XCJpc0lubGluZWQgPyAnYnV0dG9uJyA6ICdzdWJtaXQnXCJcbiAgICAgIEBjbGljaz1cImNyZWF0ZUl0ZW0oZm9ybXMuZGVmYXVsdClcIlxuICAgICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICApIHt7IHRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1jcmVhdGUtYnV0dG9uXG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLmRpdG8tcHVsbGRvd25cbiAgICAgIHJpZ2h0OiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Rm9ybVNjaGVtYXMsIGlzSW5saW5lZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNyZWF0ZS1idXR0b24nLCB7XG4gIG1peGluczogW1B1bGxkb3duTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB2ZXJiOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0ZXh0OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBzaG93UHVsbGRvd24oKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5mb3JtcykubGVuZ3RoID4gMSB8fCAhdGhpcy5mb3Jtcy5kZWZhdWx0XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBpc0NyZWF0YWJsZShmb3JtKSB7XG4gICAgICAvLyBGb3JtcyBjYW4gYmUgZXhjbHVkZWQgZnJvbSB0aGUgbGlzdCBieSBwcm92aWRpbmcgYGNyZWF0YWJsZTogZmFsc2VgXG4gICAgICByZXR1cm4gZm9ybS5jcmVhdGFibGUgIT09IGZhbHNlXG4gICAgfSxcblxuICAgIGNyZWF0ZUl0ZW0oZm9ybSwgdHlwZSA9IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRhYmxlKGZvcm0pKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5saW5lZCkge1xuICAgICAgICAgIHRoaXMuc291cmNlQ29tcG9uZW50LmNyZWF0ZUl0ZW0oZm9ybSwgdHlwZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgICAgICBwYXRoOiBgJHt0aGlzLnBhdGh9L2NyZWF0ZWAsXG4gICAgICAgICAgICBxdWVyeTogeyB0eXBlIH0sXG4gICAgICAgICAgICBhcHBlbmQ6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhbGxvd2VkIHRvIGNyZWF0ZSBpdGVtIGZvciBnaXZlbiBmb3JtJylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93blNlbGVjdCh0eXBlKSB7XG4gICAgICB0aGlzLmNyZWF0ZUl0ZW0odGhpcy5mb3Jtc1t0eXBlXSwgdHlwZSlcbiAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1jbGlwYm9hcmQuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgdi1pZj1cImNsaXBib2FyZFwiXG4pXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1jb3B5KFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHJlZj1cImNvcHlEYXRhXCJcbiAgICB0aXRsZT1cIkNvcHkgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIWNvcHlFbmFibGVkXCJcbiAgICBAY2xpY2s9XCJvbkNvcHlcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1wYXN0ZShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0aXRsZT1cIlBhc3RlIERhdGFcIlxuICAgIDpkaXNhYmxlZD1cIiFwYXN0ZUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uUGFzdGVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jbGlwYm9hcmQuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgICB2LWlmPVwiY2xpcGJvYXJkXCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1jb3B5KFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICByZWY9XCJjb3B5RGF0YVwiXG4gICAgICB0aXRsZT1cIkNvcHkgRGF0YVwiXG4gICAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgICAgQGNsaWNrPVwib25Db3B5XCJcbiAgICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB0aXRsZT1cIlBhc3RlIERhdGFcIlxuICAgICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgICBAY2xpY2s9XCJvblBhc3RlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNPYmplY3QsIGNsb25lLCBkZWluZGVudCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNsaXBib2FyZCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgY2xpcGJvYXJkOiB7IHR5cGU6IFtCb29sZWFuLCBPYmplY3RdLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29weUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgcGFzdGVFbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpeENsaXBib2FyZDogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsaXBib2FyZE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3QodGhpcy5jbGlwYm9hcmQpID8gdGhpcy5jbGlwYm9hcmQgOiB7fVxuICAgIH0sXG5cbiAgICBjb3B5RGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgY29weSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gY29weVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT4gY29weS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YVxuICAgICAgICB9KSlcbiAgICAgICAgOiBjbGlwYm9hcmREYXRhID0+IGNsb25lKGNsaXBib2FyZERhdGEpXG4gICAgfSxcblxuICAgIHBhc3RlRGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgcGFzdGUgfSA9IHRoaXMuY2xpcGJvYXJkT3B0aW9uc1xuICAgICAgcmV0dXJuIHBhc3RlXG4gICAgICAgID8gY2xpcGJvYXJkRGF0YSA9PiBwYXN0ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YVxuICAgICAgICB9KSlcbiAgICAgICAgOiBjbGlwYm9hcmREYXRhID0+IGNsaXBib2FyZERhdGFcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICAvLyBDaGVjayBjbGlwYm9hcmQgY29udGVudCB3aGVuZXZlciBzb21ldGhpbmcgZ2V0cyBjb3BpZWQgb3IgdGhlIHdpbmRvdyBnZXRzXG4gICAgLy8gKHJlKWFjdGl2YXRlZCwgYXMgdGhvc2UgYXJlIHRoZSBtb21lbnRzIHdoZW4gdGhlIGNsaXBib2FyZCBjYW4gY2hhbmdlOlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgIGNvcHk6IHRoaXMuY2hlY2tDbGlwYm9hcmRcbiAgICB9KVxuICAgIHRoaXMuZG9tT24od2luZG93LCB7XG4gICAgICBmb2N1czogdGhpcy5jaGVja0NsaXBib2FyZFxuICAgIH0pXG4gICAgdGhpcy4kd2F0Y2goJ2RhdGEnLCB7XG4gICAgICAvLyBDaGVjayByaWdodCBhd2F5IGFsc28gaW4gY2FzZSB0aGVyZSdzIGFscmVhZHkgZGF0YSAoZS5nLiBjcmVhdGUgZm9ybSkuXG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiAodG8sIGZyb20pID0+IHtcbiAgICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgICAgdGhpcy5jaGVja0NsaXBib2FyZCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBhc3luYyBnZXRDbGlwYm9hcmREYXRhKHJlcG9ydCkge1xuICAgICAgLy8gVXNlIHRoZSBpbnRlcm5hbCBjbGlwYm9hcmQgYXMgZmFsbGJhY2suXG4gICAgICBsZXQgeyBjbGlwYm9hcmREYXRhIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBqc29uID0gYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ucmVhZFRleHQ/LigpXG4gICAgICAgIGlmICh0aGlzLmZpeENsaXBib2FyZCAmJiBqc29uKSB7XG4gICAgICAgICAgLy8gVGhpcyBhcHBlYXJzIHRvIGJlIG5lZWRlZCBvbiBTYWZhcmkgdG8gcHJldmVudCBhIHN0cmFuZ2UgXCJQYXN0ZVwiXG4gICAgICAgICAgLy8gYnV0dG9uIGZyb20gYXBwZWFyaW5nIHdoZW4gdGhlIGNsaXBib2FyZCBpcyBhY2Nlc3NlZCAod2h5PyEpLlxuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LndyaXRlVGV4dD8uKGpzb24pXG4gICAgICAgICAgdGhpcy5maXhDbGlwYm9hcmQgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmIChqc29uKSB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YSA9IEpTT04ucGFyc2UoanNvbilcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChyZXBvcnQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLm5hbWUsIGVyci5tZXNzYWdlKVxuICAgICAgICAgIGlmIChlcnIubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgYWxlcnQoZGVpbmRlbnRgXG4gICAgICAgICAgICAgIFRoZSBkYXRhIGluIHRoZSBjbGlwYm9hcmQgYXBwZWFycyB0byBiZSBtYWxmb3JtZWQ6XG4gICAgICAgICAgICAgICR7ZXJyLm1lc3NhZ2V9XG4gICAgICAgICAgICBgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgeyAkc2NoZW1hLCAuLi5kYXRhIH0gPSBjbGlwYm9hcmREYXRhIHx8IHt9XG4gICAgICByZXR1cm4gJHNjaGVtYSA9PT0gdGhpcy5zY2hlbWFDb21wb25lbnQ/LnNjaGVtYS5uYW1lID8gZGF0YSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgY2hlY2tDbGlwYm9hcmQoKSB7XG4gICAgICB0aGlzLmNvcHlFbmFibGVkID0gISF0aGlzLmRhdGFcbiAgICAgIC8vIFNlZSBpZiB0aGUgY2xpcGJvYXJkIGNvbnRlbnQgaXMgdmFsaWQgSlNPTiBkYXRhIHRoYXQgaXMgY29tcGF0aWJsZVxuICAgICAgLy8gd2l0aCB0aGUgY3VycmVudCB0YXJnZXQgc2NoZW1hLCBhbmQgb25seSB0aGVuIGFjdGl2YXRlIHRoZSBwYXN0aW5nOlxuICAgICAgdGhpcy5wYXN0ZUVuYWJsZWQgPSAhIShhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEoZmFsc2UpKSAvLyBkb24ndCByZXBvcnRcbiAgICB9LFxuXG4gICAgYXN5bmMgb25Db3B5KCkge1xuICAgICAgbGV0IGRhdGEgPSB0aGlzLnNjaGVtYUNvbXBvbmVudD8uY2xpcGJvYXJkRGF0YVxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGRhdGEgJiYgdGhpcy5jb3B5RGF0YShkYXRhKVxuICAgICAgICAvLyBLZWVwIGFuIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgICAgdGhpcy5hcHBTdGF0ZS5jbGlwYm9hcmREYXRhID0gZGF0YVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKVxuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LndyaXRlVGV4dD8uKGpzb24pXG4gICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBhY3RpdmF0ZSB0aGUgcGFzdGUgYnV0dG9uLCBkZXBlbmRkaW5nIG9uIGJyb3dzZXJzOlxuICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tDbGlwYm9hcmQoKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLm5hbWUsIGVyci5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblBhc3RlKCkge1xuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEodHJ1ZSkgLy8gcmVwb3J0XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLnBhc3RlRGF0YShkYXRhKVxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50LnNldERhdGEoZGF0YSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgYWxlcnQoZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldExvYWRpbmcoaXNMb2FkaW5nLCB7IHVwZGF0ZVJvb3QgPSBmYWxzZSwgdXBkYXRlVmlldyA9IGZhbHNlIH0gPSB7fSkge1xuICAgICAgaWYgKCF0aGlzLmlzTG9hZGluZyBeICFpc0xvYWRpbmcpIHsgLy8gQm9vbGVhbiB4b3JcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgICAgICBpZiAodXBkYXRlUm9vdCkge1xuICAgICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5yZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVWaWV3KSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldExvYWRpbmcodGhpcy5pc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi9JdGVtTWl4aW4uanMnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuaW1wb3J0IHsgc2V0RGVmYXVsdHMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgTG9hZGluZ01peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAvLyBQYXNzIGxvY2FsIHZlcmJzIG92ZXJyaWRlcyBvbiB0byBjaGlsZHJlbiwgc2VlIHZlcmJzKCkgY29tcHV0ZWQgcHJvcC5cbiAgICAgICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyxcbiAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdGhpcy5oYXNEYXRhXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRlZERhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgLy8gUmV0dXJucyB0aGUgcmVzb3VyY2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVzb3VyY2UgZm9yIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBzb3VyY2Ugc2NoZW1hLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBhIGRhdGEtc291cmNlIGlmIGl0IGhhcyBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZTpcbiAgICAgIHJldHVybiAhIXRoaXMucmVzb3VyY2VcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICAvLyBSZXR1cm5zIGBmYWxzZWBoZXJlLCBidXQgaXMgb3ZlcnJpZGRlbiB0byByZXR1cm4gYHRydWVgIGluXG4gICAgICAvLyBgU291cmNlTWl4aW5gIGZvciBjb21wb25lbnQgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGVpciBvd24gZGF0YSwgYnV0XG4gICAgICAvLyBlZGl0IHRoZWlyIGl0ZW1zIHRocm91Z2ggYSBsaW5rZWQgdmlldy4gIEluIHRoaXMgY2FzZSwgcmVhbCBpZHMgbmVlZCB0b1xuICAgICAgLy8gYmUgdXNlZC5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIC8vIENoZWNrIHRoZSBmb3JtIHRoYXQgdGhpcyBjb21wb25lbnQgYmVsb25ncyB0byBhcyB3ZWxsLCBzaW5jZSBpdCBtYXkgYmVcbiAgICAgIC8vIGluIGNyZWF0aW9uIG1vZGUsIHdoaWNoIG1ha2VzIGl0IHRyYW5zaWVudC5cbiAgICAgIC8vIE5PVEU6IFRoaXMgZG9lcyBub3QgbG9vcCBlbmRsZXNzbHkgYmVjYXVzZSBEaXRvRm9ybSByZWRlZmluZXNcbiAgICAgIC8vIGBpc1RyYW5zaWVudCgpYCB0byBvbmx5IHJldHVybiBgIXRoaXMucHJvdmlkZXNEYXRhYC5cbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1Db21wb25lbnRcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAhdGhpcy5saW5rc1RvVmlldyB8fFxuICAgICAgICBmb3JtICYmIChcbiAgICAgICAgICBmb3JtLmlzVHJhbnNpZW50IHx8XG4gICAgICAgICAgZm9ybS5pc0NyZWF0aW5nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdHJhbnNpZW50Tm90ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgJzxiPk5vdGU8L2I+OiB0aGUgcGFyZW50IHN0aWxsIG5lZWRzIHRvIGJlIHNhdmVkICcgK1xuICAgICAgICAnaW4gb3JkZXIgdG8gcGVyc2lzdCB0aGlzIGNoYW5nZS4nXG4gICAgICApXG4gICAgfSxcblxuICAgIHNob3VsZExvYWQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAhdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICAhdGhpcy5pc0xvYWRpbmdcbiAgICAgIClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIC8vIEJhc2UgZGVmaW5pdGlvbiwgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IERpdG9Gb3JtIGFuZCBTb3VyY2VNaXhpblxuICAgICAgcmV0dXJuICEhdGhpcy5sb2FkZWREYXRhXG4gICAgfSxcblxuICAgIHZlcmJzKCkge1xuICAgICAgLy8gVGhlIGFjdHVhbCBjb2RlIGlzIHRoZSBgZ2V0VmVyYnMoKWAgbWV0aG9kLCBmb3IgZWFzaWVyIG92ZXJyaWRpbmcgb2ZcbiAgICAgIC8vIHRoaXMgY29tcHV0ZWQgcHJvcGVydHkgaW4gY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgUmVzb3VyY2VNaXhpbi5cbiAgICAgIHJldHVybiB0aGlzLmdldFZlcmJzKClcbiAgICB9LFxuXG4gICAgcGFnaW5hdGlvblJhbmdlKCkge1xuICAgICAgLy8gT25seSBhcHBseSBwYWdpbmF0aW9uIHRvIGxpc3RzLlxuICAgICAgY29uc3QgeyBwYWdpbmF0ZTogYW1vdW50IH0gPSB0aGlzLnNvdXJjZVNjaGVtYVxuICAgICAgaWYgKHRoaXMuaXNMaXN0U291cmNlICYmIGFtb3VudCkge1xuICAgICAgICBjb25zdCB7IHBhZ2UgPSAwIH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcGFnZSAqIGFtb3VudFxuICAgICAgICByZXR1cm4gW3N0YXJ0LCBzdGFydCArIGFtb3VudCAtIDFdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHF1ZXJ5UGFyYW1zKCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnBhZ2luYXRpb25SYW5nZVxuICAgICAgY29uc3QgeyBwYWdlLCAuLi5xdWVyeSB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucXVlcnksIC8vIFF1ZXJ5IG1heSBvdmVycmlkZSBzY29wZS5cbiAgICAgICAgLi4uKHJhbmdlICYmIHtcbiAgICAgICAgICAvLyBQYXNzIHBhZ2luYXRpb24gYXMgcmFuZ2UsIHNvIHRoYXQgd2UgYXV0b21hdGljYWxseSBnZXQgT2JqZWN0aW9uJ3NcbiAgICAgICAgICAvLyByZXN1bHRzIGNvdW50aW5nOlxuICAgICAgICAgIHJhbmdlOiByYW5nZS5qb2luKCcsJylcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBXaGVuIGNyZWF0aW5nIG5lc3RlZCBkYXRhLCB3ZSBzdGlsbCBuZWVkIHRvIGNhbGwgc2V0dXBEYXRhKClcbiAgICBpZiAodGhpcy5wcm92aWRlc0RhdGEgfHwgdGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICB0aGlzLnNldHVwRGF0YSgpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRSZXNvdXJjZSgpIHtcbiAgICAgIC8vIFRoaXMgaXMgZGVmaW5lZCBhcyBhIG1ldGhvZCBzbyB0aGUgY29tcHV0ZWQgYHJlc291cmNlYCBnZXR0ZXIgY2FuXG4gICAgICAvLyBiZSBvdmVycmlkZGVuIGFuZCBgc3VwZXJgIGZ1bmN0aW9uYWxpdHkgY2FuIHN0aWxsIGJlIGFjY2Vzc2VkLlxuICAgICAgcmV0dXJuIGdldFJlc291cmNlKHRoaXMuc291cmNlU2NoZW1hPy5yZXNvdXJjZSwge1xuICAgICAgICB0eXBlOiAnY29sbGVjdGlvbicsXG4gICAgICAgIHBhcmVudDogdGhpcy5wYXJlbnRGb3JtQ29tcG9uZW50Py5yZXNvdXJjZSA/PyBudWxsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRWZXJicygpIHtcbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy4kdmVyYnMoKVxuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyB7XG4gICAgICAgICAgLi4udmVyYnMsXG4gICAgICAgICAgLy8gT3ZlcnJpZGUgZGVmYXVsdCB2ZXJicyB3aXRoIHRoZWlyIHRyYW5zaWVudCB2ZXJzaW9uczpcbiAgICAgICAgICBjcmVhdGU6ICdhZGQnLFxuICAgICAgICAgIGNyZWF0ZWQ6ICdhZGRlZCcsXG4gICAgICAgICAgc2F2ZTogJ2FwcGx5JyxcbiAgICAgICAgICBzYXZlZDogJ2FwcGxpZWQnLFxuICAgICAgICAgIGRlbGV0ZTogJ3JlbW92ZScsXG4gICAgICAgICAgZGVsZXRlZDogJ3JlbW92ZWQnXG4gICAgICAgIH1cbiAgICAgICAgOiB2ZXJic1xuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICAvLyBBY3R1YWwgY29kZSBpcyBpbiBzZXBhcmF0ZSBmdW5jdGlvbiBzbyBpdCdzIGVhc2VyIHRvIG92ZXJyaWRlXG4gICAgICAvLyBgc2V0dXBEYXRhKClgIGFuZCBhbmQgY2FsbCBgZW5zdXJlRGF0YSgpYCBmcm9tIHRoZSBvdmVycmlkZXMsXG4gICAgICAvLyBzZWUgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluLlxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgZW5zdXJlRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZExvYWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGF0YSkge1xuICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2FkRGF0YSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbG9hZERhdGEoKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgIH0sXG5cbiAgICBsb2FkRGF0YShjbGVhcikge1xuICAgICAgaWYgKCF0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIGlmIChjbGVhcikge1xuICAgICAgICAgIHRoaXMuY2xlYXJEYXRhKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlcXVlc3REYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIHJldHVybiBzZXREZWZhdWx0cyhzY2hlbWEsIHR5cGUgPyB7IHR5cGUgfSA6IHt9LCB0aGlzKVxuICAgIH0sXG5cbiAgICByZXF1ZXN0RGF0YSgpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMucXVlcnlQYXJhbXNcbiAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2dldCcsIHBhcmFtcyB9LCAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGRhdGE/LnR5cGUgPT09ICdGaWx0ZXJWYWxpZGF0aW9uJyAmJlxuICAgICAgICAgICAgICB0aGlzLm9uRmlsdGVyRXJyb3JzPy4oZGF0YS5lcnJvcnMpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNVbmF1dGhvcml6ZWRFcnJvcihyZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgLy8gVE9ETzogQ2FuIHdlIHJlYWxseSBzd2FsbG93IHRoZXNlIGVycm9ycz9cbiAgICAgICAgICAgICAgLy8gSXMgY2FsbGluZyBgZW5zdXJlVXNlcigpYCBpbiBgb25CZWZvcmVSZXF1ZXN0KClgIGVub3VnaD9cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhKHJlc3BvbnNlLmRhdGEpXG4gICAgICAgICAgdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2xvYWQnKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRpb25FcnJvcihyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMFxuICAgIH0sXG5cbiAgICBpc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAxXG4gICAgfSxcblxuICAgIGFzeW5jIGhhbmRsZVJlcXVlc3Qoe1xuICAgICAgbWV0aG9kLFxuICAgICAgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlLFxuICAgICAgZGF0YSxcbiAgICAgIHBhcmFtc1xuICAgIH0sIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBsb2FkaW5nT3B0aW9ucyA9IHtcbiAgICAgICAgdXBkYXRlUm9vdDogdHJ1ZSwgLy8gRGlzcGxheSBzcGlubmVyIGluIGhlYWRlciB3aGVuIGxvYWRpbmcgaW4gcmVzb3VyY2VzXG4gICAgICAgIHVwZGF0ZVZpZXc6IHRoaXMuaXNJblZpZXcgLy8gTm90aWZ5IHZpZXcgb2YgbG9hZGluZyBmb3IgdmlldyBjb21wb25lbnRzXG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICBjb25zdCByZXF1ZXN0ID0geyBtZXRob2QsIHJlc291cmNlLCBkYXRhLCBwYXJhbXMgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICAgIC8vIFBhc3MgYm90aCByZXF1ZXN0IGFuZCByZXNwb25zZSB0byB0aGUgY2FsbGJhY2ssIHNvIHRoZXkgY2FuIGJlXG4gICAgICAgIC8vIGV4cG9zZWQgdG8gZnVydGhlciBjYWxsYmFja3MgdGhyb3VnaCBEaXRvQ29udGV4dC5cbiAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiBjYWxsYmFjayByZXR1cm5zIHRydWUsIGVycm9ycyB3ZXJlIGFscmVhZHkgaGFuZGxlZC5cbiAgICAgICAgY29uc3QgeyByZXNwb25zZSB9ID0gZXJyb3JcbiAgICAgICAgaWYgKCFjYWxsYmFjayhlcnJvciwgcmVzcG9uc2UpKSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgaWYgKGRhdGEgJiYgaXNTdHJpbmcoZGF0YS50eXBlKSkge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogbGFiZWxpemUoZGF0YS50eXBlKSxcbiAgICAgICAgICAgICAgdGV4dDogZGF0YS5tZXNzYWdlIHx8IGVycm9yXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IGVycm9yXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlLCBsb2FkaW5nT3B0aW9ucylcbiAgICB9LFxuXG4gICAgZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpIHtcbiAgICAgIC8vIENvbnZlbnRpb246IG9ubHkgcG9zdCwgcHV0IGFuZCBwYXRjaCByZXF1ZXN0cyBwYXNzIHRoZSBkYXRhIGFzIHBheWxvYWQuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5jbHVkZXMobWV0aG9kKSAmJiAoXG4gICAgICAgICAgLy8gVE9ETzogVXNlIGBoYW5kbGVEYXRhU2NoZW1hKClgIGFzeW5jaHJvbm91c2x5IGhlcmUgaW5zdGVhZCwgdG9cbiAgICAgICAgICAvLyBvZmZlciB0aGUgc2FtZSBhbW91bnQgb2YgcG9zc2liaWxpdGllcyBmb3IgZGF0YSBsb2FkaW5nLlxuICAgICAgICAgIGJ1dHRvbi5nZXRTY2hlbWFWYWx1ZShbJ3Jlc291cmNlJywgJ2RhdGEnXSkgfHxcbiAgICAgICAgICBidXR0b24ucHJvY2Vzc2VkSXRlbVxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChidXR0b24pIHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gZ2V0UmVzb3VyY2UoYnV0dG9uLnNjaGVtYS5yZXNvdXJjZSwge1xuICAgICAgICBwYXJlbnQ6IHRoaXMucmVzb3VyY2VcbiAgICAgIH0pXG4gICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgeyBtZXRob2QgfSA9IHJlc291cmNlXG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKVxuICAgICAgICByZXR1cm4gdGhpcy5zdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEpXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICBzZXREYXRhID0gZmFsc2UsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBvbkVycm9yLFxuICAgICAgbm90aWZ5U3VjY2VzcyA9ICgpID0+IHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICB0aXRsZTogJ1JlcXVlc3QgU3VjY2Vzc2Z1bCcsXG4gICAgICAgIHRleHQ6ICdSZXF1ZXN0IHdhcyBzdWNjZXNzZnVsbHkgc2VudC4nXG4gICAgICB9KSxcbiAgICAgIG5vdGlmeUVycm9yID0gZXJyb3IgPT4gdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgYFVuYWJsZSB0byBzZW5kIHJlcXVlc3Qke2Vycm9yID8gJzonIDogJyd9YCxcbiAgICAgICAgICBlcnJvcj8ubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICBdXG4gICAgICB9KVxuICAgIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoXG4gICAgICAgICAgeyBtZXRob2QsIGRhdGEsIHJlc291cmNlIH0sXG4gICAgICAgICAgYXN5bmMgKGVyciwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAvLyBTZWUgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgRGl0byB2YWxpZGF0aW9uIGVycm9yOlxuICAgICAgICAgICAgICBjb25zdCBlcnJvcnMgPSB0aGlzLmlzVmFsaWRhdGlvbkVycm9yKHJlc3BvbnNlKSAmJiBkYXRhLmVycm9yc1xuICAgICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIHRydWUpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBpc09iamVjdChkYXRhKSA/IGRhdGEgOiBlcnJcbiAgICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IpXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnZXJyb3InLCB7XG4gICAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeUVycm9yLFxuICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHVuZGVybHlpbmcgZGF0YSBiZWZvcmUgY2FsbGluZyBgbm90aWZ5KClgIG9yXG4gICAgICAgICAgICAgIC8vIGB0aGlzLml0ZW1MYWJlbGAsIHNvIGlkIGlzIHNldCBhZnRlciBjcmVhdGluZyBuZXcgaXRlbXMuXG4gICAgICAgICAgICAgIGlmIChzZXREYXRhICYmIGRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGEoZGF0YSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvblN1Y2Nlc3M/LigpXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ3N1Y2Nlc3MnLCB7XG4gICAgICAgICAgICAgICAgbm90aWZ5OiBub3RpZnlTdWNjZXNzXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVtaXRCdXR0b25FdmVudChidXR0b24sIGV2ZW50LCB7IG5vdGlmeSwgZXJyb3IgfSkge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBjb250ZXh0IG91dHNpZGUgb2YgYGVtaXRFdmVudCgpYCwgc28gdGhhdFxuICAgICAgLy8gYGNvbnRleHQud2FzTm90aWZpZWRgIGNhbiBiZSBjaGVja2VkIGFmdGVyLlxuICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBEaXRvQ29udGV4dChidXR0b24sIHtcbiAgICAgICAgbmVzdGVkOiBmYWxzZSxcbiAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgICAgICBpdGVtTGFiZWw6IHRoaXMuaXRlbUxhYmVsLFxuICAgICAgICBlcnJvclxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJ1dHRvbi5lbWl0RXZlbnQoZXZlbnQsIHsgY29udGV4dCB9KVxuICAgICAgaWYgKFxuICAgICAgICBub3RpZnkgJiZcbiAgICAgICAgLy8gUHJldmVudCBkZWZhdWx0IGlmIGFueXRoaW5nIHdhcyByZXR1cm5lZCBmcm9tIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAgICByZXMgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAvLyBEbyBub3QgZGlzcGxheSBkZWZhdWx0IG5vdGlmaWNhdGlvbiBpZiB0aGUgZXZlbnQgaGFuZGxlciBhbHJlYWR5XG4gICAgICAgIC8vIGRpc3BsYXllZCBhIG5vdGlmaWNhdGlvbi5cbiAgICAgICAgIWNvbnRleHQud2FzTm90aWZpZWRcbiAgICAgICkge1xuICAgICAgICBub3RpZnkoZXJyb3IpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLWZvcm0uZGl0by1zY3JvbGwtcGFyZW50KFxuICA6Y2xhc3M9XCJ7ICdkaXRvLWZvcm0tbmVzdGVkJzogaXNOZXN0ZWRSb3V0ZSB9XCJcbilcbiAgLy8gTk9URTogTmVzdGVkIGZvcm0gY29tcG9uZW50cyBhcmUga2VwdCBhbGl2ZSBieSB1c2luZyBgdi1zaG93YCBpbnN0ZWFkIG9mXG4gIC8vIGB2LWlmYCBoZXJlLCBzbyBldmVudCBoYW5kbGluZyBhbmQgb3RoZXIgdGhpbmdzIHN0aWxsIHdvcmsgd2l0aCBuZXN0ZWRcbiAgLy8gZWRpdGluZy4gT25seSByZW5kZXIgYSByb3V0ZXItdmlldyBoZXJlIGlmIHRoaXMgaXNuJ3QgdGhlIGxhc3QgZGF0YSByb3V0ZVxuICAvLyBhbmQgbm90IGEgbmVzdGVkIGZvcm0gcm91dGUsIHdoaWNoIHdpbGwgYXBwZWFyIGVsc2V3aGVyZSBpbiBpdHMgb3duIHZpZXcuXG4gIHJvdXRlci12aWV3KFxuICAgIHYtaWY9XCIhKGlzTGFzdFVubmVzdGVkUm91dGUgfHwgaXNOZXN0ZWRSb3V0ZSlcIlxuICAgIHYtc2hvdz1cIiFpc0FjdGl2ZVwiXG4gIClcbiAgLy8gVXNlIGEgPGRpdj4gZm9yIGlubGluZWQgZm9ybXMsIGFzIHdlIHNob3VsZG4ndCBuZXN0IGFjdHVhbCA8Zm9ybT4gdGFncy5cbiAgY29tcG9uZW50LmRpdG8tc2Nyb2xsKFxuICAgIHYtc2hvdz1cImlzQWN0aXZlXCJcbiAgICA6aXM9XCJpc05lc3RlZFJvdXRlID8gJ2RpdicgOiAnZm9ybSdcIlxuICAgIEBzdWJtaXQucHJldmVudFxuICApXG4gICAgLy8gUHJldmVudCBpbXBsaWNpdCBzdWJtaXNzaW9uIG9mIHRoZSBmb3JtLCBmb3IgZXhhbXBsZSB3aGVuIHR5cGluZyBlbnRlclxuICAgIC8vIGluIGFuIGlucHV0IGZpZWxkLlxuICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTUwNzgwNlxuICAgIGJ1dHRvbihcbiAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgZGlzYWJsZWQ9XCJ0cnVlXCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIGRpdG8tc2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWZvcm0uZGl0by1zY3JvbGwtcGFyZW50KFxuICA6Y2xhc3M9XCJ7ICdkaXRvLWZvcm0tbmVzdGVkJzogaXNOZXN0ZWRSb3V0ZSB9XCJcbilcbiAgLy8gTk9URTogTmVzdGVkIGZvcm0gY29tcG9uZW50cyBhcmUga2VwdCBhbGl2ZSBieSB1c2luZyBgdi1zaG93YCBpbnN0ZWFkIG9mXG4gIC8vIGB2LWlmYCBoZXJlLCBzbyBldmVudCBoYW5kbGluZyBhbmQgb3RoZXIgdGhpbmdzIHN0aWxsIHdvcmsgd2l0aCBuZXN0ZWRcbiAgLy8gZWRpdGluZy4gT25seSByZW5kZXIgYSByb3V0ZXItdmlldyBoZXJlIGlmIHRoaXMgaXNuJ3QgdGhlIGxhc3QgZGF0YSByb3V0ZVxuICAvLyBhbmQgbm90IGEgbmVzdGVkIGZvcm0gcm91dGUsIHdoaWNoIHdpbGwgYXBwZWFyIGVsc2V3aGVyZSBpbiBpdHMgb3duIHZpZXcuXG4gIHJvdXRlci12aWV3KFxuICAgIHYtaWY9XCIhKGlzTGFzdFVubmVzdGVkUm91dGUgfHwgaXNOZXN0ZWRSb3V0ZSlcIlxuICAgIHYtc2hvdz1cIiFpc0FjdGl2ZVwiXG4gIClcbiAgLy8gVXNlIGEgPGRpdj4gZm9yIGlubGluZWQgZm9ybXMsIGFzIHdlIHNob3VsZG4ndCBuZXN0IGFjdHVhbCA8Zm9ybT4gdGFncy5cbiAgY29tcG9uZW50LmRpdG8tc2Nyb2xsKFxuICAgIHYtc2hvdz1cImlzQWN0aXZlXCJcbiAgICA6aXM9XCJpc05lc3RlZFJvdXRlID8gJ2RpdicgOiAnZm9ybSdcIlxuICAgIEBzdWJtaXQucHJldmVudFxuICApXG4gICAgLy8gUHJldmVudCBpbXBsaWNpdCBzdWJtaXNzaW9uIG9mIHRoZSBmb3JtLCBmb3IgZXhhbXBsZSB3aGVuIHR5cGluZyBlbnRlclxuICAgIC8vIGluIGFuIGlucHV0IGZpZWxkLlxuICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTUwNzgwNlxuICAgIGJ1dHRvbihcbiAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgZGlzYWJsZWQ9XCJ0cnVlXCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIGRpdG8tc2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNsb25lLCBjYXBpdGFsaXplLCBwYXJzZURhdGFQYXRoLCBtZXJnZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcywgaXNPYmplY3RTb3VyY2UgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1mb3JtJywge1xuICBtaXhpbnM6IFtSb3V0ZU1peGluLCBSZXNvdXJjZU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGVkRGF0YTogbnVsbCxcbiAgICAgIGNsb25lZERhdGE6IHVuZGVmaW5lZCxcbiAgICAgIHNvdXJjZUtleTogbnVsbCxcbiAgICAgIGlzRm9ybTogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHZlcmJzKCkge1xuICAgICAgLy8gQWRkIHN1Ym1pdCAvIHN1Ym1pdHRlZCB0byB0aGUgdmVyYnMgcmV0dXJuZWQgYnkgUmVzb3VyY2VNaXhpblxuICAgICAgLy8gTk9URTogVGhlc2UgZ2V0IHBhc3NlZCBvbiB0byBjaGlsZHJlbiB0aHJvdWdoOlxuICAgICAgLy8gYHByb3ZpZGUoKSAuLi4geyAkdmVyYnM6ICgpID0+IHRoaXMudmVyYnMgfWAgaW4gUmVzb3VyY2VNaXhpblxuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLmdldFZlcmJzKClcbiAgICAgIGNvbnN0IHsgaXNDcmVhdGluZywgcHJvdmlkZXNEYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgc3VibWl0OiBpc0NyZWF0aW5nID8gdmVyYnMuY3JlYXRlIDogdmVyYnMuc2F2ZSxcbiAgICAgICAgc3VibWl0dGVkOiBpc0NyZWF0aW5nID8gdmVyYnMuY3JlYXRlZCA6IHZlcmJzLnNhdmVkLFxuICAgICAgICBjYW5jZWw6IHByb3ZpZGVzRGF0YSA/IHZlcmJzLmNhbmNlbCA6IHZlcmJzLmNsb3NlLFxuICAgICAgICBjYW5jZWxsZWQ6IHByb3ZpZGVzRGF0YSA/IHZlcmJzLmNhbmNlbGxlZCA6IHZlcmJzLmNsb3NlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtRm9ybVNjaGVtYShcbiAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGRhdGEgeWV0LCBwcm92aWRlIGFuIGVtcHR5IG9iamVjdCB3aXRoIGp1c3QgdGhlIHJpZ2h0XG4gICAgICAgIC8vIHR5cGUgc2V0LCBzbyB0aGUgZm9ybSBjYW4gYWx3YXlzIGJlIGRldGVybWluZWQuXG4gICAgICAgIHRoaXMuZGF0YSB8fCB7IHR5cGU6IHRoaXMudHlwZSB9LFxuICAgICAgICB0aGlzLmNvbnRleHRcbiAgICAgICkgfHwge30gLy8gQWx3YXlzIHJldHVybiBhIHNjaGVtYSBvYmplY3Qgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgaXQuXG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyhcbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2FuY2VsOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzdWJtaXQ6ICF0aGlzLmRvZXNNdXRhdGUgJiYge1xuICAgICAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICAgICAgLy8gU3VibWl0IGJ1dHRvbnMgY2xvc2UgdGhlIGZvcm0gYnkgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY2xvc2VGb3JtOiB0cnVlLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKHsgY29tcG9uZW50OiBidXR0b24gfSkgPT4gYnV0dG9uLnN1Ym1pdCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMuc2NoZW1hLmJ1dHRvbnNcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGFzdFJvdXRlIHx8IHRoaXMuaXNMYXN0VW5uZXN0ZWRSb3V0ZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNDcmVhdGluZygpIHtcbiAgICAgIC8vIHRoaXMucGFyYW0gaXMgaW5oZXJpdGVkIGZyb20gUm91dGVNaXhpblxuICAgICAgcmV0dXJuIHRoaXMucGFyYW0gPT09ICdjcmVhdGUnXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuZG9lc011dGF0ZSAmJiAhIXRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uaXNEaXJ0eVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYigpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQ/LnNlbGVjdGVkVGFiIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZG9lc011dGF0ZSgpIHtcbiAgICAgIC8vIFdoZW4gYHNvdXJjZVNjaGVtYS5tdXRhdGVgIGlzIHRydWUsIHRoZSBmb3JtIGVkaXRzIHRoZSBpbmhlcml0ZWQgZGF0YVxuICAgICAgLy8gZGlyZWN0bHkgaW5zdGVhZCBvZiBtYWtpbmcgYSBjb3B5IGZvciBhcHBsaWNhdGlvbiB1cG9uIHN1Ym1pdC5cbiAgICAgIC8vIFNlZSBgaW5oZXJpdGVkRGF0YSgpYCBjb21wdXRlZCBwcm9wZXJ0eSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuIHRoaXMuc291cmNlU2NoZW1hLm11dGF0ZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgLy8gVGhlIHR5cGUgb2YgZm9ybSB0byBjcmVhdGUsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5xdWVyeS50eXBlXG4gICAgfSxcblxuICAgIGl0ZW1JZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogKHRoaXMucGFyYW0gPz8gbnVsbClcbiAgICB9LFxuXG4gICAgbWV0aG9kKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZyA/ICdwb3N0JyA6ICdwYXRjaCdcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgICAgcmV0dXJuIGdldE1lbWJlclJlc291cmNlKHRoaXMuaXRlbUlkLCByZXNvdXJjZSkgfHwgcmVzb3VyY2VcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYlByZWZpeCgpIHtcbiAgICAgIHJldHVybiBjYXBpdGFsaXplKHRoaXMuaXNDcmVhdGluZyA/IHRoaXMudmVyYnMuY3JlYXRlIDogdGhpcy52ZXJicy5lZGl0KVxuICAgIH0sXG5cbiAgICBkYXRhKCkge1xuICAgICAgLy8gUmV0dXJuIGRpZmZlcmVudCBkYXRhIFwiY29udGFpbmVyc1wiIGJhc2VkIG9uIGRpZmZlcmVudCBzY2VuYXJpb3M6XG4gICAgICAvLyAxLiBjcmVhdGVkRGF0YSwgaWYgd2UncmUgaW4gYSBmb3JtIGZvciBhIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LlxuICAgICAgLy8gMi4gbG9hZGVkRGF0YSwgaWYgdGhlIGZvcm0gaXRzZWxmIGlzIHRoZSByb290IG9mIHRoZSBkYXRhIChlLmcuIHdoZW5cbiAgICAgIC8vICAgIGRpcmVjdGx5IGxvYWRpbmcgYW4gZWRpdGluZyByb290KS5cbiAgICAgIC8vIDMuIFRoZSBkYXRhIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQsIHdoaWNoIGl0c2VsZiBtYXkgYmUgZWl0aGVyIGFcbiAgICAgIC8vICAgIHZpZXcgdGhhdCBsb2FkZWQgdGhlIGRhdGEsIG9yIGEgZm9ybSB0aGF0IGVpdGhlciBsb2FkZWQgdGhlIGRhdGEsIG9yXG4gICAgICAvLyAgICBhbHNvIGluaGVyaXRlZCBpdCBmcm9tIGl0cyBwYXJlbnQuIE5vdGUgdGhhdCB3ZSB1c2UgYSBjbG9uZSBvZiBpdCxcbiAgICAgIC8vICAgIHNvLCBkYXRhIGNoYW5nZXMgYXJlbid0IGFwcGxpZWQgdW50aWwgc2V0U291cmNlRGF0YSgpIGlzIGNhbGxlZC5cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZWREYXRhIHx8IHRoaXMubG9hZGVkRGF0YSB8fCB0aGlzLmluaGVyaXRlZERhdGEgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBkYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLmRhdGFDb21wb25lbnQpXG4gICAgfSxcblxuICAgIHNvdXJjZURhdGEoKSB7XG4gICAgICAvLyBQb3NzaWJsZSBwYXJlbnRzIGFyZSBEaXRvRm9ybSBmb3IgZm9ybXMsIG9yIERpdG9WaWV3IGZvciByb290IGxpc3RzLlxuICAgICAgLy8gQm90aCBoYXZlIGEgZGF0YSBwcm9wZXJ0eSB3aGljaCBhYnN0cmFjdHMgYXdheSBsb2FkaW5nIGFuZCBpbmhlcml0aW5nXG4gICAgICAvLyBvZiBkYXRhLlxuICAgICAgbGV0IHsgZGF0YSB9ID0gdGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudFxuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgLy8gSGFuZGxlIG5lc3RlZCBkYXRhIGJ5IHNwbGl0dGluZyB0aGUgZGF0YVBhdGgsIGl0ZXJhdGUgdGhyb3VnaCB0aGVcbiAgICAgICAgLy8gYWN0dWFsIGRhdGEgYW5kIGxvb2sgbmVzdCBjaGlsZC1kYXRhIHVwLlxuICAgICAgICBjb25zdCBkYXRhUGFydHMgPSBwYXJzZURhdGFQYXRoKFxuICAgICAgICAgIHRoaXMuZ2V0RGF0YVBhdGhGcm9tKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQpXG4gICAgICAgIClcbiAgICAgICAgLy8gQ29tcGFyZSBkYXRhUGFydHMgYWdhaW5zdCBtYXRjaGVkIHJvdXRlUGF0aCBwYXJ0cywgdG8gaWRlbnRpZnkgdGhvc2VcbiAgICAgICAgLy8gcGFydHMgdGhhdCBuZWVkIHRvIGJlIHRyZWF0ZWQgbGlrZSBpZHMgYW5kIG1hcHBlZCB0byBpbmRpY2VzIGluIGRhdGEuXG4gICAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IHRoaXMucm91dGVSZWNvcmQucGF0aC5zcGxpdCgnLycpXG4gICAgICAgIGNvbnN0IHJvdXRlUGFydHMgPSBwYXRoUGFydHMuc2xpY2UocGF0aFBhcnRzLmxlbmd0aCAtIGRhdGFQYXJ0cy5sZW5ndGgpXG4gICAgICAgIHRoaXMuc291cmNlS2V5ID0gbnVsbFxuICAgICAgICBjb25zdCBsYXN0RGF0YVBhcnQgPSBkYXRhUGFydHNbZGF0YVBhcnRzLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmIChpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSkgJiYgbGFzdERhdGFQYXJ0ID09PSAnY3JlYXRlJykge1xuICAgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gb2JqZWN0IHNvdXJjZSBhbmQgYXJlIGNyZWF0aW5nLCB0aGUgZGF0YVBhdGggbmVlZHMgdG9cbiAgICAgICAgICAvLyBiZSBzaG9ydGVuZWQgYnkgdGhlICdjcmVhdGUnIGVudHJ5LiBUaGlzIGlzbid0IG5lZWRlZCBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMsIGFzIHRoZXJlIHRoZSBwYXJhbWV0ZXIgaXMgYWN0dWFsbHkgbWFwcGVkIHRvIHRoZSBpdGVtIGlkLlxuICAgICAgICAgIGRhdGFQYXJ0cy5sZW5ndGgtLVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gZGF0YVBhcnRzLmxlbmd0aDsgaSA8IGwgJiYgZGF0YTsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0YVBhcnQgPSBkYXRhUGFydHNbaV1cbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIDppZCBwYXJ0LCBmaW5kIHRoZSBpbmRleCBvZiB0aGUgaXRlbSB3aXRoIGdpdmVuIGlkLlxuICAgICAgICAgIGNvbnN0IGtleSA9IC9eOmlkLy50ZXN0KHJvdXRlUGFydHNbaV0pXG4gICAgICAgICAgICA/IGRhdGFQYXJ0ID09PSAnY3JlYXRlJ1xuICAgICAgICAgICAgICA/IG51bGwgLy8gVGhlcmUncyBubyBpbmRleCBmb3IgZW50cmllcyBhYm91dCB0byBiZSBjcmVhdGVkXG4gICAgICAgICAgICAgIDogdGhpcy5maW5kSXRlbUlkSW5kZXgodGhpcy5zb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXJ0KVxuICAgICAgICAgICAgOiBkYXRhUGFydFxuICAgICAgICAgIC8vIFNraXAgdGhlIGZpbmFsIGxvb2t1cCBidXQgcmVtZW1iZXIgYHNvdXJjZUtleWAsIGFzIHdlIHdhbnQgdGhlXG4gICAgICAgICAgLy8gcGFyZW50IGRhdGEgc28gd2UgY2FuIHJlcGxhY2UgdGhlIGVudHJ5IGF0IGBzb3VyY2VLZXlgIG9uIGl0LlxuICAgICAgICAgIGlmIChpID09PSBsIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBrZXlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IGRhdGFba2V5XVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9LFxuXG4gICAgaW5oZXJpdGVkRGF0YSgpIHtcbiAgICAgIC8vIERhdGEgaW5oZXJpdGVkIGZyb20gcGFyZW50LCBhbmQgY2xvbmVkIHRvIHByb3RlY3QgYWdhaW5zdCByZWFjdGl2ZVxuICAgICAgLy8gY2hhbmdlcyB1bnRpbCBjaGFuZ2VzIGFyZSBhcHBsaWVkIHRocm91Z2ggc2V0U291cmNlRGF0YSgpLCB1bmxlc3NcbiAgICAgIC8vIGBzb3VyY2VTY2hlbWEubXV0YXRlYCBpcyB0cnVlLCBpbiB3aGljaCBjYXNlIGRhdGEgaXMgbXV0YXRlZCBkaXJlY3RseS5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICB0aGlzLmNsb25lZERhdGEgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0aGlzLnNvdXJjZURhdGEgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgIT09IG51bGxcbiAgICAgICkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuc291cmNlRGF0YVt0aGlzLnNvdXJjZUtleV1cbiAgICAgICAgaWYgKCF0aGlzLmRvZXNNdXRhdGUpIHtcbiAgICAgICAgICAvLyBVc2UgYSB0cmljayB0byBzdG9yZSBjbG9uZWQgaW5oZXJpdGVkIGRhdGEgaW4gY2xvbmVkRGF0YSwgdG8gbWFrZVxuICAgICAgICAgIC8vIGl0IHJlYWN0aXZlIGFuZCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgY2xvbmVkIG11bHRpcGxlIHRpbWVzLlxuICAgICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IGRhdGEgPSBjbG9uZShkYXRhKVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhID09PSBudWxsICYmXG4gICAgICAgICAgIXRoaXMuaXNDcmVhdGluZyAmJlxuICAgICAgICAgIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIG9mIGFuIG9iamVjdCBzb3VyY2UgaXMgbnVsbCwgcmVkaXJlY3QgdG8gaXRzIGNyZWF0ZSByb3V0ZS5cbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IHBhdGg6ICdjcmVhdGUnLCBhcHBlbmQ6IHRydWUgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY2xvbmVkRGF0YVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5oYXNEYXRhKClcbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGl0ZW1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB7IGV4dGVuZGVkOiB0cnVlIH0pXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgc291cmNlRGF0YTogJ2NsZWFyQ2xvbmVkRGF0YScsXG4gICAgLy8gTmVlZGVkIGZvciB0aGUgJ2NyZWF0ZScgcmVkaXJlY3QgaW4gYGluaGVyaXRlZERhdGEoKWAgdG8gd29yazpcbiAgICBjcmVhdGU6ICdzZXR1cERhdGEnXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmVtaXRFdmVudChldmVudCwgcGFyYW1zKVxuICAgIH0sXG5cbiAgICBnZXREYXRhUGF0aEZyb20ocm91dGUpIHtcbiAgICAgIC8vIEdldCB0aGUgZGF0YSBwYXRoIGJ5IGRlbm9ybWFsaXplUGF0aCB0aGUgcmVsYXRpdmUgcm91dGUgcGF0aFxuICAgICAgcmV0dXJuIHRoaXMuYXBpLmRlbm9ybWFsaXplUGF0aCh0aGlzLnBhdGhcbiAgICAgICAgLy8gRGl0b1ZpZXdzIGhhdmUgbmVzdGVkIHJvdXRlcywgc28gZG9uJ3QgcmVtb3ZlIHRoZWlyIHBhdGguXG4gICAgICAgIC5zbGljZSgocm91dGUuaXNWaWV3ID8gMCA6IHJvdXRlLnBhdGgubGVuZ3RoKSArIDEpKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXR1cERhdGEoKVxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0YSA9IHRoaXMuY3JlYXRlZERhdGEgfHxcbiAgICAgICAgICB0aGlzLmNyZWF0ZURhdGEodGhpcy5zY2hlbWEsIHRoaXMudHlwZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldFNvdXJjZURhdGEoZGF0YSkge1xuICAgICAgaWYgKHRoaXMuc291cmNlRGF0YSAmJiB0aGlzLnNvdXJjZUtleSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB7IG1haW5TY2hlbWFDb21wb25lbnQgfSA9IHRoaXNcbiAgICAgICAgdGhpcy4kc2V0KFxuICAgICAgICAgIHRoaXMuc291cmNlRGF0YSxcbiAgICAgICAgICB0aGlzLnNvdXJjZUtleSxcbiAgICAgICAgICBtYWluU2NoZW1hQ29tcG9uZW50LmZpbHRlckRhdGEoZGF0YSlcbiAgICAgICAgKVxuICAgICAgICBtYWluU2NoZW1hQ29tcG9uZW50Lm9uQ2hhbmdlKClcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhZGRTb3VyY2VEYXRhKGRhdGEpIHtcbiAgICAgIHJldHVybiBpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSlcbiAgICAgICAgPyB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgICAgOiAhIXRoaXMuc291cmNlRGF0YT8ucHVzaChkYXRhKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5jbGVhckRhdGEoKVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMuc2V0RGF0YShudWxsKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXREYXRhKClcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIC8vIHNldERhdGEoKSBpcyBjYWxsZWQgYWZ0ZXIgc3VibWl0IHdoZW4gZGF0YSBoYXMgY2hhbmdlZC5cbiAgICAgIGlmICh0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIC8vIEZvciBjb21wb25lbnRzIHdpdGggdHJhbnNpZW50IGRhdGEsIG1vZGlmeSB0aGlzLnNvdXJjZURhdGEuXG4gICAgICAgIHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0YSA9IG51bGxcbiAgICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGVhckNsb25lZERhdGEobmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gICAgICAvLyBPbmx5IGNsZWFyIGlmIHRoZSB3YXRjaGVkIHNvdXJjZURhdGEgaXRzZWxmIGNoYW5nZXMgaW4gdGhlIGZvcm0uXG4gICAgICBpZiAobmV3VmFsdWUgIT09IG9sZFZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbG9zZSgpXG4gICAgfSxcblxuICAgIGFzeW5jIGNsb3NlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGUodGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudC5wYXRoKVxuICAgIH0sXG5cbiAgICBnZXRTdWJtaXRWZXJiKHByZXNlbnQgPSB0cnVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gcHJlc2VudCA/ICdjcmVhdGUnIDogJ2NyZWF0ZWQnXG4gICAgICAgIDogcHJlc2VudCA/ICdzdWJtaXQnIDogJ3N1Ym1pdHRlZCdcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KGJ1dHRvbiwgeyB2YWxpZGF0ZSA9IHRydWUsIGNsb3NlRm9ybSA9IGZhbHNlIH0gPSB7fSkge1xuICAgICAgaWYgKHZhbGlkYXRlICYmICF0aGlzLnZhbGlkYXRlQWxsKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdldFZlcmIgPSBwcmVzZW50ID0+IHRoaXMudmVyYnNbdGhpcy5nZXRTdWJtaXRWZXJiKHByZXNlbnQpXVxuXG4gICAgICAvLyBBbGxvdyBidXR0b25zIHRvIG92ZXJyaWRlIGJvdGggbWV0aG9kIGFuZCByZXNvdXJjZSBwYXRoIHRvIHN1Ym1pdCB0bzpcbiAgICAgIGNvbnN0IGJ1dHR0b25SZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzb3VyY2UgPSBidXR0dG9uUmVzb3VyY2UgfHwgdGhpcy5yZXNvdXJjZVxuICAgICAgY29uc3QgbWV0aG9kID0gcmVzb3VyY2U/Lm1ldGhvZCB8fCB0aGlzLm1ldGhvZFxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpXG4gICAgICBsZXQgc3VjY2Vzc1xuICAgICAgaWYgKCFidXR0dG9uUmVzb3VyY2UgJiYgdGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5zdWJtaXRUcmFuc2llbnQoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCh0aGlzLmdldFN1Ym1pdFZlcmIoKSksXG4gICAgICAgICAgb25FcnJvcjogZXJyb3IgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2Vycm9yJywge1xuICAgICAgICAgICAgY29udGV4dDogeyBlcnJvciB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbm90aWZ5U3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIoZmFsc2UpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICAgICAgICAgID8gYEl0ZW0gJHtjYXBpdGFsaXplKHZlcmIpfWBcbiAgICAgICAgICAgICAgICA6IGBDaGFuZ2UgJHtjYXBpdGFsaXplKHZlcmIpfWAsXG4gICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgICAgICAgICAgID8gYCR7dGhpcy5pdGVtTGFiZWx9IHdhcyAke3ZlcmJ9LmBcbiAgICAgICAgICAgICAgICAgIDogYENoYW5nZXMgdG8gJHt0aGlzLml0ZW1MYWJlbH0gd2VyZSAke3ZlcmJ9LmAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2llbnROb3RlXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub3RpZnlFcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIodHJ1ZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogYFVuYWJsZSB0byAke3ZlcmJ9ICR7dGhpcy5pdGVtTGFiZWx9LmBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICAgICAgc2V0RGF0YTogdHJ1ZSxcbiAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KHRoaXMuZ2V0U3VibWl0VmVyYigpKSxcbiAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgICBjb250ZXh0OiB7IGVycm9yIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBub3RpZnlTdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICB0aXRsZTogYFN1Y2Nlc3NmdWxseSAke2NhcGl0YWxpemUodmVyYil9YCxcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5pdGVtTGFiZWx9IHdhcyAke3ZlcmJ9LmBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub3RpZnlFcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIodHJ1ZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgIGBVbmFibGUgdG8gJHt2ZXJifSAke3RoaXMuaXRlbUxhYmVsfSR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgICAgICAgIGVycm9yPy5tZXNzYWdlIHx8IGVycm9yXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb24oKVxuICAgICAgICBpZiAoY2xvc2VGb3JtIHx8IGJ1dHRvbi5jbG9zZUZvcm0pIHtcbiAgICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgICAgICAvLyBSZWRpcmVjdCB0byB0aGUgZm9ybSBlZGl0aW5nIHRoZSBuZXdseSBjcmVhdGVkIGl0ZW06XG4gICAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgdGhpcy5kYXRhKVxuICAgICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgcGF0aDogYC4uLyR7aWR9YCwgYXBwZW5kOiB0cnVlIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFRyYW5zaWVudChidXR0b24sIF9yZXNvdXJjZSwgX21ldGhvZCwgZGF0YSwge1xuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MsXG4gICAgICBub3RpZnlFcnJvclxuICAgIH0pIHtcbiAgICAgIC8vIEhhbmRsZSB0aGUgZGVmYXVsdCBcInN1Ym1pdHRpbmdcIiBvZiB0cmFuc2llbnQsIG5lc3RlZCBkYXRhOlxuICAgICAgY29uc3Qgc3VjY2VzcyA9IHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IHRoaXMuYWRkU291cmNlRGF0YShkYXRhKVxuICAgICAgICA6IHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgb25TdWNjZXNzPy4oKVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdzdWNjZXNzJywge1xuICAgICAgICAgIG5vdGlmeTogbm90aWZ5U3VjY2Vzc1xuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSAnQ291bGQgbm90IHN1Ym1pdCB0cmFuc2llbnQgaXRlbSdcbiAgICAgICAgb25FcnJvcj8uKGVycm9yKVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICBub3RpZnk6IG5vdGlmeUVycm9yLFxuICAgICAgICAgIGVycm9yXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2Vzc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWZvcm0tbmVzdGVkXG4gICAgJixcbiAgICAuZGl0by1zY3JvbGxcbiAgICAgIC8vIE5vIHNjcm9sbGluZyBpbnNpZGUgbmVzdGVkIGZvcm1zLCBhbmQgcHJldmVudCBvcGVuIC5tdWx0aXNlbGVjdCBmcm9tXG4gICAgICAvLyBiZWluZyBjcm9wcGVkLlxuICAgICAgb3ZlcmZsb3c6IHZpc2libGVcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0Zvcm0gZnJvbSAnLi9EaXRvRm9ybS52dWUnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9Gb3JtLmNvbXBvbmVudCgnZGl0by1mb3JtLW5lc3RlZCcsIHt9KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWVycm9ycyhcbiAgdi1pZj1cImVycm9yc1wiXG4pXG4gIHVsXG4gICAgbGkodi1mb3I9XCJlcnJvciBvZiBlcnJvcnNcIilcbiAgICAgIHwge3sgZXJyb3IgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWVycm9ycyhcbiAgICB2LWlmPVwiZXJyb3JzXCJcbiAgKVxuICAgIHVsXG4gICAgICBsaSh2LWZvcj1cImVycm9yIG9mIGVycm9yc1wiKVxuICAgICAgICB8IHt7IGVycm9yIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tZXJyb3JzXG4gICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgei1pbmRleDogMVxuICAgIHVsXG4gICAgICBtYXJnaW4tdG9wOiAxcHhcbiAgICAgIGNvbG9yOiAkY29sb3ItZXJyb3Jcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZXJyb3JzJywge1xuICBwcm9wczoge1xuICAgIGVycm9yczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tc2NvcGVzXG4gIHJvdXRlci1saW5rKFxuICAgIHYtZm9yPVwiKHNjb3BlLCBrZXkpIGluIHNjb3Blc1wiXG4gICAgOmtleT1cImtleVwiXG4gICAgOnRvPVwiZ2V0U2NvcGVMaW5rKHNjb3BlKVwiXG4gICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2VsZWN0ZWQnOiBzY29wZS5uYW1lID09PSBxdWVyeS5zY29wZSB9XCJcbiAgICAgIDp0aXRsZT1cInNjb3BlLmhpbnQgfHwgZ2V0TGFiZWwoc2NvcGUpXCJcbiAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICApIHt7IGdldExhYmVsKHNjb3BlKSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2NvcGVzXG4gICAgcm91dGVyLWxpbmsoXG4gICAgICB2LWZvcj1cIihzY29wZSwga2V5KSBpbiBzY29wZXNcIlxuICAgICAgOmtleT1cImtleVwiXG4gICAgICA6dG89XCJnZXRTY29wZUxpbmsoc2NvcGUpXCJcbiAgICAgIGN1c3RvbSB2LXNsb3Q9XCJ7IG5hdmlnYXRlIH1cIlxuICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2VsZWN0ZWQnOiBzY29wZS5uYW1lID09PSBxdWVyeS5zY29wZSB9XCJcbiAgICAgICAgOnRpdGxlPVwic2NvcGUuaGludCB8fCBnZXRMYWJlbChzY29wZSlcIlxuICAgICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgICApIHt7IGdldExhYmVsKHNjb3BlKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXNjb3Blc1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tYnV0dG9uXG4gICAgICArZWxsaXBzaXNcbiAgICAgIGJvcmRlci1yYWRpdXM6IDBcbiAgICAgIC8vIEEgYml0IG1vcmUgdGhhbiB0aGUgd2lkdGggb2YgZWxsaXBzaXMsIHRvIHByZXZlbnQgcmVwbGFjaW5nIHNob3J0IHdvcmRzXG4gICAgICAvLyB3aXRoIGVsbGlwc2lzLlxuICAgICAgbWluLXdpZHRoOiAzZW1cbiAgICAgIGZsZXg6IDAgMSBhdXRvXG4gICAgICAmOmZpcnN0LWNoaWxkXG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDFlbVxuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAxZW1cbiAgICAgICAgcGFkZGluZy1sZWZ0OiAxZW1cbiAgICAgICY6bGFzdC1jaGlsZFxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMWVtXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAxZW1cbiAgICAgICAgcGFkZGluZy1yaWdodDogMWVtXG4gICAgICAmICsgLmRpdG8tYnV0dG9uXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4XG4gICAgICAvLyBEb24ndCBjb3ZlciB0aGUgZm9jdXNlZCBib3JkZXIgb2YgYnV0dG9uczpcbiAgICAgICY6Zm9jdXNcbiAgICAgICAgei1pbmRleDogMVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1zY29wZXMnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNjb3BlczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0U2NvcGVMaW5rKHNjb3BlKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHsgLi4udGhpcy5xdWVyeSwgc2NvcGU6IHNjb3BlLm5hbWUgfVxuICAgICAgaWYgKHF1ZXJ5LnBhZ2UpIHtcbiAgICAgICAgcXVlcnkucGFnZSA9IDBcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5TGluayhxdWVyeSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxucGFnaW5hdGlvbihcbiAgOnBhZ2VTaXplPVwibGltaXRcIlxuICA6dG90YWw9XCJ0b3RhbFwiXG4gIDpwYWdlLnN5bmM9XCJwYWdlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHBhZ2luYXRpb24oXG4gICAgOnBhZ2VTaXplPVwibGltaXRcIlxuICAgIDp0b3RhbD1cInRvdGFsXCJcbiAgICA6cGFnZS5zeW5jPVwicGFnZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBQYWdpbmF0aW9uIH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1wYWdpbmF0aW9uJywge1xuICBjb21wb25lbnRzOiB7IFBhZ2luYXRpb24gfSxcblxuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBsaW1pdDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdG90YWw6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYWdlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAoK3RoaXMucXVlcnkucGFnZSB8fCAwKSArIDFcbiAgICAgIH0sXG5cbiAgICAgIHNldChwYWdlKSB7XG4gICAgICAgIGlmICh0aGlzLnBhZ2UgIT09IHBhZ2UpIHtcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh0aGlzLmdldFF1ZXJ5TGluayh7XG4gICAgICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnZTogKHBhZ2UgLSAxKVxuICAgICAgICAgIH0pKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZHJhZ2dpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblN0YXJ0RHJhZygpIHtcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlXG4gICAgfSxcblxuICAgIG9uRW5kRHJhZyh7IG9sZEluZGV4LCBuZXdJbmRleCB9KSB7XG4gICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2VcbiAgICAgIGlmIChvbGRJbmRleCAhPT0gbmV3SW5kZXgpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdCwgcGFnaW5hdGlvblJhbmdlKSB7XG4gICAgICBjb25zdCB7IG9yZGVyS2V5IH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgIGlmIChvcmRlcktleSkge1xuICAgICAgICAvLyBSZW9yZGVyIHRoZSBjaGFuZ2VkIGVudHJpZXMgYnkgdGhlaXIgb3JkZXIga2V5LCB0YWtpbmcgcGFnaW5hdGlvblxuICAgICAgICAvLyBvZmZzZXRzIGludG8gYWNjb3VudDpcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcGFnaW5hdGlvblJhbmdlPy5bMF0gfHwgMFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBsaXN0W2ldW29yZGVyS2V5XSA9IGkgKyBvZmZzZXRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3RcbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tdHJlZS1pdGVtKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1ge1xuICAgICdkaXRvLWRyYWdnaW5nJzogZHJhZ2dpbmcsXG4gICAgJ2RpdG8tYWN0aXZlJzogYWN0aXZlXG4gIH1gXG4gIDpzdHlsZT1cImxldmVsID4gMCAmJiB7ICctLWxldmVsJzogbGV2ZWwgfVwiXG4pXG4gIC5kaXRvLXRyZWUtaGVhZGVyKHYtaWY9XCJsYWJlbFwiKVxuICAgIC5kaXRvLXRyZWUtYnJhbmNoKFxuICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgQGNsaWNrLnN0b3A9XCJvcGVuZWQgPSAhb3BlbmVkXCJcbiAgICApXG4gICAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogb3BlbmVkIH1cIlxuICAgICAgKVxuICAgICAgLmRpdG8tdHJlZS1sYWJlbCh2LWh0bWw9XCJsYWJlbFwiKVxuICAgICAgLmRpdG8tdHJlZS1pbmZvKHYtaWY9XCJkZXRhaWxzXCIpIHt7IGRldGFpbHMgfX1cbiAgICAuZGl0by10cmVlLWxlYWYodi1lbHNlKVxuICAgICAgLmRpdG8tdHJlZS1sYWJlbCh2LWh0bWw9XCJsYWJlbFwiKVxuICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXNtYWxsKHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiKVxuICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIEBjbGljaz1cIm9uRWRpdFwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIEBjbGljaz1cIm9uRGVsZXRlXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgIClcbiAgdGFibGUuZGl0by1wcm9wZXJ0aWVzKFxuICAgIHYtaWY9XCJwcm9wZXJ0aWVzXCJcbiAgICB2LXNob3c9XCJvcGVuZWRcIlxuICApXG4gICAgdHIoXG4gICAgICB2LWZvcj1cInByb3BlcnR5IGluIHByb3BlcnRpZXNcIlxuICAgIClcbiAgICAgIHRkXG4gICAgICAgIGRpdG8tbGFiZWwoXG4gICAgICAgICAgdi1pZj1cInByb3BlcnR5LmxhYmVsICE9PSBmYWxzZVwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICAgIDpsYWJlbD1cImdldExhYmVsKHByb3BlcnR5KVwiXG4gICAgICAgIClcbiAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgOmNlbGw9XCJwcm9wZXJ0eVwiXG4gICAgICAgIDpzY2hlbWE9XCJwcm9wZXJ0eVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG4gIHZ1ZS1kcmFnZ2FibGUoXG4gICAgdi1pZj1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICB2LXNob3c9XCJvcGVuZWRcIlxuICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGNoaWxkcmVuRHJhZ2dhYmxlLCB0cnVlKVwiXG4gICAgOmxpc3Q9XCJ1cGRhdGVPcmRlcihjaGlsZHJlblNjaGVtYSwgY2hpbGRyZW5MaXN0KVwiXG4gICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgIEBlbmQ9XCJvbkVuZERyYWcoJGV2ZW50LCBjaGlsZHJlblNjaGVtYSlcIlxuICApXG4gICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gY2hpbGRyZW5JdGVtc1wiXG4gICAgICA6a2V5PVwiZ2V0SXRlbVVpZChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhKVwiXG4gICAgICA6c2NoZW1hPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZ2V0SXRlbURhdGFQYXRoKGNoaWxkcmVuU2NoZW1hLCBpbmRleClcIlxuICAgICAgOmRhdGE9XCJpdGVtLmRhdGFcIlxuICAgICAgOnBhdGg9XCJpdGVtLnBhdGhcIlxuICAgICAgOm9wZW49XCJpdGVtLm9wZW5cIlxuICAgICAgOmFjdGl2ZT1cIml0ZW0uYWN0aXZlXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJjaGlsZHJlbkRyYWdnYWJsZVwiXG4gICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSwgeyBpbmRleCB9KVwiXG4gICAgICA6bGV2ZWw9XCJsZXZlbCArIDFcIlxuICAgIClcbiAgICAvLyBUT0RPOiBDb252ZXJ0IGRpdG8tdHJlZS1pdGVtIHRvIHVzZSBkaXRvLWxhYmVsIGludGVybmFsbHksIGFuZCB0aGVuXG4gICAgLy8gcGFzcyBgYXNPYmplY3Q6IHRydWVgIGluIHRoZSBgZ2V0SXRlbUxhYmVsKClgIGNhbGwgYWJvdmUuXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by10cmVlLWl0ZW0oXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1ge1xuICAgICAgJ2RpdG8tZHJhZ2dpbmcnOiBkcmFnZ2luZyxcbiAgICAgICdkaXRvLWFjdGl2ZSc6IGFjdGl2ZVxuICAgIH1gXG4gICAgOnN0eWxlPVwibGV2ZWwgPiAwICYmIHsgJy0tbGV2ZWwnOiBsZXZlbCB9XCJcbiAgKVxuICAgIC5kaXRvLXRyZWUtaGVhZGVyKHYtaWY9XCJsYWJlbFwiKVxuICAgICAgLmRpdG8tdHJlZS1icmFuY2goXG4gICAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgICAgQGNsaWNrLnN0b3A9XCJvcGVuZWQgPSAhb3BlbmVkXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2hldnJvbihcbiAgICAgICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiBvcGVuZWQgfVwiXG4gICAgICAgIClcbiAgICAgICAgLmRpdG8tdHJlZS1sYWJlbCh2LWh0bWw9XCJsYWJlbFwiKVxuICAgICAgICAuZGl0by10cmVlLWluZm8odi1pZj1cImRldGFpbHNcIikge3sgZGV0YWlscyB9fVxuICAgICAgLmRpdG8tdHJlZS1sZWFmKHYtZWxzZSlcbiAgICAgICAgLmRpdG8tdHJlZS1sYWJlbCh2LWh0bWw9XCJsYWJlbFwiKVxuICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtc21hbGwodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgQGNsaWNrPVwib25FZGl0XCJcbiAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgICAgICAgKVxuICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgQGNsaWNrPVwib25EZWxldGVcIlxuICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICAgIClcbiAgICB0YWJsZS5kaXRvLXByb3BlcnRpZXMoXG4gICAgICB2LWlmPVwicHJvcGVydGllc1wiXG4gICAgICB2LXNob3c9XCJvcGVuZWRcIlxuICAgIClcbiAgICAgIHRyKFxuICAgICAgICB2LWZvcj1cInByb3BlcnR5IGluIHByb3BlcnRpZXNcIlxuICAgICAgKVxuICAgICAgICB0ZFxuICAgICAgICAgIGRpdG8tbGFiZWwoXG4gICAgICAgICAgICB2LWlmPVwicHJvcGVydHkubGFiZWwgIT09IGZhbHNlXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICAgIDpsYWJlbD1cImdldExhYmVsKHByb3BlcnR5KVwiXG4gICAgICAgICAgKVxuICAgICAgICBkaXRvLXRhYmxlLWNlbGwoXG4gICAgICAgICAgOmNlbGw9XCJwcm9wZXJ0eVwiXG4gICAgICAgICAgOnNjaGVtYT1cInByb3BlcnR5XCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIClcbiAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgdi1pZj1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhjaGlsZHJlbkRyYWdnYWJsZSwgdHJ1ZSlcIlxuICAgICAgOmxpc3Q9XCJ1cGRhdGVPcmRlcihjaGlsZHJlblNjaGVtYSwgY2hpbGRyZW5MaXN0KVwiXG4gICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICBAZW5kPVwib25FbmREcmFnKCRldmVudCwgY2hpbGRyZW5TY2hlbWEpXCJcbiAgICApXG4gICAgICBkaXRvLXRyZWUtaXRlbShcbiAgICAgICAgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIGNoaWxkcmVuSXRlbXNcIlxuICAgICAgICA6a2V5PVwiZ2V0SXRlbVVpZChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhKVwiXG4gICAgICAgIDpzY2hlbWE9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImdldEl0ZW1EYXRhUGF0aChjaGlsZHJlblNjaGVtYSwgaW5kZXgpXCJcbiAgICAgICAgOmRhdGE9XCJpdGVtLmRhdGFcIlxuICAgICAgICA6cGF0aD1cIml0ZW0ucGF0aFwiXG4gICAgICAgIDpvcGVuPVwiaXRlbS5vcGVuXCJcbiAgICAgICAgOmFjdGl2ZT1cIml0ZW0uYWN0aXZlXCJcbiAgICAgICAgOmRyYWdnYWJsZT1cImNoaWxkcmVuRHJhZ2dhYmxlXCJcbiAgICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEsIHsgaW5kZXggfSlcIlxuICAgICAgICA6bGV2ZWw9XCJsZXZlbCArIDFcIlxuICAgICAgKVxuICAgICAgLy8gVE9ETzogQ29udmVydCBkaXRvLXRyZWUtaXRlbSB0byB1c2UgZGl0by1sYWJlbCBpbnRlcm5hbGx5LCBhbmQgdGhlblxuICAgICAgLy8gcGFzcyBgYXNPYmplY3Q6IHRydWVgIGluIHRoZSBgZ2V0SXRlbUxhYmVsKClgIGNhbGwgYWJvdmUuXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tdHJlZS1pdGVtXG4gICAgLS1jaGV2cm9uLWluZGVudDogI3skY2hldnJvbi1pbmRlbnR9XG4gICAgPiAuZGl0by10cmVlLWhlYWRlclxuICAgICAgPiAuZGl0by10cmVlLWJyYW5jaCxcbiAgICAgID4gLmRpdG8tdHJlZS1sZWFmXG4gICAgICAgIC8vIFVzZSBgLS1sZXZlbGAgQ1NTIHZhcmlhYmxlIHRvIGNhbGN1bGF0ZWQgdGhlIGFjY3VtdWxhdGVkIGluZGVudFxuICAgICAgICAvLyBwYWRkaW5nIGRpcmVjdGx5IGluc3RlYWQgb2YgaGF2aW5nIGl0IGFjY3VtdWxhdGUgaW4gbmVzdGVkIENTUy5cbiAgICAgICAgLy8gVGhpcyB3YXksIHdlIGNhbiBrZWVwIHRoZSAuZGl0by1hY3RpdmUgYXJlYSBjb3ZlciB0aGUgZnVsbCB3aWR0aDpcbiAgICAgICAgcGFkZGluZy1sZWZ0OiBjYWxjKHZhcigtLWNoZXZyb24taW5kZW50KSAqICh2YXIoLS1sZXZlbCwgMSkgLSAxKSlcbiAgICAuZGl0by10cmVlLWJyYW5jaFxuICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgLmRpdG8tdHJlZS1oZWFkZXJcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgIC5kaXRvLXRyZWUtYnJhbmNoLFxuICAgIC5kaXRvLXRyZWUtbGVhZlxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgZmxleDogYXV0b1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICBtYXJnaW46IDFweCAwXG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAuZGl0by10cmVlLWxhYmVsLFxuICAgIC5kaXRvLXRyZWUtaW5mb1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgIC5kaXRvLXRyZWUtaW5mb1xuICAgICAgcGFkZGluZy1sZWZ0OiAwLjM1ZW1cbiAgICAgIGNvbG9yOiByZ2JhKCRjb2xvci1ibGFjaywgLjIpXG4gICAgLmRpdG8tYnV0dG9uc1xuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgdmlzaWJpbGl0eTogaGlkZGVuXG4gICAgICBoZWlnaHQ6IDEwMCVcbiAgICAgIG1hcmdpbi1sZWZ0OiAxZW1cbiAgICAgIG1hcmdpbjogMXB4IDAgMXB4IDFlbVxuICAgIC5kaXRvLXRyZWUtaGVhZGVyOmhvdmVyXG4gICAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZVxuICAgIC8vIEhpZGUgYnV0dG9ucyBkdXJpbmcgZHJhZ2dpbmdcbiAgICAmLmRpdG8tZHJhZ2dpbmdcbiAgICAgIC5kaXRvLXRyZWUtaGVhZGVyXG4gICAgICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlblxuICAgICYuZGl0by1hY3RpdmVcbiAgICAgID4gLmRpdG8tdHJlZS1oZWFkZXJcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZVxuICAgICAgICBwYWRkaW5nOiAwICRpbnB1dC1wYWRkaW5nLWhvclxuICAgICAgICBtYXJnaW46IDAgKC0kaW5wdXQtcGFkZGluZy1ob3IpXG4gICAgICAgID4gLmRpdG8tdHJlZS1icmFuY2hcbiAgICAgICAgICA+IC5kaXRvLWNoZXZyb246OmJlZm9yZVxuICAgICAgICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICAgID4gKiA+IC5kaXRvLXRyZWUtbGFiZWxcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLmRpdG8tcHJvcGVydGllc1xuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgIG1hcmdpbi1sZWZ0OiAkY2hldnJvbi1pbmRlbnRcbiAgICAgID4gdHJcbiAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lXG4gICAgICAuZGl0by1sYWJlbFxuICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgICBjb250ZW50OiAnOiAnXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFZ1ZURyYWdnYWJsZSBmcm9tICd2dWVkcmFnZ2FibGUnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9yZGVyZWRNaXhpbiBmcm9tICcuLi9taXhpbnMvT3JkZXJlZE1peGluLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE5hbWVkU2NoZW1hcywgaGFzRm9ybVNjaGVtYSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRyZWUtaXRlbScsIHtcbiAgY29tcG9uZW50czogeyBWdWVEcmFnZ2FibGUgfSxcbiAgbWl4aW5zOiBbT3JkZXJlZE1peGluXSxcbiAgaW5qZWN0OiBbJ2NvbnRhaW5lciddLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbQXJyYXksIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBvcGVuOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWN0aXZlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbGV2ZWw6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvcGVuZWQ6IHRoaXMub3BlbiB8fCB0aGlzLnNjaGVtYS5vcGVuXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbWV0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5tZXRhXG4gICAgfSxcblxuICAgIHN0b3JlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLnN0b3JlXG4gICAgfSxcblxuICAgIGRpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLmRpc2FibGVkXG4gICAgfSxcblxuICAgIG5lc3RlZE1ldGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLm1ldGEsXG4gICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEucHJvcGVydGllcylcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogU2hvdWxkIHRoaXMgYmUgbmFtZWQgYHNvdXJjZVNjaGVtYWAgaW5zdGVhZD8gVXNlIFNvdXJjZU1peGluP1xuICAgIGNoaWxkcmVuU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmNoaWxkcmVuXG4gICAgfSxcblxuICAgIGNoaWxkcmVuTGlzdCgpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNoaWxkcmVuU2NoZW1hPy5uYW1lXG4gICAgICByZXR1cm4gbmFtZSAmJiB0aGlzLmRhdGFbbmFtZV1cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5EcmFnZ2FibGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoID4gMSAmJlxuICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdkcmFnZ2FibGUnLCB7XG4gICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICBzY2hlbWE6IHRoaXMuY2hpbGRyZW5TY2hlbWFcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbnVtQ2hpbGRyZW4oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbkxpc3Q/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bVByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzPy5sZW5ndGggfHwgMFxuICAgIH0sXG5cbiAgICBudW1FbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMubnVtUHJvcGVydGllcyArIHRoaXMubnVtQ2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5JdGVtcygpIHtcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW5TY2hlbWEgfSA9IHRoaXNcbiAgICAgIGlmIChjaGlsZHJlblNjaGVtYSkge1xuICAgICAgICBjb25zdCB7IGVkaXRQYXRoIH0gPSB0aGlzLmNvbnRhaW5lclxuICAgICAgICBjb25zdCBjaGlsZHJlbk9wZW4gPSAhdGhpcy5wYXRoICYmIGNoaWxkcmVuU2NoZW1hLm9wZW5cbiAgICAgICAgLy8gQnVpbGQgYSBjaGlsZHJlbiBsaXN0IHdpdGggY2hpbGQgbWV0YSBpbmZvcm1hdGlvbiBmb3IgdGhlIHRlbXBsYXRlLlxuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbkxpc3Q/Lm1hcCgoZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXRoID0gKFxuICAgICAgICAgICAgY2hpbGRyZW5TY2hlbWEucGF0aCAmJlxuICAgICAgICAgICAgYCR7dGhpcy5wYXRofS8ke2NoaWxkcmVuU2NoZW1hLnBhdGh9LyR7aW5kZXh9YFxuICAgICAgICAgIClcbiAgICAgICAgICBjb25zdCBvcGVuID0gY2hpbGRyZW5PcGVuIHx8XG4gICAgICAgICAgICAvLyBPbmx5IGNvdW50IGFzIFwiaW4gZWRpdCBwYXRoXCIgd2hlbiBpdCdzIG5vdCB0aGUgZnVsbCBlZGl0IHBhdGguXG4gICAgICAgICAgICBlZGl0UGF0aC5zdGFydHNXaXRoKHBhdGgpICYmIHBhdGgubGVuZ3RoIDwgZWRpdFBhdGgubGVuZ3RoXG4gICAgICAgICAgY29uc3QgYWN0aXZlID0gZWRpdFBhdGggPT09IHBhdGhcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICBvcGVuLFxuICAgICAgICAgICAgYWN0aXZlXG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBbXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZXRhaWxzKCkge1xuICAgICAgY29uc3QgeyBudW1DaGlsZHJlbiB9ID0gdGhpc1xuICAgICAgcmV0dXJuIG51bUNoaWxkcmVuICYmIGAke251bUNoaWxkcmVufSAke1xuICAgICAgICBudW1DaGlsZHJlbiA9PT0gMSA/ICdpdGVtJyA6ICdpdGVtcydcbiAgICAgIH1gXG4gICAgfSxcblxuICAgIGhhc0VkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZHJhZ2dhYmxlIHx8IHRoaXMuZWRpdGFibGUgfHwgdGhpcy5kZWxldGFibGVcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogU3VwcG9ydCBjcmVhdGFibGUhXG4gICAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIGNyZWF0YWJsZSwgZWRpdGFibGUgYW5kIGRlbGV0YWJsZSBvdmVycmlkZXMgb24gdGhlXG4gICAgLy8gYXNzb2NpYXRlZCBmb3JtcywganVzdCBsaWtlIGluIGBUeXBlTGlzdGAgYW5kIGBUeXBlT2JqZWN0YCwgdGhyb3VnaFxuICAgIC8vIGBEaXRvRWRpdEJ1dHRvbnNgLiBJdCB3b3VsZCBiZSBiZXN0IHRvIHVzZSBgRGl0b0VkaXRCdXR0b25zYCBoZXJlIHRvby5cbiAgICBjcmVhdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjcmVhdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY3JlYXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZWRpdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGVkaXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgcHJvcGVydHkubmFtZSlcbiAgICB9LFxuXG4gICAgb25FZGl0KCkge1xuICAgICAgLy8gQWxsIHdlIGdvdCB0byBkbyBpcyBwdXNoIHRoZSByaWdodCBlZGl0IHBhdGggdG8gdGhlIHJvdXRlciwgdGhlIHJlc3RcbiAgICAgIC8vIGlzIGhhbmRsZWQgYnkgb3VyIHJvdXRlcywgYWxsb3dpbmcgcmVsb2FkcyBhcyB3ZWxsLlxuICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICBwYXRoOiBgJHt0aGlzLmNvbnRhaW5lci5wYXRofSR7dGhpcy5wYXRofWAsXG4gICAgICAgIC8vIFByZXNlcnZlIGN1cnJlbnQgcXVlcnlcbiAgICAgICAgcXVlcnk6IHRoaXMuJHJvdXRlLnF1ZXJ5XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkRlbGV0ZSgpIHtcbiAgICAgIC8vIFRPRE86IEltcGxlbWVudCFcbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5vbkNoYW5nZSgpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICB0clxuICAgIHRoKFxuICAgICAgdi1mb3I9XCIoY29sdW1uLCBpbmRleCkgaW4gY29sdW1uc1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGNvbHVtbilcIlxuICAgICAgOmNsYXNzPVwiZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKVwiXG4gICAgKVxuICAgICAgcm91dGVyLWxpbmsoXG4gICAgICAgIHYtaWY9XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgICA6dG89XCJnZXRTb3J0TGluayhjb2x1bW4pXCJcbiAgICAgICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICA6Y2xhc3M9XCJnZXRTb3J0Q2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICAgICApXG4gICAgICAgICAgLmRpdG8tb3JkZXItYXJyb3dzXG4gICAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgICBzcGFuKFxuICAgICAgICB2LWVsc2VcbiAgICAgICkge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgIHRoKHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiKVxuICAgICAgLy8gRW1wdHkgPHNwYW4+IGlzIG5lZWRlZCBmb3Igc3R5bGluZywgc2VlIF90YWJsZS5zYXNzXG4gICAgICBzcGFuXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgICB0clxuICAgICAgdGgoXG4gICAgICAgIHYtZm9yPVwiKGNvbHVtbiwgaW5kZXgpIGluIGNvbHVtbnNcIlxuICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGNvbHVtbilcIlxuICAgICAgICA6Y2xhc3M9XCJnZXRDb2x1bW5DbGFzcyhjb2x1bW4pXCJcbiAgICAgIClcbiAgICAgICAgcm91dGVyLWxpbmsoXG4gICAgICAgICAgdi1pZj1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgICAgOnRvPVwiZ2V0U29ydExpbmsoY29sdW1uKVwiXG4gICAgICAgICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgICAgIClcbiAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImdldFNvcnRDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1vcmRlci1hcnJvd3NcbiAgICAgICAgICAgIHNwYW4ge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgICBzcGFuKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICApIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICAgIHRoKHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiKVxuICAgICAgICAvLyBFbXB0eSA8c3Bhbj4gaXMgbmVlZGVkIGZvciBzdHlsaW5nLCBzZWUgX3RhYmxlLnNhc3NcbiAgICAgICAgc3BhblxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXRhYmxlLWhlYWRcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB0clxuICAgICAgdGhcbiAgICAgICAgcGFkZGluZzogMFxuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsXG4gICAgICAgIHRleHQtYWxpZ246IGxlZnRcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICAuZGl0by1idXR0b25cbiAgICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmcsIHNlZSBiZWxvd1xuICAgICAgICAgIHBhZGRpbmc6IDBcbiAgICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICAgIHRleHQtYWxpZ246IGluaGVyaXRcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwXG4gICAgICAgIHNwYW5cbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmdcbiAgICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgICAgICY6ZW1wdHk6OmFmdGVyXG4gICAgICAgICAgICAvLyBQcmV2ZW50IGVtcHR5IDx0aD4gZnJvbSBjb2xsYXBzaW5nXG4gICAgICAgICAgICBjb250ZW50OiAnXFwyMDBiJyAvLyB6ZXJvLXdpZHRoIHNwYWNlXG4gICAgICAgID4gc3BhblxuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by10YWJsZS1oZWFkJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2x1bW5zOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBoYXNFZGl0QnV0dG9uczogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3J0KCkge1xuICAgICAgY29uc3Qgb3JkZXIgPSAodGhpcy5xdWVyeS5vcmRlciB8fCAnJykuc3BsaXQoL1xccysvKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogb3JkZXJbMF0sXG4gICAgICAgIG9yZGVyOiBvcmRlclsxXVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gYGRpdG8tY29sdW1uLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldFNvcnRDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWVcbiAgICAgICAgPyBgZGl0by1zZWxlY3RlZCBkaXRvLW9yZGVyLSR7dGhpcy5zb3J0Lm9yZGVyfWBcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdldFNvcnRMaW5rKGNvbHVtbikge1xuICAgICAgLy8gVG9nZ2xlIG9yZGVyIGlmIHRoZSBzYW1lIGNvbHVtbiBpcyBjbGlja2VkIGFnYWluLlxuICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWUgJiYgdGhpcy5zb3J0Lm9yZGVyID09PSAnYXNjJ1xuICAgICAgICA/ICdkZXNjJ1xuICAgICAgICA6ICdhc2MnXG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICBvcmRlcjogYCR7Y29sdW1uLm5hbWV9ICR7b3JkZXJ9YFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGQoXG4gIDpjbGFzcz1cImNlbGwuY2xhc3NcIlxuICA6c3R5bGU9XCJjZWxsLnN0eWxlXCJcbilcbiAgLy8gVE9ETzogSW1wbGVtZW50IGlubGluZWQgY29tcG9uZW50cyBpbiBjZWxsIG1vZGUhXG4gIGNvbXBvbmVudChcbiAgICB2LWlmPVwiY29tcG9uZW50XCJcbiAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuICBzcGFuKFxuICAgIHYtZWxzZVxuICAgIHYtaHRtbD1cInJlbmRlckNlbGwoZGF0YSlcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0ZChcbiAgICA6Y2xhc3M9XCJjZWxsLmNsYXNzXCJcbiAgICA6c3R5bGU9XCJjZWxsLnN0eWxlXCJcbiAgKVxuICAgIC8vIFRPRE86IEltcGxlbWVudCBpbmxpbmVkIGNvbXBvbmVudHMgaW4gY2VsbCBtb2RlIVxuICAgIGNvbXBvbmVudChcbiAgICAgIHYtaWY9XCJjb21wb25lbnRcIlxuICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZVxuICAgICAgdi1odG1sPVwicmVuZGVyQ2VsbChkYXRhKVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBlc2NhcGVIdG1sIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYmxlLWNlbGwnLCB7XG4gIHByb3BzOiB7XG4gICAgY2VsbDogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZVR5cGVDb21wb25lbnQodGhpcy5jZWxsLmNvbXBvbmVudClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbmRlckNlbGwoaXRlbSkge1xuICAgICAgY29uc3QgeyBuYW1lLCByZW5kZXIgfSA9IHRoaXMuY2VsbFxuICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW25hbWVdXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgOiBlc2NhcGVIdG1sKHZhbHVlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEEgY29tcG9uZW50IHRvIHNpbXBseSBwYXNzIHRocm91Z2ggYW4gZXhpc3RpbmcgdnVlIHZub2RlLlxuLy8gU2VlOiBodHRwczovL2ZvcnVtLnZ1ZWpzLm9yZy90LzI4MTYyLzRcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXZub2RlJywge1xuICBmdW5jdGlvbmFsOiB0cnVlLFxuICByZW5kZXI6IChoLCBjb250ZXh0KSA9PiBjb250ZXh0LnByb3BzLm5vZGVcbn0pXG48L3NjcmlwdD5cbiIsIi8vIFR5cGVDb21wb25lbnQgaXMgdGhlIGFic3RyYWN0IGJhc2UgY29tcG9uZW50IGZvciBhbGwgb3RoZXIgdHlwZSBjb21wb25lbnRzXG4vLyBpbnNpZGUgdGhlIHR5cGVzLyBmb2xkZXIuIFRoZXJlJ3MgYWxzbyBhIHNlcGFyYXRlIGNvbmNyZXRlXG4vLyBgVHlwZUNvbXBvbmVudC52dWVgIGNvbXBvbmVudCwgdXNlIHRvIHJlbmRlciB0aGUgYHR5cGU6ICdjb21wb25lbnQnYCB0eXBlcy5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyByZWdpc3RlclR5cGVDb21wb25lbnQsIGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcblxuY29uc3QgVHlwZUNvbXBvbmVudCA9IERpdG9Db21wb25lbnQuZXh0ZW5kKHtcbiAgbWl4aW5zOiBbVHlwZU1peGluXSxcblxuICBuYXRpdmVGaWVsZDogZmFsc2UsXG4gIHRleHRGaWVsZDogZmFsc2UsXG4gIC8vIFNldCByZWFzb25hYmxlIGRlZmF1bHRzIGZvciBhbGwgb2YgdGhlc2UgdGhhdCBhcmUgdXNlZCBieSBtb3N0IHR5cGVcbiAgLy8gY29tcG9uZW50cy4gVGhlc2Ugb25seSBuZWVkIGRlZmluaW5nIGluIHN1Yi1jbGFzc2VzIHdoZW4gdGhleSBkaWZmZXIuXG4gIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgZGVmYXVsdE5lc3RlZDogdHJ1ZSxcbiAgZGVmYXVsdFZpc2libGU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IHRydWUsXG4gIGV4Y2x1ZGVWYWx1ZTogZmFsc2UsXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogbnVsbCxcbiAgb21pdFBhZGRpbmc6IGZhbHNlXG59KVxuXG5UeXBlQ29tcG9uZW50LnJlZ2lzdGVyID0gZnVuY3Rpb24odHlwZXMsIGRlZmluaXRpb24gPSB7fSkge1xuICB0eXBlcyA9IGFzQXJyYXkodHlwZXMpXG4gIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50KGBkaXRvLXR5cGUtJHt0eXBlc1swXX1gLCBkZWZpbml0aW9uKVxuICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KVxuICB9XG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuVHlwZUNvbXBvbmVudC5nZXQgPSBnZXRUeXBlQ29tcG9uZW50XG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnRcbiIsIlxuYnV0dG9uLmRpdG8tYnV0dG9uKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6dHlwZT1cInR5cGVcIlxuICA6dGl0bGU9XCJ0ZXh0XCJcbiAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKSB7eyB0ZXh0IH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDp0eXBlPVwidHlwZVwiXG4gICAgOnRpdGxlPVwidGV4dFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKSB7eyB0ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ2J1dHRvbicsICdzdWJtaXQnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG4gIC8vIFRPRE86IENvbnNpZGVyIG1ha2luZyB0aGlzIHdvcmsgbmljZWx5OlxuICAvLyBvbWl0RmxleEdyb3c6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2ZXJiKCkge1xuICAgICAgcmV0dXJuIHRoaXMudmVyYnNbdGhpcy5uYW1lXSB8fCB0aGlzLm5hbWVcbiAgICB9LFxuXG4gICAgdGV4dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RleHQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQodGV4dCkge1xuICAgICAgICByZXR1cm4gdGV4dCB8fCBsYWJlbGl6ZSh0aGlzLnZlcmIpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjbG9zZUZvcm06IGdldFNjaGVtYUFjY2Vzc29yKCdjbG9zZUZvcm0nLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBAb3ZlcnJpZGVcbiAgICBnZXRMaXN0ZW5lcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBibHVyOiB0aGlzLm9uQmx1cixcbiAgICAgICAgY2xpY2s6IHRoaXMub25DbGlja1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VDb21wb25lbnQ/LnN1Ym1pdCh0aGlzLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrKCkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5lbWl0RXZlbnQoJ2NsaWNrJywge1xuICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICB9KVxuICAgICAgLy8gSGF2ZSBidXR0b25zIHRoYXQgZGVmaW5lIHJlc291cmNlcyBjYWxsIGB0aGlzLnN1Ym1pdCgpYCBieSBkZWZhdWx0OlxuICAgICAgaWYgKFxuICAgICAgICByZXMgPT09IHVuZGVmaW5lZCAmJiAvLyBNZWFuaW5nOiBkb24ndCBwcmV2ZW50IGRlZmF1bHQuXG4gICAgICAgIGhhc1Jlc291cmNlKHRoaXMuc2NoZW1hKVxuICAgICAgKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3VibWl0KClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuaW5wdXQuZGl0by1jaGVja2JveChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgdHlwZT1cImNoZWNrYm94XCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQuZGl0by1jaGVja2JveChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tY2hlY2tib3hcbiAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NoZWNrYm94Jywge1xuICBuYXRpdmVGaWVsZDogdHJ1ZVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzRnVuY3Rpb24sIGlzUHJvbWlzZSwgbm9ybWFsaXplRGF0YVBhdGgsIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IExvYWRpbmdNaXhpbiBmcm9tICcuL0xvYWRpbmdNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbTG9hZGluZ01peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgYXN5bmNEYXRhRW50cmllczoge31cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCBuYW1lLCB7XG4gICAgICByZXNvbHZlQ291bnRlciA9IDEsXG4gICAgICAuLi5sb2FkaW5nT3B0aW9uc1xuICAgIH0gPSB7fSkge1xuICAgICAgaWYgKCFpc09iamVjdChzY2hlbWEpKSB7XG4gICAgICAgIHNjaGVtYSA9IHsgZGF0YTogc2NoZW1hIH1cbiAgICAgIH1cbiAgICAgIGxldCB7IGRhdGEgPSB1bmRlZmluZWQsIGRhdGFQYXRoID0gbnVsbCB9ID0gc2NoZW1hXG4gICAgICAvLyBTZWUgaWYgdGhlcmUgaXMgYXN5bmMgZGF0YSBsb2FkaW5nIGFscmVhZHkgaW4gcHJvY2Vzcy5cbiAgICAgIGNvbnN0IGFzeW5jRW50cnkgPSAoXG4gICAgICAgIHRoaXMuYXN5bmNEYXRhRW50cmllc1tuYW1lXSB8fFxuICAgICAgICB0aGlzLiRzZXQodGhpcy5hc3luY0RhdGFFbnRyaWVzLCBuYW1lLCB7XG4gICAgICAgICAgZGVwZW5kZW5jeUZ1bmN0aW9uOiBudWxsLFxuICAgICAgICAgIHJlc29sdmVDb3VudGVyOiAwLFxuICAgICAgICAgIHJlc29sdmVkRGF0YTogbnVsbCxcbiAgICAgICAgICByZXNvbHZpbmc6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAvLyBJZiB0aGUgZGF0YSBjYWxsYmFjayBwcm92aWRlZCBhIGRlcGVuZGVuY3kgZnVuY3Rpb24gd2hlbiBpdCB3YXMgY2FsbGVkLFxuICAgICAgLy8gY2FsIGl0IGluIGV2ZXJ5IGNhbGwgb2YgYGhhbmRsZURhdGFTY2hlbWEoKWAgdG8gZm9yY2UgVnVlIHRvIGtlZXAgdHJhY2tcbiAgICAgIC8vIG9mIHRoZSBhc3luYyBkZXBlbmRlbmNpZXMuXG4gICAgICBhc3luY0VudHJ5LmRlcGVuZGVuY3lGdW5jdGlvbj8uY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG5cbiAgICAgIGlmIChhc3luY0VudHJ5LnJlc29sdmVDb3VudGVyID4gMCkge1xuICAgICAgICAvLyBJZiB0aGUgZGF0YSB3YXMgcmVzb2x2ZWQgYWxyZWFkeSwgcmV0dXJuIGl0IGFuZCBjbGVhciB0aGUgdmFsdWUgb25jZVxuICAgICAgICAvLyBgcmVzb2x2ZUNvdW50ZXJgIHJlYWNoZXMgemVyby4gQ291bnRpbmcgaXMgbmVlZGVkIGJlY2F1c2UgZGVwZW5kaW5nXG4gICAgICAgIC8vIG9uIHRoZSB1c2Ugb2YgZGF0YSBhbmQgcmVhY3Rpdml0eSwgbXVsdGlwbGUgY2FsbHMgdG8gdGhlIGNvbXB1dGVkXG4gICAgICAgIC8vIGdldHRlciBhcmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGRhdGEgaXMgY2hhbmdpbmcuIENsZWFyaW5nIHRoZSByZXNvbHZlZFxuICAgICAgICAvLyBkYXRhIHdvcmtzIGJlY2F1c2UgVnVlIGNhY2hlcyB0aGUgcmVzdWx0IG9mIGNvbXB1dGVkIGdldHRlcnMgYW5kIG9ubHlcbiAgICAgICAgLy8gcmVldmFsdWF0ZXMgaWYgb25lIG9mIHRoZSBkZXBlbmRlbmNpZXMgY2hhbmdlZC4gVGhpcyBpcyB0byBlbnN1cmVcbiAgICAgICAgLy8gdGhhdCBhIGNhY2hlZCB2YWx1ZSBoZXJlIGRvZXNuJ3QgYmxvY2sgLyBvdmVycmlkZSByZWV2YWx1YXRpb246XG4gICAgICAgIGNvbnN0IHsgcmVzb2x2ZWREYXRhIH0gPSBhc3luY0VudHJ5XG4gICAgICAgIGlmICgtLWFzeW5jRW50cnkucmVzb2x2ZUNvdW50ZXIgPT09IDApIHtcbiAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkRGF0YSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzb2x2ZWREYXRhXG4gICAgICB9XG4gICAgICAvLyBBdm9pZCBjYWxsaW5nIHRoZSBkYXRhIGZ1bmN0aW9uIHR3aWNlOlxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2aW5nKSB7XG4gICAgICAgIGRhdGEgPSBudWxsXG4gICAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGF0YSkpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBkYXRhLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICAgIC8vIElmIHRoZSByZXN1bHQgb2YgdGhlIGRhdGEgZnVuY3Rpb24gaXMgYW5vdGhlciBmdW5jdGlvbiwgdGhlbiB0aGVcbiAgICAgICAgICAvLyBmaXJzdCBkYXRhIGZ1bmN0aW9uIGlzIHRoZXJlIHRvIHRyYWNrIGRlcGVuZGVuY2llcyBhbmQgdGhlIHJlYWxcbiAgICAgICAgICAvLyBkYXRhIGxvYWRpbmcgaGFwcGVucyBpbiB0aGUgZnVuY3Rpb24gdGhhdCBpdCByZXR1cm5lZC4gS2VlcCB0cmFja1xuICAgICAgICAgIC8vIGl0IGluIGBkZXBlbmRlbmN5RnVuY3Rpb25gIHNvIGl0IGNhbiBiZSBjYWxsZWQgb24gZWFjaCBjYWxsIG9mXG4gICAgICAgICAgLy8gYGhhbmRsZURhdGFTY2hlbWEoKWAgdG8ga2VlcCB0aGUgZGVwZW5kZW5jaWVzIGludGFjdCwgYW5kIGNhbGxcbiAgICAgICAgICAvLyB0aGUgZnVuY3Rpb24gdGhhdCBpdCByZXR1cm5lZCBvbmNlIHRvIGdldCB0aGUgYWN0dWFsIGRhdGE6XG4gICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocmVzdWx0KSkge1xuICAgICAgICAgICAgYXN5bmNFbnRyeS5kZXBlbmRlbmN5RnVuY3Rpb24gPSBkYXRhXG4gICAgICAgICAgICBkYXRhID0gcmVzdWx0LmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gcmVzdWx0XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoZGF0YSkpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGF0YSBpcyBhc3luY2hyb25vdXMsIGl0IGNhbid0IGJlIHJldHVybmVkIHN0cmFpZ2h0IGF3YXkuXG4gICAgICAgICAgLy8gQnV0IHdlIGNhbiBjaGVhdCB1c2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFuZCBgcmVzb2x2ZWREYXRhYCxcbiAgICAgICAgICAvLyB3aGljaCBpcyBnb2luZyB0byByZWNlaXZlIHRoZSBsb2FkZWQgZGF0YSBhc3luY2hyb25vdXNseSxcbiAgICAgICAgICAvLyB0cmlnZ2VyaW5nIGEgcmVjb21wdXRlIG9mIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSB0aGF0IGNhbGxzXG4gICAgICAgICAgLy8gYGhhbmRsZURhdGFTY2hlbWEoKWAuXG4gICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSB0cnVlXG4gICAgICAgICAgdGhpcy5yZXNvbHZlRGF0YShkYXRhLCBsb2FkaW5nT3B0aW9ucykudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZUNvdW50ZXIgPSByZXNvbHZlQ291bnRlclxuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlZERhdGEgPSBkYXRhXG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IGZhbHNlXG4gICAgICAgICAgfSlcbiAgICAgICAgICAvLyBDbGVhciBkYXRhIHVudGlsIHByb21pc2UgaXMgcmVzb2x2ZWQgYW5kIGByZXNvbHZlZERhdGFgIGlzIHNldFxuICAgICAgICAgIGRhdGEgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YVBhdGgpIHtcbiAgICAgICAgZGF0YSA9IGdldFZhbHVlQXREYXRhUGF0aChcbiAgICAgICAgICB0aGlzLnJvb3REYXRhLFxuICAgICAgICAgIG5vcm1hbGl6ZURhdGFQYXRoKGAke3RoaXMuZGF0YVBhdGh9LyR7ZGF0YVBhdGh9YClcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVzb2x2ZURhdGEobG9hZCwgbG9hZGluZ09wdGlvbnMgPSB7fSkge1xuICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgbGV0IGRhdGEgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gYXdhaXQgKGlzRnVuY3Rpb24obG9hZCkgPyBsb2FkKCkgOiBsb2FkKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvci5tZXNzYWdlIHx8IGVycm9yKVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIHJldHVybiBkYXRhXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRGF0YU1peGluIGZyb20gJy4vRGF0YU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IHNldFRlbXBvcmFyeUlkLCBpc1JlZmVyZW5jZSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNBcnJheSwgaXNTdHJpbmcsIGlzRnVuY3Rpb24sXG4gIG5vcm1hbGl6ZURhdGFQYXRoLCBsYWJlbGl6ZSwgZGVib3VuY2VBc3luY1xufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhc09wdGlvbnM6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCBjb252ZXJ0VmFsdWUgPSB2YWx1ZSA9PiB0aGlzLnJlbGF0ZVxuICAgICAgICAgID8gdGhpcy5oYXNPcHRpb24odmFsdWUpXG4gICAgICAgICAgICA/IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXNBcnJheSh0aGlzLnZhbHVlKVxuICAgICAgICAgID8gdGhpcy52YWx1ZS5tYXAoY29udmVydFZhbHVlKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUgIT09IG51bGwpXG4gICAgICAgICAgOiBjb252ZXJ0VmFsdWUodGhpcy52YWx1ZSlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIC8vIFdoZW4gcmVsYXRpbmcgYW5kIGFzIHNvb24gYXMgdGhlIG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4uLlxuICAgICAgICAgIHRoaXMucmVsYXRlICYmIHRoaXMuaGFzT3B0aW9ucyAmJiAoXG4gICAgICAgICAgICAvLyAuLi5pZiB0aGUgdmFsdWUgaXMgZm9yY2VkIHRvIG51bGwgYmVjYXVzZSBhIGRpc2FwcGVhcmVkIG9wdGlvbi4uLlxuICAgICAgICAgICAgdmFsdWUgPT09IG51bGwgJiYgdGhpcy52YWx1ZSAhPT0gbnVsbCB8fFxuICAgICAgICAgICAgLy8gLi4ub3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVmZXJlbmNlLCByZXBsYWNlIGl0IHdpdGggaXRzIG9wdGlvblxuICAgICAgICAgICAgLy8gdmFsdWUsIHNvIHRoYXQgaXQnbGwgaG9sZCBhY3R1YWwgZGF0YSwgbm90IGp1c3QgYSByZWZlcmVuY2UgaWQuXG4gICAgICAgICAgICBpc1JlZmVyZW5jZSh0aGlzLnZhbHVlKVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjb252ZXJ0ID0gdmFsdWUgPT4gdGhpcy5yZWxhdGVcbiAgICAgICAgICA/IHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgICB0aGlzLnZhbHVlID0gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlLm1hcChjb252ZXJ0KVxuICAgICAgICAgIDogY29udmVydCh2YWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRPcHRpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWUpXG4gICAgfSxcblxuICAgIG9wdGlvbnMoKSB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5oYW5kbGVEYXRhU2NoZW1hKHRoaXMuc2NoZW1hLm9wdGlvbnMsICdvcHRpb25zJywge1xuICAgICAgICByZXNvbHZlQ291bnRlcjogMVxuICAgICAgfSkgPz8gW11cbiAgICAgIGlmICghaXNBcnJheShkYXRhKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgb3B0aW9ucyBkYXRhLCBzaG91bGQgYmUgYXJyYXk6ICR7ZGF0YX1gKVxuICAgICAgfVxuICAgICAgdGhpcy5oYXNPcHRpb25zID0gZGF0YS5sZW5ndGggPiAwXG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzT3B0aW9ucyhkYXRhKVxuICAgIH0sXG5cbiAgICBhY3RpdmVPcHRpb25zKCkge1xuICAgICAgLy8gVGhpcyBpcyBvdmVycmlkZGVuIGluIGBUeXBlTXVsdGlzZWxlY3RgIHRvIHJldHVybiB0aGUgYHNlYXJjaGVkT3B0aW9uc2BcbiAgICAgIC8vIHdoZW4gYSBzZWFyY2ggZmlsdGVyIHdhcyBhcHBsaWVkLlxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1xuICAgIH0sXG5cbiAgICByZWxhdGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZWxhdGUnLCB7XG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IHRvIGByZWxhdGVCeTogJ2lkJ2BcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIC8vIFdlIGNhbm5vdCB1c2Ugc2NoZW1hIGFjY2Vzc29yIGNhbGxiYWNrIG1hZ2ljIGZvciBgcmVsYXRlYCBhcyB3ZSBuZWVkXG4gICAgICAvLyB0aGlzIG91dHNpZGUgb2YgdGhlIGNvbXBvbmVudCdzIGxpZmUtc3Bhbiwgc2VlIGBwcm9jZXNzRGF0YSgpYCBiZWxvdy5cbiAgICAgIGNhbGxiYWNrOiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZ3JvdXBCeTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2dyb3VwQnknLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSksXG5cbiAgICBvcHRpb25MYWJlbDogZ2V0U2NoZW1hQWNjZXNzb3IoJ29wdGlvbnMubGFiZWwnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KGxhYmVsKSB7XG4gICAgICAgIC8vIElmIG5vIGBsYWJlbGAgd2FzIHByb3ZpZGVkIGJ1dCB0aGUgb3B0aW9ucyBhcmUgb2JqZWN0cywgYXNzdW1lIGFcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBvZiAnbGFiZWwnOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGxhYmVsIHx8XG4gICAgICAgICAgdGhpcy5nZXRPcHRpb25LZXkoJ2xhYmVsJykgfHxcbiAgICAgICAgICBudWxsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG9wdGlvblZhbHVlOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy52YWx1ZScsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQodmFsdWUpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICd2YWx1ZSc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdmFsdWUgfHxcbiAgICAgICAgICB0aGlzLnJlbGF0ZSAmJiAnaWQnIHx8XG4gICAgICAgICAgdGhpcy5nZXRPcHRpb25LZXkoJ3ZhbHVlJykgfHxcbiAgICAgICAgICBudWxsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IENvbnNpZGVyIG1vdmluZyBzZWFyY2ggdG8gYG9wdGlvbnMuc2VhcmNoYD9cbiAgICBzZWFyY2hGaWx0ZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdzZWFyY2gnLCB7XG4gICAgICB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KHNlYXJjaCkge1xuICAgICAgICBpZiAoc2VhcmNoKSB7XG4gICAgICAgICAgY29uc3QgeyBmaWx0ZXIsIGRlYm91bmNlIH0gPSBpc0Z1bmN0aW9uKHNlYXJjaClcbiAgICAgICAgICAgID8geyBmaWx0ZXI6IHNlYXJjaCB9XG4gICAgICAgICAgICA6IHNlYXJjaFxuICAgICAgICAgIHJldHVybiBkZWJvdW5jZSA/IGRlYm91bmNlQXN5bmMoZmlsdGVyLCBkZWJvdW5jZSkgOiBmaWx0ZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZ3JvdXBCeUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBCeSA/ICdsYWJlbCcgOiBudWxsXG4gICAgfSxcblxuICAgIGdyb3VwQnlPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBCeSA/ICdvcHRpb25zJyA6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE9wdGlvbktleShrZXkpIHtcbiAgICAgIGNvbnN0IFtvcHRpb25dID0gdGhpcy5hY3RpdmVPcHRpb25zXG4gICAgICByZXR1cm4gaXNPYmplY3Qob3B0aW9uKSAmJiBrZXkgaW4gb3B0aW9uID8ga2V5IDogbnVsbFxuICAgIH0sXG5cbiAgICBwcm9jZXNzT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVsYXRlKSB7XG4gICAgICAgICAgLy8gSWYgaWRzIGFyZSBtaXNzaW5nIGFuZCB3ZSB3YW50IHRvIHJlbGF0ZSwgc2V0IHRlbXBvcmFyeSBpZHMuXG4gICAgICAgICAgLy8gTk9URTogV2UgbmVlZCB0byBtb2RpZnkgdGhlIGFjdHVhbCBkYXRhLCBtYWtpbmcgYSBjb3B5IHdvbid0IHdvcmtcbiAgICAgICAgICAvLyBhcyBpdCB3b24ndCBwcm9wYWdhdGUuXG4gICAgICAgICAgLy8gTk9URTogVGhpcyBvbmx5IG1ha2VzIHNlbnNlIGlmIHRoZSBkYXRhIGlzIGZyb20gdGhlIGdyYXBoIHRoYXRcbiAgICAgICAgICAvLyB3ZSdyZSBjdXJyZW50bHkgZWRpdGluZy5cbiAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAoISgnaWQnIGluIG9wdGlvbikpIHtcbiAgICAgICAgICAgICAgc2V0VGVtcG9yYXJ5SWQob3B0aW9uLCAnaWQnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncm91cEJ5KSB7XG4gICAgICAgICAgY29uc3QgZ3JvdXBlZCA9IHt9XG4gICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMucmVkdWNlKFxuICAgICAgICAgICAgKHJlc3VsdHMsIG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBncm91cCA9IG9wdGlvblt0aGlzLmdyb3VwQnldXG4gICAgICAgICAgICAgIGxldCBlbnRyeSA9IGdyb3VwZWRbZ3JvdXBdXG4gICAgICAgICAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgICAgICAgICBlbnRyeSA9IGdyb3VwZWRbZ3JvdXBdID0ge1xuICAgICAgICAgICAgICAgICAgW3RoaXMuZ3JvdXBCeUxhYmVsXTogZ3JvdXAsXG4gICAgICAgICAgICAgICAgICBbdGhpcy5ncm91cEJ5T3B0aW9uc106IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChlbnRyeSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbnRyeS5vcHRpb25zLnB1c2gob3B0aW9uKVxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0c1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtdXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9uc1xuICAgIH0sXG5cbiAgICBoYXNPcHRpb24ob3B0aW9uKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSlcbiAgICB9LFxuXG4gICAgZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgIGNvbnN0IGZpbmRPcHRpb24gPSAob3B0aW9ucywgdmFsdWUsIGdyb3VwQnkpID0+IHtcbiAgICAgICAgLy8gU2VhcmNoIGZvciB0aGUgb3B0aW9uIG9iamVjdCB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBhbmQgcmV0dXJuIHRoZVxuICAgICAgICAvLyB3aG9sZSBvYmplY3QuXG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAoZ3JvdXBCeSkge1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSBmaW5kT3B0aW9uKG9wdGlvbi5vcHRpb25zLCB2YWx1ZSwgbnVsbClcbiAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uVmFsdWVcbiAgICAgICAgPyBmaW5kT3B0aW9uKHRoaXMuYWN0aXZlT3B0aW9ucywgdmFsdWUsIHRoaXMuZ3JvdXBCeSlcbiAgICAgICAgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uVmFsdWUgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25WYWx1ZSlcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25WYWx1ZV1cbiAgICAgICAgOiBpc0Z1bmN0aW9uKG9wdGlvblZhbHVlKVxuICAgICAgICAgID8gb3B0aW9uVmFsdWUuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBvcHRpb24gfSkpXG4gICAgICAgICAgOiBvcHRpb25cbiAgICB9LFxuXG4gICAgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgICBjb25zdCB7IG9wdGlvbkxhYmVsIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNTdHJpbmcob3B0aW9uTGFiZWwpXG4gICAgICAgID8gb3B0aW9uPy5bb3B0aW9uTGFiZWxdXG4gICAgICAgIDogaXNGdW5jdGlvbihvcHRpb25MYWJlbClcbiAgICAgICAgICA/IG9wdGlvbkxhYmVsLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgb3B0aW9uIH0pKVxuICAgICAgICAgIDogbGFiZWxpemUoYCR7b3B0aW9ufWApXG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpIHtcbiAgICBpZiAoc2NoZW1hLnJlbGF0ZSkge1xuICAgICAgLy8gRm9yIGludGVybmFsbHkgcmVsYXRpbmcgZGF0YSAoYHNjaGVtYS5vcHRpb25zLmRhdGFQYXRoYCksIHdlIG5lZWQgdG9cbiAgICAgIC8vIHByb2Nlc3MgYm90aCB0aGUgb3B0aW9ucyAoZm9yICcjcmVmJykgYW5kIHRoZSB2YWx1ZSAoJyNpZCcpLlxuICAgICAgLy8gU2VlIGBEYXRhTWl4aW4uaGFuZGxlRGF0YVNjaGVtYSgpYDpcbiAgICAgIGNvbnN0IHBhdGggPSBzY2hlbWEub3B0aW9ucz8uZGF0YVBhdGhcbiAgICAgIGNvbnN0IHJlbGF0ZWREYXRhUGF0aCA9IHBhdGhcbiAgICAgICAgPyBub3JtYWxpemVEYXRhUGF0aChgJHtkYXRhUGF0aH0vJHtwYXRofWApXG4gICAgICAgIDogbnVsbFxuICAgICAgZ3JhcGguYWRkUmVsYXRpb24oZGF0YVBhdGgsIHJlbGF0ZWREYXRhUGF0aCwgc2NoZW1hKVxuICAgICAgaWYgKHJlbGF0ZWREYXRhUGF0aCkge1xuICAgICAgICBncmFwaC5zZXRTb3VyY2VSZWxhdGVkKHJlbGF0ZWREYXRhUGF0aClcbiAgICAgIH1cbiAgICAgIC8vIENvbnZlcnQgcmVsYXRpbmcgb2JqZWN0cyB0byBhIHNoYWxsb3cgY29weSB3aXRoIG9ubHkgdGhlIGlkIGxlZnQuXG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IHRvIHVzaW5nIGByZWxhdGVCeWA6XG4gICAgICBjb25zdCBwcm9jZXNzUmVsYXRlID0gdmFsdWUgPT4gdmFsdWUgPyB7IGlkOiB2YWx1ZS5pZCB9IDogdmFsdWVcbiAgICAgIC8vIFNlbGVjdGVkIG9wdGlvbnMgY2FuIGJlIGJvdGggb2JqZWN0cyAmIGFycmF5cywgZS5nLiAnY2hlY2tib3hlcyc6XG4gICAgICB2YWx1ZSA9IGlzQXJyYXkodmFsdWUpXG4gICAgICAgID8gdmFsdWUubWFwKHByb2Nlc3NSZWxhdGUpXG4gICAgICAgIDogcHJvY2Vzc1JlbGF0ZSh2YWx1ZSlcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cbiIsIlxudWwuZGl0by1jaGVja2JveGVzKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbilcbiAgbGkodi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiKVxuICAgIGxhYmVsXG4gICAgICBpbnB1dC5kaXRvLWNoZWNrYm94KFxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICApXG4gICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHVsLmRpdG8tY2hlY2tib3hlcyhcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuICApXG4gICAgbGkodi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiKVxuICAgICAgbGFiZWxcbiAgICAgICAgaW5wdXQuZGl0by1jaGVja2JveChcbiAgICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgICApXG4gICAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNoZWNrYm94ZXNcbiAgICBsYWJlbFxuICAgICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzc1xuICAgIC5kaXRvLWNoZWNrYm94XG4gICAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3hlcycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgZGVmYXVsdFZhbHVlOiBbXSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkT3B0aW9uczoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuc2VsZWN0ZWRWYWx1ZSB8fCBbXSkuZmlsdGVyKHZhbHVlID0+IHZhbHVlKVxuICAgICAgfSxcblxuICAgICAgc2V0KG9wdGlvbikge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSAob3B0aW9uIHx8IFtdKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1jb2RlKFxuICByZWY9XCJjb2RlXCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6c3R5bGU9XCJzdHlsZVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jb2RlKFxuICAgIHJlZj1cImNvZGVcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6c3R5bGU9XCJzdHlsZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1jb2RlXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAvLyBGb3IgcHJvcHBlciBzaXppbmcgb2YgY29udGVudCBhbG9uZyB3aXRoIDpzdHlsZT1cInN0eWxlXCIgc2V0dGluZyBhYm92ZSxcbiAgICAvLyBmb3IgcHJvcGVyIGxpbmUtaGVpZ2h0IGNhbGN1bGF0aW9uLlxuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgJi5kaXRvLXdpZHRoLWZpbGxcbiAgICAgIHdpZHRoOiBhdXRvXG4gICAgLmNvZGVmbGFza1xuICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgLy8gSWdub3JlIHRoZXBhcmVudCBwYWRkaW5nIGRlZmluZWQgYWJvdmUgd2hpY2ggaXMgb25seSBuZWVkZWQgdG8gc2V0XG4gICAgICAvLyB0aGUgZGVzaXJlZCBoZWlnaHQgd2l0aCA6c3R5bGU9XCJzdHlsZVwiLlxuICAgICAgdG9wOiAwXG4gICAgICBsZWZ0OiAwXG4gICAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gICAgLmNvZGVmbGFza19fcHJlXG4gICAgICAvLyBVc2Ugc2FtZSBwYWRkaW5nIGFzIC5kaXRvLWNvZGVcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gICAgLmNvZGVmbGFza19fY29kZSxcbiAgICAuY29kZWZsYXNrX19saW5lc1xuICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vXG4gICAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZSlcbiAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodClcbiAgICAuY29kZWZsYXNrX19saW5lc1xuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCBDb2RlRmxhc2sgZnJvbSAnY29kZWZsYXNrJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29kZScsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgM1xuICAgIH0sXG5cbiAgICBzdHlsZSgpIHtcbiAgICAgIHJldHVybiBgaGVpZ2h0OiBjYWxjKCR7dGhpcy5saW5lc31lbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlgXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgZmxhc2sgPSBuZXcgQ29kZUZsYXNrKHRoaXMuJHJlZnMuY29kZSwge1xuICAgICAgbGFuZ3VhZ2U6IHRoaXMuc2NoZW1hLmxhbmd1YWdlIHx8ICdqYXZhc2NyaXB0JyxcbiAgICAgIHRhYlNpemU6IHRoaXMuc2NoZW1hLmluZGVudFNpemUgfHwgMixcbiAgICAgIGxpbmVOdW1iZXJzOiBmYWxzZVxuICAgIH0pXG5cbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICBsZXQgaWdub3JlVXBkYXRlID0gZmFsc2VcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvY3VzZWQgJiYgY2hhbmdlZCkge1xuICAgICAgICBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfVxuXG4gICAgdGhpcy5kb21Pbih0aGlzLiRyZWZzLmNvZGUucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKSwge1xuICAgICAgZm9jdXM6IG9uRm9jdXMsXG4gICAgICBibHVyOiBvbkJsdXJcbiAgICB9KVxuXG4gICAgY29uc3Qgc2V0Q29kZSA9IGNvZGUgPT4ge1xuICAgICAgaWYgKGNvZGUgIT09IGZsYXNrLmNvZGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gdHJ1ZVxuICAgICAgICBmbGFzay51cGRhdGVDb2RlKGNvZGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgICBvbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZmxhc2sub25VcGRhdGUodmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVVwZGF0ZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VmFsdWUodmFsdWUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRDb2RlKHZhbHVlIHx8ICcnKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBzZXRDb2RlKHRoaXMudmFsdWUgfHwgJycpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk/LmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudHJpZ2dlci5kaXRvLWNvbG9yKFxuICB0cmlnZ2VyPVwiY2xpY2tcIlxuICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbilcbiAgLmRpdG8taW5wdXQoXG4gICAgc2xvdD1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gIClcbiAgICBpbnB1dChcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgdHlwZT1cImlucHV0XCJcbiAgICAgIHNpemU9XCI4XCJcbiAgICAgIHYtbW9kZWw9XCJoZXhWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIClcbiAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgIHYtaWY9XCJ2YWx1ZVwiXG4gICAgKVxuICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgc2tldGNoLXBpY2tlci5kaXRvLWNvbG9yLXBpY2tlcihcbiAgICBzbG90PVwicG9wdXBcIlxuICAgIHYtbW9kZWw9XCJjb2xvclZhbHVlXCJcbiAgICA6ZGlzYWJsZS1hbHBoYT1cIiFhbHBoYVwiXG4gICAgOmRpc2FibGUtZmllbGRzPVwiIWlucHV0c1wiXG4gICAgOnByZXNldC1jb2xvcnM9XCJwcmVzZXRzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdHJpZ2dlci5kaXRvLWNvbG9yKFxuICAgIHRyaWdnZXI9XCJjbGlja1wiXG4gICAgOnNob3cuc3luYz1cInNob3dQb3B1cFwiXG4gIClcbiAgICAuZGl0by1pbnB1dChcbiAgICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gICAgKVxuICAgICAgaW5wdXQoXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgIHR5cGU9XCJpbnB1dFwiXG4gICAgICAgIHNpemU9XCI4XCJcbiAgICAgICAgdi1tb2RlbD1cImhleFZhbHVlXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tY29sb3ItcHJldmlldy5kaXRvLWluaGVyaXQtZm9jdXMoXG4gICAgICAgIHYtaWY9XCJ2YWx1ZVwiXG4gICAgICApXG4gICAgICAgIGRpdig6c3R5bGU9XCJ7IGJhY2tncm91bmQ6IGAjJHtoZXhWYWx1ZSB8fCAnMDAwMDAwMDAnfWAgfVwiKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuICAgIHNrZXRjaC1waWNrZXIuZGl0by1jb2xvci1waWNrZXIoXG4gICAgICBzbG90PVwicG9wdXBcIlxuICAgICAgdi1tb2RlbD1cImNvbG9yVmFsdWVcIlxuICAgICAgOmRpc2FibGUtYWxwaGE9XCIhYWxwaGFcIlxuICAgICAgOmRpc2FibGUtZmllbGRzPVwiIWlucHV0c1wiXG4gICAgICA6cHJlc2V0LWNvbG9ycz1cInByZXNldHNcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAkY29sb3Itc3dhdGNoLXdpZHRoOiAkcGF0dGVybi10cmFuc3BhcmVuY3ktc2l6ZVxuICAkY29sb3Itc3dhdGNoLXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAkYm9yZGVyLXdpZHRoXG4gIC5kaXRvLWNvbG9yXG4gICAgLmRpdG8taW5wdXRcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgIGlucHV0XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkY29sb3Itc3dhdGNoLXdpZHRoXG4gICAgLmRpdG8tYnV0dG9uLWNsZWFyXG4gICAgICBtYXJnaW4tcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGhcbiAgICAuZGl0by1jb2xvci1waWNrZXJcbiAgICAgIG1hcmdpbjogJHBvcHVwLW1hcmdpblxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlXG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvd1xuICAgIC5kaXRvLWNvbG9yLXByZXZpZXdcbiAgICAgIGJhY2tncm91bmQ6ICRwYXR0ZXJuLXRyYW5zcGFyZW5jeVxuICAgICAgYm9yZGVyLWxlZnQ6ICRib3JkZXItc3R5bGVcbiAgICAgICYsXG4gICAgICBkaXZcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgIHdpZHRoOiAkY29sb3Itc3dhdGNoLXdpZHRoXG4gICAgICAgIHRvcDogMFxuICAgICAgICByaWdodDogMFxuICAgICAgICBib3R0b206IDBcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRjb2xvci1zd2F0Y2gtcmFkaXVzXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1c1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB0aW55Y29sb3IgZnJvbSAndGlueWNvbG9yMidcbmltcG9ydCB7IFNrZXRjaCBhcyBTa2V0Y2hQaWNrZXIgfSBmcm9tICd2dWUtY29sb3InXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgVHJpZ2dlciB9IGZyb20gJ0BkaXRvanMvdWknXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29sb3InLCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgU2tldGNoUGlja2VyIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1BvcHVwOiBmYWxzZSxcbiAgICAgIGNvbnZlcnRlZEhleFZhbHVlOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29sb3JWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSB8fCB7fVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMuY29sb3JGb3JtYXRcbiAgICAgICAgY29uc3Qga2V5ID0ge1xuICAgICAgICAgIC8vIE5PVEU6IHZ1ZS1jb2xvciBjYWxscyBpdCAnaGV4Jywgd2hpbGUgdGlueWNvbG9yIGNhbGxzIGl0ICdoZXg2J1xuICAgICAgICAgIGhleDogdmFsdWU/LmEgPCAxID8gJ2hleDgnIDogJ2hleCcsXG4gICAgICAgICAgcmdiOiAncmdiYSdcbiAgICAgICAgfVtmb3JtYXRdIHx8IGZvcm1hdFxuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlW2tleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGlueWNvbG9yKHZhbHVlKS50b1N0cmluZyhmb3JtYXQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGhleFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gbnVsbFxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcih0aGlzLnZhbHVlKVxuICAgICAgICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSBjb2xvclxuICAgICAgICAgICAgICAudG9TdHJpbmcoY29sb3IuZ2V0QWxwaGEoKSA8IDEgPyAnaGV4OCcgOiAnaGV4NicpXG4gICAgICAgICAgICAgIC5zbGljZSgxKVxuICAgICAgICAgICAgICAudG9VcHBlckNhc2UoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBgZm9ybWF0YCBjbGFzaGVzIHdpdGggVHlwZU1peGluLmZvcm1hdCgpYCwgd2hpY2ggc2hhbGwgYmUgcmVuYW1lZFxuICAgIC8vIHNvb24gdG8gYGZvcm1hdFZhbHVlKClgLiBSZW5hbWUgYGNvbG9yRm9ybWF0YCBiYWNrIHRvIGBmb3JtYXRgIGFmdGVyLlxuICAgIGNvbG9yRm9ybWF0OiBnZXRTY2hlbWFBY2Nlc3NvcignZm9ybWF0Jywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2hleCdcbiAgICB9KSxcblxuICAgIGFscGhhOiBnZXRTY2hlbWFBY2Nlc3NvcignYWxwaGEnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGlucHV0czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2lucHV0cycsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSksXG5cbiAgICBwcmVzZXRzOiBnZXRTY2hlbWFBY2Nlc3NvcigncHJlc2V0cycsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZGVmYXVsdDogW1xuICAgICAgICAnI2ZmZmZmZicsXG4gICAgICAgICcjYzNjM2MzJyxcbiAgICAgICAgJyM3ZjdmN2YnLFxuICAgICAgICAnIzAwMDAwMCcsXG4gICAgICAgICcjODgwMDE1JyxcbiAgICAgICAgJyNlZDFjMjQnLFxuICAgICAgICAnI2ZmN2YyNycsXG4gICAgICAgICcjZmZmMjAwJyxcblxuICAgICAgICAnIzIyYjE0YycsXG4gICAgICAgICcjMDBhMmU4JyxcbiAgICAgICAgJyMzZjQ4Y2MnLFxuICAgICAgICAnI2EzNDlhNCcsXG4gICAgICAgICcjYjk3YTU3JyxcbiAgICAgICAgJyNmZmFlYzknLFxuICAgICAgICAnI2ZmYzkwZScsXG4gICAgICAgICcjMDAwMDAwMDAnXG4gICAgICBdXG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGZvY3VzZWQoZm9jdXNlZCkge1xuICAgICAgaWYgKCFmb2N1c2VkICYmIHRoaXMuY29udmVydGVkSGV4VmFsdWUpIHtcbiAgICAgICAgY29uc3QgY29sb3IgPSB0aW55Y29sb3IoYCMke3RoaXMuY29udmVydGVkSGV4VmFsdWV9YClcbiAgICAgICAgaWYgKGNvbG9yPy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gY29sb3IudG9TdHJpbmcodGhpcy5jb2xvckZvcm1hdClcbiAgICAgICAgICAvLyBUT0RPOiBFbWl0ICdpbnB1dCcgaGVyZSBpbnN0ZWFkLCBhbmQgJ2NoYW5nZScgaW4gYmx1ciwgbGlrZSBvdGhlcnMuXG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbjwvc2NyaXB0PlxuIiwiXG5jb21wb25lbnQoXG4gIDppcz1cImNvbXBvbmVudFwiXG4gIHYtYmluZD1cIiRwcm9wc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBjb21wb25lbnQoXG4gICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICB2LWJpbmQ9XCIkcHJvcHNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuLy8gVGhpcyBpcyB0aGUgZ2VuZXJhbCBwdXJwb3NlICdjb21wb25lbnQnIHR5cGUsIHdoaWNoIGNhbiByZXNvbHZlIHRvIGFueSBjdXN0b21cbi8vIGNvbXBvbmVudCB0aHJvdWdoIGBzY2hlbWEuY29tcG9uZW50YCwgc2VlIGByZXNvbHZlVHlwZUNvbXBvbmVudCgpYC4gVGhpcyBjYW5cbi8vIGJlIHVzZWQgdG8gbmVzdCBhcmJpdHJhcnkgdnVlIGNvbXBvbmVudHMgaW4gc2NoZW1hOlxuLy8ge1xuLy8gICB0eXBlOiAnY29tcG9uZW50Jyxcbi8vICAgY29tcG9uZW50OiBpbXBvcnQoJy4vY29tcG9uZW50Jylcbi8vIH1cblxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvbXBvbmVudCcsIHtcbiAgLy8gT3ZlcnJpZGUgdGhlIHN0YW5kYXJkIGBkZWZhdWx0VmFsdWU6IG51bGxgIHRvIG5vdCBzZXQgYW55IGRhdGEgZm9yIGN1c3RvbVxuICAvLyBjb21wb25lbnRzLCB1bmxlc3MgdGhleSBwcm92aWRlIGEgZGVmYXVsdCB2YWx1ZS5cbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+ICEoJ2RlZmF1bHQnIGluIHNjaGVtYSlcbn0pXG48L3NjcmlwdD5cbiIsIlxuLy8tIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHRyaWdnZXIgZXZhbHVhdGlvbiBvZiBgdmFsdWVgIHRoYXQgZG9zZSBub3Rcbi8vICBpbnZvbHZlIGFjdHVhbGx5IHJlbmRlcmluZyBpdCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IHZpc2libGUuXG5pbnB1dC5kaXRvLXRleHQuZGl0by1pbnB1dChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOm5hbWU9XCJuYW1lXCJcbiAgdHlwZT1cInRleHRcIlxuICA6dmFsdWU9XCJ2YWx1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOnJlYWRvbmx5PVwidHJ1ZVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAvLy0gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gdHJpZ2dlciBldmFsdWF0aW9uIG9mIGB2YWx1ZWAgdGhhdCBkb3NlIG5vdFxuICAvLyAgaW52b2x2ZSBhY3R1YWxseSByZW5kZXJpbmcgaXQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCB2aXNpYmxlLlxuICBpbnB1dC5kaXRvLXRleHQuZGl0by1pbnB1dChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOm5hbWU9XCJuYW1lXCJcbiAgICB0eXBlPVwidGV4dFwiXG4gICAgOnZhbHVlPVwidmFsdWVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6cmVhZG9ubHk9XCJ0cnVlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4uL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgRGF0YU1peGluIGZyb20gJy4uL21peGlucy9EYXRhTWl4aW4uanMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnY29tcHV0ZWQnLCAnZGF0YScsICdoaWRkZW4nXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZGVmYXVsdFZpc2libGU6IGZhbHNlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHRoaXNcbiAgICAgICAgaWYgKHNjaGVtYS5kYXRhIHx8IHNjaGVtYS5kYXRhUGF0aCkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5oYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgJ3NjaGVtYScsIHtcbiAgICAgICAgICAgIC8vIE1vZGlmeWluZyBgdGhpcy5kYXRhYCBiZWxvdyB0cmlnZ2VycyBhbm90aGVyIGNhbGwgb2YgdGhlIGB2YWx1ZWBcbiAgICAgICAgICAgIC8vIGdldHRlciwgc28gdXNlIGEgdmFsdWUgb2YgMiBmb3IgYHJlc29sdmVDb3VudGVyYCB0byByZXR1cm4gdGhlXG4gICAgICAgICAgICAvLyByZXNvbHZlZCBkYXRhIHR3aWNlLlxuICAgICAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDJcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMuJHNldCh0aGlzLmRhdGEsIHRoaXMubmFtZSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFR5cGVNaXhpbi5jb21wdXRlZC52YWx1ZS5nZXQuY2FsbCh0aGlzKVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIFR5cGVNaXhpbi5jb21wdXRlZC52YWx1ZS5zZXQuY2FsbCh0aGlzLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tZGF0ZVxuICBjb21wb25lbnQoXG4gICAgOmlzPVwiZ2V0Q29tcG9uZW50KHR5cGUpXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmxvY2FsZT1cImxvY2FsZVwiXG4gICAgOmRhdGVGb3JtYXQ9XCJ7IC4uLmFwaS5mb3JtYXRzLmRhdGUsIC4uLmRhdGVGb3JtYXQgfVwiXG4gICAgdi1tb2RlbD1cImRhdGVWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWRhdGVcbiAgICBjb21wb25lbnQoXG4gICAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICAgIDpkYXRlRm9ybWF0PVwieyAuLi5hcGkuZm9ybWF0cy5kYXRlLCAuLi5kYXRlRm9ybWF0IH1cIlxuICAgICAgdi1tb2RlbD1cImRhdGVWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIsIERhdGVUaW1lUGlja2VyIH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCB7IGlzRGF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnZGF0ZScsICdkYXRldGltZScsICd0aW1lJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGNvbXBvbmVudHM6IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSxcbiAgLy8gVE9ETzogVGhpcyBpcyBvbmx5IGhlcmUgc28gd2UgZ2V0IHBsYWNlaG9sZGVyIGFkZGVkLiBDb21lIHVwIHdpdGggYSBiZXR0ZXJcbiAgLy8gd2F5IHRvIHN1cHBvcnQgYXR0cmlidXRlcyBwZXIgY29tcG9uZW50IChhIGxpc3Qgb2YgYWN0dWFsbHkgc3VwcG9ydGVkXG4gIC8vIGF0dHJpYnV0ZXMpXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBkYXRlVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkYXRlRm9ybWF0OiBnZXRTY2hlbWFBY2Nlc3NvcignZGF0ZUZvcm1hdCcsIHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb21wb25lbnQodHlwZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0ZTogJ2RhdGUtcGlja2VyJyxcbiAgICAgICAgdGltZTogJ3RpbWUtcGlja2VyJyxcbiAgICAgICAgZGF0ZXRpbWU6ICdkYXRlLXRpbWUtcGlja2VyJ1xuICAgICAgfVt0eXBlXVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgIHJldHVybiBpc0RhdGUodmFsdWUpID8gdmFsdWUudG9JU09TdHJpbmcoKSA6IHZhbHVlXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IsIGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQge1xuICBwcm9jZXNzUm91dGVTY2hlbWEsIHByb2Nlc3NGb3JtcywgZ2V0TmFtZWRTY2hlbWFzLCBnZXRCdXR0b25TY2hlbWFzLFxuICBoYXNGb3JtU2NoZW1hLCBnZXRGb3JtU2NoZW1hcywgZ2V0Vmlld1NjaGVtYSxcbiAgaGFzTGFiZWxzLCBpc0NvbXBhY3QsIGlzSW5saW5lZCxcbiAgaXNPYmplY3RTb3VyY2UsIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNTdHJpbmcsIGlzQXJyYXksIGlzTnVtYmVyLCBlcXVhbHMsXG4gIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1Jlc291cmNlTWl4aW4sIFNjaGVtYVBhcmVudE1peGluXSxcblxuICBkZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gICAgcmV0dXJuIGlzTGlzdFNvdXJjZShzY2hlbWEpID8gW10gOiBudWxsXG4gIH0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cmFwcGVkUHJpbWl0aXZlczogbnVsbCxcbiAgICAgIHVud3JhcHBpbmdQcmltaXRpdmVzOiBmYWxzZSxcbiAgICAgIGlnbm9yZVJvdXRlQ2hhbmdlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGlzT2JqZWN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgaXNMaXN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzTGlzdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZhbHVlXG4gICAgfSxcblxuICAgIGlzUmVhZHkoKSB7XG4gICAgICAvLyBMaXN0cyB0aGF0IGhhdmUgbm8gZGF0YSBhbmQgbm8gYXNzb2NpYXRlZCByZXNvdXJjZSBzaG91bGQgc3RpbGwgcmVuZGVyLFxuICAgICAgLy8gYXMgdGhleSBtYXkgYmUgZ2V0dGluZyB0aGVpciBkYXRhIGVsc2V3aGVyZSwgZS5nLiBgY29tcHV0ZSgpYC5cbiAgICAgIHJldHVybiB0aGlzLmhhc0RhdGEgfHwgIXRoaXMucHJvdmlkZXNEYXRhXG4gICAgfSxcblxuICAgIGlzSW5WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3Q29tcG9uZW50XG4gICAgfSxcblxuICAgIHdyYXBQcmltaXRpdmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLndyYXBQcmltaXRpdmVzXG4gICAgfSxcblxuICAgIGxpc3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy52YWx1ZVxuICAgICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICAgIC8vIENvbnZlcnQgdG8gbGlzdCBhcnJheS5cbiAgICAgICAgICBkYXRhID0gZGF0YSAhPSBudWxsID8gW2RhdGFdIDogW11cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIGdldHMgaW5oZXJpdGVkIGZyb20gcGFyZW50LCB1bndyYXBwaW5nIGlzIG5vdCBoYXBwZW5pbmdcbiAgICAgICAgICAvLyBhdCB0aGUgcm9vdCBpbiBgc2V0RGF0YSgpYCwgYnV0IGhlcmUgaW5zdGVhZC5cbiAgICAgICAgICBkYXRhID0gdGhpcy51bndyYXBMaXN0RGF0YShkYXRhKSB8fCBkYXRhXG4gICAgICAgIH1cbiAgICAgICAgZGF0YSA9IGRhdGEgfHwgW11cbiAgICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcyB9ID0gdGhpc1xuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICBpZiAodGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcykge1xuICAgICAgICAgICAgLy8gV2UncmUgZG9uZSB1bndyYXBwaW5nIG9uY2UgYGxpc3REYXRhYCBpcyByZWV2YWx1YXRlZCwgc28gc2V0XG4gICAgICAgICAgICAvLyB0aGlzIHRvIGBmYWxzZWAgYWdhaW4uIFNlZSBgd3JhcHBlZFByaW1pdGl2ZXNgIHdhdGNoZXIgYWJvdmUuXG4gICAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ29udmVydCBkYXRhIHRvIGEgbGlzdCBvZiB3cmFwcGVkIHByaW1pdGl2ZXMsIGFuZCByZXR1cm4gaXQuXG4gICAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YS5tYXAodmFsdWUgPT4gKHtcbiAgICAgICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogdmFsdWVcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVkUHJpbWl0aXZlc1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICBpZiAodGhpcy53cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNPYmplY3RTb3VyY2VcbiAgICAgICAgICAgID8gKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwID8gZGF0YVswXSA6IG51bGwpXG4gICAgICAgICAgICA6IGRhdGFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvYmplY3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIEFsd2F5cyBnbyB0aHJvdWdoIGBsaXN0RGF0YWAgaW50ZXJuYWxseSwgd2hpY2ggZG9lcyBhbGwgdGhlXG4gICAgICAgIC8vIHByb2Nlc3Npbmcgb2YgYHdyYXBQcmltaXRpdmVzYCwgZXRjLlxuICAgICAgICByZXR1cm4gdGhpcy5saXN0RGF0YVswXSB8fCBudWxsXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICB0aGlzLmxpc3REYXRhID0gZGF0YSA/IFtkYXRhXSA6IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNvdXJjZVNjaGVtYSgpIHtcbiAgICAgIC8vIFRoZSBzb3VyY2VTY2hlbWEgb2YgYSBsaXN0IGlzIHRoZSBsaXN0J3Mgc2NoZW1hIGl0c2VsZi5cbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgLy8gVGhpcyBpcyB1c2VkIGluIFR5cGVMaXN0IGZvciBEaXRvRm9ybUNob29zZXIuXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgodGhpcy5zY2hlbWEucGF0aClcbiAgICB9LFxuXG4gICAgZGVmYXVsdFF1ZXJ5KCkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0T3JkZXI6IG9yZGVyIH0gPSB0aGlzXG4gICAgICByZXR1cm4gb3JkZXIgPyB7IG9yZGVyIH0gOiB7fVxuICAgIH0sXG5cbiAgICBxdWVyeTogZ2V0U3RvcmVBY2Nlc3NvcigncXVlcnknLCB7XG4gICAgICBnZXQocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmRlZmF1bHRRdWVyeSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBzZXQocXVlcnkpIHtcbiAgICAgICAgLy8gQWx3YXlzIGtlZXAgdGhlIGRpc3BsYXllZCBxdWVyeSBwYXJhbWV0ZXJzIGluIHN5bmMgd2l0aCB0aGUgc3RvcmVkXG4gICAgICAgIC8vIG9uZXMuIFVzZSBzY29wZSBhbmQgcGFnZSBmcm9tIHRoZSBsaXN0IHNjaGVtYSBhcyBkZWZhdWx0cywgYnV0IGFsbG93XG4gICAgICAgIC8vIHRoZSByb3V0ZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIG92ZXJyaWRlIHRoZW0uXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBzY29wZSA9IHRoaXMuZGVmYXVsdFNjb3BlPy5uYW1lLFxuICAgICAgICAgIHBhZ2UgPSB0aGlzLnNjaGVtYS5wYWdlXG4gICAgICAgIH0gPSB0aGlzLnF1ZXJ5XG4gICAgICAgIC8vIFByZXNlcnZlIC8gbWVyZ2UgY3VycmVudGx5IHN0b3JlZCB2YWx1ZXMuXG4gICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgLi4uKHNjb3BlICE9IG51bGwgJiYgeyBzY29wZSB9KSxcbiAgICAgICAgICAuLi4ocGFnZSAhPSBudWxsICYmIHsgcGFnZSB9KSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICAgIGlmICghZXF1YWxzKHF1ZXJ5LCB0aGlzLiRyb3V0ZS5xdWVyeSkpIHtcbiAgICAgICAgICAvLyBUZWxsIHRoZSBgJHJvdXRlYCB3YXRjaGVyIHRvIGlnbm9yZSB0aGUgY2hhbmdlZCB0cmlnZ2VyZWQgaGVyZTpcbiAgICAgICAgICB0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgcXVlcnksIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2ggfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVlcnkgLy8gTGV0IGdldFN0b3JlQWNjZXNzb3IoKSBkbyB0aGUgYWN0dWFsIHNldHRpbmdcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHRvdGFsOiBnZXRTdG9yZUFjY2Vzc29yKCd0b3RhbCcpLFxuXG4gICAgY29sdW1ucygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuY29sdW1ucylcbiAgICB9LFxuXG4gICAgc2NvcGVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5zY29wZXMpXG4gICAgfSxcblxuICAgIGRlZmF1bHRTY29wZSgpIHtcbiAgICAgIGlmICh0aGlzLnNjb3Blcykge1xuICAgICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICAgIGZvciAoY29uc3Qgc2NvcGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnNjb3BlcykpIHtcbiAgICAgICAgICBpZiAoc2NvcGUuZGVmYXVsdFNjb3BlKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NvcGVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgZmlyc3QgPSBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVmYXVsdE9yZGVyKCkge1xuICAgICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuY29sdW1ucykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRTb3J0IH0gPSBjb2x1bW5cbiAgICAgICAgICBpZiAoZGVmYXVsdFNvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGlzU3RyaW5nKGRlZmF1bHRTb3J0KSA/IGRlZmF1bHRTb3J0IDogJ2FzYydcbiAgICAgICAgICAgIHJldHVybiBgJHtjb2x1bW4ubmFtZX0gJHtkaXJlY3Rpb259YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZ2V0Rm9ybVNjaGVtYXModGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dCkpXG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGxpbmtlZCB2aWV3IHNjaGVtYSBpZiB0aGlzIHNvdXJjZSBlZGl0cyBpdCBpdHMgaXRlbXMgdGhyb3VnaFxuICAgIC8vIGEgbGlua2VkIHZpZXcuXG4gICAgdmlldygpIHtcbiAgICAgIHJldHVybiBnZXRWaWV3U2NoZW1hKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGxpbmtzVG9WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3Jtcy5zb21lKGhhc0xhYmVscylcbiAgICB9LFxuXG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybXMuZXZlcnkoaXNDb21wYWN0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BhZ2luYXRlJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICByZW5kZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdyZW5kZXInLCB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgICAgID8gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAhdGhpcy52YWx1ZVxuICAgICAgICAgICAgOiB0cnVlXG4gICAgICAgICAgOiBmYWxzZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgIXRoaXMuaXNJbmxpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlICYmIHRoaXMubGlzdERhdGEubGVuZ3RoID4gMSAmJiBkcmFnZ2FibGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbCwgLy8gc28gdGhhdCBgPz9gIGJlbG93IGNhbiBkbyBpdHMgdGhpbmc6XG4gICAgICBnZXQoY29sbGFwc2libGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbmxpbmVkICYmICEhKGNvbGxhcHNpYmxlID8/IHRoaXMuY29sbGFwc2VkICE9PSBudWxsKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2VkOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2VkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodGhpcy5pZ25vcmVSb3V0ZUNoYW5nZSkge1xuICAgICAgICB0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoZnJvbS5wYXRoID09PSB0by5wYXRoICYmIGZyb20uaGFzaCA9PT0gdG8uaGFzaCkge1xuICAgICAgICAvLyBQYXRocyBhbmQgaGFzaGVzIHJlbWFpbiB0aGUgc2FtZSwgc28gb25seSBxdWVyaWVzIGhhdmUgY2hhbmdlZC5cbiAgICAgICAgLy8gVXBkYXRlIGZpbHRlciBhbmQgcmVsb2FkIGRhdGEgd2l0aG91dCBjbGVhcmluZy5cbiAgICAgICAgdGhpcy5xdWVyeSA9IHRvLnF1ZXJ5XG4gICAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHdyYXBwZWRQcmltaXRpdmVzOiB7XG4gICAgICBkZWVwOiB0cnVlLFxuICAgICAgaGFuZGxlcihuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcyB9ID0gdGhpc1xuICAgICAgICAvLyBTa2lwIHRoZSBpbml0aWFsIHNldHRpbmcgb2Ygd3JhcHBlZFByaW1pdGl2ZXMgYXJyYXlcbiAgICAgICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIG9sZFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2hlbmV2ZXIgdGhlIHdyYXBwZWRQcmltaXRpdmVzIGNoYW5nZSwgbWFwIHRoZWlyIHZhbHVlcyBiYWNrIHRvXG4gICAgICAgICAgLy8gdGhlIGFycmF5IG9mIHByaW1pdGl2ZXMsIGluIGEgcHJpbWl0aXZlIHdheSA6KVxuICAgICAgICAgIC8vIEJ1dCBzZXQgYHVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZWAsIHNvIHRoZSBgbGlzdERhdGFgIGNvbXB1dGVkXG4gICAgICAgICAgLy8gcHJvcGVydHkga25vd3MgYWJvdXQgaXQsIHdoaWNoIHNldHMgaXQgdG8gYGZhbHNlYCBhZ2Fpbi5cbiAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZVxuICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZS5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIHRoaXMucXVlcnkgPSB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnRvdGFsID0gMFxuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBXaGVuIG5ldyBkYXRhIGlzIGxvYWRlZCwgd2UgY2FuIHN0b3JlIGl0IHJpZ2h0IGJhY2sgaW4gdGhlIGRhdGEgb2YgdGhlXG4gICAgICAvLyB2aWV3IG9yIGZvcm0gdGhhdCBjcmVhdGVkIHRoaXMgbGlzdCBjb21wb25lbnQuXG4gICAgICAvLyBTdXBwb3J0IHR3byBmb3JtYXRzIGZvciBsaXN0IGRhdGE6XG4gICAgICAvLyAtIEFycmF5OiBgWy4uLl1gXG4gICAgICAvLyAtIE9iamVjdDogYHsgcmVzdWx0czogWy4uLl0sIHRvdGFsIH1gLCBzZWUgYHVud3JhcExpc3REYXRhKClgXG4gICAgICBpZiAoXG4gICAgICAgICFkYXRhIHx8XG4gICAgICAgIHRoaXMuaXNMaXN0U291cmNlICYmIGlzQXJyYXkoZGF0YSkgfHxcbiAgICAgICAgdGhpcy5pc09iamVjdFNvdXJjZSAmJiBpc09iamVjdChkYXRhKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkpIHtcbiAgICAgICAgLy8gVGhlIGZvcm1hdCBkaWRuJ3QgbWF0Y2gsIHNlZSBpZiB3ZSByZWNlaXZlZCBhIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIG9iamVjdCwgaW4gd2hpY2ggY2FzZSBgdGhpcy52YWx1ZWAgd2FzIGFscmVhZHkgc2V0IGJ5XG4gICAgICAgIC8vIGB1bndyYXBMaXN0RGF0YSgpYCBhbmQgd2UncmUgZG9uZSBub3cuXG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRhdGEpICYmIHRoaXMuaXNJblZpZXcpIHtcbiAgICAgICAgLy8gVGhlIGNvbnRyb2xsZXIgaXMgc2VuZGluZyBkYXRhIGZvciBhIGZ1bGwgbXVsdGktY29tcG9uZW50IHZpZXcsXG4gICAgICAgIC8vIGluY2x1ZGluZyB0aGUgbmVzdGVkIGxpc3QgZGF0YS5cbiAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldERhdGEoZGF0YSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdW53cmFwTGlzdERhdGEoZGF0YSkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJlxuICAgICAgICBpc09iamVjdChkYXRhKSAmJlxuICAgICAgICBpc051bWJlcihkYXRhLnRvdGFsKSAmJlxuICAgICAgICBpc0FycmF5KGRhdGEucmVzdWx0cylcbiAgICAgICkge1xuICAgICAgICAvLyBJZiBAZGl0b2pzL3NlcnZlciBzZW5kcyBkYXRhIGluIHRoZSBmb3JtIG9mIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIHJlcGxhY2UgdGhlIHZhbHVlIHdpdGggcmVzdWx0LCBidXQgcmVtZW1iZXIgdGhlIHRvdGFsIGluIHRoZSBzdG9yZS5cbiAgICAgICAgdGhpcy50b3RhbCA9IGRhdGEudG90YWxcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGEucmVzdWx0c1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKHNjaGVtYSwgdHlwZSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpXG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBpdGVtXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxpc3REYXRhLnB1c2goaXRlbSlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMub3BlblNjaGVtYUNvbXBvbmVudCgtMSkpXG4gICAgICB9XG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIHJldHVybiBpdGVtXG4gICAgfSxcblxuICAgIHJlbW92ZUl0ZW0oaXRlbSkge1xuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gbnVsbFxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgICAgY29uc3QgaW5kZXggPSBsaXN0RGF0YSAmJiBsaXN0RGF0YS5pbmRleE9mKGl0ZW0pXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgbGlzdERhdGEuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IGxhYmVsID0gaXRlbSAmJiB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNjaGVtYSwgaXRlbSwge1xuICAgICAgICBpbmRleCxcbiAgICAgICAgZXh0ZW5kZWQ6IHRydWVcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IG5vdGlmeSA9ICgpID0+IHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogdGhpcy5pc1RyYW5zaWVudCA/ICdpbmZvJyA6ICdzdWNjZXNzJyxcbiAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgIHRleHQ6IFtcbiAgICAgICAgICBgJHtsYWJlbH0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gLFxuICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICBdXG4gICAgICB9KVxuXG4gICAgICBpZiAoaXRlbSAmJiB3aW5kb3cuY29uZmlybShcbiAgICAgICAgYERvIHlvdSByZWFsbHkgd2FudCB0byAke3RoaXMudmVyYnMuZGVsZXRlfSAke2xhYmVsfT9gKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0pXG4gICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpdGVtSWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSlcbiAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IGdldE1lbWJlclJlc291cmNlKGl0ZW1JZCwgdGhpcy5yZXNvdXJjZSlcbiAgICAgICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2RlbGV0ZScsIHJlc291cmNlIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0pXG4gICAgICAgICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnJlbG9hZERhdGEoKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBzY2hlbWFDb21wb25lbnRzXG4gICAgICByZXR1cm4gc2NoZW1hQ29tcG9uZW50c1soKGluZGV4ICUgbGVuZ3RoKSArIGxlbmd0aCkgJSBsZW5ndGhdXG4gICAgfSxcblxuICAgIG9wZW5TY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KVxuICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBuYXZpZ2F0ZVRvQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGRhdGFQYXRoLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgICA/IHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgICA/IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGguc2xpY2UodGhpcy5kYXRhUGF0aC5sZW5ndGggKyAxKSlbMF0gPz8gbnVsbFxuICAgICAgICAgICAgOiAwXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChpbmRleCAhPT0gbnVsbCAmJiBpc051bWJlcigraW5kZXgpKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoK2luZGV4KVxuICAgICAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb3BlbmVkIH0gPSBzY2hlbWFDb21wb25lbnRcbiAgICAgICAgICAgIGlmICghb3BlbmVkKSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50cy5sZW5ndGggPiAwICYmIChvbkNvbXBsZXRlPy4oY29tcG9uZW50cykgPz8gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSBvcGVuZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSlcbiAgICB9LFxuXG4gICAgbmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsT25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQsIHdoaWNoIHdpbGwgYmUgdGhlIGNvbXBvbmVudCB0aGF0XG4gICAgICAgICAgLy8gd2UganVzdCBuYXZpZ2F0ZWQgdG8sIGFuZCBwYXNzIGl0IG9uIHRvIGBvbkNvbXBsZXRlKClgXG4gICAgICAgICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgICAgICBjb25zdCByb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50c1tyb3V0ZUNvbXBvbmVudHMubGVuZ3RoIC0gMV1cbiAgICAgICAgICByZXNvbHZlKG9uQ29tcGxldGU/Lihbcm91dGVDb21wb25lbnRdKSA/PyB0cnVlKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIHJvdXRlIHRoYXQgY2FuIHNlcnZlIHBhcnQgb2YgdGhlIGdpdmVuIGRhdGFQYXRoLFxuICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMucm91dGVDb21wb25lbnQuZ2V0Q2hpbGRQYXRoKFxuICAgICAgICAgICAgdGhpcy5hcGkubm9ybWFsaXplUGF0aChub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aFBhcnRzKSlcbiAgICAgICAgICApXG4gICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGFjdHVhbGx5IGlzIGEgcm91dGUgZm9yIHRoaXMgc3ViLWNvbXBvbmVudDpcbiAgICAgICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlci5tYXRjaChwYXRoKVxuICAgICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuJHJvdXRlLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgdGhlcmUsIHNvIGp1c3QgY2FsbCBgb25Db21wbGV0ZSgpYDpcbiAgICAgICAgICAgICAgY2FsbE9uQ29tcGxldGUoKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBjb21wb25lbnQncyBwYXRoLCB0aGVuIGNhbGwgYG9uQ29tcGxldGUoKWBfOlxuICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaChcbiAgICAgICAgICAgICAgICB7IHBhdGggfSxcbiAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQgdG8gYmUgbW91bnRlZCBpbiB0aGUgbmV4dFxuICAgICAgICAgICAgICAgIC8vIHRpY2sgYmVmb3JlIGNhbGxpbmcgYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljayhjYWxsT25Db21wbGV0ZSlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICB9KVxuICAgIH1cbiAgfSwgLy8gZW5kIG9mIGBtZXRob2RzYFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUpXG4gICAgY29uc3QgaW5saW5lZCA9IGlzSW5saW5lZChzY2hlbWEpXG4gICAgaWYgKGlubGluZWQgJiYgc2NoZW1hLnJlc291cmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdMaXN0cyB3aXRoIG5lc3RlZCBmb3JtcyBjYW5ub3QgbG9hZCBkYXRhIGZyb20gdGhlaXIgb3duIHJlc291cmNlcydcbiAgICAgIClcbiAgICB9XG4gICAgLy8gVXNlIGRpZmZlcmVudGx5IG5hbWVkIHVybCBwYXJhbWV0ZXJzIG9uIGVhY2ggbmVzdGVkIGxldmVsIGZvciBpZCBhc1xuICAgIC8vIG90aGVyd2lzZSB0aGV5IHdvdWxkIGNsYXNoIGFuZCBvdmVycmlkZSBlYWNoIG90aGVyIGluc2lkZSAkcm91dGUucGFyYW1zXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgIGNvbnN0IHBhcmFtID0gYGlkJHtsZXZlbCArIDF9YFxuICAgIGNvbnN0IG1ldGEgPSB7XG4gICAgICBhcGksXG4gICAgICBzY2hlbWFcbiAgICB9XG4gICAgY29uc3QgZm9ybU1ldGEgPSB7XG4gICAgICAuLi5tZXRhLFxuICAgICAgLy8gV2hlbiBjaGlsZHJlbiBhcmUgZmxhdHRlbmVkIChlLmcuIHRyZWUtbGlzdHMpLCBpbmNsdWRlIHRoZSBgZmxhdHRlbmBcbiAgICAgIC8vIHNldHRpbmcgYWxzbywgZm9yIGZsYXR0ZW5pbmcgYmVsb3cuXG4gICAgICBmbGF0dGVuLFxuICAgICAgbmVzdGVkLFxuICAgICAgcGFyYW1cbiAgICB9XG4gICAgY29uc3QgY2hpbGRSb3V0ZXMgPSBhd2FpdCBwcm9jZXNzRm9ybXMoYXBpLCBzY2hlbWEsIGxldmVsKVxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICBhd2FpdCBwcm9jZXNzKGNoaWxkUm91dGVzLCBsZXZlbCArIDEpXG4gICAgfVxuICAgIC8vIElubGluZWQgZm9ybXMgZG9uJ3QgbmVlZCB0byBhY3R1YWxseSBhZGQgcm91dGVzLlxuICAgIGlmIChoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgIWlubGluZWQpIHtcbiAgICAgIGNvbnN0IGdldFBhdGhXaXRoUGFyYW0gPSAocGF0aCwgcGFyYW0pID0+IHBhcmFtXG4gICAgICAgID8gcGF0aFxuICAgICAgICAgID8gYCR7cGF0aH0vOiR7cGFyYW19YFxuICAgICAgICAgIDogYDoke3BhcmFtfWBcbiAgICAgICAgOiBwYXRoXG5cbiAgICAgIC8vIExpc3RzIGluIHNpbmdsZS1jb21wb25lbnQtdmlld3MgKGxldmVsID09PSAwKSB1c2UgdGhlaXIgdmlldydzIHBhdGgsXG4gICAgICAvLyB3aGlsZSBhbGwgb3RoZXJzIG5lZWQgdGhlaXIgcGF0aCBwcmVmaXhlZCB3aXRoIHRoZSBwYXJlbnQncyBwYXRoOlxuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGxldmVsID09PSAwID8gJycgOiBzY2hlbWEucGF0aFxuICAgICAgY29uc3QgZm9ybVJvdXRlID0ge1xuICAgICAgICAvLyBPYmplY3Qgc291cmNlcyBkb24ndCBuZWVkIGlkIHBhcmFtcyBpbiB0aGVpciBmb3JtIHBhdGhzLCBhcyB0aGV5XG4gICAgICAgIC8vIGRpcmVjdGx5IGVkaXQgb25lIG9iamVjdC5cbiAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShzb3VyY2VQYXRoLCBpc0xpc3RTb3VyY2Uoc2NoZW1hKSAmJiBwYXJhbSksXG4gICAgICAgIGNvbXBvbmVudDogRGl0b0NvbXBvbmVudC5jb21wb25lbnQoXG4gICAgICAgICAgbmVzdGVkID8gJ2RpdG8tZm9ybS1uZXN0ZWQnIDogJ2RpdG8tZm9ybSdcbiAgICAgICAgKSxcbiAgICAgICAgbWV0YTogZm9ybU1ldGFcbiAgICAgIH1cbiAgICAgIGlmIChpc09iamVjdFNvdXJjZShzY2hlbWEpKSB7XG4gICAgICAgIC8vIEFsc28gYWRkIGEgcGFyYW0gcm91dGUsIHNpbXBseSB0byBoYW5kbGUgJy9jcmVhdGUnIGxpbmtzIHRoZSBzYW1lXG4gICAgICAgIC8vIHdheSB0aGF0IGxpc3RzIGRvLCB3aGVyZSBpdCBvdmVybGFwcyB3aXRoIDppZCBmb3IgaXRlbSBpZHMuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICAuLi5mb3JtUm91dGUsXG4gICAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShzb3VyY2VQYXRoLCBwYXJhbSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzb3VyY2VQYXRoKSB7XG4gICAgICAgIC8vIEp1c3QgcmVkaXJlY3QgYmFjayB0byB0aGUgcGFyZW50IHdoZW4gYSBuZXN0ZWQgc291cmNlIHJvdXRlIGlzIGhpdC5cbiAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgIHBhdGg6IHNvdXJjZVBhdGgsXG4gICAgICAgICAgcmVkaXJlY3Q6ICcuJyxcbiAgICAgICAgICBtZXRhXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICAvLyBQYXJ0aXRpb24gY2hpbGRSb3V0ZXMgaW50byB0aG9zZSB0aGF0IG5lZWQgZmxhdHRlbmluZyAoZS5nLiB0cmVlLWxpc3RzKVxuICAgICAgLy8gYW5kIHRob3NlIHRoYXQgZG9uJ3QsIGFuZCBwcm9jZXNzIGVhY2ggZ3JvdXAgc2VwYXJhdGVseSBhZnRlci5cbiAgICAgIGNvbnN0IFtmbGF0Um91dGVzLCBzdWJSb3V0ZXNdID0gY2hpbGRSb3V0ZXMucmVkdWNlKFxuICAgICAgICAocmVzLCByb3V0ZSkgPT4ge1xuICAgICAgICAgIHJlc1tyb3V0ZS5tZXRhLmZsYXR0ZW4gPyAwIDogMV0ucHVzaChyb3V0ZSlcbiAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgIH0sXG4gICAgICAgIFtbXSwgW11dXG4gICAgICApXG4gICAgICBpZiAoc3ViUm91dGVzLmxlbmd0aCkge1xuICAgICAgICBmb3JtUm91dGUuY2hpbGRyZW4gPSBzdWJSb3V0ZXNcbiAgICAgIH1cbiAgICAgIHJvdXRlcy5wdXNoKGZvcm1Sb3V0ZSlcbiAgICAgIC8vIEFkZCB0aGUgcHJlZml4ZWQgZm9ybVJvdXRlcyB3aXRoIHRoZWlyIGNoaWxkcmVuIGZvciBuZXN0ZWQgbGlzdHMuXG4gICAgICBpZiAoZmxhdFJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZFJvdXRlIG9mIGZsYXRSb3V0ZXMpIHtcbiAgICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgICAuLi4oY2hpbGRSb3V0ZS5yZWRpcmVjdCA/IGNoaWxkUm91dGUgOiBmb3JtUm91dGUpLFxuICAgICAgICAgICAgcGF0aDogYCR7Zm9ybVJvdXRlLnBhdGh9LyR7Y2hpbGRSb3V0ZS5wYXRofWAsXG4gICAgICAgICAgICBtZXRhOiB7XG4gICAgICAgICAgICAgIC4uLmNoaWxkUm91dGUubWV0YSxcbiAgICAgICAgICAgICAgZmxhdHRlblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGdyYXBoLmFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJDb21wb25lbnRzID0ge1xuICB0ZXh0KGZpbHRlcikge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnY29udGFpbnMnLFxuICAgICAgICB2YWx1ZTogJ2NvbnRhaW5zJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlcXVhbHMnLFxuICAgICAgICB2YWx1ZTogJ2VxdWFscydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnc3RhcnRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ3N0YXJ0cy13aXRoJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlbmRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ2VuZHMtd2l0aCdcbiAgICAgIH1cbiAgICBdXG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3JzXG4gICAgICAgID8ge1xuICAgICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgIG9wdGlvbnM6XG4gICAgICAgICAgICBpc0FycmF5KGZpbHRlci5vcGVyYXRvcnMpXG4gICAgICAgICAgICAgID8gb3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgb3B0aW9uID0+IGZpbHRlci5vcGVyYXRvcnMuaW5jbHVkZXMob3B0aW9uLnZhbHVlKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogb3B0aW9ucyxcbiAgICAgICAgICB3aWR0aDogJzQwJSdcbiAgICAgICAgfVxuICAgICAgICA6IG51bGwsXG4gICAgICB0ZXh0OiB7XG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgd2lkdGg6IGZpbHRlci5vcGVyYXRvcnMgPyAnNjAlJyA6ICdmaWxsJ1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAnZGF0ZS1yYW5nZScoKSB7XG4gICAgLy8gVXNlIHNob3J0ZXIgZGF0ZSBmb3JtYXQgaW4gZGF0ZS1yYW5nZSBmaWx0ZXJzOlxuICAgIGNvbnN0IGRhdGVGb3JtYXQgPSB7XG4gICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXG4gICAgICB5ZWFyOiAnbnVtZXJpYydcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGZyb206IHtcbiAgICAgICAgdHlwZTogJ2RhdGV0aW1lJyxcbiAgICAgICAgd2lkdGg6ICc1MCUnLFxuICAgICAgICBkYXRlRm9ybWF0XG4gICAgICB9LFxuICAgICAgdG86IHtcbiAgICAgICAgdHlwZTogJ2RhdGV0aW1lJyxcbiAgICAgICAgd2lkdGg6ICc1MCUnLFxuICAgICAgICBkYXRlRm9ybWF0XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJzUGFuZWwoZmlsdGVycywgZGF0YVBhdGgsIHByb3h5KSB7XG4gIGNvbnN0IHBhbmVsID0ge1xuICAgIGxhYmVsOiAnRmlsdGVycycsXG4gICAgbmFtZTogJyRmaWx0ZXJzJyxcbiAgICB0YXJnZXQ6IGRhdGFQYXRoLFxuICAgIC8vIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIC8vIE5PVEU6IE9uIHBhbmVscywgdGhlIGRhdGEoKSBjYWxsYmFjayBkb2VzIHNvbWV0aGluZyBlbHNlIHRoYW4gb24gbm9ybWFsXG4gICAgLy8gc2NoZW1hOiBJdCBwcm9kdWNlcyB0aGUgYGRhdGFgIHByb3BlcnR5IHRvIGJlIHBhc3NlZCB0byB0aGUgcGFuZWwnc1xuICAgIC8vIHNjaGVtYSwgbm90IHRoZSBkYXRhIHRvIGJlIHVzZWQgZm9yIHRoZSBwYW5lbCBjb21wb25lbnQgZGlyZWN0bHkuXG4gICAgZGF0YSgpIHtcbiAgICAgIHJldHVybiBwYXJzZUZpbHRlcnNEYXRhKFxuICAgICAgICBwYW5lbCxcbiAgICAgICAgcHJveHkucXVlcnlcbiAgICAgIClcbiAgICB9LFxuICAgIGNvbXBvbmVudHM6IGdldEZpbHRlcnNDb21wb25lbnRzKGZpbHRlcnMpLFxuICAgIGJ1dHRvbnM6IHtcbiAgICAgIGNsZWFyOiB7XG4gICAgICAgIHRleHQ6ICdDbGVhcicsXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5yZXNldERhdGEoKVxuICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50LmFwcGx5RmlsdGVycygpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBmaWx0ZXI6IHtcbiAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgIHRleHQ6ICdGaWx0ZXInLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBjbGljayh7IHNjaGVtYUNvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICBzY2hlbWFDb21wb25lbnQuYXBwbHlGaWx0ZXJzKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGFwcGx5RmlsdGVycygpIHtcbiAgICAgICAgcHJveHkucXVlcnkgPSB7XG4gICAgICAgICAgLi4ucHJveHkucXVlcnksXG4gICAgICAgICAgZmlsdGVyOiBmb3JtYXRGaWx0ZXJzRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy5kYXRhKSxcbiAgICAgICAgICAvLyBDbGVhciBwYWdpbmF0aW9uIHdoZW4gYXBwbHlpbmcgb3IgY2xlYXJpbmcgZmlsdGVyczpcbiAgICAgICAgICBwYWdlOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxcbn1cblxuZnVuY3Rpb24gZ2V0RmlsdGVyc0NvbXBvbmVudHMoZmlsdGVycykge1xuICBjb25zdCBjb21wcyA9IHt9XG4gIGZvciAoY29uc3QgZmlsdGVyIG9mIE9iamVjdC52YWx1ZXMoZmlsdGVycyB8fCB7fSkpIHtcbiAgICAvLyBTdXBwb3J0IGJvdGggY3VzdG9tIGZvcm1zIGFuZCBkZWZhdWx0IGZpbHRlciBjb21wb25lbnRzLCB0aHJvdWdoIHRoZVxuICAgIC8vIGBmaWx0ZXJDb21wb25lbnRzYCByZWdpc3RyeS4gRXZlbiBmb3IgZGVmYXVsdCBmaWx0ZXJzLCBzdGlsbCB1c2UgdGhlXG4gICAgLy8gcHJvcGVydGllcyBpbiBgZmlsdGVyYCBhcyB0aGUgYmFzZSBmb3IgYGZvcm1gLCBzbyB0aGluZ3MgbGlrZSBgbGFiZWxgXG4gICAgLy8gY2FuIGJlIGNoYW5nZWQgb24gdGhlIHJlc3VsdGluZyBmb3JtLlxuICAgIGNvbnN0IHsgZmlsdGVyOiB0eXBlLCAuLi5mb3JtIH0gPSBmaWx0ZXJcbiAgICBjb25zdCBjb21wb25lbnRzID0gdHlwZVxuICAgICAgPyBmaWx0ZXJDb21wb25lbnRzW3R5cGVdPy4oZmlsdGVyKVxuICAgICAgOiBmaWx0ZXIuY29tcG9uZW50c1xuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICBmb3JtLmNvbXBvbmVudHMgPSB7fVxuICAgICAgLy8gQ29udmVydCBsYWJlbHMgdG8gcGxhY2Vob2xkZXJzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKGNvbXBvbmVudHMpKSB7XG4gICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IGNvbXBvbmVudC5sYWJlbCB8fCBsYWJlbGl6ZShjb21wb25lbnQubmFtZSB8fCBrZXkpXG4gICAgICAgICAgZm9ybS5jb21wb25lbnRzW2tleV0gPSB7XG4gICAgICAgICAgICAuLi5jb21wb25lbnQsXG4gICAgICAgICAgICBsYWJlbDogZmFsc2UsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogbGFiZWxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbXBzW2ZpbHRlci5uYW1lXSA9IHtcbiAgICAgICAgbGFiZWw6IGZvcm0ubGFiZWwsXG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pLFxuICAgICAgICBmb3JtLFxuICAgICAgICBpbmxpbmVkOiB0cnVlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgZmlsdGVyICcke2ZpbHRlci5uYW1lfSc6IFVua25vd24gZmlsdGVyIHR5cGUgJyR7dHlwZX0nLmBcbiAgICAgIClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbXBzXG59XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKSB7XG4gIGNvbnN0IGNvbXBvbmVudCA9IHNjaGVtYS5jb21wb25lbnRzW25hbWVdXG4gIHJldHVybiBjb21wb25lbnQ/LmZvcm0/LmNvbXBvbmVudHNcbn1cblxuZnVuY3Rpb24gZm9ybWF0RmlsdGVyc0RhdGEoc2NoZW1hLCBkYXRhKSB7XG4gIGNvbnN0IGZpbHRlcnMgPSBbXVxuICBmb3IgKGNvbnN0IG5hbWUgaW4gZGF0YSkge1xuICAgIGNvbnN0IGVudHJ5ID0gZGF0YVtuYW1lXVxuICAgIGlmIChlbnRyeSkge1xuICAgICAgLy8gTWFwIGNvbXBvbmVudHMgc2VxdWVuY2UgdG8gYXJndW1lbnRzOlxuICAgICAgY29uc3QgYXJncyA9IE9iamVjdC5rZXlzKGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKSkubWFwKFxuICAgICAgICBrZXkgPT4gZW50cnlba2V5XSA/PyBudWxsXG4gICAgICApXG4gICAgICAvLyBPbmx5IGFwcGx5IGZpbHRlciBpZiB0aGVyZSBhcmUgc29tZSBhcmd1bWVudHMgdGhhdCBhcmVuJ3QgbnVsbDpcbiAgICAgIGlmIChhcmdzLnNvbWUodmFsdWUgPT4gdmFsdWUgIT09IG51bGwpKSB7XG4gICAgICAgIGZpbHRlcnMucHVzaChgJHtuYW1lfToke2FyZ3MubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKCcsJyl9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbHRlcnMubGVuZ3RoID8gZmlsdGVycyA6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBwYXJzZUZpbHRlcnNEYXRhKHNjaGVtYSwgcXVlcnkpIHtcbiAgY29uc3QgZmlsdGVycyA9IHt9XG4gIC8vIFNhbWUgYXMgQGRpdG9qcy9zZXJ2ZXIncyBRdWVyeVBhcmFtZXRlcnMuZmlsdGVyOiBUcmFuc2xhdGUgdGhlIHN0cmluZyBkYXRhXG4gIC8vIGZyb20gJHJvdXRlLnF1ZXJ5IGJhY2sgdG8gcGFyYW0gbGlzdHMgcGVyIGZpbHRlcjpcbiAgaWYgKHF1ZXJ5KSB7XG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgYXNBcnJheShxdWVyeS5maWx0ZXIpKSB7XG4gICAgICBjb25zdCBbLCBuYW1lLCBqc29uXSA9IGZpbHRlci5tYXRjaCgvXihcXHcrKTooLiopJC8pXG4gICAgICB0cnkge1xuICAgICAgICBmaWx0ZXJzW25hbWVdID0gYXNBcnJheShKU09OLnBhcnNlKGBbJHtqc29ufV1gKSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IGZpbHRlcnNEYXRhID0ge31cbiAgZm9yIChjb25zdCBuYW1lIGluIHNjaGVtYS5jb21wb25lbnRzKSB7XG4gICAgY29uc3QgZGF0YSA9IHt9XG4gICAgLy8gSWYgd2UgaGF2ZSByZXRyaWV2ZWQgcGFyYW1zIGZyb20gdGhlIHF1ZXJ5LCBmZXRjaCB0aGUgYXNzb2NpYXRlZFxuICAgIC8vIGZvcm0gY29tcG9uZW50cyBzbyB3ZSBjYW4gbWFwIHRoZSB2YWx1ZXMgYmFjayB0byBvYmplY3Qga2V5czpcbiAgICBjb25zdCBhcmdzID0gZmlsdGVyc1tuYW1lXVxuICAgIGlmIChhcmdzKSB7XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpXG4gICAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgICBsZXQgaW5kZXggPSAwXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBkYXRhW2tleV0gPSBhcmdzW2luZGV4KytdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZmlsdGVyc0RhdGFbbmFtZV0gPSBkYXRhXG4gIH1cbiAgcmV0dXJuIGZpbHRlcnNEYXRhXG59XG4iLCJcbi5kaXRvLWxpc3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuKVxuICAuZGl0by1uYXZpZ2F0aW9uXG4gICAgZGl0by1zY29wZXMoXG4gICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICAgIClcbiAgICAvLyBXaGVuIHRoZXJlJ3Mgb25seSBwYWdpbmF0aW9uIHdpdGhvdXQgc2NvcGVzLCB3ZSBuZWVkIGEgZ29vZCBvbCcgc3BhY2VyXG4gICAgLy8gZGl2LCBmb3IgdGhlIGxheW91dCBub3QgdG8gYnJlYWsuLi5cbiAgICAuZGl0by1zcGFjZXIoXG4gICAgICB2LWVsc2UtaWY9XCJwYWdpbmF0ZVwiXG4gICAgKVxuICAgIGRpdG8tcGFnaW5hdGlvbihcbiAgICAgIHYtaWY9XCJwYWdpbmF0ZVwiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6bGltaXQ9XCJwYWdpbmF0ZVwiXG4gICAgICA6dG90YWw9XCJ0b3RhbCB8fCAwXCJcbiAgICApXG4gIHRhYmxlLmRpdG8tdGFibGUoXG4gICAgOmNsYXNzPWB7XG4gICAgICAnZGl0by10YWJsZS1zZXBhcmF0b3JzJzogaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtbGFyZ2VyLXBhZGRpbmcnOiBoYXNFZGl0QnV0dG9ucyAmJiAhaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtYWx0ZXJuYXRlLWNvbG9ycyc6ICFpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1ldmVuLWNvdW50JzogaGFzRXZlbkNvdW50XG4gICAgfWBcbiAgKVxuICAgIGRpdG8tdGFibGUtaGVhZChcbiAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpjb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICA6aGFzRWRpdEJ1dHRvbnM9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0RGF0YSwgcGFnaW5hdGlvblJhbmdlKVwiXG4gICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCJpdGVtLCBpbmRleCBpbiBsaXN0RGF0YVwiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKHNjaGVtYSwgaXRlbSlcIlxuICAgICAgICA6aWQ9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiY29sdW1uc1wiKVxuICAgICAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihjb2x1bW4pXCJcbiAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJnZXRDZWxsQ2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICA6Y2VsbD1cImNvbHVtblwiXG4gICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgIClcbiAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCwgYXNPYmplY3Q6IHRydWUgfSlcIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb21wb25lbnQoXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dChpdGVtLCBpbmRleCkpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4IH0pXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICB2LWlmPVwiaGFzQ2VsbEVkaXRCdXR0b25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgIClcbiAgICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgaW5zaWRlIHRhYmxlIHdoZW4gbm90IGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgIHRmb290KFxuICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmICFzaW5nbGVcIlxuICAgIClcbiAgICAgIHRyXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgOmNvbHNwYW49XCJudW1Db2x1bW5zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIClcbiAgLy8gUmVuZGVyIGNyZWF0ZSBidXR0b25zIG91dHNpZGUgdGFibGUgd2hlbiBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiBzaW5nbGVcIlxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWxpc3QoXG4gICAgdi1pZj1cImlzUmVhZHlcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICAgIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4gIClcbiAgICAuZGl0by1uYXZpZ2F0aW9uXG4gICAgICBkaXRvLXNjb3BlcyhcbiAgICAgICAgdi1pZj1cInNjb3Blc1wiXG4gICAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgICApXG4gICAgICAvLyBXaGVuIHRoZXJlJ3Mgb25seSBwYWdpbmF0aW9uIHdpdGhvdXQgc2NvcGVzLCB3ZSBuZWVkIGEgZ29vZCBvbCcgc3BhY2VyXG4gICAgICAvLyBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgICAgLmRpdG8tc3BhY2VyKFxuICAgICAgICB2LWVsc2UtaWY9XCJwYWdpbmF0ZVwiXG4gICAgICApXG4gICAgICBkaXRvLXBhZ2luYXRpb24oXG4gICAgICAgIHYtaWY9XCJwYWdpbmF0ZVwiXG4gICAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgICAgOmxpbWl0PVwicGFnaW5hdGVcIlxuICAgICAgICA6dG90YWw9XCJ0b3RhbCB8fCAwXCJcbiAgICAgIClcbiAgICB0YWJsZS5kaXRvLXRhYmxlKFxuICAgICAgOmNsYXNzPWB7XG4gICAgICAgICdkaXRvLXRhYmxlLXNlcGFyYXRvcnMnOiBpc0lubGluZWQsXG4gICAgICAgICdkaXRvLXRhYmxlLWxhcmdlci1wYWRkaW5nJzogaGFzRWRpdEJ1dHRvbnMgJiYgIWlzSW5saW5lZCxcbiAgICAgICAgJ2RpdG8tdGFibGUtYWx0ZXJuYXRlLWNvbG9ycyc6ICFpc0lubGluZWQsXG4gICAgICAgICdkaXRvLXRhYmxlLWV2ZW4tY291bnQnOiBoYXNFdmVuQ291bnRcbiAgICAgIH1gXG4gICAgKVxuICAgICAgZGl0by10YWJsZS1oZWFkKFxuICAgICAgICB2LWlmPVwiY29sdW1uc1wiXG4gICAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgICAgOmNvbHVtbnM9XCJjb2x1bW5zXCJcbiAgICAgICAgOmhhc0VkaXRCdXR0b25zPVwiaGFzRWRpdEJ1dHRvbnNcIlxuICAgICAgKVxuICAgICAgdnVlLWRyYWdnYWJsZShcbiAgICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICAgICAgOmxpc3Q9XCJ1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3REYXRhLCBwYWdpbmF0aW9uUmFuZ2UpXCJcbiAgICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICAgIClcbiAgICAgICAgdHIoXG4gICAgICAgICAgdi1mb3I9XCJpdGVtLCBpbmRleCBpbiBsaXN0RGF0YVwiXG4gICAgICAgICAgOmtleT1cImdldEl0ZW1VaWQoc2NoZW1hLCBpdGVtKVwiXG4gICAgICAgICAgOmlkPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJjb2x1bW5zXCIpXG4gICAgICAgICAgICBkaXRvLXRhYmxlLWNlbGwoXG4gICAgICAgICAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgICAgICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGNvbHVtbilcIlxuICAgICAgICAgICAgICA6a2V5PVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRDZWxsQ2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDpjZWxsPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UpXG4gICAgICAgICAgICB0ZFxuICAgICAgICAgICAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgICAgICAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXgsIGFzT2JqZWN0OiB0cnVlIH0pXCJcbiAgICAgICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShpbmRleClcIlxuICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29tcG9uZW50KFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICAgICAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoaXRlbSwgaW5kZXgpKVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4IH0pXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICB2LWlmPVwiaGFzQ2VsbEVkaXRCdXR0b25zXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShpbmRleClcIlxuICAgICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgKVxuICAgICAgLy8gUmVuZGVyIGNyZWF0ZSBidXR0b25zIGluc2lkZSB0YWJsZSB3aGVuIG5vdCBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgICAgIHRmb290KFxuICAgICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgIXNpbmdsZVwiXG4gICAgICApXG4gICAgICAgIHRyXG4gICAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgIDpjb2xzcGFuPVwibnVtQ29sdW1uc1wiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgICAgICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgKVxuICAgIC8vIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBvdXRzaWRlIHRhYmxlIHdoZW4gaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmIHNpbmdsZVwiXG4gICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWxpc3RcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAuZGl0by1uYXZpZ2F0aW9uXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW5cbiAgICAgIHBhZGRpbmctYm90dG9tOiAkY29udGVudC1wYWRkaW5nLWhhbGZcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgJjplbXB0eVxuICAgICAgICBkaXNwbGF5OiBub25lXG4gICAgICAuZGl0by1zY29wZXMsXG4gICAgICAuZGl0by1wYWdpbmF0aW9uXG4gICAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgICAgZmxleDogMCAxIGF1dG9cbiAgICAgICAgbWluLXdpZHRoOiAwXG4gICAgJi5kaXRvLXNpbmdsZVxuICAgICAgLy8gU28gdGhhdCBsaXN0IGJ1dHRvbnMgY2FuIGJlIHN0aWNreSB0byB0aGUgYm90dG9tOlxuICAgICAgZGlzcGxheTogZ3JpZFxuICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW4tY29udGVudFxuICAgICAgaGVpZ2h0OiAxMDAlXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgVnVlRHJhZ2dhYmxlIGZyb20gJ3Z1ZWRyYWdnYWJsZSdcbmltcG9ydCB7IGdldE5hbWVkU2NoZW1hcywgZ2V0Vmlld0VkaXRQYXRoIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0RmlsdGVyc1BhbmVsIH0gZnJvbSAnLi4vdXRpbHMvZmlsdGVyLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgcGlja0J5LCBlcXVhbHMsIGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdsaXN0Jywge1xuICBjb21wb25lbnRzOiB7IFZ1ZURyYWdnYWJsZSB9LFxuICBtaXhpbnM6IFtTb3VyY2VNaXhpbiwgT3JkZXJlZE1peGluXSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAvLyBObyBuZWVkIGZvciB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBTZWUgVHlwZVRyZWVMaXN0IGZvciBkZXRhaWxzLlxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgZ2V0UGFuZWxTY2hlbWEoc2NoZW1hLCBkYXRhUGF0aCwgc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgY29uc3QgeyBmaWx0ZXJzIH0gPSBzY2hlbWFcbiAgICAvLyBTZWUgaWYgdGhpcyBsaXN0IGNvbXBvbmVudCB3YW50cyB0byBkaXNwbGF5IGEgZmlsdGVyIHBhbmVsLCBhbmQgaWYgc28sXG4gICAgLy8gY3JlYXRlIHRoZSBwYW5lbCBzY2hlbWEgZm9yIGl0IHRocm91Z2ggYGdldEZpbHRlcnNQYW5lbCgpYC5cbiAgICBpZiAoZmlsdGVycykge1xuICAgICAgLy8gQXQgdGhlIHRpbWUgb2YgdGhlIGNyZWF0aW9uIG9mIHRoZSBwYW5lbCBzY2hlbWEsIHRoZSBzY2hlbWFDb21wb25lbnQgaXNcbiAgICAgIC8vIG5vdCBmaWxsZWQgeWV0LCBzbyB3ZSBjYW4ndCBnZXQgdGhlIHRhcmdldCBjb21wb25lbnQgKGRhdGFQYXRoKSByaWdodFxuICAgICAgLy8gYXdheS4gVXNlIGEgcHJveHkgYW5kIGEgZ2V0dGVyIGluc3RlYWQsIHRvIGdldCBhcm91bmQgdGhpczpcbiAgICAgIGNvbnN0IGdldExpc3RDb21wb25lbnQgPSAoKSA9PiBzY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlEYXRhUGF0aChcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIGNvbXBvbmVudCA9PiBjb21wb25lbnQudHlwZSA9PT0gJ2xpc3QnXG4gICAgICApXG5cbiAgICAgIHJldHVybiBnZXRGaWx0ZXJzUGFuZWwoXG4gICAgICAgIGdldE5hbWVkU2NoZW1hcyhmaWx0ZXJzKSxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIHsgLy8gQ3JlYXRlIGEgc2ltcGxlIHByb3h5IHRvIGdldCAvIHNldCB0aGUgcXVlcnksIHNlZSBnZXRGaWx0ZXJzUGFuZWwoKVxuICAgICAgICAgIGdldCBxdWVyeSgpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRMaXN0Q29tcG9uZW50KCk/LnF1ZXJ5XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXQgcXVlcnkocXVlcnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGdldExpc3RDb21wb25lbnQoKVxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHVuZGVmaW5lZCB2YWx1ZXMgZm9yIGNvbXBhcmluZyB3aXRoIGVxdWFscygpXG4gICAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IG9iaiA9PiBwaWNrQnkob2JqLCB2YWx1ZSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICBpZiAoIWVxdWFscyhmaWx0ZXIocXVlcnkpLCBmaWx0ZXIoY29tcG9uZW50LnF1ZXJ5KSkpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQucXVlcnkgPSBxdWVyeVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5sb2FkRGF0YShmYWxzZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGhhc0xpc3RCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICEhKFxuICAgICAgICB0aGlzLmJ1dHRvblNjaGVtYXMgfHxcbiAgICAgICAgdGhpcy5jcmVhdGFibGVcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4gbGlzdERhdGEubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIHRoaXMuZWRpdGFibGUgfHxcbiAgICAgICAgdGhpcy5kZWxldGFibGUgfHxcbiAgICAgICAgdGhpcy5kcmFnZ2FibGVcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzQ2VsbEVkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzSW5saW5lZCAmJiB0aGlzLmhhc0VkaXRCdXR0b25zXG4gICAgfSxcblxuICAgIGhhc0V2ZW5Db3VudCgpIHtcbiAgICAgIHJldHVybiAhKHRoaXMubGlzdERhdGEubGVuZ3RoICUgMilcbiAgICB9LFxuXG4gICAgbnVtQ29sdW1ucygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICh0aGlzLmNvbHVtbnMgPyBPYmplY3Qua2V5cyh0aGlzLmNvbHVtbnMpLmxlbmd0aCA6IDEpICtcbiAgICAgICAgKHRoaXMuaGFzQ2VsbEVkaXRCdXR0b25zID8gMSA6IDApXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXREYXRhUGF0aChpbmRleCkge1xuICAgICAgcmV0dXJuIGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgIH0sXG5cbiAgICBnZXRFZGl0UGF0aChpdGVtLCBpbmRleCkge1xuICAgICAgaWYgKHRoaXMuZWRpdGFibGUpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IGdldFZpZXdFZGl0UGF0aCh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KSB8fCB0aGlzLnBhdGhcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSwgaW5kZXgpXG4gICAgICAgIHJldHVybiBgJHtwYXRofS8ke2lkfWBcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIGdldENlbGxDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jZWxsLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldENvbnRleHQoaXRlbSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGRhdGFQYXRoOiB0aGlzLmdldERhdGFQYXRoKGluZGV4KVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25GaWx0ZXJFcnJvcnMoZXJyb3JzKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzRGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCAnJGZpbHRlcnMnKVxuICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRQYW5lbEJ5RGF0YVBhdGgoZmlsdGVyc0RhdGFQYXRoKVxuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVsLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZGl0by1sYWJlbC5kaXRvLWxhYmVsLWNvbXBvbmVudCg6bGFiZWw9XCJ2YWx1ZVwiIDpkYXRhUGF0aD1cImRhdGFQYXRoXCIpXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBkaXRvLWxhYmVsLmRpdG8tbGFiZWwtY29tcG9uZW50KDpsYWJlbD1cInZhbHVlXCIgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1sYWJlbC1jb21wb25lbnRcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgaGVpZ2h0OiAyZW1cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGFiZWwnLCB7XG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlXG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLW1hcmt1cChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuKVxuICBlZGl0b3ItbWVudS1iYXIuZGl0by1tYXJrdXAtdG9vbGJhcig6ZWRpdG9yPVwiZWRpdG9yXCIpXG4gICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtdG9vbGJhcihcbiAgICAgIHYtaWY9XCJncm91cGVkQnV0dG9ucy5sZW5ndGggPiAwXCJcbiAgICApXG4gICAgICAuZGl0by1idXR0b24tZ3JvdXAoXG4gICAgICAgIHYtZm9yPVwiYnV0dG9ucyBpbiBncm91cGVkQnV0dG9uc1wiXG4gICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWZvcj1cInsgbmFtZSwgaWNvbiwgaXNBY3RpdmUsIG9uQ2xpY2sgfSBpbiBidXR0b25zXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIixcbiAgICAgICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICAgICAgKVxuICAgICAgICAgIGljb24oOm5hbWU9XCJpY29uXCIpXG4gIGVkaXRvci1jb250ZW50LmRpdG8tbWFya3VwLWVkaXRvcihcbiAgICByZWY9XCJlZGl0b3JcIlxuICAgIDplZGl0b3I9XCJlZGl0b3JcIlxuICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gIClcbiAgLmRpdG8tcmVzaXplKFxuICAgIHYtaWY9XCJyZXNpemFibGVcIlxuICAgIEBtb3VzZWRvd24uc3RvcC5wcmV2ZW50PVwib25EcmFnUmVzaXplXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tbWFya3VwKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgKVxuICAgIGVkaXRvci1tZW51LWJhci5kaXRvLW1hcmt1cC10b29sYmFyKDplZGl0b3I9XCJlZGl0b3JcIilcbiAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXRvb2xiYXIoXG4gICAgICAgIHYtaWY9XCJncm91cGVkQnV0dG9ucy5sZW5ndGggPiAwXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tYnV0dG9uLWdyb3VwKFxuICAgICAgICAgIHYtZm9yPVwiYnV0dG9ucyBpbiBncm91cGVkQnV0dG9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICB2LWZvcj1cInsgbmFtZSwgaWNvbiwgaXNBY3RpdmUsIG9uQ2xpY2sgfSBpbiBidXR0b25zXCJcbiAgICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiLFxuICAgICAgICAgICAgQGNsaWNrPVwib25DbGlja1wiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgaWNvbig6bmFtZT1cImljb25cIilcbiAgICBlZGl0b3ItY29udGVudC5kaXRvLW1hcmt1cC1lZGl0b3IoXG4gICAgICByZWY9XCJlZGl0b3JcIlxuICAgICAgOmVkaXRvcj1cImVkaXRvclwiXG4gICAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICAgIClcbiAgICAuZGl0by1yZXNpemUoXG4gICAgICB2LWlmPVwicmVzaXphYmxlXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcC5wcmV2ZW50PVwib25EcmFnUmVzaXplXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tbWFya3VwXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAgIC5kaXRvLXJlc2l6ZVxuICAgICAgQGV4dGVuZCAlaWNvbi1yZXNpemVcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgdG9wOiB1bnNldFxuICAgICAgbGVmdDogdW5zZXRcbiAgICAgIHJpZ2h0OiAwXG4gICAgICBib3R0b206IDBcbiAgICAgIHdpZHRoOiAxZW1cbiAgICAgIGhlaWdodDogMWVtXG5cbiAgICAuUHJvc2VNaXJyb3JcbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgb3V0bGluZTogbm9uZVxuXG4gICAgLmRpdG8tbWFya3VwLWVkaXRvclxuICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsXG4gICAgICAvLyBNb3ZlIHBhZGRpbmcgXCJpbnNpZGVcIiBlZGl0b3IgdG8gY29ycmVjdGx5IHBvc2l0aW9uIHNjcm9sbGJhclxuICAgICAgbWFyZ2luLXJpZ2h0OiAtJGlucHV0LXBhZGRpbmctaG9yXG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkaW5wdXQtcGFkZGluZy1ob3JcblxuICAgIC5kaXRvLWJ1dHRvbnMtdG9vbGJhclxuICAgICAgbWFyZ2luOiAkaW5wdXQtcGFkZGluZy12ZXIgMFxuXG4gICAgaDEsXG4gICAgaDIsXG4gICAgaDMsXG4gICAgcCxcbiAgICB1bCxcbiAgICBvbCxcbiAgICBwcmUsXG4gICAgYmxvY2txdW90ZVxuICAgICAgbWFyZ2luOiAxcmVtIDBcbiAgICAgICY6Zmlyc3QtY2hpbGRcbiAgICAgICAgbWFyZ2luLXRvcDogMFxuICAgICAgJjpsYXN0LWNoaWxkXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDBcbiAgICBoMSxcbiAgICBoMixcbiAgICBoM1xuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICBoMVxuICAgICAgZm9udC1zaXplOiAxLjRyZW1cbiAgICBoMlxuICAgICAgZm9udC1zaXplOiAxLjJyZW1cbiAgICB1bFxuICAgICAgbGlzdC1zdHlsZTogZGlzY1xuICAgIGNvZGVcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ub1xuICAgIHByZVxuICAgICAgcGFkZGluZzogMC43cmVtIDFyZW1cbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyXG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICBvdmVyZmxvdy14OiBhdXRvXG4gICAgICBjb2RlXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgcCBjb2RlXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIHBhZGRpbmc6IDAgMC4zcmVtXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXJcbiAgICBhXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZVxuICAgICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgICBjb2xvcjogYmx1ZVxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmVcbiAgICB1bCxcbiAgICBvbFxuICAgICAgcGFkZGluZy1sZWZ0OiAycmVtXG4gICAgbGlcbiAgICAgICYgPiBwLFxuICAgICAgJiA+IG9sLFxuICAgICAgJiA+IHVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgIGJsb2NrcXVvdGVcbiAgICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgJGNvbG9yLWxpZ2h0ZXJcbiAgICAgIHBhZGRpbmctbGVmdDogMXJlbVxuICAgICAgZm9udC1zdHlsZTogaXRhbGljXG4gICAgICBwXG4gICAgICAgIG1hcmdpbjogMFxuXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRWRpdG9yLCBFZGl0b3JDb250ZW50LCBFZGl0b3JNZW51QmFyLCBNYXJrIH0gZnJvbSAndGlwdGFwJ1xuaW1wb3J0IHsgdG9nZ2xlTWFyayB9IGZyb20gJ3RpcHRhcC1jb21tYW5kcydcbmltcG9ydCB7XG4gIC8vIE1hcmtzOlxuICBCb2xkLCBDb2RlLCBJdGFsaWMsIExpbmssIFN0cmlrZSwgVW5kZXJsaW5lLFxuICAvLyBOb2RlczpcbiAgQmxvY2txdW90ZSwgQ29kZUJsb2NrLCBIYXJkQnJlYWssIEhlYWRpbmcsIEhvcml6b250YWxSdWxlLFxuICBPcmRlcmVkTGlzdCwgQnVsbGV0TGlzdCwgTGlzdEl0ZW0sXG4gIC8vIFRPRE86XG4gIC8vIC0gSW1hZ2UsIE1lbnRpb24sIENvZGVCbG9ja0hpZ2hsaWdodFxuICAvLyAtIFRhYmxlLCBUYWJsZUNlbGwsIFRhYmxlSGVhZGVyLCBUYWJsZU5vZGVzLCBUYWJsZVJvdyxcbiAgLy8gLSBUb2RvSXRlbSwgVG9kb0xpc3RcbiAgLy8gVG9vbHM6XG4gIEhpc3Rvcnlcbn0gZnJvbSAndGlwdGFwLWV4dGVuc2lvbnMnXG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCB7XG4gIGlzQXJyYXksIGlzT2JqZWN0LCB1bmRlcnNjb3JlLCBoeXBoZW5hdGUsIGRlYm91bmNlXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdtYXJrdXAnLCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICBFZGl0b3JDb250ZW50LFxuICAgIEVkaXRvck1lbnVCYXIsXG4gICAgSWNvblxuICB9LFxuXG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlZGl0b3I6IG51bGwsXG4gICAgICBoZWlnaHQ6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCAxMFxuICAgIH0sXG5cbiAgICBzdHlsZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0IHx8IGBjYWxjKCR7dGhpcy5saW5lc31lbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlgXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1hcmtCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbWFya3MnLCB7XG4gICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgIGl0YWxpYzogdHJ1ZSxcbiAgICAgICAgdW5kZXJsaW5lOiB0cnVlLFxuICAgICAgICBzdHJpa2U6IHRydWUsXG4gICAgICAgIHNtYWxsOiB0cnVlLFxuICAgICAgICBjb2RlOiB0cnVlLFxuICAgICAgICBsaW5rOiB7XG4gICAgICAgICAgb25DbGljazogY29tbWFuZCA9PiB0aGlzLm9uQ2xpY2tMaW5rKGNvbW1hbmQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGJhc2ljTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgcGFyYWdyYXBoOiB7XG4gICAgICAgIC8vIERvIG5vdCBzaG93IHRoZSBwYXJhZ3JhcGggY29tbWFuZCBhcyBhY3RpdmUgaWYgYW55IG9mIHRoZSBibG9ja1xuICAgICAgICAvLyBjb21tYW5kcyBhcmUgYWxzbyBhY3RpdmU6XG4gICAgICAgICAgaWdub3JlQWN0aXZlOiAoKSA9PlxuICAgICAgICAgICAgdGhpcy5vdGhlck5vZGVCdXR0b25zLnNvbWUoYnV0dG9uID0+IGJ1dHRvbi5pc0FjdGl2ZSlcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZGluZzoge1xuICAgICAgICAgIGF0dHI6ICdsZXZlbCcsXG4gICAgICAgICAgdmFsdWVzOiBbMSwgMiwgMywgNCwgNSwgNl1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb3RoZXJOb2RlQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ25vZGVzJywge1xuICAgICAgICBidWxsZXRMaXN0OiB0cnVlLFxuICAgICAgICBvcmRlcmVkTGlzdDogdHJ1ZSxcbiAgICAgICAgYmxvY2txdW90ZTogdHJ1ZSxcbiAgICAgICAgY29kZUJsb2NrOiB0cnVlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB0b29sQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ3Rvb2xzJywge1xuICAgICAgICB1bmRvOiB0cnVlLFxuICAgICAgICByZWRvOiB0cnVlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBncm91cGVkQnV0dG9ucygpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFya0J1dHRvbnMsXG4gICAgICAgIGJhc2ljTm9kZUJ1dHRvbnMsXG4gICAgICAgIG90aGVyTm9kZUJ1dHRvbnMsXG4gICAgICAgIHRvb2xCdXR0b25zXG4gICAgICB9ID0gdGhpc1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgbWFya0J1dHRvbnMsXG4gICAgICAgIGJhc2ljTm9kZUJ1dHRvbnMsXG4gICAgICAgIG90aGVyTm9kZUJ1dHRvbnMsXG4gICAgICAgIHRvb2xCdXR0b25zXG4gICAgICBdLmZpbHRlcihidXR0b25zID0+IGJ1dHRvbnMubGVuZ3RoID4gMClcbiAgICB9LFxuXG4gICAgcGFyc2VPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJlc2VydmVXaGl0ZXNwYWNlOiB7XG4gICAgICAgICAgJ2NvbGxhcHNlJzogZmFsc2UsXG4gICAgICAgICAgJ3ByZXNlcnZlJzogdHJ1ZSxcbiAgICAgICAgICAncHJlc2VydmUtYWxsJzogJ2Z1bGwnXG4gICAgICAgIH1bdGhpcy53aGl0ZXNwYWNlXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBlZGl0b3JPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWRpdGFibGU6ICF0aGlzLnJlYWR5b25seSxcbiAgICAgICAgYXV0b0ZvY3VzOiB0aGlzLmF1dG9mb2N1cyxcbiAgICAgICAgZGlzYWJsZUlucHV0UnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLmlucHV0LFxuICAgICAgICBkaXNhYmxlUGFzdGVSdWxlczogIXRoaXMuZW5hYmxlUnVsZXMucGFzdGUsXG4gICAgICAgIHBhcnNlT3B0aW9uczogdGhpcy5wYXJzZU9wdGlvbnNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVzaXphYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVzaXphYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICB3aGl0ZXNwYWNlOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2hpdGVzcGFjZScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdjb2xsYXBzZSdcbiAgICAgIC8vIFBvc3NpYmxlIHZhbHVlcyBhcmU6ICdjb2xsYXBzZScsICdwcmVzZXJ2ZScsICdwcmVzZXJ2ZS1hbGwnXG4gICAgfSksXG5cbiAgICBlbmFibGVSdWxlczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VuYWJsZVJ1bGVzJywge1xuICAgICAgdHlwZTogW09iamVjdCwgQm9vbGVhbl0sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlbmFibGVSdWxlcykge1xuICAgICAgICByZXR1cm4gaXNPYmplY3QoZW5hYmxlUnVsZXMpXG4gICAgICAgICAgPyBlbmFibGVSdWxlc1xuICAgICAgICAgIDoge1xuICAgICAgICAgICAgaW5wdXQ6ICEhZW5hYmxlUnVsZXMsXG4gICAgICAgICAgICBwYXN0ZTogISFlbmFibGVSdWxlc1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgcmVhZHlvbmx5OiAndXBkYXRlRWRpdG9yT3B0aW9ucycsXG4gICAgYXV0b2ZvY3VzOiAndXBkYXRlRWRpdG9yT3B0aW9ucycsXG4gICAgZW5hYmxlUnVsZXM6ICd1cGRhdGVFZGl0b3JPcHRpb25zJ1xuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZVxuICAgIGxldCBpZ25vcmVXYXRjaCA9IGZhbHNlXG5cbiAgICBjb25zdCBvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5mb2N1c2VkICYmIGNoYW5nZWQpIHtcbiAgICAgICAgY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9uRm9jdXMgPSAoKSA9PiB0aGlzLm9uRm9jdXMoKVxuXG4gICAgY29uc3Qgb25CbHVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5vbkJsdXIoKVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH1cblxuICAgIGNvbnN0IHNldFZhbHVlRGVib3VuY2VkID0gZGVib3VuY2UoZ2V0VmFsdWUgPT4ge1xuICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICB0aGlzLnZhbHVlID0gZ2V0VmFsdWUoKVxuICAgICAgY2hhbmdlZCA9IHRydWVcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9LCAxMDApXG5cbiAgICBjb25zdCBvblVwZGF0ZSA9ICh7IGdldEhUTUwgfSkgPT4ge1xuICAgICAgc2V0VmFsdWVEZWJvdW5jZWQoZ2V0SFRNTClcbiAgICAgIHRoaXMub25JbnB1dCgpXG4gICAgfVxuXG4gICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVdhdGNoKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZWRpdG9yLnNldENvbnRlbnQodmFsdWUsIGZhbHNlLCB0aGlzLnBhcnNlT3B0aW9ucylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5lZGl0b3IgPSBuZXcgRWRpdG9yKHtcbiAgICAgIC4uLnRoaXMuZWRpdG9yT3B0aW9ucyxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbkJsdXIsXG4gICAgICBvblVwZGF0ZSxcbiAgICAgIGV4dGVuc2lvbnM6IHRoaXMuY3JlYXRlRXh0ZW5zaW9ucygpLFxuICAgICAgY29udGVudDogdGhpcy52YWx1ZSB8fCAnJ1xuICAgIH0pXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLmVkaXRvci5kZXN0cm95KClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25EcmFnUmVzaXplKGV2ZW50KSB7XG4gICAgICBjb25zdCBnZXRQb2ludCA9ICh7IGNsaWVudFg6IHgsIGNsaWVudFk6IHkgfSkgPT4gKHsgeCwgeSB9KVxuXG4gICAgICBsZXQgcHJldlkgPSBnZXRQb2ludChldmVudCkueVxuICAgICAgbGV0IGhlaWdodCA9IHBhcnNlRmxvYXQoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiRyZWZzLmVkaXRvci4kZWwpLmhlaWdodClcblxuICAgICAgY29uc3QgbW91c2Vtb3ZlID0gZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCB7IHkgfSA9IGdldFBvaW50KGV2ZW50KVxuICAgICAgICBoZWlnaHQgKz0geSAtIHByZXZZXG4gICAgICAgIHByZXZZID0geVxuICAgICAgICB0aGlzLmhlaWdodCA9IGAke01hdGgubWF4KGhlaWdodCwgMCl9cHhgXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgICBtb3VzZW1vdmUsXG5cbiAgICAgICAgbW91c2V1cChldmVudCkge1xuICAgICAgICAgIG1vdXNlbW92ZShldmVudClcbiAgICAgICAgICBoYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB1cGRhdGVFZGl0b3JPcHRpb25zKCkge1xuICAgICAgdGhpcy5lZGl0b3Iuc2V0T3B0aW9ucyh0aGlzLmVkaXRvck9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ2xpY2tMaW5rKGNvbW1hbmQpIHtcbiAgICAgIGNvbnN0IGF0dHJzID0gYXdhaXQgdGhpcy5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIGhyZWY6IHtcbiAgICAgICAgICAgIHR5cGU6ICd1cmwnLFxuICAgICAgICAgICAgbGFiZWw6ICdMaW5rJyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGxhYmVsOiAnVGl0bGUnXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBidXR0b25zOiB7XG4gICAgICAgICAgY2FuY2VsOiB7fSxcbiAgICAgICAgICBhcHBseTogeyB0eXBlOiAnc3VibWl0JyB9LFxuICAgICAgICAgIHJlbW92ZToge1xuICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgIGNsaWNrKHsgZGlhbG9nQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb21wb25lbnQucmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICBocmVmOiBudWxsLFxuICAgICAgICAgICAgICAgICAgdGl0bGU6IG51bGxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXRhOiB0aGlzLmVkaXRvci5nZXRNYXJrQXR0cnMoJ2xpbmsnKVxuICAgICAgfSlcbiAgICAgIGlmIChhdHRycykge1xuICAgICAgICBsZXQgeyBocmVmLCB0aXRsZSB9ID0gYXR0cnNcbiAgICAgICAgaWYgKGhyZWYpIHtcbiAgICAgICAgICAvLyBTZWUgaWYgYGhyZWZgIGNhbiBiZSBwYXJzZWQgYXMgYSBVUkwsIGFuZCBpZiBub3QsIHByZWZpeCBpdCB3aXRoXG4gICAgICAgICAgLy8gYSBkZWZhdWx0IHByb3RvY29sLlxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgVVJMKGhyZWYpXG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICBocmVmID0gYGh0dHA6Ly8ke2hyZWZ9YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb21tYW5kKHsgaHJlZiwgdGl0bGUgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlRXh0ZW5zaW9ucygpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFya3MgPSB7fSxcbiAgICAgICAgbm9kZXMgPSB7fSxcbiAgICAgICAgdG9vbHMgPSB7fVxuICAgICAgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gW1xuICAgICAgICAvLyBzY2hlbWEubWFya3M6XG4gICAgICAgIG1hcmtzLmJvbGQgJiYgbmV3IEJvbGQoKSxcbiAgICAgICAgbWFya3MuaXRhbGljICYmIG5ldyBJdGFsaWMoKSxcbiAgICAgICAgbWFya3MudW5kZXJsaW5lICYmIG5ldyBVbmRlcmxpbmUoKSxcbiAgICAgICAgbWFya3Muc3RyaWtlICYmIG5ldyBTdHJpa2UoKSxcbiAgICAgICAgbWFya3Muc21hbGwgJiYgbmV3IFNtYWxsKCksXG4gICAgICAgIG1hcmtzLmNvZGUgJiYgbmV3IENvZGUoKSxcbiAgICAgICAgbWFya3MubGluayAmJiBuZXcgTGlua1dpdGhUaXRsZSgpLFxuXG4gICAgICAgIC8vIHNjaGVtYS5ub2RlczpcbiAgICAgICAgbm9kZXMuYmxvY2txdW90ZSAmJiBuZXcgQmxvY2txdW90ZSgpLFxuICAgICAgICBub2Rlcy5jb2RlQmxvY2sgJiYgbmV3IENvZGVCbG9jaygpLFxuICAgICAgICBuZXcgSGFyZEJyZWFrKCksIC8vIFRPRE86IFNob3VsZCB0aGlzIGFsd2F5cyBvbj9cbiAgICAgICAgbm9kZXMuaGVhZGluZyAmJiBuZXcgSGVhZGluZyh7IGxldmVsczogbm9kZXMuaGVhZGluZyB9KSxcbiAgICAgICAgbm9kZXMuaG9yaXpvbnRhbFJ1bGUgJiYgbmV3IEhvcml6b250YWxSdWxlKCksXG4gICAgICAgIChub2Rlcy5vcmRlcmVkTGlzdCB8fCBub2Rlcy5idWxsZXRMaXN0KSAmJiBuZXcgTGlzdEl0ZW0oKSxcbiAgICAgICAgbm9kZXMuYnVsbGV0TGlzdCAmJiBuZXcgQnVsbGV0TGlzdCgpLFxuICAgICAgICBub2Rlcy5vcmRlcmVkTGlzdCAmJiBuZXcgT3JkZXJlZExpc3QoKSxcbiAgICAgICAgLy8gVE9ETzpcbiAgICAgICAgLy8gbm9kZXMudG9kb0xpc3QgJiYgbmV3IFRvZG9JdGVtKCksXG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIG5ldyBUb2RvTGlzdCgpLFxuXG4gICAgICAgIC8vIHNjaGVtYS50b29sczpcbiAgICAgICAgdG9vbHMuaGlzdG9yeSAmJiBuZXcgSGlzdG9yeSgpXG4gICAgICBdLmZpbHRlcihleHRlbnNpb24gPT4gISFleHRlbnNpb24pXG4gICAgfSxcblxuICAgIGdldEJ1dHRvbnMoc2V0dGluZ3NOYW1lLCBkZXNjcmlwdGlvbnMpIHtcbiAgICAgIGNvbnN0IGxpc3QgPSBbXVxuXG4gICAgICBjb25zdCBhZGRCdXR0b24gPSAoeyBuYW1lLCBpY29uLCBhdHRycywgaWdub3JlQWN0aXZlLCBvbkNsaWNrIH0pID0+IHtcbiAgICAgICAgY29uc3QgaXNBY3RpdmUgPSB0aGlzLmVkaXRvci5pc0FjdGl2ZVtuYW1lXVxuICAgICAgICBjb25zdCBjb21tYW5kID0gdGhpcy5lZGl0b3IuY29tbWFuZHNbbmFtZV1cbiAgICAgICAgbGlzdC5wdXNoKHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGljb24sXG4gICAgICAgICAgaXNBY3RpdmU6IChcbiAgICAgICAgICAgIGlzQWN0aXZlPy4oYXR0cnMpICYmXG4gICAgICAgICAgICAoaWdub3JlQWN0aXZlID09IG51bGwgfHwgIWlnbm9yZUFjdGl2ZSgpKVxuICAgICAgICAgICksXG4gICAgICAgICAgb25DbGljazogKCkgPT4gb25DbGlja1xuICAgICAgICAgICAgPyBvbkNsaWNrKGNvbW1hbmQsIGF0dHJzKVxuICAgICAgICAgICAgOiBjb21tYW5kKGF0dHJzKVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuc2NoZW1hW3NldHRpbmdzTmFtZV1cbiAgICAgIGlmIChzZXR0aW5ncykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGRlc2NyaXB0aW9uXSBvZiBPYmplY3QuZW50cmllcyhkZXNjcmlwdGlvbnMpKSB7XG4gICAgICAgICAgY29uc3Qgc2V0dGluZ05hbWUgPSBbJ3VuZG8nLCAncmVkbyddLmluY2x1ZGVzKGtleSkgPyAnaGlzdG9yeScgOiBrZXlcbiAgICAgICAgICBjb25zdCBzZXR0aW5nID0gc2V0dGluZ3Nbc2V0dGluZ05hbWVdXG4gICAgICAgICAgY29uc3QgbmFtZSA9IHVuZGVyc2NvcmUoa2V5KVxuICAgICAgICAgIGNvbnN0IGljb24gPSBoeXBoZW5hdGUoa2V5KVxuICAgICAgICAgIGlmIChzZXR0aW5nKSB7XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgYWRkQnV0dG9uKHsgbmFtZSwgaWNvbiB9KVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkZXNjcmlwdGlvbikpIHtcbiAgICAgICAgICAgICAgY29uc3QgeyBhdHRyLCB2YWx1ZXMsIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9ID0gZGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgaWYgKGF0dHIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZXMpICYmIGlzQXJyYXkoc2V0dGluZykpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgaGVhZGluZyBsZXZlbCBhdHRyczpcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogYCR7aWNvbn0tJHt2YWx1ZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgW2F0dHJdOiB2YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkQnV0dG9uKHsgbmFtZSwgaWNvbiwgaWdub3JlQWN0aXZlLCBvbkNsaWNrIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfSxcblxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnNjcm9sbEludG9WaWV3Py4oKVxuICAgICAgdGhpcy5lZGl0b3IuZm9jdXMoKVxuICAgIH1cbiAgfVxufSlcblxuY2xhc3MgU21hbGwgZXh0ZW5kcyBNYXJrIHtcbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuICdzbWFsbCdcbiAgfVxuXG4gIGdldCBzY2hlbWEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlRE9NOiBbXG4gICAgICAgIHsgdGFnOiAnc21hbGwnIH1cbiAgICAgIF0sXG4gICAgICB0b0RPTTogKCkgPT4gWydzbWFsbCcsIDBdXG4gICAgfVxuICB9XG5cbiAgY29tbWFuZHMoeyB0eXBlIH0pIHtcbiAgICByZXR1cm4gKCkgPT4gdG9nZ2xlTWFyayh0eXBlKVxuICB9XG59XG5jbGFzcyBMaW5rV2l0aFRpdGxlIGV4dGVuZHMgTGluayB7XG4gIGdldCBzY2hlbWEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIGhyZWY6IHtcbiAgICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICAgIH0sXG4gICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgIHBhcnNlRE9NOiBbe1xuICAgICAgICB0YWc6ICdhJyxcbiAgICAgICAgZ2V0QXR0cnM6IGRvbSA9PiAoe1xuICAgICAgICAgIGhyZWY6IGRvbS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSxcbiAgICAgICAgICB0aXRsZTogZG9tLmdldEF0dHJpYnV0ZSgndGl0bGUnKVxuICAgICAgICB9KVxuICAgICAgfV0sXG4gICAgICB0b0RPTTogbm9kZSA9PiBbJ2EnLCBub2RlLmF0dHJzLCAwXVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLW11bHRpc2VsZWN0KFxuICA6Y2xhc3M9YHtcbiAgICAnZGl0by1tdWx0aXNlbGVjdC1zaW5nbGUnOiAhbXVsdGlwbGUsXG4gICAgJ2RpdG8tbXVsdGlzZWxlY3QtbXVsdGlwbGUnOiBtdWx0aXBsZVxuICB9YFxuKVxuICB2dWUtbXVsdGlzZWxlY3QoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOnNob3ctbGFiZWxzPVwiZmFsc2VcIlxuICAgIDpwbGFjZWhvbGRlcj1cInBsYWNlaG9sZGVyXCJcbiAgICB0YWctcGxhY2Vob2xkZXI9XCJQcmVzcyBlbnRlciB0byBhZGQgbmV3IHRhZ1wiLFxuICAgIDpvcHRpb25zPVwicG9wdWxhdGUgJiYgYWN0aXZlT3B0aW9ucyB8fCBbXVwiXG4gICAgOmN1c3RvbS1sYWJlbD1cImdldExhYmVsRm9yT3B0aW9uXCJcbiAgICA6dHJhY2stYnk9XCJvcHRpb25WYWx1ZVwiXG4gICAgOmdyb3VwLWxhYmVsPVwiZ3JvdXBCeUxhYmVsXCJcbiAgICA6Z3JvdXAtdmFsdWVzPVwiZ3JvdXBCeU9wdGlvbnNcIlxuICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICA6dGFnZ2FibGU9XCJ0YWdnYWJsZVwiXG4gICAgOnNlYXJjaGFibGU9XCJzZWFyY2hhYmxlXCJcbiAgICA6aW50ZXJuYWwtc2VhcmNoPVwiIXNlYXJjaEZpbHRlclwiXG4gICAgOnByZXNlcnZlLXNlYXJjaD1cIiEhc2VhcmNoRmlsdGVyXCJcbiAgICA6Y2xlYXItb24tc2VsZWN0PVwiIXNlYXJjaEZpbHRlclwiXG4gICAgOmNsb3NlLW9uLXNlbGVjdD1cIiFzdGF5T3BlblwiXG4gICAgOmxvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgIEBvcGVuPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICBAdGFnPVwib25BZGRUYWdcIlxuICAgIEBzZWFyY2gtY2hhbmdlPVwib25TZWFyY2hDaGFuZ2VcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLW11bHRpc2VsZWN0KFxuICAgIDpjbGFzcz1ge1xuICAgICAgJ2RpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlJzogIW11bHRpcGxlLFxuICAgICAgJ2RpdG8tbXVsdGlzZWxlY3QtbXVsdGlwbGUnOiBtdWx0aXBsZVxuICAgIH1gXG4gIClcbiAgICB2dWUtbXVsdGlzZWxlY3QoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIDpzaG93LWxhYmVscz1cImZhbHNlXCJcbiAgICAgIDpwbGFjZWhvbGRlcj1cInBsYWNlaG9sZGVyXCJcbiAgICAgIHRhZy1wbGFjZWhvbGRlcj1cIlByZXNzIGVudGVyIHRvIGFkZCBuZXcgdGFnXCIsXG4gICAgICA6b3B0aW9ucz1cInBvcHVsYXRlICYmIGFjdGl2ZU9wdGlvbnMgfHwgW11cIlxuICAgICAgOmN1c3RvbS1sYWJlbD1cImdldExhYmVsRm9yT3B0aW9uXCJcbiAgICAgIDp0cmFjay1ieT1cIm9wdGlvblZhbHVlXCJcbiAgICAgIDpncm91cC1sYWJlbD1cImdyb3VwQnlMYWJlbFwiXG4gICAgICA6Z3JvdXAtdmFsdWVzPVwiZ3JvdXBCeU9wdGlvbnNcIlxuICAgICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgICAgOnRhZ2dhYmxlPVwidGFnZ2FibGVcIlxuICAgICAgOnNlYXJjaGFibGU9XCJzZWFyY2hhYmxlXCJcbiAgICAgIDppbnRlcm5hbC1zZWFyY2g9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICAgIDpwcmVzZXJ2ZS1zZWFyY2g9XCIhIXNlYXJjaEZpbHRlclwiXG4gICAgICA6Y2xlYXItb24tc2VsZWN0PVwiIXNlYXJjaEZpbHRlclwiXG4gICAgICA6Y2xvc2Utb24tc2VsZWN0PVwiIXN0YXlPcGVuXCJcbiAgICAgIDpsb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICAgIEBvcGVuPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICAgIEB0YWc9XCJvbkFkZFRhZ1wiXG4gICAgICBAc2VhcmNoLWNoYW5nZT1cIm9uU2VhcmNoQ2hhbmdlXCJcbiAgICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICd2dWUtbXVsdGlzZWxlY3QvZGlzdC92dWUtbXVsdGlzZWxlY3QubWluLmNzcydcblxuICAkc3Bpbm5lci13aWR0aDogJHNlbGVjdC1hcnJvdy13aWR0aFxuICAkdGFnLWljb24td2lkdGg6IDEuOGVtXG4gICR0YWctbWFyZ2luOiAycHhcbiAgJHRhZy1wYWRkaW5nOiAzcHhcbiAgJHRhZy1saW5lLWhlaWdodDogMS4xZW1cblxuICAuZGl0by1tdWx0aXNlbGVjdFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gICAgLm11bHRpc2VsZWN0XG4gICAgICBmb250LXNpemU6IGluaGVyaXRcbiAgICAgIG1pbi1oZWlnaHQ6IGluaGVyaXRcbiAgICAgIGNvbG9yOiAkY29sb3ItYmxhY2tcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0XG4gICAgICBvdmVyZmxvdzogYXV0b1xuICAgICAgbWluLWhlaWdodDogaW5oZXJpdFxuICAgICAgcGFkZGluZzogMCAkc3Bpbm5lci13aWR0aCAwIDBcbiAgICAgIC8vIFNvIHRhZ3MgY2FuIGZsb2F0IG9uIG11bHRpcGxlIGxpbmVzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zOlxuICAgICAgcGFkZGluZy1ib3R0b206ICR0YWctbWFyZ2luXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZ1xuICAgICAgZmxvYXQ6IGxlZnRcbiAgICAgIG1hcmdpbjogJHRhZy1tYXJnaW4gMCAwICR0YWctbWFyZ2luXG4gICAgICBib3JkZXItcmFkaXVzOiAxZW1cbiAgICAgIHBhZGRpbmc6ICR0YWctcGFkZGluZyAkdGFnLWljb24td2lkdGggJHRhZy1wYWRkaW5nIDAuOGVtXG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuXG4gICAgLm11bHRpc2VsZWN0X190YWdzLXdyYXBcbiAgICAgIG92ZXJmbG93OiBhdXRvXG4gICAgICBsaW5lLWhlaWdodDogMFxuXG4gICAgLm11bHRpc2VsZWN0X19zaW5nbGUsXG4gICAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlcixcbiAgICAubXVsdGlzZWxlY3RfX2lucHV0XG4gICAgICBmb250LXNpemU6IGluaGVyaXRcbiAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0XG4gICAgICBtaW4taGVpZ2h0OiAwXG4gICAgICBtYXJnaW46IDAgMCAxcHggMFxuICAgICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBzdHlsZT1cInBhZGRpbmc6IC4uLjtcIiBpbiBhZGRpdGlvbiB0byB1c2luZ1xuICAgICAgLy8gY2xhc3Nlcywgc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nICFpbXBvcnRhbnRcbiAgICAgIC8vIFNvIGlucHV0IGNhbiBmbG9hdCBuZXh0IHRvIHRhZ3MgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnMgd2l0aFxuICAgICAgLy8gLm11bHRpc2VsZWN0X190YWdzOlxuICAgICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudFxuICAgICAgYmFja2dyb3VuZDogbm9uZVxuXG4gICAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlcixcbiAgICAubXVsdGlzZWxlY3RfX2lucHV0OjpwbGFjZWhvbGRlclxuICAgICAgY29sb3I6ICRjb2xvci1wbGFjZWhvbGRlclxuXG4gICAgLm11bHRpc2VsZWN0LS1hY3RpdmVcbiAgICAgIC5tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXJcbiAgICAgICAgLy8gRG9uJ3QgdXNlIGBkaXNwbGF5OiBub25lYCB0byBoaWRlIHBsYWNlLWhvbGRlciwgYXMgdGhlIGxheW91dCB3b3VsZFxuICAgICAgICAvLyBjb2xsYXBzZS5cbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlblxuXG4gICAgLm11bHRpc2VsZWN0X19zZWxlY3QsXG4gICAgLm11bHRpc2VsZWN0X19zcGlubmVyXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICAvLyAkYm9yZGVyLXdpZHRoIHRvIHByZXZlbnQgbWFza2luZyBib3JkZXIgd2l0aCAubXVsdGlzZWxlY3RfX3NwaW5uZXJcbiAgICAgIHRvcDogJGJvcmRlci13aWR0aFxuICAgICAgcmlnaHQ6ICRib3JkZXItd2lkdGhcbiAgICAgIGJvdHRvbTogJGJvcmRlci13aWR0aFxuICAgICAgaGVpZ2h0OiBpbmhlcml0XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuXG4gICAgLm11bHRpc2VsZWN0X19zZWxlY3RcbiAgICAgIHdpZHRoOiAwXG4gICAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoJHNlbGVjdC1hcnJvdy13aWR0aCAvIDIpXG4gICAgICAmOjpiZWZvcmVcbiAgICAgICAgK2Fycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSlcbiAgICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbVxuICAgICAgICByaWdodDogY2FsYygtMSAqICRzZWxlY3QtYXJyb3ctc2l6ZSAvIDIpXG5cbiAgICAubXVsdGlzZWxlY3RfX3NwaW5uZXJcbiAgICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aFxuICAgICAgJjo6YmVmb3JlLFxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gQ2hhbmdlIHRoZSB3aWR0aCBvZiB0aGUgbG9hZGluZyBzcGlubmVyXG4gICAgICAgIGJvcmRlci13aWR0aDogM3B4XG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgaW5zZXQ6IDBcbiAgICAgICAgbWFyZ2luOiBhdXRvXG5cbiAgICAubXVsdGlzZWxlY3RfX29wdGlvblxuICAgICAgbWluLWhlaWdodDogdW5zZXRcbiAgICAgIGhlaWdodDogdW5zZXRcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gdGV4dCBmb3Igb3B0aW9uc1xuICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudFxuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLm11bHRpc2VsZWN0X19vcHRpb24tLWRpc2FibGVkXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZy1pY29uXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICBib3JkZXItcmFkaXVzOiAxZW1cbiAgICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0XG4gICAgICBsaW5lLWhlaWdodDogMS40ZW1cbiAgICAgIHdpZHRoOiAkdGFnLWljb24td2lkdGhcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuICAgICAgICBmb250LXNpemU6IDEuM2VtXG4gICAgICAmOmhvdmVyOjphZnRlclxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHRcblxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1zZWxlY3RlZFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodFxuICAgICAgY29sb3I6ICRjb2xvci10ZXh0XG4gICAgICBmb250LXdlaWdodDogbm9ybWFsXG4gICAgICAmLm11bHRpc2VsZWN0X19vcHRpb24tLWhpZ2hsaWdodFxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnLFxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuXG4gICAgLm11bHRpc2VsZWN0X190YWdzLFxuICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG5cbiAgICAmLmRpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlXG4gICAgICAtLWlucHV0LXdpZHRoOiAxMDAlXG4gICAgJi5kaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlXG4gICAgICAtLWlucHV0LXdpZHRoOiBhdXRvXG5cbiAgICAubXVsdGlzZWxlY3QtLWFjdGl2ZVxuICAgICAgLm11bHRpc2VsZWN0X19zaW5nbGUsXG4gICAgICAubXVsdGlzZWxlY3RfX2lucHV0XG4gICAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgYHN0eWxlPVwid2lkdGhcImAgaW4gYWRkaXRpb24gdG8gdXNpbmcgY2xhc3Nlc1xuICAgICAgICAvLyBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgICB3aWR0aDogdmFyKC0taW5wdXQtd2lkdGgpICFpbXBvcnRhbnRcblxuICAgICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlXG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRib3JkZXItY29sb3JcbiAgICAgICAgbWFyZ2luOiAtMXB4IDAgMFxuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAgICYubXVsdGlzZWxlY3QtLWFib3ZlXG4gICAgICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMFxuICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwXG4gICAgICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmVcbiAgICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG4gICAgICAgICAgbWFyZ2luOiAwIDAgLTFweFxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMFxuICAgICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAmLmRpdG8taGFzLWVycm9yc1xuICAgICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWVycm9yXG5cbiAgICAuZGl0by1idXR0b24tY2xlYXJcbiAgICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5pbXBvcnQgVnVlTXVsdGlzZWxlY3QgZnJvbSAndnVlLW11bHRpc2VsZWN0J1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCAndnVlLW11bHRpc2VsZWN0L2Rpc3QvdnVlLW11bHRpc2VsZWN0Lm1pbi5jc3MnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdtdWx0aXNlbGVjdCcsIHtcbiAgY29tcG9uZW50czogeyBWdWVNdWx0aXNlbGVjdCB9LFxuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlYXJjaGVkT3B0aW9uczogbnVsbCxcbiAgICAgIHBvcHVsYXRlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkT3B0aW9uczoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKHRoaXMuc2VsZWN0ZWRWYWx1ZSB8fCBbXSlcbiAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgIC8vIElmIGFuIG9wdGlvbiBjYW5ub3QgYmUgZm91bmQsIHdlIG1heSBiZSBpbiB0YWdnYWJsZSBtb2RlIGFuZFxuICAgICAgICAgICAgICAvLyBjYW4gYWRkIGl0LlxuICAgICAgICAgICAgICB2YWx1ZSA9PiB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB8fCB0aGlzLmFkZFRhZ09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgb3B0aW9ucyB0aGF0IHdlIGNvdWxkbid0IG1hdGNoLlxuICAgICAgICAgICAgLy8gVE9ETzogV2UgcmVhbGx5IHNob3VsZCBkaXNwbGF5IGFuIGVycm9yIGluc3RlYWRcbiAgICAgICAgICAgIC5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICAgICAgOiB0aGlzLnNlbGVjdGVkT3B0aW9uXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIC8vIENvbnZlcnQgdmFsdWUgdG8gb3B0aW9ucyBvYmplY3QsIHNpbmNlIHZ1ZS1tdWx0aXNlbGVjdCBjYW4ndCBtYXAgdGhhdFxuICAgICAgICAvLyBpdHNlbGYgdW5mb3J0dW5hdGVseS4gYHRyYWNrLWJ5YCBpcyB1c2VkIGZvciA6a2V5IG1hcHBpbmcgaXQgc2VlbXMuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/IChvcHRpb24gfHwgW10pLm1hcCh2YWx1ZSA9PiB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKHZhbHVlKSlcbiAgICAgICAgICA6IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhY3RpdmVPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoZWRPcHRpb25zIHx8IHRoaXMub3B0aW9uc1xuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzZWFyY2hhYmxlOiBnZXRTY2hlbWFBY2Nlc3Nvcignc2VhcmNoYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgdGFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCd0YWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgc3RheU9wZW46IGdldFNjaGVtYUFjY2Vzc29yKCdzdGF5T3BlbicsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcGxhY2Vob2xkZXIoKSB7XG4gICAgICBjb25zdCB7IHBsYWNlaG9sZGVyLCBzZWFyY2hhYmxlLCB0YWdnYWJsZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiBwbGFjZWhvbGRlciB8fCAoXG4gICAgICAgIHNlYXJjaGFibGUgJiYgdGFnZ2FibGUgPyAnU2VhcmNoIG9yIGFkZCBhIHRhZydcbiAgICAgICAgOiBzZWFyY2hhYmxlID8gJ1NlbGVjdCBvciBzZWFyY2ggZW50cnknXG4gICAgICAgIDogdW5kZWZpbmVkXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgaWYgKHRoaXMuYXV0b2ZvY3VzKSB7XG4gICAgICAvLyB2dWUtbXVsdGlzZWxlY3QgZG9lc24ndCBzdXBwb3J0IHRoZSBhdXRvZm9jdXMgYXR0cmlidXRlLiBXZSBuZWVkIHRvXG4gICAgICAvLyBoYW5kbGUgaXQgaGVyZS5cbiAgICAgIHRoaXMuZm9jdXMoKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gQG92ZXJyaWRlXG4gICAgZ2V0TGlzdGVuZXJzKCkge1xuICAgICAgLy8gb3ZlcnJpZGUgYFR5cGVNaXhpbi5nZXRMaXN0ZW5lcnMoKWAgdG8gcmUtcm91dGUgJ2lucHV0JyB0byBgb25DaGFuZ2UoKWBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIGJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBpbnB1dDogdGhpcy5vbkNoYW5nZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhZGRUYWdPcHRpb24odGFnKSB7XG4gICAgICBpZiAodGhpcy50YWdnYWJsZSkge1xuICAgICAgICBjb25zdCB7IG9wdGlvbkxhYmVsLCBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgICBjb25zdCBvcHRpb24gPSBvcHRpb25MYWJlbCAmJiBvcHRpb25WYWx1ZVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgW29wdGlvbkxhYmVsXTogdGFnLFxuICAgICAgICAgICAgLy8gVE9ETzogRGVmaW5lIGEgc2ltcGxlIHNjaGVtYSBvcHRpb24gdG8gY29udmVydCB0aGUgdGFnIHZhbHVlIHRvXG4gICAgICAgICAgICAvLyBzb21ldGhpbmcgZWxzZSwgZS5nLiBgdG9UYWc6IHRhZyA9PiB1bmRlcnNjb3JlKHRhZylgXG4gICAgICAgICAgICBbb3B0aW9uVmFsdWVdOiB0YWdcbiAgICAgICAgICB9XG4gICAgICAgICAgOiB0YWdcbiAgICAgICAgdGhpcy5vcHRpb25zLnB1c2gob3B0aW9uKVxuICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJHJlZnMuZWxlbWVudC5hY3RpdmF0ZSgpXG4gICAgfSxcblxuICAgIG9uQWRkVGFnKHRhZykge1xuICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5hZGRUYWdPcHRpb24odGFnKVxuICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICB0aGlzLnZhbHVlLnB1c2godGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblNlYXJjaENoYW5nZShxdWVyeSkge1xuICAgICAgaWYgKHRoaXMuc2VhcmNoRmlsdGVyKSB7XG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgIC8vIFNldCBgc2VhcmNoZWRPcHRpb25zYCB0byBhbiBlbXB0eSBhcnJheSwgYmVmb3JlIGl0IHdpbGwgYmVcbiAgICAgICAgICAvLyBwb3B1bGF0ZWQgYXN5bmNocm9ub3VzbHkgd2l0aCB0aGUgYWN0dWFsIHJlc3VsdHMuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBbXVxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gYXdhaXQgdGhpcy5yZXNvbHZlRGF0YShcbiAgICAgICAgICAgICgpID0+IHRoaXMuc2VhcmNoRmlsdGVyKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHF1ZXJ5IH0pKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDbGVhciBgc2VhcmNoZWRPcHRpb25zYCB3aGVuIHRoZSBxdWVyeSBpcyBjbGVhcmVkLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgaW5wdXRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSAhPT0gbnVsbCA/IHRoaXMudmFsdWUgOiAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZSAhPT0gJydcbiAgICAgICAgICA/IHRoaXMuaXNJbnRlZ2VyID8gcGFyc2VJbnQodmFsdWUsIDEwKSA6IHBhcnNlRmxvYXQodmFsdWUpXG4gICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGlzSW50ZWdlcigpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzdGVwVmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGVwID09IG51bGwgJiYgIXRoaXMuaXNJbnRlZ2VyID8gJ2FueScgOiB0aGlzLnN0ZXBcbiAgICB9LFxuXG4gICAgZGVjaW1hbHM6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWNpbWFscycsIHtcbiAgICAgIHR5cGU6IE51bWJlclxuICAgIH0pLFxuXG4gICAgc3RlcDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0ZXAnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQoc3RlcCkge1xuICAgICAgICAvLyBGb3IgaW50ZWdlcnMsIHJvdW5kIHRoZSBzdGVwcyB0byB0aGUgbmV4dCBiaWdnZXIgaW50ZWdlciB2YWx1ZTpcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIHN0ZXAgIT0gbnVsbCA/IE1hdGguY2VpbChzdGVwKSA6IHN0ZXBcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1pbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ21pbicsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtaW4pIHtcbiAgICAgICAgbWluID0gbWluID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzBdXG4gICAgICAgICAgOiBtaW5cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1pbiAhPSBudWxsID8gTWF0aC5mbG9vcihtaW4pIDogbWluXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXg6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXgnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQobWF4KSB7XG4gICAgICAgIG1heCA9IG1heCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdyYW5nZScsIHsgdHlwZTogQXJyYXkgfSk/LlsxXVxuICAgICAgICAgIDogbWF4XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBtYXggIT0gbnVsbCA/IE1hdGguY2VpbChtYXgpIDogbWF4XG4gICAgICB9XG4gICAgfSksXG5cbiAgICByYW5nZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JhbmdlJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIGB0aGlzLm1pbmAsIGB0aGlzLm1heGAgYWxyZWFkeSBzdXBwb3J0IGBzY2hlbWEucmFuZ2VgLFxuICAgICAgICAvLyBzbyByZWRpcmVjdCB0aGVyZS5cbiAgICAgICAgY29uc3QgeyBtaW4sIG1heCB9ID0gdGhpc1xuICAgICAgICByZXR1cm4gbWluICE9IG51bGwgJiYgbWF4ICE9IG51bGwgPyBbbWluLCBtYXhdIDogdW5kZWZpbmVkXG4gICAgICB9LFxuXG4gICAgICBzZXQocmFuZ2UpIHtcbiAgICAgICAgLy8gUHJvdmlkZSBhIHNldHRlciB0aGF0IGRlbGVnYXRlcyB0byBgW3RoaXMubWluLCB0aGlzLm1heF1gLFxuICAgICAgICAvLyBzaW5jZSB0aG9zZSBhbHJlYWR5IGhhbmRsZSBgc2NoZW1hLnJhbmdlYC5cbiAgICAgICAgaWYgKGlzQXJyYXkocmFuZ2UpKSB7XG4gICAgICAgICAgW3RoaXMubWluLCB0aGlzLm1heF0gPSByYW5nZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHt9XG4gICAgICBjb25zdCB7IHJhbmdlLCBtaW4sIG1heCwgZGVjaW1hbHMsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yYW5nZSA9IHJhbmdlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobWluICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5taW4gPSBtaW5cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4ICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5tYXggPSBtYXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRlY2ltYWxzICE9IG51bGwpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgfSBlbHNlIGlmIChzdGVwKSB7XG4gICAgICAgIGNvbnN0IGRlY2ltYWxzID0gKGAke3N0ZXB9YC5zcGxpdCgnLicpWzFdIHx8ICcnKS5sZW5ndGhcbiAgICAgICAgaWYgKGRlY2ltYWxzID4gMCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmRlY2ltYWxzID0gZGVjaW1hbHNcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc0ludGVnZXIpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuaW50ZWdlciA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uc1xuICAgIH1cbiAgfVxufVxuIiwiXG5pbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgdHlwZT1cIm51bWJlclwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuICA6bWluPVwibWluXCJcbiAgOm1heD1cIm1heFwiXG4gIDpzdGVwPVwic3RlcFZhbHVlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB0eXBlPVwibnVtYmVyXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLy8gT25seSBzaG93IHNwaW4gYnV0dG9ucyBpZiB0aGUgbnVtYmVyIGNvbXBvbmVudCBkZWZpbmVzIGEgc3RlcCBzaXplLlxuICBpbnB1dFt0eXBlPVwibnVtYmVyXCJdOm5vdChbc3RlcF0pXG4gICAgJjo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgICAmOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uXG4gICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmVcbiAgICAgIG1hcmdpbjogMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWknXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnbnVtYmVyJywgJ2ludGVnZXInXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGlzSW50ZWdlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdpbnRlZ2VyJ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1vYmplY3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuKVxuICAuZGl0by1vYmplY3QtY29udGVudChcbiAgICB2LWlmPVwib2JqZWN0RGF0YVwiXG4gIClcbiAgICAvLyBTdXBwb3J0IHRoZSBzYW1lIHJlbmRlcmluZyBvcHRpb25zIGFzIFR5cGVMaXN0OlxuICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIG9iamVjdERhdGEsIGNvbnRleHQpXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIClcbiAgICBjb21wb25lbnQoXG4gICAgICB2LWVsc2UtaWY9XCJjb21wb25lbnRcIlxuICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KCkpXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZVxuICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgb2JqZWN0RGF0YSlcIlxuICAgIClcbiAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgOmRlbGV0YWJsZT1cIm9iamVjdERhdGEgJiYgZGVsZXRhYmxlXCJcbiAgICA6ZWRpdGFibGU9XCJvYmplY3REYXRhICYmIGVkaXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgOnBhdGg9XCJwYXRoXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShvYmplY3REYXRhKVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLW9iamVjdChcbiAgICB2LWlmPVwiaXNSZWFkeVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gICAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbiAgKVxuICAgIC5kaXRvLW9iamVjdC1jb250ZW50KFxuICAgICAgdi1pZj1cIm9iamVjdERhdGFcIlxuICAgIClcbiAgICAgIC8vIFN1cHBvcnQgdGhlIHNhbWUgcmVuZGVyaW5nIG9wdGlvbnMgYXMgVHlwZUxpc3Q6XG4gICAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgb2JqZWN0RGF0YSwgY29udGV4dClcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgIClcbiAgICAgIGNvbXBvbmVudChcbiAgICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoKSlcIlxuICAgICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1lbHNlXG4gICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIG9iamVjdERhdGEpXCJcbiAgICAgIClcbiAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgOmRlbGV0YWJsZT1cIm9iamVjdERhdGEgJiYgZGVsZXRhYmxlXCJcbiAgICAgIDplZGl0YWJsZT1cIm9iamVjdERhdGEgJiYgZWRpdGFibGVcIlxuICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDpwYXRoPVwicGF0aFwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0ob2JqZWN0RGF0YSlcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1vYmplY3RcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICBtYXJnaW46IDBcbiAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgIC5kaXRvLW9iamVjdC1jb250ZW50XG4gICAgICBmbGV4OiAwIDEgMTAwJVxuICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgZmxleDogMSAwIDAlXG4gICAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignb2JqZWN0Jywge1xuICBtaXhpbnM6IFtTb3VyY2VNaXhpbl0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgLy8gTm8gbmVlZCBmb3IgdHJhbnNmb3JtYXRpb24gaGVyZS4gU2VlIFR5cGVUcmVlTGlzdCBmb3IgZGV0YWlscy5cbiAgICByZXR1cm4gdHlwZVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IGRhdGE6IHRoaXMub2JqZWN0RGF0YSB9KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdwYW5lbCcsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gIG9taXRQYWRkaW5nOiB0cnVlLFxuXG4gIGdldFBhbmVsU2NoZW1hKHNjaGVtYSkge1xuICAgIC8vIEZvciBhIFR5cGVQYW5lbCwgdGhlIGNvbXBvbmVudCBzY2hlbWEgaXMgYWxzbyB0aGUgcGFuZWwgc2NoZW1hLCBidXRcbiAgICAvLyByZW1vdmUgdGhlIGFkZGVkIG5hbWUsIHNvIGl0IGRvZXNuJ3QgZ2V0IGFwcGVuZGVkIHR3aWNlIHRvIGRhdGEtcGF0aC5cbiAgICBjb25zdCB7IG5hbWUsIC4uLnBhbmVsIH0gPSBzY2hlbWFcbiAgICByZXR1cm4gcGFuZWxcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5wcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6dmFsdWU9XCJwcm9ncmVzc1ZhbHVlXCJcbiAgOm1heD1cInByb2dyZXNzTWF4XCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOnZhbHVlPVwicHJvZ3Jlc3NWYWx1ZVwiXG4gICAgOm1heD1cInByb2dyZXNzTWF4XCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncHJvZ3Jlc3MnLCB7XG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBwcm9ncmVzc1ZhbHVlKCkge1xuICAgICAgbGV0IHsgdmFsdWUsIHJhbmdlLCBzdGVwIH0gPSB0aGlzXG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgdmFsdWUgLT0gcmFuZ2VbMF1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcCkge1xuICAgICAgICAgIHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSAvIHN0ZXApICogc3RlcFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICcnXG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgcHJvZ3Jlc3NNYXgoKSB7XG4gICAgICBjb25zdCB7IHJhbmdlIH0gPSB0aGlzXG4gICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHJhbmdlWzFdIC0gcmFuZ2VbMF1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudWwuZGl0by1yYWRpby1idXR0b25zKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbilcbiAgbGkodi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiKVxuICAgIGxhYmVsXG4gICAgICBpbnB1dC5kaXRvLXJhZGlvLWJ1dHRvbihcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdWwuZGl0by1yYWRpby1idXR0b25zKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4gIClcbiAgICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgICBsYWJlbFxuICAgICAgICBpbnB1dC5kaXRvLXJhZGlvLWJ1dHRvbihcbiAgICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgICAgKVxuICAgICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1yYWRpby1idXR0b25zXG4gICAgbGFiZWxcbiAgICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3NcbiAgICAuZGl0by1yYWRpby1idXR0b25cbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdyYWRpbycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zZWN0aW9uKFxuICA6Y2xhc3M9XCJ7ICdkaXRvLXNlY3Rpb24tbGFiZWxsZWQnIDogISFzY2hlbWEubGFiZWwgfVwiXG4pXG4gIGRpdG8tcGFuZS5kaXRvLXNlY3Rpb24tcGFuZShcbiAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zZWN0aW9uKFxuICAgIDpjbGFzcz1cInsgJ2RpdG8tc2VjdGlvbi1sYWJlbGxlZCcgOiAhIXNjaGVtYS5sYWJlbCB9XCJcbiAgKVxuICAgIGRpdG8tcGFuZS5kaXRvLXNlY3Rpb24tcGFuZShcbiAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zZWN0aW9uXG4gICAgJi5kaXRvLXNlY3Rpb24tbGFiZWxsZWRcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmdcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0SXRlbUZvcm1TY2hlbWEsIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VjdGlvbicsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+ICFzY2hlbWEubmVzdGVkICYmICEoJ2RlZmF1bHQnIGluIHNjaGVtYSksXG4gIGRlZmF1bHROZXN0ZWQ6IGZhbHNlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcbiAgb21pdEZsZXhHcm93OiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMudmFsdWUgOiB0aGlzLmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEl0ZW1Gb3JtU2NoZW1hXG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCkge1xuICAgIC8vIFByb2Nlc3Mgc2VjdGlvbiBjb21wb25lbnRzIHNvIHRoZWlyIGZvcm1zIGdldCByZXNvbHZlZCB0b28uXG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwpXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuLmRpdG8tc2VsZWN0XG4gIHNlbGVjdChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIEBtb3VzZWRvd249XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIEBmb2N1cz1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJwb3B1bGF0ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICAgICAgKVxuICAgICAgICBvcHRncm91cChcbiAgICAgICAgICB2LWlmPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgOmxhYmVsPVwib3B0aW9uW2dyb3VwQnlMYWJlbF1cIlxuICAgICAgICApXG4gICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgdi1mb3I9XCJvcHQgaW4gb3B0aW9uW2dyb3VwQnlPcHRpb25zXVwiXG4gICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHQpXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdCkgfX1cbiAgICAgICAgb3B0aW9uKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZWxzZS1pZj1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICApXG4gICAgICBvcHRpb24oXG4gICAgICAgIDp2YWx1ZT1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihzZWxlY3RlZE9wdGlvbikgfX1cbiAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuICAuZGl0by1zZWxlY3RcbiAgICBzZWxlY3QoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICBAbW91c2Vkb3duPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICAgIEBmb2N1cz1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJwb3B1bGF0ZVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgb3B0Z3JvdXAoXG4gICAgICAgICAgICB2LWlmPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgICA6bGFiZWw9XCJvcHRpb25bZ3JvdXBCeUxhYmVsXVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgICB2LWZvcj1cIm9wdCBpbiBvcHRpb25bZ3JvdXBCeU9wdGlvbnNdXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0KVwiXG4gICAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdCkgfX1cbiAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICAgIClcbiAgICAgICAgb3B0aW9uKFxuICAgICAgICAgIDp2YWx1ZT1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKHNlbGVjdGVkT3B0aW9uKSB9fVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC8vIFRPRE86IE1vdmUgdG8gZGl0by11aVxuICAkc2VsZWN0LWFycm93LXJpZ2h0OiBjYWxjKCgkc2VsZWN0LWFycm93LXdpZHRoIC0gJHNlbGVjdC1hcnJvdy1zaXplKSAvIDIpXG5cbiAgLmRpdG8tc2VsZWN0XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG5cbiAgICBzZWxlY3RcbiAgICAgIHBhZGRpbmctcmlnaHQ6ICRzZWxlY3QtYXJyb3ctd2lkdGhcblxuICAgIC8vIEhhbmRsZSAuZGl0by13aWR0aC1maWxsIHNlcGFyYXRlbHkgZHVlIHRvIHJlcXVpcmVkIG5lc3Rpbmcgb2Ygc2VsZWN0OlxuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICBzZWxlY3RcbiAgICAgICAgd2lkdGg6IDEwMCVcblxuICAgICY6OmFmdGVyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICthcnJvdygkc2VsZWN0LWFycm93LXNpemUpXG4gICAgICBib3R0b206ICRzZWxlY3QtYXJyb3ctYm90dG9tXG4gICAgICByaWdodDogY2FsYygjeyRzZWxlY3QtYXJyb3ctcmlnaHR9ICsgI3skYm9yZGVyLXdpZHRofSlcblxuICAgICYuZGl0by1kaXNhYmxlZDo6YWZ0ZXJcbiAgICAgIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzZWxlY3QnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gRGlzYWJsZSBsYXp5LXBvcHVsYXRpb24gZm9yIG5vdy5cbiAgICAgIC8vIFRPRE86IFNldCB0byBgZmFsc2VgIE9uY2UgbGluZXRvIGUyZSB0ZXN0cyBhZGRyZXNzIHRoZWlyIGlzc3Vlcy5cbiAgICAgIHBvcHVsYXRlOiB0cnVlXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXNsaWRlclxuICBpbnB1dC5kaXRvLXJhbmdlKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB0eXBlPVwicmFuZ2VcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbiAgaW5wdXQtZmllbGQuZGl0by1udW1iZXIoXG4gICAgdi1pZj1cImlucHV0XCJcbiAgICB0eXBlPVwibnVtYmVyXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zbGlkZXJcbiAgICBpbnB1dC5kaXRvLXJhbmdlKFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICB0eXBlPVwicmFuZ2VcIlxuICAgICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIDptaW49XCJtaW5cIlxuICAgICAgOm1heD1cIm1heFwiXG4gICAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gICAgKVxuICAgIGlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICAgICAgdi1pZj1cImlucHV0XCJcbiAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIDptaW49XCJtaW5cIlxuICAgICAgOm1heD1cIm1heFwiXG4gICAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXNsaWRlclxuICAgIEBleHRlbmQgJWlucHV0XG4gICAgZGlzcGxheTogZmxleFxuICAgIC5kaXRvLXJhbmdlXG4gICAgICBmbGV4OiBhdXRvXG4gICAgICBoZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpKVxuICAgIC5kaXRvLW51bWJlclxuICAgICAgYm9yZGVyOiAwXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICB0ZXh0LWFsaWduOiByaWdodFxuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2xpZGVyJywge1xuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGlucHV0OiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuc3dpdGNoLWJ1dHRvbi5kaXRvLXN3aXRjaChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnN5bmM9XCJ0cnVlXCJcbiAgOmxhYmVscz1cImxhYmVsc1wiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHN3aXRjaC1idXR0b24uZGl0by1zd2l0Y2goXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpzeW5jPVwidHJ1ZVwiXG4gICAgOmxhYmVscz1cImxhYmVsc1wiXG4gICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXN3aXRjaFxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IFN3aXRjaEJ1dHRvbiB9IGZyb20gJ0BkaXRvanMvdWknXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzd2l0Y2gnLCB7XG4gIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBTd2l0Y2hCdXR0b25cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5sYWJlbHNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuaW5wdXQtZmllbGQuZGl0by10ZXh0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6dHlwZT1cImlucHV0VHlwZVwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQtZmllbGQuZGl0by10ZXh0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6dHlwZT1cImlucHV0VHlwZVwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpJ1xuXG5jb25zdCBtYXNrZWRQYXNzd29yZCA9ICcqKioqKioqKioqKioqKioqJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ3RleHQnLCAnZW1haWwnLCAndXJsJywgJ2hvc3RuYW1lJywgJ2RvbWFpbicsICd0ZWwnLCAncGFzc3dvcmQnLCAnY3JlZGl0Y2FyZCdcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gc2NoZW1hLnR5cGUgPT09ICdwYXNzd29yZCcsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpbnB1dFR5cGUoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjcmVkaXRjYXJkOiAndGV4dCcsXG4gICAgICAgIGhvc3RuYW1lOiAndGV4dCcsXG4gICAgICAgIGRvbWFpbjogJ3RleHQnXG4gICAgICB9W3RoaXMudHlwZV0gfHwgdGhpcy50eXBlXG4gICAgfSxcblxuICAgIGlucHV0VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB0aGlzLnR5cGUgPT09ICdwYXNzd29yZCcgJiZcbiAgICAgICAgICB0aGlzLnZhbHVlID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAhdGhpcy5mb2N1c2VkXG4gICAgICAgIClcbiAgICAgICAgICA/IG1hc2tlZFBhc3N3b3JkXG4gICAgICAgICAgOiB0aGlzLnZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHJ1bGUgPSB7XG4gICAgICAgIGVtYWlsOiAnZW1haWwnLFxuICAgICAgICB1cmw6ICd1cmwnLFxuICAgICAgICBob3N0bmFtZTogJ2hvc3RuYW1lJyxcbiAgICAgICAgZG9tYWluOiAnZG9tYWluJyxcbiAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZCcsXG4gICAgICAgIGNyZWRpdGNhcmQ6ICdjcmVkaXRjYXJkJ1xuICAgICAgfVt0aGlzLnR5cGVdXG4gICAgICByZXR1cm4gcnVsZSA/IHsgW3J1bGVdOiB0cnVlIH0gOiB7fVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG50ZXh0YXJlYS5kaXRvLXRleHRhcmVhLmRpdG8taW5wdXQoXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgOnJvd3M9XCJsaW5lc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tcmVzaXphYmxlJzogcmVzaXphYmxlIH1cIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdGV4dGFyZWEuZGl0by10ZXh0YXJlYS5kaXRvLWlucHV0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDpyb3dzPVwibGluZXNcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tcmVzaXphYmxlJzogcmVzaXphYmxlIH1cIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tdGV4dGFyZWFcbiAgICBkaXNwbGF5OiBibG9ja1xuICAgIHJlc2l6ZTogbm9uZVxuICAgIG1pbi1oZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpICsgI3sgMiAqICRpbnB1dC1wYWRkaW5nLXZlciB9KVxuICAgICYuZGl0by1yZXNpemFibGVcbiAgICAgIHJlc2l6ZTogdmVydGljYWxcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3RleHRhcmVhJywge1xuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgNFxuICAgIH0sXG5cbiAgICByZXNpemFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXNpemFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXRyZWUtbGlzdFxuICBkaXRvLXNjb3BlcyhcbiAgICB2LWlmPVwic2NvcGVzXCJcbiAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gIClcbiAgLmRpdG8tdHJlZS1wYW5lbFxuICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgOnNjaGVtYT1cInRyZWVTY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwidHJlZURhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwidHJlZURhdGFcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6b3Blbj1cInRydWVcIlxuICAgIClcbiAgICAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyKFxuICAgICAgdi1pZj1cImhhc0VkaXRhYmxlRm9ybXNcIlxuICAgIClcbiAgICAgIC8vIEluY2x1ZGUgYSByb3V0ZXItdmlldyBmb3IgdGhlIG9wdGlvbmFsIERpdG9Gb3JtSW5saW5lZFxuICAgICAgcm91dGVyLXZpZXdcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRyZWUtbGlzdFxuICAgIGRpdG8tc2NvcGVzKFxuICAgICAgdi1pZj1cInNjb3Blc1wiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgICApXG4gICAgLmRpdG8tdHJlZS1wYW5lbFxuICAgICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICAgIDpzY2hlbWE9XCJ0cmVlU2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwidHJlZURhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJ0cmVlRGF0YVwiXG4gICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICA6b3Blbj1cInRydWVcIlxuICAgICAgKVxuICAgICAgLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lcihcbiAgICAgICAgdi1pZj1cImhhc0VkaXRhYmxlRm9ybXNcIlxuICAgICAgKVxuICAgICAgICAvLyBJbmNsdWRlIGEgcm91dGVyLXZpZXcgZm9yIHRoZSBvcHRpb25hbCBEaXRvRm9ybUlubGluZWRcbiAgICAgICAgcm91dGVyLXZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by10cmVlLWxpc3RcbiAgICBAZXh0ZW5kICVmaWVsZFxuICAgIC5kaXRvLXRyZWUtcGFuZWxcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgICAgPiAuZGl0by10cmVlLWl0ZW1cbiAgICAgICAgZmxleDogMSAxIDI1JVxuICAgICAgPiAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyXG4gICAgICAgIGZsZXg6IDAgMSA3NSVcbiAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaFxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDFcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMVxuICAgICAgICBtYXJnaW46ICgtJGlucHV0LXBhZGRpbmctdmVyKSAoLSRpbnB1dC1wYWRkaW5nLWhvcilcbiAgICAgICAgbWFyZ2luLWxlZnQ6ICRpbnB1dC1wYWRkaW5nLWhvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgaGFzRm9ybVNjaGVtYSwgZ2V0Rm9ybVNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAndHJlZS1saXN0JywgJ3RyZWUtb2JqZWN0J1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7IGNvbnRhaW5lcjogdGhpcyB9XG4gIH0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgPT09ICd0cmVlLW9iamVjdCcgPyAnb2JqZWN0JyA6ICdsaXN0J1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGF0aCgpIHtcbiAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5wYXRoYDpcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LnBhdGhcbiAgICB9LFxuXG4gICAgZWRpdFBhdGgoKSB7XG4gICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIuZWRpdFBhdGhgOlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGguc2xpY2UodGhpcy5wYXRoPy5sZW5ndGgpXG4gICAgfSxcblxuICAgIHRyZWVEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgID8geyBbdGhpcy5uYW1lXTogdGhpcy52YWx1ZSB9XG4gICAgICAgIDogdGhpcy52YWx1ZVxuICAgIH0sXG5cbiAgICB0cmVlRGF0YVBhdGgoKSB7XG4gICAgICAvLyBSZW1vdmUgYG5hbWVgIGZyb20gYGRhdGFQYXRoYCwgYXMgaXQgaXMgYWRkZWVkXG4gICAgICAvLyB0byBgdHJlZURhdGFgIGFuZCBgdHJlZVNjaGVtYWBcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHRoaXMuZGF0YVBhdGguc2xpY2UoMCwgdGhpcy5kYXRhUGF0aC5sZW5ndGggLSB0aGlzLm5hbWUubGVuZ3RoKVxuICAgICAgICA6IHRoaXMuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgdHJlZVNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHtcbiAgICAgICAgICBjaGlsZHJlbjoge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgLi4udGhpcy5zY2hlbWFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgOiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBoYXNFZGl0YWJsZUZvcm1zKCkge1xuICAgICAgY29uc3QgaGFzRWRpdGFibGVGb3JtcyA9IHNjaGVtYSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmIChcbiAgICAgICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2VkaXRhYmxlJywge1xuICAgICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgc2NoZW1hXG4gICAgICAgICAgICB9KSB8fFxuICAgICAgICAgICAgc2NoZW1hLmNoaWxkcmVuICYmXG4gICAgICAgICAgICBoYXNFZGl0YWJsZUZvcm1zKHNjaGVtYS5jaGlsZHJlbilcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNFZGl0YWJsZUZvcm1zKHRoaXMuc2NoZW1hKVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgIG5lc3RlZCA9IHRydWUsIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgICAgbmVzdGVkLCBmbGF0dGVuLFxuICAgICAgLy8gUGFzcyBwcm9jZXNzKCkgdG8gYWRkIG1vcmUgcm91dGVzIHRvIGNoaWxkUm91dGVzOlxuICAgICAgKGNoaWxkUm91dGVzLCBsZXZlbCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgLy8gQWRkIGB0eXBlYCB0byB0aGUgbmVzdGVkIHRyZWUgbGlzdC5cbiAgICAgICAgICBjaGlsZHJlbi50eXBlID0gJ3RyZWUtbGlzdCdcbiAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2NoZW1hKFxuICAgICAgICAgICAgYXBpLCBjaGlsZHJlbiwgY2hpbGRyZW4ubmFtZSwgY2hpbGRSb3V0ZXMsIGxldmVsLFxuICAgICAgICAgICAgbmVzdGVkLCB0cnVlLCAvLyBQYXNzIGB0cnVlYCBmb3IgYGZsYXR0ZW5gIGluIHRyZWUgbGlzdHMuXG4gICAgICAgICAgICBwcm9jZXNzXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuICB9LFxuXG4gIGdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyhzY2hlbWEsIGNvbnRleHQpIHtcbiAgICAvLyBDb252ZXJ0IG5lc3RlZCBjaGlsZHJlbiBzY2hlbWEgdG8gc3RhbmQtYWxvbmUgc2NoZW1hIGNvbXBvbmVudCxcbiAgICAvLyBwcmVzZW50IGluIGVhY2ggb2YgdGhlIGZvcm1zLCBhcyByZXF1aXJlZCBieSBgcHJvY2Vzc1NjaGVtYURhdGEoKWBcbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICByZXR1cm4gZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0LCBjaGlsZHJlblxuICAgICAgPyBmb3JtID0+ICh7XG4gICAgICAgIC4uLmZvcm0sXG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAuLi5mb3JtLmNvbXBvbmVudHMsXG4gICAgICAgICAgW2NoaWxkcmVuLm5hbWVdOiBjaGlsZHJlblxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgOiBudWxsXG4gICAgKVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgZmlsZXNpemUgZnJvbSAnZmlsZXNpemUnXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRGaWxlU2l6ZShzaXplKSB7XG4gIHJldHVybiBmaWxlc2l6ZShzaXplLCB7IGJhc2U6IDEwIH0pXG59XG4iLCJcbi5kaXRvLXVwbG9hZFxuICB0YWJsZS5kaXRvLXRhYmxlLmRpdG8tdGFibGUtc2VwYXJhdG9ycy5kaXRvLXRhYmxlLWJhY2tncm91bmRcbiAgICAvLy0gU3R5bGluZyBjb21lcyBmcm9tIERpdG9UYWJsZUhlYWRcbiAgICB0aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgICAgIHRyXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBOYW1lXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBTaXplXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBTdGF0dXNcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuXG4gICAgdnVlLWRyYWdnYWJsZShcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgOmxpc3Q9XCJmaWxlc1wiXG4gICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCIoZmlsZSwgaW5kZXgpIGluIGZpbGVzXCJcbiAgICAgICAgOmtleT1cImZpbGUua2V5XCJcbiAgICAgIClcbiAgICAgICAgdGQodi1odG1sPVwicmVuZGVyRmlsZShmaWxlLCBpbmRleClcIilcbiAgICAgICAgdGQge3sgZmlsZS5zaXplIHwgZm9ybWF0RmlsZVNpemUgfX1cbiAgICAgICAgdGRcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWRcIilcbiAgICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJmaWxlLnVwbG9hZC5lcnJvclwiKVxuICAgICAgICAgICAgICB8IEVycm9yOiB7eyBmaWxlLnVwbG9hZC5lcnJvciB9fVxuICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuYWN0aXZlXCIpXG4gICAgICAgICAgICAgIHwgVXBsb2FkaW5nLi4uXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5zdWNjZXNzXCIpXG4gICAgICAgICAgICAgIHwgVXBsb2FkZWRcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UpXG4gICAgICAgICAgICB8IFN0b3JlZFxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zXG4gICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiZGVsZXRlRmlsZShmaWxlLCBpbmRleClcIlxuICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICAgICAgKVxuICAgIHRmb290XG4gICAgICB0clxuICAgICAgICB0ZCg6Y29sc3Bhbj1cIjRcIilcbiAgICAgICAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICAgICAgICBwcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICA6dmFsdWU9XCJ1cGxvYWRQcm9ncmVzc1wiXG4gICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICkgQ2FuY2VsIEFsbFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiaXNVcGxvYWRSZWFkeVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICkgVXBsb2FkIEFsbFxuICAgICAgICAgICAgICB2dWUtdXBsb2FkLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWFkZC11cGxvYWQoXG4gICAgICAgICAgICAgICAgOmlucHV0LWlkPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICAgIDpuYW1lPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICA6cG9zdC1hY3Rpb249XCJ1cGxvYWRQYXRoXCJcbiAgICAgICAgICAgICAgICA6ZXh0ZW5zaW9ucz1cImV4dGVuc2lvbnNcIlxuICAgICAgICAgICAgICAgIDphY2NlcHQ9XCJhY2NlcHRcIlxuICAgICAgICAgICAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICA6c2l6ZT1cIm1heFNpemVcIlxuICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1cGxvYWRzXCJcbiAgICAgICAgICAgICAgICBAaW5wdXQtZmlsdGVyPVwiaW5wdXRGaWx0ZXJcIlxuICAgICAgICAgICAgICAgIEBpbnB1dC1maWxlPVwiaW5wdXRGaWxlXCJcbiAgICAgICAgICAgICAgICByZWY9XCJ1cGxvYWRcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwiVXBsb2FkIEZpbGVzXCJcbiAgICAgICAgICAgICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdXBsb2FkXG4gICAgdGFibGUuZGl0by10YWJsZS5kaXRvLXRhYmxlLXNlcGFyYXRvcnMuZGl0by10YWJsZS1iYWNrZ3JvdW5kXG4gICAgICAvLy0gU3R5bGluZyBjb21lcyBmcm9tIERpdG9UYWJsZUhlYWRcbiAgICAgIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgICAgICB0clxuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuIE5hbWVcbiAgICAgICAgICB0aFxuICAgICAgICAgICAgc3BhbiBTaXplXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW4gU3RhdHVzXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW5cbiAgICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICAgIDpsaXN0PVwiZmlsZXNcIlxuICAgICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgICAgKVxuICAgICAgICB0cihcbiAgICAgICAgICB2LWZvcj1cIihmaWxlLCBpbmRleCkgaW4gZmlsZXNcIlxuICAgICAgICAgIDprZXk9XCJmaWxlLmtleVwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZCh2LWh0bWw9XCJyZW5kZXJGaWxlKGZpbGUsIGluZGV4KVwiKVxuICAgICAgICAgIHRkIHt7IGZpbGUuc2l6ZSB8IGZvcm1hdEZpbGVTaXplIH19XG4gICAgICAgICAgdGRcbiAgICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJmaWxlLnVwbG9hZFwiKVxuICAgICAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWQuZXJyb3JcIilcbiAgICAgICAgICAgICAgICB8IEVycm9yOiB7eyBmaWxlLnVwbG9hZC5lcnJvciB9fVxuICAgICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5hY3RpdmVcIilcbiAgICAgICAgICAgICAgICB8IFVwbG9hZGluZy4uLlxuICAgICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5zdWNjZXNzXCIpXG4gICAgICAgICAgICAgICAgfCBVcGxvYWRlZFxuICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgICAgICB8IFN0b3JlZFxuICAgICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnNcbiAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICAgICAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cImRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICAgICAgICApXG4gICAgICB0Zm9vdFxuICAgICAgICB0clxuICAgICAgICAgIHRkKDpjb2xzcGFuPVwiNFwiKVxuICAgICAgICAgICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgICAgICAgICBwcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgOnZhbHVlPVwidXBsb2FkUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKSBDYW5jZWwgQWxsXG4gICAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiaXNVcGxvYWRSZWFkeVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IHRydWVcIlxuICAgICAgICAgICAgICAgICkgVXBsb2FkIEFsbFxuICAgICAgICAgICAgICAgIHZ1ZS11cGxvYWQuZGl0by1idXR0b24uZGl0by1idXR0b24tYWRkLXVwbG9hZChcbiAgICAgICAgICAgICAgICAgIDppbnB1dC1pZD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICAgIDpuYW1lPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgOnBvc3QtYWN0aW9uPVwidXBsb2FkUGF0aFwiXG4gICAgICAgICAgICAgICAgICA6ZXh0ZW5zaW9ucz1cImV4dGVuc2lvbnNcIlxuICAgICAgICAgICAgICAgICAgOmFjY2VwdD1cImFjY2VwdFwiXG4gICAgICAgICAgICAgICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgICA6c2l6ZT1cIm1heFNpemVcIlxuICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInVwbG9hZHNcIlxuICAgICAgICAgICAgICAgICAgQGlucHV0LWZpbHRlcj1cImlucHV0RmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgIEBpbnB1dC1maWxlPVwiaW5wdXRGaWxlXCJcbiAgICAgICAgICAgICAgICAgIHJlZj1cInVwbG9hZFwiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIlVwbG9hZCBGaWxlc1wiXG4gICAgICAgICAgICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXVwbG9hZFxuICAgIC5kaXRvLXRhYmxlXG4gICAgICB0clxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlXG4gICAgLmRpdG8tYnV0dG9uLWFkZC11cGxvYWRcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgID4gKlxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZFxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlclxuICAgICAgLmRpdG8tcHJvZ3Jlc3NcbiAgICAgICAgZmxleDogYXV0b1xuICAgICAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IE9yZGVyZWRNaXhpbiBmcm9tICcuLi9taXhpbnMvT3JkZXJlZE1peGluLmpzJ1xuaW1wb3J0IFZ1ZVVwbG9hZCBmcm9tICd2dWUtdXBsb2FkLWNvbXBvbmVudCdcbmltcG9ydCBWdWVEcmFnZ2FibGUgZnJvbSAndnVlZHJhZ2dhYmxlJ1xuaW1wb3J0IHBhcnNlRmlsZVNpemUgZnJvbSAnZmlsZXNpemUtcGFyc2VyJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGZvcm1hdEZpbGVTaXplIH0gZnJvbSAnLi4vdXRpbHMvdW5pdHMuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBlc2NhcGVIdG1sIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3VwbG9hZCcsIHtcbiAgY29tcG9uZW50czogeyBWdWVVcGxvYWQsIFZ1ZURyYWdnYWJsZSB9LFxuICBmaWx0ZXJzOiB7IGZvcm1hdEZpbGVTaXplIH0sXG4gIG1peGluczogW09yZGVyZWRNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBsb2FkczogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB1cGxvYWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy51cGxvYWRcbiAgICB9LFxuXG4gICAgZmlsZXMoKSB7XG4gICAgICByZXR1cm4gYXNGaWxlcyh0aGlzLnZhbHVlKVxuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gTm8gY2FsbGJhY2sgYXMgaXQncyB1c2VkIGluIGBwcm9jZXNzVmFsdWUoKWBcbiAgICAgIGNhbGxiYWNrOiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZXh0ZW5zaW9uczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4dGVuc2lvbnMnLCB7XG4gICAgICB0eXBlOiBbQXJyYXksIFN0cmluZywgUmVnRXhwXVxuICAgIH0pLFxuXG4gICAgYWNjZXB0OiBnZXRTY2hlbWFBY2Nlc3NvcignYWNjZXB0Jywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoYWNjZXB0KSB7XG4gICAgICAgIHJldHVybiBpc0FycmF5KGFjY2VwdCkgPyBhY2NlcHQuam9pbignLCcpIDogYWNjZXB0XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXhTaXplOiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4U2l6ZScsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBnZXQobWF4U2l6ZSkge1xuICAgICAgICByZXR1cm4gbWF4U2l6ZSA/IHBhcnNlRmlsZVNpemUobWF4U2l6ZSkgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIGRyYWdnYWJsZSAmJiB0aGlzLmZpbGVzLmxlbmd0aCA+IDFcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgaXNVcGxvYWRSZWFkeSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZHMubGVuZ3RoICYmXG4gICAgICAgICEodGhpcy51cGxvYWQuYWN0aXZlIHx8IHRoaXMudXBsb2FkLnVwbG9hZGVkKVxuICAgIH0sXG5cbiAgICBpc1VwbG9hZEFjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZHMubGVuZ3RoICYmIHRoaXMudXBsb2FkLmFjdGl2ZVxuICAgIH0sXG5cbiAgICB1cGxvYWRQcm9ncmVzcygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMudXBsb2Fkcy5yZWR1Y2UoKHRvdGFsLCBmaWxlKSA9PiB0b3RhbCArIGZpbGUucHJvZ3Jlc3MsIDApIC9cbiAgICAgICAgdGhpcy51cGxvYWRzLmxlbmd0aFxuICAgICAgKVxuICAgIH0sXG5cbiAgICB1cGxvYWRQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VVcmwoe1xuICAgICAgICB0eXBlOiAndXBsb2FkJyxcbiAgICAgICAgcGF0aDogdGhpcy5hcGkubm9ybWFsaXplUGF0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbmRlckZpbGUoZmlsZSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgcmVuZGVyIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHJlbmRlclxuICAgICAgICA/IHJlbmRlci5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIHZhbHVlOiBmaWxlLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5maWxlcyxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgZGF0YVBhdGg6IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgOiBlc2NhcGVIdG1sKGZpbGUubmFtZSlcbiAgICB9LFxuXG4gICAgZGVsZXRlRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgY29uc3QgeyBuYW1lIH0gPSBmaWxlXG5cbiAgICAgIGlmIChmaWxlICYmIHdpbmRvdy5jb25maXJtKFxuICAgICAgICBgRG8geW91IHJlYWxseSB3YW50IHRvICR7dGhpcy52ZXJicy5yZW1vdmV9ICR7bmFtZX0/YClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbGUudXBsb2FkKSB7XG4gICAgICAgICAgdGhpcy51cGxvYWQucmVtb3ZlKGZpbGUudXBsb2FkKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICAgIHRleHQ6IGAke25hbWV9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRGaWxlSW5kZXgoZmlsZSkge1xuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgJiYgdGhpcy52YWx1ZVxuICAgICAgICA/IHRoaXMudmFsdWUuZmluZEluZGV4KGl0ID0+IGl0LmlkID09PSBmaWxlLmlkKVxuICAgICAgICA6IC0xXG4gICAgfSxcblxuICAgIGFkZEZpbGUoZmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goZmlsZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gW2ZpbGVdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBmaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlcGxhY2VGaWxlKGZpbGUsIG5ld0ZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRGaWxlSW5kZXgoZmlsZSlcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBpZiAobmV3RmlsZSkge1xuICAgICAgICAgICAgdGhpcy4kc2V0KHRoaXMudmFsdWUsIGluZGV4LCBuZXdGaWxlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXdGaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbW92ZUZpbGUoZmlsZSkge1xuICAgICAgdGhpcy5yZXBsYWNlRmlsZShmaWxlLCBudWxsKVxuICAgIH0sXG5cbiAgICBpbnB1dEZpbGUobmV3RmlsZSwgb2xkRmlsZSkge1xuICAgICAgaWYgKG5ld0ZpbGUgJiYgIW9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBpZCwgbmFtZSwgc2l6ZSB9ID0gbmV3RmlsZVxuICAgICAgICB0aGlzLmFkZEZpbGUoeyBpZCwgbmFtZSwgc2l6ZSwgdXBsb2FkOiBuZXdGaWxlIH0pXG4gICAgICB9XG4gICAgICBpZiAobmV3RmlsZSAmJiBvbGRGaWxlKSB7XG4gICAgICAgIGNvbnN0IHsgc3VjY2VzcywgZXJyb3IgfSA9IG5ld0ZpbGVcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgICBjb25zdCBmaWxlID0gbmV3RmlsZS5yZXNwb25zZVswXVxuICAgICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgICBmaWxlLnVwbG9hZCA9IG5ld0ZpbGVcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIHVwbG9hZCBmaWxlIG9iamVjdCB3aXRoIHRoZSBmaWxlIG9iamVjdCByZWNlaXZlZFxuICAgICAgICAgICAgLy8gZnJvbSB0aGUgdXBsb2FkIHJlc3BvbnNlLlxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlRmlsZShuZXdGaWxlLCBmaWxlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUobmV3RmlsZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zdCB0ZXh0ID0ge1xuICAgICAgICAgICAgYWJvcnQ6ICdVcGxvYWQgYWJvcnRlZCcsXG4gICAgICAgICAgICBkZW5pZWQ6ICdVcGxvYWQgZGVuaWVkJyxcbiAgICAgICAgICAgIGV4dGVuc2lvbjogYFVuc3VwcG9ydGVkIGZpbGUtdHlwZTogJHtuZXdGaWxlLm5hbWV9YCxcbiAgICAgICAgICAgIG5ldHdvcms6ICdOZXR3b3JrIGVycm9yIGVuY291bnRlcmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgc2VydmVyOiAnU2VydmVyIGVycm9yIG9jY3VycmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgc2l6ZTogYEZpbGUgaXMgdG9vIGxhcmdlOiAke2Zvcm1hdEZpbGVTaXplKG5ld0ZpbGUuc2l6ZSl9YCxcbiAgICAgICAgICAgIHRpbWVvdXQ6ICdUaW1lb3V0IG9jY3VycmVkIGR1cmluZyB1cGxvYWQnXG5cbiAgICAgICAgICB9W2Vycm9yXSB8fCBgVW5rbm93biBGaWxlIFVwbG9hZCBFcnJvcjogJyR7ZXJyb3J9J2BcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdGaWxlIFVwbG9hZCBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0XG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUobmV3RmlsZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBpbnB1dEZpbHRlcihuZXdGaWxlLyosIG9sZEZpbGUsIHByZXZlbnQgKi8pIHtcbiAgICAgIGNvbnN0IHhociA9IG5ld0ZpbGU/LnhoclxuICAgICAgaWYgKHRoaXMuYXBpLmNvcnM/LmNyZWRlbnRpYWxzICYmIHhociAmJiAheGhyLndpdGhDcmVkZW50aWFscykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgIC8vIEZpbHRlciBvdXQgYWxsIG5ld2x5IGFkZGVkIGZpbGVzIHRoYXQgd2VyZW4ndCBhY3R1YWxseSB1cGxvYWRlZC5cbiAgICBjb25zdCBmaWxlcyA9IGFzRmlsZXModmFsdWUpXG4gICAgICAubWFwKFxuICAgICAgICAoeyB1cGxvYWQsIC4uLmZpbGUgfSkgPT4gIXVwbG9hZCB8fCB1cGxvYWQuc3VjY2VzcyA/IGZpbGUgOiBudWxsXG4gICAgICApXG4gICAgICAuZmlsdGVyKGZpbGUgPT4gZmlsZSlcbiAgICByZXR1cm4gc2NoZW1hLm11bHRpcGxlID8gZmlsZXMgOiBmaWxlc1swXSB8fCBudWxsXG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGFzRmlsZXModmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID8gYXNBcnJheSh2YWx1ZSkgOiBbXVxufVxuXG48L3NjcmlwdD5cbiIsImV4cG9ydCBkZWZhdWx0IFtcbiAgJ2NyZWF0ZScsICdjcmVhdGVkJyxcbiAgJ3NhdmUnLCAnc2F2ZWQnLFxuICAnc3VibWl0JywgJ3N1Ym1pdHRlZCcsXG4gICdkZWxldGUnLCAnZGVsZXRlZCcsXG4gICdlZGl0JywgJ2VkaXRlZCcsXG4gICdjbG9zZScsICdjbG9zZWQnLFxuICAnY2FuY2VsJywgJ2NhbmNlbGxlZCcsXG4gICdkcmFnJywgJ2RyYWdnZWQnXG5dLnJlZHVjZSgodmVyYnMsIHZlcmIpID0+IHtcbiAgdmVyYnNbdmVyYl0gPSB2ZXJiXG4gIHJldHVybiB2ZXJic1xufSwge30pXG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBWdWVNb2RhbCBmcm9tICd2dWUtanMtbW9kYWwnXG5pbXBvcnQgVnVlUm91dGVyIGZyb20gJ3Z1ZS1yb3V0ZXInXG5pbXBvcnQgVnVlTm90aWZpY2F0aW9ucyBmcm9tICd2dWUtbm90aWZpY2F0aW9uJ1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xuaW1wb3J0IHtcbiAgaXNTdHJpbmcsIGlzQWJzb2x1dGVVcmwsIG1lcmdlLCBoeXBoZW5hdGUsIGNhbWVsaXplLCBkZWZhdWx0Rm9ybWF0c1xufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgY29tcG9uZW50cyBmcm9tICcuL2NvbXBvbmVudHMvaW5kZXguanMnXG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuL3R5cGVzL2luZGV4LmpzJ1xuaW1wb3J0IERpdG9Sb290IGZyb20gJy4vY29tcG9uZW50cy9EaXRvUm9vdC52dWUnXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSB9IGZyb20gJy4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgdmVyYnMgZnJvbSAnLi92ZXJicy5qcydcblxuVnVlLmNvbmZpZy5wcm9kdWN0aW9uVGlwID0gZmFsc2VcblxuLy8gQWxsIGdsb2JhbCBwbHVnaW5zIHRoYXQgbmVlZCB0byBiZSByZWdpc3RlcmVkIG9uIGBWdWVgOlxuVnVlLnVzZShWdWVSb3V0ZXIpXG5WdWUudXNlKFZ1ZU1vZGFsLCB7IGR5bmFtaWM6IHRydWUgfSlcblZ1ZS51c2UoVnVlTm90aWZpY2F0aW9ucylcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0FkbWluIHtcbiAgY29uc3RydWN0b3IoZWwsIHtcbiAgICAvLyBgZGl0b2AgY29udGFpbnMgdGhlIGJhc2UgYW5kIGFwaSBzZXR0aW5ncyBwYXNzZWQgZnJvbSBgQWRtaW5Db250cm9sbGVyYFxuICAgIGRpdG8gPSB7fSxcbiAgICBhcGksXG4gICAgdmlld3MgPSB7fSxcbiAgICAuLi5vcHRpb25zXG4gIH0gPSB7fSkge1xuICAgIHRoaXMuZWwgPSBlbFxuICAgIC8vIE1lcmdlIGluIGBhcGlgIHNldHRpbmdzIGFzIHBhc3NlZCBmcm9tIGBjb25maWcuYWRtaW5gIGFuZCB0aHJvdWdoIHRoZVxuICAgIC8vIGBBZG1pbkNvbnRyb2xsZXJgIHdpdGggYGFwaWAgdmFsdWVzIGZyb20gZnJvbSAnYWRtaW4vaW5kZXguanMnXG4gICAgLy8gTk9URTogYEFkbWluQ29udHJvbGxlcmAgcHJvdmlkZXMgYGRpdG8uYXBpLmJhc2VgXG4gICAgdGhpcy5hcGkgPSBhcGkgPSBtZXJnZSh7IGJhc2U6ICcvJyB9LCBkaXRvLmFwaSwgYXBpKVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcblxuICAgIC8vIFNldHVwIGRlZmF1bHQgYXBpIHNldHR0aW5nczpcbiAgICBhcGkubG9jYWxlIHx8PSAnZW4tVVMnXG5cbiAgICBhcGkuZm9ybWF0cyA9IG1lcmdlKHt9LCBkZWZhdWx0Rm9ybWF0cywgYXBpLmZvcm1hdHMpXG5cbiAgICBhcGkucmVxdWVzdCB8fD0gb3B0aW9ucyA9PiB0aGlzLnJlcXVlc3Qob3B0aW9ucylcblxuICAgIC8vIFNldHRpbmcgYGFwaS5ub3JtYWxpemVQYXRocyA9IHRydWUgKHBsdXJhbCkgc2V0cyBib3RoOlxuICAgIC8vIGBhcGkubm9ybWFsaXplUGF0aCA9IGh5cGhlbmF0ZWAgYW5kIGBhcGkuZGVub3JtYWxpemVQYXRoID0gY2FtZWxpemVgXG4gICAgYXBpLm5vcm1hbGl6ZVBhdGggPSAoXG4gICAgICBhcGkubm9ybWFsaXplUGF0aCB8fFxuICAgICAgYXBpLm5vcm1hbGl6ZVBhdGhzXG4gICAgICAgID8gaHlwaGVuYXRlXG4gICAgICAgIDogdmFsID0+IHZhbFxuICAgIClcbiAgICBhcGkuZGVub3JtYWxpemVQYXRoID0gKFxuICAgICAgYXBpLmRlbm9ybWFsaXplUGF0aCB8fFxuICAgICAgYXBpLm5vcm1hbGl6ZVBhdGhzXG4gICAgICAgID8gY2FtZWxpemVcbiAgICAgICAgOiB2YWwgPT4gdmFsXG4gICAgKVxuXG4gICAgLy8gQWxsb3cgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYWxsIGF1dGggcmVzb3VyY2VzLCBsaWtlIHNvOlxuICAgIC8vIGFwaS51c2VycyA9IHtcbiAgICAvLyAgIHBhdGg6ICcvYWRtaW5zJyxcbiAgICAvLyAgIC8vIFRoZXNlIGFyZSB0aGUgZGVmYXVsdHM6XG4gICAgLy8gICBsb2dpbjoge1xuICAgIC8vICAgICBwYXRoOiAnbG9naW4nLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIGxvZ291dDoge1xuICAgIC8vICAgICBwYXRoOiAnbG9nb3V0JyxcbiAgICAvLyAgICAgbWV0aG9kOiAncG9zdCdcbiAgICAvLyAgIH0sXG4gICAgLy8gICBzZXNzaW9uOiB7XG4gICAgLy8gICAgIHBhdGg6ICdzZXNzaW9uJyxcbiAgICAvLyAgICAgbWV0aG9kOiAnZ2V0J1xuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICBjb25zdCB1c2VycyA9IGFwaS51c2VycyA9IGdldFJlc291cmNlKGFwaS51c2Vycywge1xuICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nXG4gICAgfSkgfHwge31cbiAgICB1c2Vycy5sb2dpbiA9IGdldFJlc291cmNlKHVzZXJzLmxvZ2luIHx8ICdsb2dpbicsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMubG9nb3V0ID0gZ2V0UmVzb3VyY2UodXNlcnMubG9nb3V0IHx8ICdsb2dvdXQnLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIHVzZXJzLnNlc3Npb24gPSBnZXRSZXNvdXJjZSh1c2Vycy5zZXNzaW9uIHx8ICdzZXNzaW9uJywge1xuICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuXG4gICAgLy8gQWxsb3cgb3ZlcnJpZGluZyBvZiByZXNvdXJjZSBwYXRoIGhhbmRsZXJzOlxuICAgIC8vIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgLy8gICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgLy8gICAgIHJldHVybiByZXNvdXJjZS5wYXJlbnRcbiAgICAvLyAgICAgICA/IGAke3Jlc291cmNlLnBhdGh9PyR7cmVzb3VyY2UucGFyZW50LnBhdGh9X2lkPSR7XG4gICAgLy8gICAgICAgICAgcmVzb3VyY2UucGFyZW50LmlkfWBcbiAgICAvLyAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICBhcGkucmVzb3VyY2VzID0ge1xuICAgICAgYW55KHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzW3Jlc291cmNlPy50eXBlXSB8fCB0aGlzLmRlZmF1bHRcbiAgICAgICAgcmV0dXJuIHJlc291cmNlICYmIGhhbmRsZXIuY2FsbCh0aGlzLCByZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIGRlZmF1bHQocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgcGFyZW50UGF0aCA9IHRoaXMuYW55KHJlc291cmNlLnBhcmVudClcbiAgICAgICAgcmV0dXJuIHBhcmVudFBhdGhcbiAgICAgICAgICA/IGAke3BhcmVudFBhdGh9LyR7cmVzb3VyY2UucGF0aH1gXG4gICAgICAgICAgOiByZXNvdXJjZS5wYXRoXG4gICAgICB9LFxuXG4gICAgICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHQocmVzb3VyY2UpXG4gICAgICB9LFxuXG4gICAgICBtZW1iZXIocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gTk9URTogV2UgYXNzdW1lIHRoYXQgYWxsIG1lbWJlcnMgaGF2ZSByb290LWxldmVsIGNvbGxlY3Rpb24gcm91dGVzLFxuICAgICAgICAvLyB0byBhdm9pZCBleGNlc3NpdmUgbmVzdGluZyBvZiAoc3ViLSljb2xsZWN0aW9uIHJvdXRlcy5cbiAgICAgICAgcmV0dXJuIGAke3Jlc291cmNlLnBhdGh9LyR7cmVzb3VyY2UuaWR9YFxuICAgICAgfSxcblxuICAgICAgdXBsb2FkKHJlc291cmNlKSB7XG4gICAgICAgIC8vIERpdG8gU2VydmVyIGhhbmRsZXMgdXBsb2FkIHJvdXRlcyBvbiB0aGUgY29sbGVjdGlvbiByZXNvdXJjZTpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29sbGVjdGlvbihyZXNvdXJjZS5wYXJlbnQpfS91cGxvYWQvJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgIH0sXG5cbiAgICAgIC4uLmFwaS5yZXNvdXJjZXNcbiAgICB9XG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIC8gZXh0ZW5kaW5nIG9mIGhlYWRlcnM6XG4gICAgLy8gYXBpLmhlYWRlcnMgPSB7XG4gICAgLy8gICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgLy8gfVxuICAgIGFwaS5oZWFkZXJzID0ge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIC4uLmFwaS5oZWFkZXJzXG4gICAgfVxuXG4gICAgYXBpLmlzQXBpUmVxdWVzdCA9IGFwaS5pc0FwaVJlcXVlc3QgfHwgZnVuY3Rpb24odXJsKSB7XG4gICAgICByZXR1cm4gIWlzQWJzb2x1dGVVcmwodXJsKSB8fCB1cmwuc3RhcnRzV2l0aChhcGkudXJsKVxuICAgIH1cblxuICAgIGlmIChpc1N0cmluZyhlbCkpIHtcbiAgICAgIGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbClcbiAgICB9XG5cbiAgICB0aGlzLnJvb3QgPSBuZXcgVnVlKHtcbiAgICAgIGVsLFxuICAgICAgcm91dGVyOiBuZXcgVnVlUm91dGVyKHtcbiAgICAgICAgbW9kZTogJ2hpc3RvcnknLFxuICAgICAgICBiYXNlOiBkaXRvLmJhc2UsXG4gICAgICAgIGxpbmtBY3RpdmVDbGFzczogJycsXG4gICAgICAgIGxpbmtFeGFjdEFjdGl2ZUNsYXNzOiAnJ1xuICAgICAgfSksXG4gICAgICBjb21wb25lbnRzOiB7IERpdG9Sb290IH0sXG4gICAgICAvLyBNb3N0IGluamVjdHMgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZSByZWFjdGl2ZW5lc3MgYWNyb3NzXG4gICAgICAvLyBwcm92aWRlL2luamVjdCwgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgICBwcm92aWRlOiB7XG4gICAgICAgIGFwaSxcbiAgICAgICAgLy8gQSBkZWZhdWx0IGxpc3Qgb2YgdmVyYnMgYXJlIHByb3ZpZGVkIGJ5ICR2ZXJicygpIGFuZCBjYW4gYmVcbiAgICAgICAgLy8gb3ZlcnJpZGRlbiBhdCBhbnkgcG9pbnQgaW4gdGhlIGNvbXBvbmVudCBoaWVyYXJjaHkuXG4gICAgICAgICR2ZXJiczogKCkgPT4gdmVyYnMsXG4gICAgICAgIC8vIFByb3ZpZGUgZGVmYXVsdHMgc28gRGl0b01peGluIGNhbiBpbmplY3QgdGhlbSBmb3IgYWxsIGNvbXBvbmVudHM6XG4gICAgICAgIC8vICAgaW5qZWN0OiBbICAnJGlzUG9wdWxhdGVkJywgJyRzY2hlbWFDb21wb25lbnQnLCAnJHJvdXRlQ29tcG9uZW50JyBdXG4gICAgICAgICR2aWV3czogKCkgPT4ge30sXG4gICAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdHJ1ZSxcbiAgICAgICAgJHNjaGVtYUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNjaGVtYVBhcmVudENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGF0YUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHJlbmRlcjogY3JlYXRlRWxlbWVudCA9PiBjcmVhdGVFbGVtZW50KERpdG9Sb290LCB7XG4gICAgICAgIC8vIFByZXNlcnZlIHRoZSByb290IGNvbnRhaW5lcidzIGlkLCBhcyByZXF1aXJlZCBieSBob3QtcmVsb2FkaW5nOlxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGlkOiBlbC5pZFxuICAgICAgICB9LFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIHVucmVzb2x2ZWRWaWV3czogdmlld3MsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICB9LFxuICAgICAgICAvLyBUaGlzIG1heSBvbmx5IGJlIG5lZWRlZCB0byBhdm9pZCB0cmVlLXNoYWNraW5nIG9mIHRoZXNlIGNvbXBvbmVudHMsXG4gICAgICAgIC8vIHNpbmNlIHRoZXkgYWN0dWFsbHkgaGFuZGxlIHJlZ2lzdHJ5IGludGVybmFsbHkgYWxyZWFkeS5cbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIC4uLmNvbXBvbmVudHMsXG4gICAgICAgICAgLi4udHlwZXNcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgcmVnaXN0ZXIodHlwZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKHR5cGUsIG9wdGlvbnMpXG4gIH1cblxuICByZXF1ZXN0KHtcbiAgICB1cmwsXG4gICAgbWV0aG9kID0gJ2dldCcsXG4gICAgZGF0YSA9IG51bGwsXG4gICAgcGFyYW1zID0gbnVsbCxcbiAgICBoZWFkZXJzID0gbnVsbFxuICB9KSB7XG4gICAgY29uc3QgaXNBcGlSZXF1ZXN0ID0gdGhpcy5hcGkuaXNBcGlSZXF1ZXN0KHVybClcbiAgICByZXR1cm4gYXhpb3MucmVxdWVzdCh7XG4gICAgICB1cmwsXG4gICAgICBtZXRob2QsXG4gICAgICBwYXJhbXMsXG4gICAgICAuLi4oZGF0YSAmJiB7IGRhdGEgfSksXG4gICAgICBiYXNlVVJMOiBpc0FwaVJlcXVlc3QgPyB0aGlzLmFwaS51cmwgOiBudWxsLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAuLi4oaXNBcGlSZXF1ZXN0ICYmIHRoaXMuYXBpLmhlYWRlcnMpLFxuICAgICAgICAuLi5oZWFkZXJzXG4gICAgICB9LFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiBpc0FwaVJlcXVlc3QgJiYgISF0aGlzLmFwaS5jb3JzPy5jcmVkZW50aWFsc1xuICAgIH0pXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJwYXJzZURhdGFQYXRoIiwibm9ybWFsaXplRGF0YVBhdGgiLCJpc0ludGVnZXIiLCJnZXRWYWx1ZUF0RGF0YVBhdGgiLCJpc0Z1bmN0aW9uIiwiaXNBcnJheSIsImlzUGxhaW5PYmplY3QiLCJpc0Jvb2xlYW4iLCJpc051bWJlciIsImlzU3RyaW5nIiwiaXNEYXRlIiwiaXNPYmplY3QiLCJpc1JlZ0V4cCIsImFzQXJyYXkiLCJwaWNrQnkiLCJ1aWQiLCJsYWJlbGl6ZSIsImVxdWFscyIsImZvcm1hdCIsImh5cGhlbmF0ZSIsImlzQ3JlZGl0Q2FyZCIsImlzRW1haWwiLCJpc0hvc3RuYW1lIiwiaXNEb21haW4iLCJpc1VybCIsIm5hbm9pZCIsImlzUHJvbWlzZSIsImlzTW9kdWxlIiwiY2xvbmUiLCJWdWUiLCJjYW1lbGl6ZSIsImNvbXBvbmVudHMiLCJnZXRDb21tb25QcmVmaXgiLCJyZW5kZXIiLCJzdGF0aWNSZW5kZXJGbnMiLCJfX3Z1ZTJfc2NyaXB0IiwiYWRkRXZlbnRzIiwic3RyaXBUYWdzIiwiVHJhbnNpdGlvbkhlaWdodCIsImNhcGl0YWxpemUiLCJkZWluZGVudCIsIm1lcmdlIiwiUGFnaW5hdGlvbiIsIlZ1ZURyYWdnYWJsZSIsImVzY2FwZUh0bWwiLCJUeXBlQ29tcG9uZW50IiwiZGVib3VuY2VBc3luYyIsIkNvZGVGbGFzayIsIlRyaWdnZXIiLCJTa2V0Y2hQaWNrZXIiLCJ0aW55Y29sb3IiLCJEYXRlUGlja2VyIiwiVGltZVBpY2tlciIsIkRhdGVUaW1lUGlja2VyIiwiRWRpdG9yQ29udGVudCIsIkVkaXRvck1lbnVCYXIiLCJJY29uIiwiZGVib3VuY2UiLCJFZGl0b3IiLCJCb2xkIiwiSXRhbGljIiwiVW5kZXJsaW5lIiwiU3RyaWtlIiwiQ29kZSIsIkJsb2NrcXVvdGUiLCJDb2RlQmxvY2siLCJIYXJkQnJlYWsiLCJIZWFkaW5nIiwiSG9yaXpvbnRhbFJ1bGUiLCJMaXN0SXRlbSIsIkJ1bGxldExpc3QiLCJPcmRlcmVkTGlzdCIsIkhpc3RvcnkiLCJ1bmRlcnNjb3JlIiwiTWFyayIsInRvZ2dsZU1hcmsiLCJMaW5rIiwiVnVlTXVsdGlzZWxlY3QiLCJJbnB1dEZpZWxkIiwiU3dpdGNoQnV0dG9uIiwiZmlsZXNpemUiLCJWdWVVcGxvYWQiLCJwYXJzZUZpbGVTaXplIiwiVnVlUm91dGVyIiwiVnVlTW9kYWwiLCJWdWVOb3RpZmljYXRpb25zIiwiZGVmYXVsdEZvcm1hdHMiLCJpc0Fic29sdXRlVXJsIiwiYXhpb3MiXSwibWFwcGluZ3MiOiI0bEVBQWUsR0FBQSxDQUNiLE1BQU8sR0FDUCxnQkFBaUIsQ0FBRSxFQUNuQixLQUFNLEtBQ04sVUFBVyxDQUFFLEVBQ2IsWUFBYSxLQUNiLGNBQWUsSUFDakIsRUNITyxXQUF3QixFQUFVLEVBQU8sQ0FDOUMsTUFBTyxHQUNILEdBQUcsS0FBWSxJQUNmLENBQ04sQ0FFTyxZQUE2QixFQUFVLENBQzVDLEtBQU0sR0FBT0EsRUFBYSxjQUFDLENBQVEsRUFDbkMsa0JBQU0sTUFDQyxDQUNULENBTU8sWUFBMkIsRUFBVSxFQUFTLEdBQU8sQ0FDMUQsTUFBTyxHQUFTLEdBQW9CLENBQVEsRUFBSUEsRUFBQUEsY0FBYyxDQUFRLENBQ3hFLENBRU8sWUFBeUIsRUFBVSxFQUFTLEdBQU8sQ0FDeEQsTUFBT0MscUJBQWtCLEdBQWtCLEVBQVUsQ0FBTSxDQUFDLENBQzlELENBRU8sWUFBaUMsRUFBVSxFQUFTLEdBQU8sQ0FDaEUsS0FBTSxHQUFPLEdBQWtCLEVBQVUsQ0FBTSxFQUMvQyxHQUFJLEVBQU0sQ0FHUixHQUFJLEdBQ0osRUFDRSxHQUFRLEVBQUssSUFBSyxRQUNYLEdBQVMsTUFBUUMsWUFBVSxDQUFDLENBQUssR0FFMUMsR0FBSSxHQUFTLEtBQ1gsTUFBTyxFQUVWLENBQ0QsTUFBTyxLQUNULENBRU8sWUFBK0IsRUFBVSxFQUFTLEdBQU8sQ0FDOUQsTUFBT0QscUJBQWtCLEdBQXdCLEVBQVUsQ0FBTSxDQUFDLENBQ3BFLENBRU8sWUFBaUIsRUFBVSxFQUFVLEVBQVMsR0FBTyxDQUMxRCxLQUFNLEdBQU8sR0FBa0IsRUFBVSxDQUFNLEVBQy9DLE1BQU8sR0FBT0UsRUFBa0IsbUJBQUMsRUFBVSxDQUFJLEVBQUksSUFDckQsQ0FFTyxZQUF1QixFQUFVLEVBQVUsRUFBUyxHQUFPLENBQ2hFLEtBQU0sR0FBTyxHQUF3QixFQUFVLENBQU0sRUFDckQs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LEVBQUUsQ0FBQyxFQUFFLEVBQUcsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ2xwQkMsR0FBa0IsQ0FBQSxRQ21EdEIsS0FBQUMsSUFBQSxFQUFBLFVBQUEsWUFBQSxDQUNBLE9BQUEsQ0FBQSxDQUFBLEVBRUEsU0FBQSxDQUNBLE1BQUEsQ0FDQSxPQUFBLElBQUEsS0FBQSxhQUNBLENBQ0EsRUFFQSxNQUFBLENBQ0EsZ0JBQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxTQUFBLE9BQUEsRUFBQSxTQUFBLEVBQUEsRUFDQSxRQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQSxFQUFBLEVBQUEsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLENBQ0EsY0FBQSxDQUFBLEVBQ0EsV0FBQSxHQUNBLGFBQUEsQ0FDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLGVBQUEsQ0FDQSxNQUFBLE1BQUEsTUFBQSxhQUNBLEVBRUEsV0FBQSxDQUNBLE1BQUEsTUFBQSxhQUFBLENBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxLQUFBLFNBQUEsTUFBQSxTQUFBLE9BQUEsZ0JBR0EsS0FBQSxTQUFBLGdCQUFBLENBQUEsQ0FDQSxPQUVBLFVBQUEsQ0FHQSxLQUFBLE1BQUEsU0FBQSxDQUNBLE1BQUEsR0FBQSxDQUNBLEFBQUEsRUFBQSxPQUFBLFFBQUEsYUFBQSxHQUNBLE1BQUEsU0FBQSxZQUFBLEtBRUEsRUFFQSxNQUFBLEdBQUEsQ0FDQSxBQUFBLEVBQUEsT0FBQSxPQUNBLE1BQUEsU0FBQSxZQUFBLEtBRUEsQ0FDQSxDQUFBLEVBQ0EsR0FBQSxDQUNBLEtBQUEsV0FBQSxHQUNBLEFBQUEsS0FBQSxNQUFBLFlBQ0EsS0FBQSxNQUFBLGFBQUEsRUFFQSxLQUFBLE1BQUEsTUFBQSxDQUVBLE9BQUEsRUFBQSxDQUNBLFFBQUEsTUFBQSxDQUFBLENBQ0EsQ0FDQSxLQUFBLFdBQUEsRUFDQSxFQUVBLFFBQUEsQ0FDQSxPQUFBLENBQUEsT0FBQSxPQUFBLFFBQUEsUUFBQSxHQUFBLENBQ0EsTUFBQSxDQUNBLFFBQUEsVUFDQSxNQUFBLFFBQ0EsS0FBQSxjQUNBLFFBQUEsU0FDQSxFQUFBLElBQUEsZ0JBQ0EsRUFBQSxNQUNBdEIsRUFBQUEsUUFBQSxDQUFBLEVBQUEsS0FBQSxVQUFBLFFBQ0EsUUFBQSxjQUFBLE1BQUEsRUFDQSxLQUFBLEdBQUEsQ0FDQSxRQUFBLE9BQ0EsTUFBQSxRQUNBLEtBQUEsTUFDQSxRQUFBLEtBQ0EsRUFBQSxJQUFBLFFBRUEsUUFBQSxHQUFBd0IsRUFBQSxVQUFBLENBQUEsQ0FBQSxFQUNBLEtBQUEsQ0FBQSxnQkFBQSxJQUFBLEtBQUEsSUFDQSxHQUFBLEVBQUEsQ0FLQSxLQUFBLENBQUEsaUJBQUEsSUFBQSxFQUNBLEVBQUEsSUFBQSxFQUFBLE9BQUEsRUFBQSxRQUFBLEVBQ0EsS0FBQSxRQUFBLENBQUEsT0FBQSxRQUFBLE9BQUEsV0FBQSxDQUNBLENBQ0EsRUFFQSxvQkFBQSxDQUNBLEtBQUEsY0FBQSxXQUFBLENBQ0EsRUFFQSxnQkFBQSxFQUFBLENBQ0EsS0FBQSxjQUFBLEVBQUEsRUFBQSxFQUNBLE9BRUEsUUFBQSxTQUNBLEtBQUEsV0FBQSxHQUNBLEtBQUEsQ0FDQSx1QkFDQSxzQkFDQSxLQUFBLFFBQUEsT0FBQSxDQUFBLEVBQ0EsRUFBQSxLQUFBLE1BQUEsV0FBQSxDQUNBLFdBQUEsR0FDQSxTQUFBLENBQ0EsS0FBQSxPQUNBLFVBQUEsRUFDQSxFQUNBLFNBQUEsQ0FDQSxLQUFBLFVBQ0EsR0FDQSxHQUVBLFFBQUEsQ0FDQSxPQUFBLENBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxRQUFBLENBQ0EsQ0FDQSxDQUFBLEVBQ0EsR0FBQSxFQUNBLEdBQUEsQ0FDQSxLQUFBLEdBQUEsS0FBQSxNQUFBLFlBQUEsQ0FDQSxTQUFBLEtBQUEsSUFBQSxNQUFBLE1BQ0EsS0FBQSxFQUNBLFNBQUEsRUFDQSxDQUFBLEVBQ0EsQUFBQSxFQUNBLFNBQUEsUUFBQSxDQUFBLEVBRUEsTUFBQSxRQUFBLEVBQUEsS0FBQSxJQUFBLEVBQ0EsS0FBQSxNQUFBLGFBQUEsRUFFQSxPQUFBLEVBQUEsQ0FDQSxLQUFBLEdBQUEsUUFBQSxXQUFBLGNBQUEsT0FBQSxjQUFBLE1BQ0EsS0FBQSxPQUFBLENBQ0EsS0FBQSxRQUNBLE1BQUEsdUJBQ0EsS0FBQSxHQUFBLENBQ0EsQ0FBQSxFQUNBLEdBQ0EsUUFBQSxNQUFBLEVBQUEsRUFBQSxRQUFBLEVBRUEsS0FBQSxNQUFBLENBQ0EsQ0FFQSxFQUVBLGNBQUEsQ0FDQSxNQUFBLE1BQUEsU0FBQSxHQUFBLENBQ0EsT0FFQSxTQUFBLENBQ0EsR0FBQSxDQUtBLEFBQUEsQUFKQSxNQUFBLE1BQUEsWUFBQSxDQUNBLFNBQUEsS0FBQSxJQUFBLE1BQUEsT0FDQSxTQUFBLEVBQ0EsQ0FBQSxHQUNBLEtBQUEsU0FDQSxNQUFBLFFBQUEsSUFBQSxFQUNBLEtBQUEsYUFBQSxFQUVBLE9BQUEsRUFBQSxDQUNBLFFBQUEsTUFBQSxDQUFBLENBQ0EsQ0FDQSxPQUVBLFlBQUEsQ0FDQSxHQUFBLEdBQUEsS0FDQSxHQUFBLENBS0EsRUFBQSxBQUpBLE1BQUEsTUFBQSxZQUFBLENBQ0EsU0FBQSxLQUFBLElBQUEsTUFBQSxRQUNBLFNBQUEsRUFDQSxDQUFBLEdBQ0EsS0FBQSxNQUFBLElBQ0EsT0FBQSxFQUFBLENBQ0EsS0FBQSxPQUFBLENBQ0EsS0FBQSxRQUNBLE1BQUEsdUJBQ0EsS0FBQSxDQUNBLENBQUEsQ0FDQSxDQUNBLFlBQUEsUUFBQSxDQUFBLEVBQ0EsQ0FDQSxFQUVBLFFBQUEsRUFBQSxDQUNBLEtBQUEsU0FBQSxLQUNBLEdBQ0EsT0FBQSxlQUFBLEVBQUEsR0FBQSxTQUFBLEVBR0EsR0FDQSxNQUFBLGNBQUEsQ0FBQSxFQUNBLEtBQUEsYUFBQSxFQUVBLE9BRUEsYUFBQSxDQUNBLEFBQUEsS0FBQSxNQUFBLFVBQUEsR0FDQSxLQUFBLE1BQUEsTUFBQSxDQUVBLE9BRUEsZUFBQSxDQUNBLEdBQUEsQ0FDQSxLQUFBLGNBQUEsS0FBQSxJQUFBLEtBQUEsZUFBQSxDQUNBLE9BQUEsRUFBQSxDQUNBLE1BQUEsR0FBQSxTQUNBLFFBQUEsTUFBQSxDQUFBLEVBRUEs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LEdBQUEsS0FBQSxPQUFBLENBQUEsRUFBQSxPQUdBLENBQUEsRUFBQSxDQUFBLEVBQUEsS0FBQSxDQUNBLEtBQUEsQ0FBQSxPQUFBLFVBQUEsRUFDQSxHQUFBLENBQUEsRUFBQSxDQUNBLEtBQUEsR0FBQSxJQUFBLFNBQUEsSUFBQSxLQUFBLE9BQUEsRUFDQSxJQUFBLFNBQUEsSUFBQSxLQUFBLE9BQUEsRUFDQSxLQUNBLEFBQUEsR0FDQSxHQUFBLE9BQ0EsR0FEQSxDQUVBLE9BQUEsQ0FBQSxPQUFBLENBQ0EsR0FFQSxDQUNBLFNBQUEsR0FBQSxFQUNBLENBQ0EsRUFDQSxDQUFBLENBQ0EsQ0FDQSxFQUVBLFdBQUEsQ0FDQSxNQUFBLFFBQUEsS0FBQSxLQUFBLGFBQUEsRUFBQSxTQUFBLFFBQUEsQ0FDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLEtBQUEsYUFBQVEsRUFBQSxVQUFBLE9BQUEsQ0FDQSxNQUFBLElBQUEsQ0FDQSxBQUFBLE1BQUEsVUFBQSxJQUNBLEtBQUEsT0FBQSxDQUVBLENBQ0EsQ0FBQSxDQUNBLEVBRUEsV0FBQSxDQUNBLEtBQUEsYUFBQSxPQUFBLENBQ0EsRUFFQSxRQUFBLENBQ0EsTUFBQSxDQUNBLEtBQUEsT0FBQSxLQUFBLEtBQUEsSUFBQSxDQUNBLEVBRUEsUUFBQSxFQUFBLENBQ0EsS0FBQSxRQUFBLFFBQUEsQ0FBQSxFQUNBLEtBQUEsS0FBQSxDQUNBLEVBRUEsT0FBQSxFQUFBLENBQ0EsS0FBQSxRQUFBLE9BQUEsQ0FBQSxFQUNBLEtBQUEsS0FBQSxDQUNBLEVBRUEsUUFBQSxDQUNBLEtBQUEsUUFBQSxLQUFBLFVBQUEsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxBQUFBLEtBQUEsV0FDQSxLQUFBLFFBQUEsSUFBQSxDQUVBLENBQ0EsQ0FDQSxDQUFBLG9JQ3hJSUgsR0FBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFRLEdBQUksUUFBUyxFQUFHLEVBQUksUUFBUSxLQUFPLEVBQUksSUFBSSxDQUFD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QUFBLElBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQSxFQUFBLEVBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQSxFQUFBLEVBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsTUFBQSxFQUFBLFFBQUEsSUFBQSxFQUNBLFFBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxVQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFlBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsZUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxXQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFdBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLENBQ0EsRUFFQSxNQUFBLENBQ0EsS0FBQSxDQUFBLFFBQUEsS0FBQSxPQUNBLE1BQUEsUUFHQSxHQUFBbEMsRUFBQSxXQUFBLENBQUEsRUFDQSxFQUFBLEtBQUEsS0FBQSxLQUFBLE9BQUEsRUFDQSxHQUxBLENBT0EsbUJBQUEsQ0FBQSxFQUNBLGNBQUEsQ0FBQSxFQUNBLGVBQUEsQ0FBQSxDQUNBLEVBQ0EsRUFFQSxTQUFBLENBQ0EsaUJBQUEsQ0FFQSxNQUFBLEtBQ0EsRUFFQSx1QkFBQSxDQUlBLE1BQUEsTUFBQSxXQUFBLEtBQUEsS0FBQSxRQUFBLGVBQ0EsRUFFQSxjQUFBLENBQ0EsS0FBQSxHQUFBLEdBQUEsS0FBQSxPQUFBLE9BQUEsRUFBQSxFQUNBLFNBQUEsS0FBQSxNQUFBLE1BQ0EsRUFBQSxLQUFBLEdBQUEsRUFBQSxZQUFBLEVBRUEsTUFBQSxFQUNBLEVBRUEsTUFBQSxDQUNBLE1BQUEsR0FBQSxLQUFBLE9BQUEsSUFBQSxDQUNBLEVBRUEsYUFBQSxTQUNBLEtBQUEsR0FBQSxTQUFBLE9BQUEsT0FBQSxjQUFBLE1BQUEsS0FBQSxLQUNBLEVBQUEsR0FBQSxLQUFBLGFBQUEsS0FBQSxLQUFBLEVBQUEsRUFDQSxFQUNBLFNBQUEsYUFBQSxjQUFBLE9BQUEsS0FDQSxNQUFBLEtBQUEsR0FFQSxLQUFBLFFBQUEsUUFBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLEVBRUEsQ0FDQSxFQUVBLFlBQUEsQ0FDQSxHQUFBLEtBQUEsS0FBQSxDQUNBLEdBQUEsR0FBQSxLQUNBLFNBQUEsS0FBQSxRQUFBLE9BQUEsS0FBQSxJQUFBLEVBQUEsQ0FDQSxLQUFBLENBQUEsY0FBQSxFQUNBLEdBQUFBLEVBQUFBLFdBQUEsQ0FBQSxFQUNBLEVBQUEsS0FBQSxLQUFBLEtBQUEsT0FBQSxFQUNBLEVBRUEsTUFBQSxHQUVBLEFBQUEsR0FDQSxHQUFBLEVBRUEsQ0FDQSxNQUFBLEVBQ0EsQ0FDQSxFQUVBLFdBQUEsT0FDQSxNQUFBLFFBQUEsU0FBQSxjQUFBLFNBQ0EsRUFFQSxlQUFBLENBQ0EsTUFBQSxNQUFBLFlBQUEsQ0FBQSxPQUFBLFNBQUEsV0FBQSxHQUFBLENBQ0EsRUFFQSxlQUFBLENBQ0EsTUFBQSxJQUNBLFFBQUEsS0FBQSxPQUFBLE1BQ0EsS0FBQSxZQUFBLENBQUEsT0FBQSxZQUFBLFdBQUEsR0FBQSxFQUVBLEVBUUEsTUFBQSxDQUNBLE1BQUEsTUFBQSxJQUNBLEVBRUEsVUFBQSxDQUNBLE1BQUEsTUFBQSxRQUNBLEVBRUEsZUFBQSxDQUNBLE1BQUEsTUFBQSxhQUNBLEVBRUEsZUFBQSxDQUNBLE1BQUEsTUFBQSxhQUNBLEVBRUEsWUFBQSxDQUNBLE1BQUEsSUFBQSxLQUFBLFNBQUEsS0FBQSxTQUFBLEVBQUEsQ0FDQSxFQUVBLFdBQUEsQ0FDQSxNQUFBLE1BQUEsU0FDQSxLQUFBLGtCQUFBLEtBQUEsYUFBQSxLQUFBLEtBQUEsS0FBQSxPQUFBLENBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxNQUFBLE1BQUEsY0FBQSxHQUFBLEVBQUEsT0FBQSxDQUNBLEVBRUEsV0FBQSxDQUNBLE1BQUEsTUFBQSxjQUFBLEdBQUEsRUFBQSxTQUFBLENBQ0EsRUFFQSxTQUFBLENBQ0EsTUFBQSxNQUFBLGVBQUEsR0FBQSxFQUFBLE9BQUEsQ0FDQSxFQUVBLGFBQUEsQ0FDQSxNQUFBLE1BQUEsZUFBQSxHQUFBLEVBQUEsV0FBQSxDQUNBLEVBRUEsU0FBQSxDQUNBLE1BQUEsQ0FBQSxDQUFBLEtBQUEsSUFDQSxFQUVBLFVBQUEsQ0FDQSxNQUFBLENBQUEsQ0FBQSxLQUFBLE9BQUEsS0FBQSxXQUNBLEVBRUEsU0FBQSxDQUNBLE1BQUEsQ0FBQSxLQUFBLFNBQUEsQ0FBQSxDQUFBLEtBQUEsSUFDQSxFQUVBLGFBQUEsQ0FDQSxLQUFBLENBQUEsY0FBQSxLQUFBLE9BQ0EsTUFBQSxDQUFBLENBQUEsR0FBQSxPQUFBLEtBQUEsQ0FBQSxFQUFBLE9BQUEsQ0FDQSxFQUVBLE9BQUEsR0FBQSxTQUFBLENBQ0EsU0FBQSxDQUNBLE1BQUEsQ0FBQSxLQUFBLFNBQ0EsQ0FDQSxDQUFBLEVBRUEsWUFBQSxDQUNBLE1BQUEsUUFBQSxPQUFBLEtBQUEsa0JBQUEsQ0FDQSxFQUVBLE9BQUEsQ0FDQSxNQUFBLFFBQUEsT0FBQSxLQUFBLGFBQUEsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxNQUFBLFFBQUEsT0FBQSxLQUFBLGNBQUEsQ0FDQSxFQUVBLHNCQUFBLENBQ0EsTUFBQSxNQUFBLHVCQUFBLEtBQUEsa0JBQUEsQ0FDQSxFQUVBLGlCQUFBLENBQ0EsTUFBQSxNQUFBLHVCQUFBLEtBQUEsYUFBQSxDQUNBLEVBRUEsa0JBQUEsQ0FDQSxNQUFBLE1BQUEsdUJBQUEsS0FBQSxjQUFBLENBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxLQUFBLFVBQUEsRUFBQSxFQUNBLEtBQUEsa0JBQUEsRUFFQSxLQUFBLFNBQUEsU0FBQSxLQUFBLHFCQUFBLEVBQ0EsS0FBQSxVQUFBLFlBQUEsQ0FDQSxFQUVBLGVBQUEsQ0FDQSxLQUFBLFVBQUEsU0FBQSxFQUNBLEtBQUEsVUFBQSxFQUFBLENBQ0EsRUFFQSxRQUFBLENBQ0Esd0JBQUEsRUFBQSxFQUFBLENBQ0EsTUFBQSxNQUFBLHNCQUNBLEtBQUEscUJBQUEsRUFBQSxDQUNBLENBQ0EsRUFFQSx1QkFBQSxFQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsd0JBQUEsRUFBQSxDQUFBLEVBQUEsSUFBQSxJQUNBLEVBRUEsb0JBQUEsRUFBQSxFQUFBLENBQ0EsTUFBQSxNQUFBLGtCQUFBLEtBQUEscUJBQUEsRUFBQSxDQUFBLENBQ0EsRUFFQSxtQkFBQSxFQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsb0JBQUEsRUFBQSxDQUFBLEVBQUEsSUFBQSxJQUNBLEVBRUEsY0FBQSxFQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsWUFBQSxLQUFBLHFCQUFBLEVBQUEsQ0FBQSxDQUNBLEVBRUEsYUFBQSxFQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsY0FBQSxFQUFBLENBQUEsRUFBQSxJQUFBLElBQ0EsRUFFQSxvQkFBQSxFQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsc0JBQUEsS0FBQSxpQkFBQSxFQUFBLENBQUEsQ0FDQSxFQUVBLG1CQUFBLEVBQUEsRUFBQSxDQUNBLE1BQUEsTUFBQSxvQkFBQSxFQUFBLENBQUEsRUFBQSxJQUFBLElBQ0EsRUFFQSxVQUFBLEVBQUEsRUFBQSxDQUNBLE1BQUEsTUFBQSxZQUFBLEtBQUEsaUJBQUEsRUFBQSxDQUFBLENBQ0EsRUFFQSxTQUFBLEVBQUEsRUFBQSxDQUNBLE1BQUEsTUFBQSxVQUFBLEVBQUEsQ0FBQSxFQUFBLElBQUEsSUFDQSxFQUVBLGNBQUEsRUFBQSxDQUNBLE1BQUEsTUFBQSxhQUFBLEtBQUEsV0FBQSxLQUFBLENBQUEsQ0FDQSxFQUVBLGVBQUEsRUFBQSxDQUNBLE1BQUEsTUFBQSxhQUFBLEtBQUEsV0FBQSxNQUFBLENBQUEsQ0FDQSxFQUVBLFNBQUEsRUFBQSxDQUNBLEtBQUEsVUFBQSxTQUFBLENBRUEsUUFBQSxDQUFBLFFBQUEsQ0FDQSxDQUFBLEVBUUEsRUFBQSxLQUFBLFFBQUEsR0FBQSxLQUFBLFlBQUEsSUFDQSxNQUFBLE9BQUEsRUFFQSxFQUVBLFVBQUEsQ0FDQSxLQUFBLFVBQUEsUUFBQSxDQUNBLEVBRUEsaUJBQUEsQ0FDQSxTQUFBLEtBQUEsTUFBQSxXQUNBLEVBQUEsZ0JBQUEsQ0FFQSxFQUVBLGFBQUEsQ0FDQSxTQUFBLEtBQUEsTUFBQSxXQUNBLEVBQUEsWUFBQSxDQUVBLEVBRUEsT0FBQSxPQUNBLFFBQUEsd0JBQUEsUUFBQSxRQUNBLEtBQUEsT0FBQSxFQUNBLEVBRUEsWUFBQSxFQUFBLEVBQUEsR0FBQSxDQUNBLEtBQUEsQ0FBQSx3QkFBQSxLQUNBLEdBQUEsR0FDQSxHQUFBLEVBQUEsQ0FDQSxLQUFBLEdBQUFBLEVBQUEsV0FBQSxDQUFBLEVBQ0EsRUFDQVEsRUFBQUEsU0FBQSxDQUFBLEVBQ0EsR0FBQSxFQUFBLEtBQUEsQ0FBQSxFQUNBLEtBQ0EsRUFBQSxFQUNBLE9BQUEsS0FBQSxDQUFBLEVBQUEsT0FBQSxDQUFBLEVBQ0FQLEVBQUFBLFFBQUEsQ0FBQSxFQUNBLEVBQ0EsQ0FBQSxDQUFBLENBQ0EsQ0FDQSxBQUFBLEdBQ0EsS0FBQSxZQUFBLEVBRUEsR0FBQSxHQUFBLEdBQ0EsRUFBQSxHQUNBLE1BQUEsT0FBQSxLQUFBLENBQUEsR0FDQSxTQUFBLEtBQUEsR0FBQSxDQUNBLEtBQUEsR0FBQSxLQUFBLHdCQUFBLENBQUEsRUFDQSxTQUFBLEtBQUEsR0FDQSxBQUFBLEVBQUEsU0FBQSxDQUFBLEdBRUEsSUFBQSxHQUNBLEVBQUEsTUFBQSxFQUVBLEVBQUEsR0FDQSxFQUFBLEdBR0EsQ0FDQSxNQUFBLElBQUEsQ0FBQSxHQUNBLEtBQUEsYUFBQSxFQUVBLENBQ0EsRUFFQSxVQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsWUFBQSxFQUFBLEVBQUEsQ0FDQSxPQUVBLHNCQUFBLEVBQUEsRUFBQSxPQUNBLEtBQUEsWUFBQSxFQUNBLEdBQUEsR0FBQSxHQUNBLEtBQUEsR0FBQSxDQUFBLEVBQ0EsU0FBQSxDQUFBLEVBQUEsSUFBQSxRQUFBLFFBQUEsQ0FBQSxFQUFBLENBR0EsS0FBQSxHQUFBLEtBQUEsV0FDQSxFQUFBLEtBQUEsU0FBQSxDQUFBLEVBQ0EsRUFJQSxFQUFBTCxFQUFBLGNBQUEsQ0FBQSxFQUNBLEdBQUEsR0FBQSxHQUNBLEtBQUEsR0FBQSxLQUFBLHdCQUFBLENBQUEsRUFDQSxTQUFBLEtBQUEsR0FDQSxBQUFBLEVBQUEscUJBQUEsRUFBQSxHQUFBLENBQUEsR0FDQSxHQUFBLEdBQ0EsRUFBQSxJQUdBLEdBQUEsQ0FBQSxFQUFBLENBSUEsS0FBQSxHQUFBLEVBQUEsSUFBQSxFQUNBLEtBQUEsRUFBQSxPQUFBLEdBQUEsQ0FDQSxLQUFBLEdBQUEsS0FBQSx3QkFBQSxDQUFBLEVBQ0EsU0FBQSxLQUFBLEdBQ0EsR0FBQSxLQUFBLE1BQUEsc0JBQUEscUJBQ0EsRUFDQSxHQUFBLENBQ0EsR0FBQSxHQUFBLEdBQ0EsU0FBQSxLQUFBLEdBQUEsQ0FDQSxLQUFBLEdBQUEsRUFBQSxFQUFBLFVBQ0EsQUFDQSxHQUNBLEVBQUEscUJBQUEsRUFBQSxHQUFBLENBQUEsR0FFQSxHQUFBLEdBQ0EsRUFBQSxHQUVBLENBQ0EsTUFBQSxFQUNBLElBTUEsT0FJQSxFQUFBLElBQUEsQ0FDQSxDQUdBLEtBQUEsR0FBQWdCLEVBQUEsU0FBQSxDQUFBLEVBQ0EsU0FBQSxLQUFBLEdBQUEsQ0FDQSxLQUFBLEdBQUEsRUFDQSxhQUFBLElBQ0EsT0FBQSxLQUFBLFlBQ0EsRUFBQSxLQUFBLEdBQUEsS0FBQSxFQUFBLFNBQUEsQ0FDQSxDQUNBLENBQ0EsRUFBQSxFQUNBLENBQ0EsQUFBQSxHQUNBLEtBQUEsYUFBQSxFQUFBLEtBQUE7QUFBQSxDQUFBLENBQUEsQ0FFQSxFQUVBLGFBQUEsRUFBQSxDQUNBLEtBQUEsT0FBQSxDQUNBLEtBQUEsUUFDQSxNQUFBLG9CQUNBLEtBQUEsR0FBQSx3Q0FDQSxDQUFBLENBQ0EsRUFFQSxXQUFBLENBSUEsT0FBQSxPQUFBLEtBQUEsS0FBQSxHQUFBLEtBQUEsT0FBQSxHQUFBLElBQUEsQ0FBQSxFQUNBLEtBQUEsWUFBQSxDQUNBLEVBRUEsUUFBQSxFQUFBLENBQ0EsU0FBQSxLQUFBLEdBQ0EsR0FBQSxJQUFBLE1BQUEsS0FBQSxDQUNBLEtBQUEsS0FBQSxLQUFBLEtBQUEsRUFBQSxFQUFBLEVBQUEsRUFDQSxTQUFBLEtBQUEsTUFBQSxvQkFBQSxDQUFBLEVBQ0EsRUFBQSxVQUFBLENBRUEsQ0FFQSxFQUVBLFdBQUEsRUFBQSxDQUlBLEtBQUEsR0FBQSxDQUFBLEVBQ0EsU0FBQSxDQUFBLEVBQUEsSUFBQSxRQUFBLFFBQUEsQ0FBQSxFQUNBLEFBQUFYLEdBQUEsUUFBQSxDQUFBLEdBQUFNLEVBQUEsU0FBQSxDQUFBLElBRUEsQUFEQSxLQUFBLG9CQUFBLENBQUEsRUFDQSxLQUFBLEdBQUEsRUFBQSxZQUFBLEdBSUEsR0FBQSxHQUFBLEdBRUEsTUFBQSxFQUNBLEVBRUEsWUFBQSxDQUFBLFNBQUEsWUFBQSxhQUFBLElBQUEsR0FBQSxDQUNBLE1BQUEsSUFDQSxLQUFBLE9BQ0EsS0FBQSxhQUNBLEtBQUEsS0FDQSxLQUFBLFNBQUEsQ0FHQSxVQUFBLEtBQ0EsYUFDQSxRQUNBLENBQ0EsQ0FDQSxFQUVBLFVBQUEsRUFBQSxPQUdBLFFBQUEsdUJBQUEsSUFBQSxRQUFBLHlCQUFBLEtBQUEsRUFDQSxFQUVBLG1CQUFBLEVBQUEsRUFBQSxPQUNBLEtBQUEsZUFBQSxLQUFBLG1CQUFBLEVBQUEsQ0FBQSxFQUVBLFFBQUEsd0JBQUEsUUFBQSxtQkFBQSxFQUFBLEVBQ0EsRUFFQSxjQUFBLEVBQUEsRUFBQSxDQUNBLEtBQUEsZUFBQSxLQUFBLGNBQUEsRUFBQSxDQUFBLENBQ0EsRUFFQSxlQUFBLEVBQUEsRUFBQSxDQUNBLEtBQUEsZUFBQSxLQUFBLGVBQUEsRUFBQSxDQUFBLENBQ0EsRUFFQSxlQUFBLEVBQUEsRUFBQSxFQUFBLENBQ0EsS0FBQSxHQUFBLEVBQUEsS0FDQSxBQUFBLEVBQ0EsS0FBQSxLQUFBLEVBQUEsRUFBQSxDQUFBLEVBRUEsS0FBQSxRQUFBLEVBQUEsQ0FBQSxDQUVBLEVBRUEsdUJBQUEsRUFBQSxDQUNBLE1BQUEsUUFBQSxPQUFBLENBQUEsRUFBQSxPQUFBLENBQUEsRUFBQSxJQUFBLENBR0EsS0FBQSxDQUFBLFlBQUEsRUFFQSxNQURBLGFBQUEsQ0FBQSxJQUNBLEtBQUEsQ0FBQSxFQUNBLENBQ0EsRUFBQSxFQUFBLENBQ0EsRUFFQSxZQUFBLEVBQUEsRUFBQSxFQUFBLENBQ0EsTUFBQVYsR0FBQSxrQkFBQSxDQUFBLEVBQUEsV0FBQSxLQUFBLFFBQUEsRUFDQSxLQUFBLHNCQUFBLEVBQUEsRUFBQSxDQUFBLEVBQ0EsS0FBQSxrQkFBQSxFQUFBLEVBQUEsQ0FBQSxDQUNBLEVBRUEsc0JBQUEsRUFBQSxFQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsZUFDQSxFQUFBQSxFQUFBLGtCQUFBLENBQUEsSUFBQSxDQUFBLEVBQ0EsQ0FDQSxDQUNBLEVBRUEsa0JBQUEsRUFBQSxFQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsZUFDQSxFQUFBLEVBQUEsS0FBQSxTQUFBLENBQUEsSUFBQSxDQUFBLEVBQ0EsQ0FDQSxDQUNBLEVBRUEsZUFBQSxFQUFBLEVBQUEsQ0FDQSxNQUFBLEdBQUEsRUFBQSxPQUFBLENBQUEsRUFBQSxDQUNBLENBQ0EsQ0FDQSxDQUFBLG9JQ2h0QklnQyxHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQU8sR0FBRyxjQUFjLENBQUMsWUFBWSxzQkFBc0IsTUFBTSxDQUFFLHNCQUF1QixFQUFJLFNBQVMsRUFBRyxNQUFNLENBQUMsT0FBUyxFQUFJLE9BQU8sU0FBVyxFQUFJLFNBQVMsS0FBTyxFQUFJLEtBQUssS0FBTyxFQUFJLEtBQUssTUFBUSxFQUFJLE1BQU0sTUFBUSxFQUFJLFVBQVksS0FBTyxFQUFJLE1BQU0sUUFBVSxHQUFLLFNBQVcsRUFBSSxTQUFTLFVBQVksRUFBSSxVQUFVLFlBQWMsRUFBSSxXQUFXLEVBQUUsWUFBWSxFQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksZUFBZSxHQUFHLFVBQVUsQ0FBQyxNQUFPLENBQUUsRUFBSSxXQUFhLEVBQUksV0FBYSxFQUFJLFNBQVUsRUFBRyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsVUFBWSxFQUFJLFVBQVUsVUFBWSxFQUFJLFVBQVUsU0FBVyxFQUFJLFNBQVMsU0FBVyxFQUFJLFNBQVMsT0FBUyxFQUFJLE9BQU8sU0FBVyxFQUFJLFNBQVMsS0FBTyxFQUFJLEtBQUssS0FBTyxFQUFJLEtBQUssTUFBUSxFQUFJLEtBQUssRUFBRSxHQUFHLENBQUMsT0FBUyxTQUFTLEVBQU8sQ0FBQyxNQUFPLEdBQUksTUFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFJLEdBQUksQ0FBQSxDQUFDLEVBQUUsTUFBTSxFQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNyMUJDLEdBQWtCLENBQUEsUUN1RHRCLEtBQUFDLElBQUEsRUFBQSxVQUFBLHNCQUFBLENBQ0EsTUFBQSxDQUNBLE9BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsTUFBQSxFQUFBLFFBQUEsSUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLFFBQUEsU0FBQSxFQUFBLEVBQ0EsVUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxZQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFVBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxVQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLENBQ0EsRUFFQSxTQUFBLENBQ0EsV0FBQSxDQUNBLE1BQUEsSUFBQSxLQUFBLE1BQUEsQ0FDQSxFQUVBLFVBQUEsQ0FDQSxNQUFBLENBQUEsS0FBQSxXQUFBLENBQUEsQ0FBQSxLQUFBLEtBQ0EsQ0FDQSxDQUNBLENBQUEsb0lDbEZJRixHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQVEsR0FBSSxhQUFlLEVBQUksaUJBQWlCLE9BQVMsRUFBRyxFQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLE9BQU8sUUFBUSxTQUFTLE1BQU8sRUFBSSxRQUFTLFdBQVcsU0FBUyxDQUFDLEVBQUUsWUFBWSxXQUFXLEVBQUUsQ0FBQyxFQUFJLEdBQUksRUFBSSxpQkFBa0IsU0FBUyxFQUFJLENBQ3JULEdBQUksR0FBUyxFQUFJLE9BQ2IsRUFBVyxFQUFJLFNBQ2YsRUFBaUIsRUFBSSxlQUNyQixFQUFTLEVBQUksT0FDYixFQUFRLEVBQUksTUFDcEIsTUFBTyxDQUFFLEVBQU8sUUFBVSxTQUFVLEVBQUcsTUFBTSxDQUFDLFlBQVksWUFBWSxDQUFDLEVBQUUsRUFBSSxHQUFFLEVBQUksRUFBSSxhQUFhLENBQU0sRUFBRyxFQUFHLGlCQUFpQixDQUFDLElBQUksRUFBZSxNQUFNLENBQUMsT0FBUyxFQUFPLFNBQVcsRUFBUyxLQUFPLEVBQUksS0FBSyxLQUFPLEVBQUksS0FBSyxNQUFRLEVBQU0sT0FBUyxFQUFJLGtCQUFrQixPQUFTLEVBQU8sU0FBVyxFQUFJLFNBQVMsZUFBaUIsRUFBSSxjQUFjLENBQUMsQ0FBQyxFQUFFLEVBQUksR0FBRSxFQUFJLEVBQU8sUUFBVSxRQUFTLEVBQUcsTUFBTSxDQUFDLFlBQVksWUFBWSxDQUFDLEVBQUUsRUFBSSxHQUFJLENBQUEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBSSxJQUFJLEVBQ3piQyxHQUFrQixDQUFBLFFDa0V0QixLQUFBQyxJQUFBLEVBQUEsVUFBQSxZQUFBLENBQ0EsU0FBQSxDQUNBLE1BQUEsQ0FDQSxjQUFBLElBQUEsS0FBQSxZQUNBLENBQ0EsRUFFQSxNQUFBLENBQ0EsT0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLElBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQ0EsT0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxRQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsZUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxjQUFBLENBQ0EsTUFBQSxNQUFBLElBQUEsS0FBQSxLQUFBLGNBQUEsQ0FDQSxFQUVBLGtCQUFBLFNBUUEsS0FBQSxHQUFBLFFBQUEsZUFBQSxjQUFBLGVBQ0EsTUFBQSxRQUFBLFFBQUEsU0FBQSxTQUFBLGNBQUEsYUFBQSxDQUFBLENBQUEsRUFBQSxJQUNBLENBQUEsQ0FBQSxFQUFBLEtBQUEsQ0FFQSxFQUFBLEtBQUEsRUFFQSxLQUFBLEdBQUEsR0FBQSxDQUFBLEVBQ0EsRUFBQSxFQUFBLEtBQUEsU0FBQSxDQUFBLEVBQ0EsTUFBQSxDQUNBLFNBQ0EsU0FBQSxHQUFBLENBQUEsRUFDQSxFQUNBLEtBQUEsU0FDQSxpQkFDQSxTQUNBLE1BQUEsRUFBQSxLQUFBLGNBQUEsQ0FBQSxFQUFBLEtBQUEsS0FDQSxDQUNBLENBQ0EsQ0FDQSxFQUVBLGNBQUEsQ0FHQSxNQUFBLE1BQUEsaUJBQUEsUUFDQSxDQUFBLENBQUEsU0FBQSxlQUFBLEtBQUEsR0FDQSxFQUNBLEVBQ0EsS0FBQSxnQkFDQSxLQUFBLFlBQ0EsQ0FDQSxDQUNBLEVBRUEsbUJBQUEsQ0FDQSxNQUFBLE1BQUEsUUFBQSxLQUFBLGlCQUFBLFNBQUEsQ0FDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLEtBQUEsVUFBQSxFQUFBLENBQ0EsRUFFQSxlQUFBLENBQ0EsS0FBQSxVQUFBLEVBQUEsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxVQUFBLEVBQUEsQ0FDQSxLQUFBLGdCQUFBLGNBQUEsS0FBQSxDQUFBLENBQ0EsRUFFQSxPQUFBLENBQ0EsQUFBQSxLQUFBLEtBQ0EsS0FBQSxRQUFBLEtBQUEsQ0FBQSxLQUFBLEtBQUEsSUFBQSxDQUVBLENBQ0EsQ0FDQSxDQUFBLG9JQ2xLTyxZQUF1QixFQUFPLENBQ25DLEtBQU0sR0FDSjFCLEVBQUFBLFNBQVMsQ0FBSyxHQUNkLEVBQU0sTUFBTSxzQ0FBc0MsRUFFcEQsR0FBSSxFQUFPLENBQ1QsS0FBTSxDQUFHLENBQUEsRUFBVSxHQUFXLEVBQzlCLE1BQU8sWUFBVyxDQUFRLEVBQUksV0FBVyxDQUFPLENBQ3BELEtBQ0ksT0FBTyxZQUFXLENBQUssQ0FFM0IsQ0NiQSxHQUFJd0IsSUFBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFPLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssT0FBTyxRQUFRLFNBQVMsTUFBTyxFQUFJLGlCQUFrQixXQUFXLGtCQUFrQixDQUFDLEVBQUUsWUFBWSxpQkFBaUIsTUFBTSxFQUFJLGVBQWUsTUFBTyxFQUFJLGNBQWUsRUFBRSxDQUFFLEVBQUksTUFBTyxFQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUksZUFBZSxNQUFNLENBQUMsTUFBUSxFQUFJLE1BQU0sU0FBVyxFQUFJLGFBQWEsQ0FBQyxDQUFDLEVBQUUsRUFBSSxLQUFLLEVBQUcsRUFBSSxpQkFBaUIsRUFBSSxPQUFPLElBQUksRUFBRSxDQUFDLElBQUksWUFBWSxZQUFZLGlCQUFpQixNQUFNLEVBQUksZUFBZSxNQUFNLENBQUMsT0FBUyxFQUFJLE9BQU8sU0FBVyxFQUFJLFNBQVMsS0FBTyxFQUFJLEtBQUssS0FBTyxFQUFJLEtBQUssTUFBUSxFQUFJLE1BQU0sT0FBUyxFQUFJLE9BQU8sT0FBUyxFQUFJLE9BQU8sU0FBVyxFQUFJLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxPQUFTLEVBQUksUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsT0FBUyxFQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDdndCQyxHQUFrQixDQUFBLFFDb0V0QixLQUFBQyxJQUFBLEVBQUEsVUFBQSxpQkFBQSxDQUNBLE1BQUEsQ0FDQSxPQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLEtBQUEsRUFBQSxTQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsT0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxPQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLFFBQUEsU0FBQSxFQUFBLEVBQ0EsZUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLENBQ0EsT0FBQSxJQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsU0FBQSxDQUNBLE1BQUEsSUFBQSxHQUFBLEtBQUEsQ0FBQSxPQUFBLEtBQUEsT0FBQSxDQUNBLEVBRUEsYUFBQSxDQUNBLE1BQUEsR0FBQSxLQUFBLE1BQUEsR0FBQSxDQUFBLENBQ0EsRUFFQSxVQUFBLENBQ0EsS0FBQSxDQUFBLFVBQUEsS0FDQSxDQUFBLFNBQUEsRUFDQSxNQUNBLEtBQUEsSUFDQSxFQUFBLENBQUEsR0FBQSxLQUFBLFlBQUEsZUFBQSxLQUFBLGVBRUEsRUFFQSxPQUFBLENBQ0EsTUFBQSxNQUFBLFNBQUEsS0FBQSxTQUFBLEtBQUEsTUFBQSxFQUFBLElBQ0EsRUFFQSxlQUFBLENBRUEsTUFBQSxNQUFBLE9BQUEsS0FBQSxTQUFBLElBQ0EsRUFFQSxlQUFBLEVBQUEsUUFBQSxDQUNBLEtBQUEsQ0FBQSxPQUFBLE1BQUEsRUFDQSxTQUFBLENBQ0EsTUFBQSxNQUFBLFlBQUEsWUFDQSxFQUNBLElBQUEsRUFBQSxDQUVBLE1BQUEsS0FBQSxPQUNBLEVBQ0ExQixFQUFBQSxTQUFBLENBQUEsRUFDQSxFQUFBLE1BQUEsbUJBQUEsRUFBQSxHQUNBLENBQ0EsQ0FDQSxDQUFBLEVBRUEsdUJBQUEsRUFBQSxRQUFBLENBQ0EsS0FBQSxPQUNBLElBQUEsRUFBQSxDQUNBLE1BQUFBLEdBQUFBLFNBQUEsQ0FBQSxHQUNBLEVBQUEsTUFBQSxhQUFBLEVBQUEsSUFBQSxJQUVBLENBQ0EsQ0FBQSxFQUVBLGlCQUFBLEVBQUEsVUFBQSxDQUNBLEtBQUEsUUFDQSxTQUFBLENBQ0EsTUFBQSxNQUFBLFlBQUEsY0FDQSxDQUNBLENBQUEsRUFFQSxrQkFBQSxFQUFBLFdBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxHQUNBLElBQUEsRUFBQSxDQUNBLE1BQUEsSUFBQSxLQUFBLFFBQ0EsQ0FDQSxDQUFBLEVBRUEsZ0JBQUEsQ0FDQSxLQUFBLENBQUEsTUFBQSxHQUFBLEtBQUEsT0FDQSxNQUFBLElBQ0EsY0FBQSxLQUFBLE9BQ0Esb0JBQUEsR0FBQSxLQUFBLE1BQUEsR0FFQUEsRUFBQUEsU0FBQSxDQUFBLEVBQ0EsRUFBQSxHQUFBLEVBQUEsRUFDQSxFQUdBLEVBRUEsZ0JBQUEsQ0FDQSxLQUFBLEdBQUEsS0FBQSxlQUVBLEVBQ0EsQ0FBQSxLQUFBLE9BQUEsTUFBQSxFQUFBLFNBQUEsQ0FBQSxFQUFBLE9BQ0EsS0FBQSxLQUFBLENBQUEsRUFBQSxXQUFBLENBQUEsRUFDQSxRQUFBLEtBQUEsQ0FBQSxFQUFBLEVBQ0EsR0FBQSxDQUFBLEVBQUEsSUFFQSxNQUFBRCxHQUFBQSxTQUFBLENBQUEsRUFBQSxHQUFBLEtBQUEsQ0FDQSxFQUVBLGdCQUFBLENBRUEsS0FBQSxHQUNBLEtBQUEseUJBQUEsS0FDQSxLQUFBLGlCQUFBLE9BR0EsRUFBQSxLQUFBLHlCQUFBLElBQ0EsTUFBQSxDQUNBLEtBQUEsR0FBQSxFQUFBLEVBQUEsS0FBQSxFQUFBLEVBQUEsS0FBQSxLQUFBLGdCQUNBLENBQ0EsRUFFQSxnQkFBQSxDQUNBLEtBQUEsR0FBQSxLQUFBLGlCQUFBLE9BQ0EsTUFBQSxDQUNBLGNBQUEsS0FBQSxPQUNBLGdCQUFBLEtBQUEsa0JBQ0Esa0JBQUEsQ0FBQSxHQUFBLEtBQUEsaUJBQUEsT0FDQSxrQkFBQSxFQUNBLGtCQUFBLENBQUEsQ0FBQSxLQUFBLE1BQ0EsQ0FDQSxDQUNBLEVBRUEsUUFBQSxDQUNBLFNBQUEsRUFBQSxDQUNBLEtBQUEsT0FBQSxDQUNBLENBQ0EsQ0FDQSxDQUFBLG9JQ2pOSXlCLEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBTyxHQUFHLE1BQU0sQ0FBQyxZQUFZLFdBQVcsRUFBRSxFQUFJLEdBQUksRUFBSSxLQUFNLFNBQVMsRUFBVSxFQUFJLENBQUMsTUFBUSxHQUFJLGFBQWEsQ0FBUyxFQUFHLEVBQUcsY0FBYyxDQUFDLElBQUksRUFBSSxZQUFZLFlBQVksTUFBTSxDQUFDLEdBQUssQ0FBRSxLQUFNLENBQUcsRUFBRyxlQUFlLGFBQWEsQ0FBQyxFQUFFLENBQUMsRUFBSSxHQUFHLEVBQUksR0FBRyxFQUFJLFNBQVMsRUFBVyxDQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFJLEdBQUksQ0FBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ3RYQyxHQUFrQixDQUFBLFFDd0N0QixLQUFBQyxJQUFBLEVBQUEsVUFBQSxZQUFBLENBQ0EsTUFBQSxDQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQ0EsWUFBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsQ0FDQSxDQUNBLENBQUEsb0lDOUNJRixHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQU8sR0FBRyxFQUFJLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLE9BQU8sUUFBUSxTQUFTLE1BQU8sRUFBSSxTQUFZLEVBQUMsRUFBSSxtQkFBcUIsRUFBSSxrQkFBa0IsU0FBVSxXQUFXLDhEQUE4RCxDQUFDLEVBQUUsSUFBSSxZQUFZLFlBQVksYUFBYSxHQUFHLENBQUMsT0FBUyxTQUFTLEVBQU8sQ0FBQyxFQUFPLGVBQWMsQ0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUcsUUFBUSxDQUFDLFlBQVksa0JBQWtCLEVBQUUsQ0FBQyxFQUFJLEdBQUcsRUFBSSxHQUFHLEVBQUksU0FBUyxFQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUcsY0FBYyxDQUFDLFlBQVksb0JBQW9CLE1BQU0sQ0FBQyxPQUFTLEVBQUksWUFBWSxTQUFXLEVBQUksY0FBYyxLQUFPLEVBQUksVUFBVSxLQUFPLEVBQUksS0FBSyxNQUFRLEVBQUksTUFBTSxTQUFXLEVBQUksU0FBUyxXQUFhLEVBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBTyxVQUFVLFFBQVUsRUFBSSxjQUFjLFNBQVcsRUFBSSxjQUFjLEtBQU8sRUFBSSxVQUFVLEtBQU8sRUFBSSxLQUFLLE1BQVEsRUFBSSxNQUFNLFNBQVcsRUFBSSxRQUFRLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUN6NUJDLEdBQWtCLENBQUEsUUN1RXRCLEtBQUFDLElBQUEsRUFBQSxVQUFBLGFBQUEsQ0FDQSxPQUFBLENBQUEsRUFBQSxFQUVBLFNBQUEsQ0FDQSxNQUFBLENBQ0EsZ0JBQUEsSUFBQSxLQUNBLGNBQUEsSUFBQSxLQUFBLGlCQUNBLENBQ0EsRUFFQSxNQUFBLENBQ0EsT0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLFFBQUEsU0FBQSxFQUFBLEVBQ0Esa0JBQUEsQ0FBQSxLQUFBLEVBQUEsUUFBQSxJQUFBLENBQ0EsRUFFQSxNQUFBLENBQ0EsTUFBQSxDQUNBLFFBQUEsSUFDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLGdCQUFBLENBQ0EsTUFBQSxLQUNBLEVBRUEsY0FBQSxDQUNBLE1BQUEsTUFBQSxpQkFDQSxFQUVBLGVBQUEsQ0FDQSxNQUFBLElBQUEsS0FBQSxPQUFBLE9BQUEsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxNQUFBLE1BQUEsT0FBQSxRQUFBLEtBQUEsUUFDQSxFQUVBLFlBQUEsQ0FDQSxNQUFBLENBQUEsQ0FBQSxLQUFBLE9BQ0EsRUFFQSxXQUFBLENBQ0EsTUFBQSxNQUFBLFNBQUEsS0FBQSxJQUNBLEVBRUEsYUFBQSxDQUNBLEdBQUEsS0FBQSxXQUNBLE1BQUEsTUFBQSxPQUNBLENBR0EsS0FBQSxRQUFBLE9BQUEsU0FBQSxFQUNBLE1BREEsR0FBQSxFQUFBLENBQUEsUUFFQSxDQUNBLEVBRUEsVUFBQSxDQUVBLE1BQUEsTUFBQSxXQUFBLE9BQUEsS0FDQSxFQUVBLGVBQUEsQ0FJQSxNQUFBLE1BQUEsV0FBQSxLQUFBLFNBQUEsS0FBQSxnQkFBQSxRQUNBLEVBRUEsUUFBQSxFQUFBLFVBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxFQUNBLENBQUEsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxLQUFBLFVBQUEsRUFBQSxFQUdBLEtBQUEsQ0FBQSxRQUFBLEtBQUEsT0FDQSxBQUFBLEdBQ0EsTUFBQSxRQUFBL0IsRUFBQSxXQUFBLENBQUEsRUFDQSxFQUFBLEtBQUEsS0FBQSxLQUFBLE9BQUEsRUFDQSxFQUVBLEVBRUEsZUFBQSxDQUNBLEtBQUEsVUFBQSxFQUFBLENBQ0EsRUFFQSxRQUFBLENBQ0EsVUFBQSxFQUFBLENBR0EsS0FBQSxnQkFBQSxlQUFBLEtBQUEsQ0FBQSxDQUNBLENBQ0EsQ0FDQSxDQUFBLG9JQy9LSTZCLEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBUSxHQUFJLE9BQU8sT0FBUyxFQUFHLEVBQUcsTUFBTSxDQUFDLFlBQVksYUFBYSxFQUFFLEVBQUksR0FBSSxFQUFJLE9BQVEsU0FBUyxFQUFJLENBQzlMLEdBQUksR0FBUyxFQUFJLE9BQ2IsRUFBVyxFQUFJLFNBQ2YsRUFBZSxFQUFJLGFBQ3ZCLE1BQVEsR0FBSSxhQUFhLENBQU0sRUFBRyxFQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUksWUFBWSxFQUFVLENBQVksRUFBRSxNQUFNLENBQUMsT0FBUyxFQUFPLFNBQVcsRUFBUyxLQUFPLEVBQUksS0FBSyxLQUFPLEVBQUksS0FBSyxNQUFRLEVBQUksY0FBYyxFQUFPLElBQUksRUFBRSxTQUFXLEVBQU8sVUFBWSxLQUFPLEVBQU8sU0FBVyxFQUFJLFNBQVMsa0JBQW9CLENBQVksQ0FBQyxDQUFDLEVBQUUsRUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBSSxHQUFFLENBQUUsRUFDM1VDLEdBQWtCLENBQUEsUUN1QnRCLEtBQUFDLElBQUEsRUFBQSxVQUFBLGNBQUEsQ0FDQSxNQUFBLENBQ0EsT0FBQSxDQUFBLEtBQUEsTUFBQSxRQUFBLElBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxRQUFBLFNBQUEsRUFBQSxDQUNBLEVBRUEsUUFBQSxDQUNBLFlBQUEsRUFBQSxFQUFBLENBR0EsTUFBQSxHQUFBLEdBQUEsRUFBQSxPQUFBLElBQUEsQ0FDQSxDQUNBLENBQ0EsQ0FBQSxvSUM1Q0lGLEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBUSxHQUFJLGVBQWlCLEVBQUksT0FBTyxRQUFTLEVBQUcsTUFBTSxFQUFJLEdBQUcsQ0FBQyxZQUFZLGNBQWMsRUFBRSxFQUFJLFVBQVUsRUFBRSxDQUFDLEVBQUksR0FBSSxFQUFJLGNBQWUsU0FBUyxFQUFhLEVBQWUsQ0FBQyxNQUFRLEdBQUksYUFBYSxDQUFZLEVBQUcsRUFBRyxpQkFBaUIsQ0FBQyxJQUFJLEVBQWUsTUFBTSxDQUFDLE9BQVMsRUFBYSxTQUFXLEVBQWUsS0FBTyxFQUFJLEtBQUssS0FBTyxFQUFJLEtBQUssTUFBUSxFQUFJLGNBQWMsRUFBYSxJQUFJLEVBQUUsU0FBVyxFQUFJLFNBQVMsZUFBaUIsRUFBSyxDQUFDLENBQUMsRUFBRSxFQUFJLEdBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBSSxHQUFJLEVBQUksT0FBTyxRQUFTLFNBQVMsRUFBSyxDQUFDLE1BQVEsR0FBSyxJQUFLLEVBQUcsTUFBTSxDQUFDLFlBQVksZ0JBQWdCLEVBQUUsQ0FBQyxFQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBTyxDQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBSSxHQUFFLENBQUUsRUFDOXJCQyxHQUFrQixDQUFBLFFDcUN0QixLQUFBQyxJQUFBLEVBQUEsVUFBQSxlQUFBLENBQ0EsUUFBQSxDQUNBLGNBQUEsSUFBQSxJQUNBLEVBRUEsTUFBQSxDQUNBLFFBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsS0FBQSxFQUFBLFFBQUEsSUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLENBQ0EsRUFFQSxTQUFBLENBQ0EsZUFBQSxDQUVBLEtBQUEsQ0FBQSxXQUFBLFdBQUEsS0FDQSxNQUFBLEdBQ0EsT0FBQSxPQUFBLENBQUEsRUFBQSxPQUFBLENBQUEsRUFBQSxJQUNBLEdBQUEsRUFBQSxFQUFBLEVBQUEsSUFBQSxHQUFBLEVBQ0EsR0FDQSxFQUFBLEVBQ0EsSUFDQSxDQUNBLENBQ0EsQ0FBQSxvSUNoRUlGLEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBTyxHQUFHLGVBQWUsQ0FBQyxZQUFZLHVDQUF1QyxNQUFNLENBQUMsUUFBVSxFQUFJLFFBQVEsU0FBVyxFQUFJLFNBQVMsS0FBTyxFQUFJLEtBQUssS0FBTyxFQUFJLEtBQUssTUFBUSxFQUFJLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBUSxTQUFTLEVBQU8sQ0FBQyxFQUFPLGdCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUUsRUFBSSxZQUFhLEVBQUcsSUFBSSxFQUFJLEdBQUcsQ0FBQyxZQUFZLGFBQWEsRUFBRSxJQUFJLEVBQUksb0JBQW9CLEVBQUksTUFBTSxJQUFJLEVBQUUsRUFBSyxDQUFDLEVBQUUsRUFBSSxHQUFJLEVBQUUsRUFBSSxXQUFZLEVBQUcsY0FBYyxFQUFJLEdBQUcsQ0FBQyxZQUFZLGNBQWMsTUFBTSxDQUFDLEdBQUssQ0FBRSxLQUFNLEVBQUksVUFBVyxPQUFTLEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBSSxvQkFBb0IsRUFBSSxNQUFNLElBQUksRUFBRSxFQUFLLENBQUMsRUFBRSxFQUFJLEdBQUksRUFBRSxFQUFJLFlBQWEsRUFBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsT0FBUyxFQUFJLE9BQU8sS0FBTyxFQUFJLFdBQVcsS0FBTyxFQUFJLE1BQU0sT0FBTyxLQUFPLEVBQUksZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEVBQUksR0FBRSxFQUFJLEVBQUksWUFBYSxFQUFHLFNBQVMsRUFBSSxHQUFHLENBQUMsWUFBWSxjQUFjLE1BQU0sQ0FBQyxLQUFPLFFBQVEsRUFBRSxHQUFHLENBQUMsTUFBUSxTQUFTLEVBQU8sQ0FBQyxNQUFPLEdBQUksTUFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFJLG9CQUFvQixFQUFJLE1BQU0sTUFBTSxFQUFFLEVBQUssQ0FBQyxFQUFFLEVBQUksR0FBSSxDQUFBLEVBQUUsQ0FBQyxDQUFDLEVBQ2gvQkMsR0FBa0IsQ0FBQSxRQzhDdEIsS0FBQUMsSUFBQSxFQUFBLFVBQUEsb0JBQUEsQ0FDQSxNQUFBLENBQ0EsVUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFVBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsVUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQSxFQUNBLFdBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQ0EsUUFBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsRUFDQSxPQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLEtBQUEsRUFBQSxRQUFBLElBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLENBQ0EsRUFFQSxTQUFBLENBQ0EsV0FBQSxDQUNBLE1BQUEsTUFBQSxTQUFBLEtBQUEsT0FBQSxJQUFBLENBQ0EsRUFFQSxhQUFBLENBQ0EsTUFBQSxNQUFBLFVBQUEsV0FBQSxDQUNBLEVBRUEsWUFBQSxDQUNBLE1BQUEsTUFBQSxVQUFBLFVBQUEsR0FBQSxDQUFBLENBQUEsS0FBQSxRQUNBLEVBRUEsYUFBQSxDQUNBLE1BQUEsTUFBQSxVQUFBLFdBQUEsR0FBQSxDQUFBLENBQUEsS0FBQSxVQUNBLEVBRUEsYUFBQSxDQUNBLE1BQUEsTUFBQSxVQUFBLFdBQUEsQ0FDQSxFQUVBLGtCQUFBLE9BQ0EsTUFFQSxTQUFBLE9BQUEsWUFBQSxjQUFBLFFBSUEsS0FBQSxXQUNBLEdBQUFJLEVBQUFBLFdBQUEsS0FBQSxNQUFBLE1BQUEsS0FBQSxLQUFBLGFBRUEsSUFFQSxDQUNBLEVBRUEsUUFBQSxDQUNBLFVBQUEsRUFBQSxDQUlBLE1BQUEsQ0FBQSxDQUFBLE1BQUEsSUFBQSxLQUFBLE9BQUEsS0FBQSxHQUNBLENBQ0EsQ0FDQSxDQUFBLG9JQzNHSU4sR0FBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFPLEdBQUcsTUFBTSxDQUFDLFlBQVksb0JBQW9CLEVBQUUsQ0FBRSxFQUFJLGFBQWMsQ0FBQyxFQUFHLFNBQVMsQ0FBQyxZQUFZLGNBQWMsTUFBTyxlQUFpQixFQUFJLEtBQU0sTUFBTSxDQUFDLEtBQU8sU0FBUyxNQUFRLEVBQUksU0FBUyxFQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxVQUFZLFNBQVMsRUFBTyxDQUFDLFNBQU8sZ0JBQWUsRUFBVSxFQUFJLHFCQUFxQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUksR0FBRyxFQUFJLEdBQUcsRUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRyxLQUFLLENBQUMsWUFBWSxnQkFBZ0IsTUFBTSxDQUFFLFlBQWEsRUFBSSxTQUFTLEtBQU0sRUFBRSxFQUFJLEdBQUksRUFBSSxNQUFPLFNBQVMsRUFBSyxFQUFLLENBQUMsTUFBTyxHQUFHLEtBQUssQ0FBRSxFQUFJLFlBQVksQ0FBSSxFQUFHLEVBQUcsSUFBSSxDQUFDLE1BQU8sYUFBZSxFQUFNLEdBQUcsQ0FBQyxVQUFZLFNBQVMsRUFBTyxDQUFDLFNBQU8sZ0JBQWlCLEVBQVEsRUFBSSxvQkFBb0IsQ0FBSSxDQUFDLEVBQUUsUUFBVSxTQUFTLEVBQU8sQ0FBQyxNQUFPLEdBQUksa0JBQWtCLENBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUksR0FBRyxFQUFJLEdBQUcsRUFBSSxTQUFTLENBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUksR0FBRSxDQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRyxTQUFTLENBQUMsWUFBWSxjQUFjLE1BQU8sZUFBaUIsRUFBSSxLQUFNLE1BQU0sQ0FBQyxLQUFPLEVBQUksVUFBWSxTQUFXLFNBQVMsTUFBUSxFQUFJLFNBQVMsRUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBUSxTQUFTLEVBQU8sQ0FBQyxNQUFPLEdBQUksV0FBVyxFQUFJLE1BQU0sT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBSSxHQUFHLEVBQUksR0FBRyxFQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUNwakNDLEdBQWtCLENBQUEsUUN3Q3RCLEtBQUFDLElBQUEsRUFBQSxVQUFBLHFCQUFBLENBQ0EsT0FBQSxDQUFBLEVBQUEsRUFFQSxNQUFBLENBQ0EsT0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxPQUFBLENBQ0EsTUFBQSxHQUFBLEtBQUEsT0FBQSxLQUFBLE9BQUEsQ0FDQSxFQUVBLFdBQUEsQ0FDQSxNQUFBLElBQUEsS0FBQSxNQUFBLENBQ0EsRUFFQSxjQUFBLENBQ0EsTUFBQSxRQUFBLEtBQUEsS0FBQSxLQUFBLEVBQUEsT0FBQSxHQUFBLENBQUEsS0FBQSxNQUFBLE9BQ0EsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxZQUFBLEVBQUEsQ0FFQSxNQUFBLEdBQUEsWUFBQSxFQUNBLEVBRUEsV0FBQSxFQUFBLEVBQUEsS0FBQSxDQUNBLEdBQUEsS0FBQSxZQUFBLENBQUEsRUFDQSxBQUFBLEtBQUEsVUFDQSxLQUFBLGdCQUFBLFdBQUEsRUFBQSxDQUFBLEVBRUEsS0FBQSxRQUFBLEtBQUEsQ0FDQSxLQUFBLEdBQUEsS0FBQSxjQUNBLE1BQUEsQ0FBQSxNQUFBLEVBQ0EsT0FBQSxFQUNBLENBQUEsTUFHQSxNQUFBLElBQUEsT0FBQSwyQ0FBQSxDQUVBLEVBRUEsaUJBQUEsRUFBQSxDQUNBLEtBQUEsV0FBQSxLQUFBLE1BQUEsR0FBQSxDQUFBLEVBQ0EsS0FBQSxnQkFBQSxFQUFBLENBQ0EsQ0FDQSxDQUNBLENBQUEsb0lDNUZJRixHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQVEsR0FBSSxVQUFXLEVBQUcsTUFBTSxDQUFDLFlBQVksZ0RBQWdELEVBQUUsQ0FBQyxFQUFHLFNBQVMsQ0FBQyxJQUFJLFdBQVcsWUFBWSwrQkFBK0IsTUFBTSxDQUFDLEtBQU8sU0FBUyxNQUFRLFlBQVksU0FBVyxDQUFDLEVBQUksV0FBVyxFQUFFLEdBQUcsQ0FBQyxNQUFRLEVBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFHLFNBQVMsQ0FBQyxZQUFZLGdDQUFnQyxNQUFNLENBQUMsS0FBTyxTQUFTLE1BQVEsYUFBYSxTQUFXLENBQUMsRUFBSSxZQUFZLEVBQUUsR0FBRyxDQUFDLE1BQVEsRUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFJLElBQUksRUFDdGdCQyxHQUFrQixDQUFBLEVDeUJ0QixLQUFBQyxJQUFBLEVBQUEsVUFBQSxpQkFBQSxDQUNBLE9BQUEsQ0FBQSxDQUFBLEVBRUEsTUFBQSxDQUNBLFVBQUEsQ0FBQSxLQUFBLENBQUEsUUFBQSxNQUFBLEVBQUEsUUFBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsS0FBQSxFQUFBLFFBQUEsSUFBQSxDQUNBLEVBRUEsTUFBQSxDQUNBLE1BQUEsQ0FDQSxZQUFBLEdBQ0EsYUFBQSxHQUNBLGFBQUEsRUFDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLGtCQUFBLENBQ0EsTUFBQXhCLEdBQUFBLFNBQUEsS0FBQSxTQUFBLEVBQUEsS0FBQSxVQUFBLENBQUEsQ0FDQSxFQUVBLFVBQUEsQ0FDQSxLQUFBLENBQUEsUUFBQSxLQUFBLGlCQUNBLE1BQUEsR0FDQSxHQUFBLEVBQUEsS0FBQSxLQUFBLEdBQUEsR0FBQSxLQUFBLENBQ0EsZUFDQSxDQUFBLENBQUEsRUFDQSxHQUFBaUIsRUFBQSxNQUFBLENBQUEsQ0FDQSxFQUVBLFdBQUEsQ0FDQSxLQUFBLENBQUEsU0FBQSxLQUFBLGlCQUNBLE1BQUEsR0FDQSxHQUFBLEVBQUEsS0FBQSxLQUFBLEdBQUEsR0FBQSxLQUFBLENBQ0EsZUFDQSxDQUFBLENBQUEsRUFDQSxHQUFBLENBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FHQSxLQUFBLE1BQUEsU0FBQSxDQUNBLEtBQUEsS0FBQSxjQUNBLENBQUEsRUFDQSxLQUFBLE1BQUEsT0FBQSxDQUNBLE1BQUEsS0FBQSxjQUNBLENBQUEsRUFDQSxLQUFBLE9BQUEsT0FBQSxDQUVBLFVBQUEsR0FDQSxRQUFBLENBQUEsRUFBQSxJQUFBLENBQ0EsQUFBQSxJQUFBLEdBQ0EsS0FBQSxlQUFBLENBRUEsQ0FDQSxDQUFBLENBQ0EsRUFFQSxRQUFBLE1BQ0Esa0JBQUEsRUFBQSxlQUVBLEdBQUEsQ0FBQSxpQkFBQSxLQUFBLFNBQ0EsR0FBQSxDQUNBLEtBQUEsR0FBQSxLQUFBLGlCQUFBLFlBQUEsY0FBQSxXQUFBLHVCQUNBLEFBQUEsS0FBQSxjQUFBLEdBR0EsTUFBQSxpQkFBQSxZQUFBLGNBQUEsWUFBQSxxQkFBQSxJQUNBLEtBQUEsYUFBQSxJQUVBLEdBQ0EsR0FBQSxLQUFBLE1BQUEsQ0FBQSxFQUVBLE9BQUEsRUFBQSxDQUNBLEFBQUEsR0FDQSxTQUFBLE1BQUEsRUFBQSxFQUFBLEtBQUEsRUFBQSxPQUFBLEVBQ0EsRUFBQSxPQUFBLGVBQ0EsTUFBQVksRUFBQUE7QUFBQUE7QUFBQUEsZ0JBRUEsRUFBQTtBQUFBLGFBQ0EsRUFHQSxDQUNBLEtBQUEsTUFBQSxDQUFBLEVBQUEs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LFlBQUEsQ0FDQSxLQUFBLFNBRUEsVUFBQSxHQUNBLE9BQUEsQ0FDQSxNQUFBLENBQUEsQ0FBQSxVQUFBLEtBQUEsRUFBQSxPQUFBLENBQ0EsQ0FDQSxDQUNBLEVBQ0EsS0FBQSxPQUFBLE9BQ0EsQ0FDQSxDQUNBLEVBRUEsVUFBQSxDQUNBLE1BQUEsTUFBQSxhQUFBLEtBQUEsbUJBQ0EsRUFFQSxhQUFBLENBQ0EsTUFBQSxDQUFBLEtBQUEsWUFDQSxFQUVBLFlBQUEsQ0FFQSxNQUFBLE1BQUEsUUFBQSxRQUNBLEVBRUEsU0FBQSxPQUNBLE1BQUEsQ0FBQSxLQUFBLFlBQUEsQ0FBQSxDQUFBLFNBQUEsc0JBQUEsUUFBQSxRQUNBLEVBRUEsYUFBQSxPQUNBLE1BQUEsU0FBQSxzQkFBQSxjQUFBLGNBQUEsSUFDQSxFQUVBLFlBQUEsQ0FJQSxNQUFBLE1BQUEsYUFBQSxNQUNBLEVBRUEsTUFBQSxDQUVBLE1BQUEsTUFBQSxPQUFBLE1BQUEsSUFDQSxFQUVBLFFBQUEsT0FDQSxNQUFBLE1BQUEsV0FDQSxLQUNBLFFBQUEsUUFBQSxPQUFBLElBQ0EsRUFFQSxRQUFBLENBQ0EsTUFBQSxNQUFBLFdBQUEsT0FBQSxPQUNBLEVBRUEsVUFBQSxDQUNBLEtBQUEsR0FBQSxLQUFBLFlBQUEsRUFDQSxNQUFBLElBQUEsS0FBQSxPQUFBLENBQUEsR0FBQSxDQUNBLEVBRUEsa0JBQUEsQ0FDQSxNQUFBRixHQUFBLFdBQUEsS0FBQSxXQUFBLEtBQUEsTUFBQSxPQUFBLEtBQUEsTUFBQSxJQUFBLENBQ0EsRUFFQSxNQUFBLENBU0EsTUFBQSxNQUFBLGFBQUEsS0FBQSxZQUFBLEtBQUEsZUFBQSxJQUNBLEVBRUEsVUFBQSxDQUNBLE1BQUEsTUFBQSxnQkFBQSxLQUFBLGFBQUEsQ0FDQSxFQUVBLFlBQUEsQ0FJQSxHQUFBLENBQUEsUUFBQSxLQUFBLHFCQUNBLEdBQUEsRUFBQSxDQUdBLEtBQUEsR0FBQXZDLEVBQUEsY0FDQSxLQUFBLGdCQUFBLEtBQUEsb0JBQUEsQ0FDQSxFQUdBLEVBQUEsS0FBQSxZQUFBLEtBQUEsTUFBQSxHQUFBLEVBQ0EsRUFBQSxFQUFBLE1BQUEsRUFBQSxPQUFBLEVBQUEsTUFBQSxFQUNBLEtBQUEsVUFBQSxLQUNBLEtBQUEsR0FBQSxFQUFBLEVBQUEsT0FBQSxHQUNBLEFBQUEsRUFBQSxLQUFBLFlBQUEsR0FBQSxJQUFBLFVBSUEsRUFBQSxTQUVBLE9BQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxPQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsQ0FDQSxLQUFBLEdBQUEsRUFBQSxHQUVBLEVBQUEsT0FBQSxLQUFBLEVBQUEsRUFBQSxFQUNBLElBQUEsU0FDQSxLQUNBLEtBQUEsZ0JBQUEsS0FBQSxhQUFBLEVBQUEsQ0FBQSxFQUNBLEVBR0EsQUFBQSxJQUFBLEVBQUEsRUFDQSxLQUFBLFVBQUEsRUFFQSxFQUFBLEVBQUEsRUFFQSxDQUNBLENBQ0EsTUFBQSxFQUNBLEVBRUEsZUFBQSxDQUlBLEdBQ0EsS0FBQSxhQUNBLEtBQUEsYUFBQSxRQUNBLEtBQUEsWUFDQSxLQUFBLFlBQUEsS0FDQSxDQUNBLEdBQUEsR0FBQSxLQUFBLFdBQUEsS0FBQSxXQUNBLE1BQUEsTUFBQSxZQUdBLE1BQUEsV0FBQSxFQUFBNEIsRUFBQUEsTUFBQSxDQUFBLEdBR0EsSUFBQSxNQUNBLENBQUEsS0FBQSxZQUNBLEVBQUEsS0FBQSxZQUFBLEdBR0EsS0FBQSxRQUFBLEtBQUEsQ0FBQSxLQUFBLFNBQUEsT0FBQSxHQUFBLEVBRUEsQ0FDQSxDQUNBLE1BQUEsTUFBQSxVQUNBLEVBR0EsU0FBQSxDQUNBLE1BQUEsQ0FBQSxDQUFBLEtBQUEsSUFDQSxFQUVBLFdBQUEsQ0FDQSxNQUFBLE1BQUEsYUFBQSxLQUFBLGFBQUEsS0FBQSxLQUFBLENBQUEsU0FBQSxHQUFBLENBQ0EsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxXQUFBLGtCQUVBLE9BQUEsV0FDQSxFQUVBLFFBQUEsQ0FDQSxnQkFBQSxFQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsb0JBQUEsVUFBQSxFQUFBLENBQUEsQ0FDQSxFQUVBLGdCQUFBLEVBQUEsQ0FFQSxNQUFBLE1BQUEsSUFBQSxnQkFBQSxLQUFBLEtBRUEsTUFBQSxHQUFBLE9BQUEsRUFBQSxFQUFBLEtBQUEsUUFBQSxDQUFBLENBQUEsQ0FDQSxFQUdBLFdBQUEsQ0FDQSxBQUFBLEtBQUEsV0FDQSxLQUFBLFlBQUEsS0FBQSxhQUNBLEtBQUEsV0FBQSxLQUFBLE9BQUEsS0FBQSxJQUFBLEVBRUEsS0FBQSxXQUFBLENBRUEsRUFFQSxjQUFBLEVBQUEsQ0FDQSxHQUFBLEtBQUEsWUFBQSxLQUFBLFlBQUEsS0FBQSxDQUNBLEtBQUEsQ0FBQSx1QkFBQSxLQUNBLFlBQUEsS0FDQSxLQUFBLFdBQ0EsS0FBQSxVQUNBLEVBQUEsV0FBQSxDQUFBLENBQ0EsRUFDQSxFQUFBLFNBQUEsRUFDQSxFQUNBLENBQ0EsTUFBQSxFQUNBLEVBRUEsY0FBQSxFQUFBLE9BQ0EsTUFBQSxHQUFBLEtBQUEsWUFBQSxFQUNBLEtBQUEsY0FBQSxDQUFBLEVBQ0EsQ0FBQSxDQUFBLFNBQUEsYUFBQSxRQUFBLEtBQUEsR0FDQSxFQUdBLFdBQUEsQ0FDQSxLQUFBLFFBQUEsSUFBQSxDQUNBLEVBR0EsUUFBQSxFQUFBLENBRUEsQUFBQSxLQUFBLFlBRUEsS0FBQSxjQUFBLENBQUEsRUFFQSxNQUFBLFlBQUEsS0FDQSxLQUFBLFdBQUEsRUFFQSxFQUVBLGdCQUFBLEVBQUEsRUFBQSxDQUVBLEFBQUEsSUFBQSxHQUNBLE1BQUEsV0FBQSxPQUVBLE9BRUEsU0FBQSxDQUNBLE1BQUEsTUFBQSxNQUFBLENBQ0EsT0FFQSxRQUFBLENBQ0EsTUFBQSxNQUFBLFNBQUEsS0FBQSxxQkFBQSxJQUFBLENBQ0EsRUFFQSxjQUFBLEVBQUEsR0FBQSxDQUNBLE1BQUEsTUFBQSxXQUNBLEVBQUEsU0FBQSxVQUNBLEVBQUEsU0FBQSxXQUNBLE9BRUEsUUFBQSxFQUFBLENBQUEsV0FBQSxHQUFBLFlBQUEsSUFBQSxHQUFBLENBQ0EsR0FBQSxHQUFBLENBQUEsS0FBQSxjQUNBLE1BQUEsR0FHQSxLQUFBLEdBQUEsR0FBQSxLQUFBLE1BQUEsS0FBQSxjQUFBLENBQUEsR0FHQSxFQUFBLEVBQUEsRUFBQSxPQUFBLFNBQUEsQ0FDQSxPQUFBLEtBQUEsUUFDQSxDQUFBLEVBQ0EsRUFBQSxHQUFBLEtBQUEsU0FDQSxFQUFBLGtCQUFBLFNBQUEsS0FBQSxPQUNBLEVBQUEsS0FBQSxlQUFBLEVBQUEsQ0FBQSxFQUNBLEdBQUEsR0EyREEsR0ExREEsQUFBQSxDQUFBLEdBQUEsS0FBQSxZQUNBLEVBQUEsS0FBQSxNQUFBLGdCQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsQ0FDQSxVQUFBLElBQUEsS0FBQSxnQkFBQSxLQUFBLGNBQUEsQ0FBQSxFQUNBLFFBQUEsR0FBQSxLQUFBLGdCQUFBLFFBQUEsQ0FDQSxRQUFBLENBQUEsT0FBQSxDQUNBLENBQUEsRUFDQSxjQUFBLElBQUEsQ0FDQSxLQUFBLEdBQUEsRUFBQSxFQUFBLEVBQ0EsS0FBQSxPQUFBLENBQ0EsS0FBQSxPQUNBLE1BQUEsS0FBQSxXQUNBLFFBQUFXLEVBQUFBLFdBQUEsQ0FBQSxJQUNBLFVBQUFBLEVBQUFBLFdBQUEsQ0FBQSxJQUNBLEtBQUEsQ0FDQSxLQUFBLFdBQ0EsR0FBQSxLQUFBLGlCQUFBLEtBQ0EsY0FBQSxLQUFBLGtCQUFBLEtBQ0EsS0FBQSxhQUNBLENBQ0EsQ0FBQSxDQUNBLEVBQ0EsWUFBQSxJQUFBLENBQ0EsS0FBQSxHQUFBLEVBQUEsRUFBQSxFQUNBLEtBQUEsT0FBQSxDQUNBLEtBQUEsUUFDQSxNQUFBLGdCQUNBLEtBQUEsYUFBQSxLQUFBLEtBQUEsWUFDQSxDQUFBLENBQ0EsQ0FDQSxDQUFBLEVBRUEsRUFBQSxLQUFBLE1BQUEsZUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLENBQ0EsUUFBQSxHQUNBLFVBQUEsSUFBQSxLQUFBLGdCQUFBLEtBQUEsY0FBQSxDQUFBLEVBQ0EsUUFBQSxHQUFBLEtBQUEsZ0JBQUEsUUFBQSxDQUNBLFFBQUEsQ0FBQSxPQUFBLENBQ0EsQ0FBQSxFQUNBLGNBQUEsSUFBQSxDQUNBLEtBQUEsR0FBQSxFQUFBLEVBQUEsRUFDQSxLQUFBLE9BQUEsQ0FDQSxLQUFBLFVBQ0EsTUFBQSxnQkFBQUEsYUFBQSxDQUFBLElBQ0EsS0FBQSxHQUFBLEtBQUEsaUJBQUEsSUFDQSxDQUFBLENBQ0EsRUFDQSxZQUFBLEdBQUEsQ0FDQSxLQUFBLEdBQUEsRUFBQSxFQUFBLEVBQ0EsS0FBQSxPQUFBLENBQ0EsS0FBQSxRQUNBLE1BQUEsZ0JBQ0EsS0FBQSxDQUNBLGFBQUEsS0FBQSxLQUFBLFlBQUEsRUFBQSxJQUFBLEtBQ0Esa0JBQUEsVUFBQSxDQUNBLENBQ0EsQ0FBQSxDQUNBLENBQ0EsQ0FBQSxFQUVBLEdBRUEsR0FEQSxLQUFBLGdCQUFBLEVBQ0EsR0FBQSxFQUFBLFVBQ0EsS0FBQSxNQUFBLFVBQ0EsS0FBQSxXQUFBLENBRUEsS0FBQSxHQUFBLEtBQUEsVUFBQSxLQUFBLE9BQUEsS0FBQSxJQUFBLEVBQ0EsS0FBQSxRQUFBLFFBQUEsQ0FBQSxLQUFBLE1BQUEsSUFBQSxPQUFBLEdBQUEsQ0FDQSxFQUVBLE1BQUEsRUFDQSxPQUVBLGlCQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsQ0FDQSxZQUNBLFVBQ0EsZ0JBQ0EsZUFDQSxDQUVBLEtBQUEsR0FBQSxLQUFBLFdBQ0EsS0FBQSxjQUFBLENBQUEsRUFDQSxLQUFBLGNBQUEsQ0FBQSxFQUNBLEdBQUEsRUFDQSxhQUNBLEtBQUEsTUFBQSxnQkFBQSxFQUFBLFVBQUEsQ0FDQSxPQUFBLENBQ0EsQ0FBQSxNQUNBLENBQ0EsS0FBQSxHQUFBLGtDQUNBLFdBQUEsR0FDQSxLQUFBLE1BQUEsZ0JBQUEsRUFBQSxRQUFBLENBQ0EsT0FBQSxFQUNBLE9BQ0EsQ0FBQSxDQUNBLENBQ0EsTUFBQSxFQUNBLENBQ0EsQ0FDQSxDQUFBLDBJQ3ZjQSxLQUFBSixJQUFBLEdBQUEsVUFBQSxtQkFBQSxDQUFBLENBQUEsb0pDWklGLEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBUSxHQUFJLE9BQVEsRUFBRyxNQUFNLENBQUMsWUFBWSxhQUFhLEVBQUUsQ0FBQyxFQUFHLEtBQUssRUFBSSxHQUFJLEVBQUksT0FBUSxTQUFTLEVBQU0sQ0FBQyxNQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUksR0FBRyxFQUFJLEdBQUcsQ0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUksSUFBSSxFQUNsUEMsR0FBa0IsQ0FBQSxRQ3FCdEIsS0FBQUMsSUFBQSxFQUFBLFVBQUEsY0FBQSxDQUNBLE1BQUEsQ0FDQSxPQUFBLENBQUEsS0FBQSxNQUFBLFFBQUEsSUFBQSxDQUNBLENBQ0EsQ0FBQSxvSUMxQklGLEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBTyxHQUFHLE1BQU0sQ0FBQyxZQUFZLGFBQWEsRUFBRSxFQUFJLEdBQUksRUFBSSxPQUFRLFNBQVMsRUFBTSxFQUFJLENBQUMsTUFBTyxHQUFHLGNBQWMsQ0FBQyxJQUFJLEVBQUksTUFBTSxDQUFDLEdBQUssRUFBSSxhQUFhLENBQUssRUFBRSxPQUFTLEVBQUUsRUFBRSxZQUFZLEVBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxVQUFVLEdBQUcsU0FBUyxFQUFJLENBQ2xULEdBQUksR0FBVyxFQUFJLFNBQ25CLE1BQU8sQ0FBQyxFQUFHLFNBQVMsQ0FBQyxZQUFZLGNBQWMsTUFBTSxDQUFFLGdCQUFpQixFQUFNLE9BQVMsRUFBSSxNQUFNLE9BQVEsTUFBTSxDQUFDLEtBQU8sU0FBUyxNQUFRLEVBQU0sTUFBUSxFQUFJLFNBQVMsQ0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQVEsQ0FBUSxDQUFDLEVBQUUsQ0FBQyxFQUFJLEdBQUcsRUFBSSxHQUFHLEVBQUksU0FBUyxDQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQzFQQyxHQUFrQixDQUFBLFFDMkN0QixLQUFBQyxJQUFBLEVBQUEsVUFBQSxjQUFBLENBQ0EsTUFBQSxDQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsT0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxhQUFBLEVBQUEsQ0FDQSxLQUFBLEdBQUEsT0FBQSxLQUFBLE9BQUEsQ0FBQSxNQUFBLEVBQUEsSUFBQSxHQUNBLE1BQUEsR0FBQSxNQUNBLEdBQUEsS0FBQSxHQUVBLEtBQUEsYUFBQSxDQUFBLENBQ0EsQ0FDQSxDQUNBLENBQUEsb0lDN0RJRixHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQU8sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLFNBQVcsRUFBSSxNQUFNLE1BQVEsRUFBSSxNQUFNLEtBQU8sRUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLGNBQWMsU0FBUyxFQUFPLENBQUMsRUFBSSxLQUFLLENBQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNsT0MsR0FBa0IsQ0FBQSxFQ1l0QixLQUFBQyxJQUFBLEVBQUEsVUFBQSxrQkFBQSxDQUNBLFdBQUEsQ0FBQU8sV0FBQUEsRUFBQUEsVUFBQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxLQUFBLENBQ0EsS0FBQSxDQUNBLE1BQUEsRUFBQSxLQUFBLE1BQUEsTUFBQSxHQUFBLENBQ0EsRUFFQSxJQUFBLEVBQUEsQ0FDQSxBQUFBLEtBQUEsT0FBQSxHQUNBLEtBQUEsUUFBQSxLQUFBLEtBQUEsYUFBQSxPQUNBLEtBQUEsT0FEQSxDQUVBLEtBQUEsRUFBQSxDQUNBLEVBQUEsQ0FBQSxDQUVBLENBQ0EsQ0FDQSxDQUNBLENBQUEsb0lDbkNlLEdBQUEsQ0FDYixPQUFRLENBQUMsRUFB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SSxlQUFnQixDQUFLLEVBQUUsS0FBTyxFQUFLLEtBQUssS0FBTyxFQUFLLEtBQUssS0FBTyxFQUFLLEtBQUssT0FBUyxFQUFLLE9BQU8sVUFBWSxFQUFJLGtCQUFrQixNQUFRLEVBQUksYUFBYSxFQUFJLGVBQWdCLEVBQUssS0FBTSxDQUFFLE1BQU8sQ0FBSyxDQUFFLEVBQUUsTUFBUSxFQUFJLE1BQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUMza0ZDLEdBQWtCLENBQUEsUUMySnRCLEtBQUFDLElBQUEsRUFBQSxVQUFBLGlCQUFBLENBQ0EsV0FBQSxDQUFBUSxhQUFBQSxHQUFBQSxPQUFBLEVBQ0EsT0FBQSxDQUFBLEVBQUEsRUFDQSxPQUFBLENBQUEsV0FBQSxFQUVBLE1BQUEsQ0FDQSxPQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsQ0FBQSxNQUFBLE1BQUEsRUFBQSxRQUFBLElBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsT0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxVQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLENBQUEsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLENBQ0EsT0FBQSxLQUFBLE1BQUEsS0FBQSxPQUFBLElBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxNQUFBLENBQ0EsTUFBQSxNQUFBLFVBQUEsSUFDQSxFQUVBLE9BQUEsQ0FDQSxNQUFBLE1BQUEsVUFBQSxLQUNBLEVBRUEsVUFBQSxDQUNBLE1BQUEsTUFBQSxVQUFBLFFBQ0EsRUFFQSxZQUFBLENBQ0EsTUFBQSxRQUNBLEtBQUEsTUFEQSxDQUVBLE9BQUEsS0FBQSxNQUNBLEVBQ0EsRUFFQSxZQUFBLENBQ0EsTUFBQSxHQUFBLEtBQUEsT0FBQSxVQUFBLENBQ0EsRUFHQSxnQkFBQSxDQUNBLE1BQUEsTUFBQSxPQUFBLFFBQ0EsRUFFQSxjQUFBLE9BQ0EsS0FBQSxHQUFBLFFBQUEsaUJBQUEsY0FBQSxLQUNBLE1BQUEsSUFBQSxLQUFBLEtBQUEsRUFDQSxFQUVBLG1CQUFBLE9BQ0EsTUFDQSxTQUFBLGVBQUEsY0FBQSxRQUFBLEdBQ0EsS0FBQSxlQUFBLFlBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxHQUNBLE9BQUEsS0FBQSxjQUNBLENBQUEsQ0FFQSxFQUVBLGFBQUEsT0FDQSxNQUFBLFNBQUEsZUFBQSxjQUFBLFNBQUEsQ0FDQSxFQUVBLGVBQUEsT0FDQSxNQUFBLFNBQUEsYUFBQSxjQUFBLFNBQUEsQ0FDQSxFQUVBLFlBQUEsQ0FDQSxNQUFBLE1BQUEsY0FBQSxLQUFBLFdBQ0EsRUFFQSxlQUFBLE9BQ0EsS0FBQSxDQUFBLGtCQUFBLEtBQ0EsR0FBQSxFQUFBLENBQ0EsS0FBQSxDQUFBLFlBQUEsS0FBQSxVQUNBLEVBQUEsQ0FBQSxLQUFBLE1BQUEsRUFBQSxLQUVBLE1BQUEsU0FBQSxlQUFBLGNBQUEsSUFBQSxDQUFBLEVBQUEsSUFBQSxDQUNBLEtBQUEsR0FDQSxFQUFBLE1BQ0EsR0FBQSxLQUFBLFFBQUEsRUFBQSxRQUFBLElBRUEsRUFBQSxHQUVBLEVBQUEsV0FBQSxDQUFBLEdBQUEsRUFBQSxPQUFBLEVBQUEsT0FFQSxNQUFBLENBQ0EsT0FDQSxPQUNBLE9BQ0EsT0FMQSxJQUFBLENBTUEsQ0FDQSxLQUFBLENBQUEsQ0FDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLEtBQUEsQ0FBQSxlQUFBLEtBQ0EsTUFBQSxJQUFBLEdBQUEsS0FDQSxJQUFBLEVBQUEsT0FBQSxTQUVBLEVBRUEsZ0JBQUEsQ0FDQSxNQUFBLE1BQUEsV0FBQSxLQUFBLFVBQUEsS0FBQSxTQUNBLEVBTUEsVUFBQSxFQUFBLFlBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxHQUNBLElBQUEsRUFBQSxDQUNBLE1BQUEsSUFBQSxFQUFBLEtBQUEsTUFBQSxDQUNBLENBQ0EsQ0FBQSxFQUVBLFNBQUEsRUFBQSxXQUFBLENBQ0EsS0FBQSxRQUNBLFFBQUEsR0FDQSxJQUFBLEVBQUEsQ0FDQSxNQUFBLElBQUEsRUFBQSxLQUFBLE1BQUEsQ0FDQSxDQUNBLENBQUEsRUFFQSxVQUFBLEVBQUEsWUFBQSxDQUNBLEtBQUEsUUFDQSxRQUFBLEVBQ0EsQ0FBQSxDQUNBLEVBRUEsUUFBQSxDQUNBLG9CQUFBLEVBQUEsQ0FDQSxNQUFBLEdBQUEsS0FBQSxTQUFBLEVBQUEsSUFBQSxDQUNBLEVBRUEsUUFBQSxDQUdBLEtBQUEsUUFBQSxLQUFBLENBQ0EsS0FBQSxHQUFBLEtBQUEsVUFBQSxPQUFBLEtBQUEsT0FFQSxNQUFBLEtBQUEsT0FBQSxLQUNBLENBQUEsQ0FDQSxFQUVBLFVBQUEsQ0FFQSxFQUVBLFVBQUEsQ0FDQSxLQUFBLFVBQUEsU0FBQSxDQUNBLENBQ0EsQ0FDQSxDQUFBLG9JQ3BVSVYsR0FBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFPLEdBQUcsUUFBUSxDQUFDLFlBQVksaUJBQWlCLEVBQUUsQ0FBQyxFQUFHLEtBQUssQ0FBQyxFQUFJLEdBQUksRUFBSSxRQUFTLFNBQVMsRUFBTyxFQUFNLENBQUMsTUFBUSxHQUFJLGFBQWEsQ0FBTSxFQUFHLEVBQUcsS0FBSyxDQUFDLE1BQU0sRUFBSSxlQUFlLENBQU0sQ0FBQyxFQUFFLENBQUUsRUFBTyxTQUFVLEVBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFLLEVBQUksWUFBWSxDQUFNLEVBQUUsT0FBUyxFQUFFLEVBQUUsWUFBWSxFQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksVUFBVSxHQUFHLFNBQVMsRUFBSSxDQUN2WixHQUFJLEdBQVcsRUFBSSxTQUNuQixNQUFPLENBQUMsRUFBRyxTQUFTLENBQUMsWUFBWSxjQUFjLE1BQU0sRUFBSSxhQUFhLENBQU0sRUFBRSxNQUFNLENBQUMsS0FBTyxRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQVEsQ0FBUSxDQUFDLEVBQUUsQ0FBQyxFQUFHLE1BQU0sQ0FBQyxZQUFZLG1CQUFtQixDQUFDLEVBQUUsRUFBRyxPQUFPLENBQUMsRUFBSSxHQUFHLEVBQUksR0FBRyxFQUFJLFNBQVMsQ0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUcsT0FBTyxDQUFDLEVBQUksR0FBRyxFQUFJLEdBQUcsRUFBSSxTQUFTLENBQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUksR0FBRSxDQUFFLENBQUMsRUFBRyxFQUFJLGVBQWdCLEVBQUcsS0FBSyxDQUFDLEVBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFJLEdBQUUsQ0FBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDcldDLEdBQWtCLENBQUEsUUN3RHRCLEtBQUFDLElBQUEsRUFBQSxVQUFBLGtCQUFBLENBQ0EsTUFBQSxDQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsUUFBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxlQUFBLENBQUEsS0FBQSxRQUFBLFNBQUEsRUFBQSxDQUNBLEVBRUEsU0FBQSxDQUNBLE1BQUEsQ0FDQSxLQUFBLEdBQUEsTUFBQSxNQUFBLE9BQUEsSUFBQSxNQUFBLEtBQUEsRUFDQSxNQUFBLENBQ0EsS0FBQSxFQUFBLEdBQ0EsTUFBQSxFQUFBLEVBQ0EsQ0FDQSxDQUNBLEVBRUEsUUFBQSxDQUNBLGVBQUEsRUFBQSxDQUNBLE1BQUEsZUFBQWhCLEVBQUFBLFVBQUEsRUFBQSxJQUFBLEdBQ0EsRUFFQSxhQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsS0FBQSxPQUFBLEVBQUEsS0FDQSw0QkFBQSxLQUFBLEtBQUEsUUFDQSxJQUNBLEVBRUEsWUFBQSxFQUFBLENBRUEsS0FBQSxHQUFBLEtBQUEsS0FBQSxPQUFBLEVBQUEsTUFBQSxLQUFBLEtBQUEsUUFBQSxNQUNBLE9BQ0EsTUFDQSxNQUFBLE1BQUEsYUFBQSxPQUNBLEtBQUEsT0FEQSxDQUVBLE1BQUEsR0FBQSxFQUFBLFFBQUEsR0FDQSxFQUFBLENBQ0EsQ0FDQSxDQUNBLENBQUEsb0lDbEdJYyxHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFJLEtBQUssTUFBTSxNQUFPLEVBQUksS0FBSyxLQUFNLEVBQUUsQ0FBRSxFQUFJLFVBQVcsRUFBRyxFQUFJLFVBQVUsQ0FBQyxJQUFJLFlBQVksTUFBTSxDQUFDLE9BQVMsRUFBSSxPQUFPLFNBQVcsRUFBSSxTQUFTLEtBQU8sRUFBSSxLQUFLLEtBQU8sRUFBSSxLQUFLLE1BQVEsRUFBSSxNQUFNLE9BQVMsRUFBSSxPQUFPLFNBQVcsRUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFZLEVBQUksR0FBRyxFQUFJLFdBQVcsRUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUNqYUMsR0FBa0IsQ0FBQSxFQzZCdEIsS0FBQUMsSUFBQSxFQUFBLFVBQUEsa0JBQUEsQ0FDQSxNQUFBLENBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxPQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsT0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxTQUFB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QUcsTUFBTSxDQUFDLElBQUksT0FBTyxZQUFZLFlBQVksTUFBTyxFQUFJLE1BQU8sTUFBTSxDQUFDLEdBQUssRUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQ3RMQyxHQUFrQixDQUFBLFFDMEN0QixLQUFBQyxJQUFBVSxFQUFBLFNBQUEsT0FBQSxDQUNBLE9BQUEsQ0FBQSxDQUFBLEVBRUEsU0FBQSxDQUNBLE9BQUEsQ0FDQSxNQUFBLE1BQUEsT0FBQSxPQUFBLENBQ0EsRUFFQSxPQUFBLENBQ0EsTUFBQSxnQkFBQSxLQUFBLCtCQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsS0FBQSxHQUFBLEdBQUFFLElBQUFBLFFBQUEsS0FBQSxNQUFBLEtBQUEsQ0FDQSxTQUFBLEtBQUEsT0FBQSxVQUFBLGFBQ0EsUUFBQSxLQUFBLE9BQUEsWUFBQSxFQUNBLFlBQUEsRUFDQSxDQUFBLEVBRUEsR0FBQSxHQUFBLEdBQ0EsRUFBQSxHQUNBLEVBQUEsR0FFQSxLQUFBLEdBQUEsSUFBQSxDQUNBLEFBQUEsQ0FBQSxLQUFBLFNBQUEsR0FDQSxHQUFBLEdBQ0EsS0FBQSxTQUFBLEVBRUEsRUFFQSxFQUFBLElBQUEsS0FBQSxRQUFBLEVBRUEsRUFBQSxJQUFBLENBQ0EsS0FBQSxPQUFBLEVBQ0EsRUFBQSxDQUNBLEVBRUEsS0FBQSxNQUFBLEtBQUEsTUFBQSxLQUFBLGNBQUEsVUFBQSxFQUFBLENBQ0EsTUFBQSxFQUNBLEtBQUEsQ0FDQSxDQUFBLEVBRUEsS0FBQSxHQUFBLEdBQUEsQ0FDQSxBQUFBLElBQUEsRUFBQSxNQUNBLEdBQUEsR0FDQSxFQUFBLFdBQUEsQ0FBQSxFQUVBLEVBRUEsRUFBQSxHQUFBLENBQ0EsQUFBQSxJQUFBLEtBQUEsT0FDQSxHQUFBLEdBQ0EsS0FBQSxNQUFBLEVBQ0EsRUFBQSxHQUNBLEVBQUEsRUFFQSxFQUVBLEVBQUEsU0FBQSxHQUFBLENBQ0EsQUFBQSxFQUNBLEVBQUEsR0FFQSxFQUFBLENBQUEsQ0FFQSxDQUFBLEVBRUEsS0FBQSxPQUFBLFFBQUEsR0FBQSxDQUNBLEFBQUEsRUFDQSxFQUFBLEdBRUEsRUFBQSxHQUFBLEVBQUEsQ0FFQSxDQUFBLEVBRUEsRUFBQSxLQUFBLE9BQUEsRUFBQSxDQUNBLEVBRUEsUUFBQSxDQUNBLGNBQUEsT0FDQSxRQUFBLElBQUEsY0FBQSxVQUFBLElBQUEsUUFBQSxPQUNBLENBQ0EsQ0FDQSxDQUFBLG9JQzlISWQsR0FBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFPLEdBQUcsVUFBVSxDQUFDLFlBQVksYUFBYSxNQUFNLENBQUMsUUFBVSxRQUFRLEtBQU8sRUFBSSxTQUFTLEVBQUUsR0FBRyxDQUFDLGNBQWMsU0FBUyxFQUFPLENBQUMsRUFBSSxVQUFVLENBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFHLE1BQU0sQ0FBQyxZQUFZLGFBQWEsTUFBTSxDQUFFLGFBQWMsRUFBSSxTQUFXLEVBQUMsTUFBTSxDQUFDLEtBQU8sU0FBUyxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUMsRUFBRyxRQUFRLEVBQUksR0FBRyxFQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLFFBQVEsUUFBUSxVQUFVLE1BQU8sRUFBSSxTQUFVLFdBQVcsVUFBVSxDQUFDLEVBQUUsSUFBSSxVQUFVLE1BQU0sQ0FBQyxHQUFLLEVBQUksU0FBUyxLQUFPLFFBQVEsS0FBTyxHQUFHLEVBQUUsU0FBUyxDQUFDLE1BQVMsRUFBSSxRQUFTLEVBQUUsR0FBRyxDQUFDLE1BQVEsU0FBUyxFQUFPLENBQUMsQUFBRyxFQUFPLE9BQU8sV0FBcUIsR0FBSSxTQUFTLEVBQU8sT0FBTyxNQUFLLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBSSxXQUFXLEVBQUssRUFBRSxFQUFJLFNBQVMsQ0FBQyxFQUFHLEVBQUksTUFBTyxFQUFHLE1BQU0sQ0FBQyxZQUFZLHVDQUF1QyxFQUFFLENBQUMsRUFBRyxNQUFNLENBQUMsTUFBTyxDQUFFLFdBQWEsSUFBTyxHQUFJLFVBQVksV0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBSSxHQUFFLEVBQUksRUFBSSxnQkFBaUIsRUFBRyxTQUFTLENBQUMsWUFBWSx3Q0FBd0MsTUFBTSxDQUFDLFNBQVcsRUFBSSxRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQVEsU0FBUyxFQUFPLENBQUMsU0FBTyxnQkFBaUIsRUFBUSxFQUFJLE1BQU0sTUFBTSxLQUFNLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUksR0FBRSxDQUFFLENBQUMsRUFBRSxFQUFHLGdCQUFnQixDQUFDLFlBQVksb0JBQW9CLE1BQU0sQ0FBQyxLQUFPLFFBQVEsZ0JBQWdCLENBQUMsRUFBSSxNQUFNLGlCQUFpQixDQUFDLEVBQUksT0FBTyxnQkFBZ0IsRUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRLE1BQU0sQ0FBQyxNQUFPLEVBQUksV0FBWSxTQUFTLFNBQVUsRUFBSyxDQUFDLEVBQUksV0FBVyxDQUFHLEVBQUUsV0FBVyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ3QyQ0MsR0FBa0IsQ0FBQSxRQzRFdEIsS0FBQUMsSUFBQVUsRUFBQSxTQUFBLFFBQUEsQ0FDQSxXQUFBLENBQUEsUUFBQUcsRUFBQSxRQUFBLGFBQUFDLFNBQUEsRUFFQSxNQUFBLENBQ0EsTUFBQSxDQUNBLFVBQUEsR0FDQSxrQkFBQSxJQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsV0FBQSxDQUNBLEtBQUEsQ0FDQSxNQUFBLE1BQUEsT0FBQSxDQUFBLENBQ0EsRUFFQSxJQUFBLEVBQUEsQ0FDQSxLQUFBLEdBQUEsS0FBQSxZQUNBLEVBQUEsQ0FFQSxJQUFBLGtCQUFBLEdBQUEsRUFBQSxPQUFBLE1BQ0EsSUFBQSxNQUNBLEVBQUEsSUFBQSxFQUNBLEFBQUEsRUFDQSxLQUFBLE1BQUEsRUFBQSxHQUVBLEtBQUEsTUFBQUMsR0FBQSxRQUFBLENBQUEsRUFBQSxTQUFBLENBQUEsRUFFQSxLQUFBLFNBQUEsQ0FDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLEtBQUEsQ0FDQSxHQUFBLEtBQUEsT0FBQSxLQUNBLEtBQUEsa0JBQUEsYUFDQSxDQUFBLEtBQUEsUUFBQSxDQUNBLEtBQUEsR0FBQUEsR0FBQUEsUUFBQSxLQUFBLEtBQUEsRUFDQSxBQUFBLEVBQUEsV0FDQSxNQUFBLGtCQUFBLEVBQ0EsU0FBQSxFQUFBLFNBQUEsRUFBQSxFQUFBLE9BQUEsTUFBQSxFQUNBLE1BQUEsQ0FBQSxFQUNBLFlBQUEsRUFFQSxDQUNBLE1BQUEsTUFBQSxpQkFDQSxFQUVBLElBQUEsRUFBQSxDQUNBLEtBQUEsa0JBQUEsQ0FDQSxDQUNBLEVBSUEsWUFBQSxFQUFBLFNBQUEsQ0FDQSxLQUFBLE9BQ0EsUUFBQSxLQUNBLENBQUEsRUFFQSxNQUFBLEVBQUEsUUFBQSxDQUNBLEtBQUEsUUFDQSxRQUFBLEVBQ0EsQ0FBQSxFQUVBLE9BQUEsRUFBQSxTQUFBLENBQ0EsS0FBQSxRQUNBLFFBQUEsRUFDQSxDQUFBLEVBRUEsUUFBQSxFQUFBLFVBQUEsQ0FDQSxLQUFBLE1BQ0EsUUFBQSxDQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFFQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFdBQ0EsQ0FDQSxDQUFBLENBQ0EsRUFFQSxNQUFBLENBQ0EsUUFBQSxFQUFBLENBQ0EsR0FBQSxDQUFBLEdBQUEsS0FBQSxrQkFBQSxDQUNBLEtBQUEsR0FBQUEsR0FBQUEsUUFBQSxJQUFBLEtBQUEsbUJBQUEsRUFDQSxBQUFBLFdBQUEsV0FDQSxNQUFBLE1BQUEsRUFBQSxTQUFBLEtBQUEsV0FBQSxFQUVBLEtBQUEsU0FBQSxFQUVBLENBQ0EsQ0FDQSxDQUNBLENBQUEsb0lDdkxJakIsR0FBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFPLEdBQUcsRUFBSSxVQUFVLEVBQUksR0FBRyxDQUFDLElBQUksV0FBVyxFQUFFLFlBQVksRUFBSSxPQUFPLEVBQUssQ0FBQyxDQUFDLEVBQ3BLQyxHQUFrQixDQUFBLEVDa0J0QixLQUFBQyxJQUFB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LENBQUMsQ0FBQyxFQUFFLEVBQUksR0FBRSxDQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUksR0FBRSxDQUFFLEVBQ2gyRkMsR0FBa0IsQ0FBQSxRQzhLdEIsS0FBQUMsSUFBQVUsRUFBQSxTQUFBLE9BQUEsQ0FDQSxXQUFBLENBQUFGLGFBQUFBLEdBQUFBLE9BQUEsRUFDQSxPQUFBLENBQUEsR0FBQSxFQUFBLEVBRUEsY0FBQSxFQUFBLENBRUEsTUFBQSxFQUNBLEVBRUEsZUFBQSxFQUFBLEVBQUEsRUFBQSxDQUNBLEtBQUEsQ0FBQSxXQUFBLEVBR0EsR0FBQSxFQUFBLENBSUEsS0FBQSxHQUFBLElBQUEsRUFBQSx1QkFDQSxFQUNBLEdBQUEsRUFBQSxPQUFBLE1BQ0EsRUFFQSxNQUFBLElBQ0EsRUFBQSxDQUFBLEVBQ0EsRUFDQSxJQUNBLFFBQUEsT0FDQSxNQUFBLEtBQUEsSUFBQSxjQUFBLEtBQ0EsS0FDQSxPQUFBLEVBQUEsQ0FDQSxLQUFBLEdBQUEsRUFBQSxFQUNBLEdBQUEsRUFBQSxDQUVBLEtBQUEsR0FBQSxHQUFBN0IsRUFBQSxPQUFBLEVBQUEsR0FBQSxJQUFBLE1BQUEsRUFDQSxBQUFBRyxFQUFBQSxPQUFBLEVBQUEsQ0FBQSxFQUFBLEVBQUEsRUFBQSxLQUFBLENBQUEsR0FDQSxHQUFBLE1BQUEsRUFDQSxFQUFBLFNBQUEsRUFBQSxFQUVBLENBQ0EsQ0FDQSxDQUNBLENBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxnQkFBQSxDQUNBLE1BQUEsQ0FBQSxDQUNBLE1BQUEsZUFDQSxLQUFBLFVBRUEsRUFFQSxnQkFBQSxDQUNBLEtBQUEsQ0FBQSxZQUFBLEtBQ0EsTUFBQSxHQUFBLE9BQUEsR0FDQSxNQUFBLFVBQ0EsS0FBQSxXQUNBLEtBQUEsVUFFQSxFQUVBLG9CQUFBLENBQ0EsTUFBQSxDQUFBLEtBQUEsV0FBQSxLQUFBLGNBQ0EsRUFFQSxjQUFBLENBQ0EsTUFBQSxDQUFBLE1BQUEsU0FBQSxPQUFBLEVBQ0EsRUFFQSxZQUFBLENBQ0EsTUFDQSxNQUFBLFFBQUEsT0FBQSxLQUFBLEtBQUEs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QUEsQ0FDQSxjQUFBUyxFQUFBLGNBQ0EsY0FBQUMsRUFBQSxjQUNBLEtBQUFDLEVBQUEsSUFDQSxFQUVBLE9BQUEsQ0FBQSxDQUFBLEVBRUEsTUFBQSxDQUNBLE1BQUEsQ0FDQSxPQUFBLEtBQ0EsT0FBQSxJQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsT0FBQSxDQUNBLE1BQUEsTUFBQSxPQUFBLE9BQUEsRUFDQSxFQUVBLFFBQUEsQ0FDQSxNQUFBLENBQ0EsT0FBQSxLQUFBLFFBQUEsUUFBQSxLQUFBLCtCQUNBLENBQ0EsRUFFQSxhQUFBLENBQ0EsTUFBQSxNQUFBLFdBQUEsUUFBQSxDQUNBLEtBQUEsR0FDQSxPQUFBLEdBQ0EsVUFBQSxHQUNBLE9BQUEsR0FDQSxNQUFBLEdBQ0EsS0FBQSxHQUNBLEtBQUEsQ0FDQSxRQUFBLEdBQUEsS0FBQSxZQUFBLENBQUEsQ0FDQSxDQUNBLENBQUEsQ0FDQSxFQUVBLGtCQUFBLENBQ0EsTUFBQSxNQUFBLFdBQUEsUUFBQSxDQUNBLFVBQUEsQ0FHQSxhQUFBLElBQ0EsS0FBQSxpQkFBQSxLQUFBLEdBQUEsRUFBQSxRQUFBLENBQ0EsRUFDQSxRQUFBLENBQ0EsS0FBQSxRQUNBLE9BQUEsQ0FBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsQ0FBQSxDQUNBLENBQ0EsQ0FBQSxDQUNBLEVBRUEsa0JBQUEsQ0FDQSxNQUFBLE1BQUEsV0FBQSxRQUFBLENBQ0EsV0FBQSxHQUNBLFlBQUEsR0FDQSxXQUFBLEdBQ0EsVUFBQSxFQUNBLENBQUEsQ0FDQSxFQUVBLGFBQUEsQ0FDQSxNQUFBLE1BQUEsV0FBQSxRQUFBLENBQ0EsS0FBQSxHQUNBLEtBQUEsRUFDQSxDQUFBLENBQ0EsRUFFQSxnQkFBQSxDQUNBLEtBQUEsQ0FDQSxjQUNBLG1CQUNBLG1CQUNBLGVBQ0EsS0FDQSxNQUFBLENBQ0EsRUFDQSxFQUNBLEVBQ0EsQ0FDQSxFQUFBLE9BQUEsR0FBQSxFQUFBLE9BQUEsQ0FBQSxDQUNBLEVBRUEsY0FBQSxDQUNBLE1BQUEsQ0FDQSxtQkFBQSxDQUNBLFNBQUEsR0FDQSxTQUFBLEdBQ0EsZUFBQSxNQUNBLEVBQUEsS0FBQSxXQUNBLENBQ0EsRUFFQSxlQUFBLENBQ0EsTUFBQSxDQUNBLFNBQUEsQ0FBQSxLQUFBLFVBQ0EsVUFBQSxLQUFBLFVBQ0Esa0JBQUEsQ0FBQSxLQUFBLFlBQUEsTUFDQSxrQkFBQSxDQUFBLEtBQUEsWUFBQSxNQUNBLGFBQUEsS0FBQSxZQUNBLENBQ0EsRUFFQSxVQUFBLEVBQUEsWUFBQSxDQUNBLEtBQUEsUUFDQSxRQUFBLEVBQ0EsQ0FBQSxFQUVBLFdBQUEsRUFBQSxhQUFBLENBQ0EsS0FBQSxPQUNBLFFBQUEsVUFFQSxDQUFBLEVBRUEsWUFBQSxFQUFBLGNBQUEsQ0FDQSxLQUFBLENBQUEsT0FBQSxPQUFBLEVBQ0EsUUFBQSxHQUNBLElBQUEsRUFBQSxDQUNBLE1BQUE3QyxHQUFBQSxTQUFBLENBQUEsRUFDQSxFQUNBLENBQ0EsTUFBQSxDQUFBLENBQUEsRUFDQSxNQUFBLENBQUEsQ0FBQSxDQUNBLENBQ0EsQ0FDQSxDQUFBLENBQ0EsRUFFQSxNQUFBLENBQ0EsVUFBQSxzQkFDQSxVQUFBLHNCQUNBLFlBQUEscUJBQ0EsRUFFQSxTQUFBLENBQ0EsR0FBQSxHQUFBLEdBQ0EsRUFBQSxHQUVBLEtBQUEsR0FBQSxJQUFBLENBQ0EsQUFBQSxDQUFBLEtBQUEsU0FBQSxHQUNBLEdBQUEsR0FDQSxLQUFBLFNBQUEsRUFFQSxFQUVBLEVBQUEsSUFBQSxLQUFBLFFBQUEsRUFFQSxFQUFBLElBQUEsQ0FDQSxLQUFBLE9BQUEsRUFDQSxFQUFBLENBQ0EsRUFFQSxFQUFBOEMsRUFBQSxTQUFBLEdBQUEsQ0FDQSxFQUFBLEdBQ0EsS0FBQSxNQUFBLEVBQUEsRUFDQSxFQUFBLEdBQ0EsRUFBQSxDQUNBLEVBQUEsR0FBQSxFQUVBLEVBQUEsQ0FBQSxDQUFBLGFBQUEsQ0FDQSxFQUFBLENBQUEsRUFDQSxLQUFBLFFBQUEsQ0FDQSxFQUVBLEtBQUEsT0FBQSxRQUFBLEdBQUEsQ0FDQSxBQUFBLEVBQ0EsRUFBQSxHQUVBLEtBQUEsT0FBQSxXQUFBLEVBQUEsR0FBQSxLQUFBLFlBQUEsQ0FFQSxDQUFBLEVBRUEsS0FBQSxPQUFBLEdBQUFDLFVBQUEsT0FDQSxLQUFBLGVBREEsQ0FFQSxVQUNBLFNBQ0EsV0FDQSxXQUFBLEtBQUEsaUJBQUEsRUFDQSxRQUFBLEtBQUEsT0FBQSxFQUNBLEVBQUEsQ0FDQSxFQUVBLGVBQUEsQ0FDQSxLQUFBLE9BQUEsUUFBQSxDQUNBLEVBRUEsUUFBQSxDQUNBLGFBQUEsRUFBQSxDQUNBLEtBQUEsR0FBQSxDQUFBLENBQUEsUUFBQSxFQUFBLFFBQUEsS0FBQSxFQUFBLElBQUEsTUFFQSxHQUFBLEdBQUEsRUFBQSxDQUFBLEVBQUEsRUFDQSxFQUFBLFdBQUEsaUJBQUEsS0FBQSxNQUFBLE9BQUEsR0FBQSxFQUFBLE1BQUEsRUFFQSxLQUFBLEdBQUEsR0FBQSxDQUNBLEtBQUEsQ0FBQSxLQUFBLEVBQUEsQ0FBQSxFQUNBLEdBQUEsRUFBQSxFQUNBLEVBQUEsRUFDQSxLQUFBLE9BQUEsR0FBQSxLQUFBLElBQUEsRUFBQSxDQUFBLEtBQ0EsRUFFQSxFQUFBLEtBQUEsTUFBQSxTQUFBLENBQ0EsWUFFQSxRQUFBLEVBQUEsQ0FDQSxFQUFBLENBQUEsRUFDQSxFQUFBLE9BQUEsQ0FDQSxDQUNBLENBQUEsQ0FDQSxFQUVBLHFCQUFBLENBQ0EsS0FBQSxPQUFBLFdBQUEsS0FBQSxhQUFBLENBQ0EsT0FFQSxhQUFBLEVBQUEsQ0FDQSxLQUFBLEdBQUEsS0FBQSxNQUFBLFdBQUEsQ0FDQSxXQUFBLENBQ0EsS0FBQSxDQUNBLEtBQUEsTUFDQSxNQUFBLE9BQ0EsVUFBQSxFQUNBLEVBQ0EsTUFBQSxDQUNBLEtBQUEsT0FDQSxNQUFBLE9BQ0EsQ0FDQSxFQUNBLFFBQUEsQ0FDQSxPQUFBLENBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxRQUFBLEVBQ0EsT0FBQSxDQUNBLE9BQUEsQ0FDQSxNQUFBLENBQUEsbUJBQUEsQ0FDQSxFQUFBLFFBQUEsQ0FDQSxLQUFBLEtBQ0EsTUFBQSxJQUNBLENBQUEsQ0FDQSxDQUNBLENBQ0EsQ0FDQSxFQUNBLEtBQUEsS0FBQSxPQUFBLGFBQUEsTUFBQSxDQUNBLENBQUEsRUFDQSxHQUFBLEVBQUEsQ0FDQSxHQUFBLENBQUEsT0FBQSxTQUFBLEVBQ0EsR0FBQSxFQUdBLEdBQUEsQ0FDQSxHQUFBLEtBQUEsQ0FBQSxDQUNBLE1BQUEsQ0FDQSxFQUFBLFVBQUEsR0FDQSxDQUVBLEVBQUEsQ0FBQSxPQUFBLFFBQUEsQ0FDQSxDQUNBLEVBRUEsa0JBQUEsQ0FDQSxLQUFBLENBQ0EsUUFBQSxDQUFBLEVBQ0EsUUFBQSxDQUFBLEVBQ0EsUUFBQSxDQUFBLEdBQ0EsS0FBQSxPQUNBLE1BQUEsQ0FFQSxFQUFBLE1BQUEsR0FBQUMsUUFDQSxFQUFBLFFBQUEsR0FBQUMsVUFDQSxFQUFBLFdBQUEsR0FBQUMsYUFDQSxFQUFBLFFBQUEsR0FBQUMsVUFDQSxFQUFBLE9BQUEsR0FBQSxJQUNBLEVBQUEsTUFBQSxHQUFBQyxRQUNBLEVBQUEsTUFBQSxHQUFBLElBR0EsRUFBQSxZQUFBLEdBQUFDLGNBQ0EsRUFBQSxXQUFBLEdBQUFDLGFBQ0EsR0FBQUMsYUFDQSxFQUFBLFNBQUEsR0FBQUMsR0FBQSxRQUFBLENBQUEsT0FBQSxFQUFBLFFBQUEsRUFDQSxFQUFBLGdCQUFBLEdBQUFDLGtCQUNBLEdBQUEsYUFBQSxFQUFBLGFBQUEsR0FBQUMsR0FBQUEsU0FDQSxFQUFBLFlBQUEsR0FBQUMsY0FDQSxFQUFBLGFBQUEsR0FBQUMsZUFNQSxFQUFBLFNBQUEsR0FBQUMsVUFDQSxFQUFBLE9BQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUNBLEVBRUEsV0FBQSxFQUFBLEVBQUEsQ0FDQSxLQUFBLEdBQUEsQ0FBQSxFQUVBLEVBQUEsQ0FBQSxDQUFBLE9BQUEsT0FBQSxRQUFBLGVBQUEsYUFBQSxDQUNBLEtBQUEsR0FBQSxLQUFBLE9BQUEsU0FBQSxHQUNBLEVBQUEsS0FBQSxPQUFBLFNBQUEsR0FDQSxFQUFBLEtBQUEsQ0FDQSxPQUNBLE9BQ0EsU0FDQSxrQkFBQSxLQUNBLElBQUEsTUFBQSxDQUFBLEtBRUEsUUFBQSxJQUFBLEVBQ0EsRUFBQSxFQUFBLENBQUEsRUFDQSxFQUFBLENBQUEsQ0FDQSxDQUFBLENBQ0EsRUFFQSxFQUFBLEtBQUEsT0FBQSxHQUNBLEdBQUEsRUFDQSxTQUFBLENBQUEsRUFBQSxJQUFBLFFBQUEsUUFBQSxDQUFBLEVBQUEsQ0FDQSxLQUFBLEdBQUEsQ0FBQSxPQUFBLE1BQUEsRUFBQSxTQUFBLENBQUEsRUFBQSxVQUFBLEVBQ0EsRUFBQSxFQUFBLEdBQ0EsRUFBQUMsRUFBQSxXQUFBLENBQUEsRUFDQSxFQUFBdEQsRUFBQSxVQUFBLENBQUEsRUFDQSxHQUFBLEdBQ0EsR0FBQSxJQUFBLEdBQ0EsRUFBQSxDQUFBLE9BQUEsT0FBQSxVQUNBUixFQUFBQSxTQUFBLENBQUEsRUFBQSxDQUNBLEtBQUEsQ0FBQSxPQUFBLFNBQUEsZUFBQSxXQUFBLEVBQ0EsR0FBQSxHQUNBLEdBQUFOLEVBQUEsUUFBQSxDQUFBLEdBQUFBLEVBQUEsUUFBQSxDQUFBLEVBRUEsU0FBQSxLQUFBLEdBQ0EsQUFBQSxFQUFBLFNBQUEsQ0FBQSxHQUNBLEVBQUEsQ0FDQSxPQUNBLEtBQUEsR0FBQSxLQUFBLElBQ0EsTUFBQSxFQUFBLEdBQUEsQ0FBQSxFQUNBLGVBQ0EsU0FDQSxDQUFBLE1BS0EsR0FBQSxDQUFBLE9BQUEsT0FBQSxlQUFBLFNBQUEsQ0FBQSxDQUVBLEVBRUEsQ0FFQSxNQUFBLEVBQ0EsRUFFQSxjQUFBLFNBQ0EsV0FBQSxLQUFBLGlCQUFBLGdCQUNBLEtBQUEsT0FBQSxNQUFBLENBQ0EsQ0FDQSxDQUNBLENBQUEsRUFFQSxNQUFBLFVBQUFxRSxHQUFBQSxJQUFBLElBQ0EsT0FBQSxDQUNBLE1BQUEsT0FDQSxJQUVBLFNBQUEsQ0FDQSxNQUFBLENBQ0EsU0FBQSxDQUNBLENBQUEsSUFBQSxPQUFBLENBQ0EsRUFDQSxNQUFBLElBQUEsQ0FBQSxRQUFBLENBQUEsQ0FDQSxDQUNBLENBRUEsU0FBQSxDQUFBLFFBQUEsQ0FDQSxNQUFBLElBQUFDLEdBQUEsV0FBQSxDQUFBLENBQ0EsQ0FDQSxDQUNBLE1BQUEsVUFBQUMsR0FBQUEsSUFBQSxJQUNBLFNB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LENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxRQUFRLFFBQVEsVUFBVSxNQUFPLEVBQUksY0FBZSxXQUFXLGVBQWUsQ0FBQyxFQUFFLElBQUksVUFBVSxNQUFNLENBQUMsR0FBSyxFQUFJLFFBQVEsRUFBRSxHQUFHLENBQUMsVUFBWSxTQUFTLEVBQU8sQ0FBQyxFQUFJLFNBQVcsRUFBSSxFQUFFLE1BQVEsU0FBUyxFQUFPLENBQUMsRUFBSSxTQUFXLEVBQUksRUFBRSxPQUFTLFNBQVMsRUFBTyxDQUFDLEdBQUksR0FBZ0IsTUFBTSxVQUFVLE9BQU8sS0FBSyxFQUFPLE9BQU8sUUFBUSxTQUFTLEVBQUUsQ0FBQyxNQUFPLEdBQUUsUUFBUSxDQUFDLEVBQUUsSUFBSSxTQUFTLEVBQUUsQ0FBQyxHQUFJLEdBQU0sVUFBWSxHQUFJLEVBQUUsT0FBUyxFQUFFLE1BQU0sTUFBTyxFQUFHLENBQUMsRUFBRyxFQUFJLGNBQWMsRUFBTyxPQUFPLFNBQVcsRUFBZ0IsRUFBYyxFQUFFLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBSSxXQUFXLEVBQUssRUFBRSxFQUFJLFNBQVMsRUFBRSxDQUFFLEVBQUksU0FBVSxDQUFDLEVBQUksR0FBSSxFQUFJLFFBQVMsU0FBUyxFQUFPLENBQUMsTUFBTyxDQUFFLEVBQUksUUFBUyxFQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBUSxFQUFPLEVBQUksYUFBYSxDQUFDLEVBQUUsRUFBSSxHQUFJLEVBQU8sRUFBSSxnQkFBaUIsU0FBUyxFQUFJLENBQUMsTUFBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBUSxFQUFJLGtCQUFrQixDQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBSSxHQUFHLEVBQUksR0FBRyxFQUFJLGtCQUFrQixDQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFRLEVBQUksa0JBQWtCLENBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFJLEdBQUcsRUFBSSxHQUFH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QUFBLE1BQUEsTUFBQSxNQUNBLEVBRUEsT0FBQSxDQUNBLE1BQUEsSUFBQSxLQUFBLEtBQUEsQ0FDQSxFQUVBLFNBQUEsRUFBQSxXQUFBLENBQ0EsS0FBQSxRQUNBLFFBQUEsR0FFQSxTQUFBLEVBQ0EsQ0FBQSxFQUVBLFdBQUEsRUFBQSxhQUFBLENBQ0EsS0FBQSxDQUFBLE1BQUEsT0FBQSxNQUFBLENBQ0EsQ0FBQSxFQUVBLE9BQUEsRUFBQSxTQUFBLENBQ0EsS0FBQSxNQUNBLElBQUEsRUFBQSxDQUNBLE1BQUF0QyxHQUFBQSxRQUFBLENBQUEsRUFBQSxFQUFBLEtBQUEsR0FBQSxFQUFBLENBQ0EsQ0FDQSxDQUFBLEVBRUEsUUFBQSxFQUFBLFVBQUEsQ0FDQSxLQUFBLENBQUEsT0FBQSxNQUFBLEVBQ0EsSUFBQSxFQUFBLENBQ0EsTUFBQSxHQUFBNkUsR0FBQUEsUUFBQSxDQUFBLEVBQUEsTUFDQSxDQUNBLENBQUEsRUFFQSxVQUFBLEVBQUEsWUFBQSxDQUNBLEtBQUEsUUFDQSxRQUFBLEdBQ0EsSUFBQSxFQUFBLENBQ0EsTUFBQSxJQUFBLEtBQUEsTUFBQSxPQUFBLENBQ0EsQ0FDQSxDQUFBLEVBRUEsVUFBQSxFQUFBLFlBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxFQUNBLENBQUEsRUFFQSxlQUFBLENBQ0EsTUFBQSxNQUFBLFFBQUEsUUFDQSxDQUFBLE1BQUEsT0FBQSxRQUFBLEtBQUEsT0FBQSxTQUNBLEVBRUEsZ0JBQUEsQ0FDQSxNQUFBLE1BQUEsUUFBQSxRQUFBLEtBQUEsT0FBQSxNQUNBLEVBRUEsZ0JBQUEsQ0FDQSxNQUNBLE1BQUEsUUFBQSxPQUFBLENBQUEsRUFBQSxJQUFBLEVBQUEsRUFBQSxTQUFBLENBQUEsRUFDQSxLQUFBLFFBQUEsTUFFQSxFQUVBLFlBQUEsQ0FDQSxNQUFBLE1BQUEsZUFBQSxDQUNBLEtBQUEsU0FDQSxLQUFBLEtBQUEsSUFBQSxjQUFBLEtBQUEsUUFBQSxDQUNBLENBQUEsQ0FDQSxDQUNBLEVBRUEsUUFBQSxDQUNBLFdBQUEsRUFBQSxFQUFBLENBQ0EsS0FBQSxDQUFBLFVBQUEsS0FBQSxPQUNBLE1BQUEsR0FDQSxFQUFBLEtBQ0EsS0FDQSxHQUFBLEdBQUEsS0FBQSxDQUNBLE1BQUEsRUFDQSxLQUFBLEtBQUEsTUFDQSxRQUNBLFNBQUEsRUFBQSxLQUFBLFNBQUEsQ0FBQSxDQUNBLENBQUEsQ0FDQSxFQUNBdEMsRUFBQSxXQUFBLEVBQUEsSUFBQSxDQUNBLEVBRUEsV0FBQSxFQUFBLEVBQUEsQ0FDQSxLQUFBLENBQUEsUUFBQSxFQUVBLEFBQUEsR0FBQSxPQUFBLFFBQ0EseUJBQUEsS0FBQSxNQUFBLFVBQUEsSUFBQSxHQUVBLENBQUEsS0FBQSxTQUNBLEtBQUEsTUFBQSxPQUFBLEVBQUEsQ0FBQSxFQUVBLEtBQUEsTUFBQSxLQUVBLEVBQUEsUUFDQSxLQUFBLE9BQUEsT0FBQSxFQUFBLE1BQUEsRUFFQSxLQUFBLFNBQUEsRUFDQSxLQUFBLE9BQUEsQ0FDQSxLQUFBLE9BQ0EsTUFBQSx1QkFDQSxLQUFBLEdBQUEsU0FBQSxLQUFBLE1BQUEsVUFDQSxDQUFBLEVBRUEsRUFFQSxhQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsVUFBQSxLQUFBLE1BQ0EsS0FBQSxNQUFBLFVBQUEsR0FBQSxFQUFBLEtBQUEsRUFBQSxFQUFBLEVBQ0EsRUFDQSxFQUVBLFFBQUEsRUFBQSxDQUNBLEFBQUEsS0FBQSxTQUNBLEFBQUEsS0FBQSxNQUNBLEtBQUEsTUFBQSxLQUFBLENBQUEsRUFFQSxLQUFBLE1BQUEsQ0FBQSxDQUFBLEVBR0EsS0FBQSxNQUFBLENBRUEsRUFFQSxZQUFBLEVBQUEsRUFBQSxDQUNBLEdBQUEsS0FBQSxTQUFBLENBQ0EsS0FBQSxHQUFBLEtBQUEsYUFBQSxDQUFBLEVBQ0EsQUFBQSxHQUFBLEdBQ0EsQ0FBQSxFQUNBLEtBQUEsS0FBQSxLQUFBLE1BQUEsRUFBQSxDQUFBLEVBRUEsS0FBQSxNQUFBLE9BQUEsRUFBQSxDQUFBLEVBR0EsS0FDQSxNQUFBLE1BQUEsQ0FFQSxFQUVBLFdBQUEsRUFBQSxDQUNBLEtBQUEsWUFBQSxFQUFBLElBQUEsQ0FDQSxFQUVBLFVBQUEsRUFBQSxFQUFBLENBQ0EsR0FBQSxHQUFBLENBQUEsRUFBQSxDQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxFQUNBLEtBQUEsUUFBQSxDQUFBLEtBQUEsT0FBQSxPQUFBLE9BQUEsRUFBQSxDQUNBLENBQ0EsR0FBQSxHQUFBLEVBQUEsQ0FDQSxLQUFBLENBQUEsVUFBQSxTQUFBLEVBQ0EsR0FBQSxFQUFBLENBQ0EsS0FBQSxTQUFBLEVBQ0EsS0FBQSxHQUFBLEVBQUEsU0FBQSxHQUNBLEFBQUEsRUFDQSxHQUFBLE9BQUEsRUFHQSxLQUFBLFlBQUEsRUFBQSxDQUFBLEdBRUEsS0FBQSxXQUFBLENBQUEsQ0FFQSxTQUFBLEVBQUEsQ0FDQSxLQUFBLEdBQUEsQ0FDQSxNQUFBLGlCQUNBLE9BQUEsZ0JBQ0EsVUFBQSwwQkFBQSxFQUFBLE9BQ0EsUUFBQSwwQ0FDQSxPQUFBLHNDQUNBLEtBQUEsc0JBQUEsR0FBQSxFQUFBLElBQUEsSUFDQSxRQUFBLGdDQUVBLEVBQUEsSUFBQSwrQkFBQSxLQUNBLEtBQUEsT0FBQSxDQUNBLEtBQUEsUUFDQSxNQUFBLG9CQUNBLE1BQ0EsQ0FBQSxFQUNBLEtBQUEsV0FBQSxDQUFBLENBQ0EsQ0FDQSxDQUNBLEVBRUEsWUFBQSxFQUFBLE9BQ0EsS0FBQSxHQUFBLGlCQUFBLElBQ0EsQUFBQSxTQUFBLElBQUEsT0FBQSxjQUFBLGNBQUEsR0FBQSxDQUFBLEVBQUEsaUJBQ0EsR0FBQSxnQkFBQSxHQUVBLENBQ0EsRUFFQSxhQUFBLEVBQUEsRUFBQSxDQUVBLEtBQUEsR0FBQSxHQUFBLENBQUEsRUFDQSxJQUNBLEFBQUEsR0FBQSxDQUFBLFFBQUEsV0FBQSxFQUFBLElBQUEsRUFBQSxDQUFBLFdBQUEsT0FBQSxHQUFBLEVBQUEsUUFBQSxFQUFBLEtBQ0EsRUFDQSxPQUFBLEdBQUEsQ0FBQSxFQUNBLE1BQUEsR0FBQSxTQUFBLEVBQUEsRUFBQSxJQUFBLElBQ0EsQ0FDQSxDQUFBLEVBRUEsWUFBQSxFQUFBLENBQ0EsTUFBQSxHQUFBL0IsRUFBQUEsUUFBQSxDQUFB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
|