@ditojs/admin 2.12.2 → 2.12.3

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.
@@ -3,5 +3,5 @@
3
3
  The data in the clipboard appears to be malformed:
4
4
  ${a.message}
5
5
  `))}return this.checkClipboardData(t)},updateCopy(){this.copyEnabled=this.parentComponent.hasData},async updatePaste(){if(this.pasteEnabled=!!this.checkClipboardData(this.appState.clipboardData),!this.pasteEnabled&&this.appState.agent.chrome){const e=await this.getClipboardData(!1);this.pasteEnabled=!!e}},async onCopy(){var t,o;let e=this.parentComponent.clipboardData;try{e&&(e={$schema:this.schema.name,...this.copyData(e)}),this.appState.clipboardData=e,this.pasteEnabled=!0;try{const s=JSON.stringify(e,null,2);await((o=(t=navigator.clipboard)==null?void 0:t.writeText)==null?void 0:o.call(t,s))}catch(s){console.error(s,s.name,s.message)}}catch(s){console.error(s),alert(s.message)}},async onPaste(){let e=await this.getClipboardData(!0);try{e=e&&this.pasteData(e),e&&(this.parentComponent.clipboardData=e)}catch(t){console.error(t),alert(t.message)}}}}),wr=y(Br,[["render",Dr]]),Kt={data(){return{isLoading:!1}},methods:{setLoading(e,{updateRoot:t=!1,updateView:o=!1}={}){!this.isLoading^!e&&(this.isLoading=!!e,t&&this.rootComponent.registerLoading(e),o&&this.viewComponent.setLoading(this.isLoading))}}},Yt={mixins:[ke,Kt],provide(){return{$resourceComponent:()=>this,$verbs:()=>this.verbs,$isPopulated:()=>this.hasData}},data(){return{loadedData:null,abortController:null}},computed:{resourceComponent(){return this},resource(){return this.getResource()},providesData(){return!!this.resource},linksToView(){return!1},isTransient(){const e=this.formComponent;return!this.providesData&&!this.linksToView||e&&(e.isTransient||e.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:e}=this.sourceSchema;if(this.isListSource&&e){const{page:t=0}=this.query||{},o=t*e;return[o,o+e-1]}return null},queryParams(){const e=this.paginationRange,{page:t,...o}=this.query||{};return{...o,...e&&{range:e.join(",")}}}},created(){(this.providesData||this.isCreating)&&this.setupData()},methods:{getResource(){var e,t;return _((e=this.sourceSchema)==null?void 0:e.resource,{type:"collection",parent:((t=this.parentFormComponent)==null?void 0:t.resource)??null})},getVerbs(){const e=this.$verbs();return this.isTransient?{...e,create:"add",created:"added",save:"apply",saved:"applied",delete:"remove",deleted:"removed"}:e},clearData(){this.loadedData=null},setData(e){this.loadedData=e},setupData(){this.ensureData()},ensureData(){this.shouldLoad&&(this.hasData?this.reloadData():this.loadData(!0))},reloadData(){this.loadData(!1)},loadData(e){this.isTransient||(e&&this.clearData(),this.requestData())},createData(e,t){return kt(e,t?{type:t}:{},this)},requestData(){const e=this.queryParams;this.handleRequest({method:"get",query:e},(t,o)=>{var s;if(t){if(o){const{data:a}=o;if((a==null?void 0:a.type)==="FilterValidation"&&((s=this.onFilterErrors)!=null&&s.call(this,a.errors)))return!0;if(this.isUnauthorizedError(o))return!0}}else this.setData(o.data),this.emitSchemaEvent("load")})},isValidationError(e){return(e==null?void 0:e.status)===400},isUnauthorizedError(e){return(e==null?void 0:e.status)===401},async handleRequest({method:e,resource:t=this.resource,query:o,data:s},a){var h;const r={updateRoot:!0,updateView:this.isInView};(h=this.abortController)==null||h.abort();const i=new AbortController;this.abortController=i;const{signal:l}=i,d={method:e,resource:t,query:o,data:s,signal:l};this.setLoading(!0,r);try{const u=await this.sendRequest(d);a(null,u)}catch(u){if(u.name!=="AbortError"){const{response:p}=u;if(!a(u,p)){const g=p==null?void 0:p.data,m=c.isString(g==null?void 0:g.type)?c.labelize(g.type):"Error",f=(g==null?void 0:g.message)??u;this.notify({type:"error",title:m,text:f})}}}this.abortController===i&&(this.abortController=null,this.setLoading(!1,r))},getPayloadData(e,t){return["post","put","patch"].includes(t)&&(e.getSchemaValue(["resource","data"])||e.processedItem)},async submit(e){const t=_(e.schema.resource,{parent:this.resource});if(t){const{method:o}=t,s=this.getPayloadData(e,o);return this.submitResource(e,t,o,s)}return!1},async submitResource(e,t,o,s,{setData:a=!1,onSuccess:r,onError:i,notifySuccess:l=()=>this.notify({type:"success",title:"Request Successful",text:"Request was successfully sent."}),notifyError:d=h=>this.notify({type:"error",title:"Request Error",text:[`Unable to send request${h?":":""}`,(h==null?void 0:h.message)||h]})}={}){return new Promise(h=>{this.handleRequest({method:o,resource:t,data:s},async(u,p)=>{const g=p==null?void 0:p.data;if(u){const m=this.isValidationError(p)&&g.errors;if(m)await this.showValidationErrors(m,!0);else{const f=c.isObject(g)?g:u;i==null||i(f),await this.emitButtonEvent(e,"error",{notify:d,error:f})}h(!1)}else a&&g&&this.setData(g),r==null||r(),await this.emitButtonEvent(e,"success",{notify:l}),h(!0)})})},async emitButtonEvent(e,t,{notify:o,error:s}){const a=new S(e,{nested:!1,data:this.data,itemLabel:this.itemLabel,error:s}),r=await e.emitEvent(t,{context:a});return o&&r===void 0&&!a.wasNotified&&o(s),r}}};function Sr(e){return new URL(`file:${e}`).pathname}const Vr=["data-resource"],Pr={type:"submit",disabled:""};function Er(e,t,o,s,a,r){const i=n.resolveComponent("RouterView"),l=n.resolveComponent("DitoButtons"),d=n.resolveComponent("DitoSchema");return n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["dito-form dito-scroll-parent",{"dito-form-nested":e.isNestedRoute}]),"data-resource":e.sourceSchema.path},[e.isLastUnnestedRoute||e.isNestedRoute?n.createCommentVNode("",!0):n.withDirectives((n.openBlock(),n.createBlock(i,{key:0},null,512)),[[n.vShow,!e.isActive]]),n.withDirectives((n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.isNestedRoute?"div":"form"),{class:n.normalizeClass({"dito-scroll-parent":e.isRootForm}),onSubmit:t[0]||(t[0]=n.withModifiers(()=>{},["prevent"]))},{default:n.withCtx(()=>[n.withDirectives(n.createElementVNode("button",Pr,null,512),[[n.vShow,!1]]),n.createVNode(d,{schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,padding:e.isNestedRoute?"nested":"root",disabled:e.isLoading,scrollable:e.isRootForm,generateLabels:""},{buttons:n.withCtx(()=>[n.createVNode(l,{class:n.normalizeClass(["dito-buttons-round dito-buttons-large dito-buttons-main",{"dito-buttons-sticky":e.isRootForm}]),buttons:e.buttonSchemas,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,disabled:e.isLoading},null,8,["class","buttons","dataPath","data","meta","store","disabled"])]),_:1},8,["schema","dataPath","data","meta","store","padding","disabled","scrollable"])]),_:1},40,["class"])),[[n.vShow,e.isActive]])],10,Vr)}const Nr=C.component("DitoForm",{mixins:[Ut,Yt],data(){return{createdData:null,clonedData:void 0,sourceKey:null,isForm:!0}},computed:{verbs(){const e=this.getVerbs(),{isCreating:t,providesData:o}=this;return{...e,submit:t?e.create:e.save,submitted:t?e.created:e.saved,cancel:o?e.cancel:e.close,cancelled:o?e.cancelled:e.closed}},schema(){return this.getItemFormSchema(this.sourceSchema,this.data||{type:this.type},this.context)||{}},buttonSchemas(){return ee(c.assignDeeply({cancel:{type:"button",events:{click:()=>this.cancel()}},submit:!this.isMutating&&{type:"submit",closeForm:!0,events:{click:({component:e})=>e.submit()}}},this.schema.buttons))},isRootForm(){return this.dataPath===""&&!this.isNestedRoute},isActive(){return this.isLastRoute||this.isLastUnnestedRoute},isTransient(){return!this.providesData},isCreating(){return this.param==="create"},isDirty(){var e;return!this.isMutating&&!!((e=this.mainSchemaComponent)!=null&&e.isDirty)},isMutating(){return!!this.sourceSchema.mutate},selectedTab(){var e;return((e=this.mainSchemaComponent)==null?void 0:e.selectedTab)||null},type(){return this.$route.query.type},itemId(){return this.isCreating?null:this.param??null},method(){return this.isCreating?"post":"patch"},resource(){const e=this.getResource();return Ie(this.itemId,e)||e},breadcrumbPrefix(){return c.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 e=this.routeRecord?this.parentRouteComponent.data:null;if(e){const t=c.parseDataPath(this.getDataPathFrom(this.parentRouteComponent)),o=this.routeRecord.path.split("/"),s=o.slice(o.length-t.length);this.sourceKey=null;const a=t[t.length-1];te(this.sourceSchema)&&a==="create"&&t.length--;for(let r=0,i=t.length;r<i&&e;r++){const l=t[r],d=/^:id/.test(s[r])?l==="create"?null:this.findItemIdIndex(this.sourceSchema,e,l):l;r===i-1?this.sourceKey=d:e=e[d]}}return e},inheritedData(){if(this.isTransient&&this.clonedData===void 0&&this.sourceData&&this.sourceKey!==null){let e=this.sourceData[this.sourceKey];return this.isMutating||(this.clonedData=e=c.clone(e)),e===null&&!this.isCreating&&te(this.sourceSchema)&&this.$router.push({path:`${this.path}/create`}),e}return this.clonedData},hasData(){return!!this.data},itemLabel(){return this.getItemLabel(this.sourceSchema,this.data,{extended:!0})}},watch:{$route:{flush:"post",handler(e,t){var s;const o=(s=this.meta)==null?void 0:s.param;o&&this.providesData&&t.matched[0].path===e.matched[0].path&&t.params[o]!=="create"&&e.params[o]!==t.params[o]&&this.loadData(!0)}},sourceData:"clearClonedData",create:"setupData"},methods:{emitSchemaEvent(e,t){return this.mainSchemaComponent.emitEvent(e,t)},getDataPathFrom(e){return this.api.denormalizePath(this.path.slice((e.isView?0:e.path.length)+1))},setupData(){this.isCreating?this.createdData||(this.createdData=this.createData(this.schema,this.type)):this.ensureData()},setSourceData(e){if(this.sourceData&&this.sourceKey!==null){const{mainSchemaComponent:t}=this;return this.sourceData[this.sourceKey]=t.filterData(e),t.onChange(),!0}return!1},addSourceData(e){var t;return te(this.sourceSchema)?this.setSourceData(e):!!((t=this.sourceData)!=null&&t.push(e))},clearData(){this.setData(null)},setData(e){this.isTransient?this.setSourceData(e):(this.createdData=null,this.loadedData=e)},clearClonedData(e,t){e!==t&&(this.clonedData=void 0)},async cancel(){return this.close()},async close(){return this.navigate(this.parentRouteComponent.path)},getSubmitVerb(e=!0){return this.isCreating?e?"create":"created":e?"submit":"submitted"},async submit(e,{validate:t=!0,closeForm:o=!1}={}){if(t&&!this.validateAll())return!1;const s=h=>this.verbs[this.getSubmitVerb(h)],a=_(e.schema.resource,{parent:this.resource}),r=a||this.resource,i=(r==null?void 0:r.method)||this.method,l=this.getPayloadData(e,i);let d;if(!a&&this.isTransient?d=await this.submitTransient(e,r,i,l,{onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:h=>this.emitSchemaEvent("error",{context:{error:h}}),notifySuccess:()=>{const h=s(!1);this.notify({type:"info",title:this.isCreating?`Item ${c.capitalize(h)}`:`Change ${c.capitalize(h)}`,text:[this.isCreating?`${this.itemLabel} was ${h}.`:`Changes to ${this.itemLabel} were ${h}.`,this.transientNote]})},notifyError:()=>{const h=s(!0);this.notify({type:"error",title:"Request Error",text:`Unable to ${h} ${this.itemLabel}.`})}}):d=await this.submitResource(e,r,i,l,{setData:!0,onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:h=>this.emitSchemaEvent("error",{context:{error:h}}),notifySuccess:()=>{const h=s(!1);this.notify({type:"success",title:`Successfully ${c.capitalize(h)}`,text:`${this.itemLabel} was ${h}.`})},notifyError:h=>{const u=s(!0);this.notify({type:"error",title:"Request Error",text:[`Unable to ${u} ${this.itemLabel}${h?":":""}`,(h==null?void 0:h.message)||h]})}}),d){if(this.resetValidation(),o||e.closeForm)this.close();else if(this.isCreating){const h=this.getItemId(this.schema,this.data);this.$router.replace({path:Sr(`${this.path}/../${h}`),hash:this.$route.hash})}}return d},async submitTransient(e,t,o,s,{onSuccess:a,onError:r,notifySuccess:i,notifyError:l}){const d=this.isCreating?this.addSourceData(s):this.setSourceData(s);if(d)a==null||a(),await this.emitButtonEvent(e,"success",{notify:i});else{const h="Could not submit transient item";r==null||r(h),await this.emitButtonEvent(e,"error",{notify:l,error:h})}return d}}}),Jt=y(Nr,[["render",Er]]),Yh="",Or=C.component("DitoFormNested",{extends:Jt}),Tr={key:0,class:"dito-errors"};function Fr(e,t,o,s,a,r){return e.errors?(n.openBlock(),n.createElementBlock("div",Tr,[n.createElementVNode("ul",null,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.errors,i=>(n.openBlock(),n.createElementBlock("li",null,n.toDisplayString(i),1))),256))])])):n.createCommentVNode("",!0)}const Jh="",Lr=C.component("DitoErrors",{props:{errors:{type:Array,default:null}},data(){return{tip:null}},watch:{errors(){this.$nextTick(this.updateErrors)}},unmounted(){var e;(e=this.tip)==null||e.destroy()},methods:{updateErrors(){let{tip:e}=this;e==null||e.hide(),this.errors&&(e=this.tip??(this.tip=n.markRaw(Ge(this.$el.closest(".dito-container")))),e.setProps({content:this.errors.join(`
6
- `),theme:"error",trigger:"manual",appendTo:"parent",placement:"bottom-start",animation:"shift-away-subtle",popperOptions:{modifiers:[{name:"flip",enabled:!1}]},interactive:!0,hideOnClick:!1,offset:[3,3],zIndex:1}),e.popper.addEventListener("mousedown",()=>e.hide()),e.show())}}}),_r=y(Lr,[["render",Fr]]),Mr={class:"dito-scopes"},jr=["title","onClick"];function Ir(e,t,o,s,a,r){const i=n.resolveComponent("RouterLink");return n.openBlock(),n.createElementBlock("div",Mr,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.scopes,(l,d)=>(n.openBlock(),n.createBlock(i,{key:d,to:e.getScopeLink(l),custom:""},{default:n.withCtx(({navigate:h})=>[n.createElementVNode("button",{class:n.normalizeClass(["dito-button",{"dito-selected":l.name===e.query.scope}]),type:"button",title:l.hint||e.getLabel(l),onClick:h},n.toDisplayString(e.getLabel(l)),11,jr)]),_:2},1032,["to"]))),128))])}const Gh="",Rr=C.component("DitoScopes",{props:{query:{type:Object,required:!0},scopes:{type:Object,required:!0}},methods:{getScopeLink(e){const t={...this.query,scope:e.name};return t.page&&(t.page=0),this.getQueryLink(t)}}}),zr=y(Rr,[["render",Ir]]);function qr(e,t,o,s,a,r){const i=n.resolveComponent("Pagination");return n.openBlock(),n.createBlock(i,{page:e.page,"onUpdate:page":t[0]||(t[0]=l=>e.page=l),pageSize:e.limit,total:e.total},null,8,["page","pageSize","total"])}const Ur=C.component("DitoPagination",{components:{Pagination:gs},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(e){this.page!==e&&this.$router.push(this.getQueryLink({...this.query,page:e-1}))}}}}),Ar=y(Ur,[["render",qr]]),We={data(){return{isDragging:!1}},methods:{getDraggableOptions(e=!1){const t="dito-draggable";return{animation:150,handle:".dito-button-drag",dragClass:`${t}__drag`,chosenClass:`${t}__chosen`,ghostClass:`${t}__ghost`,fallbackClass:`${t}__fallback`,forceFallback:e,onStart:this.onStartDrag,onEnd:this.onEndDrag}},onStartDrag(){this.isDragging=!0},onEndDrag({oldIndex:e,newIndex:t}){this.isDragging=!1,e!==t&&this.onChange()},updateOrder(e,t,o){const{orderKey:s}=e;if(s){const a=(o==null?void 0:o[0])||0;for(let r=0;r<t.length;r++)t[r][s]=r+a}return t}}},Hr=["id"],Wr={key:0,class:"dito-tree-header"},Kr=["innerHTML"],Yr={key:1,class:"dito-tree-info"},Jr={key:1,class:"dito-tree-leaf"},Gr=["innerHTML"],Qr={key:2,class:"dito-buttons dito-buttons-small"},Xr={key:1,class:"dito-properties"};function Zr(e,t,o,s,a,r){const i=n.resolveComponent("DitoLabel"),l=n.resolveComponent("DitoTableCell"),d=n.resolveComponent("DitoTreeItem",!0),h=n.resolveComponent("DitoDraggable");return n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["dito-tree-item",{"dito-dragging":e.isDragging,"dito-active":e.active}]),id:e.dataPath,style:n.normalizeStyle(e.level>0&&{"--level":e.level})},[e.label?(n.openBlock(),n.createElementBlock("div",Wr,[e.numEntries?(n.openBlock(),n.createElementBlock("div",{key:0,class:"dito-tree-branch",onClick:t[0]||(t[0]=n.withModifiers(u=>e.opened=!e.opened,["stop"]))},[e.numEntries?(n.openBlock(),n.createElementBlock("div",{key:0,class:n.normalizeClass(["dito-chevron",{"dito-open":e.opened}])},null,2)):n.createCommentVNode("",!0),n.createElementVNode("div",{class:"dito-tree-label",innerHTML:e.label},null,8,Kr),e.details?(n.openBlock(),n.createElementBlock("div",Yr,n.toDisplayString(e.details),1)):n.createCommentVNode("",!0)])):(n.openBlock(),n.createElementBlock("div",Jr,[n.createElementVNode("div",{class:"dito-tree-label",innerHTML:e.label},null,8,Gr)])),e.hasEditButtons?(n.openBlock(),n.createElementBlock("div",Qr,[e.draggable?(n.openBlock(),n.createElementBlock("a",n.mergeProps({key:0,class:"dito-button"},e.getButtonAttributes(e.verbs.drag)),null,16)):n.createCommentVNode("",!0),e.editable?(n.openBlock(),n.createElementBlock("button",n.mergeProps({key:1,class:"dito-button",type:"button"},e.getButtonAttributes(e.verbs.edit),{onClick:t[1]||(t[1]=(...u)=>e.onEdit&&e.onEdit(...u))}),null,16)):n.createCommentVNode("",!0),e.deletable?(n.openBlock(),n.createElementBlock("button",n.mergeProps({key:2,class:"dito-button",type:"button"},e.getButtonAttributes(e.verbs.delete),{onClick:t[2]||(t[2]=(...u)=>e.onDelete&&e.onDelete(...u))}),null,16)):n.createCommentVNode("",!0)])):n.createCommentVNode("",!0)])):n.createCommentVNode("",!0),e.properties?n.withDirectives((n.openBlock(),n.createElementBlock("table",Xr,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.properties,u=>(n.openBlock(),n.createElementBlock("tr",null,[n.createElementVNode("td",null,[u.label!==!1?(n.openBlock(),n.createBlock(i,{key:0,dataPath:e.getPropertyDataPath(u),label:e.getLabel(u)},null,8,["dataPath","label"])):n.createCommentVNode("",!0)]),n.createVNode(l,{cell:u,schema:u,dataPath:e.getPropertyDataPath(u),data:e.data,meta:e.nestedMeta,store:e.store,disabled:e.disabled},null,8,["cell","schema","dataPath","data","meta","store","disabled"])]))),256))],512)),[[n.vShow,e.opened]]):n.createCommentVNode("",!0),e.childrenSchema?n.withDirectives((n.openBlock(),n.createBlock(h,{key:2,modelValue:e.updateOrder(e.childrenSchema,e.childrenList),options:e.getDraggableOptions(!0),draggable:e.childrenDraggable,"onUpdate:modelValue":t[3]||(t[3]=u=>e.childrenList=u)},{default:n.withCtx(()=>[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.childrenItems,(u,p)=>(n.openBlock(),n.createBlock(d,{key:e.getItemUid(e.childrenSchema,u.data),schema:e.childrenSchema,dataPath:e.getItemDataPath(e.childrenSchema,p),data:u.data,path:u.path,open:u.open,active:u.active,draggable:e.childrenDraggable,label:e.getItemLabel(e.childrenSchema,u.data,{index:p}),level:e.level+1},null,8,["schema","dataPath","data","path","open","active","draggable","label","level"]))),128))]),_:1},8,["modelValue","options","draggable"])),[[n.vShow,e.opened]]):n.createCommentVNode("",!0)],14,Hr)}const Qh="",vr=C.component("DitoTreeItem",{mixins:[ke,We],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{...this.meta,schema:this.schema}},properties(){return Y(this.schema.properties)},childrenSchema(){return this.schema.children},childrenList(){var t;const e=(t=this.childrenSchema)==null?void 0:t.name;return e&&this.data[e]},childrenDraggable(){var e;return((e=this.childrenList)==null?void 0:e.length)>1&&this.getSchemaValue("draggable",{type:Boolean,default:!1,schema:this.childrenSchema})},numChildren(){var e;return((e=this.childrenList)==null?void 0:e.length)||0},numProperties(){var e;return((e=this.properties)==null?void 0:e.length)||0},numEntries(){return this.numProperties+this.numChildren},childrenItems(){const{childrenSchema:e,childrenList:t}=this;if(e&&t){const{editPath:o}=this.container,s=!this.path&&e.open;return this.updateOrder(e,t.map((a,r)=>{const i=e.path&&`${this.path}/${e.path}/${r}`,l=s||o.startsWith(i)&&i.length<o.length;return{data:a,path:i,open:l,active:o===i}}))}return[]},details(){const{numChildren:e}=this;return e&&`${e} ${e===1?"item":"items"}`},hasEditButtons(){return this.draggable||this.editable||this.deletable},creatable:b("creatable",{type:Boolean,default:!1,get(e){return e&&A(this.schema)}}),editable:b("editable",{type:Boolean,default:!1,get(e){return e&&A(this.schema)}}),deletable:b("deletable",{type:Boolean,default:!1})},methods:{getPropertyDataPath(e){return T(this.dataPath,e.name)},onEdit(){this.$router.push({path:`${this.container.path}${this.path}`,query:this.$route.query})},onDelete(){},onChange(){this.container.onChange()}}}),xr=y(vr,[["render",Zr]]),ei={class:"dito-table-head"},ti=["onClick"],ni=n.createElementVNode("div",{class:"dito-order-arrows"},null,-1),oi={key:1},si={key:0},ai=[n.createElementVNode("span",null,null,-1)];function ri(e,t,o,s,a,r){const i=n.resolveComponent("RouterLink");return n.openBlock(),n.createElementBlock("thead",ei,[n.createElementVNode("tr",null,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.columns,l=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.shouldRenderSchema(l)?(n.openBlock(),n.createElementBlock("th",{key:0,class:n.normalizeClass(e.getColumnClass(l))},[l.sortable?(n.openBlock(),n.createBlock(i,{key:0,to:e.getSortLink(l),custom:""},{default:n.withCtx(({navigate:d})=>[n.createElementVNode("button",{class:n.normalizeClass(["dito-button",e.getSortClass(l)]),type:"button",onClick:d},[ni,n.createElementVNode("span",null,n.toDisplayString(e.getLabel(l)),1)],10,ti)]),_:2},1032,["to"])):(n.openBlock(),n.createElementBlock("span",oi,n.toDisplayString(e.getLabel(l)),1))],2)):n.createCommentVNode("",!0)],64))),256)),e.hasEditButtons?(n.openBlock(),n.createElementBlock("th",si,ai)):n.createCommentVNode("",!0)])])}const Zh="",ii=C.component("DitoTableHead",{props:{query:{type:Object,required:!0},columns:{type:Object,required:!0},hasEditButtons:{type:Boolean,required:!0}},computed:{sort(){const e=(this.query.order||"").split(/\s+/);return{name:e[0],order:e[1]}}},methods:{getColumnClass(e){return`dito-column-${c.hyphenate(e.name)}`},getSortClass(e){return this.sort.name===e.name?`dito-selected dito-order-${this.sort.order}`:null},getSortLink(e){const t=this.sort.name===e.name&&this.sort.order==="asc"?"desc":"asc";return this.getQueryLink({...this.query,order:`${e.name} ${t}`})}}}),li=y(ii,[["render",ri]]),di=["innerHTML"];function ci(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("td",{class:n.normalizeClass(e.cell.class),style:n.normalizeStyle(e.cell.style)},[e.cell.component?(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.cell.component),{key:0,schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,nested:e.nested,disabled:e.disabled},null,8,["schema","dataPath","data","meta","store","nested","disabled"])):(n.openBlock(),n.createElementBlock("span",{key:1,innerHTML:e.renderCell(e.data)},null,8,di))],6)}const hi=C.component("DitoTableCell",{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}},methods:{renderCell(e){const{name:t,render:o}=this.cell,s=e[t];return o?o.call(this,new S(this,{name:t,value:s,data:e,dataPath:T(this.dataPath,t)})):c.escapeHtml(s)}}}),ui=y(hi,[["render",ci]]),pi={class:"dito-upload-file"},mi={class:"dito-thumbnail__inner"},fi=["src"],gi={key:1,class:"dito-thumbnail__type"};function bi(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("div",pi,[e.thumbnail?(n.openBlock(),n.createElementBlock("div",{key:0,class:n.normalizeClass(["dito-thumbnail",`dito-thumbnail--${e.thumbnail}`])},[n.createElementVNode("div",mi,[e.source?(n.openBlock(),n.createElementBlock("img",{key:0,src:e.source,crossorigin:"anonymous"},null,8,fi)):(n.openBlock(),n.createElementBlock("div",gi,[n.createElementVNode("span",null,n.toDisplayString(e.type),1)]))])],2)):n.createCommentVNode("",!0),n.createElementVNode("span",null,n.toDisplayString(e.file.name),1)])}const vh="",yi=C.component("DitoUploadFile",{props:{file:{type:Object,required:!0},thumbnail:{type:String,default:null},thumbnailUrl:{type:String,default:null}},data(){return{uploadUrl:null}},computed:{type(){return ki[this.file.type]||this.file.name.split(".").pop().toUpperCase()},source(){return this.uploadUrl||this.thumbnailUrl}},watch:{"file.upload.file":{immediate:!0,handler(e){if(this.thumbnail&&(e!=null&&e.type.startsWith("image/"))){const t=new FileReader;t.onload=()=>{this.uploadUrl=t.result},t.readAsDataURL(e)}else this.uploadUrl=null}}}}),ki={"text/plain":"TXT","text/html":"HTML","text/css":"CSS","text/javascript":"JS","image/jpeg":"JPG","image/png":"PNG","image/gif":"GIF","image/svg+xml":"SVG","movie/mp4":"MP4","audio/mpeg":"MP3","application/json":"JSON","application/xml":"XML","application/pdf":"PDF","application/zip":"ZIP"},Ci=y(yi,[["render",bi]]);function $i(e,t,o={}){let s;const{document:a=I.defaultDocument,...r}=o,i={onUpdate:u=>{Di(t,u.oldIndex,u.newIndex)}},l=()=>{const u=typeof e=="string"?a==null?void 0:a.querySelector(e):I.unrefElement(e);u&&(s=new rn(u,{...i,...r}))},d=()=>s==null?void 0:s.destroy(),h=(u,p)=>{if(p!==void 0)s==null||s.option(u,p);else return s==null?void 0:s.option(u)};return I.tryOnMounted(l),I.tryOnScopeDispose(d),{stop:d,start:l,option:h}}function Di(e,t,o){const s=F.isRef(e),a=s?[...I.toValue(e)]:I.toValue(e);if(o>=0&&o<a.length){const r=a.splice(t,1)[0];F.nextTick(()=>{a.splice(o,0,r),s&&(e.value=a)})}}const Bi=F.defineComponent({name:"UseSortable",model:{prop:"modelValue",event:"update:modelValue"},props:{modelValue:{type:Array,required:!0},tag:{type:String,default:"div"},options:{type:Object,required:!0}},setup(e,{slots:t}){const o=I.useVModel(e,"modelValue"),s=F.ref(),a=F.reactive($i(s,o,e.options));return()=>{if(t.default)return F.h(e.tag,{ref:s},t.default(a))}}});function wi(e,t,o,s,a,r){const i=n.resolveComponent("UseSortable");return e.draggable?(n.openBlock(),n.createBlock(i,{key:0,class:n.normalizeClass(["dito-draggable",{"dito-draggable--dragging":e.isDragging}]),tag:e.tag,modelValue:e.modelValue,options:{...e.options,onStart:e.onStart,onEnd:e.onEnd},"onUpdate:modelValue":t[0]||(t[0]=l=>e.$emit("update:modelValue",l))},{default:n.withCtx(()=>[n.renderSlot(e.$slots,"default")]),_:3},8,["class","tag","modelValue","options"])):(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.tag),{key:1},{default:n.withCtx(()=>[n.renderSlot(e.$slots,"default")]),_:3}))}const xh="",Si=C.component("DitoDraggable",{mixins:[H],components:{UseSortable:Bi},emits:["update:modelValue"],props:{modelValue:{type:Array,required:!0},tag:{type:String,default:"div"},options:{type:Object,required:!0},draggable:{type:Boolean,default:!0}},data(){return{mouseEvents:null,isDragging:!1}},methods:{onStart(e){var t,o,s;(o=(t=this.options).onStart)==null||o.call(t,e),this.isDragging=!0,(s=this.mouseEvents)==null||s.remove()},onEnd(e){var t,o;(o=(t=this.options).onEnd)==null||o.call(t,e),this.mouseEvents=this.domOn(document,{mousedown:this.onMouse,mousemove:this.onMouse,mouseleave:this.onMouse})},onMouse(){var e;this.isDragging=!1,(e=this.mouseEvents)==null||e.remove(),this.mouseEvents=null}}}),Vi=y(Si,[["render",wi]]),Pi=[n.createElementVNode("div",{class:"dito-spinner__pulse dito-spinner__pulse1"},null,-1),n.createElementVNode("div",{class:"dito-spinner__pulse dito-spinner__pulse2"},null,-1),n.createElementVNode("div",{class:"dito-spinner__pulse dito-spinner__pulse3"},null,-1)];function Ei(e,t,o,s,a,r){return n.withDirectives((n.openBlock(),n.createElementBlock("div",{class:"dito-spinner",style:n.normalizeStyle({"--color":e.color,"--size":e.size,"--margin":e.margin})},Pi,4)),[[n.vShow,e.loading]])}const ou="",Ni=C.component("DitoSpinner",{props:{loading:{type:Boolean,default:!0},color:{type:String,default:null},size:{type:String,default:null},margin:{type:String,default:null}}}),Oi=y(Ni,[["render",Ei]]);function Gt({vnode:e}){return e}Gt.props={vnode:{type:Object,required:!0}};const Ti=C.component("DitoVnode",Gt),Fi=Object.freeze(Object.defineProperty({__proto__:null,DitoAccount:ka,DitoButtons:ir,DitoClipboard:wr,DitoContainer:Wa,DitoCreateButton:yr,DitoDialog:Ht,DitoDraggable:Vi,DitoEditButtons:hr,DitoElement:Da,DitoErrors:_r,DitoForm:Jt,DitoFormNested:Or,DitoHeader:xs,DitoLabel:Ea,DitoMenu:Hs,DitoNavigation:oa,DitoNotifications:da,DitoPagination:Ar,DitoPane:qa,DitoPanel:va,DitoPanels:nr,DitoRoot:He,DitoSchema:Fa,DitoSchemaInlined:Ma,DitoScopes:zr,DitoSidebar:ma,DitoSpinner:Oi,DitoTableCell:ui,DitoTableHead:li,DitoTabs:Qa,DitoTrail:Gs,DitoTreeItem:xr,DitoUploadFile:Ci,DitoVNode:Ti,DitoView:At},Symbol.toStringTag,{value:"Module"})),D={extends:C,mixins:[Z],nativeField:!1,textField:!1,defaultValue:null,defaultNested:!0,defaultVisible:!0,generateLabel:!0,excludeValue:!1,ignoreMissingValue:null,omitSpacing:!1,component:C.component,get:le,register(e,t={}){e=c.asArray(e);const o=this.component(`DitoType${c.camelize(e[0],!0)}`,t);for(const s of e)Xn(s,o);return o}},Li=["id","type","title"],_i={key:0,class:"dito-button__text"},Mi=["data-info"];function ji(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("button",n.mergeProps({class:["dito-button",e.buttonClass],id:e.dataPath,ref:"element",type:e.type,title:e.title},e.attributes),[e.text?(n.openBlock(),n.createElementBlock("div",_i,n.toDisplayString(e.text),1)):n.createCommentVNode("",!0),!e.label&&e.info?(n.openBlock(),n.createElementBlock("div",{key:1,class:"dito-info","data-info":e.info},null,8,Mi)):n.createCommentVNode("",!0)],16,Li)}const su="",Ii=D.register(["button","submit"],{defaultValue:()=>{},excludeValue:!0,defaultWidth:"auto",generateLabel:!1,computed:{verb(){return this.verbs[this.name]},buttonClass(){return this.verb?`dito-button-${this.verb}`:null},text:b("text",{type:String}),title(){return this.text||c.labelize(this.verb)},info:b("info",{type:String,default:null}),closeForm:b("closeForm",{type:Boolean,default:!1})},methods:{getEvents(){const{onFocus:e,onBlur:t,onClick:o}=this;return{onFocus:e,onBlur:t,onClick:o}},async submit(e){var t;return(t=this.resourceComponent)==null?void 0:t.submit(this,e)},async onClick(){await this.emitEvent("click",{parent:this.schemaComponent})===void 0&&Et(this.schema)&&await this.submit()}}}),Ri=y(Ii,[["render",ji]]),zi={class:"dito-checkbox"},qi=["id"];function Ui(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("div",zi,[n.withDirectives(n.createElementVNode("input",n.mergeProps({id:e.dataPath,ref:"element","onUpdate:modelValue":t[0]||(t[0]=i=>e.value=i),type:"checkbox"},e.attributes),null,16,qi),[[n.vModelCheckbox,e.value]])])}const au="",Ai=D.register("checkbox",{nativeField:!0}),Hi=y(Ai,[["render",Ui]]),Qt={mixins:[Kt],data(){return{isLoading:!1,asyncDataEntries:{}}},methods:{handleDataSchema(e,t,o){var i,l;c.isObject(e)||(e={data:e});let{data:s=void 0,dataPath:a=null}=e;const r=(i=this.asyncDataEntries)[t]||(i[t]=n.reactive({dependencyFunction:null,resolvedData:void 0,resolving:!1,resolved:!1}));if((l=r.dependencyFunction)==null||l.call(r,this.context),r.resolved){const{resolvedData:d}=r;return r.resolvedData=void 0,r.resolved=!1,d}if(r.resolving)s=null;else if(s){if(c.isFunction(s)){const d=s(this.context);c.isFunction(d)?(r.dependencyFunction=s,s=d(this.context)):s=d}c.isPromise(s)&&(r.resolving=!0,this.resolveData(s,o).then(d=>{r.resolvedData=d,r.resolving=!1,r.resolved=!0}).catch(d=>{console.error(d),r.resolving=!1}),s=null)}else a&&(s=c.getValueAtDataPath(this.rootData,c.normalizeDataPath(`${this.dataPath}/${a}`)));return s},async resolveData(e,t={}){const o=setTimeout(()=>this.setLoading(!0,t),0);let s=null;try{s=await(c.isFunction(e)?e():e)}catch(a){this.addError(a.message||a)}return clearTimeout(o),this.setLoading(!1,t),s}}},Ce={mixins:[Qt],data(){return{hasOptions:!1}},computed:{selectedValue:{get(){const e=o=>this.relate?this.hasOption(o)?this.getValueForOption(o):null:o,t=c.isArray(this.value)?this.value.map(e).filter(o=>o!==null):e(this.value);return this.relate&&this.hasOptions&&(t===null&&this.value!==null||zn(this.value))&&(this.selectedValue=t),t},set(e){const t=o=>this.relate?this.getOptionForValue(o):o;this.value=c.isArray(e)?e.map(t):t(e)}},selectedOption(){return this.getOptionForValue(this.selectedValue)},options(){const e=this.handleDataSchema(this.schema.options,"options")??[];if(!c.isArray(e))throw new Error(`Invalid options data, should be array: ${e}`);return this.hasOptions=e.length>0,this.processOptions(e)},activeOptions(){return this.options},relate:b("relate",{type:Boolean,default:!1,callback:!1}),groupBy:b("groupBy",{type:String,default:null}),optionLabel:b("options.label",{type:[String,Function],default:null,get(e){return e||this.getOptionKey("label")||null}}),optionValue:b("options.value",{type:[String,Function],default:null,get(e){return e||this.relate&&"id"||this.getOptionKey("value")||null}}),searchFilter:b("search",{type:[Object,Function],default:null,get(e){if(e){const{filter:t,debounce:o}=c.isFunction(e)?{filter:e}:e;return o?c.debounceAsync(t,o):t}}}),editable:b("editable",{type:Boolean,default:!1,get(e){return e&&co(this.schema,this.context)}}),editPath(){return this.editable&&this.selectedValue?ut(this.schema,this.selectedValue,this.context):null},groupByLabel(){return this.groupBy?"label":null},groupByOptions(){return this.groupBy?"options":null}},methods:{getOptionKey(e){const[t]=this.activeOptions;return c.isObject(t)&&e in t?e:null},processOptions(e){if(e.length){if(this.relate)for(const t of e)"id"in t||Rn(t,"id");if(this.groupBy){const t={};e=e.reduce((o,s)=>{const a=s[this.groupBy];let r=t[a];return r||(r=t[a]={[this.groupByLabel]:a,[this.groupByOptions]:[]},o.push(r)),r.options.push(s),o},[])}}return e},hasOption(e){return!!this.getOptionForValue(this.getValueForOption(e))},getOptionForValue(e){const t=(o,s,a)=>{for(const r of o)if(a){const i=t(r.options,s,null);if(i)return i}else if(s===this.getValueForOption(r))return r};return this.optionValue?t(this.activeOptions,e,this.groupBy):e},getValueForOption(e){const{optionValue:t}=this;return c.isString(t)?e==null?void 0:e[t]:c.isFunction(t)?t(new S(this,{option:e})):e},getLabelForOption(e){const{optionLabel:t}=this;return c.isString(t)?e==null?void 0:e[t]:c.isFunction(t)?t(new S(this,{option:e})):c.labelize(`${e}`)}},processValue(e,t,o,s){var a;if(e.relate){const r=(a=e.options)==null?void 0:a.dataPath,i=r?c.normalizeDataPath(`${o}/${r}`):null;s.addRelation(o,i,e),i&&s.setSourceRelated(i);const l=d=>d&&{id:d.id};t=c.isArray(t)?t.map(l):l(t)}return t}},Wi=["id"],Ki={class:"dito-checkbox"},Yi=["value"];function Ji(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("ul",{class:n.normalizeClass(["dito-checkboxes",`dito-layout-${e.schema.layout||"vertical"}`]),id:e.dataPath},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.options,i=>(n.openBlock(),n.createElementBlock("li",null,[n.createElementVNode("label",null,[n.createElementVNode("div",Ki,[n.withDirectives(n.createElementVNode("input",n.mergeProps({ref_for:!0,ref:"element","onUpdate:modelValue":t[0]||(t[0]=l=>e.selectedOptions=l),type:"checkbox",value:e.getValueForOption(i)},e.attributes),null,16,Yi),[[n.vModelCheckbox,e.selectedOptions]]),n.createElementVNode("span",null,n.toDisplayString(e.getLabelForOption(i)),1)])])]))),256))],10,Wi)}const ru="",Gi=D.register("checkboxes",{mixins:[Ce],nativeField:!0,defaultValue:[],defaultWidth:"auto",computed:{selectedOptions:{get(){return(this.selectedValue||[]).filter(e=>e)},set(e){this.selectedValue=e||[]}}}}),Qi=y(Gi,[["render",Ji]]),Xi=["id"];function Zi(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("div",{class:"dito-code",id:e.dataPath,ref:"code",style:n.normalizeStyle(e.style)},null,12,Xi)}const iu="",vi=D.register("code",{mixins:[H],computed:{lines(){return this.schema.lines||3},style(){return`height: calc(${this.lines}em * var(--line-height))`}},mounted(){const e=new ln(this.$refs.code,{language:this.schema.language||"javascript",tabSize:this.schema.indentSize||2,lineNumbers:!1});let t=!1,o=!1,s=!1;const a=()=>{!this.focused&&t&&(t=!1,this.onChange())},r=()=>this.onFocus(),i=()=>{this.onBlur(),a()};this.domOn(this.$refs.code.querySelector("textarea"),{focus:r,blur:i});const l=h=>{h!==e.code&&(s=!0,e.updateCode(h))},d=h=>{h!==this.value&&(o=!0,this.value=h,t=!0,a())};e.onUpdate(h=>{s?s=!1:d(h)}),this.$watch("value",h=>{o?o=!1:l(h||"")}),l(this.value||"")},methods:{focusElement(){var e;(e=this.$el.querySelector("textarea"))==null||e.focus()},blurElement(){var e;(e=this.$el.querySelector("textarea"))==null||e.focus()}}}),xi=y(vi,[["render",Zi]]),el=["id"],tl={key:0,class:"dito-color-preview dito-inherit-focus"},nl=["disabled"];function ol(e,t,o,s,a,r){const i=n.resolveComponent("SketchPicker"),l=n.resolveComponent("Trigger");return n.openBlock(),n.createBlock(l,{class:"dito-color",show:e.showPopup,"onUpdate:show":t[3]||(t[3]=d=>e.showPopup=d),trigger:"focus"},{trigger:n.withCtx(()=>[n.createElementVNode("div",{class:n.normalizeClass(["dito-input",{"dito-focus":e.showPopup}])},[n.withDirectives(n.createElementVNode("input",n.mergeProps({id:e.dataPath,ref:"element","onUpdate:modelValue":t[0]||(t[0]=d=>e.hexValue=d),type:"input",size:"8"},e.attributes),null,16,el),[[n.vModelText,e.hexValue]]),e.value?(n.openBlock(),n.createElementBlock("div",tl,[n.createElementVNode("div",{style:n.normalizeStyle({background:`#${e.hexValue||"00000000"}`})},null,4)])):n.createCommentVNode("",!0),e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:1,class:"dito-button-clear dito-button-overlay",disabled:e.disabled,onClick:t[1]||(t[1]=n.withModifiers((...d)=>e.clear&&e.clear(...d),["stop"]))},null,8,nl)):n.createCommentVNode("",!0)],2)]),popup:n.withCtx(()=>[n.createVNode(i,{class:"dito-color-picker",modelValue:e.colorValue,"onUpdate:modelValue":t[2]||(t[2]=d=>e.colorValue=d),disableAlpha:!e.alpha,disableFields:!e.inputs,presetColors:e.presets},null,8,["modelValue","disableAlpha","disableFields","presetColors"])]),_:1},8,["show"])}const lu="",sl=D.register("color",{components:{Trigger:Ae,SketchPicker:dn.Sketch},data(){return{showPopup:!1,convertedHexValue:null}},computed:{colorValue:{get(){return this.value||{}},set(e){const t=this.colorFormat,o={hex:(e==null?void 0:e.a)<1?"hex8":"hex",rgb:"rgba"}[t]||t;o?this.value=e[o]:this.value=Qe(e).toString(t),this.onChange()}},hexValue:{get(){if(this.value==null)this.convertedHexValue=null;else if(!this.focused||this.$refs.element.hasAttribute("readonly")){const e=Qe(this.value);e.isValid()&&(this.convertedHexValue=e.toString(e.getAlpha()<1?"hex8":"hex6").slice(1).toUpperCase())}return this.convertedHexValue},set(e){this.convertedHexValue=e}},colorFormat:b("format",{type:String,default:"hex"}),alpha:b("alpha",{type:Boolean,default:!1}),inputs:b("inputs",{type:Boolean,default:!0}),presets:b("presets",{type:Array,default:["#ffffff","#c3c3c3","#7f7f7f","#000000","#880015","#ed1c24","#ff7f27","#fff200","#22b14c","#00a2e8","#3f48cc","#a349a4","#b97a57","#ffaec9","#ffc90e","#00000000"]})}}),al=y(sl,[["render",ol]]);function rl(e,t,o,s,a,r){return n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.schema.component),n.normalizeProps(n.guardReactiveProps(e.$props)),null,16)}const il=D.register("component",{defaultValue:()=>{},ignoreMissingValue:e=>!("default"in e),async processSchema(e,t){await he(t)}}),ll=y(il,[["render",rl]]),dl=["id","name","value","disabled"];function cl(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("input",{class:"dito-text dito-input",id:e.dataPath,ref:"element",name:e.name,type:"text",value:e.value,disabled:e.disabled,readonly:!0},null,8,dl)}const hl=D.register(["computed","data","hidden"],{mixins:[Qt],defaultValue:()=>{},defaultVisible:!1,computed:{value:{get(){const{schema:e}=this;if(e.data||e.dataPath){const t=this.handleDataSchema(e,"schema");this.data[this.name]=t}return Z.computed.value.get.call(this)},set(e){Z.computed.value.set.call(this,e)}}}}),ul=y(hl,[["render",cl]]),pl={class:"dito-date"},ml=["disabled"];function fl(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("div",pl,[(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.getComponent(e.type)),n.mergeProps({id:e.dataPath,ref:"element",modelValue:e.dateValue,"onUpdate:modelValue":t[2]||(t[2]=i=>e.dateValue=i),locale:e.locale,format:e.formats},e.attributes),{after:n.withCtx(()=>[e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button-clear dito-button-overlay",disabled:e.disabled,onClick:t[0]||(t[0]=n.withModifiers((...i)=>e.clear&&e.clear(...i),["stop"])),onMousedown:t[1]||(t[1]=n.withModifiers(()=>{},["stop"]))},null,40,ml)):n.createCommentVNode("",!0)]),_:1},16,["id","modelValue","locale","format"]))])}const gl=D.register(["date","datetime","time"],{components:{DatePicker:_t,TimePicker:Mt,DateTimePicker:ds},nativeField:!0,textField:!0,computed:{dateValue:{get(){const{value:e}=this;return e&&new Date(e)},set(e){this.value=e}},formats:b("formats",{type:Object,default:null,get(e){const{date:t,time:o}=c.assignDeeply({},this.api.formats,e);return{date:["date","datetime"].includes(this.type)?t:null,time:["time","datetime"].includes(this.type)?o:null}}})},methods:{getComponent(e){return{date:"date-picker",time:"time-picker",datetime:"date-time-picker"}[e]}},processValue(e,t){return c.isDate(t)?t.toISOString():t}}),bl=y(gl,[["render",fl]]);function Xt(e){const t=e?c.isArray(e)?e:Object.entries(e):[];return new URLSearchParams(t.reduce((o,[s,a])=>{for(const r of c.asArray(a))o.push([s,r]);return o},[])).toString().replaceAll(/%(?:21|24|28|29|2C|2F|3A|3B|3D|3F|40)/g,decodeURIComponent)}function yl({path:e,query:t,hash:o}){history.replaceState(history.state,null,`${location.origin}${e??location.pathname}?${t?Xt(t):location.search.slice(1)}${o??location.hash}`)}const Q={mixins:[ke,Yt,zt],defaultValue(e){return ne(e)?[]:null},provide(){return{$sourceComponent:()=>this}},data(){return{wrappedPrimitives:null,unwrappingPrimitives:!1}},computed:{sourceComponent(){return this},isObjectSource(){return te(this.type)},isListSource(){return ne(this.type)},hasData(){return!!this.value},isReady(){return this.hasData||!this.providesData},isInView(){return!!this.viewComponent},wrapPrimitives(){return this.schema.wrapPrimitives},listData:{get(){let e=this.value;this.isObjectSource?e=e!=null?[e]:[]:e=this.unwrapListData(e)||e,e||(e=[]);const{wrapPrimitives:t}=this;return t?(this.unwrappingPrimitives?this.unwrappingPrimitives=!1:this.wrappedPrimitives=e.map(o=>({[t]:o})),this.wrappedPrimitives):e},set(e){this.wrapPrimitives?this.wrappedPrimitives=e:this.value=this.isObjectSource?e&&e.length>0?e[0]:null:e}},objectData:{get(){return this.listData[0]||null},set(e){this.listData=e?[e]:[]}},sourceSchema(){return this.schema},path(){return this.routeComponent.getChildPath(this.schema.path)},defaultQuery(){const{defaultOrder:e}=this;return e?{order:e}:{}},query:Ve("query",{get(e){return{...this.defaultQuery,...e}},set(e){var s;const{scope:t=(s=this.defaultScope)==null?void 0:s.name,page:o=this.schema.page}=this.query;return e={...this.query,...t!=null&&{scope:t},...o!=null&&{page:o},...e},c.equals(e,this.$route.query)||yl({query:e}),e}}),total:Ve("total"),columns(){return Y(this.schema.columns)},scopes(){return Y(this.schema.scopes)},defaultScope(){let e=null;if(this.scopes)for(const t of Object.values(this.scopes)){if(t.defaultScope)return t;e||(e=t)}return e},defaultOrder(){if(this.columns)for(const e of Object.values(this.columns)){const{defaultSort:t}=e;if(t){const o=c.isString(t)?t:"asc";return`${e.name} ${o}`}}return null},nestedMeta(){return{...this.meta,schema:this.schema}},forms(){return Object.values(K(this.schema,this.context))},view(){return Fe(this.schema,this.context)},linksToView(){return!!this.view},buttonSchemas(){return ee(this.schema.buttons)},isCompact(){return this.forms.every(mt)},isInlined(){return _e(this.schema)},paginate:b("paginate",{type:Number}),render:b("render",{type:Function,default:null}),creatable:b("creatable",{type:Boolean,default:!1,get(e){return e&&A(this.schema)?this.isObjectSource?!this.value:!0:!1}}),editable:b("editable",{type:Boolean,default:!1,get(e){return e&&!this.isInlined}}),deletable:b("deletable",{type:Boolean,default:!1}),draggable:b("draggable",{type:Boolean,default:!1,get(e){return this.isListSource&&this.listData.length>1&&e}}),collapsible:b("collapsible",{type:Boolean,default:null,get(e){return this.isInlined&&!!(e??this.collapsed!==null)}}),collapsed:b("collapsed",{type:Boolean,default:null})},watch:{$route:{flush:"post",handler(e,t){this.providesData&&t.path===e.path&&t.hash===e.hash&&(this.query=e.query,this.loadData(!1))}},wrappedPrimitives:{deep:!0,handler(e,t){const{wrapPrimitives:o}=this;o&&t!==null&&(this.unwrappingPrimitives=!0,this.value=e.map(s=>s[o]))}}},methods:{setupData(){this.query=this.$route.query,this.ensureData()},clearData(){this.total=0,this.value=null},setData(e){!e||this.isListSource&&c.isArray(e)||this.isObjectSource&&c.isObject(e)?this.value=e:this.unwrapListData(e)||c.isObject(e)&&this.isInView&&this.viewComponent.setData(e)},unwrapListData(e){if(this.isListSource&&c.isObject(e)&&c.isNumber(e.total)&&c.isArray(e.results))return this.total=e.total,this.value=e.results,this.value},createItem(e,t){const o=this.createData(e,t);return this.isObjectSource?this.objectData=o:this.listData.push(o),this.collapsible&&this.$nextTick(()=>this.openSchemaComponent(-1)),this.onChange(),o},removeItem(e,t){let o=!1;if(this.isObjectSource)this.objectData=null,o=!0;else{const{listData:s}=this;t>=0&&(s.splice(t,1),o=!0)}o&&(this.removeItemStore(this.schema,e,t),this.onChange())},deleteItem(e,t){const o=e&&this.getItemLabel(this.schema,e,{index:t,extended:!0}),s=()=>this.notify({type:this.isTransient?"info":"success",title:"Successfully Removed",text:[`${o} was ${this.verbs.deleted}.`,this.transientNote]});if(e&&window.confirm(`Do you really want to ${this.verbs.delete} ${o}?`))if(this.isTransient)this.removeItem(e,t),s();else{const a=this.getItemId(this.schema,e,t),r=Ie(a,this.resource);r&&this.handleRequest({method:"delete",resource:r},i=>{i||(this.removeItem(e,t),s()),this.reloadData()})}},getSchemaComponent(e){const{schemaComponents:t}=this,{length:o}=t;return t[(e%o+o)%o]},openSchemaComponent(e){const t=this.getSchemaComponent(e);t&&(t.opened=!0)},async navigateToComponent(e,t){if(this.collapsible){const o=e.startsWith(this.dataPath)?this.isListSource?c.parseDataPath(e.slice(this.dataPath.length+1))[0]??null:0:null;if(o!==null&&c.isNumber(+o)){const s=this.getSchemaComponent(+o);if(s){const{opened:a}=s;a||(s.opened=!0,await this.$nextTick());const r=s.getComponentsByDataPath(e);if(r.length>0&&((t==null?void 0:t(r))??!0))return!0;s.opened=a}}}return this.navigateToRouteComponent(e,t)},navigateToRouteComponent(e,t){return new Promise((o,s)=>{const a=()=>{const{routeComponents:i}=this.appState,l=i[i.length-1];o((t==null?void 0:t([l]))??!0)},r=c.parseDataPath(e);for(;r.length>0;){const i=this.routeComponent.getChildPath(this.api.normalizePath(c.normalizeDataPath(r))),{matched:l}=this.$router.resolve(i);l.length&&l[0].name!=="catch-all"&&(this.$route.path===i?a():this.$router.push({path:i}).catch(s).then(()=>{this.$nextTick(a)})),r.pop()}o(!1)})}},async processSchema(e,t,o,s,a,r=!1,i=!1,l=null){lt(e,t,o);const d=_e(t);if(d&&t.resource)throw new Error(`Nested ${this.isListSource?"lists":this.isObjectSource?"objects":"schema"} cannot load data from their own resources`);const h=`id${a+1}`,u={api:e,schema:t},p={...u,flatten:i,nested:r,param:h},g=await ao(e,t,a);if(l&&await l(g,a+1),A(t)&&!d){const m=a===0?"":t.path,f={path:Zt(m,ne(t)?h:null),component:C.component(r?"DitoFormNested":"DitoForm"),meta:p};te(t)&&s.push({...f,path:Zt(m,h)}),m&&s.push({path:m,redirect:".",meta:u});const[k,V]=g.reduce((B,w)=>(B[w.meta.flatten?0:1].push(w),B),[[],[]]);if(V.length&&(f.children=V),s.push(f),k.length)for(const B of k)s.push({...B.redirect?B:f,path:`${f.path}/${B.path}`,meta:{...B.meta,flatten:i}})}},processValue(e,t,o,s){return s.addSource(o,e),t}};function Zt(e,t){return t?e?`${e}/:${t}`:`:${t}`:e}const Ke={text(e){const t=[{label:"contains",value:"contains"},{label:"equals",value:"equals"},{label:"starts with",value:"starts-with"},{label:"ends with",value:"ends-with"}];return{operator:e.operators?{type:"select",width:"2/5",options:c.isArray(e.operators)?t.filter(o=>e.operators.includes(o.value)):t,clearable:!0}:null,text:{type:"text",width:e.operators?"3/5":"fill",clearable:!0}}},"date-range"(){const e={type:"datetime",width:"1/2",formats:{date:{day:"2-digit",month:"2-digit",year:"numeric"}},clearable:!0};return{from:e,to:e}}};function kl(e,t,o,s){const{sticky:a,...r}=t,i={type:"panel",label:"Filters",name:"$filters",disabled:!1,sticky:a,data(){return Bl(i,s.value)},components:$l(r),buttons:vt(!1),panelButtons:vt(!0),events:{change(){this.applyFilters()}},computed:{filters(){return Dl(this.schema,this.data)},hasFilters(){return this.filters.length>0}},methods:{applyFilters(){s.value={...s.value,filter:this.filters,page:void 0}},clearFilters(){this.resetData(),this.applyFilters()}}};return it(e,i),i}function vt(e){return{clear:{type:"button",text:e?null:"Clear",disabled:({schemaComponent:t})=>!t.hasFilters,events:{click({schemaComponent:t}){t.clearFilters()}}},submit:{type:"submit",text:e?null:"Filter",visible:!e,events:{click({schemaComponent:t}){t.applyFilters()}}}}}function Cl(e){return`$${e}`}function xt(e){return e.startsWith("$")?e.slice(1):null}function $l(e){var o;const t={};for(const s of Object.values(Y(e)||{})){const{filter:a,width:r,...i}=s,l=a?(o=Ke[a])==null?void 0:o.call(Ke,s):s.components;if(l){i.type="form",i.components={};for(const[d,h]of Object.entries(l))if(h){const u=h.label||c.labelize(h.name||d);i.components[d]={...h,label:!1,placeholder:u}}t[Cl(s.name)]={label:i.label??c.labelize(s.name),type:"object",width:r,default:()=>({}),form:i,inlined:!0}}else throw new Error(`Invalid filter '${s.name}': Unknown filter type '${a}'.`)}return t}function en(e,t){var s;const o=e.components[t];return(s=o==null?void 0:o.form)==null?void 0:s.components}function Dl(e,t){const o=[];for(const s in t){const a=t[s];if(a){const r=Object.keys(en(e,s)).map(i=>a[i]??null);r.some(i=>i!==null)&&o.push(`${xt(s)}:${r.map(JSON.stringify).join(",")}`)}}return o}function Bl(e,t){const o={};if(t)for(const a of c.asArray(t.filter)){const[,r,i]=a.match(/^(\w+):(.*)$/);try{o[r]=c.asArray(JSON.parse(`[${i}]`))}catch{}}const s={};for(const a in e.components){const r={},i=o[xt(a)];if(i){const l=en(e,a);if(l){let d=0;for(const h in l)r[h]=i[d++]}}s[a]=r}return s}const wl=["id"],Sl={key:0,class:"dito-list__header"},Vl={key:1,class:"dito-spacer"},Pl=["id"],El={key:1},Nl=["innerHTML"],Ol=["innerHTML"],Tl={key:2,class:"dito-cell-edit-buttons"},Fl={key:1},Ll=["colspan"];function _l(e,t,o,s,a,r){const i=n.resolveComponent("DitoScopes"),l=n.resolveComponent("DitoPagination"),d=n.resolveComponent("DitoTableHead"),h=n.resolveComponent("DitoTableCell"),u=n.resolveComponent("DitoSchemaInlined"),p=n.resolveComponent("DitoEditButtons"),g=n.resolveComponent("DitoDraggable");return e.isReady?(n.openBlock(),n.createElementBlock("div",{key:0,class:"dito-list",id:e.dataPath},[e.scopes||e.hasPagination?(n.openBlock(),n.createElementBlock("div",Sl,[e.scopes?(n.openBlock(),n.createBlock(i,{key:0,query:e.query,scopes:e.scopes},null,8,["query","scopes"])):e.hasPagination?(n.openBlock(),n.createElementBlock("div",Vl)):n.createCommentVNode("",!0),e.hasPagination?(n.openBlock(),n.createBlock(l,{key:2,query:e.query,limit:e.paginate,total:e.total||0},null,8,["query","limit","total"])):n.createCommentVNode("",!0)])):n.createCommentVNode("",!0),n.createElementVNode("table",{class:n.normalizeClass(["dito-table",{"dito-table-separators":e.isInlined,"dito-table-larger-padding":e.hasEditButtons&&!e.isInlined,"dito-table-alternate-colors":!e.isInlined,"dito-table-even-count":e.hasEvenCount}])},[e.columns?(n.openBlock(),n.createBlock(d,{key:0,query:e.query,columns:e.columns,hasEditButtons:e.hasEditButtons},null,8,["query","columns","hasEditButtons"])):n.createCommentVNode("",!0),n.createVNode(g,{tag:"tbody",modelValue:e.updateOrder(e.sourceSchema,e.listData,e.paginationRange),options:e.getDraggableOptions(),draggable:e.draggable,"onUpdate:modelValue":t[0]||(t[0]=m=>e.listData=m)},{default:n.withCtx(()=>[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.listData,(m,f)=>(n.openBlock(),n.createElementBlock("tr",{id:e.getDataPath(f),key:e.getItemUid(e.schema,m)},[e.columns?(n.openBlock(!0),n.createElementBlock(n.Fragment,{key:0},n.renderList(e.columns,k=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.shouldRenderSchema(k)?(n.openBlock(),n.createBlock(h,{key:k.name,class:n.normalizeClass(e.getCellClass(k)),cell:k,schema:e.schema,dataPath:e.getDataPath(f),data:m,meta:e.nestedMeta,store:e.store,nested:!1,disabled:e.disabled||e.isLoading},null,8,["class","cell","schema","dataPath","data","meta","store","disabled"])):n.createCommentVNode("",!0)],64))),256)):(n.openBlock(),n.createElementBlock("td",El,[e.isInlined?(n.openBlock(),n.createBlock(u,{key:0,label:e.getItemLabel(e.schema,m,{index:f,asObject:!0}),schema:e.getItemFormSchema(e.schema,m,e.context),dataPath:e.getDataPath(f),data:m,meta:e.nestedMeta,store:e.getItemStore(e.schema,m,f),disabled:e.disabled||e.isLoading,collapsed:e.collapsed,collapsible:e.collapsible,deletable:e.deletable,draggable:e.draggable,editable:e.editable,editPath:e.getEditPath(m,f),onDelete:k=>e.deleteItem(m,f)},null,8,["label","schema","dataPath","data","meta","store","disabled","collapsed","collapsible","deletable","draggable","editable","editPath","onDelete"])):e.schema.component?(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.schema.component),{key:1,dataPath:e.getDataPath(f),data:m,nested:!1},null,8,["dataPath","data"])):e.render?(n.openBlock(),n.createElementBlock("span",{key:2,innerHTML:e.render(e.getContext(m,f))},null,8,Nl)):(n.openBlock(),n.createElementBlock("span",{key:3,innerHTML:e.getItemLabel(e.schema,m,{index:f})},null,8,Ol))])),e.hasCellEditButtons?(n.openBlock(),n.createElementBlock("td",Tl,[n.createVNode(p,{schema:e.getItemFormSchema(e.schema,m,e.context),dataPath:e.getDataPath(f),data:m,meta:e.nestedMeta,store:e.getItemStore(e.schema,m,f),disabled:e.disabled||e.isLoading,deletable:e.deletable,draggable:e.draggable,editable:e.editable,editPath:e.getEditPath(m,f),onDelete:k=>e.deleteItem(m,f)},null,8,["schema","dataPath","data","meta","store","disabled","deletable","draggable","editable","editPath","onDelete"])])):n.createCommentVNode("",!0)],8,Pl))),128))]),_:1},8,["modelValue","options","draggable"]),e.hasListButtons&&!e.single?(n.openBlock(),n.createElementBlock("tfoot",Fl,[n.createElementVNode("tr",null,[n.createElementVNode("td",{class:"dito-cell-edit-buttons",colspan:e.numColumns},[n.createVNode(p,{buttons:e.buttonSchemas,schema:e.schema,dataPath:e.dataPath,data:e.listData,meta:e.meta,store:e.store,disabled:e.disabled||e.isLoading,creatable:e.creatable,createPath:e.path},null,8,["buttons","schema","dataPath","data","meta","store","disabled","creatable","createPath"])],8,Ll)])])):n.createCommentVNode("",!0)],2),e.hasListButtons&&e.single?(n.openBlock(),n.createBlock(p,{key:1,class:"dito-buttons-large dito-buttons-main dito-buttons-sticky",buttons:e.buttonSchemas,schema:e.schema,dataPath:e.dataPath,data:e.listData,meta:e.meta,store:e.store,disabled:e.disabled||e.isLoading,creatable:e.creatable,createPath:e.path},null,8,["buttons","schema","dataPath","data","meta","store","disabled","creatable","createPath"])):n.createCommentVNode("",!0)],8,wl)):n.createCommentVNode("",!0)}const du="",Ml=D.register("list",{mixins:[Q,We],getSourceType(e){return e},getPanelSchema(e,t,o,s){const{filters:a}=t;if(a)return kl(e,a,o,n.computed({get(){return s.query},set(r){const i=l=>c.pickBy(l,d=>d!==void 0);c.equals(i(r),i(s.query))||(s.query=r,s.loadData(!1))}}))},computed:{hasPagination(){return!!this.paginate},hasListButtons(){return!!(this.buttonSchemas||this.creatable)},hasEditButtons(){const{listData:e}=this;return e.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(e){return T(this.dataPath,e)},getEditPath(e,t){if(this.editable){const o=this.getItemId(this.schema,e,t);return ut(this.schema,o,this.context)||`${this.path}/${o}`}return null},getCellClass(e){return`dito-cell-${c.hyphenate(e.name)}`},getContext(e,t){return new S(this,{data:e,value:e,index:t,dataPath:this.getDataPath(t)})},onFilterErrors(e){const t=T(this.dataPath,"$filters"),o=this.schemaComponent.getPanelByDataPath(t);if(o)return o.showValidationErrors(e,!0),!0}},async processSchema(e,t,o,s,a,r=!1,i=!1,l=null){await Promise.all([he(t),at(t.columns),Q.processSchema(e,t,o,s,a,r,i,l)])}}),jl=y(Ml,[["render",_l]]);function Il(e,t,o,s,a,r){const i=n.resolveComponent("DitoLabel");return n.openBlock(),n.createBlock(i,{class:"dito-label-component",label:e.value,dataPath:e.dataPath},null,8,["label","dataPath"])}const cu="",Rl=D.register("label",{excludeValue:!0,generateLabel:!1}),zl=y(Rl,[["render",Il]]),ql=["id"],Ul={key:0,class:"dito-buttons dito-buttons-toolbar"},Al={class:"dito-button-group"},Hl=["onClick"];function Wl(e,t,o,s,a,r){const i=n.resolveComponent("Icon"),l=n.resolveComponent("EditorContent");return n.openBlock(),n.createElementBlock("div",{class:"dito-markup",id:e.dataPath},[e.groupedButtons.length>0?(n.openBlock(),n.createElementBlock("div",Ul,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.groupedButtons,d=>(n.openBlock(),n.createElementBlock("div",Al,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(d,({name:h,icon:u,isActive:p,onClick:g})=>(n.openBlock(),n.createElementBlock("button",{class:n.normalizeClass(["dito-button",{"dito-active":p}]),key:h,onClick:g},[n.createVNode(i,{name:u},null,8,["name"])],10,Hl))),128))]))),256))])):n.createCommentVNode("",!0),n.createVNode(l,{class:"dito-markup-editor",ref:"editor",editor:e.editor,style:n.normalizeStyle(e.styles)},null,8,["editor","style"]),e.resizable?(n.openBlock(),n.createElementBlock("div",{key:1,class:"dito-resize",onMousedown:t[0]||(t[0]=n.withModifiers((...d)=>e.onDragResize&&e.onDragResize(...d),["stop","prevent"]))},null,32)):n.createCommentVNode("",!0)],8,ql)}const hu="",Kl=D.register("markup",{mixins:[H],components:{EditorContent:re.EditorContent,Icon:ge},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:e=>this.onClickLink(e)}})},basicNodeButtons(){return this.getButtons("nodes",{paragraph:{command:"setParagraph"},heading:{attribute:"level",values:[1,2,3,4,5,6]}})},advancedNodeButtons(){return this.getButtons("nodes",{bulletList:!0,orderedList:!0,blockquote:!0,codeBlock:!0})},toolButtons(){return this.getButtons("tools",{undo:!0,redo:!0})},groupedButtons(){return[this.markButtons,this.basicNodeButtons,this.advancedNodeButtons,this.toolButtons].filter(e=>e.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:b("resizable",{type:Boolean,default:!1}),whitespace:b("whitespace",{type:String,default:"collapse"}),enableRules:b("enableRules",{type:[Object,Boolean],default:!1,get(e){return c.isObject(e)?e:{input:!!e,paste:!!e}}})},watch:{readyonly:"updateEditorOptions",autofocus:"updateEditorOptions",enableRules:"updateEditorOptions"},created(){let e=!1,t=!1;const o=()=>{!this.focused&&e&&(e=!1,this.onChange())},s=()=>this.onFocus(),a=()=>{this.onBlur(),o()},r=c.debounce(l=>{t=!0,this.value=l.getHTML(),e=!0,o()},100),i=({editor:l})=>{r(l),this.onInput()};this.$watch("value",l=>{t?t=!1:this.editor.commands.setContent(l,!1,this.parseOptions)}),this.editor=new re.Editor({...this.editorOptions,onFocus:s,onBlur:a,onUpdate:i,extensions:this.getExtensions(),content:this.value||""})},unmounted(){this.editor.destroy()},methods:{onDragResize(e){const t=({clientX:i,clientY:l})=>({x:i,y:l});let o=t(e).y,s=parseFloat(getComputedStyle(this.$refs.editor.$el).height);const a=i=>{const{y:l}=t(i);s+=l-o,o=l,this.height=`${Math.max(s,0)}px`},r=this.domOn(document,{mousemove:a,mouseup(i){a(i),r.remove()}})},updateEditorOptions(){this.editor.setOptions(this.editorOptions)},async onClickLink(e){const t=await this.rootComponent.showDialog({components:{href:{type:"url",label:"Link",autofocus:!0},title:{type:"text",label:"Title"}},buttons:{cancel:{},apply:{type:"submit"},remove:{events:{click({dialogComponent:o}){o.resolve(null)}}}},data:re.getMarkAttributes(this.editor.state,"link")});if(t){let{href:o,title:s}=t;if(o)try{new URL(o)}catch{o=`https://${o}`}e.commands.setLink({href:o,title:s})}else t===null&&e.commands.unsetLink()},getExtensions(){const{marks:e={},nodes:t={},tools:o={}}=this.schema;return[cn.Document,hn.Text,Dn.Paragraph,e.bold&&un.Bold,e.italic&&mn.Italic,e.underline&&bn.Underline,e.strike&&gn.Strike,e.small&&Yl,e.code&&pn.Code,e.link&&Jl,t.blockquote&&yn.Blockquote,t.codeBlock&&kn.CodeBlock,Cn.HardBreak,t.heading&&$n.Heading.configure({levels:t.heading}),t.horizontalRule&&Bn.HorizontalRule,(t.orderedList||t.bulletList)&&Vn.ListItem,t.bulletList&&Sn.BulletList,t.orderedList&&wn.OrderedList,o.history&&Pn.History].filter(s=>!!s)},getButtons(e,t){const o=[],{commands:s}=this.editor,a=({name:i,icon:l,command:d,attributes:h,onClick:u})=>{o.push({name:i,icon:l,isActive:this.editor.isActive(i,h),onClick:()=>{d??(d=i in s?i:`toggle${c.camelize(i,!0)}`),d in s&&(u?u(this.editor,h):(g=>this.editor.chain()[d](g).focus().run())(h))}})},r=this.schema[e];if(r)for(const[i,l]of Object.entries(t)){const d=["undo","redo"].includes(i)?"history":i,h=r[d],u=c.hyphenate(i);if(h){if(l===!0)a({name:i,icon:u});else if(c.isObject(l)){const{command:p,attribute:g,values:m,onClick:f}=l;if(g){if(c.isArray(m)&&c.isArray(h))for(const k of m)h.includes(k)&&a({name:i,icon:`${u}-${k}`,command:p,attributes:{[g]:k},onClick:f})}else a({name:i,icon:u,command:p,onClick:f})}}}return o},focusElement(){this.editor.commands.focus()},blurElement(){this.editor.commands.blur()}}}),Yl=re.Mark.create({name:"small",parseHTML(){return[{tag:"small"}]},renderHTML(){return["small",0]},addCommands(){return{setSmall:e=>({commands:t})=>t.setMark(this.name,e),toggleSmall:e=>({commands:t})=>t.toggleMark(this.name,e),unsetSmall:()=>({commands:e})=>e.unsetMark(this.name)}}}),Jl=fn.Link.extend({inclusive:!1,schema:{attrs:{href:{default:null},title:{default:null}},parseHTML(){return[{tag:"a",getAttrs:e=>({href:e.getAttribute("href"),title:e.getAttribute("title")})}]},renderHTML(e){return["a",e.attrs,0]}}}),Gl=y(Kl,[["render",Wl]]),Ql={class:"dito-multiselect"},Xl={class:"dito-multiselect__inner"},Zl=["disabled"];function vl(e,t,o,s,a,r){const i=n.resolveComponent("VueMultiselect"),l=n.resolveComponent("DitoEditButtons");return n.openBlock(),n.createElementBlock("div",Ql,[n.createElementVNode("div",Xl,[n.createVNode(i,n.mergeProps({ref:"element",modelValue:e.selectedOptions,"onUpdate:modelValue":t[0]||(t[0]=d=>e.selectedOptions=d),class:{"multiselect--multiple":e.multiple,"multiselect--loading":e.isLoading,"multiselect--highlight":e.showHighlight},showLabels:!1,placeholder:e.placeholder,tagPlaceholder:"Press enter to add new tag",options:e.populate&&e.activeOptions||[],customLabel:e.getLabelForOption,trackBy:e.optionValue,groupLabel:e.groupByLabel,groupValues:e.groupByOptions,multiple:e.multiple,taggable:e.taggable,searchable:e.searchable,internalSearch:!e.searchFilter,preserveSearch:!!e.searchFilter,clearOnSelect:!e.searchFilter,closeOnSelect:!e.stayOpen,loading:e.isLoading},e.attributes,{onOpen:e.onOpen,onClose:e.onClose,onTag:e.onAddTag,onSearchChange:e.onSearchChange}),null,16,["modelValue","class","placeholder","options","customLabel","trackBy","groupLabel","groupValues","multiple","taggable","searchable","internalSearch","preserveSearch","clearOnSelect","closeOnSelect","loading","onOpen","onClose","onTag","onSearchChange"]),e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button-clear dito-button-overlay",type:"button",disabled:e.disabled,onClick:t[1]||(t[1]=(...d)=>e.clear&&e.clear(...d))},null,8,Zl)):n.createCommentVNode("",!0)]),e.editable?(n.openBlock(),n.createBlock(l,{key:0,schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,disabled:!1,editable:e.editable,editPath:e.editPath},null,8,["schema","dataPath","data","meta","store","editable","editPath"])):n.createCommentVNode("",!0)])}const uu="",xl=D.register("multiselect",{mixins:[Ce],components:{VueMultiselect:En},data(){return{searchedOptions:null,populate:!1}},computed:{selectedOptions:{get(){return this.multiple?(this.selectedValue||[]).map(e=>this.getOptionForValue(e)||this.addTagOption(e)).filter(Boolean):this.selectedOption},set(e){this.selectedValue=this.multiple?(e||[]).map(t=>this.getValueForOption(t)):this.getValueForOption(e),this.onChange()}},activeOptions(){return this.searchedOptions||this.options},multiple:b("multiple",{type:Boolean,default:!1}),searchable:b("searchable",{type:Boolean,default:!1}),taggable:b("taggable",{type:Boolean,default:!1}),stayOpen:b("stayOpen",{type:Boolean,default:!1}),placeholder(){let{placeholder:e,searchable:t,taggable:o}=this.schema;return c.isBoolean(e)&&(e=e?void 0:null),e===void 0?t&&o?`Search or add a ${this.label}`:t?`Select or search ${this.label}`:void 0:e},showHighlight(){return this.isMounted&&this.$refs.element.pointerDirty}},mounted(){this.autofocus&&this.focus()},methods:{addTagOption(e){if(this.taggable){const{optionLabel:t,optionValue:o}=this,s=t&&o?{[t]:e,[o]:e}:e;return this.options.push(s),s}},focusElement(){this.$refs.element.activate()},blurElement(){this.$refs.element.deactivate()},onOpen(){this.populate=!0},onClose(){this.focused&&this.onBlur()},onBlur(){this.$refs.element.isOpen||Z.methods.onBlur.call(this)},onAddTag(e){const t=this.addTagOption(e);t&&this.value.push(this.getValueForOption(t))},async onSearchChange(e){this.searchFilter&&(e?(this.searchedOptions=[],this.searchedOptions=await this.resolveData(()=>this.searchFilter(new S(this,{query:e})))):this.searchedOptions=null)}}}),ed=y(xl,[["render",vl]]),Ye={computed:{inputValue:{get(){return this.value!==null?this.value:""},set(e){this.value=e!==""?this.isInteger?parseInt(e,10):parseFloat(e):null}},isInteger(){return!1},stepValue(){return this.clearable?null:this.step==null&&!this.isInteger?"any":this.step},decimals:b("decimals",{type:Number}),step:b("step",{type:Number,get(e){return this.isInteger&&e!=null?Math.ceil(e):e}}),min:b("min",{type:Number,get(e){var t;return e=e===void 0?(t=this.getSchemaValue("range",{type:Array}))==null?void 0:t[0]:e,this.isInteger&&e!=null?Math.floor(e):e}}),max:b("max",{type:Number,get(e){var t;return e=e===void 0?(t=this.getSchemaValue("range",{type:Array}))==null?void 0:t[1]:e,this.isInteger&&e!=null?Math.ceil(e):e}}),range:b("range",{type:Array,get(){const{min:e,max:t}=this;return e!=null&&t!=null?[e,t]:void 0},set(e){c.isArray(e)&&([this.min,this.max]=e)}})},methods:{getValidations(){const e={},{range:t,min:o,max:s,decimals:a,step:r}=this;if(t?e.range=t:(o!=null&&(e.min=o),s!=null&&(e.max=s)),a!=null)e.decimals=a;else if(r){const i=(`${r}`.split(".")[1]||"").length;i>0?e.decimals=i:e.integer=!0}return this.isInteger&&(e.integer=!0),e}}},td=["disabled"];function nd(e,t,o,s,a,r){const i=n.resolveComponent("InputField");return n.openBlock(),n.createBlock(i,n.mergeProps({class:"dito-number",id:e.dataPath,ref:"element",modelValue:e.inputValue,"onUpdate:modelValue":t[1]||(t[1]=l=>e.inputValue=l),type:"number"},e.attributes,{min:e.min,max:e.max,step:e.stepValue}),{after:n.withCtx(()=>[e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button-clear dito-button-overlay",disabled:e.disabled,onClick:t[0]||(t[0]=n.withModifiers((...l)=>e.clear&&e.clear(...l),["stop"]))},null,8,td)):n.createCommentVNode("",!0)]),_:1},16,["id","modelValue","min","max","step"])}const pu="",od=D.register(["number","integer"],{mixins:[Ye],components:{InputField:J},nativeField:!0,textField:!0,computed:{isInteger(){return this.type==="integer"}}}),sd=y(od,[["render",nd]]),ad=["id"],rd={key:0,class:"dito-object-content"},id=["innerHTML"],ld=["innerHTML"];function dd(e,t,o,s,a,r){const i=n.resolveComponent("DitoSchemaInlined"),l=n.resolveComponent("DitoEditButtons");return e.isReady?(n.openBlock(),n.createElementBlock("div",{key:0,class:"dito-object",id:e.dataPath},[e.objectData?(n.openBlock(),n.createElementBlock("div",rd,[e.isInlined?(n.openBlock(),n.createBlock(i,{key:0,label:e.objectLabel,schema:e.getItemFormSchema(e.schema,e.objectData,e.context),dataPath:e.dataPath,data:e.objectData,meta:e.nestedMeta,store:e.store,disabled:e.disabled||e.isLoading,collapsed:e.collapsed,collapsible:e.collapsible,deletable:e.objectData&&e.deletable,editable:e.objectData&&e.editable,editPath:e.path,accumulatedBasis:e.accumulatedBasis,onDelete:t[0]||(t[0]=d=>e.deleteItem(e.objectData))},null,8,["label","schema","dataPath","data","meta","store","disabled","collapsed","collapsible","deletable","editable","editPath","accumulatedBasis"])):e.schema.component?(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.schema.component),{key:1,dataPath:e.dataPath,data:e.objectData,nested:!1},null,8,["dataPath","data"])):e.render?(n.openBlock(),n.createElementBlock("span",{key:2,innerHTML:e.render(e.getContext())},null,8,id)):(n.openBlock(),n.createElementBlock("span",{key:3,innerHTML:e.getItemLabel(e.schema,e.objectData)},null,8,ld))])):n.createCommentVNode("",!0),n.createVNode(l,{buttons:e.buttonSchemas,schema:e.schema,dataPath:e.dataPath,data:e.objectData,path:e.path,meta:e.meta,store:e.store,disabled:e.disabled||e.isLoading,creatable:e.creatable,createPath:e.path},null,8,["buttons","schema","dataPath","data","path","meta","store","disabled","creatable","createPath"])],8,ad)):n.createCommentVNode("",!0)}const mu="",cd=D.register("object",{mixins:[Q],getSourceType(e){return e},computed:{objectLabel(){return this.collapsible?this.getItemLabel(this.schema,this.objectData,{asObject:!0}):null}},methods:{getContext(){return new S(this,{data:this.objectData})}},async processSchema(e,t,o,s,a,r=!1,i=!1,l=null){await Promise.all([he(t),Q.processSchema(e,t,o,s,a,r,i,l)])}}),hd=y(cd,[["render",dd]]),ud=D.register("panel",{defaultValue:()=>{},excludeValue:!0,generateLabel:!1,omitSpacing:!0,getPanelSchema(e,t){const{name:o,...s}=t;return s}}),pd=["id","value","max"];function md(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("progress",n.mergeProps({class:"dito-progress",id:e.dataPath,ref:"element",value:e.progressValue,max:e.progressMax},e.attributes),null,16,pd)}const fd=D.register("progress",{mixins:[Ye],computed:{progressValue(){let{value:e,range:t,step:o}=this;return e!==null?(t&&(e-=t[0]),o&&(e=Math.round(e/o)*o)):e="",e},progressMax(){const{range:e}=this;return e?e[1]-e[0]:null}}}),gd=y(fd,[["render",md]]),bd=["id"],yd=["value"];function kd(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("ul",{class:n.normalizeClass(["dito-radio-buttons",`dito-layout-${e.schema.layout||"vertical"}`]),id:e.dataPath},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.options,i=>(n.openBlock(),n.createElementBlock("li",null,[n.createElementVNode("label",null,[n.withDirectives(n.createElementVNode("input",n.mergeProps({class:"dito-radio-button",ref_for:!0,ref:"element","onUpdate:modelValue":t[0]||(t[0]=l=>e.selectedValue=l),type:"radio",value:e.getValueForOption(i)},e.attributes),null,16,yd),[[n.vModelRadio,e.selectedValue]]),n.createTextVNode(n.toDisplayString(e.getLabelForOption(i)),1)])]))),256))],10,bd)}const fu="",Cd=D.register("radio",{mixins:[Ce],nativeField:!0,defaultWidth:"auto"}),$d=y(Cd,[["render",kd]]);function Dd(e,t,o,s,a,r){const i=n.resolveComponent("DitoSchemaInlined");return n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["dito-section",{"dito-section--labelled":e.hasLabel}])},[n.createVNode(i,{class:"dito-section__schema",label:e.label,schema:e.getItemFormSchema(e.schema,e.item,e.context),dataPath:e.dataPath,data:e.item,meta:e.meta,store:e.store,padding:e.hasLabel?"nested":"inlined",disabled:e.disabled,collapsed:e.collapsed,collapsible:e.collapsible,labelNode:e.labelNode},null,8,["label","schema","dataPath","data","meta","store","padding","disabled","collapsed","collapsible","labelNode"])],2)}const gu="",Bd=D.register("section",{defaultValue:()=>{},ignoreMissingValue:e=>!e.nested&&!("default"in e),defaultNested:!1,generateLabel:!1,computed:{item(){return this.nested?this.value:this.data},hasLabel(){return!!this.schema.label},collapsible:b("collapsible",{type:Boolean,default:null,get(e){return!!(e??this.collapsed!==null)}}),collapsed:b("collapsed",{type:Boolean,default:null})},methods:{getItemFormSchema:Le},async processSchema(e,t,o,s,a){await x(e,t,s,a)}}),wd=y(Bd,[["render",Dd]]),Sd={class:"dito-select"},Vd={class:"dito-select__inner"},Pd=["id"],Ed=["label"],Nd=["value"],Od=["value"],Td=["value"],Fd=["disabled"];function Ld(e,t,o,s,a,r){const i=n.resolveComponent("DitoEditButtons");return n.openBlock(),n.createElementBlock("div",Sd,[n.createElementVNode("div",Vd,[n.withDirectives(n.createElementVNode("select",n.mergeProps({id:e.dataPath,ref:"element","onUpdate:modelValue":t[0]||(t[0]=l=>e.selectedValue=l)},e.attributes,{onMousedown:t[1]||(t[1]=l=>e.populate=!0),onFocus:t[2]||(t[2]=l=>e.populate=!0)}),[e.populate?(n.openBlock(!0),n.createElementBlock(n.Fragment,{key:0},n.renderList(e.options,l=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.groupBy?(n.openBlock(),n.createElementBlock("optgroup",{key:0,label:l[e.groupByLabel]},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(l[e.groupByOptions],d=>(n.openBlock(),n.createElementBlock("option",{value:e.getValueForOption(d)},n.toDisplayString(e.getLabelForOption(d)),9,Nd))),256))],8,Ed)):(n.openBlock(),n.createElementBlock("option",{key:1,value:e.getValueForOption(l)},n.toDisplayString(e.getLabelForOption(l)),9,Od))],64))),256)):e.selectedOption?(n.openBlock(),n.createElementBlock("option",{key:1,value:e.selectedValue},n.toDisplayString(e.getLabelForOption(e.selectedOption)),9,Td)):n.createCommentVNode("",!0)],16,Pd),[[n.vModelSelect,e.selectedValue]]),e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button-clear dito-button-overlay",disabled:e.disabled,onClick:t[3]||(t[3]=(...l)=>e.clear&&e.clear(...l))},null,8,Fd)):n.createCommentVNode("",!0)]),e.editable?(n.openBlock(),n.createBlock(i,{key:0,schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,disabled:!1,editable:e.editable,editPath:e.editPath},null,8,["schema","dataPath","data","meta","store","editable","editPath"])):n.createCommentVNode("",!0)])}const bu="",_d=D.register("select",{mixins:[Ce],nativeField:!0,data(){return{populate:!0}}}),Md=y(_d,[["render",Ld]]),jd={class:"dito-slider"},Id=["id","min","max","step"];function Rd(e,t,o,s,a,r){const i=n.resolveComponent("InputField");return n.openBlock(),n.createElementBlock("div",jd,[n.withDirectives(n.createElementVNode("input",n.mergeProps({class:"dito-range",id:e.dataPath,ref:"element","onUpdate:modelValue":t[0]||(t[0]=l=>e.inputValue=l),type:"range"},e.attributes,{min:e.min,max:e.max,step:e.stepValue}),null,16,Id),[[n.vModelText,e.inputValue]]),e.input?(n.openBlock(),n.createBlock(i,n.mergeProps({key:0,class:"dito-number",modelValue:e.inputValue,"onUpdate:modelValue":t[1]||(t[1]=l=>e.inputValue=l),type:"number"},e.attributes,{min:e.min,max:e.max,step:e.stepValue}),null,16,["modelValue","min","max","step"])):n.createCommentVNode("",!0)])}const yu="",zd=D.register("slider",{mixins:[Ye],components:{InputField:J},nativeField:!0,computed:{input:b("input",{type:Boolean,default:!0})}}),qd=y(zd,[["render",Rd]]);function Ud(e,t,o,s,a,r){const i=n.resolveComponent("SwitchButton");return n.openBlock(),n.createBlock(i,n.mergeProps({class:"dito-switch",id:e.dataPath,ref:"element",modelValue:e.value,"onUpdate:modelValue":t[0]||(t[0]=l=>e.value=l),labels:e.labels},e.attributes),null,16,["id","modelValue","labels"])}const ku="",Ad=D.register("switch",{defaultValue:!1,defaultWidth:"auto",components:{SwitchButton:Ds},computed:{labels(){return this.schema.labels}}}),Hd=y(Ad,[["render",Ud]]),tn={computed:{trim:b("trim",{type:Boolean,default:!1})},processValue(e,t){return e.trim&&t!=null&&c.isString(t)&&(t=t.trim()),t===""&&(t=Me(e)),t}},Wd=["disabled"];function Kd(e,t,o,s,a,r){const i=n.resolveComponent("InputField");return n.openBlock(),n.createBlock(i,n.mergeProps({class:"dito-text",id:e.dataPath,ref:"element",modelValue:e.inputValue,"onUpdate:modelValue":t[1]||(t[1]=l=>e.inputValue=l),type:e.inputType},e.attributes),{after:n.withCtx(()=>[e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button-clear dito-button-overlay",disabled:e.disabled,onClick:t[0]||(t[0]=n.withModifiers((...l)=>e.clear&&e.clear(...l),["stop"]))},null,8,Wd)):n.createCommentVNode("",!0)]),_:1},16,["id","modelValue","type"])}const Yd="****************",Jd=D.register(["text","email","url","hostname","domain","tel","password","creditcard"],{mixins:[tn],components:{InputField:J},nativeField:!0,textField:!0,ignoreMissingValue:e=>e.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?Yd:this.value},set(e){this.value=e}}},methods:{getValidations(){const e={email:"email",url:"url",hostname:"hostname",domain:"domain",password:"password",creditcard:"creditcard"}[this.type];return e?{[e]:!0}:{}}}}),Gd=y(Jd,[["render",Kd]]),Qd=["id","rows"];function Xd(e,t,o,s,a,r){return n.withDirectives((n.openBlock(),n.createElementBlock("textarea",n.mergeProps({class:"dito-textarea dito-input",id:e.dataPath,ref:"element","onUpdate:modelValue":t[0]||(t[0]=i=>e.value=i)},e.attributes,{rows:e.lines,class:{"dito-resizable":e.resizable}}),null,16,Qd)),[[n.vModelText,e.value]])}const Cu="",Zd=D.register("textarea",{mixins:[tn],nativeField:!0,textField:!0,computed:{lines(){return this.schema.lines||4},resizable:b("resizable",{type:Boolean,default:!1})}}),vd=y(Zd,[["render",Xd]]),xd={class:"dito-tree-list"},ec={class:"dito-tree-panel"},tc={key:0,class:"dito-tree-form-container"};function nc(e,t,o,s,a,r){const i=n.resolveComponent("DitoScopes"),l=n.resolveComponent("DitoTreeItem"),d=n.resolveComponent("RouterView");return n.openBlock(),n.createElementBlock("div",xd,[e.scopes?(n.openBlock(),n.createBlock(i,{key:0,query:e.query,scopes:e.scopes},null,8,["query","scopes"])):n.createCommentVNode("",!0),n.createElementVNode("div",ec,[n.createVNode(l,{schema:e.treeSchema,dataPath:e.treeDataPath,data:e.treeData,draggable:e.draggable,open:!0},null,8,["schema","dataPath","data","draggable"]),e.hasEditableForms?(n.openBlock(),n.createElementBlock("div",tc,[n.createVNode(d)])):n.createCommentVNode("",!0)])])}const $u="",oc=D.register(["tree-list","tree-object"],{mixins:[Q],provide(){return{container:this}},getSourceType(e){return e==="tree-object"?"object":"list"},computed:{path(){var e;return(e=this.formComponent)==null?void 0:e.path},editPath(){var e;return this.$route.path.slice((e=this.path)==null?void 0:e.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:{name:this.name,...this.schema}}:this.schema},hasEditableForms(){const e=t=>A(t)&&(this.getSchemaValue("editable",{type:Boolean,default:!1,schema:t})||t.children&&e(t.children));return e(this.schema)}},async processSchema(e,t,o,s,a,r=!0,i=!1,l=null){await Promise.all([at(t.properties),Q.processSchema(e,t,o,s,a,r,i,(d,h)=>{const{children:u}=t;if(u)return u.type="tree-list",this.processSchema(e,u,u.name,d,h,r,!0,l)})])},getFormSchemasForProcessing(e,t){const{children:o}=e;return K(e,t,o?s=>({...s,components:{...s.components,[o.name]:o}}):null)}}),sc=y(oc,[["render",nc]]);function nn(e){return On.filesize(e,{base:10})}const ac={class:"dito-upload"},rc={class:"dito-table dito-table-separators dito-table-background"},ic=n.createElementVNode("thead",{class:"dito-table-head"},[n.createElementVNode("tr",null,[n.createElementVNode("th",null,[n.createElementVNode("span",null,"File")]),n.createElementVNode("th",null,[n.createElementVNode("span",null,"Size")]),n.createElementVNode("th",null,[n.createElementVNode("span",null,"Status")]),n.createElementVNode("th",null,[n.createElementVNode("span")])])],-1),lc=["innerHTML"],dc={key:1},cc=["download","href","onClick"],hc={key:2},uc={class:"dito-upload__size"},pc={class:"dito-upload__status"},mc={class:"dito-cell-edit-buttons"},fc={class:"dito-buttons dito-buttons-round"},gc=["title"],bc=["onClick"],yc={key:0},kc={colspan:4},Cc={class:"dito-upload-footer"},$c=["value"],Dc={class:"dito-buttons dito-buttons-round"},Bc=["title"];function wc(e,t,o,s,a,r){var h;const i=n.resolveComponent("VueUpload"),l=n.resolveComponent("DitoUploadFile"),d=n.resolveComponent("DitoDraggable");return n.openBlock(),n.createElementBlock("div",ac,[n.createVNode(i,{class:"dito-upload__input",ref:"upload",modelValue:e.uploads,"onUpdate:modelValue":t[0]||(t[0]=u=>e.uploads=u),inputId:e.dataPath,name:e.dataPath,disabled:e.disabled,postAction:e.uploadPath,extensions:e.extensions,accept:e.accept,multiple:e.multiple,size:e.maxSize,drop:(h=e.$el)==null?void 0:h.closest(".dito-container"),dropDirectory:!0,onInputFilter:e.onInputFilter,onInputFile:e.onInputFile},null,8,["modelValue","inputId","name","disabled","postAction","extensions","accept","multiple","size","drop","onInputFilter","onInputFile"]),n.createElementVNode("table",rc,[ic,n.createVNode(d,{modelValue:e.files,"onUpdate:modelValue":t[2]||(t[2]=u=>e.files=u),tag:"tbody",options:e.getDraggableOptions(),draggable:e.draggable},{default:n.withCtx(()=>[e.multiple||!e.isUploadActive?(n.openBlock(!0),n.createElementBlock(n.Fragment,{key:0},n.renderList(e.files,(u,p)=>(n.openBlock(),n.createElementBlock("tr",{key:u.name},[e.render?(n.openBlock(),n.createElementBlock("td",{key:0,innerHTML:e.renderFile(u,p)},null,8,lc)):e.downloadUrls[p]?(n.openBlock(),n.createElementBlock("td",dc,[n.createElementVNode("a",{download:u.name,href:e.downloadUrls[p],target:"_blank",onClick:n.withModifiers(g=>e.onClickDownload(u,p),["prevent"])},[n.createVNode(l,{file:u,thumbnail:e.thumbnails,thumbnailUrl:e.thumbnailUrls[p]},null,8,["file","thumbnail","thumbnailUrl"])],8,cc)])):(n.openBlock(),n.createElementBlock("td",hc,[n.createVNode(l,{file:u,thumbnail:e.thumbnails,thumbnailUrl:e.thumbnailUrls[p]},null,8,["file","thumbnail","thumbnailUrl"])])),n.createElementVNode("td",uc,n.toDisplayString(e.formatFileSize(u.size)),1),n.createElementVNode("td",pc,[u.upload?(n.openBlock(),n.createElementBlock(n.Fragment,{key:0},[u.upload.error?(n.openBlock(),n.createElementBlock(n.Fragment,{key:0},[n.createTextVNode("Error: "+n.toDisplayString(u.upload.error),1)],64)):u.upload.active?(n.openBlock(),n.createElementBlock(n.Fragment,{key:1},[n.createTextVNode("Uploading...")],64)):u.upload.success?(n.openBlock(),n.createElementBlock(n.Fragment,{key:2},[n.createTextVNode("Uploaded")],64)):n.createCommentVNode("",!0)],64)):(n.openBlock(),n.createElementBlock(n.Fragment,{key:1},[n.createTextVNode("Stored")],64))]),n.createElementVNode("td",mc,[n.createElementVNode("div",fc,[e.multiple?n.createCommentVNode("",!0):(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button dito-button-upload",title:e.uploadTitle,onClick:t[1]||(t[1]=(...g)=>e.onClickUpload&&e.onClickUpload(...g))},null,8,gc)),e.draggable?(n.openBlock(),n.createElementBlock("a",n.mergeProps({key:1,class:"dito-button"},e.getButtonAttributes(e.verbs.drag)),null,16)):n.createCommentVNode("",!0),e.deletable?(n.openBlock(),n.createElementBlock("button",n.mergeProps({key:2,class:"dito-button",type:"button"},e.getButtonAttributes(e.verbs.delete),{onClick:g=>e.deleteFile(u,p)}),null,16,bc)):n.createCommentVNode("",!0)])])]))),128)):n.createCommentVNode("",!0)]),_:1},8,["modelValue","options","draggable"]),e.multiple||e.isUploadActive||!e.hasFiles?(n.openBlock(),n.createElementBlock("tfoot",yc,[n.createElementVNode("tr",null,[n.createElementVNode("td",kc,[n.createElementVNode("div",Cc,[e.isUploadActive?(n.openBlock(),n.createElementBlock("progress",{key:0,class:"dito-progress",value:e.uploadProgress,max:"100"},null,8,$c)):n.createCommentVNode("",!0),n.createElementVNode("div",Dc,[e.isUploadActive?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button",type:"button",onClick:t[3]||(t[3]=n.withModifiers(u=>e.upload.active=!1,["prevent"]))},"Cancel")):n.createCommentVNode("",!0),e.multiple||!e.hasFiles?(n.openBlock(),n.createElementBlock("button",{key:1,class:"dito-button dito-button-upload",title:e.uploadTitle,onClick:t[4]||(t[4]=(...u)=>e.onClickUpload&&e.onClickUpload(...u))},null,8,Bc)):n.createCommentVNode("",!0)])])])])])):n.createCommentVNode("",!0)])])}const Du="",Sc=D.register("upload",{mixins:[We],components:{VueUpload:Tn},data(){return{uploads:[]}},computed:{upload(){return this.$refs.upload},uploadTitle(){return this.multiple?"Upload Files":"Upload File"},files(){return on(this.value)},downloadUrls(){return this.files.map((e,t)=>this.getDownloadUrl(e,t))},thumbnailUrls(){return this.files.map((e,t)=>this.getThumbnailUrl(e,t))},multiple:b("multiple",{type:Boolean,default:!1,callback:!1}),extensions:b("extensions",{type:[Array,String,RegExp]}),accept:b("accept",{type:Array,get(e){return c.isArray(e)?e.join(","):e}}),maxSize:b("maxSize",{type:[String,Number],get(e){return e?Nn(e):void 0}}),draggable:b("draggable",{type:Boolean,default:!1,get(e){return e&&this.files.length>1}}),deletable:b("deletable",{type:Boolean,default:!1}),render:b("render",{type:Function,default:null}),thumbnails:b("thumbnails",{type:[Boolean,String],default(e){return e??!!this.schema.thumbnailUrl},get(e){return e===!0?"medium":e||null}}),hasFiles(){return this.files.length>0},hasUploads(){return this.uploads.length>0},isUploadReady(){return this.hasUploads&&!(this.upload.active||this.upload.uploaded)},isUploadActive(){return this.hasUploads&&this.upload.active},uploadProgress(){return this.uploads.reduce((e,t)=>e+ +t.progress,0)/this.uploads.length},uploadPath(){return this.getResourceUrl({type:"upload",path:this.api.normalizePath(this.dataPath)})}},watch:{isUploadReady(e){e&&this.$nextTick(()=>{this.upload.active=!0})}},methods:{formatFileSize:nn,getFileContext(e,t){return this.multiple?new S(this,{value:e,data:this.files,index:t,dataPath:T(this.dataPath,t)}):this.context},renderFile(e,t){return this.render(this.getFileContext(e,t))},getDownloadUrl(e,t){return e.url?e.url:!e.upload||e.upload.success?this.getSchemaValue("downloadUrl",{type:"String",default:null,context:this.getFileContext(e,t)}):null},getThumbnailUrl(e,t){return!e.upload||e.upload.success?this.getSchemaValue("thumbnailUrl",{type:"String",default:null,context:this.getFileContext(e,t)})||(e.type.startsWith("image/")?e.url:null):null},deleteFile(e,t){const{name:o}=e;e&&window.confirm(`Do you really want to ${this.verbs.remove} ${o}?`)&&(this.multiple?this.value.splice(t,1):this.value=null,e.upload&&this.upload.remove(e.upload),this.onChange(),this.notify({type:"info",title:"Successfully Removed",text:`${o} was ${this.verbs.deleted}.`}))},getFileIndex(e){return this.multiple&&this.value?this.value.findIndex(t=>t.id===e.id):-1},addFile(e){this.multiple?this.value?this.value.push(e):this.value=[e]:this.value=e},replaceFile(e,t){if(this.multiple){const o=this.getFileIndex(e);o>=0&&(t?this.value[o]=t:this.value.splice(o,1))}else this.value=t},removeFile(e){this.replaceFile(e,null)},onInputFile(e,t){if(e&&!t){const{id:o,name:s,size:a}=e;this.addFile({id:o,name:s,size:a,upload:e})}if(e&&t){const{success:o,error:s}=e;if(o){this.onChange();const a=e.response[0];a?(a.upload=e,this.replaceFile(e,a)):this.removeFile(e)}else if(s){this.removeFile(e);const a={abort:"Upload aborted",denied:"Upload denied",extension:`Unsupported file-type: ${e.name}`,network:"Network error encountered during upload",server:"Server error occurred during upload",size:`File is too large: ${nn(e.size)}`,timeout:"Timeout occurred during upload"}[s]||`Unknown File Upload Error: '${s}'`;this.notify({type:"error",title:"File Upload Error",text:a})}}},onInputFilter(e){var o;const t=e==null?void 0:e.xhr;(o=this.api.cors)!=null&&o.credentials&&t&&!t.withCredentials&&(t.withCredentials=!0)},async onClickDownload(e,t){try{const s=await(await fetch(this.downloadUrls[t])).blob();this.download({filename:e.name,url:URL.createObjectURL(s)})}catch(o){console.error(o)}},onClickUpload(e){this.upload.$el.querySelector("input").dispatchEvent(new e.constructor(e.type,e))}},processValue(e,t){const o=on(t).map(({upload:s,...a})=>!s||s.success?a:null).filter(s=>s);return e.multiple?o:o[0]||null}});function on(e){return e?c.asArray(e):[]}const Vc=Object.freeze(Object.defineProperty({__proto__:null,DitoDitoTypeComponent:ll,DitoTypeButton:Ri,DitoTypeCheckbox:Hi,DitoTypeCheckboxes:Qi,DitoTypeCode:xi,DitoTypeColor:al,DitoTypeComputed:ul,DitoTypeDate:bl,DitoTypeLabel:zl,DitoTypeList:jl,DitoTypeMarkup:Gl,DitoTypeMultiselect:ed,DitoTypeNumber:sd,DitoTypeObject:hd,DitoTypePanel:ud,DitoTypeProgress:gd,DitoTypeRadio:$d,DitoTypeSection:wd,DitoTypeSelect:Md,DitoTypeSlider:qd,DitoTypeSwitch:Hd,DitoTypeText:Gd,DitoTypeTextarea:vd,DitoTypeTreeList:sc,DitoTypeUpload:y(Sc,[["render",wc]])},Symbol.toStringTag,{value:"Module"})),Pc={mounted(e,t){Ec(e,t.value,t.arg)},unmounted(e,t){Nc(e,t.value,t.arg)}};function Ec(e,t,o){$e.getObserver(o).observe(e,t)}function Nc(e,t,o){$e.getObserver(o).unobserve(e,t)}const Oc=typeof ResizeObserver<"u",se={};class $e{constructor(t,o){this.key=t,this.options=o,this.observer=Oc?new ResizeObserver(s=>this.handle(s)):null,this.handlersByNode=new WeakMap,this.nodeCount=0}observe(t,o){var a;let s=this.handlersByNode.get(t);s||(s=new Set,this.handlersByNode.set(t,s),(a=this.observer)==null||a.observe(t,this.options),this.nodeCount++),s.add(o)}unobserve(t,o){var a;const s=this.handlersByNode.get(t);s!=null&&s.delete(o)&&s.size===0&&(this.handlersByNode.delete(t),(a=this.observer)==null||a.unobserve(t),--this.nodeCount===0&&delete se[this.key])}handle(t){for(const o of t){const s=this.handlersByNode.get(o.target);if(s){const a={target:o.target,contentRect:o.contentRect,borderBoxSize:c.asArray(o.borderBoxSize),contentBoxSize:c.asArray(o.contentBoxSize),devicePixelContentBoxSize:c.asArray(o.devicePixelContentBoxSize)};for(const r of s)r(a)}}}static getObserver({box:t="content-box"}={}){const o={box:t},s=JSON.stringify(o);return se[s]||(se[s]=new $e(s,o)),se[s]}}const Tc=["create","created","save","saved","apply","applied","submit","submitted","delete","deleted","remove","removed","clear","cleared","edit","edited","close","closed","cancel","cancelled","drag","dragged","login","logged in"].reduce((e,t)=>(e[t]=t,e),{});class Fc{constructor(t,{dito:o={},api:s,views:a={},...r}={}){this.el=t,this.api=s=c.assignDeeply({base:"/"},o.api,s),this.options=r,s.locale||(s.locale="en-US"),s.formats=c.assignDeeply({},c.defaultFormats,s.formats),s.request||(s.request=d=>_c(s,d)),s.getApiUrl||(s.getApiUrl=d=>jc(s,d)),s.isApiUrl||(s.isApiUrl=d=>Mc(s,d)),s.normalizePath||(s.normalizePath=s.normalizePaths?c.hyphenate:d=>d),s.denormalizePath||(s.denormalizePath=s.normalizePaths?c.camelize:d=>d),s.defaults||(s.defaults={});const i=_(s.users,{type:"collection"})||{};i.login=_(i.login||"login",{method:"post",parent:i}),i.logout=_(i.logout||"logout",{method:"post",parent:i}),i.session=_(i.session||"session",{method:"get",parent:i}),s.users=i,s.resources={any(d){const h=this[d==null?void 0:d.type]||this.default;return d&&h.call(this,d)},default(d){const h=this.any(d.parent);return h?`${h}/${d.path}`:d.path},collection(d){return this.default(d)},member(d){return`${d.path}/${d.id}`},upload(d){return`${this.collection(d.parent)}/upload/${d.path}`},...s.resources},s.headers={"Content-Type":"application/json",...s.headers},c.isString(t)&&(t=document.querySelector(t));const l=this.app=n.createApp({components:{DitoRoot:He,VueNotifications:j,...Fi,...Vc},provide:{api:s,$verbs:()=>Tc,$views:()=>{},$isPopulated:()=>!0,$parentComponent:()=>null,$schemaComponent:()=>null,$schemaParentComponent:()=>null,$routeComponent:()=>null,$dataComponent:()=>null,$sourceComponent:()=>null,$resourceComponent:()=>null,$dialogComponent:()=>null,$panelComponent:()=>null,$tabComponent:()=>null},render:()=>n.h(He,{ref:"root",class:o.settings.rootClass,unresolvedViews:a,options:r})});l.config.errorHandler=console.error,l.use(j,{componentName:"VueNotifications",name:"notify"}),l.directive("resize",Pc),l.use(O.createRouter({routes:[{name:"catch-all",path:"/:_(.*)",components:{}}],history:O.createWebHistory(o.base),linkActiveClass:"",linkExactActiveClass:""})),t.classList.add("dito-app"),l.mount(t)}register(t,o){return D.register(t,o)}}class Lc extends Error{constructor(t){super(`Request failed with status code: ${t.status} (${t.statusText})`),this.response=t}}async function _c(e,{url:t,method:o="get",params:s=null,query:a=s||null,headers:r=null,data:i=null,signal:l=null}){var u,p;s&&c.deprecate("request.params is deprecated. Use action.method and action.path instead.");const d=e.isApiUrl(t),h=await fetch(e.getApiUrl({url:t,query:a}),{method:o.toUpperCase(),...i&&{body:JSON.stringify(i)},headers:{...d&&e.headers,...r},credentials:d&&((u=e.cors)!=null&&u.credentials)?"include":"same-origin",signal:l});if((p=h.headers.get("Content-Type"))!=null&&p.includes("application/json")&&(h.data=await h.json()),!h.ok)throw new Lc(h);return h}function Mc(e,t){return!c.isAbsoluteUrl(t)||t.startsWith(e.url)}function jc(e,{url:t,query:o}){!t.startsWith(e.url)&&!c.isAbsoluteUrl(t)&&(t=Ic(e.url,t));const s=Xt(o);return s?`${t}${t.includes("?")?"&":"?"}${s}`:t}function Ic(e,t){return`${e.replace(/\/+$/,"")}/${t.replace(/^\/+/,"")}`}return Fc});
7
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi51bWQuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy9hZ2VudC5qcyIsIi4uL3NyYy9hcHBTdGF0ZS5qcyIsIi4uL3NyYy91dGlscy9kYXRhLmpzIiwiLi4vc3JjL0RpdG9Db250ZXh0LmpzIiwiLi4vc3JjL21peGlucy9FbWl0dGVyTWl4aW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2NyZWRpdGNhcmQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RlY2ltYWxzLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19kb21haW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2VtYWlsLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19ob3N0bmFtZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faW50ZWdlci5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWF4LmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19taW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3Bhc3N3b3JkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19yYW5nZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmVxdWlyZWQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3VybC5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdGlvbk1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2FjY2Vzc29yLmpzIiwiLi4vc3JjL21peGlucy9UeXBlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvdWlkLmpzIiwiLi4vc3JjL3V0aWxzL1NjaGVtYUdyYXBoLmpzIiwiLi4vc3JjL3V0aWxzL3R5cGUuanMiLCIuLi9zcmMvdXRpbHMvc2NoZW1hLmpzIiwiLi4vc3JjL3V0aWxzL3Jlc291cmNlLmpzIiwiLi4vc3JjL21peGlucy9EaXRvTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvb3B0aW9ucy5qcyIsIi4uL3NyYy9EaXRvQ29tcG9uZW50LmpzIiwiLi4vLi4vdWkvc3JjL3V0aWxzL2RhdGUuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9DYWxlbmRhci52dWUiLCIuLi8uLi91aS9zcmMvdXRpbHMvZXZlbnQuanMiLCIuLi8uLi91aS9zcmMvdXRpbHMvdHJpZ2dlci5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1RyaWdnZXIudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvSW5wdXRGaWVsZC52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JY29uLnZ1ZSIsIi4uLy4uL3VpL3NyYy91dGlscy9zZWxlY3Rpb24uanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9EYXRlUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1RpbWVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvRGF0ZVRpbWVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvUGFnaW5hdGlvbi52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9Td2l0Y2hCdXR0b24udnVlIiwiLi4vLi4vdWkvc3JjL3RyYW5zaXRpb25zL1RyYW5zaXRpb25IZWlnaHQudnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL3Z1ZS5qcyIsIi4uL3NyYy9taXhpbnMvRG9tTWl4aW4uanMiLCIuLi9zcmMvRGl0b1VzZXIuanMiLCIuLi9zcmMvbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzIiwiLi4vc3JjL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUm91dGVNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVldXNlL2ludGVncmF0aW9ucy91c2VGb2N1c1RyYXAvY29tcG9uZW50Lm1qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9EaWFsb2cudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b01lbnUudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RyYWlsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9IZWFkZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b05hdmlnYXRpb24udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b05vdGlmaWNhdGlvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NpZGViYXIudnVlIiwiLi4vc3JjL21peGlucy9QdWxsZG93bk1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0FjY291bnQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VsZW1lbnQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0xhYmVsLnZ1ZSIsIi4uL3NyYy9taXhpbnMvSXRlbU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hSW5saW5lZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZS52dWUiLCIuLi9zcmMvdXRpbHMvbWF0aC5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Db250YWluZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbHMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0J1dHRvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DcmVhdGVCdXR0b24udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NsaXBib2FyZC52dWUiLCIuLi9zcmMvbWl4aW5zL0xvYWRpbmdNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy91dGlscy9wYXRoLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm1OZXN0ZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NvcGVzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYWdpbmF0aW9uLnZ1ZSIsIi4uL3NyYy9taXhpbnMvU29ydGFibGVNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUNlbGwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1VwbG9hZEZpbGUudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZVNvcnRhYmxlL2NvbXBvbmVudC5tanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRHJhZ2dhYmxlLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TcGlubmVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WTm9kZS52dWUiLCIuLi9zcmMvRGl0b1R5cGVDb21wb25lbnQuanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVCdXR0b24udnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ2hlY2tib3gudnVlIiwiLi4vc3JjL21peGlucy9EYXRhTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL09wdGlvbnNNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNoZWNrYm94ZXMudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29kZS52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDb2xvci52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDb21wb25lbnQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29tcHV0ZWQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlRGF0ZS52dWUiLCIuLi9zcmMvdXRpbHMvcm91dGUuanMiLCIuLi9zcmMvbWl4aW5zL1NvdXJjZU1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2ZpbHRlci5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUxpc3QudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTGFiZWwudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTWFya3VwLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZU11bHRpc2VsZWN0LnZ1ZSIsIi4uL3NyYy9taXhpbnMvTnVtYmVyTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVOdW1iZXIudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlT2JqZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVBhbmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVByb2dyZXNzLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVJhZGlvLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNlY3Rpb24udnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlU2VsZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNsaWRlci52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVTd2l0Y2gudnVlIiwiLi4vc3JjL21peGlucy9UZXh0TWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVUZXh0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVRleHRhcmVhLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVRyZWVMaXN0LnZ1ZSIsIi4uL3NyYy91dGlscy91bml0cy5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVVwbG9hZC52dWUiLCIuLi9zcmMvZGlyZWN0aXZlcy9yZXNpemUuanMiLCIuLi9zcmMvdmVyYnMuanMiLCIuLi9zcmMvRGl0b0FkbWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgdXNlci1hZ2VudCBwYXJzZXIgd2FzIGxpZnRlZCBmcm9tIFBhcGVyLmpzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3BhcGVyanMvcGFwZXIuanMvYmxvYi9jYzE1Njk2NzUwMDM1YWIwMGUwMGM2NGM3Yzk1ZGFhMmM4NWVmZTAxL3NyYy9jb3JlL1BhcGVyU2NvcGUuanMjTDc1LUwxMDdcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVXNlckFnZW50KHVzZXJBZ2VudCA9ICcnKSB7XG4gIGNvbnN0IGFnZW50ID0ge31cbiAgLy8gVXNlIHJlcGxhY2UoKSB0byBnZXQgYWxsIG1hdGNoZXMsIGFuZCBkZWFsIHdpdGggQ2hyb21lL1dlYmtpdCBvdmVybGFwOlxuICBjb25zdCB1YSA9IHVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IFtvc10gPVxuICAgIC8oaXBob25lfGlwYWR8bGludXg7IGFuZHJvaWR8ZGFyd2lufHdpbnxtYWN8bGludXh8ZnJlZWJzZHxzdW5vcykvLmV4ZWMoXG4gICAgICB1YVxuICAgICkgfHwgW11cbiAgY29uc3QgcGxhdGZvcm0gPSAoXG4gICAge1xuICAgICAgJ2Rhcndpbic6ICdtYWMnLFxuICAgICAgJ2lwaG9uZSc6ICdpb3MnLFxuICAgICAgJ2lwYWQnOiAnaW9zJyxcbiAgICAgICdsaW51eDsgYW5kcm9pZCc6ICdhbmRyb2lkJ1xuICAgIH1bb3NdIHx8XG4gICAgb3NcbiAgKVxuICBpZiAocGxhdGZvcm0pIHtcbiAgICBhZ2VudC5wbGF0Zm9ybSA9IHBsYXRmb3JtXG4gICAgYWdlbnRbcGxhdGZvcm1dID0gdHJ1ZVxuICB9XG4gIHVhLnJlcGxhY2UoXG4gICAgLyhvcGVyYXxjaHJvbWV8c2FmYXJpfHdlYmtpdHxmaXJlZm94fG1zaWV8dHJpZGVudClcXC8/XFxzKihbLlxcZF0rKSg/Oi4qdmVyc2lvblxcLyhbLlxcZF0rKSk/KD86Lipydjp2PyhbLlxcZF0rKSk/L2csXG4gICAgKG1hdGNoLCBicm93c2VyLCB2MSwgdjIsIHJ2KSA9PiB7XG4gICAgICAvLyBEbyBub3Qgc2V0IGFkZGl0aW9uYWwgYnJvd3NlcnMgb25jZSBjaHJvbWUgaXMgZGV0ZWN0ZWQuXG4gICAgICBpZiAoIWFnZW50LmNocm9tZSkge1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gcnYgfHwgdjIgfHwgdjFcbiAgICAgICAgaWYgKCFhZ2VudC52ZXJzaW9uIHx8IGJyb3dzZXIgIT09ICdzYWZhcmknKSB7XG4gICAgICAgICAgLy8gVXNlIHRoZSB2ZXJzaW9uIHdlIGdldCBmb3Igd2Via2l0IGZvciBTYWZhcmksIHdoaWNoIGlzIGFjdHVhbGx5XG4gICAgICAgICAgLy8gVGhlIFNhZmFyaSB2ZXJzaW9uLCBlLmcuIDE2LjBcbiAgICAgICAgICBhZ2VudC52ZXJzaW9uID0gdmVyc2lvblxuICAgICAgICAgIGFnZW50LnZlcnNpb25OdW1iZXIgPSBwYXJzZUZsb2F0KHZlcnNpb24pXG4gICAgICAgIH1cbiAgICAgICAgYWdlbnQuYnJvd3NlciA9IGJyb3dzZXJcbiAgICAgICAgYWdlbnRbYnJvd3Nlcl0gPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICApXG4gIGlmIChhZ2VudC5jaHJvbWUpIHtcbiAgICAvLyBDYW4ndCBoYXZlIGl0IGJvdGggd2F5cywgQ2hyb21lLlxuICAgIGRlbGV0ZSBhZ2VudC53ZWJraXRcbiAgfVxuICByZXR1cm4gYWdlbnRcbn1cbiIsImltcG9ydCB7IHJlYWN0aXZlIH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgcGFyc2VVc2VyQWdlbnQgfSBmcm9tICcuL3V0aWxzL2FnZW50J1xuXG5leHBvcnQgZGVmYXVsdCByZWFjdGl2ZSh7XG4gIHRpdGxlOiAnJyxcbiAgcm91dGVDb21wb25lbnRzOiBbXSxcbiAgdXNlcjogbnVsbCxcbiAgYWdlbnQ6IHBhcnNlVXNlckFnZW50KG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJycpLFxuICBsb2FkQ2FjaGU6IHt9LCAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICBhY3RpdmVMYWJlbDogbnVsbCxcbiAgY2xpcGJvYXJkRGF0YTogbnVsbFxufSlcbiIsImltcG9ydCB7XG4gIGlzSW50ZWdlcixcbiAgcGFyc2VEYXRhUGF0aCxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKSB7XG4gIHJldHVybiBkYXRhUGF0aFxuICAgID8gYCR7ZGF0YVBhdGh9LyR7dG9rZW59YFxuICAgIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHBhdGg/LnBvcCgpXG4gIHJldHVybiBwYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5lc3RlZCA/IHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIDogcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICBpZiAocGF0aCkge1xuICAgIC8vIFJlbW92ZSB0aGUgcGFyZW50IHRva2VuLiBJZiBpdCdzIGEgbnVtYmVyLCB0aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBhblxuICAgIC8vIGFycmF5IGFuZCBuZWVkIHRvIHJlbW92ZSBtb3JlIHRva2VucyB1bnRpbCB3ZSBtZWV0IHRoZSBhY3R1YWwgcGFyZW50OlxuICAgIGxldCB0b2tlblxuICAgIGRvIHtcbiAgICAgIHRva2VuID0gcGF0aC5wb3AoKVxuICAgIH0gd2hpbGUgKHRva2VuICE9IG51bGwgJiYgaXNJbnRlZ2VyKCt0b2tlbikpXG4gICAgLy8gSWYgdGhlIHJlbW92ZWQgdG9rZW4gaXMgdmFsaWQsIHdlIGNhbiBnZXQgdGhlIHBhcmVudCBkYXRhOlxuICAgIGlmICh0b2tlbiAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gcGF0aFxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtKHJvb3RJdGVtLCBkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIHJldHVybiBwYXRoID8gZ2V0VmFsdWVBdERhdGFQYXRoKHJvb3RJdGVtLCBwYXRoKSA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHJldHVybiBwYXRoW3BhdGgubGVuZ3RoIC0gMV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aE5hbWUoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgcmV0dXJuIHRva2VuID09IG51bGwgfHwgaXNJbnRlZ2VyKCt0b2tlbikgPyBudWxsIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aEluZGV4KGRhdGFQYXRoKSB7XG4gIGNvbnN0IHRva2VuID0gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpXG4gIGNvbnN0IGluZGV4ID0gdG9rZW4gPT0gbnVsbCA/IG51bGwgOiArdG9rZW5cbiAgcmV0dXJuIGlzSW50ZWdlcihpbmRleCkgPyBpbmRleCA6IG51bGxcbn1cblxubGV0IHRlbXBvcmFyeUlkID0gMFxuZXhwb3J0IGZ1bmN0aW9uIHNldFRlbXBvcmFyeUlkKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICAvLyBUZW1wb3JhcnkgaWRzIGFyZSBtYXJrZWQgd2l0aCBhICdAJyBhdCB0aGUgYmVnaW5uaW5nLlxuICBkYXRhW2lkS2V5XSA9IGBAJHsrK3RlbXBvcmFyeUlkfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVtcG9yYXJ5SWQoaWQpIHtcbiAgcmV0dXJuIC9eQC8udGVzdChpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmZXJlbmNlKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICAvLyBSZXR1cm5zIHRydWUgaWYgdmFsdWUgaXMgYW4gb2JqZWN0IHRoYXQgaG9sZHMgbm90aGluZyBtb3JlIHRoYW4gYW4gaWQuXG4gIHJldHVybiBkYXRhPy5baWRLZXldICE9IG51bGwgJiYgT2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoID09PSAxXG59XG4iLCJpbXBvcnQgeyB0b1JhdyB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbURhdGFQYXRoLFxuICBnZXRQYXJlbnRJdGVtRGF0YVBhdGgsXG4gIGdldFBhcmVudEl0ZW0sXG4gIGdldEl0ZW0sXG4gIGdldExhc3REYXRhUGF0aE5hbWUsXG4gIGdldExhc3REYXRhUGF0aEluZGV4XG59IGZyb20gJy4vdXRpbHMvZGF0YS5qcydcblxuY29uc3QgeyBoYXNPd25Qcm9wZXJ0eSB9ID0gT2JqZWN0LnByb3RvdHlwZVxuXG4vLyBgRGl0b0NvbnRleHRgIGluc3RhbmNlcyBhcmUgYSB0aGluIHdyYXBwZXIgYXJvdW5kIHJhdyBgY29udGV4dGAgb2JqZWN0cyxcbi8vIHdoaWNoIHRoZW1zZWx2ZXMgYWN0dWFsbHkgaW5oZXJpdCBmcm9tIHRoZSBsaW5rZWQgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvXG4vLyB0aGF0IHRoZXkgb25seSBuZWVkIHRvIHByb3ZpZGUgdGhlIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBkaWZmZXJlbnQgdGhhblxuLy8gaW4gdGhlIHVuZGVybHlpbmcgY29tcG9uZW50LiBJbiBvcmRlciB0byBub3QgZXhwb3NlIGFsbCBmaWVsZHMgZnJvbSB0aGVcbi8vIGNvbXBvbmVudCwgdGhlIHdyYXBwZXIgaXMgaW50cm9kdWNlZDpcbi8vIFVzZSBXZWFrTWFwIGZvciB0aGUgcmF3IGBjb250ZXh0YCBvYmplY3RzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBvbGx1dGUgdGhlXG4vLyBhY3R1YWwgYERpdG9Db250ZXh0YCBpbnN0YW5jZSB3aXRoIGl0LlxuY29uc3QgY29udGV4dHMgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIGdldChjb250ZXh0LCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICBjb25zdCBvYmplY3QgPSBjb250ZXh0cy5nZXQodG9SYXcoY29udGV4dCkpXG4gIGNvbnN0IHZhbHVlID0ga2V5IGluIG9iamVjdCA/IG9iamVjdFtrZXldIDogdW5kZWZpbmVkXG4gIC8vIElmIGBvYmplY3RgIGV4cGxpY2l0bHkgc2V0cyB0aGUga2V5IHRvIGB1bmRlZmluZWRgLCByZXR1cm4gaXQuXG4gIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkIHx8IGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpXG4gICAgPyB2YWx1ZVxuICAgIDogaXNGdW5jdGlvbihkZWZhdWx0VmFsdWUpXG4gICAgICA/IGRlZmF1bHRWYWx1ZSgpXG4gICAgICA6IGRlZmF1bHRWYWx1ZVxufVxuXG5mdW5jdGlvbiBzZXQoY29udGV4dCwga2V5LCB2YWx1ZSkge1xuICBjb250ZXh0cy5nZXQodG9SYXcoY29udGV4dCkpW2tleV0gPSB2YWx1ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYW1zIG9iamVjdCAvIGZ1bmN0aW9uLCBvciBjcmVhdGUgYSBuZXcgb25lOlxuICAgIGNvbnRleHQgPSBjb250ZXh0XG4gICAgICA/IGlzRnVuY3Rpb24oY29udGV4dClcbiAgICAgICAgPyBjb250ZXh0KClcbiAgICAgICAgOiB7IC4uLmNvbnRleHQgfVxuICAgICAgOiB7fVxuICAgIC8vIElmIG5vdCBleHBsaWNpdGx5IHNldCAodG8gZmFsc2UpLCBkZWZhdWx0IHRvIHRydWUgc28gd2UgZG9uJ3QgZmFsbCBiYWNrXG4gICAgLy8gdG8gYGNvbXBvbmVudGAgZm9yIGl0cyB2YWx1ZS5cbiAgICBjb250ZXh0Lm5lc3RlZCA/Pz0gdHJ1ZVxuICAgIGNvbnRleHQuY29tcG9uZW50ID0gY29tcG9uZW50XG4gICAgLy8gSGF2ZSBgb2JqZWN0YCBpbmhlcml0IGZyb20gdGhlIGBjb21wb25lbnRgIGluc3RhbmNlLCBzbyBpdCBjYW4gb3ZlcnJpZGVcbiAgICAvLyBpdHMgdmFsdWVzIGFuZCBzdGlsbCByZXRyaWV2ZSBmcm9tIGl0LCBhbmQgYXNzb2NpYXRlIGl0IHdpdGggYHRoaXNgXG4gICAgLy8gdGhyb3VnaCBgY29udGV4dHNgIG1hcDpcbiAgICBjb25zdCBvYmplY3QgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YoY29udGV4dCwgY29tcG9uZW50KVxuICAgIC8vIE5vIG5lZWQgZm9yIGB0b1Jhdyh0aGlzKWAgaGVyZSBhcyBpdCdzIGFsd2F5cyByYXcgaW5zaWRlIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICBjb250ZXh0cy5zZXQodGhpcywgb2JqZWN0KVxuICB9XG5cbiAgc3RhdGljIGdldChjb21wb25lbnQsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dCBpbnN0YW5jZW9mIERpdG9Db250ZXh0XG4gICAgICA/IGNvbnRleHRcbiAgICAgIDogbmV3IERpdG9Db250ZXh0KGNvbXBvbmVudCwgY29udGV4dClcbiAgfVxuXG4gIC8vIGBuZXN0ZWRgIGlzIGB0cnVlYCB3aGVuIHRoZSBkYXRhLXBhdGggcG9pbnRzIGEgdmFsdWUgaW5zaWRlIGFuIGl0ZW0sIGFuZFxuICAvLyBgZmFsc2VgIHdoZW4gaXQgcG9pbnRzIHRvIHRoZSBpdGVtIGl0c2VsZi5cbiAgZ2V0IG5lc3RlZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICduZXN0ZWQnLCB0cnVlKVxuICB9XG5cbiAgZ2V0IHNjaGVtYSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzY2hlbWEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZhbHVlJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IGRhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RhdGFQYXRoJywgJycpXG4gIH1cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICduYW1lJywgKCkgPT4gZ2V0TGFzdERhdGFQYXRoTmFtZSh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdpbmRleCcsICgpID0+IGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuZGF0YVBhdGgpKVxuICB9XG5cbiAgZ2V0IGl0ZW1EYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0SXRlbURhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1EYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0UGFyZW50SXRlbURhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICB9XG5cbiAgZ2V0IGl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5pdGVtRGF0YVBhdGgpXG4gIH1cblxuICBnZXQgcGFyZW50SXRlbUluZGV4KCkge1xuICAgIHJldHVybiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLnBhcmVudEl0ZW1EYXRhUGF0aClcbiAgfVxuXG4gIC8vIE5PVEU6IFdoaWxlIGludGVybmFsbHksIHdlIHNwZWFrIG9mIGBkYXRhYCwgaW4gdGhlIEFQSSBzdXJmYWNlIHRoZVxuICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzOlxuICAvLyBJZiBgZGF0YWAgaXNuJ3QgcHJvdmlkZWQsIHdlIGNhbiBkZXRlcm1pbmUgaXQgZnJvbSByb290RGF0YSAmIGRhdGFQYXRoOlxuICBnZXQgaXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkYXRhJywgKCkgPT5cbiAgICAgIGdldEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgKVxuICB9XG5cbiAgLy8gTk9URTogYHBhcmVudEl0ZW1gIGlzbid0IHRoZSBjbG9zZXN0IGRhdGEgcGFyZW50IHRvIGBpdGVtYCwgaXQncyB0aGVcbiAgLy8gY2xvc2VzdCBwYXJlbnQgdGhhdCBpc24ndCBhbiBhcnJheSwgZS5nLiBmb3IgcmVsYXRpb25zIG9yIG5lc3RlZCBKU09OIGRhdGEuXG4gIC8vIFRoaXMgaXMgd2h5IHRoZSB0ZXJtIGBpdGVtYCB3YXMgY2hvc2VuIG92ZXIgYGRhdGFgLCBlLmcuIFZTIHRoZSB1c2Ugb2ZcbiAgLy8gYHBhcmVudERhdGFgIGluIHNlcnZlci1zaWRlZCB2YWxpZGF0aW9uLCB3aGljaCBpcyB0aGUgY2xvc2VzdCBwYXJlbnQuIElmXG4gIC8vIG5lZWRlZCwgd2UgY291bGQgZXhwb3NlIHRoaXMgZGF0YSBoZXJlIHRvbywgYXMgd2UgY2FuIGRvIGFsbCBzb3J0cyBvZiBkYXRhXG4gIC8vIHByb2Nlc3Npbmcgd2l0aCBgcm9vdERhdGFgIGFuZCBgZGF0YVBhdGhgLlxuICBnZXQgcGFyZW50SXRlbSgpIHtcbiAgICBjb25zdCBpdGVtID0gKFxuICAgICAgZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZCkgfHxcbiAgICAgIG51bGxcbiAgICApXG4gICAgcmV0dXJuIGl0ZW0gIT09IHRoaXMuaXRlbSA/IGl0ZW0gOiBudWxsXG4gIH1cblxuICBnZXQgcm9vdEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncm9vdERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncHJvY2Vzc2VkRGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgY2xpcGJvYXJkSXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjbGlwYm9hcmREYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCB1c2VyKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3VzZXInLCBudWxsKVxuICB9XG5cbiAgZ2V0IGFwaSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdhcGknLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdzKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZpZXdzJywgbnVsbClcbiAgfVxuXG4gIGdldCBmbGF0dGVuZWRWaWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmbGF0dGVuZWRWaWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBOT1RFOiBMaWtlICdvcHRpb25zJywgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LCBlLmcuXG4gIC8vIGluIG5lc3RlZCBmb3JtcyBkdXJpbmcgYHByb2Nlc3NEYXRhKClgLiBCdXQgYHNjaGVtYWAgaXMgZ3VhcmFudGVlZCB0b1xuICAvLyBhbHdheXMgYmUgYXZhaWxhYmxlLlxuICBnZXQgY29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBBZGQgYGNvbXBvbmVudFNjaGVtYWAgZ2V0dGVyIGZvciB0aGUgc2NoZW1hIG9mIHRoZSBjdXJyZW50IGNvbXBvbmVudCxcbiAgLy8gZXZlbiB3aGVuIHRoZSBjb21wb25lbnQgaXNuJ3QgYWN0dWFsbHkgaW5zdGFudGlhdGVkLiBDb25zaWRlciBhZGRpbmdcbiAgLy8gYHNvdXJjZVNjaGVtYWAgYXMgd2VsbD9cblxuICAvLyBUT0RPOiBGaXggdW5jbGVhciBuYW1pbmc6IFdoaWNoIHNjaGVtYSBpcyB0aGlzLCB0aGF0IG9mIHRoZSBjb21wb25lbnQgb3Igb2ZcbiAgLy8gaXRzIHBhcmVudD8gSXNuJ3QgZXhwb3NpbmcgYGZvcm1Db21wb25lbnRgIGFuZCBgdmlld0NvbXBvbmVudGAgZW5vdWdoLCBvbmNlXG4gIC8vIHdlIG9mZmVyIGFjY2VzcyB0byB0aGVpciBjb21wb25lbnRzIHRoZXJlIHRocm91Z2ggYGdldENvbXBvbmVudCgpYCAmIGNvLiBvblxuICAvLyBgRGl0b01peGluYCBwZXJoYXBzPyAgQWxzbywgdGhlcmUgY291bGQgYmUgYSBgdGFiQ29tcG9uZW50YCBnZXR0ZXIgZm9yXG4gIC8vIHNjaGVtYXMgaW4gdGFicz9cbiAgZ2V0IHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzY2hlbWFDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGZvcm1Db21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZm9ybUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgdmlld0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3Q29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGlhbG9nQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBwYW5lbENvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwYW5lbENvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncmVzb3VyY2VDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzb3VyY2VDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gV2hlbiB1c2VkIGluIE9wdGlvbnNNaXhpbiBmb3IgYHNjaGVtYS5vcHRpb25zLnZhbHVlKClgLFxuICAvLyBgc2NoZW1hLm9wdGlvbnMubGFiZWwoKWAgYW5kICBgc2NoZW1hLnNlYXJjaC5maWx0ZXIoKWAgY2FsbGJhY2tzOlxuICBnZXQgb3B0aW9uKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ29wdGlvbicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ29wdGlvbnMnLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcGVuJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdGVuZXJzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBBc3luYyBvbigpIGFuZCAkb2ZmKCkgbWV0aG9kcyB0aGF0IGtlZXAgdHJhY2sgb2YgdGhlIGV2ZW50cyBhZGRlZCAvXG4gICAgLy8gcmVtb3ZlZCwgYW5kIHByb3ZpZGUgYSBoYXNMaXN0ZW5lcnMoKSBtZXRob2QgdGhhdCBjaGVja3MgaWYgdGhlIGNvbXBvbmVudFxuICAgIC8vIGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQuXG5cbiAgICAvLyBBbHNvIGFkZHMgcHJvcGVyIGhhbmRsaW5nIG9mIGFzeW5jIGV2ZW50cywgaW5jbHVkaW5nIGEgYXN5bmMgZW1pdCgpIHRoYXRcbiAgICAvLyBkZWFscyB3aXRoIHByb3BlciBldmVudCBxdWV1ZWluZy5cbiAgICBvbihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vbihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gKHRoaXMubGlzdGVuZXJzIHx8PSBPYmplY3QuY3JlYXRlKG51bGwpKVxuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gKGxpc3RlbmVyc1tldmVudF0gfHw9IHtcbiAgICAgICAgICBjYWxsYmFja3M6IFtdLFxuICAgICAgICAgIHF1ZXVlOiBbXVxuICAgICAgICB9KVxuICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjaylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG9uY2UoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBvbiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHRoaXMub2ZmKGV2ZW50LCBvbilcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9XG4gICAgICBvbi5jYWxsYmFjayA9IGNhbGxiYWNrIC8vIE5lZWRlZCBmb3IgYG9mZigpYCwgc2VlIGJlbG93LlxuICAgICAgcmV0dXJuIHRoaXMub24oZXZlbnQsIG9uKVxuICAgIH0sXG5cbiAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBldmVudHNcbiAgICAgICAgZGVsZXRlIHRoaXMubGlzdGVuZXJzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgaGFuZGxlcnMgZm9yIHRoaXMgZXZlbnRcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxpc3RlbmVyc1tldmVudF1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGEgc3BlY2lmaWMgaGFuZGxlcjogZmluZCB0aGUgaW5kZXggaW4gY2FsbGJhY2tzXG4gICAgICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2FsbGJhY2tzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgLy8gTWF0Y2ggYGNiLmNhbGxiYWNrYCBhbHNvLCBhcyB1c2VkIGJ5IGBvbmNlKClgLCBzZWUgIGFib3ZlOlxuICAgICAgICAgICAgICBjYiA9PiBjYiA9PT0gY2FsbGJhY2sgfHwgY2IuY2FsbGJhY2sgPT09IGNhbGxiYWNrXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAvLyBPbmx5IHF1ZXVlIGV2ZW50IGlmIHRoZXJlIGFjdHVhbGx5IGFyZSBsaXN0ZW5lcnMgZm9yIGl0LlxuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmxpc3RlbmVycz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLFxuICAgICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCB0eXBlOlxuICAgIGhhc0xpc3RlbmVycyhldmVudCkge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKGV2KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5sZW5ndGggPiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISF0aGlzLmxpc3RlbmVycz8uW2V2ZW50XVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZShldmVudCwgdGFyZ2V0KSB7XG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUoZXYsIHRhcmdldClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vbihldmVudCwgKC4uLmFyZ3MpID0+IHRhcmdldC5lbWl0KGV2ZW50LCAuLi5hcmdzKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzQ3JlZGl0Q2FyZCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBjcmVkaXRjYXJkID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNDcmVkaXRDYXJkKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIGludmFsaWQnXG59XG4iLCJleHBvcnQgY29uc3QgZGVjaW1hbHMgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIGRlY2ltYWxzKSA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSBkZWNpbWFscyA9PT0gJyonID8gJysnIDogYHsxLCR7ZGVjaW1hbHN9fWBcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXlstK10/XFxcXGQqKFxcXFwuXFxcXGQke21hdGNofSk/JGApLnRlc3QodmFsdWUpXG4gIH0sXG5cbiAgbWVzc2FnZTogKHZhbHVlLCBkZWNpbWFscykgPT5cbiAgICBgbXVzdCBiZSBudW1lcmljIGFuZCBtYXkgY29udGFpbiAke1xuICAgICAgIWRlY2ltYWxzIHx8IGRlY2ltYWxzID09PSAnKicgPyAnJyA6IGRlY2ltYWxzXG4gICAgfSBkZWNpbWFsIHBvaW50c2Bcbn1cbiIsImltcG9ydCB7IGlzRG9tYWluIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGRvbWFpbiA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRG9tYWluKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGRvbWFpbidcbn1cbiIsImltcG9ydCB7IGlzRW1haWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZW1haWwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0VtYWlsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgYSB2YWxpZCBlbWFpbCdcbn1cbiIsImltcG9ydCB7IGlzSG9zdG5hbWUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgaG9zdG5hbWUgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0hvc3RuYW1lKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGhvc3QgbmFtZSdcbn1cbiIsImltcG9ydCB7IGlzSW50ZWdlciB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBpbnRlZ2VyID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNJbnRlZ2VyKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgd2hvbGUgbnVtYmVyJ1xufVxuIiwiZXhwb3J0IGNvbnN0IG1heCA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWF4KSA9PiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIG1heCkge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21heH0gb3IgbGVzc2BcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IG1pbiA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWluKSA9PiB2YWx1ZSA+PSBtaW4sXG4gIG1lc3NhZ2UodmFsdWUsIG1pbikge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21pbn0gb3IgbW9yZWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHBhc3N3b3JkID0ge1xuICAvLyBBbGxvdyBhbnkgdmFsdWUuIEZvciBub3cgdGhpcyBpcyBvbmx5IHVzZWQgYXMgYSBtYXJrZXIsIHRvIGFsbG93IHRoZVxuICAvLyByZXF1aXJlZCB2YWxpZGF0aW9uIHRvIGhhbmRsZSB1bmNoYW5nZWQgcGFzc3dvcmRzIHNlcGFyYXRlbHkuXG4gIHZhbGlkYXRlOiAoKSA9PiB0cnVlXG59XG4iLCJleHBvcnQgY29uc3QgcmFuZ2UgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIFttaW4sIG1heF0pID0+IHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIFttaW4sIG1heF0pIHtcbiAgICByZXR1cm4gYG11c3QgYmUgYmV0d2VlbiAke21pbn0gYW5kICR7bWF4fWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHJlcXVpcmVkID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBzZXR0aW5ncywgeyBwYXNzd29yZCB9KSA9PiAoXG4gICAgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09ICcnKSB8fFxuICAgIC8vIFBhc3N3b3JkIGZpZWxkcyB1c2UgYHVuZGVmaW5lZGAgYXMgb3Bwb3NlZCB0byBgbnVsbGAgd2hlbiB0aGV5J3JlIHNldFxuICAgIC8vIGJ1dCB1bmNoYW5nZWQsIGFsbG93IHRoaXMgdG8gcGFzcyB0aHJvdWdoOlxuICAgIChwYXNzd29yZCAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICApLFxuICBtZXNzYWdlOiAnaXMgcmVxdWlyZWQnLFxuICBudWxsaXNoOiB0cnVlXG59XG4iLCJpbXBvcnQgeyBpc1VybCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCB1cmwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc1VybCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSB2YWxpZCBVUkwnXG59XG4iLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCAqIGFzIHZhbGlkYXRpb25zIGZyb20gJy4uL3ZhbGlkYXRpb25zL2luZGV4LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWydlcnJvcnMnXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc1RvdWNoZWQ6IGZhbHNlLFxuICAgICAgaXNEaXJ0eTogZmFsc2UsXG4gICAgICBpc1ZhbGlkYXRlZDogZmFsc2UsXG4gICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGhhc0Vycm9ycygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZXJyb3JzXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHZhbGlkYXRlKG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZScsIHRoaXMuZGF0YVBhdGgsIHZhbHVlLCB0aGlzLnZhbGlkYXRpb25zKVxuICAgICAgZm9yIChjb25zdCBbcnVsZSwgc2V0dGluZ10gb2YgT2JqZWN0LmVudHJpZXModGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uYW1lc3BhY2VcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdmFsaWRhdGlvbnNbcnVsZV1cbiAgICAgICAgaWYgKHZhbGlkYXRvciAmJiAodmFsaWRhdG9yLm51bGxpc2ggfHwgdmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbGlkYXRlLCBtZXNzYWdlIH0gPSB2YWxpZGF0b3JcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlKHZhbHVlLCBzZXR0aW5nLCB0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNGdW5jdGlvbihtZXNzYWdlKVxuICAgICAgICAgICAgICAgID8gbWVzc2FnZSh2YWx1ZSwgc2V0dGluZywgdGhpcylcbiAgICAgICAgICAgICAgICA6IG1lc3NhZ2VcbiAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvciwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IHRydWVcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gaXNWYWxpZFxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoZmFsc2UpXG4gICAgfSxcblxuICAgIG1hcmtUb3VjaGVkKCkge1xuICAgICAgdGhpcy5pc1RvdWNoZWQgPSB0cnVlXG4gICAgICAvLyBDbGVhciBjdXJyZW50bHkgZGlzcGxheWVkIGVycm9ycyB3aGVuIGZvY3VzaW5nIGlucHV0LlxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIG1hcmtEaXJ0eSgpIHtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIG9uIG5ldyBpbnB1dC5cbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBhZGRFcnJvcihlcnJvciwgYWRkTGFiZWwgPSBmYWxzZSkge1xuICAgICAgdGhpcy5lcnJvcnMgfHw9IFtdXG4gICAgICBpZiAoYWRkTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsIHx8IHRoaXMucGxhY2Vob2xkZXIgfHwgdGhpcy5uYW1lXG4gICAgICAgIGVycm9yID0gYFRoZSAke2xhYmVsfSBmaWVsZCAke2Vycm9yfS5gXG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIC8vIENvbnZlcnQgZnJvbSBBSlYgZXJyb3JzIG9iamVjdHMgdG8gYW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHRoaXMuZXJyb3JzID0gW11cbiAgICAgIGZvciAoY29uc3QgeyBtZXNzYWdlIH0gb2YgZXJyb3JzKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IobWVzc2FnZSwgdHJ1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLnNjcm9sbEludG9WaWV3KClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGdldEVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVycm9ycyA/IFsuLi50aGlzLmVycm9yc10gOiBudWxsXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5lcnJvcnMgPSBudWxsXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyaW5nLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hQWNjZXNzb3IoXG4gIGtleU9yRGF0YVBhdGgsXG4gIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBnZXQsIHNldCwgY2FsbGJhY2sgPSB0cnVlIH0gPSB7fVxuKSB7XG4gIC8vIGBrZXlPckRhdGFQYXRoYCBjYW4gYmUgYSBzaW1wbGUgcHJvcGVydHkga2V5LFxuICAvLyBvciBhIGRhdGEtcGF0aCBpbnRvIHN1Yi1wcm9wZXJ0aWVzLCBib3RoIGluIGFycmF5IG9yIHN0cmluZyBmb3JtYXQuXG4gIGlmIChpc1N0cmluZyhrZXlPckRhdGFQYXRoKSAmJiBrZXlPckRhdGFQYXRoLmluY2x1ZGVzKCcuJykpIHtcbiAgICBrZXlPckRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICB9XG4gIC8vIFVzZSB0aGUgbm9ybWFsaXplZCBkYXRhIHBhdGggZm9yIHRoZSBoYW5kbGluZyBvdmVycmlkZXNcbiAgY29uc3QgbmFtZSA9IG5vcm1hbGl6ZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgLy8gT25seSBkZXRlcm1pbmUgc2NoZW1hIHZhbHVlIGlmIHdlIGhhdmUgbm8gZ2V0dGVyLCBvciB0aGUgZ2V0dGVyXG4gICAgICAvLyB3YW50cyB0byByZWNlaXZlIHRoZSB2YWx1ZSBhbmQgcHJvY2VzcyBpdCBmdXJ0aGVyOlxuICAgICAgY29uc3QgdmFsdWUgPVxuICAgICAgICAhZ2V0IHx8IGdldC5sZW5ndGggPiAwXG4gICAgICAgICAgPyAvLyBOT1RFOiBCZWNhdXNlIGBzY2hlbWFgIG9iamVjdHMgYXJlIHJldHJpZXZlZCBmcm9tIGBtZXRhYCwgdGhleVxuICAgICAgICAgICAgLy8gZG9uJ3Qgc2VlbSB0byBiZSByZWFjdGl2ZS4gVG8gYWxsb3cgY2hhbmdlZCBpbiBgc2NoZW1hYCB2YWx1ZXMsXG4gICAgICAgICAgICAvLyBgc2V0KClgIHN0b3JlcyBjaGFuZ2VkIHZhbHVlcyBpbiB0aGUgc2VwYXJhdGUgYG92ZXJyaWRlc2Agb2JqZWN0LlxuICAgICAgICAgICAgdGhpcy5vdmVycmlkZXMgJiYgbmFtZSBpbiB0aGlzLm92ZXJyaWRlc1xuICAgICAgICAgICAgPyB0aGlzLm92ZXJyaWRlc1tuYW1lXVxuICAgICAgICAgICAgOiB0aGlzLmdldFNjaGVtYVZhbHVlKGtleU9yRGF0YVBhdGgsIHtcbiAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZixcbiAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICByZXR1cm4gZ2V0ID8gZ2V0LmNhbGwodGhpcywgdmFsdWUpIDogdmFsdWVcbiAgICB9LFxuXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICBpZiAoc2V0KSB7XG4gICAgICAgIHNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdmVycmlkZXMgfHw9IHt9XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0b3JlQWNjZXNzb3IobmFtZSwgeyBkZWZhdWx0OiBkZWYsIGdldCwgc2V0IH0gPSB7fSkge1xuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zOlxuICAgICAgICB2YWx1ZSA9IGlzRnVuY3Rpb24oZGVmKSA/IGRlZi5jYWxsKHRoaXMpIDogZGVmXG4gICAgICAgIC8vIFRyaWdnZXIgc2V0dGVyIGJ5IHNldHRpbmcgdmFsdWUgYW5kIGFjY2Vzc29yIHRvIGRlZmF1bHQ6XG4gICAgICAgIHRoaXNbbmFtZV0gPSB2YWx1ZVxuICAgICAgICAvLyBOb3cgYWNjZXNzIHN0b3JlIGFnYWluLCBmb3IgcmVhY3Rpdml0eSB0cmFja2luZ1xuICAgICAgICB0aGlzLmdldFN0b3JlKG5hbWUpXG4gICAgICB9XG4gICAgICAvLyBBbGxvdyB0aGUgcHJvdmlkZWQgZ2V0dGVyIHRvIGZ1cnRoZXIgY2hhbmdlIG9yIHByb2Nlc3MgdGhlIHZhbHVlXG4gICAgICAvLyByZXRyaWV2ZWQgZnJvbSB0aGUgc3RvcmU6XG4gICAgICByZXR1cm4gZ2V0ID8gZ2V0LmNhbGwodGhpcywgdmFsdWUpIDogdmFsdWVcbiAgICB9LFxuXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICAvLyBBbGxvdyB0aGUgcHJvdmlkZWQgc2V0dGVyIHRvIHJldHVybiBhIG5ldyB2YWx1ZSB0byBzZXQsIG9yIGRvIHRoZVxuICAgICAgLy8gc2V0dGluZyBpdHNlbGYsIGFuZCB0aGVuIHJldHVybiBgdW5kZWZpbmVkYDpcbiAgICAgIGlmICghc2V0IHx8ICh2YWx1ZSA9IHNldC5jYWxsKHRoaXMsIHZhbHVlKSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnNldFN0b3JlKG5hbWUsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFZhbGlkYXRpb25NaXhpbiBmcm9tICcuL1ZhbGlkYXRpb25NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBjb21wdXRlVmFsdWUgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRJdGVtLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGFzQXJyYXksIGNhbWVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdGlvbk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gTk9URTogV2hpbGUgYGRhdGFQYXRoYCBwb2ludHMgdG8gdGhlIGFjdHVhbCBgdmFsdWVgLCBgZGF0YWAgcmVwcmVzZW50c1xuICAgIC8vIHRoZSBgaXRlbWAgaW4gd2hpY2ggdGhlIGB2YWx1ZWAgaXMgY29udGFpbmVkLCB1bmRlciB0aGUga2V5IGBuYW1lYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHdpZHRoOiB7IHR5cGU6IFtOdW1iZXIsIFN0cmluZ10sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlZFZhbHVlOiB1bmRlZmluZWQsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnR5cGVcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIHZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZVZhbHVlKFxuICAgICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICB7IGNvbXBvbmVudDogdGhpcyB9XG4gICAgICAgIClcbiAgICAgICAgY29uc3QgeyBmb3JtYXQgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIHJldHVybiBmb3JtYXRcbiAgICAgICAgICA/IGZvcm1hdChuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyBwYXJzZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgaWYgKHBhcnNlKSB7XG4gICAgICAgICAgdmFsdWUgPSBwYXJzZShuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhcnNlZFZhbHVlID0gdmFsdWVcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1tdXRhdGluZy1wcm9wc1xuICAgICAgICB0aGlzLmRhdGFbdGhpcy5uYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhcmVudERhdGEoKSB7XG4gICAgICBjb25zdCBkYXRhID0gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICAgIHJldHVybiBkYXRhICE9PSB0aGlzLmRhdGEgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgLy8gV2UgY2FuIG9ubHkgZ2V0IHRoZSBwcm9jZXNzZWQgZGF0YSB0aHJvdWdoIHRoZSBzY2hlbWFDb21wb25lbnQsIGJ1dFxuICAgICAgLy8gdGhhdCdzIG5vdCBuZWNlc3NhcmlseSB0aGUgaXRlbSByZXByZXNlbnRlZCBieSB0aGlzIGNvbXBvbmVudC5cbiAgICAgIC8vIFNvbHV0aW9uOiBGaW5kIHRoZSByZWxhdGl2ZSBwYXRoIGFuZCB0aGUgcHJvY2Vzc2VkIHN1Yi1pdGVtIGZyb20gdGhlcmU6XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGdldEl0ZW0oXG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5wcm9jZXNzZWREYXRhLFxuICAgICAgICAvLyBHZXQgdGhlIGRhdGFQYXRoIHJlbGF0aXZlIHRvIHRoZSBzY2hlbWFDb21wb25lbnQncyBkYXRhOlxuICAgICAgICB0aGlzLmRhdGFQYXRoLnNsaWNlKHNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aC5sZW5ndGgpLFxuICAgICAgICB0aGlzLm5lc3RlZFxuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50RGF0YVxuICAgIH0sXG5cbiAgICByb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3REYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWREYXRhXG4gICAgfSxcblxuICAgIGxhYmVsTm9kZSgpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmlzTW91bnRlZCA/IHRoaXMuJGVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgOiBudWxsXG4gICAgICByZXR1cm4gbm9kZT8ubWF0Y2hlcygnLmRpdG8tbGFiZWwnKSA/IG5vZGUgOiBudWxsXG4gICAgfSxcblxuICAgIHZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRvcHRpb25zLmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYGV4Y2x1ZGVkYCBmb3IgY29uc2lzdGVudCBuYW1pbmc/XG4gICAgZXhjbHVkZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4Y2x1ZGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHJlcXVpcmVkOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVxdWlyZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IE1vdmUgdGhlc2UgdG8gYSBzdWItY2xhc3MgY29tcG9uZW50IHVzZWQgZm9yIGFsbCBpbnB1dCBjb21wb25lbnRzP1xuICAgIHJlYWRvbmx5OiBnZXRTY2hlbWFBY2Nlc3NvcigncmVhZG9ubHknLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGF1dG9mb2N1czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9mb2N1cycsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVG8gYmUgdXNlZCBmb3Igc2VsZWN0cyBhbmQgaW5wdXRzIG9ubHk/XG4gICAgY2xlYXJhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY2xlYXJhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BsYWNlaG9sZGVyJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICBhdXRvY29tcGxldGU6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvY29tcGxldGUnLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGV2ZW50cygpIHtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMuZ2V0RXZlbnRzKClcbiAgICAgIC8vIFJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgYWxsIHByb3ZpZGVzIG5vbi1yZWNvZ25pemVkIGV2ZW50cyxcbiAgICAgIC8vIGFzc3VtaW5nIHRoZXkgYXJlIG5hdGl2ZSBldmVudHMuXG4gICAgICAvLyBUT0RPOiBNb3ZlIHRvIHZ1ZTMtc3R5bGUgYG9uW0EtWl1gIGV2ZW50IGhhbmRsZXJzIG5hbWluZyB0aGF0IGFyZW4ndFxuICAgICAgLy8gbmFtZXNwYWNlZCBpbiBgc2NoZW1hLmV2ZW50c2Agb25jZSB0aGUgdHJhbnNpdGlvbiBpcyBjb21wbGV0ZS5cbiAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgT2JqZWN0LmtleXModGhpcy5zY2hlbWEuZXZlbnRzIHx8IHt9KSkge1xuICAgICAgICBldmVudHNbYG9uJHtjYW1lbGl6ZShldmVudCwgdHJ1ZSl9YF0gPz89ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmVtaXRFdmVudChldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGV2ZW50c1xuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyBuYXRpdmVGaWVsZCwgdGV4dEZpZWxkIH0gPSB0aGlzLiRvcHRpb25zXG5cbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIC4uLnRoaXMuZXZlbnRzLFxuICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuXG4gICAgICBpZiAobmF0aXZlRmllbGQpIHtcbiAgICAgICAgYXR0cmlidXRlcy5uYW1lID0gdGhpcy5uYW1lXG4gICAgICAgIGlmICh0aGlzLmxhYmVsKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy50aXRsZSA9IHRoaXMubGFiZWxcbiAgICAgICAgfVxuICAgICAgICBhdHRyaWJ1dGVzLnJlYWRvbmx5ID0gdGhpcy5yZWFkb25seVxuICAgICAgICBhdHRyaWJ1dGVzLmF1dG9mb2N1cyA9IHRoaXMuYXV0b2ZvY3VzXG4gICAgICAgIGlmICh0ZXh0RmllbGQpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnBsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlclxuICAgICAgICAgIGF0dHJpYnV0ZXMuYXV0b2NvbXBsZXRlID0gdGhpcy5hdXRvY29tcGxldGVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH0sXG5cbiAgICB2YWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0geyAuLi50aGlzLmdldFZhbGlkYXRpb25zKCkgfVxuICAgICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMucmVxdWlyZWQgPSB0cnVlXG4gICAgICB9XG4gICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgZGVmYXVsdCBydWxlcyBhbmQgYWRkIGFueSBuZXcgb25lczpcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLnJ1bGVzIHx8IHt9KSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRlbGV0ZSB2YWxpZGF0aW9uc1trZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnNba2V5XSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uc1xuICAgIH0sXG5cbiAgICBzaG93Q2xlYXJCdXR0b24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGVhcmFibGUgJiYgdGhpcy52YWx1ZSAhPSBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICB0aGlzLnNldHVwU2NoZW1hRmllbGRzKClcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIFByZXZlbnQgdW5uZXN0ZWQgdHlwZSBjb21wb25lbnRzIGZyb20gb3ZlcnJpZGluZyBwYXJlbnQgZGF0YSBwYXRoc1xuICAgICAgaWYgKHRoaXMubmVzdGVkKSB7XG4gICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlckNvbXBvbmVudCh0aGlzLCBhZGQpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldEV2ZW50cygpIHtcbiAgICAgIGNvbnN0IHsgb25Gb2N1cywgb25CbHVyLCBvbklucHV0LCBvbkNoYW5nZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHsgb25Gb2N1cywgb25CbHVyLCBvbklucHV0LCBvbkNoYW5nZSB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgYXN5bmMgc2Nyb2xsSW50b1ZpZXcoKSB7XG4gICAgICBhd2FpdCB0aGlzLmZvY3VzU2NoZW1hKClcbiAgICAgIHRoaXMuZ2V0Rm9jdXNFbGVtZW50KCk/LnNjcm9sbEludG9WaWV3Py4oe1xuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgIGJsb2NrOiAnY2VudGVyJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy5nZXRGb2N1c0VsZW1lbnQoKT8uZm9jdXM/LigpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGJsdXJFbGVtZW50KCkge1xuICAgICAgdGhpcy5nZXRGb2N1c0VsZW1lbnQoKT8uYmx1cj8uKClcbiAgICB9LFxuXG4gICAgZ2V0Rm9jdXNFbGVtZW50KCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGFzQXJyYXkodGhpcy4kcmVmcy5lbGVtZW50KVswXSA/PyB0aGlzXG4gICAgICByZXR1cm4gZWxlbWVudC4kZWwgPz8gZWxlbWVudFxuICAgIH0sXG5cbiAgICBhc3luYyBmb2N1c1NjaGVtYSgpIHtcbiAgICAgIC8vIEFsc28gZm9jdXMgdGhpcyBjb21wb25lbnQncyBzY2hlbWEgYW5kIHBhbmVsIGluIGNhc2UgaXQncyBhIHRhYi5cbiAgICAgIGF3YWl0IHRoaXMuc2NoZW1hQ29tcG9uZW50LmZvY3VzKClcbiAgICAgIGF3YWl0IHRoaXMudGFiQ29tcG9uZW50Py5mb2N1cygpXG4gICAgfSxcblxuICAgIGFzeW5jIGZvY3VzKCkge1xuICAgICAgYXdhaXQgdGhpcy5mb2N1c1NjaGVtYSgpXG4gICAgICB0aGlzLnNjcm9sbEludG9WaWV3KClcbiAgICAgIHRoaXMuZm9jdXNFbGVtZW50KClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuYmx1ckVsZW1lbnQoKVxuICAgIH0sXG5cbiAgICBjbGVhcigpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICB0aGlzLmJsdXIoKVxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgfSxcblxuICAgIG9uRm9jdXMoKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlXG4gICAgICB0aGlzLm1hcmtUb3VjaGVkKClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdmb2N1cycpXG4gICAgfSxcblxuICAgIG9uQmx1cigpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlXG4gICAgICB0aGlzLnZhbGlkYXRlKClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdibHVyJylcbiAgICB9LFxuXG4gICAgb25JbnB1dCgpIHtcbiAgICAgIHRoaXMubWFya0RpcnR5KClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdpbnB1dCcpXG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScsIHtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIC8vIFByZXZlbnQgZW5kbGVzcyBwYXJzZSByZWN1cnNpb246XG4gICAgICAgICAgdmFsdWU6IHRoaXMucGFyc2VkVmFsdWUgIT09IHVuZGVmaW5lZCA/IHRoaXMucGFyc2VkVmFsdWUgOiB0aGlzLnZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgIC8vIFBhc3MgYHNjaGVtYUNvbXBvbmVudGAgYXMgcGFyZW50LCBzbyBjaGFuZ2UgZXZlbnRzIGNhbiBwcm9wYWdhdGUgdXAuXG4gICAgICAgIHBhcmVudDogdGhpcy5zY2hlbWFDb21wb25lbnRcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyB0b1JhdyB9IGZyb20gJ3Z1ZSdcblxuY29uc3QgdWlkTWFwID0gbmV3IFdlYWtNYXAoKVxuXG4vLyBHZW5lcmF0ZWQgYW5kIHJlbWVtYmVycyB1bmlxdWUgaWRzIHBlciBwYXNzZWQgb2JqZWN0IHVzaW5nIGEgd2VhayBtYXAuXG5sZXQgdWlkID0gMFxuZXhwb3J0IGZ1bmN0aW9uIGdldFVpZChpdGVtLCBnZXRJdGVtSWQgPSBudWxsKSB7XG4gIGNvbnN0IHJhdyA9IHRvUmF3KGl0ZW0pXG4gIGxldCBpZCA9IHVpZE1hcC5nZXQocmF3KVxuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBnZXRJdGVtSWQ/LihpdGVtKSB8fCBgQCR7Kyt1aWR9YFxuICAgIHVpZE1hcC5zZXQocmF3LCBpZClcbiAgfVxuICByZXR1cm4gaWRcbn1cbiIsImltcG9ydCB7IGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc0ludGVnZXIsXG4gIGFzQXJyYXksXG4gIHBhcnNlRGF0YVBhdGgsXG4gIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJ1xuXG4vLyBTY2hlbWFHcmFwaCBpcyBhIGNsYXNzIHRvIGNvbGxlY3Qgc2NoZW1hIGdyYXBoIG1ldGEgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG9cbi8vIHByb2Nlc3Mgc291cmNlcyBhbmQgcmVsYXRpb25zIGZvciB0aGUgZ2l2ZW4gdGFyZ2V0cyAnc2VydmVyJyBhbmQgJ2NsaXBib2FyZCcsXG4vLyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZTpcbi8vXG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuLy8gfCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VydmVyICAgIHwgY2xpcGJvYXJkIHxcbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiBmYWxzZSAgICAgICAgICAgfCBrZWVwIGlkICAgfCBrZWVwIGlkICAgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IHRydWUsIHRlbXBvcmFyeSB8IHJlZiwgI3JlZiB8IHJlZiwgI3JlZiB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSAgICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogZmFsc2UsIHRlbXBvcmFyeSAgIHwgcmVmLCAjaWQgIHwgcmVtb3ZlIGlkIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUgICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlZiwgI2lkICB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiB0cnVlLCB0ZW1wb3JhcnkgICAgfCByZWYsICNpZCAgfCByZWYsICNpZCAgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcblxuZXhwb3J0IGNsYXNzIFNjaGVtYUdyYXBoIHtcbiAgZ3JhcGggPSB7fVxuICByZWZlcmVuY2VzID0ge31cblxuICBzZXQoZGF0YVBhdGgsIHNldHRpbmdzLCBkZWZhdWx0cykge1xuICAgIGRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBsZXQgc3ViR3JhcGggPSB0aGlzLmdyYXBoXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGRhdGFQYXRoKSB7XG4gICAgICBjb25zdCBrZXkgPSBpc0ludGVnZXIoK3BhcnQpID8gJyonIDogcGFydFxuICAgICAgc3ViR3JhcGggPSBzdWJHcmFwaFtrZXldID8/PSB7fVxuICAgIH1cbiAgICBzdWJHcmFwaC4kc2V0dGluZ3MgPSB7XG4gICAgICAuLi5kZWZhdWx0cywgLy8gU2VlIGBhZGRTb3VyY2UoZGF0YVBhdGgpYFxuICAgICAgLi4uc3ViR3JhcGguJHNldHRpbmdzLFxuICAgICAgLi4uc2V0dGluZ3NcbiAgICB9XG4gIH1cblxuICBhZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIC8vIE9ubHkgc2V0IGByZWxhdGVkOiBmYWxzZWAgdGhyb3VnaCB0aGUgZGVmYXVsdHMsIGFzIGBzZXRTb3VyY2VSZWxhdGVkKClgXG4gICAgLy8gbWF5IGJlIGNhbGxlZCBiZWZvcmUgYGFkZFNvdXJjZSgpYCwgZGVwZW5kaW5nIG9uIHRoZSBncmFwaCBzdHJ1Y3R1cmUuXG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHsgdHlwZTogJ3NvdXJjZScsIHNjaGVtYSB9LCB7IHJlbGF0ZWQ6IGZhbHNlIH0pXG4gIH1cblxuICBzZXRTb3VyY2VSZWxhdGVkKGRhdGFQYXRoKSB7XG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHtcbiAgICAgIHJlbGF0ZWQ6IHRydWUsXG4gICAgICByZWZlcmVuY2U6IHRoaXMuZ2V0UmVmZXJlbmNlUHJlZml4KGRhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBhZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgdHlwZTogJ3JlbGF0aW9uJyxcbiAgICAgIHNjaGVtYSxcbiAgICAgIGludGVybmFsOiAhIXJlbGF0ZWREYXRhUGF0aCxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgocmVsYXRlZERhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBnZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpIHtcbiAgICByZXR1cm4gZGF0YVBhdGhcbiAgICAgID8gKHRoaXMucmVmZXJlbmNlc1tkYXRhUGF0aF0gPz89IG5hbm9pZCg2KSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgZmxhdHRlbigpIHtcbiAgICBjb25zdCBmbGF0dGVuID0gZ3JhcGggPT4ge1xuICAgICAgY29uc3QgZW50cmllcyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHsgJHNldHRpbmdzLCAuLi5zdWJHcmFwaCB9XSBvZiBPYmplY3QuZW50cmllcyhncmFwaCkpIHtcbiAgICAgICAgaWYgKCRzZXR0aW5ncykge1xuICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCAkc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3N1YktleSwgc2V0dGluZ3NdIG9mIGZsYXR0ZW4oc3ViR3JhcGgpKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtgJHtrZXl9LyR7c3ViS2V5fWAsIHNldHRpbmdzXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdHRlbih0aGlzLmdyYXBoKVxuICB9XG5cbiAgcHJvY2Vzcyhzb3VyY2VTY2hlbWEsIGRhdGEsIHsgdGFyZ2V0IH0pIHtcbiAgICBjb25zdCBjbGlwYm9hcmQgPSB0YXJnZXQgPT09ICdjbGlwYm9hcmQnXG4gICAgaWYgKGNsaXBib2FyZCkge1xuICAgICAgZGVsZXRlIGRhdGFbc291cmNlU2NoZW1hLmlkS2V5IHx8ICdpZCddXG4gICAgfVxuICAgIGZvciAoY29uc3QgW2RhdGFQYXRoLCBzZXR0aW5nc10gb2YgdGhpcy5mbGF0dGVuKCkpIHtcbiAgICAgIGNvbnN0IHsgdHlwZSwgc2NoZW1hLCBpbnRlcm5hbCwgcmVsYXRlZCwgcmVmZXJlbmNlIH0gPSBzZXR0aW5nc1xuICAgICAgY29uc3Qgc291cmNlID0gdHlwZSA9PT0gJ3NvdXJjZSdcbiAgICAgIGNvbnN0IHJlbGF0aW9uID0gdHlwZSA9PT0gJ3JlbGF0aW9uJ1xuICAgICAgaWYgKHNvdXJjZSB8fCByZWxhdGlvbiAmJiBpbnRlcm5hbCkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBnZXRWYWx1ZUF0RGF0YVBhdGgoZGF0YSwgZGF0YVBhdGgsICgpID0+IG51bGwpXG4gICAgICAgIGNvbnN0IHJlbW92ZUlkID0gY2xpcGJvYXJkICYmIHNvdXJjZSAmJiAhcmVsYXRlZFxuICAgICAgICBjb25zdCByZWZlcmVuY2VJZCA9IChcbiAgICAgICAgICBjbGlwYm9hcmQgJiYgKFxuICAgICAgICAgICAgcmVsYXRpb24gJiYgaW50ZXJuYWwgfHxcbiAgICAgICAgICAgIHNvdXJjZSAmJiByZWxhdGVkXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgYXNBcnJheSh2YWx1ZXMpLmZsYXQoKSkge1xuICAgICAgICAgIGNvbnN0IGlkS2V5ID0gKFxuICAgICAgICAgICAgc291cmNlICYmIHNjaGVtYS5pZEtleSB8fFxuICAgICAgICAgICAgcmVsYXRpb24gJiYgc2NoZW1hLnJlbGF0ZUJ5IHx8XG4gICAgICAgICAgICAnaWQnXG4gICAgICAgICAgKVxuICAgICAgICAgIGxldCBpZCA9IHZhbHVlPy5baWRLZXldXG4gICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChyZW1vdmVJZCkge1xuICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlSWQgfHwgaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgaWYgKGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBpZC5zbGljZSgxKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJlZktleSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgID8gLy8gQ2xpcGJvYXJkIGp1c3QgbmVlZHMgdGVtcG9yYXJ5IGlkcyB1bmRlciB0aGUgYWN0dWFsIGBpZEtleWBcbiAgICAgICAgICAgICAgICAgIGlkS2V5XG4gICAgICAgICAgICAgICAgOiAvLyBTZXJ2ZXIgd2FudHMgT2JqZWN0aW9uLXN0eWxlICcjaWQnIC8gJyNyZWYnIHBhaXJzLlxuICAgICAgICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAgICAgICA/ICcjaWQnXG4gICAgICAgICAgICAgICAgICA6ICcjcmVmJ1xuICAgICAgICAgICAgICBjb25zdCByZXZWYWx1ZSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgID8gYEAke2lkfWBcbiAgICAgICAgICAgICAgICA6IC8vIEtlZXAgdGhlIGlkcyB1bmlxdWUgaW4gcmVmZXJlbmNlIGdyb3Vwcywgc2luY2UgdGhleVxuICAgICAgICAgICAgICAgICAgLy8gcmVmZXJlbmNlIGFjcm9zcyB0aGUgZnVsbCBncmFwaC5cbiAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgICAgPyBgJHtyZWZlcmVuY2V9LSR7aWR9YFxuICAgICAgICAgICAgICAgICAgOiBpZCAvLyBBIHRlbXBvcmFyeSBpZCB3aXRob3V0IGEgcmVsYXRlZCwganVzdCBwcmVzZXJ2ZSBpdC5cbiAgICAgICAgICAgICAgdmFsdWVbcmVmS2V5XSA9IHJldlZhbHVlXG4gICAgICAgICAgICAgIGlmIChyZWZLZXkgIT09IGlkS2V5KSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2lkS2V5XVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhXG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzQXJyYXksXG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNCb29sZWFuLFxuICBpc051bWJlcixcbiAgaXNGdW5jdGlvbixcbiAgaXNEYXRlLFxuICBpc1JlZ0V4cCxcbiAgYXNBcnJheVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5jb25zdCB0eXBlQ2hlY2tlcnMgPSB7XG4gIEJvb2xlYW46IGlzQm9vbGVhbixcbiAgTnVtYmVyOiBpc051bWJlcixcbiAgU3RyaW5nOiBpc1N0cmluZyxcbiAgRGF0ZTogaXNEYXRlLFxuICBBcnJheTogaXNBcnJheSxcbiAgT2JqZWN0OiBpc09iamVjdCxcbiAgUmVnRXhwOiBpc1JlZ0V4cCxcbiAgRnVuY3Rpb246IGlzRnVuY3Rpb25cbn1cblxuLy8gRGVjbGFyZSB0aGVzZSBzZXBhcmF0ZWx5IGZyb20gdGhlIGB0eXBlQ29udmVydGVyc2Agb2JqZWN0LCB0byBwcmV2ZW50XG4vLyBCYWJlbCBpc3N1ZXMgd2l0aCBgT2JqZWN0YCBvdmVycmlkaW5nIHRoZSBnbG9iYWwgYE9iamVjdGA6XG5jb25zdCB0b0Jvb2xlYW4gPSB2YWx1ZSA9PiAhIXZhbHVlXG5jb25zdCB0b051bWJlciA9IHZhbHVlID0+ICt2YWx1ZVxuY29uc3QgdG9TdHJpbmcgPSB2YWx1ZSA9PiBTdHJpbmcodmFsdWUpXG5cbmNvbnN0IHRvRGF0ZSA9IHZhbHVlID0+XG4gIGlzRGF0ZSh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiBuZXcgRGF0ZSh2YWx1ZSlcblxuY29uc3QgdG9BcnJheSA9IHZhbHVlID0+XG4gIGlzQXJyYXkodmFsdWUpXG4gICAgPyB2YWx1ZVxuICAgIDogaXNTdHJpbmcodmFsdWUpXG4gICAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICAgIDogYXNBcnJheSh2YWx1ZSlcblxuY29uc3QgdG9PYmplY3QgPSB2YWx1ZSA9PlxuICBpc09iamVjdCh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiAvLyBJZiBhIE9iamVjdCBpcyBleHBlY3RlZCBidXQgYSBCb29sZWFuIHByb3ZpZGUsIGNvbnZlcnQgdG8gYW4gZW1wdHlcbiAgICAgIC8vIG9iamVjdC4gVXNlZCBieSBgY3JlYXRhYmxlYCAmIGNvLCB0aGF0IGNhbiBiZSBib3RoLlxuICAgICAgdmFsdWUgPT09IHRydWVcbiAgICAgID8ge31cbiAgICAgIDogbnVsbFxuXG5jb25zdCB0b1JlZ0V4cCA9IHZhbHVlID0+XG4gIGlzUmVnRXhwKHZhbHVlKVxuICAgID8gdmFsdWVcbiAgICA6IG5ldyBSZWdFeHAodmFsdWUpXG5cbmNvbnN0IHR5cGVDb252ZXJ0ZXJzID0ge1xuICBCb29sZWFuOiB0b0Jvb2xlYW4sXG4gIE51bWJlcjogdG9OdW1iZXIsXG4gIFN0cmluZzogdG9TdHJpbmcsXG4gIERhdGU6IHRvRGF0ZSxcbiAgQXJyYXk6IHRvQXJyYXksXG4gIE9iamVjdDogdG9PYmplY3QsXG4gIFJlZ0V4cDogdG9SZWdFeHBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkge1xuICAvLyBTZWUgaWYgYW55IG9mIHRoZSBleHBlY3QgdHlwZXMgbWF0Y2gsIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGV5IGRvOlxuICBpZiAodHlwZXMgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKHR5cGVDaGVja2Vyc1t0eXBlLm5hbWVdPy4odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGUodHlwZSwgdmFsdWUpIHtcbiAgY29uc3QgY29udmVydGVyID0gdHlwZSAmJiB0eXBlQ29udmVydGVyc1t0eXBlLm5hbWUgfHwgdHlwZV1cbiAgcmV0dXJuIGNvbnZlcnRlciA/IGNvbnZlcnRlcih2YWx1ZSkgOiB2YWx1ZVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERpdG9NaXhpbiBmcm9tICcuLi9taXhpbnMvRGl0b01peGluLmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0VWlkIH0gZnJvbSAnLi91aWQuanMnXG5pbXBvcnQgeyBTY2hlbWFHcmFwaCB9IGZyb20gJy4vU2NoZW1hR3JhcGguanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7IGlzTWF0Y2hpbmdUeXBlLCBjb252ZXJ0VHlwZSB9IGZyb20gJy4vdHlwZS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNBcnJheSxcbiAgaXNGdW5jdGlvbixcbiAgaXNQcm9taXNlLFxuICBpc01vZHVsZSxcbiAgYXNBcnJheSxcbiAgY2xvbmUsXG4gIGNhbWVsaXplLFxuICBhc3NpZ25EZWVwbHksXG4gIG1hcENvbmN1cnJlbnRseSxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBtYXJrUmF3IH0gZnJvbSAndnVlJ1xuXG5jb25zdCB0eXBlQ29tcG9uZW50cyA9IHt9XG5jb25zdCB1bmtub3duVHlwZVJlcG9ydGVkID0ge31cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpIHtcbiAgdHlwZUNvbXBvbmVudHNbdHlwZV0gPSBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wb25lbnQodHlwZSwgYWxsb3dOdWxsID0gZmFsc2UpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gdHlwZUNvbXBvbmVudHNbdHlwZV0gfHwgbnVsbFxuICBpZiAoIWNvbXBvbmVudCAmJiAhYWxsb3dOdWxsICYmICF1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdKSB7XG4gICAgLy8gUmVwb3J0IGVhY2ggbWlzc2luZyB0eXBlIG9ubHkgb25jZSwgdG8gYXZvaWQgZmxvb2RpbmcgdGhlIGNvbnNvbGU6XG4gICAgdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSA9IHRydWVcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gRGl0byBjb21wb25lbnQgdHlwZTogJyR7dHlwZX0nYClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWFzLCBjYWxsYmFjaykge1xuICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgaWYgKGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpKSB7XG4gICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhzY2hlbWEuY29tcG9uZW50LCBzY2hlbWEubmFtZSwgMClcbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1NjaGVtYShzY2hlbWEpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYS5jb21wb25lbnRzIHx8IHt9KSkge1xuICAgICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUsIDEpXG4gICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gc2NoZW1hXG4gICAgPyBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhbc2NoZW1hLCAuLi5nZXRUYWJTY2hlbWFzKHNjaGVtYSldLCBjYWxsYmFjaylcbiAgICA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZE5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiAoXG4gICAgaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoXG4gICAgICBzY2hlbWEsXG4gICAgICBjb21wb25lbnQgPT4gKGNhbGxiYWNrKGNvbXBvbmVudCkgPyBjb21wb25lbnQgOiB1bmRlZmluZWQpXG4gICAgKSA/PyBudWxsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gKFxuICAgIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKFxuICAgICAgc2NoZW1hLFxuICAgICAgY29tcG9uZW50ID0+IChjYWxsYmFjayhjb21wb25lbnQpID8gdHJ1ZSA6IHVuZGVmaW5lZClcbiAgICApID8/IGZhbHNlXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5TmVzdGVkU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIChcbiAgICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhcbiAgICAgIHNjaGVtYSxcbiAgICAgIGNvbXBvbmVudCA9PiAoY2FsbGJhY2soY29tcG9uZW50KSA/IHVuZGVmaW5lZCA6IGZhbHNlKVxuICAgICkgPz8gdHJ1ZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNOZXN0ZWRTY2hlbWFDb21wb25lbnRzKHNjaGVtYSkge1xuICByZXR1cm4gc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsICgpID0+IHRydWUpID8/IGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NjaGVtYShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYSkgJiYgaXNTdHJpbmcoc2NoZW1hLnR5cGUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zvcm0oc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAnZm9ybSdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICd2aWV3J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUYWIoc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAndGFiJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYW5lbChzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdwYW5lbCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWVudShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdtZW51J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHNjaGVtYSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWEoc2NoZW1hLCB1bndyYXBNb2R1bGUgPSBmYWxzZSkge1xuICBpZiAoaXNGdW5jdGlvbihzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gc2NoZW1hKClcbiAgfVxuICBpZiAoaXNQcm9taXNlKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSBhd2FpdCBzY2hlbWFcbiAgfVxuICBpZiAoaXNNb2R1bGUoc2NoZW1hKSkge1xuICAgIC8vIENvcHkgdG8gY29udmVydCBmcm9tIG1vZHVsZSB0byBvYmplY3Q6XG4gICAgc2NoZW1hID0geyAuLi5zY2hlbWEgfVxuICAgIC8vIFVud3JhcCBkZWZhdWx0IG9yIG5hbWVkIHNjaGVtYVxuICAgIGlmICghc2NoZW1hLm5hbWUgJiYgKHVud3JhcE1vZHVsZSB8fCBzY2hlbWEuZGVmYXVsdCkpIHtcbiAgICAgIC8vIEZpbHRlciBvdXQgaW50ZXJuYWwga2V5IGFkZGVkIGJ5IHZpdGUgLyB2dWUgMyBwbHVnaW4gd2hlbiBjaGFuZ2luZ1xuICAgICAgLy8gY29kZSBpbiBhIGR5bmFtaWNhbGx5IGltcG9ydGVkIHZ1ZSBjb21wb25lbnQsIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92aXRlanMvdml0ZS1wbHVnaW4tdnVlL2Jsb2IvYWJkZjVmNGYzMmQwMmFmNjQxZTVmNjA4NzFiZGUxNDUzNTU2OWIxZS9wYWNrYWdlcy9wbHVnaW4tdnVlL3NyYy9tYWluLnRzI0wxMzNcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWEpLmZpbHRlcihrZXkgPT4ga2V5ICE9PSAnX3JlcmVuZGVyX29ubHknKVxuICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBrZXlzWzBdXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVtuYW1lXVxuICAgICAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYXMoXG4gIHVucmVzb2x2ZWRTY2hlbWFzLFxuICByZXNvbHZlSXRlbSA9IHJlc29sdmVTY2hlbWFcbikge1xuICBsZXQgc2NoZW1hcyA9IGlzRnVuY3Rpb24odW5yZXNvbHZlZFNjaGVtYXMpXG4gICAgPyB1bnJlc29sdmVkU2NoZW1hcygpXG4gICAgOiB1bnJlc29sdmVkU2NoZW1hc1xuICBzY2hlbWFzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWFzLCBmYWxzZSlcbiAgaWYgKGlzQXJyYXkoc2NoZW1hcykpIHtcbiAgICAvLyBUcmFuc2xhdGUgYW4gYXJyYXkgb2YgZHluYW1pYyBpbXBvcnQsIGVhY2ggaW1wb3J0aW5nIG9uZSBuYW1lZCBzY2hlbWFcbiAgICAvLyBtb2R1bGUgdG8gYW4gb2JqZWN0IHdpdGggbmFtZWQgZW50cmllcy5cbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgYXdhaXQgbWFwQ29uY3VycmVudGx5KFxuICAgICAgICBzY2hlbWFzLFxuICAgICAgICBhc3luYyBpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBbc2NoZW1hLm5hbWUsIHNjaGVtYV1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIGlmIChpc09iamVjdChzY2hlbWFzKSkge1xuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICBhc3luYyAoW2tleSwgaXRlbV0pID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICAgIH1cbiAgICAgIClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHNjaGVtYXNcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVWaWV3cyh1bnJlc29sdmVkVmlld3MpIHtcbiAgcmV0dXJuIHJlc29sdmVTY2hlbWFzKHVucmVzb2x2ZWRWaWV3cywgYXN5bmMgKHNjaGVtYSwgdW53cmFwTW9kdWxlKSA9PiB7XG4gICAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHVud3JhcE1vZHVsZSlcbiAgICBpZiAoIXNjaGVtYS5uYW1lICYmIGlzTWVudShzY2hlbWEpKSB7XG4gICAgICAvLyBHZW5lcmF0ZSBhIG5hbWUgZm9yIHN1Yi1tZW51cyBmcm9tIHRoZWlyIGxhYmVsIGlmIGl0J3MgbWlzc2luZy5cbiAgICAgIC8vIE5PVEU6IFRoaXMgaXMgbmV2ZXIgYWN0dWFsbHkgcmVmZXJlbmNlZCBmcm9tIGFueXdoZXJlLCBidXQgdGhleSBuZWVkXG4gICAgICAvLyBhIG5hbWUgYnkgd2hpY2ggdGhleSdyZSBzdG9yZWQgaW4gdGhlIHBhcmVudCBvYmplY3QuXG4gICAgICBzY2hlbWEubmFtZSA9IGNhbWVsaXplKHNjaGVtYS5sYWJlbClcbiAgICAgIHNjaGVtYS5pdGVtcyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKHNjaGVtYS5pdGVtcylcbiAgICB9XG4gICAgcmV0dXJuIHNjaGVtYVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlblZpZXdzKHZpZXdzKSB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXModmlld3MpLnJlZHVjZShcbiAgICAgIChlbnRyaWVzLCBba2V5LCBzY2hlbWFdKSA9PiB7XG4gICAgICAgIGlmIChpc01lbnUoc2NoZW1hKSkge1xuICAgICAgICAgIGVudHJpZXMucHVzaCguLi5PYmplY3QuZW50cmllcyhzY2hlbWEuaXRlbXMpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCBzY2hlbWFdKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgICB9LFxuICAgICAgW11cbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSB7XG4gIC8vIFJlc29sdmVzIGFzeW5jIHNjaGVtYSBjb21wb25lbnRzIGFuZCBhZGRzIERpdG9NaXhpbiBhbmQgVHlwZU1peGluIHRvIHRoZW0uXG4gIGxldCB7IGNvbXBvbmVudCB9ID0gc2NoZW1hXG4gIGlmIChjb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQgPSBhd2FpdCByZXNvbHZlU2NoZW1hKGNvbXBvbmVudCwgdHJ1ZSlcbiAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAvLyBQcmV2ZW50IHdhcm5pbmc6IFwiVnVlIHJlY2VpdmVkIGEgQ29tcG9uZW50IHdoaWNoIHdhcyBtYWRlIGEgcmVhY3RpdmVcbiAgICAgIC8vIG9iamVjdC4gVGhpcyBjYW4gbGVhZCB0byB1bm5lY2Vzc2FyeSBwZXJmb3JtYW5jZSBvdmVyaGVhZCwgYW5kIHNob3VsZFxuICAgICAgLy8gYmUgYXZvaWRlZCBieSBtYXJraW5nIHRoZSBjb21wb25lbnQgd2l0aCBgbWFya1Jhd2BcIjpcbiAgICAgIHNjaGVtYS5jb21wb25lbnQgPSBtYXJrUmF3KHtcbiAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICBtaXhpbnM6IFtEaXRvTWl4aW4sIFR5cGVNaXhpbiwgLi4uKGNvbXBvbmVudC5taXhpbnMgfHwgW10pXVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYXMpIHtcbiAgLy8gYHNjaGVtYXNgIGFyZSBvZiB0aGUgc2FtZSBwb3NzaWJsZSBmb3JtcyBhcyBwYXNzZWQgdG8gYGdldE5hbWVkU2NoZW1hcygpYFxuICBhd2FpdCBtYXBDb25jdXJyZW50bHkoT2JqZWN0LnZhbHVlcyhzY2hlbWFzIHx8IHt9KSwgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudClcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKFxuICBhcGksXG4gIHNjaGVtYSxcbiAgcm91dGVzID0gbnVsbCxcbiAgbGV2ZWwgPSAwXG4pIHtcbiAgY29uc3QgcHJvbWlzZXMgPSBbXVxuICBjb25zdCBwcm9jZXNzID0gKGNvbXBvbmVudCwgbmFtZSwgcmVsYXRpdmVMZXZlbCkgPT4ge1xuICAgIHByb21pc2VzLnB1c2goXG4gICAgICBwcm9jZXNzU2NoZW1hQ29tcG9uZW50KFxuICAgICAgICBhcGksXG4gICAgICAgIGNvbXBvbmVudCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcm91dGVzLFxuICAgICAgICBsZXZlbCArIHJlbGF0aXZlTGV2ZWxcbiAgICAgIClcbiAgICApXG4gIH1cblxuICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEsIHByb2Nlc3MpXG4gIGl0ZXJhdGVTY2hlbWFDb21wb25lbnRzKGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpLCBwcm9jZXNzKVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudChcbiAgYXBpLFxuICBzY2hlbWEsXG4gIG5hbWUsXG4gIHJvdXRlcyA9IG51bGwsXG4gIGxldmVsID0gMFxuKSB7XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcblxuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgLy8gQWxzbyBwcm9jZXNzIG5lc3RlZCBwYW5lbCBzY2hlbWFzLlxuICAgIG1hcENvbmN1cnJlbnRseShcbiAgICAgIGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpLFxuICAgICAgcGFuZWwgPT4gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBwYW5lbCwgcm91dGVzLCBsZXZlbClcbiAgICApLFxuICAgIC8vIERlbGVnYXRlIHNjaGVtYSBwcm9jZXNzaW5nIHRvIHRoZSBhY3R1YWwgdHlwZSBjb21wb25lbnRzLlxuICAgIGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LnByb2Nlc3NTY2hlbWE/LihcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYSxcbiAgICAgIG5hbWUsXG4gICAgICByb3V0ZXMsXG4gICAgICBsZXZlbFxuICAgIClcbiAgXSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NWaWV3KGNvbXBvbmVudCwgYXBpLCBzY2hlbWEsIG5hbWUsIGZ1bGxQYXRoID0gJycpIHtcbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuICBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUsIGZ1bGxQYXRoKVxuICBsZXQgY2hpbGRyZW4gPSBbXVxuICBpZiAoaXNWaWV3KHNjaGVtYSkpIHtcbiAgICBhd2FpdCBwcm9jZXNzTmVzdGVkU2NoZW1hcyhhcGksIHNjaGVtYSlcbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgY2hpbGRyZW4pXG4gIH0gZWxzZSBpZiAoaXNNZW51KHNjaGVtYSkpIHtcbiAgICBjaGlsZHJlbiA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgT2JqZWN0LmVudHJpZXMoc2NoZW1hLml0ZW1zKS5tYXAoYXN5bmMgKFtuYW1lLCBpdGVtXSkgPT5cbiAgICAgICAgcHJvY2Vzc1ZpZXcoY29tcG9uZW50LCBhcGksIGl0ZW0sIG5hbWUsIHNjaGVtYS5mdWxsUGF0aClcbiAgICAgIClcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZpZXcgc2NoZW1hOiAnJHtnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSl9J2ApXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwYXRoOiBzY2hlbWEuZnVsbFBhdGgsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50LFxuICAgIG1ldGE6IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKSB7XG4gIGxldCBkZWZhdWx0cyA9IGFwaS5kZWZhdWx0c1tzY2hlbWEudHlwZV1cbiAgaWYgKGRlZmF1bHRzKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZGVmYXVsdHMpKSB7XG4gICAgICBkZWZhdWx0cyA9IGRlZmF1bHRzKHNjaGVtYSlcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KGRlZmF1bHRzKSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGVmYXVsdHMpKSB7XG4gICAgICAgIGlmIChzY2hlbWFba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NoZW1hW2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjaGVtYVtrZXldID0gYXNzaWduRGVlcGx5KHZhbHVlLCBzY2hlbWFba2V5XSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc05lc3RlZFNjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKSB7XG4gIC8vIFByb2Nlc3MgZGVmYXVsdHMgZm9yIG5lc3RlZCBzY2hlbWFzLiBOb3RlIHRoYXQgdGhpcyBpcyBhbHNvIGRvbmUgd2hlblxuICAvLyBjYWxsaW5nIGBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cygpYCwgYnV0IHRoYXQgZnVuY3Rpb24gaXMgYXN5bmMsIGFuZCB3ZVxuICAvLyBuZWVkIGEgc3luYyB2ZXJzaW9uIHRoYXQgb25seSBoYW5kbGVzIHRoZSBkZWZhdWx0cyBmb3IgZmlsdGVycywgc2VlXG4gIC8vIGBnZXRGaWx0ZXJzUGFuZWwoKWAuXG4gIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKHNjaGVtYSwgY29tcG9uZW50ID0+IHtcbiAgICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBjb21wb25lbnQpXG4gICAgY29uc3QgZm9ybXMgPSBnZXRGb3JtU2NoZW1hcyhjb21wb25lbnQpXG4gICAgZm9yIChjb25zdCBmb3JtIG9mIE9iamVjdC52YWx1ZXMoZm9ybXMpKSB7XG4gICAgICBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMoYXBpLCBmb3JtKVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgZnVsbFBhdGggPSBudWxsKSB7XG4gIC8vIFVzZWQgZm9yIHZpZXcgYW5kIHNvdXJjZSBzY2hlbWFzLCBzZWUgU291cmNlTWl4aW4uXG4gIHNjaGVtYS5uYW1lID8/PSBuYW1lXG4gIHNjaGVtYS5wYXRoID8/PSBhcGkubm9ybWFsaXplUGF0aChuYW1lKVxuICBpZiAoZnVsbFBhdGggIT09IG51bGwpIHtcbiAgICBzY2hlbWEuZnVsbFBhdGggPSBgJHtmdWxsUGF0aH0vJHtzY2hlbWEucGF0aH1gXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpIHtcbiAgLy8gRmlyc3QgcmVzb2x2ZSB0aGUgZm9ybXMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGJhY2sgb24gdGhlIHNjaGVtYS5cbiAgbGV0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMgfSA9IHNjaGVtYVxuICBpZiAoZm9ybXMpIHtcbiAgICBmb3JtcyA9IHNjaGVtYS5mb3JtcyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKGZvcm1zLCBmb3JtID0+XG4gICAgICBwcm9jZXNzRm9ybShhcGksIGZvcm0pXG4gICAgKVxuICB9IGVsc2UgaWYgKGZvcm0pIHtcbiAgICBmb3JtID0gc2NoZW1hLmZvcm0gPSBhd2FpdCBwcm9jZXNzRm9ybShhcGksIGZvcm0pXG4gIH0gZWxzZSBpZiAoaXNPYmplY3QoY29tcG9uZW50cykpIHtcbiAgICAvLyBOT1RFOiBQcm9jZXNzaW5nIGZvcm1zIGluIGNvbXB1dGVkIGNvbXBvbmVudHMgaXMgbm90IHN1cHBvcnRlZCwgc2luY2UgaXRcbiAgICAvLyBvbmx5IGNhbiBiZSBjb21wdXRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGFjdHVhbCBkYXRhLlxuICAgIGZvcm0gPSB7XG4gICAgICB0eXBlOiAnZm9ybScsXG4gICAgICBjb21wb25lbnRzXG4gICAgfVxuICB9XG5cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9IC8vIE9ubHkgdXNlZCBmb3IgcHJvY2VzcyBsb29wIGJlbG93LlxuICBjb25zdCBjaGlsZHJlbiA9IFtdXG4gIGZvciAoY29uc3QgZm9ybSBvZiBPYmplY3QudmFsdWVzKGZvcm1zKSkge1xuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgZm9ybSwgY2hpbGRyZW4sIGxldmVsKVxuICB9XG4gIHJldHVybiBjaGlsZHJlblxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0Zvcm0oYXBpLCBzY2hlbWEpIHtcbiAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHRydWUpXG4gIGlmICghaXNGb3JtKHNjaGVtYSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZm9ybSBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpXG4gIGF3YWl0IHByb2Nlc3NOZXN0ZWRTY2hlbWFzKGFwaSwgc2NoZW1hKVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzVGFiKGFwaSwgc2NoZW1hKSB7XG4gIHNjaGVtYSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hLCB0cnVlKVxuICBpZiAoIWlzVGFiKHNjaGVtYSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGFiIHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1BhbmVsKGFwaSwgc2NoZW1hKSB7XG4gIHNjaGVtYSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hLCB0cnVlKVxuICBpZiAoIWlzUGFuZWwoc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYW5lbCBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpXG4gIHJldHVybiBzY2hlbWFcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NOZXN0ZWRTY2hlbWFzKGFwaSwgc2NoZW1hKSB7XG4gIGNvbnN0IHsgdGFicywgcGFuZWxzIH0gPSBzY2hlbWFcbiAgaWYgKHRhYnMpIHtcbiAgICBzY2hlbWEudGFicyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKFxuICAgICAgdGFicyxcbiAgICAgIHRhYiA9PiBwcm9jZXNzVGFiKGFwaSwgdGFiKVxuICAgIClcbiAgfVxuICBpZiAocGFuZWxzKSB7XG4gICAgc2NoZW1hLnBhbmVscyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKFxuICAgICAgcGFuZWxzLFxuICAgICAgcGFuZWwgPT4gcHJvY2Vzc1BhbmVsKGFwaSwgcGFuZWwpXG4gICAgKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNGb3JtU2NoZW1hKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGJvdGggc2luZ2xlIGZvcm0gYW5kIG11bHRpcGxlIGZvcm1zIG5vdGF0aW9uLCBhcyB3ZWxsIGFzIGlubGluZWRcbiAgLy8gY29tcG9uZW50cy5cbiAgcmV0dXJuIChcbiAgICBpc1NjaGVtYShzY2hlbWEpICYmXG4gICAgaXNPYmplY3Qoc2NoZW1hLmZvcm0gfHwgc2NoZW1hLmZvcm1zIHx8IHNjaGVtYS5jb21wb25lbnRzKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gKFxuICAgIGlzU2NoZW1hKHNjaGVtYSkgJiZcbiAgICBPYmplY3Qua2V5cyhzY2hlbWE/LmZvcm1zIHx8IHt9KS5sZW5ndGggPiAxXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIChcbiAgICBpc1ZpZXcoc2NoZW1hKSAmJlxuICAgIGlzT2JqZWN0KHNjaGVtYS5jb21wb25lbnQpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCB7IHZpZXcgfSA9IHNjaGVtYVxuICBjb25zdCB2aWV3U2NoZW1hID0gdmlldyAmJiBjb250ZXh0LmZsYXR0ZW5lZFZpZXdzW3ZpZXddXG4gIHJldHVybiB2aWV3U2NoZW1hXG4gICAgPyAvLyBOT1RFOiBWaWV3cyBjYW4gaGF2ZSB0YWJzLCBpbiB3aGljaCBjYXNlIHRoZSB2aWV3IGNvbXBvbmVudCBpcyBuZXN0ZWRcbiAgICAgIC8vIGluIG9uZSBvZiB0aGUgdGFicywgZ28gZmluZCBpdC5cbiAgICAgIGZpbmROZXN0ZWRTY2hlbWFDb21wb25lbnQodmlld1NjaGVtYSwgaGFzRm9ybVNjaGVtYSkgfHwgbnVsbFxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgICA/IGNvbnRleHQuZmxhdHRlbmVkVmlld3Nbc2NoZW1hLnZpZXddXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICByZXR1cm4gISFnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdFZGl0UGF0aChzY2hlbWEsIGlkLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZpZXcgPSBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgaWYgKHZpZXcpIHtcbiAgICBjb25zdCBwYXRoID0gaXNTaW5nbGVDb21wb25lbnRWaWV3KHZpZXcpXG4gICAgICA/IHZpZXcuZnVsbFBhdGhcbiAgICAgIDogYCR7dmlldy5mdWxsUGF0aH0vJHt2aWV3LnBhdGh9YFxuICAgIHJldHVybiBgJHtwYXRofS8ke2lkfWBcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0LCBtb2RpZnlGb3JtKSB7XG4gIGNvbnN0IHZpZXdTY2hlbWEgPSBjb250ZXh0ICYmIGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgaWYgKHZpZXdTY2hlbWEpIHtcbiAgICBzY2hlbWEgPSB2aWV3U2NoZW1hXG4gIH0gZWxzZSBpZiAoc2NoZW1hLnZpZXcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdmlldzogJyR7c2NoZW1hLnZpZXd9J2ApXG4gIH1cblxuICBsZXQgeyBmb3JtLCBmb3JtcyB9ID0gc2NoZW1hXG4gIGlmICghZm9ybSAmJiAhZm9ybXMpIHtcbiAgICBjb25zdCB7IG5hbWUsIGNvbXBhY3QsIGNsaXBib2FyZCwgdGFicywgY29tcG9uZW50cyB9ID0gc2NoZW1hXG4gICAgaWYgKGNvbXBvbmVudHMgfHwgdGFicykge1xuICAgICAgLy8gQ29udmVydCBpbmxpbmVkIGZvcm1zIHRvIHN0YW5kLWFsb25lIGZvcm1zLCBzdXBwb3J0aW5nIGBuYW1lYCxcbiAgICAgIC8vIGBjb21wYWN0YCwgYGNsaXBib2FyZGAsIGB0YWJzYCBhbmQgYGNvbXBvbmVudHNgIHNldHRpbmdzLlxuICAgICAgZm9ybSA9IHsgdHlwZTogJ2Zvcm0nLCBuYW1lLCBjb21wYWN0LCBjbGlwYm9hcmQsIHRhYnMsIGNvbXBvbmVudHMgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBgZm9ybXNgLCBgZm9ybWAgb3IgYGNvbXBvbmVudHNgLCByZXR1cm4gYW5kIGVtcHR5IGBmb3Jtc2Agb2JqZWN0LlxuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuICB9XG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGZvcm1zKS5tYXAoKFt0eXBlLCBmb3JtXSkgPT4ge1xuICAgICAgLy8gU3VwcG9ydCBgc2NoZW1hLmNvbXBvbmVudHNgIGNhbGxiYWNrcyB0byBjcmVhdGUgY29tcG9uZW50cyBvbiB0aGUgZmx5LlxuICAgICAgaWYgKGNvbnRleHQgJiYgaXNGdW5jdGlvbihmb3JtLmNvbXBvbmVudHMpKSB7XG4gICAgICAgIGZvcm0gPSB7XG4gICAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgICBjb21wb25lbnRzOiBmb3JtLmNvbXBvbmVudHMoY29udGV4dClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFt0eXBlLCBtb2RpZnlGb3JtPy4oZm9ybSkgPz8gZm9ybV1cbiAgICB9KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSkge1xuICByZXR1cm4gZm9ybXNbaXRlbT8udHlwZV0gfHwgZm9ybXMuZGVmYXVsdCB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCksIGl0ZW0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXBhY3Qoc2NoZW1hKSB7XG4gIHJldHVybiAhIXNjaGVtYS5jb21wYWN0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lubGluZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShzY2hlbWEuaW5saW5lZCB8fCBzY2hlbWEuY29tcG9uZW50cylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmVzdGVkKHNjaGVtYSkge1xuICByZXR1cm4gISEoc2NoZW1hLm5lc3RlZCB8fCBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5kZWZhdWx0TmVzdGVkID09PSB0cnVlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTGFiZWwoc2NoZW1hLCBnZW5lcmF0ZUxhYmVscykge1xuICBjb25zdCB7IGxhYmVsIH0gPSBzY2hlbWFcbiAgcmV0dXJuIChcbiAgICBsYWJlbCAhPT0gZmFsc2UgJiYgKFxuICAgICAgISFsYWJlbCB8fFxuICAgICAgZ2VuZXJhdGVMYWJlbHMgJiYgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZ2VuZXJhdGVMYWJlbFxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb21pdFNwYWNpbmcoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFR5cGVPcHRpb25zKHNjaGVtYSk/Lm9taXRTcGFjaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFWYWx1ZShcbiAga2V5T3JEYXRhUGF0aCxcbiAgeyB0eXBlLCBzY2hlbWEsIGNhbGxiYWNrID0gdHJ1ZSwgZGVmYXVsdDogZGVmLCBjb250ZXh0IH0gPSB7fVxuKSB7XG4gIGNvbnN0IHR5cGVzID0gdHlwZSAmJiBhc0FycmF5KHR5cGUpXG4gIC8vIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBkYXRhLXBhdGhzIGluIGBrZXlPckRhdGFQYXRoYCBjYW4gb25seSBiZVxuICAvLyBwcm92aWRlZCBpbiBpbiBhcnJheSBmb3JtYXQgaGVyZTpcbiAgbGV0IHZhbHVlID0gc2NoZW1hXG4gICAgPyBpc0FycmF5KGtleU9yRGF0YVBhdGgpXG4gICAgICA/IGdldFZhbHVlQXREYXRhUGF0aChzY2hlbWEsIGtleU9yRGF0YVBhdGgsICgpID0+IHVuZGVmaW5lZClcbiAgICAgIDogc2NoZW1hW2tleU9yRGF0YVBhdGhdXG4gICAgOiB1bmRlZmluZWRcblxuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGRlZikgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCBkZWYpKSB7XG4gICAgICAvLyBTdXBwb3J0IGBkZWZhdWx0KClgIGZ1bmN0aW9ucyBmb3IgYW55IHR5cGUgZXhjZXB0IGBGdW5jdGlvbmA6XG4gICAgICBkZWYgPSBkZWYoY29udGV4dClcbiAgICB9XG4gICAgcmV0dXJuIGRlZlxuICB9XG5cbiAgaWYgKGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuICAvLyBBbnkgc2NoZW1hIHZhbHVlIGhhbmRsZWQgdGhyb3VnaCBgZ2V0U2NoZW1hVmFsdWUoKWAgY2FuIHByb3ZpZGVcbiAgLy8gYSBmdW5jdGlvbiB0aGF0J3MgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsdWUgaXMgZXZhbHVhdGVkOlxuICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICB2YWx1ZSA9IHZhbHVlKGNvbnRleHQpXG4gIH1cbiAgLy8gTm93IGZpbmFsbHkgc2VlIGlmIHdlIGNhbiBjb252ZXJ0IHRvIHRoZSBleHBlY3QgdHlwZXMuXG4gIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBjb25zdCBjb252ZXJ0ZWQgPSBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSlcbiAgICAgIGlmIChjb252ZXJ0ZWQgIT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBjb252ZXJ0ZWRcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRSZW5kZXJTY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIHJldHVybiAoXG4gICAgZ2V0U2NoZW1hVmFsdWUoJ2lmJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIHNjaGVtYSxcbiAgICAgIGNvbnRleHQsXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSkgJiYgKFxuICAgICAgIWhhc05lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hKSB8fFxuICAgICAgc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNvbXBvbmVudCA9PlxuICAgICAgICBzaG91bGRSZW5kZXJTY2hlbWEoY29tcG9uZW50LCBjb250ZXh0KVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGRlZmF1bHQgdmFsdWVzIGJvdGggb24gc2NoZW1hIGFuZCBvbiBjb21wb25lbnQgbGV2ZWwuXG4gIC8vIE5PVEU6IEF0IHRoZSB0aW1lIG9mIGNyZWF0aW9uLCBjb21wb25lbnRzIG1heSBub3QgYmUgaW5zdGFudGlhdGVkLCAoZS5nLiBpZlxuICAvLyBlbnRyaWVzIGFyZSBjcmVhdGVkIHRocm91Z2ggbmVzdGVkIGZvcm1zLCB0aGUgcGFyZW50IGZvcm0gaXNuJ3QgbW91bnRlZCkgc29cbiAgLy8gd2UgY2FuJ3QgdXNlIGBkYXRhUGF0aGAgdG8gZ2V0IHRvIGNvbXBvbmVudHMsIGFuZCB0aGUgYGRlZmF1bHRWYWx1ZWAgZnJvbVxuICAvLyB0aGVyZS4gVGhhdCdzIHdoeSBgZGVmYXVsdFZhbHVlYCBpcyBkZWZpbmVkIHN0YXRpY2FsbHkgaW4gdGhlIGNvbXBvbmVudHM6XG4gIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHNjaGVtYS5kZWZhdWx0XG4gIGNvbnN0IHZhbHVlID1cbiAgICBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgPyBkZWZhdWx0VmFsdWVcbiAgICAgIDogZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdFZhbHVlXG4gIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgID8gdmFsdWUoc2NoZW1hKVxuICAgIDogY2xvbmUodmFsdWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSB7XG4gIGNvbnN0IHR5cGVPcHRpb25zID0gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKVxuICByZXR1cm4gISEoXG4gICAgdHlwZU9wdGlvbnM/LmV4Y2x1ZGVWYWx1ZSB8fCB0eXBlT3B0aW9ucz8uaWdub3JlTWlzc2luZ1ZhbHVlPy4oc2NoZW1hKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0VmFsdWVzKHNjaGVtYSwgZGF0YSA9IHt9LCBjb21wb25lbnQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCByb290RGF0YTogZGF0YSB9XG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUpID0+IHtcbiAgICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgICAgZGF0YVtuYW1lXSA9IGdldERlZmF1bHRWYWx1ZShzY2hlbWEpXG4gICAgfVxuICB9XG5cbiAgLy8gU2V0cyB1cCBhIGRhdGEgb2JqZWN0IHRoYXQgaGFzIGtleXMgd2l0aCBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsXG4gIC8vIGZvcm0gZmllbGRzLCBzbyB0aGV5IGNhbiBiZSBjb3JyZWN0bHkgd2F0Y2hlZCBmb3IgY2hhbmdlcy5cbiAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhLFxuICAgIG51bGwsXG4gICAgbnVsbCxcbiAgICBwcm9jZXNzQmVmb3JlLFxuICAgIG51bGwsXG4gICAgb3B0aW9uc1xuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQgPSBudWxsLFxuICByb290RGF0YSA9IGNvbXBvbmVudD8ucm9vdERhdGFcbn0gPSB7fSkge1xuICBjb25zdCB7IGNvbXB1dGUgfSA9IHNjaGVtYVxuICBpZiAoY29tcHV0ZSkge1xuICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZShcbiAgICAgIG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICAvLyBPdmVycmlkZSB2YWx1ZSB0byBwcmV2ZW50IGVuZGxlc3MgcmVjdXJzaW9uIHRocm91Z2ggY2FsbGluZyB0aGVcbiAgICAgICAgLy8gZ2V0dGVyIGZvciBgdGhpcy52YWx1ZWAgaW4gYERpdG9Db250ZXh0YDpcbiAgICAgICAgdmFsdWU6IGRhdGFbbmFtZV0sXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICByb290RGF0YVxuICAgICAgfSlcbiAgICApXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEFjY2VzcyBgZGF0YVtuYW1lXWAgZGlyZWN0bHkgdG8gdXBkYXRlIHRoZSB2YWx1ZSB3aXRob3V0IGNhbGxpbmdcbiAgICAgIC8vIHBhcnNlKCk6XG4gICAgICBkYXRhW25hbWVdID0gdmFsdWVcbiAgICB9XG4gIH1cbiAgLy8gSWYgdGhlIHZhbHVlIGlzIHN0aWxsIG1pc3NpbmcgYWZ0ZXIgY29tcHV0ZSwgc2V0IHRoZSBkZWZhdWx0IGZvciBpdDpcbiAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkpIHtcbiAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSlcbiAgfVxuICAvLyBOb3cgYWNjZXNzIHRoZSB2YWx1ZS4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHJlYWN0aXZpdHkgYW5kIG5lZWRzIHRvXG4gIC8vIGhhcHBlbiBhZnRlciBhbGwgcHJpb3IgbWFuaXB1bGF0aW9uIG9mIGBkYXRhW25hbWVdYCwgc2VlIGFib3ZlOlxuICByZXR1cm4gZGF0YVtuYW1lXVxufVxuXG5mdW5jdGlvbiBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBpdGVtLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnNjaGVtYU9ubHkpIHtcbiAgICBjb25zdCBjb3B5ID0ge31cbiAgICBjb25zdCB7IGlkS2V5ID0gJ2lkJywgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgIGNvbnN0IGlkID0gaXRlbVtpZEtleV1cbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29weVtpZEtleV0gPSBpZFxuICAgIH1cbiAgICAvLyBDb3B5IG92ZXIgdHlwZSBpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICBpZiAoaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzb3VyY2VTY2hlbWEpKSB7XG4gICAgICBjb3B5LnR5cGUgPSBpdGVtLnR5cGVcbiAgICB9XG4gICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICBjb3B5W29yZGVyS2V5XSA9IGl0ZW1bb3JkZXJLZXldXG4gICAgfVxuICAgIHJldHVybiBjb3B5XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NEYXRhKHNjaGVtYSwgc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQsXG4gIHJvb3REYXRhLFxuICBzY2hlbWFPbmx5LCAvLyB3aGV0aGVyIHRvIG9ubHkgaW5jbHVkZSBkYXRhIGNvdmVyZWQgYnkgdGhlIHNjaGVtYSwgb3IgYWxsIGRhdGFcbiAgdGFyZ2V0XG59ID0ge30pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCByb290RGF0YSwgc2NoZW1hT25seSwgdGFyZ2V0IH1cbiAgY29uc3QgcHJvY2Vzc2VkRGF0YSA9IGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGRhdGEsIG9wdGlvbnMpXG4gIGNvbnN0IGdyYXBoID0gbmV3IFNjaGVtYUdyYXBoKClcblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBsZXQgdmFsdWUgPSBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgb3B0aW9ucylcbiAgICAvLyBUaGUgc2NoZW1hIGV4cGVjdHMgdGhlIGB3cmFwUHJpbWl0aXZlc2AgdHJhbnNmb3JtYXRpb25zIHRvIGJlIHByZXNlbnQgb25cbiAgICAvLyB0aGUgZGF0YSB0aGF0IGl0IGlzIGFwcGxpZWQgb24sIHNvIHdhcnAgYmVmb3JlIGFuZCB1bndyYXAgYWZ0ZXIuXG4gICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBvcmRlcktleSwgaWRLZXkgPSAnaWQnIH0gPSBzY2hlbWFcbiAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLm1hcChlbnRyeSA9PiAoe1xuICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IGVudHJ5XG4gICAgICAgIH0pKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWx3YXlzIHNoYWxsb3ctY2xvbmUgYXJyYXkgdmFsdWVzOlxuICAgICAgICB2YWx1ZSA9IFsuLi52YWx1ZV1cbiAgICAgIH1cbiAgICAgIGlmIChvcmRlcktleSAmJiB0YXJnZXQgPT09ICdjbGlwYm9hcmQnKSB7XG4gICAgICAgIC8vIFNvcnQgdGhlIGRhdGEgYmFjayBpbnRvIHRoZSBuYXR1cmFsIHNlcXVlbmNlIGFzIGRlZmluZWQgYnkgdGhlaXIgaWRzLFxuICAgICAgICAvLyBzbyBjb3B5LXBhc3RpbmcgYmV0d2VlbiBzZXJ2ZXJzIChlLmcuIG5lc3RlZCBmb250LWN1dHMgb24gTGluZXRvKVxuICAgICAgICAvLyBuYXR1cmFsbHkgZ2V0cyBtYXBwZWQgdG8gdGhlIHNhbWUgZW50cmllcyBpbiB0aGUgZ3JhcGguXG4gICAgICAgIHZhbHVlLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBjb25zdCBpZDEgPSBhPy5baWRLZXldXG4gICAgICAgICAgY29uc3QgaWQyID0gYj8uW2lkS2V5XVxuICAgICAgICAgIHJldHVybiBpZDEgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMSlcbiAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgOiBpZDIgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMilcbiAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICA6IGlkMSAtIGlkMlxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgfVxuXG4gIGNvbnN0IHByb2Nlc3NBZnRlciA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgZXhjbHVkZSwgcHJvY2VzcyB9ID0gc2NoZW1hXG4gICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YVtuYW1lXVxuXG4gICAgY29uc3QgdHlwZU9wdGlvbnMgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpXG5cbiAgICAvLyBOT1RFOiBXZSBkb24ndCBjYWNoZSB0aGlzIGNvbnRleHQsIHNpbmNlIGB2YWx1ZWAgaXMgY2hhbmdpbmcuXG4gICAgY29uc3QgZ2V0Q29udGV4dCA9ICgpID0+XG4gICAgICBuZXcgRGl0b0NvbnRleHQoY29tcG9uZW50LCB7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICByb290RGF0YTogb3B0aW9ucy5yb290RGF0YSxcbiAgICAgICAgLy8gUGFzcyB0aGUgYWxyZWFkeSBwcm9jZXNzZWQgZGF0YSB0byBgcHJvY2VzcygpYCwgc28gaXQgY2FuIGJlIG1vZGlmaWVkXG4gICAgICAgIC8vIHRocm91Z2ggYHByb2Nlc3NlZEl0ZW1gIGZyb20gdGhlcmUuXG4gICAgICAgIHByb2Nlc3NlZERhdGFcbiAgICAgIH0pXG5cbiAgICAvLyBGaXJzdCB1bndyYXAgdGhlIHdyYXBwZWQgcHJpbWl0aXZlcyBhZ2FpbiwgdG8gYnJpbmcgdGhlIGRhdGEgYmFjayBpbnRvXG4gICAgLy8gaXRzIG5hdGl2ZSBmb3JtLiBTZSBgcHJvY2Vzc0JlZm9yZSgpYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgfVxuXG4gICAgLy8gRWFjaCBjb21wb25lbnQgdHlwZSBjYW4gcHJvdmlkZSBpdHMgb3duIHN0YXRpYyBgcHJvY2Vzc1ZhbHVlKClgIG1ldGhvZFxuICAgIC8vIHRvIGNvbnZlcnQgdGhlIGRhdGEgZm9yIHN0b3JhZ2UuXG4gICAgY29uc3QgcHJvY2Vzc1ZhbHVlID0gdHlwZU9wdGlvbnM/LnByb2Nlc3NWYWx1ZVxuICAgIGlmIChwcm9jZXNzVmFsdWUpIHtcbiAgICAgIHZhbHVlID0gcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaClcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIHVzZXIncyBgcHJvY2VzcygpYCBjYWxsYmFjayBuZXh0LCBpZiBvbmUgaXMgcHJvdmlkZWQsIHNvIHRoYXRcbiAgICAvLyBpdCBjYW4gbW9kaWZ5IGRhdGEgaW4gYHByb2Nlc3NlZERhdGFgIGV2ZW4gaWYgaXQgcHJvdmlkZXMgYGV4Y2x1ZGU6IHRydWVgXG4gICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgIHZhbHVlID0gcHJvY2VzcyhnZXRDb250ZXh0KCkpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdHlwZU9wdGlvbnM/LmV4Y2x1ZGVWYWx1ZSB8fFxuICAgICAgLy8gU3VwcG9ydCBmdW5jdGlvbnMgbmV4dCB0byBib29sZWFucyBmb3IgYHNjaGVtYS5leGNsdWRlYDpcbiAgICAgIGV4Y2x1ZGUgPT09IHRydWUgfHxcbiAgICAgIGlzRnVuY3Rpb24oZXhjbHVkZSkgJiYgZXhjbHVkZShnZXRDb250ZXh0KCkpXG4gICAgKSB7XG4gICAgICBkZWxldGUgcHJvY2Vzc2VkRGF0YVtuYW1lXVxuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICBzY2hlbWEsXG4gICAgZGF0YSxcbiAgICBkYXRhUGF0aCxcbiAgICBwcm9jZXNzZWREYXRhLFxuICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgcHJvY2Vzc0FmdGVyLFxuICAgIG9wdGlvbnNcbiAgKVxuXG4gIHJldHVybiBncmFwaC5wcm9jZXNzKHNvdXJjZVNjaGVtYSwgcHJvY2Vzc2VkRGF0YSwgb3B0aW9ucylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFEYXRhKFxuICBzY2hlbWEsXG4gIGRhdGEsXG4gIGRhdGFQYXRoLFxuICBwcm9jZXNzZWREYXRhLFxuICBwcm9jZXNzQmVmb3JlLFxuICBwcm9jZXNzQWZ0ZXIsXG4gIG9wdGlvbnNcbikge1xuICBjb25zdCBwcm9jZXNzQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgPT4ge1xuICAgIGNvbnN0IGdldERhdGFQYXRoID0gKGRhdGFQYXRoLCB0b2tlbikgPT5cbiAgICAgIGRhdGFQYXRoICE9IG51bGxcbiAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pXG4gICAgICAgIDogbnVsbFxuXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKCFpc05lc3RlZChjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBkYXRhIG9uIHVubmVzdGVkIGNvbXBvbmVudHMuXG4gICAgICAgICAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhLFxuICAgICAgICAgICAgcHJvY2Vzc0JlZm9yZSxcbiAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50RGF0YVBhdGggPSBnZXREYXRhUGF0aChkYXRhUGF0aCwgbmFtZSlcblxuICAgICAgICAgIGNvbnN0IHByb2Nlc3NJdGVtID0gKGl0ZW0sIGluZGV4ID0gbnVsbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbURhdGFQYXRoID1cbiAgICAgICAgICAgICAgaW5kZXggIT09IG51bGxcbiAgICAgICAgICAgICAgICA/IGdldERhdGFQYXRoKGNvbXBvbmVudERhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICAgICAgICA6IGNvbXBvbmVudERhdGFQYXRoXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KG9wdGlvbnMuY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIHNjaGVtYTogY29tcG9uZW50U2NoZW1hLFxuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBkYXRhUGF0aDogY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY29uc3QgZ2V0Rm9ybXMgPSAoXG4gICAgICAgICAgICAgIGdldFR5cGVPcHRpb25zKGNvbXBvbmVudFNjaGVtYSk/LmdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyB8fFxuICAgICAgICAgICAgICBnZXRGb3JtU2NoZW1hc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgZm9ybXMgPSBnZXRGb3Jtcyhjb21wb25lbnRTY2hlbWEsIGNvbnRleHQpXG4gICAgICAgICAgICBjb25zdCBmb3JtID0gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZm9ybXMsIGl0ZW0pXG4gICAgICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgICBjb25zdCBwcm9jZXNzZWRJdGVtID0gcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgICAgICAgID8gY2xvbmVJdGVtKGNvbXBvbmVudFNjaGVtYSwgaXRlbSwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgICAgICAgICAgICAgIGZvcm0sXG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBpdGVtRGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEl0ZW1zIHdpdGhvdXQgZm9ybXMgc3RpbGwgZ2V0IGZ1bGx5IChidXQgc2hhbGxvd2x5KSBjbG9uZWQuXG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgb3V0IG9mIHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkIC8gdXNlZCBhdCBhbGw/XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHByb2Nlc3NCZWZvcmU/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YSA/IHByb2Nlc3NlZERhdGFbbmFtZV0gOiBkYXRhW25hbWVdXG4gICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgaGFzRm9ybVNjaGVtYShjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gbmVzdGVkIGZvcm0gaXRlbXMuXG4gICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgLy8gT3B0aW1pemF0aW9uOiBObyBuZWVkIHRvIGNvbGxlY3QgdmFsdWVzIGlmIHdlJ3JlIG5vdCBjbG9uaW5nIVxuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlLmZvckVhY2gocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NJdGVtKHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb2Nlc3NlZERhdGEpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJvY2Vzc0FmdGVyPy4oXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGNvbXBvbmVudERhdGFQYXRoLFxuICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKVxuICBmb3IgKGNvbnN0IHRhYiBvZiBnZXRUYWJTY2hlbWFzKHNjaGVtYSkpIHtcbiAgICBwcm9jZXNzQ29tcG9uZW50cyh0YWIuY29tcG9uZW50cylcbiAgfVxuICBmb3IgKGNvbnN0IHBhbmVsIG9mIGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpKSB7XG4gICAgcHJvY2Vzc0NvbXBvbmVudHMocGFuZWwuY29tcG9uZW50cylcbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzZWREYXRhIHx8IGRhdGFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWVkU2NoZW1hcyhzY2hlbWFzLCBkZWZhdWx0cykge1xuICBjb25zdCB0b09iamVjdCA9IChhcnJheSwgdG9TY2hlbWEpID0+IHtcbiAgICByZXR1cm4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgPyBhcnJheS5yZWR1Y2UoKG9iamVjdCwgdmFsdWUpID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0b1NjaGVtYSh2YWx1ZSlcbiAgICAgICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgICAgICBvYmplY3Rbc2NoZW1hLm5hbWVdID1cbiAgICAgICAgICAgICAgc2NoZW1hICYmIGRlZmF1bHRzXG4gICAgICAgICAgICAgICAgPyB7IC4uLmRlZmF1bHRzLCAuLi5zY2hlbWEgfVxuICAgICAgICAgICAgICAgIDogc2NoZW1hXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvYmplY3RcbiAgICAgICAgfSwge30pXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIHJldHVybiBpc0FycmF5KHNjaGVtYXMpXG4gICAgPyB0b09iamVjdChzY2hlbWFzLCB2YWx1ZSA9PlxuICAgICAgICBpc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIG5hbWU6IGNhbWVsaXplKHZhbHVlLCBmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgIClcbiAgICA6IGlzT2JqZWN0KHNjaGVtYXMpXG4gICAgICA/IHRvT2JqZWN0KFxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICAgICAgaXNPYmplY3QodmFsdWUpXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgIC4uLnZhbHVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IGlzU3RyaW5nKHZhbHVlKVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdmFsdWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgKVxuICAgICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdXR0b25TY2hlbWFzKGJ1dHRvbnMpIHtcbiAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyhcbiAgICBidXR0b25zLFxuICAgIHsgdHlwZTogJ2J1dHRvbicgfSAvLyBEZWZhdWx0c1xuICApXG59XG5cbmZ1bmN0aW9uIGdldFR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBpc09iamVjdChzY2hlbWFPclR5cGUpID8gc2NoZW1hT3JUeXBlLnR5cGUgOiBzY2hlbWFPclR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0VHlwZUNvbXBvbmVudChnZXRUeXBlKHNjaGVtYU9yVHlwZSksIHRydWUpID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiAoXG4gICAgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKT8uZ2V0U291cmNlVHlwZT8uKGdldFR5cGUoc2NoZW1hT3JUeXBlKSkgPz9cbiAgICBudWxsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsRW50cnkoc2NoZW1hLCBkYXRhUGF0aCA9IG51bGwsIHRhYkNvbXBvbmVudCA9IG51bGwpIHtcbiAgcmV0dXJuIHNjaGVtYVxuICAgID8ge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIG5hbWUsIGFwcGVuZCBpdCB0byB0aGUgZGF0YVBhdGguXG4gICAgICAgIC8vIFRoaXMgaXMgdXNlZCBlLmcuIGZvciAkZmlsdGVycyBwYW5lbHMuXG4gICAgICAgIGRhdGFQYXRoOlxuICAgICAgICAgIGRhdGFQYXRoICE9IG51bGwgJiYgc2NoZW1hLm5hbWVcbiAgICAgICAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNjaGVtYS5uYW1lKVxuICAgICAgICAgICAgOiBkYXRhUGF0aCxcbiAgICAgICAgdGFiQ29tcG9uZW50XG4gICAgICB9XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbEVudHJpZXMoXG4gIHBhbmVsU2NoZW1hcyxcbiAgZGF0YVBhdGgsXG4gIHRhYkNvbXBvbmVudCA9IG51bGwsXG4gIHBhbmVsRW50cmllcyA9IFtdXG4pIHtcbiAgaWYgKHBhbmVsU2NoZW1hcykge1xuICAgIGZvciAoY29uc3QgW2tleSwgc2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhwYW5lbFNjaGVtYXMpKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IGdldFBhbmVsRW50cnkoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGtleSksXG4gICAgICAgIHRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIHBhbmVsRW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxFbnRyaWVzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJTY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hPy50YWJzID8gT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicykgOiBbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hPy5wYW5lbHMgPyBPYmplY3QudmFsdWVzKHNjaGVtYS5wYW5lbHMpIDogW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbFBhbmVsRW50cmllcyhcbiAgYXBpLFxuICBzY2hlbWEsXG4gIGRhdGFQYXRoLFxuICBjb21wb25lbnQgPSBudWxsLFxuICB0YWJDb21wb25lbnQgPSBudWxsXG4pIHtcbiAgY29uc3QgcGFuZWxTY2hlbWEgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5nZXRQYW5lbFNjaGVtYT8uKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgZGF0YVBhdGgsXG4gICAgY29tcG9uZW50XG4gIClcbiAgY29uc3QgcGFuZWxFbnRyaWVzID0gcGFuZWxTY2hlbWFcbiAgICA/IFtnZXRQYW5lbEVudHJ5KHBhbmVsU2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KV1cbiAgICA6IFtdXG4gIC8vIEFsbG93IGVhY2ggY29tcG9uZW50IHRvIHByb3ZpZGUgaXRzIG93biBzZXQgb2YgcGFuZWxzLCBpblxuICAvLyBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBvbmUgKGUuZy4gZ2V0RmlsdGVyc1BhbmVsKCksICRmaWx0ZXJzKTpcbiAgZ2V0UGFuZWxFbnRyaWVzKHNjaGVtYT8ucGFuZWxzLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50LCBwYW5lbEVudHJpZXMpXG4gIHJldHVybiBwYW5lbEVudHJpZXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnb2JqZWN0J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMaXN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnbGlzdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pIHtcbiAgY29uc3QgaWQgPSBpdGVtW3NvdXJjZVNjaGVtYS5pZEtleSB8fCAnaWQnXVxuICByZXR1cm4gaWQgIT0gbnVsbCA/IFN0cmluZyhpZCkgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1VaWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIC8vIFRyeSB0byB1c2UgdGhlIGl0ZW0gaWQgYXMgdGhlIHVpZCwgZmFsbGluZyBiYWNrIG9uIGF1dG8tZ2VuZXJhdGVkIGlkcywgYnV0XG4gIC8vIGVpdGhlciB3YXksIHBhc3MgdGhyb3VnaCBgZ2V0VWlkKClgIHNvIHRoYXQgdGhlIGlkcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICAvLyBpdGVtIHRocm91Z2ggYSB3ZWFrIG1hcCwgYXMgdGhlIGlkcyBjYW4gYmUgZmlsdGVyZWQgb3V0IGluIGBwcm9jZXNzRGF0YSgpYFxuICAvLyB3aGlsZSB0aGUgY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgdWlkcyBhcyBrZXkgYXJlIHN0aWxsIHZpc2libGUuXG4gIHJldHVybiBnZXRVaWQoaXRlbSwgaXRlbSA9PiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSlcbn1cbiIsImltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgcGlja0J5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Jlc291cmNlKHNjaGVtYSkge1xuICByZXR1cm4gISFnZXRSZXNvdXJjZShzY2hlbWEucmVzb3VyY2UpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNvdXJjZShyZXNvdXJjZSwgZGVmYXVsdHMgPSB7fSkge1xuICBjb25zdCB7IHBhcmVudCwgLi4uZGVmcyB9ID0gZGVmYXVsdHNcbiAgcmVzb3VyY2UgPSBpc09iamVjdChyZXNvdXJjZSlcbiAgICA/IHsgLi4uZGVmcywgLi4ucmVzb3VyY2UgfVxuICAgIDogaXNTdHJpbmcocmVzb3VyY2UpXG4gICAgICA/IHsgLi4uZGVmcywgcGF0aDogcmVzb3VyY2UgfVxuICAgICAgOiBudWxsXG4gIC8vIE9ubHkgc2V0IHBhcmVudCBpZiBwYXRoIGRvZXNuJ3Qgc3RhcnQgd2l0aCAnLycsIHNvIHJlbGF0aXZlIFVSTHMgYXJlXG4gIC8vIGRlYWx0IHdpdGggY29ycmVjdGx5LlxuICBpZiAoXG4gICAgcmVzb3VyY2UgJiZcbiAgICBwYXJlbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgIHJlc291cmNlLnBhcmVudCA9PT0gdW5kZWZpbmVkICYmXG4gICAgIXJlc291cmNlLnBhdGg/LnN0YXJ0c1dpdGgoJy8nKVxuICApIHtcbiAgICByZXNvdXJjZS5wYXJlbnQgPSBwYXJlbnRcbiAgICBpZiAoIXJlc291cmNlLnBhdGgpIHtcbiAgICAgIHJlc291cmNlLnBhdGggPSAnLidcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc291cmNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW1iZXJSZXNvdXJjZShpZCwgcmVzb3VyY2UpIHtcbiAgcmV0dXJuIGlkICE9IG51bGwgJiYgcmVzb3VyY2U/LnR5cGUgPT09ICdjb2xsZWN0aW9uJ1xuICAgID8ge1xuICAgICAgICB0eXBlOiAnbWVtYmVyJyxcbiAgICAgICAgLi4ucGlja0J5KFxuICAgICAgICAgIHJlc291cmNlLFxuICAgICAgICAgICh2YWx1ZSwga2V5KSA9PiBbJ21ldGhvZCcsICdwYXRoJywgJ3BhcmVudCddLmluY2x1ZGVzKGtleSlcbiAgICAgICAgKSxcbiAgICAgICAgaWQ6IGAke2lkfWBcbiAgICAgIH1cbiAgICA6IG51bGxcbn1cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNGdW5jdGlvbixcbiAgZXF1YWxzLFxuICBsYWJlbGl6ZSxcbiAgaHlwaGVuYXRlLFxuICBmb3JtYXRcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBhcHBTdGF0ZSBmcm9tICcuLi9hcHBTdGF0ZS5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBFbWl0dGVyTWl4aW4gZnJvbSAnLi9FbWl0dGVyTWl4aW4uanMnXG5pbXBvcnQge1xuICBmbGF0dGVuVmlld3MsXG4gIGdldFNjaGVtYVZhbHVlLFxuICBzaG91bGRSZW5kZXJTY2hlbWFcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBjb21wdXRlZCwgcmVhY3RpdmUgfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0VtaXR0ZXJNaXhpbl0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJ2FwaScsXG4gICAgJyR2ZXJicycsXG4gICAgJyR2aWV3cycsXG4gICAgJyRpc1BvcHVsYXRlZCcsXG4gICAgJyRwYXJlbnRDb21wb25lbnQnLFxuICAgICckc2NoZW1hQ29tcG9uZW50JyxcbiAgICAnJHJvdXRlQ29tcG9uZW50JyxcbiAgICAnJGRhdGFDb21wb25lbnQnLFxuICAgICckc291cmNlQ29tcG9uZW50JyxcbiAgICAnJHJlc291cmNlQ29tcG9uZW50JyxcbiAgICAnJGRpYWxvZ0NvbXBvbmVudCcsXG4gICAgJyRwYW5lbENvbXBvbmVudCcsXG4gICAgJyR0YWJDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICBjb25zdCBzZWxmID0gKCkgPT4gdGhpc1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVzRGF0YVxuICAgICAgPyB7XG4gICAgICAgICAgJHBhcmVudENvbXBvbmVudDogc2VsZixcbiAgICAgICAgICAkZGF0YUNvbXBvbmVudDogc2VsZlxuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICAkcGFyZW50Q29tcG9uZW50OiBzZWxmXG4gICAgICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhcHBTdGF0ZSxcbiAgICAgIGlzTW91bnRlZDogZmFsc2UsXG4gICAgICBvdmVycmlkZXM6IG51bGwgLy8gU2VlIGFjY2Vzc29yLmpzXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgLy8gTk9URTogVGhpcyBpcyBvdmVycmlkZGVuIGluIFJlc291cmNlTWl4aW4sIHVzZWQgYnkgbGlzdHMuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YT8uc2NoZW1hXG4gICAgfSxcblxuICAgIHVzZXIoKSB7XG4gICAgICByZXR1cm4gYXBwU3RhdGUudXNlclxuICAgIH0sXG5cbiAgICAvLyAkdmVyYnMsICR2ZXJicyBhbmQgJGlzUG9wdWxhdGVkIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmVcbiAgICAvLyByZWFjdGl2ZW5lc3MgYWNyb3NzIHByb3ZpZGUvaW5qZWN0LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgdmVyYnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdmVyYnMoKVxuICAgIH0sXG5cbiAgICB2aWV3cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2aWV3cygpXG4gICAgfSxcblxuICAgIGZsYXR0ZW5lZFZpZXdzKCkge1xuICAgICAgcmV0dXJuIGZsYXR0ZW5WaWV3cyh0aGlzLnZpZXdzKVxuICAgIH0sXG5cbiAgICBpc1BvcHVsYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRpc1BvcHVsYXRlZCgpXG4gICAgfSxcblxuICAgIGxvY2FsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwaS5sb2NhbGVcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IGZhbHNlIH0pXG4gICAgfSxcblxuICAgIHJvb3RDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm9vdC4kcmVmcy5yb290XG4gICAgfSxcblxuICAgIC8vIFVzZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGFzIGxpbmtzIHRvIGluamVjdHMsIHNvIERpdG9TY2hlbWEgY2FuXG4gICAgLy8gb3ZlcnJpZGUgdGhlIHByb3BlcnR5IGFuZCByZXR1cm4gYHRoaXNgIGluc3RlYWQgb2YgdGhlIHBhcmVudC5cbiAgICBwYXJlbnRDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50Q29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHNjaGVtYUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgZm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzRm9ybSA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgdmlld0NvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzVmlldyA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzLCBpbmNsdWRpbmdcbiAgICAvLyB0aGlzIGN1cnJlbnQgY29tcG9uZW50LCB0aGF0IGlzIGxpbmtlZCB0byBhIHJlc291cmNlIChhbmQgdGh1cyBsb2FkcyBpdHNcbiAgICAvLyBvd24gZGF0YSBhbmQgZG9lc24ndCBob2xkIG5lc3RlZCBkYXRhKS5cbiAgICBkYXRhQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhID8gdGhpcyA6IHRoaXMuJGRhdGFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc291cmNlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kZGlhbG9nQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFuZWxDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdGFiQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50Py5wYXJlbnRDb21wb25lbnQuc2NoZW1hQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudFJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVDb21wb25lbnQ/LnBhcmVudENvbXBvbmVudC5yb3V0ZUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYXJlbnRGb3JtQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbXBvbmVudD8ucGFyZW50Q29tcG9uZW50LmZvcm1Db21wb25lbnRcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZGF0YSBvZiB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzXG4gICAgLy8gdGhhdCBsb2FkcyBpdHMgb3duIGRhdGEgZnJvbSBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZS5cbiAgICByb290RGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFDb21wb25lbnQ/LmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLmlzTW91bnRlZCA9IHRydWVcbiAgfSxcblxuICBiZWZvcmVDcmVhdGUoKSB7XG4gICAgY29uc3QgdWlkID0gbmV4dFVpZCsrXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICckdWlkJywgeyBnZXQ6ICgpID0+IHVpZCB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBsYWJlbGl6ZSxcblxuICAgIC8vIFRoZSBzdGF0ZSBvZiBjb21wb25lbnRzIGlzIG9ubHkgYXZhaWxhYmxlIGR1cmluZyB0aGUgbGlmZS1jeWNsZSBvZiBhXG4gICAgLy8gY29tcG9uZW50LiBTb21lIGluZm9ybWF0aW9uIHdlIG5lZWQgYXZhaWxhYmxlIGxvbmdlciB0aGFuIHRoYXQsIGUuZy5cbiAgICAvLyBgcXVlcnlgICYgYHRvdGFsYCBvbiBUeXBlTGlzdCwgc28gdGhhdCB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlcyBiYWNrIGZyb21cbiAgICAvLyBlZGl0aW5nIGFuIGl0ZW0gaW4gdGhlIGxpc3QsIHRoZSBzdGF0ZSBvZiB0aGUgbGlzdCBpcyBzdGlsbCB0aGUgc2FtZS5cbiAgICAvLyBXZSBjYW4ndCBzdG9yZSB0aGlzIGluIGBkYXRhYCwgYXMgdGhpcyBpcyBhbHJlYWR5IHRoZSBwdXJlIGRhdGEgZnJvbSB0aGVcbiAgICAvLyBBUEkgc2VydmVyLiBUaGF0J3Mgd2hhdCB0aGUgYHN0b3JlYCBpcyBmb3I6IE1lbW9yeSB0aGF0J3MgYXZhaWxhYmxlIGFzXG4gICAgLy8gbG9uZyBhcyB0aGUgY3VycmVudCBlZGl0aW5nIHBhdGggaXMgc3RpbGwgdmFsaWQuIEZvciB0eXBlIGNvbXBvbmVudHMsXG4gICAgLy8gdGhpcyBtZW1vcnkgaXMgcHJvdmlkZWQgYnkgdGhlIHBhcmVudCwgc2VlIFJvdXRlTWl4aW4gYW5kIERpdG9QYW5lLlxuICAgIGdldFN0b3JlKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZShrZXksIHZhbHVlKSB7XG4gICAgICB0aGlzLnN0b3JlW2tleV0gPSB2YWx1ZVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIHJlbW92ZVN0b3JlKGtleSkge1xuICAgICAgZGVsZXRlIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBnZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlLiRrZXlzQnlJbmRleD8uW2luZGV4XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgsIGtleSkge1xuICAgICAgdGhpcy5zdG9yZS4ka2V5c0J5SW5kZXggPz89IHt9XG4gICAgICB0aGlzLnN0b3JlLiRrZXlzQnlJbmRleFtpbmRleF0gPSBrZXlcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRTdG9yZShrZXksIGluZGV4KSB7XG4gICAgICBsZXQgc3RvcmUgPSB0aGlzLmdldFN0b3JlKGtleSlcbiAgICAgIGlmICghc3RvcmUgJiYgaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAvLyBXaGVuIHN0b3JpbmcsIHRlbXBvcmFyeSBpZHMgY2hhbmdlIHRvIHBlcm1hbmVudCBvbmVzIGFuZCB0aHVzIHRoZSBrZXlcbiAgICAgICAgLy8gY2FuIGNoYW5nZS4gVG8gc3RpbGwgZmluZCB0aGUgc3RvcmUsIHdlIHJlZmVyZW5jZSBieSBpbmRleCBhcyB3ZWxsLFxuICAgICAgICAvLyB0byBiZSBhYmxlIHRvIGZpbmQgdGhlIHN0b3JlIGFnYWluIGFmdGVyIHRoZSBpdGVtIHdhcyBzYXZlZC5cbiAgICAgICAgY29uc3Qgb2xkS2V5ID0gdGhpcy5nZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgpXG4gICAgICAgIHN0b3JlID0gdGhpcy5nZXRTdG9yZShvbGRLZXkpXG4gICAgICAgIGlmIChzdG9yZSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RvcmUoa2V5LCBzdG9yZSlcbiAgICAgICAgICB0aGlzLnJlbW92ZVN0b3JlKG9sZEtleSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFzdG9yZSkge1xuICAgICAgICBzdG9yZSA9IHRoaXMuc2V0U3RvcmUoa2V5LCByZWFjdGl2ZSh7fSkpXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgsIGtleSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0b3JlXG4gICAgfSxcblxuICAgIHJlbW92ZUNoaWxkU3RvcmUoa2V5LCBpbmRleCkge1xuICAgICAgLy8gR0V0IHRoZSBjaGlsZC1zdG9yZSBmaXJzdCwgc28gdGhhdCBpbmRpY2VzIGNhbiBiZSB0cmFuc2ZlcnJlZCBvdmVyXG4gICAgICAvLyB0ZW1wb3JhcnkgaWQgY2hhbmdlcyBkdXJpbmcgcGVyc2lzdGVuY2UuXG4gICAgICB0aGlzLmdldENoaWxkU3RvcmUoa2V5LCBpbmRleClcbiAgICAgIHRoaXMucmVtb3ZlU3RvcmUoa2V5KVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFWYWx1ZShcbiAgICAgIGtleU9yRGF0YVBhdGgsXG4gICAgICB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIGRlZmF1bHQ6IGRlZixcbiAgICAgICAgc2NoZW1hID0gdGhpcy5zY2hlbWEsXG4gICAgICAgIGNvbnRleHQgPSB0aGlzLmNvbnRleHQsXG4gICAgICAgIGNhbGxiYWNrID0gdHJ1ZVxuICAgICAgfSA9IHt9XG4gICAgKSB7XG4gICAgICByZXR1cm4gZ2V0U2NoZW1hVmFsdWUoa2V5T3JEYXRhUGF0aCwge1xuICAgICAgICB0eXBlLFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgICBkZWZhdWx0OiBpc0Z1bmN0aW9uKGRlZikgPyAoKSA9PiBkZWYuY2FsbCh0aGlzKSA6IGRlZlxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ2V0TGFiZWwoc2NoZW1hLCBuYW1lKSB7XG4gICAgICByZXR1cm4gc2NoZW1hXG4gICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgnbGFiZWwnLCB7IHR5cGU6IFN0cmluZywgc2NoZW1hIH0pIHx8XG4gICAgICAgICAgbGFiZWxpemUobmFtZSB8fCBzY2hlbWEubmFtZSlcbiAgICAgICAgOiBsYWJlbGl6ZShuYW1lKSB8fCAnJ1xuICAgIH0sXG5cbiAgICBnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsYXNzOiBgZGl0by1idXR0b24tJHt2ZXJifWAsXG4gICAgICAgIHRpdGxlOiBsYWJlbGl6ZSh2ZXJiKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgKkxpbmsoKSB0byAqUm91dGUoKS5cbiAgICBnZXRRdWVyeUxpbmsocXVlcnkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICAvLyBQcmVzZXJ2ZSBoYXNoIGZvciB0YWJzOlxuICAgICAgICBoYXNoOiB0aGlzLiRyb3V0ZS5oYXNoXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEgPSBudWxsKSB7XG4gICAgICByZXR1cm4gc2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBzaG91bGRTaG93U2NoZW1hKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNjaGVtYVZhbHVlKCd2aXNpYmxlJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNob3VsZERpc2FibGVTY2hlbWEoc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2Rpc2FibGVkJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgc2NoZW1hXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpIHtcbiAgICAgIHJlc291cmNlID0gZ2V0UmVzb3VyY2UocmVzb3VyY2UpXG4gICAgICAvLyBSZXNvdXJjZXMgd2l0aG91dCBhIHBhcmVudCBpbmhlcml0IHRoZSBvbmUgZnJvbSBgZGF0YUNvbXBvbmVudGBcbiAgICAgIC8vIGF1dG9tYXRpY2FsbHkuXG4gICAgICBpZiAocmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzb3VyY2UucGFyZW50ID0gdGhpcy5kYXRhQ29tcG9uZW50Py5yZXNvdXJjZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXBpLnJlc291cmNlcy5hbnkoZ2V0UmVzb3VyY2UocmVzb3VyY2UpKVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVVybChyZXNvdXJjZSkge1xuICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpXG4gICAgICByZXR1cm4gdXJsID8gdGhpcy5hcGkuZ2V0QXBpVXJsKHsgdXJsLCBxdWVyeTogcmVzb3VyY2UucXVlcnkgfSkgOiBudWxsXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHJlc291cmNlLFxuICAgICAgcXVlcnksXG4gICAgICBkYXRhLFxuICAgICAgc2lnbmFsLFxuICAgICAgaW50ZXJuYWxcbiAgICB9KSB7XG4gICAgICB1cmwgfHw9IHRoaXMuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gICAgICBtZXRob2QgfHw9IHJlc291cmNlPy5tZXRob2RcbiAgICAgIGNvbnN0IGNoZWNrVXNlciA9ICFpbnRlcm5hbCAmJiB0aGlzLmFwaS5pc0FwaVVybCh1cmwpXG4gICAgICBpZiAoY2hlY2tVc2VyKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm9vdENvbXBvbmVudC5lbnN1cmVVc2VyKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5hcGkucmVxdWVzdCh7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgdXJsLFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgc2lnbmFsXG4gICAgICB9KVxuICAgICAgLy8gRGV0ZWN0IGNoYW5nZSBvZiB0aGUgb3duIHVzZXIsIGFuZCBmZXRjaCBpdCBhZ2FpbiBpZiBpdCB3YXMgY2hhbmdlZC5cbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tVc2VyICYmXG4gICAgICAgIG1ldGhvZCA9PT0gJ3BhdGNoJyAmJlxuICAgICAgICBlcXVhbHMocmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlKHRoaXMudXNlci5pZCwgdGhpcy5hcGkudXNlcnMpKVxuICAgICAgKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm9vdENvbXBvbmVudC5mZXRjaFVzZXIoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfSxcblxuICAgIHNob3dEaWFsb2coeyBjb21wb25lbnRzLCBidXR0b25zLCBkYXRhLCBzZXR0aW5ncyB9KSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290Q29tcG9uZW50LnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICBidXR0b25zLFxuICAgICAgICBkYXRhLFxuICAgICAgICBzZXR0aW5nc1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgcmVxdWVzdCh7IGNhY2hlLCAuLi5vcHRpb25zIH0pIHtcbiAgICAgIC8vIEFsbG93IGNhY2hpbmcgb2YgbG9hZGVkIGRhdGEgb24gdHdvIGxldmVsczpcbiAgICAgIC8vIC0gJ2dsb2JhbCc6IGNhY2hlIGdsb2JhbGx5LCBmb3IgdGhlIGVudGlyZSBhZG1pbiBzZXNzaW9uXG4gICAgICAvLyAtICdsb2NhbCc6IGNhY2hlIGxvY2FsbHkgd2l0aGluIHRoZSBjbG9zZXN0IHJvdXRlIGNvbXBvbmVudCB0aGF0IGlzXG4gICAgICAvLyAgICBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZSBhbmQgbG9hZHMgaXRzIG93biBkYXRhLlxuICAgICAgY29uc3QgY2FjaGVQYXJlbnQgPSAoXG4gICAgICAgIGNhY2hlICYmXG4gICAgICAgIHtcbiAgICAgICAgICBnbG9iYWw6IHRoaXMuYXBwU3RhdGUsXG4gICAgICAgICAgbG9jYWw6IHRoaXMuZGF0YUNvbXBvbmVudFxuICAgICAgICB9W2NhY2hlXVxuICAgICAgKVxuICAgICAgY29uc3QgbG9hZENhY2hlID0gY2FjaGVQYXJlbnQ/LmxvYWRDYWNoZVxuICAgICAgLy8gQnVpbGQgYSBjYWNoZSBrZXkgZnJvbSB0aGUgY29uZmlnOlxuICAgICAgY29uc3QgY2FjaGVLZXkgPSAoXG4gICAgICAgIGxvYWRDYWNoZSAmJlxuICAgICAgICBgJHtcbiAgICAgICAgICBvcHRpb25zLm1ldGhvZCB8fCAnZ2V0J1xuICAgICAgICB9ICR7XG4gICAgICAgICAgb3B0aW9ucy51cmxcbiAgICAgICAgfSAke1xuICAgICAgICAgIC8vIFRPRE86IGByZXF1ZXN0LnBhcmFtc2Agd2FzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGBxdWVyeWAgb25cbiAgICAgICAgICAvLyAyMDIyLTExLTAxLCByZW1vdmUgb25jZSBub3QgaW4gdXNlIGFueXdoZXJlIGFueSBtb3JlLlxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucXVlcnkgfHwgb3B0aW9ucy5wYXJhbXMgfHwgJycpXG4gICAgICAgIH0gJHtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcHRpb25zLmRhdGEgfHwgJycpXG4gICAgICAgIH1gXG4gICAgICApXG4gICAgICBpZiAobG9hZENhY2hlICYmIChjYWNoZUtleSBpbiBsb2FkQ2FjaGUpKSB7XG4gICAgICAgIHJldHVybiBsb2FkQ2FjaGVbY2FjaGVLZXldXG4gICAgICB9XG4gICAgICAvLyBOT1RFOiBObyBhd2FpdCBoZXJlLCByZXMgaXMgYSBwcm9taXNlIHRoYXQgd2UgY2FuIGVhc2lseSBjYWNoZS5cbiAgICAgIC8vIFRoYXQncyBmaW5lIGJlY2F1c2UgcHJvbWlzZXMgY2FuIGJlIHJlc29sdmVkIG92ZXIgYW5kIG92ZXIgYWdhaW4uXG4gICAgICBjb25zdCByZXMgPSB0aGlzLnNlbmRSZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEpXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgLy8gQ29udmVydCBheGlvcyBlcnJvcnMgdG8gbm9ybWFsIGVycm9yc1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBlcnJvci5yZXNwb25zZT8uZGF0YVxuICAgICAgICAgIHRocm93IGRhdGFcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoZGF0YS5tZXNzYWdlKSwgZGF0YSlcbiAgICAgICAgICAgIDogZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIGlmIChsb2FkQ2FjaGUpIHtcbiAgICAgICAgbG9hZENhY2hlW2NhY2hlS2V5XSA9IHJlc1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0sXG5cbiAgICBmb3JtYXQodmFsdWUsIHtcbiAgICAgIGxvY2FsZSA9IHRoaXMuYXBpLmxvY2FsZSxcbiAgICAgIGRlZmF1bHRzID0gdGhpcy5hcGkuZm9ybWF0cyxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBmb3JtYXQodmFsdWUsIHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGUobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZXIucHVzaChsb2NhdGlvbilcbiAgICB9LFxuXG4gICAgZG93bmxvYWQob3B0aW9ucyA9IHt9KSB7XG4gICAgICBpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcbiAgICAgICAgb3B0aW9ucyA9IHsgdXJsOiBvcHRpb25zIH1cbiAgICAgIH1cbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQ5OTE3MDY2LzExNjM3MDhcbiAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcbiAgICAgIGEuaHJlZiA9IG9wdGlvbnMudXJsPy5zdGFydHNXaXRoKCdibG9iOicpXG4gICAgICAgID8gb3B0aW9ucy51cmxcbiAgICAgICAgOiB0aGlzLmFwaS5nZXRBcGlVcmwob3B0aW9ucylcbiAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLmZpbGVuYW1lID8/IG51bGxcbiAgICAgIGNvbnN0IHsgYm9keSB9ID0gZG9jdW1lbnRcbiAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSlcbiAgICAgIGEuY2xpY2soKVxuICAgICAgYm9keS5yZW1vdmVDaGlsZChhKVxuICAgIH0sXG5cbiAgICBub3RpZnkob3B0aW9ucykge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgIH0sXG5cbiAgICBjbG9zZU5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnQuY2xvc2VOb3RpZmljYXRpb25zKClcbiAgICB9LFxuXG4gICAgc2V0dXBTY2hlbWFGaWVsZHMoKSB7XG4gICAgICB0aGlzLnNldHVwTWV0aG9kcygpXG4gICAgICB0aGlzLnNldHVwQ29tcHV0ZWQoKVxuICAgICAgdGhpcy5zZXR1cEV2ZW50cygpXG4gICAgfSxcblxuICAgIHNldHVwTWV0aG9kcygpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLm1ldGhvZHMgfHwge30pKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICAgIHRoaXNba2V5XSA9IHZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBtZXRob2QgZGVmaW5pdGlvbjogJHtrZXl9OiAke3ZhbHVlfWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBDb21wdXRlZCgpIHtcbiAgICAgIGNvbnN0IGdldENvbXB1dGVkQWNjZXNzb3IgPSAoeyBnZXQsIHNldCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGdldHRlciA9IGNvbXB1dGVkKCgpID0+IGdldC5jYWxsKHRoaXMpKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGdldDogKCkgPT4gZ2V0dGVyLnZhbHVlLFxuICAgICAgICAgIHNldDogc2V0ID8gdmFsdWUgPT4gc2V0LmNhbGwodGhpcywgdmFsdWUpIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBba2V5LCBpdGVtXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5jb21wdXRlZCB8fCB7fSkpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzb3IgPSBpc0Z1bmN0aW9uKGl0ZW0pXG4gICAgICAgICAgPyBnZXRDb21wdXRlZEFjY2Vzc29yKHsgZ2V0OiBpdGVtIH0pXG4gICAgICAgICAgOiBpc09iamVjdChpdGVtKSAmJiBpc0Z1bmN0aW9uKGl0ZW0uZ2V0KVxuICAgICAgICAgICAgPyBnZXRDb21wdXRlZEFjY2Vzc29yKGl0ZW0pXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgaWYgKGFjY2Vzc29yKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwgYWNjZXNzb3IpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBJbnZhbGlkIGNvbXB1dGVkIHByb3BlcnR5IGRlZmluaXRpb246ICR7a2V5fTogJHtpdGVtfWBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBFdmVudHMoKSB7XG4gICAgICBjb25zdCB7IHdhdGNoLCBldmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAod2F0Y2gpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBpc0Z1bmN0aW9uKHdhdGNoKSA/IHdhdGNoLmNhbGwodGhpcykgOiB3YXRjaFxuICAgICAgICBpZiAoaXNPYmplY3QoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgLy8gSW5zdGFsbCB0aGUgd2F0Y2ggaGFuZGxlcnMgaW4gdGhlIG5leHQgdGljaywgc28gYWxsIGNvbXBvbmVudHMgYXJlXG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZWQgYW5kIHdlIGNhbiBjaGVjayBhZ2FpbnN0IHRoZWlyIG5hbWVzLlxuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGhhbmRsZXJzKSkge1xuICAgICAgICAgICAgICAvLyBFeHBhbmQgcHJvcGVydHkgbmFtZXMgdG8gJ2RhdGEucHJvcGVydHknOlxuICAgICAgICAgICAgICBjb25zdCBleHByID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlOYW1lKGtleSlcbiAgICAgICAgICAgICAgICA/IGBkYXRhLiR7a2V5fWBcbiAgICAgICAgICAgICAgICA6IGtleVxuICAgICAgICAgICAgICB0aGlzLiR3YXRjaChleHByLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFkZEV2ZW50ID0gKGtleSwgZXZlbnQsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgIHRoaXMub24oaHlwaGVuYXRlKGV2ZW50KSwgY2FsbGJhY2spXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBldmVudCBkZWZpbml0aW9uOiAke2tleX06ICR7Y2FsbGJhY2t9YClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50cykpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFsc28gc2NhbiBzY2hlbWEgZm9yIGBvbltBLVpdYC1zdHlsZSBjYWxsYmFja3MgYW5kIGFkZCB0aGVtXG4gICAgICAvLyBUT0RPOiBEZXByZWNhdGUgb25lIGZvcm1hdCBvciB0aGUgb3RoZXIsIGluIGZhdm91ciBvZiBvbmx5IG9uZSB3YXkgb2ZcbiAgICAgIC8vIGRvaW5nIHRoaW5ncy4gRGVjaWRlIHdoaWNoIG9uZSB0byByZW1vdmUuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYSkpIHtcbiAgICAgICAgaWYgKC9eb25bQS1aXS8udGVzdChrZXkpKSB7XG4gICAgICAgICAgYWRkRXZlbnQoa2V5LCBrZXkuc2xpY2UoMiksIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGVtaXRFdmVudChldmVudCwge1xuICAgICAgY29udGV4dCA9IG51bGwsXG4gICAgICBwYXJlbnQgPSBudWxsXG4gICAgfSA9IHt9KSB7XG4gICAgICBjb25zdCBoYXNMaXN0ZW5lcnMgPSB0aGlzLmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGNvbnN0IHBhcmVudEhhc0xpc3RlbmVycyA9IHBhcmVudD8uaGFzTGlzdGVuZXJzKGV2ZW50KVxuICAgICAgaWYgKGhhc0xpc3RlbmVycyB8fCBwYXJlbnRIYXNMaXN0ZW5lcnMpIHtcbiAgICAgICAgLy8gVGhlIGVmZmVjdHMgb2Ygc29tZSBldmVudHMgbmVlZCBzb21lIHRpbWUgdG8gcHJvcGFnYXRlIHRocm91Z2ggVnVlLlxuICAgICAgICAvLyBVc2UgJG5leHRUaWNrKCkgdG8gbWFrZSBzdXJlIG91ciBoYW5kbGVycyBzZWUgdGhlc2UgY2hhbmdlcy5cbiAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGBwcm9jZXNzZWRJdGVtYCBpcyBvbmx5IGNvcnJlY3QgYWZ0ZXIgY29tcG9uZW50cyB0aGF0XG4gICAgICAgIC8vIGFyZSBuZXdseSByZW5kZXJlZCBkdWUgdG8gZGF0YSBjaGFuZ2VzIGhhdmUgcmVnaXN0ZXJlZCB0aGVtc2VsdmVzLlxuICAgICAgICBpZiAoWydsb2FkJywgJ2NoYW5nZSddLmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdldENvbnRleHQgPSAoKSA9PiAoY29udGV4dCA9IERpdG9Db250ZXh0LmdldCh0aGlzLCBjb250ZXh0KSlcbiAgICAgICAgY29uc3QgcmVzID0gaGFzTGlzdGVuZXJzXG4gICAgICAgICAgPyBhd2FpdCB0aGlzLmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAvLyBEb24ndCBidWJibGUgdG8gcGFyZW50IGlmIGhhbmRsZWQgZXZlbnQgcmV0dXJuZWQgYGZhbHNlYFxuICAgICAgICBpZiAocGFyZW50SGFzTGlzdGVuZXJzICYmIHJlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBwYXJlbnQuZW1pdChldmVudCwgZ2V0Q29udGV4dCgpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZW1pdFNjaGVtYUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudC5lbWl0RXZlbnQoZXZlbnQsIHBhcmFtcylcbiAgICB9XG4gIH1cbn1cblxubGV0IG5leHRVaWQgPSAwXG4iLCIvLyBBIG1pbmktcmVwbGljYXRpb24gb2YgdnVlJ3MgaW50ZXJuYWwgYHJlc29sdmVNZXJnZWRPcHRpb25zKClgIGJ1dCBvbmx5XG4vLyBoYW5kbGluZyBvdXIgb3duIGFkZGVkIG9wdGlvbnMgcHJvcGVydGllcyBhbmQgbWVyZ2luZyB0aGVtIGVhcmx5IGluc3RlYWRcbi8vIG9mIGxhemlseS5cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVNZXJnZWRPcHRpb25zKG9wdGlvbnMpIHtcbiAgY29uc3QgeyBtaXhpbnMgfSA9IG9wdGlvbnNcbiAgcmV0dXJuIG1peGlucyB8fCBvcHRpb25zLmV4dGVuZHNcbiAgICA/IG1lcmdlT3B0aW9ucyhcbiAgICAgICAgeyAuLi5vcHRpb25zIH0sXG4gICAgICAgIG9wdGlvbnNcbiAgICAgIClcbiAgICA6IG9wdGlvbnNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlT3B0aW9ucyh0bywgZnJvbSkge1xuICBpZiAoZnJvbS5leHRlbmRzKSB7XG4gICAgbWVyZ2VPcHRpb25zKHRvLCBmcm9tLmV4dGVuZHMpXG4gIH1cbiAgaWYgKGZyb20ubWl4aW5zKSB7XG4gICAgZm9yIChjb25zdCBtaXhpbiBvZiBmcm9tLm1peGlucykge1xuICAgICAgbWVyZ2VPcHRpb25zKHRvLCBtaXhpbilcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBrZXkgb2YgZGl0b09wdGlvbktleXMpIHtcbiAgICBpZiAoa2V5IGluIGZyb20pIHtcbiAgICAgIHRvW2tleV0gPSBmcm9tW2tleV1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRvXG59XG5cbmNvbnN0IGRpdG9PcHRpb25LZXlzID0gW1xuICAnZGVmYXVsdFZhbHVlJyxcbiAgJ2RlZmF1bHROZXN0ZWQnLFxuICAnZGVmYXVsdFZpc2libGUnLFxuICAnZ2VuZXJhdGVMYWJlbCcsXG4gICdleGNsdWRlVmFsdWUnLFxuICAnaWdub3JlTWlzc2luZ1ZhbHVlJyxcbiAgJ29taXRTcGFjaW5nJyxcbiAgJ3Byb2Nlc3NWYWx1ZScsXG4gICdwcm9jZXNzU2NoZW1hJyxcbiAgJ2dldFBhbmVsU2NoZW1hJyxcbiAgJ2dldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZycsXG4gIC8vIFZ1ZSAzIC8gVnVlLXJvdXRlciA0IGZvcmdldHMgdGhlc2UuXG4gIC8vIFRPRE86IENyZWF0ZSBidWctcmVwb3J0P1xuICAnYmVmb3JlUm91dGVVcGRhdGUnLFxuICAnYmVmb3JlUm91dGVMZWF2ZSdcbl1cbiIsImltcG9ydCBEaXRvTWl4aW4gZnJvbSAnLi9taXhpbnMvRGl0b01peGluLmpzJ1xuaW1wb3J0IHsgZ2V0VHlwZUNvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgcmVzb2x2ZU1lcmdlZE9wdGlvbnMgfSBmcm9tICcuL3V0aWxzL29wdGlvbnMuanMnXG5pbXBvcnQgeyBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgY29tcG9uZW50cyA9IHt9XG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RpdG9NaXhpbl0sXG4gIC8vIE1ha2Ugc3VyZSB0aGF0IHJlZ2lzdGVyZWQgY29tcG9uZW50cyBhcmUgcHJlc2VudCBpbiBhbGwgRGl0b0NvbXBvbmVudC5cbiAgY29tcG9uZW50cyxcblxuICBjb21wb25lbnQobmFtZSwgZGVmaW5pdGlvbikge1xuICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChkZWZpbml0aW9uKSkge1xuICAgICAgICBkZWZpbml0aW9uID0gcmVzb2x2ZU1lcmdlZE9wdGlvbnMoe1xuICAgICAgICAgIGV4dGVuZHM6IHRoaXMsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICAuLi5kZWZpbml0aW9uXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBjb21wb25lbnRzW25hbWVdID0gZGVmaW5pdGlvblxuICAgIH1cbiAgICBpZiAoIShuYW1lIGluIGNvbXBvbmVudHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCBcIiR7bmFtZX1cIiBub3QgcmVnaXN0ZXJlZGApXG4gICAgfVxuICAgIHJldHVybiBjb21wb25lbnRzW25hbWVdXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFR5cGVDb21wb25lbnRcbiAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGRlc2NyaWJlRGF0ZShkYXRlKSB7XG4gIHJldHVybiB7XG4gICAgeWVhcjogZGF0ZT8uZ2V0RnVsbFllYXIoKSA/PyAwLFxuICAgIG1vbnRoOiBkYXRlPy5nZXRNb250aCgpID8/IDAsXG4gICAgZGF5OiBkYXRlPy5nZXREYXRlKCkgPz8gMCxcbiAgICBob3VyOiBkYXRlPy5nZXRIb3VycygpID8/IDAsXG4gICAgbWludXRlOiBkYXRlPy5nZXRNaW51dGVzKCkgPz8gMCxcbiAgICBzZWNvbmQ6IGRhdGU/LmdldFNlY29uZHMoKSA/PyAwLFxuICAgIG1pbGxpc2Vjb25kOiBkYXRlPy5nZXRNaWxsaXNlY29uZHMoKSA/PyAwXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsdGVyRGF0ZShkYXRlLCBvdmVycmlkZXMgPSB7fSkge1xuICByZXR1cm4gbmV3IERhdGUoLi4uT2JqZWN0LnZhbHVlcyh7IC4uLmRlc2NyaWJlRGF0ZShkYXRlKSwgLi4ub3ZlcnJpZGVzIH0pKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHN0cmluZywge1xuICBsb2NhbGUgPSAnZW4tVVMnLFxuICBkYXRlID0gdHJ1ZSxcbiAgdGltZSA9IHRydWVcbn0gPSB7fSkge1xuICBjb25zdCB0aW1lRGVmYXVsdCA9IHRpbWUgPyBudWxsIDogMFxuICBsZXQgW1xuICAgIGRheSxcbiAgICBzZXAxLFxuICAgIG1vbnRoLFxuICAgIHNlcDIsXG4gICAgeWVhcixcbiAgICAsXG4gICAgaG91ciA9IHRpbWVEZWZhdWx0LFxuICAgICxcbiAgICBtaW51dGUgPSB0aW1lRGVmYXVsdCxcbiAgICAsXG4gICAgc2Vjb25kID0gdGltZURlZmF1bHQsXG4gICAgLFxuICAgIG1pbGxpc2Vjb25kID0gdGltZURlZmF1bHRcbiAgXSA9IGdldERhdGVQYXJ0cyhzdHJpbmcsIHsgZGF0ZSwgdGltZSB9KVxuICBpZiAoeWVhciAmJiB5ZWFyLmxlbmd0aCA+PSA0KSB7XG4gICAgaWYgKGxvY2FsZSA9PT0gJ2VuLVVTJyAmJiBzZXAxID09PSAnLycgJiYgc2VwMiA9PT0gJy8nKSB7XG4gICAgICAvLyBBbWVyaWNhbiBmb3JtYXQ6IE1NL0REL1lZWVlcbiAgICAgIDtbZGF5LCBtb250aF0gPSBbbW9udGgsIGRheV1cbiAgICB9XG4gICAgbW9udGggPSBnZXRNb250aEluZGV4KG1vbnRoLCB7IGxvY2FsZSB9KVxuICAgIGNvbnN0IGlzVmFsaWRUaW1lUGFydCA9IHBhcnQgPT4gcGFydCA9PT0gbnVsbCB8fCBwYXJ0Lmxlbmd0aCA9PT0gMlxuICAgIGlmIChcbiAgICAgIG1vbnRoICE9PSBudWxsICYmIChcbiAgICAgICAgIXRpbWUgfHwgKFxuICAgICAgICAgIGlzVmFsaWRUaW1lUGFydChob3VyKSAmJlxuICAgICAgICAgIGlzVmFsaWRUaW1lUGFydChtaW51dGUpICYmXG4gICAgICAgICAgaXNWYWxpZFRpbWVQYXJ0KHNlY29uZClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKFxuICAgICAgICAreWVhcixcbiAgICAgICAgK21vbnRoLFxuICAgICAgICArZGF5LFxuICAgICAgICAraG91cixcbiAgICAgICAgK21pbnV0ZSxcbiAgICAgICAgK3NlY29uZCxcbiAgICAgICAgK21pbGxpc2Vjb25kXG4gICAgICApXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlUGFydEF0UG9zaXRpb24oc3RyaW5nLCBwb3NpdGlvbiwge1xuICBsb2NhbGUgPSAnZW4tVVMnLFxuICBkYXRlID0gdHJ1ZSxcbiAgdGltZSA9IHRydWVcbn0gPSB7fSkge1xuICBjb25zdCBwYXJ0cyA9IGdldERhdGVQYXJ0cyhzdHJpbmcsIHsgZGF0ZSwgdGltZSB9KVxuXG4gIGNvbnN0IGdldFBvc2l0aW9uID0gKHBvc2l0aW9uLCBsZW5ndGggPSBwYXJ0cy5sZW5ndGgpID0+IHtcbiAgICBsZXQgcG9zID0gMFxuICAgIGxldCBpbmRleCA9IDBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgIHdoaWxlICgocG9zaXRpb24gPT09IG51bGwgfHwgcG9zIDw9IHBvc2l0aW9uKSAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgICAgcG9zICs9IHBhcnRzW2luZGV4KytdPy5sZW5ndGggPz8gMFxuICAgIH1cbiAgICByZXR1cm4geyBwb3NpdGlvbjogcG9zLCBpbmRleCB9XG4gIH1cblxuICAvLyBUaW1lIHN0YXJ0cyBhdCBpbmRleCA2LCBkdWUgdG8gdGhlIHNlcGFyYXRvciBhZnRlciB0aGUgZGF0ZS5cbiAgY29uc3Qgb2Zmc2V0ID0gIWRhdGUgPyBnZXRQb3NpdGlvbihudWxsLCA2KS5wb3NpdGlvbiA6IDBcbiAgcG9zaXRpb24gKz0gb2Zmc2V0XG5cbiAgbGV0IHsgaW5kZXggfSA9IGdldFBvc2l0aW9uKHBvc2l0aW9uKVxuXG4gIGNvbnN0IGlzVVMgPSBsb2NhbGUgPT09ICdlbi1VUydcbiAgY29uc3QgdmFsdWVzID0gW1xuICAgIGlzVVMgPyAnbW9udGgnIDogJ2RheScsXG4gICAgbnVsbCxcbiAgICBpc1VTID8gJ2RheScgOiAnbW9udGgnLFxuICAgIG51bGwsXG4gICAgJ3llYXInLFxuICAgIG51bGwsXG4gICAgJ2hvdXInLFxuICAgIG51bGwsXG4gICAgJ21pbnV0ZScsXG4gICAgbnVsbCxcbiAgICAnc2Vjb25kJyxcbiAgICBudWxsLFxuICAgICdtaWxsaXNlY29uZCdcbiAgXVxuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIGlmICh2YWx1ZXNbaW5kZXhdKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGdldFBvc2l0aW9uKG51bGwsIGluZGV4KS5wb3NpdGlvbiAtIG9mZnNldFxuICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBwYXJ0c1tpbmRleF0ubGVuZ3RoXG4gICAgICByZXR1cm4geyBuYW1lOiB2YWx1ZXNbaW5kZXhdLCBzdGFydCwgZW5kIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gZ2V0RGF0ZVBhcnRzKHN0cmluZywgeyBkYXRlID0gdHJ1ZSwgdGltZSA9IHRydWUgfSA9IHt9KSB7XG4gIGNvbnN0IHBhcnRzID0gc3RyaW5nPy5zcGxpdCgvKFtcXHMuLDovXSspLykgfHwgW11cbiAgaWYgKCFkYXRlKSB7XG4gICAgLy8gQWRkIGR1bW15IGRhdGUgcGFydHMgdG8gbWFrZSBzdXJlIHdlIGdldCBhIHRpbWUtb25seSBkYXRlLlxuICAgIHBhcnRzLnVuc2hpZnQoJzEnLCAnLicsICcxJywgJy4nLCAnMjAwMCcsICcgJylcbiAgfVxuICBpZiAoIXRpbWUgJiYgcGFydHMubGVuZ3RoID4gNSkge1xuICAgIHBhcnRzLmxlbmd0aCA9IDVcbiAgfVxuICByZXR1cm4gcGFydHNcbn1cblxuZnVuY3Rpb24gZ2V0TW9udGhJbmRleChtb250aCwgeyBsb2NhbGUgPSAnZW4tVVMnIH0gPSB7fSkge1xuICBjb25zdCB2YWx1ZSA9ICttb250aFxuICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZSAtIDFcbiAgfVxuICBjb25zdCBtYXRjaCA9IG1vbnRoLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gIGlmIChtYXRjaC5sZW5ndGggPCAzKSByZXR1cm4gbnVsbFxuICBjb25zdCBzaG9ydEZvcm1hdCA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwgeyBtb250aDogJ3Nob3J0JyB9KVxuICBjb25zdCBsb25nRm9ybWF0ID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCB7IG1vbnRoOiAnbG9uZycgfSlcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDIwMDAsIGksIDEpXG4gICAgaWYgKFxuICAgICAgc2hvcnRGb3JtYXQuZm9ybWF0KGRhdGUpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChtYXRjaCkgfHxcbiAgICAgIGxvbmdGb3JtYXQuZm9ybWF0KGRhdGUpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChtYXRjaClcbiAgICApIHtcbiAgICAgIHJldHVybiBpXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNhbGVuZGFyXG4gIC5kaXRvLWNhbGVuZGFyLXBvcHVwXG4gICAgLmRpdG8tY2FsZW5kYXItaW5uZXJcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwiY3VycmVudE1vZGUgPT09ICdkYXknXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgneWVhcicpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiB0cnVlIH0pIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LW1vbnRoKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCdtb250aCcpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyBtb250aDogdHJ1ZSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci13ZWVrZGF5c1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ3ZWVrZGF5IGluIHdlZWtkYXlOYW1lc1wiXG4gICAgICAgICAgICApIHt7IHdlZWtkYXkuc2hvcnQgfX1cbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1kYXRlc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJkYXRlIGluIGRhdGVSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImRhdGUuc3RhdGUgJiYgYGRpdG8tY2FsZW5kYXItaXRlbS0ke2RhdGUuc3RhdGV9YFwiXG4gICAgICAgICAgICAgIEBjbGljaz1cImRhdGUuc3RhdGUgIT09ICdkaXNhYmxlZCcgJiYgc2VsZWN0RGF0ZShkYXRlLmRhdGUpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZS50ZXh0IH19XG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWZvb3RlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3Qtbm93KFxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA6dGl0bGU9XCJkYXRlVG9TdHJpbmcobmV3IERhdGUoKSlcIlxuICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0RGF0ZShuZXcgRGF0ZSgpKVwiXG4gICAgICAgICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cImN1cnJlbnRNb2RlID09PSAnbW9udGgnXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgneWVhcicpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiB0cnVlIH0pIH19XG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1tb250aHNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwiKG1vbnRoLCBpbmRleCkgaW4gbW9udGhOYW1lc1wiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldE1vbnRoQ2xhc3MoaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0TW9udGgoaW5kZXgpXCJcbiAgICAgICAgICAgICkge3sgbW9udGguc2hvcnQgfX1cbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ3llYXInXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBEZWNhZGUoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgc3BhbiB7eyBkZWNhZGVUb1N0cmluZyhjdXJyZW50VmFsdWUpIH19XG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBEZWNhZGUoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLXllYXJzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cInllYXIgaW4geWVhclJhbmdlXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0WWVhckNsYXNzKHllYXIpXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0WWVhcih5ZWFyKVwiXG4gICAgICAgICAgICApIHt7IHllYXIgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBkZXNjcmliZURhdGUsIGFsdGVyRGF0ZSB9IGZyb20gJy4uL3V0aWxzL2RhdGUuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAnc2VsZWN0J10sXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGlzYWJsZWREYXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIG1vZGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZGF5JyB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICBjb25zdCB7IHdlZWtkYXlOYW1lcywgbW9udGhOYW1lcyB9ID0gZ2V0TG9jYWxlTmFtZXModGhpcy5sb2NhbGUpXG4gICAgcmV0dXJuIHtcbiAgICAgIHdlZWtkYXlOYW1lcyxcbiAgICAgIG1vbnRoTmFtZXMsXG4gICAgICBkYXRlUmFuZ2U6IFtdLFxuICAgICAgeWVhclJhbmdlOiBbXSxcbiAgICAgIGN1cnJlbnRWYWx1ZTogKFxuICAgICAgICB0aGlzLm1vZGVsVmFsdWUgfHxcbiAgICAgICAgLy8gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIHVzZSBjdXJyZW50IGRhdGUgYnV0IGNsZWFyIHRpbWUgZmllbGRzOlxuICAgICAgICBhbHRlckRhdGUobmV3IERhdGUoKSwgeyBob3VyOiAwLCBtaW51dGU6IDAsIHNlY29uZDogMCwgbWlsbGlzZWNvbmQ6IDAgfSlcbiAgICAgICksXG4gICAgICBjdXJyZW50TW9kZTogdGhpcy5tb2RlXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0byB8fCBuZXcgRGF0ZSgpXG4gICAgICAgIHRoaXMudXBkYXRlRGF0ZVJhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRpc2FibGVkRGF0ZTogJ3VwZGF0ZURhdGVSYW5nZScsXG5cbiAgICBtb2RlKG1vZGUpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vZGUgPSBtb2RlXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRNb250aENsYXNzKG1vbnRoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSc6IChcbiAgICAgICAgICB0aGlzLm1vZGVsVmFsdWUgJiZcbiAgICAgICAgICBtb250aCA9PT0gdGhpcy5tb2RlbFZhbHVlLmdldE1vbnRoKCkgJiZcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpID09PSB0aGlzLm1vZGVsVmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgICApLFxuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQnOiBtb250aCA9PT0gdGhpcy5jdXJyZW50VmFsdWUuZ2V0TW9udGgoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRZZWFyQ2xhc3MoeWVhcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUnOiAoXG4gICAgICAgICAgdGhpcy5tb2RlbFZhbHVlICYmIHllYXIgPT09IHRoaXMubW9kZWxWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICksXG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCc6IHllYXIgPT09IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0RGF0ZShvdmVycmlkZXMsIHVwZGF0ZSA9IGZhbHNlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGFsdGVyRGF0ZSh0aGlzLmN1cnJlbnRWYWx1ZSwgb3ZlcnJpZGVzKVxuICAgICAgaWYgKHVwZGF0ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdGVwRGVjYWRlKHN0ZXApIHtcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwICogMTBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNldE1vZGUobW9kZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9kZSA9IG1vZGVcbiAgICB9LFxuXG4gICAgc3RlcE1vbnRoKHN0ZXApIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IHllYXIsIG1vbnRoIH0gPSB0aGlzLmdldFllYXJNb250aChcbiAgICAgICAgY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgIGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpICsgc3RlcFxuICAgICAgKVxuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgbW9udGgsXG4gICAgICAgIGRheTogTWF0aC5taW4oXG4gICAgICAgICAgdGhpcy5nZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCksXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUuZ2V0RGF0ZSgpXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHN0ZXBZZWFyKHN0ZXApIHtcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzZWxlY3REYXRlKGRhdGUpIHtcbiAgICAgIHRoaXMuc2V0RGF0ZShkZXNjcmliZURhdGUoZGF0ZSksIHRydWUpXG4gICAgICB0aGlzLiRlbWl0KCdzZWxlY3QnKVxuICAgIH0sXG5cbiAgICBzZWxlY3RNb250aChtb250aCkge1xuICAgICAgdGhpcy5zZXRNb2RlKCdkYXknKVxuICAgICAgLy8gU2V0IGRheSB0byAxIHRvIGF2b2lkIHNlbGVjdGluZyBhIGRhdGUgdGhhdCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZVxuICAgICAgLy8gbmV3IG1vbnRoLCBlLmcuIEZlYiAzMSAtPiBNYXIgMy5cbiAgICAgIHRoaXMuc2V0RGF0ZSh7IG1vbnRoLCBkYXk6IDEgfSwgdHJ1ZSlcbiAgICB9LFxuXG4gICAgc2VsZWN0WWVhcih5ZWFyKSB7XG4gICAgICB0aGlzLnNldE1vZGUoJ21vbnRoJylcbiAgICAgIHRoaXMuc2V0RGF0ZSh7IHllYXIgfSwgdHJ1ZSlcbiAgICB9LFxuXG4gICAgZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICBpZiAobW9udGggPiAxMSkge1xuICAgICAgICB5ZWFyKytcbiAgICAgICAgbW9udGggPSAwXG4gICAgICB9IGVsc2UgaWYgKG1vbnRoIDwgMCkge1xuICAgICAgICB5ZWFyLS1cbiAgICAgICAgbW9udGggPSAxMVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgeWVhciwgbW9udGggfVxuICAgIH0sXG5cbiAgICBkYXRlVG9TdHJpbmcoXG4gICAgICBkYXRlLFxuICAgICAgeyB5ZWFyLCBtb250aCwgZGF5IH0gPSB7IHllYXI6IHRydWUsIG1vbnRoOiB0cnVlLCBkYXk6IHRydWUgfVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcodGhpcy5sb2NhbGUsIHtcbiAgICAgICAgeWVhcjogeWVhciAmJiAnbnVtZXJpYycsXG4gICAgICAgIG1vbnRoOiBtb250aCAmJiAnbG9uZycsXG4gICAgICAgIGRheTogZGF5ICYmICdudW1lcmljJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZGVjYWRlVG9TdHJpbmcoZGF0ZSkge1xuICAgICAgY29uc3QgeWVhciA9IHRoaXMuZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoZGF0ZS5nZXRGdWxsWWVhcigpKVxuICAgICAgcmV0dXJuIGAke3llYXJ9IOKAkyAke3llYXIgKyA5fWBcbiAgICB9LFxuXG4gICAgZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApLmdldERhdGUoKVxuICAgIH0sXG5cbiAgICBnZXRGaXJzdFllYXJPZkRlY2FkZSh5ZWFyKSB7XG4gICAgICBjb25zdCB5ZWFyU3RyID0geWVhci50b1N0cmluZygpXG4gICAgICByZXR1cm4gK2Ake3llYXJTdHIuc2xpY2UoMCwgLTEpfTBgXG4gICAgfSxcblxuICAgIG5hdmlnYXRlKHsgc3RlcCwgZW50ZXIsIG1vZGUgPSB0aGlzLmN1cnJlbnRNb2RlLCB1cGRhdGUgPSBmYWxzZSB9KSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7IGRheTogY3VycmVudFZhbHVlLmdldERhdGUoKSArIHN0ZXAgfSwgdXBkYXRlKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICB0aGlzLnNldERhdGUoeyBtb250aDogY3VycmVudFZhbHVlLmdldE1vbnRoKCkgKyBzdGVwIH0sIHVwZGF0ZSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICB0aGlzLnNldERhdGUoeyB5ZWFyOiBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXAgfSwgdXBkYXRlKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBlbHNlIGlmIChlbnRlcikge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuY3VycmVudE1vZGUpIHtcbiAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRlKGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgdGhpcy5zZXRNb2RlKCdkYXknKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgIHRoaXMuc2V0TW9kZSgnbW9udGgnKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVEYXRlUmFuZ2UoKSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZSA9IFtdXG4gICAgICB0aGlzLnllYXJSYW5nZSA9IFtdXG5cbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBjb25zdCB5ZWFyID0gY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgIGNvbnN0IG1vbnRoID0gY3VycmVudFZhbHVlLmdldE1vbnRoKClcbiAgICAgIGNvbnN0IHN0YXJ0WWVhciA9IHRoaXMuZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoeWVhcilcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgICAgICB0aGlzLnllYXJSYW5nZS5wdXNoKHN0YXJ0WWVhciArIGkpXG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyTW9udGhGaXJzdERheSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKVxuICAgICAgbGV0IGZpcnN0RGF5V2VlayA9IGN1cnJNb250aEZpcnN0RGF5LmdldERheSgpICsgMVxuICAgICAgaWYgKGZpcnN0RGF5V2VlayA9PT0gMCkge1xuICAgICAgICBmaXJzdERheVdlZWsgPSA3XG4gICAgICB9XG4gICAgICBjb25zdCBudW1EYXlzID0gdGhpcy5nZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aClcbiAgICAgIGlmIChmaXJzdERheVdlZWsgPiAxKSB7XG4gICAgICAgIGNvbnN0IHByZXZNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoIC0gMSlcbiAgICAgICAgY29uc3QgcHJldk1vbnRoTnVtRGF5cyA9IHRoaXMuZ2V0RGF5c0luTW9udGgoXG4gICAgICAgICAgcHJldk1vbnRoLnllYXIsXG4gICAgICAgICAgcHJldk1vbnRoLm1vbnRoXG4gICAgICAgIClcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBmaXJzdERheVdlZWs7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRheSA9IHByZXZNb250aE51bURheXMgLSBmaXJzdERheVdlZWsgKyBpICsgMVxuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShwcmV2TW9udGgueWVhciwgcHJldk1vbnRoLm1vbnRoLCBkYXkpXG4gICAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgICB0ZXh0OiBkYXksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGU6IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJyA6ICdncmF5J1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKVxuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbnVtRGF5czsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgaSlcbiAgICAgICAgY29uc3QgaXNEYXkgPSBkYXRlID0+IChcbiAgICAgICAgICBkYXRlICYmXG4gICAgICAgICAgZGF0ZS5nZXREYXRlKCkgPT09IGkgJiZcbiAgICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IHllYXIgJiZcbiAgICAgICAgICBkYXRlLmdldE1vbnRoKCkgPT09IG1vbnRoXG4gICAgICAgIClcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBpc0RheSh0aGlzLm1vZGVsVmFsdWUpXG4gICAgICAgICAgPyAnYWN0aXZlJ1xuICAgICAgICAgIDogaXNEYXkobm93KVxuICAgICAgICAgICAgPyAndG9kYXknXG4gICAgICAgICAgICA6IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpXG4gICAgICAgICAgICAgID8gJ2Rpc2FibGVkJ1xuICAgICAgICAgICAgICA6IGlzRGF5KGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgICAgICAgICA/ICdjdXJyZW50J1xuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgc3RhdGVcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dE1vbnRoTmVlZCA9IDQyIC0gdGhpcy5kYXRlUmFuZ2UubGVuZ3RoXG4gICAgICBpZiAobmV4dE1vbnRoTmVlZCA+IDApIHtcbiAgICAgICAgY29uc3QgbmV4dE1vbnRoID0gdGhpcy5nZXRZZWFyTW9udGgoeWVhciwgbW9udGggKyAxKVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBuZXh0TW9udGhOZWVkOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUobmV4dE1vbnRoLnllYXIsIG5leHRNb250aC5tb250aCwgaSlcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJyA6ICdncmF5J1xuICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY29uc3QgbG9jYWxlTmFtZXMgPSB7fVxuXG4vLyBDYWxsaW5nIGB0b0xvY2FsZVN0cmluZygpYCB0aGlzIG11Y2ggYXBwZWFycyB0byBiZSBleHBlbnNpdmUsIHNvIGNhY2hlIGl0OlxuZnVuY3Rpb24gZ2V0TG9jYWxlTmFtZXMobG9jYWxlKSB7XG4gIGxldCBuYW1lcyA9IGxvY2FsZU5hbWVzW2xvY2FsZV1cbiAgaWYgKCFuYW1lcykge1xuICAgIGNvbnN0IHdlZWtkYXlOYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgwLCAwLCBpKVxuICAgICAgd2Vla2RheU5hbWVzLnB1c2goe1xuICAgICAgICBsb25nOiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyB3ZWVrZGF5OiAnbG9uZycgfSksXG4gICAgICAgIHNob3J0OiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyB3ZWVrZGF5OiAnc2hvcnQnIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICBjb25zdCBtb250aE5hbWVzID0gW11cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAxMjsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCwgaSwgMClcbiAgICAgIG1vbnRoTmFtZXMucHVzaCh7XG4gICAgICAgIGxvbmc6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1vbnRoOiAnbG9uZycgfSksXG4gICAgICAgIHNob3J0OiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogJ3Nob3J0JyB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgbmFtZXMgPSBsb2NhbGVOYW1lc1tsb2NhbGVdID0ge1xuICAgICAgd2Vla2RheU5hbWVzLFxuICAgICAgbW9udGhOYW1lc1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmFtZXNcbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNhbGVuZGFyIHtcbiAgbWluLXdpZHRoOiAyNDBweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLmRpdG8tY2FsZW5kYXItcG9wdXAge1xuICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuICB6LWluZGV4OiAkei1pbmRleC1wb3B1cDtcbn1cblxuLmRpdG8tY2FsZW5kYXItYm9keSB7XG4gIHBhZGRpbmc6IDAgMC41ZW07XG5cbiAgc3BhbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLyA3KTtcbiAgICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG4gICAgbGluZS1oZWlnaHQ6IGNhbGMoI3skaW5wdXQtaGVpZ2h0fSAtIDJweCk7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS10b2RheSB7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmU7XG4gICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gIH1cblxuICAuZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSB7XG4gICAgJixcbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1kaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1kaXNhYmxlZCxcbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1ncmF5IHtcbiAgICBjb2xvcjogIzk5OTk5OTtcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1tb250aHMsXG4uZGl0by1jYWxlbmRhci15ZWFycyB7XG4gIHNwYW4ge1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLyA0KTtcbiAgICBtYXJnaW46IDAuNWVtIDA7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXIteWVhcnMgc3BhbiB7XG4gIHdpZHRoOiBjYWxjKDEwMCUgLyA1KTtcbn1cblxuLmRpdG8tY2FsZW5kYXIgYSxcbi5kaXRvLWNhbGVuZGFyLWRhdGVzIHNwYW4sXG4uZGl0by1jYWxlbmRhci1tb250aHMgc3Bhbixcbi5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW4ge1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWhlYWRlciBzcGFuIHtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuXG4gIGEge1xuICAgIHBhZGRpbmc6IDAgMC4yZW07XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3Bhbjpob3Zlcixcbi5kaXRvLWNhbGVuZGFyLW1vbnRocyBzcGFuOmhvdmVyLFxuLmRpdG8tY2FsZW5kYXIteWVhcnMgc3Bhbjpob3Zlcixcbi5kaXRvLWNhbGVuZGFyOm5vdCg6aG92ZXIpIC5kaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCB7XG4gIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHQ7XG59XG5cbi5kaXRvLWNhbGVuZGFyLXdlZWtkYXlzIHNwYW4ge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWhlYWRlcixcbi5kaXRvLWNhbGVuZGFyLWZvb3RlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG4gIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xufVxuXG4uZGl0by1jYWxlbmRhci1mb290ZXIge1xuICBib3JkZXItdG9wOiAkYm9yZGVyLXN0eWxlO1xufVxuXG4uZGl0by1jYWxlbmRhci1oZWFkZXIge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci1zdHlsZTtcbiAgZGlzcGxheTogZmxleDtcblxuICA+IHNwYW4ge1xuICAgIG1hcmdpbjogYXV0bztcbiAgICBwYWRkaW5nOiAwIDAuNWVtO1xuICB9XG5cbiAgYSB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1zdGVwLXByZXYsXG4uZGl0by1jYWxlbmRhci1zdGVwLW5leHQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiA1JTtcbiAgbWluLXdpZHRoOiAyZW07XG4gIG1heC13aWR0aDogM2VtO1xuXG4gICY6OmFmdGVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICBmb250LXNpemU6IDEuMjVlbTtcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1zdGVwLXByZXYge1xuICAmOjphZnRlciB7XG4gICAgY29udGVudDogJ+KAuSc7XG4gIH1cblxuICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlciB7XG4gICAgY29udGVudDogJ8KrJztcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1zdGVwLW5leHQge1xuICAmOjphZnRlciB7XG4gICAgY29udGVudDogJ+KAuic7XG4gIH1cblxuICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlciB7XG4gICAgY29udGVudDogJ8K7JztcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1zZWxlY3Qtbm93IHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICdOb3cnO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRFdmVudHModGFyZ2V0cywgZXZlbnRzKSB7XG4gIHRhcmdldHMgPVxuICAgIHRhcmdldHMgaW5zdGFuY2VvZiBOb2RlTGlzdFxuICAgICAgPyBBcnJheS5mcm9tKHRhcmdldHMpXG4gICAgICA6IGFzQXJyYXkodGFyZ2V0cylcblxuICBmb3IgKGNvbnN0IFt0eXBlLCBoYW5kbGVyXSBvZiBPYmplY3QuZW50cmllcyhldmVudHMpKSB7XG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICByZW1vdmUoKSB7XG4gICAgICBmb3IgKGNvbnN0IFt0eXBlLCBoYW5kbGVyXSBvZiBPYmplY3QuZW50cmllcyhldmVudHMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUV2ZW50cyguLi5ldmVudHMpIHtcbiAgcmV0dXJuIHtcbiAgICByZW1vdmUoKSB7XG4gICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgICAgICBldmVudC5yZW1vdmUoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5KGV2ZW50KSB7XG4gIHJldHVybiB7XG4gICAgMzc6ICdsZWZ0JyxcbiAgICAzODogJ3VwJyxcbiAgICAzOTogJ3JpZ2h0JyxcbiAgICA0MDogJ2Rvd24nLFxuICAgIDEzOiAnZW50ZXInXG4gIH1bZXZlbnQ/LmtleUNvZGVdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KSB7XG4gIGNvbnN0IGtleSA9IGdldEtleShldmVudClcbiAgcmV0dXJuIHtcbiAgICBob3I6IHsgbGVmdDogLTEsIHJpZ2h0OiAxIH1ba2V5XSB8fCAwLFxuICAgIHZlcjogeyB1cDogLTEsIGRvd246IDEgfVtrZXldIHx8IDAsXG4gICAgZW50ZXI6IGtleSA9PT0gJ2VudGVyJ1xuICB9XG59XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYXJnZXQoY29tcG9uZW50KSB7XG4gIGNvbnN0IHRhcmdldCA9IGlzU3RyaW5nKGNvbXBvbmVudC50YXJnZXQpXG4gICAgPyBjb21wb25lbnQuJHJlZnNbY29tcG9uZW50LnRhcmdldF1cbiAgICA6IGNvbXBvbmVudC50YXJnZXRcbiAgcmV0dXJuIHRhcmdldD8uJGVsID8/IHRhcmdldFxufVxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10cmlnZ2VyLWNvbnRhaW5lclxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtaWY9XCJhbHdheXNTaG93XCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdjbGljaydcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgQGNsaWNrPVwib25DbGlja1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdmb2N1cycgfHwgdHJpZ2dlciA9PT0gJ2Fsd2F5cydcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIFRyYW5zaXRpb24oOm5hbWU9XCJgZGl0by0ke3RyYW5zaXRpb259YFwiKVxuICAgIC5kaXRvLXBvcHVwKFxuICAgICAgdi1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICApXG4gICAgLmRpdG8tcG9wdXAoXG4gICAgICB2LWVsc2VcbiAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICByZWY9XCJwb3B1cFwiXG4gICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMsIGNvbWJpbmVFdmVudHMgfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcbmltcG9ydCB7IGdldFRhcmdldCB9IGZyb20gJy4uL3V0aWxzL3RyaWdnZXInXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOnNob3cnXSxcblxuICBwcm9wczoge1xuICAgIHRyaWdnZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnY2xpY2snIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tJyB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjdXN0b21DbGFzczogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB6SW5kZXg6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH0sXG4gICAga2VlcEluVmlldzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgaGlkZVdoZW5DbGlja091dHNpZGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGFsd2F5c1Nob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb3ZlcjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGhpZGVEZWxheTogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgcG9wdXBQbGFjZW1lbnQ6IHRoaXMucGxhY2VtZW50LFxuICAgICAgZm9jdXNFdmVudHM6IG51bGwsXG4gICAgICBjbG9zZUV2ZW50czogbnVsbCxcbiAgICAgIHBvcHVwRXZlbnRzOiBudWxsLFxuICAgICAgYmx1clRpbWVyOiBudWxsLFxuICAgICAgbW91c2VMZWF2ZVRpbWVyOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdHJpZ2dlckNsYXNzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tdHJpZ2dlci1kaXNhYmxlZCc6IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcG9wdXBDbGFzcygpIHtcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSB7XG4gICAgICAgIFtgZGl0by1wb3B1cC0ke2h5cGhlbmF0ZSh0aGlzLnBsYWNlbWVudCl9YF06IHRydWVcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmN1c3RvbUNsYXNzKSB7XG4gICAgICAgIGNsYXNzZXNbdGhpcy5jdXN0b21DbGFzc10gPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3Nlc1xuICAgIH0sXG5cbiAgICBwb3B1cFN0eWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuekluZGV4ID8gYHotaW5kZXg6ICR7dGhpcy56SW5kZXh9YCA6ICcnXG4gICAgfSxcblxuICAgIHRyaWdnZXJUYXJnZXQoKSB7XG4gICAgICByZXR1cm4gZ2V0VGFyZ2V0KHRoaXMpXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3cgfHwgdGhpcy5hbHdheXNTaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6c2hvdycsIHRvKVxuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLm9uU2hvd1BvcHVwKHRvKSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBjb25zdCB7IHRyaWdnZXIsIHBvcHVwIH0gPSB0aGlzLiRyZWZzXG4gICAgaWYgKHRoaXMudHJpZ2dlciA9PT0gJ2ZvY3VzJykge1xuICAgICAgdGhpcy5mb2N1c0V2ZW50cyA9IHRoaXMuYWRkRm9jdXNFdmVudHModGhpcy50cmlnZ2VyVGFyZ2V0ID8/IHRyaWdnZXIpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGlkZVdoZW5DbGlja091dHNpZGUgJiYgIXRoaXMuYWx3YXlzU2hvdykge1xuICAgICAgLy8gVXNlICdtb3VzZXVwJyBpbnN0ZWFkIG9mICdjbGljaycsIHNpbmNlIGNsaWNrIGFwcGVhcnMgdG8gaGFwcGVuIGFmdGVyXG4gICAgICAvLyB0aGUgRE9NIGluc2lkZSBvZiBwb3B1cHMgY291bGQgY2hhbmdlIGluIGEgd2F5IHNvIHRoYXQgdGhlIGNoZWNrXG4gICAgICAvLyBgcG9wdXAuY29udGFpbnMoZXZlbnQudGFyZ2V0KWAgd291bGQgZmFpbDpcbiAgICAgIHRoaXMuY2xvc2VFdmVudHMgPSBhZGRFdmVudHMod2luZG93LCB7XG4gICAgICAgIG1vdXNldXA6IGV2ZW50ID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCAmJlxuICAgICAgICAgICAgIXBvcHVwLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICAgICAgICF0cmlnZ2VyLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICAgICAgICF0aGlzLnRyaWdnZXJUYXJnZXQ/LmNvbnRhaW5zKGV2ZW50LnRhcmdldClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hbHdheXNTaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLnNob3dQb3B1cCA9IHRoaXMuc2hvd1xuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLmZvY3VzRXZlbnRzPy5yZW1vdmUoKVxuICAgIHRoaXMuY2xvc2VFdmVudHM/LnJlbW92ZSgpXG4gICAgdGhpcy5wb3B1cEV2ZW50cz8ucmVtb3ZlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdXBkYXRlUG9zaXRpb24oKSB7XG4gICAgICBjb25zdCB7IHRyaWdnZXIsIHBvcHVwIH0gPSB0aGlzLiRyZWZzXG4gICAgICBpZiAodGhpcy5zaG93ICYmIHBvcHVwLm9mZnNldFdpZHRoID09PSAwKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVQb3NpdGlvbigpLCAwKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy50cmlnZ2VyVGFyZ2V0ID8/IHRyaWdnZXJcbiAgICAgIC8vIEFjdHVhbGx5IHJlc2l6ZSB0aGUgcG9wdXAncyBmaXJzdCBjaGlsZCwgc28gdGhleSBjYW4gc2V0IHNpemUgbGltaXRzLlxuICAgICAgY29uc3QgZWwgPSB0aGlzLnRhcmdldCA9PT0gJ3BvcHVwJyA/IHRyaWdnZXIgOiBwb3B1cC5maXJzdEVsZW1lbnRDaGlsZFxuICAgICAgaWYgKGVsKSB7XG4gICAgICAgIGVsLnN0eWxlLndpZHRoID0gZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLndpZHRoXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJvdW5kcyA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgY29uc3QgdHJpZ2dlckxlZnQgPSBib3VuZHMubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgICBjb25zdCB0cmlnZ2VyVG9wID0gYm91bmRzLnRvcCArIHdpbmRvdy5zY3JvbGxZXG4gICAgICBjb25zdCB0cmlnZ2VyV2lkdGggPSBib3VuZHMud2lkdGhcbiAgICAgIGNvbnN0IHRyaWdnZXJIZWlnaHQgPSBib3VuZHMuaGVpZ2h0XG4gICAgICBjb25zdCBwb3B1cFdpZHRoID0gcG9wdXAub2Zmc2V0V2lkdGhcbiAgICAgIGNvbnN0IHBvcHVwSGVpZ2h0ID0gcG9wdXAub2Zmc2V0SGVpZ2h0XG5cbiAgICAgIGxldCBbcGFydDEsIHBhcnQyXSA9IHRoaXMucG9wdXBQbGFjZW1lbnQuc3BsaXQoJy0nKSB8fCBbXVxuICAgICAgaWYgKHRoaXMua2VlcEluVmlldykge1xuICAgICAgICBjb25zdCB3aW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoXG4gICAgICAgIGNvbnN0IHdpbkhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJUb3AgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAnYm90dG9tJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCAtIHRyaWdnZXJIZWlnaHQgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAndG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJMZWZ0IDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDEgPSAncmlnaHQnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHdpbldpZHRoIC0gdHJpZ2dlckxlZnQgLSB0cmlnZ2VyV2lkdGggPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdsZWZ0J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJ0MiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdib3R0b20nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnYm90dG9tJykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyVG9wICsgdHJpZ2dlckhlaWdodCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICd0b3AnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnbGVmdCcpIHtcbiAgICAgICAgICBpZiAod2luV2lkdGggLSB0cmlnZ2VyTGVmdCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyTGVmdCArIHRyaWdnZXJXaWR0aCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ2xlZnQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCBsZWZ0ID0gMFxuICAgICAgbGV0IHRvcCA9IDBcbiAgICAgIHN3aXRjaCAocGFydDEpIHtcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHRcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICBsZWZ0IC09IHBvcHVwV2lkdGhcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgbGVmdCArPSB0cmlnZ2VyV2lkdGhcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIHRvcCArPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAocGFydDIpIHtcbiAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aCAtIHRyaWdnZXJXaWR0aFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgdG9wIC09IHBvcHVwSGVpZ2h0IC0gdHJpZ2dlckhlaWdodFxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb3Zlcikge1xuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICB0b3AgLT0gdHJpZ2dlckhlaWdodFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0ICE9PSB0cmlnZ2VyKSB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXJCb3VuZHMgPSB0cmlnZ2VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgIGxlZnQgKz0gdHJpZ2dlckxlZnQgLSB0cmlnZ2VyQm91bmRzLmxlZnRcbiAgICAgICAgdG9wICs9IHRyaWdnZXJUb3AgLSB0cmlnZ2VyQm91bmRzLnRvcFxuICAgICAgfVxuICAgICAgcG9wdXAuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgXG4gICAgICBwb3B1cC5zdHlsZS50b3AgPSBgJHt0b3B9cHhgXG4gICAgfSxcblxuICAgIGFkZEZvY3VzRXZlbnRzKHBhcmVudCkge1xuICAgICAgY29uc3QgdGFyZ2V0cyA9IHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCwgdGV4dGFyZWEnKVxuICAgICAgbGV0IGlucHV0XG5cbiAgICAgIHJldHVybiBjb21iaW5lRXZlbnRzKFxuICAgICAgICBhZGRFdmVudHModGFyZ2V0cywge1xuICAgICAgICAgIGZvY3VzOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmJsdXJUaW1lcilcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgICAgLy8gVXNlIHRpbWVvdXQgdG8gYWxsb3cgY2xpY2tlZCBpbnB1dHMgdG8gZ3JhYiBmb2N1c1xuICAgICAgICAgICAgdGhpcy5ibHVyVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLiRyZWZzLnBvcHVwLm1hdGNoZXMoJzpmb2N1cy13aXRoaW4nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMClcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuXG4gICAgICAgIGFkZEV2ZW50cyhwYXJlbnQsIHtcbiAgICAgICAgICBtb3VzZWRvd246IGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0Lm1hdGNoZXMoJ2lucHV0LCB0ZXh0YXJlYSwgYnV0dG9uJykpIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFldmVudC50YXJnZXQubWF0Y2hlcygnLmRpdG8tYnV0dG9uLWNsZWFyJykpIHtcbiAgICAgICAgICAgICAgY29uc3QgdHJpZ2dlciA9IHRoaXMudHJpZ2dlclRhcmdldCA/PyB0aGlzLiRyZWZzLnRyaWdnZXJcbiAgICAgICAgICAgICAgLy8gTWFyayB0cmlnZ2VyIGlucHV0IGFzIHJlYWRvbmx5IHNvIGl0IGNhbid0IGxvb3NlIGZvY3VzIHdoaWxlXG4gICAgICAgICAgICAgIC8vIHVzZXIgZG9lcyBvdGhlciBtb3VzZS1hY3Rpdml0aWVzIGluIHBvcHVwLlxuICAgICAgICAgICAgICBpbnB1dCA9IHRyaWdnZXIucXVlcnlTZWxlY3RvcignaW5wdXQsIHRleHRhcmVhJylcbiAgICAgICAgICAgICAgaWYgKGlucHV0ICYmICFpbnB1dC5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ3JlYWRvbmx5JywgJ3RydWUnKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIG1vdXNldXA6IGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgICAvLyBHaXZlIHNvbWUgdGltZSBmb3Igb3RoZXIgZXZlbnRzIHRvIHVwZGF0ZSBpbnB1dCBiZWZvcmUgaXRcbiAgICAgICAgICAgICAgLy8gYmVjb21lcyBlZGl0YWJsZSBhbmQgc3RpbGwgZm9jdXNlZCBhZ2Fpbi5cbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaW5wdXQucmVtb3ZlQXR0cmlidXRlKCdyZWFkb25seScpXG4gICAgICAgICAgICAgICAgaWYgKCFldmVudC50YXJnZXQubWF0Y2hlcygnaW5wdXQsIHRleHRhcmVhLCBidXR0b24nKSkge1xuICAgICAgICAgICAgICAgICAgaW5wdXQuZm9jdXMoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbnB1dCA9IG51bGxcbiAgICAgICAgICAgICAgfSwgMClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSxcblxuICAgIG9uU2hvd1BvcHVwKHNob3cpIHtcbiAgICAgIGlmIChzaG93KSB7XG4gICAgICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdmb2N1cycpIHtcbiAgICAgICAgICB0aGlzLnBvcHVwRXZlbnRzID0gdGhpcy5hZGRGb2N1c0V2ZW50cyh0aGlzLiRyZWZzLnBvcHVwKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wb3B1cEV2ZW50cz8ucmVtb3ZlKClcbiAgICAgICAgdGhpcy5wb3B1cEV2ZW50cyA9IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25DbGljaygpIHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Ib3ZlcihlbnRlcikge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1vdXNlTGVhdmVUaW1lcilcbiAgICAgICAgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuaGlkZURlbGF5KSB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlTGVhdmVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgICB9LCB0aGlzLmhpZGVEZWxheSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcbkBpbXBvcnQgJy4uL3N0eWxlcy90cmFuc2l0aW9ucy9pbmRleC5zY3NzJztcblxuLmRpdG8tdHJpZ2dlci1jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5kaXRvLXRyaWdnZXItZGlzYWJsZWQge1xuICBjb2xvcjogJGNvbG9yLWRpc2FibGVkO1xuICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gIGN1cnNvcjogZGVmYXVsdDtcblxuICAqIHtcbiAgICBjdXJzb3I6IGRlZmF1bHQgIWltcG9ydGFudDtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgICY6Zm9jdXMge1xuICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8tcG9wdXAge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogJHotaW5kZXgtcG9wdXA7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWlucHV0KDpjbGFzcz1cImNsYXNzZXNcIilcbiAgc2xvdChuYW1lPVwiYmVmb3JlXCIpXG4gIGlucHV0KFxuICAgIDppZD1cImlkXCJcbiAgICByZWY9XCJpbnB1dFwiXG4gICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgOnR5cGU9XCJ0eXBlXCJcbiAgICA6bmFtZT1cIm5hbWVcIlxuICAgIDp0aXRsZT1cInRpdGxlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOnJlYWRvbmx5PVwicmVhZG9ubHlcIlxuICAgIDphdXRvZm9jdXM9XCJhdXRvZm9jdXNcIlxuICAgIDpwbGFjZWhvbGRlcj1cInBsYWNlaG9sZGVyXCJcbiAgICA6YXV0b2NvbXBsZXRlPVwiYXV0b2NvbXBsZXRlXCJcbiAgICA6YXJpYS1sYWJlbD1cInRpdGxlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgKVxuICBzbG90KG5hbWU9XCJhZnRlclwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnXSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogW1N0cmluZywgTnVtYmVyXSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHR5cGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAndGV4dCcgfSxcbiAgICBpZDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBuYW1lOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRpdGxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgcmVhZG9ubHk6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhdXRvZm9jdXM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBhdXRvY29tcGxldGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnb2ZmJyB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBob3ZlcmluZzogZmFsc2UsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kYXR0cnMuY2xhc3NcbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IF8sIC4uLmF0dHJpYnV0ZXMgfSA9IHRoaXMuJGF0dHJzXG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH0sXG5cbiAgICBpbnB1dCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLmlucHV0XG4gICAgfSxcblxuICAgIHNpemUoKSB7XG4gICAgICAvLyBEZXRlcm1pbmUgc2l6ZSBiYXNlZCBvbiBtaW4gJiBtYXggc2V0dGluZ3MsIGlmIHRoZXkncmUgcHJvdmlkZWQuXG4gICAgICBjb25zdCB7IHNpemUsIG1pbiwgbWF4IH0gPSB0aGlzLiRhdHRyc1xuICAgICAgY29uc3QgZ2V0TGVuZ3RoID0gdmFsdWUgPT4gKHZhbHVlICE9IG51bGwgPyBgJHt2YWx1ZX1gLmxlbmd0aCA6IDApXG4gICAgICByZXR1cm4gc2l6ZSB8fCBnZXRMZW5ndGgobWluKSB8fCBnZXRMZW5ndGgobWF4KSB8fCB1bmRlZmluZWRcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0b1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUoY3VycmVudFZhbHVlKSB7XG4gICAgICBpZiAoY3VycmVudFZhbHVlICE9PSB0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBjdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWlucHV0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXG4gIEBleHRlbmQgJWlucHV0O1xuXG4gIGlucHV0IHtcbiAgICAvLyBJbmhlcml0IGFsbCBzdHlsaW5nIGZyb20gLmRpdG8taW5wdXRcbiAgICBhbGw6IGluaGVyaXQ7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlcjogMDtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5pLmRpdG8taWNvbihcbiAgOmNsYXNzPWB7XG4gICAgWydkaXRvLWljb24tLScgKyBuYW1lXTogdHJ1ZSxcbiAgICAnZGl0by1pY29uLS1kaXNhYmxlZCc6IGRpc2FibGVkXG4gIH1gXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIG5hbWU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBkaXNhYmxlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4vLyBgeWFybiBidWlsZDppY29uc2AgY29udmVydHMgdGhlIGljb24gU1ZHIGZpbGVzIHRvIHNpbGVudCBjbGFzc2VzIGluc2lkZVxuLy8gYHNyYy9zdHlsZXMvbWl4aW5zL19pY29ucy5zY3NzYCwgbWFraW5nIHRoZW0gYXZhaWxhYmxlIHRvIGFsbCBvdGhlciBzYXNzXG4vLyBjb2RlIHRocm91Z2ggYF9pbXBvcnRzYC5cbi8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIHRoZW0gYXMgbm9ybWFsIENTUyBjbGFzc2VzLCBjb252ZXJ0IHRoZW0gaGVyZTpcbkBlYWNoICRuYW1lIGluICRpY29ucyB7XG4gIC5kaXRvLWljb24tLSN7JG5hbWV9IHtcbiAgICAmOjphZnRlciB7XG4gICAgICBAZXh0ZW5kICVpY29uLSN7JG5hbWV9O1xuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLWljb24ge1xuICBAYXQtcm9vdCAuZGl0by1pbnB1dCAmIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgaW5zZXQ6ICRib3JkZXItd2lkdGg7XG4gICAgbGVmdDogdW5zZXQ7XG4gICAgd2lkdGg6IDJlbTtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgY29sb3I6ICRjb2xvci1ncmV5O1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcblxuICAgICYtLWRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItbGlnaHQ7XG4gICAgfVxuICB9XG5cbiAgQGF0LXJvb3QgLmRpdG8taW5wdXQ6Zm9jdXMtd2l0aGluICYge1xuICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICB9XG59XG48L3N0eWxlPlxuIiwiZXhwb3J0IGZ1bmN0aW9uIHNldFNlbGVjdGlvbihpbnB1dCwgeyBzdGFydCwgZW5kIH0pIHtcbiAgaWYgKGlucHV0Py5zZXRTZWxlY3Rpb25SYW5nZSkge1xuICAgIGlucHV0LmZvY3VzKClcbiAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb24oaW5wdXQpIHtcbiAgcmV0dXJuIGlucHV0ICYmICdzZWxlY3Rpb25TdGFydCcgaW4gaW5wdXRcbiAgICA/IHsgc3RhcnQ6IGlucHV0LnNlbGVjdGlvblN0YXJ0LCBlbmQ6IGlucHV0LnNlbGVjdGlvbkVuZCB9XG4gICAgOiBudWxsXG59XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblRyaWdnZXIuZGl0by1kYXRlLXBpY2tlcihcbiAgcmVmPVwidHJpZ2dlclwiXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJmb2N1c1wiXG4gIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuKVxuICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICBzbG90KFxuICAgICAgdi1pZj1cIiRzbG90cy50cmlnZ2VyXCJcbiAgICAgIG5hbWU9XCJ0cmlnZ2VyXCJcbiAgICApXG4gICAgSW5wdXRGaWVsZC5kaXRvLWRhdGUtcGlja2VyLWlucHV0KFxuICAgICAgdi1lbHNlXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFRleHRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCwgLi4uJGF0dHJzIH1cIlxuICAgICAgQGZvY3VzPVwib25Gb2N1cyh0cnVlKVwiXG4gICAgICBAYmx1cj1cIm9uRm9jdXMoZmFsc2UpXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uTW91c2VEb3duKGZhbHNlKVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI2JlZm9yZSlcbiAgICAgICAgc2xvdChuYW1lPVwiYmVmb3JlXCIpXG4gICAgICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgICAgIEljb24oXG4gICAgICAgICAgbmFtZT1cImNhbGVuZGFyXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgQG1vdXNlZG93bi5wcmV2ZW50PVwib25Nb3VzZURvd24odHJ1ZSlcIlxuICAgICAgICApXG4gICAgICAgIHNsb3QobmFtZT1cImFmdGVyXCIpXG4gIHRlbXBsYXRlKCNwb3B1cClcbiAgICBDYWxlbmRhci5kaXRvLWRhdGUtcGlja2VyLXBvcHVwKFxuICAgICAgcmVmPVwiY2FsZW5kYXJcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJ7IGxvY2FsZSwgZGlzYWJsZWREYXRlIH1cIlxuICAgICAgQHNlbGVjdD1cInNob3dQb3B1cCA9IGZhbHNlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZm9ybWF0LCBkZWZhdWx0Rm9ybWF0cyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgVHJpZ2dlciBmcm9tICcuL1RyaWdnZXIudnVlJ1xuaW1wb3J0IENhbGVuZGFyIGZyb20gJy4vQ2FsZW5kYXIudnVlJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCBJY29uIGZyb20gJy4vSWNvbi52dWUnXG5pbXBvcnQgeyBwYXJzZURhdGUsIGdldERhdGVQYXJ0QXRQb3NpdGlvbiB9IGZyb20gJy4uL3V0aWxzL2RhdGUuanMnXG5pbXBvcnQgeyBnZXRTZWxlY3Rpb24sIHNldFNlbGVjdGlvbiB9IGZyb20gJy4uL3V0aWxzL3NlbGVjdGlvbi5qcydcbmltcG9ydCB7IGdldEtleU5hdmlnYXRpb24gfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcbmltcG9ydCB7IGdldFRhcmdldCB9IGZyb20gJy4uL3V0aWxzL3RyaWdnZXIuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBDYWxlbmRhciwgSW5wdXRGaWVsZCwgSWNvbiB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICd1cGRhdGU6c2hvdycsICdjaGFuZ2UnLCAnZm9jdXMnLCAnYmx1ciddLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tLWxlZnQnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogJ3RyaWdnZXInIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogKCkgPT4gKHtcbiAgICAgICAgZGF0ZTogZGVmYXVsdEZvcm1hdHMuZGF0ZSxcbiAgICAgICAgdGltZTogZmFsc2VcbiAgICAgIH0pXG4gICAgfSxcbiAgICBkaXNhYmxlZERhdGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZSxcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgaW5wdXRGb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93UG9wdXBcbiAgICB9LFxuXG4gICAgaW5wdXQoKSB7XG4gICAgICByZXR1cm4gZ2V0VGFyZ2V0KHRoaXMpPy5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpXG4gICAgfSxcblxuICAgIGZvcm1hdE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgICAuLi50aGlzLmZvcm1hdFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpIHx8ICcnXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHBhcnNlRGF0ZSh2YWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKVxuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gZGF0ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0b1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUodmFsdWUpIHtcbiAgICAgIGlmICgrdmFsdWUgIT09ICt0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB2YWx1ZSlcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6c2hvdycsIHRvKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQodG8gPyAnZm9jdXMnIDogJ2JsdXInKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25Gb2N1cyhmb2N1cykge1xuICAgICAgdGhpcy5pbnB1dEZvY3VzZWQgPSBmb2N1c1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBmb2N1c1xuICAgIH0sXG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGNvbnN0IHsgdmVyOiBzdGVwLCBlbnRlciB9ID0gZ2V0S2V5TmF2aWdhdGlvbihldmVudClcbiAgICAgIGlmIChzdGVwIHx8IGVudGVyKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGdldFNlbGVjdGlvbih0aGlzLmlucHV0KT8uc3RhcnRcbiAgICAgICAgY29uc3QgZ2V0RGF0ZVBhcnQgPSBwb3NpdGlvbiA9PlxuICAgICAgICAgIGdldERhdGVQYXJ0QXRQb3NpdGlvbih0aGlzLmN1cnJlbnRUZXh0LCBwb3NpdGlvbiwgdGhpcy5mb3JtYXRPcHRpb25zKVxuXG4gICAgICAgIGlmIChzdGVwICYmICF0aGlzLnNob3dQb3B1cCkge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHsgY2FsZW5kYXIgfSA9IHRoaXMuJHJlZnNcbiAgICAgICAgICBpZiAoY2FsZW5kYXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmFtZTogbW9kZSwgc3RhcnQgfSA9IGdldERhdGVQYXJ0KHBvc2l0aW9uKSB8fCB7fVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBtb2RlICYmXG4gICAgICAgICAgICAgIGNhbGVuZGFyLm5hdmlnYXRlKHsgc3RlcCwgZW50ZXIsIG1vZGUsIHVwZGF0ZTogdHJ1ZSB9KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHNldFNlbGVjdGlvbih0aGlzLmlucHV0LCBnZXREYXRlUGFydChzdGFydCkpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbk1vdXNlRG93bih0b2dnbGUpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gIXRoaXMuZGlzYWJsZWQgJiYgKCF0b2dnbGUgfHwgIXRoaXMuc2hvd1BvcHVwKVxuICAgICAgaWYgKHRoaXMuc2hvd1BvcHVwKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWRhdGUtcGlja2VyIHtcbiAgLmRpdG8taW5wdXQge1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWluLXdpZHRoOiA4ZW07XG4gIH1cbn1cblxuLmRpdG8tZGF0ZS1waWNrZXItcG9wdXAge1xuICBtYXJnaW46ICRwb3B1cC1tYXJnaW47XG59XG48L3N0eWxlPlxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5UcmlnZ2VyLmRpdG8tdGltZS1waWNrZXIoXG4gIHJlZj1cInRyaWdnZXJcIlxuICB2LW1vZGVsOnNob3c9XCJzaG93UG9wdXBcIlxuICB0cmlnZ2VyPVwiZm9jdXNcIlxuICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbilcbiAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgc2xvdChcbiAgICAgIHYtaWY9XCIkc2xvdHMudHJpZ2dlclwiXG4gICAgICBuYW1lPVwidHJpZ2dlclwiXG4gICAgKVxuICAgIElucHV0RmllbGQuZGl0by10aW1lLXBpY2tlci1pbnB1dChcbiAgICAgIHYtZWxzZVxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRUZXh0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIlxuICAgICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQsIC4uLiRhdHRycyB9XCJcbiAgICAgIEBmb2N1cz1cIm9uRm9jdXModHJ1ZSlcIlxuICAgICAgQGJsdXI9XCJvbkZvY3VzKGZhbHNlKVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvbk1vdXNlRG93bihmYWxzZSlcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCNiZWZvcmUpXG4gICAgICAgIHNsb3QobmFtZT1cImJlZm9yZVwiKVxuICAgICAgdGVtcGxhdGUoI2FmdGVyKVxuICAgICAgICBJY29uKFxuICAgICAgICAgIG5hbWU9XCJjbG9ja1wiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIEBtb3VzZWRvd24ucHJldmVudD1cIm9uTW91c2VEb3duKHRydWUpXCJcbiAgICAgICAgKVxuICAgICAgICBzbG90KG5hbWU9XCJhZnRlclwiKVxuICB0ZW1wbGF0ZSgjcG9wdXApXG4gICAgLmRpdG8tdGltZS1waWNrZXItcG9wdXBcbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItaG91cihyZWY9XCJob3VyXCIpXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDI0XCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZEhvdXIoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IGhvdXIgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiaG91ciA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1taW51dGUocmVmPVwibWludXRlXCIpXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZE1pbnV0ZShpbmRleCAtIDEpXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogbWludXRlID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cIm1pbnV0ZSA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1zZWNvbmQocmVmPVwic2Vjb25kXCIpXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZFNlY29uZChpbmRleCAtIDEpXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogc2Vjb25kID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlY29uZCA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGZvcm1hdCwgZGVmYXVsdEZvcm1hdHMgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IFRyaWdnZXIgZnJvbSAnLi9UcmlnZ2VyLnZ1ZSdcbmltcG9ydCBJbnB1dEZpZWxkIGZyb20gJy4vSW5wdXRGaWVsZC52dWUnXG5pbXBvcnQgSWNvbiBmcm9tICcuL0ljb24udnVlJ1xuaW1wb3J0IHsgYWx0ZXJEYXRlLCBwYXJzZURhdGUsIGdldERhdGVQYXJ0QXRQb3NpdGlvbiB9IGZyb20gJy4uL3V0aWxzL2RhdGUuanMnXG5pbXBvcnQgeyBnZXRTZWxlY3Rpb24sIHNldFNlbGVjdGlvbiB9IGZyb20gJy4uL3V0aWxzL3NlbGVjdGlvbi5qcydcbmltcG9ydCB7IGdldEtleU5hdmlnYXRpb24gfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcbmltcG9ydCB7IGdldFRhcmdldCB9IGZyb20gJy4uL3V0aWxzL3RyaWdnZXIuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBJbnB1dEZpZWxkLCBJY29uIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ3VwZGF0ZTpzaG93JywgJ2NoYW5nZScsICdmb2N1cycsICdibHVyJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20tbGVmdCcgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiAndHJpZ2dlcicgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiAoKSA9PiAoe1xuICAgICAgICB0aW1lOiBkZWZhdWx0Rm9ybWF0cy50aW1lLFxuICAgICAgICBkYXRlOiBmYWxzZVxuICAgICAgfSlcbiAgICB9LFxuICAgIGRpc2FibGVkSG91cjogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZE1pbnV0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZFNlY29uZDogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgaWdub3JlTmV4dENoYW5nZTogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd1BvcHVwXG4gICAgfSxcblxuICAgIGlucHV0KCkge1xuICAgICAgcmV0dXJuIGdldFRhcmdldCh0aGlzKT8ucXVlcnlTZWxlY3RvcignaW5wdXQnKVxuICAgIH0sXG5cbiAgICBmb3JtYXRPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgLi4udGhpcy5mb3JtYXRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKSB8fCAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBwYXJzZURhdGUodmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucylcbiAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50RGF0ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlIHx8XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBEYXRlKCkgb2JqZWN0IHdpdGggdGhlIHRpbWUgc2V0IHRvIDAsIHRvIGJlIHVzZWQgd2hlblxuICAgICAgICAvLyBmaXJzdCBzZXR0aW5nIGFueSBvZiB0aGUgdGltZXMsIGZvciBtZWFuaW5nZnVsIGRhdGVzIGluIGNhc2UgdGhlXG4gICAgICAgIC8vIG9iamVjdCBpcyBzaGFyZWQgd2l0aCBhIERhdGVQaWNrZXIsIGUuZy4gdGhyb3VnaCBEYXRlVGltZVBpY2tlci5cbiAgICAgICAgYWx0ZXJEYXRlKG5ldyBEYXRlKCksIHsgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAsIG1pbGxpc2Vjb25kOiAwIH0pXG4gICAgICApXG4gICAgfSxcblxuICAgIGhvdXI6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0SG91cnMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KGhvdXIpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgaG91ciB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtaW51dGU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0TWludXRlcygpXG4gICAgICB9LFxuXG4gICAgICBzZXQobWludXRlKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IG1pbnV0ZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWNvbmQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0U2Vjb25kcygpXG4gICAgICB9LFxuXG4gICAgICBzZXQoc2Vjb25kKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IHNlY29uZCB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgICAgdGhpcy5zY3JvbGxBbGwodHJ1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKHZhbHVlKSB7XG4gICAgICBpZiAoK3ZhbHVlICE9PSArdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdmFsdWUpXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbHVlKVxuICAgICAgICB0aGlzLnNjcm9sbEFsbCh0cnVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dCgpIHtcbiAgICAgIGNvbnN0IHsgaW5wdXQgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbihpbnB1dClcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5mb2N1c2VkICYmXG4gICAgICAgICF0aGlzLmlnbm9yZU5leHRDaGFuZ2UgJiZcbiAgICAgICAgc2VsZWN0aW9uLnN0YXJ0ID09PSBzZWxlY3Rpb24uZW5kXG4gICAgICApIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKGlucHV0LCBzZWxlY3Rpb24pKVxuICAgICAgfVxuICAgICAgdGhpcy5pZ25vcmVOZXh0Q2hhbmdlID0gZmFsc2VcbiAgICB9LFxuXG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8pIHtcbiAgICAgICAgdGhpcy5zY3JvbGxBbGwoZmFsc2UpXG4gICAgICB9XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBsZWZ0UGFkKHZhbHVlKSB7XG4gICAgICByZXR1cm4gKCcwJyArIHZhbHVlKS5zbGljZSgtMilcbiAgICB9LFxuXG4gICAgc2V0VGltZShvdmVycmlkZXMpIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gYWx0ZXJEYXRlKHRoaXMuY3VycmVudERhdGUsIHtcbiAgICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgICAgICBtaWxsaXNlY29uZDogMFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2Nyb2xsQWxsKHNtb290aCkge1xuICAgICAgY29uc3Qgc2Nyb2xsID0gKHJlZiwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4kcmVmc1tyZWZdXG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gKFxuICAgICAgICAgICAgdGFyZ2V0LnNjcm9sbEhlaWdodCAvXG4gICAgICAgICAgICAvLyBGaXJzdCBhbmQgbGFzdCBvbmUgYWRkIDMgdGltZXMgdGhlIG1hcmdpbi5cbiAgICAgICAgICAgICh0YXJnZXQuY2hpbGRFbGVtZW50Q291bnQgKyA2KVxuICAgICAgICAgIClcbiAgICAgICAgICBjb25zdCB0b3AgPSBNYXRoLnJvdW5kKHZhbHVlICogbGluZUhlaWdodClcbiAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguYWJzKHRhcmdldC5zY3JvbGxUb3AgLSB0b3ApXG4gICAgICAgICAgdGFyZ2V0LnNjcm9sbFRvKHtcbiAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgIGJlaGF2aW9yOiBzbW9vdGggJiYgZGlzdGFuY2UgPCAxMDAgPyAnc21vb3RoJyA6ICdhdXRvJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsKCdob3VyJywgdGhpcy5ob3VyKVxuICAgICAgICBzY3JvbGwoJ21pbnV0ZScsIHRoaXMubWludXRlKVxuICAgICAgICBzY3JvbGwoJ3NlY29uZCcsIHRoaXMuc2Vjb25kKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25Gb2N1cyhmb2N1cykge1xuICAgICAgdGhpcy5pbnB1dEZvY3VzZWQgPSBmb2N1c1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBmb2N1c1xuICAgIH0sXG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGNvbnN0IHsgaW5wdXQgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbihpbnB1dClcbiAgICAgIGNvbnN0IHsgdmVyOiBzdGVwLCBlbnRlciB9ID0gZ2V0S2V5TmF2aWdhdGlvbihldmVudClcbiAgICAgIGlmIChzdGVwIHx8IGVudGVyKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICAgICAgICBjb25zdCBnZXREYXRlUGFydCA9IHBvc2l0aW9uID0+XG4gICAgICAgICAgZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uKHRoaXMuY3VycmVudFRleHQsIHBvc2l0aW9uLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG5cbiAgICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgICBpZiAoIXRoaXMuc2hvd1BvcHVwKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeyBuYW1lLCBzdGFydCB9ID0gZ2V0RGF0ZVBhcnQoc2VsZWN0aW9uLnN0YXJ0KSB8fCB7fVxuICAgICAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW25hbWVdICsgc3RlcFxuICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMuJHJlZnNbbmFtZV0uY2hpbGRFbGVtZW50Q291bnRcbiAgICAgICAgICAgICAgdGhpc1tuYW1lXSA9XG4gICAgICAgICAgICAgICAgdmFsdWUgPCAwXG4gICAgICAgICAgICAgICAgICA/IHZhbHVlICsgY291bnRcbiAgICAgICAgICAgICAgICAgIDogdmFsdWUgPj0gY291bnRcbiAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZSAtIGNvdW50XG4gICAgICAgICAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgICAgICAgdGhpcy5pZ25vcmVOZXh0Q2hhbmdlID0gdHJ1ZVxuICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24oaW5wdXQsIGdldERhdGVQYXJ0KHN0YXJ0KSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5zdGFydCA9PT0gc2VsZWN0aW9uLmVuZCkge1xuICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSBpbnB1dFxuICAgICAgICBsZXQgcG9zID0gc2VsZWN0aW9uLnN0YXJ0XG5cbiAgICAgICAgY29uc3QgaXNEaWdpdCA9IGNoYXIgPT4gIWlzTmFOKHBhcnNlSW50KGNoYXIsIDEwKSlcblxuICAgICAgICBpZiAoZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGlmIChpc0RpZ2l0KGV2ZW50LmtleSkgJiYgcG9zIDwgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHZhbHVlW3Bvc10gPT09ICc6JyAmJlxuICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3BvcyAtIDFdKSAmJlxuICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3BvcyAtIDJdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHBvcysrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZW1vdmUgbmV4dCBkaWdpdCBzbyB0aGUgZXZlbnQgb3ZlcnJpZGVzIGl0IGluc3RlYWQgb2YgaW5zZXJ0aW5nXG4gICAgICAgICAgICAvLyBuZXcgY2hhcnMuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zXSkgJiYgKFxuICAgICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zICsgMV0pIHx8XG4gICAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3MgLSAxXSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gKFxuICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKDAsIHBvcykgK1xuICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKHBvcyArIDEpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCB7IHN0YXJ0OiBwb3MsIGVuZDogcG9zIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKS5sZW5ndGhcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IGxlbmd0aCkge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IGxlbmd0aCkge1xuICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIGxlbmd0aClcbiAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCBzZWxlY3Rpb24pXG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBvcyA9PT0gMSB8fFxuICAgICAgICAgICAgWycgJywgJzonXS5pbmNsdWRlcyh2YWx1ZVtwb3MgLSAyXSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcG9zID09PSB2YWx1ZS5sZW5ndGggfHxcbiAgICAgICAgICAgICAgdmFsdWVbcG9zXSA9PT0gJzonXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcG9zLS1cbiAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSAoXG4gICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoMCwgcG9zKSArXG4gICAgICAgICAgICAgICAgKCh2YWx1ZVtwb3MgLSAxXSA/PyAnJykgKyAnMDAnKSArXG4gICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UocG9zICsgMSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzZXRTZWxlY3Rpb24oaW5wdXQsIHsgc3RhcnQ6IHBvcywgZW5kOiBwb3MgfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zXSkgJiZcbiAgICAgICAgICAgICAgIWlzRGlnaXQoK3ZhbHVlW3BvcyArIDFdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIFdoZW4gcmVtb3ZpbmcgdGhlIGZpcnN0IG9mIHR3byBkaWdpdHMsIHJlcGxhY2Ugd2l0aCAwXG4gICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgcG9zKSArICcwJyArIHZhbHVlLnNsaWNlKHBvcylcbiAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCB7IHN0YXJ0OiBwb3MsIGVuZDogcG9zIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uTW91c2VEb3duKHRvZ2dsZSkge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSAhdGhpcy5kaXNhYmxlZCAmJiAoIXRvZ2dsZSB8fCAhdGhpcy5zaG93UG9wdXApXG4gICAgICBpZiAodGhpcy5zaG93UG9wdXApIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdGltZS1waWNrZXIge1xuICAuZGl0by1pbnB1dCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWluLXdpZHRoOiA2ZW07XG4gIH1cbn1cblxuLmRpdG8tdGltZS1waWNrZXItcG9wdXAge1xuICBtYXgtd2lkdGg6IDE2MHB4O1xuICBtYXJnaW46ICRwb3B1cC1tYXJnaW47XG59XG5cbiR0aW1lLXBpY2tlci1saW5lLWhlaWdodDogMjRweDtcblxuLmRpdG8tdGltZS1waWNrZXIge1xuICAuZGl0by1pbnB1dCB7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuXG4uZGl0by10aW1lLXBpY2tlci1wb3B1cCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5kaXRvLXRpbWUtcGlja2VyLXBvcHVwIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgYm9yZGVyLXdpZHRoOiAwIDFweCAwO1xuICBtYXJnaW4tbGVmdDogLTFweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgd2lkdGg6IGNhbGMoMTAwJSAvIDMgKyAxcHgpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICY6bGFzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICB9XG5cbiAgdWwge1xuICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiAwO1xuICAgIC8vIEhpZGUgc2Nyb2xsYmFyOlxuICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgIHBhZGRpbmc6IDAgMTdweCAwIDA7XG4gICAgaGVpZ2h0OiA3ICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuXG4gICAgJiA+IGxpIHtcbiAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6ICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDMgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDMgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0O1xuICAgICAgfVxuXG4gICAgICAmLnNlbGVjdGVkLFxuICAgICAgJi5zZWxlY3RlZDpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIH1cblxuICAgICAgJi5kaXNhYmxlZCB7XG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZDtcbiAgICAgIH1cblxuICAgICAgJi5kaXNhYmxlZDpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1kYXRlLXRpbWUtcGlja2VyKHJlZj1cInBpY2tlclwiKVxuICAuZGl0by1kYXRlLXRpbWUtcGlja2VyX19pbm5lcig6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogZm9jdXNlZCB9XCIpXG4gICAgSW5wdXRGaWVsZC5kaXRvLWRhdGUtdGltZS1waWNrZXJfX2lucHV0KFxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRUZXh0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIlxuICAgICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQsIC4uLiRhdHRycyB9XCJcbiAgICAgIEBmb2N1cz1cIm9uRm9jdXModHJ1ZSlcIlxuICAgICAgQGJsdXI9XCJvbkZvY3VzKGZhbHNlKVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvbk1vdXNlRG93bihmYWxzZSlcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCNiZWZvcmUpXG4gICAgICAgIHNsb3QobmFtZT1cImJlZm9yZVwiKVxuICAgICAgdGVtcGxhdGUoI2FmdGVyKVxuICAgICAgICBJY29uKFxuICAgICAgICAgIG5hbWU9XCJjYWxlbmRhclwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIEBtb3VzZWRvd24ucHJldmVudD1cIm9uTW91c2VEb3duKHRydWUpXCJcbiAgICAgICAgKVxuICAgICAgICBzbG90KG5hbWU9XCJhZnRlclwiKVxuICAgIERhdGVQaWNrZXIoXG4gICAgICByZWY9XCJkYXRlXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1tb2RlbDpzaG93PVwic2hvd0RhdGVcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICAgICAgLy8tIEludGVudGlvbmFsbHkgZW1wdHlcbiAgICBUaW1lUGlja2VyKFxuICAgICAgcmVmPVwidGltZVwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtbW9kZWw6c2hvdz1cInNob3dUaW1lXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXG4gICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgICAgICAvLy0gSW50ZW50aW9uYWxseSBlbXB0eVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGZvcm1hdCwgZGVmYXVsdEZvcm1hdHMsIGFzc2lnbkRlZXBseSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQudnVlJ1xuaW1wb3J0IERhdGVQaWNrZXIgZnJvbSAnLi9EYXRlUGlja2VyLnZ1ZSdcbmltcG9ydCBUaW1lUGlja2VyIGZyb20gJy4vVGltZVBpY2tlci52dWUnXG5pbXBvcnQgSWNvbiBmcm9tICcuL0ljb24udnVlJ1xuaW1wb3J0IHsgcGFyc2VEYXRlIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcbmltcG9ydCB7IGdldFNlbGVjdGlvbiwgc2V0U2VsZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0aW9uLmpzJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCwgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgSWNvbiB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICdjaGFuZ2UnLCAnZm9jdXMnLCAnYmx1ciddLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBmb3JtYXQ6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZSxcbiAgICAgIHNob3dEYXRlOiBmYWxzZSxcbiAgICAgIHNob3dUaW1lOiBmYWxzZSxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICBkYXRlRm9jdXNlZDogZmFsc2UsXG4gICAgICB0aW1lRm9jdXNlZDogZmFsc2UsXG4gICAgICBjbG9zZWRNb2RlOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgdHJhbnNpdGlvbiwgZGlzYWJsZWQsIGxvY2FsZSwgZm9ybWF0T3B0aW9uczogZm9ybWF0IH0gPSB0aGlzXG4gICAgICByZXR1cm4geyB0cmFuc2l0aW9uLCBkaXNhYmxlZCwgbG9jYWxlLCBmb3JtYXQgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd0RhdGUgfHwgdGhpcy5zaG93VGltZVxuICAgIH0sXG5cbiAgICBpbnB1dCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLmlucHV0LmlucHV0XG4gICAgfSxcblxuICAgIGZvcm1hdE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gYXNzaWduRGVlcGx5KFxuICAgICAgICB7XG4gICAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgICB0aW1lOiBkZWZhdWx0Rm9ybWF0cy50aW1lLFxuICAgICAgICAgIGRhdGU6IGRlZmF1bHRGb3JtYXRzLmRhdGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgIG1vbnRoOiAnc2hvcnQnLFxuICAgICAgICAgICAgZm9ybWF0OiAodmFsdWUsIHR5cGUsIG9wdGlvbnMpID0+XG4gICAgICAgICAgICAgIHR5cGUgPT09ICdsaXRlcmFsJyAmJiAvXFxiYXRcXGIvLnRlc3QodmFsdWUpXG4gICAgICAgICAgICAgICAgPyAnLCAnXG4gICAgICAgICAgICAgICAgOiB0aGlzLmZvcm1hdD8uZGF0ZT8uZm9ybWF0Py4odmFsdWUsIHR5cGUsIG9wdGlvbnMpID8/IHZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB0aGlzLmZvcm1hdFxuICAgICAgKVxuICAgIH0sXG5cbiAgICB0aW1lSW5kZXgoKSB7XG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy5jdXJyZW50VGV4dFxuICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgY29uc3QgdGltZSA9IHRleHQubWF0Y2goLyhbXFxTXStcXHMqKSQvKT8uWzFdXG4gICAgICAgIGlmICh0aW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHRleHQubGVuZ3RoIC0gdGltZS5sZW5ndGhcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKSB8fCAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBwYXJzZURhdGUodmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucylcbiAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBnZXRTZWxlY3Rpb24odGhpcy5pbnB1dClcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24odGhpcy5pbnB1dCwgc2VsZWN0aW9uKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKHZhbHVlKSB7XG4gICAgICBpZiAoK3ZhbHVlICE9PSArdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdmFsdWUpXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQodG8gPyAnZm9jdXMnIDogJ2JsdXInKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25Gb2N1cyhmb2N1cykge1xuICAgICAgdGhpcy5pbnB1dEZvY3VzZWQgPSBmb2N1c1xuICAgICAgaWYgKGZvY3VzKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUG9wdXBzKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd0RhdGUgPSBmYWxzZVxuICAgICAgICB0aGlzLnNob3dUaW1lID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Nb3VzZURvd24odG9nZ2xlKSB7XG4gICAgICBpZiAodG9nZ2xlICYmICh0aGlzLnNob3dEYXRlIHx8IHRoaXMuc2hvd1RpbWUpKSB7XG4gICAgICAgIHRoaXMuc2hvd0RhdGUgPSBmYWxzZVxuICAgICAgICB0aGlzLnNob3dUaW1lID0gZmFsc2VcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLnVwZGF0ZVBvcHVwcygpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLmdldE1vZGUoZXZlbnQpXG4gICAgICB0aGlzLiRyZWZzW21vZGVdLm9uS2V5RG93bihldmVudClcbiAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgIHRoaXMuY2xvc2VkTW9kZSA9IG1vZGVcbiAgICAgIH0gZWxzZSBpZiAobW9kZSAhPT0gdGhpcy5jbG9zZWRNb2RlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUG9wdXBzKG1vZGUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldE1vZGUoZXZlbnQgPSBudWxsKSB7XG4gICAgICBjb25zdCB7IHN0YXJ0IH0gPSBnZXRTZWxlY3Rpb24odGhpcy5pbnB1dClcbiAgICAgIGNvbnN0IHsgaG9yOiBzdGVwIH0gPSBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgcmV0dXJuIHRoaXMudGltZUluZGV4ID09PSBudWxsIHx8IHN0YXJ0ICsgc3RlcCA8IHRoaXMudGltZUluZGV4XG4gICAgICAgID8gJ2RhdGUnXG4gICAgICAgIDogJ3RpbWUnXG4gICAgfSxcblxuICAgIHVwZGF0ZVBvcHVwcyhtb2RlID0gdGhpcy5nZXRNb2RlKCkpIHtcbiAgICAgIGlmIChtb2RlKSB7XG4gICAgICAgIHRoaXMuY2xvc2VkTW9kZSA9IG51bGxcbiAgICAgIH1cbiAgICAgIHRoaXMuc2hvd0RhdGUgPSBtb2RlID09PSAnZGF0ZSdcbiAgICAgIHRoaXMuc2hvd1RpbWUgPSBtb2RlID09PSAndGltZSdcbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kYXRlLXRpbWUtcGlja2VyIHtcbiAgJl9faW5uZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gIH1cblxuICAmX19pbnB1dCB7XG4gICAgZmxleDogMTtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIG1pbi13aWR0aDogMTJlbTtcbiAgfVxuXG4gIC5kaXRvLWRhdGUtcGlja2VyLFxuICAuZGl0by10aW1lLXBpY2tlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPCEtLSBlc2xpbnQtZGlzYWJsZSB2dWUvbm8tdGVtcGxhdGUtc2hhZG93IC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhZ2luYXRpb25cbiAgLmRpdG8tcGFnaW5hdGlvbi10b3RhbChcbiAgICB2LWlmPVwic2hvd1RvdGFsXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1pZj1cInRvdGFsID4gMFwiXG4gICAgKSB7eyBmaXJzdCB9fSDigJMge3sgbGFzdCB9fSAvIHt7IHRvdGFsIH19XG4gIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICAgIHYtaWY9XCJudW1QYWdlcyA+IDFcIlxuICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdi1mb3I9XCJidXR0b24gaW4gYnV0dG9uc1wiXG4gICAgICA6Y2xhc3M9XCJnZXRCdXR0b25DbGFzc2VzKGJ1dHRvbilcIlxuICAgICAgOmRpc2FibGVkPVwiYnV0dG9uLmRpc2FibGVkXCJcbiAgICAgIEBjbGljaz1cIm9uQ2xpY2tCdXR0b24oYnV0dG9uKVwiXG4gICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1pZj1cImJ1dHRvbi50ZXh0XCJcbiAgICAgICkge3sgYnV0dG9uLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTpwYWdlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBwYWdlOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMSB9LFxuICAgIHBhZ2VTaXplOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMTAgfSxcbiAgICBzaG93VG90YWw6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1ByZXY6IHRydWUsXG4gICAgICBzaG93TmV4dDogdHJ1ZSxcbiAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLnBhZ2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmaXJzdCgpIHtcbiAgICAgIHJldHVybiAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZSArIDFcbiAgICB9LFxuXG4gICAgbGFzdCgpIHtcbiAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLmZpcnN0ICsgdGhpcy5wYWdlU2l6ZSAtIDEsIHRoaXMudG90YWwpXG4gICAgfSxcblxuICAgIG51bVBhZ2VzKCkge1xuICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLnRvdGFsIC8gdGhpcy5wYWdlU2l6ZSlcbiAgICB9LFxuXG4gICAgYnV0dG9ucygpIHtcbiAgICAgIGNvbnN0IHsgc2hvd1ByZXYsIHNob3dOZXh0LCBjdXJyZW50UGFnZSwgbnVtUGFnZXMgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHNob3dMZW5ndGggPSBzaG93UHJldiArIHNob3dOZXh0ICsgMVxuXG4gICAgICBsZXQgc3RhcnQgPSAxXG4gICAgICBsZXQgZW5kID0gMVxuICAgICAgaWYgKG51bVBhZ2VzIDw9IHNob3dMZW5ndGgpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPD0gc2hvd1ByZXYgKyAxKSB7XG4gICAgICAgIGVuZCA9IHNob3dMZW5ndGhcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPj0gbnVtUGFnZXMgLSBzaG93TmV4dCkge1xuICAgICAgICBlbmQgPSBudW1QYWdlc1xuICAgICAgICBzdGFydCA9IG51bVBhZ2VzIC0gc2hvd0xlbmd0aCArIDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0ID0gY3VycmVudFBhZ2UgLSBzaG93UHJldlxuICAgICAgICBlbmQgPSBjdXJyZW50UGFnZSArIHNob3dOZXh0XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJ1dHRvbnMgPSBbXVxuICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgaW5kZXg6IGN1cnJlbnRQYWdlIC0gMSxcbiAgICAgICAgdHlwZTogJ3ByZXYnLFxuICAgICAgICBkaXNhYmxlZDogY3VycmVudFBhZ2UgPD0gMVxuICAgICAgfSlcbiAgICAgIGlmIChzdGFydCA+PSAyKSB7XG4gICAgICAgIGJ1dHRvbnMucHVzaCh7IGluZGV4OiAxLCB0ZXh0OiAxIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3RhcnQgPiAyKSB7XG4gICAgICAgIGJ1dHRvbnMucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWF4KDEsIGN1cnJlbnRQYWdlIC0gMTApLFxuICAgICAgICAgIHR5cGU6ICdlbGxpcHNpcy1wcmV2J1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgIGJ1dHRvbnMucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICBhY3RpdmU6IGkgPT09IGN1cnJlbnRQYWdlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoZW5kIDwgbnVtUGFnZXMgLSAxKSB7XG4gICAgICAgIGJ1dHRvbnMucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWluKG51bVBhZ2VzLCBjdXJyZW50UGFnZSArIDEwKSxcbiAgICAgICAgICB0eXBlOiAnZWxsaXBzaXMtbmV4dCdcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPD0gbnVtUGFnZXMgLSAxKSB7XG4gICAgICAgIGJ1dHRvbnMucHVzaCh7IGluZGV4OiBudW1QYWdlcywgdGV4dDogbnVtUGFnZXMgfSlcbiAgICAgIH1cbiAgICAgIGJ1dHRvbnMucHVzaCh7XG4gICAgICAgIGluZGV4OiBjdXJyZW50UGFnZSArIDEsXG4gICAgICAgIHR5cGU6ICduZXh0JyxcbiAgICAgICAgZGlzYWJsZWQ6IGN1cnJlbnRQYWdlID49IG51bVBhZ2VzXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gYnV0dG9uc1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHBhZ2UocGFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2VcbiAgICB9LFxuXG4gICAgcGFnZVNpemUoKSB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IHRoaXMubnVtUGFnZXMpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMubnVtUGFnZXNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFBhZ2UodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byAhPT0gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6cGFnZScsIHRvKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0QnV0dG9uQ2xhc3NlcyhidXR0b24pIHtcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSB7XG4gICAgICAgICdkaXRvLXNlbGVjdGVkJzogYnV0dG9uLmFjdGl2ZVxuICAgICAgfVxuICAgICAgaWYgKGJ1dHRvbi50eXBlKSB7XG4gICAgICAgIGNsYXNzZXNbYGRpdG8tYnV0dG9uLSR7YnV0dG9uLnR5cGV9YF0gPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3Nlc1xuICAgIH0sXG5cbiAgICBvbkNsaWNrQnV0dG9uKGJ1dHRvbikge1xuICAgICAgaWYgKFxuICAgICAgICBidXR0b24uaW5kZXggJiZcbiAgICAgICAgIWJ1dHRvbi5kaXNhYmxlZCAmJlxuICAgICAgICBidXR0b24uaW5kZXggIT09IHRoaXMuY3VycmVudFBhZ2VcbiAgICAgICkge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gYnV0dG9uLmluZGV4XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYWdpbmF0aW9uIHtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsIHtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgIG1hcmdpbjogMCAwLjVlbTtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbiB7XG4gICAgdHJhbnNpdGlvbjpcbiAgICAgIGFsbCAwLjNzIGVhc2UsXG4gICAgICBjb2xvciAwcyxcbiAgICAgIGJhY2tncm91bmQgMHMsXG4gICAgICBib3JkZXIgMHM7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICBwYWRkaW5nOiAwIDAuNWVtO1xuXG4gICAgJi1wcmV2LFxuICAgICYtbmV4dCB7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWFycm93O1xuICAgICAgfVxuICAgIH1cblxuICAgICYtcHJldjo6YmVmb3JlIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbiAgICB9XG5cbiAgICAmLWVsbGlwc2lzLXByZXYsXG4gICAgJi1lbGxpcHNpcy1uZXh0IHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIEBleHRlbmQgJWljb24tZWxsaXBzaXM7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXI6OmJlZm9yZSB7XG4gICAgICAgIEBleHRlbmQgJWljb24tY2hldnJvbnM7XG4gICAgICB9XG5cbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgICB9XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLWVsbGlwc2lzLXByZXY6OmJlZm9yZSB7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXN3aXRjaChcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIDpzdHlsZT1cInN0eWxlc1wiXG4pXG4gIC5kaXRvLXN3aXRjaC1wYW5lXG4gICAgaW5wdXQoXG4gICAgICA6aWQ9XCJpZFwiXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtbW9kZWw9XCJjaGVja2VkXCJcbiAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICA6bmFtZT1cIm5hbWVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgc3Bhbi5kaXRvLXN3aXRjaC1sYWJlbChcbiAgICAgIHYtaWY9XCJsYWJlbHNcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJjaGVja2VkXCJcbiAgICAgICAgbmFtZT1cImNoZWNrZWRcIlxuICAgICAgKSB7eyBsYWJlbHMuY2hlY2tlZCB8fCAnb24nIH19XG4gICAgICBzbG90KFxuICAgICAgICB2LWVsc2VcbiAgICAgICAgbmFtZT1cInVuY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy51bmNoZWNrZWQgfHwgJ29mZicgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ2NoYW5nZSddLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGlkOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbHM6IHsgdHlwZTogW09iamVjdCwgQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjaGVja2VkOiB0aGlzLm1vZGVsVmFsdWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy4kYXR0cnMuY2xhc3MsXG4gICAgICAgIHtcbiAgICAgICAgICAnZGl0by1jaGVja2VkJzogdGhpcy5jaGVja2VkLFxuICAgICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5kaXNhYmxlZFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWxzOiB7IGNoZWNrZWQsIHVuY2hlY2tlZCB9ID0ge30gfSA9IHRoaXNcbiAgICAgIC8vIENhbGN1bGF0ZSBgLS1zd2l0Y2gtd2lkdGhgIGluIGByZW1gLCBiYXNlZCBvbiBsYWJlbCBsZW5ndGguXG4gICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1heCgwLCBjaGVja2VkPy5sZW5ndGgsIHVuY2hlY2tlZD8ubGVuZ3RoKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJy0tc3dpdGNoLXdpZHRoJzogbGVuZ3RoID8gYCR7bGVuZ3RoICogMS41fXJlbWAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzOiBfLCAuLi5hdHRyaWJ1dGVzIH0gPSB0aGlzLiRhdHRyc1xuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKG1vZGVsVmFsdWUpIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IG1vZGVsVmFsdWVcbiAgICB9LFxuXG4gICAgY2hlY2tlZChjaGVja2VkKSB7XG4gICAgICBpZiAoY2hlY2tlZCAhPT0gdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgY2hlY2tlZClcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgY2hlY2tlZClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zd2l0Y2gge1xuICAvLyBVc2Ugd2hvbGUgbXVsdGlwbGVzIG9mIGByZW1gIGZvciBzaXplcyBhbmQgYHB4YCBtYXJnaW5zL3BhZGRpbmcgYWxvbmdcbiAgLy8gd2l0aCBgY2FsYygpYCB0byBlbmQgdXAgd2l0aCBldmVuIHBpeGVsIHNpemVzLlxuICAtLXN3aXRjaC13aWR0aDogNGVtO1xuICAtLXN3aXRjaC1oZWlnaHQ6IDJlbTtcbiAgLS1zd2l0Y2gtbWFyZ2luOiAycHg7XG4gIC0tc3dpdGNoLXBhZGRpbmc6IDNweDtcbiAgLS1zd2l0Y2gtc3BlZWQ6IDMwMG1zO1xuICAtLWxhYmVsLW1hcmdpbjogMC41ZW07XG4gIC0td2lkdGg6IGNhbGModmFyKC0tc3dpdGNoLXdpZHRoKSAtIDIgKiB2YXIoLS1zd2l0Y2gtbWFyZ2luKSk7XG4gIC0taGVpZ2h0OiBjYWxjKHZhcigtLXN3aXRjaC1oZWlnaHQpIC0gMiAqIHZhcigtLXN3aXRjaC1tYXJnaW4pKTtcbiAgLS1vZmZzZXQ6IGNhbGModmFyKC0td2lkdGgpIC0gdmFyKC0taGVpZ2h0KSk7XG5cbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogdmFyKC0tc3dpdGNoLWhlaWdodCk7XG4gIC8vIFRvIG1ha2UgaW5saW5lIGxhYmVscyBhcHBlYXIgb24gY29uc2lzdGVudCBiYXNlbGluZTpcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgLmRpdG8tc3dpdGNoLXBhbmUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogdmFyKC0td2lkdGgpO1xuICAgIGhlaWdodDogdmFyKC0taGVpZ2h0KTtcbiAgfVxuXG4gIC5kaXRvLXN3aXRjaC1wYW5lLFxuICAuZGl0by1zd2l0Y2gtbGFiZWwge1xuICAgIHRvcDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgfVxuXG4gIGlucHV0IHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYm9yZGVyLXJhZGl1czogMWVtO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodDtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgYm9yZGVyLWNvbG9yIDAuM3MsXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XG4gIH1cblxuICAuZGl0by1zd2l0Y2gtYnV0dG9uIHtcbiAgICAtLXNpemU6IGNhbGModmFyKC0taGVpZ2h0KSAtIDIgKiB2YXIoLS1zd2l0Y2gtcGFkZGluZykpO1xuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogdmFyKC0tc3dpdGNoLXBhZGRpbmcpO1xuICAgIGxlZnQ6IHZhcigtLXN3aXRjaC1wYWRkaW5nKTtcbiAgICB3aWR0aDogdmFyKC0tc2l6ZSk7XG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplKTtcbiAgICBib3JkZXItcmFkaXVzOiBjYWxjKHZhcigtLXNpemUpIC8gMik7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLXN3aXRjaC1zcGVlZCk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLWJ1dHRvbixcbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuXG4gIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiB2YXIoLS1sYWJlbC1tYXJnaW4pO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgfVxuXG4gICYuZGl0by1jaGVja2VkIHtcbiAgICBpbnB1dCB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cblxuICAgIC5kaXRvLXN3aXRjaC1idXR0b24ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHZhcigtLW9mZnNldCkpO1xuICAgIH1cblxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgICBsZWZ0OiB2YXIoLS1sYWJlbC1tYXJnaW4pO1xuICAgICAgcmlnaHQ6IHVuc2V0O1xuICAgIH1cbiAgfVxuXG4gICYuZGl0by1kaXNhYmxlZCB7XG4gICAgQGV4dGVuZCAlYnV0dG9uLWRpc2FibGVkO1xuICB9XG5cbiAgJjpmb2N1cy13aXRoaW46bm90KDpob3Zlcikge1xuICAgIC5kaXRvLXN3aXRjaC1idXR0b24ge1xuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy1mb2N1cztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IHsgaCBhcyBjcmVhdGVFbGVtZW50LCBUcmFuc2l0aW9uIH0gZnJvbSAndnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZnVuY3Rpb24gVHJhbnNpdGlvbkhlaWdodCh7IGVuYWJsZWQgfSwgeyBzbG90cyB9KSB7XG4gIHJldHVybiBlbmFibGVkXG4gICAgPyBjcmVhdGVFbGVtZW50KFRyYW5zaXRpb24sIHByb3BzLCBzbG90cylcbiAgICA6IHNsb3RzLmRlZmF1bHQoKVxufVxuXG5UcmFuc2l0aW9uSGVpZ2h0LnByb3BzID0ge1xuICBlbmFibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUcmFuc2l0aW9uSGVpZ2h0XG5cbmNvbnN0IHNldFN0eWxlID0gKGVsZW1lbnQsIHN0eWxlKSA9PiBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKVxuXG5jb25zdCBuZXh0VGltZW91dCA9IGNhbGxiYWNrID0+IHNldFRpbWVvdXQoY2FsbGJhY2ssIDApXG5cbi8vIEZvcmNlIHJlcGFpbnQgdG8gbWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgdHJpZ2dlcmVkIGNvcnJlY3RseS5cbmNvbnN0IGZvcmNlUmVwYWludCA9IGVsZW1lbnQgPT4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHRcblxuY29uc3QgcHJvcHMgPSB7XG4gIG5hbWU6ICdkaXRvLWhlaWdodCcsXG5cbiAgb25BZnRlckVudGVyKGVsZW1lbnQpIHtcbiAgICAvLyBBIHRpbWVvdXQgYmVmb3JlIHNldHRpbmcgc3R5bGUgaXMgb25seSByZWFsbHkgbmVlZGVkIGFmdGVyIGNhbGxzIHRvXG4gICAgLy8gYGZvcmNlUmVwYWludCgpYCwgYnV0IHVzaW5nIG9uZSBoZXJlIHRvbyBwcmVzZXJ2ZXMgZXhlY3V0aW9uIHNlcXVlbmNlIHNvXG4gICAgLy8gdGhhdCB0aGUgY2FsbCBmcm9tIGBlbnRlcigpYCBjYW4gbmV2ZXIgb3V0cnVuIHRoZSBvbmUgZnJvbSBgYWZ0ZXJFbnRlcigpYFxuICAgIG5leHRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiBudWxsIH0pKVxuICB9LFxuXG4gIG9uRW50ZXIoZWxlbWVudCkge1xuICAgIC8vIEZvciBzb21lIHJlYXNvbiB3ZSdyZSBnZXR0aW5nIHR3byBgb25FbnRlcigpYCBjYWxscyBwZXIgdHJhbnNpdGlvbixcbiAgICAvLyBzbyB3ZSBuZWVkIHRvIGlnbm9yZSB0aGUgc2Vjb25kIG9uZS4gVGhpcyBtaWdodCBiZSBsaW5rZWQgdG8gdGhlIHVzZVxuICAgIC8vIG9mIGBuZXh0VGltZW91dCgpYCwgd2hpY2ggaXMgcmVxdWlyZWQgdG8gZ2V0IHRoZSBjb3JyZWN0IHZhbHVlIGZvclxuICAgIC8vIGBoZWlnaHRgLCBiYXNlZCBvbiBgJi0tbGFiZWwtdmVydGljYWxgIGNhbGN1bGF0aW9ucy5cbiAgICBjb25zdCB7IHdpZHRoIH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwge1xuICAgICAgd2lkdGgsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgICAgaGVpZ2h0OiAnYXV0bydcbiAgICB9KVxuICAgIG5leHRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgICBzZXRTdHlsZShlbGVtZW50LCB7XG4gICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICBwb3NpdGlvbjogbnVsbCxcbiAgICAgICAgdmlzaWJpbGl0eTogbnVsbCxcbiAgICAgICAgaGVpZ2h0OiAwXG4gICAgICB9KVxuICAgICAgZm9yY2VSZXBhaW50KGVsZW1lbnQpXG4gICAgICBuZXh0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodCB9KSlcbiAgICB9KVxuICB9LFxuXG4gIG9uTGVhdmUoZWxlbWVudCkge1xuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBuZXh0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodDogMCB9KSlcbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuJGR1cmF0aW9uOiAwLjE1cztcblxuLmRpdG8taGVpZ2h0LWVudGVyLWFjdGl2ZSxcbi5kaXRvLWhlaWdodC1sZWF2ZS1hY3RpdmUge1xuICB0cmFuc2l0aW9uOiBoZWlnaHQgJGR1cmF0aW9uICRlYXNlLW91dC1xdWFydDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmRpdG8taGVpZ2h0LWVudGVyLWFjdGl2ZSB7XG4gIGFuaW1hdGlvbjogZGl0by1zbGlkZS1lbnRlciAkZHVyYXRpb24gJGVhc2Utb3V0LXF1YXJ0O1xufVxuXG4uZGl0by1oZWlnaHQtbGVhdmUtYWN0aXZlIHtcbiAgYW5pbWF0aW9uOiBkaXRvLXNsaWRlLWxlYXZlICRkdXJhdGlvbiAkZWFzZS1vdXQtcXVhcnQ7XG59XG5cbi5kaXRvLWhlaWdodC1lbnRlci1mcm9tLFxuLmRpdG8taGVpZ2h0LWxlYXZlLXRvIHtcbiAgaGVpZ2h0OiAwO1xufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IHVzZVNsb3RzLCBDb21tZW50IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgaXNTdHJpbmcsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzVk5vZGVDb250ZW50KHZub2RlKSB7XG4gIHJldHVybiB2bm9kZSAmJiBhc0FycmF5KHZub2RlKS5zb21lKHZub2RlID0+IHZub2RlLnR5cGUgIT09IENvbW1lbnQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNTbG90Q29udGVudChzbG90LCBwcm9wcyA9IHt9KSB7XG4gIHNsb3QgPSBpc1N0cmluZyhzbG90KSA/IHVzZVNsb3RzKClbc2xvdF0gOiBzbG90XG4gIHJldHVybiBoYXNWTm9kZUNvbnRlbnQoc2xvdD8uKHByb3BzKSlcbn1cbiIsImltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkb21IYW5kbGVyczogW11cbiAgICB9XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIGZvciAoY29uc3QgeyByZW1vdmUgfSBvZiB0aGlzLmRvbUhhbmRsZXJzKSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgICB0aGlzLmRvbUhhbmRsZXJzID0gW11cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZG9tT24oZWxlbWVudCwgdHlwZSwgaGFuZGxlcikge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYWRkRXZlbnRzKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBpc09iamVjdCh0eXBlKSA/IHR5cGUgOiB7IFt0eXBlXTogaGFuZGxlciB9XG4gICAgICApXG4gICAgICB0aGlzLmRvbUhhbmRsZXJzLnB1c2gocmVzdWx0KVxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b1VzZXIge1xuICBoYXNSb2xlKC4uLnJvbGVzKSB7XG4gICAgaWYgKHRoaXMucm9sZXMpIHtcbiAgICAgIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlcykge1xuICAgICAgICBpZiAodGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NoZW1hQ29tcG9uZW50czogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtYWluU2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50c1swXVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGBEaXRvU2NoZW1hLmNyZWF0ZWQoKS91bm1vdW50ZWQoKWAgb24gaXRzXG4gICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnRgLCBpZiB0aGUgcGFyZW50IHVzZXMgdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHNjaGVtYUNvbXBvbmVudCwgYWRkKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50cy5wdXNoKHNjaGVtYUNvbXBvbmVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMuc3BsaWNlKHNjaGVtYUNvbXBvbmVudHMuaW5kZXhPZihzY2hlbWFDb21wb25lbnQpLCAxKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFNjaGVtYVBhcmVudE1peGluIGZyb20gJy4vU2NoZW1hUGFyZW50TWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1NjaGVtYVBhcmVudE1peGluXSxcblxuICBjb21wdXRlZDoge1xuICAgIGVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZmxhdE1hcCgoeyBlcnJvcnMgfSkgPT4gZXJyb3JzIHx8IFtdKVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5zb21lKGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQudmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSkpXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52ZXJpZnlBbGwobWF0Y2gpKVxuICAgIH0sXG5cbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5yZXNldFZhbGlkYXRpb24oKSlcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5jbGVhckVycm9ycygpKVxuICAgIH0sXG5cbiAgICBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChcbiAgICAgICAgaXQgPT4gaXQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cylcbiAgICAgIClcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRDb21tb25QcmVmaXggfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtWYWxpZGF0b3JNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbG9hZDogZmFsc2UsXG4gICAgICAvLyBFYWNoIHJvdXRlLWNvbXBvbmVudCBkZWZpbmVzIGEgc3RvcmUgdGhhdCBnZXRzIHBhc3NlZCBvbiB0byBpdHNcbiAgICAgIC8vIGNoaWxkIGNvbXBvbmVudHMsIHNvIHRoZXkgY2FuIHN0b3JlIHZhbHVlcyBpbiB0aGVtIHRoYXQgbGl2ZSBiZXlvbmRcbiAgICAgIC8vIHRoZWlyIGxpZmUtY3ljbGUuIFNlZTogRGl0b1BhbmUsIFNvdXJjZU1peGluXG4gICAgICBzdG9yZToge30sXG4gICAgICBsb2FkQ2FjaGU6IHt9IC8vIFNlZSBUeXBlTWl4aW4ubG9hZCgpXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyByb3V0ZUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcm91dGVMZXZlbCgpIHtcbiAgICAgIGxldCBsZXZlbCA9IDBcbiAgICAgIGxldCByb3V0ZUNvbXBvbmVudCA9IHRoaXNcbiAgICAgIHdoaWxlICgocm91dGVDb21wb25lbnQgPSByb3V0ZUNvbXBvbmVudC5wYXJlbnRDb21wb25lbnQucm91dGVDb21wb25lbnQpKSB7XG4gICAgICAgIGxldmVsKytcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZXZlbFxuICAgIH0sXG5cbiAgICByb3V0ZVJlY29yZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5tYXRjaGVkW3RoaXMucm91dGVMZXZlbF1cbiAgICB9LFxuXG4gICAgaXNMYXN0Um91dGUoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGlzIHJvdXRlciBjb21wb25lbnQgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSByb3V0ZS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkID09PSBtYXRjaGVkW21hdGNoZWQubGVuZ3RoIC0gMV1cbiAgICB9LFxuXG4gICAgaXNMYXN0VW5uZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHJvdXRlIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlIHRoYXRcbiAgICAgIC8vIG5lZWRzIGl0cyBvd24gcm91dGVyLXZpZXcgKD0gaXMgbm90IG5lc3RlZCkuXG4gICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlXG4gICAgICBmb3IgKGxldCBpID0gbWF0Y2hlZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBtYXRjaGVkW2ldXG4gICAgICAgIGlmICghcmVjb3JkLm1ldGEubmVzdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IHJlY29yZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgaXNOZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEubmVzdGVkXG4gICAgfSxcblxuICAgIGlzVmlldygpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQ/Lm1ldGFcbiAgICB9LFxuXG4gICAgcGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJvdXRlUGF0aCh0aGlzLnJvdXRlUmVjb3JkPy5wYXRoKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iKCkge1xuICAgICAgY29uc3QgeyBicmVhZGNydW1iIH0gPSB0aGlzLnNjaGVtYSB8fCB7fVxuICAgICAgcmV0dXJuIGJyZWFkY3J1bWIgfHwgYCR7dGhpcy5icmVhZGNydW1iUHJlZml4fSAke3RoaXMubGFiZWx9YFxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfSxcblxuICAgIHBhcmFtKCkge1xuICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdnVlLXJvdXRlciBub3QgYmVpbmcgYWJsZSB0byBtYXAgbXVsdGlwbGUgdXJsIHBhcmFtZXRlcnNcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgbmFtZSB0byBtdWx0aXBsZSBjb21wb25lbnRzLCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhcmFtc1t0aGlzLm1ldGE/LnBhcmFtXSB8fCBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZSwgc2VlIERpdG9Gb3JtXG4gICAgaXNNdXRhdGluZygpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVSb3V0ZVVwZGF0ZSh0bywgZnJvbSwgbmV4dCkge1xuICAgIHRoaXM/LmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlTGVhdmUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzPy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIEtlZXAgYSBzaGFyZWQgc3RhY2sgb2Ygcm9vdCBjb21wb25lbnRzIGZvciBEaXRvVHJhaWwgdG8gdXNlIHRvIHJlbmRlclxuICAgIC8vIGxhYmVscy4gQ2FuJ3QgcmVseSBvbiAkcm91dGUubWF0Y2hlZFtpXS5pbnN0YW5jZXMuZGVmYXVsdCB1bmZvcnR1bmF0ZWx5LFxuICAgIC8vIGFzIGluc3RhbmNlcyBhcmVuJ3QgaW1tZWRpYXRlbHkgcmVhZHksIGFuZCBpbnN0YW5jZXMgaXMgbm90IHJlYWN0aXZlLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLnB1c2godGhpcylcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICByb3V0ZUNvbXBvbmVudHMuc3BsaWNlKHJvdXRlQ29tcG9uZW50cy5pbmRleE9mKHRoaXMpLCAxKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBiZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dCkge1xuICAgICAgbGV0IG9rID0gdHJ1ZVxuICAgICAgY29uc3QgaXNDbG9zaW5nID0gKFxuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0aGlzIHJvdXRlIGNoYW5nZSBpZiB0aGUgZm9ybSBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlXG4gICAgICAgIC8vIGBmcm9tYCByb3V0ZSwgYnV0IGluY2x1ZGUgcGFyZW50IGZvcm1zIG9mIGNsb3NpbmcgbmVzdGVkIGZvcm1zIGFzIGFzXG4gICAgICAgIC8vIHdlbGwsIGJ5IG1hdGNoaW5nIHRoZSB0aGUgc3RhcnQgb2YgZnJvbS90byBwYXRoIGFnYWluc3QgYHRoaXMucGF0aGA6XG4gICAgICAgIGZyb20ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgIXRvLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgIC8vIEV4Y2x1ZGUgaGFzaCBjaGFuZ2VzIG9ubHkgKD0gdGFiIGNoYW5nZXMpOlxuICAgICAgICBmcm9tLnBhdGggIT09IHRvLnBhdGggJiYgKFxuICAgICAgICAgIHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHx8XG4gICAgICAgICAgLy8gRGVjaWRlIGlmIHdlJ3JlIG1vdmluZyB0b3dhcmRzIGEgbmV3IG5lc3RlZCBmb3JtLCBvciBjbG9zaW5nIC9cbiAgICAgICAgICAvLyByZXBsYWNpbmcgYW4gYWxyZWFkeSBvcGVuIG9uZSBieSBjb21wYXJpbmcgcGF0aCBsZW5ndGhzLlxuICAgICAgICAgIC8vIFRoZSBjYXNlIG9mIGA9YCBtYXRjaGVzIHRoZSByZXBsYWNpbmcgb2YgYW4gYWxyZWFkeSBvcGVuIG9uZS5cbiAgICAgICAgICB0by5wYXRoLmxlbmd0aCA8PSBmcm9tLnBhdGgubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIGlmIChpc0Nsb3NpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNdXRhdGluZykge1xuICAgICAgICAgIC8vIEZvciBhY3RpdmUgZGlyZWN0bHkgbXV0YXRpbmcgKG5lc3RlZCkgZm9ybXMgdGhhdCB3ZXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgICAvLyB5ZXQsIHZhbGlkYXRlIHRoZW0gb25jZS4gSWYgdGhlIHVzZXIgdGhlbiBzdGlsbCB3YW50cyB0byBsZWF2ZVxuICAgICAgICAgIC8vIHRoZW0sIHRoZXkgY2FuIGNsaWNrIGNsb3NlIC8gbmF2aWdhdGUgYXdheSBhZ2Fpbi5cbiAgICAgICAgICBvayA9IChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgfHxcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGwoKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGUgZm9ybSBkb2Vzbid0IGRpcmVjdGx5IG11dGF0ZSBkYXRhLiBJZiBpdCBpcyBkaXJ0eSwgYXNrIGlmIHVzZXJcbiAgICAgICAgICAvLyB3YW50cyB0byBwZXJzaXN0IGRhdGEgZmlyc3QuXG4gICAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xuICAgICAgICAgICAgb2sgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICAgICAgYFlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHJlYWxseSB3YW50IHRvICR7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJicy5jYW5jZWxcbiAgICAgICAgICAgICAgfT9gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KG9rKVxuICAgIH0sXG5cbiAgICBnZXRSb3V0ZVBhdGgocmVjb3JkUGF0aCkge1xuICAgICAgLy8gTWFwcyB0aGUgcm91dGUncyBhY3R1YWwgcGF0aCB0byB0aGUgbWF0Y2hlZCByb3V0ZXMgYnkgY291bnRpbmcgaXRzXG4gICAgICAvLyBwYXJ0cyBzZXBhcmF0ZWQgYnkgJy8nLCBzcGxpdHRpbmcgdGhlIHBhdGggaW50byB0aGUgbWFwcGVkIHBhcnRzXG4gICAgICAvLyBjb250YWluaW5nIGFjdHVhbCBwYXJhbWV0ZXJzLlxuICAgICAgY29uc3QgeyBwYXRoIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgcmV0dXJuIHJlY29yZFBhdGhcbiAgICAgICAgPyBwYXRoXG4gICAgICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAgICAgLnNsaWNlKDAsIHJlY29yZFBhdGguc3BsaXQoJy8nKS5sZW5ndGgpXG4gICAgICAgICAgICAuam9pbignLycpXG4gICAgICAgIDogcGF0aFxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHtcbiAgICAgIC8vIFRoZSByb3V0ZSBwYXRoIGlzIHRoZSBwYXRoIHVwIHRvIHRoZSBmaXJzdCAvIChleGNsdWRpbmcgdGhlIGluaXRpYWwgLyk6XG4gICAgICBjb25zdCByb290UGF0aCA9IHRoaXMucGF0aC5tYXRjaCgvXihcXC9bXi9dKikvKVsxXVxuICAgICAgcmV0dXJuICFnZXRDb21tb25QcmVmaXgodG8ucGF0aCwgZnJvbS5wYXRoKS5zdGFydHNXaXRoKHJvb3RQYXRoKVxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRlbXBsYXRlKFxuICB2LWlmPVwidXNlclwiXG4pXG4gIC8vLSBPbmx5IHJlbmRlciBEaXRvVmlldyB3aGVuIGl0IGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIGEgbm9ybWFsIHJvdXRlci12aWV3XG4gIC8vLSBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbiAgLy8tIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuICAvLy0gdXNlZCB0byBhbHdheXMgcmVuZGVyIGZvcm1zIGV2ZW4gd2hlbiBvdGhlciBuZXN0ZWQgZm9ybXMgYXJlIHByZXNlbnQuXG4gIFJvdXRlclZpZXcoXG4gICAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gICAgOmtleT1cIm5hbWVcIlxuICApXG4gIC5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICAgIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlclNjaGVtYSh2aWV3U2NoZW1hKVwiXG4gICAgOmRhdGEtcmVzb3VyY2U9XCJzb3VyY2VTY2hlbWEucGF0aFwiXG4gIClcbiAgICBEaXRvU2NoZW1hKFxuICAgICAgOmtleT1cIm5hbWVcIlxuICAgICAgOnNjaGVtYT1cInZpZXdTY2hlbWFcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKG5hbWUpXCJcbiAgICAgIHBhZGRpbmc9XCJyb290XCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICBzY3JvbGxhYmxlXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCB7XG4gIGlzU2luZ2xlQ29tcG9uZW50VmlldyxcbiAgc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudFxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9WaWV3Jywge1xuICBtaXhpbnM6IFtSb3V0ZU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIC8vIFJlZGlyZWN0ICRzb3VyY2VDb21wb25lbnQgYW5kICRyZXNvdXJjZUNvbXBvbmVudCB0byB0aGUgbWFpbiBjb21wb25lbnQ6XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMubWFpbkNvbXBvbmVudD8uc291cmNlQ29tcG9uZW50IHx8IG51bGwsXG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMubWFpbkNvbXBvbmVudD8ucmVzb3VyY2VDb21wb25lbnQgfHwgbnVsbFxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBVcGRhdGVkIGZyb20gTG9hZGluZ01peGluIHRocm91Z2ggYHNldExvYWRpbmcoaXNMb2FkaW5nKWA6XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgLy8gTk9URTogRGF0YSBpcyBzaGFyZWQgYWNyb3NzIGFsbCB2aWV3cyBiZWNhdXNlIHRoZSByb3V0ZXIgcmVjeWNsZXMgdGhlXG4gICAgICAvLyBEaXRvVmlldyBjb21wb25lbnQuXG4gICAgICBkYXRhOiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEuc2NoZW1hXG4gICAgfSxcblxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICBpc1ZpZXcoKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBpc1NpbmdsZUNvbXBvbmVudFZpZXcoKSB7XG4gICAgICByZXR1cm4gaXNTaW5nbGVDb21wb25lbnRWaWV3KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBtYWluQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeURhdGFQYXRoKHRoaXMubmFtZSlcbiAgICB9LFxuXG4gICAgdmlld1NjaGVtYSgpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50LCAuLi5zY2hlbWEgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAvLyBUcmFuc2xhdGUgc2luZ2xlLWNvbXBvbmVudCBzY2hlbWFzIGludG8gbXVsdGktY29tcG9uZW50IHNjaGVtYXMsXG4gICAgICAvLyBzbyB0aGV5IGNhbiBiZSByZW5kZXJlZCBkaXJlY3RseSB0aHJvdWdoIERpdG9TY2hlbWEgYWxzbzpcbiAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50Vmlld1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgICAgW3NjaGVtYS5uYW1lXToge1xuICAgICAgICAgICAgICAgIG5hbWU6IHNjaGVtYS5uYW1lLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAuLi5jb21wb25lbnRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgOiBzY2hlbWFcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgcmV0dXJuIHNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnQodGhpcy52aWV3U2NoZW1hLCBoYXNSZXNvdXJjZSlcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGU6IHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8zMzkzI2lzc3VlY29tbWVudC0xMTU4NDcwMTQ5XG4gICAgICBmbHVzaDogJ3Bvc3QnLFxuICAgICAgaGFuZGxlcih0bywgZnJvbSkge1xuICAgICAgICAvLyBTZWUgaWYgdGhlIHJvdXRlIGNoYW5nZXMgY29tcGxldGVseSwgYW5kIGNsZWFyIHRoZSBkYXRhIGlmIGl0IGRvZXMuXG4gICAgICAgIGlmICh0aGlzLmlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSkge1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICB0aGlzLmRhdGEgPSB7fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRQYXRoKHBhdGgpIHtcbiAgICAgIC8vIExpc3RzIGluc2lkZSBzaW5nbGUtY29tcG9uZW50IHZpZXdzIHVzZSB0aGUgdmlldydzIHBhdGggZm9yIHN1Yi1wYXRoczpcbiAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50Vmlld1xuICAgICAgICA/IHRoaXMucGF0aFxuICAgICAgICA6IGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGRlZmluZUNvbXBvbmVudCwgcmVmLCB3YXRjaCwgb25TY29wZURpc3Bvc2UsIGggfSBmcm9tICd2dWUtZGVtaSc7XG5pbXBvcnQgeyBjcmVhdGVGb2N1c1RyYXAgfSBmcm9tICdmb2N1cy10cmFwJztcbmltcG9ydCB7IHVucmVmRWxlbWVudCB9IGZyb20gJ0B2dWV1c2UvY29yZSc7XG5cbmNvbnN0IFVzZUZvY3VzVHJhcCA9IC8qIEBfX1BVUkVfXyAqLyAvKiAjX19QVVJFX18gKi8gZGVmaW5lQ29tcG9uZW50KHtcbiAgbmFtZTogXCJVc2VGb2N1c1RyYXBcIixcbiAgcHJvcHM6IFtcImFzXCIsIFwib3B0aW9uc1wiXSxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMgfSkge1xuICAgIGxldCB0cmFwO1xuICAgIGNvbnN0IHRhcmdldCA9IHJlZigpO1xuICAgIGNvbnN0IGFjdGl2YXRlID0gKCkgPT4gdHJhcCAmJiB0cmFwLmFjdGl2YXRlKCk7XG4gICAgY29uc3QgZGVhY3RpdmF0ZSA9ICgpID0+IHRyYXAgJiYgdHJhcC5kZWFjdGl2YXRlKCk7XG4gICAgd2F0Y2goXG4gICAgICAoKSA9PiB1bnJlZkVsZW1lbnQodGFyZ2V0KSxcbiAgICAgIChlbCkgPT4ge1xuICAgICAgICBpZiAoIWVsKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdHJhcCA9IGNyZWF0ZUZvY3VzVHJhcChlbCwgcHJvcHMub3B0aW9ucyB8fCB7fSk7XG4gICAgICAgIGFjdGl2YXRlKCk7XG4gICAgICB9LFxuICAgICAgeyBmbHVzaDogXCJwb3N0XCIgfVxuICAgICk7XG4gICAgb25TY29wZURpc3Bvc2UoKCkgPT4gZGVhY3RpdmF0ZSgpKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHNsb3RzLmRlZmF1bHQpXG4gICAgICAgIHJldHVybiBoKHByb3BzLmFzIHx8IFwiZGl2XCIsIHsgcmVmOiB0YXJnZXQgfSwgc2xvdHMuZGVmYXVsdCgpKTtcbiAgICB9O1xuICB9XG59KTtcblxuZXhwb3J0IHsgVXNlRm9jdXNUcmFwIH07XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZGlhbG9nKFxuICByZWY9XCJkaWFsb2dcIlxuICByb2xlPVwiZGlhbG9nXCJcbiAgYXJpYS1leHBhbmRlZD1cInRydWVcIlxuICBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gIDpzdHlsZT1cInsgJy0td2lkdGgnOiBzZXR0aW5ncy53aWR0aCA/IGAke3NldHRpbmdzLndpZHRofXB4YCA6IG51bGwgfVwiXG4gIEBtb3VzZXVwPVwib25Nb3VzZVVwXCJcbilcbiAgVXNlRm9jdXNUcmFwLmRpdG8tZGlhbG9nX19mb2N1cy10cmFwKDpvcHRpb25zPVwiZm9jdXNUcmFwT3B0aW9uc1wiKVxuICAgIGZvcm0uZGl0by1zY3JvbGwtcGFyZW50KFxuICAgICAgQHN1Ym1pdC5wcmV2ZW50PVwic3VibWl0XCJcbiAgICApXG4gICAgICAvLyBBZGQgYW4gaW52aXNpYmxlIGJ1dHRvbiB0aGF0IHByZXZlbnRzIHRoZSBjbGVhcmFibGUgYnV0dG9ucyBmcm9tIGJlaW5nXG4gICAgICAvLyBwcmVzc2VkIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyB0aGUgRW50ZXIga2V5OlxuICAgICAgYnV0dG9uKFxuICAgICAgICB2LXNob3c9XCJmYWxzZVwiXG4gICAgICApXG4gICAgICBEaXRvU2NoZW1hKFxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICAgICAgcGFkZGluZz1cInJvb3RcIlxuICAgICAgICBzY3JvbGxhYmxlXG4gICAgICAgIGdlbmVyYXRlTGFiZWxzXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKCNidXR0b25zKVxuICAgICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBVc2VGb2N1c1RyYXAgfSBmcm9tICdAdnVldXNlL2ludGVncmF0aW9ucy91c2VGb2N1c1RyYXAvY29tcG9uZW50J1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9EaWFsb2cnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcbiAgY29tcG9uZW50czogeyBVc2VGb2N1c1RyYXAgfSxcbiAgZW1pdHM6IFsncmVtb3ZlJ10sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGRpYWxvZ0NvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIGNvbXBvbmVudHM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHByb21pc2U6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc2V0dGluZ3M6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6ICgpID0+ICh7XG4gICAgICAgIHdpZHRoOiA0ODAsXG4gICAgICAgIGNsaWNrVG9DbG9zZTogZmFsc2VcbiAgICAgIH0pXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgLy8gTWFrZSBzdXJlIGRpYWxvZyBkYXRhIGNvbnRhaW5zIGFsbCB0aGUgZXhwZWN0ZWQga2V5c1xuICAgIGNvbnN0IGRpYWxvZ0RhdGEgPSBjbG9uZSh0aGlzLmRhdGEpXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gZGlhbG9nRGF0YSkpIHtcbiAgICAgICAgZGlhbG9nRGF0YVtrZXldID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZGlhbG9nRGF0YVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdkaWFsb2cnLFxuICAgICAgICBjb21wb25lbnRzOiB0aGlzLmNvbXBvbmVudHNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGdldEJ1dHRvblNjaGVtYXModGhpcy5idXR0b25zKSkubWFwKFxuICAgICAgICAgIC8vIFByb2Nlc3MgdGhlIGJ1dHRvbiBzY2hlbWFzIHRvIGFkZCBkZWZhdWx0IGNsaWNrIGV2ZW50c1xuICAgICAgICAgIC8vIGZvciBib3RoICdzdWJtaXQnIGFuZCAnY2FuY2VsJyBidXR0b25zOlxuICAgICAgICAgIChba2V5LCBzY2hlbWFdKSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnY2FuY2VsJyAmJiAhc2NoZW1hLmV2ZW50cykge1xuICAgICAgICAgICAgICBzY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuY2FuY2VsKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGZvY3VzVHJhcE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICAgIGZhbGxiYWNrRm9jdXM6ICgpID0+IHRoaXMuJHJlZnMuZGlhbG9nLFxuICAgICAgICBvbkRlYWN0aXZhdGU6IHRoaXMuY2FuY2VsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGhhc0J1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5idXR0b25TY2hlbWFzKS5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIGhhc0NhbmNlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuYnV0dG9uU2NoZW1hcy5jYW5jZWxcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLmRvbU9uKHdpbmRvdywge1xuICAgICAga2V5dXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKCh0aGlzLmhhc0NhbmNlbCB8fCAhdGhpcy5oYXNCdXR0b25zKSAmJiBldmVudC5rZXlDb2RlID09PSAyNykge1xuICAgICAgICAgIHRoaXMuY2FuY2VsKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbW92ZSgpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ3JlbW92ZScpXG4gICAgfSxcblxuICAgIHJlc29sdmUodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvbWlzZS5yZXNvbHZlKHZhbHVlKVxuICAgICAgdGhpcy5yZW1vdmUoKVxuICAgIH0sXG5cbiAgICByZWplY3QodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvbWlzZS5yZWplY3QodmFsdWUpXG4gICAgICB0aGlzLnJlbW92ZSgpXG4gICAgfSxcblxuICAgIHN1Ym1pdCgpIHtcbiAgICAgIHRoaXMucmVzb2x2ZSh0aGlzLmRpYWxvZ0RhdGEpXG4gICAgfSxcblxuICAgIGNhbmNlbCgpIHtcbiAgICAgIC8vIFdoZW4gY2FuY2VsbGluZywgcmVzb2x2ZSBhcyBgdW5kZWZpbmVkYCBzbyB3ZSBjYW4gaGF2ZSBkaWFsb2dzXG4gICAgICAvLyByZXR1cm5pbmcgbnVsbCBhcyBhIGRlZmluZWQgdmFsdWUgYXMgd2VsbC5cbiAgICAgIHRoaXMucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgfSxcblxuICAgIGNsb3NlKCkge1xuICAgICAgdGhpcy5jYW5jZWwoKVxuICAgIH0sXG5cbiAgICBvbk1vdXNlVXAoKSB7XG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5jbGlja1RvQ2xvc2UpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGlhbG9nIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBkaXNwbGF5OiBmbGV4O1xuICBpbnNldDogMDtcbiAgei1pbmRleDogJHotaW5kZXgtZGlhbG9nO1xuICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgLy8gUHJldmVudCBzY3JvbGxpbmcgb2YgdGhlIHBhZ2UgYmVoaW5kIHRoZSBkaWFsb2c6XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTtcblxuICAmX19mb2N1cy10cmFwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gIH1cblxuICAvLyBUT0RPOiBgJl9faW5uZXJgXG4gIGZvcm0ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgbWF4LXdpZHRoOiB2YXIoLS13aWR0aCwgNDgwcHgpO1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gICAgYm94LXNoYWRvdzogMCAyMHB4IDYwcHggLTJweCByZ2JhKDI3LCAzMywgNTgsIDAuNCk7XG4gIH1cbn1cblxuLmRpdG8tZGlhbG9nLWVudGVyLWFjdGl2ZSxcbi5kaXRvLWRpYWxvZy1sZWF2ZS1hY3RpdmUge1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzO1xuXG4gIGZvcm0ge1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjI1cztcbiAgfVxufVxuXG4uZGl0by1kaWFsb2ctZW50ZXItZnJvbSxcbi5kaXRvLWRpYWxvZy1sZWF2ZS10byB7XG4gIG9wYWNpdHk6IDA7XG5cbiAgZm9ybSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMHB4KTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1yb290KFxuICA6ZGF0YS1hZ2VudC1icm93c2VyPVwiYXBwU3RhdGUuYWdlbnQuYnJvd3NlclwiXG4gIDpkYXRhLWFnZW50LXBsYXRmb3JtPVwiYXBwU3RhdGUuYWdlbnQucGxhdGZvcm1cIlxuICA6ZGF0YS1hZ2VudC12ZXJzaW9uPVwiYXBwU3RhdGUuYWdlbnQudmVyc2lvbk51bWJlclwiXG4pXG4gIFRyYW5zaXRpb24obmFtZT1cImRpdG8tZHJhZ1wiKVxuICAgIC5kaXRvLWRyYWctb3ZlcmxheShcbiAgICAgIHYtaWY9XCJpc0RyYWdnaW5nRmlsZXNcIlxuICAgIClcbiAgVHJhbnNpdGlvbkdyb3VwKG5hbWU9XCJkaXRvLWRpYWxvZ1wiKVxuICAgIERpdG9EaWFsb2coXG4gICAgICB2LWZvcj1cIihkaWFsb2csIGtleSkgaW4gZGlhbG9nc1wiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDpjb21wb25lbnRzPVwiZGlhbG9nLmNvbXBvbmVudHNcIlxuICAgICAgOmJ1dHRvbnM9XCJkaWFsb2cuYnV0dG9uc1wiXG4gICAgICA6cHJvbWlzZT1cImRpYWxvZy5wcm9taXNlXCJcbiAgICAgIDpkYXRhPVwiZGlhbG9nLmRhdGFcIlxuICAgICAgOnNldHRpbmdzPVwiZGlhbG9nLnNldHRpbmdzXCJcbiAgICAgIEByZW1vdmU9XCJyZW1vdmVEaWFsb2coa2V5KVwiXG4gICAgKVxuICBEaXRvTmF2aWdhdGlvblxuICBtYWluLmRpdG8tcGFnZS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gICAgdi1yZXNpemU9XCJvblJlc2l6ZVBhZ2VcIlxuICAgIDpjbGFzcz1cInBhZ2VDbGFzc2VzXCJcbiAgKVxuICAgIERpdG9IZWFkZXIoXG4gICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICApXG4gICAgUm91dGVyVmlld1xuICBEaXRvU2lkZWJhclxuICAgIERpdG9BY2NvdW50KFxuICAgICAgdi1pZj1cInVzZXJcIlxuICAgIClcbiAgICBhLmRpdG8tbG9naW4oXG4gICAgICB2LWVsc2UtaWY9XCJhbGxvd0xvZ2luXCJcbiAgICAgIEBjbGljaz1cInJvb3RDb21wb25lbnQubG9naW4oKVwiXG4gICAgKVxuICAgICAgc3BhbiBMb2dpblxuICBEaXRvTm90aWZpY2F0aW9ucyhyZWY9XCJub3RpZmljYXRpb25zXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZGVsZWdhdGUgYXMgdGlwcHlEZWxlZ2F0ZSB9IGZyb20gJ3RpcHB5LmpzJ1xuaW1wb3J0IHsgbWFwQ29uY3VycmVudGx5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IERpdG9Vc2VyIGZyb20gJy4uL0RpdG9Vc2VyLmpzJ1xuaW1wb3J0IERpdG9WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlJ1xuaW1wb3J0IERpdG9EaWFsb2cgZnJvbSAnLi9EaXRvRGlhbG9nLnZ1ZSdcbmltcG9ydCB7XG4gIHByb2Nlc3NWaWV3LFxuICByZXNvbHZlVmlld3MsXG4gIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUm9vdCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IERpdG9EaWFsb2cgfSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdmlld3M6ICgpID0+IHRoaXMucmVzb2x2ZWRWaWV3c1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHVucmVzb2x2ZWRWaWV3czogeyB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbiwgUHJvbWlzZV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgb3B0aW9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkVmlld3M6IHt9LFxuICAgICAgcmVtb3ZlUm91dGVzOiBudWxsLFxuICAgICAgZGlhbG9nczoge30sXG4gICAgICBwYWdlV2lkdGg6IDAsXG4gICAgICBsb2FkaW5nQ291bnQ6IDAsXG4gICAgICBhbGxvd0xvZ2luOiBmYWxzZSxcbiAgICAgIGlzRHJhZ2dpbmdGaWxlczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBub3RpZmljYXRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNNb3VudGVkICYmIHRoaXMuJHJlZnMubm90aWZpY2F0aW9uc1xuICAgIH0sXG5cbiAgICBpc0xvYWRpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ291bnQgPiAwXG4gICAgfSxcblxuICAgIHBhZ2VDbGFzc2VzKCkge1xuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tcGFnZSdcbiAgICAgIC8vIE5PVEU6IEtlZXAgc3luY2VkIHdpdGggJGNvbnRlbnQtd2lkdGggaW4gU0NTUzpcbiAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IDkwMFxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy5hcHBTdGF0ZS5wYWdlQ2xhc3MsXG4gICAgICAgIHtcbiAgICAgICAgICBbYCR7cHJlZml4fS0td2lkdGgtODBgXTogdGhpcy5wYWdlV2lkdGggPD0gY29udGVudFdpZHRoICogMC44LFxuICAgICAgICAgIFtgJHtwcmVmaXh9LS13aWR0aC02MGBdOiB0aGlzLnBhZ2VXaWR0aCA8PSBjb250ZW50V2lkdGggKiAwLjZcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuYXBwU3RhdGUudGl0bGUgPSBkb2N1bWVudC50aXRsZSB8fCAnRGl0by5qcyBBZG1pbidcbiAgICAvLyBXaXRoIGhvdC1yZWxvYWRpbmcsIGl0IGxvb2tzIGxpa2UgZGVzdHJveWVkIGhvb2tzIGFyZW4ndCBhbHdheXMgY2FsbGVkXG4gICAgLy8gZm9yIHJvdXRlIGNvbXBvbmVudHMgc28gcmVzZXQgdGhlIGFycmF5IG9mIHJlZ2lzdGVyZWQgY29tcG9uZW50cyBpbnN0ZWFkLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzID0gW11cbiAgfSxcblxuICBhc3luYyBtb3VudGVkKCkge1xuICAgIHRoaXMuc2V0dXBEcmFnQW5kRHJvcCgpXG5cbiAgICB0aXBweURlbGVnYXRlKHRoaXMuJGVsLCB7XG4gICAgICB0YXJnZXQ6ICcuZGl0by1pbmZvJyxcbiAgICAgIHRoZW1lOiAnaW5mbycsXG4gICAgICBhcHBlbmRUbzogbm9kZSA9PiBub2RlLmNsb3Nlc3QoJy5kaXRvLXBhbmUnKSxcbiAgICAgIGFuaW1hdGlvbjogJ3NoaWZ0LWF3YXktc3VidGxlJyxcbiAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgZGVsYXk6IDI1MCxcbiAgICAgIHpJbmRleDogMSxcbiAgICAgIG9uQ3JlYXRlKGluc3RhbmNlKSB7XG4gICAgICAgIGluc3RhbmNlLnNldENvbnRlbnQoaW5zdGFuY2UucmVmZXJlbmNlLmRhdGFzZXQuaW5mbylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gQ2xlYXIgdGhlIGxhYmVsIG1hcmtlZCBhcyBhY3RpdmUgb24gYWxsIG1vdXNlIGFuZCBrZXlib2FyZCBldmVudHMsIGV4Y2VwdFxuICAgIC8vIHRoZSBvbmVzIHRoYXQgRGl0b0xhYmVsIGl0c2VsZiBpbnRlcmNlcHRzLlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgIGNsaWNrOiBldmVudCA9PiB7XG4gICAgICAgIGlmICghZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5kaXRvLWxhYmVsJykpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmFsbG93TG9naW4gPSBmYWxzZVxuICAgICAgaWYgKGF3YWl0IHRoaXMuZmV0Y2hVc2VyKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlVmlld3MoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICB9XG4gICAgdGhpcy5hbGxvd0xvZ2luID0gdHJ1ZVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXR1cERyYWdBbmREcm9wKCkge1xuICAgICAgLy8gVGhpcyBjb2RlIG9ubHkgaGFwcGVucyB0aGUgdmlzdWFsIGVmZmVjdHMgYXJvdW5kIGRyYWdnaW5nIGFuZCBkcm9wcGluZ1xuICAgICAgLy8gZmlsZXMgaW50byBhIGBEaXRvVHlwZVVwbG9hZGAgY29tcG9uZW50LiBUaGUgYWN0dWFsIHVwbG9hZGluZyBpc1xuICAgICAgLy8gaGFuZGxlZCBieSB0aGUgYERpdG9UeXBlVXBsb2FkYCBjb21wb25lbnQgaXRzZWxmLlxuXG4gICAgICBsZXQgZHJhZ0NvdW50ID0gMFxuICAgICAgbGV0IHVwbG9hZHMgPSBbXVxuXG4gICAgICBjb25zdCB0b2dnbGVEcm9wVGFyZ2V0Q2xhc3MgPSBlbmFibGVkID0+IHtcbiAgICAgICAgZm9yIChjb25zdCB1cGxvYWQgb2YgdXBsb2Fkcykge1xuICAgICAgICAgIHVwbG9hZFxuICAgICAgICAgICAgLmNsb3Nlc3QoJy5kaXRvLWNvbnRhaW5lcicpXG4gICAgICAgICAgICAuY2xhc3NMaXN0LnRvZ2dsZSgnZGl0by1kcm9wLXRhcmdldCcsIGVuYWJsZWQpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICAgICAgdXBsb2FkcyA9IFtdXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2V0RHJhZ2dpbmdGaWxlcyA9IGVuYWJsZWQgPT4ge1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmdGaWxlcyA9IGVuYWJsZWRcbiAgICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgICB0b2dnbGVEcm9wVGFyZ2V0Q2xhc3ModHJ1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRvZ2dsZURyb3BUYXJnZXRDbGFzcyhmYWxzZSksIDE1MClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICAgIGRyYWdlbnRlcjogZXZlbnQgPT4ge1xuICAgICAgICAgIGlmICghZHJhZ0NvdW50ICYmIGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgICAgICAgdXBsb2FkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kaXRvLXVwbG9hZCcpXG4gICAgICAgICAgICBjb25zdCBoYXNVcGxvYWRzID0gdXBsb2Fkcy5sZW5ndGggPiAwXG4gICAgICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9IGhhc1VwbG9hZHMgPyAnY29weScgOiAnbm9uZSdcbiAgICAgICAgICAgIGlmIChoYXNVcGxvYWRzKSB7XG4gICAgICAgICAgICAgIHNldERyYWdnaW5nRmlsZXModHJ1ZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGRyYWdDb3VudCsrXG4gICAgICAgIH0sXG5cbiAgICAgICAgZHJhZ2xlYXZlOiBldmVudCA9PiB7XG4gICAgICAgICAgZHJhZ0NvdW50LS1cbiAgICAgICAgICBpZiAoIWRyYWdDb3VudCAmJiBldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgICAgIHNldERyYWdnaW5nRmlsZXMoZmFsc2UpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGRyYWdvdmVyOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgICAgICAgY29uc3QgY2FuRHJvcCA9IGV2ZW50LnRhcmdldC5jbG9zZXN0KFxuICAgICAgICAgICAgICAnLmRpdG8tY29udGFpbmVyOmhhcyguZGl0by11cGxvYWQpJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSBjYW5Ecm9wID8gJ2NvcHknIDogJ25vbmUnXG4gICAgICAgICAgICBpZiAoIWNhbkRyb3ApIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBkcm9wOiBldmVudCA9PiB7XG4gICAgICAgICAgZHJhZ0NvdW50ID0gMFxuICAgICAgICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgICAgIHNldERyYWdnaW5nRmlsZXMoZmFsc2UpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBub3RpZnkoeyB0eXBlID0gJ2luZm8nLCB0aXRsZSwgdGV4dCB9ID0ge30pIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5ub3RpZnkoeyB0eXBlLCB0aXRsZSwgdGV4dCB9KVxuICAgIH0sXG5cbiAgICBjbG9zZU5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuZGVzdHJveUFsbCgpXG4gICAgfSxcblxuICAgIHJlZ2lzdGVyTG9hZGluZyhpc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMubG9hZGluZ0NvdW50ICs9IGlzTG9hZGluZyA/IDEgOiAtMVxuICAgIH0sXG5cbiAgICBzaG93RGlhbG9nKHsgY29tcG9uZW50cywgYnV0dG9ucywgZGF0YSwgc2V0dGluZ3MgfSkge1xuICAgICAgLy8gU2hvd3MgYSBkaXRvLWRpYWxvZyBjb21wb25lbnQgYW5kIHdyYXBzIGl0IGluIGEgcHJvbWlzZSBzbyB0aGF0IHRoZVxuICAgICAgLy8gYnV0dG9ucyBpbiB0aGUgZGlhbG9nIGNhbiB1c2UgYGRpYWxvZy5yZXNvbHZlKClgIGFuZCBgZGlhbG9nLnJlamVjdCgpYFxuICAgICAgLy8gdG8gY2xvc2UgdGhlIG1vZGFsIGRpYWxvZyBhbmQgcmVzb2x2ZSAvIHJlamVjdCB0aGUgcHJvbWlzZSBhdCBvbmNlLlxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvclxuICAgICAgICBhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgLy8gUHJvY2VzcyBjb21wb25lbnRzIHRvIHJlc29sdmUgYXN5bmMgc2NoZW1hcy5cbiAgICAgICAgICBjb25zdCByb3V0ZXMgPSBbXVxuICAgICAgICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKFxuICAgICAgICAgICAgdGhpcy5hcGksXG4gICAgICAgICAgICB7IHR5cGU6ICdkaWFsb2cnLCBjb21wb25lbnRzIH0sXG4gICAgICAgICAgICByb3V0ZXMsXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKVxuICAgICAgICAgIGlmIChyb3V0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAnRGlhbG9ncyBkbyBub3Qgc3VwcG9ydCBjb21wb25lbnRzIHRoYXQgcHJvZHVjZSByb3V0ZXMnXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGtleSA9IGBkaWFsb2ctJHsrK2RpYWxvZ0lkfWBcbiAgICAgICAgICB0aGlzLmRpYWxvZ3Nba2V5XSA9IHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgICAgICBidXR0b25zLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHNldHRpbmdzLFxuICAgICAgICAgICAgcHJvbWlzZTogeyByZXNvbHZlLCByZWplY3QgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICByZW1vdmVEaWFsb2coa2V5KSB7XG4gICAgICBkZWxldGUgdGhpcy5kaWFsb2dzW2tleV1cbiAgICB9LFxuXG4gICAgYXN5bmMgbG9naW4oKSB7XG4gICAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFkZGl0aW9uYWxDb21wb25lbnRzLFxuICAgICAgICByZWRpcmVjdEFmdGVyTG9naW5cbiAgICAgIH0gPSB0aGlzLm9wdGlvbnMubG9naW4gfHwge31cbiAgICAgIGNvbnN0IGxvZ2luRGF0YSA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICB1c2VybmFtZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uYWRkaXRpb25hbENvbXBvbmVudHNcbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge1xuICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICB0ZXh0OiAnQ2FuY2VsJ1xuICAgICAgICAgICAgLy8gTk9URTogVGhlIGNsaWNrIGV2ZW50IGlzIGFkZGVkIGluIERpdG9EaWFsb2cuYnV0dG9uU2NoZW1hcygpXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGxvZ2luOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICAgIHRleHQ6ICdMb2dpbidcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBpZiAobG9naW5EYXRhKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5sb2dpbixcbiAgICAgICAgICAgIGRhdGE6IGxvZ2luRGF0YSxcbiAgICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAocmVkaXJlY3RBZnRlckxvZ2luKSB7XG4gICAgICAgICAgICBsb2NhdGlvbi5yZXBsYWNlKHJlZGlyZWN0QWZ0ZXJMb2dpbilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRVc2VyKHJlc3BvbnNlLmRhdGEudXNlcilcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzb2x2ZVZpZXdzKClcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gZXJyLnJlc3BvbnNlPy5kYXRhPy5lcnJvclxuICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICB0aXRsZTogJ0F1dGhlbnRpY2F0aW9uIEVycm9yJyxcbiAgICAgICAgICAgIHRleHQ6IGVycm9yIHx8IGVyclxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5yZXNwb25zZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2dpbigpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbmF2aWdhdGVIb21lKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGUoJy8nKVxuICAgIH0sXG5cbiAgICBhc3luYyBsb2dvdXQoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5sb2dvdXQsXG4gICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuc2V0VXNlcihudWxsKVxuICAgICAgICAgIHRoaXMubmF2aWdhdGVIb21lKClcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFVzZXIoKSB7XG4gICAgICBsZXQgdXNlciA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLnNlc3Npb24sXG4gICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgdXNlciA9IHJlc3BvbnNlLmRhdGEudXNlciB8fCBudWxsXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbiBFcnJvcicsXG4gICAgICAgICAgdGV4dDogZXJyXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICB0aGlzLnNldFVzZXIodXNlcilcbiAgICAgIHJldHVybiB1c2VyXG4gICAgfSxcblxuICAgIHNldFVzZXIodXNlcikge1xuICAgICAgdGhpcy5hcHBTdGF0ZS51c2VyID0gKFxuICAgICAgICB1c2VyICYmXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih1c2VyLCBEaXRvVXNlci5wcm90b3R5cGUpXG4gICAgICApXG4gICAgICAvLyBDbGVhciByZXNvbHZlZCB2aWV3cyB3aGVuIHVzZXIgaXMgbG9nZ2VkIG91dC5cbiAgICAgIGlmICghdXNlcikge1xuICAgICAgICB0aGlzLnJlc29sdmVkVmlld3MgPSB7fVxuICAgICAgICB0aGlzLm5hdmlnYXRlSG9tZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGVuc3VyZVVzZXIoKSB7XG4gICAgICBpZiAoIShhd2FpdCB0aGlzLmZldGNoVXNlcigpKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgcmVzb2x2ZVZpZXdzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFZpZXdzID0gYXdhaXQgcmVzb2x2ZVZpZXdzKHRoaXMudW5yZXNvbHZlZFZpZXdzKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCFlcnJvci5yZXF1ZXN0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgICAvLyBDb2xsZWN0IGFsbCByb3V0ZXMgZnJvbSB0aGUgcm9vdCBzY2hlbWEgY29tcG9uZW50c1xuICAgICAgY29uc3Qgcm91dGVzID0gYXdhaXQgbWFwQ29uY3VycmVudGx5KFxuICAgICAgICBPYmplY3QuZW50cmllcyh0aGlzLnJlc29sdmVkVmlld3MpLFxuICAgICAgICAoW25hbWUsIHNjaGVtYV0pID0+IHByb2Nlc3NWaWV3KERpdG9WaWV3LCB0aGlzLmFwaSwgc2NoZW1hLCBuYW1lKVxuICAgICAgKVxuICAgICAgLy8gTm93IHRoYXQgdGhlIHJvdXRlcyBhcmUgbG9hZGVkLCByZXBsYWNlIGFsbCBleGlzdGluZyByb3V0ZXMgd2l0aCB0aGVcbiAgICAgIC8vIG5ldyByb3V0ZXMsIGFuZCByZXN0b3JlIHRoZSBjdXJyZW50IHBhdGguXG4gICAgICBjb25zdCB7IGZ1bGxQYXRoIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgdGhpcy5yZW1vdmVSb3V0ZXM/LigpXG4gICAgICB0aGlzLnJlbW92ZVJvdXRlcyA9IGFkZFJvdXRlcyh0aGlzLiRyb3V0ZXIsIFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdyb290JyxcbiAgICAgICAgICBwYXRoOiAnLycsXG4gICAgICAgICAgY29tcG9uZW50czoge31cbiAgICAgICAgfSxcbiAgICAgICAgLi4ucm91dGVzLmZsYXQoKVxuICAgICAgXSlcbiAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKGZ1bGxQYXRoKVxuICAgIH0sXG5cbiAgICBvblJlc2l6ZVBhZ2UoeyBjb250ZW50UmVjdDogeyB3aWR0aCB9IH0pIHtcbiAgICAgIHRoaXMucGFnZVdpZHRoID0gd2lkdGhcbiAgICB9XG4gIH1cbn0pXG5cbmxldCBkaWFsb2dJZCA9IDBcblxuZnVuY3Rpb24gYWRkUm91dGVzKHJvdXRlciwgcm91dGVzKSB7XG4gIGNvbnN0IHJlbW92ZXJzID0gW11cbiAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXMpIHtcbiAgICBjb25zdCByZW1vdmUgPSByb3V0ZXIuYWRkUm91dGUocm91dGUpXG4gICAgcmVtb3ZlcnMucHVzaChyZW1vdmUpXG4gIH1cblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGZvciAoY29uc3QgcmVtb3ZlIG9mIHJlbW92ZXJzKSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL3N0eWxlJztcblxuLmRpdG8tYXBwLFxuLmRpdG8tcm9vdCB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG5cbi5kaXRvLXBhZ2Uge1xuICAtLW1heC1jb250ZW50LXdpZHRoOiAjeyRjb250ZW50LXdpZHRofTtcbiAgLS1tYXgtcGFnZS13aWR0aDogY2FsYyh2YXIoLS1tYXgtY29udGVudC13aWR0aCkgKyAyICogI3skY29udGVudC1wYWRkaW5nfSk7XG5cbiAgZmxleDogMCAxIHZhcigtLW1heC1wYWdlLXdpZHRoKTtcbiAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgbWluLXdpZHRoOiAwJTtcbiAgbWF4LXdpZHRoOiB2YXIoLS1tYXgtcGFnZS13aWR0aCk7XG4gIG92ZXJmbG93OiB2aXNpYmxlOyAvLyBGb3IgLmRpdG8taGVhZGVyIGZ1bGwtd2lkdGggYmFja2dyb3VuZC5cblxuICAmLS13aWRlIHtcbiAgICAtLW1heC1jb250ZW50LXdpZHRoOiAjeyRjb250ZW50LXdpZHRoLXdpZGV9O1xuICB9XG59XG5cbi5kaXRvLWFjY291bnQsXG4uZGl0by1sb2dpbiB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmRpdG8tZHJhZy1vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHotaW5kZXg6ICR6LWluZGV4LWRyYWctb3ZlcmxheTtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpO1xufVxuXG4uZGl0by1kcm9wLXRhcmdldCB7XG4gIC0tc2hhZG93LWFscGhhOiAwLjI1O1xuXG4gIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICB6LWluZGV4OiAkei1pbmRleC1kcmFnLW92ZXJsYXkgKyAxO1xuICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgNHB4IDhweCByZ2JhKDAsIDAsIDAsIHZhcigtLXNoYWRvdy1hbHBoYSkpKTtcbn1cblxuLmRpdG8tZHJhZy1lbnRlci1hY3RpdmUsXG4uZGl0by1kcmFnLWxlYXZlLWFjdGl2ZSB7XG4gICRkdXJhdGlvbjogMC4xNXM7XG5cbiAgdHJhbnNpdGlvbjpcbiAgICBvcGFjaXR5ICRkdXJhdGlvbixcbiAgICBiYWNrZHJvcC1maWx0ZXIgJGR1cmF0aW9uO1xuXG4gIH4gKiAuZGl0by1kcm9wLXRhcmdldCB7XG4gICAgdHJhbnNpdGlvbjogZmlsdGVyICRkdXJhdGlvbjtcbiAgfVxufVxuXG4uZGl0by1kcmFnLWVudGVyLWZyb20sXG4uZGl0by1kcmFnLWxlYXZlLXRvIHtcbiAgb3BhY2l0eTogMDtcbiAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDApO1xuXG4gIH4gKiAuZGl0by1kcm9wLXRhcmdldCB7XG4gICAgLS1zaGFkb3ctYWxwaGE6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudWwuZGl0by1tZW51KFxuICB2LXJlc2l6ZT1cIm9uUmVzaXplXCJcbiAgOnN0eWxlPVwieyAnLS13aWR0aCc6IHdpZHRoID8gYCR7d2lkdGh9cHhgIDogbnVsbCB9XCJcbilcbiAgbGkoXG4gICAgdi1mb3I9XCJpdGVtIGluIGl0ZW1zXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShpdGVtKVwiXG4gICAgKVxuICAgICAgYS5kaXRvLWxpbmsoXG4gICAgICAgIDpocmVmPVwiZ2V0SXRlbUhyZWYoaXRlbSlcIlxuICAgICAgICA6Y2xhc3M9XCJnZXRJdGVtQ2xhc3MoaXRlbSwgJ2RpdG8tc3ViLW1lbnUtbGluaycpXCJcbiAgICAgICAgQGNsaWNrLnByZXZlbnQuc3RvcD1cIm9uQ2xpY2tJdGVtKGl0ZW0pXCJcbiAgICAgICkge3sgZ2V0TGFiZWwoaXRlbSkgfX1cbiAgICAgIERpdG9NZW51KFxuICAgICAgICB2LWlmPVwiaXRlbS5pdGVtc1wiXG4gICAgICAgIDpjbGFzcz1cImdldEl0ZW1DbGFzcyhpdGVtLCAnZGl0by1zdWItbWVudScpXCJcbiAgICAgICAgOml0ZW1zPVwiaXRlbS5pdGVtc1wiXG4gICAgICAgIDpwYXRoPVwiZ2V0SXRlbVBhdGgoaXRlbSwgZmFsc2UpXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9NZW51Jywge1xuICBwcm9wczoge1xuICAgIGl0ZW1zOiB7XG4gICAgICB0eXBlOiBbT2JqZWN0LCBBcnJheV0sXG4gICAgICBkZWZhdWx0OiAoKSA9PiBbXVxuICAgIH0sXG4gICAgcGF0aDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IDBcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUmVzaXplKHsgY29udGVudFJlY3Q6IHsgd2lkdGggfSB9KSB7XG4gICAgICBpZiAod2lkdGgpIHtcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEl0ZW1DbGFzcyhpdGVtLCBzdWJNZW51Q2xhc3MpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtzdWJNZW51Q2xhc3NdOiAhIWl0ZW0uaXRlbXMsXG4gICAgICAgICdkaXRvLWFjdGl2ZSc6IHRoaXMuaXNBY3RpdmVJdGVtKGl0ZW0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEl0ZW1QYXRoKGl0ZW0sIGZpcnN0Q2hpbGQpIHtcbiAgICAgIGNvbnN0IHBhdGggPSBpdGVtLnBhdGggPyBgJHt0aGlzLnBhdGh9LyR7aXRlbS5wYXRofWAgOiBudWxsXG4gICAgICByZXR1cm4gZmlyc3RDaGlsZCAmJiBwYXRoICYmIGl0ZW0uaXRlbXNcbiAgICAgICAgPyBgJHtwYXRofSR7dGhpcy5nZXRJdGVtUGF0aChPYmplY3QudmFsdWVzKGl0ZW0uaXRlbXMpWzBdLCBmYWxzZSl9YFxuICAgICAgICA6IHBhdGhcbiAgICB9LFxuXG4gICAgZ2V0SXRlbUhyZWYoaXRlbSkge1xuICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0SXRlbVBhdGgoaXRlbSwgdHJ1ZSlcbiAgICAgIHJldHVybiBwYXRoID8gdGhpcy4kcm91dGVyLnJlc29sdmUocGF0aCkuaHJlZiA6IG51bGxcbiAgICB9LFxuXG4gICAgaXNBY3RpdmVJdGVtKGl0ZW0pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuJHJvdXRlLnBhdGguc3RhcnRzV2l0aCh0aGlzLmdldEl0ZW1QYXRoKGl0ZW0sIGZhbHNlKSkgfHxcbiAgICAgICAgaXRlbS5pdGVtcyAmJiBPYmplY3QudmFsdWVzKGl0ZW0uaXRlbXMpLnNvbWUodGhpcy5pc0FjdGl2ZUl0ZW0pXG4gICAgICApXG4gICAgfSxcblxuICAgIG9uQ2xpY2tJdGVtKGl0ZW0pIHtcbiAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmdldEl0ZW1QYXRoKGl0ZW0sIHRydWUpXG4gICAgICBpZiAocGF0aCkge1xuICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IHBhdGgsIGZvcmNlOiB0cnVlIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQHVzZSAnc2Fzczpjb2xvcic7XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1tZW51IHtcbiAgJGl0ZW0taGVpZ2h0OiAkbWVudS1mb250LXNpemUgKyAyICogJG1lbnUtcGFkZGluZy12ZXI7XG5cbiAgYm9yZGVyLXJpZ2h0OiAkYm9yZGVyLXN0eWxlO1xuICBwYWRkaW5nOiAwICRtZW51LXNwYWNpbmc7XG5cbiAgbGkge1xuICAgICY6aGFzKC5kaXRvLXN1Yi1tZW51Om5vdCguZGl0by1hY3RpdmUpKSB7XG4gICAgICAvLyBQb3Atb3V0IHN1Yi1tZW51cyBvbiBob3ZlcjpcbiAgICAgICY6aG92ZXIge1xuICAgICAgICAuZGl0by1zdWItbWVudS1saW5rIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlc3Q7XG4gICAgICAgIH1cblxuICAgICAgICAuZGl0by1zdWItbWVudSB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHdpZHRoOiB2YXIoLS13aWR0aCk7XG4gICAgICAgICAgei1pbmRleDogJHotaW5kZXgtaGVhZGVyO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChjYWxjKHZhcigtLXdpZHRoKSArIDIgKiAkbWVudS1zcGFjaW5nKSlcbiAgICAgICAgICAgIHRyYW5zbGF0ZVkoLSRpdGVtLWhlaWdodCk7XG5cbiAgICAgICAgICBsaTpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAuZGl0by1saW5rIHtcbiAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgICAgLy8gRmlsbCB0aGUgZ2FwIHRvIG5vdCBsb29zZSB0aGUgaG92ZXIgd2hlbiBtb3Zpbmcgb3ZlciBpdC5cbiAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgICAgbGVmdDogLTIgKiAkbWVudS1zcGFjaW5nO1xuICAgICAgICAgICAgd2lkdGg6IDIgKiAkbWVudS1zcGFjaW5nO1xuICAgICAgICAgICAgaGVpZ2h0OiAkaXRlbS1oZWlnaHQ7XG4gICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC5kaXRvLXN1Yi1tZW51LWxpbmssXG4gICAgICAgIC5kaXRvLXN1Yi1tZW51IHtcbiAgICAgICAgICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWxpbmsge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmc7XG4gICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0O1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIG1hcmdpbi10b3A6ICRtZW51LXNwYWNpbmc7XG5cbiAgICAmOmZvY3VzOm5vdCg6YWN0aXZlLCAuZGl0by1hY3RpdmUpIHtcbiAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctZm9jdXM7XG4gICAgfVxuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gICAgfVxuXG4gICAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1zdWItbWVudS1saW5rIHtcbiAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6IGNvbG9yLmFkanVzdCgkY29sb3ItYWN0aXZlLCAkYWxwaGE6IC0wLjMpO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXN1Yi1tZW51IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIGJvcmRlci1yaWdodDogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVzdDtcblxuICAgICYuZGl0by1hY3RpdmUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRyYWlsXG4gIHVsXG4gICAgbGkoXG4gICAgICB2LWZvcj1cImNvbXBvbmVudCBpbiB0cmFpbFwiXG4gICAgKVxuICAgICAgYS5kaXRvLWxpbmsoXG4gICAgICAgIDpjbGFzcz1cImdldExpbmtDbGFzcyhjb21wb25lbnQpXCJcbiAgICAgICAgOmhyZWY9XCJnZXRDb21wb25lbnRIcmVmKGNvbXBvbmVudClcIlxuICAgICAgICBAY2xpY2sucHJldmVudC5zdG9wPVwib25DbGlja0NvbXBvbmVudChjb21wb25lbnQpXCJcbiAgICAgIClcbiAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRTcGFuQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgc2xvdFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RyYWlsJywge1xuICBjb21wdXRlZDoge1xuICAgIHRyYWlsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLmZpbHRlcihcbiAgICAgICAgY29tcG9uZW50ID0+ICEhY29tcG9uZW50LnJvdXRlUmVjb3JkXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb21wb25lbnRQYXRoKGNvbXBvbmVudCkge1xuICAgICAgLy8gRG8gdGhlIHNhbWUgYXMgaW4gYERpdG9NZW51YDogTGluayBtZW51IGl0ZW1zIHRvIHRoZSBmaXJzdCBjaGlsZHJlbi5cbiAgICAgIGNvbnN0IHsgc2NoZW1hIH0gPSBjb21wb25lbnRcbiAgICAgIHJldHVybiBzY2hlbWEudHlwZSA9PT0gJ21lbnUnXG4gICAgICAgID8gT2JqZWN0LnZhbHVlcyhzY2hlbWEuaXRlbXMpWzBdLmZ1bGxQYXRoXG4gICAgICAgIDogY29tcG9uZW50LnBhdGhcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50SHJlZihjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZXIucmVzb2x2ZSh0aGlzLmdldENvbXBvbmVudFBhdGgoY29tcG9uZW50KSkuaHJlZlxuICAgIH0sXG5cbiAgICBvbkNsaWNrQ29tcG9uZW50KGNvbXBvbmVudCkge1xuICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICBwYXRoOiB0aGlzLmdldENvbXBvbmVudFBhdGgoY29tcG9uZW50KSxcbiAgICAgICAgZm9yY2U6IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldExpbmtDbGFzcyhjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWFjdGl2ZSc6IGNvbXBvbmVudC5wYXRoID09PSB0aGlzLiRyb3V0ZS5wYXRoXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFNwYW5DbGFzcyhjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWRpcnR5JzogY29tcG9uZW50LmlzRGlydHlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10cmFpbCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGhlaWdodDogM2VtO1xuXG4gIHVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICB9XG5cbiAgbGkge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cblxuICBhIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIHNwYW4ge1xuICAgICAgICBjb2xvcjogJGNvbG9yLWxpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxpOm5vdCg6bGFzdC1jaGlsZCkgYSB7XG4gICAgJGFuZ2xlOiAzM2RlZztcblxuICAgICY6OmJlZm9yZSxcbiAgICAmOjphZnRlciB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHdpZHRoOiAxcHg7XG4gICAgICBoZWlnaHQ6IDAuNzVlbTtcbiAgICAgIHJpZ2h0OiAtMC4yNWVtO1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgIH1cblxuICAgICY6OmJlZm9yZSB7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKCRhbmdsZSk7XG4gICAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3A7XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgYm90dG9tOiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtJGFuZ2xlKTtcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGJvdHRvbTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxubmF2LmRpdG8taGVhZGVyXG4gIERpdG9UcmFpbFxuICAgIERpdG9TcGlubmVyKFxuICAgICAgdi1pZj1cImlzTG9hZGluZ1wiXG4gICAgICA6c2l6ZT1cInNwaW5uZXI/LnNpemVcIlxuICAgICAgOmNvbG9yPVwic3Bpbm5lcj8uY29sb3JcIlxuICAgIClcbiAgLy8tIFRlbGVwb3J0IHRhcmdldCBmb3IgYC5kaXRvLXNjaGVtYS1oZWFkZXJgOlxuICAuZGl0by1oZWFkZXJfX3RlbGVwb3J0XG4gIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9IZWFkZXInLCB7XG4gIHByb3BzOiB7XG4gICAgc3Bpbm5lcjoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgaXNMb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1oZWFkZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJhY2tncm91bmQ6ICRjb2xvci1ibGFjaztcbiAgZm9udC1zaXplOiAkaGVhZGVyLWZvbnQtc2l6ZTtcbiAgbGluZS1oZWlnaHQ6ICRoZWFkZXItbGluZS1oZWlnaHQ7XG4gIHotaW5kZXg6ICR6LWluZGV4LWhlYWRlcjtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgJjo6YWZ0ZXIge1xuICAgIC8vIFNldCB0aGUgZnVsbC13aWR0aCBoZWFkZXIgYmFja2dyb3VuZCB0byB0aGUgaGVhZGVyIGNvbG9yLlxuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGluc2V0OiAwO1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYmFja2dyb3VuZDogaW5oZXJpdDtcbiAgICB6LWluZGV4OiAtMTtcbiAgfVxuXG4gIHNwYW4ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwYWRkaW5nOiAkaGVhZGVyLXBhZGRpbmc7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcblxuICAgICY6ZW1wdHkge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnXFwyMDBiJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZGl0by1kaXJ0eSB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICB3aWR0aDogOHB4O1xuICAgICAgaGVpZ2h0OiA4cHg7XG4gICAgICBtYXJnaW46IDJweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwLjVlbTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gICAgfVxuICB9XG5cbiAgJl9fdGVsZXBvcnQge1xuICAgIC8vIEFsaWduIHRoZSB0ZWxlcG9ydGVkIHNjaGVtYSBoZWFkZXJzIG9uIHRvcCBvZiB0byB0aGUgaGVhZGVyIG1lbnUuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBwYWRkaW5nOiAwICRoZWFkZXItcGFkZGluZy1ob3I7XG4gICAgLy8gVHVybiBvZmYgcG9pbnRlciBldmVudHMgc28gdGhhdCBEaXRvVHJhaWwga2VlcHMgcmVjZWl2aW5nIGV2ZW50cy4uLlxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIC8vIC4uLmJ1dCBtb3ZlIHRoZW0gdG8gdGhlIGNoaWxkcmVuLlxuICAgID4gKiB7XG4gICAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICB9XG5cbiAgICAuZGl0by1idXR0b24ge1xuICAgICAgbWFyZ2luOiAwIDAgJHRhYi1tYXJnaW4gJHRhYi1tYXJnaW47XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbm5hdi5kaXRvLW5hdmlnYXRpb24uZGl0by1zY3JvbGwtcGFyZW50XG4gIGgxXG4gICAgUm91dGVyTGluay5kaXRvLWxpbmsodG89XCIvXCIpIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gIERpdG9NZW51LmRpdG8tc2Nyb2xsKDppdGVtcz1cInZpZXdzXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvTmF2aWdhdGlvbicsIHt9KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbmF2aWdhdGlvbiB7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gIGZsZXg6IDAgMCBtaW4tY29udGVudDtcbiAgZm9udC1zaXplOiAkbWVudS1mb250LXNpemU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyO1xuXG4gIGgxIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBsaW5lLWhlaWdodDogJGhlYWRlci1saW5lLWhlaWdodDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyO1xuICAgIGJvcmRlci1yaWdodDogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItZGFya2VzdDtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuXG4gICAgLmRpdG8tbGluayB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBhZGRpbmc6ICRoZWFkZXItcGFkZGluZztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tbm90aWZpY2F0aW9uc1xuICAuZGl0by1oZWFkZXJcbiAgICBzcGFuXG4gIC5kaXRvLW5vdGlmaWNhdGlvbnNfX2lubmVyXG4gICAgVnVlTm90aWZpY2F0aW9ucyhcbiAgICAgIHJlZj1cIm5vdGlmaWNhdGlvbnNcIlxuICAgICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgICAgIDpkYW5nZXJvdXNseVNldElubmVySHRtbD1cInRydWVcIlxuICAgICAgcG9zaXRpb249XCJcIlxuICAgICAgd2lkdGg9XCJcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXNBcnJheSwgc3RyaXBUYWdzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvTm90aWZpY2F0aW9ucycsIHtcbiAgbm90aWZpY2F0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5pc01vdW50ZWQgJiYgdGhpcy4kcmVmcy5ub3RpZmljYXRpb25zXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG5vdGlmeSh7IHR5cGUgPSAnaW5mbycsIHRpdGxlLCB0ZXh0IH0gPSB7fSkge1xuICAgICAgdGl0bGUgfHw9IChcbiAgICAgICAge1xuICAgICAgICAgIHdhcm5pbmc6ICdXYXJuaW5nJyxcbiAgICAgICAgICBlcnJvcjogJ0Vycm9yJyxcbiAgICAgICAgICBpbmZvOiAnSW5mb3JtYXRpb24nLFxuICAgICAgICAgIHN1Y2Nlc3M6ICdTdWNjZXNzJ1xuICAgICAgICB9W3R5cGVdIHx8XG4gICAgICAgICdOb3RpZmljYXRpb24nXG4gICAgICApXG4gICAgICB0ZXh0ID0gYDxwPiR7XG4gICAgICAgIGFzQXJyYXkodGV4dCkuam9pbignPC9wPiA8cD4nKVxuICAgICAgfTwvcD5gLnJlcGxhY2UoL1xcbnxcXHJcXG58XFxyL2csICc8YnI+JylcbiAgICAgIGNvbnN0IGxvZyA9IChcbiAgICAgICAge1xuICAgICAgICAgIHdhcm5pbmc6ICd3YXJuJyxcbiAgICAgICAgICBlcnJvcjogJ2Vycm9yJyxcbiAgICAgICAgICBpbmZvOiAnbG9nJyxcbiAgICAgICAgICBzdWNjZXNzOiAnbG9nJ1xuICAgICAgICB9W3R5cGVdIHx8XG4gICAgICAgICdlcnJvcidcbiAgICAgIClcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlW2xvZ10oc3RyaXBUYWdzKHRleHQpKVxuICAgICAgY29uc3QgeyBub3RpZmljYXRpb25zID0gdHJ1ZSB9ID0gdGhpcy5hcGlcbiAgICAgIGlmIChub3RpZmljYXRpb25zKSB7XG4gICAgICAgIC8vIENhbGN1bGF0ZSBkaXNwbGF5LWR1cmF0aW9uIGZvciB0aGUgbm90aWZpY2F0aW9uIGJhc2VkIG9uIGl0cyBjb250ZW50XG4gICAgICAgIC8vIGFuZCB0aGUgc2V0dGluZyBvZiB0aGUgYGR1cmF0aW9uRmFjdG9yYCBjb25maWd1cmF0aW9uLiBJdCBkZWZpbmVzIHRoZVxuICAgICAgICAvLyBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIG11bHRpcGxpZWQgd2l0aCB0aGUgYW1vdW50IG9mIGNoYXJhY3RlcnNcbiAgICAgICAgLy8gZGlzcGxheWVkIGluIHRoZSBub3RpZmljYXRpb24sIHBsdXMgNDAgKDQwICsgdGl0bGUgKyBtZXNzYWdlKTpcbiAgICAgICAgY29uc3QgeyBkdXJhdGlvbkZhY3RvciA9IDIwIH0gPSBub3RpZmljYXRpb25zXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKDQwICsgdGV4dC5sZW5ndGggKyB0aXRsZS5sZW5ndGgpICogZHVyYXRpb25GYWN0b3JcbiAgICAgICAgdGhpcy4kbm90aWZ5KHsgdHlwZSwgdGl0bGUsIHRleHQsIGR1cmF0aW9uIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlc3Ryb3lBbGwoKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuZGVzdHJveUFsbCgpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQHVzZSAnc2Fzczpjb2xvcic7XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG5AbWl4aW4gdHlwZSgkYmFja2dyb3VuZCkge1xuICBiYWNrZ3JvdW5kOiBjb2xvci5hZGp1c3QoJGJhY2tncm91bmQsICRsaWdodG5lc3M6IDUlKTtcbiAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgYm9yZGVyLWxlZnQ6IDEycHggc29saWQgY29sb3IuYWRqdXN0KCRiYWNrZ3JvdW5kLCAkbGlnaHRuZXNzOiAtMTAlKTtcbn1cblxuLmRpdG8tbm90aWZpY2F0aW9ucyB7XG4gICRub3RpZmljYXRpb24td2lkdGg6IDMwMHB4O1xuXG4gIGZsZXg6IDE7XG4gIHotaW5kZXg6ICR6LWluZGV4LW5vdGlmaWNhdGlvbnM7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nO1xuICAvLyBGb3IgdGhlIGBAY29udGFpbmVyYCBydWxlIHRvIHdvcms6XG4gIGNvbnRhaW5lci10eXBlOiBpbmxpbmUtc2l6ZTtcblxuICAuZGl0by1oZWFkZXIge1xuICAgIHNwYW4ge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICB9XG4gIH1cblxuICAmX19pbm5lciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLnZ1ZS1ub3RpZmljYXRpb24tZ3JvdXAge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIHRvcDogMDtcbiAgICB3aWR0aDogJG5vdGlmaWNhdGlvbi13aWR0aDtcblxuICAgIEBjb250YWluZXIgKHdpZHRoIDwgI3skbm90aWZpY2F0aW9uLXdpZHRoICsgJGNvbnRlbnQtcGFkZGluZ30pIHtcbiAgICAgIGxlZnQ6IHVuc2V0O1xuICAgICAgcmlnaHQ6ICRjb250ZW50LXBhZGRpbmc7XG4gICAgfVxuICB9XG5cbiAgLnZ1ZS1ub3RpZmljYXRpb24td3JhcHBlciB7XG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIH1cblxuICAuZGl0by1ub3RpZmljYXRpb24ge1xuICAgIHBhZGRpbmc6IDhweDtcbiAgICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmcgMDtcbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcblxuICAgIC5ub3RpZmljYXRpb24tdGl0bGUge1xuICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogOHB4O1xuICAgIH1cblxuICAgIC5ub3RpZmljYXRpb24tY29udGVudCB7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgd29yZC1icmVhazogYnJlYWstYWxsO1xuXG4gICAgICBwIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAgICYgKyBwIHtcbiAgICAgICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLFxuICAgICYuaW5mbyB7XG4gICAgICBAaW5jbHVkZSB0eXBlKCRjb2xvci1hY3RpdmUpO1xuICAgIH1cblxuICAgICYuc3VjY2VzcyB7XG4gICAgICBAaW5jbHVkZSB0eXBlKCRjb2xvci1zdWNjZXNzKTtcbiAgICB9XG5cbiAgICAmLndhcm5pbmcge1xuICAgICAgQGluY2x1ZGUgdHlwZSgkY29sb3Itd2FybmluZyk7XG4gICAgfVxuXG4gICAgJi5lcnJvciB7XG4gICAgICBAaW5jbHVkZSB0eXBlKCRjb2xvci1lcnJvcik7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmFzaWRlLmRpdG8tc2lkZWJhci5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIHYtcmVzaXplPVwib25SZXNpemVTaWRlYmFyXCJcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4pXG4gIG5hdi5kaXRvLWhlYWRlclxuICAgIHNsb3RcbiAgLmRpdG8tc2lkZWJhcl9fdGVsZXBvcnQuZGl0by1zY3JvbGxcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9TaWRlYmFyJywge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaWRlYmFyV2lkdGg6IDBcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tc2lkZWJhcidcbiAgICAgIC8vIE5PVEU6IEtlZXAgc3luY2VkIHdpdGggJHNpZGViYXItbWF4LXdpZHRoIGluIFNDU1M6XG4gICAgICBjb25zdCBzaWRlYmFyV2lkdGggPSAzNjBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtgJHtwcmVmaXh9LS13aWR0aC05OWBdOiB0aGlzLnNpZGViYXJXaWR0aCA8IHNpZGViYXJXaWR0aCxcbiAgICAgICAgW2Ake3ByZWZpeH0tLXdpZHRoLTYwYF06IHRoaXMuc2lkZWJhcldpZHRoIDw9IHNpZGViYXJXaWR0aCAqIDAuNlxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25SZXNpemVTaWRlYmFyKHsgY29udGVudFJlY3Q6IHsgd2lkdGggfSB9KSB7XG4gICAgICB0aGlzLnNpZGViYXJXaWR0aCA9IHdpZHRoXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2lkZWJhciB7XG4gIGZsZXg6IDAgMSAkc2lkZWJhci1tYXgtd2lkdGg7XG4gIG1heC13aWR0aDogJHNpZGViYXItbWF4LXdpZHRoO1xuICBtaW4td2lkdGg6ICRzaWRlYmFyLW1pbi13aWR0aDtcbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi9Eb21NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1bGxkb3duOiB7XG4gICAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgICBzdGFydFRpbWU6IDAsXG4gICAgICAgIGNoZWNrVGltZTogdHJ1ZSxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgbW91c2Vkb3duOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgbW91c2V1cDogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub25QdWxsZG93bk1vdXNlVXAoKSkge1xuICAgICAgICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVyczogbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSA9IG51bGwpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLnNldFB1bGxkb3duT3Blbih0cnVlKVxuICAgICAgICB0aGlzLmNoZWNrVGltZSA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93bk1vdXNlVXAodmFsdWUgPSBudWxsKSB7XG4gICAgICBjb25zdCB7IHN0YXJ0VGltZSB9ID0gdGhpcy5wdWxsZG93blxuICAgICAgaWYgKCF0aGlzLmNoZWNrVGltZSB8fCBzdGFydFRpbWUgJiYgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPiAyNTApKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLm9uUHVsbGRvd25TZWxlY3QodmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93blNlbGVjdCgvKiB2YWx1ZSAqLykge1xuICAgICAgLy8gTk9URTogVG8gYmUgb3ZlcnJpZGRlbi5cbiAgICB9LFxuXG4gICAgc2V0UHVsbGRvd25PcGVuKG9wZW4pIHtcbiAgICAgIHRoaXMucHVsbGRvd24ub3BlbiA9IG9wZW5cbiAgICAgIHRoaXMucHVsbGRvd24uc3RhcnRUaW1lID0gb3BlbiA/IERhdGUubm93KCkgOiAwXG4gICAgICBpZiAob3Blbikge1xuICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwgdGhpcy5wdWxsZG93bi5ldmVudHMpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tYWNjb3VudFxuICBhKFxuICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gIClcbiAgICBzcGFuIHt7IHVzZXIudXNlcm5hbWUgfX1cbiAgdWwuZGl0by1wdWxsZG93big6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIilcbiAgICBsaShcbiAgICAgIHYtZm9yPVwiKGxhYmVsLCB2YWx1ZSkgb2YgaXRlbXNcIlxuICAgIClcbiAgICAgIGEoXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpXCJcbiAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh2YWx1ZSlcIlxuICAgICAgKSB7eyBsYWJlbCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUHVsbGRvd25NaXhpbiBmcm9tICcuLi9taXhpbnMvUHVsbGRvd25NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQWNjb3VudCcsIHtcbiAgbWl4aW5zOiBbUHVsbGRvd25NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHtcbiAgICAgICAgc2V0dGluZ3M6ICdTZXR0aW5ncycsXG4gICAgICAgIGxvZ291dDogJ0xvZ291dCdcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUHVsbGRvd25TZWxlY3QodmFsdWUpIHtcbiAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgY2FzZSAnbG9nb3V0JzpcbiAgICAgICAgICB0aGlzLnJvb3RDb21wb25lbnQubG9nb3V0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdzZXR0aW5ncyc6XG4gICAgICAgICAgY29uc29sZS5pbmZvKCdUT0RPOiBJbXBsZW1lbnQgU2V0dGluZ3MnKVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tYWNjb3VudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXG4gIC5kaXRvLXB1bGxkb3duIHtcbiAgICB0b3A6ICRwdWxsZG93bi1wYWRkaW5nLXZlcjtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5jb21wb25lbnQoXG4gIHYtaWY9XCJvcHRpb25zPy50ZXh0ICE9IG51bGxcIlxuICA6aXM9XCJ0YWdOYW1lXCJcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIDpzdHlsZT1cInN0eWxlc1wiXG4pIHt7IG9wdGlvbnMudGV4dCB9fVxuY29tcG9uZW50KFxuICB2LWVsc2UtaWY9XCJvcHRpb25zPy5odG1sICE9IG51bGxcIlxuICA6aXM9XCJ0YWdOYW1lXCJcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIDpzdHlsZT1cInN0eWxlc1wiXG4gIHYtaHRtbD1cIm9wdGlvbnMuaHRtbFwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0VsZW1lbnQnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFnOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NwYW4nIH0sXG4gICAgY29udGVudDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG9wdGlvbnMoKSB7XG4gICAgICBjb25zdCB7IGNvbnRlbnQgfSA9IHRoaXNcbiAgICAgIHJldHVybiBjb250ZW50ICE9IG51bGxcbiAgICAgICAgPyBpc09iamVjdChjb250ZW50KVxuICAgICAgICAgID8gY29udGVudFxuICAgICAgICAgIDogeyB0ZXh0OiBjb250ZW50IH1cbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIHRhZ05hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRhZyB8fCB0aGlzLnRhZ1xuICAgIH0sXG5cbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy4kYXR0cnMuY2xhc3MpLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuY2xhc3MpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMuJGF0dHJzLnN0eWxlKSxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLnN0eWxlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuZnVuY3Rpb24gYXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLnJlZHVjZSgob2JqZWN0LCBlbnRyeSkgPT4ge1xuICAgIGlmIChpc1N0cmluZyhlbnRyeSkpIHtcbiAgICAgIG9iamVjdFtlbnRyeV0gPSB0cnVlXG4gICAgfSBlbHNlIGlmIChpc09iamVjdChlbnRyeSkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqZWN0LCBlbnRyeSlcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdFxuICB9LCB7fSlcbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmNvbXBvbmVudC5kaXRvLWxhYmVsKFxuICB2LWlmPVwidGV4dCB8fCBjb2xsYXBzaWJsZVwiXG4gIDppcz1cInRhZ1wiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuKVxuICAuZGl0by1jaGV2cm9uKFxuICAgIHYtaWY9XCJjb2xsYXBzaWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogIWNvbGxhcHNlZCB9XCJcbiAgKVxuICAuZGl0by1sYWJlbF9faW5uZXIoXG4gICAgdi1pZj1cInRleHQgfHwgcHJlZml4ZXMubGVuZ3RoID4gMCB8fCBzdWZmaXhlcy5sZW5ndGggPiAwXCJcbiAgKVxuICAgIERpdG9FbGVtZW50LmRpdG8tbGFiZWxfX3ByZWZpeChcbiAgICAgIHYtZm9yPVwiKHByZWZpeCwgaW5kZXgpIG9mIHByZWZpeGVzXCJcbiAgICAgIDprZXk9XCJgcHJlZml4LSR7aW5kZXh9YFwiXG4gICAgICB0YWc9XCJzcGFuXCJcbiAgICAgIDpjb250ZW50PVwicHJlZml4XCJcbiAgICApXG4gICAgbGFiZWwoXG4gICAgICB2LWlmPVwidGV4dFwiXG4gICAgICA6Zm9yPVwiZGF0YVBhdGhcIlxuICAgICAgdi1odG1sPVwidGV4dFwiXG4gICAgKVxuICAgIERpdG9FbGVtZW50LmRpdG8tbGFiZWxfX3N1ZmZpeChcbiAgICAgIHYtZm9yPVwiKHN1ZmZpeCwgaW5kZXgpIG9mIHN1ZmZpeGVzXCJcbiAgICAgIDprZXk9XCJgc3VmZml4LSR7aW5kZXh9YFwiXG4gICAgICB0YWc9XCJzcGFuXCJcbiAgICAgIDpjb250ZW50PVwic3VmZml4XCJcbiAgICApXG4gICAgLmRpdG8taW5mbyhcbiAgICAgIHYtaWY9XCJpbmZvXCJcbiAgICAgIDpkYXRhLWluZm89XCJpbmZvXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvTGFiZWwnLCB7XG4gIGVtaXRzOiBbJ29wZW4nXSxcblxuICBwcm9wczoge1xuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGluZm86IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlID8gJ2EnIDogJ2RpdidcbiAgICB9LFxuXG4gICAgdGV4dCgpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChsYWJlbCkgPyBsYWJlbD8udGV4dCA6IGxhYmVsXG4gICAgfSxcblxuICAgIHByZWZpeGVzKCkge1xuICAgICAgcmV0dXJuIGFzQXJyYXkodGhpcy5sYWJlbD8ucHJlZml4KVxuICAgIH0sXG5cbiAgICBzdWZmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnN1ZmZpeClcbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlID8geyBvbkNsaWNrOiB0aGlzLm9uQ2xpY2sgfSA6IHt9XG4gICAgfSxcblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPT09IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2soKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gdGhpc1xuICAgICAgdGhpcy4kZW1pdCgnb3BlbicsIHRoaXMuY29sbGFwc2VkKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWxhYmVsIHtcbiAgJHNlbGY6ICY7XG5cbiAgLy8gRm9yIGJ1dHRvbnMgYW5kIGNoZXZyb24gdG8gYWxpZ24gcmlnaHQ6XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgLy8gVmVydGljYWxseSBjZW50ZXIgYWxsIGl0ZW1zIGluIHRoZSBsYWJlbCwgZS5nLiBjaGV2cm9uLCBlZGl0LWJ1dHRvbnMuXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1pbi1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG4gIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZy1oYWxmOyAvLyBXaGVuIGlubGluZWQuXG5cbiAgJjpoYXMoLmRpdG8tc2NoZW1hLWhlYWRlcikge1xuICAgIC8vIFRoZSBjb250YWluZXIncyBsYWJlbCBpcyB1c2VkIGFzIHRlbGVwb3J0IGZvciBhIG5lc3RlZCBzZWN0aW9uIG9yIG9iamVjdFxuICAgIC8vIGxhYmVsLiBIaWRlIGAmX19pbm5lcmAsIGFzIGl0IGlzIGJlIGR1cGxpY2F0ZWQgaW5zaWRlIHRoZSBuZXN0ZWQgbGFiZWwuXG4gICAgPiAjeyRzZWxmfV9faW5uZXIge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAmOm5vdCg6aGFzKCsgLmRpdG8tdGFicykpIHtcbiAgICAvLyBUYWtlIGZ1bGwgd2lkdGggYnV0IG9ubHkgaWYgdGhlcmUgYXJlbid0IGFsc28gdGFicyB0byBiZSBjZW50ZXJlZC5cbiAgICBmbGV4OiAxO1xuICB9XG5cbiAgJl9faW5uZXIge1xuICAgIGZsZXg6IDEgMCAwJTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gIGxhYmVsIHtcbiAgICBjdXJzb3I6IGluaGVyaXQ7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cblxuICBsYWJlbCxcbiAgJl9fcHJlZml4LFxuICAmX19zdWZmaXgge1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgfVxuXG4gICZfX3ByZWZpeCArIGxhYmVsLFxuICBsYWJlbCArICZfX3N1ZmZpeCB7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6ICdcXGEwJzsgLy8gJm5ic3A7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tYnV0dG9ucyB7XG4gICAgLy8gTW92ZSB0aGUgbGFiZWwgcGFkZGluZyBpbnNpZGUgLmRpdG8tYnV0dG9ucywgc28gdGhhdCBpdCBjYXB0dXJlcyBhbGxcbiAgICAvLyBuZWFyIG1vdXNlIGV2ZW50czpcbiAgICBtYXJnaW46IGNhbGMoLTEgKiB2YXIoLS1sYWJlbC1wYWRkaW5nKSk7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZyk7XG4gIH1cblxuICAmLmRpdG8td2lkdGgtZmlsbCB7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAvLyBJbiBvcmRlciBmb3IgZWxsaXBzaXMgdG8gd29yayBvbiBsYWJlbHMgd2l0aG91dCBhZmZlY3Rpbmcgb3RoZXIgbGF5b3V0LFxuICAgIC8vIHdlIG5lZWQgdG8gcG9zaXRpb24gaXQgYWJzb2x1dGVseSBpbnNpZGUgaXRzIGNvbnRhaW5lci4gQnV0IHdlIGNhbiBvbmx5XG4gICAgLy8gZG8gc28gaWYgdGhlcmUgaXMndCBhbHNvIGEgY2hldnJvbiBvciBvdGhlciBVWCBlbGVtZW50cyBiZXNpZGVzIGl0LlxuICAgICY6aGFzKD4gI3skc2VsZn1fX2lubmVyOm9ubHktY2hpbGQpIHtcbiAgICAgIGZsZXg6IDE7IC8vIFdoZW4gaW4gYC5kaXRvLXNjaGVtYS1oZWFkZXJgLlxuXG4gICAgICA+ICN7JHNlbGZ9X19pbm5lciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgaW5zZXQ6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgLy8gU2luY2UgPGxhYmVsPiB1c2VzIGBwb3NpdGlvbjogYWJzb2x1dGVgLCBzZXQgY29udGVudCB0byBhIHplcm8td2lkdGhcbiAgICAgIC8vIHNwYWNlIG9uIGl0cyBwYXJlbnQgdG8gZW5mb3JjZSB0aGUgcmlnaHQgdGV4dCBoZWlnaHQgaW4gdGhlIGNvbnRhaW5lclxuICAgICAgY29udGVudDogJ1xcMjAwYic7IC8vIHplcm8td2lkdGggc3BhY2U7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8taW5mbyB7XG4gICAgbWFyZ2luLWxlZnQ6IDAuMzVlbTtcbiAgfVxufVxuXG5hLmRpdG8tbGFiZWwge1xuICAmOmhvdmVyIHtcbiAgICAuZGl0by1jaGV2cm9uIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItZGFya2VyO1xuICAgIH1cbiAgfVxuXG4gICY6Zm9jdXM6bm90KDphY3RpdmUsIC5kaXRvLWFjdGl2ZSkge1xuICAgIC5kaXRvLWNoZXZyb24ge1xuICAgICAgLXdlYmtpdC10ZXh0LXN0cm9rZTogJGJvcmRlci13aWR0aCAkY29sb3ItYWN0aXZlO1xuICAgIH1cbiAgICAvLyBEaXNwbGF5IGxhYmVscyBpbiBjb21wYWN0IHNjaGVtYSBhcyBpbmxpbmUtYmxvY2tzLCB0byBhbGxvdyBjb21wYWN0XG4gICAgLy8gbGF5b3V0cyB3aXRoIGB3aWR0aDogJ2F1dG8nYCBlbGVtZW50czpcbiAgICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byBjb250cm9sIHRoaXMgYmVoYXZpb3IuXG4gIH1cbn1cblxuLmRpdG8tc2NoZW1hLWNvbXBhY3Qge1xuICA+IC5kaXRvLXNjaGVtYS1jb250ZW50IHtcbiAgICA+IC5kaXRvLXBhbmUge1xuICAgICAgPiAuZGl0by1jb250YWluZXI6bm90KC5kaXRvLWNvbnRhaW5lci0tbGFiZWwtdmVydGljYWwpIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQge1xuICBnZXRJdGVtRm9ybVNjaGVtYSxcbiAgZ2V0SXRlbUlkLFxuICBnZXRJdGVtVWlkLFxuICBpc0xpc3RTb3VyY2Vcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWV0aG9kczoge1xuICAgIGdldEl0ZW1Gb3JtU2NoZW1hLFxuXG4gICAgZ2V0SXRlbVVpZCxcblxuICAgIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4ID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnQgJiYgaW5kZXggIT09IG51bGxcbiAgICAgICAgPyBTdHJpbmcoaW5kZXgpXG4gICAgICAgIDogZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSlcbiAgICB9LFxuXG4gICAgZ2V0SXRlbURhdGFQYXRoKHNvdXJjZVNjaGVtYSwgaW5kZXgpIHtcbiAgICAgIGxldCB7IGRhdGFQYXRoIH0gPSB0aGlzXG4gICAgICBpZiAoc291cmNlU2NoZW1hICE9PSB0aGlzLnNjaGVtYSkge1xuICAgICAgICBkYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBzb3VyY2VTY2hlbWEubmFtZSlcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGluZGV4KVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFQYXRoXG4gICAgfSxcblxuICAgIGdldEl0ZW1TdG9yZShzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDaGlsZFN0b3JlKHRoaXMuZ2V0SXRlbVVpZChzb3VyY2VTY2hlbWEsIGl0ZW0pLCBpbmRleClcbiAgICB9LFxuXG4gICAgcmVtb3ZlSXRlbVN0b3JlKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXgpIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2hpbGRTdG9yZSh0aGlzLmdldEl0ZW1VaWQoc291cmNlU2NoZW1hLCBpdGVtKSwgaW5kZXgpXG4gICAgfSxcblxuICAgIGZpbmRJdGVtSWRJbmRleChzb3VyY2VTY2hlbWEsIGRhdGEsIGl0ZW1JZCkge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmlzVHJhbnNpZW50XG4gICAgICAgID8gLy8gRm9yIHRyYW5zaWVudCBkYXRhLCB0aGUgaW5kZXggaXMgdXNlZCBhcyB0aGUgaWRcbiAgICAgICAgICBpdGVtSWRcbiAgICAgICAgOiBkYXRhPy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoaXRlbSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgdGhpcy5nZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCkgPT09IGl0ZW1JZFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgIHJldHVybiBpbmRleCAhPT0gLTEgPyBpbmRleCA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0SXRlbUxhYmVsKHNvdXJjZVNjaGVtYSwgaXRlbSwge1xuICAgICAgaW5kZXggPSBudWxsLFxuICAgICAgZXh0ZW5kZWQgPSBmYWxzZSxcbiAgICAgIGFzT2JqZWN0ID0gZmFsc2VcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IHsgaXRlbUxhYmVsIH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgIGlmICghaXRlbSB8fCAhZXh0ZW5kZWQgJiYgaXRlbUxhYmVsID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YVBhdGhcbiAgICAgIGNvbnN0IGdldERhdGFQYXRoID0gKCkgPT5cbiAgICAgICAgKGRhdGFQYXRoID8/PSB0aGlzLmdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSlcblxuICAgICAgbGV0IGZvcm1MYWJlbFxuICAgICAgY29uc3QgZ2V0Rm9ybUxhYmVsID0gKCkgPT5cbiAgICAgICAgKGZvcm1MYWJlbCA/Pz0gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgICBnZXRJdGVtRm9ybVNjaGVtYShzb3VyY2VTY2hlbWEsIGl0ZW0sIHRoaXMuY29udGV4dClcbiAgICAgICAgKSlcblxuICAgICAgbGV0IHRleHRcbiAgICAgIGxldCBwcmVmaXhcbiAgICAgIGxldCBzdWZmaXhcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGl0ZW1MYWJlbCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBpdGVtTGFiZWwuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgaW5kZXgsXG5cbiAgICAgICAgICAgIGdldCBkYXRhUGF0aCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldERhdGFQYXRoKClcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldCBmb3JtTGFiZWwoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRGb3JtTGFiZWwoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgaWYgKGlzT2JqZWN0KGxhYmVsKSkge1xuICAgICAgICAgIDsoeyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9ID0gbGFiZWwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dCA9IGxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgLy8gSXQncyB1cCB0byBgaXRlbUxhYmVsKClgIGVudGlyZWx5IHRvIHByb2R1Y2UgdGhlIGxhYmVsOlxuICAgICAgICBleHRlbmRlZCA9IGZhbHNlXG4gICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKGl0ZW1MYWJlbCkgJiYgIShpdGVtTGFiZWwgaW4gaXRlbSkpIHtcbiAgICAgICAgLy8gYGl0ZW1MYWJlbGAgY2FuIGJlIGJvdGggYSBrZXksIG9yIHNpbXBseSBhIGxhYmVsLlxuICAgICAgICB0ZXh0ID0gaXRlbUxhYmVsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMb29rIHVwIHRoZSBuYW1lIG9uIHRoZSBpdGVtLCBieSB0aGVzZSBydWxlczpcbiAgICAgICAgLy8gMS4gSWYgYGl0ZW1MYWJlbGAgaXMgYSBzdHJpbmcsIHVzZSBpdCBhcyB0aGUgcHJvcGVydHkga2V5XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgdGhlcmUgYXJlIGNvbHVtbnMsIHVzZSB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0XG4gICAgICAgIC8vIDMuIE90aGVyd2lzZSwgc2VlIGlmIHRoZSBpdGVtIGhhcyBhIHByb3BlcnR5IG5hbWVkICduYW1lJ1xuICAgICAgICBjb25zdCB7IGNvbHVtbnMgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgICBjb25zdCBrZXkgPSAoXG4gICAgICAgICAgaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiBpdGVtTGFiZWwgfHxcbiAgICAgICAgICBpc0xpc3RTb3VyY2Uoc291cmNlU2NoZW1hKSAmJiBjb2x1bW5zICYmIE9iamVjdC5rZXlzKGNvbHVtbnMpWzBdIHx8XG4gICAgICAgICAgJ25hbWUnXG4gICAgICAgIClcbiAgICAgICAgdGV4dCA9IGl0ZW1ba2V5XVxuICAgICAgfVxuICAgICAgY29uc3QgaGFkTGFiZWwgPSAhIXRleHRcbiAgICAgIC8vIElmIG5vIGxhYmVsIHdhcyBmb3VuZCBzbyBmYXIsIHRyeSB0byBwcm9kdWNlIG9uZSBmcm9tIHRoZSBpbmRleC5cbiAgICAgIGlmICh0ZXh0ID09IG51bGwpIHtcbiAgICAgICAgLy8gQWx3YXlzIHVzZSBleHRlbmRlZCBzdHlsZSB3aGVuIGF1dG8tZ2VuZXJhdGluZyBsYWJlbHMgZnJvbSBpbmRleC9pZDpcbiAgICAgICAgZXh0ZW5kZWQgPSB0cnVlXG4gICAgICAgIHRleHQgPVxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGluZGV4ICE9PSBudWxsXG4gICAgICAgICAgICA/ICh0ZXh0ID0gYCR7aW5kZXggKyAxfWApXG4gICAgICAgICAgICA6ICcnXG4gICAgICB9XG4gICAgICBpZiAoZXh0ZW5kZWQpIHtcbiAgICAgICAgY29uc3QgZm9ybUxhYmVsID0gZ2V0Rm9ybUxhYmVsKClcbiAgICAgICAgaWYgKGZvcm1MYWJlbCkge1xuICAgICAgICAgIC8vIElmIGEgbGFiZWwgd2FzIHByb3ZpZGVkLCBwdXQgaW4gcXVvdGVzIHdoZW4gcHJlZml4ZWQgd2l0aCB0aGVcbiAgICAgICAgICAvLyBmb3JtIGxhYmVsIGZvciB0aGUgZXh0ZW5kZWQgc3R5bGU6XG4gICAgICAgICAgdGV4dCA9IGAke2Zvcm1MYWJlbH0gJHtoYWRMYWJlbCA/IGAnJHt0ZXh0fSdgIDogdGV4dH1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhc09iamVjdFxuICAgICAgICA/IHRleHQgfHwgcHJlZml4IHx8IHN1ZmZpeFxuICAgICAgICAgID8geyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9XG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIDogdGV4dFxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnNsb3QobmFtZT1cImJlZm9yZVwiKVxuLmRpdG8tc2NoZW1hKFxuICA6Y2xhc3M9XCJ7ICdkaXRvLXNjcm9sbC1wYXJlbnQnOiBzY3JvbGxhYmxlLCAnZGl0by1zY2hlbWEtLW9wZW4nOiBvcGVuZWQgfVwiXG4gIHYtYmluZD1cIiRhdHRyc1wiXG4pXG4gIFRlbGVwb3J0KFxuICAgIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBwYW5lbEVudHJpZXMubGVuZ3RoID4gMFwiXG4gICAgdG89XCIuZGl0by1zaWRlYmFyX190ZWxlcG9ydFwiXG4gIClcbiAgICBEaXRvUGFuZWxzKFxuICAgICAgOnBhbmVscz1cInBhbmVsRW50cmllc1wiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gIFRlbGVwb3J0KFxuICAgIHYtaWY9XCJoYXNIZWFkZXJcIlxuICAgIDp0bz1cImhlYWRlclRlbGVwb3J0XCJcbiAgICA6ZGlzYWJsZWQ9XCIhaGVhZGVyVGVsZXBvcnRcIlxuICApXG4gICAgLmRpdG8tc2NoZW1hLWhlYWRlclxuICAgICAgRGl0b0xhYmVsKFxuICAgICAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICA6Y29sbGFwc2VkPVwiIW9wZW5lZFwiXG4gICAgICAgIEBvcGVuPVwib25PcGVuXCJcbiAgICAgIClcbiAgICAgIFRyYW5zaXRpb24oXG4gICAgICAgIHYtaWY9XCJ0YWJzXCJcbiAgICAgICAgbmFtZT1cImRpdG8tZmFkZVwiXG4gICAgICApXG4gICAgICAgIERpdG9UYWJzKFxuICAgICAgICAgIHYtaWY9XCJvcGVuZWRcIlxuICAgICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFRhYlwiXG4gICAgICAgICAgOnRhYnM9XCJ0YWJzXCJcbiAgICAgICAgKVxuICAgICAgRGl0b0NsaXBib2FyZChcbiAgICAgICAgdi1pZj1cImNsaXBib2FyZFwiXG4gICAgICAgIDpjbGlwYm9hcmQ9XCJjbGlwYm9hcmRcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIClcbiAgICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuICBUcmFuc2l0aW9uSGVpZ2h0KDplbmFibGVkPVwiaW5saW5lZFwiKVxuICAgIC5kaXRvLXNjaGVtYS1jb250ZW50KFxuICAgICAgdi1pZj1cIm9wZW5lZFwiXG4gICAgICByZWY9XCJjb250ZW50XCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2Nyb2xsJzogc2Nyb2xsYWJsZSB9XCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cImhhc1RhYnNcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWZvcj1cIih0YWJTY2hlbWEsIHRhYikgaW4gdGFic1wiXG4gICAgICAgICAgOmtleT1cInRhYlwiXG4gICAgICAgIClcbiAgICAgICAgICAvLy0gVE9ETzogU3dpdGNoIHRvIHYtaWYgaW5zdGVhZCBvZiB2LXNob3csIG9uY2UgdmFsaWRhdGlvbiBpc1xuICAgICAgICAgIC8vLSBkZWNvdXBsZWQgZnJvbSBjb21wb25lbnRzLlxuICAgICAgICAgIERpdG9QYW5lLmRpdG8tcGFuZV9fdGFiKFxuICAgICAgICAgICAgdi1zaG93PVwic2VsZWN0ZWRUYWIgPT09IHRhYlwiXG4gICAgICAgICAgICByZWY9XCJ0YWJzXCJcbiAgICAgICAgICAgIDp0YWI9XCJ0YWJcIlxuICAgICAgICAgICAgOnNjaGVtYT1cInRhYlNjaGVtYVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgIDpwYWRkaW5nPVwicGFkZGluZ1wiXG4gICAgICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc01haW5QYW5lXCJcbiAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgICAgICAgIDphY2N1bXVsYXRlZEJhc2lzPVwiYWNjdW11bGF0ZWRCYXNpc1wiXG4gICAgICAgICAgKVxuICAgICAgRGl0b1BhbmUuZGl0by1wYW5lX19tYWluKFxuICAgICAgICB2LWlmPVwiaGFzTWFpblBhbmVcIlxuICAgICAgICByZWY9XCJjb21wb25lbnRzXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6cGFkZGluZz1cInBhZGRpbmdcIlxuICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc1RhYnNcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgICAgOmFjY3VtdWxhdGVkQmFzaXM9XCJhY2N1bXVsYXRlZEJhc2lzXCJcbiAgICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCIhaW5saW5lZCAmJiBpc1BvcHVsYXRlZFwiXG4gICAgICAgIG5hbWU9XCJidXR0b25zXCJcbiAgICAgIClcbiAgc2xvdChcbiAgICB2LWlmPVwiaW5saW5lZCAmJiAhaGFzSGVhZGVyXCJcbiAgICBuYW1lPVwiZWRpdC1idXR0b25zXCJcbiAgKVxuc2xvdChuYW1lPVwiYWZ0ZXJcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNBcnJheSxcbiAgaXNGdW5jdGlvbixcbiAgaXNSZWdFeHAsXG4gIGVxdWFscyxcbiAgcGFyc2VEYXRhUGF0aCxcbiAgbm9ybWFsaXplRGF0YVBhdGgsXG4gIGxhYmVsaXplXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBUcmFuc2l0aW9uSGVpZ2h0IH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuLi9taXhpbnMvSXRlbU1peGluLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGgsIGdldFBhcmVudEl0ZW0gfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgZ2V0TmFtZWRTY2hlbWFzLFxuICBnZXRQYW5lbEVudHJpZXMsXG4gIHNldERlZmF1bHRWYWx1ZXMsXG4gIHByb2Nlc3NEYXRhXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yLCBnZXRTdG9yZUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1NjaGVtYScsIHtcbiAgbWl4aW5zOiBbSXRlbU1peGluXSxcbiAgY29tcG9uZW50czogeyBUcmFuc2l0aW9uSGVpZ2h0IH0sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNjaGVtYUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBpbmplY3Q6IFtcbiAgICAnJHNjaGVtYVBhcmVudENvbXBvbmVudCdcbiAgXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcGFkZGluZzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBpbmxpbmVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHNjcm9sbGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBoYXNPd25EYXRhOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbE5vZGU6IHsgdHlwZTogSFRNTEVsZW1lbnQsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBhY2N1bXVsYXRlZEJhc2lzOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBwcm92aWRlIG1vcmUgZGF0YSB0aHJvdWdoIGBzY2hlbWEuZGF0YWAsIHZ1ZS1zdHlsZTpcbiAgICAgIC4uLihcbiAgICAgICAgZGF0YSAmJiBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgICAgPyBkYXRhKHRoaXMuY29udGV4dClcbiAgICAgICAgICA6IGRhdGFcbiAgICAgICksXG4gICAgICBjdXJyZW50VGFiOiBudWxsLFxuICAgICAgY29tcG9uZW50c1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZWxzUmVnaXN0cnk6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgc2NoZW1hQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBEb24ndCByZXR1cm4gdGhlIGFjdHVhbCBwYXJlbnQgc2NoZW1hIGlzIHRoaXMgc2NoZW1hIGhhbmRsZXMgaXRzIG93blxuICAgICAgLy8gZGF0YS4gVGhpcyBwcmV2ZW50cyBkZWxlZ2F0aW5nIGV2ZW50cyB0byB0aGUgcGFyZW50LCBhbmQgcmVnaXN0ZXJpbmdcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCB0aGUgcGFyZW50IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gc2V0IGlzRGlydHkgZmxhZ3MuXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gbnVsbCA6IHRoaXMucGFyZW50Q29tcG9uZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYW5lbEVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0UGFuZWxFbnRyaWVzKHRoaXMuc2NoZW1hLnBhbmVscywgdGhpcy5kYXRhUGF0aClcbiAgICB9LFxuXG4gICAgdGFicygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEudGFicylcbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRUYWI6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFRhYiB8fCB0aGlzLmRlZmF1bHRUYWIgfHwgbnVsbFxuICAgICAgfSxcblxuICAgICAgc2V0KHNlbGVjdGVkVGFiKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFRhYiA9IHNlbGVjdGVkVGFiXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlZmF1bHRUYWIoKSB7XG4gICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICBpZiAodGhpcy50YWJzKSB7XG4gICAgICAgIGNvbnN0IHRhYnMgPSBPYmplY3QudmFsdWVzKHRoaXMudGFicykuZmlsdGVyKHRoaXMuc2hvdWxkUmVuZGVyU2NoZW1hKVxuICAgICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgZGVmYXVsdFRhYiB9IG9mIHRhYnMpIHtcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihkZWZhdWx0VGFiKSA/IGRlZmF1bHRUYWIodGhpcy5jb250ZXh0KSA6IGRlZmF1bHRUYWIpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lXG4gICAgICAgICAgfVxuICAgICAgICAgIGZpcnN0ID8/PSBuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmaXJzdFxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWE/LmNsaXBib2FyZCA/PyBudWxsXG4gICAgfSxcblxuICAgIGhhc0hlYWRlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc0xhYmVsIHx8IHRoaXMuaGFzVGFicyB8fCAhIXRoaXMuY2xpcGJvYXJkXG4gICAgfSxcblxuICAgIGhlYWRlclRlbGVwb3J0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNSb290U2NoZW1hXG4gICAgICAgID8gJy5kaXRvLWhlYWRlcl9fdGVsZXBvcnQnXG4gICAgICAgIDogdGhpcy5sYWJlbE5vZGVcbiAgICB9LFxuXG4gICAgcGFyZW50RGF0YSgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBnZXRQYXJlbnRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIGZhbHNlKVxuICAgICAgcmV0dXJuIGRhdGEgIT09IHRoaXMuZGF0YSA/IGRhdGEgOiBudWxsXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGF0YSh7IHRhcmdldDogJ3NlcnZlcicsIHNjaGVtYU9ubHk6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkRGF0YToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGF0YSh7IHRhcmdldDogJ2NsaXBib2FyZCcsIHNjaGVtYU9ubHk6IHRydWUgfSlcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzLlxuICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgYXM6XG4gICAgLy8gcmV0dXJuIGdldEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcGFyZW50SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudERhdGFcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkRGF0YVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xpcGJvYXJkRGF0YVxuICAgIH0sXG5cbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgdGhpcy5nZXRJdGVtRm9ybVNjaGVtYSh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB0aGlzLmNvbnRleHQpXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzUm9vdFNjaGVtYSgpIHtcbiAgICAgIC8vIFNlY3Rpb24gc2NoZW1hcyBjYW4gc2hhcmUgdGhlIHJvb3QgZGF0YVBhdGggYnV0IHRoZXkgYXJlIGlubGluZWQuXG4gICAgICByZXR1cm4gdGhpcy5kYXRhUGF0aCA9PT0gJycgJiYgIXRoaXMuaW5saW5lZFxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5pc0RpcnR5KVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzVG91Y2hlZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZXJ5Q29tcG9uZW50KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZGF0ZWQpXG4gICAgfSxcblxuICAgIGhhc0Vycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaGFzRXJyb3JzKVxuICAgIH0sXG5cbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5sYWJlbCB8fCB0aGlzLmNvbGxhcHNpYmxlXG4gICAgfSxcblxuICAgIGhhc1RhYnMoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnRhYnNcbiAgICB9LFxuXG4gICAgaGFzTWFpblRhYnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNUYWJzICYmIHRoaXMuaXNSb290U2NoZW1hXG4gICAgfSxcblxuICAgIGhhc01haW5QYW5lKCkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnRzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuICEhY29tcG9uZW50cyAmJiBPYmplY3Qua2V5cyhjb21wb25lbnRzKS5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIG9wZW5lZDogZ2V0U3RvcmVBY2Nlc3Nvcignb3BlbmVkJywge1xuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmNvbGxhcHNlZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50cygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucGFuZXNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZWxzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lbHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgY29tcG9uZW50c0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lc0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZXNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZWxzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgd2lkZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJyRyb3V0ZS5oYXNoJzoge1xuICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzMzOTMjaXNzdWVjb21tZW50LTExNTg0NzAxNDlcbiAgICAgIGZsdXNoOiAncG9zdCcsXG4gICAgICBoYW5kbGVyKGhhc2gpIHtcbiAgICAgICAgLy8gUmVtZW1iZXIgdGhlIGN1cnJlbnQgcGF0aCB0byBrbm93IGlmIHRhYiBjaGFuZ2VzIHNob3VsZCBzdGlsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkLCBidXQgcmVtb3ZlIHRoZSB0cmFpbGluZyBgL2NyZWF0ZWAgb3IgYC86aWRgIGZyb20gaXQgc28gdGhhdFxuICAgICAgICAvLyB0YWJzIGluZm9ybXMgdGhhdCBzdGF5IG9wZW4gYWZ0ZXIgY3JlYXRpb24gc3RpbGwgd29yay5cbiAgICAgICAgaWYgKHRoaXMuaGFzTWFpblRhYnMpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRUYWIgPSBoYXNoPy5zbGljZSgxKSB8fCBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgJ3NlbGVjdGVkVGFiJyhzZWxlY3RlZFRhYikge1xuICAgICAgaWYgKHRoaXMuaGFzTWFpblRhYnMpIHtcbiAgICAgICAgY29uc3QgdGFiID0gdGhpcy5zaG91bGRSZW5kZXJTY2hlbWEodGhpcy50YWJzW3NlbGVjdGVkVGFiXSlcbiAgICAgICAgICA/IHNlbGVjdGVkVGFiXG4gICAgICAgICAgOiB0aGlzLmRlZmF1bHRUYWJcbiAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBoYXNoOiB0YWIgPyBgIyR7dGFifWAgOiBudWxsIH0pXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5oYXNFcnJvcnMpIHtcbiAgICAgICAgdGhpcy5yZXBvc2l0aW9uRXJyb3JzKClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICAgIC8vIERlbGVnYXRlIGNoYW5nZSBldmVudHMgdGhyb3VnaCB0byBwYXJlbnQgc2NoZW1hOlxuICAgIHRoaXMuZGVsZWdhdGUoJ2NoYW5nZScsIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50KVxuICAgIHRoaXMuZW1pdEV2ZW50KCdpbml0aWFsaXplJykgLy8gTm90IGAnY3JlYXRlJ2AsIHNpbmNlIHRoYXQncyBmb3IgZGF0YS5cbiAgICBpZiAodGhpcy5zY3JvbGxhYmxlICYmIHRoaXMud2lkZSkge1xuICAgICAgdGhpcy5hcHBTdGF0ZS5wYWdlQ2xhc3MgPSAnZGl0by1wYWdlLS13aWRlJ1xuICAgIH1cbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5lbWl0RXZlbnQoJ2Rlc3Ryb3knKVxuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICAgIGlmICh0aGlzLnNjcm9sbGFibGUgJiYgdGhpcy53aWRlKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLnBhZ2VDbGFzcyA9IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgodGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudHNCeU5hbWUoZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRCeU5hbWUobmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudHMoZGF0YVBhdGhPck5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoT3JOYW1lKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnQoZGF0YVBhdGhPck5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHMoZGF0YVBhdGhPck5hbWUpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZWxzQnlEYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgfSxcblxuICAgIGdldFBhbmVsQnlEYXRhUGF0aChkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRQYW5lbHMoZGF0YVBhdGhPck5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMucGFuZWxzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUpXG4gICAgfSxcblxuICAgIGdldFBhbmVsKGRhdGFQYXRoT3JOYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQYW5lbHMoZGF0YVBhdGhPck5hbWUpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgc29tZUNvbXBvbmVudChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNQb3B1bGF0ZWQgJiYgdGhpcy5jb21wb25lbnRzLnNvbWUoY2FsbGJhY2spXG4gICAgfSxcblxuICAgIGV2ZXJ5Q29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuZXZlcnkoY2FsbGJhY2spXG4gICAgfSxcblxuICAgIG9uT3BlbihvcGVuKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnb3BlbicsIHsgY29udGV4dDogeyBvcGVuIH0gfSlcbiAgICAgIC8vIFByZXZlbnQgY2xvc2luZyB0aGUgc2NoZW1hIHdpdGggaW52YWxpZCBkYXRhLCBzaW5jZSB0aGUgaW4tY29tcG9uZW50XG4gICAgICAvLyB2YWxpZGF0aW9uIHdpbGwgbm90IGJlIGV4ZWN1dGVkIG9uY2UgaXQncyBjbG9zZWQuXG5cbiAgICAgIC8vIFRPRE86IE1vdmUgdmFsaWRhdGlvbiBvdXQgb2YgY29tcG9uZW50cywgdG8gc2NoZW1hLCBqdXN0IGxpa2VcbiAgICAgIC8vIHByb2Nlc3NpbmcsIGFuZCB1c2UgYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIGZvciB0aGUgcmVzdWx0aW5nIGVycm9ycyxcbiAgICAgIC8vIHRoZW4gcmVtb3ZlIHRoaXMgcmVxdWlyZW1lbnQsIHNpbmNlIHdlIGNhbiB2YWxpZGF0ZSBjbG9zZWQgZm9ybXMgYW5kXG4gICAgICAvLyBzY2hlbWFzIHRoZW4uXG4gICAgICBpZiAoIXRoaXMub3BlbmVkIHx8IG9wZW4gfHwgdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHRoaXMub3BlbmVkID0gb3BlblxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdjaGFuZ2UnKVxuICAgIH0sXG5cbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICAgIGNvbXBvbmVudC5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlcG9zaXRpb25FcnJvcnMoKSB7XG4gICAgICAvLyBGaXJlIGEgZmFrZSBzY3JvbGwgZXZlbnQgdG8gZm9yY2UgdGhlIHJlcG9zaXRpb25pbmcgb2YgZXJyb3IgdG9vbHRpcHMsXG4gICAgICAvLyBhcyBvdGhlcndpc2UgdGhleSBzb21ldGltZXMgZG9uJ3Qgc2hvdyB1cCBpbiB0aGUgcmlnaHQgcGxhY2UgaW5pdGlhbGx5XG4gICAgICAvLyB3aGVuIGNoYW5naW5nIHRhYnMuXG4gICAgICBjb25zdCBzY3JvbGxDb250YWluZXIgPSB0aGlzLiRyZWZzLmNvbnRlbnQuY2xvc2VzdCgnLmRpdG8tc2Nyb2xsJylcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gKCkgPT4gc2Nyb2xsQ29udGFpbmVyLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdzY3JvbGwnKSlcbiAgICAgIGRpc3BhdGNoKClcbiAgICAgIC8vIFRoaXMgaXMgcmVxdWlyZWQgdG8gaGFuZGxlIGAmLS1sYWJlbC12ZXJ0aWNhbGAgYmFzZWQgbGF5b3V0IGNoYW5nZXMuXG4gICAgICBzZXRUaW1lb3V0KGRpc3BhdGNoLCAwKVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMub3BlbmVkID0gdHJ1ZVxuICAgICAgcmV0dXJuIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50Py5mb2N1cygpXG4gICAgfSxcblxuICAgIHZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHNCeURhdGFQYXRoIH0gPSB0aGlzXG4gICAgICBsZXQgZGF0YVBhdGhzXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgY2hlY2sgPSBpc0Z1bmN0aW9uKG1hdGNoKVxuICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICA6IGlzUmVnRXhwKG1hdGNoKVxuICAgICAgICAgICAgPyBmaWVsZCA9PiBtYXRjaC50ZXN0KGZpZWxkKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIGRhdGFQYXRocyA9IGNoZWNrXG4gICAgICAgICAgPyBPYmplY3Qua2V5cyhjb21wb25lbnRzQnlEYXRhUGF0aCkuZmlsdGVyKGNoZWNrKVxuICAgICAgICAgIDogaXNBcnJheShtYXRjaClcbiAgICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICAgIDogW21hdGNoXVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgbGV0IGZpcnN0ID0gdHJ1ZVxuICAgICAgZGF0YVBhdGhzIHx8PSBPYmplY3Qua2V5cyhjb21wb25lbnRzQnlEYXRhUGF0aClcbiAgICAgIGZvciAoY29uc3QgZGF0YVBhdGggb2YgZGF0YVBhdGhzKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKCFjb21wb25lbnQudmFsaWRhdGUobm90aWZ5KSkge1xuICAgICAgICAgICAgLy8gRm9jdXMgZmlyc3QgZXJyb3IgZmllbGRcbiAgICAgICAgICAgIGlmIChub3RpZnkgJiYgZmlyc3QpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50LnNjcm9sbEludG9WaWV3KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSAmJiAhaXNWYWxpZCkge1xuICAgICAgICB0aGlzLm5vdGlmeUVycm9ycygpXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNWYWxpZFxuICAgIH0sXG5cbiAgICB2ZXJpZnlBbGwobWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQWxsKG1hdGNoLCBmYWxzZSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBjb25zdCB1bm1hdGNoZWQgPSBbXVxuICAgICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIGVycnNdIG9mIE9iamVjdC5lbnRyaWVzKGVycm9ycykpIHtcbiAgICAgICAgLy8gSWYgdGhlIHNjaGVtYSBpcyBhIGRhdGEtcm9vdCwgcHJlZml4IGl0cyBvd24gZGF0YVBhdGggdG8gYWxsIGVycm9ycyxcbiAgICAgICAgLy8gc2luY2UgdGhlIGRhdGEgdGhhdCBpdCBzZW5kcyBhbmQgdmFsaWRhdGVzIHdpbGwgYmUgdW5wcmVmaXhlZC5cbiAgICAgICAgY29uc3QgZnVsbERhdGFQYXRoID0gdGhpcy5oYXNPd25EYXRhXG4gICAgICAgICAgPyBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBkYXRhUGF0aClcbiAgICAgICAgICA6IGRhdGFQYXRoXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMsIHRoaXMuZGF0YVBhdGgsIHRoaXMuaGFzT3duRGF0YSwgZnVsbERhdGFQYXRoKVxuICAgICAgICAvLyBDb252ZXJ0IGZyb20gSmF2YVNjcmlwdCBwcm9wZXJ0eSBhY2Nlc3Mgbm90YXRpb24sIHRvIG91ciBvd24gZm9ybVxuICAgICAgICAvLyBvZiByZWxhdGl2ZSBKU09OIHBvaW50ZXJzIGFzIGRhdGEtcGF0aHM6XG4gICAgICAgIGNvbnN0IGRhdGFQYXRoUGFydHMgPSBwYXJzZURhdGFQYXRoKGZ1bGxEYXRhUGF0aClcbiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGhQYXJ0cylcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgIGlmIChjb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJycywgZmlyc3QgJiYgZm9jdXMpKSB7XG4gICAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgIC8vIENvdWxkbid0IGZpbmQgYSBjb21wb25lbnQgaW4gYW4gYWN0aXZlIGZvcm0gZm9yIHRoZSBnaXZlbiBkYXRhUGF0aC5cbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSBjb21wb25lbnQgc2VydmluZyBhIHBhcnQgb2YgdGhlIGRhdGFQYXRoLFxuICAgICAgICAgIC8vIGFuZCB0YWtlIGl0IGZyb20gdGhlcmU6XG4gICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgICAgd2hpbGUgKGRhdGFQYXRoUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGhQYXJ0cylcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbXBvbmVudC5uYXZpZ2F0ZVRvQ29tcG9uZW50Py4oXG4gICAgICAgICAgICAgICAgICBmdWxsRGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgICBzdWJDb21wb25lbnRzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2Ygc3ViQ29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycnMgPSBlcnJvcnNbY29tcG9uZW50LmRhdGFQYXRoXVxuICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cylcbiAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIEZvdW5kIGEgbmVzdGVkIGZvcm0gdG8gZGlzcGxheSBhdCBsZWFzdCBwYXJ0cyBmbyB0aGUgZXJyb3JzLlxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IHNob3cgYWxsIGVycm9ycyBhdCBvbmNlLCBzbyB3ZSdyZSBkb25lLiBEb24ndCBjYWxsXG4gICAgICAgICAgICAgICAgLy8gYG5vdGlmeUVycm9ycygpYCB5ZXQsIGFzIHdlIGNhbiBvbmx5IGRpc3BsYXkgaXQgb25jZVxuICAgICAgICAgICAgICAgIC8vIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCB3YXMgY2FsbGVkIGZyb20gYERpdG9Gb3JtLm1vdW50ZWQoKWBcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RpbGwgaGVyZSwgc28ga2VlcCByZW1vdmluZyB0aGUgbGFzdCBwYXJ0IHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cbiAgICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gV2hlbiB0aGUgZXJyb3IgY2FuJ3QgYmUgbWF0Y2hlZCwgYWRkIGl0IHRvIGEgbGlzdCBvZiB1bm1hdGNoZWRcbiAgICAgICAgICAvLyBlcnJvcnMgd2l0aCBkZWNlbnQgbWVzc2FnZSwgdG8gcmVwb3J0IGF0IHRoZSBlbmQuXG4gICAgICAgICAgY29uc3QgZmllbGQgPSBsYWJlbGl6ZShwcm9wZXJ0eSlcbiAgICAgICAgICBmb3IgKGNvbnN0IGVyciBvZiBlcnJzKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSBmaWVsZFxuICAgICAgICAgICAgICA/IGBUaGUgZmllbGQgJHtmaWVsZH1gXG4gICAgICAgICAgICAgIDogYFRoZSAke3RoaXMuZm9ybUxhYmVsfWBcbiAgICAgICAgICAgIHVubWF0Y2hlZC5wdXNoKGAke3ByZWZpeH0gJHtlcnIubWVzc2FnZX1gKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICB9XG4gICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKHVubWF0Y2hlZC5qb2luKCdcXG4nKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbm90aWZ5RXJyb3JzKG1lc3NhZ2UpIHtcbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgdGl0bGU6ICdWYWxpZGF0aW9uIEVycm9ycycsXG4gICAgICAgIHRleHQ6IG1lc3NhZ2UgfHwgJ1BsZWFzZSBjb3JyZWN0IHRoZSBoaWdobGlnaHRlZCBlcnJvcnMuJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgcmVzZXREYXRhKCkge1xuICAgICAgLy8gV2UgY2FuJ3Qgc2V0IGB0aGlzLmRhdGEgPSAuLi5gIGJlY2F1c2UgaXQncyBhIHByb3BlcnR5LCBidXQgd2UgY2FuIHNldFxuICAgICAgLy8gYWxsIGtub3duIHByb3BlcnRpZXMgb24gaXQgdG8gdGhlIHZhbHVlcyByZXR1cm5lZCBieVxuICAgICAgLy8gYHNldERlZmF1bHRWYWx1ZXMoKWAsIGFzIHRoZXkgYXJlIGFsbCByZWFjdGl2ZSBhbHJlYWR5IGZyb20gdGhlIHN0YXJ0czpcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5kYXRhLCBzZXREZWZhdWx0VmFsdWVzKHRoaXMuc2NoZW1hLCB7fSwgdGhpcykpXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gZGF0YSkge1xuICAgICAgICBpZiAobmFtZSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLW11dGF0aW5nLXByb3BzXG4gICAgICAgICAgaWYgKCFlcXVhbHModGhpcy5kYXRhW25hbWVdLCBkYXRhW25hbWVdKSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1tdXRhdGluZy1wcm9wc1xuICAgICAgICAgICAgdGhpcy5kYXRhW25hbWVdID0gZGF0YVtuYW1lXVxuICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpKSB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudC5tYXJrRGlydHkoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmaWx0ZXJEYXRhKGRhdGEpIHtcbiAgICAgIC8vIEZpbHRlcnMgb3V0IGFycmF5cyBhbmQgb2JqZWN0cyB0aGF0IGFyZSBiYWNrIGJ5IGRhdGEgcmVzb3VyY2VzXG4gICAgICAvLyB0aGVtc2VsdmVzLCBhcyB0aG9zZSBhcmUgYWxyZWFkeSB0YWtpbmcgY2FyZSBvZiB0aHJvdWdoIHRoZWlyIG93biBBUElcbiAgICAgIC8vIHJlc291cmNlIGVuZC1wb2ludHMgYW5kIHNob3VsZG4ndCBiZSBzZXQuXG4gICAgICBjb25zdCBjb3B5ID0ge31cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkgfHwgaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKVxuICAgICAgICAgIGlmIChjb21wb25lbnRzLnNvbWUoY29tcG9uZW50ID0+IGNvbXBvbmVudC5wcm92aWRlc0RhdGEpKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb3B5W25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb3B5XG4gICAgfSxcblxuICAgIHByb2Nlc3NEYXRhKHsgdGFyZ2V0ID0gJ2NsaXBib2FyZCcsIHNjaGVtYU9ubHkgPSB0cnVlIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIHByb2Nlc3NEYXRhKFxuICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAge1xuICAgICAgICAgIC8vIE5lZWRlZCBmb3IgRGl0b0NvbnRleHQgaGFuZGxpbmcgaW5zaWRlIGBwcm9jZXNzRGF0YWAgYW5kXG4gICAgICAgICAgLy8gYHByb2Nlc3NTY2hlbWFEYXRhKClgOlxuICAgICAgICAgIHJvb3REYXRhOiB0aGlzLnJvb3REYXRhLFxuICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICBzY2hlbWFPbmx5LFxuICAgICAgICAgIHRhcmdldFxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIGAkc2NoZW1hUGFyZW50Q29tcG9uZW50KClgIGlzIG9ubHkgc2V0IGlmIG9uZSBvZiB0aGUgYW5jZXN0b3JzIHVzZXNcbiAgICAgIC8vIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgICAgdGhpcy4kc2NoZW1hUGFyZW50Q29tcG9uZW50KCk/Ll9yZWdpc3RlclNjaGVtYUNvbXBvbmVudCh0aGlzLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSwgY29tcG9uZW50LCBhZGQpXG4gICAgICAvLyBPbmx5IHJlZ2lzdGVyIHdpdGggdGhlIHBhcmVudCBpZiBzY2hlbWEgc2hhcmVzIGRhdGEgd2l0aCBpdC5cbiAgICAgIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50Py5fcmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50LCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmUocGFuZSwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMucGFuZXNSZWdpc3RyeSwgcGFuZSwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJQYW5lbChwYW5lbCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMucGFuZWxzUmVnaXN0cnksIHBhbmVsLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlckVudHJ5KHJlZ2lzdHJ5LCBlbnRyeSwgYWRkKSB7XG4gICAgICBjb25zdCB1aWQgPSBlbnRyeS4kdWlkXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHJlZ2lzdHJ5W3VpZF0gPSBlbnRyeVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHJlZ2lzdHJ5W3VpZF1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2xpc3RFbnRyaWVzQnlEYXRhUGF0aChyZWdpc3RyeSkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMocmVnaXN0cnkpLnJlZHVjZSgoZW50cmllc0J5RGF0YVBhdGgsIGVudHJ5KSA9PiB7XG4gICAgICAgIC8vIE11bHRpcGxlIGVudHJpZXMgY2FuIGJlIGxpbmtlZCB0byB0aGUgc2FtZSBkYXRhLXBhdGgsIGUuZy4gd2hlblxuICAgICAgICAvLyB0aGVyZSBhcmUgdGFicy4gTGluayBlYWNoIGRhdGEtcGF0aCB0byBhbiBhcnJheSBvZiBlbnRyaWVzLlxuICAgICAgICBjb25zdCB7IGRhdGFQYXRoIH0gPSBlbnRyeVxuICAgICAgICBjb25zdCBlbnRyaWVzID0gKGVudHJpZXNCeURhdGFQYXRoW2RhdGFQYXRoXSB8fD0gW10pXG4gICAgICAgIGVudHJpZXMucHVzaChlbnRyeSlcbiAgICAgICAgcmV0dXJuIGVudHJpZXNCeURhdGFQYXRoXG4gICAgICB9LCB7fSlcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXMoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgPyB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgICAgIDogdGhpcy5fZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiBlbnRyaWVzQnlEYXRhUGF0aFtub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCldIHx8IFtdXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBuYW1lKSB7XG4gICAgICByZXR1cm4gZW50cmllc0J5RGF0YVBhdGhbYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSldIHx8IFtdXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2NoZW1hIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcblxuICA+IC5kaXRvLXNjaGVtYS1oZWFkZXIgKyAuZGl0by1zY2hlbWEtY29udGVudCA+IC5kaXRvLXBhbmUge1xuICAgIG1hcmdpbi10b3A6ICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgfVxuXG4gICY6aGFzKD4gLmRpdG8tc2NoZW1hLWNvbnRlbnQgKyAuZGl0by1lZGl0LWJ1dHRvbnMpIHtcbiAgICAvLyBEaXNwbGF5IHRoZSBpbmxpbmVkIGVkaXQgYnV0dG9ucyB0byB0aGUgcmlnaHQgb2YgdGhlIHNjaGVtYTpcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG5cbiAgICA+IC5kaXRvLWVkaXQtYnV0dG9ucyB7XG4gICAgICBmbGV4OiAxIDAgMCU7XG4gICAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZztcbiAgICB9XG4gIH1cblxuICA+IC5kaXRvLXNjaGVtYS1jb250ZW50IHtcbiAgICBmbGV4OiAwIDEgMTAwJTtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgLy8gU28gdGhhdCBzY2hlbWEgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b20uXG4gICAgLy8gTk9URTogV2UgYWxzbyBuZWVkIGdyaWQgZm9yIGBUcmFuc2l0aW9uSGVpZ2h0YCB0byB3b3JrIHdlbGwuIFN3aXRjaGluZ1xuICAgIC8vIHRvIGZsZXggYm94IGhlcmUgY2F1c2VzIGp1bXB5IGNvbGxhcHNpbmcgdHJhbnNpdGlvbnMuXG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50O1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMTAwJTtcblxuICAgID4gOm9ubHktY2hpbGQge1xuICAgICAgZ3JpZC1yb3ctZW5kOiBub25lO1xuICAgIH1cbiAgfVxufVxuXG4uZGl0by1zY2hlbWEtaGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gIC5kaXRvLWhlYWRlciAmIHtcbiAgICAvLyBXaGVuIHRlbGVwb3J0ZWQgaW50byBtYWluIGhlYWRlci5cbiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG4gIH1cblxuICAuZGl0by1sYWJlbCAmIHtcbiAgICAvLyBXaGVuIHRlbGVwb3J0ZWQgaW50byBjb250YWluZXIgbGFiZWwuXG4gICAgZmxleDogMTtcbiAgfVxuXG4gID4gLmRpdG8tbGFiZWwge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cblxuICA+IC5kaXRvLWJ1dHRvbnMge1xuICAgIG1hcmdpbi1sZWZ0OiB2YXIoLS1idXR0b24tbWFyZ2luLCAwKTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5EaXRvU2NoZW1hLmRpdG8tc2NoZW1hLWlubGluZWQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLWNvbXBhY3QnOiBpc0NvbXBhY3QgfVwiXG4gIDpzY2hlbWE9XCJzY2hlbWFcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgOmxhYmVsPVwiaXNDb21wYWN0ID8gbnVsbCA6IGxhYmVsXCJcbiAgOnBhZGRpbmc9XCJwYWRkaW5nID8/ICdpbmxpbmVkJ1wiXG4gIDppbmxpbmVkPVwidHJ1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgOmdlbmVyYXRlTGFiZWxzPVwiIWlzQ29tcGFjdFwiXG4gIDpsYWJlbE5vZGU9XCJsYWJlbE5vZGVcIlxuICA6YWNjdW11bGF0ZWRCYXNpcz1cImFjY3VtdWxhdGVkQmFzaXNcIlxuKVxuICAvLy0gUmVuZGVyIGRpdG8tZWRpdC1idXR0b25zIGZvciBpbmxpbmVkIHNjaGVtYXMgc2VwYXJhdGVseSBmcm9tIGFsbFxuICAvLy0gb3RoZXJzIGluIGBUeXBlTGlzdGAgYXMgYSBzY29wZSwgZm9yIGJldHRlciBoYW5kbGluZyBvZiBsYXlvdXQuXG4gIHRlbXBsYXRlKCNlZGl0LWJ1dHRvbnMpXG4gICAgRGl0b0VkaXRCdXR0b25zKFxuICAgICAgdi1pZj1cImRlbGV0YWJsZSB8fCBkcmFnZ2FibGUgfHwgZWRpdGFibGVcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gICAgICBAZGVsZXRlPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzQ29tcGFjdCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1NjaGVtYUlubGluZWQnLCB7XG4gIGVtaXRzOiBbJ2RlbGV0ZSddLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwYWRkaW5nOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxhYmVsTm9kZTogeyB0eXBlOiBIVE1MRWxlbWVudCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGFjY3VtdWxhdGVkQmFzaXM6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGlzQ29tcGFjdCgpIHtcbiAgICAgIHJldHVybiBpc0NvbXBhY3QodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzQ29tcGFjdCAmJiAhIXRoaXMubGFiZWxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zY2hlbWEtaW5saW5lZCB7XG4gIC8vIFVzZSBncmlkIGxheW91dCBmb3IgdHdvIHJlYXNvbnM6IEZvciBgVHJhbnNpdGlvbkhlaWdodGAgdG8gd29yayBzbW9vdGhseSxcbiAgLy8gYW5kIHRvIGFsaWduIHRoZSBoZWFkZXIgYWJvdmUgdGhlIGNvbnRlbnQgd2hlbiB0aGUgaGVhZGVyIGlzIG5vdCB0ZWxlcG9ydGVkXG4gIC8vIG91dHNpZGUgb2YgdGhlIHNjaGVtYS5cbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW4tY29udGVudDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxMDAlO1xuXG4gICY6bm90KDpob3ZlciwgLmRpdG8tc2NoZW1hLS1vcGVuKSB7XG4gICAgPiAuZGl0by1zY2hlbWEtaGVhZGVyIHtcbiAgICAgID4gLmRpdG8tY2xpcGJvYXJkIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8IS0tIGVzbGludC1kaXNhYmxlIHZ1ZS9uby10ZW1wbGF0ZS1zaGFkb3cgLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tcGFuZShcbiAgdi1pZj1cImlzUG9wdWxhdGVkICYmIGNvbXBvbmVudFNjaGVtYXMubGVuZ3RoID4gMFwiXG4gIHYtcmVzaXplPVwib25SZXNpemVQYW5lXCJcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPWB7XG4gICAgICBzY2hlbWEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgbmVzdGVkLFxuICAgICAgc3RvcmVcbiAgICB9LCBpbmRleCBpbiBjb21wb25lbnRTY2hlbWFzYFxuICApXG4gICAgLy8gLVVzZSA8c3Bhbj4gZm9yIC5kaXRvLWJyZWFrIHNvIHdlIGNhbiB1c2UgYC5kaXRvLWNvbnRhaW5lcjpmaXJzdC1vZi10eXBlYFxuICAgIC8vIHNlbGVjdG9yLlxuICAgIHNwYW4uZGl0by1icmVhayhcbiAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdiZWZvcmUnXCJcbiAgICApXG4gICAgRGl0b0NvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoc2NoZW1hKVwiXG4gICAgICByZWY9XCJjb250YWluZXJzXCJcbiAgICAgIDprZXk9XCJuZXN0ZWREYXRhUGF0aFwiXG4gICAgICA6ZGF0YS1pbmRleD1cImluZGV4XCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwiaXNTaW5nbGVDb21wb25lbnRcIlxuICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICA6dmVydGljYWxMYWJlbHM9XCJpc0luTGFiZWxlZFJvdyhpbmRleClcIlxuICAgICAgOmFjY3VtdWxhdGVkQmFzaXM9XCJhY2N1bXVsYXRlZEJhc2lzXCJcbiAgICApXG4gICAgc3Bhbi5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2FmdGVyJ1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc05lc3RlZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFuZScsIHtcbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy50YWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0YWI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcGFkZGluZzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvc2l0aW9uczogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tcGFuZS0tc2luZ2xlJzogdGhpcy5pc1NpbmdsZUNvbXBvbmVudCxcbiAgICAgICAgW2BkaXRvLXBhbmUtLXBhZGRpbmctJHt0aGlzLnBhZGRpbmd9YF06ICEhdGhpcy5wYWRkaW5nXG4gICAgICB9XG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYiA/IHRoaXMgOiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRTY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGNvbXBvbmVudHMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXNcbiAgICAgIC8vIGFuZCBhZGRzIHRoZSBrZXkgYXMgdGhlIG5hbWUgdG8gZWFjaCBjb21wb25lbnQsIHVzZWQgZm9yIGxhYmVscywgZXRjLlxuICAgICAgLy8gTk9URTogc2NoZW1hIGNhbiBiZSBudWxsIHdoaWxlIG11bHRpLWZvcm0gbGlzdHMgbG9hZCB0aGVpciBkYXRhLFxuICAgICAgLy8gYmVjYXVzZSBvbmx5IHRoZSBhdmFpbGFibGUgZGF0YSB3aWxsIGRldGVybWluZSB0aGUgdHlwZSBvZiBmb3JtLlxuICAgICAgLy8gV2hlbiBlZGl0aW5nIHByaW1pdGl2ZSB2YWx1ZXMgdGhyb3VnaCBhIGZvcm0sIGRvIG5vdCBhcHBlbmQgJ25hbWUnIHRvXG4gICAgICAvLyB0aGUgY29tcG9uZW50J3MgZGF0YVBhdGggc28gaXQgY2FuIGJlIG1hcHBlZCB0byBmcm9tIHZhbGlkYXRpb24gZXJyb3JzLlxuICAgICAgLy8gTk9URTogTm90IGFsbCBzY2hlbWFzIC8gY29tcG9uZW50cyBoYXZlIGEgc291cmNlU2NoZW1hLCBlLmcuIGRpYWxvZ3MuXG4gICAgICBjb25zdCB3cmFwUHJpbWl0aXZlcyA9IHRoaXMuc291cmNlU2NoZW1hPy53cmFwUHJpbWl0aXZlc1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hPy5jb21wb25lbnRzIHx8IHt9KS5tYXAoXG4gICAgICAgIChbbmFtZSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgIC8vIEFsd2F5cyBhZGQgbmFtZSB0byBjb21wb25lbnQgc2NoZW1hLlxuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICAgIC8vIFNoYXJlIGRhdGFQYXRoIGFuZCBzdG9yZSB3aXRoIHBhcmVudCBpZiBub3QgbmVzdGVkOlxuICAgICAgICAgIGNvbnN0IG5lc3RlZCA9IGlzTmVzdGVkKHNjaGVtYSlcbiAgICAgICAgICBjb25zdCBuZXN0ZWREYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIGRhdGFQYXRoOlxuICAgICAgICAgICAgICBuZXN0ZWQgJiYgIXdyYXBQcmltaXRpdmVzXG4gICAgICAgICAgICAgICAgPyBuZXN0ZWREYXRhUGF0aFxuICAgICAgICAgICAgICAgIDogdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgc3RvcmU6IHRoaXMuZ2V0Q2hpbGRTdG9yZShuYW1lKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1NpbmdsZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpbmdsZSAmJiB0aGlzLmNvbXBvbmVudFNjaGVtYXMubGVuZ3RoID09PSAxXG4gICAgfSxcblxuICAgIHZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzKCkge1xuICAgICAgY29uc3QgeyBwb3NpdGlvbnMgfSA9IHRoaXNcblxuICAgICAgY29uc3QgaXNMYXN0SW5Sb3cgPSBpbmRleCA9PiAoXG4gICAgICAgIHBvc2l0aW9uc1tpbmRleF0gJiYgKFxuICAgICAgICAgIGluZGV4ID09PSBwb3NpdGlvbnMubGVuZ3RoIC0gMSB8fFxuICAgICAgICAgIGZpbmROZXh0UG9zaXRpb24oaW5kZXgpLnRvcCA+IHBvc2l0aW9uc1tpbmRleF0udG9wXG4gICAgICAgIClcbiAgICAgIClcblxuICAgICAgY29uc3QgZmluZE5leHRQb3NpdGlvbiA9IGluZGV4ID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4ICsgMTsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChwb3NpdGlvbnNbaV0pIHJldHVybiBwb3NpdGlvbnNbaV1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMFxuICAgICAgfVxuXG4gICAgICBjb25zdCByb3dzID0gW11cbiAgICAgIGxldCByb3cgPSBbXVxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHBvc2l0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgcm93LnB1c2goaW5kZXgpXG4gICAgICAgIGlmIChpc0xhc3RJblJvdyhpbmRleCkpIHtcbiAgICAgICAgICByb3dzLnB1c2gocm93KVxuICAgICAgICAgIHJvdyA9IFtdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyb3cubGVuZ3RoID4gMCkge1xuICAgICAgICByb3dzLnB1c2gocm93KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB2ZXJ0aWNhbExhYmVsc0J5SW5kaWNlcyA9IFtdXG5cbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgICAgbGV0IGhhc0xhYmVsc0luUm93ID0gZmFsc2VcbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBvZiByb3cpIHtcbiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb25zW2luZGV4XVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBvc2l0aW9uPy5oZWlnaHQgPiAyICYmIChcbiAgICAgICAgICAgICAgcG9zaXRpb24ubm9kZS5tYXRjaGVzKCc6aGFzKD4gLmRpdG8tbGFiZWwpJykgfHxcbiAgICAgICAgICAgICAgcG9zaXRpb24ubm9kZVxuICAgICAgICAgICAgICAgIC5jbG9zZXN0KCcuZGl0by1jb250YWluZXInKVxuICAgICAgICAgICAgICAgIC5tYXRjaGVzKCcuZGl0by1jb250YWluZXItLWxhYmVsLXZlcnRpY2FsJylcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBuZXN0ZWQgc2NoZW1hcywgZS5nLiAnc2VjdGlvbicgb3IgJ29iamVjdCcgYW5kXG4gICAgICAgICAgICAvLyBkZXRlY3QgbGFiZWxzIHRoZXJlIHRvby5cbiAgICAgICAgICAgIGhhc0xhYmVsc0luUm93ID0gdHJ1ZVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBvZiByb3cpIHtcbiAgICAgICAgICB2ZXJ0aWNhbExhYmVsc0J5SW5kaWNlc1tpbmRleF0gPSBoYXNMYWJlbHNJblJvd1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2ZXJ0aWNhbExhYmVsc0J5SW5kaWNlc1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICdjb21wb25lbnRTY2hlbWFzLmxlbmd0aCcobGVuZ3RoKSB7XG4gICAgICB0aGlzLnBvc2l0aW9ucy5sZW5ndGggPSBsZW5ndGhcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZSh0aGlzLCBhZGQpXG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgaWYgKHRoaXMudGFiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyb3V0ZXIucHVzaCh7IGhhc2g6IGAjJHt0aGlzLnRhYn1gIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUmVzaXplUGFuZSgpIHtcbiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBjb250YWluZXIgb2YgdGhpcy4kcmVmcy5jb250YWluZXJzKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IGNvbnRhaW5lci4kZWxcbiAgICAgICAgICBjb25zdCBpbmRleCA9ICtub2RlLmRhdGFzZXQuaW5kZXhcbiAgICAgICAgICBjb25zdCBib3VuZHMgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgICAgY29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKG5vZGUpXG4gICAgICAgICAgY29uc3QgcGFkZGluZyA9IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZylcbiAgICAgICAgICBjb25zdCBmb250U2l6ZSA9IHBhcnNlRmxvYXQoc3R5bGUuZm9udFNpemUpXG4gICAgICAgICAgY29uc3QgaGVpZ2h0ID0gYm91bmRzLmhlaWdodCAtIDIgKiBwYWRkaW5nXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbnNbaW5kZXhdID1cbiAgICAgICAgICAgIGhlaWdodCA8PSAwXG4gICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIHRvcDogYm91bmRzLnksXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCAvIGZvbnRTaXplLFxuICAgICAgICAgICAgICAgICAgbm9kZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgaXNJbkxhYmVsZWRSb3coaW5kZXgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmVydGljYWxMYWJlbHNCeUluZGljZXNbaW5kZXhdXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tcGFuZSB7XG4gICRzZWxmOiAmO1xuICAkcm9vdC1wYWRkaW5nOiAkY29udGVudC1wYWRkaW5nIC0gJGZvcm0tc3BhY2luZy1oYWxmO1xuXG4gIC0tcGFuZS1wYWRkaW5nOiAwcHg7XG5cbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDtcbiAgLy8gUmVtb3ZlIHRoZSBwYWRkaW5nIGFkZGVkIGJ5IGAuZGl0by1jb250YWluZXJgIGluc2lkZSBgLmRpdG8tcGFuZWA6XG4gIG1hcmdpbjogLSRmb3JtLXNwYWNpbmctaGFsZjtcbiAgcGFkZGluZzogdmFyKC0tcGFuZS1wYWRkaW5nKTtcbiAgLy8gVXNlIGBmbGV4OiAwJWAgZm9yIGFsbCBgLmRpdG8tcGFuZWAgZXhjZXB0IGAuZGl0by1wYW5lX19tYWluYCxcbiAgLy8gc28gdGhhdCB0aGUgYC5kaXRvLWJ1dHRvbnMtbWFpbmAgY2FuIGJlIG1vdmVkIGFsbCB0aGUgd2F5IHRvIHRoZSBib3R0b20uXG4gIGZsZXg6IDAlO1xuXG4gICZfX21haW4ge1xuICAgIGZsZXg6IDEwMCU7XG4gIH1cblxuICAmLS1wYWRkaW5nLXJvb3Qge1xuICAgIC8vIEEgcm9vdC1sZXZlbCBwYW5lIGluc2lkZSBhIHNjcm9sbCB2aWV3LiBDbGVhciBuZWdhdGl2ZSBtYXJnaW4gZnJvbSBhYm92ZS5cbiAgICBtYXJnaW46IDA7XG4gICAgLy8gTW92ZSB0aGUgbmVnYXRpdmUgbWFyZ2luIHVzZWQgdG8gcmVtb3ZlIHRoZSBwYWRkaW5nIGFkZGVkIGJ5XG4gICAgLy8gYC5kaXRvLWNvbnRhaW5lcmAgaW5zaWRlIGAuZGl0by1wYW5lYCB0byB0aGUgcGFkZGluZzpcbiAgICAtLXBhbmUtcGFkZGluZzogI3skcm9vdC1wYWRkaW5nfTtcblxuICAgICYjeyRzZWxmfS0tc2luZ2xlIHtcbiAgICAgIC0tcGFuZS1wYWRkaW5nOiAjeyRjb250ZW50LXBhZGRpbmd9O1xuICAgIH1cblxuICAgICY6aGFzKD4gLmRpdG8tY29udGFpbmVyLS1sYWJlbC12ZXJ0aWNhbDpmaXJzdC1vZi10eXBlKSB7XG4gICAgICAvLyBSZWR1Y2UgdG9wIHNwYWNpbmcgd2hlbiB0aGUgZmlyc3Qgcm93IGhhcyBsYWJlbHMuXG4gICAgICBtYXJnaW4tdG9wOiAtJGZvcm0tc3BhY2luZy1oYWxmO1xuICAgIH1cblxuICAgIC8vIERpc3BsYXkgYSBydWxlciBiZXR3ZWVuIHRhYmJlZCBjb21wb25lbnRzIGFuZCB0b3dhcmRzIHRoZSAuZGl0by1idXR0b25zXG4gICAgJl9fdGFiICsgJl9fbWFpbiB7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICAvLyBVc2UgYSBwc2V1ZG8gZWxlbWVudCB0byBkaXNwbGF5IGEgcnVsZXIgd2l0aCBwcm9wZXIgbWFyZ2luc1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXN0eWxlO1xuICAgICAgICAvLyBTaGlmdCBydWxlciB1cCBieSAkcm9vdC1wYWRkaW5nIHRvIGV4Y2x1ZGUgcmVtb3ZlZCAkZm9ybS1zcGFjaW5nLWhhbGZcbiAgICAgICAgbWFyZ2luOiAoLSRyb290LXBhZGRpbmcpICRmb3JtLXNwYWNpbmctaGFsZiAkcm9vdC1wYWRkaW5nO1xuICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fbWFpbiArIC5kaXRvLWJ1dHRvbnMtbWFpbiB7XG4gICAgICAvLyBOZWVkZWQgZm9ybXMgd2l0aCBzdGlja3kgbWFpbiBidXR0b25zLlxuICAgICAgbWFyZ2luOiAkY29udGVudC1wYWRkaW5nO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cblxuICAmLS1wYWRkaW5nLWlubGluZWQge1xuICAgIC0tcGFuZS1wYWRkaW5nOiAwcHg7XG4gIH1cblxuICAmLS1wYWRkaW5nLW5lc3RlZCB7XG4gICAgLS1wYW5lLXBhZGRpbmc6ICN7JGZvcm0tc3BhY2luZ307XG5cbiAgICAmOmhhcyg+IC5kaXRvLWNvbnRhaW5lci0tbGFiZWwtdmVydGljYWw6Zmlyc3Qtb2YtdHlwZSkge1xuICAgICAgLy8gUmVkdWNlIHRvcCBzcGFjaW5nIHdoZW4gdGhlIGZpcnN0IHJvdyBoYXMgbGFiZWxzLlxuICAgICAgcGFkZGluZy10b3A6ICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgICB9XG4gIH1cblxuICAuZGl0by1icmVhayB7XG4gICAgLy8gYC5kaXRvLWJyZWFrYCBpcyByZW5kZXJlZCBhcyA8c3Bhbj4gc28gd2UgY2FuIHVzZSB0aGVcbiAgICAvLyBgLmRpdG8tY29udGFpbmVyOmZpcnN0LW9mLXR5cGVgIHNlbGVjdG9yIHRvIG1hdGNoIHRoZSBmaXJzdCBjb250YWluZXJcbiAgICAvLyBldmVuIGlmIGl0IGhhcyBhIGJyZWFrIGJlZm9yZSBpdC5cbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbGV4OiAxMDAlO1xuICAgIGhlaWdodDogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRnJhY3Rpb24odmFsdWUpIHtcbiAgY29uc3QgbWF0Y2ggPSAoXG4gICAgaXNTdHJpbmcodmFsdWUpICYmXG4gICAgdmFsdWUubWF0Y2goL15cXHMqKFsrLV0/XFxkKylcXHMqXFwvXFxzKihbKy1dP1xcZCspXFxzKiQvKVxuICApXG4gIGlmIChtYXRjaCkge1xuICAgIGNvbnN0IFssIGRpdmlkZW5kLCBkaXZpc29yXSA9IG1hdGNoXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoZGl2aWRlbmQpIC8gcGFyc2VGbG9hdChkaXZpc29yKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY29udGFpbmVyKFxuICB2LXNob3c9XCJjb21wb25lbnRWaXNpYmxlXCJcbiAgOmNsYXNzPVwiY29udGFpbmVyQ2xhc3Nlc1wiXG4gIDpzdHlsZT1cImNvbnRhaW5lclN0eWxlc1wiXG4pXG4gIFRlbGVwb3J0KFxuICAgIHYtaWY9XCJpc01vdW50ZWQgJiYgcGFuZWxFbnRyaWVzLmxlbmd0aCA+IDBcIlxuICAgIHRvPVwiLmRpdG8tc2lkZWJhcl9fdGVsZXBvcnRcIlxuICApXG4gICAgRGl0b1BhbmVscyhcbiAgICAgIDpwYW5lbHM9XCJwYW5lbEVudHJpZXNcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICBEaXRvTGFiZWwoXG4gICAgdi1pZj1cImhhc0xhYmVsXCJcbiAgICA6Y2xhc3M9XCJsYXlvdXRDbGFzc2VzXCJcbiAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgOmRhdGFQYXRoPVwibGFiZWxEYXRhUGF0aFwiXG4gICAgOmluZm89XCJpbmZvXCJcbiAgKVxuICBjb21wb25lbnQuZGl0by1jb21wb25lbnQoXG4gICAgOmlzPVwidHlwZUNvbXBvbmVudFwiXG4gICAgcmVmPVwiY29tcG9uZW50XCJcbiAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc2VzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6d2lkdGg9XCJ3aWR0aFwiXG4gICAgOmxhYmVsPVwibGFiZWxcIlxuICAgIDpzaW5nbGU9XCJzaW5nbGVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImNvbXBvbmVudERpc2FibGVkXCJcbiAgICA6YWNjdW11bGF0ZWRCYXNpcz1cImNvbWJpbmVkQmFzaXNcIlxuICAgIEBlcnJvcnM9XCJvbkVycm9yc1wiXG4gIClcbiAgRGl0b0Vycm9ycyg6ZXJyb3JzPVwiZXJyb3JzXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNTdHJpbmcsIGlzTnVtYmVyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHtcbiAgZ2V0QWxsUGFuZWxFbnRyaWVzLFxuICBnZXRUeXBlQ29tcG9uZW50LFxuICBoYXNMYWJlbCxcbiAgb21pdFNwYWNpbmdcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgcGFyc2VGcmFjdGlvbiB9IGZyb20gJy4uL3V0aWxzL21hdGguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0NvbnRhaW5lcicsIHtcbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdmVydGljYWxMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY2N1bXVsYXRlZEJhc2lzOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3JzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIHR5cGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gZ2V0VHlwZUNvbXBvbmVudCh0aGlzLnNjaGVtYS50eXBlKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiBoYXNMYWJlbCh0aGlzLnNjaGVtYSwgdGhpcy5nZW5lcmF0ZUxhYmVscylcbiAgICB9LFxuXG4gICAgbGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNMYWJlbCA/IHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEpIDogbnVsbFxuICAgIH0sXG5cbiAgICBsYWJlbERhdGFQYXRoKCkge1xuICAgICAgLy8gVW5uZXN0ZWQgdHlwZXMgZG9uJ3QgaGF2ZSBhIGRhdGFQYXRoIGZvciB0aGVtc2VsdmVzLCBkb24ndCB1c2UgaXQ6XG4gICAgICByZXR1cm4gdGhpcy5uZXN0ZWQgPyB0aGlzLmRhdGFQYXRoIDogbnVsbFxuICAgIH0sXG5cbiAgICBpbmZvOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5mbycsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIHdpZHRoOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZUNvbXBvbmVudD8uZGVmYXVsdFdpZHRoXG4gICAgICB9LFxuICAgICAgZ2V0KHdpZHRoKSB7XG4gICAgICAgIC8vIFVzZSAxMDAlID09IDEuMCBhcyBkZWZhdWx0IHdpZHRoIHdoZW4gbm90aGluZyBpcyBzZXQ6XG4gICAgICAgIHJldHVybiB3aWR0aCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAxLjBcbiAgICAgICAgICA6IGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgICAgPyB3aWR0aC5tYXRjaCgvXlxccypbPD5dP1xccyooLiopJC8pWzFdIC8vIFJlbW92ZSB3aWR0aCBvcGVyYXRvclxuICAgICAgICAgICAgOiB3aWR0aFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgd2lkdGhPcGVyYXRvcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZ2V0KHdpZHRoKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyh3aWR0aClcbiAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKihbPD5dPykvKVsxXSB8fCBudWxsXG4gICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRWaXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlQ29tcG9uZW50Py5kZWZhdWx0VmlzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50RGlzYWJsZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdkaXNhYmxlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkaXNhYmxlZCkge1xuICAgICAgICByZXR1cm4gZGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZmxleEdyb3coKSB7XG4gICAgICAvLyBJbnRlcnByZXQgJz41MCUnIGFzICc1MCUsIGZsZXgtZ3JvdzogMWBcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMud2lkdGhPcGVyYXRvciA9PT0gJz4nIHx8XG4gICAgICAgIHRoaXMud2lkdGggPT09ICdmaWxsJ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICBmbGV4U2hyaW5rKCkge1xuICAgICAgLy8gSW50ZXJwcmV0ICc8NTAlJyBhcyAnNTAlLCBmbGV4LXNocmluazogMWBcbiAgICAgIHJldHVybiB0aGlzLndpZHRoT3BlcmF0b3IgPT09ICc8J1xuICAgIH0sXG5cbiAgICBmbGV4QmFzaXMoKSB7XG4gICAgICBjb25zdCB3aWR0aCA9IHRoaXMud2lkdGhcbiAgICAgIC8vICdhdXRvJyA9IG5vIGZpdHRpbmc6XG4gICAgICByZXR1cm4gW251bGwsICdhdXRvJywgJ2ZpbGwnXS5pbmNsdWRlcyh3aWR0aClcbiAgICAgICAgPyAnYXV0bydcbiAgICAgICAgOiAvJSQvLnRlc3Qod2lkdGgpXG4gICAgICAgICAgPyBwYXJzZUZsb2F0KHdpZHRoKSAvIDEwMCAvLyBwZXJjZW50YWdlIC0+IGZyYWN0aW9uXG4gICAgICAgICAgOiAvW2Etel0vLnRlc3Qod2lkdGgpXG4gICAgICAgICAgICA/IHdpZHRoIC8vIG5hdGl2ZSB1bml0c1xuICAgICAgICAgICAgOiBwYXJzZUZyYWN0aW9uKHdpZHRoKSAvLyBmcmFjdGlvblxuICAgIH0sXG5cbiAgICBjb21iaW5lZEJhc2lzKCkge1xuICAgICAgY29uc3QgeyBhY2N1bXVsYXRlZEJhc2lzLCBmbGV4QmFzaXMgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc051bWJlcihhY2N1bXVsYXRlZEJhc2lzKSAmJiBpc051bWJlcihmbGV4QmFzaXMpXG4gICAgICAgID8gYWNjdW11bGF0ZWRCYXNpcyAqIGZsZXhCYXNpc1xuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgY29udGFpbmVyQ2xhc3NlcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IGNsYXNzZXMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBjb25zdCBwcmVmaXggPSAnZGl0by1jb250YWluZXInXG4gICAgICByZXR1cm4ge1xuICAgICAgICBbYCR7cHJlZml4fS0tc2luZ2xlYF06IHRoaXMuc2luZ2xlLFxuICAgICAgICAnZGl0by1kaXNhYmxlZCc6IHRoaXMuY29tcG9uZW50RGlzYWJsZWQsXG4gICAgICAgICdkaXRvLWhhcy1lcnJvcnMnOiAhIXRoaXMuZXJyb3JzLFxuICAgICAgICBbYCR7cHJlZml4fS0tbGFiZWwtdmVydGljYWxgXTogdGhpcy52ZXJ0aWNhbExhYmVscyxcbiAgICAgICAgW2Ake3ByZWZpeH0tLW9taXQtc3BhY2luZ2BdOiBvbWl0U3BhY2luZyh0aGlzLnNjaGVtYSksXG4gICAgICAgIC4uLihpc1N0cmluZyhjbGFzc2VzKSA/IHsgW2NsYXNzZXNdOiB0cnVlIH0gOiBjbGFzc2VzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb250YWluZXJTdHlsZXMoKSB7XG4gICAgICBjb25zdCB7IGZsZXhCYXNpcywgY29tYmluZWRCYXNpcyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJy0tZ3Jvdyc6IHRoaXMuZmxleEdyb3cgPyAxIDogMCxcbiAgICAgICAgJy0tc2hyaW5rJzogdGhpcy5mbGV4U2hyaW5rID8gMSA6IDAsXG4gICAgICAgICctLWJhc2lzJzogaXNOdW1iZXIoZmxleEJhc2lzKSA/IGAke2ZsZXhCYXNpcyAqIDEwMH0lYCA6IGZsZXhCYXNpcyxcbiAgICAgICAgJy0tYmFzaXMtbW9iaWxlJzpcbiAgICAgICAgICBpc051bWJlcihjb21iaW5lZEJhc2lzKSAmJiBjb21iaW5lZEJhc2lzIDw9IDAuMjVcbiAgICAgICAgICAgID8gYCR7ZmxleEJhc2lzICogMjAwfSVgXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcG9uZW50Q2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXNpbmdsZSc6IHRoaXMuc2luZ2xlLFxuICAgICAgICAuLi50aGlzLmxheW91dENsYXNzZXNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbGF5b3V0Q2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXdpZHRoLWZpbGwnOiB0aGlzLndpZHRoID09PSAnZmlsbCcgfHwgdGhpcy5mbGV4QmFzaXMgIT09ICdhdXRvJyxcbiAgICAgICAgJ2RpdG8td2lkdGgtZ3Jvdyc6IHRoaXMuZmxleEdyb3csXG4gICAgICAgICdkaXRvLXdpZHRoLXNocmluayc6IHRoaXMuZmxleFNocmlua1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYW5lbEVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QWxsUGFuZWxFbnRyaWVzKFxuICAgICAgICB0aGlzLmFwaSxcbiAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgIHRoaXMuZGF0YVBhdGgsXG4gICAgICAgIHRoaXMuJHJlZnMuY29tcG9uZW50LFxuICAgICAgICB0aGlzLnRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25FcnJvcnMoZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IGVycm9yc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNvbnRhaW5lciB7XG4gIC0tZ3JvdzogMDtcbiAgLS1zaHJpbms6IDE7XG4gIC0tYmFzaXM6IGF1dG87XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4OiB2YXIoLS1ncm93KSB2YXIoLS1zaHJpbmspIHZhcigtLWJhc2lzKTtcbiAgZmxleC1mbG93OiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAvLyBUbyBwcmV2ZW50IGxpc3QgdGFibGVzIGZyb20gYmxvd2luZyBvdXQgb2YgdGhlaXIgZmxleCBib3ggY29udGFpbmVycy5cbiAgbWF4LXdpZHRoOiAxMDAlO1xuICAvLyBDYW5ub3QgdXNlIG1hcmdpbiBoZXJlIGFzIGl0IG5lZWRzIHRvIGJlIHBhcnQgb2YgYm94LXNpemluZyBmb3JcbiAgLy8gcGVyY2VudGFnZXMgaW4gZmxleC1iYXNpcyB0byB3b3JrLlxuICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGY7XG5cbiAgLmRpdG8tcGFuZSA+ICYge1xuICAgIC5kaXRvLXBhZ2UtLXdpZHRoLTgwICYge1xuICAgICAgZmxleC1ncm93OiAxO1xuICAgICAgZmxleC1iYXNpczogdmFyKC0tYmFzaXMtbW9iaWxlLCB2YXIoLS1iYXNpcykpO1xuICAgICAgLy8gREVCVUc6IGJhY2tncm91bmQ6IHllbGxvdztcbiAgICB9XG5cbiAgICAuZGl0by1wYWdlLS13aWR0aC02MCAmIHtcbiAgICAgIGZsZXgtYmFzaXM6IGNhbGMoMiAqIHZhcigtLWJhc2lzKSk7XG4gICAgICAvLyBERUJVRzogYmFja2dyb3VuZDogb3JhbmdlO1xuICAgIH1cblxuICAgIC5kaXRvLXNpZGViYXItLXdpZHRoLTk5ICYge1xuICAgICAgZmxleC1ncm93OiAxO1xuICAgICAgLy8gREVCVUc6IGJhY2tncm91bmQ6IHllbGxvdztcbiAgICB9XG5cbiAgICAuZGl0by1zaWRlYmFyLS13aWR0aC02MCAmIHtcbiAgICAgIGZsZXgtYmFzaXM6IGNhbGMoMiAqIHZhcigtLWJhc2lzKSk7XG4gICAgICAvLyBERUJVRzogYmFja2dyb3VuZDogb3JhbmdlO1xuICAgIH1cbiAgfVxuXG4gICY6ZW1wdHkge1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICAmLS1zaW5nbGUge1xuICAgIGhlaWdodDogMTAwJTsgLy8gU28gdGhhdCBsaXN0IGJ1dHRvbnMgY2FuIGJlIHN0aWNreSBhdCB0aGUgYm90dG9tO1xuICAgIC8vIEp1c3QgbGlrZSBvbiBEaXRvUGFuZSwgY2xlYXIgc2V0dGluZ3MgZnJvbSBhYm92ZS5cbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgJi0tbGFiZWwtdmVydGljYWwge1xuICAgIC8vIEZvciBwbGFpbiBjb21wb25lbnRzIHdpdGhvdXQgbGFiZWxzIGluIHJvd3Mgd2l0aCBvdGhlciBjb21wb25lbnRzIHRoYXRcbiAgICAvLyBoYXZlIGxhYmVscywgYWRkIHNvbWUgc3BhY2luZyB0byB0aGUgdG9wIHRvIGFsaWduIHdpdGggdGhlIG90aGVyXG4gICAgLy8gY29tcG9uZW50cyAoZS5nLiAgYnV0dG9ucyk6XG4gICAgPiAuZGl0by1jb21wb25lbnQ6Zmlyc3QtY2hpbGQ6bm90KC5kaXRvLXNlY3Rpb24sIC5kaXRvLWxpc3QsIC5kaXRvLW9iamVjdCkge1xuICAgICAgbWFyZ2luLXRvcDogJGlucHV0LWhlaWdodDtcbiAgICB9XG4gIH1cblxuICAmLS1vbWl0LXNwYWNpbmcge1xuICAgIHBhZGRpbmc6IDA7XG5cbiAgICA+IC5kaXRvLWxhYmVsIHtcbiAgICAgIG1hcmdpbjogJGZvcm0tc3BhY2luZy1oYWxmICRmb3JtLXNwYWNpbmctaGFsZiAwO1xuICAgIH1cbiAgfVxufVxuXG4vLyBOT1RFOiBUaGlzIGlzIG5vdCBuZXN0ZWQgaW5zaWRlIGAuZGl0by1jb250YWluZXJgIHNvIHRoYXQgb3RoZXJcbi8vIHR5cGUgY29tcG9uZW50cyBjYW4gb3ZlcnJpZGUgYC5kaXRvLXdpZHRoLWZpbGxgIGNsYXNzIChmaWx0ZXIgcHJlY2VkZW5jZSkuXG4uZGl0by1jb21wb25lbnQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgJi5kaXRvLXdpZHRoLWZpbGwge1xuICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgJi5kaXRvLWNoZWNrYm94LFxuICAgICYuZGl0by1yYWRpby1idXR0b24ge1xuICAgICAgLy8gV2ViS2l0IGRvZXNuJ3QgbGlrZSBjaGFuZ2VkIHdpZHRoIG9uIGNoZWNrYm94ZXMgYW5kIHJhZGlvcywgb3ZlcnJpZGU6XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB3aWR0aDogYXV0bztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdGFic1xuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1cIih0YWJTY2hlbWEsIGtleSkgaW4gdGFic1wiXG4gIClcbiAgICBhLmRpdG8tbGluayhcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEodGFiU2NoZW1hKVwiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogbW9kZWxWYWx1ZSA9PT0ga2V5IH1cIlxuICAgICAgQGNsaWNrPVwiJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywga2V5KVwiXG4gICAgKSB7eyBnZXRMYWJlbCh0YWJTY2hlbWEsIGtleSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UYWJzJywge1xuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZSddLFxuICBwcm9wczoge1xuICAgIHRhYnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQHVzZSAnc2Fzczpjb2xvcic7XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10YWJzIHtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1saW5rIHtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICB9XG5cbiAgICAvLyBXaGVuIGluIG1haW4gaGVhZGVyOlxuICAgIC5kaXRvLWhlYWRlciAmIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodDtcbiAgICAgIHBhZGRpbmc6ICR0YWItcGFkZGluZy12ZXIgJHRhYi1wYWRkaW5nLWhvcjtcbiAgICAgIG1hcmdpbi1sZWZ0OiAkdGFiLW1hcmdpbjtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVzdDtcbiAgICAgIH1cblxuICAgICAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVzdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXaGVuIGluc2lkZSBhIGlubGluZSBzY2hlbWE6XG4gICAgLmRpdG8tc2NoZW1hLWlubGluZWQgJixcbiAgICAuZGl0by1sYWJlbCAmIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyO1xuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gICAgICBtYXJnaW4tbGVmdDogLSRib3JkZXItd2lkdGg7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHRhYi1yYWRpdXM7XG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuICAgICAgfVxuXG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHRhYi1yYWRpdXM7XG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkdGFiLXJhZGl1cztcbiAgICAgIH1cblxuICAgICAgJjphY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlcjtcbiAgICAgIH1cblxuICAgICAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICAgIGJvcmRlci1jb2xvcjogY29sb3IuYWRqdXN0KCRjb2xvci1hY3RpdmUsICRsaWdodG5lc3M6IC0xMCUpO1xuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXNjaGVtYSAmIHtcbiAgICAvLyBQdXNoIGNsaXBib2FyZCB0byB0aGUgcmlnaHQgaW4gdGhlIGZsZXggbGF5b3V0LCBzZWU6XG4gICAgLy8gaHR0cHM6Ly9jb2RlcGVuLmlvL3Rob2xleC9wZW4vaHZlQngvXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gT25seSBzaG93IHBhbmVscyBpbiB0YWJzIHdoZW4gdGhlIHRhYnMgYXJlIGFsc28gdmlzaWJsZS5cbmNvbXBvbmVudC5kaXRvLXBhbmVsKFxuICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHBhbmVsU2NoZW1hKVwiXG4gIHYtc2hvdz1cInZpc2libGUgJiYgKCFwYW5lbFRhYkNvbXBvbmVudCB8fCBwYW5lbFRhYkNvbXBvbmVudC52aXNpYmxlKVwiXG4gIDppcz1cInBhbmVsVGFnXCJcbiAgQHN1Ym1pdC5wcmV2ZW50XG4pXG4gIERpdG9TY2hlbWEuZGl0by1wYW5lbF9fc2NoZW1hKFxuICAgIDpzY2hlbWE9XCJwYW5lbFNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIHBhZGRpbmc9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6aGFzT3duRGF0YT1cImhhc093bkRhdGFcIlxuICAgIGdlbmVyYXRlTGFiZWxzXG4gIClcbiAgICB0ZW1wbGF0ZSgjYmVmb3JlKVxuICAgICAgaDIuZGl0by1wYW5lbF9faGVhZGVyKDpjbGFzcz1cInsgJ2RpdG8tcGFuZWxfX2hlYWRlci0tc3RpY2t5Jzogc3RpY2t5IH1cIilcbiAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChzY2hlbWEpIH19XG4gICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbChcbiAgICAgICAgICA6YnV0dG9ucz1cInBhbmVsQnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgKVxuICAgIHRlbXBsYXRlKCNidXR0b25zKVxuICAgICAgRGl0b0J1dHRvbnMoXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFuZWwnLCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFuZWxUYWJDb21wb25lbnQ6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvd25EYXRhOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgcGFuZWxCdXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEucGFuZWxCdXR0b25zKVxuICAgIH0sXG5cbiAgICBoYXNPd25EYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5vd25EYXRhXG4gICAgfSxcblxuICAgIHBhbmVsRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm93bkRhdGEgfHwgdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIHBhbmVsU2NoZW1hKCkge1xuICAgICAgaWYgKHRoaXMuaGFzT3duRGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY2hlbWFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBgZGF0YWAgZnJvbSB0aGUgc2NoZW1hLCBzbyB0aGF0IERpdG9TY2hlbWEgaXNuJ3QgdXNpbmcgaXQgdG9cbiAgICAgICAgLy8gcHJvZHVjZSBpdHMgb3duIGRhdGEuIFNlZSAkZmlsdGVycyBwYW5lbCBmb3IgbW9yZSBkZXRhaWxzIG9uIGRhdGEuXG4gICAgICAgIGNvbnN0IHsgZGF0YSwgLi4uc2NoZW1hIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICByZXR1cm4gc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhbmVsVGFnKCkge1xuICAgICAgLy8gUGFuZWxzIHRoYXQgcHJvdmlkZSB0aGVpciBvd24gZGF0YSBuZWVkIHRoZWlyIG93biBmb3JtLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/ICdmb3JtJyA6ICdkaXYnXG4gICAgfSxcblxuICAgIHBhbmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBJZiB0aGUgcGFuZWwgcHJvdmlkZXMgaXRzIG93biBkYXRhLCB0aGVuIGl0IG5lZWRzIHRvIHByZWZpeCBhbGxcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCBpdHMgZGF0YS1wYXRoLCBidXQgaWYgaXQgc2hhcmVzIGRhdGEgd2l0aCB0aGUgc2NoZW1hXG4gICAgICAvLyBjb21wb25lbnQsIHRoZW4gaXQgc2hvdWxkIHNoYXJlIHRoZSBkYXRhLXBhdGggbmFtZSBzcGFjZSB0b28uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gdGhpcy5kYXRhUGF0aCA6IHRoaXMuc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoXG4gICAgfSxcblxuICAgIHZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSxcblxuICAgIHN0aWNreTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0aWNreScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIC8vIE5PVEU6IFRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIGBzY2hlbWEuZGF0YWAgaGFuZGxpbmcgaW4gRGl0b1NjaGVtYSxcbiAgICAvLyB3aGVyZSB0aGUgZGF0YSBpcyBhZGRlZCB0byB0aGUgYWN0dWFsIGNvbXBvbmVudC5cbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHRoaXMub3duRGF0YSA9IGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgPyBkYXRhKHRoaXMuY29udGV4dClcbiAgICAgICAgOiBkYXRhXG4gICAgfVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUmVnaXN0ZXIgdGhlIHBhbmVscyBzbyB0aGF0IG90aGVyIGNvbXBvbmVudHMgY2FuIGZpbmQgdGhlbSBieSB0aGVpclxuICAgICAgLy8gZGF0YS1wYXRoLCBlLmcuIGluIFR5cGVMaXN0Lm9uRmlsdGVyRXJyb3JzKClcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlclBhbmVsKHRoaXMsIGFkZClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYW5lbCB7XG4gICY6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgbWFyZ2luLWJvdHRvbTogJGNvbnRlbnQtcGFkZGluZztcbiAgfVxuXG4gICZfX2hlYWRlciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gICAgYmFja2dyb3VuZDogJGJ1dHRvbi1jb2xvcjtcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuXG4gICAgJi0tc3RpY2t5IHtcbiAgICAgICRtYXJnaW46ICRpbnB1dC1oZWlnaHQtZmFjdG9yICogJGxpbmUtaGVpZ2h0ICogJGZvbnQtc2l6ZS1zbWFsbCArXG4gICAgICAgICRmb3JtLXNwYWNpbmc7XG5cbiAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICB0b3A6ICRjb250ZW50LXBhZGRpbmc7XG4gICAgICBtYXJnaW4tYm90dG9tOiAkbWFyZ2luO1xuICAgICAgei1pbmRleDogMTtcblxuICAgICAgJiArICoge1xuICAgICAgICBtYXJnaW4tdG9wOiAtJG1hcmdpbjtcbiAgICAgIH1cblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBoZWlnaHQ6ICRjb250ZW50LXBhZGRpbmc7XG4gICAgICAgIHRvcDogLSRjb250ZW50LXBhZGRpbmc7XG4gICAgICAgIG1hcmdpbjogLSRib3JkZXItd2lkdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmRpdG8tYnV0dG9ucyB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICByaWdodDogJGlucHV0LXBhZGRpbmctdmVyO1xuICAgICAgdG9wOiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgfVxuICB9XG5cbiAgJl9fc2NoZW1hIHtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGw7XG4gICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgYm9yZGVyLXRvcDogMDtcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG5cbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50IHtcbiAgICAgIC5kaXRvLW9iamVjdCB7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgIH1cblxuICAgICAgPiAuZGl0by1idXR0b25zIHtcbiAgICAgICAgLS1idXR0b24tbWFyZ2luOiAjeyRmb3JtLXNwYWNpbmd9O1xuXG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmc7XG5cbiAgICAgICAgLmRpdG8tY29udGFpbmVyIHtcbiAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmRpdG8tbGFiZWwge1xuICAgICAgbGFiZWwge1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1wYW5lbHMoXG4gIHYtaWY9XCJwYW5lbHMubGVuZ3RoID4gMFwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwieyBzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQgfSBpbiBwYW5lbHNcIlxuICApXG4gICAgRGl0b1BhbmVsKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEpXCJcbiAgICAgIDprZXk9XCJnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShzY2hlbWEubmFtZSlcIlxuICAgICAgOmRpc2FibGVkPVwic2NoZW1hLmRpc2FibGVkID8/IGRpc2FibGVkXCJcbiAgICAgIDpwYW5lbFRhYkNvbXBvbmVudD1cInRhYkNvbXBvbmVudFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1BhbmVscycsIHtcbiAgcHJvcHM6IHtcbiAgICBwYW5lbHM6IHsgdHlwZTogQXJyYXksIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KSB7XG4gICAgICAvLyBBbGxvdyBzZXBhcmF0ZSB0YWJzIHRvIHVzZSBwYW5lbHMgb2YgdGhlIHNhbWUgbmFtZSwgYnlcbiAgICAgIC8vIHByZWZpeGluZyB0aGVpciBrZXkgd2l0aCB0aGUgdGFiIG5hbWUuXG4gICAgICByZXR1cm4gdGFiQ29tcG9uZW50ID8gYCR7dGFiQ29tcG9uZW50LnRhYn1fJHtkYXRhUGF0aH1gIDogZGF0YVBhdGhcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYW5lbHMge1xuICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmc7XG4gIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1idXR0b25zKFxuICB2LWlmPVwiYnV0dG9uU2NoZW1hcyB8fCBoYXNTbG90Q29udGVudCgkc2xvdHMuZGVmYXVsdClcIlxuKVxuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1cIihidXR0b25TY2hlbWEsIGJ1dHRvbkRhdGFQYXRoKSBpbiBidXR0b25TY2hlbWFzXCJcbiAgKVxuICAgIERpdG9Db250YWluZXIoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKGJ1dHRvblNjaGVtYSlcIlxuICAgICAgOmtleT1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJidXR0b25TY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGJ1dHRvblNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1cInZub2RlIG9mICRzbG90cy5kZWZhdWx0Py4oKVwiXG4gIClcbiAgICAvLy0gUmVuZGVyIGVhY2ggbm9kZSBpbiB0aGUgZGVmYXVsdCBzbG90IHRocm91Z2ggYGRpdG8tdm5vZGVgLFxuICAgIC8vLSBzbyBpdCBjYW4gYmUgd3JhcHBlZCBpbiBhIGAuZGl0by1jb250YWluZXJgIGNsYXNzLlxuICAgIC5kaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJoYXNWTm9kZUNvbnRlbnQodm5vZGUpXCJcbiAgICApXG4gICAgICBEaXRvVm5vZGUoOnZub2RlPVwidm5vZGVcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaGFzU2xvdENvbnRlbnQsIGhhc1ZOb2RlQ29udGVudCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9CdXR0b25zJywge1xuICBwcm92aWRlOiB7XG4gICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICAvLyBDb21wdXRlIGEgYnV0dG9ucyBsaXN0IHdoaWNoIGhhcyB0aGUgZGF0YVBhdGggYmFrZWQgaW50byBpdHMga2V5cy5cbiAgICAgIGNvbnN0IHsgZGF0YVBhdGgsIGJ1dHRvbnMgfSA9IHRoaXNcbiAgICAgIHJldHVybiBidXR0b25zXG4gICAgICAgID8gT2JqZWN0LnZhbHVlcyhidXR0b25zKS5yZWR1Y2UoKHNjaGVtYXMsIGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgc2NoZW1hc1thcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgYnV0dG9uLm5hbWUpXSA9IGJ1dHRvblxuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYXNcbiAgICAgICAgICB9LCB7fSlcbiAgICAgICAgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYXNTbG90Q29udGVudCxcbiAgICBoYXNWTm9kZUNvbnRlbnRcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWJ1dHRvbnMge1xuICA+IC5kaXRvLWNvbnRhaW5lciB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gU2V0IGBAY2xpY2suc3RvcGAgdG8gcHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsLlxuRGl0b0J1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgQGNsaWNrLnN0b3BcbilcbiAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgYS5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWRpc2FibGVkJzogaXNEcmFnZ2FibGVEaXNhYmxlZCB9XCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgKVxuICBSb3V0ZXJMaW5rLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1kaXNhYmxlZCc6IGlzRWRpdGFibGVEaXNhYmxlZCB9XCJcbiAgICA6dG89XCJlZGl0UGF0aCA/IHsgcGF0aDogZWRpdFBhdGggfSA6IHt9XCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgKVxuICBEaXRvQ3JlYXRlQnV0dG9uKFxuICAgIHYtaWY9XCJjcmVhdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgOnZlcmI9XCJ2ZXJicy5jcmVhdGVcIlxuICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gICAgOmRpc2FibGVkPVwiaXNDcmVhdGFibGVEaXNhYmxlZFwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIDpkaXNhYmxlZD1cImlzRGVsZXRhYmxlRGlzYWJsZWRcIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgQGNsaWNrPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBjYXBpdGFsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRWRpdEJ1dHRvbnMnLCB7XG4gIGVtaXRzOiBbJ2RlbGV0ZSddLFxuXG4gIHByb3BzOiB7XG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY3JlYXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3JlYXRlUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9ybUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEuZm9ybSlcbiAgICB9LFxuXG4gICAgaXNEcmFnZ2FibGVEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmhhc1NjaGVtYU9wdGlvbignZHJhZ2dhYmxlJylcbiAgICB9LFxuXG4gICAgaXNEZWxldGFibGVEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmhhc1NjaGVtYU9wdGlvbignZGVsZXRhYmxlJylcbiAgICB9LFxuXG4gICAgaXNFZGl0YWJsZURpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5kaXNhYmxlZCB8fFxuICAgICAgICAhdGhpcy5lZGl0UGF0aCB8fFxuICAgICAgICAhdGhpcy5oYXNTY2hlbWFPcHRpb24oJ2VkaXRhYmxlJylcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNDcmVhdGFibGVEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgfHxcbiAgICAgICAgIXRoaXMuY3JlYXRlUGF0aCB8fFxuICAgICAgICAhdGhpcy5oYXNTY2hlbWFPcHRpb24oJ2NyZWF0YWJsZScpXG4gICAgICApXG4gICAgfSxcblxuICAgIGNyZWF0ZUJ1dHRvblRleHQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgY3JlYXRlIGJ1dHRvbiB0aHJvdWdoIGNyZWF0YWJsZSBvYmplY3Q6XG4gICAgICAgIHRoaXMuc2NoZW1hLmNyZWF0YWJsZT8ubGFiZWwgfHwgKFxuICAgICAgICAgIC8vIEF1dG8tZ2VuZXJhdGUgY3JlYXRlIGJ1dHRvbiBsYWJlbHMgZnJvbSBmcm9tIGxhYmVscyBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMgd2l0aCBvbmx5IG9uZSBmb3JtOlxuICAgICAgICAgIHRoaXMuZm9ybUxhYmVsICYmXG4gICAgICAgICAgYCR7Y2FwaXRhbGl6ZSh0aGlzLnZlcmJzLmNyZWF0ZSl9ICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICApIHx8XG4gICAgICAgIG51bGxcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc1NjaGVtYU9wdGlvbihuYW1lKSB7XG4gICAgICAvLyBBbGwgb3B0aW9ucyBjYW4gYmUgZGlzYWJsZWQgb24gYSBwZXItZm9ybSBiYXNpcyBieSBzZXR0aW5nXG4gICAgICAvLyBgc2NoZW1hW25hbWVdYCB0byBgZmFsc2VgIG9yIGEgY2FsbGJhY2sgcmV0dXJuaW5nIGBmYWxzZWAuXG4gICAgICByZXR1cm4gdGhpcy5nZXRTY2hlbWFWYWx1ZShuYW1lLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgLy8gT3ZlcnJpZGUgY3Vyc29yIGZyb20gY29sbGFwc2libGUgZGl0by1sYWJlbDpcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBmbGV4OiBub25lO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jcmVhdGUtYnV0dG9uXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiY3JlYXRhYmxlRm9ybVwiXG4gICAgOnR5cGU9XCJpc0lubGluZWQgPyAnYnV0dG9uJyA6ICdzdWJtaXQnXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJiKVwiXG4gICAgQGNsaWNrPVwiY3JlYXRlSXRlbShjcmVhdGFibGVGb3JtKVwiXG4gICkge3sgdGV4dCB9fVxuICB0ZW1wbGF0ZShcbiAgICB2LWVsc2UtaWY9XCJjcmVhdGFibGVGb3Jtc1wiXG4gIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYilcIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgICApIHt7IHRleHQgfX1cbiAgICB1bC5kaXRvLXB1bGxkb3duKDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiKVxuICAgICAgbGkoXG4gICAgICAgIHYtZm9yPVwiKGZvcm0sIHR5cGUpIGluIGNyZWF0YWJsZUZvcm1zXCJcbiAgICAgIClcbiAgICAgICAgYShcbiAgICAgICAgICB2LXNob3c9XCJzaG91bGRTaG93U2NoZW1hKGZvcm0pXCJcbiAgICAgICAgICA6Y2xhc3M9XCJnZXRGb3JtQ2xhc3MoZm9ybSwgdHlwZSlcIlxuICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odHlwZSlcIlxuICAgICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodHlwZSlcIlxuICAgICAgICApIHt7IGdldExhYmVsKGZvcm0pIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Rm9ybVNjaGVtYXMsIGlzSW5saW5lZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQ3JlYXRlQnV0dG9uJywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gVGhlIG5leHQgZm91ciBwcm9wcyBhcmUgdGhlcmUgZm9yIGBEaXRvQ29udGV4dGAgYW5kIHRoZSBgY29udGV4dCgpYFxuICAgIC8vIGdldHRlciBpbiBgRGl0b01peGluYC5cbiAgICAvLyBUT0RPOiBTaG91bGQgdGhleSBiZSBtb3ZlZCB0byBzaGFyZWQgbWl4aW4gdGhhdCBkZWZpbmVzIHRoZW0gYXMgcmVxdWlyZWRcbiAgICAvLyBhbmQgYWxzbyBwcm92aWRlcyB0aGUgYGNvbnRleHQoKWAgZ2V0dGVyLCBwZXJoYXBzIGBDb250ZXh0TWl4aW5gP1xuICAgIC8vIGBzY2hlbWFgIGNvdWxkIGJlIGluY2x1ZGVkIGFzIHdlbGwsIGFuZCBgQ29udGV4dE1peGluYCBjb3VsZCBiZSB1c2VkIGluXG4gICAgLy8gYERpdG9Gb3JtYCwgYERpdG9WaWV3YCwgYERpdG9QYW5lbGAsIGBEaXRvU2NoZW1hYCwgYERpdG9FZGl0QnV0dG9uc2AsXG4gICAgLy8gZXRjPyBCdXQgdGhlIHByb2JsZW0gd2l0aCB0aGUgcm9vdCBjb21wb25lbnRzIGlzIHRoYXQgdGhleSBkb24ndCBoYXZlXG4gICAgLy8gdGhlc2UgcHJvcHMuIFdlIGNvdWxkIGFkZCBhIGBjb250ZXh0QXR0cmlidXRlcygpYCBnZXR0ZXIgZm9yIGVhc3kgcGFzc2luZ1xuICAgIC8vIG9uIGFzIGB2LWJpbmQ9XCJjb250ZXh0QXR0cmlidXRlc1wiYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdmVyYjogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGV4dDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBjcmVhdGFibGVGb3JtcygpIHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLmZvcm1zKS5maWx0ZXIoXG4gICAgICAgIChbLCBmb3JtXSkgPT4gdGhpcy5pc0Zvcm1DcmVhdGFibGUoZm9ybSlcbiAgICAgIClcbiAgICAgIHJldHVybiBlbnRyaWVzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcylcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGNyZWF0YWJsZUZvcm0oKSB7XG4gICAgICBjb25zdCBmb3JtcyA9IHRoaXMuY3JlYXRhYmxlRm9ybXNcbiAgICAgIHJldHVybiBmb3JtcyAmJiBPYmplY3Qua2V5cyhmb3JtcykubGVuZ3RoID09PSAxICYmIGZvcm1zLmRlZmF1bHQgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaXNGb3JtQ3JlYXRhYmxlKGZvcm0pIHtcbiAgICAgIC8vIEZvcm1zIGNhbiBiZSBleGNsdWRlZCBmcm9tIHRoZSBsaXN0IGJ5IHByb3ZpZGluZyBgaWY6IGZhbHNlYCBvclxuICAgICAgLy8gYGNyZWF0YWJsZTogZmFsc2VgLlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5zaG91bGRSZW5kZXJTY2hlbWEoZm9ybSkgJiZcbiAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnY3JlYXRhYmxlJywge1xuICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgICBzY2hlbWE6IGZvcm1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShmb3JtLCB0eXBlID0gbnVsbCkge1xuICAgICAgaWYgKCF0aGlzLnNob3VsZERpc2FibGVTY2hlbWEoZm9ybSkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbmxpbmVkKSB7XG4gICAgICAgICAgdGhpcy5zb3VyY2VDb21wb25lbnQuY3JlYXRlSXRlbShmb3JtLCB0eXBlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgICAgIHBhdGg6IGAke3RoaXMucGF0aH0vY3JlYXRlYCxcbiAgICAgICAgICAgIHF1ZXJ5OiB7IHR5cGUgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGFsbG93ZWQgdG8gY3JlYXRlIGl0ZW0gZm9yIGdpdmVuIGZvcm0nKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRGb3JtQ2xhc3MoZm9ybSwgdHlwZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2BkaXRvLXR5cGUtJHt0eXBlfWBdOiB0cnVlLFxuICAgICAgICAnZGl0by1kaXNhYmxlZCc6IHRoaXMuc2hvdWxkRGlzYWJsZVNjaGVtYShmb3JtKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KHR5cGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlSXRlbSh0aGlzLmZvcm1zW3R5cGVdLCB0eXBlKVxuICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tY3JlYXRlLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAuZGl0by1wdWxsZG93biB7XG4gICAgcmlnaHQ6IDA7XG5cbiAgICAuZGl0by1idXR0b25zLXN0aWNreSAmIHtcbiAgICAgIHRvcDogdW5zZXQ7XG4gICAgICByaWdodDogdW5zZXQ7XG4gICAgICBib3R0b206IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jbGlwYm9hcmQuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgdi1pZj1cImNsaXBib2FyZFwiXG4pXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1jb3B5KFxuICAgIHJlZj1cImNvcHlEYXRhXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0aXRsZT1cIkNvcHkgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIWNvcHlFbmFibGVkXCJcbiAgICBAY2xpY2s9XCJvbkNvcHlcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1wYXN0ZShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0aXRsZT1cIlBhc3RlIERhdGFcIlxuICAgIDpkaXNhYmxlZD1cIiFwYXN0ZUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uUGFzdGVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNPYmplY3QsIGNsb25lLCBkZWluZGVudCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQ2xpcGJvYXJkJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBjbGlwYm9hcmQ6IHsgdHlwZTogW0Jvb2xlYW4sIE9iamVjdF0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvcHlFbmFibGVkOiBmYWxzZSxcbiAgICAgIHBhc3RlRW5hYmxlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGlwYm9hcmRPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KHRoaXMuY2xpcGJvYXJkKSA/IHRoaXMuY2xpcGJvYXJkIDoge31cbiAgICB9LFxuXG4gICAgY29weURhdGEoKSB7XG4gICAgICBjb25zdCB7IGNvcHkgfSA9IHRoaXMuY2xpcGJvYXJkT3B0aW9uc1xuICAgICAgcmV0dXJuIGNvcHlcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+XG4gICAgICAgICAgICBjb3B5LmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgY2xpcGJvYXJkRGF0YSB9KSlcbiAgICAgICAgOiBjbGlwYm9hcmREYXRhID0+IGNsb25lKGNsaXBib2FyZERhdGEpXG4gICAgfSxcblxuICAgIHBhc3RlRGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgcGFzdGUgfSA9IHRoaXMuY2xpcGJvYXJkT3B0aW9uc1xuICAgICAgcmV0dXJuIHBhc3RlXG4gICAgICAgID8gY2xpcGJvYXJkRGF0YSA9PlxuICAgICAgICAgICAgcGFzdGUuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBjbGlwYm9hcmREYXRhIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xpcGJvYXJkRGF0YVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIC8vIENoZWNrIHJpZ2h0IGF3YXkgYWxzbyBpbiBjYXNlIHRoZXJlJ3MgYWxyZWFkeSBkYXRhIChlLmcuIGNyZWF0ZSBmb3JtKTpcbiAgICAncGFyZW50Q29tcG9uZW50Lmhhc0RhdGEnOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiAndXBkYXRlQ29weSdcbiAgICB9LFxuXG4gICAgJ2FwcFN0YXRlLmNsaXBib2FyZERhdGEnOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiAndXBkYXRlUGFzdGUnXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgLy8gQ2hlY2sgY2xpcGJvYXJkIGNvbnRlbnQgd2hlbmV2ZXIgc29tZXRoaW5nIGdldHMgY29waWVkIG9yIHRoZSB3aW5kb3cgZ2V0c1xuICAgIC8vIChyZSlhY3RpdmF0ZWQsIGFzIHRob3NlIGFyZSB0aGUgbW9tZW50cyB3aGVuIHRoZSBjbGlwYm9hcmQgY2FuIGNoYW5nZTpcbiAgICB0aGlzLmRvbU9uKGRvY3VtZW50LCB7IGNvcHk6IHRoaXMudXBkYXRlUGFzdGUgfSlcbiAgICB0aGlzLmRvbU9uKHdpbmRvdywgeyBmb2N1czogdGhpcy51cGRhdGVQYXN0ZSB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBjaGVja0NsaXBib2FyZERhdGEoY2xpcGJvYXJkRGF0YSkge1xuICAgICAgY29uc3QgeyAkc2NoZW1hLCAuLi5kYXRhIH0gPSBjbGlwYm9hcmREYXRhIHx8IHt9XG4gICAgICByZXR1cm4gJHNjaGVtYSA9PT0gdGhpcy5zY2hlbWEubmFtZSA/IGRhdGEgOiBudWxsXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENsaXBib2FyZERhdGEocmVwb3J0KSB7XG4gICAgICAvLyBVc2UgdGhlIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgIGxldCB7IGNsaXBib2FyZERhdGEgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy5yZWFkVGV4dD8uKClcbiAgICAgICAgaWYgKGpzb24pIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhID0gSlNPTi5wYXJzZShqc29uKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJlcG9ydCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgaWYgKGVyci5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICBhbGVydChkZWluZGVudGBcbiAgICAgICAgICAgICAgVGhlIGRhdGEgaW4gdGhlIGNsaXBib2FyZCBhcHBlYXJzIHRvIGJlIG1hbGZvcm1lZDpcbiAgICAgICAgICAgICAgJHtlcnIubWVzc2FnZX1cbiAgICAgICAgICAgIGApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jaGVja0NsaXBib2FyZERhdGEoY2xpcGJvYXJkRGF0YSlcbiAgICB9LFxuXG4gICAgdXBkYXRlQ29weSgpIHtcbiAgICAgIHRoaXMuY29weUVuYWJsZWQgPSB0aGlzLnBhcmVudENvbXBvbmVudC5oYXNEYXRhXG4gICAgfSxcblxuICAgIGFzeW5jIHVwZGF0ZVBhc3RlKCkge1xuICAgICAgdGhpcy5wYXN0ZUVuYWJsZWQgPSAhIXRoaXMuY2hlY2tDbGlwYm9hcmREYXRhKHRoaXMuYXBwU3RhdGUuY2xpcGJvYXJkRGF0YSlcbiAgICAgIGlmICghdGhpcy5wYXN0ZUVuYWJsZWQgJiYgdGhpcy5hcHBTdGF0ZS5hZ2VudC5jaHJvbWUpIHtcbiAgICAgICAgLy8gU2VlIGlmIHRoZSBjbGlwYm9hcmQgY29udGVudCBpcyB2YWxpZCBKU09OIGRhdGEgdGhhdCBpcyBjb21wYXRpYmxlXG4gICAgICAgIC8vIHdpdGggdGhlIGN1cnJlbnQgdGFyZ2V0IHNjaGVtYSwgYW5kIG9ubHkgdGhlbiBhY3RpdmF0ZSB0aGUgcGFzdGluZzpcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YShmYWxzZSkgLy8gRG9uJ3QgcmVwb3J0XG4gICAgICAgIHRoaXMucGFzdGVFbmFibGVkID0gISFkYXRhXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ29weSgpIHtcbiAgICAgIGxldCBkYXRhID0gdGhpcy5wYXJlbnRDb21wb25lbnQuY2xpcGJvYXJkRGF0YVxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICBkYXRhID0ge1xuICAgICAgICAgICAgJHNjaGVtYTogdGhpcy5zY2hlbWEubmFtZSxcbiAgICAgICAgICAgIC4uLnRoaXMuY29weURhdGEoZGF0YSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gS2VlcCBhbiBpbnRlcm5hbCBjbGlwYm9hcmQgYXMgZmFsbGJhY2suXG4gICAgICAgIHRoaXMuYXBwU3RhdGUuY2xpcGJvYXJkRGF0YSA9IGRhdGFcbiAgICAgICAgdGhpcy5wYXN0ZUVuYWJsZWQgPSB0cnVlXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5uYW1lLCBlcnIubWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgYWxlcnQoZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25QYXN0ZSgpIHtcbiAgICAgIGxldCBkYXRhID0gYXdhaXQgdGhpcy5nZXRDbGlwYm9hcmREYXRhKHRydWUpIC8vIFJlcG9ydFxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGRhdGEgJiYgdGhpcy5wYXN0ZURhdGEoZGF0YSlcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICB0aGlzLnBhcmVudENvbXBvbmVudC5jbGlwYm9hcmREYXRhID0gZGF0YVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNsaXBib2FyZCB7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgLmRpdG8tc2NoZW1hICYge1xuICAgIC8vIFB1c2ggY2xpcGJvYXJkIHRvIHRoZSByaWdodCBpbiB0aGUgZmxleCBsYXlvdXQsIHNlZTpcbiAgICAvLyBodHRwczovL2NvZGVwZW4uaW8vdGhvbGV4L3Blbi9odmVCeC9cbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgfVxuXG4gIC5kaXRvLWhlYWRlciAmIHtcbiAgICBtYXJnaW4tbGVmdDogMDtcblxuICAgIC5kaXRvLWJ1dHRvbiB7XG4gICAgICBtYXJnaW46IDAgMCAkdGFiLW1hcmdpbiAkdGFiLW1hcmdpbjtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZywgeyB1cGRhdGVSb290ID0gZmFsc2UsIHVwZGF0ZVZpZXcgPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICghdGhpcy5pc0xvYWRpbmcgXiAhaXNMb2FkaW5nKSB7XG4gICAgICAgIC8vIEJvb2xlYW4geG9yXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICAgICAgaWYgKHVwZGF0ZVJvb3QpIHtcbiAgICAgICAgICB0aGlzLnJvb3RDb21wb25lbnQucmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZylcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlVmlldykge1xuICAgICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXRMb2FkaW5nKHRoaXMuaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgSXRlbU1peGluIGZyb20gJy4vSXRlbU1peGluLmpzJ1xuaW1wb3J0IExvYWRpbmdNaXhpbiBmcm9tICcuL0xvYWRpbmdNaXhpbi5qcydcbmltcG9ydCB7IHNldERlZmF1bHRWYWx1ZXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgTG9hZGluZ01peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAvLyBQYXNzIGxvY2FsIHZlcmJzIG92ZXJyaWRlcyBvbiB0byBjaGlsZHJlbiwgc2VlIHZlcmJzKCkgY29tcHV0ZWQgcHJvcC5cbiAgICAgICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyxcbiAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdGhpcy5oYXNEYXRhXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRlZERhdGE6IG51bGwsXG4gICAgICBhYm9ydENvbnRyb2xsZXI6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgLy8gUmV0dXJucyB0aGUgcmVzb3VyY2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVzb3VyY2UgZm9yIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBzb3VyY2Ugc2NoZW1hLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBhIGRhdGEtc291cmNlIGlmIGl0IGhhcyBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZTpcbiAgICAgIHJldHVybiAhIXRoaXMucmVzb3VyY2VcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICAvLyBSZXR1cm5zIGBmYWxzZWBoZXJlLCBidXQgaXMgb3ZlcnJpZGRlbiB0byByZXR1cm4gYHRydWVgIGluXG4gICAgICAvLyBgU291cmNlTWl4aW5gIGZvciBjb21wb25lbnQgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGVpciBvd24gZGF0YSwgYnV0XG4gICAgICAvLyBlZGl0IHRoZWlyIGl0ZW1zIHRocm91Z2ggYSBsaW5rZWQgdmlldy4gIEluIHRoaXMgY2FzZSwgcmVhbCBpZHMgbmVlZCB0b1xuICAgICAgLy8gYmUgdXNlZC5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIC8vIENoZWNrIHRoZSBmb3JtIHRoYXQgdGhpcyBjb21wb25lbnQgYmVsb25ncyB0byBhcyB3ZWxsLCBzaW5jZSBpdCBtYXkgYmVcbiAgICAgIC8vIGluIGNyZWF0aW9uIG1vZGUsIHdoaWNoIG1ha2VzIGl0IHRyYW5zaWVudC5cbiAgICAgIC8vIE5PVEU6IFRoaXMgZG9lcyBub3QgbG9vcCBlbmRsZXNzbHkgYmVjYXVzZSBEaXRvRm9ybSByZWRlZmluZXNcbiAgICAgIC8vIGBpc1RyYW5zaWVudCgpYCB0byBvbmx5IHJldHVybiBgIXRoaXMucHJvdmlkZXNEYXRhYC5cbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1Db21wb25lbnRcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAhdGhpcy5saW5rc1RvVmlldyB8fFxuICAgICAgICBmb3JtICYmIChcbiAgICAgICAgICBmb3JtLmlzVHJhbnNpZW50IHx8XG4gICAgICAgICAgZm9ybS5pc0NyZWF0aW5nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdHJhbnNpZW50Tm90ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiYgKFxuICAgICAgICAgICc8Yj5Ob3RlPC9iPjogdGhlIHBhcmVudCBzdGlsbCBuZWVkcyB0byBiZSBzYXZlZCAnICtcbiAgICAgICAgICAnaW4gb3JkZXIgdG8gcGVyc2lzdCB0aGlzIGNoYW5nZS4nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgc2hvdWxkTG9hZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgICF0aGlzLmlzTG9hZGluZ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBoYXNEYXRhKCkge1xuICAgICAgLy8gQmFzZSBkZWZpbml0aW9uLCB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluXG4gICAgICByZXR1cm4gISF0aGlzLmxvYWRlZERhdGFcbiAgICB9LFxuXG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBUaGUgYWN0dWFsIGNvZGUgaXMgdGhlIGBnZXRWZXJicygpYCBtZXRob2QsIGZvciBlYXNpZXIgb3ZlcnJpZGluZyBvZlxuICAgICAgLy8gdGhpcyBjb21wdXRlZCBwcm9wZXJ0eSBpbiBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSBSZXNvdXJjZU1peGluLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmVyYnMoKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0aW9uUmFuZ2UoKSB7XG4gICAgICAvLyBPbmx5IGFwcGx5IHBhZ2luYXRpb24gdG8gbGlzdHMuXG4gICAgICBjb25zdCB7IHBhZ2luYXRlOiBhbW91bnQgfSA9IHRoaXMuc291cmNlU2NoZW1hXG4gICAgICBpZiAodGhpcy5pc0xpc3RTb3VyY2UgJiYgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHsgcGFnZSA9IDAgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwYWdlICogYW1vdW50XG4gICAgICAgIHJldHVybiBbc3RhcnQsIHN0YXJ0ICsgYW1vdW50IC0gMV1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIHF1ZXJ5UGFyYW1zKCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnBhZ2luYXRpb25SYW5nZVxuICAgICAgY29uc3QgeyBwYWdlLCAuLi5xdWVyeSB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucXVlcnksIC8vIFF1ZXJ5IG1heSBvdmVycmlkZSBzY29wZS5cbiAgICAgICAgLi4uKHJhbmdlICYmIHtcbiAgICAgICAgICAvLyBQYXNzIHBhZ2luYXRpb24gYXMgcmFuZ2UsIHNvIHRoYXQgd2UgYXV0b21hdGljYWxseSBnZXQgT2JqZWN0aW9uJ3NcbiAgICAgICAgICAvLyByZXN1bHRzIGNvdW50aW5nOlxuICAgICAgICAgIHJhbmdlOiByYW5nZS5qb2luKCcsJylcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBXaGVuIGNyZWF0aW5nIG5lc3RlZCBkYXRhLCB3ZSBzdGlsbCBuZWVkIHRvIGNhbGwgc2V0dXBEYXRhKClcbiAgICBpZiAodGhpcy5wcm92aWRlc0RhdGEgfHwgdGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICB0aGlzLnNldHVwRGF0YSgpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRSZXNvdXJjZSgpIHtcbiAgICAgIC8vIFRoaXMgaXMgZGVmaW5lZCBhcyBhIG1ldGhvZCBzbyB0aGUgY29tcHV0ZWQgYHJlc291cmNlYCBnZXR0ZXIgY2FuXG4gICAgICAvLyBiZSBvdmVycmlkZGVuIGFuZCBgc3VwZXJgIGZ1bmN0aW9uYWxpdHkgY2FuIHN0aWxsIGJlIGFjY2Vzc2VkLlxuICAgICAgcmV0dXJuIGdldFJlc291cmNlKHRoaXMuc291cmNlU2NoZW1hPy5yZXNvdXJjZSwge1xuICAgICAgICB0eXBlOiAnY29sbGVjdGlvbicsXG4gICAgICAgIHBhcmVudDogdGhpcy5wYXJlbnRGb3JtQ29tcG9uZW50Py5yZXNvdXJjZSA/PyBudWxsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRWZXJicygpIHtcbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy4kdmVyYnMoKVxuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHQgdmVyYnMgd2l0aCB0aGVpciB0cmFuc2llbnQgdmVyc2lvbnM6XG4gICAgICAgICAgICBjcmVhdGU6ICdhZGQnLFxuICAgICAgICAgICAgY3JlYXRlZDogJ2FkZGVkJyxcbiAgICAgICAgICAgIHNhdmU6ICdhcHBseScsXG4gICAgICAgICAgICBzYXZlZDogJ2FwcGxpZWQnLFxuICAgICAgICAgICAgZGVsZXRlOiAncmVtb3ZlJyxcbiAgICAgICAgICAgIGRlbGV0ZWQ6ICdyZW1vdmVkJ1xuICAgICAgICAgIH1cbiAgICAgICAgOiB2ZXJic1xuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICAvLyBBY3R1YWwgY29kZSBpcyBpbiBzZXBhcmF0ZSBmdW5jdGlvbiBzbyBpdCdzIGVhc2VyIHRvIG92ZXJyaWRlXG4gICAgICAvLyBgc2V0dXBEYXRhKClgIGFuZCBhbmQgY2FsbCBgZW5zdXJlRGF0YSgpYCBmcm9tIHRoZSBvdmVycmlkZXMsXG4gICAgICAvLyBzZWUgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluLlxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgZW5zdXJlRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZExvYWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGF0YSkge1xuICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2FkRGF0YSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbG9hZERhdGEoKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgIH0sXG5cbiAgICBsb2FkRGF0YShjbGVhcikge1xuICAgICAgaWYgKCF0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIGlmIChjbGVhcikge1xuICAgICAgICAgIHRoaXMuY2xlYXJEYXRhKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlcXVlc3REYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIHJldHVybiBzZXREZWZhdWx0VmFsdWVzKHNjaGVtYSwgdHlwZSA/IHsgdHlwZSB9IDoge30sIHRoaXMpXG4gICAgfSxcblxuICAgIHJlcXVlc3REYXRhKCkge1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJ5UGFyYW1zXG4gICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdnZXQnLCBxdWVyeSB9LCAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGRhdGE/LnR5cGUgPT09ICdGaWx0ZXJWYWxpZGF0aW9uJyAmJlxuICAgICAgICAgICAgICB0aGlzLm9uRmlsdGVyRXJyb3JzPy4oZGF0YS5lcnJvcnMpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBDYW4gd2UgcmVhbGx5IHN3YWxsb3cgdGhlc2UgZXJyb3JzP1xuICAgICAgICAgICAgICAvLyBJcyBjYWxsaW5nIGBlbnN1cmVVc2VyKClgIGluIGBvbkJlZm9yZVJlcXVlc3QoKWAgZW5vdWdoP1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldERhdGEocmVzcG9uc2UuZGF0YSlcbiAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnbG9hZCcpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGlvbkVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAwXG4gICAgfSxcblxuICAgIGlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDFcbiAgICB9LFxuXG4gICAgYXN5bmMgaGFuZGxlUmVxdWVzdChcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBkYXRhXG4gICAgICB9LFxuICAgICAgY2FsbGJhY2tcbiAgICApIHtcbiAgICAgIGNvbnN0IGxvYWRpbmdPcHRpb25zID0ge1xuICAgICAgICB1cGRhdGVSb290OiB0cnVlLCAvLyBEaXNwbGF5IHNwaW5uZXIgaW4gaGVhZGVyIHdoZW4gbG9hZGluZyBpbiByZXNvdXJjZXNcbiAgICAgICAgdXBkYXRlVmlldzogdGhpcy5pc0luVmlldyAvLyBOb3RpZnkgdmlldyBvZiBsb2FkaW5nIGZvciB2aWV3IGNvbXBvbmVudHNcbiAgICAgIH1cbiAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyPy5hYm9ydCgpXG4gICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgICB0aGlzLmFib3J0Q29udHJvbGxlciA9IGNvbnRyb2xsZXJcbiAgICAgIGNvbnN0IHsgc2lnbmFsIH0gPSBjb250cm9sbGVyXG4gICAgICBjb25zdCByZXF1ZXN0ID0geyBtZXRob2QsIHJlc291cmNlLCBxdWVyeSwgZGF0YSwgc2lnbmFsIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAvLyBQYXNzIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UgdG8gdGhlIGNhbGxiYWNrLCBzbyB0aGV5IGNhbiBiZVxuICAgICAgICAvLyBleHBvc2VkIHRvIGZ1cnRoZXIgY2FsbGJhY2tzIHRocm91Z2ggRGl0b0NvbnRleHQuXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLm5hbWUgIT09ICdBYm9ydEVycm9yJykge1xuICAgICAgICAgIC8vIElmIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSwgZXJyb3JzIHdlcmUgYWxyZWFkeSBoYW5kbGVkLlxuICAgICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGVycm9yXG4gICAgICAgICAgaWYgKCFjYWxsYmFjayhlcnJvciwgcmVzcG9uc2UpKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gaXNTdHJpbmcoZGF0YT8udHlwZSlcbiAgICAgICAgICAgICAgPyBsYWJlbGl6ZShkYXRhLnR5cGUpXG4gICAgICAgICAgICAgIDogJ0Vycm9yJ1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGRhdGE/Lm1lc3NhZ2UgPz8gZXJyb3JcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHsgdHlwZTogJ2Vycm9yJywgdGl0bGUsIHRleHQgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmFib3J0Q29udHJvbGxlciA9PT0gY29udHJvbGxlcikge1xuICAgICAgICAvLyBPbmx5IGNsZWFyIHRoZSBsb2FkaW5nIHN0YXRlIGlmIHRoaXMgaXMgc3RpbGwgdGhlIGN1cnJlbnQgcmVxdWVzdC5cbiAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIgPSBudWxsXG4gICAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKSB7XG4gICAgICAvLyBDb252ZW50aW9uOiBvbmx5IHBvc3QsIHB1dCBhbmQgcGF0Y2ggcmVxdWVzdHMgcGFzcyB0aGUgZGF0YSBhcyBwYXlsb2FkLlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluY2x1ZGVzKG1ldGhvZCkgJiYgKFxuICAgICAgICAgIC8vIFRPRE86IFVzZSBgaGFuZGxlRGF0YVNjaGVtYSgpYCBhc3luY2hyb25vdXNseSBoZXJlIGluc3RlYWQsIHRvXG4gICAgICAgICAgLy8gb2ZmZXIgdGhlIHNhbWUgYW1vdW50IG9mIHBvc3NpYmlsaXRpZXMgZm9yIGRhdGEgbG9hZGluZy5cbiAgICAgICAgICBidXR0b24uZ2V0U2NoZW1hVmFsdWUoWydyZXNvdXJjZScsICdkYXRhJ10pIHx8XG4gICAgICAgICAgYnV0dG9uLnByb2Nlc3NlZEl0ZW1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0aG9kIH0gPSByZXNvdXJjZVxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgc2V0RGF0YSA9IGZhbHNlLFxuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MgPSAoKSA9PlxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBTdWNjZXNzZnVsJyxcbiAgICAgICAgICB0ZXh0OiAnUmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQuJ1xuICAgICAgICB9KSxcbiAgICAgIG5vdGlmeUVycm9yID0gZXJyb3IgPT5cbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICBgVW5hYmxlIHRvIHNlbmQgcmVxdWVzdCR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdChcbiAgICAgICAgICB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEgfSxcbiAgICAgICAgICBhc3luYyAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBEaXRvIHZhbGlkYXRpb24gZXJyb3I6XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpICYmIGRhdGEuZXJyb3JzXG4gICAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzT2JqZWN0KGRhdGEpID8gZGF0YSA6IGVyclxuICAgICAgICAgICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdW5kZXJseWluZyBkYXRhIGJlZm9yZSBjYWxsaW5nIGBub3RpZnkoKWAgb3JcbiAgICAgICAgICAgICAgLy8gYHRoaXMuaXRlbUxhYmVsYCwgc28gaWQgaXMgc2V0IGFmdGVyIGNyZWF0aW5nIG5ldyBpdGVtcy5cbiAgICAgICAgICAgICAgaWYgKHNldERhdGEgJiYgZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgZXZlbnQsIHsgbm90aWZ5LCBlcnJvciB9KSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgb3V0c2lkZSBvZiBgZW1pdEV2ZW50KClgLCBzbyB0aGF0XG4gICAgICAvLyBgY29udGV4dC53YXNOb3RpZmllZGAgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIuXG4gICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KGJ1dHRvbiwge1xuICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgIGl0ZW1MYWJlbDogdGhpcy5pdGVtTGFiZWwsXG4gICAgICAgIGVycm9yXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYnV0dG9uLmVtaXRFdmVudChldmVudCwgeyBjb250ZXh0IH0pXG4gICAgICBpZiAoXG4gICAgICAgIG5vdGlmeSAmJlxuICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgaWYgYW55dGhpbmcgd2FzIHJldHVybmVkIGZyb20gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIC8vIERvIG5vdCBkaXNwbGF5IGRlZmF1bHQgbm90aWZpY2F0aW9uIGlmIHRoZSBldmVudCBoYW5kbGVyIGFscmVhZHlcbiAgICAgICAgLy8gZGlzcGxheWVkIGEgbm90aWZpY2F0aW9uLlxuICAgICAgICAhY29udGV4dC53YXNOb3RpZmllZFxuICAgICAgKSB7XG4gICAgICAgIG5vdGlmeShlcnJvcilcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGF0aChwYXRoKSB7XG4gIC8vIEZvciBwYXRocyBzdGFyaW5nIHdpdGggYC9gLCB3ZSBjYW4gdXNlIHRoZSBuYXRpdmUgYFVSTCgpYCBjbGFzcyB0byByZXNvbHZlXG4gIC8vIHRoZSBwYXRoLCB3aGljaCB3aWxsIGFsc28gaGFuZGxlIGAuLmAgYW5kIGAuYCBzZWdtZW50czpcbiAgcmV0dXJuIG5ldyBVUkwoYGZpbGU6JHtwYXRofWApLnBhdGhuYW1lXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbilcbiAgLy8tIE5PVEU6IE5lc3RlZCBmb3JtIGNvbXBvbmVudHMgYXJlIGtlcHQgYWxpdmUgYnkgdXNpbmcgYHYtc2hvd2AgaW5zdGVhZCBvZlxuICAvLy0gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLy0gZWRpdGluZy4gT25seSByZW5kZXIgYSByb3V0ZXItdmlldyBoZXJlIGlmIHRoaXMgaXNuJ3QgdGhlIGxhc3QgZGF0YSByb3V0ZVxuICAvLy0gYW5kIG5vdCBhIG5lc3RlZCBmb3JtIHJvdXRlLCB3aGljaCB3aWxsIGFwcGVhciBlbHNld2hlcmUgaW4gaXRzIG93biB2aWV3LlxuICBSb3V0ZXJWaWV3KFxuICAgIHYtaWY9XCIhKGlzTGFzdFVubmVzdGVkUm91dGUgfHwgaXNOZXN0ZWRSb3V0ZSlcIlxuICAgIHYtc2hvdz1cIiFpc0FjdGl2ZVwiXG4gIClcbiAgLy8tIFVzZSBhIDxkaXY+IGZvciBpbmxpbmVkIGZvcm1zLCBhcyB3ZSBzaG91bGRuJ3QgbmVzdCBhY3R1YWwgPGZvcm0+IHRhZ3MuXG4gIGNvbXBvbmVudChcbiAgICB2LXNob3c9XCJpc0FjdGl2ZVwiXG4gICAgOmlzPVwiaXNOZXN0ZWRSb3V0ZSA/ICdkaXYnIDogJ2Zvcm0nXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjcm9sbC1wYXJlbnQnOiBpc1Jvb3RGb3JtIH1cIlxuICAgIEBzdWJtaXQucHJldmVudFxuICApXG4gICAgLy8tIFByZXZlbnQgaW1wbGljaXQgc3VibWlzc2lvbiBvZiB0aGUgZm9ybSwgZm9yIGV4YW1wbGUgd2hlbiB0eXBpbmcgZW50ZXJcbiAgICAvLy0gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTUwNzgwNlxuICAgIGJ1dHRvbihcbiAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgZGlzYWJsZWRcbiAgICApXG4gICAgRGl0b1NjaGVtYShcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6cGFkZGluZz1cImlzTmVzdGVkUm91dGUgPyAnbmVzdGVkJyA6ICdyb290J1wiXG4gICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgOnNjcm9sbGFibGU9XCJpc1Jvb3RGb3JtXCJcbiAgICAgIGdlbmVyYXRlTGFiZWxzXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI2J1dHRvbnMpXG4gICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbGFyZ2UuZGl0by1idXR0b25zLW1haW4oXG4gICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1idXR0b25zLXN0aWNreSc6IGlzUm9vdEZvcm0gfVwiXG4gICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUsIGNhcGl0YWxpemUsIHBhcnNlRGF0YVBhdGgsIGFzc2lnbkRlZXBseSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcywgaXNPYmplY3RTb3VyY2UgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyByZXNvbHZlUGF0aCB9IGZyb20gJy4uL3V0aWxzL3BhdGguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0Zvcm0nLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW4sIFJlc291cmNlTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWF0ZWREYXRhOiBudWxsLFxuICAgICAgY2xvbmVkRGF0YTogdW5kZWZpbmVkLFxuICAgICAgc291cmNlS2V5OiBudWxsLFxuICAgICAgaXNGb3JtOiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBBZGQgc3VibWl0IC8gc3VibWl0dGVkIHRvIHRoZSB2ZXJicyByZXR1cm5lZCBieSBSZXNvdXJjZU1peGluXG4gICAgICAvLyBOT1RFOiBUaGVzZSBnZXQgcGFzc2VkIG9uIHRvIGNoaWxkcmVuIHRocm91Z2g6XG4gICAgICAvLyBgcHJvdmlkZSgpIC4uLiB7ICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyB9YCBpbiBSZXNvdXJjZU1peGluXG4gICAgICBjb25zdCB2ZXJicyA9IHRoaXMuZ2V0VmVyYnMoKVxuICAgICAgY29uc3QgeyBpc0NyZWF0aW5nLCBwcm92aWRlc0RhdGEgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnZlcmJzLFxuICAgICAgICBzdWJtaXQ6IGlzQ3JlYXRpbmcgPyB2ZXJicy5jcmVhdGUgOiB2ZXJicy5zYXZlLFxuICAgICAgICBzdWJtaXR0ZWQ6IGlzQ3JlYXRpbmcgPyB2ZXJicy5jcmVhdGVkIDogdmVyYnMuc2F2ZWQsXG4gICAgICAgIGNhbmNlbDogcHJvdmlkZXNEYXRhID8gdmVyYnMuY2FuY2VsIDogdmVyYnMuY2xvc2UsXG4gICAgICAgIGNhbmNlbGxlZDogcHJvdmlkZXNEYXRhID8gdmVyYnMuY2FuY2VsbGVkIDogdmVyYnMuY2xvc2VkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuZ2V0SXRlbUZvcm1TY2hlbWEoXG4gICAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGF0YSB5ZXQsIHByb3ZpZGUgYW4gZW1wdHkgb2JqZWN0IHdpdGgganVzdCB0aGVcbiAgICAgICAgICAvLyByaWdodCB0eXBlIHNldCwgc28gdGhlIGZvcm0gY2FuIGFsd2F5cyBiZSBkZXRlcm1pbmVkLlxuICAgICAgICAgIHRoaXMuZGF0YSB8fCB7IHR5cGU6IHRoaXMudHlwZSB9LFxuICAgICAgICAgIHRoaXMuY29udGV4dFxuICAgICAgICApIHx8IHt9XG4gICAgICApIC8vIEFsd2F5cyByZXR1cm4gYSBzY2hlbWEgb2JqZWN0IHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIGl0LlxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXMoXG4gICAgICAgIGFzc2lnbkRlZXBseShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjYW5jZWw6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHN1Ym1pdDogIXRoaXMuaXNNdXRhdGluZyAmJiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICAgICAgICAvLyBTdWJtaXQgYnV0dG9ucyBjbG9zZSB0aGUgZm9ybSBieSBkZWZhdWx0OlxuICAgICAgICAgICAgICBjbG9zZUZvcm06IHRydWUsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoeyBjb21wb25lbnQ6IGJ1dHRvbiB9KSA9PiBidXR0b24uc3VibWl0KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5zY2hlbWEuYnV0dG9uc1xuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzUm9vdEZvcm0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhUGF0aCA9PT0gJycgJiYgIXRoaXMuaXNOZXN0ZWRSb3V0ZVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGFzdFJvdXRlIHx8IHRoaXMuaXNMYXN0VW5uZXN0ZWRSb3V0ZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNDcmVhdGluZygpIHtcbiAgICAgIC8vIHRoaXMucGFyYW0gaXMgaW5oZXJpdGVkIGZyb20gUm91dGVNaXhpblxuICAgICAgcmV0dXJuIHRoaXMucGFyYW0gPT09ICdjcmVhdGUnXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNNdXRhdGluZyAmJiAhIXRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uaXNEaXJ0eVxuICAgIH0sXG5cbiAgICBpc011dGF0aW5nKCkge1xuICAgICAgLy8gV2hlbiBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgdGhlIGZvcm0gZWRpdHMgdGhlIGluaGVyaXRlZCBkYXRhXG4gICAgICAvLyBkaXJlY3RseSBpbnN0ZWFkIG9mIG1ha2luZyBhIGNvcHkgZm9yIHBlcnNpc3RlbmNlIHVwb24gc3VibWlzc2lvbi5cbiAgICAgIC8vIFNlZSBgaW5oZXJpdGVkRGF0YSgpYCBjb21wdXRlZCBwcm9wZXJ0eSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuICEhdGhpcy5zb3VyY2VTY2hlbWEubXV0YXRlXG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uc2VsZWN0ZWRUYWIgfHwgbnVsbFxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgLy8gVGhlIHR5cGUgb2YgZm9ybSB0byBjcmVhdGUsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5xdWVyeS50eXBlXG4gICAgfSxcblxuICAgIGl0ZW1JZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy5wYXJhbSA/PyBudWxsXG4gICAgfSxcblxuICAgIG1ldGhvZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmcgPyAncG9zdCcgOiAncGF0Y2gnXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLmdldFJlc291cmNlKClcbiAgICAgIHJldHVybiBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLml0ZW1JZCwgcmVzb3VyY2UpIHx8IHJlc291cmNlXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWJQcmVmaXgoKSB7XG4gICAgICByZXR1cm4gY2FwaXRhbGl6ZSh0aGlzLmlzQ3JlYXRpbmcgPyB0aGlzLnZlcmJzLmNyZWF0ZSA6IHRoaXMudmVyYnMuZWRpdClcbiAgICB9LFxuXG4gICAgZGF0YSgpIHtcbiAgICAgIC8vIFJldHVybiBkaWZmZXJlbnQgZGF0YSBcImNvbnRhaW5lcnNcIiBiYXNlZCBvbiBkaWZmZXJlbnQgc2NlbmFyaW9zOlxuICAgICAgLy8gMS4gY3JlYXRlZERhdGEsIGlmIHdlJ3JlIGluIGEgZm9ybSBmb3IgYSBuZXdseSBjcmVhdGVkIG9iamVjdC5cbiAgICAgIC8vIDIuIGxvYWRlZERhdGEsIGlmIHRoZSBmb3JtIGl0c2VsZiBpcyB0aGUgcm9vdCBvZiB0aGUgZGF0YSAoZS5nLiB3aGVuXG4gICAgICAvLyAgICBkaXJlY3RseSBsb2FkaW5nIGFuIGVkaXRpbmcgcm9vdCkuXG4gICAgICAvLyAzLiBUaGUgZGF0YSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50LCB3aGljaCBpdHNlbGYgbWF5IGJlIGVpdGhlciBhXG4gICAgICAvLyAgICB2aWV3IHRoYXQgbG9hZGVkIHRoZSBkYXRhLCBvciBhIGZvcm0gdGhhdCBlaXRoZXIgbG9hZGVkIHRoZSBkYXRhLCBvclxuICAgICAgLy8gICAgYWxzbyBpbmhlcml0ZWQgaXQgZnJvbSBpdHMgcGFyZW50LiBOb3RlIHRoYXQgd2UgdXNlIGEgY2xvbmUgb2YgaXQsXG4gICAgICAvLyAgICBzbywgZGF0YSBjaGFuZ2VzIGFyZW4ndCBhcHBsaWVkIHVudGlsIHNldFNvdXJjZURhdGEoKSBpcyBjYWxsZWQuXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVkRGF0YSB8fCB0aGlzLmxvYWRlZERhdGEgfHwgdGhpcy5pbmhlcml0ZWREYXRhIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREYXRhUGF0aEZyb20odGhpcy5kYXRhQ29tcG9uZW50KVxuICAgIH0sXG5cbiAgICBzb3VyY2VEYXRhKCkge1xuICAgICAgLy8gUG9zc2libGUgcGFyZW50cyBhcmUgRGl0b0Zvcm0gZm9yIGZvcm1zLCBvciBEaXRvVmlldyBmb3Igcm9vdCBsaXN0cy5cbiAgICAgIC8vIEJvdGggaGF2ZSBhIGRhdGEgcHJvcGVydHkgd2hpY2ggYWJzdHJhY3RzIGF3YXkgbG9hZGluZyBhbmQgaW5oZXJpdGluZ1xuICAgICAgLy8gb2YgZGF0YS5cbiAgICAgIC8vIEZvcm1zIHRoYXQgYXJlIGFib3V0IHRvIGJlIGRlc3Ryb3llZCBkdWUgdG8gbmF2aWdhdGlvbiBsb29zZSB0aGVpclxuICAgICAgLy8gcm91dGUtcmVjb3JkLCBidXQgbWlnaHQgc3RpbGwgdHJpZ2dlciB0aGlzIGdldHRlci4gRmlsdGVyIHRob3NlIG91dC5cbiAgICAgIGxldCBkYXRhID0gdGhpcy5yb3V0ZVJlY29yZCA/IHRoaXMucGFyZW50Um91dGVDb21wb25lbnQuZGF0YSA6IG51bGxcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIC8vIEhhbmRsZSBuZXN0ZWQgZGF0YSBieSBzcGxpdHRpbmcgdGhlIGRhdGFQYXRoLCBpdGVyYXRlIHRocm91Z2ggdGhlXG4gICAgICAgIC8vIGFjdHVhbCBkYXRhIGFuZCBsb29rIG5lc3QgY2hpbGQtZGF0YSB1cC5cbiAgICAgICAgY29uc3QgZGF0YVBhcnRzID0gcGFyc2VEYXRhUGF0aChcbiAgICAgICAgICB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50KVxuICAgICAgICApXG4gICAgICAgIC8vIENvbXBhcmUgZGF0YVBhcnRzIGFnYWluc3QgbWF0Y2hlZCByb3V0ZVBhdGggcGFydHMsIHRvIGlkZW50aWZ5IHRob3NlXG4gICAgICAgIC8vIHBhcnRzIHRoYXQgbmVlZCB0byBiZSB0cmVhdGVkIGxpa2UgaWRzIGFuZCBtYXBwZWQgdG8gaW5kaWNlcyBpbiBkYXRhLlxuICAgICAgICBjb25zdCBwYXRoUGFydHMgPSB0aGlzLnJvdXRlUmVjb3JkLnBhdGguc3BsaXQoJy8nKVxuICAgICAgICBjb25zdCByb3V0ZVBhcnRzID0gcGF0aFBhcnRzLnNsaWNlKHBhdGhQYXJ0cy5sZW5ndGggLSBkYXRhUGFydHMubGVuZ3RoKVxuICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBudWxsXG4gICAgICAgIGNvbnN0IGxhc3REYXRhUGFydCA9IGRhdGFQYXJ0c1tkYXRhUGFydHMubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKSAmJiBsYXN0RGF0YVBhcnQgPT09ICdjcmVhdGUnKSB7XG4gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBvYmplY3Qgc291cmNlIGFuZCBhcmUgY3JlYXRpbmcsIHRoZSBkYXRhUGF0aCBuZWVkcyB0b1xuICAgICAgICAgIC8vIGJlIHNob3J0ZW5lZCBieSB0aGUgJ2NyZWF0ZScgZW50cnkuIFRoaXMgaXNuJ3QgbmVlZGVkIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcywgYXMgdGhlcmUgdGhlIHBhcmFtZXRlciBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlIGl0ZW0gaWQuXG4gICAgICAgICAgZGF0YVBhcnRzLmxlbmd0aC0tXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBkYXRhUGFydHMubGVuZ3RoOyBpIDwgbCAmJiBkYXRhOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRhUGFydCA9IGRhdGFQYXJ0c1tpXVxuICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gOmlkIHBhcnQsIGZpbmQgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdpdGggZ2l2ZW4gaWQuXG4gICAgICAgICAgY29uc3Qga2V5ID0gL146aWQvLnRlc3Qocm91dGVQYXJ0c1tpXSlcbiAgICAgICAgICAgID8gZGF0YVBhcnQgPT09ICdjcmVhdGUnXG4gICAgICAgICAgICAgID8gbnVsbCAvLyBUaGVyZSdzIG5vIGluZGV4IGZvciBlbnRyaWVzIGFib3V0IHRvIGJlIGNyZWF0ZWRcbiAgICAgICAgICAgICAgOiB0aGlzLmZpbmRJdGVtSWRJbmRleCh0aGlzLnNvdXJjZVNjaGVtYSwgZGF0YSwgZGF0YVBhcnQpXG4gICAgICAgICAgICA6IGRhdGFQYXJ0XG4gICAgICAgICAgLy8gU2tpcCB0aGUgZmluYWwgbG9va3VwIGJ1dCByZW1lbWJlciBgc291cmNlS2V5YCwgYXMgd2Ugd2FudCB0aGVcbiAgICAgICAgICAvLyBwYXJlbnQgZGF0YSBzbyB3ZSBjYW4gcmVwbGFjZSB0aGUgZW50cnkgYXQgYHNvdXJjZUtleWAgb24gaXQuXG4gICAgICAgICAgaWYgKGkgPT09IGwgLSAxKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMuc291cmNlS2V5ID0ga2V5XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhW2tleV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGluaGVyaXRlZERhdGEoKSB7XG4gICAgICAvLyBEYXRhIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgYW5kIGNsb25lZCB0byBwcm90ZWN0IGFnYWluc3QgcmVhY3RpdmVcbiAgICAgIC8vIGNoYW5nZXMgdW50aWwgY2hhbmdlcyBhcmUgYXBwbGllZCB0aHJvdWdoIHNldFNvdXJjZURhdGEoKSwgdW5sZXNzXG4gICAgICAvLyBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgaW4gd2hpY2ggY2FzZSBkYXRhIGlzIG11dGF0ZWQgZGlyZWN0bHkuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhICYmXG4gICAgICAgIHRoaXMuc291cmNlS2V5ICE9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnNvdXJjZURhdGFbdGhpcy5zb3VyY2VLZXldXG4gICAgICAgIGlmICghdGhpcy5pc011dGF0aW5nKSB7XG4gICAgICAgICAgLy8gVXNlIGEgdHJpY2sgdG8gc3RvcmUgY2xvbmVkIGluaGVyaXRlZCBkYXRhIGluIGNsb25lZERhdGEsIHRvIG1ha2VcbiAgICAgICAgICAvLyBpdCByZWFjdGl2ZSBhbmQgcHJldmVudCBpdCBmcm9tIGJlaW5nIGNsb25lZCBtdWx0aXBsZSB0aW1lcy5cbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IGRhdGEgPSBjbG9uZShkYXRhKVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhID09PSBudWxsICYmXG4gICAgICAgICAgIXRoaXMuaXNDcmVhdGluZyAmJlxuICAgICAgICAgIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIG9mIGFuIG9iamVjdCBzb3VyY2UgaXMgbnVsbCwgcmVkaXJlY3QgdG8gaXRzIGNyZWF0ZSByb3V0ZS5cbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgcGF0aDogYCR7dGhpcy5wYXRofS9jcmVhdGVgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNsb25lZERhdGFcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBpdGVtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zb3VyY2VTY2hlbWEsIHRoaXMuZGF0YSwgeyBleHRlbmRlZDogdHJ1ZSB9KVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZToge1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzMzOTMjaXNzdWVjb21tZW50LTExNTg0NzAxNDlcbiAgICAgIGZsdXNoOiAncG9zdCcsXG4gICAgICBoYW5kbGVyKHRvLCBmcm9tKSB7XG4gICAgICAgIC8vIFJlbG9hZCBmb3JtIGRhdGEgd2hlbiBuYXZpZ2F0aW5nIHRvIGEgZGlmZmVyZW50IGVudGl0eSBpbiBzYW1lIGZvcm0uXG4gICAgICAgIGNvbnN0IHBhcmFtID0gdGhpcy5tZXRhPy5wYXJhbVxuICAgICAgICBpZiAoXG4gICAgICAgICAgcGFyYW0gJiZcbiAgICAgICAgICB0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAgIC8vIFRPRE86IFNlZSBpZiB3ZSBjYW4gcmVtb3ZlIHRoaXMgZHVlIHRvIGBmbHVzaDogJ3Bvc3QnYC5cbiAgICAgICAgICBmcm9tLm1hdGNoZWRbMF0ucGF0aCA9PT0gdG8ubWF0Y2hlZFswXS5wYXRoICYmIC8vIFN0YXlpbmcgb24gc2FtZSBmb3JtXG4gICAgICAgICAgZnJvbS5wYXJhbXNbcGFyYW1dICE9PSAnY3JlYXRlJyAmJiAvLyBCdXQgaGF2ZW4ndCBiZWVuIGNyZWF0aW5nXG4gICAgICAgICAgdG8ucGFyYW1zW3BhcmFtXSAhPT0gZnJvbS5wYXJhbXNbcGFyYW1dIC8vIEdvaW5nIHRvIGEgZGlmZmVyZW50IGVudGl0eVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc291cmNlRGF0YTogJ2NsZWFyQ2xvbmVkRGF0YScsXG4gICAgLy8gTmVlZGVkIGZvciB0aGUgJ2NyZWF0ZScgcmVkaXJlY3QgaW4gYGluaGVyaXRlZERhdGEoKWAgdG8gd29yazpcbiAgICBjcmVhdGU6ICdzZXR1cERhdGEnXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmVtaXRFdmVudChldmVudCwgcGFyYW1zKVxuICAgIH0sXG5cbiAgICBnZXREYXRhUGF0aEZyb20ocm91dGVDb21wb25lbnQpIHtcbiAgICAgIC8vIEdldCB0aGUgZGF0YSBwYXRoIGJ5IGRlbm9ybWFsaXplUGF0aCB0aGUgcmVsYXRpdmUgcm91dGUgcGF0aFxuICAgICAgcmV0dXJuIHRoaXMuYXBpLmRlbm9ybWFsaXplUGF0aChcbiAgICAgICAgdGhpcy5wYXRoXG4gICAgICAgICAgLy8gRGl0b1ZpZXdzIGhhdmUgbmVzdGVkIHJvdXRlcywgc28gZG9uJ3QgcmVtb3ZlIHRoZWlyIHBhdGguXG4gICAgICAgICAgLnNsaWNlKChyb3V0ZUNvbXBvbmVudC5pc1ZpZXcgPyAwIDogcm91dGVDb21wb25lbnQucGF0aC5sZW5ndGgpICsgMSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0dXBEYXRhKClcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICBpZiAodGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZERhdGEgfHw9IHRoaXMuY3JlYXRlRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy50eXBlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0U291cmNlRGF0YShkYXRhKSB7XG4gICAgICBpZiAodGhpcy5zb3VyY2VEYXRhICYmIHRoaXMuc291cmNlS2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHsgbWFpblNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgICB0aGlzLnNvdXJjZURhdGFbdGhpcy5zb3VyY2VLZXldID0gbWFpblNjaGVtYUNvbXBvbmVudC5maWx0ZXJEYXRhKGRhdGEpXG4gICAgICAgIG1haW5TY2hlbWFDb21wb25lbnQub25DaGFuZ2UoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFkZFNvdXJjZURhdGEoZGF0YSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICA/IHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgICA6ICEhdGhpcy5zb3VyY2VEYXRhPy5wdXNoKGRhdGEpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy5zZXREYXRhKG51bGwpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gc2V0RGF0YSgpIGlzIGNhbGxlZCBhZnRlciBzdWJtaXQgd2hlbiBkYXRhIGhhcyBjaGFuZ2VkLlxuICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgLy8gRm9yIGNvbXBvbmVudHMgd2l0aCB0cmFuc2llbnQgZGF0YSwgbW9kaWZ5IHRoaXMuc291cmNlRGF0YS5cbiAgICAgICAgdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhID0gbnVsbFxuICAgICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyQ2xvbmVkRGF0YSh0bywgZnJvbSkge1xuICAgICAgLy8gT25seSBjbGVhciBpZiB0aGUgd2F0Y2hlZCBzb3VyY2VEYXRhIGl0c2VsZiBjaGFuZ2VzIGluIHRoZSBmb3JtLlxuICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbG9zZSgpXG4gICAgfSxcblxuICAgIGFzeW5jIGNsb3NlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGUodGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudC5wYXRoKVxuICAgIH0sXG5cbiAgICBnZXRTdWJtaXRWZXJiKHByZXNlbnQgPSB0cnVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gcHJlc2VudFxuICAgICAgICAgID8gJ2NyZWF0ZSdcbiAgICAgICAgICA6ICdjcmVhdGVkJ1xuICAgICAgICA6IHByZXNlbnRcbiAgICAgICAgICA/ICdzdWJtaXQnXG4gICAgICAgICAgOiAnc3VibWl0dGVkJ1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uLCB7IHZhbGlkYXRlID0gdHJ1ZSwgY2xvc2VGb3JtID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAodmFsaWRhdGUgJiYgIXRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2V0VmVyYiA9IHByZXNlbnQgPT4gdGhpcy52ZXJic1t0aGlzLmdldFN1Ym1pdFZlcmIocHJlc2VudCldXG5cbiAgICAgIC8vIEFsbG93IGJ1dHRvbnMgdG8gb3ZlcnJpZGUgYm90aCBtZXRob2QgYW5kIHJlc291cmNlIHBhdGggdG8gc3VibWl0IHRvOlxuICAgICAgY29uc3QgYnV0dG9uUmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5yZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlc291cmNlID0gYnV0dG9uUmVzb3VyY2UgfHwgdGhpcy5yZXNvdXJjZVxuICAgICAgY29uc3QgbWV0aG9kID0gcmVzb3VyY2U/Lm1ldGhvZCB8fCB0aGlzLm1ldGhvZFxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpXG4gICAgICBsZXQgc3VjY2Vzc1xuICAgICAgaWYgKCFidXR0b25SZXNvdXJjZSAmJiB0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zaWVudChidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KHRoaXMuZ2V0U3VibWl0VmVyYigpKSxcbiAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PlxuICAgICAgICAgICAgdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2Vycm9yJywge1xuICAgICAgICAgICAgICBjb250ZXh0OiB7IGVycm9yIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgICAgICAgICA/IGBJdGVtICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gXG4gICAgICAgICAgICAgICAgOiBgQ2hhbmdlICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgICA/IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICAgICAgICA6IGBDaGFuZ2VzIHRvICR7dGhpcy5pdGVtTGFiZWx9IHdlcmUgJHt2ZXJifS5gLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IGBVbmFibGUgdG8gJHt2ZXJifSAke3RoaXMuaXRlbUxhYmVsfS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIHNldERhdGE6IHRydWUsXG4gICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCh0aGlzLmdldFN1Ym1pdFZlcmIoKSksXG4gICAgICAgICAgb25FcnJvcjogZXJyb3IgPT5cbiAgICAgICAgICAgIHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgICAgY29udGV4dDogeyBlcnJvciB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBub3RpZnlTdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICB0aXRsZTogYFN1Y2Nlc3NmdWxseSAke2NhcGl0YWxpemUodmVyYil9YCxcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5pdGVtTGFiZWx9IHdhcyAke3ZlcmJ9LmBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub3RpZnlFcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIodHJ1ZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgIGBVbmFibGUgdG8gJHt2ZXJifSAke3RoaXMuaXRlbUxhYmVsfSR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgICAgICAgIGVycm9yPy5tZXNzYWdlIHx8IGVycm9yXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb24oKVxuICAgICAgICBpZiAoY2xvc2VGb3JtIHx8IGJ1dHRvbi5jbG9zZUZvcm0pIHtcbiAgICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgICAgICAvLyBSZWRpcmVjdCB0byB0aGUgZm9ybSBlZGl0aW5nIHRoZSBuZXdseSBjcmVhdGVkIGl0ZW06XG4gICAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgdGhpcy5kYXRhKVxuICAgICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHtcbiAgICAgICAgICAgIHBhdGg6IHJlc29sdmVQYXRoKGAke3RoaXMucGF0aH0vLi4vJHtpZH1gKSxcbiAgICAgICAgICAgIC8vIFByZXNlcnZlIGhhc2ggZm9yIHRhYnM6XG4gICAgICAgICAgICBoYXNoOiB0aGlzLiRyb3V0ZS5oYXNoXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgX3Jlc291cmNlLCBfbWV0aG9kLCBkYXRhLCB7XG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBvbkVycm9yLFxuICAgICAgbm90aWZ5U3VjY2VzcyxcbiAgICAgIG5vdGlmeUVycm9yXG4gICAgfSkge1xuICAgICAgLy8gSGFuZGxlIHRoZSBkZWZhdWx0IFwic3VibWl0dGluZ1wiIG9mIHRyYW5zaWVudCwgbmVzdGVkIGRhdGE6XG4gICAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gdGhpcy5hZGRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICBvblN1Y2Nlc3M/LigpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ3N1Y2Nlc3MnLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlTdWNjZXNzXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnJvciA9ICdDb3VsZCBub3Qgc3VibWl0IHRyYW5zaWVudCBpdGVtJ1xuICAgICAgICBvbkVycm9yPy4oZXJyb3IpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvRm9ybSBmcm9tICcuL0RpdG9Gb3JtLnZ1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRm9ybU5lc3RlZCcsIHtcbiAgZXh0ZW5kczogRGl0b0Zvcm1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1mb3JtLW5lc3RlZCB7XG4gIC8vIE5vIHNjcm9sbGluZyBpbnNpZGUgbmVzdGVkIGZvcm1zLCBhbmQgcHJldmVudCBvcGVuIC5tdWx0aXNlbGVjdCBmcm9tXG4gIC8vIGJlaW5nIGNyb3BwZWQuXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1lcnJvcnMoXG4gIHYtaWY9XCJlcnJvcnNcIlxuKVxuICB1bFxuICAgIGxpKFxuICAgICAgdi1mb3I9XCJlcnJvciBvZiBlcnJvcnNcIlxuICAgICkge3sgZXJyb3IgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgdGlwcHkgZnJvbSAndGlwcHkuanMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgbWFya1JhdyB9IGZyb20gJ3Z1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRXJyb3JzJywge1xuICBwcm9wczoge1xuICAgIGVycm9yczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGlwOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgZXJyb3JzKCkge1xuICAgICAgdGhpcy4kbmV4dFRpY2sodGhpcy51cGRhdGVFcnJvcnMpXG4gICAgfVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLnRpcD8uZGVzdHJveSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHVwZGF0ZUVycm9ycygpIHtcbiAgICAgIGxldCB7IHRpcCB9ID0gdGhpc1xuICAgICAgdGlwPy5oaWRlKClcbiAgICAgIGlmICh0aGlzLmVycm9ycykge1xuICAgICAgICB0aXAgPSB0aGlzLnRpcCA/Pz0gbWFya1Jhdyh0aXBweSh0aGlzLiRlbC5jbG9zZXN0KCcuZGl0by1jb250YWluZXInKSkpXG4gICAgICAgIHRpcC5zZXRQcm9wcyh7XG4gICAgICAgICAgY29udGVudDogdGhpcy5lcnJvcnMuam9pbignXFxuJyksXG4gICAgICAgICAgdGhlbWU6ICdlcnJvcicsXG4gICAgICAgICAgdHJpZ2dlcjogJ21hbnVhbCcsXG4gICAgICAgICAgYXBwZW5kVG86ICdwYXJlbnQnLFxuICAgICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbS1zdGFydCcsXG4gICAgICAgICAgYW5pbWF0aW9uOiAnc2hpZnQtYXdheS1zdWJ0bGUnLFxuICAgICAgICAgIHBvcHBlck9wdGlvbnM6IHtcbiAgICAgICAgICAgIG1vZGlmaWVyczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2ZsaXAnLFxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGhpZGVPbkNsaWNrOiBmYWxzZSxcbiAgICAgICAgICBvZmZzZXQ6IFszLCAzXSwgLy8gMS8yIGZvcm0tc3BhY2luZ1xuICAgICAgICAgIHpJbmRleDogMVxuICAgICAgICB9KVxuICAgICAgICB0aXAucG9wcGVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsICgpID0+IHRpcC5oaWRlKCkpXG4gICAgICAgIHRpcC5zaG93KClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1lcnJvcnMge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcblxuICB1bCB7XG4gICAgY29sb3I6ICRjb2xvci1lcnJvcjtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zY29wZXNcbiAgUm91dGVyTGluayhcbiAgICB2LWZvcj1cIihzY29wZSwga2V5KSBpbiBzY29wZXNcIlxuICAgIDprZXk9XCJrZXlcIlxuICAgIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgOnRvPVwiZ2V0U2NvcGVMaW5rKHNjb3BlKVwiXG4gICAgY3VzdG9tXG4gIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2VsZWN0ZWQnOiBzY29wZS5uYW1lID09PSBxdWVyeS5zY29wZSB9XCJcbiAgICAgIDp0aXRsZT1cInNjb3BlLmhpbnQgfHwgZ2V0TGFiZWwoc2NvcGUpXCJcbiAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICApIHt7IGdldExhYmVsKHNjb3BlKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1Njb3BlcycsIHtcbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NvcGVzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRTY29wZUxpbmsoc2NvcGUpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0geyAuLi50aGlzLnF1ZXJ5LCBzY29wZTogc2NvcGUubmFtZSB9XG4gICAgICBpZiAocXVlcnkucGFnZSkge1xuICAgICAgICBxdWVyeS5wYWdlID0gMFxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlMaW5rKHF1ZXJ5KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNjb3BlcyB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgLmRpdG8tYnV0dG9uIHtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgLy8gQSBiaXQgbW9yZSB0aGFuIHRoZSB3aWR0aCBvZiBlbGxpcHNpcywgdG8gcHJldmVudCByZXBsYWNpbmcgc2hvcnQgd29yZHNcbiAgICAvLyB3aXRoIGVsbGlwc2lzLlxuICAgIG1pbi13aWR0aDogM2VtO1xuICAgIGZsZXg6IDAgMSBhdXRvO1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxZW07XG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAxZW07XG4gICAgICBwYWRkaW5nLWxlZnQ6IDFlbTtcbiAgICB9XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDFlbTtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAxZW07XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAxZW07XG4gICAgfVxuXG4gICAgJiArIC5kaXRvLWJ1dHRvbiB7XG4gICAgICBtYXJnaW4tbGVmdDogLTFweDtcbiAgICB9IC8vIERvbid0IGNvdmVyIHRoZSBmb2N1c2VkIGJvcmRlciBvZiBidXR0b25zOlxuICAgICY6Zm9jdXMge1xuICAgICAgei1pbmRleDogMTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuUGFnaW5hdGlvbihcbiAgdi1tb2RlbDpwYWdlPVwicGFnZVwiXG4gIDpwYWdlU2l6ZT1cImxpbWl0XCJcbiAgOnRvdGFsPVwidG90YWxcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IFBhZ2luYXRpb24gfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1BhZ2luYXRpb24nLCB7XG4gIGNvbXBvbmVudHM6IHsgUGFnaW5hdGlvbiB9LFxuXG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxpbWl0OiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhZ2U6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICgrdGhpcy5xdWVyeS5wYWdlIHx8IDApICsgMVxuICAgICAgfSxcblxuICAgICAgc2V0KHBhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMucGFnZSAhPT0gcGFnZSkge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKFxuICAgICAgICAgICAgdGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICAgICAgICBwYWdlOiBwYWdlIC0gMVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzRHJhZ2dpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXREcmFnZ2FibGVPcHRpb25zKGZvcmNlRmFsbGJhY2sgPSBmYWxzZSkge1xuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tZHJhZ2dhYmxlJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW5pbWF0aW9uOiAxNTAsXG4gICAgICAgIGhhbmRsZTogJy5kaXRvLWJ1dHRvbi1kcmFnJyxcbiAgICAgICAgZHJhZ0NsYXNzOiBgJHtwcmVmaXh9X19kcmFnYCxcbiAgICAgICAgY2hvc2VuQ2xhc3M6IGAke3ByZWZpeH1fX2Nob3NlbmAsXG4gICAgICAgIGdob3N0Q2xhc3M6IGAke3ByZWZpeH1fX2dob3N0YCxcbiAgICAgICAgZmFsbGJhY2tDbGFzczogYCR7cHJlZml4fV9fZmFsbGJhY2tgLFxuICAgICAgICBmb3JjZUZhbGxiYWNrLFxuICAgICAgICBvblN0YXJ0OiB0aGlzLm9uU3RhcnREcmFnLFxuICAgICAgICBvbkVuZDogdGhpcy5vbkVuZERyYWdcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25TdGFydERyYWcoKSB7XG4gICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlXG4gICAgfSxcblxuICAgIG9uRW5kRHJhZyh7IG9sZEluZGV4LCBuZXdJbmRleCB9KSB7XG4gICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZVxuICAgICAgaWYgKG9sZEluZGV4ICE9PSBuZXdJbmRleCkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0LCBwYWdpbmF0aW9uUmFuZ2UpIHtcbiAgICAgIGNvbnN0IHsgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICAgIC8vIFJlb3JkZXIgdGhlIGNoYW5nZWQgZW50cmllcyBieSB0aGVpciBvcmRlciBrZXksIHRha2luZyBwYWdpbmF0aW9uXG4gICAgICAgIC8vIG9mZnNldHMgaW50byBhY2NvdW50OlxuICAgICAgICBjb25zdCBvZmZzZXQgPSBwYWdpbmF0aW9uUmFuZ2U/LlswXSB8fCAwXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxpc3RbaV1bb3JkZXJLZXldID0gaSArIG9mZnNldFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRyZWUtaXRlbShcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9YHtcbiAgICAnZGl0by1kcmFnZ2luZyc6IGlzRHJhZ2dpbmcsXG4gICAgJ2RpdG8tYWN0aXZlJzogYWN0aXZlXG4gIH1gXG4gIDpzdHlsZT1cImxldmVsID4gMCAmJiB7ICctLWxldmVsJzogbGV2ZWwgfVwiXG4pXG4gIC5kaXRvLXRyZWUtaGVhZGVyKFxuICAgIHYtaWY9XCJsYWJlbFwiXG4gIClcbiAgICAuZGl0by10cmVlLWJyYW5jaChcbiAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgIEBjbGljay5zdG9wPVwib3BlbmVkID0gIW9wZW5lZFwiXG4gICAgKVxuICAgICAgLmRpdG8tY2hldnJvbihcbiAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBvcGVuZWQgfVwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWxhYmVsKFxuICAgICAgICB2LWh0bWw9XCJsYWJlbFwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWluZm8oXG4gICAgICAgIHYtaWY9XCJkZXRhaWxzXCJcbiAgICAgICkge3sgZGV0YWlscyB9fVxuICAgIC5kaXRvLXRyZWUtbGVhZihcbiAgICAgIHYtZWxzZVxuICAgIClcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwoXG4gICAgICAgIHYtaHRtbD1cImxhYmVsXCJcbiAgICAgIClcbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbChcbiAgICAgIHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICAgICAgICBAY2xpY2s9XCJvbkVkaXRcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICAgIEBjbGljaz1cIm9uRGVsZXRlXCJcbiAgICAgIClcbiAgdGFibGUuZGl0by1wcm9wZXJ0aWVzKFxuICAgIHYtaWY9XCJwcm9wZXJ0aWVzXCJcbiAgICB2LXNob3c9XCJvcGVuZWRcIlxuICApXG4gICAgdHIoXG4gICAgICB2LWZvcj1cInByb3BlcnR5IGluIHByb3BlcnRpZXNcIlxuICAgIClcbiAgICAgIHRkXG4gICAgICAgIERpdG9MYWJlbChcbiAgICAgICAgICB2LWlmPVwicHJvcGVydHkubGFiZWwgIT09IGZhbHNlXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgICAgOmxhYmVsPVwiZ2V0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgKVxuICAgICAgRGl0b1RhYmxlQ2VsbChcbiAgICAgICAgOmNlbGw9XCJwcm9wZXJ0eVwiXG4gICAgICAgIDpzY2hlbWE9XCJwcm9wZXJ0eVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG4gIERpdG9EcmFnZ2FibGUoXG4gICAgdi1pZj1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICB2LXNob3c9XCJvcGVuZWRcIlxuICAgIDptb2RlbFZhbHVlPVwidXBkYXRlT3JkZXIoY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdClcIlxuICAgIDpvcHRpb25zPVwiZ2V0RHJhZ2dhYmxlT3B0aW9ucyh0cnVlKVwiXG4gICAgOmRyYWdnYWJsZT1cImNoaWxkcmVuRHJhZ2dhYmxlXCJcbiAgICBAdXBkYXRlOm1vZGVsVmFsdWU9XCJ2YWx1ZSA9PiAoY2hpbGRyZW5MaXN0ID0gdmFsdWUpXCJcbiAgKVxuICAgIERpdG9UcmVlSXRlbShcbiAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBjaGlsZHJlbkl0ZW1zXCJcbiAgICAgIDprZXk9XCJnZXRJdGVtVWlkKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEpXCJcbiAgICAgIDpzY2hlbWE9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJnZXRJdGVtRGF0YVBhdGgoY2hpbGRyZW5TY2hlbWEsIGluZGV4KVwiXG4gICAgICA6ZGF0YT1cIml0ZW0uZGF0YVwiXG4gICAgICA6cGF0aD1cIml0ZW0ucGF0aFwiXG4gICAgICA6b3Blbj1cIml0ZW0ub3BlblwiXG4gICAgICA6YWN0aXZlPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgOmRyYWdnYWJsZT1cImNoaWxkcmVuRHJhZ2dhYmxlXCJcbiAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhLCB7IGluZGV4IH0pXCJcbiAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiXG4gICAgKVxuICAgIC8vLSBUT0RPOiBDb252ZXJ0IGRpdG8tdHJlZS1pdGVtIHRvIHVzZSBkaXRvLWxhYmVsIGludGVybmFsbHksIGFuZCB0aGVuXG4gICAgLy8tIHBhc3MgYGFzT2JqZWN0OiB0cnVlYCBpbiB0aGUgYGdldEl0ZW1MYWJlbCgpYCBjYWxsIGFib3ZlLlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4nXG5pbXBvcnQgU29ydGFibGVNaXhpbiBmcm9tICcuLi9taXhpbnMvU29ydGFibGVNaXhpbi5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXROYW1lZFNjaGVtYXMsIGhhc0Zvcm1TY2hlbWEgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RyZWVJdGVtJywge1xuICBtaXhpbnM6IFtJdGVtTWl4aW4sIFNvcnRhYmxlTWl4aW5dLFxuICBpbmplY3Q6IFsnY29udGFpbmVyJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtBcnJheSwgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIG9wZW46IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY3RpdmU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsZXZlbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZW5lZDogdGhpcy5vcGVuIHx8IHRoaXMuc2NoZW1hLm9wZW5cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLm1ldGFcbiAgICB9LFxuXG4gICAgc3RvcmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuc3RvcmVcbiAgICB9LFxuXG4gICAgZGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuZGlzYWJsZWRcbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzKVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTaG91bGQgdGhpcyBiZSBuYW1lZCBgc291cmNlU2NoZW1hYCBpbnN0ZWFkPyBVc2UgU291cmNlTWl4aW4/XG4gICAgY2hpbGRyZW5TY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEuY2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5MaXN0KCkge1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMuY2hpbGRyZW5TY2hlbWE/Lm5hbWVcbiAgICAgIHJldHVybiBuYW1lICYmIHRoaXMuZGF0YVtuYW1lXVxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkRyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggPiAxICYmXG4gICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2RyYWdnYWJsZScsIHtcbiAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgIHNjaGVtYTogdGhpcy5jaGlsZHJlblNjaGVtYVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBudW1DaGlsZHJlbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtUHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXM/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bUVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5udW1Qcm9wZXJ0aWVzICsgdGhpcy5udW1DaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkl0ZW1zKCkge1xuICAgICAgY29uc3QgeyBjaGlsZHJlblNjaGVtYSwgY2hpbGRyZW5MaXN0IH0gPSB0aGlzXG4gICAgICBpZiAoY2hpbGRyZW5TY2hlbWEgJiYgY2hpbGRyZW5MaXN0KSB7XG4gICAgICAgIGNvbnN0IHsgZWRpdFBhdGggfSA9IHRoaXMuY29udGFpbmVyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuT3BlbiA9ICF0aGlzLnBhdGggJiYgY2hpbGRyZW5TY2hlbWEub3BlblxuICAgICAgICAvLyBCdWlsZCBhIGNoaWxkcmVuIGxpc3Qgd2l0aCBjaGlsZCBtZXRhIGluZm9ybWF0aW9uIGZvciB0aGUgdGVtcGxhdGUuXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU9yZGVyKFxuICAgICAgICAgIGNoaWxkcmVuU2NoZW1hLFxuICAgICAgICAgIGNoaWxkcmVuTGlzdC5tYXAoKGRhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gKFxuICAgICAgICAgICAgICBjaGlsZHJlblNjaGVtYS5wYXRoICYmXG4gICAgICAgICAgICAgIGAke3RoaXMucGF0aH0vJHtjaGlsZHJlblNjaGVtYS5wYXRofS8ke2luZGV4fWBcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9wZW4gPSAoXG4gICAgICAgICAgICAgIGNoaWxkcmVuT3BlbiB8fFxuICAgICAgICAgICAgICAvLyBPbmx5IGNvdW50IGFzIFwiaW4gZWRpdCBwYXRoXCIgd2hlbiBpdCdzIG5vdCB0aGUgZnVsbCBlZGl0IHBhdGguXG4gICAgICAgICAgICAgIGVkaXRQYXRoLnN0YXJ0c1dpdGgocGF0aCkgJiYgcGF0aC5sZW5ndGggPCBlZGl0UGF0aC5sZW5ndGhcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IGVkaXRQYXRoID09PSBwYXRoXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgICBvcGVuLFxuICAgICAgICAgICAgICBhY3RpdmVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gW11cbiAgICB9LFxuXG4gICAgZGV0YWlscygpIHtcbiAgICAgIGNvbnN0IHsgbnVtQ2hpbGRyZW4gfSA9IHRoaXNcbiAgICAgIHJldHVybiAoXG4gICAgICAgIG51bUNoaWxkcmVuICYmXG4gICAgICAgIGAke251bUNoaWxkcmVufSAke1xuICAgICAgICAgIG51bUNoaWxkcmVuID09PSAxID8gJ2l0ZW0nIDogJ2l0ZW1zJ1xuICAgICAgICB9YFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNFZGl0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmRyYWdnYWJsZSB8fCB0aGlzLmVkaXRhYmxlIHx8IHRoaXMuZGVsZXRhYmxlXG4gICAgfSxcblxuICAgIC8vIFRPRE86IFN1cHBvcnQgY3JlYXRhYmxlIVxuICAgIC8vIFRPRE86IEFkZCBzdXBwb3J0IGZvciBjcmVhdGFibGUsIGVkaXRhYmxlIGFuZCBkZWxldGFibGUgb3ZlcnJpZGVzIG9uIHRoZVxuICAgIC8vIGFzc29jaWF0ZWQgZm9ybXMsIGp1c3QgbGlrZSBpbiBgVHlwZUxpc3RgIGFuZCBgVHlwZU9iamVjdGAsIHRocm91Z2hcbiAgICAvLyBgRGl0b0VkaXRCdXR0b25zYC4gSXQgd291bGQgYmUgYmVzdCB0byB1c2UgYERpdG9FZGl0QnV0dG9uc2AgaGVyZSB0b28uXG4gICAgY3JlYXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY3JlYXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGNyZWF0YWJsZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBlZGl0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSkge1xuICAgICAgcmV0dXJuIGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHByb3BlcnR5Lm5hbWUpXG4gICAgfSxcblxuICAgIG9uRWRpdCgpIHtcbiAgICAgIC8vIEFsbCB3ZSBnb3QgdG8gZG8gaXMgcHVzaCB0aGUgcmlnaHQgZWRpdCBwYXRoIHRvIHRoZSByb3V0ZXIsIHRoZSByZXN0XG4gICAgICAvLyBpcyBoYW5kbGVkIGJ5IG91ciByb3V0ZXMsIGFsbG93aW5nIHJlbG9hZHMgYXMgd2VsbC5cbiAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgcGF0aDogYCR7dGhpcy5jb250YWluZXIucGF0aH0ke3RoaXMucGF0aH1gLFxuICAgICAgICAvLyBQcmVzZXJ2ZSBjdXJyZW50IHF1ZXJ5XG4gICAgICAgIHF1ZXJ5OiB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25EZWxldGUoKSB7XG4gICAgICAvLyBUT0RPOiBJbXBsZW1lbnQhXG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5jb250YWluZXIub25DaGFuZ2UoKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRyZWUtaXRlbSB7XG4gIC0tY2hldnJvbi1pbmRlbnQ6ICN7JGNoZXZyb24taW5kZW50fTtcblxuICA+IC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICA+IC5kaXRvLXRyZWUtYnJhbmNoLFxuICAgID4gLmRpdG8tdHJlZS1sZWFmIHtcbiAgICAgIC8vIFVzZSBgLS1sZXZlbGAgQ1NTIHZhcmlhYmxlIHRvIGNhbGN1bGF0ZWQgdGhlIGFjY3VtdWxhdGVkIGluZGVudFxuICAgICAgLy8gcGFkZGluZyBkaXJlY3RseSBpbnN0ZWFkIG9mIGhhdmluZyBpdCBhY2N1bXVsYXRlIGluIG5lc3RlZCBDU1MuXG4gICAgICAvLyBUaGlzIHdheSwgd2UgY2FuIGtlZXAgdGhlIC5kaXRvLWFjdGl2ZSBhcmVhIGNvdmVyIHRoZSBmdWxsIHdpZHRoOlxuICAgICAgcGFkZGluZy1sZWZ0OiBjYWxjKHZhcigtLWNoZXZyb24taW5kZW50KSAqICh2YXIoLS1sZXZlbCwgMSkgLSAxKSk7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tdHJlZS1icmFuY2gge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtYnJhbmNoLFxuICAuZGl0by10cmVlLWxlYWYge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleDogYXV0bztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luOiAxcHggMDtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtbGFiZWwsXG4gIC5kaXRvLXRyZWUtaW5mbyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtaW5mbyB7XG4gICAgcGFkZGluZy1sZWZ0OiAwLjM1ZW07XG4gICAgY29sb3I6IHJnYmEoJGNvbG9yLWJsYWNrLCAwLjIpO1xuICB9XG5cbiAgLmRpdG8tYnV0dG9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1hcmdpbjogMXB4IDAgMXB4IDFlbTtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtaGVhZGVyOmhvdmVyIHtcbiAgICA+IC5kaXRvLWJ1dHRvbnMge1xuICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICB9IC8vIEhpZGUgYnV0dG9ucyBkdXJpbmcgZHJhZ2dpbmdcbiAgfVxuXG4gICYuZGl0by1kcmFnZ2luZyB7XG4gICAgLmRpdG8tdHJlZS1oZWFkZXIge1xuICAgICAgPiAuZGl0by1idXR0b25zIHtcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICYuZGl0by1hY3RpdmUge1xuICAgID4gLmRpdG8tdHJlZS1oZWFkZXIge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIHBhZGRpbmc6IDAgJGlucHV0LXBhZGRpbmctaG9yO1xuICAgICAgbWFyZ2luOiAwICgtJGlucHV0LXBhZGRpbmctaG9yKTtcblxuICAgICAgPiAuZGl0by10cmVlLWJyYW5jaCB7XG4gICAgICAgID4gLmRpdG8tY2hldnJvbjo6YmVmb3JlIHtcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgID4gKiA+IC5kaXRvLXRyZWUtbGFiZWwge1xuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXByb3BlcnRpZXMge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1sZWZ0OiAkY2hldnJvbi1pbmRlbnQ7XG5cbiAgICA+IHRyIHtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbiAgICB9XG5cbiAgICAuZGl0by1sYWJlbCB7XG4gICAgICBtYXJnaW46IDA7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJzogJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGhlYWQuZGl0by10YWJsZS1oZWFkXG4gIHRyXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWZvcj1cImNvbHVtbiBpbiBjb2x1bW5zXCJcbiAgICApXG4gICAgICB0aChcbiAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShjb2x1bW4pXCJcbiAgICAgICAgOmNsYXNzPVwiZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKVwiXG4gICAgICApXG4gICAgICAgIFJvdXRlckxpbmsoXG4gICAgICAgICAgdi1pZj1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgICAgdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgICAgICA6dG89XCJnZXRTb3J0TGluayhjb2x1bW4pXCJcbiAgICAgICAgICBjdXN0b21cbiAgICAgICAgKVxuICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgOmNsYXNzPVwiZ2V0U29ydENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLW9yZGVyLWFycm93c1xuICAgICAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgICAgIHNwYW4oXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICkge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgIHRoKFxuICAgICAgdi1pZj1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgICAvLy0gRW1wdHkgPHNwYW4+IGlzIG5lZWRlZCBmb3Igc3R5bGluZywgc2VlIF90YWJsZS5zY3NzXG4gICAgICBzcGFuXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RhYmxlSGVhZCcsIHtcbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sdW1uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgaGFzRWRpdEJ1dHRvbnM6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc29ydCgpIHtcbiAgICAgIGNvbnN0IG9yZGVyID0gKHRoaXMucXVlcnkub3JkZXIgfHwgJycpLnNwbGl0KC9cXHMrLylcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IG9yZGVyWzBdLFxuICAgICAgICBvcmRlcjogb3JkZXJbMV1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbHVtbkNsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIGBkaXRvLWNvbHVtbi0ke2h5cGhlbmF0ZShjb2x1bW4ubmFtZSl9YFxuICAgIH0sXG5cbiAgICBnZXRTb3J0Q2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3J0Lm5hbWUgPT09IGNvbHVtbi5uYW1lXG4gICAgICAgID8gYGRpdG8tc2VsZWN0ZWQgZGl0by1vcmRlci0ke3RoaXMuc29ydC5vcmRlcn1gXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBnZXRTb3J0TGluayhjb2x1bW4pIHtcbiAgICAgIC8vIFRvZ2dsZSBvcmRlciBpZiB0aGUgc2FtZSBjb2x1bW4gaXMgY2xpY2tlZCBhZ2Fpbi5cbiAgICAgIGNvbnN0IG9yZGVyID1cbiAgICAgICAgdGhpcy5zb3J0Lm5hbWUgPT09IGNvbHVtbi5uYW1lICYmIHRoaXMuc29ydC5vcmRlciA9PT0gJ2FzYydcbiAgICAgICAgICA/ICdkZXNjJ1xuICAgICAgICAgIDogJ2FzYydcbiAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5TGluayh7XG4gICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgIG9yZGVyOiBgJHtjb2x1bW4ubmFtZX0gJHtvcmRlcn1gXG4gICAgICB9KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRhYmxlLWhlYWQge1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICB0ciB7XG4gICAgdGgge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAgICAgLmRpdG8tYnV0dG9uIHtcbiAgICAgICAgLy8gQ29udmVudGlvbjogTmVzdGVkIHNwYW5zIGhhbmRsZSBwYWRkaW5nLCBzZWUgYmVsb3dcbiAgICAgICAgZGlzcGxheTogYmxvY2s7IC8vIE92ZXJyaWRlIGRlZmF1bHQgaW5saW5lLWZsZXggcG9zaXRpb25pbmcuXG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB0ZXh0LWFsaWduOiBpbmhlcml0O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgfVxuXG4gICAgICBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmdcbiAgICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG5cbiAgICAgICAgJjplbXB0eTo6YWZ0ZXIge1xuICAgICAgICAgIC8vIFByZXZlbnQgZW1wdHkgPHRoPiBmcm9tIGNvbGxhcHNpbmdcbiAgICAgICAgICBjb250ZW50OiAnXFwyMDBiJzsgLy8gemVyby13aWR0aCBzcGFjZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA+IHNwYW4ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGQoXG4gIDpjbGFzcz1cImNlbGwuY2xhc3NcIlxuICA6c3R5bGU9XCJjZWxsLnN0eWxlXCJcbilcbiAgLy8tIFRPRE86IEltcGxlbWVudCBpbmxpbmVkIGNvbXBvbmVudHMgaW4gY2VsbCBtb2RlIVxuICBjb21wb25lbnQoXG4gICAgdi1pZj1cImNlbGwuY29tcG9uZW50XCJcbiAgICA6aXM9XCJjZWxsLmNvbXBvbmVudFwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4gIHNwYW4oXG4gICAgdi1lbHNlXG4gICAgdi1odG1sPVwicmVuZGVyQ2VsbChkYXRhKVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZXNjYXBlSHRtbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RhYmxlQ2VsbCcsIHtcbiAgcHJvcHM6IHtcbiAgICBjZWxsOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbmRlckNlbGwoaXRlbSkge1xuICAgICAgY29uc3QgeyBuYW1lLCByZW5kZXIgfSA9IHRoaXMuY2VsbFxuICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW25hbWVdXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIDogZXNjYXBlSHRtbCh2YWx1ZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by11cGxvYWQtZmlsZVxuICAuZGl0by10aHVtYm5haWwoXG4gICAgdi1pZj1cInRodW1ibmFpbFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tdGh1bWJuYWlsLS0ke3RodW1ibmFpbH1gXCJcbiAgKVxuICAgIC5kaXRvLXRodW1ibmFpbF9faW5uZXJcbiAgICAgIGltZyhcbiAgICAgICAgdi1pZj1cInNvdXJjZVwiXG4gICAgICAgIDpzcmM9XCJzb3VyY2VcIlxuICAgICAgICBjcm9zc29yaWdpbj1cImFub255bW91c1wiXG4gICAgICApXG4gICAgICAuZGl0by10aHVtYm5haWxfX3R5cGUoXG4gICAgICAgIHYtZWxzZVxuICAgICAgKVxuICAgICAgICBzcGFuIHt7IHR5cGUgfX1cbiAgc3BhbiB7eyBmaWxlLm5hbWUgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9VcGxvYWRGaWxlJywge1xuICBwcm9wczoge1xuICAgIGZpbGU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRodW1ibmFpbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0aHVtYm5haWxVcmw6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB1cGxvYWRVcmw6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0eXBlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgVFlQRVNbdGhpcy5maWxlLnR5cGVdIHx8XG4gICAgICAgIHRoaXMuZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCkudG9VcHBlckNhc2UoKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBzb3VyY2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRVcmwgfHwgdGhpcy50aHVtYm5haWxVcmxcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAnZmlsZS51cGxvYWQuZmlsZSc6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXIoZmlsZSkge1xuICAgICAgICBpZiAodGhpcy50aHVtYm5haWwgJiYgZmlsZT8udHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkge1xuICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRVcmwgPSByZWFkZXIucmVzdWx0XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51cGxvYWRVcmwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmNvbnN0IFRZUEVTID0ge1xuICAndGV4dC9wbGFpbic6ICdUWFQnLFxuICAndGV4dC9odG1sJzogJ0hUTUwnLFxuICAndGV4dC9jc3MnOiAnQ1NTJyxcbiAgJ3RleHQvamF2YXNjcmlwdCc6ICdKUycsXG4gICdpbWFnZS9qcGVnJzogJ0pQRycsXG4gICdpbWFnZS9wbmcnOiAnUE5HJyxcbiAgJ2ltYWdlL2dpZic6ICdHSUYnLFxuICAnaW1hZ2Uvc3ZnK3htbCc6ICdTVkcnLFxuICAnbW92aWUvbXA0JzogJ01QNCcsXG4gICdhdWRpby9tcGVnJzogJ01QMycsXG4gICdhcHBsaWNhdGlvbi9qc29uJzogJ0pTT04nLFxuICAnYXBwbGljYXRpb24veG1sJzogJ1hNTCcsXG4gICdhcHBsaWNhdGlvbi9wZGYnOiAnUERGJyxcbiAgJ2FwcGxpY2F0aW9uL3ppcCc6ICdaSVAnXG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AdXNlICdzYXNzOm1hdGgnO1xuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdXBsb2FkLWZpbGUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG59XG5cbi5kaXRvLXRodW1ibmFpbCB7XG4gICRzZWxmOiAmO1xuXG4gIC8vIFNtYWxsIHNpemUgYnkgZGVmYXVsdFxuICAtLW1heC1zaXplOiAjezEgKiAkaW5wdXQtaGVpZ2h0fTtcbiAgLS1jb3JuZXItc2l6ZTogY2FsYyh2YXIoLS1tYXgtc2l6ZSkgLyA1KTtcbiAgLS1zaGFkb3ctc2l6ZTogMXB4O1xuICAtLW1pbi1zaXplOiBjYWxjKDIgKiB2YXIoLS1jb3JuZXItc2l6ZSkpO1xuICAtLW1hcmdpbjogMGVtO1xuICAtLWRyb3Atc2hhZG93OiBkcm9wLXNoYWRvdyhcbiAgICAwIGNhbGModmFyKC0tc2hhZG93LXNpemUpICogMC43NSkgdmFyKC0tc2hhZG93LXNpemUpICN7cmdiYShcbiAgICAgICAgJGNvbG9yLWJsYWNrLFxuICAgICAgICAwLjRcbiAgICAgICl9XG4gICk7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW46IHZhcigtLW1hcmdpbik7XG4gIG1hcmdpbi1yaWdodDogMC41ZW07XG4gIGZpbHRlcjogdmFyKC0tZHJvcC1zaGFkb3cpO1xuXG4gICYtLXNtYWxsIHtcbiAgICAtLW1heC1zaXplOiAjezEgKiAkaW5wdXQtaGVpZ2h0fTtcbiAgICAtLW1hcmdpbjogMGVtO1xuICAgIC0tc2hhZG93LXNpemU6IDFweDtcbiAgfVxuXG4gICYtLW1lZGl1bSB7XG4gICAgLS1tYXgtc2l6ZTogI3syICogJGlucHV0LWhlaWdodH07XG4gICAgLS1tYXJnaW46IDAuMjVlbTtcbiAgICAtLXNoYWRvdy1zaXplOiAxLjVweDtcbiAgfVxuXG4gICYtLWxhcmdlIHtcbiAgICAtLW1heC1zaXplOiAjezQgKiAkaW5wdXQtaGVpZ2h0fTtcbiAgICAtLW1hcmdpbjogMC41ZW07XG4gICAgLS1zaGFkb3ctc2l6ZTogMi41cHg7XG4gIH1cblxuICAmX19pbm5lciB7XG4gICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICBjbGlwLXBhdGg6IHBvbHlnb24oXG4gICAgICAwIDAsXG4gICAgICBjYWxjKDEwMCUgLSB2YXIoLS1jb3JuZXItc2l6ZSkpIDAsXG4gICAgICAxMDAlIHZhcigtLWNvcm5lci1zaXplKSxcbiAgICAgIDEwMCUgMTAwJSxcbiAgICAgIDAgMTAwJVxuICAgICk7XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgd2lkdGg6IHZhcigtLWNvcm5lci1zaXplKTtcbiAgICAgIGhlaWdodDogdmFyKC0tY29ybmVyLXNpemUpO1xuICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAjZmZmZmZmLCAjZWVlZWVlIDQwJSwgI2RkZGRkZCA1MCUpO1xuICAgICAgZmlsdGVyOiB2YXIoLS1kcm9wLXNoYWRvdyk7XG4gICAgfVxuICB9XG5cbiAgJl9fdHlwZSB7XG4gICAgLS1mb250LXNpemU6IHZhcigtLWNvcm5lci1zaXplKTtcblxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBtaW4td2lkdGg6IHZhcigtLW1pbi1zaXplKTtcbiAgICBtaW4taGVpZ2h0OiB2YXIoLS1tYXgtc2l6ZSk7XG4gICAgYXNwZWN0LXJhdGlvOiAzIC8gNDtcblxuICAgIHNwYW4ge1xuICAgICAgLS1jb2xvcjogI3skY29sb3ItZ3JleX07XG5cbiAgICAgIGZvbnQtc2l6ZTogbWluKHZhcigtLWZvbnQtc2l6ZSksICN7MS4yNSAqICRmb250LXNpemV9KTtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvcik7XG5cbiAgICAgICN7JHNlbGZ9Om5vdCgjeyRzZWxmfS0tc21hbGwpICYge1xuICAgICAgICBwYWRkaW5nOiAwIGNhbGModmFyKC0tZm9udC1zaXplKSAvIDQpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiBjYWxjKHZhcigtLWZvbnQtc2l6ZSkgLyA0KTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3IpO1xuICAgICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn0tLW1lZGl1bSAmIHtcbiAgICAgICAgLS1jb2xvcjogI3skY29sb3ItbGlnaHR9O1xuICAgICAgfVxuXG4gICAgICAjeyRzZWxmfS0tbGFyZ2UgJiB7XG4gICAgICAgIC0tY29sb3I6ICN7JGNvbG9yLWxpZ2h0ZXJ9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGltZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgLy8gU1ZHIGltYWdlcyBuZWVkIDEwMCUgc2V0dGluZ3MgdG8gc2NhbGUgaW50byB0aGUgY29udGFpbmVyLlxuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtaW4td2lkdGg6IHZhcigtLW1pbi1zaXplKTtcbiAgICBtaW4taGVpZ2h0OiB2YXIoLS1taW4tc2l6ZSk7XG4gICAgbWF4LXdpZHRoOiB2YXIoLS1tYXgtc2l6ZSk7XG4gICAgbWF4LWhlaWdodDogdmFyKC0tbWF4LXNpemUpO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgaXNSZWYsIG5leHRUaWNrLCBkZWZpbmVDb21wb25lbnQsIHJlZiwgcmVhY3RpdmUsIGggfSBmcm9tICd2dWUtZGVtaSc7XG5pbXBvcnQgeyB0cnlPbk1vdW50ZWQsIHRyeU9uU2NvcGVEaXNwb3NlLCB1bnJlZkVsZW1lbnQsIGRlZmF1bHREb2N1bWVudCwgdG9WYWx1ZSwgdXNlVk1vZGVsIH0gZnJvbSAnQHZ1ZXVzZS9jb3JlJztcbmltcG9ydCBTb3J0YWJsZSBmcm9tICdzb3J0YWJsZWpzJztcblxuZnVuY3Rpb24gdXNlU29ydGFibGUoZWwsIGxpc3QsIG9wdGlvbnMgPSB7fSkge1xuICBsZXQgc29ydGFibGU7XG4gIGNvbnN0IHsgZG9jdW1lbnQgPSBkZWZhdWx0RG9jdW1lbnQsIC4uLnJlc2V0T3B0aW9ucyB9ID0gb3B0aW9ucztcbiAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgb25VcGRhdGU6IChlKSA9PiB7XG4gICAgICBtb3ZlQXJyYXlFbGVtZW50KGxpc3QsIGUub2xkSW5kZXgsIGUubmV3SW5kZXgpO1xuICAgIH1cbiAgfTtcbiAgY29uc3Qgc3RhcnQgPSAoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gdHlwZW9mIGVsID09PSBcInN0cmluZ1wiID8gZG9jdW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoZWwpIDogdW5yZWZFbGVtZW50KGVsKTtcbiAgICBpZiAoIXRhcmdldClcbiAgICAgIHJldHVybjtcbiAgICBzb3J0YWJsZSA9IG5ldyBTb3J0YWJsZSh0YXJnZXQsIHsgLi4uZGVmYXVsdE9wdGlvbnMsIC4uLnJlc2V0T3B0aW9ucyB9KTtcbiAgfTtcbiAgY29uc3Qgc3RvcCA9ICgpID0+IHNvcnRhYmxlPy5kZXN0cm95KCk7XG4gIGNvbnN0IG9wdGlvbiA9IChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgIGlmICh2YWx1ZSAhPT0gdm9pZCAwKVxuICAgICAgc29ydGFibGU/Lm9wdGlvbihuYW1lLCB2YWx1ZSk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHNvcnRhYmxlPy5vcHRpb24obmFtZSk7XG4gIH07XG4gIHRyeU9uTW91bnRlZChzdGFydCk7XG4gIHRyeU9uU2NvcGVEaXNwb3NlKHN0b3ApO1xuICByZXR1cm4geyBzdG9wLCBzdGFydCwgb3B0aW9uIH07XG59XG5mdW5jdGlvbiBtb3ZlQXJyYXlFbGVtZW50KGxpc3QsIGZyb20sIHRvKSB7XG4gIGNvbnN0IF92YWx1ZUlzUmVmID0gaXNSZWYobGlzdCk7XG4gIGNvbnN0IGFycmF5ID0gX3ZhbHVlSXNSZWYgPyBbLi4udG9WYWx1ZShsaXN0KV0gOiB0b1ZhbHVlKGxpc3QpO1xuICBpZiAodG8gPj0gMCAmJiB0byA8IGFycmF5Lmxlbmd0aCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheS5zcGxpY2UoZnJvbSwgMSlbMF07XG4gICAgbmV4dFRpY2soKCkgPT4ge1xuICAgICAgYXJyYXkuc3BsaWNlKHRvLCAwLCBlbGVtZW50KTtcbiAgICAgIGlmIChfdmFsdWVJc1JlZilcbiAgICAgICAgbGlzdC52YWx1ZSA9IGFycmF5O1xuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IFVzZVNvcnRhYmxlID0gLyogQF9fUFVSRV9fICovIC8qICNfX1BVUkVfXyAqLyBkZWZpbmVDb21wb25lbnQoe1xuICBuYW1lOiBcIlVzZVNvcnRhYmxlXCIsXG4gIG1vZGVsOiB7XG4gICAgLy8gQ29tcGF0aWJsZSB3aXRoIHZ1ZTJcbiAgICBwcm9wOiBcIm1vZGVsVmFsdWVcIixcbiAgICBldmVudDogXCJ1cGRhdGU6bW9kZWxWYWx1ZVwiXG4gIH0sXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZToge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgdGFnOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBcImRpdlwiXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMgfSkge1xuICAgIGNvbnN0IGxpc3QgPSB1c2VWTW9kZWwocHJvcHMsIFwibW9kZWxWYWx1ZVwiKTtcbiAgICBjb25zdCB0YXJnZXQgPSByZWYoKTtcbiAgICBjb25zdCBkYXRhID0gcmVhY3RpdmUodXNlU29ydGFibGUodGFyZ2V0LCBsaXN0LCBwcm9wcy5vcHRpb25zKSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChzbG90cy5kZWZhdWx0KVxuICAgICAgICByZXR1cm4gaChwcm9wcy50YWcsIHsgcmVmOiB0YXJnZXQgfSwgc2xvdHMuZGVmYXVsdChkYXRhKSk7XG4gICAgfTtcbiAgfVxufSk7XG5cbmV4cG9ydCB7IFVzZVNvcnRhYmxlIH07XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuVXNlU29ydGFibGUuZGl0by1kcmFnZ2FibGUoXG4gIHYtaWY9XCJkcmFnZ2FibGVcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLWRyYWdnYWJsZS0tZHJhZ2dpbmcnOiBpc0RyYWdnaW5nIH1cIlxuICA6dGFnPVwidGFnXCJcbiAgOm1vZGVsVmFsdWU9XCJtb2RlbFZhbHVlXCJcbiAgOm9wdGlvbnM9XCJ7IC4uLm9wdGlvbnMsIG9uU3RhcnQsIG9uRW5kIH1cIlxuICBAdXBkYXRlOm1vZGVsVmFsdWU9XCIkZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCAkZXZlbnQpXCJcbilcbiAgc2xvdFxuY29tcG9uZW50KFxuICB2LWVsc2VcbiAgOmlzPVwidGFnXCJcbilcbiAgc2xvdFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgVXNlU29ydGFibGUgfSBmcm9tICdAdnVldXNlL2ludGVncmF0aW9ucy91c2VTb3J0YWJsZS9jb21wb25lbnQnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0RyYWdnYWJsZScsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFVzZVNvcnRhYmxlIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdkaXYnXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgZHJhZ2dhYmxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtb3VzZUV2ZW50czogbnVsbCxcbiAgICAgIGlzRHJhZ2dpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblN0YXJ0KGV2ZW50KSB7XG4gICAgICB0aGlzLm9wdGlvbnMub25TdGFydD8uKGV2ZW50KVxuICAgICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZVxuICAgICAgdGhpcy5tb3VzZUV2ZW50cz8ucmVtb3ZlKClcbiAgICB9LFxuXG4gICAgb25FbmQoZXZlbnQpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5vbkVuZD8uKGV2ZW50KVxuICAgICAgLy8gS2VlcCBgaXNEcmFnZ2luZ2AgdHJ1ZSB1bnRpbCB0aGUgbmV4dCBtb3VzZSBpbnRlcmFjdGlvbiBzbyB0aGF0XG4gICAgICAvLyBjb25mdXNlZCBob3ZlciBzdGF0ZXMgYXJlIGNsZWFyZWQgYmVmb3JlIHJlbW92aW5nIHRoZSBob3ZlciBjYXRjaGVyLlxuICAgICAgdGhpcy5tb3VzZUV2ZW50cyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgbW91c2Vkb3duOiB0aGlzLm9uTW91c2UsXG4gICAgICAgIG1vdXNlbW92ZTogdGhpcy5vbk1vdXNlLFxuICAgICAgICBtb3VzZWxlYXZlOiB0aGlzLm9uTW91c2VcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uTW91c2UoKSB7XG4gICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZVxuICAgICAgdGhpcy5tb3VzZUV2ZW50cz8ucmVtb3ZlKClcbiAgICAgIHRoaXMubW91c2VFdmVudHMgPSBudWxsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZHJhZ2dhYmxlIHtcbiAgLy8gT3ZlcmxheSBhIGhvdmVyIGNhdGNoZXIgd2hpbGUgd2UncmUgZHJhZ2dpbmcgdG8gcHJldmVudCBob3ZlciBzdGF0ZXMgZnJvbVxuICAvLyBnZXR0aW5nIHN0dWNrIC8gY29uZnVzZWQuIFNhZmFyaSBzdHJ1Z2dsZXMgd2l0aCB0aGlzLCBzbyBkaXNhYmxlIGl0IHRoZXJlLlxuICBAaW5jbHVkZSBicm93c2VyLXF1ZXJ5KCgnY2hyb21lJywgJ2ZpcmVmb3gnKSkge1xuICAgICY6aGFzKCZfX2Nob3NlbiksXG4gICAgJi0tZHJhZ2dpbmcge1xuICAgICAgPiAqIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgID4gOmZpcnN0LWNoaWxkOjphZnRlciB7XG4gICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIGluc2V0OiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJl9fZmFsbGJhY2sge1xuICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAycHggNHB4ICRjb2xvci1zaGFkb3cpO1xuXG4gICAgLy8gTmVzdGVkIDx0ZD4gbmVlZCB0byBhbHNvIHN3aXRjaCB0byBgZGlzcGxheTogZmxleGAgc3R5bGUgZHVyaW5nIGRyYWdnaW5nLlxuICAgICYsXG4gICAgdGQge1xuICAgICAgZGlzcGxheTogZmxleDtcblxuICAgICAgPiAqIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc3Bpbm5lcihcbiAgdi1zaG93PVwibG9hZGluZ1wiXG4gIDpzdHlsZT1cInsgJy0tY29sb3InOiBjb2xvciwgJy0tc2l6ZSc6IHNpemUsICctLW1hcmdpbic6IG1hcmdpbiB9XCJcbilcbiAgLmRpdG8tc3Bpbm5lcl9fcHVsc2UuZGl0by1zcGlubmVyX19wdWxzZTFcbiAgLmRpdG8tc3Bpbm5lcl9fcHVsc2UuZGl0by1zcGlubmVyX19wdWxzZTJcbiAgLmRpdG8tc3Bpbm5lcl9fcHVsc2UuZGl0by1zcGlubmVyX19wdWxzZTNcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9TcGlubmVyJywge1xuICBwcm9wczoge1xuICAgIGxvYWRpbmc6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBjb2xvcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgc2l6ZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgbWFyZ2luOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tc3Bpbm5lciB7XG4gIC0tY29sb3I6ICM5OTk5OTk7XG4gIC0tc2l6ZTogOHB4O1xuICAtLW1hcmdpbjogMnB4O1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgJl9fcHVsc2Uge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvcik7XG4gICAgd2lkdGg6IHZhcigtLXNpemUpO1xuICAgIGhlaWdodDogdmFyKC0tc2l6ZSk7XG4gICAgbWFyZ2luOiB2YXIoLS1tYXJnaW4pO1xuICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gICAgYW5pbWF0aW9uOiBkaXRvLXNwaW5uZXItcHVsc2UgMC43NXMgY3ViaWMtYmV6aWVyKDAuMiwgMC42OCwgMC4xOCwgMS4wOCkgMHNcbiAgICAgIGluZmluaXRlIGJvdGg7XG4gIH1cblxuICAmX19wdWxzZTEge1xuICAgIGFuaW1hdGlvbi1kZWxheTogMC4xMnM7XG4gIH1cblxuICAmX19wdWxzZTIge1xuICAgIGFuaW1hdGlvbi1kZWxheTogMC4yNHM7XG4gIH1cblxuICAmX19wdWxzZTMge1xuICAgIGFuaW1hdGlvbi1kZWxheTogMC4zNnM7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBkaXRvLXNwaW5uZXItcHVsc2Uge1xuICAwJSxcbiAgODAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICA0NSUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBkaXRvLXNwaW5uZXItcHVsc2Uge1xuICAwJSxcbiAgODAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICA0NSUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmZ1bmN0aW9uIERpdG9WTm9kZSh7IHZub2RlIH0pIHtcbiAgcmV0dXJuIHZub2RlXG59XG5cbkRpdG9WTm9kZS5wcm9wcyA9IHtcbiAgdm5vZGU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVm5vZGUnLCBEaXRvVk5vZGUpXG48L3NjcmlwdD5cbiIsIi8vIERpdG9UeXBlQ29tcG9uZW50IGlzIHRoZSBhYnN0cmFjdCBiYXNlIGNvbXBvbmVudCBmb3IgYWxsIG90aGVyIHR5cGVcbi8vIGNvbXBvbmVudHMgaW5zaWRlIHRoZSB0eXBlcy8gZm9sZGVyLiBUaGVyZSdzIGFsc28gYSBzZXBhcmF0ZSBjb25jcmV0ZVxuLy8gYERpdG9UeXBlQ29tcG9uZW50LnZ1ZWAgY29tcG9uZW50LCB1c2UgdG8gcmVuZGVyIGB7IHR5cGU6ICdjb21wb25lbnQnIH1gXG5pbXBvcnQgeyBhc0FycmF5LCBjYW1lbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IHJlZ2lzdGVyVHlwZUNvbXBvbmVudCwgZ2V0VHlwZUNvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBleHRlbmRzOiBEaXRvQ29tcG9uZW50LFxuICBtaXhpbnM6IFtUeXBlTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiBmYWxzZSxcbiAgdGV4dEZpZWxkOiBmYWxzZSxcbiAgLy8gU2V0IHJlYXNvbmFibGUgZGVmYXVsdHMgZm9yIGFsbCBvZiB0aGVzZSB0aGF0IGFyZSB1c2VkIGJ5IG1vc3QgdHlwZVxuICAvLyBjb21wb25lbnRzLiBUaGVzZSBvbmx5IG5lZWQgZGVmaW5pbmcgaW4gc3ViLWNsYXNzZXMgd2hlbiB0aGV5IGRpZmZlci5cbiAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICBkZWZhdWx0TmVzdGVkOiB0cnVlLFxuICBkZWZhdWx0VmlzaWJsZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogdHJ1ZSxcbiAgZXhjbHVkZVZhbHVlOiBmYWxzZSxcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBudWxsLFxuICBvbWl0U3BhY2luZzogZmFsc2UsXG5cbiAgY29tcG9uZW50OiBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCxcblxuICBnZXQ6IGdldFR5cGVDb21wb25lbnQsXG5cbiAgcmVnaXN0ZXIodHlwZXMsIGRlZmluaXRpb24gPSB7fSkge1xuICAgIHR5cGVzID0gYXNBcnJheSh0eXBlcylcbiAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudChcbiAgICAgIGBEaXRvVHlwZSR7Y2FtZWxpemUodHlwZXNbMF0sIHRydWUpfWAsXG4gICAgICBkZWZpbml0aW9uXG4gICAgKVxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgcmVnaXN0ZXJUeXBlQ29tcG9uZW50KHR5cGUsIGNvbXBvbmVudClcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBvbmVudFxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuYnV0dG9uLmRpdG8tYnV0dG9uKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6dHlwZT1cInR5cGVcIlxuICA6dGl0bGU9XCJ0aXRsZVwiXG4gIDpjbGFzcz1cImJ1dHRvbkNsYXNzXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG4gIC5kaXRvLWJ1dHRvbl9fdGV4dChcbiAgICB2LWlmPVwidGV4dFwiXG4gICkge3sgdGV4dCB9fVxuICAuZGl0by1pbmZvKFxuICAgIHYtaWY9XCIhbGFiZWwgJiYgaW5mb1wiXG4gICAgOmRhdGEtaW5mbz1cImluZm9cIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGhhc1Jlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ2J1dHRvbicsICdzdWJtaXQnXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICAgIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcbiAgICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICB2ZXJiKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52ZXJic1t0aGlzLm5hbWVdXG4gICAgICB9LFxuXG4gICAgICBidXR0b25DbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmVyYiA/IGBkaXRvLWJ1dHRvbi0ke3RoaXMudmVyYn1gIDogbnVsbFxuICAgICAgfSxcblxuICAgICAgdGV4dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RleHQnLCB7XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgICAgfSksXG5cbiAgICAgIHRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0IHx8IGxhYmVsaXplKHRoaXMudmVyYilcbiAgICAgIH0sXG5cbiAgICAgIGluZm86IGdldFNjaGVtYUFjY2Vzc29yKCdpbmZvJywge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgIH0pLFxuXG4gICAgICBjbG9zZUZvcm06IGdldFNjaGVtYUFjY2Vzc29yKCdjbG9zZUZvcm0nLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICAvLyBAb3ZlcnJpZGVcbiAgICAgIGdldEV2ZW50cygpIHtcbiAgICAgICAgY29uc3QgeyBvbkZvY3VzLCBvbkJsdXIsIG9uQ2xpY2sgfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIHsgb25Gb2N1cywgb25CbHVyLCBvbkNsaWNrIH1cbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIHN1Ym1pdChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlQ29tcG9uZW50Py5zdWJtaXQodGhpcywgb3B0aW9ucylcbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIG9uQ2xpY2soKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZW1pdEV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICAgIH0pXG4gICAgICAgIC8vIEhhdmUgYnV0dG9ucyB0aGF0IGRlZmluZSByZXNvdXJjZXMgY2FsbCBgdGhpcy5zdWJtaXQoKWAgYnkgZGVmYXVsdDpcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmIC8vIE1lYW5pbmc6IGRvbid0IHByZXZlbnQgZGVmYXVsdC5cbiAgICAgICAgICBoYXNSZXNvdXJjZSh0aGlzLnNjaGVtYSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zdWJtaXQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1idXR0b24ge1xuICAkc2VsZjogJjtcblxuICAmX190ZXh0IHtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jaGVja2JveFxuICBpbnB1dChcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NoZWNrYm94Jywge1xuICBuYXRpdmVGaWVsZDogdHJ1ZVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNoZWNrYm94IHtcbiAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzcztcbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNGdW5jdGlvbixcbiAgaXNQcm9taXNlLFxuICBub3JtYWxpemVEYXRhUGF0aCxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyByZWFjdGl2ZSB9IGZyb20gJ3Z1ZSdcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0xvYWRpbmdNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGFzeW5jRGF0YUVudHJpZXM6IHt9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgbmFtZSwgbG9hZGluZ09wdGlvbnMpIHtcbiAgICAgIGlmICghaXNPYmplY3Qoc2NoZW1hKSkge1xuICAgICAgICBzY2hlbWEgPSB7IGRhdGE6IHNjaGVtYSB9XG4gICAgICB9XG4gICAgICBsZXQgeyBkYXRhID0gdW5kZWZpbmVkLCBkYXRhUGF0aCA9IG51bGwgfSA9IHNjaGVtYVxuICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGFzeW5jIGRhdGEgbG9hZGluZyBhbHJlYWR5IGluIHByb2Nlc3MuXG4gICAgICBjb25zdCBhc3luY0VudHJ5ID0gKHRoaXMuYXN5bmNEYXRhRW50cmllc1tuYW1lXSB8fD0gcmVhY3RpdmUoe1xuICAgICAgICBkZXBlbmRlbmN5RnVuY3Rpb246IG51bGwsXG4gICAgICAgIHJlc29sdmVkRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICByZXNvbHZpbmc6IGZhbHNlLFxuICAgICAgICByZXNvbHZlZDogZmFsc2VcbiAgICAgIH0pKVxuICAgICAgLy8gSWYgdGhlIGRhdGEgY2FsbGJhY2sgcHJvdmlkZWQgYSBkZXBlbmRlbmN5IGZ1bmN0aW9uIHdoZW4gaXQgd2FzIGNhbGxlZCxcbiAgICAgIC8vIGNhbCBpdCBpbiBldmVyeSBjYWxsIG9mIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGZvcmNlIFZ1ZSB0byBrZWVwIHRyYWNrXG4gICAgICAvLyBvZiB0aGUgYXN5bmMgZGVwZW5kZW5jaWVzLlxuICAgICAgYXN5bmNFbnRyeS5kZXBlbmRlbmN5RnVuY3Rpb24/Lih0aGlzLmNvbnRleHQpXG5cbiAgICAgIGlmIChhc3luY0VudHJ5LnJlc29sdmVkKSB7XG4gICAgICAgIC8vIElmIHRoZSBkYXRhIHdhcyByZXNvbHZlZCBhbHJlYWR5LCByZXR1cm4gaXQgYW5kIGNsZWFyIHRoZSByZXNvbHZlZFxuICAgICAgICAvLyB2YWx1ZS4gVGhpcyB3b3JrcyBiZWNhdXNlIFZ1ZSBjYWNoZXMgdGhlIHJlc3VsdCBvZiBjb21wdXRlZCBnZXR0ZXJzXG4gICAgICAgIC8vIGFuZCBvbmx5IHJlZXZhbHVhdGVzIGlmIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZWQuIFRoaXMgaXMgdG9cbiAgICAgICAgLy8gZW5zdXJlIHRoYXQgYSBjYWNoZWQgdmFsdWUgaGVyZSBkb2Vzbid0IGJsb2NrIC8gb3ZlcnJpZGVcbiAgICAgICAgLy8gcmVldmFsdWF0aW9uIHdoZW4gYSBkZXBlbmRlbmN5IGNoYW5nZXM6XG4gICAgICAgIGNvbnN0IHsgcmVzb2x2ZWREYXRhIH0gPSBhc3luY0VudHJ5XG4gICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gdW5kZWZpbmVkXG4gICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWQgPSBmYWxzZVxuICAgICAgICByZXR1cm4gcmVzb2x2ZWREYXRhXG4gICAgICB9XG4gICAgICAvLyBBdm9pZCBjYWxsaW5nIHRoZSBkYXRhIGZ1bmN0aW9uIHR3aWNlOlxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2aW5nKSB7XG4gICAgICAgIGRhdGEgPSBudWxsXG4gICAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGF0YSkpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBkYXRhKHRoaXMuY29udGV4dClcbiAgICAgICAgICAvLyBJZiB0aGUgcmVzdWx0IG9mIHRoZSBkYXRhIGZ1bmN0aW9uIGlzIGFub3RoZXIgZnVuY3Rpb24sIHRoZW4gdGhlXG4gICAgICAgICAgLy8gZmlyc3QgZGF0YSBmdW5jdGlvbiBpcyB0aGVyZSB0byB0cmFjayBkZXBlbmRlbmNpZXMgYW5kIHRoZSByZWFsXG4gICAgICAgICAgLy8gZGF0YSBsb2FkaW5nIGhhcHBlbnMgaW4gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQuIEtlZXAgdHJhY2tcbiAgICAgICAgICAvLyBpdCBpbiBgZGVwZW5kZW5jeUZ1bmN0aW9uYCBzbyBpdCBjYW4gYmUgY2FsbGVkIG9uIGVhY2ggY2FsbCBvZlxuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGtlZXAgdGhlIGRlcGVuZGVuY2llcyBpbnRhY3QsIGFuZCBjYWxsXG4gICAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQgb25jZSB0byBnZXQgdGhlIGFjdHVhbCBkYXRhOlxuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uID0gZGF0YVxuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdCh0aGlzLmNvbnRleHQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTk9URTogSWYgdGhlIGRhdGEgaXMgbm90IGEgcHJvbWlzZSwgaXQgaXMgcmVzb2x2ZWQgYWxyZWFkeS5cbiAgICAgICAgaWYgKGlzUHJvbWlzZShkYXRhKSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkYXRhIGlzIGFzeW5jaHJvbm91cywgaXQgY2FuJ3QgYmUgcmV0dXJuZWQgc3RyYWlnaHQgYXdheS5cbiAgICAgICAgICAvLyBCdXQgd2UgY2FuIGNoZWF0IHVzaW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYW5kIGByZXNvbHZlZERhdGFgLFxuICAgICAgICAgIC8vIHdoaWNoIGlzIGdvaW5nIHRvIHJlY2VpdmUgdGhlIGxvYWRlZCBkYXRhIGFzeW5jaHJvbm91c2x5LFxuICAgICAgICAgIC8vIHRyaWdnZXJpbmcgYSByZWNvbXB1dGUgb2YgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgY2FsbHNcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYC5cbiAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IHRydWVcbiAgICAgICAgICB0aGlzLnJlc29sdmVEYXRhKGRhdGEsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgICAgICAgLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gZGF0YVxuICAgICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IGZhbHNlXG4gICAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWQgPSB0cnVlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSBmYWxzZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAvLyBDbGVhciBkYXRhIHVudGlsIHByb21pc2UgaXMgcmVzb2x2ZWQgYW5kIGByZXNvbHZlZERhdGFgIGlzIHNldFxuICAgICAgICAgIGRhdGEgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YVBhdGgpIHtcbiAgICAgICAgZGF0YSA9IGdldFZhbHVlQXREYXRhUGF0aChcbiAgICAgICAgICB0aGlzLnJvb3REYXRhLFxuICAgICAgICAgIG5vcm1hbGl6ZURhdGFQYXRoKGAke3RoaXMuZGF0YVBhdGh9LyR7ZGF0YVBhdGh9YClcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVzb2x2ZURhdGEobG9hZCwgbG9hZGluZ09wdGlvbnMgPSB7fSkge1xuICAgICAgLy8gVXNlIGEgdGltZW91dCB0byBhbGxvdyBhbHJlYWR5IHJlc29sdmVkIHByb21pc2VzIHRvIHJldHVybiBkYXRhIHdpdGhvdXRcbiAgICAgIC8vIHNob3dpbmcgYSBsb2FkaW5nIGluZGljYXRvci5cbiAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpLCAwKVxuICAgICAgbGV0IGRhdGEgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gYXdhaXQgKGlzRnVuY3Rpb24obG9hZCkgPyBsb2FkKCkgOiBsb2FkKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvci5tZXNzYWdlIHx8IGVycm9yKVxuICAgICAgfVxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKVxuICAgICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIHJldHVybiBkYXRhXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRGF0YU1peGluIGZyb20gJy4vRGF0YU1peGluLmpzJ1xuaW1wb3J0IHsgaGFzVmlld1NjaGVtYSwgZ2V0Vmlld0VkaXRQYXRoIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IHNldFRlbXBvcmFyeUlkLCBpc1JlZmVyZW5jZSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNBcnJheSxcbiAgaXNTdHJpbmcsXG4gIGlzRnVuY3Rpb24sXG4gIG5vcm1hbGl6ZURhdGFQYXRoLFxuICBsYWJlbGl6ZSxcbiAgZGVib3VuY2VBc3luY1xufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhc09wdGlvbnM6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCBjb252ZXJ0VmFsdWUgPSB2YWx1ZSA9PlxuICAgICAgICAgIHRoaXMucmVsYXRlXG4gICAgICAgICAgICA/IHRoaXMuaGFzT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgICA/IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICBjb25zdCB2YWx1ZSA9IGlzQXJyYXkodGhpcy52YWx1ZSlcbiAgICAgICAgICA/IHRoaXMudmFsdWUubWFwKGNvbnZlcnRWYWx1ZSkuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKVxuICAgICAgICAgIDogY29udmVydFZhbHVlKHRoaXMudmFsdWUpXG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyBXaGVuIHJlbGF0aW5nIGFuZCBhcyBzb29uIGFzIHRoZSBvcHRpb25zIGFyZSBhdmFpbGFibGUuLi5cbiAgICAgICAgICB0aGlzLnJlbGF0ZSAmJlxuICAgICAgICAgIHRoaXMuaGFzT3B0aW9ucyAmJiAoXG4gICAgICAgICAgICAvLyAuLi5pZiB0aGUgdmFsdWUgaXMgZm9yY2VkIHRvIG51bGwgYmVjYXVzZSBhIGRpc2FwcGVhcmVkIG9wdGlvbi4uLlxuICAgICAgICAgICAgdmFsdWUgPT09IG51bGwgJiYgdGhpcy52YWx1ZSAhPT0gbnVsbCB8fFxuICAgICAgICAgICAgLy8gLi4ub3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVmZXJlbmNlLCByZXBsYWNlIGl0IHdpdGggaXRzIG9wdGlvblxuICAgICAgICAgICAgLy8gdmFsdWUsIHNvIHRoYXQgaXQnbGwgaG9sZCBhY3R1YWwgZGF0YSwgbm90IGp1c3QgYSByZWZlcmVuY2UgaWQuXG4gICAgICAgICAgICBpc1JlZmVyZW5jZSh0aGlzLnZhbHVlKVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnQgPSB2YWx1ZSA9PlxuICAgICAgICAgIHRoaXMucmVsYXRlXG4gICAgICAgICAgICA/IHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpXG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIHRoaXMudmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICAgID8gdmFsdWUubWFwKGNvbnZlcnQpXG4gICAgICAgICAgOiBjb252ZXJ0KHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZE9wdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSlcbiAgICB9LFxuXG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEodGhpcy5zY2hlbWEub3B0aW9ucywgJ29wdGlvbnMnKSA/PyBbXVxuICAgICAgaWYgKCFpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBvcHRpb25zIGRhdGEsIHNob3VsZCBiZSBhcnJheTogJHtkYXRhfWApXG4gICAgICB9XG4gICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICB0aGlzLmhhc09wdGlvbnMgPSBkYXRhLmxlbmd0aCA+IDBcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NPcHRpb25zKGRhdGEpXG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICAvLyBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gYFR5cGVNdWx0aXNlbGVjdGAgdG8gcmV0dXJuIHRoZSBgc2VhcmNoZWRPcHRpb25zYFxuICAgICAgLy8gd2hlbiBhIHNlYXJjaCBmaWx0ZXIgd2FzIGFwcGxpZWQuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIHJlbGF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbGF0ZScsIHtcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gYHJlbGF0ZUJ5OiAnaWQnYFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gV2UgY2Fubm90IHVzZSBzY2hlbWEgYWNjZXNzb3IgY2FsbGJhY2sgbWFnaWMgZm9yIGByZWxhdGVgIGFzIHdlIG5lZWRcbiAgICAgIC8vIHRoaXMgb3V0c2lkZSBvZiB0aGUgY29tcG9uZW50J3MgbGlmZS1zcGFuLCBzZWUgYHByb2Nlc3NEYXRhKClgIGJlbG93LlxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBncm91cEJ5OiBnZXRTY2hlbWFBY2Nlc3NvcignZ3JvdXBCeScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgb3B0aW9ucy5sYWJlbEtleWAgLyBgb3B0aW9uTGFiZWxLZXlgP1xuICAgIG9wdGlvbkxhYmVsOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy5sYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQobGFiZWwpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICdsYWJlbCc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbGFiZWwgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgnbGFiZWwnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBvcHRpb25zLnZhbHVlS2V5YCAvIGBvcHRpb25WYWx1ZUtleWA/XG4gICAgb3B0aW9uVmFsdWU6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLnZhbHVlJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldCh2YWx1ZSkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ3ZhbHVlJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB2YWx1ZSB8fFxuICAgICAgICAgIHRoaXMucmVsYXRlICYmICdpZCcgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgndmFsdWUnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgbW92aW5nIHNlYXJjaCB0byBgb3B0aW9ucy5zZWFyY2hgP1xuICAgIHNlYXJjaEZpbHRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaCcsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQoc2VhcmNoKSB7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBjb25zdCB7IGZpbHRlciwgZGVib3VuY2UgfSA9IGlzRnVuY3Rpb24oc2VhcmNoKVxuICAgICAgICAgICAgPyB7IGZpbHRlcjogc2VhcmNoIH1cbiAgICAgICAgICAgIDogc2VhcmNoXG4gICAgICAgICAgcmV0dXJuIGRlYm91bmNlID8gZGVib3VuY2VBc3luYyhmaWx0ZXIsIGRlYm91bmNlKSA6IGZpbHRlclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgZWRpdGFibGUgJiZcbiAgICAgICAgICBoYXNWaWV3U2NoZW1hKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZWRpdGFibGUgJiYgdGhpcy5zZWxlY3RlZFZhbHVlXG4gICAgICAgID8gZ2V0Vmlld0VkaXRQYXRoKHRoaXMuc2NoZW1hLCB0aGlzLnNlbGVjdGVkVmFsdWUsIHRoaXMuY29udGV4dClcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdyb3VwQnlMYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnbGFiZWwnIDogbnVsbFxuICAgIH0sXG5cbiAgICBncm91cEJ5T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnb3B0aW9ucycgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRPcHRpb25LZXkoa2V5KSB7XG4gICAgICBjb25zdCBbb3B0aW9uXSA9IHRoaXMuYWN0aXZlT3B0aW9uc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KG9wdGlvbikgJiYga2V5IGluIG9wdGlvbiA/IGtleSA6IG51bGxcbiAgICB9LFxuXG4gICAgcHJvY2Vzc09wdGlvbnMob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlbGF0ZSkge1xuICAgICAgICAgIC8vIElmIGlkcyBhcmUgbWlzc2luZyBhbmQgd2Ugd2FudCB0byByZWxhdGUsIHNldCB0ZW1wb3JhcnkgaWRzLlxuICAgICAgICAgIC8vIE5PVEU6IFdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBhY3R1YWwgZGF0YSwgbWFraW5nIGEgY29weSB3b24ndCB3b3JrXG4gICAgICAgICAgLy8gYXMgaXQgd29uJ3QgcHJvcGFnYXRlLlxuICAgICAgICAgIC8vIE5PVEU6IFRoaXMgb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgZGF0YSBpcyBmcm9tIHRoZSBncmFwaCB0aGF0XG4gICAgICAgICAgLy8gd2UncmUgY3VycmVudGx5IGVkaXRpbmcuXG4gICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKCEoJ2lkJyBpbiBvcHRpb24pKSB7XG4gICAgICAgICAgICAgIHNldFRlbXBvcmFyeUlkKG9wdGlvbiwgJ2lkJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBCeSkge1xuICAgICAgICAgIGNvbnN0IGdyb3VwZWQgPSB7fVxuICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLnJlZHVjZShcbiAgICAgICAgICAgIChyZXN1bHRzLCBvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBvcHRpb25bdGhpcy5ncm91cEJ5XVxuICAgICAgICAgICAgICBsZXQgZW50cnkgPSBncm91cGVkW2dyb3VwXVxuICAgICAgICAgICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgICAgICAgICAgZW50cnkgPSBncm91cGVkW2dyb3VwXSA9IHtcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlMYWJlbF06IGdyb3VwLFxuICAgICAgICAgICAgICAgICAgW3RoaXMuZ3JvdXBCeU9wdGlvbnNdOiBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goZW50cnkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZW50cnkub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9LFxuXG4gICAgaGFzT3B0aW9uKG9wdGlvbikge1xuICAgICAgcmV0dXJuICEhdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgfSxcblxuICAgIGdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB7XG4gICAgICBjb25zdCBmaW5kT3B0aW9uID0gKG9wdGlvbnMsIHZhbHVlLCBncm91cEJ5KSA9PiB7XG4gICAgICAgIC8vIFNlYXJjaCBmb3IgdGhlIG9wdGlvbiBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgYW5kIHJldHVybiB0aGVcbiAgICAgICAgLy8gd2hvbGUgb2JqZWN0LlxuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKGdyb3VwQnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gZmluZE9wdGlvbihvcHRpb24ub3B0aW9ucywgdmFsdWUsIG51bGwpXG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvblZhbHVlXG4gICAgICAgID8gZmluZE9wdGlvbih0aGlzLmFjdGl2ZU9wdGlvbnMsIHZhbHVlLCB0aGlzLmdyb3VwQnkpXG4gICAgICAgIDogdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgICBjb25zdCB7IG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNTdHJpbmcob3B0aW9uVmFsdWUpXG4gICAgICAgID8gb3B0aW9uPy5bb3B0aW9uVmFsdWVdXG4gICAgICAgIDogaXNGdW5jdGlvbihvcHRpb25WYWx1ZSlcbiAgICAgICAgICA/IG9wdGlvblZhbHVlKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IG9wdGlvblxuICAgIH0sXG5cbiAgICBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25MYWJlbClcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25MYWJlbF1cbiAgICAgICAgOiBpc0Z1bmN0aW9uKG9wdGlvbkxhYmVsKVxuICAgICAgICAgID8gb3B0aW9uTGFiZWwobmV3IERpdG9Db250ZXh0KHRoaXMsIHsgb3B0aW9uIH0pKVxuICAgICAgICAgIDogbGFiZWxpemUoYCR7b3B0aW9ufWApXG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpIHtcbiAgICBpZiAoc2NoZW1hLnJlbGF0ZSkge1xuICAgICAgLy8gRm9yIGludGVybmFsbHkgcmVsYXRpbmcgZGF0YSAoYHNjaGVtYS5vcHRpb25zLmRhdGFQYXRoYCksIHdlIG5lZWQgdG9cbiAgICAgIC8vIHByb2Nlc3MgYm90aCB0aGUgb3B0aW9ucyAoZm9yICcjcmVmJykgYW5kIHRoZSB2YWx1ZSAoJyNpZCcpLlxuICAgICAgLy8gU2VlIGBEYXRhTWl4aW4uaGFuZGxlRGF0YVNjaGVtYSgpYDpcbiAgICAgIGNvbnN0IHBhdGggPSBzY2hlbWEub3B0aW9ucz8uZGF0YVBhdGhcbiAgICAgIGNvbnN0IHJlbGF0ZWREYXRhUGF0aCA9IHBhdGhcbiAgICAgICAgPyBub3JtYWxpemVEYXRhUGF0aChgJHtkYXRhUGF0aH0vJHtwYXRofWApXG4gICAgICAgIDogbnVsbFxuICAgICAgZ3JhcGguYWRkUmVsYXRpb24oZGF0YVBhdGgsIHJlbGF0ZWREYXRhUGF0aCwgc2NoZW1hKVxuICAgICAgaWYgKHJlbGF0ZWREYXRhUGF0aCkge1xuICAgICAgICBncmFwaC5zZXRTb3VyY2VSZWxhdGVkKHJlbGF0ZWREYXRhUGF0aClcbiAgICAgIH1cbiAgICAgIC8vIENvbnZlcnQgcmVsYXRpbmcgb2JqZWN0cyB0byBhIHNoYWxsb3cgY29weSB3aXRoIG9ubHkgdGhlIGlkIGxlZnQuXG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IHRvIHVzaW5nIGByZWxhdGVCeWA6XG4gICAgICBjb25zdCBwcm9jZXNzUmVsYXRlID0gdmFsdWUgPT4gKHZhbHVlID8geyBpZDogdmFsdWUuaWQgfSA6IHZhbHVlKVxuICAgICAgLy8gU2VsZWN0ZWQgb3B0aW9ucyBjYW4gYmUgYm90aCBvYmplY3RzICYgYXJyYXlzLCBlLmcuICdjaGVja2JveGVzJzpcbiAgICAgIHZhbHVlID0gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc1JlbGF0ZSlcbiAgICAgICAgOiBwcm9jZXNzUmVsYXRlKHZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnVsLmRpdG8tY2hlY2tib3hlcyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKFxuICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICApXG4gICAgbGFiZWxcbiAgICAgIC5kaXRvLWNoZWNrYm94XG4gICAgICAgIGlucHV0KFxuICAgICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgIClcbiAgICAgICAgc3BhbiB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NoZWNrYm94ZXMnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIGRlZmF1bHRWYWx1ZTogW10sXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IG9wdGlvbiB8fCBbXVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNoZWNrYm94ZXMge1xuICBsYWJlbCB7XG4gICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzcztcbiAgfVxuXG4gIGlucHV0IHtcbiAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY29kZShcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJjb2RlXCJcbiAgOnN0eWxlPVwic3R5bGVcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgQ29kZUZsYXNrIGZyb20gJ2NvZGVmbGFzaydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2RlJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCAzXG4gICAgfSxcblxuICAgIHN0eWxlKCkge1xuICAgICAgcmV0dXJuIGBoZWlnaHQ6IGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBjb25zdCBmbGFzayA9IG5ldyBDb2RlRmxhc2sodGhpcy4kcmVmcy5jb2RlLCB7XG4gICAgICBsYW5ndWFnZTogdGhpcy5zY2hlbWEubGFuZ3VhZ2UgfHwgJ2phdmFzY3JpcHQnLFxuICAgICAgdGFiU2l6ZTogdGhpcy5zY2hlbWEuaW5kZW50U2l6ZSB8fCAyLFxuICAgICAgbGluZU51bWJlcnM6IGZhbHNlXG4gICAgfSlcblxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgIGxldCBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICB0aGlzLmRvbU9uKHRoaXMuJHJlZnMuY29kZS5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpLCB7XG4gICAgICBmb2N1czogb25Gb2N1cyxcbiAgICAgIGJsdXI6IG9uQmx1clxuICAgIH0pXG5cbiAgICBjb25zdCBzZXRDb2RlID0gY29kZSA9PiB7XG4gICAgICBpZiAoY29kZSAhPT0gZmxhc2suY29kZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSB0cnVlXG4gICAgICAgIGZsYXNrLnVwZGF0ZUNvZGUoY29kZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICAgIG9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmbGFzay5vblVwZGF0ZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlVXBkYXRlKSB7XG4gICAgICAgIGlnbm9yZVVwZGF0ZSA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRWYWx1ZSh2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVdhdGNoKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldENvZGUodmFsdWUgfHwgJycpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHNldENvZGUodGhpcy52YWx1ZSB8fCAnJylcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKT8uZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk/LmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jb2RlIHtcbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvLyBGb3IgcHJvcGVyIHNpemluZyBvZiBjb250ZW50IGFsb25nIHdpdGggOnN0eWxlPVwic3R5bGVcIiBzZXR0aW5nIGFib3ZlLFxuICAvLyBmb3IgcHJvcGVyIGxpbmUtaGVpZ2h0IGNhbGN1bGF0aW9uLlxuICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcblxuICAuY29kZWZsYXNrIHtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIC8vIElnbm9yZSB0aGUgcGFyZW50IHBhZGRpbmcgZGVmaW5lZCBhYm92ZSB3aGljaCBpcyBvbmx5IG5lZWRlZCB0byBzZXRcbiAgICAvLyB0aGUgZGVzaXJlZCBoZWlnaHQgd2l0aCA6c3R5bGU9XCJzdHlsZVwiLlxuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICB9XG5cbiAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gIC5jb2RlZmxhc2tfX3ByZSB7XG4gICAgLy8gVXNlIHNhbWUgcGFkZGluZyBhcyAuZGl0by1jb2RlXG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gIH1cblxuICAuY29kZWZsYXNrX190ZXh0YXJlYSxcbiAgLmNvZGVmbGFza19fY29kZSxcbiAgLmNvZGVmbGFza19fbGluZXMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ubztcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZSk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcbiAgfVxuXG4gIC5jb2RlZmxhc2tfX2xpbmVzIHtcbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5UcmlnZ2VyLmRpdG8tY29sb3IoXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJmb2N1c1wiXG4pXG4gIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgIC5kaXRvLWlucHV0KDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiKVxuICAgICAgaW5wdXQoXG4gICAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHYtbW9kZWw9XCJoZXhWYWx1ZVwiXG4gICAgICAgIHR5cGU9XCJpbnB1dFwiXG4gICAgICAgIHNpemU9XCI4XCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgICAgdi1pZj1cInZhbHVlXCJcbiAgICAgIClcbiAgICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICApXG4gIHRlbXBsYXRlKCNwb3B1cClcbiAgICBTa2V0Y2hQaWNrZXIuZGl0by1jb2xvci1waWNrZXIoXG4gICAgICB2LW1vZGVsPVwiY29sb3JWYWx1ZVwiXG4gICAgICA6ZGlzYWJsZUFscGhhPVwiIWFscGhhXCJcbiAgICAgIDpkaXNhYmxlRmllbGRzPVwiIWlucHV0c1wiXG4gICAgICA6cHJlc2V0Q29sb3JzPVwicHJlc2V0c1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB0aW55Y29sb3IgZnJvbSAndGlueWNvbG9yMidcbmltcG9ydCB7IFNrZXRjaCBhcyBTa2V0Y2hQaWNrZXIgfSBmcm9tICdAbGs3Ny92dWUzLWNvbG9yJ1xuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgVHJpZ2dlciB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2xvcicsIHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBTa2V0Y2hQaWNrZXIgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IGZhbHNlLFxuICAgICAgY29udmVydGVkSGV4VmFsdWU6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb2xvclZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlIHx8IHt9XG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5jb2xvckZvcm1hdFxuICAgICAgICBjb25zdCBrZXkgPSAoXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gTk9URTogdnVlMy1jb2xvciBjYWxscyBpdCAnaGV4Jywgd2hpbGUgdGlueWNvbG9yIGNhbGxzIGl0ICdoZXg2J1xuICAgICAgICAgICAgaGV4OiB2YWx1ZT8uYSA8IDEgPyAnaGV4OCcgOiAnaGV4JyxcbiAgICAgICAgICAgIHJnYjogJ3JnYmEnXG4gICAgICAgICAgfVtmb3JtYXRdIHx8XG4gICAgICAgICAgZm9ybWF0XG4gICAgICAgIClcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVtrZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRpbnljb2xvcih2YWx1ZSkudG9TdHJpbmcoZm9ybWF0KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBoZXhWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gbnVsbFxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICF0aGlzLmZvY3VzZWQgfHxcbiAgICAgICAgICB0aGlzLiRyZWZzLmVsZW1lbnQuaGFzQXR0cmlidXRlKCdyZWFkb25seScpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGlueWNvbG9yKHRoaXMudmFsdWUpXG4gICAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gY29sb3JcbiAgICAgICAgICAgICAgLnRvU3RyaW5nKGNvbG9yLmdldEFscGhhKCkgPCAxID8gJ2hleDgnIDogJ2hleDYnKVxuICAgICAgICAgICAgICAuc2xpY2UoMSlcbiAgICAgICAgICAgICAgLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydGVkSGV4VmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gdmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVE9ETzogYGZvcm1hdGAgY2xhc2hlcyB3aXRoIFR5cGVNaXhpbi5mb3JtYXQoKWAsIHdoaWNoIHNoYWxsIGJlIHJlbmFtZWRcbiAgICAvLyBzb29uIHRvIGBmb3JtYXRWYWx1ZSgpYC4gUmVuYW1lIGBjb2xvckZvcm1hdGAgYmFjayB0byBgZm9ybWF0YCBhZnRlci5cbiAgICBjb2xvckZvcm1hdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Zvcm1hdCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdoZXgnXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dBbHBoYWA/XG4gICAgYWxwaGE6IGdldFNjaGVtYUFjY2Vzc29yKCdhbHBoYScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93SW5wdXRzYD9cbiAgICBpbnB1dHM6IGdldFNjaGVtYUFjY2Vzc29yKCdpbnB1dHMnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pLFxuXG4gICAgcHJlc2V0czogZ2V0U2NoZW1hQWNjZXNzb3IoJ3ByZXNldHMnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGRlZmF1bHQ6IFtcbiAgICAgICAgJyNmZmZmZmYnLFxuICAgICAgICAnI2MzYzNjMycsXG4gICAgICAgICcjN2Y3ZjdmJyxcbiAgICAgICAgJyMwMDAwMDAnLFxuICAgICAgICAnIzg4MDAxNScsXG4gICAgICAgICcjZWQxYzI0JyxcbiAgICAgICAgJyNmZjdmMjcnLFxuICAgICAgICAnI2ZmZjIwMCcsXG5cbiAgICAgICAgJyMyMmIxNGMnLFxuICAgICAgICAnIzAwYTJlOCcsXG4gICAgICAgICcjM2Y0OGNjJyxcbiAgICAgICAgJyNhMzQ5YTQnLFxuICAgICAgICAnI2I5N2E1NycsXG4gICAgICAgICcjZmZhZWM5JyxcbiAgICAgICAgJyNmZmM5MGUnLFxuICAgICAgICAnIzAwMDAwMDAwJ1xuICAgICAgXVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4kY29sb3Itc3dhdGNoLXdpZHRoOiAkcGF0dGVybi10cmFuc3BhcmVuY3ktc2l6ZTtcbiRjb2xvci1zd2F0Y2gtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtICRib3JkZXItd2lkdGg7XG5cbi5kaXRvLWNvbG9yIHtcbiAgLmRpdG8taW5wdXQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIGlucHV0IHtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgICAgcGFkZGluZy1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aDtcbiAgICB9XG4gIH1cblxuICAuZGl0by1idXR0b24tY2xlYXIge1xuICAgIG1hcmdpbi1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aDtcbiAgfVxuXG4gIC5kaXRvLWNvbG9yLXBpY2tlciB7XG4gICAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luO1xuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gIH1cblxuICAuZGl0by1jb2xvci1wcmV2aWV3IHtcbiAgICBiYWNrZ3JvdW5kOiAkcGF0dGVybi10cmFuc3BhcmVuY3k7XG4gICAgYm9yZGVyLWxlZnQ6ICRib3JkZXItc3R5bGU7XG5cbiAgICAmLFxuICAgIGRpdiB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB3aWR0aDogJGNvbG9yLXN3YXRjaC13aWR0aDtcbiAgICAgIHRvcDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRjb2xvci1zd2F0Y2gtcmFkaXVzO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRjb2xvci1zd2F0Y2gtcmFkaXVzO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5jb21wb25lbnQoXG4gIDppcz1cInNjaGVtYS5jb21wb25lbnRcIlxuICB2LWJpbmQ9XCIkcHJvcHNcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbi8vIFRoaXMgaXMgdGhlIGdlbmVyYWwgcHVycG9zZSAnY29tcG9uZW50JyB0eXBlLCB3aGljaCBjYW4gcmVzb2x2ZSB0byBhbnkgY3VzdG9tXG4vLyBjb21wb25lbnQgdGhyb3VnaCBgc2NoZW1hLmNvbXBvbmVudGAsIHNlZSBgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCgpYC4gVGhpc1xuLy8gY2FuIGJlIHVzZWQgdG8gbmVzdCBhcmJpdHJhcnkgdnVlIGNvbXBvbmVudHMgaW4gc2NoZW1hOlxuLy8ge1xuLy8gICB0eXBlOiAnY29tcG9uZW50Jyxcbi8vICAgY29tcG9uZW50OiBpbXBvcnQoJy4vY29tcG9uZW50Jylcbi8vIH1cblxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb21wb25lbnQnLCB7XG4gIC8vIE92ZXJyaWRlIHRoZSBzdGFuZGFyZCBgZGVmYXVsdFZhbHVlOiBudWxsYCB0byBub3Qgc2V0IGFueSBkYXRhIGZvciBjdXN0b21cbiAgLy8gY29tcG9uZW50cywgdW5sZXNzIHRoZXkgcHJvdmlkZSBhIGRlZmF1bHQgdmFsdWUuXG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiAhKCdkZWZhdWx0JyBpbiBzY2hlbWEpLFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoYXBpLCBzY2hlbWEpIHtcbiAgICBhd2FpdCByZXNvbHZlU2NoZW1hQ29tcG9uZW50KHNjaGVtYSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byB0cmlnZ2VyIGV2YWx1YXRpb24gb2YgYHZhbHVlYCB0aGF0IGRvc2Ugbm90XG4vLy0gaW52b2x2ZSBhY3R1YWxseSByZW5kZXJpbmcgaXQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCB2aXNpYmxlLlxuaW5wdXQuZGl0by10ZXh0LmRpdG8taW5wdXQoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDpuYW1lPVwibmFtZVwiXG4gIHR5cGU9XCJ0ZXh0XCJcbiAgOnZhbHVlPVwidmFsdWVcIlxuICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIDpyZWFkb25seT1cInRydWVcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RhdGFNaXhpbi5qcydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnY29tcHV0ZWQnLCAnZGF0YScsICdoaWRkZW4nXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIG1peGluczogW0RhdGFNaXhpbl0sXG5cbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgICBkZWZhdWx0VmlzaWJsZTogZmFsc2UsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgdmFsdWU6IHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIGNvbnN0IHsgc2NoZW1hIH0gPSB0aGlzXG4gICAgICAgICAgaWYgKHNjaGVtYS5kYXRhIHx8IHNjaGVtYS5kYXRhUGF0aCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCAnc2NoZW1hJylcbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgdGhpcy5kYXRhW3RoaXMubmFtZV0gPSB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLmdldC5jYWxsKHRoaXMpXG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLnNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1kYXRlXG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICA6Zm9ybWF0PVwiZm9ybWF0c1wiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIClcbiAgICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcFxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBEYXRlVGltZVBpY2tlciB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHsgaXNEYXRlLCBhc3NpZ25EZWVwbHkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWydkYXRlJywgJ2RhdGV0aW1lJywgJ3RpbWUnXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIGNvbXBvbmVudHM6IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSxcbiAgICAvLyBUT0RPOiBUaGlzIGlzIG9ubHkgaGVyZSBzbyB3ZSBnZXQgcGxhY2Vob2xkZXIgYWRkZWQuIENvbWUgdXAgd2l0aCBhXG4gICAgLy8gYmV0dGVyIHdheSB0byBzdXBwb3J0IGF0dHJpYnV0ZXMgcGVyIGNvbXBvbmVudCAoYSBsaXN0IG9mIGFjdHVhbGx5XG4gICAgLy8gc3VwcG9ydGVkIGF0dHJpYnV0ZXMpXG4gICAgbmF0aXZlRmllbGQ6IHRydWUsXG4gICAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGRhdGVWYWx1ZToge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IHZhbHVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIFRPRE86IFJlbmFtZSB0byBgZm9ybWF0YCwgb25jZSBgc2NoZW1hLmZvcm1hdCgpYCB3YXMgcmVtb3ZlZCB0b1xuICAgICAgLy8gYGZvcm1hdFZhbHVlKClgLlxuICAgICAgZm9ybWF0czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Zvcm1hdHMnLCB7XG4gICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgZ2V0KGZvcm1hdHMpIHtcbiAgICAgICAgICBjb25zdCB7IGRhdGUsIHRpbWUgfSA9IGFzc2lnbkRlZXBseSh7fSwgdGhpcy5hcGkuZm9ybWF0cywgZm9ybWF0cylcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0ZTogWydkYXRlJywgJ2RhdGV0aW1lJ10uaW5jbHVkZXModGhpcy50eXBlKSA/IGRhdGUgOiBudWxsLFxuICAgICAgICAgICAgdGltZTogWyd0aW1lJywgJ2RhdGV0aW1lJ10uaW5jbHVkZXModGhpcy50eXBlKSA/IHRpbWUgOiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICBnZXRDb21wb25lbnQodHlwZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGU6ICdkYXRlLXBpY2tlcicsXG4gICAgICAgICAgdGltZTogJ3RpbWUtcGlja2VyJyxcbiAgICAgICAgICBkYXRldGltZTogJ2RhdGUtdGltZS1waWNrZXInXG4gICAgICAgIH1bdHlwZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBpc0RhdGUodmFsdWUpID8gdmFsdWUudG9JU09TdHJpbmcoKSA6IHZhbHVlXG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UXVlcnkocXVlcnkpIHtcbiAgY29uc3QgZW50cmllcyA9IHF1ZXJ5XG4gICAgPyBpc0FycmF5KHF1ZXJ5KVxuICAgICAgPyBxdWVyeVxuICAgICAgOiBPYmplY3QuZW50cmllcyhxdWVyeSlcbiAgICA6IFtdXG4gIHJldHVybiAoXG4gICAgbmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAgIC8vIEV4cGFuZCBhcnJheSB2YWx1ZXMgaW50byBtdWx0aXBsZSBlbnRyaWVzIHVuZGVyIHRoZSBzYW1lIGtleSwgc29cbiAgICAgIC8vIGBmb3JtYXRRdWVyeSh7IGZvbzogWzEsIDJdLCBiYXI6IDMgfSlgID0+ICdmb289MSZmb289MiZiYXI9MycuXG4gICAgICBlbnRyaWVzLnJlZHVjZShcbiAgICAgICAgKGVudHJpZXMsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgdmFsIG9mIGFzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBlbnRyaWVzLnB1c2goW2tleSwgdmFsXSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICAgICAgfSxcbiAgICAgICAgW11cbiAgICAgIClcbiAgICApXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLy8gZGVjb2RlIGFsbCB0aGVzZSBlbmNvZGVkIGNoYXJhY3RlcnMgdG8gaGF2ZSB0aGUgc2FtZSBiZWhhdmlvciBhc1xuICAgICAgLy8gdnVlLXJvdXRlcidzIG93biBxdWVyeSBlbmNvZGluZy5cbiAgICAgIC5yZXBsYWNlQWxsKC8lKD86MjF8MjR8Mjh8Mjl8MkN8MkZ8M0F8M0J8M0R8M0Z8NDApL2csIGRlY29kZVVSSUNvbXBvbmVudClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVJvdXRlKHsgcGF0aCwgcXVlcnksIGhhc2ggfSkge1xuICAvLyBQcmVzZXJ2ZSBgaGlzdG9yeS5zdGF0ZWAsIHNlZTpcbiAgLy8gaHR0cHM6Ly9yb3V0ZXIudnVlanMub3JnL2d1aWRlL21pZ3JhdGlvbi8jdXNhZ2Utb2YtaGlzdG9yeS1zdGF0ZVxuICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShcbiAgICBoaXN0b3J5LnN0YXRlLFxuICAgIG51bGwsXG4gICAgYCR7XG4gICAgICBsb2NhdGlvbi5vcmlnaW5cbiAgICB9JHtcbiAgICAgIHBhdGggPz8gbG9jYXRpb24ucGF0aG5hbWVcbiAgICB9PyR7XG4gICAgICBxdWVyeSA/IGZvcm1hdFF1ZXJ5KHF1ZXJ5KSA6IGxvY2F0aW9uLnNlYXJjaC5zbGljZSgxKVxuICAgIH0ke1xuICAgICAgaGFzaCA/PyBsb2NhdGlvbi5oYXNoXG4gICAgfWBcbiAgKVxufVxuIiwiaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi9JdGVtTWl4aW4uanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IsIGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyByZXBsYWNlUm91dGUgfSBmcm9tICcuLi91dGlscy9yb3V0ZS5qcydcbmltcG9ydCB7XG4gIHByb2Nlc3NSb3V0ZVNjaGVtYSxcbiAgcHJvY2Vzc0Zvcm1zLFxuICBnZXROYW1lZFNjaGVtYXMsXG4gIGdldEJ1dHRvblNjaGVtYXMsXG4gIGhhc0Zvcm1TY2hlbWEsXG4gIGdldEZvcm1TY2hlbWFzLFxuICBnZXRWaWV3U2NoZW1hLFxuICBpc0NvbXBhY3QsXG4gIGlzSW5saW5lZCxcbiAgaXNPYmplY3RTb3VyY2UsXG4gIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNTdHJpbmcsXG4gIGlzQXJyYXksXG4gIGlzTnVtYmVyLFxuICBlcXVhbHMsXG4gIHBhcnNlRGF0YVBhdGgsXG4gIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgUmVzb3VyY2VNaXhpbiwgU2NoZW1hUGFyZW50TWl4aW5dLFxuXG4gIGRlZmF1bHRWYWx1ZShzY2hlbWEpIHtcbiAgICByZXR1cm4gaXNMaXN0U291cmNlKHNjaGVtYSkgPyBbXSA6IG51bGxcbiAgfSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyYXBwZWRQcmltaXRpdmVzOiBudWxsLFxuICAgICAgdW53cmFwcGluZ1ByaW1pdGl2ZXM6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgaXNPYmplY3RTb3VyY2UoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy50eXBlKVxuICAgIH0sXG5cbiAgICBpc0xpc3RTb3VyY2UoKSB7XG4gICAgICByZXR1cm4gaXNMaXN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmFsdWVcbiAgICB9LFxuXG4gICAgaXNSZWFkeSgpIHtcbiAgICAgIC8vIExpc3RzIHRoYXQgaGF2ZSBubyBkYXRhIGFuZCBubyBhc3NvY2lhdGVkIHJlc291cmNlIHNob3VsZCBzdGlsbCByZW5kZXIsXG4gICAgICAvLyBhcyB0aGV5IG1heSBiZSBnZXR0aW5nIHRoZWlyIGRhdGEgZWxzZXdoZXJlLCBlLmcuIGBjb21wdXRlKClgLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzRGF0YSB8fCAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNJblZpZXcoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZpZXdDb21wb25lbnRcbiAgICB9LFxuXG4gICAgd3JhcFByaW1pdGl2ZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEud3JhcFByaW1pdGl2ZXNcbiAgICB9LFxuXG4gICAgbGlzdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnZhbHVlXG4gICAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgICAgLy8gQ29udmVydCB0byBsaXN0IGFycmF5LlxuICAgICAgICAgIGRhdGEgPSBkYXRhICE9IG51bGwgPyBbZGF0YV0gOiBbXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIGRhdGEgZ2V0cyBpbmhlcml0ZWQgZnJvbSBwYXJlbnQsIHVud3JhcHBpbmcgaXMgbm90IGhhcHBlbmluZ1xuICAgICAgICAgIC8vIGF0IHRoZSByb290IGluIGBzZXREYXRhKClgLCBidXQgaGVyZSBpbnN0ZWFkLlxuICAgICAgICAgIGRhdGEgPSB0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpIHx8IGRhdGFcbiAgICAgICAgfVxuICAgICAgICBkYXRhIHx8PSBbXVxuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIGlmICh0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBkb25lIHVud3JhcHBpbmcgb25jZSBgbGlzdERhdGFgIGlzIHJlZXZhbHVhdGVkLCBzbyBzZXRcbiAgICAgICAgICAgIC8vIHRoaXMgdG8gYGZhbHNlYCBhZ2Fpbi4gU2VlIGB3cmFwcGVkUHJpbWl0aXZlc2Agd2F0Y2hlciBhYm92ZS5cbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgdGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcyA9IGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIENvbnZlcnQgZGF0YSB0byBhIGxpc3Qgb2Ygd3JhcHBlZCBwcmltaXRpdmVzLCBhbmQgcmV0dXJuIGl0LlxuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YS5tYXAodmFsdWUgPT4gKHtcbiAgICAgICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogdmFsdWVcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVkUHJpbWl0aXZlc1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICBpZiAodGhpcy53cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNPYmplY3RTb3VyY2VcbiAgICAgICAgICAgID8gZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBkYXRhWzBdXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgOiBkYXRhXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb2JqZWN0RGF0YToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICAvLyBBbHdheXMgZ28gdGhyb3VnaCBgbGlzdERhdGFgIGludGVybmFsbHksIHdoaWNoIGRvZXMgYWxsIHRoZVxuICAgICAgICAvLyBwcm9jZXNzaW5nIG9mIGB3cmFwUHJpbWl0aXZlc2AsIGV0Yy5cbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdERhdGFbMF0gfHwgbnVsbFxuICAgICAgfSxcblxuICAgICAgc2V0KGRhdGEpIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YSA9IGRhdGEgPyBbZGF0YV0gOiBbXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzb3VyY2VTY2hlbWEoKSB7XG4gICAgICAvLyBUaGUgc291cmNlU2NoZW1hIG9mIGEgbGlzdCBpcyB0aGUgbGlzdCdzIHNjaGVtYSBpdHNlbGYuXG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFcbiAgICB9LFxuXG4gICAgcGF0aCgpIHtcbiAgICAgIC8vIFRoaXMgaXMgdXNlZCBpbiBUeXBlTGlzdCBmb3IgRGl0b0Zvcm1DaG9vc2VyLlxuICAgICAgcmV0dXJuIHRoaXMucm91dGVDb21wb25lbnQuZ2V0Q2hpbGRQYXRoKHRoaXMuc2NoZW1hLnBhdGgpXG4gICAgfSxcblxuICAgIGRlZmF1bHRRdWVyeSgpIHtcbiAgICAgIGNvbnN0IHsgZGVmYXVsdE9yZGVyOiBvcmRlciB9ID0gdGhpc1xuICAgICAgcmV0dXJuIG9yZGVyID8geyBvcmRlciB9IDoge31cbiAgICB9LFxuXG4gICAgcXVlcnk6IGdldFN0b3JlQWNjZXNzb3IoJ3F1ZXJ5Jywge1xuICAgICAgZ2V0KHF1ZXJ5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4udGhpcy5kZWZhdWx0UXVlcnksXG4gICAgICAgICAgLi4ucXVlcnlcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgc2V0KHF1ZXJ5KSB7XG4gICAgICAgIC8vIEFsd2F5cyBrZWVwIHRoZSBkaXNwbGF5ZWQgcXVlcnkgcGFyYW1ldGVycyBpbiBzeW5jIHdpdGggdGhlIHN0b3JlZFxuICAgICAgICAvLyBvbmVzLiBVc2Ugc2NvcGUgYW5kIHBhZ2UgZnJvbSB0aGUgbGlzdCBzY2hlbWEgYXMgZGVmYXVsdHMsIGJ1dCBhbGxvd1xuICAgICAgICAvLyB0aGUgcm91dGUgcXVlcnkgcGFyYW1ldGVycyB0byBvdmVycmlkZSB0aGVtLlxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgc2NvcGUgPSB0aGlzLmRlZmF1bHRTY29wZT8ubmFtZSxcbiAgICAgICAgICBwYWdlID0gdGhpcy5zY2hlbWEucGFnZVxuICAgICAgICB9ID0gdGhpcy5xdWVyeVxuICAgICAgICAvLyBQcmVzZXJ2ZSAvIG1lcmdlIGN1cnJlbnRseSBzdG9yZWQgdmFsdWVzLlxuICAgICAgICBxdWVyeSA9IHtcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICAgIC4uLihzY29wZSAhPSBudWxsICYmIHsgc2NvcGUgfSksXG4gICAgICAgICAgLi4uKHBhZ2UgIT0gbnVsbCAmJiB7IHBhZ2UgfSksXG4gICAgICAgICAgLi4ucXVlcnlcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVxdWFscyhxdWVyeSwgdGhpcy4kcm91dGUucXVlcnkpKSB7XG4gICAgICAgICAgLy8gQ2hhbmdlIHRoZSByb3V0ZSBxdWVyeSBwYXJhbWV0ZXJzLCBidXQgZG9uJ3QgdHJpZ2dlciBhIHJvdXRlXG4gICAgICAgICAgLy8gY2hhbmdlLCBhcyB0aGF0IHdvdWxkIGNhdXNlIHRoZSBsaXN0IHRvIHJlbG9hZC5cbiAgICAgICAgICByZXBsYWNlUm91dGUoeyBxdWVyeSB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBxdWVyeSAvLyBMZXQgZ2V0U3RvcmVBY2Nlc3NvcigpIGRvIHRoZSBhY3R1YWwgc2V0dGluZ1xuICAgICAgfVxuICAgIH0pLFxuXG4gICAgdG90YWw6IGdldFN0b3JlQWNjZXNzb3IoJ3RvdGFsJyksXG5cbiAgICBjb2x1bW5zKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5jb2x1bW5zKVxuICAgIH0sXG5cbiAgICBzY29wZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnNjb3BlcylcbiAgICB9LFxuXG4gICAgZGVmYXVsdFNjb3BlKCkge1xuICAgICAgbGV0IGZpcnN0ID0gbnVsbFxuICAgICAgaWYgKHRoaXMuc2NvcGVzKSB7XG4gICAgICAgIGZvciAoY29uc3Qgc2NvcGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnNjb3BlcykpIHtcbiAgICAgICAgICBpZiAoc2NvcGUuZGVmYXVsdFNjb3BlKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NvcGVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgZmlyc3QgPSBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZpcnN0XG4gICAgfSxcblxuICAgIGRlZmF1bHRPcmRlcigpIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmNvbHVtbnMpKSB7XG4gICAgICAgICAgY29uc3QgeyBkZWZhdWx0U29ydCB9ID0gY29sdW1uXG4gICAgICAgICAgaWYgKGRlZmF1bHRTb3J0KSB7XG4gICAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBpc1N0cmluZyhkZWZhdWx0U29ydCkgPyBkZWZhdWx0U29ydCA6ICdhc2MnXG4gICAgICAgICAgICByZXR1cm4gYCR7Y29sdW1uLm5hbWV9ICR7ZGlyZWN0aW9ufWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIG5lc3RlZE1ldGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLm1ldGEsXG4gICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9ybXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KSlcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgbGlua2VkIHZpZXcgc2NoZW1hIGlmIHRoaXMgc291cmNlIGVkaXRzIGl0IGl0cyBpdGVtcyB0aHJvdWdoXG4gICAgLy8gYSBsaW5rZWQgdmlldy5cbiAgICB2aWV3KCkge1xuICAgICAgcmV0dXJuIGdldFZpZXdTY2hlbWEodGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dClcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZpZXdcbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKHRoaXMuc2NoZW1hLmJ1dHRvbnMpXG4gICAgfSxcblxuICAgIGlzQ29tcGFjdCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1zLmV2ZXJ5KGlzQ29tcGFjdClcbiAgICB9LFxuXG4gICAgaXNJbmxpbmVkKCkge1xuICAgICAgcmV0dXJuIGlzSW5saW5lZCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgcGFnaW5hdGU6IGdldFNjaGVtYUFjY2Vzc29yKCdwYWdpbmF0ZScsIHtcbiAgICAgIHR5cGU6IE51bWJlclxuICAgIH0pLFxuXG4gICAgcmVuZGVyOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVuZGVyJywge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSksXG5cbiAgICBjcmVhdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjcmVhdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY3JlYXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgICAgICA/IHRoaXMuaXNPYmplY3RTb3VyY2VcbiAgICAgICAgICAgID8gIXRoaXMudmFsdWVcbiAgICAgICAgICAgIDogdHJ1ZVxuICAgICAgICAgIDogZmFsc2VcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZWRpdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGVkaXRhYmxlICYmICF0aGlzLmlzSW5saW5lZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBkcmFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkcmFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZHJhZ2dhYmxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZSAmJiB0aGlzLmxpc3REYXRhLmxlbmd0aCA+IDEgJiYgZHJhZ2dhYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb2xsYXBzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGwsIC8vIHNvIHRoYXQgYD8/YCBiZWxvdyBjYW4gZG8gaXRzIHRoaW5nOlxuICAgICAgZ2V0KGNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW5saW5lZCAmJiAhIShjb2xsYXBzaWJsZSA/PyB0aGlzLmNvbGxhcHNlZCAhPT0gbnVsbClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZToge1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzMzOTMjaXNzdWVjb21tZW50LTExNTg0NzAxNDlcbiAgICAgIGZsdXNoOiAncG9zdCcsXG4gICAgICBoYW5kbGVyKHRvLCBmcm9tKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAgIGZyb20ucGF0aCA9PT0gdG8ucGF0aCAmJlxuICAgICAgICAgIGZyb20uaGFzaCA9PT0gdG8uaGFzaFxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBQYXRocyBhbmQgaGFzaGVzIHJlbWFpbiB0aGUgc2FtZSwgc28gb25seSBxdWVyaWVzIGhhdmUgY2hhbmdlZC5cbiAgICAgICAgICAvLyBVcGRhdGUgZmlsdGVyIGFuZCByZWxvYWQgZGF0YSB3aXRob3V0IGNsZWFyaW5nLlxuICAgICAgICAgIHRoaXMucXVlcnkgPSB0by5xdWVyeVxuICAgICAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgd3JhcHBlZFByaW1pdGl2ZXM6IHtcbiAgICAgIGRlZXA6IHRydWUsXG4gICAgICBoYW5kbGVyKHRvLCBmcm9tKSB7XG4gICAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMgfSA9IHRoaXNcbiAgICAgICAgLy8gU2tpcCB0aGUgaW5pdGlhbCBzZXR0aW5nIG9mIHdyYXBwZWRQcmltaXRpdmVzIGFycmF5XG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBmcm9tICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2hlbmV2ZXIgdGhlIHdyYXBwZWRQcmltaXRpdmVzIGNoYW5nZSwgbWFwIHRoZWlyIHZhbHVlcyBiYWNrIHRvXG4gICAgICAgICAgLy8gdGhlIGFycmF5IG9mIHByaW1pdGl2ZXMsIGluIGEgcHJpbWl0aXZlIHdheSA6KVxuICAgICAgICAgIC8vIEJ1dCBzZXQgYHVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZWAsIHNvIHRoZSBgbGlzdERhdGFgIGNvbXB1dGVkXG4gICAgICAgICAgLy8gcHJvcGVydHkga25vd3MgYWJvdXQgaXQsIHdoaWNoIHNldHMgaXQgdG8gYGZhbHNlYCBhZ2Fpbi5cbiAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZVxuICAgICAgICAgIHRoaXMudmFsdWUgPSB0by5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIHRoaXMucXVlcnkgPSB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnRvdGFsID0gMFxuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBXaGVuIG5ldyBkYXRhIGlzIGxvYWRlZCwgd2UgY2FuIHN0b3JlIGl0IHJpZ2h0IGJhY2sgaW4gdGhlIGRhdGEgb2YgdGhlXG4gICAgICAvLyB2aWV3IG9yIGZvcm0gdGhhdCBjcmVhdGVkIHRoaXMgbGlzdCBjb21wb25lbnQuXG4gICAgICAvLyBTdXBwb3J0IHR3byBmb3JtYXRzIGZvciBsaXN0IGRhdGE6XG4gICAgICAvLyAtIEFycmF5OiBgWy4uLl1gXG4gICAgICAvLyAtIE9iamVjdDogYHsgcmVzdWx0czogWy4uLl0sIHRvdGFsIH1gLCBzZWUgYHVud3JhcExpc3REYXRhKClgXG4gICAgICBpZiAoXG4gICAgICAgICFkYXRhIHx8XG4gICAgICAgIHRoaXMuaXNMaXN0U291cmNlICYmIGlzQXJyYXkoZGF0YSkgfHxcbiAgICAgICAgdGhpcy5pc09iamVjdFNvdXJjZSAmJiBpc09iamVjdChkYXRhKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkpIHtcbiAgICAgICAgLy8gVGhlIGZvcm1hdCBkaWRuJ3QgbWF0Y2gsIHNlZSBpZiB3ZSByZWNlaXZlZCBhIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIG9iamVjdCwgaW4gd2hpY2ggY2FzZSBgdGhpcy52YWx1ZWAgd2FzIGFscmVhZHkgc2V0IGJ5XG4gICAgICAgIC8vIGB1bndyYXBMaXN0RGF0YSgpYCBhbmQgd2UncmUgZG9uZSBub3cuXG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRhdGEpICYmIHRoaXMuaXNJblZpZXcpIHtcbiAgICAgICAgLy8gVGhlIGNvbnRyb2xsZXIgaXMgc2VuZGluZyBkYXRhIGZvciBhIGZ1bGwgbXVsdGktY29tcG9uZW50IHZpZXcsXG4gICAgICAgIC8vIGluY2x1ZGluZyB0aGUgbmVzdGVkIGxpc3QgZGF0YS5cbiAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldERhdGEoZGF0YSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdW53cmFwTGlzdERhdGEoZGF0YSkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJlxuICAgICAgICBpc09iamVjdChkYXRhKSAmJlxuICAgICAgICBpc051bWJlcihkYXRhLnRvdGFsKSAmJlxuICAgICAgICBpc0FycmF5KGRhdGEucmVzdWx0cylcbiAgICAgICkge1xuICAgICAgICAvLyBJZiBAZGl0b2pzL3NlcnZlciBzZW5kcyBkYXRhIGluIHRoZSBmb3JtIG9mIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIHJlcGxhY2UgdGhlIHZhbHVlIHdpdGggcmVzdWx0LCBidXQgcmVtZW1iZXIgdGhlIHRvdGFsIGluIHRoZSBzdG9yZS5cbiAgICAgICAgdGhpcy50b3RhbCA9IGRhdGEudG90YWxcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGEucmVzdWx0c1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKHNjaGVtYSwgdHlwZSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpXG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBpdGVtXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxpc3REYXRhLnB1c2goaXRlbSlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMub3BlblNjaGVtYUNvbXBvbmVudCgtMSkpXG4gICAgICB9XG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIHJldHVybiBpdGVtXG4gICAgfSxcblxuICAgIHJlbW92ZUl0ZW0oaXRlbSwgaW5kZXgpIHtcbiAgICAgIGxldCByZW1vdmVkID0gZmFsc2VcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgIHRoaXMub2JqZWN0RGF0YSA9IG51bGxcbiAgICAgICAgcmVtb3ZlZCA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBsaXN0RGF0YS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgcmVtb3ZlZCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJlbW92ZWQpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVJdGVtU3RvcmUodGhpcy5zY2hlbWEsIGl0ZW0sIGluZGV4KVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZXRlSXRlbShpdGVtLCBpbmRleCkge1xuICAgICAgY29uc3QgbGFiZWwgPSAoXG4gICAgICAgIGl0ZW0gJiZcbiAgICAgICAgdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zY2hlbWEsIGl0ZW0sIHtcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBleHRlbmRlZDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgKVxuXG4gICAgICBjb25zdCBub3RpZnkgPSAoKSA9PlxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogdGhpcy5pc1RyYW5zaWVudCA/ICdpbmZvJyA6ICdzdWNjZXNzJyxcbiAgICAgICAgICB0aXRsZTogJ1N1Y2Nlc3NmdWxseSBSZW1vdmVkJyxcbiAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICBgJHtsYWJlbH0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gLFxuICAgICAgICAgICAgdGhpcy50cmFuc2llbnROb3RlXG4gICAgICAgICAgXVxuICAgICAgICB9KVxuXG4gICAgICBpZiAoXG4gICAgICAgIGl0ZW0gJiZcbiAgICAgICAgd2luZG93LmNvbmZpcm0oXG4gICAgICAgICAgYERvIHlvdSByZWFsbHkgd2FudCB0byAke3RoaXMudmVyYnMuZGVsZXRlfSAke2xhYmVsfT9gXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtLCBpbmRleClcbiAgICAgICAgICBub3RpZnkoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGl0ZW1JZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IGdldE1lbWJlclJlc291cmNlKGl0ZW1JZCwgdGhpcy5yZXNvdXJjZSlcbiAgICAgICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2RlbGV0ZScsIHJlc291cmNlIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0sIGluZGV4KVxuICAgICAgICAgICAgICAgIG5vdGlmeSgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5yZWxvYWREYXRhKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFNjaGVtYUNvbXBvbmVudChpbmRleCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IGxlbmd0aCB9ID0gc2NoZW1hQ29tcG9uZW50c1xuICAgICAgcmV0dXJuIHNjaGVtYUNvbXBvbmVudHNbKChpbmRleCAlIGxlbmd0aCkgKyBsZW5ndGgpICUgbGVuZ3RoXVxuICAgIH0sXG5cbiAgICBvcGVuU2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCBzY2hlbWFDb21wb25lbnQgPSB0aGlzLmdldFNjaGVtYUNvbXBvbmVudChpbmRleClcbiAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGVUb0NvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSkge1xuICAgICAgaWYgKHRoaXMuY29sbGFwc2libGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBkYXRhUGF0aC5zdGFydHNXaXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICAgICAgPyB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgICAgPyBwYXJzZURhdGFQYXRoKGRhdGFQYXRoLnNsaWNlKHRoaXMuZGF0YVBhdGgubGVuZ3RoICsgMSkpWzBdID8/IG51bGxcbiAgICAgICAgICAgIDogMFxuICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoaW5kZXggIT09IG51bGwgJiYgaXNOdW1iZXIoK2luZGV4KSkge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KCtpbmRleClcbiAgICAgICAgICBpZiAoc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb25zdCB7IG9wZW5lZCB9ID0gc2NoZW1hQ29tcG9uZW50XG4gICAgICAgICAgICBpZiAoIW9wZW5lZCkge1xuICAgICAgICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLiRuZXh0VGljaygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gc2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudHMubGVuZ3RoID4gMCAmJiAob25Db21wbGV0ZT8uKGNvbXBvbmVudHMpID8/IHRydWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gb3BlbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvUm91dGVDb21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpXG4gICAgfSxcblxuICAgIG5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbE9uQ29tcGxldGUgPSAoKSA9PiB7XG4gICAgICAgICAgLy8gUmV0cmlldmUgdGhlIGxhc3Qgcm91dGUgY29tcG9uZW50LCB3aGljaCB3aWxsIGJlIHRoZSBjb21wb25lbnQgdGhhdFxuICAgICAgICAgIC8vIHdlIGp1c3QgbmF2aWdhdGVkIHRvLCBhbmQgcGFzcyBpdCBvbiB0byBgb25Db21wbGV0ZSgpYFxuICAgICAgICAgIGNvbnN0IHsgcm91dGVDb21wb25lbnRzIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgICAgICAgY29uc3Qgcm91dGVDb21wb25lbnQgPSByb3V0ZUNvbXBvbmVudHNbcm91dGVDb21wb25lbnRzLmxlbmd0aCAtIDFdXG4gICAgICAgICAgcmVzb2x2ZShvbkNvbXBsZXRlPy4oW3JvdXRlQ29tcG9uZW50XSkgPz8gdHJ1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGFQYXRoUGFydHMgPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSByb3V0ZSB0aGF0IGNhbiBzZXJ2ZSBwYXJ0IG9mIHRoZSBnaXZlbiBkYXRhUGF0aCxcbiAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgd2hpbGUgKGRhdGFQYXRoUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLnJvdXRlQ29tcG9uZW50LmdldENoaWxkUGF0aChcbiAgICAgICAgICAgIHRoaXMuYXBpLm5vcm1hbGl6ZVBhdGgobm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGhQYXJ0cykpXG4gICAgICAgICAgKVxuICAgICAgICAgIC8vIFNlZSBpZiB0aGVyZSBhY3R1YWxseSBpcyBhIHJvdXRlIGZvciB0aGlzIHN1Yi1jb21wb25lbnQ6XG4gICAgICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZXIucmVzb2x2ZShwYXRoKVxuICAgICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCAmJiBtYXRjaGVkWzBdLm5hbWUgIT09ICdjYXRjaC1hbGwnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4kcm91dGUucGF0aCA9PT0gcGF0aCkge1xuICAgICAgICAgICAgICAvLyBXZSdyZSBhbHJlYWR5IHRoZXJlLCBzbyBqdXN0IGNhbGwgYG9uQ29tcGxldGUoKWA6XG4gICAgICAgICAgICAgIGNhbGxPbkNvbXBsZXRlKClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBjb21wb25lbnQncyBwYXRoLCB0aGVuIGNhbGwgYG9uQ29tcGxldGUoKWBfOlxuICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXJcbiAgICAgICAgICAgICAgICAucHVzaCh7IHBhdGggfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2gocmVqZWN0KVxuICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBsYXN0IHJvdXRlIGNvbXBvbmVudCB0byBiZSBtb3VudGVkIGluIHRoZSBuZXh0XG4gICAgICAgICAgICAgICAgLy8gdGljayBiZWZvcmUgY2FsbGluZyBgb25Db21wbGV0ZSgpYFxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKGNhbGxPbkNvbXBsZXRlKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICB9KVxuICAgIH1cbiAgfSwgLy8gZW5kIG9mIGBtZXRob2RzYFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLFxuICAgIHNjaGVtYSxcbiAgICBuYW1lLFxuICAgIHJvdXRlcyxcbiAgICBsZXZlbCxcbiAgICBuZXN0ZWQgPSBmYWxzZSxcbiAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKVxuICAgIGNvbnN0IGlubGluZWQgPSBpc0lubGluZWQoc2NoZW1hKVxuICAgIGlmIChpbmxpbmVkICYmIHNjaGVtYS5yZXNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTmVzdGVkICR7XG4gICAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICAgID8gJ2xpc3RzJ1xuICAgICAgICAgICAgOiB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICAgID8gJ29iamVjdHMnXG4gICAgICAgICAgICAgIDogJ3NjaGVtYSdcbiAgICAgICAgfSBjYW5ub3QgbG9hZCBkYXRhIGZyb20gdGhlaXIgb3duIHJlc291cmNlc2BcbiAgICAgIClcbiAgICB9XG4gICAgLy8gVXNlIGRpZmZlcmVudGx5IG5hbWVkIHVybCBwYXJhbWV0ZXJzIG9uIGVhY2ggbmVzdGVkIGxldmVsIGZvciBpZCBhc1xuICAgIC8vIG90aGVyd2lzZSB0aGV5IHdvdWxkIGNsYXNoIGFuZCBvdmVycmlkZSBlYWNoIG90aGVyIGluc2lkZSAkcm91dGUucGFyYW1zXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgIGNvbnN0IHBhcmFtID0gYGlkJHtsZXZlbCArIDF9YFxuICAgIGNvbnN0IG1ldGEgPSB7XG4gICAgICBhcGksXG4gICAgICBzY2hlbWFcbiAgICB9XG4gICAgY29uc3QgZm9ybU1ldGEgPSB7XG4gICAgICAuLi5tZXRhLFxuICAgICAgLy8gV2hlbiBjaGlsZHJlbiBhcmUgZmxhdHRlbmVkIChlLmcuIHRyZWUtbGlzdHMpLCBpbmNsdWRlIHRoZSBgZmxhdHRlbmBcbiAgICAgIC8vIHNldHRpbmcgYWxzbywgZm9yIGZsYXR0ZW5pbmcgYmVsb3cuXG4gICAgICBmbGF0dGVuLFxuICAgICAgbmVzdGVkLFxuICAgICAgcGFyYW1cbiAgICB9XG4gICAgY29uc3QgY2hpbGRSb3V0ZXMgPSBhd2FpdCBwcm9jZXNzRm9ybXMoYXBpLCBzY2hlbWEsIGxldmVsKVxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICBhd2FpdCBwcm9jZXNzKGNoaWxkUm91dGVzLCBsZXZlbCArIDEpXG4gICAgfVxuICAgIC8vIElubGluZWQgZm9ybXMgZG9uJ3QgbmVlZCB0byBhY3R1YWxseSBhZGQgcm91dGVzLlxuICAgIGlmIChoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgIWlubGluZWQpIHtcbiAgICAgIC8vIExpc3RzIGluIHNpbmdsZS1jb21wb25lbnQtdmlld3MgKGxldmVsID09PSAwKSB1c2UgdGhlaXIgdmlldydzIHBhdGgsXG4gICAgICAvLyB3aGlsZSBhbGwgb3RoZXJzIG5lZWQgdGhlaXIgcGF0aCBwcmVmaXhlZCB3aXRoIHRoZSBwYXJlbnQncyBwYXRoOlxuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGxldmVsID09PSAwID8gJycgOiBzY2hlbWEucGF0aFxuICAgICAgY29uc3QgZm9ybVJvdXRlID0ge1xuICAgICAgICBwYXRoOiBnZXRQYXRoV2l0aFBhcmFtKFxuICAgICAgICAgIHNvdXJjZVBhdGgsXG4gICAgICAgICAgLy8gT2JqZWN0IHNvdXJjZXMgZG9uJ3QgbmVlZCBpZCBwYXJhbXMgaW4gdGhlaXIgZm9ybSBwYXRocywgYXMgdGhleVxuICAgICAgICAgIC8vIGRpcmVjdGx5IGVkaXQgb25lIG9iamVjdC5cbiAgICAgICAgICBpc0xpc3RTb3VyY2Uoc2NoZW1hKSA/IHBhcmFtIDogbnVsbFxuICAgICAgICApLFxuICAgICAgICBjb21wb25lbnQ6IERpdG9Db21wb25lbnQuY29tcG9uZW50KFxuICAgICAgICAgIG5lc3RlZCA/ICdEaXRvRm9ybU5lc3RlZCcgOiAnRGl0b0Zvcm0nXG4gICAgICAgICksXG4gICAgICAgIG1ldGE6IGZvcm1NZXRhXG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3RTb3VyY2Uoc2NoZW1hKSkge1xuICAgICAgICAvLyBBbHNvIGFkZCBhIHBhcmFtIHJvdXRlLCBzaW1wbHkgdG8gaGFuZGxlICcvY3JlYXRlJyBsaW5rcyB0aGUgc2FtZVxuICAgICAgICAvLyB3YXkgdGhhdCBsaXN0cyBkbywgd2hlcmUgaXQgb3ZlcmxhcHMgd2l0aCA6aWQgZm9yIGl0ZW0gaWRzLlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgLi4uZm9ybVJvdXRlLFxuICAgICAgICAgIHBhdGg6IGdldFBhdGhXaXRoUGFyYW0oc291cmNlUGF0aCwgcGFyYW0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc291cmNlUGF0aCkge1xuICAgICAgICAvLyBKdXN0IHJlZGlyZWN0IGJhY2sgdG8gdGhlIHBhcmVudCB3aGVuIGEgbmVzdGVkIHNvdXJjZSByb3V0ZSBpcyBoaXQuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICBwYXRoOiBzb3VyY2VQYXRoLFxuICAgICAgICAgIHJlZGlyZWN0OiAnLicsXG4gICAgICAgICAgbWV0YVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgLy8gUGFydGl0aW9uIGNoaWxkUm91dGVzIGludG8gdGhvc2UgdGhhdCBuZWVkIGZsYXR0ZW5pbmcgKGUuZy4gdHJlZS1saXN0cylcbiAgICAgIC8vIGFuZCB0aG9zZSB0aGF0IGRvbid0LCBhbmQgcHJvY2VzcyBlYWNoIGdyb3VwIHNlcGFyYXRlbHkgYWZ0ZXIuXG4gICAgICBjb25zdCBbZmxhdFJvdXRlcywgc3ViUm91dGVzXSA9IGNoaWxkUm91dGVzLnJlZHVjZShcbiAgICAgICAgKHJlcywgcm91dGUpID0+IHtcbiAgICAgICAgICByZXNbcm91dGUubWV0YS5mbGF0dGVuID8gMCA6IDFdLnB1c2gocm91dGUpXG4gICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICB9LFxuICAgICAgICBbW10sIFtdXVxuICAgICAgKVxuICAgICAgaWYgKHN1YlJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9ybVJvdXRlLmNoaWxkcmVuID0gc3ViUm91dGVzXG4gICAgICB9XG4gICAgICByb3V0ZXMucHVzaChmb3JtUm91dGUpXG4gICAgICAvLyBBZGQgdGhlIHByZWZpeGVkIGZvcm1Sb3V0ZXMgd2l0aCB0aGVpciBjaGlsZHJlbiBmb3IgbmVzdGVkIGxpc3RzLlxuICAgICAgaWYgKGZsYXRSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGRSb3V0ZSBvZiBmbGF0Um91dGVzKSB7XG4gICAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgICAgLi4uKGNoaWxkUm91dGUucmVkaXJlY3QgPyBjaGlsZFJvdXRlIDogZm9ybVJvdXRlKSxcbiAgICAgICAgICAgIHBhdGg6IGAke2Zvcm1Sb3V0ZS5wYXRofS8ke2NoaWxkUm91dGUucGF0aH1gLFxuICAgICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgICAuLi5jaGlsZFJvdXRlLm1ldGEsXG4gICAgICAgICAgICAgIGZsYXR0ZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpIHtcbiAgICBncmFwaC5hZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSlcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQYXRoV2l0aFBhcmFtKHBhdGgsIHBhcmFtKSB7XG4gIHJldHVybiBwYXJhbVxuICAgID8gcGF0aFxuICAgICAgPyBgJHtwYXRofS86JHtwYXJhbX1gXG4gICAgICA6IGA6JHtwYXJhbX1gXG4gICAgOiBwYXRoXG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBnZXROYW1lZFNjaGVtYXMsIHByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyB9IGZyb20gJy4vc2NoZW1hJ1xuXG5leHBvcnQgY29uc3QgZmlsdGVyQ29tcG9uZW50cyA9IHtcbiAgJ3RleHQnKGZpbHRlcikge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnY29udGFpbnMnLFxuICAgICAgICB2YWx1ZTogJ2NvbnRhaW5zJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlcXVhbHMnLFxuICAgICAgICB2YWx1ZTogJ2VxdWFscydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnc3RhcnRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ3N0YXJ0cy13aXRoJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlbmRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ2VuZHMtd2l0aCdcbiAgICAgIH1cbiAgICBdXG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3JzXG4gICAgICAgID8ge1xuICAgICAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICB3aWR0aDogJzIvNScsXG4gICAgICAgICAgICBvcHRpb25zOiBpc0FycmF5KGZpbHRlci5vcGVyYXRvcnMpXG4gICAgICAgICAgICAgID8gb3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICBvcHRpb24gPT4gZmlsdGVyLm9wZXJhdG9ycy5pbmNsdWRlcyhvcHRpb24udmFsdWUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IG9wdGlvbnMsXG4gICAgICAgICAgICBjbGVhcmFibGU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRleHQ6IHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB3aWR0aDogZmlsdGVyLm9wZXJhdG9ycyA/ICczLzUnIDogJ2ZpbGwnLFxuICAgICAgICBjbGVhcmFibGU6IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgJ2RhdGUtcmFuZ2UnKCkge1xuICAgIGNvbnN0IGRhdGV0aW1lID0ge1xuICAgICAgdHlwZTogJ2RhdGV0aW1lJyxcbiAgICAgIHdpZHRoOiAnMS8yJyxcbiAgICAgIGZvcm1hdHM6IHtcbiAgICAgICAgLy8gVXNlIHNob3J0ZXIgZGF0ZSBmb3JtYXQgaW4gZGF0ZS1yYW5nZSBmaWx0ZXJzOlxuICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgICAgICB5ZWFyOiAnbnVtZXJpYydcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNsZWFyYWJsZTogdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZnJvbTogZGF0ZXRpbWUsXG4gICAgICB0bzogZGF0ZXRpbWVcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZpbHRlcnNQYW5lbChhcGksIGZpbHRlcnMsIGRhdGFQYXRoLCBxdWVyeSkge1xuICBjb25zdCB7IHN0aWNreSwgLi4uZmlsdGVyU2NoZW1hcyB9ID0gZmlsdGVyc1xuICBjb25zdCBwYW5lbCA9IHtcbiAgICB0eXBlOiAncGFuZWwnLFxuICAgIGxhYmVsOiAnRmlsdGVycycsXG4gICAgbmFtZTogJyRmaWx0ZXJzJyxcbiAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBzdGlja3ksXG5cbiAgICAvLyBOT1RFOiBPbiBwYW5lbHMsIHRoZSBkYXRhKCkgY2FsbGJhY2sgZG9lcyBzb21ldGhpbmcgZWxzZSB0aGFuIG9uIG5vcm1hbFxuICAgIC8vIHNjaGVtYTogSXQgcHJvZHVjZXMgdGhlIGBkYXRhYCBwcm9wZXJ0eSB0byBiZSBwYXNzZWQgdG8gdGhlIHBhbmVsJ3NcbiAgICAvLyBzY2hlbWEsIG5vdCB0aGUgZGF0YSB0byBiZSB1c2VkIGZvciB0aGUgcGFuZWwgY29tcG9uZW50IGRpcmVjdGx5LlxuICAgIGRhdGEoKSB7XG4gICAgICByZXR1cm4gcGFyc2VGaWx0ZXJzRGF0YShcbiAgICAgICAgcGFuZWwsXG4gICAgICAgIHF1ZXJ5LnZhbHVlXG4gICAgICApXG4gICAgfSxcblxuICAgIGNvbXBvbmVudHM6IGNyZWF0ZUZpbHRlcnNDb21wb25lbnRzKGZpbHRlclNjaGVtYXMpLFxuICAgIGJ1dHRvbnM6IGNyZWF0ZUZpbHRlcnNCdXR0b25zKGZhbHNlKSxcbiAgICBwYW5lbEJ1dHRvbnM6IGNyZWF0ZUZpbHRlcnNCdXR0b25zKHRydWUpLFxuXG4gICAgZXZlbnRzOiB7XG4gICAgICBjaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGZpbHRlcnMoKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXRGaWx0ZXJzRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy5kYXRhKVxuICAgICAgfSxcblxuICAgICAgaGFzRmlsdGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVycy5sZW5ndGggPiAwXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGFwcGx5RmlsdGVycygpIHtcbiAgICAgICAgcXVlcnkudmFsdWUgPSB7XG4gICAgICAgICAgLi4ucXVlcnkudmFsdWUsXG4gICAgICAgICAgZmlsdGVyOiB0aGlzLmZpbHRlcnMsXG4gICAgICAgICAgLy8gQ2xlYXIgcGFnaW5hdGlvbiB3aGVuIGFwcGx5aW5nIG9yIGNsZWFyaW5nIGZpbHRlcnM6XG4gICAgICAgICAgcGFnZTogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGNsZWFyRmlsdGVycygpIHtcbiAgICAgICAgdGhpcy5yZXNldERhdGEoKVxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyhhcGksIHBhbmVsKVxuICByZXR1cm4gcGFuZWxcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmlsdGVyc0J1dHRvbnMoc21hbGwpIHtcbiAgcmV0dXJuIHtcbiAgICBjbGVhcjoge1xuICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICB0ZXh0OiBzbWFsbCA/IG51bGwgOiAnQ2xlYXInLFxuICAgICAgZGlzYWJsZWQ6ICh7IHNjaGVtYUNvbXBvbmVudCB9KSA9PiAhc2NoZW1hQ29tcG9uZW50Lmhhc0ZpbHRlcnMsXG4gICAgICBldmVudHM6IHtcbiAgICAgICAgY2xpY2soeyBzY2hlbWFDb21wb25lbnQgfSkge1xuICAgICAgICAgIC8vIFNpbmNlIHBhbmVsIGJ1dHRvbnMgYXJlIG91dHNpZGUgb2YgdGhlIHNjaGVtYSwgd2UgbmVlZCB0byB1c2UgdGhlXG4gICAgICAgICAgLy8gc2NoZW1hIGNvbXBvbmVudCByZWNlaXZlZCBmcm9tIHRoZSBpbml0aWFsaXplIGV2ZW50IGJlbG93OlxuICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5jbGVhckZpbHRlcnMoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHN1Ym1pdDoge1xuICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICB0ZXh0OiBzbWFsbCA/IG51bGwgOiAnRmlsdGVyJyxcbiAgICAgIHZpc2libGU6ICFzbWFsbCxcbiAgICAgIGV2ZW50czoge1xuICAgICAgICBjbGljayh7IHNjaGVtYUNvbXBvbmVudCB9KSB7XG4gICAgICAgICAgc2NoZW1hQ29tcG9uZW50LmFwcGx5RmlsdGVycygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGF0YU5hbWUoZmlsdGVyTmFtZSkge1xuICAvLyBQcmVmaXggZmlsdGVyIGRhdGEga2V5cyB3aXRoICckJyB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBvdGhlciBkYXRhIGtleXM6XG4gIHJldHVybiBgJCR7ZmlsdGVyTmFtZX1gXG59XG5cbmZ1bmN0aW9uIGdldEZpbHRlck5hbWUoZGF0YU5hbWUpIHtcbiAgcmV0dXJuIGRhdGFOYW1lLnN0YXJ0c1dpdGgoJyQnKSA/IGRhdGFOYW1lLnNsaWNlKDEpIDogbnVsbFxufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWx0ZXJzQ29tcG9uZW50cyhmaWx0ZXJzKSB7XG4gIGNvbnN0IGNvbXBzID0ge31cbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgT2JqZWN0LnZhbHVlcyhnZXROYW1lZFNjaGVtYXMoZmlsdGVycykgfHwge30pKSB7XG4gICAgLy8gU3VwcG9ydCBib3RoIGN1c3RvbSBmb3JtcyBhbmQgZGVmYXVsdCBmaWx0ZXIgY29tcG9uZW50cywgdGhyb3VnaCB0aGVcbiAgICAvLyBgZmlsdGVyQ29tcG9uZW50c2AgcmVnaXN0cnkuIEV2ZW4gZm9yIGRlZmF1bHQgZmlsdGVycywgc3RpbGwgdXNlIHRoZVxuICAgIC8vIHByb3BlcnRpZXMgaW4gYGZpbHRlcmAgYXMgdGhlIGJhc2UgZm9yIGBmb3JtYCwgc28gdGhpbmdzIGxpa2UgYGxhYmVsYFxuICAgIC8vIGNhbiBiZSBjaGFuZ2VkIG9uIHRoZSByZXN1bHRpbmcgZm9ybS5cbiAgICBjb25zdCB7IGZpbHRlcjogdHlwZSwgd2lkdGgsIC4uLmZvcm0gfSA9IGZpbHRlclxuICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0eXBlXG4gICAgICA/IGZpbHRlckNvbXBvbmVudHNbdHlwZV0/LihmaWx0ZXIpXG4gICAgICA6IGZpbHRlci5jb21wb25lbnRzXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvcm0udHlwZSA9ICdmb3JtJ1xuICAgICAgZm9ybS5jb21wb25lbnRzID0ge31cbiAgICAgIC8vIENvbnZlcnQgbGFiZWxzIHRvIHBsYWNlaG9sZGVyczpcbiAgICAgIGZvciAoY29uc3QgW2tleSwgY29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgY29uc3QgbGFiZWwgPSBjb21wb25lbnQubGFiZWwgfHwgbGFiZWxpemUoY29tcG9uZW50Lm5hbWUgfHwga2V5KVxuICAgICAgICAgIGZvcm0uY29tcG9uZW50c1trZXldID0ge1xuICAgICAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICAgICAgbGFiZWw6IGZhbHNlLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGxhYmVsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb21wc1tnZXREYXRhTmFtZShmaWx0ZXIubmFtZSldID0ge1xuICAgICAgICBsYWJlbDogZm9ybS5sYWJlbCA/PyBsYWJlbGl6ZShmaWx0ZXIubmFtZSksXG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gKHt9KSxcbiAgICAgICAgZm9ybSxcbiAgICAgICAgaW5saW5lZDogdHJ1ZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGZpbHRlciAnJHtmaWx0ZXIubmFtZX0nOiBVbmtub3duIGZpbHRlciB0eXBlICcke3R5cGV9Jy5gXG4gICAgICApXG4gICAgfVxuICB9XG4gIHJldHVybiBjb21wc1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgZGF0YU5hbWUpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gc2NoZW1hLmNvbXBvbmVudHNbZGF0YU5hbWVdXG4gIHJldHVybiBjb21wb25lbnQ/LmZvcm0/LmNvbXBvbmVudHNcbn1cblxuZnVuY3Rpb24gZm9ybWF0RmlsdGVyc0RhdGEoc2NoZW1hLCBkYXRhKSB7XG4gIGNvbnN0IGZpbHRlcnMgPSBbXVxuICBmb3IgKGNvbnN0IGRhdGFOYW1lIGluIGRhdGEpIHtcbiAgICBjb25zdCBlbnRyeSA9IGRhdGFbZGF0YU5hbWVdXG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICAvLyBNYXAgY29tcG9uZW50cyBzZXF1ZW5jZSB0byBhcmd1bWVudHM6XG4gICAgICBjb25zdCBhcmdzID0gT2JqZWN0LmtleXMoXG4gICAgICAgIGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBkYXRhTmFtZSlcbiAgICAgICkubWFwKFxuICAgICAgICBrZXkgPT4gZW50cnlba2V5XSA/PyBudWxsXG4gICAgICApXG4gICAgICAvLyBPbmx5IGFwcGx5IGZpbHRlciBpZiB0aGVyZSBhcmUgc29tZSBhcmd1bWVudHMgdGhhdCBhcmVuJ3QgbnVsbDpcbiAgICAgIGlmIChhcmdzLnNvbWUodmFsdWUgPT4gdmFsdWUgIT09IG51bGwpKSB7XG4gICAgICAgIGZpbHRlcnMucHVzaChcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIGdldEZpbHRlck5hbWUoZGF0YU5hbWUpXG4gICAgICAgICAgfToke1xuICAgICAgICAgICAgYXJncy5tYXAoSlNPTi5zdHJpbmdpZnkpLmpvaW4oJywnKVxuICAgICAgICAgIH1gXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbHRlcnNcbn1cblxuZnVuY3Rpb24gcGFyc2VGaWx0ZXJzRGF0YShzY2hlbWEsIHF1ZXJ5KSB7XG4gIGNvbnN0IGZpbHRlcnMgPSB7fVxuICAvLyBTYW1lIGFzIEBkaXRvanMvc2VydmVyJ3MgUXVlcnlQYXJhbWV0ZXJzLmZpbHRlcjogVHJhbnNsYXRlIHRoZSBzdHJpbmcgZGF0YVxuICAvLyBmcm9tICRyb3V0ZS5xdWVyeSBiYWNrIHRvIHBhcmFtIGxpc3RzIHBlciBmaWx0ZXI6XG4gIGlmIChxdWVyeSkge1xuICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGFzQXJyYXkocXVlcnkuZmlsdGVyKSkge1xuICAgICAgY29uc3QgWywgZmlsdGVyTmFtZSwganNvbl0gPSBmaWx0ZXIubWF0Y2goL14oXFx3Kyk6KC4qKSQvKVxuICAgICAgdHJ5IHtcbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJOYW1lXSA9IGFzQXJyYXkoSlNPTi5wYXJzZShgWyR7anNvbn1dYCkpXG4gICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICB9XG4gIH1cbiAgY29uc3QgZmlsdGVyc0RhdGEgPSB7fVxuICBmb3IgKGNvbnN0IGRhdGFOYW1lIGluIHNjaGVtYS5jb21wb25lbnRzKSB7XG4gICAgY29uc3QgZGF0YSA9IHt9XG4gICAgLy8gSWYgd2UgaGF2ZSByZXRyaWV2ZWQgcGFyYW1zIGZyb20gdGhlIHF1ZXJ5LCBmZXRjaCB0aGUgYXNzb2NpYXRlZFxuICAgIC8vIGZvcm0gY29tcG9uZW50cyBzbyB3ZSBjYW4gbWFwIHRoZSB2YWx1ZXMgYmFjayB0byBvYmplY3Qga2V5czpcbiAgICBjb25zdCBhcmdzID0gZmlsdGVyc1tnZXRGaWx0ZXJOYW1lKGRhdGFOYW1lKV1cbiAgICBpZiAoYXJncykge1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBkYXRhTmFtZSlcbiAgICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY29tcG9uZW50cykge1xuICAgICAgICAgIGRhdGFba2V5XSA9IGFyZ3NbaW5kZXgrK11cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmaWx0ZXJzRGF0YVtkYXRhTmFtZV0gPSBkYXRhXG4gIH1cbiAgcmV0dXJuIGZpbHRlcnNEYXRhXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tbGlzdChcbiAgdi1pZj1cImlzUmVhZHlcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4pXG4gIC5kaXRvLWxpc3RfX2hlYWRlcihcbiAgICB2LWlmPVwic2NvcGVzIHx8IGhhc1BhZ2luYXRpb25cIlxuICApXG4gICAgRGl0b1Njb3BlcyhcbiAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgKVxuICAgIC8vLSBXaGVuIHRoZXJlJ3Mgb25seSBwYWdpbmF0aW9uIHdpdGhvdXQgc2NvcGVzLCB3ZSBuZWVkIGEgZ29vZCBvbCcgc3BhY2VyXG4gICAgLy8tIGRpdiwgZm9yIHRoZSBsYXlvdXQgbm90IHRvIGJyZWFrLi4uXG4gICAgLmRpdG8tc3BhY2VyKFxuICAgICAgdi1lbHNlLWlmPVwiaGFzUGFnaW5hdGlvblwiXG4gICAgKVxuICAgIERpdG9QYWdpbmF0aW9uKFxuICAgICAgdi1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmxpbWl0PVwicGFnaW5hdGVcIlxuICAgICAgOnRvdGFsPVwidG90YWwgfHwgMFwiXG4gICAgKVxuICB0YWJsZS5kaXRvLXRhYmxlKFxuICAgIDpjbGFzcz1ge1xuICAgICAgJ2RpdG8tdGFibGUtc2VwYXJhdG9ycyc6IGlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWxhcmdlci1wYWRkaW5nJzogaGFzRWRpdEJ1dHRvbnMgJiYgIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWFsdGVybmF0ZS1jb2xvcnMnOiAhaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtZXZlbi1jb3VudCc6IGhhc0V2ZW5Db3VudFxuICAgIH1gXG4gIClcbiAgICBEaXRvVGFibGVIZWFkKFxuICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmNvbHVtbnM9XCJjb2x1bW5zXCJcbiAgICAgIDpoYXNFZGl0QnV0dG9ucz1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgRGl0b0RyYWdnYWJsZShcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIDptb2RlbFZhbHVlPVwidXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0RGF0YSwgcGFnaW5hdGlvblJhbmdlKVwiXG4gICAgICA6b3B0aW9ucz1cImdldERyYWdnYWJsZU9wdGlvbnMoKVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIEB1cGRhdGU6bW9kZWxWYWx1ZT1cInZhbHVlID0+IChsaXN0RGF0YSA9IHZhbHVlKVwiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBsaXN0RGF0YVwiXG4gICAgICAgIDppZD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKHNjaGVtYSwgaXRlbSlcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWlmPVwiY29sdW1uc1wiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIERpdG9UYWJsZUNlbGwoXG4gICAgICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmNlbGw9XCJjb2x1bW5cIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgKVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICBEaXRvU2NoZW1hSW5saW5lZChcbiAgICAgICAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgICAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXgsIGFzT2JqZWN0OiB0cnVlIH0pXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRJdGVtU3RvcmUoc2NoZW1hLCBpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbXBvbmVudChcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDppcz1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoaXRlbSwgaW5kZXgpKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCB9KVwiXG4gICAgICAgICAgICApXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgdi1pZj1cImhhc0NlbGxFZGl0QnV0dG9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJnZXRJdGVtU3RvcmUoc2NoZW1hLCBpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICApXG4gICAgLy8tIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBpbnNpZGUgdGFibGUgd2hlbiBub3QgaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgdGZvb3QoXG4gICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgIXNpbmdsZVwiXG4gICAgKVxuICAgICAgdHJcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyg6Y29sc3Bhbj1cIm51bUNvbHVtbnNcIilcbiAgICAgICAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgICAgIClcbiAgLy8tIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBvdXRzaWRlIHRhYmxlIHdoZW4gaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gIERpdG9FZGl0QnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLXN0aWNreShcbiAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgc2luZ2xlXCJcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IFNvcnRhYmxlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvcnRhYmxlTWl4aW4uanMnXG5pbXBvcnQge1xuICBnZXRWaWV3RWRpdFBhdGgsXG4gIHJlc29sdmVTY2hlbWFDb21wb25lbnQsXG4gIHJlc29sdmVTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGNyZWF0ZUZpbHRlcnNQYW5lbCB9IGZyb20gJy4uL3V0aWxzL2ZpbHRlci5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IHBpY2tCeSwgZXF1YWxzLCBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGlzdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW4sIFNvcnRhYmxlTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBnZXRQYW5lbFNjaGVtYShhcGksIHNjaGVtYSwgZGF0YVBhdGgsIGNvbXBvbmVudCkge1xuICAgIGNvbnN0IHsgZmlsdGVycyB9ID0gc2NoZW1hXG4gICAgLy8gU2VlIGlmIHRoaXMgbGlzdCBjb21wb25lbnQgd2FudHMgdG8gZGlzcGxheSBhIGZpbHRlciBwYW5lbCwgYW5kIGlmIHNvLFxuICAgIC8vIGNyZWF0ZSB0aGUgcGFuZWwgc2NoZW1hIGZvciBpdCB0aHJvdWdoIGBnZXRGaWx0ZXJzUGFuZWwoKWAuXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgIHJldHVybiBjcmVhdGVGaWx0ZXJzUGFuZWwoXG4gICAgICAgIGFwaSxcbiAgICAgICAgZmlsdGVycyxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIC8vIFBhc3MgYSBjb21wdXRlZCB2YWx1ZSB0byBnZXQgLyBzZXQgdGhlIHF1ZXJ5LCBzZWUgZ2V0RmlsdGVyc1BhbmVsKClcbiAgICAgICAgY29tcHV0ZWQoe1xuICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnQucXVlcnlcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgc2V0KHF1ZXJ5KSB7XG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHVuZGVmaW5lZCB2YWx1ZXMgZm9yIGNvbXBhcmluZyB3aXRoIGVxdWFscygpXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBvYmogPT4gcGlja0J5KG9iaiwgdmFsdWUgPT4gdmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGlmICghZXF1YWxzKGZpbHRlcihxdWVyeSksIGZpbHRlcihjb21wb25lbnQucXVlcnkpKSkge1xuICAgICAgICAgICAgICBjb21wb25lbnQucXVlcnkgPSBxdWVyeVxuICAgICAgICAgICAgICBjb21wb25lbnQubG9hZERhdGEoZmFsc2UpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGhhc1BhZ2luYXRpb24oKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnBhZ2luYXRlXG4gICAgfSxcblxuICAgIGhhc0xpc3RCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICEhKHRoaXMuYnV0dG9uU2NoZW1hcyB8fCB0aGlzLmNyZWF0YWJsZSlcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4gKFxuICAgICAgICBsaXN0RGF0YS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICB0aGlzLmVkaXRhYmxlIHx8XG4gICAgICAgICAgdGhpcy5kZWxldGFibGUgfHxcbiAgICAgICAgICB0aGlzLmRyYWdnYWJsZVxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0NlbGxFZGl0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0lubGluZWQgJiYgdGhpcy5oYXNFZGl0QnV0dG9uc1xuICAgIH0sXG5cbiAgICBoYXNFdmVuQ291bnQoKSB7XG4gICAgICByZXR1cm4gISh0aGlzLmxpc3REYXRhLmxlbmd0aCAlIDIpXG4gICAgfSxcblxuICAgIG51bUNvbHVtbnMoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAodGhpcy5jb2x1bW5zID8gT2JqZWN0LmtleXModGhpcy5jb2x1bW5zKS5sZW5ndGggOiAxKSArXG4gICAgICAgICh0aGlzLmhhc0NlbGxFZGl0QnV0dG9ucyA/IDEgOiAwKVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0RGF0YVBhdGgoaW5kZXgpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBpbmRleClcbiAgICB9LFxuXG4gICAgZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpIHtcbiAgICAgIGlmICh0aGlzLmVkaXRhYmxlKSB7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIGl0ZW0sIGluZGV4KVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGdldFZpZXdFZGl0UGF0aCh0aGlzLnNjaGVtYSwgaWQsIHRoaXMuY29udGV4dCkgfHxcbiAgICAgICAgICBgJHt0aGlzLnBhdGh9LyR7aWR9YFxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDZWxsQ2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gYGRpdG8tY2VsbC0ke2h5cGhlbmF0ZShjb2x1bW4ubmFtZSl9YFxuICAgIH0sXG5cbiAgICBnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgIGluZGV4LFxuICAgICAgICBkYXRhUGF0aDogdGhpcy5nZXREYXRhUGF0aChpbmRleClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRmlsdGVyRXJyb3JzKGVycm9ycykge1xuICAgICAgY29uc3QgZmlsdGVyc0RhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgJyRmaWx0ZXJzJylcbiAgICAgIGNvbnN0IHBhbmVsID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0UGFuZWxCeURhdGFQYXRoKGZpbHRlcnNEYXRhUGF0aClcbiAgICAgIGlmIChwYW5lbCkge1xuICAgICAgICBwYW5lbC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIHRydWUpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLFxuICAgIHNjaGVtYSxcbiAgICBuYW1lLFxuICAgIHJvdXRlcyxcbiAgICBsZXZlbCxcbiAgICBuZXN0ZWQgPSBmYWxzZSxcbiAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpLFxuICAgICAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLmNvbHVtbnMpLFxuICAgICAgU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgYXBpLFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHJvdXRlcyxcbiAgICAgICAgbGV2ZWwsXG4gICAgICAgIG5lc3RlZCxcbiAgICAgICAgZmxhdHRlbixcbiAgICAgICAgcHJvY2Vzc1xuICAgICAgKVxuICAgIF0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1saXN0IHtcbiAgJHNlbGY6ICY7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICZfX2hlYWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgcGFkZGluZy1ib3R0b206ICRjb250ZW50LXBhZGRpbmctaGFsZjtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgICY6ZW1wdHkge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICAuZGl0by1zY29wZXMsXG4gICAgLmRpdG8tcGFnaW5hdGlvbiB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleDogMCAxIGF1dG87XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLXNpbmdsZSB7XG4gICAgLy8gU28gdGhhdCBsaXN0IGJ1dHRvbnMgY2FuIGJlIHN0aWNreSB0byB0aGUgYm90dG9tOlxuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW4tY29udGVudDtcbiAgICBoZWlnaHQ6IDEwMCU7XG5cbiAgICAvLyBNYWtlIHNpbmdsZSBsaXN0IGhlYWRlciwgbmF2aWdhdGlvbiBhbmQgYnV0dG9ucyBzdGlja3kgdG8gdGhlIHRvcCBhbmRcbiAgICAvLyBib3R0b206XG4gICAgI3skc2VsZn1fX2hlYWRlciB7XG4gICAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgICAgdG9wOiAwO1xuICAgICAgbWFyZ2luLXRvcDogLSRjb250ZW50LXBhZGRpbmc7XG4gICAgICBwYWRkaW5nLXRvcDogJGNvbnRlbnQtcGFkZGluZztcbiAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gICAgICB6LWluZGV4OiAxO1xuXG4gICAgICArIC5kaXRvLXRhYmxlIHtcbiAgICAgICAgLmRpdG8tdGFibGUtaGVhZCB7XG4gICAgICAgICAgcG9zaXRpb246IHN0aWNreTtcbiAgICAgICAgICB0b3A6IGNhbGMoJGlucHV0LWhlaWdodCArICRjb250ZW50LXBhZGRpbmcgKyAkY29udGVudC1wYWRkaW5nLWhhbGYpO1xuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gICAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5EaXRvTGFiZWwuZGl0by1sYWJlbC1jb21wb25lbnQoXG4gIDpsYWJlbD1cInZhbHVlXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdsYWJlbCcsIHtcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWxhYmVsLWNvbXBvbmVudCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGhlaWdodDogMmVtO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1tYXJrdXAoOmlkPVwiZGF0YVBhdGhcIilcbiAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtdG9vbGJhcihcbiAgICB2LWlmPVwiZ3JvdXBlZEJ1dHRvbnMubGVuZ3RoID4gMFwiXG4gIClcbiAgICAuZGl0by1idXR0b24tZ3JvdXAoXG4gICAgICB2LWZvcj1cImJ1dHRvbnMgaW4gZ3JvdXBlZEJ1dHRvbnNcIlxuICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1mb3I9XCJ7IG5hbWUsIGljb24sIGlzQWN0aXZlLCBvbkNsaWNrIH0gaW4gYnV0dG9uc1wiXG4gICAgICAgIDprZXk9XCJuYW1lXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbiAgICAgICAgQGNsaWNrPVwib25DbGlja1wiXG4gICAgICApXG4gICAgICAgIEljb24oOm5hbWU9XCJpY29uXCIpXG4gIEVkaXRvckNvbnRlbnQuZGl0by1tYXJrdXAtZWRpdG9yKFxuICAgIHJlZj1cImVkaXRvclwiXG4gICAgOmVkaXRvcj1cImVkaXRvclwiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKVxuICAuZGl0by1yZXNpemUoXG4gICAgdi1pZj1cInJlc2l6YWJsZVwiXG4gICAgQG1vdXNlZG93bi5zdG9wLnByZXZlbnQ9XCJvbkRyYWdSZXNpemVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBFZGl0b3IsIEVkaXRvckNvbnRlbnQsIE1hcmssIGdldE1hcmtBdHRyaWJ1dGVzIH0gZnJvbSAnQHRpcHRhcC92dWUtMydcbi8vIGltcG9ydCB7IHRvZ2dsZU1hcmsgfSBmcm9tICd0aXB0YXAtY29tbWFuZHMnXG4vLyBFc3NlbnRpYWxzOlxuaW1wb3J0IHsgRG9jdW1lbnQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1kb2N1bWVudCdcbmltcG9ydCB7IFRleHQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10ZXh0J1xuLy8gTWFya3M6XG5pbXBvcnQgeyBCb2xkIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tYm9sZCdcbmltcG9ydCB7IENvZGUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1jb2RlJ1xuaW1wb3J0IHsgSXRhbGljIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taXRhbGljJ1xuaW1wb3J0IHsgTGluayB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWxpbmsnXG5pbXBvcnQgeyBTdHJpa2UgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1zdHJpa2UnXG5pbXBvcnQgeyBVbmRlcmxpbmUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi11bmRlcmxpbmUnXG4vLyBOb2RlczpcbmltcG9ydCB7IEJsb2NrcXVvdGUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1ibG9ja3F1b3RlJ1xuaW1wb3J0IHsgQ29kZUJsb2NrIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tY29kZS1ibG9jaydcbmltcG9ydCB7IEhhcmRCcmVhayB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhhcmQtYnJlYWsnXG5pbXBvcnQgeyBIZWFkaW5nIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taGVhZGluZydcbmltcG9ydCB7IFBhcmFncmFwaCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXBhcmFncmFwaCdcbmltcG9ydCB7IEhvcml6b250YWxSdWxlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taG9yaXpvbnRhbC1ydWxlJ1xuaW1wb3J0IHsgT3JkZXJlZExpc3QgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1vcmRlcmVkLWxpc3QnXG5pbXBvcnQgeyBCdWxsZXRMaXN0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tYnVsbGV0LWxpc3QnXG5pbXBvcnQgeyBMaXN0SXRlbSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWxpc3QtaXRlbSdcbi8vIFRPRE86XG4vLyBpbXBvcnQgeyBJbWFnZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWltYWdlJ1xuLy8gaW1wb3J0IHsgTWVudGlvbiB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLW1lbnRpb24nXG4vLyBpbXBvcnQgeyBDb2RlQmxvY2tIaWdobGlnaHQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1jb2RlLWJsb2NrLWhpZ2hsaWdodCdcbi8vIGltcG9ydCB7IFRhYmxlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUnXG4vLyBpbXBvcnQgeyBUYWJsZUNlbGwgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1jZWxsJ1xuLy8gaW1wb3J0IHsgVGFibGVIZWFkZXIgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1oZWFkZXInXG4vLyBpbXBvcnQgeyBUYWJsZU5vZGVzIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtbm9kZXMnXG4vLyBpbXBvcnQgeyBUYWJsZVJvdyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLXJvdydcbi8vIGltcG9ydCB7IFRhc2tMaXN0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFzay1saXN0J1xuLy8gaW1wb3J0IHsgVGFza0l0ZW0gfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YXNrLWl0ZW0nXG4vLyBUb29sczpcbmltcG9ydCB7IEhpc3RvcnkgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1oaXN0b3J5J1xuXG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCwgaHlwaGVuYXRlLCBkZWJvdW5jZSwgY2FtZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ21hcmt1cCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7XG4gICAgRWRpdG9yQ29udGVudCxcbiAgICBJY29uXG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yOiBudWxsLFxuICAgICAgaGVpZ2h0OiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgMTBcbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCB8fCBgY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtYXJrQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ21hcmtzJywge1xuICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICBpdGFsaWM6IHRydWUsXG4gICAgICAgIHVuZGVybGluZTogdHJ1ZSxcbiAgICAgICAgc3RyaWtlOiB0cnVlLFxuICAgICAgICBzbWFsbDogdHJ1ZSxcbiAgICAgICAgY29kZTogdHJ1ZSxcbiAgICAgICAgbGluazoge1xuICAgICAgICAgIG9uQ2xpY2s6IGVkaXRvciA9PiB0aGlzLm9uQ2xpY2tMaW5rKGVkaXRvcilcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYmFzaWNOb2RlQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ25vZGVzJywge1xuICAgICAgICBwYXJhZ3JhcGg6IHtcbiAgICAgICAgICBjb21tYW5kOiAnc2V0UGFyYWdyYXBoJ1xuICAgICAgICB9LFxuICAgICAgICBoZWFkaW5nOiB7XG4gICAgICAgICAgYXR0cmlidXRlOiAnbGV2ZWwnLFxuICAgICAgICAgIHZhbHVlczogWzEsIDIsIDMsIDQsIDUsIDZdXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFkdmFuY2VkTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgYnVsbGV0TGlzdDogdHJ1ZSxcbiAgICAgICAgb3JkZXJlZExpc3Q6IHRydWUsXG4gICAgICAgIGJsb2NrcXVvdGU6IHRydWUsXG4gICAgICAgIGNvZGVCbG9jazogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdG9vbEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCd0b29scycsIHtcbiAgICAgICAgdW5kbzogdHJ1ZSxcbiAgICAgICAgcmVkbzogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ3JvdXBlZEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB0aGlzLm1hcmtCdXR0b25zLFxuICAgICAgICB0aGlzLmJhc2ljTm9kZUJ1dHRvbnMsXG4gICAgICAgIHRoaXMuYWR2YW5jZWROb2RlQnV0dG9ucyxcbiAgICAgICAgdGhpcy50b29sQnV0dG9uc1xuICAgICAgXS5maWx0ZXIoYnV0dG9ucyA9PiBidXR0b25zLmxlbmd0aCA+IDApXG4gICAgfSxcblxuICAgIHBhcnNlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZToge1xuICAgICAgICAgICdjb2xsYXBzZSc6IGZhbHNlLFxuICAgICAgICAgICdwcmVzZXJ2ZSc6IHRydWUsXG4gICAgICAgICAgJ3ByZXNlcnZlLWFsbCc6ICdmdWxsJ1xuICAgICAgICB9W3RoaXMud2hpdGVzcGFjZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVkaXRhYmxlOiAhdGhpcy5yZWFkeW9ubHksXG4gICAgICAgIGF1dG9Gb2N1czogdGhpcy5hdXRvZm9jdXMsXG4gICAgICAgIGRpc2FibGVJbnB1dFJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5pbnB1dCxcbiAgICAgICAgZGlzYWJsZVBhc3RlUnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLnBhc3RlLFxuICAgICAgICBwYXJzZU9wdGlvbnM6IHRoaXMucGFyc2VPcHRpb25zXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgd2hpdGVzcGFjZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3doaXRlc3BhY2UnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnY29sbGFwc2UnXG4gICAgICAvLyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiAnY29sbGFwc2UnLCAncHJlc2VydmUnLCAncHJlc2VydmUtYWxsJ1xuICAgIH0pLFxuXG4gICAgZW5hYmxlUnVsZXM6IGdldFNjaGVtYUFjY2Vzc29yKCdlbmFibGVSdWxlcycsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEJvb2xlYW5dLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZW5hYmxlUnVsZXMpIHtcbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGVuYWJsZVJ1bGVzKVxuICAgICAgICAgID8gZW5hYmxlUnVsZXNcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgaW5wdXQ6ICEhZW5hYmxlUnVsZXMsXG4gICAgICAgICAgICAgIHBhc3RlOiAhIWVuYWJsZVJ1bGVzXG4gICAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHJlYWR5b25seTogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGF1dG9mb2N1czogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGVuYWJsZVJ1bGVzOiAndXBkYXRlRWRpdG9yT3B0aW9ucydcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZURlYm91bmNlZCA9IGRlYm91bmNlKGVkaXRvciA9PiB7XG4gICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgIHRoaXMudmFsdWUgPSBlZGl0b3IuZ2V0SFRNTCgpXG4gICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH0sIDEwMClcblxuICAgIGNvbnN0IG9uVXBkYXRlID0gKHsgZWRpdG9yIH0pID0+IHtcbiAgICAgIHNldFZhbHVlRGVib3VuY2VkKGVkaXRvcilcbiAgICAgIHRoaXMub25JbnB1dCgpXG4gICAgfVxuXG4gICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVdhdGNoKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZWRpdG9yLmNvbW1hbmRzLnNldENvbnRlbnQodmFsdWUsIGZhbHNlLCB0aGlzLnBhcnNlT3B0aW9ucylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5lZGl0b3IgPSBuZXcgRWRpdG9yKHtcbiAgICAgIC4uLnRoaXMuZWRpdG9yT3B0aW9ucyxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbkJsdXIsXG4gICAgICBvblVwZGF0ZSxcbiAgICAgIGV4dGVuc2lvbnM6IHRoaXMuZ2V0RXh0ZW5zaW9ucygpLFxuICAgICAgY29udGVudDogdGhpcy52YWx1ZSB8fCAnJ1xuICAgIH0pXG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkRyYWdSZXNpemUoZXZlbnQpIHtcbiAgICAgIGNvbnN0IGdldFBvaW50ID0gKHsgY2xpZW50WDogeCwgY2xpZW50WTogeSB9KSA9PiAoeyB4LCB5IH0pXG5cbiAgICAgIGxldCBwcmV2WSA9IGdldFBvaW50KGV2ZW50KS55XG4gICAgICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChnZXRDb21wdXRlZFN0eWxlKHRoaXMuJHJlZnMuZWRpdG9yLiRlbCkuaGVpZ2h0KVxuXG4gICAgICBjb25zdCBtb3VzZW1vdmUgPSBldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IHsgeSB9ID0gZ2V0UG9pbnQoZXZlbnQpXG4gICAgICAgIGhlaWdodCArPSB5IC0gcHJldllcbiAgICAgICAgcHJldlkgPSB5XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gYCR7TWF0aC5tYXgoaGVpZ2h0LCAwKX1weGBcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICAgIG1vdXNlbW92ZSxcblxuICAgICAgICBtb3VzZXVwKGV2ZW50KSB7XG4gICAgICAgICAgbW91c2Vtb3ZlKGV2ZW50KVxuICAgICAgICAgIGhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHVwZGF0ZUVkaXRvck9wdGlvbnMoKSB7XG4gICAgICB0aGlzLmVkaXRvci5zZXRPcHRpb25zKHRoaXMuZWRpdG9yT3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgb25DbGlja0xpbmsoZWRpdG9yKSB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0gYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgaHJlZjoge1xuICAgICAgICAgICAgdHlwZTogJ3VybCcsXG4gICAgICAgICAgICBsYWJlbDogJ0xpbmsnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aXRsZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgbGFiZWw6ICdUaXRsZSdcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICBjYW5jZWw6IHt9LFxuICAgICAgICAgIGFwcGx5OiB7IHR5cGU6ICdzdWJtaXQnIH0sXG4gICAgICAgICAgcmVtb3ZlOiB7XG4gICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgY2xpY2soeyBkaWFsb2dDb21wb25lbnQgfSkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbXBvbmVudC5yZXNvbHZlKG51bGwpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRhdGE6IGdldE1hcmtBdHRyaWJ1dGVzKHRoaXMuZWRpdG9yLnN0YXRlLCAnbGluaycpXG4gICAgICB9KVxuICAgICAgaWYgKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgbGV0IHsgaHJlZiwgdGl0bGUgfSA9IGF0dHJpYnV0ZXNcbiAgICAgICAgaWYgKGhyZWYpIHtcbiAgICAgICAgICAvLyBTZWUgaWYgYGhyZWZgIGNhbiBiZSBwYXJzZWQgYXMgYSBVUkwsIGFuZCBpZiBub3QsXG4gICAgICAgICAgLy8gcHJlZml4IGl0IHdpdGggYSBkZWZhdWx0IHByb3RvY29sLlxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3XG4gICAgICAgICAgICBuZXcgVVJMKGhyZWYpXG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICBocmVmID0gYGh0dHBzOi8vJHtocmVmfWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWRpdG9yLmNvbW1hbmRzLnNldExpbmsoeyBocmVmLCB0aXRsZSB9KVxuICAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzID09PSBudWxsKSB7XG4gICAgICAgIGVkaXRvci5jb21tYW5kcy51bnNldExpbmsoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRFeHRlbnNpb25zKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXJrcyA9IHt9LFxuICAgICAgICBub2RlcyA9IHt9LFxuICAgICAgICB0b29scyA9IHt9XG4gICAgICB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC8vIEVzc2VudGlhbHM6XG4gICAgICAgIERvY3VtZW50LFxuICAgICAgICBUZXh0LFxuICAgICAgICBQYXJhZ3JhcGgsIC8vIGJ1dHRvbiBjYW4gYmUgY29udHJvbGxlZCwgYnV0IG5vZGUgbmVlZHMgdG8gYmUgb24uXG5cbiAgICAgICAgLy8gTWFya3M6IGBzY2hlbWEubWFya3NgXG4gICAgICAgIG1hcmtzLmJvbGQgJiYgQm9sZCxcbiAgICAgICAgbWFya3MuaXRhbGljICYmIEl0YWxpYyxcbiAgICAgICAgbWFya3MudW5kZXJsaW5lICYmIFVuZGVybGluZSxcbiAgICAgICAgbWFya3Muc3RyaWtlICYmIFN0cmlrZSxcbiAgICAgICAgbWFya3Muc21hbGwgJiYgU21hbGwsXG4gICAgICAgIG1hcmtzLmNvZGUgJiYgQ29kZSxcbiAgICAgICAgbWFya3MubGluayAmJiBMaW5rV2l0aFRpdGxlLFxuXG4gICAgICAgIC8vIE5vZGVzOiBgc2NoZW1hLm5vZGVzYFxuICAgICAgICBub2Rlcy5ibG9ja3F1b3RlICYmIEJsb2NrcXVvdGUsXG4gICAgICAgIG5vZGVzLmNvZGVCbG9jayAmJiBDb2RlQmxvY2ssXG4gICAgICAgIEhhcmRCcmVhaywgLy8gVE9ETzogU2hvdWxkIHRoaXMgYWx3YXlzIG9uP1xuICAgICAgICBub2Rlcy5oZWFkaW5nICYmIEhlYWRpbmcuY29uZmlndXJlKHsgbGV2ZWxzOiBub2Rlcy5oZWFkaW5nIH0pLFxuICAgICAgICBub2Rlcy5ob3Jpem9udGFsUnVsZSAmJiBIb3Jpem9udGFsUnVsZSxcbiAgICAgICAgKG5vZGVzLm9yZGVyZWRMaXN0IHx8IG5vZGVzLmJ1bGxldExpc3QpICYmIExpc3RJdGVtLFxuICAgICAgICBub2Rlcy5idWxsZXRMaXN0ICYmIEJ1bGxldExpc3QsXG4gICAgICAgIG5vZGVzLm9yZGVyZWRMaXN0ICYmIE9yZGVyZWRMaXN0LFxuICAgICAgICAvLyBUT0RPOlxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBUb2RvSXRlbSxcbiAgICAgICAgLy8gbm9kZXMudG9kb0xpc3QgJiYgVG9kb0xpc3QsXG5cbiAgICAgICAgLy8gVG9vbHM6IGBzY2hlbWEudG9vbHNgXG4gICAgICAgIHRvb2xzLmhpc3RvcnkgJiYgSGlzdG9yeVxuICAgICAgXS5maWx0ZXIoZXh0ZW5zaW9uID0+ICEhZXh0ZW5zaW9uKVxuICAgIH0sXG5cbiAgICBnZXRCdXR0b25zKHNldHRpbmdzTmFtZSwgZGVzY3JpcHRpb25zKSB7XG4gICAgICBjb25zdCBsaXN0ID0gW11cbiAgICAgIGNvbnN0IHsgY29tbWFuZHMgfSA9IHRoaXMuZWRpdG9yXG5cbiAgICAgIGNvbnN0IGFkZEJ1dHRvbiA9ICh7IG5hbWUsIGljb24sIGNvbW1hbmQsIGF0dHJpYnV0ZXMsIG9uQ2xpY2sgfSkgPT4ge1xuICAgICAgICBsaXN0LnB1c2goe1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgaWNvbixcbiAgICAgICAgICBpc0FjdGl2ZTogdGhpcy5lZGl0b3IuaXNBY3RpdmUobmFtZSwgYXR0cmlidXRlcyksXG4gICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgY29tbWFuZCA/Pz1cbiAgICAgICAgICAgICAgbmFtZSBpbiBjb21tYW5kc1xuICAgICAgICAgICAgICAgID8gbmFtZVxuICAgICAgICAgICAgICAgIDogYHRvZ2dsZSR7Y2FtZWxpemUobmFtZSwgdHJ1ZSl9YFxuICAgICAgICAgICAgaWYgKGNvbW1hbmQgaW4gY29tbWFuZHMpIHtcbiAgICAgICAgICAgICAgY29uc3QgYXBwbHkgPSBhdHRyaWJ1dGVzID0+XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IuY2hhaW4oKVtjb21tYW5kXShhdHRyaWJ1dGVzKS5mb2N1cygpLnJ1bigpXG4gICAgICAgICAgICAgIG9uQ2xpY2tcbiAgICAgICAgICAgICAgICA/IG9uQ2xpY2sodGhpcy5lZGl0b3IsIGF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgOiBhcHBseShhdHRyaWJ1dGVzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNjaGVtYVtzZXR0aW5nc05hbWVdXG4gICAgICBpZiAoc2V0dGluZ3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgZGVzY3JpcHRpb25dIG9mIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0aW9ucykpIHtcbiAgICAgICAgICBjb25zdCBzZXR0aW5nTmFtZSA9IFsndW5kbycsICdyZWRvJ10uaW5jbHVkZXMobmFtZSkgPyAnaGlzdG9yeScgOiBuYW1lXG4gICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW3NldHRpbmdOYW1lXVxuICAgICAgICAgIGNvbnN0IGljb24gPSBoeXBoZW5hdGUobmFtZSlcbiAgICAgICAgICBpZiAoc2V0dGluZykge1xuICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24gfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgY29tbWFuZCwgYXR0cmlidXRlLCB2YWx1ZXMsIG9uQ2xpY2sgfSA9IGRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZXMpICYmIGlzQXJyYXkoc2V0dGluZykpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgaGVhZGluZyBsZXZlbCBhdHRyczpcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogYCR7aWNvbn0tJHt2YWx1ZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgW2F0dHJpYnV0ZV06IHZhbHVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGRCdXR0b24oeyBuYW1lLCBpY29uLCBjb21tYW5kLCBvbkNsaWNrIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfSxcblxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmNvbW1hbmRzLmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1ckVsZW1lbnQoKSB7XG4gICAgICB0aGlzLmVkaXRvci5jb21tYW5kcy5ibHVyKClcbiAgICB9XG4gIH1cbn0pXG5cbmNvbnN0IFNtYWxsID0gTWFyay5jcmVhdGUoe1xuICBuYW1lOiAnc21hbGwnLFxuXG4gIHBhcnNlSFRNTCgpIHtcbiAgICByZXR1cm4gW3sgdGFnOiAnc21hbGwnIH1dXG4gIH0sXG5cbiAgcmVuZGVySFRNTCgpIHtcbiAgICByZXR1cm4gWydzbWFsbCcsIDBdXG4gIH0sXG5cbiAgYWRkQ29tbWFuZHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNldFNtYWxsOlxuICAgICAgICBhdHRyaWJ1dGVzID0+XG4gICAgICAgICh7IGNvbW1hbmRzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gY29tbWFuZHMuc2V0TWFyayh0aGlzLm5hbWUsIGF0dHJpYnV0ZXMpXG4gICAgICAgIH0sXG4gICAgICB0b2dnbGVTbWFsbDpcbiAgICAgICAgYXR0cmlidXRlcyA9PlxuICAgICAgICAoeyBjb21tYW5kcyB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnRvZ2dsZU1hcmsodGhpcy5uYW1lLCBhdHRyaWJ1dGVzKVxuICAgICAgICB9LFxuICAgICAgdW5zZXRTbWFsbDpcbiAgICAgICAgKCkgPT5cbiAgICAgICAgKHsgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiBjb21tYW5kcy51bnNldE1hcmsodGhpcy5uYW1lKVxuICAgICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5jb25zdCBMaW5rV2l0aFRpdGxlID0gTGluay5leHRlbmQoe1xuICBpbmNsdXNpdmU6IGZhbHNlLFxuICBzY2hlbWE6IHtcbiAgICBhdHRyczoge1xuICAgICAgaHJlZjoge1xuICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICB9LFxuICAgICAgdGl0bGU6IHtcbiAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYXJzZUhUTUwoKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgdGFnOiAnYScsXG4gICAgICAgICAgZ2V0QXR0cnM6IGVsZW1lbnQgPT4gKHtcbiAgICAgICAgICAgIGhyZWY6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdocmVmJyksXG4gICAgICAgICAgICB0aXRsZTogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RpdGxlJylcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcblxuICAgIHJlbmRlckhUTUwobm9kZSkge1xuICAgICAgcmV0dXJuIFsnYScsIG5vZGUuYXR0cnMsIDBdXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbWFya3VwIHtcbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC5kaXRvLXJlc2l6ZSB7XG4gICAgQGV4dGVuZCAlaWNvbi1yZXNpemU7XG5cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiB1bnNldDtcbiAgICBsZWZ0OiB1bnNldDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgd2lkdGg6IDFlbTtcbiAgICBoZWlnaHQ6IDFlbTtcbiAgfVxuXG4gIC5Qcm9zZU1pcnJvciB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG91dGxpbmU6IG5vbmU7XG4gIH1cblxuICAuZGl0by1tYXJrdXAtZWRpdG9yIHtcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgbWFyZ2luLXRvcDogJGlucHV0LXBhZGRpbmctdmVyO1xuICAgIC8vIE1vdmUgcGFkZGluZyBcImluc2lkZVwiIGVkaXRvciB0byBjb3JyZWN0bHkgcG9zaXRpb24gc2Nyb2xsYmFyXG4gICAgbWFyZ2luLXJpZ2h0OiAtJGlucHV0LXBhZGRpbmctaG9yO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbnMtdG9vbGJhciB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG5cbiAgaDEsXG4gIGgyLFxuICBoMyxcbiAgcCxcbiAgdWwsXG4gIG9sLFxuICBwcmUsXG4gIGJsb2NrcXVvdGUge1xuICAgIG1hcmdpbjogMXJlbSAwO1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cbiAgfVxuXG4gIGgxLFxuICBoMixcbiAgaDMge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgaDEge1xuICAgIGZvbnQtc2l6ZTogMS40cmVtO1xuICB9XG5cbiAgaDIge1xuICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICB9XG5cbiAgdWwge1xuICAgIGxpc3Qtc3R5bGU6IGRpc2M7XG4gIH1cblxuICBjb2RlIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm87XG4gIH1cblxuICBwcmUge1xuICAgIHBhZGRpbmc6IDAuN3JlbSAxcmVtO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXI7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xuXG4gICAgY29kZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIH1cblxuICBwIGNvZGUge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwYWRkaW5nOiAwIDAuM3JlbTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlcjtcbiAgfVxuXG4gIGEge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICBjb2xvcjogYmx1ZTtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgfVxuXG4gIHVsLFxuICBvbCB7XG4gICAgcGFkZGluZy1sZWZ0OiAycmVtO1xuICB9XG5cbiAgbGkge1xuICAgICYgPiBwLFxuICAgICYgPiBvbCxcbiAgICAmID4gdWwge1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgfVxuXG4gIGJsb2NrcXVvdGUge1xuICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgJGNvbG9yLWxpZ2h0ZXI7XG4gICAgcGFkZGluZy1sZWZ0OiAxcmVtO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcblxuICAgIHAge1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1tdWx0aXNlbGVjdFxuICAuZGl0by1tdWx0aXNlbGVjdF9faW5uZXJcbiAgICBWdWVNdWx0aXNlbGVjdChcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICA6Y2xhc3M9YHtcbiAgICAgICAgJ211bHRpc2VsZWN0LS1tdWx0aXBsZSc6IG11bHRpcGxlLFxuICAgICAgICAnbXVsdGlzZWxlY3QtLWxvYWRpbmcnOiBpc0xvYWRpbmcsXG4gICAgICAgICdtdWx0aXNlbGVjdC0taGlnaGxpZ2h0Jzogc2hvd0hpZ2hsaWdodFxuICAgICAgfWBcbiAgICAgIDpzaG93TGFiZWxzPVwiZmFsc2VcIlxuICAgICAgOnBsYWNlaG9sZGVyPVwicGxhY2Vob2xkZXJcIlxuICAgICAgdGFnUGxhY2Vob2xkZXI9XCJQcmVzcyBlbnRlciB0byBhZGQgbmV3IHRhZ1wiXG4gICAgICA6b3B0aW9ucz1cInBvcHVsYXRlICYmIGFjdGl2ZU9wdGlvbnMgfHwgW11cIlxuICAgICAgOmN1c3RvbUxhYmVsPVwiZ2V0TGFiZWxGb3JPcHRpb25cIlxuICAgICAgOnRyYWNrQnk9XCJvcHRpb25WYWx1ZVwiXG4gICAgICA6Z3JvdXBMYWJlbD1cImdyb3VwQnlMYWJlbFwiXG4gICAgICA6Z3JvdXBWYWx1ZXM9XCJncm91cEJ5T3B0aW9uc1wiXG4gICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICA6dGFnZ2FibGU9XCJ0YWdnYWJsZVwiXG4gICAgICA6c2VhcmNoYWJsZT1cInNlYXJjaGFibGVcIlxuICAgICAgOmludGVybmFsU2VhcmNoPVwiIXNlYXJjaEZpbHRlclwiXG4gICAgICA6cHJlc2VydmVTZWFyY2g9XCIhIXNlYXJjaEZpbHRlclwiXG4gICAgICA6Y2xlYXJPblNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsb3NlT25TZWxlY3Q9XCIhc3RheU9wZW5cIlxuICAgICAgOmxvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICBAb3Blbj1cIm9uT3BlblwiXG4gICAgICBAY2xvc2U9XCJvbkNsb3NlXCJcbiAgICAgIEB0YWc9XCJvbkFkZFRhZ1wiXG4gICAgICBAc2VhcmNoLWNoYW5nZT1cIm9uU2VhcmNoQ2hhbmdlXCJcbiAgICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIClcbiAgLy8tIEVkaXQgYnV0dG9uIGlzIG5ldmVyIGRpc2FibGVkLCBldmVuIGlmIHRoZSBmaWVsZCBpcyBkaXNhYmxlZC5cbiAgRGl0b0VkaXRCdXR0b25zKFxuICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZmFsc2VcIlxuICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4uL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5pbXBvcnQgVnVlTXVsdGlzZWxlY3QgZnJvbSAndnVlLW11bHRpc2VsZWN0J1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGlzQm9vbGVhbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbXVsdGlzZWxlY3QnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVnVlTXVsdGlzZWxlY3QgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZWFyY2hlZE9wdGlvbnM6IG51bGwsXG4gICAgICBwb3B1bGF0ZTogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZE9wdGlvbnM6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/ICh0aGlzLnNlbGVjdGVkVmFsdWUgfHwgW10pXG4gICAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgICAgLy8gSWYgYW4gb3B0aW9uIGNhbm5vdCBiZSBmb3VuZCwgd2UgbWF5IGJlIGluIHRhZ2dhYmxlIG1vZGUgYW5kXG4gICAgICAgICAgICAgICAgLy8gY2FuIGFkZCBpdC5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9PiAoXG4gICAgICAgICAgICAgICAgICB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB8fCB0aGlzLmFkZFRhZ09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBvcHRpb25zIHRoYXQgd2UgY291bGRuJ3QgbWF0Y2guXG4gICAgICAgICAgICAgIC8vIFRPRE86IFNob3VsZCB3ZSBkaXNwbGF5IGFuIGVycm9yIGluc3RlYWQ/XG4gICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRPcHRpb25cbiAgICAgIH0sXG5cbiAgICAgIHNldChvcHRpb24pIHtcbiAgICAgICAgLy8gQ29udmVydCB2YWx1ZSB0byBvcHRpb25zIG9iamVjdCwgc2luY2UgdnVlLW11bHRpc2VsZWN0IGNhbid0IG1hcCB0aGF0XG4gICAgICAgIC8vIGl0c2VsZiB1bmZvcnR1bmF0ZWx5LiBgdHJhY2stYnlgIGlzIHVzZWQgZm9yIDprZXkgbWFwcGluZyBpdCBzZWVtcy5cbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKG9wdGlvbiB8fCBbXSkubWFwKHZhbHVlID0+IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpKVxuICAgICAgICAgIDogdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhY3RpdmVPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoZWRPcHRpb25zIHx8IHRoaXMub3B0aW9uc1xuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzZWFyY2hhYmxlOiBnZXRTY2hlbWFBY2Nlc3Nvcignc2VhcmNoYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgdGFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCd0YWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgc3RheU9wZW46IGdldFNjaGVtYUFjY2Vzc29yKCdzdGF5T3BlbicsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcGxhY2Vob2xkZXIoKSB7XG4gICAgICBsZXQgeyBwbGFjZWhvbGRlciwgc2VhcmNoYWJsZSwgdGFnZ2FibGUgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAoaXNCb29sZWFuKHBsYWNlaG9sZGVyKSkge1xuICAgICAgICBwbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyID8gdW5kZWZpbmVkIDogbnVsbFxuICAgICAgfVxuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyID09PSB1bmRlZmluZWRcbiAgICAgICAgPyBzZWFyY2hhYmxlICYmIHRhZ2dhYmxlXG4gICAgICAgICAgPyBgU2VhcmNoIG9yIGFkZCBhICR7dGhpcy5sYWJlbH1gXG4gICAgICAgICAgOiBzZWFyY2hhYmxlXG4gICAgICAgICAgICA/IGBTZWxlY3Qgb3Igc2VhcmNoICR7dGhpcy5sYWJlbH1gXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICA6IHBsYWNlaG9sZGVyXG4gICAgfSxcblxuICAgIHNob3dIaWdobGlnaHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc01vdW50ZWQgJiYgdGhpcy4kcmVmcy5lbGVtZW50LnBvaW50ZXJEaXJ0eVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGlmICh0aGlzLmF1dG9mb2N1cykge1xuICAgICAgLy8gdnVlLW11bHRpc2VsZWN0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgYXV0b2ZvY3VzIGF0dHJpYnV0ZS4gV2UgbmVlZCB0b1xuICAgICAgLy8gaGFuZGxlIGl0IGhlcmUuXG4gICAgICB0aGlzLmZvY3VzKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFkZFRhZ09wdGlvbih0YWcpIHtcbiAgICAgIGlmICh0aGlzLnRhZ2dhYmxlKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwsIG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9XG4gICAgICAgICAgb3B0aW9uTGFiZWwgJiYgb3B0aW9uVmFsdWVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIFtvcHRpb25MYWJlbF06IHRhZyxcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBEZWZpbmUgYSBzaW1wbGUgc2NoZW1hIG9wdGlvbiB0byBjb252ZXJ0IHRoZSB0YWcgdmFsdWVcbiAgICAgICAgICAgICAgICAvLyB0byBzb21ldGhpbmcgZWxzZSwgZS5nLiBgdG9UYWc6IHRhZyA9PiB1bmRlcnNjb3JlKHRhZylgXG4gICAgICAgICAgICAgICAgW29wdGlvblZhbHVlXTogdGFnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdGFnXG4gICAgICAgIHRoaXMub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRyZWZzLmVsZW1lbnQuYWN0aXZhdGUoKVxuICAgIH0sXG5cbiAgICBibHVyRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJHJlZnMuZWxlbWVudC5kZWFjdGl2YXRlKClcbiAgICB9LFxuXG4gICAgb25PcGVuKCkge1xuICAgICAgdGhpcy5wb3B1bGF0ZSA9IHRydWVcbiAgICB9LFxuXG4gICAgb25DbG9zZSgpIHtcbiAgICAgIC8vIFNpbmNlIHdlIGRvbid0IGZpcmUgYmx1ciBldmVudHMgd2hpbGUgdGhlIG11bHRpc2VsZWN0IGlzIG9wZW4gKHNlZVxuICAgICAgLy8gYmVsb3cpLCB3ZSBuZWVkIHRvIGRvIGl0IGhlcmUsIHdoZW4gaXQncyBhY3R1YWxseSBjbG9zZWQuXG4gICAgICBpZiAodGhpcy5mb2N1c2VkKSB7XG4gICAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25CbHVyKCkge1xuICAgICAgaWYgKCF0aGlzLiRyZWZzLmVsZW1lbnQuaXNPcGVuKSB7XG4gICAgICAgIFR5cGVNaXhpbi5tZXRob2RzLm9uQmx1ci5jYWxsKHRoaXMpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQWRkVGFnKHRhZykge1xuICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5hZGRUYWdPcHRpb24odGFnKVxuICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICB0aGlzLnZhbHVlLnB1c2godGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblNlYXJjaENoYW5nZShxdWVyeSkge1xuICAgICAgaWYgKHRoaXMuc2VhcmNoRmlsdGVyKSB7XG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgIC8vIFNldCBgc2VhcmNoZWRPcHRpb25zYCB0byBhbiBlbXB0eSBhcnJheSwgYmVmb3JlIGl0IHdpbGwgYmVcbiAgICAgICAgICAvLyBwb3B1bGF0ZWQgYXN5bmNocm9ub3VzbHkgd2l0aCB0aGUgYWN0dWFsIHJlc3VsdHMuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBbXVxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gYXdhaXQgdGhpcy5yZXNvbHZlRGF0YShcbiAgICAgICAgICAgICgpID0+IHRoaXMuc2VhcmNoRmlsdGVyKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHF1ZXJ5IH0pKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDbGVhciBgc2VhcmNoZWRPcHRpb25zYCB3aGVuIHRoZSBxdWVyeSBpcyBjbGVhcmVkLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcbkBpbXBvcnQgJ3Z1ZS1tdWx0aXNlbGVjdC9kaXN0L3Z1ZS1tdWx0aXNlbGVjdC5jc3MnO1xuXG4kc3Bpbm5lci13aWR0aDogJHNlbGVjdC1hcnJvdy13aWR0aDtcbiR0YWctaWNvbi13aWR0aDogMS44ZW07XG4kdGFnLW1hcmdpbjogMnB4O1xuJHRhZy1wYWRkaW5nOiAzcHg7XG4kdGFnLWxpbmUtaGVpZ2h0OiAxZW07XG5cbi5kaXRvLW11bHRpc2VsZWN0IHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAmX19pbm5lciB7XG4gICAgZmxleDogMTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cblxuICAuZGl0by1lZGl0LWJ1dHRvbnMge1xuICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gIH1cblxuICAubXVsdGlzZWxlY3Qge1xuICAgICRzZWxmOiBsYXN0LXNlbGVjdG9yKCYpO1xuXG4gICAgLS1pbnB1dC13aWR0aDogMTAwJTtcblxuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBtaW4taGVpZ2h0OiBpbmhlcml0O1xuICAgIGNvbG9yOiAkY29sb3ItYmxhY2s7XG5cbiAgICAmLS1tdWx0aXBsZSB7XG4gICAgICAtLWlucHV0LXdpZHRoOiBhdXRvO1xuICAgIH1cblxuICAgICZfX3RhZ3Mge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICAgIG1pbi1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgIHBhZGRpbmc6IDAgJHNwaW5uZXItd2lkdGggMCAwO1xuICAgICAgLy8gU28gdGFncyBjYW4gZmxvYXQgb24gbXVsdGlwbGUgbGluZXMgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnM6XG4gICAgICBwYWRkaW5nLWJvdHRvbTogJHRhZy1tYXJnaW47XG5cbiAgICAgIC5kaXRvLWhhcy1lcnJvcnMgJiB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3RhZyB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICAgIG1hcmdpbjogJHRhZy1tYXJnaW4gMCAwICR0YWctbWFyZ2luO1xuICAgICAgYm9yZGVyLXJhZGl1czogMWVtO1xuICAgICAgcGFkZGluZzogJHRhZy1wYWRkaW5nICR0YWctaWNvbi13aWR0aCAkdGFnLXBhZGRpbmcgMC44ZW07XG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodDtcbiAgICAgIGhlaWdodDogY2FsYygkaW5wdXQtaGVpZ2h0IC0gMiAqICR0YWctcGFkZGluZyk7XG4gICAgfVxuXG4gICAgJl9fdGFncy13cmFwIHtcbiAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgbGluZS1oZWlnaHQ6IDA7XG4gICAgfVxuXG4gICAgJl9fc2luZ2xlLFxuICAgICZfX3BsYWNlaG9sZGVyLFxuICAgICZfX2lucHV0IHtcbiAgICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgICBmbGV4OiAxIDAgMCU7XG4gICAgICB3aWR0aDogMDtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICBtYXJnaW46IDAgMCAxcHggMDtcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBzdHlsZT1cInBhZGRpbmc6IC4uLjtcIiBpbiBhZGRpdGlvbiB0byB1c2luZ1xuICAgICAgLy8gY2xhc3Nlcywgc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nICFpbXBvcnRhbnQ7XG4gICAgICAvLyBTbyBpbnB1dCBjYW4gZmxvYXQgbmV4dCB0byB0YWdzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zIHdpdGhcbiAgICAgIC8vICZfX3RhZ3M6XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50O1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICB9XG5cbiAgICAmX19wbGFjZWhvbGRlcixcbiAgICAmX19pbnB1dDo6cGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6ICRjb2xvci1wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICAmX19wbGFjZWhvbGRlciB7XG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIC8vIEVuZm9yY2UgYWN0dWFsIGxpbmUtaGVpZ2h0IGZvciBwb3NpdGlvbmluZy5cbiAgICAgICAgY29udGVudDogJ1xcMjAwYic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fc2VsZWN0LFxuICAgICZfX3NwaW5uZXIge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIC8vICRib3JkZXItd2lkdGggdG8gcHJldmVudCBtYXNraW5nIGJvcmRlciB3aXRoICZfX3NwaW5uZXJcbiAgICAgIHRvcDogJGJvcmRlci13aWR0aDtcbiAgICAgIHJpZ2h0OiAkYm9yZGVyLXdpZHRoO1xuICAgICAgYm90dG9tOiAkYm9yZGVyLXdpZHRoO1xuICAgICAgaGVpZ2h0OiBpbmhlcml0O1xuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgfVxuXG4gICAgJl9fc2VsZWN0IHtcbiAgICAgIHdpZHRoOiAwO1xuICAgICAgbWFyZ2luLXJpZ2h0OiBjYWxjKCRzZWxlY3QtYXJyb3ctd2lkdGggLyAyKTtcblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgQGluY2x1ZGUgYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKTtcblxuICAgICAgICBib3R0b206ICRzZWxlY3QtYXJyb3ctYm90dG9tO1xuICAgICAgICByaWdodDogY2FsYygtMSAqICRzZWxlY3QtYXJyb3ctc2l6ZSAvIDIpO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3NwaW5uZXIge1xuICAgICAgd2lkdGg6ICRzcGlubmVyLXdpZHRoO1xuXG4gICAgICAmOjpiZWZvcmUsXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIC8vIENoYW5nZSB0aGUgd2lkdGggb2YgdGhlIGxvYWRpbmcgc3Bpbm5lclxuICAgICAgICBib3JkZXItd2lkdGg6IDNweDtcbiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICAgICAgaW5zZXQ6IDA7XG4gICAgICAgIG1hcmdpbjogYXV0bztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19vcHRpb24ge1xuICAgICAgJG9wdGlvbjogbGFzdC1zZWxlY3RvcigmKTtcblxuICAgICAgbWluLWhlaWdodDogdW5zZXQ7XG4gICAgICBoZWlnaHQ6IHVuc2V0O1xuICAgICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIC8vIEluc3RydWN0aW9uIHRleHQgZm9yIG9wdGlvbnNcbiAgICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICAvLyBPbmx5IHNob3cgdGhlIGhpZ2hsaWdodCBvbmNlIHRoZSBwdWxsZG93biBoYXMgcmVjZWl2ZWQgbW91c2Ugb3JcbiAgICAgIC8vIGtleWJvYXJkIGludGVyYWN0aW9uLCBpbiB3aGljaCBjYXNlIGAmLS1oaWdobGlnaHRgIHdpbGwgYmUgc2V0LFxuICAgICAgLy8gd2hpY2ggaXMgY29udHJvbGxlZCBieSBgcG9pbnRlckRpcnR5YCBpbiB2dWUtbXVsdGlzZWxlY3QuXG4gICAgICAvLyBVbnRpbCB0aGVuLCBjbGVhciB0aGUgaGlnaGxpZ2h0IHN0eWxlLCBidXQgb25seSBpZiBpdCBpc24ndCBhbHNvXG4gICAgICAvLyBkaXNhYmxlZCBvciBzZWxlY3RlZCwgaW4gd2hpY2ggY2FzZSB3ZSB3YW50IHRvIGtlZXAgdGhlIHN0eWxlLlxuICAgICAgQGF0LXJvb3QgI3skc2VsZn06bm90KCN7JHNlbGZ9LS1oaWdobGlnaHQpXG4gICAgICAgICAgI3skb3B0aW9ufTpub3QoI3skb3B0aW9ufS0tZGlzYWJsZWQpOm5vdCgjeyRvcHRpb259LS1zZWxlY3RlZCkge1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuXG4gICAgICAmLS1oaWdobGlnaHQge1xuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICAgIH1cblxuICAgICAgICBAYXQtcm9vdCAjeyRzZWxmfSN7JHNlbGZ9LS1oaWdobGlnaHQgI3tsYXN0LXNlbGVjdG9yKCYpfSB7XG4gICAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi0tc2VsZWN0ZWQge1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHQ7XG5cbiAgICAgICAgQGF0LXJvb3QgI3skc2VsZn0jeyRzZWxmfS0taGlnaGxpZ2h0ICYjeyRvcHRpb259LS1oaWdobGlnaHQge1xuICAgICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmLS1kaXNhYmxlZCB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItZGlzYWJsZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fdGFnIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuXG4gICAgJl9fdGFnLWljb24ge1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcbiAgICAgIHdpZHRoOiAkdGFnLWljb24td2lkdGg7XG4gICAgICBtYXJnaW46IDA7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgQGV4dGVuZCAlaWNvbi1jbGVhcjtcblxuICAgICAgICBmb250LXNpemU6IDAuOWVtO1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXI6OmFmdGVyIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3RhZ3MsXG4gICAgJl9fY29udGVudC13cmFwcGVyIHtcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIH1cblxuICAgICZfX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICB6LWluZGV4OiAkei1pbmRleC1wb3B1cDtcbiAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG5cbiAgICAmOm5vdCgmLS1hYm92ZSkgI3skc2VsZn1fX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICBtYXJnaW46ICgtJGJvcmRlci13aWR0aCkgMCAwO1xuICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICB9XG5cbiAgICAmLS1hYm92ZSAjeyRzZWxmfV9fY29udGVudC13cmFwcGVyIHtcbiAgICAgIG1hcmdpbjogMCAwICgtJGJvcmRlci13aWR0aCk7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICAgIH1cblxuICAgICYtLWFjdGl2ZSB7XG4gICAgICAjeyRzZWxmfV9fcGxhY2Vob2xkZXIge1xuICAgICAgICAvLyBEb24ndCB1c2UgYGRpc3BsYXk6IG5vbmVgIHRvIGhpZGUgcGxhY2UtaG9sZGVyLCBhcyB0aGUgbGF5b3V0IHdvdWxkXG4gICAgICAgIC8vIGNvbGxhcHNlLlxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn1fX3NpbmdsZSxcbiAgICAgICN7JHNlbGZ9X19pbnB1dCB7XG4gICAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgYHN0eWxlPVwid2lkdGhcImAgaW4gYWRkaXRpb24gdG8gdXNpbmcgY2xhc3Nlc1xuICAgICAgICAvLyBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgICB3aWR0aDogdmFyKC0taW5wdXQtd2lkdGgpICFpbXBvcnRhbnQ7XG4gICAgICB9XG5cbiAgICAgICN7JHNlbGZ9X190YWdzIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgIH1cblxuICAgICAgJiN7JHNlbGZ9LS1hYm92ZSB7XG4gICAgICAgICN7JHNlbGZ9X190YWdzIHtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi0tbG9hZGluZyB7XG4gICAgICAjeyRzZWxmfV9fdGFncyB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgICAgfVxuXG4gICAgICAjeyRzZWxmfV9fY29udGVudC13cmFwcGVyIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgaW5wdXRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSAhPT0gbnVsbCA/IHRoaXMudmFsdWUgOiAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPVxuICAgICAgICAgIHZhbHVlICE9PSAnJ1xuICAgICAgICAgICAgPyB0aGlzLmlzSW50ZWdlclxuICAgICAgICAgICAgICA/IHBhcnNlSW50KHZhbHVlLCAxMClcbiAgICAgICAgICAgICAgOiBwYXJzZUZsb2F0KHZhbHVlKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGlzSW50ZWdlcigpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzdGVwVmFsdWUoKSB7XG4gICAgICAvLyBEb24ndCBzaG93IHN0ZXBzIGlmIHRoZSBpbnB1dCBpcyBhbHNvIGNsZWFyYWJsZSwgc2luY2UgdGhlIHN0ZXAgYnV0dG9uc1xuICAgICAgLy8gd291bGQgY29sbGlkZSB3aXRoIHRoZSBjbGVhciBidXR0b24uXG4gICAgICByZXR1cm4gdGhpcy5jbGVhcmFibGVcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy5zdGVwID09IG51bGwgJiYgIXRoaXMuaXNJbnRlZ2VyXG4gICAgICAgICAgPyAnYW55J1xuICAgICAgICAgIDogdGhpcy5zdGVwXG4gICAgfSxcblxuICAgIGRlY2ltYWxzOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVjaW1hbHMnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHN0ZXA6IGdldFNjaGVtYUFjY2Vzc29yKCdzdGVwJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KHN0ZXApIHtcbiAgICAgICAgLy8gRm9yIGludGVnZXJzLCByb3VuZCB0aGUgc3RlcHMgdG8gdGhlIG5leHQgYmlnZ2VyIGludGVnZXIgdmFsdWU6XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBzdGVwICE9IG51bGwgPyBNYXRoLmNlaWwoc3RlcCkgOiBzdGVwXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtaW46IGdldFNjaGVtYUFjY2Vzc29yKCdtaW4nLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQobWluKSB7XG4gICAgICAgIG1pbiA9XG4gICAgICAgICAgbWluID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMF1cbiAgICAgICAgICAgIDogbWluXG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBtaW4gIT0gbnVsbCA/IE1hdGguZmxvb3IobWluKSA6IG1pblxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4OiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4Jywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1heCkge1xuICAgICAgICBtYXggPVxuICAgICAgICAgIG1heCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzFdXG4gICAgICAgICAgICA6IG1heFxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWF4ICE9IG51bGwgPyBNYXRoLmNlaWwobWF4KSA6IG1heFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgcmFuZ2U6IGdldFNjaGVtYUFjY2Vzc29yKCdyYW5nZScsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZ2V0KCkge1xuICAgICAgICAvLyBgdGhpcy5taW5gLCBgdGhpcy5tYXhgIGFscmVhZHkgc3VwcG9ydCBgc2NoZW1hLnJhbmdlYCxcbiAgICAgICAgLy8gc28gcmVkaXJlY3QgdGhlcmUuXG4gICAgICAgIGNvbnN0IHsgbWluLCBtYXggfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIG1pbiAhPSBudWxsICYmIG1heCAhPSBudWxsID8gW21pbiwgbWF4XSA6IHVuZGVmaW5lZFxuICAgICAgfSxcblxuICAgICAgc2V0KHJhbmdlKSB7XG4gICAgICAgIC8vIFByb3ZpZGUgYSBzZXR0ZXIgdGhhdCBkZWxlZ2F0ZXMgdG8gYFt0aGlzLm1pbiwgdGhpcy5tYXhdYCxcbiAgICAgICAgLy8gc2luY2UgdGhvc2UgYWxyZWFkeSBoYW5kbGUgYHNjaGVtYS5yYW5nZWAuXG4gICAgICAgIGlmIChpc0FycmF5KHJhbmdlKSkge1xuICAgICAgICAgIDtbdGhpcy5taW4sIHRoaXMubWF4XSA9IHJhbmdlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0ge31cbiAgICAgIGNvbnN0IHsgcmFuZ2UsIG1pbiwgbWF4LCBkZWNpbWFscywgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJhbmdlID0gcmFuZ2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChtaW4gIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1pbiA9IG1pblxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXggIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1heCA9IG1heFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGVjaW1hbHMgIT0gbnVsbCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICB9IGVsc2UgaWYgKHN0ZXApIHtcbiAgICAgICAgY29uc3QgZGVjaW1hbHMgPSAoYCR7c3RlcH1gLnNwbGl0KCcuJylbMV0gfHwgJycpLmxlbmd0aFxuICAgICAgICBpZiAoZGVjaW1hbHMgPiAwKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzSW50ZWdlcikge1xuICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuSW5wdXRGaWVsZC5kaXRvLW51bWJlcihcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICB0eXBlPVwibnVtYmVyXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIDptaW49XCJtaW5cIlxuICA6bWF4PVwibWF4XCJcbiAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuKVxuICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWydudW1iZXInLCAnaW50ZWdlciddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICAgIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICAgIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICAgIHRleHRGaWVsZDogdHJ1ZSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBpc0ludGVnZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdpbnRlZ2VyJ1xuICAgICAgfVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLy8gT25seSBzaG93IHNwaW4gYnV0dG9ucyBpZiB0aGUgbnVtYmVyIGNvbXBvbmVudCBkZWZpbmVzIGEgc3RlcCBzaXplLlxuaW5wdXRbdHlwZT0nbnVtYmVyJ106bm90KFtzdGVwXSkge1xuICAmOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuICAmOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLW9iamVjdChcbiAgdi1pZj1cImlzUmVhZHlcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4pXG4gIC5kaXRvLW9iamVjdC1jb250ZW50KFxuICAgIHYtaWY9XCJvYmplY3REYXRhXCJcbiAgKVxuICAgIC8vLSBTdXBwb3J0IHRoZSBzYW1lIHJlbmRlcmluZyBvcHRpb25zIGFzIFR5cGVMaXN0OlxuICAgIERpdG9TY2hlbWFJbmxpbmVkKFxuICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICA6bGFiZWw9XCJvYmplY3RMYWJlbFwiXG4gICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBvYmplY3REYXRhLCBjb250ZXh0KVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgIDpkZWxldGFibGU9XCJvYmplY3REYXRhICYmIGRlbGV0YWJsZVwiXG4gICAgICA6ZWRpdGFibGU9XCJvYmplY3REYXRhICYmIGVkaXRhYmxlXCJcbiAgICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgICAgOmFjY3VtdWxhdGVkQmFzaXM9XCJhY2N1bXVsYXRlZEJhc2lzXCJcbiAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKG9iamVjdERhdGEpXCJcbiAgICApXG4gICAgY29tcG9uZW50KFxuICAgICAgdi1lbHNlLWlmPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICA6aXM9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KCkpXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZVxuICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgb2JqZWN0RGF0YSlcIlxuICAgIClcbiAgLy8tIE5PVEU6IGBEaXRvRWRpdEJ1dHRvbnNgIGhlcmUgb25seSBoYW5kbGUgdGhlIGNyZWF0ZSBidXR0b24gb3V0c2lkZSBvZiB0aGVcbiAgLy8tIHNjaGVtYSwgdGhlIGVkaXQgYnV0dG9ucyBpbnNpZGUgYXJlIGhhbmRsZWQgYnkgYERpdG9TY2hlbWFJbmxpbmVkYC5cbiAgRGl0b0VkaXRCdXR0b25zKFxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgOnBhdGg9XCJwYXRoXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdvYmplY3QnLCB7XG4gIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAvLyBObyBuZWVkIGZvciB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBTZWUgVHlwZVRyZWVMaXN0IGZvciBkZXRhaWxzLlxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBvYmplY3RMYWJlbCgpIHtcbiAgICAgIC8vIE9ubHkgc2hvdyBhIGxhYmVsIGlmIHRoZSBvYmplY3QgaXMgY29sbGFwc2libGUuXG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZVxuICAgICAgICA/IHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc2NoZW1hLCB0aGlzLm9iamVjdERhdGEsIHsgYXNPYmplY3Q6IHRydWUgfSlcbiAgICAgICAgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IGRhdGE6IHRoaXMub2JqZWN0RGF0YSB9KVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSxcbiAgICAgIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgIGFwaSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBuYW1lLFxuICAgICAgICByb3V0ZXMsXG4gICAgICAgIGxldmVsLFxuICAgICAgICBuZXN0ZWQsXG4gICAgICAgIGZsYXR0ZW4sXG4gICAgICAgIHByb2Nlc3NcbiAgICAgIClcbiAgICBdKVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tb2JqZWN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtaW4td2lkdGg6IG1pbi1jb250ZW50O1xuXG4gIC5kaXRvLW9iamVjdC1jb250ZW50IHtcbiAgICBmbGV4OiAwIDEgMTAwJTtcbiAgfVxuXG4gID4gLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgICBmbGV4OiAxIDAgMCU7XG4gICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3BhbmVsJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcbiAgb21pdFNwYWNpbmc6IHRydWUsXG5cbiAgZ2V0UGFuZWxTY2hlbWEoYXBpLCBzY2hlbWEpIHtcbiAgICAvLyBGb3IgYSBUeXBlUGFuZWwsIHRoZSBjb21wb25lbnQgc2NoZW1hIGlzIGFsc28gdGhlIHBhbmVsIHNjaGVtYSwgYnV0XG4gICAgLy8gcmVtb3ZlIHRoZSBhZGRlZCBuYW1lLCBzbyBpdCBkb2Vzbid0IGdldCBhcHBlbmRlZCB0d2ljZSB0byBkYXRhLXBhdGguXG4gICAgY29uc3QgeyBuYW1lLCAuLi5wYW5lbCB9ID0gc2NoZW1hXG4gICAgcmV0dXJuIHBhbmVsXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5wcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6dmFsdWU9XCJwcm9ncmVzc1ZhbHVlXCJcbiAgOm1heD1cInByb2dyZXNzTWF4XCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdwcm9ncmVzcycsIHtcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBjb21wdXRlZDoge1xuICAgIHByb2dyZXNzVmFsdWUoKSB7XG4gICAgICBsZXQgeyB2YWx1ZSwgcmFuZ2UsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICB2YWx1ZSAtPSByYW5nZVswXVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gc3RlcCkgKiBzdGVwXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gJydcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG5cbiAgICBwcm9ncmVzc01heCgpIHtcbiAgICAgIGNvbnN0IHsgcmFuZ2UgfSA9IHRoaXNcbiAgICAgIHJldHVybiByYW5nZSA/IHJhbmdlWzFdIC0gcmFuZ2VbMF0gOiBudWxsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudWwuZGl0by1yYWRpby1idXR0b25zKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbilcbiAgbGkoXG4gICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gIClcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdyYWRpbycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bydcbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1yYWRpby1idXR0b25zIHtcbiAgbGFiZWwge1xuICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3M7XG4gIH1cblxuICAuZGl0by1yYWRpby1idXR0b24ge1xuICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zZWN0aW9uKDpjbGFzcz1cInsgJ2RpdG8tc2VjdGlvbi0tbGFiZWxsZWQnOiBoYXNMYWJlbCB9XCIpXG4gIERpdG9TY2hlbWFJbmxpbmVkLmRpdG8tc2VjdGlvbl9fc2NoZW1hKFxuICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOnBhZGRpbmc9XCJoYXNMYWJlbCA/ICduZXN0ZWQnIDogJ2lubGluZWQnXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIDpsYWJlbE5vZGU9XCJsYWJlbE5vZGVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldEl0ZW1Gb3JtU2NoZW1hLCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzZWN0aW9uJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gIXNjaGVtYS5uZXN0ZWQgJiYgISgnZGVmYXVsdCcgaW4gc2NoZW1hKSxcbiAgZGVmYXVsdE5lc3RlZDogZmFsc2UsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMudmFsdWUgOiB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnNjaGVtYS5sYWJlbFxuICAgIH0sXG5cbiAgICBjb2xsYXBzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGwsIC8vIHNvIHRoYXQgYD8/YCBiZWxvdyBjYW4gZG8gaXRzIHRoaW5nOlxuICAgICAgZ2V0KGNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHJldHVybiAhIShjb2xsYXBzaWJsZSA/PyB0aGlzLmNvbGxhcHNlZCAhPT0gbnVsbClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWFcbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsKSB7XG4gICAgLy8gUHJvY2VzcyBzZWN0aW9uIGNvbXBvbmVudHMgc28gdGhlaXIgZm9ybXMgZ2V0IHJlc29sdmVkIHRvby5cbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgcm91dGVzLCBsZXZlbClcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNlY3Rpb24ge1xuICAmLS1sYWJlbGxlZCB7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjJzICRlYXNlLW91dC1xdWFydDtcbiAgICBtYXJnaW4tdG9wOiAkZm9ybS1zcGFjaW5nLWhhbGY7XG5cbiAgICAmOmhhcyguZGl0by1zY2hlbWEtLW9wZW4pIHtcbiAgICAgIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuLmRpdG8tc2VsZWN0XG4gIC5kaXRvLXNlbGVjdF9faW5uZXJcbiAgICBzZWxlY3QoXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgQG1vdXNlZG93bj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgICBAZm9jdXM9XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwicG9wdWxhdGVcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIG9wdGdyb3VwKFxuICAgICAgICAgICAgdi1pZj1cImdyb3VwQnlcIlxuICAgICAgICAgICAgOmxhYmVsPVwib3B0aW9uW2dyb3VwQnlMYWJlbF1cIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJvcHQgaW4gb3B0aW9uW2dyb3VwQnlPcHRpb25zXVwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdClcIlxuICAgICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHQpIH19XG4gICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJzZWxlY3RlZE9wdGlvblwiXG4gICAgICApXG4gICAgICAgIG9wdGlvbig6dmFsdWU9XCJzZWxlY3RlZFZhbHVlXCIpIHt7IGdldExhYmVsRm9yT3B0aW9uKHNlbGVjdGVkT3B0aW9uKSB9fVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgKVxuICAvLy0gRWRpdCBidXR0b24gaXMgbmV2ZXIgZGlzYWJsZWQsIGV2ZW4gaWYgdGhlIGZpZWxkIGlzIGRpc2FibGVkLlxuICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJmYWxzZVwiXG4gICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzZWxlY3QnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gRGlzYWJsZSBsYXp5LXBvcHVsYXRpb24gZm9yIG5vdy5cbiAgICAgIC8vIFRPRE86IFNldCB0byBgZmFsc2VgIE9uY2UgbGluZXRvIGUyZSB0ZXN0cyBhZGRyZXNzIHRoZWlyIGlzc3Vlcy5cbiAgICAgIHBvcHVsYXRlOiB0cnVlXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLy8gVE9ETzogTW92ZSB0byBkaXRvLXVpXG4kc2VsZWN0LWFycm93LXJpZ2h0OiBjYWxjKCgkc2VsZWN0LWFycm93LXdpZHRoIC0gJHNlbGVjdC1hcnJvdy1zaXplKSAvIDIpO1xuXG4uZGl0by1zZWxlY3Qge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIHNlbGVjdCB7XG4gICAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgICBwYWRkaW5nLXJpZ2h0OiAkc2VsZWN0LWFycm93LXdpZHRoO1xuICB9XG5cbiAgLy8gYCZfX19pbm5lcmAgaXMgbmVlZGVkIHRvIG1ha2UgdGhlIGVkaXQgYnV0dG9ucyBhcHBlYXIgdG8gdGhlIHJpZ2h0IG9mIHRoZVxuICAvLyBzZWxlY3Q6XG4gICZfX2lubmVyIHtcbiAgICBmbGV4OiAxO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBAaW5jbHVkZSBhcnJvdygkc2VsZWN0LWFycm93LXNpemUpO1xuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206ICRzZWxlY3QtYXJyb3ctYm90dG9tO1xuICAgICAgcmlnaHQ6IGNhbGMoI3skc2VsZWN0LWFycm93LXJpZ2h0fSArICN7JGJvcmRlci13aWR0aH0pO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWVkaXQtYnV0dG9ucyB7XG4gICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgfVxuXG4gIC8vIEhhbmRsZSAuZGl0by13aWR0aC1maWxsIHNlcGFyYXRlbHkgZHVlIHRvIHJlcXVpcmVkIG5lc3Rpbmcgb2Ygc2VsZWN0OlxuICAmLmRpdG8td2lkdGgtZmlsbCB7XG4gICAgc2VsZWN0IHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgfVxuXG4gICYuZGl0by1kaXNhYmxlZDo6YWZ0ZXIge1xuICAgIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zbGlkZXJcbiAgaW5wdXQuZGl0by1yYW5nZShcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG4gIElucHV0RmllbGQuZGl0by1udW1iZXIoXG4gICAgdi1pZj1cImlucHV0XCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdHlwZT1cIm51bWJlclwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2xpZGVyJywge1xuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0YD9cbiAgICBpbnB1dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2lucHV0Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2xpZGVyIHtcbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1yYW5nZSB7XG4gICAgZmxleDogYXV0bztcbiAgICBoZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpKTtcbiAgfVxuXG4gIC5kaXRvLW51bWJlciB7XG4gICAgYm9yZGVyOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5Td2l0Y2hCdXR0b24uZGl0by1zd2l0Y2goXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIDpsYWJlbHM9XCJsYWJlbHNcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBTd2l0Y2hCdXR0b24gfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzd2l0Y2gnLCB7XG4gIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBTd2l0Y2hCdXR0b25cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5sYWJlbHNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zd2l0Y2gge1xuICAuZGl0by1zd2l0Y2gtbGFiZWwge1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldERlZmF1bHRWYWx1ZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgdHJpbTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RyaW0nLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgaWYgKHNjaGVtYS50cmltICYmIHZhbHVlICE9IG51bGwgJiYgaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAvLyBUZXh0IGZpZWxkcyBkb24ndCBuZWNlc3NhcmlseSBoYXZlIGEgYFN0cmluZ2AgdmFsdWUgd2hlbiBgZm9ybWF0KClgXG4gICAgICAvLyB3aXRob3V0IGBwYXJzZSgpYCBpcyB1c2VkLlxuICAgICAgdmFsdWUgPSB2YWx1ZS50cmltKClcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgdmFsdWUgPSBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbklucHV0RmllbGQuZGl0by10ZXh0KFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gIDp0eXBlPVwiaW5wdXRUeXBlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG4gIHRlbXBsYXRlKCNhZnRlcilcbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUZXh0TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1RleHRNaXhpbidcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuY29uc3QgbWFza2VkUGFzc3dvcmQgPSAnKioqKioqKioqKioqKioqKidcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFtcbiAgICAndGV4dCcsXG4gICAgJ2VtYWlsJyxcbiAgICAndXJsJyxcbiAgICAnaG9zdG5hbWUnLFxuICAgICdkb21haW4nLFxuICAgICd0ZWwnLFxuICAgICdwYXNzd29yZCcsXG4gICAgJ2NyZWRpdGNhcmQnXG4gIF0sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBtaXhpbnM6IFtUZXh0TWl4aW5dLFxuICAgIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICAgIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICAgIHRleHRGaWVsZDogdHJ1ZSxcbiAgICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiBzY2hlbWEudHlwZSA9PT0gJ3Bhc3N3b3JkJyxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBpbnB1dFR5cGUoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY3JlZGl0Y2FyZDogJ3RleHQnLFxuICAgICAgICAgICAgaG9zdG5hbWU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGRvbWFpbjogJ3RleHQnXG4gICAgICAgICAgfVt0aGlzLnR5cGVdIHx8XG4gICAgICAgICAgdGhpcy50eXBlXG4gICAgICAgIClcbiAgICAgIH0sXG5cbiAgICAgIGlucHV0VmFsdWU6IHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnR5cGUgPT09ICdwYXNzd29yZCcgJiZcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgIXRoaXMuZm9jdXNlZFxuICAgICAgICAgIClcbiAgICAgICAgICAgID8gbWFza2VkUGFzc3dvcmRcbiAgICAgICAgICAgIDogdGhpcy52YWx1ZVxuICAgICAgICB9LFxuXG4gICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgICBjb25zdCBydWxlID0ge1xuICAgICAgICAgIGVtYWlsOiAnZW1haWwnLFxuICAgICAgICAgIHVybDogJ3VybCcsXG4gICAgICAgICAgaG9zdG5hbWU6ICdob3N0bmFtZScsXG4gICAgICAgICAgZG9tYWluOiAnZG9tYWluJyxcbiAgICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkJyxcbiAgICAgICAgICBjcmVkaXRjYXJkOiAnY3JlZGl0Y2FyZCdcbiAgICAgICAgfVt0aGlzLnR5cGVdXG4gICAgICAgIHJldHVybiBydWxlID8geyBbcnVsZV06IHRydWUgfSA6IHt9XG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG50ZXh0YXJlYS5kaXRvLXRleHRhcmVhLmRpdG8taW5wdXQoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICA6cm93cz1cImxpbmVzXCJcbiAgOmNsYXNzPVwieyAnZGl0by1yZXNpemFibGUnOiByZXNpemFibGUgfVwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFRleHRNaXhpbiBmcm9tICcuLi9taXhpbnMvVGV4dE1peGluJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCd0ZXh0YXJlYScsIHtcbiAgbWl4aW5zOiBbVGV4dE1peGluXSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDRcbiAgICB9LFxuXG4gICAgcmVzaXphYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVzaXphYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRleHRhcmVhIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHJlc2l6ZTogbm9uZTtcbiAgbWluLWhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkgKyAjezIgKiAkaW5wdXQtcGFkZGluZy12ZXJ9KTtcblxuICAmLmRpdG8tcmVzaXphYmxlIHtcbiAgICByZXNpemU6IHZlcnRpY2FsO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRyZWUtbGlzdFxuICBEaXRvU2NvcGVzKFxuICAgIHYtaWY9XCJzY29wZXNcIlxuICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgKVxuICAuZGl0by10cmVlLXBhbmVsXG4gICAgRGl0b1RyZWVJdGVtKFxuICAgICAgOnNjaGVtYT1cInRyZWVTY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwidHJlZURhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwidHJlZURhdGFcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6b3Blbj1cInRydWVcIlxuICAgIClcbiAgICAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyKFxuICAgICAgdi1pZj1cImhhc0VkaXRhYmxlRm9ybXNcIlxuICAgIClcbiAgICAgIC8vLSBJbmNsdWRlIGEgcm91dGVyLXZpZXcgZm9yIHRoZSBvcHRpb25hbCBEaXRvRm9ybUlubGluZWRcbiAgICAgIFJvdXRlclZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHtcbiAgaGFzRm9ybVNjaGVtYSxcbiAgZ2V0Rm9ybVNjaGVtYXMsXG4gIHJlc29sdmVTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsndHJlZS1saXN0JywgJ3RyZWUtb2JqZWN0J10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBtaXhpbnM6IFtTb3VyY2VNaXhpbl0sXG5cbiAgICBwcm92aWRlKCkge1xuICAgICAgcmV0dXJuIHsgY29udGFpbmVyOiB0aGlzIH1cbiAgICB9LFxuXG4gICAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgICByZXR1cm4gdHlwZSA9PT0gJ3RyZWUtb2JqZWN0JyA/ICdvYmplY3QnIDogJ2xpc3QnXG4gICAgfSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBwYXRoKCkge1xuICAgICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIucGF0aGA6XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LnBhdGhcbiAgICAgIH0sXG5cbiAgICAgIGVkaXRQYXRoKCkge1xuICAgICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIuZWRpdFBhdGhgOlxuICAgICAgICByZXR1cm4gdGhpcy4kcm91dGUucGF0aC5zbGljZSh0aGlzLnBhdGg/Lmxlbmd0aClcbiAgICAgIH0sXG5cbiAgICAgIHRyZWVEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICA/IHsgW3RoaXMubmFtZV06IHRoaXMudmFsdWUgfVxuICAgICAgICAgIDogdGhpcy52YWx1ZVxuICAgICAgfSxcblxuICAgICAgdHJlZURhdGFQYXRoKCkge1xuICAgICAgICAvLyBSZW1vdmUgYG5hbWVgIGZyb20gYGRhdGFQYXRoYCwgYXMgaXQgaXMgYWRkZWRcbiAgICAgICAgLy8gdG8gYHRyZWVEYXRhYCBhbmQgYHRyZWVTY2hlbWFgXG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgID8gdGhpcy5kYXRhUGF0aC5zbGljZSgwLCB0aGlzLmRhdGFQYXRoLmxlbmd0aCAtIHRoaXMubmFtZS5sZW5ndGgpXG4gICAgICAgICAgOiB0aGlzLmRhdGFQYXRoXG4gICAgICB9LFxuXG4gICAgICB0cmVlU2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgY2hpbGRyZW46IHtcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5zY2hlbWFcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdGhpcy5zY2hlbWFcbiAgICAgIH0sXG5cbiAgICAgIGhhc0VkaXRhYmxlRm9ybXMoKSB7XG4gICAgICAgIGNvbnN0IGhhc0VkaXRhYmxlRm9ybXMgPSBzY2hlbWEgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgKFxuICAgICAgICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdlZGl0YWJsZScsIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNjaGVtYVxuICAgICAgICAgICAgICB9KSB8fFxuICAgICAgICAgICAgICBzY2hlbWEuY2hpbGRyZW4gJiZcbiAgICAgICAgICAgICAgaGFzRWRpdGFibGVGb3JtcyhzY2hlbWEuY2hpbGRyZW4pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYXNFZGl0YWJsZUZvcm1zKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgICAgYXBpLFxuICAgICAgc2NoZW1hLFxuICAgICAgbmFtZSxcbiAgICAgIHJvdXRlcyxcbiAgICAgIGxldmVsLFxuICAgICAgbmVzdGVkID0gdHJ1ZSxcbiAgICAgIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICAgIHByb2Nlc3MgPSBudWxsXG4gICAgKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYS5wcm9wZXJ0aWVzKSxcbiAgICAgICAgU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgICBhcGksXG4gICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgcm91dGVzLFxuICAgICAgICAgIGxldmVsLFxuICAgICAgICAgIG5lc3RlZCxcbiAgICAgICAgICBmbGF0dGVuLFxuICAgICAgICAgIC8vIFBhc3MgcHJvY2VzcygpIHRvIGFkZCBtb3JlIHJvdXRlcyB0byBjaGlsZFJvdXRlczpcbiAgICAgICAgICAoY2hpbGRSb3V0ZXMsIGxldmVsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICAgICAgICAvLyBBZGQgYHR5cGVgIHRvIHRoZSBuZXN0ZWQgdHJlZSBsaXN0LlxuICAgICAgICAgICAgICBjaGlsZHJlbi50eXBlID0gJ3RyZWUtbGlzdCdcbiAgICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgY2FsbCBgcHJvY2Vzc1NjaGVtYSgpYCBmb3IgdGhlIG5lc3RlZCB0cmVlIGxpc3Q6XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgICAgICAgICAgYXBpLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLm5hbWUsXG4gICAgICAgICAgICAgICAgY2hpbGRSb3V0ZXMsXG4gICAgICAgICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgICAgIHRydWUsIC8vIFBhc3MgYHRydWVgIGZvciBgZmxhdHRlbmAgaW4gdHJlZSBsaXN0cy5cbiAgICAgICAgICAgICAgICBwcm9jZXNzXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgfSxcblxuICAgIGdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyhzY2hlbWEsIGNvbnRleHQpIHtcbiAgICAgIC8vIENvbnZlcnQgbmVzdGVkIGNoaWxkcmVuIHNjaGVtYSB0byBzdGFuZC1hbG9uZSBzY2hlbWEgY29tcG9uZW50LFxuICAgICAgLy8gcHJlc2VudCBpbiBlYWNoIG9mIHRoZSBmb3JtcywgYXMgcmVxdWlyZWQgYnkgYHByb2Nlc3NTY2hlbWFEYXRhKClgXG4gICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyhcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGlsZHJlblxuICAgICAgICAgID8gZm9ybSA9PiAoe1xuICAgICAgICAgICAgICAuLi5mb3JtLFxuICAgICAgICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgICAgICAgLi4uZm9ybS5jb21wb25lbnRzLFxuICAgICAgICAgICAgICAgIFtjaGlsZHJlbi5uYW1lXTogY2hpbGRyZW5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IG51bGxcbiAgICAgIClcbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRyZWUtbGlzdCB7XG4gIEBleHRlbmQgJWZpZWxkO1xuXG4gIC5kaXRvLXRyZWUtcGFuZWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gICAgPiAuZGl0by10cmVlLWl0ZW0ge1xuICAgICAgZmxleDogMSAxIDI1JTtcbiAgICB9XG5cbiAgICA+IC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXIge1xuICAgICAgZmxleDogMCAxIDc1JTtcbiAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgICAgYm9yZGVyLWxlZnQ6ICRib3JkZXItc3R5bGU7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAxO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMTtcbiAgICAgIG1hcmdpbjogKC0kaW5wdXQtcGFkZGluZy12ZXIpICgtJGlucHV0LXBhZGRpbmctaG9yKTtcbiAgICAgIG1hcmdpbi1sZWZ0OiAkaW5wdXQtcGFkZGluZy1ob3I7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgZmlsZXNpemUgfSBmcm9tICdmaWxlc2l6ZSdcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZpbGVTaXplKHNpemUpIHtcbiAgcmV0dXJuIGZpbGVzaXplKHNpemUsIHsgYmFzZTogMTAgfSlcbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by11cGxvYWRcbiAgLy8tIEluIG9yZGVyIHRvIGhhbmRsZSB1cGxvYWQgYnV0dG9ucyBpbiBtdWx0aXBsZSBwb3NzaWJsZSBwbGFjZXMsIGRlcGVuZGluZ1xuICAvLy0gb24gd2hldGhlciB0aGV5IGhhbmRsZSBzaW5nbGUgb3IgbXVsdGlwbGUgdXBsb2FkcywgcmVuZGVyIHRoZSB1cGxvYWRcbiAgLy8tIGNvbXBvbmVudCBpbnZpc2libHkgYXQgdGhlIHJvb3QsIGFuZCBkZWxlZ2F0ZSB0aGUgY2xpY2sgZXZlbnRzIHRvIGl0IGZyb21cbiAgLy8tIHRoZSBidXR0b25zIHJlbmRlcmVkIGZ1cnRoZXIgYmVsb3cuIEx1Y2tpbHkgdGhpcyB3b3JrcyBzdXJwcmlzaW5nbHkgd2VsbC5cbiAgVnVlVXBsb2FkLmRpdG8tdXBsb2FkX19pbnB1dChcbiAgICByZWY9XCJ1cGxvYWRcIlxuICAgIHYtbW9kZWw9XCJ1cGxvYWRzXCJcbiAgICA6aW5wdXRJZD1cImRhdGFQYXRoXCJcbiAgICA6bmFtZT1cImRhdGFQYXRoXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOnBvc3RBY3Rpb249XCJ1cGxvYWRQYXRoXCJcbiAgICA6ZXh0ZW5zaW9ucz1cImV4dGVuc2lvbnNcIlxuICAgIDphY2NlcHQ9XCJhY2NlcHRcIlxuICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICA6c2l6ZT1cIm1heFNpemVcIlxuICAgIDpkcm9wPVwiJGVsPy5jbG9zZXN0KCcuZGl0by1jb250YWluZXInKVwiXG4gICAgOmRyb3BEaXJlY3Rvcnk9XCJ0cnVlXCJcbiAgICBAaW5wdXQtZmlsdGVyPVwib25JbnB1dEZpbHRlclwiXG4gICAgQGlucHV0LWZpbGU9XCJvbklucHV0RmlsZVwiXG4gIClcbiAgdGFibGUuZGl0by10YWJsZS5kaXRvLXRhYmxlLXNlcGFyYXRvcnMuZGl0by10YWJsZS1iYWNrZ3JvdW5kXG4gICAgLy8tIFN0eWxpbmcgY29tZXMgZnJvbSBgRGl0b1RhYmxlSGVhZGBcbiAgICB0aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgICAgIHRyXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBGaWxlXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBTaXplXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBTdGF0dXNcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuXG4gICAgRGl0b0RyYWdnYWJsZShcbiAgICAgIHYtbW9kZWw9XCJmaWxlc1wiXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICA6b3B0aW9ucz1cImdldERyYWdnYWJsZU9wdGlvbnMoKVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cIm11bHRpcGxlIHx8ICFpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICApXG4gICAgICAgIHRyKFxuICAgICAgICAgIHYtZm9yPVwiKGZpbGUsIGluZGV4KSBpbiBmaWxlc1wiXG4gICAgICAgICAgOmtleT1cImZpbGUubmFtZVwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZChcbiAgICAgICAgICAgIHYtaWY9XCJyZW5kZXJcIlxuICAgICAgICAgICAgdi1odG1sPVwicmVuZGVyRmlsZShmaWxlLCBpbmRleClcIlxuICAgICAgICAgIClcbiAgICAgICAgICB0ZChcbiAgICAgICAgICAgIHYtZWxzZS1pZj1cImRvd25sb2FkVXJsc1tpbmRleF1cIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGEoXG4gICAgICAgICAgICAgIDpkb3dubG9hZD1cImZpbGUubmFtZVwiXG4gICAgICAgICAgICAgIDpocmVmPVwiZG93bmxvYWRVcmxzW2luZGV4XVwiXG4gICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwib25DbGlja0Rvd25sb2FkKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIERpdG9VcGxvYWRGaWxlKFxuICAgICAgICAgICAgICAgIDpmaWxlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgOnRodW1ibmFpbD1cInRodW1ibmFpbHNcIlxuICAgICAgICAgICAgICAgIDp0aHVtYm5haWxVcmw9XCJ0aHVtYm5haWxVcmxzW2luZGV4XVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICB0ZChcbiAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgIClcbiAgICAgICAgICAgIERpdG9VcGxvYWRGaWxlKFxuICAgICAgICAgICAgICA6ZmlsZT1cImZpbGVcIlxuICAgICAgICAgICAgICA6dGh1bWJuYWlsPVwidGh1bWJuYWlsc1wiXG4gICAgICAgICAgICAgIDp0aHVtYm5haWxVcmw9XCJ0aHVtYm5haWxVcmxzW2luZGV4XVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgdGQuZGl0by11cGxvYWRfX3NpemUge3sgZm9ybWF0RmlsZVNpemUoZmlsZS5zaXplKSB9fVxuICAgICAgICAgIHRkLmRpdG8tdXBsb2FkX19zdGF0dXNcbiAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICB2LWlmPVwiZmlsZS51cGxvYWRcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgICB2LWlmPVwiZmlsZS51cGxvYWQuZXJyb3JcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfCBFcnJvcjoge3sgZmlsZS51cGxvYWQuZXJyb3IgfX1cbiAgICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuYWN0aXZlXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIHwgVXBsb2FkaW5nLi4uXG4gICAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLnN1Y2Nlc3NcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfCBVcGxvYWRlZFxuICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB8IFN0b3JlZFxuICAgICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnNcbiAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi11cGxvYWQoXG4gICAgICAgICAgICAgICAgdi1pZj1cIiFtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgOnRpdGxlPVwidXBsb2FkVGl0bGVcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cIm9uQ2xpY2tVcGxvYWRcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICAgICAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwiZGVsZXRlRmlsZShmaWxlLCBpbmRleClcIlxuICAgICAgICAgICAgICApXG4gICAgdGZvb3QoXG4gICAgICB2LWlmPVwibXVsdGlwbGUgfHwgaXNVcGxvYWRBY3RpdmUgfHwgIWhhc0ZpbGVzXCJcbiAgICApXG4gICAgICB0clxuICAgICAgICB0ZCg6Y29sc3Bhbj1cIjRcIilcbiAgICAgICAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICAgICAgICBwcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICA6dmFsdWU9XCJ1cGxvYWRQcm9ncmVzc1wiXG4gICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICkgQ2FuY2VsXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi11cGxvYWQoXG4gICAgICAgICAgICAgICAgdi1pZj1cIm11bHRpcGxlIHx8ICFoYXNGaWxlc1wiXG4gICAgICAgICAgICAgICAgOnRpdGxlPVwidXBsb2FkVGl0bGVcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cIm9uQ2xpY2tVcGxvYWRcIlxuICAgICAgICAgICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvcnRhYmxlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvcnRhYmxlTWl4aW4uanMnXG5pbXBvcnQgcGFyc2VGaWxlU2l6ZSBmcm9tICdmaWxlc2l6ZS1wYXJzZXInXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZm9ybWF0RmlsZVNpemUgfSBmcm9tICcuLi91dGlscy91bml0cy5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IFZ1ZVVwbG9hZCBmcm9tICd2dWUtdXBsb2FkLWNvbXBvbmVudCdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCd1cGxvYWQnLCB7XG4gIG1peGluczogW1NvcnRhYmxlTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFZ1ZVVwbG9hZCB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVwbG9hZHM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdXBsb2FkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMudXBsb2FkXG4gICAgfSxcblxuICAgIHVwbG9hZFRpdGxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgPyAnVXBsb2FkIEZpbGVzJyA6ICdVcGxvYWQgRmlsZSdcbiAgICB9LFxuXG4gICAgZmlsZXMoKSB7XG4gICAgICByZXR1cm4gYXNGaWxlcyh0aGlzLnZhbHVlKVxuICAgIH0sXG5cbiAgICBkb3dubG9hZFVybHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWxlcy5tYXAoKGZpbGUsIGluZGV4KSA9PiB0aGlzLmdldERvd25sb2FkVXJsKGZpbGUsIGluZGV4KSlcbiAgICB9LFxuXG4gICAgdGh1bWJuYWlsVXJscygpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbGVzLm1hcCgoZmlsZSwgaW5kZXgpID0+IHRoaXMuZ2V0VGh1bWJuYWlsVXJsKGZpbGUsIGluZGV4KSlcbiAgICB9LFxuXG4gICAgbXVsdGlwbGU6IGdldFNjaGVtYUFjY2Vzc29yKCdtdWx0aXBsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIC8vIE5vIGNhbGxiYWNrIGFzIGl0J3MgdXNlZCBpbiBgcHJvY2Vzc1ZhbHVlKClgXG4gICAgICBjYWxsYmFjazogZmFsc2VcbiAgICB9KSxcblxuICAgIGV4dGVuc2lvbnM6IGdldFNjaGVtYUFjY2Vzc29yKCdleHRlbnNpb25zJywge1xuICAgICAgdHlwZTogW0FycmF5LCBTdHJpbmcsIFJlZ0V4cF1cbiAgICB9KSxcblxuICAgIGFjY2VwdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2FjY2VwdCcsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZ2V0KGFjY2VwdCkge1xuICAgICAgICByZXR1cm4gaXNBcnJheShhY2NlcHQpID8gYWNjZXB0LmpvaW4oJywnKSA6IGFjY2VwdFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4U2l6ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ21heFNpemUnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZ2V0KG1heFNpemUpIHtcbiAgICAgICAgcmV0dXJuIG1heFNpemUgPyBwYXJzZUZpbGVTaXplKG1heFNpemUpIDogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkcmFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkcmFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZHJhZ2dhYmxlKSB7XG4gICAgICAgIHJldHVybiBkcmFnZ2FibGUgJiYgdGhpcy5maWxlcy5sZW5ndGggPiAxXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHJlbmRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbmRlcicsIHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgdGh1bWJuYWlsczogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RodW1ibmFpbHMnLCB7XG4gICAgICB0eXBlOiBbQm9vbGVhbiwgU3RyaW5nXSxcbiAgICAgIGRlZmF1bHQodGh1bWJuYWlscykge1xuICAgICAgICByZXR1cm4gdGh1bWJuYWlscyA/PyAhIXRoaXMuc2NoZW1hLnRodW1ibmFpbFVybFxuICAgICAgfSxcbiAgICAgIGdldCh0aHVtYm5haWxzKSB7XG4gICAgICAgIHJldHVybiB0aHVtYm5haWxzID09PSB0cnVlID8gJ21lZGl1bScgOiB0aHVtYm5haWxzIHx8IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGhhc0ZpbGVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZXMubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBoYXNVcGxvYWRzKCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2Fkcy5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIGlzVXBsb2FkUmVhZHkoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmhhc1VwbG9hZHMgJiZcbiAgICAgICAgISh0aGlzLnVwbG9hZC5hY3RpdmUgfHwgdGhpcy51cGxvYWQudXBsb2FkZWQpXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzVXBsb2FkQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzVXBsb2FkcyAmJiB0aGlzLnVwbG9hZC5hY3RpdmVcbiAgICB9LFxuXG4gICAgdXBsb2FkUHJvZ3Jlc3MoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnVwbG9hZHMucmVkdWNlKCh0b3RhbCwgZmlsZSkgPT4gdG90YWwgKyArZmlsZS5wcm9ncmVzcywgMCkgL1xuICAgICAgICB0aGlzLnVwbG9hZHMubGVuZ3RoXG4gICAgICApXG4gICAgfSxcblxuICAgIHVwbG9hZFBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZVVybCh7XG4gICAgICAgIHR5cGU6ICd1cGxvYWQnLFxuICAgICAgICBwYXRoOiB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGlzVXBsb2FkUmVhZHkocmVhZHkpIHtcbiAgICAgIGlmIChyZWFkeSkge1xuICAgICAgICAvLyBBdXRvLXVwbG9hZC5cbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBsb2FkLmFjdGl2ZSA9IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvcm1hdEZpbGVTaXplLFxuXG4gICAgZ2V0RmlsZUNvbnRleHQoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlXG4gICAgICAgID8gbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIHZhbHVlOiBmaWxlLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5maWxlcyxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgZGF0YVBhdGg6IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgIH0pXG4gICAgICAgIDogdGhpcy5jb250ZXh0XG4gICAgfSxcblxuICAgIHJlbmRlckZpbGUoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcih0aGlzLmdldEZpbGVDb250ZXh0KGZpbGUsIGluZGV4KSlcbiAgICB9LFxuXG4gICAgZ2V0RG93bmxvYWRVcmwoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBmaWxlLnVybFxuICAgICAgICA/IGZpbGUudXJsXG4gICAgICAgIDogIWZpbGUudXBsb2FkIHx8IGZpbGUudXBsb2FkLnN1Y2Nlc3NcbiAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2Rvd25sb2FkVXJsJywge1xuICAgICAgICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICAgICAgY29udGV4dDogdGhpcy5nZXRGaWxlQ29udGV4dChmaWxlLCBpbmRleClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdldFRodW1ibmFpbFVybChmaWxlLCBpbmRleCkge1xuICAgICAgcmV0dXJuICFmaWxlLnVwbG9hZCB8fCBmaWxlLnVwbG9hZC5zdWNjZXNzXG4gICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgndGh1bWJuYWlsVXJsJywge1xuICAgICAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgICAgY29udGV4dDogdGhpcy5nZXRGaWxlQ29udGV4dChmaWxlLCBpbmRleClcbiAgICAgICAgICB9KSB8fCAoXG4gICAgICAgICAgICBmaWxlLnR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJylcbiAgICAgICAgICAgICAgPyBmaWxlLnVybFxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICApXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBkZWxldGVGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IGZpbGVcblxuICAgICAgaWYgKFxuICAgICAgICBmaWxlICYmXG4gICAgICAgIHdpbmRvdy5jb25maXJtKFxuICAgICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLnJlbW92ZX0gJHtuYW1lfT9gXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbGUudXBsb2FkKSB7XG4gICAgICAgICAgdGhpcy51cGxvYWQucmVtb3ZlKGZpbGUudXBsb2FkKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICAgIHRleHQ6IGAke25hbWV9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRGaWxlSW5kZXgoZmlsZSkge1xuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgJiYgdGhpcy52YWx1ZVxuICAgICAgICA/IHRoaXMudmFsdWUuZmluZEluZGV4KGl0ID0+IGl0LmlkID09PSBmaWxlLmlkKVxuICAgICAgICA6IC0xXG4gICAgfSxcblxuICAgIGFkZEZpbGUoZmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goZmlsZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gW2ZpbGVdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBmaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlcGxhY2VGaWxlKGZpbGUsIG5ld0ZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRGaWxlSW5kZXgoZmlsZSlcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBpZiAobmV3RmlsZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZVtpbmRleF0gPSBuZXdGaWxlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld0ZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlRmlsZShmaWxlKSB7XG4gICAgICB0aGlzLnJlcGxhY2VGaWxlKGZpbGUsIG51bGwpXG4gICAgfSxcblxuICAgIG9uSW5wdXRGaWxlKG5ld0ZpbGUsIG9sZEZpbGUpIHtcbiAgICAgIGlmIChuZXdGaWxlICYmICFvbGRGaWxlKSB7XG4gICAgICAgIGNvbnN0IHsgaWQsIG5hbWUsIHNpemUgfSA9IG5ld0ZpbGVcbiAgICAgICAgdGhpcy5hZGRGaWxlKHsgaWQsIG5hbWUsIHNpemUsIHVwbG9hZDogbmV3RmlsZSB9KVxuICAgICAgfVxuICAgICAgaWYgKG5ld0ZpbGUgJiYgb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IHN1Y2Nlc3MsIGVycm9yIH0gPSBuZXdGaWxlXG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgICAgY29uc3QgZmlsZSA9IG5ld0ZpbGUucmVzcG9uc2VbMF1cbiAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgZmlsZS51cGxvYWQgPSBuZXdGaWxlXG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSB1cGxvYWQgZmlsZSBvYmplY3Qgd2l0aCB0aGUgZmlsZSBvYmplY3QgcmVjZWl2ZWRcbiAgICAgICAgICAgIC8vIGZyb20gdGhlIHVwbG9hZCByZXNwb25zZS5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUZpbGUobmV3RmlsZSwgZmlsZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGVycm9yKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgICAgY29uc3QgdGV4dCA9IChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWJvcnQ6ICdVcGxvYWQgYWJvcnRlZCcsXG4gICAgICAgICAgICAgIGRlbmllZDogJ1VwbG9hZCBkZW5pZWQnLFxuICAgICAgICAgICAgICBleHRlbnNpb246IGBVbnN1cHBvcnRlZCBmaWxlLXR5cGU6ICR7bmV3RmlsZS5uYW1lfWAsXG4gICAgICAgICAgICAgIG5ldHdvcms6ICdOZXR3b3JrIGVycm9yIGVuY291bnRlcmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgICBzZXJ2ZXI6ICdTZXJ2ZXIgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICAgIHNpemU6IGBGaWxlIGlzIHRvbyBsYXJnZTogJHtmb3JtYXRGaWxlU2l6ZShuZXdGaWxlLnNpemUpfWAsXG4gICAgICAgICAgICAgIHRpbWVvdXQ6ICdUaW1lb3V0IG9jY3VycmVkIGR1cmluZyB1cGxvYWQnXG4gICAgICAgICAgICB9W2Vycm9yXSB8fFxuICAgICAgICAgICAgYFVua25vd24gRmlsZSBVcGxvYWQgRXJyb3I6ICcke2Vycm9yfSdgXG4gICAgICAgICAgKVxuICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICB0aXRsZTogJ0ZpbGUgVXBsb2FkIEVycm9yJyxcbiAgICAgICAgICAgIHRleHRcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uSW5wdXRGaWx0ZXIobmV3RmlsZSAvKiwgb2xkRmlsZSwgcHJldmVudCAqLykge1xuICAgICAgY29uc3QgeGhyID0gbmV3RmlsZT8ueGhyXG4gICAgICBpZiAodGhpcy5hcGkuY29ycz8uY3JlZGVudGlhbHMgJiYgeGhyICYmICF4aHIud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ2xpY2tEb3dubG9hZChmaWxlLCBpbmRleCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh0aGlzLmRvd25sb2FkVXJsc1tpbmRleF0pXG4gICAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCByZXNwb25zZS5ibG9iKClcbiAgICAgICAgdGhpcy5kb3dubG9hZCh7XG4gICAgICAgICAgZmlsZW5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICB1cmw6IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYilcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQ2xpY2tVcGxvYWQoZXZlbnQpIHtcbiAgICAgIC8vIERlbGVnYXRlIHRoZSBjbGljayBldmVudCB0byB0aGUgaGlkZGVuIGZpbGUgaW5wdXQuXG4gICAgICB0aGlzLnVwbG9hZC4kZWwucXVlcnlTZWxlY3RvcignaW5wdXQnKS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgZXZlbnQuY29uc3RydWN0b3IoZXZlbnQudHlwZSwgZXZlbnQpXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgLy8gRmlsdGVyIG91dCBhbGwgbmV3bHkgYWRkZWQgZmlsZXMgdGhhdCB3ZXJlbid0IGFjdHVhbGx5IHVwbG9hZGVkLlxuICAgIGNvbnN0IGZpbGVzID0gYXNGaWxlcyh2YWx1ZSlcbiAgICAgIC5tYXAoKHsgdXBsb2FkLCAuLi5maWxlIH0pID0+ICghdXBsb2FkIHx8IHVwbG9hZC5zdWNjZXNzID8gZmlsZSA6IG51bGwpKVxuICAgICAgLmZpbHRlcihmaWxlID0+IGZpbGUpXG4gICAgcmV0dXJuIHNjaGVtYS5tdWx0aXBsZSA/IGZpbGVzIDogZmlsZXNbMF0gfHwgbnVsbFxuICB9XG59KVxuXG5mdW5jdGlvbiBhc0ZpbGVzKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA/IGFzQXJyYXkodmFsdWUpIDogW11cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXVwbG9hZCB7XG4gIC5kaXRvLXRhYmxlIHtcbiAgICB0cixcbiAgICAuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIH1cbiAgfVxuXG4gICZfX3NpemUsXG4gICZfX3N0YXR1cyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuXG4gICYgJl9faW5wdXQge1xuICAgIC8vIFNlZSBgb25DbGlja1VwbG9hZCgpYCBtZXRob2QgZm9yIGRldGFpbHMuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cblxuICAmX19mb290ZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICAgLmRpdG8tcHJvZ3Jlc3Mge1xuICAgICAgZmxleDogYXV0bztcbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBtb3VudGVkKG5vZGUsIGJpbmRpbmcpIHtcbiAgICBvYnNlcnZlUmVzaXplKG5vZGUsIGJpbmRpbmcudmFsdWUsIGJpbmRpbmcuYXJnKVxuICB9LFxuXG4gIHVubW91bnRlZChub2RlLCBiaW5kaW5nKSB7XG4gICAgdW5vYnNlcnZlUmVzaXplKG5vZGUsIGJpbmRpbmcudmFsdWUsIGJpbmRpbmcuYXJnKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZlUmVzaXplKG5vZGUsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgT2JzZXJ2ZXIuZ2V0T2JzZXJ2ZXIob3B0aW9ucykub2JzZXJ2ZShub2RlLCBoYW5kbGVyKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5vYnNlcnZlUmVzaXplKG5vZGUsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgT2JzZXJ2ZXIuZ2V0T2JzZXJ2ZXIob3B0aW9ucykudW5vYnNlcnZlKG5vZGUsIGhhbmRsZXIpXG59XG5cbmV4cG9ydCBjb25zdCBpc1Jlc2l6ZVN1cHBvcnRlZCA9IHR5cGVvZiBSZXNpemVPYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCdcblxuY29uc3Qgb2JzZXJ2ZXJzID0ge31cblxuY2xhc3MgT2JzZXJ2ZXIge1xuICBjb25zdHJ1Y3RvcihrZXksIG9wdGlvbnMpIHtcbiAgICB0aGlzLmtleSA9IGtleVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcbiAgICB0aGlzLm9ic2VydmVyID0gaXNSZXNpemVTdXBwb3J0ZWRcbiAgICAgID8gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT4gdGhpcy5oYW5kbGUoZW50cmllcykpXG4gICAgICA6IG51bGxcbiAgICB0aGlzLmhhbmRsZXJzQnlOb2RlID0gbmV3IFdlYWtNYXAoKVxuICAgIHRoaXMubm9kZUNvdW50ID0gMFxuICB9XG5cbiAgb2JzZXJ2ZShub2RlLCBoYW5kbGVyKSB7XG4gICAgbGV0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVyc0J5Tm9kZS5nZXQobm9kZSlcbiAgICBpZiAoIWhhbmRsZXJzKSB7XG4gICAgICBoYW5kbGVycyA9IG5ldyBTZXQoKVxuICAgICAgdGhpcy5oYW5kbGVyc0J5Tm9kZS5zZXQobm9kZSwgaGFuZGxlcnMpXG4gICAgICB0aGlzLm9ic2VydmVyPy5vYnNlcnZlKG5vZGUsIHRoaXMub3B0aW9ucylcbiAgICAgIHRoaXMubm9kZUNvdW50KytcbiAgICB9XG4gICAgaGFuZGxlcnMuYWRkKGhhbmRsZXIpXG4gIH1cblxuICB1bm9ic2VydmUobm9kZSwgaGFuZGxlcikge1xuICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVyc0J5Tm9kZS5nZXQobm9kZSlcbiAgICBpZiAoaGFuZGxlcnM/LmRlbGV0ZShoYW5kbGVyKSAmJiBoYW5kbGVycy5zaXplID09PSAwKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzQnlOb2RlLmRlbGV0ZShub2RlKVxuICAgICAgdGhpcy5vYnNlcnZlcj8udW5vYnNlcnZlKG5vZGUpXG4gICAgICBpZiAoLS10aGlzLm5vZGVDb3VudCA9PT0gMCkge1xuICAgICAgICBkZWxldGUgb2JzZXJ2ZXJzW3RoaXMua2V5XVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZShlbnRyaWVzKSB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnNCeU5vZGUuZ2V0KGVudHJ5LnRhcmdldClcbiAgICAgIGlmIChoYW5kbGVycykge1xuICAgICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgICB0YXJnZXQ6IGVudHJ5LnRhcmdldCxcbiAgICAgICAgICBjb250ZW50UmVjdDogZW50cnkuY29udGVudFJlY3QsXG4gICAgICAgICAgLy8gVXNlIGBhc0FycmF5YCBzaW5jZSBGaXJlZm94IGJlZm9yZSB2OTIgcmV0dXJucyB0aGVzZSBhcyBvYmplY3RzOlxuICAgICAgICAgIGJvcmRlckJveFNpemU6IGFzQXJyYXkoZW50cnkuYm9yZGVyQm94U2l6ZSksXG4gICAgICAgICAgY29udGVudEJveFNpemU6IGFzQXJyYXkoZW50cnkuY29udGVudEJveFNpemUpLFxuICAgICAgICAgIGRldmljZVBpeGVsQ29udGVudEJveFNpemU6IGFzQXJyYXkoZW50cnkuZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZSlcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaGFuZGxlcnMpIHtcbiAgICAgICAgICBoYW5kbGVyKGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldE9ic2VydmVyKHsgYm94ID0gJ2NvbnRlbnQtYm94JyB9ID0ge30pIHtcbiAgICBjb25zdCBvcHRpb25zID0geyBib3ggfVxuICAgIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpXG4gICAgb2JzZXJ2ZXJzW2tleV0gfHw9IG5ldyBPYnNlcnZlcihrZXksIG9wdGlvbnMpXG4gICAgcmV0dXJuIG9ic2VydmVyc1trZXldXG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IFtcbiAgJ2NyZWF0ZScsICdjcmVhdGVkJyxcbiAgJ3NhdmUnLCAnc2F2ZWQnLFxuICAnYXBwbHknLCAnYXBwbGllZCcsXG4gICdzdWJtaXQnLCAnc3VibWl0dGVkJyxcbiAgJ2RlbGV0ZScsICdkZWxldGVkJyxcbiAgJ3JlbW92ZScsICdyZW1vdmVkJyxcbiAgJ2NsZWFyJywgJ2NsZWFyZWQnLFxuICAnZWRpdCcsICdlZGl0ZWQnLFxuICAnY2xvc2UnLCAnY2xvc2VkJyxcbiAgJ2NhbmNlbCcsICdjYW5jZWxsZWQnLFxuICAnZHJhZycsICdkcmFnZ2VkJyxcbiAgJ2xvZ2luJywgJ2xvZ2dlZCBpbidcbl0ucmVkdWNlKCh2ZXJicywgdmVyYikgPT4ge1xuICB2ZXJic1t2ZXJiXSA9IHZlcmJcbiAgcmV0dXJuIHZlcmJzXG59LCB7fSlcbiIsImltcG9ydCB7IGNyZWF0ZUFwcCwgaCBhcyBjcmVhdGVFbGVtZW50IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVyLCBjcmVhdGVXZWJIaXN0b3J5IH0gZnJvbSAndnVlLXJvdXRlcidcbmltcG9ydCBWdWVOb3RpZmljYXRpb25zIGZyb20gJ0BreXZnL3Z1ZTMtbm90aWZpY2F0aW9uJ1xuaW1wb3J0IHtcbiAgaXNTdHJpbmcsXG4gIGlzQWJzb2x1dGVVcmwsXG4gIGFzc2lnbkRlZXBseSxcbiAgaHlwaGVuYXRlLFxuICBjYW1lbGl6ZSxcbiAgZGVmYXVsdEZvcm1hdHMsXG4gIGRlcHJlY2F0ZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgY29tcG9uZW50cyBmcm9tICcuL2NvbXBvbmVudHMvaW5kZXguanMnXG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuL3R5cGVzL2luZGV4LmpzJ1xuaW1wb3J0IERpdG9Sb290IGZyb20gJy4vY29tcG9uZW50cy9EaXRvUm9vdC52dWUnXG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBSZXNpemVEaXJlY3RpdmUgZnJvbSAnLi9kaXJlY3RpdmVzL3Jlc2l6ZS5qcydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGZvcm1hdFF1ZXJ5IH0gZnJvbSAnLi91dGlscy9yb3V0ZS5qcydcbmltcG9ydCB2ZXJicyBmcm9tICcuL3ZlcmJzLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQWRtaW4ge1xuICBjb25zdHJ1Y3RvcihlbCwge1xuICAgIC8vIGBkaXRvYCBjb250YWlucyB0aGUgYmFzZSBhbmQgYXBpIHNldHRpbmdzIHBhc3NlZCBmcm9tIGBBZG1pbkNvbnRyb2xsZXJgXG4gICAgZGl0byA9IHt9LFxuICAgIGFwaSxcbiAgICB2aWV3cyA9IHt9LFxuICAgIC4uLm9wdGlvbnNcbiAgfSA9IHt9KSB7XG4gICAgdGhpcy5lbCA9IGVsXG4gICAgLy8gTWVyZ2UgaW4gYGFwaWAgc2V0dGluZ3MgYXMgcGFzc2VkIGZyb20gYGNvbmZpZy5hZG1pbmAgYW5kIHRocm91Z2ggdGhlXG4gICAgLy8gYEFkbWluQ29udHJvbGxlcmAgd2l0aCBgYXBpYCB2YWx1ZXMgZnJvbSBmcm9tICdhZG1pbi9pbmRleC5qcydcbiAgICAvLyBOT1RFOiBgQWRtaW5Db250cm9sbGVyYCBwcm92aWRlcyBgZGl0by5hcGkuYmFzZWBcbiAgICB0aGlzLmFwaSA9IGFwaSA9IGFzc2lnbkRlZXBseSh7IGJhc2U6ICcvJyB9LCBkaXRvLmFwaSwgYXBpKVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcblxuICAgIC8vIFNldHVwIGRlZmF1bHQgYXBpIHNldHRpbmdzOlxuICAgIGFwaS5sb2NhbGUgfHw9ICdlbi1VUydcbiAgICBhcGkuZm9ybWF0cyA9IGFzc2lnbkRlZXBseSh7fSwgZGVmYXVsdEZvcm1hdHMsIGFwaS5mb3JtYXRzKVxuICAgIGFwaS5yZXF1ZXN0IHx8PSBvcHRpb25zID0+IHJlcXVlc3QoYXBpLCBvcHRpb25zKVxuICAgIGFwaS5nZXRBcGlVcmwgfHw9IG9wdGlvbnMgPT4gZ2V0QXBpVXJsKGFwaSwgb3B0aW9ucylcbiAgICBhcGkuaXNBcGlVcmwgfHw9IHVybCA9PiBpc0FwaVVybChhcGksIHVybClcbiAgICAvLyBTZXR0aW5nIGBhcGkubm9ybWFsaXplUGF0aHMgPSB0cnVlIChwbHVyYWwpIHNldHMgYm90aDpcbiAgICAvLyBgYXBpLm5vcm1hbGl6ZVBhdGggPSBoeXBoZW5hdGVgIGFuZCBgYXBpLmRlbm9ybWFsaXplUGF0aCA9IGNhbWVsaXplYFxuICAgIGFwaS5ub3JtYWxpemVQYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aHMgPyBoeXBoZW5hdGUgOiB2YWwgPT4gdmFsXG4gICAgYXBpLmRlbm9ybWFsaXplUGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGhzID8gY2FtZWxpemUgOiB2YWwgPT4gdmFsXG5cbiAgICAvLyBBbGxvdyBkZWZpbml0aW9uIG9mIGRlZmF1bHRzIGZvciBhZG1pbiBjb21wb25lbnQgdHlwZXMsIG5lc3RlZCBwZXIgdHlwZTpcbiAgICAvLyBhcGkuZGVmYXVsdHMgPSB7XG4gICAgLy8gICAnbXVsdGlzZWxlY3QnOiB7XG4gICAgLy8gICAgIHNlbGVjdGFibGU6IHRydWVcbiAgICAvLyAgIH0sXG4gICAgLy8gICAnZmFrZS10eXBlJzogc2NoZW1hID0+IHtcbiAgICAvLyAgICAgLy8gUmV0dXJuIGRlZmF1bHRzLCBvciBkaXJlY3RseSBtb2RpZnkgdGhlIHNjaGVtYTpcbiAgICAvLyAgICAgT2JqZWN0LmFzc2lnbihzY2hlbWEsIHtcbiAgICAvLyAgICAgICB0eXBlOiAncmVhbC10eXBlJyxcbiAgICAvLyAgICAgICBmb3JtYXQ6ICh7IHZhbHVlIH0pID0+IGBGb3JtYXR0ZWQgJHt2YWx1ZX1gLFxuICAgIC8vICAgICAgIHByb2Nlc3M6ICh7IHZhbHVlIH0pID0+IGBQcm9jZXNzZWQgJHt2YWx1ZX1gXG4gICAgLy8gICAgIH0pXG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG4gICAgYXBpLmRlZmF1bHRzIHx8PSB7fVxuXG4gICAgLy8gQWxsb3cgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYWxsIGF1dGggcmVzb3VyY2VzLCBsaWtlIHNvOlxuICAgIC8vIGFwaS51c2VycyA9IHtcbiAgICAvLyAgIHBhdGg6ICcvYWRtaW5zJyxcbiAgICAvLyAgIC8vIFRoZXNlIGFyZSB0aGUgZGVmYXVsdHM6XG4gICAgLy8gICBsb2dpbjoge1xuICAgIC8vICAgICBwYXRoOiAnbG9naW4nLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIGxvZ291dDoge1xuICAgIC8vICAgICBwYXRoOiAnbG9nb3V0JyxcbiAgICAvLyAgICAgbWV0aG9kOiAncG9zdCdcbiAgICAvLyAgIH0sXG4gICAgLy8gICBzZXNzaW9uOiB7XG4gICAgLy8gICAgIHBhdGg6ICdzZXNzaW9uJyxcbiAgICAvLyAgICAgbWV0aG9kOiAnZ2V0J1xuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICBjb25zdCB1c2VycyA9IGdldFJlc291cmNlKGFwaS51c2Vycywge1xuICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nXG4gICAgfSkgfHwge31cbiAgICB1c2Vycy5sb2dpbiA9IGdldFJlc291cmNlKHVzZXJzLmxvZ2luIHx8ICdsb2dpbicsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMubG9nb3V0ID0gZ2V0UmVzb3VyY2UodXNlcnMubG9nb3V0IHx8ICdsb2dvdXQnLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIHVzZXJzLnNlc3Npb24gPSBnZXRSZXNvdXJjZSh1c2Vycy5zZXNzaW9uIHx8ICdzZXNzaW9uJywge1xuICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIGFwaS51c2VycyA9IHVzZXJzXG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIG9mIHJlc291cmNlIHBhdGggaGFuZGxlcnM6XG4gICAgLy8gYXBpLnJlc291cmNlcyA9IHtcbiAgICAvLyAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAvLyAgICAgcmV0dXJuIHJlc291cmNlLnBhcmVudFxuICAgIC8vICAgICAgID8gYCR7cmVzb3VyY2UucGF0aH0/JHtyZXNvdXJjZS5wYXJlbnQucGF0aH1faWQ9JHtcbiAgICAvLyAgICAgICAgICByZXNvdXJjZS5wYXJlbnQuaWR9YFxuICAgIC8vICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgICBhbnkocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXNbcmVzb3VyY2U/LnR5cGVdIHx8IHRoaXMuZGVmYXVsdFxuICAgICAgICByZXR1cm4gcmVzb3VyY2UgJiYgaGFuZGxlci5jYWxsKHRoaXMsIHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgZGVmYXVsdChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gdGhpcy5hbnkocmVzb3VyY2UucGFyZW50KVxuICAgICAgICByZXR1cm4gcGFyZW50UGF0aFxuICAgICAgICAgID8gYCR7cGFyZW50UGF0aH0vJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAgIH0sXG5cbiAgICAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdChyZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIG1lbWJlcihyZXNvdXJjZSkge1xuICAgICAgICAvLyBOT1RFOiBXZSBhc3N1bWUgdGhhdCBhbGwgbWVtYmVycyBoYXZlIHJvb3QtbGV2ZWwgY29sbGVjdGlvbiByb3V0ZXMsXG4gICAgICAgIC8vIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBuZXN0aW5nIG9mIChzdWItKWNvbGxlY3Rpb24gcm91dGVzLlxuICAgICAgICByZXR1cm4gYCR7cmVzb3VyY2UucGF0aH0vJHtyZXNvdXJjZS5pZH1gXG4gICAgICB9LFxuXG4gICAgICB1cGxvYWQocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gRGl0byBTZXJ2ZXIgaGFuZGxlcyB1cGxvYWQgcm91dGVzIG9uIHRoZSBjb2xsZWN0aW9uIHJlc291cmNlOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb2xsZWN0aW9uKHJlc291cmNlLnBhcmVudCl9L3VwbG9hZC8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgfSxcblxuICAgICAgLi4uYXBpLnJlc291cmNlc1xuICAgIH1cblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgLyBleHRlbmRpbmcgb2YgaGVhZGVyczpcbiAgICAvLyBhcGkuaGVhZGVycyA9IHtcbiAgICAvLyAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAvLyB9XG4gICAgYXBpLmhlYWRlcnMgPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgLi4uYXBpLmhlYWRlcnNcbiAgICB9XG5cbiAgICBpZiAoaXNTdHJpbmcoZWwpKSB7XG4gICAgICBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpXG4gICAgfVxuXG4gICAgY29uc3QgYXBwID0gKHRoaXMuYXBwID0gY3JlYXRlQXBwKHtcbiAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgRGl0b1Jvb3QsXG4gICAgICAgIFZ1ZU5vdGlmaWNhdGlvbnMsXG4gICAgICAgIC8vIFRoaXMgbWF5IG9ubHkgYmUgbmVlZGVkIHRvIGF2b2lkIHRyZWUtc2hhY2tpbmcgb2YgdGhlc2UgY29tcG9uZW50cyxcbiAgICAgICAgLy8gc2luY2UgdGhleSBhY3R1YWxseSBoYW5kbGUgcmVnaXN0cnkgaW50ZXJuYWxseSBhbHJlYWR5LlxuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBvbmNlIHdlIGhhdmUgYSBiZXR0ZXIgc29sdXRpb24uXG4gICAgICAgIC4uLmNvbXBvbmVudHMsXG4gICAgICAgIC4uLnR5cGVzXG4gICAgICB9LFxuXG4gICAgICAvLyBNb3N0IGluamVjdHMgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZSByZWFjdGl2ZW5lc3MgYWNyb3NzXG4gICAgICAvLyBwcm92aWRlL2luamVjdCwgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgICBwcm92aWRlOiB7XG4gICAgICAgIGFwaSxcbiAgICAgICAgLy8gQSBkZWZhdWx0IGxpc3Qgb2YgdmVyYnMgYXJlIHByb3ZpZGVkIGJ5ICR2ZXJicygpIGFuZCBjYW4gYmVcbiAgICAgICAgLy8gb3ZlcnJpZGRlbiBhdCBhbnkgcG9pbnQgaW4gdGhlIGNvbXBvbmVudCBoaWVyYXJjaHkuXG4gICAgICAgICR2ZXJiczogKCkgPT4gdmVyYnMsXG4gICAgICAgIC8vIFByb3ZpZGUgZGVmYXVsdHMgc28gRGl0b01peGluIGNhbiBpbmplY3QgdGhlbSBmb3IgYWxsIGNvbXBvbmVudHM6XG4gICAgICAgIC8vICAgaW5qZWN0OiBbICAnJGlzUG9wdWxhdGVkJywgJyRzY2hlbWFDb21wb25lbnQnLCAnJHJvdXRlQ29tcG9uZW50JyBdXG4gICAgICAgICR2aWV3czogKCkgPT4ge30sXG4gICAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdHJ1ZSxcbiAgICAgICAgJHBhcmVudENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNjaGVtYUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNjaGVtYVBhcmVudENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGF0YUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHJlbmRlcjogKCkgPT5cbiAgICAgICAgY3JlYXRlRWxlbWVudChEaXRvUm9vdCwge1xuICAgICAgICAgIHJlZjogJ3Jvb3QnLFxuICAgICAgICAgIGNsYXNzOiBkaXRvLnNldHRpbmdzLnJvb3RDbGFzcyxcbiAgICAgICAgICB1bnJlc29sdmVkVmlld3M6IHZpZXdzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgfSlcbiAgICB9KSlcblxuICAgIC8vIFByZXZlbnQgZW5kbGVzcyBsb29wcyBvZiBlcnJvciBtZXNzYWdlcyBkdXJpbmcgcmVuZGVyIGZ1bmN0aW9ucyBieVxuICAgIC8vIHNldHRpbmcgYSBjdXN0b20gZXJyb3IgaGFuZGxlci5cbiAgICBhcHAuY29uZmlnLmVycm9ySGFuZGxlciA9IGNvbnNvbGUuZXJyb3JcblxuICAgIGFwcC51c2UoVnVlTm90aWZpY2F0aW9ucywge1xuICAgICAgY29tcG9uZW50TmFtZTogJ1Z1ZU5vdGlmaWNhdGlvbnMnLFxuICAgICAgbmFtZTogJ25vdGlmeSdcbiAgICB9KVxuXG4gICAgYXBwLmRpcmVjdGl2ZSgncmVzaXplJywgUmVzaXplRGlyZWN0aXZlKVxuXG4gICAgYXBwLnVzZShcbiAgICAgIGNyZWF0ZVJvdXRlcih7XG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBjYXRjaC1hbGwgcm91dGUsIHRvIGJlIHJlcGxhY2VkIGJ5IHRoZSBhY3R1YWwgcm91dGVzXG4gICAgICAgIC8vIG9uY2UgdGhlIHNjaGVtYXMgYXJlIGxvYWRlZCwgdG8gcHJldmVudCB2dWUtcm91dGVyIGZyb20gY29tcGxhaW5pbmcsXG4gICAgICAgIC8vIHNlZTogYHJlc29sdmVWaWV3cygpYCBpbiBgRGl0b1Jvb3RgIGZvciB0aGUgYWN0dWFsIHJvdXRlIHNldHVwLlxuICAgICAgICByb3V0ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnY2F0Y2gtYWxsJyxcbiAgICAgICAgICAgIHBhdGg6ICcvOl8oLiopJyxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHt9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBoaXN0b3J5OiBjcmVhdGVXZWJIaXN0b3J5KGRpdG8uYmFzZSksXG4gICAgICAgIGxpbmtBY3RpdmVDbGFzczogJycsXG4gICAgICAgIGxpbmtFeGFjdEFjdGl2ZUNsYXNzOiAnJ1xuICAgICAgfSlcbiAgICApXG5cbiAgICBlbC5jbGFzc0xpc3QuYWRkKCdkaXRvLWFwcCcpXG4gICAgYXBwLm1vdW50KGVsKVxuICB9XG5cbiAgcmVnaXN0ZXIodHlwZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcih0eXBlLCBvcHRpb25zKVxuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBzdXBlcihcbiAgICAgIGBSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlOiAke3Jlc3BvbnNlLnN0YXR1c30gKCR7XG4gICAgICAgIHJlc3BvbnNlLnN0YXR1c1RleHRcbiAgICAgIH0pYFxuICAgIClcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2VcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0KGFwaSwge1xuICB1cmwsXG4gIG1ldGhvZCA9ICdnZXQnLFxuICAvLyBUT0RPOiBgcmVxdWVzdC5wYXJhbXNgIHdhcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBgcXVlcnlgIG9uIDIwMjItMTEtMDEsXG4gIC8vIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55IG1vcmUuXG4gIHBhcmFtcyA9IG51bGwsXG4gIHF1ZXJ5ID0gcGFyYW1zIHx8IG51bGwsXG4gIGhlYWRlcnMgPSBudWxsLFxuICBkYXRhID0gbnVsbCxcbiAgc2lnbmFsID0gbnVsbFxufSkge1xuICBpZiAocGFyYW1zKSB7XG4gICAgZGVwcmVjYXRlKFxuICAgICAgYHJlcXVlc3QucGFyYW1zIGlzIGRlcHJlY2F0ZWQuIFVzZSBhY3Rpb24ubWV0aG9kIGFuZCBhY3Rpb24ucGF0aCBpbnN0ZWFkLmBcbiAgICApXG4gIH1cblxuICBjb25zdCBpc0FwaVVybCA9IGFwaS5pc0FwaVVybCh1cmwpXG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChhcGkuZ2V0QXBpVXJsKHsgdXJsLCBxdWVyeSB9KSwge1xuICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgLi4uKGRhdGEgJiYgeyBib2R5OiBKU09OLnN0cmluZ2lmeShkYXRhKSB9KSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi4oaXNBcGlVcmwgJiYgYXBpLmhlYWRlcnMpLFxuICAgICAgLi4uaGVhZGVyc1xuICAgIH0sXG4gICAgY3JlZGVudGlhbHM6XG4gICAgICBpc0FwaVVybCAmJiBhcGkuY29ycz8uY3JlZGVudGlhbHNcbiAgICAgICAgPyAnaW5jbHVkZSdcbiAgICAgICAgOiAnc2FtZS1vcmlnaW4nLFxuICAgIHNpZ25hbFxuICB9KVxuXG4gIGlmIChyZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk/LmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICByZXNwb25zZS5kYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gIH1cblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcihyZXNwb25zZSlcbiAgfVxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuZnVuY3Rpb24gaXNBcGlVcmwoYXBpLCB1cmwpIHtcbiAgcmV0dXJuICFpc0Fic29sdXRlVXJsKHVybCkgfHwgdXJsLnN0YXJ0c1dpdGgoYXBpLnVybClcbn1cblxuZnVuY3Rpb24gZ2V0QXBpVXJsKGFwaSwgeyB1cmwsIHF1ZXJ5IH0pIHtcbiAgaWYgKCF1cmwuc3RhcnRzV2l0aChhcGkudXJsKSAmJiAhaXNBYnNvbHV0ZVVybCh1cmwpKSB7XG4gICAgdXJsID0gY29tYmluZVVybHMoYXBpLnVybCwgdXJsKVxuICB9XG4gIC8vIFN1cHBvcnQgb3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVycywgdG8gYmUgYXJlIGFkZGVkIHRvIHRoZSBVUkwuXG4gIGNvbnN0IHNlYXJjaCA9IGZvcm1hdFF1ZXJ5KHF1ZXJ5KVxuICByZXR1cm4gc2VhcmNoID8gYCR7dXJsfSR7dXJsLmluY2x1ZGVzKCc/JykgPyAnJicgOiAnPyd9JHtzZWFyY2h9YCA6IHVybFxufVxuXG5mdW5jdGlvbiBjb21iaW5lVXJscyhiYXNlVXJsLCByZWxhdGl2ZVVybCkge1xuICAvLyBVc2Ugc2FtZSBhcHByb2FjaCBhcyBheGlvcyBgY29tYmluZVVSTHMoKWAgdG8gam9pbiBiYXNlVXJsICYgcmVsYXRpdmVVcmw6XG4gIHJldHVybiBgJHtiYXNlVXJsLnJlcGxhY2UoL1xcLyskLywgJycpfS8ke3JlbGF0aXZlVXJsLnJlcGxhY2UoL15cXC8rLywgJycpfWBcbn1cbiJdLCJuYW1lcyI6WyJwYXJzZVVzZXJBZ2VudCIsInVzZXJBZ2VudCIsImFnZW50IiwidWEiLCJvcyIsInBsYXRmb3JtIiwibWF0Y2giLCJicm93c2VyIiwidjEiLCJ2MiIsInJ2IiwidmVyc2lvbiIsImFwcFN0YXRlIiwicmVhY3RpdmUiLCJhcHBlbmREYXRhUGF0aCIsImRhdGFQYXRoIiwidG9rZW4iLCJwYXJzZVBhcmVudERhdGFQYXRoIiwicGF0aCIsInBhcnNlRGF0YVBhdGgiLCJwYXJzZUl0ZW1EYXRhUGF0aCIsIm5lc3RlZCIsImdldEl0ZW1EYXRhUGF0aCIsIm5vcm1hbGl6ZURhdGFQYXRoIiwicGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgiLCJpc0ludGVnZXIiLCJnZXRQYXJlbnRJdGVtRGF0YVBhdGgiLCJnZXRJdGVtIiwicm9vdEl0ZW0iLCJnZXRWYWx1ZUF0RGF0YVBhdGgiLCJnZXRQYXJlbnRJdGVtIiwiZ2V0TGFzdERhdGFQYXRoVG9rZW4iLCJnZXRMYXN0RGF0YVBhdGhOYW1lIiwiZ2V0TGFzdERhdGFQYXRoSW5kZXgiLCJpbmRleCIsInRlbXBvcmFyeUlkIiwic2V0VGVtcG9yYXJ5SWQiLCJkYXRhIiwiaWRLZXkiLCJpc1RlbXBvcmFyeUlkIiwiaWQiLCJpc1JlZmVyZW5jZSIsImhhc093blByb3BlcnR5IiwiY29udGV4dHMiLCJnZXQiLCJjb250ZXh0Iiwia2V5IiwiZGVmYXVsdFZhbHVlIiwib2JqZWN0IiwidG9SYXciLCJ2YWx1ZSIsImlzRnVuY3Rpb24iLCJzZXQiLCJEaXRvQ29udGV4dCIsImNvbXBvbmVudCIsIml0ZW0iLCJvcHRpb25zIiwibG9jYXRpb24iLCJyZXNvdXJjZSIsIkVtaXR0ZXJNaXhpbiIsImV2ZW50IiwiY2FsbGJhY2siLCJpc0FycmF5IiwiZXYiLCJpc1BsYWluT2JqZWN0IiwibGlzdGVuZXJzIiwiY2FsbGJhY2tzIiwib24iLCJhcmdzIiwiZW50cnkiLCJfYSIsImNiIiwicXVldWUiLCJyZXNvbHZlIiwibmV4dCIsInJlc3VsdCIsInJlcyIsImVycm9yIiwidGFyZ2V0IiwiaXNDcmVkaXRDYXJkIiwiZGVjaW1hbHMiLCJpc0RvbWFpbiIsImlzRW1haWwiLCJpc0hvc3RuYW1lIiwibWF4IiwibWluIiwic2V0dGluZ3MiLCJwYXNzd29yZCIsImlzVXJsIiwiVmFsaWRhdGlvbk1peGluIiwibm90aWZ5IiwiaXNWYWxpZCIsInJ1bGUiLCJzZXR0aW5nIiwidmFsaWRhdG9yIiwidmFsaWRhdGlvbnMiLCJ2YWxpZGF0ZSIsIm1lc3NhZ2UiLCJhZGRMYWJlbCIsImVycm9ycyIsImZvY3VzIiwiZ2V0U2NoZW1hQWNjZXNzb3IiLCJrZXlPckRhdGFQYXRoIiwidHlwZSIsImRlZiIsImlzU3RyaW5nIiwibmFtZSIsImdldFN0b3JlQWNjZXNzb3IiLCJUeXBlTWl4aW4iLCJjb21wdXRlVmFsdWUiLCJmb3JtYXQiLCJwYXJzZSIsInNjaGVtYUNvbXBvbmVudCIsIm5vZGUiLCJldmVudHMiLCJjYW1lbGl6ZSIsIm5hdGl2ZUZpZWxkIiwidGV4dEZpZWxkIiwiYXR0cmlidXRlcyIsImFkZCIsIm9uRm9jdXMiLCJvbkJsdXIiLCJvbklucHV0Iiwib25DaGFuZ2UiLCJfYiIsImVsZW1lbnQiLCJhc0FycmF5IiwidWlkTWFwIiwidWlkIiwiZ2V0VWlkIiwiZ2V0SXRlbUlkIiwicmF3IiwiU2NoZW1hR3JhcGgiLCJfX3B1YmxpY0ZpZWxkIiwiZGVmYXVsdHMiLCJzdWJHcmFwaCIsInBhcnQiLCJzY2hlbWEiLCJyZWxhdGVkRGF0YVBhdGgiLCJuYW5vaWQiLCJmbGF0dGVuIiwiZ3JhcGgiLCJlbnRyaWVzIiwiJHNldHRpbmdzIiwic3ViS2V5Iiwic291cmNlU2NoZW1hIiwiY2xpcGJvYXJkIiwiaW50ZXJuYWwiLCJyZWxhdGVkIiwicmVmZXJlbmNlIiwic291cmNlIiwicmVsYXRpb24iLCJ2YWx1ZXMiLCJyZW1vdmVJZCIsInJlZmVyZW5jZUlkIiwicmVmS2V5IiwicmV2VmFsdWUiLCJ0eXBlQ2hlY2tlcnMiLCJpc0Jvb2xlYW4iLCJpc051bWJlciIsImlzRGF0ZSIsImlzT2JqZWN0IiwiaXNSZWdFeHAiLCJ0eXBlQ29udmVydGVycyIsImlzTWF0Y2hpbmdUeXBlIiwidHlwZXMiLCJjb252ZXJ0VHlwZSIsImNvbnZlcnRlciIsInR5cGVDb21wb25lbnRzIiwidW5rbm93blR5cGVSZXBvcnRlZCIsInJlZ2lzdGVyVHlwZUNvbXBvbmVudCIsImdldFR5cGVDb21wb25lbnQiLCJhbGxvd051bGwiLCJpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyIsInNjaGVtYXMiLCJpc1NpbmdsZUNvbXBvbmVudFZpZXciLCJpc1NjaGVtYSIsIml0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzIiwiZ2V0VGFiU2NoZW1hcyIsImZpbmROZXN0ZWRTY2hlbWFDb21wb25lbnQiLCJzb21lTmVzdGVkU2NoZW1hQ29tcG9uZW50IiwiaGFzTmVzdGVkU2NoZW1hQ29tcG9uZW50cyIsImlzRm9ybSIsImlzVmlldyIsImlzVGFiIiwiaXNQYW5lbCIsImlzTWVudSIsImdldFNjaGVtYUlkZW50aWZpZXIiLCJyZXNvbHZlU2NoZW1hIiwidW53cmFwTW9kdWxlIiwiaXNQcm9taXNlIiwiaXNNb2R1bGUiLCJrZXlzIiwicmVzb2x2ZVNjaGVtYXMiLCJ1bnJlc29sdmVkU2NoZW1hcyIsInJlc29sdmVJdGVtIiwibWFwQ29uY3VycmVudGx5IiwicmVzb2x2ZVZpZXdzIiwidW5yZXNvbHZlZFZpZXdzIiwiZmxhdHRlblZpZXdzIiwidmlld3MiLCJyZXNvbHZlU2NoZW1hQ29tcG9uZW50IiwibWFya1JhdyIsIkRpdG9NaXhpbiIsInJlc29sdmVTY2hlbWFDb21wb25lbnRzIiwicHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMiLCJhcGkiLCJyb3V0ZXMiLCJsZXZlbCIsInByb21pc2VzIiwicHJvY2VzcyIsInJlbGF0aXZlTGV2ZWwiLCJwcm9jZXNzU2NoZW1hQ29tcG9uZW50IiwiZ2V0UGFuZWxTY2hlbWFzIiwicHJvY2Vzc1NjaGVtYURlZmF1bHRzIiwicGFuZWwiLCJnZXRUeXBlT3B0aW9ucyIsInByb2Nlc3NWaWV3IiwiZnVsbFBhdGgiLCJwcm9jZXNzUm91dGVTY2hlbWEiLCJjaGlsZHJlbiIsInByb2Nlc3NOZXN0ZWRTY2hlbWFzIiwiYXNzaWduRGVlcGx5IiwicHJvY2Vzc05lc3RlZFNjaGVtYURlZmF1bHRzIiwiZm9ybXMiLCJnZXRGb3JtU2NoZW1hcyIsImZvcm0iLCJwcm9jZXNzRm9ybXMiLCJjb21wb25lbnRzIiwicHJvY2Vzc0Zvcm0iLCJwcm9jZXNzVGFiIiwicHJvY2Vzc1BhbmVsIiwidGFicyIsInBhbmVscyIsInRhYiIsImhhc0Zvcm1TY2hlbWEiLCJoYXNNdWx0aXBsZUZvcm1TY2hlbWFzIiwiZ2V0Vmlld0Zvcm1TY2hlbWEiLCJ2aWV3Iiwidmlld1NjaGVtYSIsImdldFZpZXdTY2hlbWEiLCJoYXNWaWV3U2NoZW1hIiwiZ2V0Vmlld0VkaXRQYXRoIiwibW9kaWZ5Rm9ybSIsImNvbXBhY3QiLCJnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3JtcyIsImdldEl0ZW1Gb3JtU2NoZW1hIiwiaXNDb21wYWN0IiwiaXNJbmxpbmVkIiwiaXNOZXN0ZWQiLCJoYXNMYWJlbCIsImdlbmVyYXRlTGFiZWxzIiwibGFiZWwiLCJvbWl0U3BhY2luZyIsImdldFNjaGVtYVZhbHVlIiwiY29udmVydGVkIiwic2hvdWxkUmVuZGVyU2NoZW1hIiwiZ2V0RGVmYXVsdFZhbHVlIiwiY2xvbmUiLCJpZ25vcmVNaXNzaW5nVmFsdWUiLCJ0eXBlT3B0aW9ucyIsInNldERlZmF1bHRWYWx1ZXMiLCJwcm9jZXNzU2NoZW1hRGF0YSIsInJvb3REYXRhIiwiY29tcHV0ZSIsImNsb25lSXRlbSIsImNvcHkiLCJvcmRlcktleSIsInByb2Nlc3NEYXRhIiwic2NoZW1hT25seSIsInByb2Nlc3NlZERhdGEiLCJ3cmFwUHJpbWl0aXZlcyIsImEiLCJiIiwiaWQxIiwiaWQyIiwiZXhjbHVkZSIsImdldENvbnRleHQiLCJwcm9jZXNzVmFsdWUiLCJwcm9jZXNzQmVmb3JlIiwicHJvY2Vzc0FmdGVyIiwicHJvY2Vzc0NvbXBvbmVudHMiLCJnZXREYXRhUGF0aCIsImNvbXBvbmVudFNjaGVtYSIsImNvbXBvbmVudERhdGFQYXRoIiwicHJvY2Vzc0l0ZW0iLCJpdGVtRGF0YVBhdGgiLCJwcm9jZXNzZWRJdGVtIiwiZ2V0TmFtZWRTY2hlbWFzIiwidG9PYmplY3QiLCJhcnJheSIsInRvU2NoZW1hIiwiZ2V0QnV0dG9uU2NoZW1hcyIsImJ1dHRvbnMiLCJnZXRUeXBlIiwic2NoZW1hT3JUeXBlIiwiZ2V0U291cmNlVHlwZSIsImdldFBhbmVsRW50cnkiLCJ0YWJDb21wb25lbnQiLCJnZXRQYW5lbEVudHJpZXMiLCJwYW5lbFNjaGVtYXMiLCJwYW5lbEVudHJpZXMiLCJnZXRBbGxQYW5lbEVudHJpZXMiLCJwYW5lbFNjaGVtYSIsImlzT2JqZWN0U291cmNlIiwiaXNMaXN0U291cmNlIiwiZ2V0SXRlbVVpZCIsImhhc1Jlc291cmNlIiwiZ2V0UmVzb3VyY2UiLCJwYXJlbnQiLCJkZWZzIiwiZ2V0TWVtYmVyUmVzb3VyY2UiLCJwaWNrQnkiLCJzZWxmIiwibmV4dFVpZCIsImxhYmVsaXplIiwic3RvcmUiLCJvbGRLZXkiLCJ2ZXJiIiwicXVlcnkiLCJ1cmwiLCJtZXRob2QiLCJzaWduYWwiLCJjaGVja1VzZXIiLCJyZXNwb25zZSIsImVxdWFscyIsImNhY2hlIiwiY2FjaGVQYXJlbnQiLCJsb2FkQ2FjaGUiLCJjYWNoZUtleSIsImxvY2FsZSIsImJvZHkiLCJnZXRDb21wdXRlZEFjY2Vzc29yIiwiZ2V0dGVyIiwiY29tcHV0ZWQiLCJhY2Nlc3NvciIsIndhdGNoIiwiaGFuZGxlcnMiLCJleHByIiwiYWRkRXZlbnQiLCJoeXBoZW5hdGUiLCJoYXNMaXN0ZW5lcnMiLCJwYXJlbnRIYXNMaXN0ZW5lcnMiLCJwYXJhbXMiLCJyZXNvbHZlTWVyZ2VkT3B0aW9ucyIsIm1peGlucyIsIm1lcmdlT3B0aW9ucyIsInRvIiwiZnJvbSIsIm1peGluIiwiZGl0b09wdGlvbktleXMiLCJEaXRvQ29tcG9uZW50IiwiZGVmaW5pdGlvbiIsImRlc2NyaWJlRGF0ZSIsImRhdGUiLCJhbHRlckRhdGUiLCJvdmVycmlkZXMiLCJwYXJzZURhdGUiLCJzdHJpbmciLCJ0aW1lIiwidGltZURlZmF1bHQiLCJkYXkiLCJzZXAxIiwibW9udGgiLCJzZXAyIiwieWVhciIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJtaWxsaXNlY29uZCIsImdldERhdGVQYXJ0cyIsImdldE1vbnRoSW5kZXgiLCJpc1ZhbGlkVGltZVBhcnQiLCJnZXREYXRlUGFydEF0UG9zaXRpb24iLCJwb3NpdGlvbiIsInBhcnRzIiwiZ2V0UG9zaXRpb24iLCJsZW5ndGgiLCJwb3MiLCJvZmZzZXQiLCJpc1VTIiwic3RhcnQiLCJlbmQiLCJzaG9ydEZvcm1hdCIsImxvbmdGb3JtYXQiLCJfc2ZjX21haW4iLCJ3ZWVrZGF5TmFtZXMiLCJtb250aE5hbWVzIiwiZ2V0TG9jYWxlTmFtZXMiLCJtb2RlIiwidXBkYXRlIiwic3RlcCIsImN1cnJlbnRWYWx1ZSIsImVudGVyIiwic3RhcnRZZWFyIiwiaSIsImZpcnN0RGF5V2VlayIsIm51bURheXMiLCJwcmV2TW9udGgiLCJwcmV2TW9udGhOdW1EYXlzIiwibm93IiwiaXNEYXkiLCJzdGF0ZSIsIm5leHRNb250aE5lZWQiLCJuZXh0TW9udGgiLCJsb2NhbGVOYW1lcyIsIm5hbWVzIiwiYWRkRXZlbnRzIiwidGFyZ2V0cyIsImhhbmRsZXIiLCJjb21iaW5lRXZlbnRzIiwiZ2V0S2V5IiwiZ2V0S2V5TmF2aWdhdGlvbiIsImdldFRhcmdldCIsImNsYXNzZXMiLCJzaG93IiwidHJpZ2dlciIsInBvcHVwIiwiX2MiLCJlbCIsImJvdW5kcyIsInRyaWdnZXJMZWZ0IiwidHJpZ2dlclRvcCIsInRyaWdnZXJXaWR0aCIsInRyaWdnZXJIZWlnaHQiLCJwb3B1cFdpZHRoIiwicG9wdXBIZWlnaHQiLCJwYXJ0MSIsInBhcnQyIiwid2luV2lkdGgiLCJ3aW5IZWlnaHQiLCJsZWZ0IiwidG9wIiwidHJpZ2dlckJvdW5kcyIsImlucHV0IiwiXyIsInNpemUiLCJnZXRMZW5ndGgiLCJfb3BlbkJsb2NrIiwiX2NyZWF0ZUVsZW1lbnRCbG9jayIsInNldFNlbGVjdGlvbiIsImdldFNlbGVjdGlvbiIsIlRyaWdnZXIiLCJDYWxlbmRhciIsIklucHV0RmllbGQiLCJJY29uIiwiZGVmYXVsdEZvcm1hdHMiLCJnZXREYXRlUGFydCIsImNhbGVuZGFyIiwidG9nZ2xlIiwic2VsZWN0aW9uIiwic21vb3RoIiwic2Nyb2xsIiwicmVmIiwibGluZUhlaWdodCIsImRpc3RhbmNlIiwiY291bnQiLCJpc0RpZ2l0IiwiY2hhciIsIkRhdGVQaWNrZXIiLCJUaW1lUGlja2VyIiwidHJhbnNpdGlvbiIsImRpc2FibGVkIiwidGV4dCIsInNob3dQcmV2Iiwic2hvd05leHQiLCJjdXJyZW50UGFnZSIsIm51bVBhZ2VzIiwic2hvd0xlbmd0aCIsInBhZ2UiLCJidXR0b24iLCJjaGVja2VkIiwidW5jaGVja2VkIiwibW9kZWxWYWx1ZSIsIlRyYW5zaXRpb25IZWlnaHQiLCJlbmFibGVkIiwic2xvdHMiLCJjcmVhdGVFbGVtZW50IiwiVHJhbnNpdGlvbiIsInByb3BzIiwic2V0U3R5bGUiLCJzdHlsZSIsIm5leHRUaW1lb3V0IiwiZm9yY2VSZXBhaW50Iiwid2lkdGgiLCJoZWlnaHQiLCJoYXNWTm9kZUNvbnRlbnQiLCJ2bm9kZSIsIkNvbW1lbnQiLCJoYXNTbG90Q29udGVudCIsInNsb3QiLCJ1c2VTbG90cyIsIkRvbU1peGluIiwicmVtb3ZlIiwiRGl0b1VzZXIiLCJyb2xlcyIsInJvbGUiLCJTY2hlbWFQYXJlbnRNaXhpbiIsInNjaGVtYUNvbXBvbmVudHMiLCJWYWxpZGF0b3JNaXhpbiIsIml0IiwiUm91dGVNaXhpbiIsInJvdXRlQ29tcG9uZW50IiwibWF0Y2hlZCIsInJlY29yZCIsImJyZWFkY3J1bWIiLCJyb3V0ZUNvbXBvbmVudHMiLCJvayIsInJlY29yZFBhdGgiLCJyb290UGF0aCIsImdldENvbW1vblByZWZpeCIsImlzTG9hZGluZyIsIlVzZUZvY3VzVHJhcCIsImRlZmluZUNvbXBvbmVudCIsInRyYXAiLCJhY3RpdmF0ZSIsImRlYWN0aXZhdGUiLCJ1bnJlZkVsZW1lbnQiLCJjcmVhdGVGb2N1c1RyYXAiLCJvblNjb3BlRGlzcG9zZSIsImgiLCJkaWFsb2dEYXRhIiwiRGl0b0RpYWxvZyIsInByZWZpeCIsInRpcHB5RGVsZWdhdGUiLCJpbnN0YW5jZSIsImVyciIsImRyYWdDb3VudCIsInVwbG9hZHMiLCJ0b2dnbGVEcm9wVGFyZ2V0Q2xhc3MiLCJ1cGxvYWQiLCJzZXREcmFnZ2luZ0ZpbGVzIiwiaGFzVXBsb2FkcyIsImNhbkRyb3AiLCJ0aXRsZSIsInJlamVjdCIsImRpYWxvZ0lkIiwiYWRkaXRpb25hbENvbXBvbmVudHMiLCJyZWRpcmVjdEFmdGVyTG9naW4iLCJsb2dpbkRhdGEiLCJ1c2VyIiwiRGl0b1ZpZXciLCJhZGRSb3V0ZXMiLCJyb3V0ZXIiLCJyZW1vdmVycyIsInJvdXRlIiwic3ViTWVudUNsYXNzIiwiZmlyc3RDaGlsZCIsImxvZyIsInN0cmlwVGFncyIsIm5vdGlmaWNhdGlvbnMiLCJkdXJhdGlvbkZhY3RvciIsImR1cmF0aW9uIiwiUHVsbGRvd25NaXhpbiIsInN0YXJ0VGltZSIsIm9wZW4iLCJjb250ZW50IiwiYXNPYmplY3QiLCJJdGVtTWl4aW4iLCJpdGVtSWQiLCJleHRlbmRlZCIsIml0ZW1MYWJlbCIsImZvcm1MYWJlbCIsImdldEZvcm1MYWJlbCIsInN1ZmZpeCIsImNvbHVtbnMiLCJoYWRMYWJlbCIsInNlbGVjdGVkVGFiIiwiZmlyc3QiLCJkZWZhdWx0VGFiIiwiaGFzaCIsImRhdGFQYXRoT3JOYW1lIiwic2Nyb2xsQ29udGFpbmVyIiwiZGlzcGF0Y2giLCJjb21wb25lbnRzQnlEYXRhUGF0aCIsImRhdGFQYXRocyIsImNoZWNrIiwiZmllbGQiLCJ1bm1hdGNoZWQiLCJlcnJzIiwiZnVsbERhdGFQYXRoIiwiZGF0YVBhdGhQYXJ0cyIsImZvdW5kIiwicHJvcGVydHkiLCJzdWJDb21wb25lbnRzIiwicGFuZSIsInJlZ2lzdHJ5IiwiZW50cmllc0J5RGF0YVBhdGgiLCJfd2l0aERpcmVjdGl2ZXMiLCJfRnJhZ21lbnQiLCJfcmVuZGVyTGlzdCIsIl9jdHgiLCJfaG9pc3RlZF8xIiwiX2NyZWF0ZUJsb2NrIiwiX2NvbXBvbmVudF9EaXRvQ29udGFpbmVyIiwibmVzdGVkRGF0YVBhdGgiLCJfaG9pc3RlZF8yIiwicG9zaXRpb25zIiwiaXNMYXN0SW5Sb3ciLCJmaW5kTmV4dFBvc2l0aW9uIiwicm93cyIsInJvdyIsInZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzIiwiaGFzTGFiZWxzSW5Sb3ciLCJjb250YWluZXIiLCJwYWRkaW5nIiwiZm9udFNpemUiLCJwYXJzZUZyYWN0aW9uIiwiZGl2aWRlbmQiLCJkaXZpc29yIiwiYWNjdW11bGF0ZWRCYXNpcyIsImZsZXhCYXNpcyIsImNvbWJpbmVkQmFzaXMiLCJjYXBpdGFsaXplIiwiY2xpcGJvYXJkRGF0YSIsInBhc3RlIiwiJHNjaGVtYSIsInJlcG9ydCIsImpzb24iLCJkZWluZGVudCIsIkxvYWRpbmdNaXhpbiIsInVwZGF0ZVJvb3QiLCJ1cGRhdGVWaWV3IiwiUmVzb3VyY2VNaXhpbiIsImFtb3VudCIsInJhbmdlIiwidmVyYnMiLCJjbGVhciIsImxvYWRpbmdPcHRpb25zIiwiY29udHJvbGxlciIsInJlcXVlc3QiLCJzZXREYXRhIiwib25TdWNjZXNzIiwib25FcnJvciIsIm5vdGlmeVN1Y2Nlc3MiLCJub3RpZnlFcnJvciIsInJlc29sdmVQYXRoIiwiaXNDcmVhdGluZyIsInByb3ZpZGVzRGF0YSIsImRhdGFQYXJ0cyIsInBhdGhQYXJ0cyIsInJvdXRlUGFydHMiLCJsYXN0RGF0YVBhcnQiLCJsIiwiZGF0YVBhcnQiLCJwYXJhbSIsIm1haW5TY2hlbWFDb21wb25lbnQiLCJwcmVzZW50IiwiY2xvc2VGb3JtIiwiZ2V0VmVyYiIsImJ1dHRvblJlc291cmNlIiwic3VjY2VzcyIsIl9yZXNvdXJjZSIsIl9tZXRob2QiLCJEaXRvRm9ybSIsInRpcCIsInRpcHB5Iiwic2NvcGUiLCJQYWdpbmF0aW9uIiwiU29ydGFibGVNaXhpbiIsImZvcmNlRmFsbGJhY2siLCJvbGRJbmRleCIsIm5ld0luZGV4IiwibGlzdCIsInBhZ2luYXRpb25SYW5nZSIsIl9ub3JtYWxpemVTdHlsZSIsIl9jYWNoZSIsIl93aXRoTW9kaWZpZXJzIiwiJGV2ZW50IiwiX25vcm1hbGl6ZUNsYXNzIiwiX2NyZWF0ZUVsZW1lbnRWTm9kZSIsIl9ob2lzdGVkXzQiLCJfdG9EaXNwbGF5U3RyaW5nIiwiX2hvaXN0ZWRfNSIsIl9ob2lzdGVkXzciLCJfbWVyZ2VQcm9wcyIsIl9ob2lzdGVkXzgiLCJfY29tcG9uZW50X0RpdG9MYWJlbCIsIl9jcmVhdGVWTm9kZSIsIl9jb21wb25lbnRfRGl0b1RhYmxlQ2VsbCIsIl9jb21wb25lbnRfRGl0b0RyYWdnYWJsZSIsIl9jb21wb25lbnRfRGl0b1RyZWVJdGVtIiwiY2hpbGRyZW5TY2hlbWEiLCJjaGlsZHJlbkxpc3QiLCJlZGl0UGF0aCIsImNoaWxkcmVuT3BlbiIsIm51bUNoaWxkcmVuIiwiY3JlYXRhYmxlIiwiZWRpdGFibGUiLCJvcmRlciIsImNvbHVtbiIsInJlbmRlciIsImVzY2FwZUh0bWwiLCJUWVBFUyIsImZpbGUiLCJyZWFkZXIiLCJ1c2VTb3J0YWJsZSIsInNvcnRhYmxlIiwiZG9jdW1lbnQiLCJkZWZhdWx0RG9jdW1lbnQiLCJyZXNldE9wdGlvbnMiLCJkZWZhdWx0T3B0aW9ucyIsImUiLCJtb3ZlQXJyYXlFbGVtZW50IiwiU29ydGFibGUiLCJzdG9wIiwib3B0aW9uIiwidHJ5T25Nb3VudGVkIiwidHJ5T25TY29wZURpc3Bvc2UiLCJfdmFsdWVJc1JlZiIsImlzUmVmIiwidG9WYWx1ZSIsIm5leHRUaWNrIiwiVXNlU29ydGFibGUiLCJ1c2VWTW9kZWwiLCJEaXRvVk5vZGUiLCJEaXRvVHlwZUNvbXBvbmVudCQxIiwiRGl0b1R5cGVDb21wb25lbnQiLCJvbkNsaWNrIiwiRGF0YU1peGluIiwiYXN5bmNFbnRyeSIsInJlc29sdmVkRGF0YSIsImxvYWQiLCJ0aW1lciIsIk9wdGlvbnNNaXhpbiIsImNvbnZlcnRWYWx1ZSIsImNvbnZlcnQiLCJzZWFyY2giLCJmaWx0ZXIiLCJkZWJvdW5jZSIsImRlYm91bmNlQXN5bmMiLCJncm91cGVkIiwicmVzdWx0cyIsImdyb3VwIiwiZmluZE9wdGlvbiIsImdyb3VwQnkiLCJvcHRpb25WYWx1ZSIsIm9wdGlvbkxhYmVsIiwicHJvY2Vzc1JlbGF0ZSIsImZsYXNrIiwiQ29kZUZsYXNrIiwiY2hhbmdlZCIsImlnbm9yZVdhdGNoIiwiaWdub3JlVXBkYXRlIiwic2V0Q29kZSIsImNvZGUiLCJzZXRWYWx1ZSIsIlNrZXRjaFBpY2tlciIsInRpbnljb2xvciIsImNvbG9yIiwiRGF0ZVRpbWVQaWNrZXIiLCJmb3JtYXRzIiwiZm9ybWF0UXVlcnkiLCJ2YWwiLCJyZXBsYWNlUm91dGUiLCJTb3VyY2VNaXhpbiIsImRlZmF1bHRTb3J0IiwiZGlyZWN0aW9uIiwiZHJhZ2dhYmxlIiwiY29sbGFwc2libGUiLCJyZW1vdmVkIiwibGlzdERhdGEiLCJvbkNvbXBsZXRlIiwib3BlbmVkIiwiY2FsbE9uQ29tcGxldGUiLCJpbmxpbmVkIiwibWV0YSIsImZvcm1NZXRhIiwiY2hpbGRSb3V0ZXMiLCJzb3VyY2VQYXRoIiwiZm9ybVJvdXRlIiwiZ2V0UGF0aFdpdGhQYXJhbSIsImZsYXRSb3V0ZXMiLCJzdWJSb3V0ZXMiLCJjaGlsZFJvdXRlIiwiZmlsdGVyQ29tcG9uZW50cyIsImRhdGV0aW1lIiwiY3JlYXRlRmlsdGVyc1BhbmVsIiwiZmlsdGVycyIsInN0aWNreSIsImZpbHRlclNjaGVtYXMiLCJwYXJzZUZpbHRlcnNEYXRhIiwiY3JlYXRlRmlsdGVyc0NvbXBvbmVudHMiLCJjcmVhdGVGaWx0ZXJzQnV0dG9ucyIsImZvcm1hdEZpbHRlcnNEYXRhIiwic21hbGwiLCJnZXREYXRhTmFtZSIsImZpbHRlck5hbWUiLCJnZXRGaWx0ZXJOYW1lIiwiZGF0YU5hbWUiLCJjb21wcyIsImdldENvbXBvbmVudHNGb3JGaWx0ZXIiLCJmaWx0ZXJzRGF0YSIsIl9jb21wb25lbnRfRGl0b1RhYmxlSGVhZCIsIl9jb21wb25lbnRfRGl0b1NjaGVtYUlubGluZWQiLCJfcmVzb2x2ZUR5bmFtaWNDb21wb25lbnQiLCJfY29tcG9uZW50X0RpdG9FZGl0QnV0dG9ucyIsIl9ob2lzdGVkXzkiLCJvYmoiLCJmaWx0ZXJzRGF0YVBhdGgiLCJFZGl0b3JDb250ZW50IiwiZWRpdG9yIiwiZW5hYmxlUnVsZXMiLCJzZXRWYWx1ZURlYm91bmNlZCIsIm9uVXBkYXRlIiwiRWRpdG9yIiwiZ2V0UG9pbnQiLCJ4IiwieSIsInByZXZZIiwibW91c2Vtb3ZlIiwiZGlhbG9nQ29tcG9uZW50IiwiZ2V0TWFya0F0dHJpYnV0ZXMiLCJocmVmIiwibWFya3MiLCJub2RlcyIsInRvb2xzIiwiRG9jdW1lbnQiLCJUZXh0IiwiUGFyYWdyYXBoIiwiQm9sZCIsIkl0YWxpYyIsIlVuZGVybGluZSIsIlN0cmlrZSIsIlNtYWxsIiwiQ29kZSIsIkxpbmtXaXRoVGl0bGUiLCJCbG9ja3F1b3RlIiwiQ29kZUJsb2NrIiwiSGFyZEJyZWFrIiwiSGVhZGluZyIsIkhvcml6b250YWxSdWxlIiwiTGlzdEl0ZW0iLCJCdWxsZXRMaXN0IiwiT3JkZXJlZExpc3QiLCJIaXN0b3J5IiwiZXh0ZW5zaW9uIiwic2V0dGluZ3NOYW1lIiwiZGVzY3JpcHRpb25zIiwiY29tbWFuZHMiLCJhZGRCdXR0b24iLCJpY29uIiwiY29tbWFuZCIsImRlc2NyaXB0aW9uIiwic2V0dGluZ05hbWUiLCJhdHRyaWJ1dGUiLCJNYXJrIiwiTGluayIsIl9jb21wb25lbnRfVnVlTXVsdGlzZWxlY3QiLCJWdWVNdWx0aXNlbGVjdCIsInBsYWNlaG9sZGVyIiwic2VhcmNoYWJsZSIsInRhZ2dhYmxlIiwidGFnIiwiTnVtYmVyTWl4aW4iLCJTd2l0Y2hCdXR0b24iLCJUZXh0TWl4aW4iLCJtYXNrZWRQYXNzd29yZCIsImhhc0VkaXRhYmxlRm9ybXMiLCJmb3JtYXRGaWxlU2l6ZSIsImZpbGVzaXplIiwiVnVlVXBsb2FkIiwiYXNGaWxlcyIsImFjY2VwdCIsIm1heFNpemUiLCJwYXJzZUZpbGVTaXplIiwidGh1bWJuYWlscyIsInRvdGFsIiwicmVhZHkiLCJuZXdGaWxlIiwib2xkRmlsZSIsInhociIsImJsb2IiLCJmaWxlcyIsIlJlc2l6ZURpcmVjdGl2ZSIsImJpbmRpbmciLCJvYnNlcnZlUmVzaXplIiwidW5vYnNlcnZlUmVzaXplIiwiT2JzZXJ2ZXIiLCJpc1Jlc2l6ZVN1cHBvcnRlZCIsIm9ic2VydmVycyIsImJveCIsIkRpdG9BZG1pbiIsImRpdG8iLCJnZXRBcGlVcmwiLCJpc0FwaVVybCIsInVzZXJzIiwicGFyZW50UGF0aCIsImFwcCIsImNyZWF0ZUFwcCIsIkRpdG9Sb290IiwiVnVlTm90aWZpY2F0aW9ucyIsImNyZWF0ZVJvdXRlciIsImNyZWF0ZVdlYkhpc3RvcnkiLCJSZXF1ZXN0RXJyb3IiLCJoZWFkZXJzIiwiZGVwcmVjYXRlIiwiaXNBYnNvbHV0ZVVybCIsImNvbWJpbmVVcmxzIiwiYmFzZVVybCIsInJlbGF0aXZlVXJsIl0sIm1h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
6
+ `),theme:"error",trigger:"manual",appendTo:"parent",placement:"bottom-start",animation:"shift-away-subtle",popperOptions:{modifiers:[{name:"flip",enabled:!1}]},interactive:!0,hideOnClick:!1,offset:[3,3],zIndex:1}),e.popper.addEventListener("mousedown",()=>e.hide()),e.show())}}}),_r=y(Lr,[["render",Fr]]),Mr={class:"dito-scopes"},jr=["title","onClick"];function Ir(e,t,o,s,a,r){const i=n.resolveComponent("RouterLink");return n.openBlock(),n.createElementBlock("div",Mr,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.scopes,(l,d)=>(n.openBlock(),n.createBlock(i,{key:d,to:e.getScopeLink(l),custom:""},{default:n.withCtx(({navigate:h})=>[n.createElementVNode("button",{class:n.normalizeClass(["dito-button",{"dito-selected":l.name===e.query.scope}]),type:"button",title:l.hint||e.getLabel(l),onClick:h},n.toDisplayString(e.getLabel(l)),11,jr)]),_:2},1032,["to"]))),128))])}const Gh="",Rr=C.component("DitoScopes",{props:{query:{type:Object,required:!0},scopes:{type:Object,required:!0}},methods:{getScopeLink(e){const t={...this.query,scope:e.name};return t.page&&(t.page=0),this.getQueryLink(t)}}}),zr=y(Rr,[["render",Ir]]);function qr(e,t,o,s,a,r){const i=n.resolveComponent("Pagination");return n.openBlock(),n.createBlock(i,{page:e.page,"onUpdate:page":t[0]||(t[0]=l=>e.page=l),pageSize:e.limit,total:e.total},null,8,["page","pageSize","total"])}const Ur=C.component("DitoPagination",{components:{Pagination:gs},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(e){this.page!==e&&this.$router.push(this.getQueryLink({...this.query,page:e-1}))}}}}),Ar=y(Ur,[["render",qr]]),We={data(){return{isDragging:!1}},methods:{getDraggableOptions(e=!1){const t="dito-draggable";return{animation:150,handle:".dito-button-drag",dragClass:`${t}__drag`,chosenClass:`${t}__chosen`,ghostClass:`${t}__ghost`,fallbackClass:`${t}__fallback`,forceFallback:e,onStart:this.onStartDrag,onEnd:this.onEndDrag}},onStartDrag(){this.isDragging=!0},onEndDrag({oldIndex:e,newIndex:t}){this.isDragging=!1,e!==t&&this.onChange()},updateOrder(e,t,o){const{orderKey:s}=e;if(s){const a=(o==null?void 0:o[0])||0;for(let r=0;r<t.length;r++)t[r][s]=r+a}return t}}},Hr=["id"],Wr={key:0,class:"dito-tree-header"},Kr=["innerHTML"],Yr={key:1,class:"dito-tree-info"},Jr={key:1,class:"dito-tree-leaf"},Gr=["innerHTML"],Qr={key:2,class:"dito-buttons dito-buttons-small"},Xr={key:1,class:"dito-properties"};function Zr(e,t,o,s,a,r){const i=n.resolveComponent("DitoLabel"),l=n.resolveComponent("DitoTableCell"),d=n.resolveComponent("DitoTreeItem",!0),h=n.resolveComponent("DitoDraggable");return n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["dito-tree-item",{"dito-dragging":e.isDragging,"dito-active":e.active}]),id:e.dataPath,style:n.normalizeStyle(e.level>0&&{"--level":e.level})},[e.label?(n.openBlock(),n.createElementBlock("div",Wr,[e.numEntries?(n.openBlock(),n.createElementBlock("div",{key:0,class:"dito-tree-branch",onClick:t[0]||(t[0]=n.withModifiers(u=>e.opened=!e.opened,["stop"]))},[e.numEntries?(n.openBlock(),n.createElementBlock("div",{key:0,class:n.normalizeClass(["dito-chevron",{"dito-open":e.opened}])},null,2)):n.createCommentVNode("",!0),n.createElementVNode("div",{class:"dito-tree-label",innerHTML:e.label},null,8,Kr),e.details?(n.openBlock(),n.createElementBlock("div",Yr,n.toDisplayString(e.details),1)):n.createCommentVNode("",!0)])):(n.openBlock(),n.createElementBlock("div",Jr,[n.createElementVNode("div",{class:"dito-tree-label",innerHTML:e.label},null,8,Gr)])),e.hasEditButtons?(n.openBlock(),n.createElementBlock("div",Qr,[e.draggable?(n.openBlock(),n.createElementBlock("a",n.mergeProps({key:0,class:"dito-button"},e.getButtonAttributes(e.verbs.drag)),null,16)):n.createCommentVNode("",!0),e.editable?(n.openBlock(),n.createElementBlock("button",n.mergeProps({key:1,class:"dito-button",type:"button"},e.getButtonAttributes(e.verbs.edit),{onClick:t[1]||(t[1]=(...u)=>e.onEdit&&e.onEdit(...u))}),null,16)):n.createCommentVNode("",!0),e.deletable?(n.openBlock(),n.createElementBlock("button",n.mergeProps({key:2,class:"dito-button",type:"button"},e.getButtonAttributes(e.verbs.delete),{onClick:t[2]||(t[2]=(...u)=>e.onDelete&&e.onDelete(...u))}),null,16)):n.createCommentVNode("",!0)])):n.createCommentVNode("",!0)])):n.createCommentVNode("",!0),e.properties?n.withDirectives((n.openBlock(),n.createElementBlock("table",Xr,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.properties,u=>(n.openBlock(),n.createElementBlock("tr",null,[n.createElementVNode("td",null,[u.label!==!1?(n.openBlock(),n.createBlock(i,{key:0,dataPath:e.getPropertyDataPath(u),label:e.getLabel(u)},null,8,["dataPath","label"])):n.createCommentVNode("",!0)]),n.createVNode(l,{cell:u,schema:u,dataPath:e.getPropertyDataPath(u),data:e.data,meta:e.nestedMeta,store:e.store,disabled:e.disabled},null,8,["cell","schema","dataPath","data","meta","store","disabled"])]))),256))],512)),[[n.vShow,e.opened]]):n.createCommentVNode("",!0),e.childrenSchema?n.withDirectives((n.openBlock(),n.createBlock(h,{key:2,modelValue:e.updateOrder(e.childrenSchema,e.childrenList),options:e.getDraggableOptions(!0),draggable:e.childrenDraggable,"onUpdate:modelValue":t[3]||(t[3]=u=>e.childrenList=u)},{default:n.withCtx(()=>[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.childrenItems,(u,p)=>(n.openBlock(),n.createBlock(d,{key:e.getItemUid(e.childrenSchema,u.data),schema:e.childrenSchema,dataPath:e.getItemDataPath(e.childrenSchema,p),data:u.data,path:u.path,open:u.open,active:u.active,draggable:e.childrenDraggable,label:e.getItemLabel(e.childrenSchema,u.data,{index:p}),level:e.level+1},null,8,["schema","dataPath","data","path","open","active","draggable","label","level"]))),128))]),_:1},8,["modelValue","options","draggable"])),[[n.vShow,e.opened]]):n.createCommentVNode("",!0)],14,Hr)}const Qh="",vr=C.component("DitoTreeItem",{mixins:[ke,We],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{...this.meta,schema:this.schema}},properties(){return Y(this.schema.properties)},childrenSchema(){return this.schema.children},childrenList:{get(){var t;const e=(t=this.childrenSchema)==null?void 0:t.name;return e&&this.data[e]},set(e){var o;const t=(o=this.childrenSchema)==null?void 0:o.name;t&&(this.data[t]=e)}},childrenDraggable(){var e;return((e=this.childrenList)==null?void 0:e.length)>1&&this.getSchemaValue("draggable",{type:Boolean,default:!1,schema:this.childrenSchema})},numChildren(){var e;return((e=this.childrenList)==null?void 0:e.length)||0},numProperties(){var e;return((e=this.properties)==null?void 0:e.length)||0},numEntries(){return this.numProperties+this.numChildren},childrenItems(){const{childrenSchema:e,childrenList:t}=this;if(e&&t){const{editPath:o}=this.container,s=!this.path&&e.open;return this.updateOrder(e,t.map((a,r)=>{const i=e.path&&`${this.path}/${e.path}/${r}`,l=s||o.startsWith(i)&&i.length<o.length;return{data:a,path:i,open:l,active:o===i}}))}return[]},details(){const{numChildren:e}=this;return e&&`${e} ${e===1?"item":"items"}`},hasEditButtons(){return this.draggable||this.editable||this.deletable},creatable:b("creatable",{type:Boolean,default:!1,get(e){return e&&A(this.schema)}}),editable:b("editable",{type:Boolean,default:!1,get(e){return e&&A(this.schema)}}),deletable:b("deletable",{type:Boolean,default:!1})},methods:{getPropertyDataPath(e){return T(this.dataPath,e.name)},onEdit(){this.$router.push({path:`${this.container.path}${this.path}`,query:this.$route.query})},onDelete(){},onChange(){this.container.onChange()}}}),xr=y(vr,[["render",Zr]]),ei={class:"dito-table-head"},ti=["onClick"],ni=n.createElementVNode("div",{class:"dito-order-arrows"},null,-1),oi={key:1},si={key:0},ai=[n.createElementVNode("span",null,null,-1)];function ri(e,t,o,s,a,r){const i=n.resolveComponent("RouterLink");return n.openBlock(),n.createElementBlock("thead",ei,[n.createElementVNode("tr",null,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.columns,l=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.shouldRenderSchema(l)?(n.openBlock(),n.createElementBlock("th",{key:0,class:n.normalizeClass(e.getColumnClass(l))},[l.sortable?(n.openBlock(),n.createBlock(i,{key:0,to:e.getSortLink(l),custom:""},{default:n.withCtx(({navigate:d})=>[n.createElementVNode("button",{class:n.normalizeClass(["dito-button",e.getSortClass(l)]),type:"button",onClick:d},[ni,n.createElementVNode("span",null,n.toDisplayString(e.getLabel(l)),1)],10,ti)]),_:2},1032,["to"])):(n.openBlock(),n.createElementBlock("span",oi,n.toDisplayString(e.getLabel(l)),1))],2)):n.createCommentVNode("",!0)],64))),256)),e.hasEditButtons?(n.openBlock(),n.createElementBlock("th",si,ai)):n.createCommentVNode("",!0)])])}const Zh="",ii=C.component("DitoTableHead",{props:{query:{type:Object,required:!0},columns:{type:Object,required:!0},hasEditButtons:{type:Boolean,required:!0}},computed:{sort(){const e=(this.query.order||"").split(/\s+/);return{name:e[0],order:e[1]}}},methods:{getColumnClass(e){return`dito-column-${c.hyphenate(e.name)}`},getSortClass(e){return this.sort.name===e.name?`dito-selected dito-order-${this.sort.order}`:null},getSortLink(e){const t=this.sort.name===e.name&&this.sort.order==="asc"?"desc":"asc";return this.getQueryLink({...this.query,order:`${e.name} ${t}`})}}}),li=y(ii,[["render",ri]]),di=["innerHTML"];function ci(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("td",{class:n.normalizeClass(e.cell.class),style:n.normalizeStyle(e.cell.style)},[e.cell.component?(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.cell.component),{key:0,schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,nested:e.nested,disabled:e.disabled},null,8,["schema","dataPath","data","meta","store","nested","disabled"])):(n.openBlock(),n.createElementBlock("span",{key:1,innerHTML:e.renderCell(e.data)},null,8,di))],6)}const hi=C.component("DitoTableCell",{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}},methods:{renderCell(e){const{name:t,render:o}=this.cell,s=e[t];return o?o.call(this,new S(this,{name:t,value:s,data:e,dataPath:T(this.dataPath,t)})):c.escapeHtml(s)}}}),ui=y(hi,[["render",ci]]),pi={class:"dito-upload-file"},mi={class:"dito-thumbnail__inner"},fi=["src"],gi={key:1,class:"dito-thumbnail__type"};function bi(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("div",pi,[e.thumbnail?(n.openBlock(),n.createElementBlock("div",{key:0,class:n.normalizeClass(["dito-thumbnail",`dito-thumbnail--${e.thumbnail}`])},[n.createElementVNode("div",mi,[e.source?(n.openBlock(),n.createElementBlock("img",{key:0,src:e.source,crossorigin:"anonymous"},null,8,fi)):(n.openBlock(),n.createElementBlock("div",gi,[n.createElementVNode("span",null,n.toDisplayString(e.type),1)]))])],2)):n.createCommentVNode("",!0),n.createElementVNode("span",null,n.toDisplayString(e.file.name),1)])}const vh="",yi=C.component("DitoUploadFile",{props:{file:{type:Object,required:!0},thumbnail:{type:String,default:null},thumbnailUrl:{type:String,default:null}},data(){return{uploadUrl:null}},computed:{type(){return ki[this.file.type]||this.file.name.split(".").pop().toUpperCase()},source(){return this.uploadUrl||this.thumbnailUrl}},watch:{"file.upload.file":{immediate:!0,handler(e){if(this.thumbnail&&(e!=null&&e.type.startsWith("image/"))){const t=new FileReader;t.onload=()=>{this.uploadUrl=t.result},t.readAsDataURL(e)}else this.uploadUrl=null}}}}),ki={"text/plain":"TXT","text/html":"HTML","text/css":"CSS","text/javascript":"JS","image/jpeg":"JPG","image/png":"PNG","image/gif":"GIF","image/svg+xml":"SVG","movie/mp4":"MP4","audio/mpeg":"MP3","application/json":"JSON","application/xml":"XML","application/pdf":"PDF","application/zip":"ZIP"},Ci=y(yi,[["render",bi]]);function $i(e,t,o={}){let s;const{document:a=I.defaultDocument,...r}=o,i={onUpdate:u=>{Di(t,u.oldIndex,u.newIndex)}},l=()=>{const u=typeof e=="string"?a==null?void 0:a.querySelector(e):I.unrefElement(e);u&&(s=new rn(u,{...i,...r}))},d=()=>s==null?void 0:s.destroy(),h=(u,p)=>{if(p!==void 0)s==null||s.option(u,p);else return s==null?void 0:s.option(u)};return I.tryOnMounted(l),I.tryOnScopeDispose(d),{stop:d,start:l,option:h}}function Di(e,t,o){const s=F.isRef(e),a=s?[...I.toValue(e)]:I.toValue(e);if(o>=0&&o<a.length){const r=a.splice(t,1)[0];F.nextTick(()=>{a.splice(o,0,r),s&&(e.value=a)})}}const Bi=F.defineComponent({name:"UseSortable",model:{prop:"modelValue",event:"update:modelValue"},props:{modelValue:{type:Array,required:!0},tag:{type:String,default:"div"},options:{type:Object,required:!0}},setup(e,{slots:t}){const o=I.useVModel(e,"modelValue"),s=F.ref(),a=F.reactive($i(s,o,e.options));return()=>{if(t.default)return F.h(e.tag,{ref:s},t.default(a))}}});function wi(e,t,o,s,a,r){const i=n.resolveComponent("UseSortable");return e.draggable?(n.openBlock(),n.createBlock(i,{key:0,class:n.normalizeClass(["dito-draggable",{"dito-draggable--dragging":e.isDragging}]),tag:e.tag,modelValue:e.modelValue,options:{...e.options,onStart:e.onStart,onEnd:e.onEnd},"onUpdate:modelValue":t[0]||(t[0]=l=>e.$emit("update:modelValue",l))},{default:n.withCtx(()=>[n.renderSlot(e.$slots,"default")]),_:3},8,["class","tag","modelValue","options"])):(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.tag),{key:1},{default:n.withCtx(()=>[n.renderSlot(e.$slots,"default")]),_:3}))}const xh="",Si=C.component("DitoDraggable",{mixins:[H],components:{UseSortable:Bi},emits:["update:modelValue"],props:{modelValue:{type:Array,required:!0},tag:{type:String,default:"div"},options:{type:Object,required:!0},draggable:{type:Boolean,default:!0}},data(){return{mouseEvents:null,isDragging:!1}},methods:{onStart(e){var t,o,s;(o=(t=this.options).onStart)==null||o.call(t,e),this.isDragging=!0,(s=this.mouseEvents)==null||s.remove()},onEnd(e){var t,o;(o=(t=this.options).onEnd)==null||o.call(t,e),this.mouseEvents=this.domOn(document,{mousedown:this.onMouse,mousemove:this.onMouse,mouseleave:this.onMouse})},onMouse(){var e;this.isDragging=!1,(e=this.mouseEvents)==null||e.remove(),this.mouseEvents=null}}}),Vi=y(Si,[["render",wi]]),Pi=[n.createElementVNode("div",{class:"dito-spinner__pulse dito-spinner__pulse1"},null,-1),n.createElementVNode("div",{class:"dito-spinner__pulse dito-spinner__pulse2"},null,-1),n.createElementVNode("div",{class:"dito-spinner__pulse dito-spinner__pulse3"},null,-1)];function Ei(e,t,o,s,a,r){return n.withDirectives((n.openBlock(),n.createElementBlock("div",{class:"dito-spinner",style:n.normalizeStyle({"--color":e.color,"--size":e.size,"--margin":e.margin})},Pi,4)),[[n.vShow,e.loading]])}const ou="",Ni=C.component("DitoSpinner",{props:{loading:{type:Boolean,default:!0},color:{type:String,default:null},size:{type:String,default:null},margin:{type:String,default:null}}}),Oi=y(Ni,[["render",Ei]]);function Gt({vnode:e}){return e}Gt.props={vnode:{type:Object,required:!0}};const Ti=C.component("DitoVnode",Gt),Fi=Object.freeze(Object.defineProperty({__proto__:null,DitoAccount:ka,DitoButtons:ir,DitoClipboard:wr,DitoContainer:Wa,DitoCreateButton:yr,DitoDialog:Ht,DitoDraggable:Vi,DitoEditButtons:hr,DitoElement:Da,DitoErrors:_r,DitoForm:Jt,DitoFormNested:Or,DitoHeader:xs,DitoLabel:Ea,DitoMenu:Hs,DitoNavigation:oa,DitoNotifications:da,DitoPagination:Ar,DitoPane:qa,DitoPanel:va,DitoPanels:nr,DitoRoot:He,DitoSchema:Fa,DitoSchemaInlined:Ma,DitoScopes:zr,DitoSidebar:ma,DitoSpinner:Oi,DitoTableCell:ui,DitoTableHead:li,DitoTabs:Qa,DitoTrail:Gs,DitoTreeItem:xr,DitoUploadFile:Ci,DitoVNode:Ti,DitoView:At},Symbol.toStringTag,{value:"Module"})),D={extends:C,mixins:[Z],nativeField:!1,textField:!1,defaultValue:null,defaultNested:!0,defaultVisible:!0,generateLabel:!0,excludeValue:!1,ignoreMissingValue:null,omitSpacing:!1,component:C.component,get:le,register(e,t={}){e=c.asArray(e);const o=this.component(`DitoType${c.camelize(e[0],!0)}`,t);for(const s of e)Xn(s,o);return o}},Li=["id","type","title"],_i={key:0,class:"dito-button__text"},Mi=["data-info"];function ji(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("button",n.mergeProps({class:["dito-button",e.buttonClass],id:e.dataPath,ref:"element",type:e.type,title:e.title},e.attributes),[e.text?(n.openBlock(),n.createElementBlock("div",_i,n.toDisplayString(e.text),1)):n.createCommentVNode("",!0),!e.label&&e.info?(n.openBlock(),n.createElementBlock("div",{key:1,class:"dito-info","data-info":e.info},null,8,Mi)):n.createCommentVNode("",!0)],16,Li)}const su="",Ii=D.register(["button","submit"],{defaultValue:()=>{},excludeValue:!0,defaultWidth:"auto",generateLabel:!1,computed:{verb(){return this.verbs[this.name]},buttonClass(){return this.verb?`dito-button-${this.verb}`:null},text:b("text",{type:String}),title(){return this.text||c.labelize(this.verb)},info:b("info",{type:String,default:null}),closeForm:b("closeForm",{type:Boolean,default:!1})},methods:{getEvents(){const{onFocus:e,onBlur:t,onClick:o}=this;return{onFocus:e,onBlur:t,onClick:o}},async submit(e){var t;return(t=this.resourceComponent)==null?void 0:t.submit(this,e)},async onClick(){await this.emitEvent("click",{parent:this.schemaComponent})===void 0&&Et(this.schema)&&await this.submit()}}}),Ri=y(Ii,[["render",ji]]),zi={class:"dito-checkbox"},qi=["id"];function Ui(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("div",zi,[n.withDirectives(n.createElementVNode("input",n.mergeProps({id:e.dataPath,ref:"element","onUpdate:modelValue":t[0]||(t[0]=i=>e.value=i),type:"checkbox"},e.attributes),null,16,qi),[[n.vModelCheckbox,e.value]])])}const au="",Ai=D.register("checkbox",{nativeField:!0}),Hi=y(Ai,[["render",Ui]]),Qt={mixins:[Kt],data(){return{isLoading:!1,asyncDataEntries:{}}},methods:{handleDataSchema(e,t,o){var i,l;c.isObject(e)||(e={data:e});let{data:s=void 0,dataPath:a=null}=e;const r=(i=this.asyncDataEntries)[t]||(i[t]=n.reactive({dependencyFunction:null,resolvedData:void 0,resolving:!1,resolved:!1}));if((l=r.dependencyFunction)==null||l.call(r,this.context),r.resolved){const{resolvedData:d}=r;return r.resolvedData=void 0,r.resolved=!1,d}if(r.resolving)s=null;else if(s){if(c.isFunction(s)){const d=s(this.context);c.isFunction(d)?(r.dependencyFunction=s,s=d(this.context)):s=d}c.isPromise(s)&&(r.resolving=!0,this.resolveData(s,o).then(d=>{r.resolvedData=d,r.resolving=!1,r.resolved=!0}).catch(d=>{console.error(d),r.resolving=!1}),s=null)}else a&&(s=c.getValueAtDataPath(this.rootData,c.normalizeDataPath(`${this.dataPath}/${a}`)));return s},async resolveData(e,t={}){const o=setTimeout(()=>this.setLoading(!0,t),0);let s=null;try{s=await(c.isFunction(e)?e():e)}catch(a){this.addError(a.message||a)}return clearTimeout(o),this.setLoading(!1,t),s}}},Ce={mixins:[Qt],data(){return{hasOptions:!1}},computed:{selectedValue:{get(){const e=o=>this.relate?this.hasOption(o)?this.getValueForOption(o):null:o,t=c.isArray(this.value)?this.value.map(e).filter(o=>o!==null):e(this.value);return this.relate&&this.hasOptions&&(t===null&&this.value!==null||zn(this.value))&&(this.selectedValue=t),t},set(e){const t=o=>this.relate?this.getOptionForValue(o):o;this.value=c.isArray(e)?e.map(t):t(e)}},selectedOption(){return this.getOptionForValue(this.selectedValue)},options(){const e=this.handleDataSchema(this.schema.options,"options")??[];if(!c.isArray(e))throw new Error(`Invalid options data, should be array: ${e}`);return this.hasOptions=e.length>0,this.processOptions(e)},activeOptions(){return this.options},relate:b("relate",{type:Boolean,default:!1,callback:!1}),groupBy:b("groupBy",{type:String,default:null}),optionLabel:b("options.label",{type:[String,Function],default:null,get(e){return e||this.getOptionKey("label")||null}}),optionValue:b("options.value",{type:[String,Function],default:null,get(e){return e||this.relate&&"id"||this.getOptionKey("value")||null}}),searchFilter:b("search",{type:[Object,Function],default:null,get(e){if(e){const{filter:t,debounce:o}=c.isFunction(e)?{filter:e}:e;return o?c.debounceAsync(t,o):t}}}),editable:b("editable",{type:Boolean,default:!1,get(e){return e&&co(this.schema,this.context)}}),editPath(){return this.editable&&this.selectedValue?ut(this.schema,this.selectedValue,this.context):null},groupByLabel(){return this.groupBy?"label":null},groupByOptions(){return this.groupBy?"options":null}},methods:{getOptionKey(e){const[t]=this.activeOptions;return c.isObject(t)&&e in t?e:null},processOptions(e){if(e.length){if(this.relate)for(const t of e)"id"in t||Rn(t,"id");if(this.groupBy){const t={};e=e.reduce((o,s)=>{const a=s[this.groupBy];let r=t[a];return r||(r=t[a]={[this.groupByLabel]:a,[this.groupByOptions]:[]},o.push(r)),r.options.push(s),o},[])}}return e},hasOption(e){return!!this.getOptionForValue(this.getValueForOption(e))},getOptionForValue(e){const t=(o,s,a)=>{for(const r of o)if(a){const i=t(r.options,s,null);if(i)return i}else if(s===this.getValueForOption(r))return r};return this.optionValue?t(this.activeOptions,e,this.groupBy):e},getValueForOption(e){const{optionValue:t}=this;return c.isString(t)?e==null?void 0:e[t]:c.isFunction(t)?t(new S(this,{option:e})):e},getLabelForOption(e){const{optionLabel:t}=this;return c.isString(t)?e==null?void 0:e[t]:c.isFunction(t)?t(new S(this,{option:e})):c.labelize(`${e}`)}},processValue(e,t,o,s){var a;if(e.relate){const r=(a=e.options)==null?void 0:a.dataPath,i=r?c.normalizeDataPath(`${o}/${r}`):null;s.addRelation(o,i,e),i&&s.setSourceRelated(i);const l=d=>d&&{id:d.id};t=c.isArray(t)?t.map(l):l(t)}return t}},Wi=["id"],Ki={class:"dito-checkbox"},Yi=["value"];function Ji(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("ul",{class:n.normalizeClass(["dito-checkboxes",`dito-layout-${e.schema.layout||"vertical"}`]),id:e.dataPath},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.options,i=>(n.openBlock(),n.createElementBlock("li",null,[n.createElementVNode("label",null,[n.createElementVNode("div",Ki,[n.withDirectives(n.createElementVNode("input",n.mergeProps({ref_for:!0,ref:"element","onUpdate:modelValue":t[0]||(t[0]=l=>e.selectedOptions=l),type:"checkbox",value:e.getValueForOption(i)},e.attributes),null,16,Yi),[[n.vModelCheckbox,e.selectedOptions]]),n.createElementVNode("span",null,n.toDisplayString(e.getLabelForOption(i)),1)])])]))),256))],10,Wi)}const ru="",Gi=D.register("checkboxes",{mixins:[Ce],nativeField:!0,defaultValue:[],defaultWidth:"auto",computed:{selectedOptions:{get(){return(this.selectedValue||[]).filter(e=>e)},set(e){this.selectedValue=e||[]}}}}),Qi=y(Gi,[["render",Ji]]),Xi=["id"];function Zi(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("div",{class:"dito-code",id:e.dataPath,ref:"code",style:n.normalizeStyle(e.style)},null,12,Xi)}const iu="",vi=D.register("code",{mixins:[H],computed:{lines(){return this.schema.lines||3},style(){return`height: calc(${this.lines}em * var(--line-height))`}},mounted(){const e=new ln(this.$refs.code,{language:this.schema.language||"javascript",tabSize:this.schema.indentSize||2,lineNumbers:!1});let t=!1,o=!1,s=!1;const a=()=>{!this.focused&&t&&(t=!1,this.onChange())},r=()=>this.onFocus(),i=()=>{this.onBlur(),a()};this.domOn(this.$refs.code.querySelector("textarea"),{focus:r,blur:i});const l=h=>{h!==e.code&&(s=!0,e.updateCode(h))},d=h=>{h!==this.value&&(o=!0,this.value=h,t=!0,a())};e.onUpdate(h=>{s?s=!1:d(h)}),this.$watch("value",h=>{o?o=!1:l(h||"")}),l(this.value||"")},methods:{focusElement(){var e;(e=this.$el.querySelector("textarea"))==null||e.focus()},blurElement(){var e;(e=this.$el.querySelector("textarea"))==null||e.focus()}}}),xi=y(vi,[["render",Zi]]),el=["id"],tl={key:0,class:"dito-color-preview dito-inherit-focus"},nl=["disabled"];function ol(e,t,o,s,a,r){const i=n.resolveComponent("SketchPicker"),l=n.resolveComponent("Trigger");return n.openBlock(),n.createBlock(l,{class:"dito-color",show:e.showPopup,"onUpdate:show":t[3]||(t[3]=d=>e.showPopup=d),trigger:"focus"},{trigger:n.withCtx(()=>[n.createElementVNode("div",{class:n.normalizeClass(["dito-input",{"dito-focus":e.showPopup}])},[n.withDirectives(n.createElementVNode("input",n.mergeProps({id:e.dataPath,ref:"element","onUpdate:modelValue":t[0]||(t[0]=d=>e.hexValue=d),type:"input",size:"8"},e.attributes),null,16,el),[[n.vModelText,e.hexValue]]),e.value?(n.openBlock(),n.createElementBlock("div",tl,[n.createElementVNode("div",{style:n.normalizeStyle({background:`#${e.hexValue||"00000000"}`})},null,4)])):n.createCommentVNode("",!0),e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:1,class:"dito-button-clear dito-button-overlay",disabled:e.disabled,onClick:t[1]||(t[1]=n.withModifiers((...d)=>e.clear&&e.clear(...d),["stop"]))},null,8,nl)):n.createCommentVNode("",!0)],2)]),popup:n.withCtx(()=>[n.createVNode(i,{class:"dito-color-picker",modelValue:e.colorValue,"onUpdate:modelValue":t[2]||(t[2]=d=>e.colorValue=d),disableAlpha:!e.alpha,disableFields:!e.inputs,presetColors:e.presets},null,8,["modelValue","disableAlpha","disableFields","presetColors"])]),_:1},8,["show"])}const lu="",sl=D.register("color",{components:{Trigger:Ae,SketchPicker:dn.Sketch},data(){return{showPopup:!1,convertedHexValue:null}},computed:{colorValue:{get(){return this.value||{}},set(e){const t=this.colorFormat,o={hex:(e==null?void 0:e.a)<1?"hex8":"hex",rgb:"rgba"}[t]||t;o?this.value=e[o]:this.value=Qe(e).toString(t),this.onChange()}},hexValue:{get(){if(this.value==null)this.convertedHexValue=null;else if(!this.focused||this.$refs.element.hasAttribute("readonly")){const e=Qe(this.value);e.isValid()&&(this.convertedHexValue=e.toString(e.getAlpha()<1?"hex8":"hex6").slice(1).toUpperCase())}return this.convertedHexValue},set(e){this.convertedHexValue=e}},colorFormat:b("format",{type:String,default:"hex"}),alpha:b("alpha",{type:Boolean,default:!1}),inputs:b("inputs",{type:Boolean,default:!0}),presets:b("presets",{type:Array,default:["#ffffff","#c3c3c3","#7f7f7f","#000000","#880015","#ed1c24","#ff7f27","#fff200","#22b14c","#00a2e8","#3f48cc","#a349a4","#b97a57","#ffaec9","#ffc90e","#00000000"]})}}),al=y(sl,[["render",ol]]);function rl(e,t,o,s,a,r){return n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.schema.component),n.normalizeProps(n.guardReactiveProps(e.$props)),null,16)}const il=D.register("component",{defaultValue:()=>{},ignoreMissingValue:e=>!("default"in e),async processSchema(e,t){await he(t)}}),ll=y(il,[["render",rl]]),dl=["id","name","value","disabled"];function cl(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("input",{class:"dito-text dito-input",id:e.dataPath,ref:"element",name:e.name,type:"text",value:e.value,disabled:e.disabled,readonly:!0},null,8,dl)}const hl=D.register(["computed","data","hidden"],{mixins:[Qt],defaultValue:()=>{},defaultVisible:!1,computed:{value:{get(){const{schema:e}=this;if(e.data||e.dataPath){const t=this.handleDataSchema(e,"schema");this.data[this.name]=t}return Z.computed.value.get.call(this)},set(e){Z.computed.value.set.call(this,e)}}}}),ul=y(hl,[["render",cl]]),pl={class:"dito-date"},ml=["disabled"];function fl(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("div",pl,[(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.getComponent(e.type)),n.mergeProps({id:e.dataPath,ref:"element",modelValue:e.dateValue,"onUpdate:modelValue":t[2]||(t[2]=i=>e.dateValue=i),locale:e.locale,format:e.formats},e.attributes),{after:n.withCtx(()=>[e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button-clear dito-button-overlay",disabled:e.disabled,onClick:t[0]||(t[0]=n.withModifiers((...i)=>e.clear&&e.clear(...i),["stop"])),onMousedown:t[1]||(t[1]=n.withModifiers(()=>{},["stop"]))},null,40,ml)):n.createCommentVNode("",!0)]),_:1},16,["id","modelValue","locale","format"]))])}const gl=D.register(["date","datetime","time"],{components:{DatePicker:_t,TimePicker:Mt,DateTimePicker:ds},nativeField:!0,textField:!0,computed:{dateValue:{get(){const{value:e}=this;return e&&new Date(e)},set(e){this.value=e}},formats:b("formats",{type:Object,default:null,get(e){const{date:t,time:o}=c.assignDeeply({},this.api.formats,e);return{date:["date","datetime"].includes(this.type)?t:null,time:["time","datetime"].includes(this.type)?o:null}}})},methods:{getComponent(e){return{date:"date-picker",time:"time-picker",datetime:"date-time-picker"}[e]}},processValue(e,t){return c.isDate(t)?t.toISOString():t}}),bl=y(gl,[["render",fl]]);function Xt(e){const t=e?c.isArray(e)?e:Object.entries(e):[];return new URLSearchParams(t.reduce((o,[s,a])=>{for(const r of c.asArray(a))o.push([s,r]);return o},[])).toString().replaceAll(/%(?:21|24|28|29|2C|2F|3A|3B|3D|3F|40)/g,decodeURIComponent)}function yl({path:e,query:t,hash:o}){history.replaceState(history.state,null,`${location.origin}${e??location.pathname}?${t?Xt(t):location.search.slice(1)}${o??location.hash}`)}const Q={mixins:[ke,Yt,zt],defaultValue(e){return ne(e)?[]:null},provide(){return{$sourceComponent:()=>this}},data(){return{wrappedPrimitives:null,unwrappingPrimitives:!1}},computed:{sourceComponent(){return this},isObjectSource(){return te(this.type)},isListSource(){return ne(this.type)},hasData(){return!!this.value},isReady(){return this.hasData||!this.providesData},isInView(){return!!this.viewComponent},wrapPrimitives(){return this.schema.wrapPrimitives},listData:{get(){let e=this.value;this.isObjectSource?e=e!=null?[e]:[]:e=this.unwrapListData(e)||e,e||(e=[]);const{wrapPrimitives:t}=this;return t?(this.unwrappingPrimitives?this.unwrappingPrimitives=!1:this.wrappedPrimitives=e.map(o=>({[t]:o})),this.wrappedPrimitives):e},set(e){this.wrapPrimitives?this.wrappedPrimitives=e:this.value=this.isObjectSource?e&&e.length>0?e[0]:null:e}},objectData:{get(){return this.listData[0]||null},set(e){this.listData=e?[e]:[]}},sourceSchema(){return this.schema},path(){return this.routeComponent.getChildPath(this.schema.path)},defaultQuery(){const{defaultOrder:e}=this;return e?{order:e}:{}},query:Ve("query",{get(e){return{...this.defaultQuery,...e}},set(e){var s;const{scope:t=(s=this.defaultScope)==null?void 0:s.name,page:o=this.schema.page}=this.query;return e={...this.query,...t!=null&&{scope:t},...o!=null&&{page:o},...e},c.equals(e,this.$route.query)||yl({query:e}),e}}),total:Ve("total"),columns(){return Y(this.schema.columns)},scopes(){return Y(this.schema.scopes)},defaultScope(){let e=null;if(this.scopes)for(const t of Object.values(this.scopes)){if(t.defaultScope)return t;e||(e=t)}return e},defaultOrder(){if(this.columns)for(const e of Object.values(this.columns)){const{defaultSort:t}=e;if(t){const o=c.isString(t)?t:"asc";return`${e.name} ${o}`}}return null},nestedMeta(){return{...this.meta,schema:this.schema}},forms(){return Object.values(K(this.schema,this.context))},view(){return Fe(this.schema,this.context)},linksToView(){return!!this.view},buttonSchemas(){return ee(this.schema.buttons)},isCompact(){return this.forms.every(mt)},isInlined(){return _e(this.schema)},paginate:b("paginate",{type:Number}),render:b("render",{type:Function,default:null}),creatable:b("creatable",{type:Boolean,default:!1,get(e){return e&&A(this.schema)?this.isObjectSource?!this.value:!0:!1}}),editable:b("editable",{type:Boolean,default:!1,get(e){return e&&!this.isInlined}}),deletable:b("deletable",{type:Boolean,default:!1}),draggable:b("draggable",{type:Boolean,default:!1,get(e){return this.isListSource&&this.listData.length>1&&e}}),collapsible:b("collapsible",{type:Boolean,default:null,get(e){return this.isInlined&&!!(e??this.collapsed!==null)}}),collapsed:b("collapsed",{type:Boolean,default:null})},watch:{$route:{flush:"post",handler(e,t){this.providesData&&t.path===e.path&&t.hash===e.hash&&(this.query=e.query,this.loadData(!1))}},wrappedPrimitives:{deep:!0,handler(e,t){const{wrapPrimitives:o}=this;o&&t!==null&&(this.unwrappingPrimitives=!0,this.value=e.map(s=>s[o]))}}},methods:{setupData(){this.query=this.$route.query,this.ensureData()},clearData(){this.total=0,this.value=null},setData(e){!e||this.isListSource&&c.isArray(e)||this.isObjectSource&&c.isObject(e)?this.value=e:this.unwrapListData(e)||c.isObject(e)&&this.isInView&&this.viewComponent.setData(e)},unwrapListData(e){if(this.isListSource&&c.isObject(e)&&c.isNumber(e.total)&&c.isArray(e.results))return this.total=e.total,this.value=e.results,this.value},createItem(e,t){const o=this.createData(e,t);return this.isObjectSource?this.objectData=o:this.listData.push(o),this.collapsible&&this.$nextTick(()=>this.openSchemaComponent(-1)),this.onChange(),o},removeItem(e,t){let o=!1;if(this.isObjectSource)this.objectData=null,o=!0;else{const{listData:s}=this;t>=0&&(s.splice(t,1),o=!0)}o&&(this.removeItemStore(this.schema,e,t),this.onChange())},deleteItem(e,t){const o=e&&this.getItemLabel(this.schema,e,{index:t,extended:!0}),s=()=>this.notify({type:this.isTransient?"info":"success",title:"Successfully Removed",text:[`${o} was ${this.verbs.deleted}.`,this.transientNote]});if(e&&window.confirm(`Do you really want to ${this.verbs.delete} ${o}?`))if(this.isTransient)this.removeItem(e,t),s();else{const a=this.getItemId(this.schema,e,t),r=Ie(a,this.resource);r&&this.handleRequest({method:"delete",resource:r},i=>{i||(this.removeItem(e,t),s()),this.reloadData()})}},getSchemaComponent(e){const{schemaComponents:t}=this,{length:o}=t;return t[(e%o+o)%o]},openSchemaComponent(e){const t=this.getSchemaComponent(e);t&&(t.opened=!0)},async navigateToComponent(e,t){if(this.collapsible){const o=e.startsWith(this.dataPath)?this.isListSource?c.parseDataPath(e.slice(this.dataPath.length+1))[0]??null:0:null;if(o!==null&&c.isNumber(+o)){const s=this.getSchemaComponent(+o);if(s){const{opened:a}=s;a||(s.opened=!0,await this.$nextTick());const r=s.getComponentsByDataPath(e);if(r.length>0&&((t==null?void 0:t(r))??!0))return!0;s.opened=a}}}return this.navigateToRouteComponent(e,t)},navigateToRouteComponent(e,t){return new Promise((o,s)=>{const a=()=>{const{routeComponents:i}=this.appState,l=i[i.length-1];o((t==null?void 0:t([l]))??!0)},r=c.parseDataPath(e);for(;r.length>0;){const i=this.routeComponent.getChildPath(this.api.normalizePath(c.normalizeDataPath(r))),{matched:l}=this.$router.resolve(i);l.length&&l[0].name!=="catch-all"&&(this.$route.path===i?a():this.$router.push({path:i}).catch(s).then(()=>{this.$nextTick(a)})),r.pop()}o(!1)})}},async processSchema(e,t,o,s,a,r=!1,i=!1,l=null){lt(e,t,o);const d=_e(t);if(d&&t.resource)throw new Error(`Nested ${this.isListSource?"lists":this.isObjectSource?"objects":"schema"} cannot load data from their own resources`);const h=`id${a+1}`,u={api:e,schema:t},p={...u,flatten:i,nested:r,param:h},g=await ao(e,t,a);if(l&&await l(g,a+1),A(t)&&!d){const m=a===0?"":t.path,f={path:Zt(m,ne(t)?h:null),component:C.component(r?"DitoFormNested":"DitoForm"),meta:p};te(t)&&s.push({...f,path:Zt(m,h)}),m&&s.push({path:m,redirect:".",meta:u});const[k,V]=g.reduce((B,w)=>(B[w.meta.flatten?0:1].push(w),B),[[],[]]);if(V.length&&(f.children=V),s.push(f),k.length)for(const B of k)s.push({...B.redirect?B:f,path:`${f.path}/${B.path}`,meta:{...B.meta,flatten:i}})}},processValue(e,t,o,s){return s.addSource(o,e),t}};function Zt(e,t){return t?e?`${e}/:${t}`:`:${t}`:e}const Ke={text(e){const t=[{label:"contains",value:"contains"},{label:"equals",value:"equals"},{label:"starts with",value:"starts-with"},{label:"ends with",value:"ends-with"}];return{operator:e.operators?{type:"select",width:"2/5",options:c.isArray(e.operators)?t.filter(o=>e.operators.includes(o.value)):t,clearable:!0}:null,text:{type:"text",width:e.operators?"3/5":"fill",clearable:!0}}},"date-range"(){const e={type:"datetime",width:"1/2",formats:{date:{day:"2-digit",month:"2-digit",year:"numeric"}},clearable:!0};return{from:e,to:e}}};function kl(e,t,o,s){const{sticky:a,...r}=t,i={type:"panel",label:"Filters",name:"$filters",disabled:!1,sticky:a,data(){return Bl(i,s.value)},components:$l(r),buttons:vt(!1),panelButtons:vt(!0),events:{change(){this.applyFilters()}},computed:{filters(){return Dl(this.schema,this.data)},hasFilters(){return this.filters.length>0}},methods:{applyFilters(){s.value={...s.value,filter:this.filters,page:void 0}},clearFilters(){this.resetData(),this.applyFilters()}}};return it(e,i),i}function vt(e){return{clear:{type:"button",text:e?null:"Clear",disabled:({schemaComponent:t})=>!t.hasFilters,events:{click({schemaComponent:t}){t.clearFilters()}}},submit:{type:"submit",text:e?null:"Filter",visible:!e,events:{click({schemaComponent:t}){t.applyFilters()}}}}}function Cl(e){return`$${e}`}function xt(e){return e.startsWith("$")?e.slice(1):null}function $l(e){var o;const t={};for(const s of Object.values(Y(e)||{})){const{filter:a,width:r,...i}=s,l=a?(o=Ke[a])==null?void 0:o.call(Ke,s):s.components;if(l){i.type="form",i.components={};for(const[d,h]of Object.entries(l))if(h){const u=h.label||c.labelize(h.name||d);i.components[d]={...h,label:!1,placeholder:u}}t[Cl(s.name)]={label:i.label??c.labelize(s.name),type:"object",width:r,default:()=>({}),form:i,inlined:!0}}else throw new Error(`Invalid filter '${s.name}': Unknown filter type '${a}'.`)}return t}function en(e,t){var s;const o=e.components[t];return(s=o==null?void 0:o.form)==null?void 0:s.components}function Dl(e,t){const o=[];for(const s in t){const a=t[s];if(a){const r=Object.keys(en(e,s)).map(i=>a[i]??null);r.some(i=>i!==null)&&o.push(`${xt(s)}:${r.map(JSON.stringify).join(",")}`)}}return o}function Bl(e,t){const o={};if(t)for(const a of c.asArray(t.filter)){const[,r,i]=a.match(/^(\w+):(.*)$/);try{o[r]=c.asArray(JSON.parse(`[${i}]`))}catch{}}const s={};for(const a in e.components){const r={},i=o[xt(a)];if(i){const l=en(e,a);if(l){let d=0;for(const h in l)r[h]=i[d++]}}s[a]=r}return s}const wl=["id"],Sl={key:0,class:"dito-list__header"},Vl={key:1,class:"dito-spacer"},Pl=["id"],El={key:1},Nl=["innerHTML"],Ol=["innerHTML"],Tl={key:2,class:"dito-cell-edit-buttons"},Fl={key:1},Ll=["colspan"];function _l(e,t,o,s,a,r){const i=n.resolveComponent("DitoScopes"),l=n.resolveComponent("DitoPagination"),d=n.resolveComponent("DitoTableHead"),h=n.resolveComponent("DitoTableCell"),u=n.resolveComponent("DitoSchemaInlined"),p=n.resolveComponent("DitoEditButtons"),g=n.resolveComponent("DitoDraggable");return e.isReady?(n.openBlock(),n.createElementBlock("div",{key:0,class:"dito-list",id:e.dataPath},[e.scopes||e.hasPagination?(n.openBlock(),n.createElementBlock("div",Sl,[e.scopes?(n.openBlock(),n.createBlock(i,{key:0,query:e.query,scopes:e.scopes},null,8,["query","scopes"])):e.hasPagination?(n.openBlock(),n.createElementBlock("div",Vl)):n.createCommentVNode("",!0),e.hasPagination?(n.openBlock(),n.createBlock(l,{key:2,query:e.query,limit:e.paginate,total:e.total||0},null,8,["query","limit","total"])):n.createCommentVNode("",!0)])):n.createCommentVNode("",!0),n.createElementVNode("table",{class:n.normalizeClass(["dito-table",{"dito-table-separators":e.isInlined,"dito-table-larger-padding":e.hasEditButtons&&!e.isInlined,"dito-table-alternate-colors":!e.isInlined,"dito-table-even-count":e.hasEvenCount}])},[e.columns?(n.openBlock(),n.createBlock(d,{key:0,query:e.query,columns:e.columns,hasEditButtons:e.hasEditButtons},null,8,["query","columns","hasEditButtons"])):n.createCommentVNode("",!0),n.createVNode(g,{tag:"tbody",modelValue:e.updateOrder(e.sourceSchema,e.listData,e.paginationRange),options:e.getDraggableOptions(),draggable:e.draggable,"onUpdate:modelValue":t[0]||(t[0]=m=>e.listData=m)},{default:n.withCtx(()=>[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.listData,(m,f)=>(n.openBlock(),n.createElementBlock("tr",{id:e.getDataPath(f),key:e.getItemUid(e.schema,m)},[e.columns?(n.openBlock(!0),n.createElementBlock(n.Fragment,{key:0},n.renderList(e.columns,k=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.shouldRenderSchema(k)?(n.openBlock(),n.createBlock(h,{key:k.name,class:n.normalizeClass(e.getCellClass(k)),cell:k,schema:e.schema,dataPath:e.getDataPath(f),data:m,meta:e.nestedMeta,store:e.store,nested:!1,disabled:e.disabled||e.isLoading},null,8,["class","cell","schema","dataPath","data","meta","store","disabled"])):n.createCommentVNode("",!0)],64))),256)):(n.openBlock(),n.createElementBlock("td",El,[e.isInlined?(n.openBlock(),n.createBlock(u,{key:0,label:e.getItemLabel(e.schema,m,{index:f,asObject:!0}),schema:e.getItemFormSchema(e.schema,m,e.context),dataPath:e.getDataPath(f),data:m,meta:e.nestedMeta,store:e.getItemStore(e.schema,m,f),disabled:e.disabled||e.isLoading,collapsed:e.collapsed,collapsible:e.collapsible,deletable:e.deletable,draggable:e.draggable,editable:e.editable,editPath:e.getEditPath(m,f),onDelete:k=>e.deleteItem(m,f)},null,8,["label","schema","dataPath","data","meta","store","disabled","collapsed","collapsible","deletable","draggable","editable","editPath","onDelete"])):e.schema.component?(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.schema.component),{key:1,dataPath:e.getDataPath(f),data:m,nested:!1},null,8,["dataPath","data"])):e.render?(n.openBlock(),n.createElementBlock("span",{key:2,innerHTML:e.render(e.getContext(m,f))},null,8,Nl)):(n.openBlock(),n.createElementBlock("span",{key:3,innerHTML:e.getItemLabel(e.schema,m,{index:f})},null,8,Ol))])),e.hasCellEditButtons?(n.openBlock(),n.createElementBlock("td",Tl,[n.createVNode(p,{schema:e.getItemFormSchema(e.schema,m,e.context),dataPath:e.getDataPath(f),data:m,meta:e.nestedMeta,store:e.getItemStore(e.schema,m,f),disabled:e.disabled||e.isLoading,deletable:e.deletable,draggable:e.draggable,editable:e.editable,editPath:e.getEditPath(m,f),onDelete:k=>e.deleteItem(m,f)},null,8,["schema","dataPath","data","meta","store","disabled","deletable","draggable","editable","editPath","onDelete"])])):n.createCommentVNode("",!0)],8,Pl))),128))]),_:1},8,["modelValue","options","draggable"]),e.hasListButtons&&!e.single?(n.openBlock(),n.createElementBlock("tfoot",Fl,[n.createElementVNode("tr",null,[n.createElementVNode("td",{class:"dito-cell-edit-buttons",colspan:e.numColumns},[n.createVNode(p,{buttons:e.buttonSchemas,schema:e.schema,dataPath:e.dataPath,data:e.listData,meta:e.meta,store:e.store,disabled:e.disabled||e.isLoading,creatable:e.creatable,createPath:e.path},null,8,["buttons","schema","dataPath","data","meta","store","disabled","creatable","createPath"])],8,Ll)])])):n.createCommentVNode("",!0)],2),e.hasListButtons&&e.single?(n.openBlock(),n.createBlock(p,{key:1,class:"dito-buttons-large dito-buttons-main dito-buttons-sticky",buttons:e.buttonSchemas,schema:e.schema,dataPath:e.dataPath,data:e.listData,meta:e.meta,store:e.store,disabled:e.disabled||e.isLoading,creatable:e.creatable,createPath:e.path},null,8,["buttons","schema","dataPath","data","meta","store","disabled","creatable","createPath"])):n.createCommentVNode("",!0)],8,wl)):n.createCommentVNode("",!0)}const du="",Ml=D.register("list",{mixins:[Q,We],getSourceType(e){return e},getPanelSchema(e,t,o,s){const{filters:a}=t;if(a)return kl(e,a,o,n.computed({get(){return s.query},set(r){const i=l=>c.pickBy(l,d=>d!==void 0);c.equals(i(r),i(s.query))||(s.query=r,s.loadData(!1))}}))},computed:{hasPagination(){return!!this.paginate},hasListButtons(){return!!(this.buttonSchemas||this.creatable)},hasEditButtons(){const{listData:e}=this;return e.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(e){return T(this.dataPath,e)},getEditPath(e,t){if(this.editable){const o=this.getItemId(this.schema,e,t);return ut(this.schema,o,this.context)||`${this.path}/${o}`}return null},getCellClass(e){return`dito-cell-${c.hyphenate(e.name)}`},getContext(e,t){return new S(this,{data:e,value:e,index:t,dataPath:this.getDataPath(t)})},onFilterErrors(e){const t=T(this.dataPath,"$filters"),o=this.schemaComponent.getPanelByDataPath(t);if(o)return o.showValidationErrors(e,!0),!0}},async processSchema(e,t,o,s,a,r=!1,i=!1,l=null){await Promise.all([he(t),at(t.columns),Q.processSchema(e,t,o,s,a,r,i,l)])}}),jl=y(Ml,[["render",_l]]);function Il(e,t,o,s,a,r){const i=n.resolveComponent("DitoLabel");return n.openBlock(),n.createBlock(i,{class:"dito-label-component",label:e.value,dataPath:e.dataPath},null,8,["label","dataPath"])}const cu="",Rl=D.register("label",{excludeValue:!0,generateLabel:!1}),zl=y(Rl,[["render",Il]]),ql=["id"],Ul={key:0,class:"dito-buttons dito-buttons-toolbar"},Al={class:"dito-button-group"},Hl=["onClick"];function Wl(e,t,o,s,a,r){const i=n.resolveComponent("Icon"),l=n.resolveComponent("EditorContent");return n.openBlock(),n.createElementBlock("div",{class:"dito-markup",id:e.dataPath},[e.groupedButtons.length>0?(n.openBlock(),n.createElementBlock("div",Ul,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.groupedButtons,d=>(n.openBlock(),n.createElementBlock("div",Al,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(d,({name:h,icon:u,isActive:p,onClick:g})=>(n.openBlock(),n.createElementBlock("button",{class:n.normalizeClass(["dito-button",{"dito-active":p}]),key:h,onClick:g},[n.createVNode(i,{name:u},null,8,["name"])],10,Hl))),128))]))),256))])):n.createCommentVNode("",!0),n.createVNode(l,{class:"dito-markup-editor",ref:"editor",editor:e.editor,style:n.normalizeStyle(e.styles)},null,8,["editor","style"]),e.resizable?(n.openBlock(),n.createElementBlock("div",{key:1,class:"dito-resize",onMousedown:t[0]||(t[0]=n.withModifiers((...d)=>e.onDragResize&&e.onDragResize(...d),["stop","prevent"]))},null,32)):n.createCommentVNode("",!0)],8,ql)}const hu="",Kl=D.register("markup",{mixins:[H],components:{EditorContent:re.EditorContent,Icon:ge},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:e=>this.onClickLink(e)}})},basicNodeButtons(){return this.getButtons("nodes",{paragraph:{command:"setParagraph"},heading:{attribute:"level",values:[1,2,3,4,5,6]}})},advancedNodeButtons(){return this.getButtons("nodes",{bulletList:!0,orderedList:!0,blockquote:!0,codeBlock:!0})},toolButtons(){return this.getButtons("tools",{undo:!0,redo:!0})},groupedButtons(){return[this.markButtons,this.basicNodeButtons,this.advancedNodeButtons,this.toolButtons].filter(e=>e.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:b("resizable",{type:Boolean,default:!1}),whitespace:b("whitespace",{type:String,default:"collapse"}),enableRules:b("enableRules",{type:[Object,Boolean],default:!1,get(e){return c.isObject(e)?e:{input:!!e,paste:!!e}}})},watch:{readyonly:"updateEditorOptions",autofocus:"updateEditorOptions",enableRules:"updateEditorOptions"},created(){let e=!1,t=!1;const o=()=>{!this.focused&&e&&(e=!1,this.onChange())},s=()=>this.onFocus(),a=()=>{this.onBlur(),o()},r=c.debounce(l=>{t=!0,this.value=l.getHTML(),e=!0,o()},100),i=({editor:l})=>{r(l),this.onInput()};this.$watch("value",l=>{t?t=!1:this.editor.commands.setContent(l,!1,this.parseOptions)}),this.editor=new re.Editor({...this.editorOptions,onFocus:s,onBlur:a,onUpdate:i,extensions:this.getExtensions(),content:this.value||""})},unmounted(){this.editor.destroy()},methods:{onDragResize(e){const t=({clientX:i,clientY:l})=>({x:i,y:l});let o=t(e).y,s=parseFloat(getComputedStyle(this.$refs.editor.$el).height);const a=i=>{const{y:l}=t(i);s+=l-o,o=l,this.height=`${Math.max(s,0)}px`},r=this.domOn(document,{mousemove:a,mouseup(i){a(i),r.remove()}})},updateEditorOptions(){this.editor.setOptions(this.editorOptions)},async onClickLink(e){const t=await this.rootComponent.showDialog({components:{href:{type:"url",label:"Link",autofocus:!0},title:{type:"text",label:"Title"}},buttons:{cancel:{},apply:{type:"submit"},remove:{events:{click({dialogComponent:o}){o.resolve(null)}}}},data:re.getMarkAttributes(this.editor.state,"link")});if(t){let{href:o,title:s}=t;if(o)try{new URL(o)}catch{o=`https://${o}`}e.commands.setLink({href:o,title:s})}else t===null&&e.commands.unsetLink()},getExtensions(){const{marks:e={},nodes:t={},tools:o={}}=this.schema;return[cn.Document,hn.Text,Dn.Paragraph,e.bold&&un.Bold,e.italic&&mn.Italic,e.underline&&bn.Underline,e.strike&&gn.Strike,e.small&&Yl,e.code&&pn.Code,e.link&&Jl,t.blockquote&&yn.Blockquote,t.codeBlock&&kn.CodeBlock,Cn.HardBreak,t.heading&&$n.Heading.configure({levels:t.heading}),t.horizontalRule&&Bn.HorizontalRule,(t.orderedList||t.bulletList)&&Vn.ListItem,t.bulletList&&Sn.BulletList,t.orderedList&&wn.OrderedList,o.history&&Pn.History].filter(s=>!!s)},getButtons(e,t){const o=[],{commands:s}=this.editor,a=({name:i,icon:l,command:d,attributes:h,onClick:u})=>{o.push({name:i,icon:l,isActive:this.editor.isActive(i,h),onClick:()=>{d??(d=i in s?i:`toggle${c.camelize(i,!0)}`),d in s&&(u?u(this.editor,h):(g=>this.editor.chain()[d](g).focus().run())(h))}})},r=this.schema[e];if(r)for(const[i,l]of Object.entries(t)){const d=["undo","redo"].includes(i)?"history":i,h=r[d],u=c.hyphenate(i);if(h){if(l===!0)a({name:i,icon:u});else if(c.isObject(l)){const{command:p,attribute:g,values:m,onClick:f}=l;if(g){if(c.isArray(m)&&c.isArray(h))for(const k of m)h.includes(k)&&a({name:i,icon:`${u}-${k}`,command:p,attributes:{[g]:k},onClick:f})}else a({name:i,icon:u,command:p,onClick:f})}}}return o},focusElement(){this.editor.commands.focus()},blurElement(){this.editor.commands.blur()}}}),Yl=re.Mark.create({name:"small",parseHTML(){return[{tag:"small"}]},renderHTML(){return["small",0]},addCommands(){return{setSmall:e=>({commands:t})=>t.setMark(this.name,e),toggleSmall:e=>({commands:t})=>t.toggleMark(this.name,e),unsetSmall:()=>({commands:e})=>e.unsetMark(this.name)}}}),Jl=fn.Link.extend({inclusive:!1,schema:{attrs:{href:{default:null},title:{default:null}},parseHTML(){return[{tag:"a",getAttrs:e=>({href:e.getAttribute("href"),title:e.getAttribute("title")})}]},renderHTML(e){return["a",e.attrs,0]}}}),Gl=y(Kl,[["render",Wl]]),Ql={class:"dito-multiselect"},Xl={class:"dito-multiselect__inner"},Zl=["disabled"];function vl(e,t,o,s,a,r){const i=n.resolveComponent("VueMultiselect"),l=n.resolveComponent("DitoEditButtons");return n.openBlock(),n.createElementBlock("div",Ql,[n.createElementVNode("div",Xl,[n.createVNode(i,n.mergeProps({ref:"element",modelValue:e.selectedOptions,"onUpdate:modelValue":t[0]||(t[0]=d=>e.selectedOptions=d),class:{"multiselect--multiple":e.multiple,"multiselect--loading":e.isLoading,"multiselect--highlight":e.showHighlight},showLabels:!1,placeholder:e.placeholder,tagPlaceholder:"Press enter to add new tag",options:e.populate&&e.activeOptions||[],customLabel:e.getLabelForOption,trackBy:e.optionValue,groupLabel:e.groupByLabel,groupValues:e.groupByOptions,multiple:e.multiple,taggable:e.taggable,searchable:e.searchable,internalSearch:!e.searchFilter,preserveSearch:!!e.searchFilter,clearOnSelect:!e.searchFilter,closeOnSelect:!e.stayOpen,loading:e.isLoading},e.attributes,{onOpen:e.onOpen,onClose:e.onClose,onTag:e.onAddTag,onSearchChange:e.onSearchChange}),null,16,["modelValue","class","placeholder","options","customLabel","trackBy","groupLabel","groupValues","multiple","taggable","searchable","internalSearch","preserveSearch","clearOnSelect","closeOnSelect","loading","onOpen","onClose","onTag","onSearchChange"]),e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button-clear dito-button-overlay",type:"button",disabled:e.disabled,onClick:t[1]||(t[1]=(...d)=>e.clear&&e.clear(...d))},null,8,Zl)):n.createCommentVNode("",!0)]),e.editable?(n.openBlock(),n.createBlock(l,{key:0,schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,disabled:!1,editable:e.editable,editPath:e.editPath},null,8,["schema","dataPath","data","meta","store","editable","editPath"])):n.createCommentVNode("",!0)])}const uu="",xl=D.register("multiselect",{mixins:[Ce],components:{VueMultiselect:En},data(){return{searchedOptions:null,populate:!1}},computed:{selectedOptions:{get(){return this.multiple?(this.selectedValue||[]).map(e=>this.getOptionForValue(e)||this.addTagOption(e)).filter(Boolean):this.selectedOption},set(e){this.selectedValue=this.multiple?(e||[]).map(t=>this.getValueForOption(t)):this.getValueForOption(e),this.onChange()}},activeOptions(){return this.searchedOptions||this.options},multiple:b("multiple",{type:Boolean,default:!1}),searchable:b("searchable",{type:Boolean,default:!1}),taggable:b("taggable",{type:Boolean,default:!1}),stayOpen:b("stayOpen",{type:Boolean,default:!1}),placeholder(){let{placeholder:e,searchable:t,taggable:o}=this.schema;return c.isBoolean(e)&&(e=e?void 0:null),e===void 0?t&&o?`Search or add a ${this.label}`:t?`Select or search ${this.label}`:void 0:e},showHighlight(){return this.isMounted&&this.$refs.element.pointerDirty}},mounted(){this.autofocus&&this.focus()},methods:{addTagOption(e){if(this.taggable){const{optionLabel:t,optionValue:o}=this,s=t&&o?{[t]:e,[o]:e}:e;return this.options.push(s),s}},focusElement(){this.$refs.element.activate()},blurElement(){this.$refs.element.deactivate()},onOpen(){this.populate=!0},onClose(){this.focused&&this.onBlur()},onBlur(){this.$refs.element.isOpen||Z.methods.onBlur.call(this)},onAddTag(e){const t=this.addTagOption(e);t&&this.value.push(this.getValueForOption(t))},async onSearchChange(e){this.searchFilter&&(e?(this.searchedOptions=[],this.searchedOptions=await this.resolveData(()=>this.searchFilter(new S(this,{query:e})))):this.searchedOptions=null)}}}),ed=y(xl,[["render",vl]]),Ye={computed:{inputValue:{get(){return this.value!==null?this.value:""},set(e){this.value=e!==""?this.isInteger?parseInt(e,10):parseFloat(e):null}},isInteger(){return!1},stepValue(){return this.clearable?null:this.step==null&&!this.isInteger?"any":this.step},decimals:b("decimals",{type:Number}),step:b("step",{type:Number,get(e){return this.isInteger&&e!=null?Math.ceil(e):e}}),min:b("min",{type:Number,get(e){var t;return e=e===void 0?(t=this.getSchemaValue("range",{type:Array}))==null?void 0:t[0]:e,this.isInteger&&e!=null?Math.floor(e):e}}),max:b("max",{type:Number,get(e){var t;return e=e===void 0?(t=this.getSchemaValue("range",{type:Array}))==null?void 0:t[1]:e,this.isInteger&&e!=null?Math.ceil(e):e}}),range:b("range",{type:Array,get(){const{min:e,max:t}=this;return e!=null&&t!=null?[e,t]:void 0},set(e){c.isArray(e)&&([this.min,this.max]=e)}})},methods:{getValidations(){const e={},{range:t,min:o,max:s,decimals:a,step:r}=this;if(t?e.range=t:(o!=null&&(e.min=o),s!=null&&(e.max=s)),a!=null)e.decimals=a;else if(r){const i=(`${r}`.split(".")[1]||"").length;i>0?e.decimals=i:e.integer=!0}return this.isInteger&&(e.integer=!0),e}}},td=["disabled"];function nd(e,t,o,s,a,r){const i=n.resolveComponent("InputField");return n.openBlock(),n.createBlock(i,n.mergeProps({class:"dito-number",id:e.dataPath,ref:"element",modelValue:e.inputValue,"onUpdate:modelValue":t[1]||(t[1]=l=>e.inputValue=l),type:"number"},e.attributes,{min:e.min,max:e.max,step:e.stepValue}),{after:n.withCtx(()=>[e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button-clear dito-button-overlay",disabled:e.disabled,onClick:t[0]||(t[0]=n.withModifiers((...l)=>e.clear&&e.clear(...l),["stop"]))},null,8,td)):n.createCommentVNode("",!0)]),_:1},16,["id","modelValue","min","max","step"])}const pu="",od=D.register(["number","integer"],{mixins:[Ye],components:{InputField:J},nativeField:!0,textField:!0,computed:{isInteger(){return this.type==="integer"}}}),sd=y(od,[["render",nd]]),ad=["id"],rd={key:0,class:"dito-object-content"},id=["innerHTML"],ld=["innerHTML"];function dd(e,t,o,s,a,r){const i=n.resolveComponent("DitoSchemaInlined"),l=n.resolveComponent("DitoEditButtons");return e.isReady?(n.openBlock(),n.createElementBlock("div",{key:0,class:"dito-object",id:e.dataPath},[e.objectData?(n.openBlock(),n.createElementBlock("div",rd,[e.isInlined?(n.openBlock(),n.createBlock(i,{key:0,label:e.objectLabel,schema:e.getItemFormSchema(e.schema,e.objectData,e.context),dataPath:e.dataPath,data:e.objectData,meta:e.nestedMeta,store:e.store,disabled:e.disabled||e.isLoading,collapsed:e.collapsed,collapsible:e.collapsible,deletable:e.objectData&&e.deletable,editable:e.objectData&&e.editable,editPath:e.path,accumulatedBasis:e.accumulatedBasis,onDelete:t[0]||(t[0]=d=>e.deleteItem(e.objectData))},null,8,["label","schema","dataPath","data","meta","store","disabled","collapsed","collapsible","deletable","editable","editPath","accumulatedBasis"])):e.schema.component?(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.schema.component),{key:1,dataPath:e.dataPath,data:e.objectData,nested:!1},null,8,["dataPath","data"])):e.render?(n.openBlock(),n.createElementBlock("span",{key:2,innerHTML:e.render(e.getContext())},null,8,id)):(n.openBlock(),n.createElementBlock("span",{key:3,innerHTML:e.getItemLabel(e.schema,e.objectData)},null,8,ld))])):n.createCommentVNode("",!0),n.createVNode(l,{buttons:e.buttonSchemas,schema:e.schema,dataPath:e.dataPath,data:e.objectData,path:e.path,meta:e.meta,store:e.store,disabled:e.disabled||e.isLoading,creatable:e.creatable,createPath:e.path},null,8,["buttons","schema","dataPath","data","path","meta","store","disabled","creatable","createPath"])],8,ad)):n.createCommentVNode("",!0)}const mu="",cd=D.register("object",{mixins:[Q],getSourceType(e){return e},computed:{objectLabel(){return this.collapsible?this.getItemLabel(this.schema,this.objectData,{asObject:!0}):null}},methods:{getContext(){return new S(this,{data:this.objectData})}},async processSchema(e,t,o,s,a,r=!1,i=!1,l=null){await Promise.all([he(t),Q.processSchema(e,t,o,s,a,r,i,l)])}}),hd=y(cd,[["render",dd]]),ud=D.register("panel",{defaultValue:()=>{},excludeValue:!0,generateLabel:!1,omitSpacing:!0,getPanelSchema(e,t){const{name:o,...s}=t;return s}}),pd=["id","value","max"];function md(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("progress",n.mergeProps({class:"dito-progress",id:e.dataPath,ref:"element",value:e.progressValue,max:e.progressMax},e.attributes),null,16,pd)}const fd=D.register("progress",{mixins:[Ye],computed:{progressValue(){let{value:e,range:t,step:o}=this;return e!==null?(t&&(e-=t[0]),o&&(e=Math.round(e/o)*o)):e="",e},progressMax(){const{range:e}=this;return e?e[1]-e[0]:null}}}),gd=y(fd,[["render",md]]),bd=["id"],yd=["value"];function kd(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("ul",{class:n.normalizeClass(["dito-radio-buttons",`dito-layout-${e.schema.layout||"vertical"}`]),id:e.dataPath},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.options,i=>(n.openBlock(),n.createElementBlock("li",null,[n.createElementVNode("label",null,[n.withDirectives(n.createElementVNode("input",n.mergeProps({class:"dito-radio-button",ref_for:!0,ref:"element","onUpdate:modelValue":t[0]||(t[0]=l=>e.selectedValue=l),type:"radio",value:e.getValueForOption(i)},e.attributes),null,16,yd),[[n.vModelRadio,e.selectedValue]]),n.createTextVNode(n.toDisplayString(e.getLabelForOption(i)),1)])]))),256))],10,bd)}const fu="",Cd=D.register("radio",{mixins:[Ce],nativeField:!0,defaultWidth:"auto"}),$d=y(Cd,[["render",kd]]);function Dd(e,t,o,s,a,r){const i=n.resolveComponent("DitoSchemaInlined");return n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["dito-section",{"dito-section--labelled":e.hasLabel}])},[n.createVNode(i,{class:"dito-section__schema",label:e.label,schema:e.getItemFormSchema(e.schema,e.item,e.context),dataPath:e.dataPath,data:e.item,meta:e.meta,store:e.store,padding:e.hasLabel?"nested":"inlined",disabled:e.disabled,collapsed:e.collapsed,collapsible:e.collapsible,labelNode:e.labelNode},null,8,["label","schema","dataPath","data","meta","store","padding","disabled","collapsed","collapsible","labelNode"])],2)}const gu="",Bd=D.register("section",{defaultValue:()=>{},ignoreMissingValue:e=>!e.nested&&!("default"in e),defaultNested:!1,generateLabel:!1,computed:{item(){return this.nested?this.value:this.data},hasLabel(){return!!this.schema.label},collapsible:b("collapsible",{type:Boolean,default:null,get(e){return!!(e??this.collapsed!==null)}}),collapsed:b("collapsed",{type:Boolean,default:null})},methods:{getItemFormSchema:Le},async processSchema(e,t,o,s,a){await x(e,t,s,a)}}),wd=y(Bd,[["render",Dd]]),Sd={class:"dito-select"},Vd={class:"dito-select__inner"},Pd=["id"],Ed=["label"],Nd=["value"],Od=["value"],Td=["value"],Fd=["disabled"];function Ld(e,t,o,s,a,r){const i=n.resolveComponent("DitoEditButtons");return n.openBlock(),n.createElementBlock("div",Sd,[n.createElementVNode("div",Vd,[n.withDirectives(n.createElementVNode("select",n.mergeProps({id:e.dataPath,ref:"element","onUpdate:modelValue":t[0]||(t[0]=l=>e.selectedValue=l)},e.attributes,{onMousedown:t[1]||(t[1]=l=>e.populate=!0),onFocus:t[2]||(t[2]=l=>e.populate=!0)}),[e.populate?(n.openBlock(!0),n.createElementBlock(n.Fragment,{key:0},n.renderList(e.options,l=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.groupBy?(n.openBlock(),n.createElementBlock("optgroup",{key:0,label:l[e.groupByLabel]},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(l[e.groupByOptions],d=>(n.openBlock(),n.createElementBlock("option",{value:e.getValueForOption(d)},n.toDisplayString(e.getLabelForOption(d)),9,Nd))),256))],8,Ed)):(n.openBlock(),n.createElementBlock("option",{key:1,value:e.getValueForOption(l)},n.toDisplayString(e.getLabelForOption(l)),9,Od))],64))),256)):e.selectedOption?(n.openBlock(),n.createElementBlock("option",{key:1,value:e.selectedValue},n.toDisplayString(e.getLabelForOption(e.selectedOption)),9,Td)):n.createCommentVNode("",!0)],16,Pd),[[n.vModelSelect,e.selectedValue]]),e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button-clear dito-button-overlay",disabled:e.disabled,onClick:t[3]||(t[3]=(...l)=>e.clear&&e.clear(...l))},null,8,Fd)):n.createCommentVNode("",!0)]),e.editable?(n.openBlock(),n.createBlock(i,{key:0,schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,disabled:!1,editable:e.editable,editPath:e.editPath},null,8,["schema","dataPath","data","meta","store","editable","editPath"])):n.createCommentVNode("",!0)])}const bu="",_d=D.register("select",{mixins:[Ce],nativeField:!0,data(){return{populate:!0}}}),Md=y(_d,[["render",Ld]]),jd={class:"dito-slider"},Id=["id","min","max","step"];function Rd(e,t,o,s,a,r){const i=n.resolveComponent("InputField");return n.openBlock(),n.createElementBlock("div",jd,[n.withDirectives(n.createElementVNode("input",n.mergeProps({class:"dito-range",id:e.dataPath,ref:"element","onUpdate:modelValue":t[0]||(t[0]=l=>e.inputValue=l),type:"range"},e.attributes,{min:e.min,max:e.max,step:e.stepValue}),null,16,Id),[[n.vModelText,e.inputValue]]),e.input?(n.openBlock(),n.createBlock(i,n.mergeProps({key:0,class:"dito-number",modelValue:e.inputValue,"onUpdate:modelValue":t[1]||(t[1]=l=>e.inputValue=l),type:"number"},e.attributes,{min:e.min,max:e.max,step:e.stepValue}),null,16,["modelValue","min","max","step"])):n.createCommentVNode("",!0)])}const yu="",zd=D.register("slider",{mixins:[Ye],components:{InputField:J},nativeField:!0,computed:{input:b("input",{type:Boolean,default:!0})}}),qd=y(zd,[["render",Rd]]);function Ud(e,t,o,s,a,r){const i=n.resolveComponent("SwitchButton");return n.openBlock(),n.createBlock(i,n.mergeProps({class:"dito-switch",id:e.dataPath,ref:"element",modelValue:e.value,"onUpdate:modelValue":t[0]||(t[0]=l=>e.value=l),labels:e.labels},e.attributes),null,16,["id","modelValue","labels"])}const ku="",Ad=D.register("switch",{defaultValue:!1,defaultWidth:"auto",components:{SwitchButton:Ds},computed:{labels(){return this.schema.labels}}}),Hd=y(Ad,[["render",Ud]]),tn={computed:{trim:b("trim",{type:Boolean,default:!1})},processValue(e,t){return e.trim&&t!=null&&c.isString(t)&&(t=t.trim()),t===""&&(t=Me(e)),t}},Wd=["disabled"];function Kd(e,t,o,s,a,r){const i=n.resolveComponent("InputField");return n.openBlock(),n.createBlock(i,n.mergeProps({class:"dito-text",id:e.dataPath,ref:"element",modelValue:e.inputValue,"onUpdate:modelValue":t[1]||(t[1]=l=>e.inputValue=l),type:e.inputType},e.attributes),{after:n.withCtx(()=>[e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button-clear dito-button-overlay",disabled:e.disabled,onClick:t[0]||(t[0]=n.withModifiers((...l)=>e.clear&&e.clear(...l),["stop"]))},null,8,Wd)):n.createCommentVNode("",!0)]),_:1},16,["id","modelValue","type"])}const Yd="****************",Jd=D.register(["text","email","url","hostname","domain","tel","password","creditcard"],{mixins:[tn],components:{InputField:J},nativeField:!0,textField:!0,ignoreMissingValue:e=>e.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?Yd:this.value},set(e){this.value=e}}},methods:{getValidations(){const e={email:"email",url:"url",hostname:"hostname",domain:"domain",password:"password",creditcard:"creditcard"}[this.type];return e?{[e]:!0}:{}}}}),Gd=y(Jd,[["render",Kd]]),Qd=["id","rows"];function Xd(e,t,o,s,a,r){return n.withDirectives((n.openBlock(),n.createElementBlock("textarea",n.mergeProps({class:"dito-textarea dito-input",id:e.dataPath,ref:"element","onUpdate:modelValue":t[0]||(t[0]=i=>e.value=i)},e.attributes,{rows:e.lines,class:{"dito-resizable":e.resizable}}),null,16,Qd)),[[n.vModelText,e.value]])}const Cu="",Zd=D.register("textarea",{mixins:[tn],nativeField:!0,textField:!0,computed:{lines(){return this.schema.lines||4},resizable:b("resizable",{type:Boolean,default:!1})}}),vd=y(Zd,[["render",Xd]]),xd={class:"dito-tree-list"},ec={class:"dito-tree-panel"},tc={key:0,class:"dito-tree-form-container"};function nc(e,t,o,s,a,r){const i=n.resolveComponent("DitoScopes"),l=n.resolveComponent("DitoTreeItem"),d=n.resolveComponent("RouterView");return n.openBlock(),n.createElementBlock("div",xd,[e.scopes?(n.openBlock(),n.createBlock(i,{key:0,query:e.query,scopes:e.scopes},null,8,["query","scopes"])):n.createCommentVNode("",!0),n.createElementVNode("div",ec,[n.createVNode(l,{schema:e.treeSchema,dataPath:e.treeDataPath,data:e.treeData,draggable:e.draggable,open:!0},null,8,["schema","dataPath","data","draggable"]),e.hasEditableForms?(n.openBlock(),n.createElementBlock("div",tc,[n.createVNode(d)])):n.createCommentVNode("",!0)])])}const $u="",oc=D.register(["tree-list","tree-object"],{mixins:[Q],provide(){return{container:this}},getSourceType(e){return e==="tree-object"?"object":"list"},computed:{path(){var e;return(e=this.formComponent)==null?void 0:e.path},editPath(){var e;return this.$route.path.slice((e=this.path)==null?void 0:e.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:{name:this.name,...this.schema}}:this.schema},hasEditableForms(){const e=t=>A(t)&&(this.getSchemaValue("editable",{type:Boolean,default:!1,schema:t})||t.children&&e(t.children));return e(this.schema)}},async processSchema(e,t,o,s,a,r=!0,i=!1,l=null){await Promise.all([at(t.properties),Q.processSchema(e,t,o,s,a,r,i,(d,h)=>{const{children:u}=t;if(u)return u.type="tree-list",this.processSchema(e,u,u.name,d,h,r,!0,l)})])},getFormSchemasForProcessing(e,t){const{children:o}=e;return K(e,t,o?s=>({...s,components:{...s.components,[o.name]:o}}):null)}}),sc=y(oc,[["render",nc]]);function nn(e){return On.filesize(e,{base:10})}const ac={class:"dito-upload"},rc={class:"dito-table dito-table-separators dito-table-background"},ic=n.createElementVNode("thead",{class:"dito-table-head"},[n.createElementVNode("tr",null,[n.createElementVNode("th",null,[n.createElementVNode("span",null,"File")]),n.createElementVNode("th",null,[n.createElementVNode("span",null,"Size")]),n.createElementVNode("th",null,[n.createElementVNode("span",null,"Status")]),n.createElementVNode("th",null,[n.createElementVNode("span")])])],-1),lc=["innerHTML"],dc={key:1},cc=["download","href","onClick"],hc={key:2},uc={class:"dito-upload__size"},pc={class:"dito-upload__status"},mc={class:"dito-cell-edit-buttons"},fc={class:"dito-buttons dito-buttons-round"},gc=["title"],bc=["onClick"],yc={key:0},kc={colspan:4},Cc={class:"dito-upload-footer"},$c=["value"],Dc={class:"dito-buttons dito-buttons-round"},Bc=["title"];function wc(e,t,o,s,a,r){var h;const i=n.resolveComponent("VueUpload"),l=n.resolveComponent("DitoUploadFile"),d=n.resolveComponent("DitoDraggable");return n.openBlock(),n.createElementBlock("div",ac,[n.createVNode(i,{class:"dito-upload__input",ref:"upload",modelValue:e.uploads,"onUpdate:modelValue":t[0]||(t[0]=u=>e.uploads=u),inputId:e.dataPath,name:e.dataPath,disabled:e.disabled,postAction:e.uploadPath,extensions:e.extensions,accept:e.accept,multiple:e.multiple,size:e.maxSize,drop:(h=e.$el)==null?void 0:h.closest(".dito-container"),dropDirectory:!0,onInputFilter:e.onInputFilter,onInputFile:e.onInputFile},null,8,["modelValue","inputId","name","disabled","postAction","extensions","accept","multiple","size","drop","onInputFilter","onInputFile"]),n.createElementVNode("table",rc,[ic,n.createVNode(d,{modelValue:e.files,"onUpdate:modelValue":t[2]||(t[2]=u=>e.files=u),tag:"tbody",options:e.getDraggableOptions(),draggable:e.draggable},{default:n.withCtx(()=>[e.multiple||!e.isUploadActive?(n.openBlock(!0),n.createElementBlock(n.Fragment,{key:0},n.renderList(e.files,(u,p)=>(n.openBlock(),n.createElementBlock("tr",{key:u.name},[e.render?(n.openBlock(),n.createElementBlock("td",{key:0,innerHTML:e.renderFile(u,p)},null,8,lc)):e.downloadUrls[p]?(n.openBlock(),n.createElementBlock("td",dc,[n.createElementVNode("a",{download:u.name,href:e.downloadUrls[p],target:"_blank",onClick:n.withModifiers(g=>e.onClickDownload(u,p),["prevent"])},[n.createVNode(l,{file:u,thumbnail:e.thumbnails,thumbnailUrl:e.thumbnailUrls[p]},null,8,["file","thumbnail","thumbnailUrl"])],8,cc)])):(n.openBlock(),n.createElementBlock("td",hc,[n.createVNode(l,{file:u,thumbnail:e.thumbnails,thumbnailUrl:e.thumbnailUrls[p]},null,8,["file","thumbnail","thumbnailUrl"])])),n.createElementVNode("td",uc,n.toDisplayString(e.formatFileSize(u.size)),1),n.createElementVNode("td",pc,[u.upload?(n.openBlock(),n.createElementBlock(n.Fragment,{key:0},[u.upload.error?(n.openBlock(),n.createElementBlock(n.Fragment,{key:0},[n.createTextVNode("Error: "+n.toDisplayString(u.upload.error),1)],64)):u.upload.active?(n.openBlock(),n.createElementBlock(n.Fragment,{key:1},[n.createTextVNode("Uploading...")],64)):u.upload.success?(n.openBlock(),n.createElementBlock(n.Fragment,{key:2},[n.createTextVNode("Uploaded")],64)):n.createCommentVNode("",!0)],64)):(n.openBlock(),n.createElementBlock(n.Fragment,{key:1},[n.createTextVNode("Stored")],64))]),n.createElementVNode("td",mc,[n.createElementVNode("div",fc,[e.multiple?n.createCommentVNode("",!0):(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button dito-button-upload",title:e.uploadTitle,onClick:t[1]||(t[1]=(...g)=>e.onClickUpload&&e.onClickUpload(...g))},null,8,gc)),e.draggable?(n.openBlock(),n.createElementBlock("a",n.mergeProps({key:1,class:"dito-button"},e.getButtonAttributes(e.verbs.drag)),null,16)):n.createCommentVNode("",!0),e.deletable?(n.openBlock(),n.createElementBlock("button",n.mergeProps({key:2,class:"dito-button",type:"button"},e.getButtonAttributes(e.verbs.delete),{onClick:g=>e.deleteFile(u,p)}),null,16,bc)):n.createCommentVNode("",!0)])])]))),128)):n.createCommentVNode("",!0)]),_:1},8,["modelValue","options","draggable"]),e.multiple||e.isUploadActive||!e.hasFiles?(n.openBlock(),n.createElementBlock("tfoot",yc,[n.createElementVNode("tr",null,[n.createElementVNode("td",kc,[n.createElementVNode("div",Cc,[e.isUploadActive?(n.openBlock(),n.createElementBlock("progress",{key:0,class:"dito-progress",value:e.uploadProgress,max:"100"},null,8,$c)):n.createCommentVNode("",!0),n.createElementVNode("div",Dc,[e.isUploadActive?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button",type:"button",onClick:t[3]||(t[3]=n.withModifiers(u=>e.upload.active=!1,["prevent"]))},"Cancel")):n.createCommentVNode("",!0),e.multiple||!e.hasFiles?(n.openBlock(),n.createElementBlock("button",{key:1,class:"dito-button dito-button-upload",title:e.uploadTitle,onClick:t[4]||(t[4]=(...u)=>e.onClickUpload&&e.onClickUpload(...u))},null,8,Bc)):n.createCommentVNode("",!0)])])])])])):n.createCommentVNode("",!0)])])}const Du="",Sc=D.register("upload",{mixins:[We],components:{VueUpload:Tn},data(){return{uploads:[]}},computed:{upload(){return this.$refs.upload},uploadTitle(){return this.multiple?"Upload Files":"Upload File"},files(){return on(this.value)},downloadUrls(){return this.files.map((e,t)=>this.getDownloadUrl(e,t))},thumbnailUrls(){return this.files.map((e,t)=>this.getThumbnailUrl(e,t))},multiple:b("multiple",{type:Boolean,default:!1,callback:!1}),extensions:b("extensions",{type:[Array,String,RegExp]}),accept:b("accept",{type:Array,get(e){return c.isArray(e)?e.join(","):e}}),maxSize:b("maxSize",{type:[String,Number],get(e){return e?Nn(e):void 0}}),draggable:b("draggable",{type:Boolean,default:!1,get(e){return e&&this.files.length>1}}),deletable:b("deletable",{type:Boolean,default:!1}),render:b("render",{type:Function,default:null}),thumbnails:b("thumbnails",{type:[Boolean,String],default(e){return e??!!this.schema.thumbnailUrl},get(e){return e===!0?"medium":e||null}}),hasFiles(){return this.files.length>0},hasUploads(){return this.uploads.length>0},isUploadReady(){return this.hasUploads&&!(this.upload.active||this.upload.uploaded)},isUploadActive(){return this.hasUploads&&this.upload.active},uploadProgress(){return this.uploads.reduce((e,t)=>e+ +t.progress,0)/this.uploads.length},uploadPath(){return this.getResourceUrl({type:"upload",path:this.api.normalizePath(this.dataPath)})}},watch:{isUploadReady(e){e&&this.$nextTick(()=>{this.upload.active=!0})}},methods:{formatFileSize:nn,getFileContext(e,t){return this.multiple?new S(this,{value:e,data:this.files,index:t,dataPath:T(this.dataPath,t)}):this.context},renderFile(e,t){return this.render(this.getFileContext(e,t))},getDownloadUrl(e,t){return e.url?e.url:!e.upload||e.upload.success?this.getSchemaValue("downloadUrl",{type:"String",default:null,context:this.getFileContext(e,t)}):null},getThumbnailUrl(e,t){return!e.upload||e.upload.success?this.getSchemaValue("thumbnailUrl",{type:"String",default:null,context:this.getFileContext(e,t)})||(e.type.startsWith("image/")?e.url:null):null},deleteFile(e,t){const{name:o}=e;e&&window.confirm(`Do you really want to ${this.verbs.remove} ${o}?`)&&(this.multiple?this.value.splice(t,1):this.value=null,e.upload&&this.upload.remove(e.upload),this.onChange(),this.notify({type:"info",title:"Successfully Removed",text:`${o} was ${this.verbs.deleted}.`}))},getFileIndex(e){return this.multiple&&this.value?this.value.findIndex(t=>t.id===e.id):-1},addFile(e){this.multiple?this.value?this.value.push(e):this.value=[e]:this.value=e},replaceFile(e,t){if(this.multiple){const o=this.getFileIndex(e);o>=0&&(t?this.value[o]=t:this.value.splice(o,1))}else this.value=t},removeFile(e){this.replaceFile(e,null)},onInputFile(e,t){if(e&&!t){const{id:o,name:s,size:a}=e;this.addFile({id:o,name:s,size:a,upload:e})}if(e&&t){const{success:o,error:s}=e;if(o){this.onChange();const a=e.response[0];a?(a.upload=e,this.replaceFile(e,a)):this.removeFile(e)}else if(s){this.removeFile(e);const a={abort:"Upload aborted",denied:"Upload denied",extension:`Unsupported file-type: ${e.name}`,network:"Network error encountered during upload",server:"Server error occurred during upload",size:`File is too large: ${nn(e.size)}`,timeout:"Timeout occurred during upload"}[s]||`Unknown File Upload Error: '${s}'`;this.notify({type:"error",title:"File Upload Error",text:a})}}},onInputFilter(e){var o;const t=e==null?void 0:e.xhr;(o=this.api.cors)!=null&&o.credentials&&t&&!t.withCredentials&&(t.withCredentials=!0)},async onClickDownload(e,t){try{const s=await(await fetch(this.downloadUrls[t])).blob();this.download({filename:e.name,url:URL.createObjectURL(s)})}catch(o){console.error(o)}},onClickUpload(e){this.upload.$el.querySelector("input").dispatchEvent(new e.constructor(e.type,e))}},processValue(e,t){const o=on(t).map(({upload:s,...a})=>!s||s.success?a:null).filter(s=>s);return e.multiple?o:o[0]||null}});function on(e){return e?c.asArray(e):[]}const Vc=Object.freeze(Object.defineProperty({__proto__:null,DitoDitoTypeComponent:ll,DitoTypeButton:Ri,DitoTypeCheckbox:Hi,DitoTypeCheckboxes:Qi,DitoTypeCode:xi,DitoTypeColor:al,DitoTypeComputed:ul,DitoTypeDate:bl,DitoTypeLabel:zl,DitoTypeList:jl,DitoTypeMarkup:Gl,DitoTypeMultiselect:ed,DitoTypeNumber:sd,DitoTypeObject:hd,DitoTypePanel:ud,DitoTypeProgress:gd,DitoTypeRadio:$d,DitoTypeSection:wd,DitoTypeSelect:Md,DitoTypeSlider:qd,DitoTypeSwitch:Hd,DitoTypeText:Gd,DitoTypeTextarea:vd,DitoTypeTreeList:sc,DitoTypeUpload:y(Sc,[["render",wc]])},Symbol.toStringTag,{value:"Module"})),Pc={mounted(e,t){Ec(e,t.value,t.arg)},unmounted(e,t){Nc(e,t.value,t.arg)}};function Ec(e,t,o){$e.getObserver(o).observe(e,t)}function Nc(e,t,o){$e.getObserver(o).unobserve(e,t)}const Oc=typeof ResizeObserver<"u",se={};class $e{constructor(t,o){this.key=t,this.options=o,this.observer=Oc?new ResizeObserver(s=>this.handle(s)):null,this.handlersByNode=new WeakMap,this.nodeCount=0}observe(t,o){var a;let s=this.handlersByNode.get(t);s||(s=new Set,this.handlersByNode.set(t,s),(a=this.observer)==null||a.observe(t,this.options),this.nodeCount++),s.add(o)}unobserve(t,o){var a;const s=this.handlersByNode.get(t);s!=null&&s.delete(o)&&s.size===0&&(this.handlersByNode.delete(t),(a=this.observer)==null||a.unobserve(t),--this.nodeCount===0&&delete se[this.key])}handle(t){for(const o of t){const s=this.handlersByNode.get(o.target);if(s){const a={target:o.target,contentRect:o.contentRect,borderBoxSize:c.asArray(o.borderBoxSize),contentBoxSize:c.asArray(o.contentBoxSize),devicePixelContentBoxSize:c.asArray(o.devicePixelContentBoxSize)};for(const r of s)r(a)}}}static getObserver({box:t="content-box"}={}){const o={box:t},s=JSON.stringify(o);return se[s]||(se[s]=new $e(s,o)),se[s]}}const Tc=["create","created","save","saved","apply","applied","submit","submitted","delete","deleted","remove","removed","clear","cleared","edit","edited","close","closed","cancel","cancelled","drag","dragged","login","logged in"].reduce((e,t)=>(e[t]=t,e),{});class Fc{constructor(t,{dito:o={},api:s,views:a={},...r}={}){this.el=t,this.api=s=c.assignDeeply({base:"/"},o.api,s),this.options=r,s.locale||(s.locale="en-US"),s.formats=c.assignDeeply({},c.defaultFormats,s.formats),s.request||(s.request=d=>_c(s,d)),s.getApiUrl||(s.getApiUrl=d=>jc(s,d)),s.isApiUrl||(s.isApiUrl=d=>Mc(s,d)),s.normalizePath||(s.normalizePath=s.normalizePaths?c.hyphenate:d=>d),s.denormalizePath||(s.denormalizePath=s.normalizePaths?c.camelize:d=>d),s.defaults||(s.defaults={});const i=_(s.users,{type:"collection"})||{};i.login=_(i.login||"login",{method:"post",parent:i}),i.logout=_(i.logout||"logout",{method:"post",parent:i}),i.session=_(i.session||"session",{method:"get",parent:i}),s.users=i,s.resources={any(d){const h=this[d==null?void 0:d.type]||this.default;return d&&h.call(this,d)},default(d){const h=this.any(d.parent);return h?`${h}/${d.path}`:d.path},collection(d){return this.default(d)},member(d){return`${d.path}/${d.id}`},upload(d){return`${this.collection(d.parent)}/upload/${d.path}`},...s.resources},s.headers={"Content-Type":"application/json",...s.headers},c.isString(t)&&(t=document.querySelector(t));const l=this.app=n.createApp({components:{DitoRoot:He,VueNotifications:j,...Fi,...Vc},provide:{api:s,$verbs:()=>Tc,$views:()=>{},$isPopulated:()=>!0,$parentComponent:()=>null,$schemaComponent:()=>null,$schemaParentComponent:()=>null,$routeComponent:()=>null,$dataComponent:()=>null,$sourceComponent:()=>null,$resourceComponent:()=>null,$dialogComponent:()=>null,$panelComponent:()=>null,$tabComponent:()=>null},render:()=>n.h(He,{ref:"root",class:o.settings.rootClass,unresolvedViews:a,options:r})});l.config.errorHandler=console.error,l.use(j,{componentName:"VueNotifications",name:"notify"}),l.directive("resize",Pc),l.use(O.createRouter({routes:[{name:"catch-all",path:"/:_(.*)",components:{}}],history:O.createWebHistory(o.base),linkActiveClass:"",linkExactActiveClass:""})),t.classList.add("dito-app"),l.mount(t)}register(t,o){return D.register(t,o)}}class Lc extends Error{constructor(t){super(`Request failed with status code: ${t.status} (${t.statusText})`),this.response=t}}async function _c(e,{url:t,method:o="get",params:s=null,query:a=s||null,headers:r=null,data:i=null,signal:l=null}){var u,p;s&&c.deprecate("request.params is deprecated. Use action.method and action.path instead.");const d=e.isApiUrl(t),h=await fetch(e.getApiUrl({url:t,query:a}),{method:o.toUpperCase(),...i&&{body:JSON.stringify(i)},headers:{...d&&e.headers,...r},credentials:d&&((u=e.cors)!=null&&u.credentials)?"include":"same-origin",signal:l});if((p=h.headers.get("Content-Type"))!=null&&p.includes("application/json")&&(h.data=await h.json()),!h.ok)throw new Lc(h);return h}function Mc(e,t){return!c.isAbsoluteUrl(t)||t.startsWith(e.url)}function jc(e,{url:t,query:o}){!t.startsWith(e.url)&&!c.isAbsoluteUrl(t)&&(t=Ic(e.url,t));const s=Xt(o);return s?`${t}${t.includes("?")?"&":"?"}${s}`:t}function Ic(e,t){return`${e.replace(/\/+$/,"")}/${t.replace(/^\/+/,"")}`}return Fc});
7
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi51bWQuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy9hZ2VudC5qcyIsIi4uL3NyYy9hcHBTdGF0ZS5qcyIsIi4uL3NyYy91dGlscy9kYXRhLmpzIiwiLi4vc3JjL0RpdG9Db250ZXh0LmpzIiwiLi4vc3JjL21peGlucy9FbWl0dGVyTWl4aW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2NyZWRpdGNhcmQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RlY2ltYWxzLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19kb21haW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2VtYWlsLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19ob3N0bmFtZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faW50ZWdlci5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWF4LmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19taW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3Bhc3N3b3JkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19yYW5nZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmVxdWlyZWQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3VybC5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdGlvbk1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2FjY2Vzc29yLmpzIiwiLi4vc3JjL21peGlucy9UeXBlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvdWlkLmpzIiwiLi4vc3JjL3V0aWxzL1NjaGVtYUdyYXBoLmpzIiwiLi4vc3JjL3V0aWxzL3R5cGUuanMiLCIuLi9zcmMvdXRpbHMvc2NoZW1hLmpzIiwiLi4vc3JjL3V0aWxzL3Jlc291cmNlLmpzIiwiLi4vc3JjL21peGlucy9EaXRvTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvb3B0aW9ucy5qcyIsIi4uL3NyYy9EaXRvQ29tcG9uZW50LmpzIiwiLi4vLi4vdWkvc3JjL3V0aWxzL2RhdGUuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9DYWxlbmRhci52dWUiLCIuLi8uLi91aS9zcmMvdXRpbHMvZXZlbnQuanMiLCIuLi8uLi91aS9zcmMvdXRpbHMvdHJpZ2dlci5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1RyaWdnZXIudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvSW5wdXRGaWVsZC52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JY29uLnZ1ZSIsIi4uLy4uL3VpL3NyYy91dGlscy9zZWxlY3Rpb24uanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9EYXRlUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1RpbWVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvRGF0ZVRpbWVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvUGFnaW5hdGlvbi52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9Td2l0Y2hCdXR0b24udnVlIiwiLi4vLi4vdWkvc3JjL3RyYW5zaXRpb25zL1RyYW5zaXRpb25IZWlnaHQudnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL3Z1ZS5qcyIsIi4uL3NyYy9taXhpbnMvRG9tTWl4aW4uanMiLCIuLi9zcmMvRGl0b1VzZXIuanMiLCIuLi9zcmMvbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzIiwiLi4vc3JjL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUm91dGVNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVldXNlL2ludGVncmF0aW9ucy91c2VGb2N1c1RyYXAvY29tcG9uZW50Lm1qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9EaWFsb2cudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b01lbnUudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RyYWlsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9IZWFkZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b05hdmlnYXRpb24udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b05vdGlmaWNhdGlvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NpZGViYXIudnVlIiwiLi4vc3JjL21peGlucy9QdWxsZG93bk1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0FjY291bnQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VsZW1lbnQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0xhYmVsLnZ1ZSIsIi4uL3NyYy9taXhpbnMvSXRlbU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hSW5saW5lZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZS52dWUiLCIuLi9zcmMvdXRpbHMvbWF0aC5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Db250YWluZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbHMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0J1dHRvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DcmVhdGVCdXR0b24udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NsaXBib2FyZC52dWUiLCIuLi9zcmMvbWl4aW5zL0xvYWRpbmdNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy91dGlscy9wYXRoLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm1OZXN0ZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NvcGVzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYWdpbmF0aW9uLnZ1ZSIsIi4uL3NyYy9taXhpbnMvU29ydGFibGVNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUNlbGwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1VwbG9hZEZpbGUudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZVNvcnRhYmxlL2NvbXBvbmVudC5tanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRHJhZ2dhYmxlLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TcGlubmVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WTm9kZS52dWUiLCIuLi9zcmMvRGl0b1R5cGVDb21wb25lbnQuanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVCdXR0b24udnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ2hlY2tib3gudnVlIiwiLi4vc3JjL21peGlucy9EYXRhTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL09wdGlvbnNNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNoZWNrYm94ZXMudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29kZS52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDb2xvci52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDb21wb25lbnQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29tcHV0ZWQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlRGF0ZS52dWUiLCIuLi9zcmMvdXRpbHMvcm91dGUuanMiLCIuLi9zcmMvbWl4aW5zL1NvdXJjZU1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2ZpbHRlci5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUxpc3QudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTGFiZWwudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTWFya3VwLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZU11bHRpc2VsZWN0LnZ1ZSIsIi4uL3NyYy9taXhpbnMvTnVtYmVyTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVOdW1iZXIudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlT2JqZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVBhbmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVByb2dyZXNzLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVJhZGlvLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNlY3Rpb24udnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlU2VsZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNsaWRlci52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVTd2l0Y2gudnVlIiwiLi4vc3JjL21peGlucy9UZXh0TWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVUZXh0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVRleHRhcmVhLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVRyZWVMaXN0LnZ1ZSIsIi4uL3NyYy91dGlscy91bml0cy5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVVwbG9hZC52dWUiLCIuLi9zcmMvZGlyZWN0aXZlcy9yZXNpemUuanMiLCIuLi9zcmMvdmVyYnMuanMiLCIuLi9zcmMvRGl0b0FkbWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgdXNlci1hZ2VudCBwYXJzZXIgd2FzIGxpZnRlZCBmcm9tIFBhcGVyLmpzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3BhcGVyanMvcGFwZXIuanMvYmxvYi9jYzE1Njk2NzUwMDM1YWIwMGUwMGM2NGM3Yzk1ZGFhMmM4NWVmZTAxL3NyYy9jb3JlL1BhcGVyU2NvcGUuanMjTDc1LUwxMDdcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVXNlckFnZW50KHVzZXJBZ2VudCA9ICcnKSB7XG4gIGNvbnN0IGFnZW50ID0ge31cbiAgLy8gVXNlIHJlcGxhY2UoKSB0byBnZXQgYWxsIG1hdGNoZXMsIGFuZCBkZWFsIHdpdGggQ2hyb21lL1dlYmtpdCBvdmVybGFwOlxuICBjb25zdCB1YSA9IHVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IFtvc10gPVxuICAgIC8oaXBob25lfGlwYWR8bGludXg7IGFuZHJvaWR8ZGFyd2lufHdpbnxtYWN8bGludXh8ZnJlZWJzZHxzdW5vcykvLmV4ZWMoXG4gICAgICB1YVxuICAgICkgfHwgW11cbiAgY29uc3QgcGxhdGZvcm0gPSAoXG4gICAge1xuICAgICAgJ2Rhcndpbic6ICdtYWMnLFxuICAgICAgJ2lwaG9uZSc6ICdpb3MnLFxuICAgICAgJ2lwYWQnOiAnaW9zJyxcbiAgICAgICdsaW51eDsgYW5kcm9pZCc6ICdhbmRyb2lkJ1xuICAgIH1bb3NdIHx8XG4gICAgb3NcbiAgKVxuICBpZiAocGxhdGZvcm0pIHtcbiAgICBhZ2VudC5wbGF0Zm9ybSA9IHBsYXRmb3JtXG4gICAgYWdlbnRbcGxhdGZvcm1dID0gdHJ1ZVxuICB9XG4gIHVhLnJlcGxhY2UoXG4gICAgLyhvcGVyYXxjaHJvbWV8c2FmYXJpfHdlYmtpdHxmaXJlZm94fG1zaWV8dHJpZGVudClcXC8/XFxzKihbLlxcZF0rKSg/Oi4qdmVyc2lvblxcLyhbLlxcZF0rKSk/KD86Lipydjp2PyhbLlxcZF0rKSk/L2csXG4gICAgKG1hdGNoLCBicm93c2VyLCB2MSwgdjIsIHJ2KSA9PiB7XG4gICAgICAvLyBEbyBub3Qgc2V0IGFkZGl0aW9uYWwgYnJvd3NlcnMgb25jZSBjaHJvbWUgaXMgZGV0ZWN0ZWQuXG4gICAgICBpZiAoIWFnZW50LmNocm9tZSkge1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gcnYgfHwgdjIgfHwgdjFcbiAgICAgICAgaWYgKCFhZ2VudC52ZXJzaW9uIHx8IGJyb3dzZXIgIT09ICdzYWZhcmknKSB7XG4gICAgICAgICAgLy8gVXNlIHRoZSB2ZXJzaW9uIHdlIGdldCBmb3Igd2Via2l0IGZvciBTYWZhcmksIHdoaWNoIGlzIGFjdHVhbGx5XG4gICAgICAgICAgLy8gVGhlIFNhZmFyaSB2ZXJzaW9uLCBlLmcuIDE2LjBcbiAgICAgICAgICBhZ2VudC52ZXJzaW9uID0gdmVyc2lvblxuICAgICAgICAgIGFnZW50LnZlcnNpb25OdW1iZXIgPSBwYXJzZUZsb2F0KHZlcnNpb24pXG4gICAgICAgIH1cbiAgICAgICAgYWdlbnQuYnJvd3NlciA9IGJyb3dzZXJcbiAgICAgICAgYWdlbnRbYnJvd3Nlcl0gPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICApXG4gIGlmIChhZ2VudC5jaHJvbWUpIHtcbiAgICAvLyBDYW4ndCBoYXZlIGl0IGJvdGggd2F5cywgQ2hyb21lLlxuICAgIGRlbGV0ZSBhZ2VudC53ZWJraXRcbiAgfVxuICByZXR1cm4gYWdlbnRcbn1cbiIsImltcG9ydCB7IHJlYWN0aXZlIH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgcGFyc2VVc2VyQWdlbnQgfSBmcm9tICcuL3V0aWxzL2FnZW50J1xuXG5leHBvcnQgZGVmYXVsdCByZWFjdGl2ZSh7XG4gIHRpdGxlOiAnJyxcbiAgcm91dGVDb21wb25lbnRzOiBbXSxcbiAgdXNlcjogbnVsbCxcbiAgYWdlbnQ6IHBhcnNlVXNlckFnZW50KG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJycpLFxuICBsb2FkQ2FjaGU6IHt9LCAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICBhY3RpdmVMYWJlbDogbnVsbCxcbiAgY2xpcGJvYXJkRGF0YTogbnVsbFxufSlcbiIsImltcG9ydCB7XG4gIGlzSW50ZWdlcixcbiAgcGFyc2VEYXRhUGF0aCxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKSB7XG4gIHJldHVybiBkYXRhUGF0aFxuICAgID8gYCR7ZGF0YVBhdGh9LyR7dG9rZW59YFxuICAgIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHBhdGg/LnBvcCgpXG4gIHJldHVybiBwYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5lc3RlZCA/IHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIDogcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICBpZiAocGF0aCkge1xuICAgIC8vIFJlbW92ZSB0aGUgcGFyZW50IHRva2VuLiBJZiBpdCdzIGEgbnVtYmVyLCB0aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBhblxuICAgIC8vIGFycmF5IGFuZCBuZWVkIHRvIHJlbW92ZSBtb3JlIHRva2VucyB1bnRpbCB3ZSBtZWV0IHRoZSBhY3R1YWwgcGFyZW50OlxuICAgIGxldCB0b2tlblxuICAgIGRvIHtcbiAgICAgIHRva2VuID0gcGF0aC5wb3AoKVxuICAgIH0gd2hpbGUgKHRva2VuICE9IG51bGwgJiYgaXNJbnRlZ2VyKCt0b2tlbikpXG4gICAgLy8gSWYgdGhlIHJlbW92ZWQgdG9rZW4gaXMgdmFsaWQsIHdlIGNhbiBnZXQgdGhlIHBhcmVudCBkYXRhOlxuICAgIGlmICh0b2tlbiAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gcGF0aFxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtKHJvb3RJdGVtLCBkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIHJldHVybiBwYXRoID8gZ2V0VmFsdWVBdERhdGFQYXRoKHJvb3RJdGVtLCBwYXRoKSA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHJldHVybiBwYXRoW3BhdGgubGVuZ3RoIC0gMV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aE5hbWUoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgcmV0dXJuIHRva2VuID09IG51bGwgfHwgaXNJbnRlZ2VyKCt0b2tlbikgPyBudWxsIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aEluZGV4KGRhdGFQYXRoKSB7XG4gIGNvbnN0IHRva2VuID0gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpXG4gIGNvbnN0IGluZGV4ID0gdG9rZW4gPT0gbnVsbCA/IG51bGwgOiArdG9rZW5cbiAgcmV0dXJuIGlzSW50ZWdlcihpbmRleCkgPyBpbmRleCA6IG51bGxcbn1cblxubGV0IHRlbXBvcmFyeUlkID0gMFxuZXhwb3J0IGZ1bmN0aW9uIHNldFRlbXBvcmFyeUlkKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICAvLyBUZW1wb3JhcnkgaWRzIGFyZSBtYXJrZWQgd2l0aCBhICdAJyBhdCB0aGUgYmVnaW5uaW5nLlxuICBkYXRhW2lkS2V5XSA9IGBAJHsrK3RlbXBvcmFyeUlkfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVtcG9yYXJ5SWQoaWQpIHtcbiAgcmV0dXJuIC9eQC8udGVzdChpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmZXJlbmNlKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICAvLyBSZXR1cm5zIHRydWUgaWYgdmFsdWUgaXMgYW4gb2JqZWN0IHRoYXQgaG9sZHMgbm90aGluZyBtb3JlIHRoYW4gYW4gaWQuXG4gIHJldHVybiBkYXRhPy5baWRLZXldICE9IG51bGwgJiYgT2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoID09PSAxXG59XG4iLCJpbXBvcnQgeyB0b1JhdyB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbURhdGFQYXRoLFxuICBnZXRQYXJlbnRJdGVtRGF0YVBhdGgsXG4gIGdldFBhcmVudEl0ZW0sXG4gIGdldEl0ZW0sXG4gIGdldExhc3REYXRhUGF0aE5hbWUsXG4gIGdldExhc3REYXRhUGF0aEluZGV4XG59IGZyb20gJy4vdXRpbHMvZGF0YS5qcydcblxuY29uc3QgeyBoYXNPd25Qcm9wZXJ0eSB9ID0gT2JqZWN0LnByb3RvdHlwZVxuXG4vLyBgRGl0b0NvbnRleHRgIGluc3RhbmNlcyBhcmUgYSB0aGluIHdyYXBwZXIgYXJvdW5kIHJhdyBgY29udGV4dGAgb2JqZWN0cyxcbi8vIHdoaWNoIHRoZW1zZWx2ZXMgYWN0dWFsbHkgaW5oZXJpdCBmcm9tIHRoZSBsaW5rZWQgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvXG4vLyB0aGF0IHRoZXkgb25seSBuZWVkIHRvIHByb3ZpZGUgdGhlIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBkaWZmZXJlbnQgdGhhblxuLy8gaW4gdGhlIHVuZGVybHlpbmcgY29tcG9uZW50LiBJbiBvcmRlciB0byBub3QgZXhwb3NlIGFsbCBmaWVsZHMgZnJvbSB0aGVcbi8vIGNvbXBvbmVudCwgdGhlIHdyYXBwZXIgaXMgaW50cm9kdWNlZDpcbi8vIFVzZSBXZWFrTWFwIGZvciB0aGUgcmF3IGBjb250ZXh0YCBvYmplY3RzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBvbGx1dGUgdGhlXG4vLyBhY3R1YWwgYERpdG9Db250ZXh0YCBpbnN0YW5jZSB3aXRoIGl0LlxuY29uc3QgY29udGV4dHMgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIGdldChjb250ZXh0LCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICBjb25zdCBvYmplY3QgPSBjb250ZXh0cy5nZXQodG9SYXcoY29udGV4dCkpXG4gIGNvbnN0IHZhbHVlID0ga2V5IGluIG9iamVjdCA/IG9iamVjdFtrZXldIDogdW5kZWZpbmVkXG4gIC8vIElmIGBvYmplY3RgIGV4cGxpY2l0bHkgc2V0cyB0aGUga2V5IHRvIGB1bmRlZmluZWRgLCByZXR1cm4gaXQuXG4gIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkIHx8IGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpXG4gICAgPyB2YWx1ZVxuICAgIDogaXNGdW5jdGlvbihkZWZhdWx0VmFsdWUpXG4gICAgICA/IGRlZmF1bHRWYWx1ZSgpXG4gICAgICA6IGRlZmF1bHRWYWx1ZVxufVxuXG5mdW5jdGlvbiBzZXQoY29udGV4dCwga2V5LCB2YWx1ZSkge1xuICBjb250ZXh0cy5nZXQodG9SYXcoY29udGV4dCkpW2tleV0gPSB2YWx1ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYW1zIG9iamVjdCAvIGZ1bmN0aW9uLCBvciBjcmVhdGUgYSBuZXcgb25lOlxuICAgIGNvbnRleHQgPSBjb250ZXh0XG4gICAgICA/IGlzRnVuY3Rpb24oY29udGV4dClcbiAgICAgICAgPyBjb250ZXh0KClcbiAgICAgICAgOiB7IC4uLmNvbnRleHQgfVxuICAgICAgOiB7fVxuICAgIC8vIElmIG5vdCBleHBsaWNpdGx5IHNldCAodG8gZmFsc2UpLCBkZWZhdWx0IHRvIHRydWUgc28gd2UgZG9uJ3QgZmFsbCBiYWNrXG4gICAgLy8gdG8gYGNvbXBvbmVudGAgZm9yIGl0cyB2YWx1ZS5cbiAgICBjb250ZXh0Lm5lc3RlZCA/Pz0gdHJ1ZVxuICAgIGNvbnRleHQuY29tcG9uZW50ID0gY29tcG9uZW50XG4gICAgLy8gSGF2ZSBgb2JqZWN0YCBpbmhlcml0IGZyb20gdGhlIGBjb21wb25lbnRgIGluc3RhbmNlLCBzbyBpdCBjYW4gb3ZlcnJpZGVcbiAgICAvLyBpdHMgdmFsdWVzIGFuZCBzdGlsbCByZXRyaWV2ZSBmcm9tIGl0LCBhbmQgYXNzb2NpYXRlIGl0IHdpdGggYHRoaXNgXG4gICAgLy8gdGhyb3VnaCBgY29udGV4dHNgIG1hcDpcbiAgICBjb25zdCBvYmplY3QgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YoY29udGV4dCwgY29tcG9uZW50KVxuICAgIC8vIE5vIG5lZWQgZm9yIGB0b1Jhdyh0aGlzKWAgaGVyZSBhcyBpdCdzIGFsd2F5cyByYXcgaW5zaWRlIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICBjb250ZXh0cy5zZXQodGhpcywgb2JqZWN0KVxuICB9XG5cbiAgc3RhdGljIGdldChjb21wb25lbnQsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dCBpbnN0YW5jZW9mIERpdG9Db250ZXh0XG4gICAgICA/IGNvbnRleHRcbiAgICAgIDogbmV3IERpdG9Db250ZXh0KGNvbXBvbmVudCwgY29udGV4dClcbiAgfVxuXG4gIC8vIGBuZXN0ZWRgIGlzIGB0cnVlYCB3aGVuIHRoZSBkYXRhLXBhdGggcG9pbnRzIGEgdmFsdWUgaW5zaWRlIGFuIGl0ZW0sIGFuZFxuICAvLyBgZmFsc2VgIHdoZW4gaXQgcG9pbnRzIHRvIHRoZSBpdGVtIGl0c2VsZi5cbiAgZ2V0IG5lc3RlZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICduZXN0ZWQnLCB0cnVlKVxuICB9XG5cbiAgZ2V0IHNjaGVtYSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzY2hlbWEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZhbHVlJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IGRhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RhdGFQYXRoJywgJycpXG4gIH1cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICduYW1lJywgKCkgPT4gZ2V0TGFzdERhdGFQYXRoTmFtZSh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdpbmRleCcsICgpID0+IGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuZGF0YVBhdGgpKVxuICB9XG5cbiAgZ2V0IGl0ZW1EYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0SXRlbURhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1EYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0UGFyZW50SXRlbURhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICB9XG5cbiAgZ2V0IGl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5pdGVtRGF0YVBhdGgpXG4gIH1cblxuICBnZXQgcGFyZW50SXRlbUluZGV4KCkge1xuICAgIHJldHVybiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLnBhcmVudEl0ZW1EYXRhUGF0aClcbiAgfVxuXG4gIC8vIE5PVEU6IFdoaWxlIGludGVybmFsbHksIHdlIHNwZWFrIG9mIGBkYXRhYCwgaW4gdGhlIEFQSSBzdXJmYWNlIHRoZVxuICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzOlxuICAvLyBJZiBgZGF0YWAgaXNuJ3QgcHJvdmlkZWQsIHdlIGNhbiBkZXRlcm1pbmUgaXQgZnJvbSByb290RGF0YSAmIGRhdGFQYXRoOlxuICBnZXQgaXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkYXRhJywgKCkgPT5cbiAgICAgIGdldEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgKVxuICB9XG5cbiAgLy8gTk9URTogYHBhcmVudEl0ZW1gIGlzbid0IHRoZSBjbG9zZXN0IGRhdGEgcGFyZW50IHRvIGBpdGVtYCwgaXQncyB0aGVcbiAgLy8gY2xvc2VzdCBwYXJlbnQgdGhhdCBpc24ndCBhbiBhcnJheSwgZS5nLiBmb3IgcmVsYXRpb25zIG9yIG5lc3RlZCBKU09OIGRhdGEuXG4gIC8vIFRoaXMgaXMgd2h5IHRoZSB0ZXJtIGBpdGVtYCB3YXMgY2hvc2VuIG92ZXIgYGRhdGFgLCBlLmcuIFZTIHRoZSB1c2Ugb2ZcbiAgLy8gYHBhcmVudERhdGFgIGluIHNlcnZlci1zaWRlZCB2YWxpZGF0aW9uLCB3aGljaCBpcyB0aGUgY2xvc2VzdCBwYXJlbnQuIElmXG4gIC8vIG5lZWRlZCwgd2UgY291bGQgZXhwb3NlIHRoaXMgZGF0YSBoZXJlIHRvbywgYXMgd2UgY2FuIGRvIGFsbCBzb3J0cyBvZiBkYXRhXG4gIC8vIHByb2Nlc3Npbmcgd2l0aCBgcm9vdERhdGFgIGFuZCBgZGF0YVBhdGhgLlxuICBnZXQgcGFyZW50SXRlbSgpIHtcbiAgICBjb25zdCBpdGVtID0gKFxuICAgICAgZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZCkgfHxcbiAgICAgIG51bGxcbiAgICApXG4gICAgcmV0dXJuIGl0ZW0gIT09IHRoaXMuaXRlbSA/IGl0ZW0gOiBudWxsXG4gIH1cblxuICBnZXQgcm9vdEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncm9vdERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncHJvY2Vzc2VkRGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgY2xpcGJvYXJkSXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjbGlwYm9hcmREYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCB1c2VyKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3VzZXInLCBudWxsKVxuICB9XG5cbiAgZ2V0IGFwaSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdhcGknLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdzKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZpZXdzJywgbnVsbClcbiAgfVxuXG4gIGdldCBmbGF0dGVuZWRWaWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmbGF0dGVuZWRWaWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBOT1RFOiBMaWtlICdvcHRpb25zJywgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LCBlLmcuXG4gIC8vIGluIG5lc3RlZCBmb3JtcyBkdXJpbmcgYHByb2Nlc3NEYXRhKClgLiBCdXQgYHNjaGVtYWAgaXMgZ3VhcmFudGVlZCB0b1xuICAvLyBhbHdheXMgYmUgYXZhaWxhYmxlLlxuICBnZXQgY29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBBZGQgYGNvbXBvbmVudFNjaGVtYWAgZ2V0dGVyIGZvciB0aGUgc2NoZW1hIG9mIHRoZSBjdXJyZW50IGNvbXBvbmVudCxcbiAgLy8gZXZlbiB3aGVuIHRoZSBjb21wb25lbnQgaXNuJ3QgYWN0dWFsbHkgaW5zdGFudGlhdGVkLiBDb25zaWRlciBhZGRpbmdcbiAgLy8gYHNvdXJjZVNjaGVtYWAgYXMgd2VsbD9cblxuICAvLyBUT0RPOiBGaXggdW5jbGVhciBuYW1pbmc6IFdoaWNoIHNjaGVtYSBpcyB0aGlzLCB0aGF0IG9mIHRoZSBjb21wb25lbnQgb3Igb2ZcbiAgLy8gaXRzIHBhcmVudD8gSXNuJ3QgZXhwb3NpbmcgYGZvcm1Db21wb25lbnRgIGFuZCBgdmlld0NvbXBvbmVudGAgZW5vdWdoLCBvbmNlXG4gIC8vIHdlIG9mZmVyIGFjY2VzcyB0byB0aGVpciBjb21wb25lbnRzIHRoZXJlIHRocm91Z2ggYGdldENvbXBvbmVudCgpYCAmIGNvLiBvblxuICAvLyBgRGl0b01peGluYCBwZXJoYXBzPyAgQWxzbywgdGhlcmUgY291bGQgYmUgYSBgdGFiQ29tcG9uZW50YCBnZXR0ZXIgZm9yXG4gIC8vIHNjaGVtYXMgaW4gdGFicz9cbiAgZ2V0IHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzY2hlbWFDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGZvcm1Db21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZm9ybUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgdmlld0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3Q29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGlhbG9nQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBwYW5lbENvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwYW5lbENvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncmVzb3VyY2VDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzb3VyY2VDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gV2hlbiB1c2VkIGluIE9wdGlvbnNNaXhpbiBmb3IgYHNjaGVtYS5vcHRpb25zLnZhbHVlKClgLFxuICAvLyBgc2NoZW1hLm9wdGlvbnMubGFiZWwoKWAgYW5kICBgc2NoZW1hLnNlYXJjaC5maWx0ZXIoKWAgY2FsbGJhY2tzOlxuICBnZXQgb3B0aW9uKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ29wdGlvbicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ29wdGlvbnMnLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcGVuJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdGVuZXJzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBBc3luYyBvbigpIGFuZCAkb2ZmKCkgbWV0aG9kcyB0aGF0IGtlZXAgdHJhY2sgb2YgdGhlIGV2ZW50cyBhZGRlZCAvXG4gICAgLy8gcmVtb3ZlZCwgYW5kIHByb3ZpZGUgYSBoYXNMaXN0ZW5lcnMoKSBtZXRob2QgdGhhdCBjaGVja3MgaWYgdGhlIGNvbXBvbmVudFxuICAgIC8vIGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQuXG5cbiAgICAvLyBBbHNvIGFkZHMgcHJvcGVyIGhhbmRsaW5nIG9mIGFzeW5jIGV2ZW50cywgaW5jbHVkaW5nIGEgYXN5bmMgZW1pdCgpIHRoYXRcbiAgICAvLyBkZWFscyB3aXRoIHByb3BlciBldmVudCBxdWV1ZWluZy5cbiAgICBvbihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vbihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gKHRoaXMubGlzdGVuZXJzIHx8PSBPYmplY3QuY3JlYXRlKG51bGwpKVxuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gKGxpc3RlbmVyc1tldmVudF0gfHw9IHtcbiAgICAgICAgICBjYWxsYmFja3M6IFtdLFxuICAgICAgICAgIHF1ZXVlOiBbXVxuICAgICAgICB9KVxuICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjaylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG9uY2UoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBvbiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHRoaXMub2ZmKGV2ZW50LCBvbilcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9XG4gICAgICBvbi5jYWxsYmFjayA9IGNhbGxiYWNrIC8vIE5lZWRlZCBmb3IgYG9mZigpYCwgc2VlIGJlbG93LlxuICAgICAgcmV0dXJuIHRoaXMub24oZXZlbnQsIG9uKVxuICAgIH0sXG5cbiAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBldmVudHNcbiAgICAgICAgZGVsZXRlIHRoaXMubGlzdGVuZXJzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgaGFuZGxlcnMgZm9yIHRoaXMgZXZlbnRcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxpc3RlbmVyc1tldmVudF1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGEgc3BlY2lmaWMgaGFuZGxlcjogZmluZCB0aGUgaW5kZXggaW4gY2FsbGJhY2tzXG4gICAgICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2FsbGJhY2tzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgLy8gTWF0Y2ggYGNiLmNhbGxiYWNrYCBhbHNvLCBhcyB1c2VkIGJ5IGBvbmNlKClgLCBzZWUgIGFib3ZlOlxuICAgICAgICAgICAgICBjYiA9PiBjYiA9PT0gY2FsbGJhY2sgfHwgY2IuY2FsbGJhY2sgPT09IGNhbGxiYWNrXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAvLyBPbmx5IHF1ZXVlIGV2ZW50IGlmIHRoZXJlIGFjdHVhbGx5IGFyZSBsaXN0ZW5lcnMgZm9yIGl0LlxuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmxpc3RlbmVycz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLFxuICAgICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCB0eXBlOlxuICAgIGhhc0xpc3RlbmVycyhldmVudCkge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKGV2KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5sZW5ndGggPiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISF0aGlzLmxpc3RlbmVycz8uW2V2ZW50XVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZShldmVudCwgdGFyZ2V0KSB7XG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUoZXYsIHRhcmdldClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vbihldmVudCwgKC4uLmFyZ3MpID0+IHRhcmdldC5lbWl0KGV2ZW50LCAuLi5hcmdzKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzQ3JlZGl0Q2FyZCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBjcmVkaXRjYXJkID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNDcmVkaXRDYXJkKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIGludmFsaWQnXG59XG4iLCJleHBvcnQgY29uc3QgZGVjaW1hbHMgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIGRlY2ltYWxzKSA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSBkZWNpbWFscyA9PT0gJyonID8gJysnIDogYHsxLCR7ZGVjaW1hbHN9fWBcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXlstK10/XFxcXGQqKFxcXFwuXFxcXGQke21hdGNofSk/JGApLnRlc3QodmFsdWUpXG4gIH0sXG5cbiAgbWVzc2FnZTogKHZhbHVlLCBkZWNpbWFscykgPT5cbiAgICBgbXVzdCBiZSBudW1lcmljIGFuZCBtYXkgY29udGFpbiAke1xuICAgICAgIWRlY2ltYWxzIHx8IGRlY2ltYWxzID09PSAnKicgPyAnJyA6IGRlY2ltYWxzXG4gICAgfSBkZWNpbWFsIHBvaW50c2Bcbn1cbiIsImltcG9ydCB7IGlzRG9tYWluIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGRvbWFpbiA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRG9tYWluKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGRvbWFpbidcbn1cbiIsImltcG9ydCB7IGlzRW1haWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZW1haWwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0VtYWlsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgYSB2YWxpZCBlbWFpbCdcbn1cbiIsImltcG9ydCB7IGlzSG9zdG5hbWUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgaG9zdG5hbWUgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0hvc3RuYW1lKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGhvc3QgbmFtZSdcbn1cbiIsImltcG9ydCB7IGlzSW50ZWdlciB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBpbnRlZ2VyID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNJbnRlZ2VyKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgd2hvbGUgbnVtYmVyJ1xufVxuIiwiZXhwb3J0IGNvbnN0IG1heCA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWF4KSA9PiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIG1heCkge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21heH0gb3IgbGVzc2BcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IG1pbiA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWluKSA9PiB2YWx1ZSA+PSBtaW4sXG4gIG1lc3NhZ2UodmFsdWUsIG1pbikge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21pbn0gb3IgbW9yZWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHBhc3N3b3JkID0ge1xuICAvLyBBbGxvdyBhbnkgdmFsdWUuIEZvciBub3cgdGhpcyBpcyBvbmx5IHVzZWQgYXMgYSBtYXJrZXIsIHRvIGFsbG93IHRoZVxuICAvLyByZXF1aXJlZCB2YWxpZGF0aW9uIHRvIGhhbmRsZSB1bmNoYW5nZWQgcGFzc3dvcmRzIHNlcGFyYXRlbHkuXG4gIHZhbGlkYXRlOiAoKSA9PiB0cnVlXG59XG4iLCJleHBvcnQgY29uc3QgcmFuZ2UgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIFttaW4sIG1heF0pID0+IHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIFttaW4sIG1heF0pIHtcbiAgICByZXR1cm4gYG11c3QgYmUgYmV0d2VlbiAke21pbn0gYW5kICR7bWF4fWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHJlcXVpcmVkID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBzZXR0aW5ncywgeyBwYXNzd29yZCB9KSA9PiAoXG4gICAgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09ICcnKSB8fFxuICAgIC8vIFBhc3N3b3JkIGZpZWxkcyB1c2UgYHVuZGVmaW5lZGAgYXMgb3Bwb3NlZCB0byBgbnVsbGAgd2hlbiB0aGV5J3JlIHNldFxuICAgIC8vIGJ1dCB1bmNoYW5nZWQsIGFsbG93IHRoaXMgdG8gcGFzcyB0aHJvdWdoOlxuICAgIChwYXNzd29yZCAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICApLFxuICBtZXNzYWdlOiAnaXMgcmVxdWlyZWQnLFxuICBudWxsaXNoOiB0cnVlXG59XG4iLCJpbXBvcnQgeyBpc1VybCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCB1cmwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc1VybCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSB2YWxpZCBVUkwnXG59XG4iLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCAqIGFzIHZhbGlkYXRpb25zIGZyb20gJy4uL3ZhbGlkYXRpb25zL2luZGV4LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWydlcnJvcnMnXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc1RvdWNoZWQ6IGZhbHNlLFxuICAgICAgaXNEaXJ0eTogZmFsc2UsXG4gICAgICBpc1ZhbGlkYXRlZDogZmFsc2UsXG4gICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGhhc0Vycm9ycygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZXJyb3JzXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHZhbGlkYXRlKG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZScsIHRoaXMuZGF0YVBhdGgsIHZhbHVlLCB0aGlzLnZhbGlkYXRpb25zKVxuICAgICAgZm9yIChjb25zdCBbcnVsZSwgc2V0dGluZ10gb2YgT2JqZWN0LmVudHJpZXModGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uYW1lc3BhY2VcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdmFsaWRhdGlvbnNbcnVsZV1cbiAgICAgICAgaWYgKHZhbGlkYXRvciAmJiAodmFsaWRhdG9yLm51bGxpc2ggfHwgdmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbGlkYXRlLCBtZXNzYWdlIH0gPSB2YWxpZGF0b3JcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlKHZhbHVlLCBzZXR0aW5nLCB0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNGdW5jdGlvbihtZXNzYWdlKVxuICAgICAgICAgICAgICAgID8gbWVzc2FnZSh2YWx1ZSwgc2V0dGluZywgdGhpcylcbiAgICAgICAgICAgICAgICA6IG1lc3NhZ2VcbiAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvciwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IHRydWVcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gaXNWYWxpZFxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoZmFsc2UpXG4gICAgfSxcblxuICAgIG1hcmtUb3VjaGVkKCkge1xuICAgICAgdGhpcy5pc1RvdWNoZWQgPSB0cnVlXG4gICAgICAvLyBDbGVhciBjdXJyZW50bHkgZGlzcGxheWVkIGVycm9ycyB3aGVuIGZvY3VzaW5nIGlucHV0LlxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIG1hcmtEaXJ0eSgpIHtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIG9uIG5ldyBpbnB1dC5cbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBhZGRFcnJvcihlcnJvciwgYWRkTGFiZWwgPSBmYWxzZSkge1xuICAgICAgdGhpcy5lcnJvcnMgfHw9IFtdXG4gICAgICBpZiAoYWRkTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsIHx8IHRoaXMucGxhY2Vob2xkZXIgfHwgdGhpcy5uYW1lXG4gICAgICAgIGVycm9yID0gYFRoZSAke2xhYmVsfSBmaWVsZCAke2Vycm9yfS5gXG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIC8vIENvbnZlcnQgZnJvbSBBSlYgZXJyb3JzIG9iamVjdHMgdG8gYW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHRoaXMuZXJyb3JzID0gW11cbiAgICAgIGZvciAoY29uc3QgeyBtZXNzYWdlIH0gb2YgZXJyb3JzKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IobWVzc2FnZSwgdHJ1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLnNjcm9sbEludG9WaWV3KClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGdldEVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVycm9ycyA/IFsuLi50aGlzLmVycm9yc10gOiBudWxsXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5lcnJvcnMgPSBudWxsXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyaW5nLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hQWNjZXNzb3IoXG4gIGtleU9yRGF0YVBhdGgsXG4gIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBnZXQsIHNldCwgY2FsbGJhY2sgPSB0cnVlIH0gPSB7fVxuKSB7XG4gIC8vIGBrZXlPckRhdGFQYXRoYCBjYW4gYmUgYSBzaW1wbGUgcHJvcGVydHkga2V5LFxuICAvLyBvciBhIGRhdGEtcGF0aCBpbnRvIHN1Yi1wcm9wZXJ0aWVzLCBib3RoIGluIGFycmF5IG9yIHN0cmluZyBmb3JtYXQuXG4gIGlmIChpc1N0cmluZyhrZXlPckRhdGFQYXRoKSAmJiBrZXlPckRhdGFQYXRoLmluY2x1ZGVzKCcuJykpIHtcbiAgICBrZXlPckRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICB9XG4gIC8vIFVzZSB0aGUgbm9ybWFsaXplZCBkYXRhIHBhdGggZm9yIHRoZSBoYW5kbGluZyBvdmVycmlkZXNcbiAgY29uc3QgbmFtZSA9IG5vcm1hbGl6ZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgLy8gT25seSBkZXRlcm1pbmUgc2NoZW1hIHZhbHVlIGlmIHdlIGhhdmUgbm8gZ2V0dGVyLCBvciB0aGUgZ2V0dGVyXG4gICAgICAvLyB3YW50cyB0byByZWNlaXZlIHRoZSB2YWx1ZSBhbmQgcHJvY2VzcyBpdCBmdXJ0aGVyOlxuICAgICAgY29uc3QgdmFsdWUgPVxuICAgICAgICAhZ2V0IHx8IGdldC5sZW5ndGggPiAwXG4gICAgICAgICAgPyAvLyBOT1RFOiBCZWNhdXNlIGBzY2hlbWFgIG9iamVjdHMgYXJlIHJldHJpZXZlZCBmcm9tIGBtZXRhYCwgdGhleVxuICAgICAgICAgICAgLy8gZG9uJ3Qgc2VlbSB0byBiZSByZWFjdGl2ZS4gVG8gYWxsb3cgY2hhbmdlZCBpbiBgc2NoZW1hYCB2YWx1ZXMsXG4gICAgICAgICAgICAvLyBgc2V0KClgIHN0b3JlcyBjaGFuZ2VkIHZhbHVlcyBpbiB0aGUgc2VwYXJhdGUgYG92ZXJyaWRlc2Agb2JqZWN0LlxuICAgICAgICAgICAgdGhpcy5vdmVycmlkZXMgJiYgbmFtZSBpbiB0aGlzLm92ZXJyaWRlc1xuICAgICAgICAgICAgPyB0aGlzLm92ZXJyaWRlc1tuYW1lXVxuICAgICAgICAgICAgOiB0aGlzLmdldFNjaGVtYVZhbHVlKGtleU9yRGF0YVBhdGgsIHtcbiAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZixcbiAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICByZXR1cm4gZ2V0ID8gZ2V0LmNhbGwodGhpcywgdmFsdWUpIDogdmFsdWVcbiAgICB9LFxuXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICBpZiAoc2V0KSB7XG4gICAgICAgIHNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdmVycmlkZXMgfHw9IHt9XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0b3JlQWNjZXNzb3IobmFtZSwgeyBkZWZhdWx0OiBkZWYsIGdldCwgc2V0IH0gPSB7fSkge1xuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zOlxuICAgICAgICB2YWx1ZSA9IGlzRnVuY3Rpb24oZGVmKSA/IGRlZi5jYWxsKHRoaXMpIDogZGVmXG4gICAgICAgIC8vIFRyaWdnZXIgc2V0dGVyIGJ5IHNldHRpbmcgdmFsdWUgYW5kIGFjY2Vzc29yIHRvIGRlZmF1bHQ6XG4gICAgICAgIHRoaXNbbmFtZV0gPSB2YWx1ZVxuICAgICAgICAvLyBOb3cgYWNjZXNzIHN0b3JlIGFnYWluLCBmb3IgcmVhY3Rpdml0eSB0cmFja2luZ1xuICAgICAgICB0aGlzLmdldFN0b3JlKG5hbWUpXG4gICAgICB9XG4gICAgICAvLyBBbGxvdyB0aGUgcHJvdmlkZWQgZ2V0dGVyIHRvIGZ1cnRoZXIgY2hhbmdlIG9yIHByb2Nlc3MgdGhlIHZhbHVlXG4gICAgICAvLyByZXRyaWV2ZWQgZnJvbSB0aGUgc3RvcmU6XG4gICAgICByZXR1cm4gZ2V0ID8gZ2V0LmNhbGwodGhpcywgdmFsdWUpIDogdmFsdWVcbiAgICB9LFxuXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICAvLyBBbGxvdyB0aGUgcHJvdmlkZWQgc2V0dGVyIHRvIHJldHVybiBhIG5ldyB2YWx1ZSB0byBzZXQsIG9yIGRvIHRoZVxuICAgICAgLy8gc2V0dGluZyBpdHNlbGYsIGFuZCB0aGVuIHJldHVybiBgdW5kZWZpbmVkYDpcbiAgICAgIGlmICghc2V0IHx8ICh2YWx1ZSA9IHNldC5jYWxsKHRoaXMsIHZhbHVlKSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnNldFN0b3JlKG5hbWUsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFZhbGlkYXRpb25NaXhpbiBmcm9tICcuL1ZhbGlkYXRpb25NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBjb21wdXRlVmFsdWUgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRJdGVtLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGFzQXJyYXksIGNhbWVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdGlvbk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gTk9URTogV2hpbGUgYGRhdGFQYXRoYCBwb2ludHMgdG8gdGhlIGFjdHVhbCBgdmFsdWVgLCBgZGF0YWAgcmVwcmVzZW50c1xuICAgIC8vIHRoZSBgaXRlbWAgaW4gd2hpY2ggdGhlIGB2YWx1ZWAgaXMgY29udGFpbmVkLCB1bmRlciB0aGUga2V5IGBuYW1lYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHdpZHRoOiB7IHR5cGU6IFtOdW1iZXIsIFN0cmluZ10sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlZFZhbHVlOiB1bmRlZmluZWQsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnR5cGVcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIHZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZVZhbHVlKFxuICAgICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICB7IGNvbXBvbmVudDogdGhpcyB9XG4gICAgICAgIClcbiAgICAgICAgY29uc3QgeyBmb3JtYXQgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIHJldHVybiBmb3JtYXRcbiAgICAgICAgICA/IGZvcm1hdChuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyBwYXJzZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgaWYgKHBhcnNlKSB7XG4gICAgICAgICAgdmFsdWUgPSBwYXJzZShuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhcnNlZFZhbHVlID0gdmFsdWVcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1tdXRhdGluZy1wcm9wc1xuICAgICAgICB0aGlzLmRhdGFbdGhpcy5uYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhcmVudERhdGEoKSB7XG4gICAgICBjb25zdCBkYXRhID0gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICAgIHJldHVybiBkYXRhICE9PSB0aGlzLmRhdGEgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgLy8gV2UgY2FuIG9ubHkgZ2V0IHRoZSBwcm9jZXNzZWQgZGF0YSB0aHJvdWdoIHRoZSBzY2hlbWFDb21wb25lbnQsIGJ1dFxuICAgICAgLy8gdGhhdCdzIG5vdCBuZWNlc3NhcmlseSB0aGUgaXRlbSByZXByZXNlbnRlZCBieSB0aGlzIGNvbXBvbmVudC5cbiAgICAgIC8vIFNvbHV0aW9uOiBGaW5kIHRoZSByZWxhdGl2ZSBwYXRoIGFuZCB0aGUgcHJvY2Vzc2VkIHN1Yi1pdGVtIGZyb20gdGhlcmU6XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGdldEl0ZW0oXG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5wcm9jZXNzZWREYXRhLFxuICAgICAgICAvLyBHZXQgdGhlIGRhdGFQYXRoIHJlbGF0aXZlIHRvIHRoZSBzY2hlbWFDb21wb25lbnQncyBkYXRhOlxuICAgICAgICB0aGlzLmRhdGFQYXRoLnNsaWNlKHNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aC5sZW5ndGgpLFxuICAgICAgICB0aGlzLm5lc3RlZFxuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50RGF0YVxuICAgIH0sXG5cbiAgICByb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3REYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWREYXRhXG4gICAgfSxcblxuICAgIGxhYmVsTm9kZSgpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmlzTW91bnRlZCA/IHRoaXMuJGVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgOiBudWxsXG4gICAgICByZXR1cm4gbm9kZT8ubWF0Y2hlcygnLmRpdG8tbGFiZWwnKSA/IG5vZGUgOiBudWxsXG4gICAgfSxcblxuICAgIHZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRvcHRpb25zLmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYGV4Y2x1ZGVkYCBmb3IgY29uc2lzdGVudCBuYW1pbmc/XG4gICAgZXhjbHVkZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4Y2x1ZGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHJlcXVpcmVkOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVxdWlyZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IE1vdmUgdGhlc2UgdG8gYSBzdWItY2xhc3MgY29tcG9uZW50IHVzZWQgZm9yIGFsbCBpbnB1dCBjb21wb25lbnRzP1xuICAgIHJlYWRvbmx5OiBnZXRTY2hlbWFBY2Nlc3NvcigncmVhZG9ubHknLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGF1dG9mb2N1czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9mb2N1cycsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVG8gYmUgdXNlZCBmb3Igc2VsZWN0cyBhbmQgaW5wdXRzIG9ubHk/XG4gICAgY2xlYXJhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY2xlYXJhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BsYWNlaG9sZGVyJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICBhdXRvY29tcGxldGU6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvY29tcGxldGUnLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGV2ZW50cygpIHtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMuZ2V0RXZlbnRzKClcbiAgICAgIC8vIFJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgYWxsIHByb3ZpZGVzIG5vbi1yZWNvZ25pemVkIGV2ZW50cyxcbiAgICAgIC8vIGFzc3VtaW5nIHRoZXkgYXJlIG5hdGl2ZSBldmVudHMuXG4gICAgICAvLyBUT0RPOiBNb3ZlIHRvIHZ1ZTMtc3R5bGUgYG9uW0EtWl1gIGV2ZW50IGhhbmRsZXJzIG5hbWluZyB0aGF0IGFyZW4ndFxuICAgICAgLy8gbmFtZXNwYWNlZCBpbiBgc2NoZW1hLmV2ZW50c2Agb25jZSB0aGUgdHJhbnNpdGlvbiBpcyBjb21wbGV0ZS5cbiAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgT2JqZWN0LmtleXModGhpcy5zY2hlbWEuZXZlbnRzIHx8IHt9KSkge1xuICAgICAgICBldmVudHNbYG9uJHtjYW1lbGl6ZShldmVudCwgdHJ1ZSl9YF0gPz89ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmVtaXRFdmVudChldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGV2ZW50c1xuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyBuYXRpdmVGaWVsZCwgdGV4dEZpZWxkIH0gPSB0aGlzLiRvcHRpb25zXG5cbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIC4uLnRoaXMuZXZlbnRzLFxuICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuXG4gICAgICBpZiAobmF0aXZlRmllbGQpIHtcbiAgICAgICAgYXR0cmlidXRlcy5uYW1lID0gdGhpcy5uYW1lXG4gICAgICAgIGlmICh0aGlzLmxhYmVsKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy50aXRsZSA9IHRoaXMubGFiZWxcbiAgICAgICAgfVxuICAgICAgICBhdHRyaWJ1dGVzLnJlYWRvbmx5ID0gdGhpcy5yZWFkb25seVxuICAgICAgICBhdHRyaWJ1dGVzLmF1dG9mb2N1cyA9IHRoaXMuYXV0b2ZvY3VzXG4gICAgICAgIGlmICh0ZXh0RmllbGQpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnBsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlclxuICAgICAgICAgIGF0dHJpYnV0ZXMuYXV0b2NvbXBsZXRlID0gdGhpcy5hdXRvY29tcGxldGVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH0sXG5cbiAgICB2YWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0geyAuLi50aGlzLmdldFZhbGlkYXRpb25zKCkgfVxuICAgICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMucmVxdWlyZWQgPSB0cnVlXG4gICAgICB9XG4gICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgZGVmYXVsdCBydWxlcyBhbmQgYWRkIGFueSBuZXcgb25lczpcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLnJ1bGVzIHx8IHt9KSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRlbGV0ZSB2YWxpZGF0aW9uc1trZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnNba2V5XSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uc1xuICAgIH0sXG5cbiAgICBzaG93Q2xlYXJCdXR0b24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGVhcmFibGUgJiYgdGhpcy52YWx1ZSAhPSBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICB0aGlzLnNldHVwU2NoZW1hRmllbGRzKClcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIFByZXZlbnQgdW5uZXN0ZWQgdHlwZSBjb21wb25lbnRzIGZyb20gb3ZlcnJpZGluZyBwYXJlbnQgZGF0YSBwYXRoc1xuICAgICAgaWYgKHRoaXMubmVzdGVkKSB7XG4gICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlckNvbXBvbmVudCh0aGlzLCBhZGQpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldEV2ZW50cygpIHtcbiAgICAgIGNvbnN0IHsgb25Gb2N1cywgb25CbHVyLCBvbklucHV0LCBvbkNoYW5nZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHsgb25Gb2N1cywgb25CbHVyLCBvbklucHV0LCBvbkNoYW5nZSB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgYXN5bmMgc2Nyb2xsSW50b1ZpZXcoKSB7XG4gICAgICBhd2FpdCB0aGlzLmZvY3VzU2NoZW1hKClcbiAgICAgIHRoaXMuZ2V0Rm9jdXNFbGVtZW50KCk/LnNjcm9sbEludG9WaWV3Py4oe1xuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgIGJsb2NrOiAnY2VudGVyJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy5nZXRGb2N1c0VsZW1lbnQoKT8uZm9jdXM/LigpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGJsdXJFbGVtZW50KCkge1xuICAgICAgdGhpcy5nZXRGb2N1c0VsZW1lbnQoKT8uYmx1cj8uKClcbiAgICB9LFxuXG4gICAgZ2V0Rm9jdXNFbGVtZW50KCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGFzQXJyYXkodGhpcy4kcmVmcy5lbGVtZW50KVswXSA/PyB0aGlzXG4gICAgICByZXR1cm4gZWxlbWVudC4kZWwgPz8gZWxlbWVudFxuICAgIH0sXG5cbiAgICBhc3luYyBmb2N1c1NjaGVtYSgpIHtcbiAgICAgIC8vIEFsc28gZm9jdXMgdGhpcyBjb21wb25lbnQncyBzY2hlbWEgYW5kIHBhbmVsIGluIGNhc2UgaXQncyBhIHRhYi5cbiAgICAgIGF3YWl0IHRoaXMuc2NoZW1hQ29tcG9uZW50LmZvY3VzKClcbiAgICAgIGF3YWl0IHRoaXMudGFiQ29tcG9uZW50Py5mb2N1cygpXG4gICAgfSxcblxuICAgIGFzeW5jIGZvY3VzKCkge1xuICAgICAgYXdhaXQgdGhpcy5mb2N1c1NjaGVtYSgpXG4gICAgICB0aGlzLnNjcm9sbEludG9WaWV3KClcbiAgICAgIHRoaXMuZm9jdXNFbGVtZW50KClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuYmx1ckVsZW1lbnQoKVxuICAgIH0sXG5cbiAgICBjbGVhcigpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICB0aGlzLmJsdXIoKVxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgfSxcblxuICAgIG9uRm9jdXMoKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlXG4gICAgICB0aGlzLm1hcmtUb3VjaGVkKClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdmb2N1cycpXG4gICAgfSxcblxuICAgIG9uQmx1cigpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlXG4gICAgICB0aGlzLnZhbGlkYXRlKClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdibHVyJylcbiAgICB9LFxuXG4gICAgb25JbnB1dCgpIHtcbiAgICAgIHRoaXMubWFya0RpcnR5KClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdpbnB1dCcpXG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScsIHtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIC8vIFByZXZlbnQgZW5kbGVzcyBwYXJzZSByZWN1cnNpb246XG4gICAgICAgICAgdmFsdWU6IHRoaXMucGFyc2VkVmFsdWUgIT09IHVuZGVmaW5lZCA/IHRoaXMucGFyc2VkVmFsdWUgOiB0aGlzLnZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgIC8vIFBhc3MgYHNjaGVtYUNvbXBvbmVudGAgYXMgcGFyZW50LCBzbyBjaGFuZ2UgZXZlbnRzIGNhbiBwcm9wYWdhdGUgdXAuXG4gICAgICAgIHBhcmVudDogdGhpcy5zY2hlbWFDb21wb25lbnRcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyB0b1JhdyB9IGZyb20gJ3Z1ZSdcblxuY29uc3QgdWlkTWFwID0gbmV3IFdlYWtNYXAoKVxuXG4vLyBHZW5lcmF0ZWQgYW5kIHJlbWVtYmVycyB1bmlxdWUgaWRzIHBlciBwYXNzZWQgb2JqZWN0IHVzaW5nIGEgd2VhayBtYXAuXG5sZXQgdWlkID0gMFxuZXhwb3J0IGZ1bmN0aW9uIGdldFVpZChpdGVtLCBnZXRJdGVtSWQgPSBudWxsKSB7XG4gIGNvbnN0IHJhdyA9IHRvUmF3KGl0ZW0pXG4gIGxldCBpZCA9IHVpZE1hcC5nZXQocmF3KVxuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBnZXRJdGVtSWQ/LihpdGVtKSB8fCBgQCR7Kyt1aWR9YFxuICAgIHVpZE1hcC5zZXQocmF3LCBpZClcbiAgfVxuICByZXR1cm4gaWRcbn1cbiIsImltcG9ydCB7IGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc0ludGVnZXIsXG4gIGFzQXJyYXksXG4gIHBhcnNlRGF0YVBhdGgsXG4gIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJ1xuXG4vLyBTY2hlbWFHcmFwaCBpcyBhIGNsYXNzIHRvIGNvbGxlY3Qgc2NoZW1hIGdyYXBoIG1ldGEgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG9cbi8vIHByb2Nlc3Mgc291cmNlcyBhbmQgcmVsYXRpb25zIGZvciB0aGUgZ2l2ZW4gdGFyZ2V0cyAnc2VydmVyJyBhbmQgJ2NsaXBib2FyZCcsXG4vLyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZTpcbi8vXG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuLy8gfCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VydmVyICAgIHwgY2xpcGJvYXJkIHxcbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiBmYWxzZSAgICAgICAgICAgfCBrZWVwIGlkICAgfCBrZWVwIGlkICAgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IHRydWUsIHRlbXBvcmFyeSB8IHJlZiwgI3JlZiB8IHJlZiwgI3JlZiB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSAgICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogZmFsc2UsIHRlbXBvcmFyeSAgIHwgcmVmLCAjaWQgIHwgcmVtb3ZlIGlkIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUgICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlZiwgI2lkICB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiB0cnVlLCB0ZW1wb3JhcnkgICAgfCByZWYsICNpZCAgfCByZWYsICNpZCAgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcblxuZXhwb3J0IGNsYXNzIFNjaGVtYUdyYXBoIHtcbiAgZ3JhcGggPSB7fVxuICByZWZlcmVuY2VzID0ge31cblxuICBzZXQoZGF0YVBhdGgsIHNldHRpbmdzLCBkZWZhdWx0cykge1xuICAgIGRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBsZXQgc3ViR3JhcGggPSB0aGlzLmdyYXBoXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGRhdGFQYXRoKSB7XG4gICAgICBjb25zdCBrZXkgPSBpc0ludGVnZXIoK3BhcnQpID8gJyonIDogcGFydFxuICAgICAgc3ViR3JhcGggPSBzdWJHcmFwaFtrZXldID8/PSB7fVxuICAgIH1cbiAgICBzdWJHcmFwaC4kc2V0dGluZ3MgPSB7XG4gICAgICAuLi5kZWZhdWx0cywgLy8gU2VlIGBhZGRTb3VyY2UoZGF0YVBhdGgpYFxuICAgICAgLi4uc3ViR3JhcGguJHNldHRpbmdzLFxuICAgICAgLi4uc2V0dGluZ3NcbiAgICB9XG4gIH1cblxuICBhZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIC8vIE9ubHkgc2V0IGByZWxhdGVkOiBmYWxzZWAgdGhyb3VnaCB0aGUgZGVmYXVsdHMsIGFzIGBzZXRTb3VyY2VSZWxhdGVkKClgXG4gICAgLy8gbWF5IGJlIGNhbGxlZCBiZWZvcmUgYGFkZFNvdXJjZSgpYCwgZGVwZW5kaW5nIG9uIHRoZSBncmFwaCBzdHJ1Y3R1cmUuXG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHsgdHlwZTogJ3NvdXJjZScsIHNjaGVtYSB9LCB7IHJlbGF0ZWQ6IGZhbHNlIH0pXG4gIH1cblxuICBzZXRTb3VyY2VSZWxhdGVkKGRhdGFQYXRoKSB7XG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHtcbiAgICAgIHJlbGF0ZWQ6IHRydWUsXG4gICAgICByZWZlcmVuY2U6IHRoaXMuZ2V0UmVmZXJlbmNlUHJlZml4KGRhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBhZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgdHlwZTogJ3JlbGF0aW9uJyxcbiAgICAgIHNjaGVtYSxcbiAgICAgIGludGVybmFsOiAhIXJlbGF0ZWREYXRhUGF0aCxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgocmVsYXRlZERhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBnZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpIHtcbiAgICByZXR1cm4gZGF0YVBhdGhcbiAgICAgID8gKHRoaXMucmVmZXJlbmNlc1tkYXRhUGF0aF0gPz89IG5hbm9pZCg2KSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgZmxhdHRlbigpIHtcbiAgICBjb25zdCBmbGF0dGVuID0gZ3JhcGggPT4ge1xuICAgICAgY29uc3QgZW50cmllcyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHsgJHNldHRpbmdzLCAuLi5zdWJHcmFwaCB9XSBvZiBPYmplY3QuZW50cmllcyhncmFwaCkpIHtcbiAgICAgICAgaWYgKCRzZXR0aW5ncykge1xuICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCAkc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3N1YktleSwgc2V0dGluZ3NdIG9mIGZsYXR0ZW4oc3ViR3JhcGgpKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtgJHtrZXl9LyR7c3ViS2V5fWAsIHNldHRpbmdzXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdHRlbih0aGlzLmdyYXBoKVxuICB9XG5cbiAgcHJvY2Vzcyhzb3VyY2VTY2hlbWEsIGRhdGEsIHsgdGFyZ2V0IH0pIHtcbiAgICBjb25zdCBjbGlwYm9hcmQgPSB0YXJnZXQgPT09ICdjbGlwYm9hcmQnXG4gICAgaWYgKGNsaXBib2FyZCkge1xuICAgICAgZGVsZXRlIGRhdGFbc291cmNlU2NoZW1hLmlkS2V5IHx8ICdpZCddXG4gICAgfVxuICAgIGZvciAoY29uc3QgW2RhdGFQYXRoLCBzZXR0aW5nc10gb2YgdGhpcy5mbGF0dGVuKCkpIHtcbiAgICAgIGNvbnN0IHsgdHlwZSwgc2NoZW1hLCBpbnRlcm5hbCwgcmVsYXRlZCwgcmVmZXJlbmNlIH0gPSBzZXR0aW5nc1xuICAgICAgY29uc3Qgc291cmNlID0gdHlwZSA9PT0gJ3NvdXJjZSdcbiAgICAgIGNvbnN0IHJlbGF0aW9uID0gdHlwZSA9PT0gJ3JlbGF0aW9uJ1xuICAgICAgaWYgKHNvdXJjZSB8fCByZWxhdGlvbiAmJiBpbnRlcm5hbCkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBnZXRWYWx1ZUF0RGF0YVBhdGgoZGF0YSwgZGF0YVBhdGgsICgpID0+IG51bGwpXG4gICAgICAgIGNvbnN0IHJlbW92ZUlkID0gY2xpcGJvYXJkICYmIHNvdXJjZSAmJiAhcmVsYXRlZFxuICAgICAgICBjb25zdCByZWZlcmVuY2VJZCA9IChcbiAgICAgICAgICBjbGlwYm9hcmQgJiYgKFxuICAgICAgICAgICAgcmVsYXRpb24gJiYgaW50ZXJuYWwgfHxcbiAgICAgICAgICAgIHNvdXJjZSAmJiByZWxhdGVkXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgYXNBcnJheSh2YWx1ZXMpLmZsYXQoKSkge1xuICAgICAgICAgIGNvbnN0IGlkS2V5ID0gKFxuICAgICAgICAgICAgc291cmNlICYmIHNjaGVtYS5pZEtleSB8fFxuICAgICAgICAgICAgcmVsYXRpb24gJiYgc2NoZW1hLnJlbGF0ZUJ5IHx8XG4gICAgICAgICAgICAnaWQnXG4gICAgICAgICAgKVxuICAgICAgICAgIGxldCBpZCA9IHZhbHVlPy5baWRLZXldXG4gICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChyZW1vdmVJZCkge1xuICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlSWQgfHwgaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgaWYgKGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBpZC5zbGljZSgxKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJlZktleSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgID8gLy8gQ2xpcGJvYXJkIGp1c3QgbmVlZHMgdGVtcG9yYXJ5IGlkcyB1bmRlciB0aGUgYWN0dWFsIGBpZEtleWBcbiAgICAgICAgICAgICAgICAgIGlkS2V5XG4gICAgICAgICAgICAgICAgOiAvLyBTZXJ2ZXIgd2FudHMgT2JqZWN0aW9uLXN0eWxlICcjaWQnIC8gJyNyZWYnIHBhaXJzLlxuICAgICAgICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAgICAgICA/ICcjaWQnXG4gICAgICAgICAgICAgICAgICA6ICcjcmVmJ1xuICAgICAgICAgICAgICBjb25zdCByZXZWYWx1ZSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgID8gYEAke2lkfWBcbiAgICAgICAgICAgICAgICA6IC8vIEtlZXAgdGhlIGlkcyB1bmlxdWUgaW4gcmVmZXJlbmNlIGdyb3Vwcywgc2luY2UgdGhleVxuICAgICAgICAgICAgICAgICAgLy8gcmVmZXJlbmNlIGFjcm9zcyB0aGUgZnVsbCBncmFwaC5cbiAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgICAgPyBgJHtyZWZlcmVuY2V9LSR7aWR9YFxuICAgICAgICAgICAgICAgICAgOiBpZCAvLyBBIHRlbXBvcmFyeSBpZCB3aXRob3V0IGEgcmVsYXRlZCwganVzdCBwcmVzZXJ2ZSBpdC5cbiAgICAgICAgICAgICAgdmFsdWVbcmVmS2V5XSA9IHJldlZhbHVlXG4gICAgICAgICAgICAgIGlmIChyZWZLZXkgIT09IGlkS2V5KSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2lkS2V5XVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhXG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzQXJyYXksXG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNCb29sZWFuLFxuICBpc051bWJlcixcbiAgaXNGdW5jdGlvbixcbiAgaXNEYXRlLFxuICBpc1JlZ0V4cCxcbiAgYXNBcnJheVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5jb25zdCB0eXBlQ2hlY2tlcnMgPSB7XG4gIEJvb2xlYW46IGlzQm9vbGVhbixcbiAgTnVtYmVyOiBpc051bWJlcixcbiAgU3RyaW5nOiBpc1N0cmluZyxcbiAgRGF0ZTogaXNEYXRlLFxuICBBcnJheTogaXNBcnJheSxcbiAgT2JqZWN0OiBpc09iamVjdCxcbiAgUmVnRXhwOiBpc1JlZ0V4cCxcbiAgRnVuY3Rpb246IGlzRnVuY3Rpb25cbn1cblxuLy8gRGVjbGFyZSB0aGVzZSBzZXBhcmF0ZWx5IGZyb20gdGhlIGB0eXBlQ29udmVydGVyc2Agb2JqZWN0LCB0byBwcmV2ZW50XG4vLyBCYWJlbCBpc3N1ZXMgd2l0aCBgT2JqZWN0YCBvdmVycmlkaW5nIHRoZSBnbG9iYWwgYE9iamVjdGA6XG5jb25zdCB0b0Jvb2xlYW4gPSB2YWx1ZSA9PiAhIXZhbHVlXG5jb25zdCB0b051bWJlciA9IHZhbHVlID0+ICt2YWx1ZVxuY29uc3QgdG9TdHJpbmcgPSB2YWx1ZSA9PiBTdHJpbmcodmFsdWUpXG5cbmNvbnN0IHRvRGF0ZSA9IHZhbHVlID0+XG4gIGlzRGF0ZSh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiBuZXcgRGF0ZSh2YWx1ZSlcblxuY29uc3QgdG9BcnJheSA9IHZhbHVlID0+XG4gIGlzQXJyYXkodmFsdWUpXG4gICAgPyB2YWx1ZVxuICAgIDogaXNTdHJpbmcodmFsdWUpXG4gICAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICAgIDogYXNBcnJheSh2YWx1ZSlcblxuY29uc3QgdG9PYmplY3QgPSB2YWx1ZSA9PlxuICBpc09iamVjdCh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiAvLyBJZiBhIE9iamVjdCBpcyBleHBlY3RlZCBidXQgYSBCb29sZWFuIHByb3ZpZGUsIGNvbnZlcnQgdG8gYW4gZW1wdHlcbiAgICAgIC8vIG9iamVjdC4gVXNlZCBieSBgY3JlYXRhYmxlYCAmIGNvLCB0aGF0IGNhbiBiZSBib3RoLlxuICAgICAgdmFsdWUgPT09IHRydWVcbiAgICAgID8ge31cbiAgICAgIDogbnVsbFxuXG5jb25zdCB0b1JlZ0V4cCA9IHZhbHVlID0+XG4gIGlzUmVnRXhwKHZhbHVlKVxuICAgID8gdmFsdWVcbiAgICA6IG5ldyBSZWdFeHAodmFsdWUpXG5cbmNvbnN0IHR5cGVDb252ZXJ0ZXJzID0ge1xuICBCb29sZWFuOiB0b0Jvb2xlYW4sXG4gIE51bWJlcjogdG9OdW1iZXIsXG4gIFN0cmluZzogdG9TdHJpbmcsXG4gIERhdGU6IHRvRGF0ZSxcbiAgQXJyYXk6IHRvQXJyYXksXG4gIE9iamVjdDogdG9PYmplY3QsXG4gIFJlZ0V4cDogdG9SZWdFeHBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkge1xuICAvLyBTZWUgaWYgYW55IG9mIHRoZSBleHBlY3QgdHlwZXMgbWF0Y2gsIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGV5IGRvOlxuICBpZiAodHlwZXMgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKHR5cGVDaGVja2Vyc1t0eXBlLm5hbWVdPy4odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGUodHlwZSwgdmFsdWUpIHtcbiAgY29uc3QgY29udmVydGVyID0gdHlwZSAmJiB0eXBlQ29udmVydGVyc1t0eXBlLm5hbWUgfHwgdHlwZV1cbiAgcmV0dXJuIGNvbnZlcnRlciA/IGNvbnZlcnRlcih2YWx1ZSkgOiB2YWx1ZVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERpdG9NaXhpbiBmcm9tICcuLi9taXhpbnMvRGl0b01peGluLmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0VWlkIH0gZnJvbSAnLi91aWQuanMnXG5pbXBvcnQgeyBTY2hlbWFHcmFwaCB9IGZyb20gJy4vU2NoZW1hR3JhcGguanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7IGlzTWF0Y2hpbmdUeXBlLCBjb252ZXJ0VHlwZSB9IGZyb20gJy4vdHlwZS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNBcnJheSxcbiAgaXNGdW5jdGlvbixcbiAgaXNQcm9taXNlLFxuICBpc01vZHVsZSxcbiAgYXNBcnJheSxcbiAgY2xvbmUsXG4gIGNhbWVsaXplLFxuICBhc3NpZ25EZWVwbHksXG4gIG1hcENvbmN1cnJlbnRseSxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBtYXJrUmF3IH0gZnJvbSAndnVlJ1xuXG5jb25zdCB0eXBlQ29tcG9uZW50cyA9IHt9XG5jb25zdCB1bmtub3duVHlwZVJlcG9ydGVkID0ge31cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpIHtcbiAgdHlwZUNvbXBvbmVudHNbdHlwZV0gPSBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wb25lbnQodHlwZSwgYWxsb3dOdWxsID0gZmFsc2UpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gdHlwZUNvbXBvbmVudHNbdHlwZV0gfHwgbnVsbFxuICBpZiAoIWNvbXBvbmVudCAmJiAhYWxsb3dOdWxsICYmICF1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdKSB7XG4gICAgLy8gUmVwb3J0IGVhY2ggbWlzc2luZyB0eXBlIG9ubHkgb25jZSwgdG8gYXZvaWQgZmxvb2RpbmcgdGhlIGNvbnNvbGU6XG4gICAgdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSA9IHRydWVcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gRGl0byBjb21wb25lbnQgdHlwZTogJyR7dHlwZX0nYClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWFzLCBjYWxsYmFjaykge1xuICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgaWYgKGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpKSB7XG4gICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhzY2hlbWEuY29tcG9uZW50LCBzY2hlbWEubmFtZSwgMClcbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1NjaGVtYShzY2hlbWEpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYS5jb21wb25lbnRzIHx8IHt9KSkge1xuICAgICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUsIDEpXG4gICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gc2NoZW1hXG4gICAgPyBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhbc2NoZW1hLCAuLi5nZXRUYWJTY2hlbWFzKHNjaGVtYSldLCBjYWxsYmFjaylcbiAgICA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZE5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiAoXG4gICAgaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoXG4gICAgICBzY2hlbWEsXG4gICAgICBjb21wb25lbnQgPT4gKGNhbGxiYWNrKGNvbXBvbmVudCkgPyBjb21wb25lbnQgOiB1bmRlZmluZWQpXG4gICAgKSA/PyBudWxsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gKFxuICAgIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKFxuICAgICAgc2NoZW1hLFxuICAgICAgY29tcG9uZW50ID0+IChjYWxsYmFjayhjb21wb25lbnQpID8gdHJ1ZSA6IHVuZGVmaW5lZClcbiAgICApID8/IGZhbHNlXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5TmVzdGVkU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIChcbiAgICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhcbiAgICAgIHNjaGVtYSxcbiAgICAgIGNvbXBvbmVudCA9PiAoY2FsbGJhY2soY29tcG9uZW50KSA/IHVuZGVmaW5lZCA6IGZhbHNlKVxuICAgICkgPz8gdHJ1ZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNOZXN0ZWRTY2hlbWFDb21wb25lbnRzKHNjaGVtYSkge1xuICByZXR1cm4gc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsICgpID0+IHRydWUpID8/IGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NjaGVtYShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYSkgJiYgaXNTdHJpbmcoc2NoZW1hLnR5cGUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zvcm0oc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAnZm9ybSdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICd2aWV3J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUYWIoc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAndGFiJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYW5lbChzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdwYW5lbCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWVudShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdtZW51J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHNjaGVtYSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWEoc2NoZW1hLCB1bndyYXBNb2R1bGUgPSBmYWxzZSkge1xuICBpZiAoaXNGdW5jdGlvbihzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gc2NoZW1hKClcbiAgfVxuICBpZiAoaXNQcm9taXNlKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSBhd2FpdCBzY2hlbWFcbiAgfVxuICBpZiAoaXNNb2R1bGUoc2NoZW1hKSkge1xuICAgIC8vIENvcHkgdG8gY29udmVydCBmcm9tIG1vZHVsZSB0byBvYmplY3Q6XG4gICAgc2NoZW1hID0geyAuLi5zY2hlbWEgfVxuICAgIC8vIFVud3JhcCBkZWZhdWx0IG9yIG5hbWVkIHNjaGVtYVxuICAgIGlmICghc2NoZW1hLm5hbWUgJiYgKHVud3JhcE1vZHVsZSB8fCBzY2hlbWEuZGVmYXVsdCkpIHtcbiAgICAgIC8vIEZpbHRlciBvdXQgaW50ZXJuYWwga2V5IGFkZGVkIGJ5IHZpdGUgLyB2dWUgMyBwbHVnaW4gd2hlbiBjaGFuZ2luZ1xuICAgICAgLy8gY29kZSBpbiBhIGR5bmFtaWNhbGx5IGltcG9ydGVkIHZ1ZSBjb21wb25lbnQsIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92aXRlanMvdml0ZS1wbHVnaW4tdnVlL2Jsb2IvYWJkZjVmNGYzMmQwMmFmNjQxZTVmNjA4NzFiZGUxNDUzNTU2OWIxZS9wYWNrYWdlcy9wbHVnaW4tdnVlL3NyYy9tYWluLnRzI0wxMzNcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWEpLmZpbHRlcihrZXkgPT4ga2V5ICE9PSAnX3JlcmVuZGVyX29ubHknKVxuICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBrZXlzWzBdXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVtuYW1lXVxuICAgICAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYXMoXG4gIHVucmVzb2x2ZWRTY2hlbWFzLFxuICByZXNvbHZlSXRlbSA9IHJlc29sdmVTY2hlbWFcbikge1xuICBsZXQgc2NoZW1hcyA9IGlzRnVuY3Rpb24odW5yZXNvbHZlZFNjaGVtYXMpXG4gICAgPyB1bnJlc29sdmVkU2NoZW1hcygpXG4gICAgOiB1bnJlc29sdmVkU2NoZW1hc1xuICBzY2hlbWFzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWFzLCBmYWxzZSlcbiAgaWYgKGlzQXJyYXkoc2NoZW1hcykpIHtcbiAgICAvLyBUcmFuc2xhdGUgYW4gYXJyYXkgb2YgZHluYW1pYyBpbXBvcnQsIGVhY2ggaW1wb3J0aW5nIG9uZSBuYW1lZCBzY2hlbWFcbiAgICAvLyBtb2R1bGUgdG8gYW4gb2JqZWN0IHdpdGggbmFtZWQgZW50cmllcy5cbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgYXdhaXQgbWFwQ29uY3VycmVudGx5KFxuICAgICAgICBzY2hlbWFzLFxuICAgICAgICBhc3luYyBpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBbc2NoZW1hLm5hbWUsIHNjaGVtYV1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIGlmIChpc09iamVjdChzY2hlbWFzKSkge1xuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICBhc3luYyAoW2tleSwgaXRlbV0pID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICAgIH1cbiAgICAgIClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHNjaGVtYXNcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVWaWV3cyh1bnJlc29sdmVkVmlld3MpIHtcbiAgcmV0dXJuIHJlc29sdmVTY2hlbWFzKHVucmVzb2x2ZWRWaWV3cywgYXN5bmMgKHNjaGVtYSwgdW53cmFwTW9kdWxlKSA9PiB7XG4gICAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHVud3JhcE1vZHVsZSlcbiAgICBpZiAoIXNjaGVtYS5uYW1lICYmIGlzTWVudShzY2hlbWEpKSB7XG4gICAgICAvLyBHZW5lcmF0ZSBhIG5hbWUgZm9yIHN1Yi1tZW51cyBmcm9tIHRoZWlyIGxhYmVsIGlmIGl0J3MgbWlzc2luZy5cbiAgICAgIC8vIE5PVEU6IFRoaXMgaXMgbmV2ZXIgYWN0dWFsbHkgcmVmZXJlbmNlZCBmcm9tIGFueXdoZXJlLCBidXQgdGhleSBuZWVkXG4gICAgICAvLyBhIG5hbWUgYnkgd2hpY2ggdGhleSdyZSBzdG9yZWQgaW4gdGhlIHBhcmVudCBvYmplY3QuXG4gICAgICBzY2hlbWEubmFtZSA9IGNhbWVsaXplKHNjaGVtYS5sYWJlbClcbiAgICAgIHNjaGVtYS5pdGVtcyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKHNjaGVtYS5pdGVtcylcbiAgICB9XG4gICAgcmV0dXJuIHNjaGVtYVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlblZpZXdzKHZpZXdzKSB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXModmlld3MpLnJlZHVjZShcbiAgICAgIChlbnRyaWVzLCBba2V5LCBzY2hlbWFdKSA9PiB7XG4gICAgICAgIGlmIChpc01lbnUoc2NoZW1hKSkge1xuICAgICAgICAgIGVudHJpZXMucHVzaCguLi5PYmplY3QuZW50cmllcyhzY2hlbWEuaXRlbXMpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCBzY2hlbWFdKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgICB9LFxuICAgICAgW11cbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSB7XG4gIC8vIFJlc29sdmVzIGFzeW5jIHNjaGVtYSBjb21wb25lbnRzIGFuZCBhZGRzIERpdG9NaXhpbiBhbmQgVHlwZU1peGluIHRvIHRoZW0uXG4gIGxldCB7IGNvbXBvbmVudCB9ID0gc2NoZW1hXG4gIGlmIChjb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQgPSBhd2FpdCByZXNvbHZlU2NoZW1hKGNvbXBvbmVudCwgdHJ1ZSlcbiAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAvLyBQcmV2ZW50IHdhcm5pbmc6IFwiVnVlIHJlY2VpdmVkIGEgQ29tcG9uZW50IHdoaWNoIHdhcyBtYWRlIGEgcmVhY3RpdmVcbiAgICAgIC8vIG9iamVjdC4gVGhpcyBjYW4gbGVhZCB0byB1bm5lY2Vzc2FyeSBwZXJmb3JtYW5jZSBvdmVyaGVhZCwgYW5kIHNob3VsZFxuICAgICAgLy8gYmUgYXZvaWRlZCBieSBtYXJraW5nIHRoZSBjb21wb25lbnQgd2l0aCBgbWFya1Jhd2BcIjpcbiAgICAgIHNjaGVtYS5jb21wb25lbnQgPSBtYXJrUmF3KHtcbiAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICBtaXhpbnM6IFtEaXRvTWl4aW4sIFR5cGVNaXhpbiwgLi4uKGNvbXBvbmVudC5taXhpbnMgfHwgW10pXVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYXMpIHtcbiAgLy8gYHNjaGVtYXNgIGFyZSBvZiB0aGUgc2FtZSBwb3NzaWJsZSBmb3JtcyBhcyBwYXNzZWQgdG8gYGdldE5hbWVkU2NoZW1hcygpYFxuICBhd2FpdCBtYXBDb25jdXJyZW50bHkoT2JqZWN0LnZhbHVlcyhzY2hlbWFzIHx8IHt9KSwgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudClcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKFxuICBhcGksXG4gIHNjaGVtYSxcbiAgcm91dGVzID0gbnVsbCxcbiAgbGV2ZWwgPSAwXG4pIHtcbiAgY29uc3QgcHJvbWlzZXMgPSBbXVxuICBjb25zdCBwcm9jZXNzID0gKGNvbXBvbmVudCwgbmFtZSwgcmVsYXRpdmVMZXZlbCkgPT4ge1xuICAgIHByb21pc2VzLnB1c2goXG4gICAgICBwcm9jZXNzU2NoZW1hQ29tcG9uZW50KFxuICAgICAgICBhcGksXG4gICAgICAgIGNvbXBvbmVudCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcm91dGVzLFxuICAgICAgICBsZXZlbCArIHJlbGF0aXZlTGV2ZWxcbiAgICAgIClcbiAgICApXG4gIH1cblxuICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEsIHByb2Nlc3MpXG4gIGl0ZXJhdGVTY2hlbWFDb21wb25lbnRzKGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpLCBwcm9jZXNzKVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudChcbiAgYXBpLFxuICBzY2hlbWEsXG4gIG5hbWUsXG4gIHJvdXRlcyA9IG51bGwsXG4gIGxldmVsID0gMFxuKSB7XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcblxuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgLy8gQWxzbyBwcm9jZXNzIG5lc3RlZCBwYW5lbCBzY2hlbWFzLlxuICAgIG1hcENvbmN1cnJlbnRseShcbiAgICAgIGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpLFxuICAgICAgcGFuZWwgPT4gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBwYW5lbCwgcm91dGVzLCBsZXZlbClcbiAgICApLFxuICAgIC8vIERlbGVnYXRlIHNjaGVtYSBwcm9jZXNzaW5nIHRvIHRoZSBhY3R1YWwgdHlwZSBjb21wb25lbnRzLlxuICAgIGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LnByb2Nlc3NTY2hlbWE/LihcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYSxcbiAgICAgIG5hbWUsXG4gICAgICByb3V0ZXMsXG4gICAgICBsZXZlbFxuICAgIClcbiAgXSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NWaWV3KGNvbXBvbmVudCwgYXBpLCBzY2hlbWEsIG5hbWUsIGZ1bGxQYXRoID0gJycpIHtcbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuICBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUsIGZ1bGxQYXRoKVxuICBsZXQgY2hpbGRyZW4gPSBbXVxuICBpZiAoaXNWaWV3KHNjaGVtYSkpIHtcbiAgICBhd2FpdCBwcm9jZXNzTmVzdGVkU2NoZW1hcyhhcGksIHNjaGVtYSlcbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgY2hpbGRyZW4pXG4gIH0gZWxzZSBpZiAoaXNNZW51KHNjaGVtYSkpIHtcbiAgICBjaGlsZHJlbiA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgT2JqZWN0LmVudHJpZXMoc2NoZW1hLml0ZW1zKS5tYXAoYXN5bmMgKFtuYW1lLCBpdGVtXSkgPT5cbiAgICAgICAgcHJvY2Vzc1ZpZXcoY29tcG9uZW50LCBhcGksIGl0ZW0sIG5hbWUsIHNjaGVtYS5mdWxsUGF0aClcbiAgICAgIClcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZpZXcgc2NoZW1hOiAnJHtnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSl9J2ApXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwYXRoOiBzY2hlbWEuZnVsbFBhdGgsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50LFxuICAgIG1ldGE6IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKSB7XG4gIGxldCBkZWZhdWx0cyA9IGFwaS5kZWZhdWx0c1tzY2hlbWEudHlwZV1cbiAgaWYgKGRlZmF1bHRzKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZGVmYXVsdHMpKSB7XG4gICAgICBkZWZhdWx0cyA9IGRlZmF1bHRzKHNjaGVtYSlcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KGRlZmF1bHRzKSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGVmYXVsdHMpKSB7XG4gICAgICAgIGlmIChzY2hlbWFba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NoZW1hW2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjaGVtYVtrZXldID0gYXNzaWduRGVlcGx5KHZhbHVlLCBzY2hlbWFba2V5XSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc05lc3RlZFNjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKSB7XG4gIC8vIFByb2Nlc3MgZGVmYXVsdHMgZm9yIG5lc3RlZCBzY2hlbWFzLiBOb3RlIHRoYXQgdGhpcyBpcyBhbHNvIGRvbmUgd2hlblxuICAvLyBjYWxsaW5nIGBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cygpYCwgYnV0IHRoYXQgZnVuY3Rpb24gaXMgYXN5bmMsIGFuZCB3ZVxuICAvLyBuZWVkIGEgc3luYyB2ZXJzaW9uIHRoYXQgb25seSBoYW5kbGVzIHRoZSBkZWZhdWx0cyBmb3IgZmlsdGVycywgc2VlXG4gIC8vIGBnZXRGaWx0ZXJzUGFuZWwoKWAuXG4gIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKHNjaGVtYSwgY29tcG9uZW50ID0+IHtcbiAgICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBjb21wb25lbnQpXG4gICAgY29uc3QgZm9ybXMgPSBnZXRGb3JtU2NoZW1hcyhjb21wb25lbnQpXG4gICAgZm9yIChjb25zdCBmb3JtIG9mIE9iamVjdC52YWx1ZXMoZm9ybXMpKSB7XG4gICAgICBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMoYXBpLCBmb3JtKVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgZnVsbFBhdGggPSBudWxsKSB7XG4gIC8vIFVzZWQgZm9yIHZpZXcgYW5kIHNvdXJjZSBzY2hlbWFzLCBzZWUgU291cmNlTWl4aW4uXG4gIHNjaGVtYS5uYW1lID8/PSBuYW1lXG4gIHNjaGVtYS5wYXRoID8/PSBhcGkubm9ybWFsaXplUGF0aChuYW1lKVxuICBpZiAoZnVsbFBhdGggIT09IG51bGwpIHtcbiAgICBzY2hlbWEuZnVsbFBhdGggPSBgJHtmdWxsUGF0aH0vJHtzY2hlbWEucGF0aH1gXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpIHtcbiAgLy8gRmlyc3QgcmVzb2x2ZSB0aGUgZm9ybXMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGJhY2sgb24gdGhlIHNjaGVtYS5cbiAgbGV0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMgfSA9IHNjaGVtYVxuICBpZiAoZm9ybXMpIHtcbiAgICBmb3JtcyA9IHNjaGVtYS5mb3JtcyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKGZvcm1zLCBmb3JtID0+XG4gICAgICBwcm9jZXNzRm9ybShhcGksIGZvcm0pXG4gICAgKVxuICB9IGVsc2UgaWYgKGZvcm0pIHtcbiAgICBmb3JtID0gc2NoZW1hLmZvcm0gPSBhd2FpdCBwcm9jZXNzRm9ybShhcGksIGZvcm0pXG4gIH0gZWxzZSBpZiAoaXNPYmplY3QoY29tcG9uZW50cykpIHtcbiAgICAvLyBOT1RFOiBQcm9jZXNzaW5nIGZvcm1zIGluIGNvbXB1dGVkIGNvbXBvbmVudHMgaXMgbm90IHN1cHBvcnRlZCwgc2luY2UgaXRcbiAgICAvLyBvbmx5IGNhbiBiZSBjb21wdXRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGFjdHVhbCBkYXRhLlxuICAgIGZvcm0gPSB7XG4gICAgICB0eXBlOiAnZm9ybScsXG4gICAgICBjb21wb25lbnRzXG4gICAgfVxuICB9XG5cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9IC8vIE9ubHkgdXNlZCBmb3IgcHJvY2VzcyBsb29wIGJlbG93LlxuICBjb25zdCBjaGlsZHJlbiA9IFtdXG4gIGZvciAoY29uc3QgZm9ybSBvZiBPYmplY3QudmFsdWVzKGZvcm1zKSkge1xuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgZm9ybSwgY2hpbGRyZW4sIGxldmVsKVxuICB9XG4gIHJldHVybiBjaGlsZHJlblxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0Zvcm0oYXBpLCBzY2hlbWEpIHtcbiAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHRydWUpXG4gIGlmICghaXNGb3JtKHNjaGVtYSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZm9ybSBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpXG4gIGF3YWl0IHByb2Nlc3NOZXN0ZWRTY2hlbWFzKGFwaSwgc2NoZW1hKVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzVGFiKGFwaSwgc2NoZW1hKSB7XG4gIHNjaGVtYSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hLCB0cnVlKVxuICBpZiAoIWlzVGFiKHNjaGVtYSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGFiIHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1BhbmVsKGFwaSwgc2NoZW1hKSB7XG4gIHNjaGVtYSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hLCB0cnVlKVxuICBpZiAoIWlzUGFuZWwoc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYW5lbCBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpXG4gIHJldHVybiBzY2hlbWFcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NOZXN0ZWRTY2hlbWFzKGFwaSwgc2NoZW1hKSB7XG4gIGNvbnN0IHsgdGFicywgcGFuZWxzIH0gPSBzY2hlbWFcbiAgaWYgKHRhYnMpIHtcbiAgICBzY2hlbWEudGFicyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKFxuICAgICAgdGFicyxcbiAgICAgIHRhYiA9PiBwcm9jZXNzVGFiKGFwaSwgdGFiKVxuICAgIClcbiAgfVxuICBpZiAocGFuZWxzKSB7XG4gICAgc2NoZW1hLnBhbmVscyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKFxuICAgICAgcGFuZWxzLFxuICAgICAgcGFuZWwgPT4gcHJvY2Vzc1BhbmVsKGFwaSwgcGFuZWwpXG4gICAgKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNGb3JtU2NoZW1hKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGJvdGggc2luZ2xlIGZvcm0gYW5kIG11bHRpcGxlIGZvcm1zIG5vdGF0aW9uLCBhcyB3ZWxsIGFzIGlubGluZWRcbiAgLy8gY29tcG9uZW50cy5cbiAgcmV0dXJuIChcbiAgICBpc1NjaGVtYShzY2hlbWEpICYmXG4gICAgaXNPYmplY3Qoc2NoZW1hLmZvcm0gfHwgc2NoZW1hLmZvcm1zIHx8IHNjaGVtYS5jb21wb25lbnRzKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gKFxuICAgIGlzU2NoZW1hKHNjaGVtYSkgJiZcbiAgICBPYmplY3Qua2V5cyhzY2hlbWE/LmZvcm1zIHx8IHt9KS5sZW5ndGggPiAxXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIChcbiAgICBpc1ZpZXcoc2NoZW1hKSAmJlxuICAgIGlzT2JqZWN0KHNjaGVtYS5jb21wb25lbnQpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCB7IHZpZXcgfSA9IHNjaGVtYVxuICBjb25zdCB2aWV3U2NoZW1hID0gdmlldyAmJiBjb250ZXh0LmZsYXR0ZW5lZFZpZXdzW3ZpZXddXG4gIHJldHVybiB2aWV3U2NoZW1hXG4gICAgPyAvLyBOT1RFOiBWaWV3cyBjYW4gaGF2ZSB0YWJzLCBpbiB3aGljaCBjYXNlIHRoZSB2aWV3IGNvbXBvbmVudCBpcyBuZXN0ZWRcbiAgICAgIC8vIGluIG9uZSBvZiB0aGUgdGFicywgZ28gZmluZCBpdC5cbiAgICAgIGZpbmROZXN0ZWRTY2hlbWFDb21wb25lbnQodmlld1NjaGVtYSwgaGFzRm9ybVNjaGVtYSkgfHwgbnVsbFxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgICA/IGNvbnRleHQuZmxhdHRlbmVkVmlld3Nbc2NoZW1hLnZpZXddXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICByZXR1cm4gISFnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdFZGl0UGF0aChzY2hlbWEsIGlkLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZpZXcgPSBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgaWYgKHZpZXcpIHtcbiAgICBjb25zdCBwYXRoID0gaXNTaW5nbGVDb21wb25lbnRWaWV3KHZpZXcpXG4gICAgICA/IHZpZXcuZnVsbFBhdGhcbiAgICAgIDogYCR7dmlldy5mdWxsUGF0aH0vJHt2aWV3LnBhdGh9YFxuICAgIHJldHVybiBgJHtwYXRofS8ke2lkfWBcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0LCBtb2RpZnlGb3JtKSB7XG4gIGNvbnN0IHZpZXdTY2hlbWEgPSBjb250ZXh0ICYmIGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgaWYgKHZpZXdTY2hlbWEpIHtcbiAgICBzY2hlbWEgPSB2aWV3U2NoZW1hXG4gIH0gZWxzZSBpZiAoc2NoZW1hLnZpZXcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdmlldzogJyR7c2NoZW1hLnZpZXd9J2ApXG4gIH1cblxuICBsZXQgeyBmb3JtLCBmb3JtcyB9ID0gc2NoZW1hXG4gIGlmICghZm9ybSAmJiAhZm9ybXMpIHtcbiAgICBjb25zdCB7IG5hbWUsIGNvbXBhY3QsIGNsaXBib2FyZCwgdGFicywgY29tcG9uZW50cyB9ID0gc2NoZW1hXG4gICAgaWYgKGNvbXBvbmVudHMgfHwgdGFicykge1xuICAgICAgLy8gQ29udmVydCBpbmxpbmVkIGZvcm1zIHRvIHN0YW5kLWFsb25lIGZvcm1zLCBzdXBwb3J0aW5nIGBuYW1lYCxcbiAgICAgIC8vIGBjb21wYWN0YCwgYGNsaXBib2FyZGAsIGB0YWJzYCBhbmQgYGNvbXBvbmVudHNgIHNldHRpbmdzLlxuICAgICAgZm9ybSA9IHsgdHlwZTogJ2Zvcm0nLCBuYW1lLCBjb21wYWN0LCBjbGlwYm9hcmQsIHRhYnMsIGNvbXBvbmVudHMgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBgZm9ybXNgLCBgZm9ybWAgb3IgYGNvbXBvbmVudHNgLCByZXR1cm4gYW5kIGVtcHR5IGBmb3Jtc2Agb2JqZWN0LlxuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuICB9XG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGZvcm1zKS5tYXAoKFt0eXBlLCBmb3JtXSkgPT4ge1xuICAgICAgLy8gU3VwcG9ydCBgc2NoZW1hLmNvbXBvbmVudHNgIGNhbGxiYWNrcyB0byBjcmVhdGUgY29tcG9uZW50cyBvbiB0aGUgZmx5LlxuICAgICAgaWYgKGNvbnRleHQgJiYgaXNGdW5jdGlvbihmb3JtLmNvbXBvbmVudHMpKSB7XG4gICAgICAgIGZvcm0gPSB7XG4gICAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgICBjb21wb25lbnRzOiBmb3JtLmNvbXBvbmVudHMoY29udGV4dClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFt0eXBlLCBtb2RpZnlGb3JtPy4oZm9ybSkgPz8gZm9ybV1cbiAgICB9KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSkge1xuICByZXR1cm4gZm9ybXNbaXRlbT8udHlwZV0gfHwgZm9ybXMuZGVmYXVsdCB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCksIGl0ZW0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXBhY3Qoc2NoZW1hKSB7XG4gIHJldHVybiAhIXNjaGVtYS5jb21wYWN0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lubGluZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShzY2hlbWEuaW5saW5lZCB8fCBzY2hlbWEuY29tcG9uZW50cylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmVzdGVkKHNjaGVtYSkge1xuICByZXR1cm4gISEoc2NoZW1hLm5lc3RlZCB8fCBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5kZWZhdWx0TmVzdGVkID09PSB0cnVlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTGFiZWwoc2NoZW1hLCBnZW5lcmF0ZUxhYmVscykge1xuICBjb25zdCB7IGxhYmVsIH0gPSBzY2hlbWFcbiAgcmV0dXJuIChcbiAgICBsYWJlbCAhPT0gZmFsc2UgJiYgKFxuICAgICAgISFsYWJlbCB8fFxuICAgICAgZ2VuZXJhdGVMYWJlbHMgJiYgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZ2VuZXJhdGVMYWJlbFxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb21pdFNwYWNpbmcoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFR5cGVPcHRpb25zKHNjaGVtYSk/Lm9taXRTcGFjaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFWYWx1ZShcbiAga2V5T3JEYXRhUGF0aCxcbiAgeyB0eXBlLCBzY2hlbWEsIGNhbGxiYWNrID0gdHJ1ZSwgZGVmYXVsdDogZGVmLCBjb250ZXh0IH0gPSB7fVxuKSB7XG4gIGNvbnN0IHR5cGVzID0gdHlwZSAmJiBhc0FycmF5KHR5cGUpXG4gIC8vIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBkYXRhLXBhdGhzIGluIGBrZXlPckRhdGFQYXRoYCBjYW4gb25seSBiZVxuICAvLyBwcm92aWRlZCBpbiBpbiBhcnJheSBmb3JtYXQgaGVyZTpcbiAgbGV0IHZhbHVlID0gc2NoZW1hXG4gICAgPyBpc0FycmF5KGtleU9yRGF0YVBhdGgpXG4gICAgICA/IGdldFZhbHVlQXREYXRhUGF0aChzY2hlbWEsIGtleU9yRGF0YVBhdGgsICgpID0+IHVuZGVmaW5lZClcbiAgICAgIDogc2NoZW1hW2tleU9yRGF0YVBhdGhdXG4gICAgOiB1bmRlZmluZWRcblxuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGRlZikgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCBkZWYpKSB7XG4gICAgICAvLyBTdXBwb3J0IGBkZWZhdWx0KClgIGZ1bmN0aW9ucyBmb3IgYW55IHR5cGUgZXhjZXB0IGBGdW5jdGlvbmA6XG4gICAgICBkZWYgPSBkZWYoY29udGV4dClcbiAgICB9XG4gICAgcmV0dXJuIGRlZlxuICB9XG5cbiAgaWYgKGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuICAvLyBBbnkgc2NoZW1hIHZhbHVlIGhhbmRsZWQgdGhyb3VnaCBgZ2V0U2NoZW1hVmFsdWUoKWAgY2FuIHByb3ZpZGVcbiAgLy8gYSBmdW5jdGlvbiB0aGF0J3MgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsdWUgaXMgZXZhbHVhdGVkOlxuICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICB2YWx1ZSA9IHZhbHVlKGNvbnRleHQpXG4gIH1cbiAgLy8gTm93IGZpbmFsbHkgc2VlIGlmIHdlIGNhbiBjb252ZXJ0IHRvIHRoZSBleHBlY3QgdHlwZXMuXG4gIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBjb25zdCBjb252ZXJ0ZWQgPSBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSlcbiAgICAgIGlmIChjb252ZXJ0ZWQgIT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBjb252ZXJ0ZWRcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRSZW5kZXJTY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIHJldHVybiAoXG4gICAgZ2V0U2NoZW1hVmFsdWUoJ2lmJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIHNjaGVtYSxcbiAgICAgIGNvbnRleHQsXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSkgJiYgKFxuICAgICAgIWhhc05lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hKSB8fFxuICAgICAgc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNvbXBvbmVudCA9PlxuICAgICAgICBzaG91bGRSZW5kZXJTY2hlbWEoY29tcG9uZW50LCBjb250ZXh0KVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGRlZmF1bHQgdmFsdWVzIGJvdGggb24gc2NoZW1hIGFuZCBvbiBjb21wb25lbnQgbGV2ZWwuXG4gIC8vIE5PVEU6IEF0IHRoZSB0aW1lIG9mIGNyZWF0aW9uLCBjb21wb25lbnRzIG1heSBub3QgYmUgaW5zdGFudGlhdGVkLCAoZS5nLiBpZlxuICAvLyBlbnRyaWVzIGFyZSBjcmVhdGVkIHRocm91Z2ggbmVzdGVkIGZvcm1zLCB0aGUgcGFyZW50IGZvcm0gaXNuJ3QgbW91bnRlZCkgc29cbiAgLy8gd2UgY2FuJ3QgdXNlIGBkYXRhUGF0aGAgdG8gZ2V0IHRvIGNvbXBvbmVudHMsIGFuZCB0aGUgYGRlZmF1bHRWYWx1ZWAgZnJvbVxuICAvLyB0aGVyZS4gVGhhdCdzIHdoeSBgZGVmYXVsdFZhbHVlYCBpcyBkZWZpbmVkIHN0YXRpY2FsbHkgaW4gdGhlIGNvbXBvbmVudHM6XG4gIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHNjaGVtYS5kZWZhdWx0XG4gIGNvbnN0IHZhbHVlID1cbiAgICBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgPyBkZWZhdWx0VmFsdWVcbiAgICAgIDogZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdFZhbHVlXG4gIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgID8gdmFsdWUoc2NoZW1hKVxuICAgIDogY2xvbmUodmFsdWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSB7XG4gIGNvbnN0IHR5cGVPcHRpb25zID0gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKVxuICByZXR1cm4gISEoXG4gICAgdHlwZU9wdGlvbnM/LmV4Y2x1ZGVWYWx1ZSB8fCB0eXBlT3B0aW9ucz8uaWdub3JlTWlzc2luZ1ZhbHVlPy4oc2NoZW1hKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0VmFsdWVzKHNjaGVtYSwgZGF0YSA9IHt9LCBjb21wb25lbnQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCByb290RGF0YTogZGF0YSB9XG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUpID0+IHtcbiAgICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgICAgZGF0YVtuYW1lXSA9IGdldERlZmF1bHRWYWx1ZShzY2hlbWEpXG4gICAgfVxuICB9XG5cbiAgLy8gU2V0cyB1cCBhIGRhdGEgb2JqZWN0IHRoYXQgaGFzIGtleXMgd2l0aCBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsXG4gIC8vIGZvcm0gZmllbGRzLCBzbyB0aGV5IGNhbiBiZSBjb3JyZWN0bHkgd2F0Y2hlZCBmb3IgY2hhbmdlcy5cbiAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhLFxuICAgIG51bGwsXG4gICAgbnVsbCxcbiAgICBwcm9jZXNzQmVmb3JlLFxuICAgIG51bGwsXG4gICAgb3B0aW9uc1xuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQgPSBudWxsLFxuICByb290RGF0YSA9IGNvbXBvbmVudD8ucm9vdERhdGFcbn0gPSB7fSkge1xuICBjb25zdCB7IGNvbXB1dGUgfSA9IHNjaGVtYVxuICBpZiAoY29tcHV0ZSkge1xuICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZShcbiAgICAgIG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICAvLyBPdmVycmlkZSB2YWx1ZSB0byBwcmV2ZW50IGVuZGxlc3MgcmVjdXJzaW9uIHRocm91Z2ggY2FsbGluZyB0aGVcbiAgICAgICAgLy8gZ2V0dGVyIGZvciBgdGhpcy52YWx1ZWAgaW4gYERpdG9Db250ZXh0YDpcbiAgICAgICAgdmFsdWU6IGRhdGFbbmFtZV0sXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICByb290RGF0YVxuICAgICAgfSlcbiAgICApXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEFjY2VzcyBgZGF0YVtuYW1lXWAgZGlyZWN0bHkgdG8gdXBkYXRlIHRoZSB2YWx1ZSB3aXRob3V0IGNhbGxpbmdcbiAgICAgIC8vIHBhcnNlKCk6XG4gICAgICBkYXRhW25hbWVdID0gdmFsdWVcbiAgICB9XG4gIH1cbiAgLy8gSWYgdGhlIHZhbHVlIGlzIHN0aWxsIG1pc3NpbmcgYWZ0ZXIgY29tcHV0ZSwgc2V0IHRoZSBkZWZhdWx0IGZvciBpdDpcbiAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkpIHtcbiAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSlcbiAgfVxuICAvLyBOb3cgYWNjZXNzIHRoZSB2YWx1ZS4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHJlYWN0aXZpdHkgYW5kIG5lZWRzIHRvXG4gIC8vIGhhcHBlbiBhZnRlciBhbGwgcHJpb3IgbWFuaXB1bGF0aW9uIG9mIGBkYXRhW25hbWVdYCwgc2VlIGFib3ZlOlxuICByZXR1cm4gZGF0YVtuYW1lXVxufVxuXG5mdW5jdGlvbiBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBpdGVtLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnNjaGVtYU9ubHkpIHtcbiAgICBjb25zdCBjb3B5ID0ge31cbiAgICBjb25zdCB7IGlkS2V5ID0gJ2lkJywgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgIGNvbnN0IGlkID0gaXRlbVtpZEtleV1cbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29weVtpZEtleV0gPSBpZFxuICAgIH1cbiAgICAvLyBDb3B5IG92ZXIgdHlwZSBpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICBpZiAoaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzb3VyY2VTY2hlbWEpKSB7XG4gICAgICBjb3B5LnR5cGUgPSBpdGVtLnR5cGVcbiAgICB9XG4gICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICBjb3B5W29yZGVyS2V5XSA9IGl0ZW1bb3JkZXJLZXldXG4gICAgfVxuICAgIHJldHVybiBjb3B5XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NEYXRhKHNjaGVtYSwgc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQsXG4gIHJvb3REYXRhLFxuICBzY2hlbWFPbmx5LCAvLyB3aGV0aGVyIHRvIG9ubHkgaW5jbHVkZSBkYXRhIGNvdmVyZWQgYnkgdGhlIHNjaGVtYSwgb3IgYWxsIGRhdGFcbiAgdGFyZ2V0XG59ID0ge30pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCByb290RGF0YSwgc2NoZW1hT25seSwgdGFyZ2V0IH1cbiAgY29uc3QgcHJvY2Vzc2VkRGF0YSA9IGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGRhdGEsIG9wdGlvbnMpXG4gIGNvbnN0IGdyYXBoID0gbmV3IFNjaGVtYUdyYXBoKClcblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBsZXQgdmFsdWUgPSBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgb3B0aW9ucylcbiAgICAvLyBUaGUgc2NoZW1hIGV4cGVjdHMgdGhlIGB3cmFwUHJpbWl0aXZlc2AgdHJhbnNmb3JtYXRpb25zIHRvIGJlIHByZXNlbnQgb25cbiAgICAvLyB0aGUgZGF0YSB0aGF0IGl0IGlzIGFwcGxpZWQgb24sIHNvIHdhcnAgYmVmb3JlIGFuZCB1bndyYXAgYWZ0ZXIuXG4gICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBvcmRlcktleSwgaWRLZXkgPSAnaWQnIH0gPSBzY2hlbWFcbiAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLm1hcChlbnRyeSA9PiAoe1xuICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IGVudHJ5XG4gICAgICAgIH0pKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWx3YXlzIHNoYWxsb3ctY2xvbmUgYXJyYXkgdmFsdWVzOlxuICAgICAgICB2YWx1ZSA9IFsuLi52YWx1ZV1cbiAgICAgIH1cbiAgICAgIGlmIChvcmRlcktleSAmJiB0YXJnZXQgPT09ICdjbGlwYm9hcmQnKSB7XG4gICAgICAgIC8vIFNvcnQgdGhlIGRhdGEgYmFjayBpbnRvIHRoZSBuYXR1cmFsIHNlcXVlbmNlIGFzIGRlZmluZWQgYnkgdGhlaXIgaWRzLFxuICAgICAgICAvLyBzbyBjb3B5LXBhc3RpbmcgYmV0d2VlbiBzZXJ2ZXJzIChlLmcuIG5lc3RlZCBmb250LWN1dHMgb24gTGluZXRvKVxuICAgICAgICAvLyBuYXR1cmFsbHkgZ2V0cyBtYXBwZWQgdG8gdGhlIHNhbWUgZW50cmllcyBpbiB0aGUgZ3JhcGguXG4gICAgICAgIHZhbHVlLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBjb25zdCBpZDEgPSBhPy5baWRLZXldXG4gICAgICAgICAgY29uc3QgaWQyID0gYj8uW2lkS2V5XVxuICAgICAgICAgIHJldHVybiBpZDEgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMSlcbiAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgOiBpZDIgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMilcbiAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICA6IGlkMSAtIGlkMlxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgfVxuXG4gIGNvbnN0IHByb2Nlc3NBZnRlciA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgZXhjbHVkZSwgcHJvY2VzcyB9ID0gc2NoZW1hXG4gICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YVtuYW1lXVxuXG4gICAgY29uc3QgdHlwZU9wdGlvbnMgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpXG5cbiAgICAvLyBOT1RFOiBXZSBkb24ndCBjYWNoZSB0aGlzIGNvbnRleHQsIHNpbmNlIGB2YWx1ZWAgaXMgY2hhbmdpbmcuXG4gICAgY29uc3QgZ2V0Q29udGV4dCA9ICgpID0+XG4gICAgICBuZXcgRGl0b0NvbnRleHQoY29tcG9uZW50LCB7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICByb290RGF0YTogb3B0aW9ucy5yb290RGF0YSxcbiAgICAgICAgLy8gUGFzcyB0aGUgYWxyZWFkeSBwcm9jZXNzZWQgZGF0YSB0byBgcHJvY2VzcygpYCwgc28gaXQgY2FuIGJlIG1vZGlmaWVkXG4gICAgICAgIC8vIHRocm91Z2ggYHByb2Nlc3NlZEl0ZW1gIGZyb20gdGhlcmUuXG4gICAgICAgIHByb2Nlc3NlZERhdGFcbiAgICAgIH0pXG5cbiAgICAvLyBGaXJzdCB1bndyYXAgdGhlIHdyYXBwZWQgcHJpbWl0aXZlcyBhZ2FpbiwgdG8gYnJpbmcgdGhlIGRhdGEgYmFjayBpbnRvXG4gICAgLy8gaXRzIG5hdGl2ZSBmb3JtLiBTZSBgcHJvY2Vzc0JlZm9yZSgpYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgfVxuXG4gICAgLy8gRWFjaCBjb21wb25lbnQgdHlwZSBjYW4gcHJvdmlkZSBpdHMgb3duIHN0YXRpYyBgcHJvY2Vzc1ZhbHVlKClgIG1ldGhvZFxuICAgIC8vIHRvIGNvbnZlcnQgdGhlIGRhdGEgZm9yIHN0b3JhZ2UuXG4gICAgY29uc3QgcHJvY2Vzc1ZhbHVlID0gdHlwZU9wdGlvbnM/LnByb2Nlc3NWYWx1ZVxuICAgIGlmIChwcm9jZXNzVmFsdWUpIHtcbiAgICAgIHZhbHVlID0gcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaClcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIHVzZXIncyBgcHJvY2VzcygpYCBjYWxsYmFjayBuZXh0LCBpZiBvbmUgaXMgcHJvdmlkZWQsIHNvIHRoYXRcbiAgICAvLyBpdCBjYW4gbW9kaWZ5IGRhdGEgaW4gYHByb2Nlc3NlZERhdGFgIGV2ZW4gaWYgaXQgcHJvdmlkZXMgYGV4Y2x1ZGU6IHRydWVgXG4gICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgIHZhbHVlID0gcHJvY2VzcyhnZXRDb250ZXh0KCkpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdHlwZU9wdGlvbnM/LmV4Y2x1ZGVWYWx1ZSB8fFxuICAgICAgLy8gU3VwcG9ydCBmdW5jdGlvbnMgbmV4dCB0byBib29sZWFucyBmb3IgYHNjaGVtYS5leGNsdWRlYDpcbiAgICAgIGV4Y2x1ZGUgPT09IHRydWUgfHxcbiAgICAgIGlzRnVuY3Rpb24oZXhjbHVkZSkgJiYgZXhjbHVkZShnZXRDb250ZXh0KCkpXG4gICAgKSB7XG4gICAgICBkZWxldGUgcHJvY2Vzc2VkRGF0YVtuYW1lXVxuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICBzY2hlbWEsXG4gICAgZGF0YSxcbiAgICBkYXRhUGF0aCxcbiAgICBwcm9jZXNzZWREYXRhLFxuICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgcHJvY2Vzc0FmdGVyLFxuICAgIG9wdGlvbnNcbiAgKVxuXG4gIHJldHVybiBncmFwaC5wcm9jZXNzKHNvdXJjZVNjaGVtYSwgcHJvY2Vzc2VkRGF0YSwgb3B0aW9ucylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFEYXRhKFxuICBzY2hlbWEsXG4gIGRhdGEsXG4gIGRhdGFQYXRoLFxuICBwcm9jZXNzZWREYXRhLFxuICBwcm9jZXNzQmVmb3JlLFxuICBwcm9jZXNzQWZ0ZXIsXG4gIG9wdGlvbnNcbikge1xuICBjb25zdCBwcm9jZXNzQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgPT4ge1xuICAgIGNvbnN0IGdldERhdGFQYXRoID0gKGRhdGFQYXRoLCB0b2tlbikgPT5cbiAgICAgIGRhdGFQYXRoICE9IG51bGxcbiAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pXG4gICAgICAgIDogbnVsbFxuXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKCFpc05lc3RlZChjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBkYXRhIG9uIHVubmVzdGVkIGNvbXBvbmVudHMuXG4gICAgICAgICAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhLFxuICAgICAgICAgICAgcHJvY2Vzc0JlZm9yZSxcbiAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50RGF0YVBhdGggPSBnZXREYXRhUGF0aChkYXRhUGF0aCwgbmFtZSlcblxuICAgICAgICAgIGNvbnN0IHByb2Nlc3NJdGVtID0gKGl0ZW0sIGluZGV4ID0gbnVsbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbURhdGFQYXRoID1cbiAgICAgICAgICAgICAgaW5kZXggIT09IG51bGxcbiAgICAgICAgICAgICAgICA/IGdldERhdGFQYXRoKGNvbXBvbmVudERhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICAgICAgICA6IGNvbXBvbmVudERhdGFQYXRoXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KG9wdGlvbnMuY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIHNjaGVtYTogY29tcG9uZW50U2NoZW1hLFxuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBkYXRhUGF0aDogY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY29uc3QgZ2V0Rm9ybXMgPSAoXG4gICAgICAgICAgICAgIGdldFR5cGVPcHRpb25zKGNvbXBvbmVudFNjaGVtYSk/LmdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyB8fFxuICAgICAgICAgICAgICBnZXRGb3JtU2NoZW1hc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgZm9ybXMgPSBnZXRGb3Jtcyhjb21wb25lbnRTY2hlbWEsIGNvbnRleHQpXG4gICAgICAgICAgICBjb25zdCBmb3JtID0gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZm9ybXMsIGl0ZW0pXG4gICAgICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgICBjb25zdCBwcm9jZXNzZWRJdGVtID0gcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgICAgICAgID8gY2xvbmVJdGVtKGNvbXBvbmVudFNjaGVtYSwgaXRlbSwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgICAgICAgICAgICAgIGZvcm0sXG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBpdGVtRGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEl0ZW1zIHdpdGhvdXQgZm9ybXMgc3RpbGwgZ2V0IGZ1bGx5IChidXQgc2hhbGxvd2x5KSBjbG9uZWQuXG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgb3V0IG9mIHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkIC8gdXNlZCBhdCBhbGw/XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHByb2Nlc3NCZWZvcmU/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YSA/IHByb2Nlc3NlZERhdGFbbmFtZV0gOiBkYXRhW25hbWVdXG4gICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgaGFzRm9ybVNjaGVtYShjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gbmVzdGVkIGZvcm0gaXRlbXMuXG4gICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgLy8gT3B0aW1pemF0aW9uOiBObyBuZWVkIHRvIGNvbGxlY3QgdmFsdWVzIGlmIHdlJ3JlIG5vdCBjbG9uaW5nIVxuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlLmZvckVhY2gocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NJdGVtKHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb2Nlc3NlZERhdGEpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJvY2Vzc0FmdGVyPy4oXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGNvbXBvbmVudERhdGFQYXRoLFxuICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKVxuICBmb3IgKGNvbnN0IHRhYiBvZiBnZXRUYWJTY2hlbWFzKHNjaGVtYSkpIHtcbiAgICBwcm9jZXNzQ29tcG9uZW50cyh0YWIuY29tcG9uZW50cylcbiAgfVxuICBmb3IgKGNvbnN0IHBhbmVsIG9mIGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpKSB7XG4gICAgcHJvY2Vzc0NvbXBvbmVudHMocGFuZWwuY29tcG9uZW50cylcbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzZWREYXRhIHx8IGRhdGFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWVkU2NoZW1hcyhzY2hlbWFzLCBkZWZhdWx0cykge1xuICBjb25zdCB0b09iamVjdCA9IChhcnJheSwgdG9TY2hlbWEpID0+IHtcbiAgICByZXR1cm4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgPyBhcnJheS5yZWR1Y2UoKG9iamVjdCwgdmFsdWUpID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0b1NjaGVtYSh2YWx1ZSlcbiAgICAgICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgICAgICBvYmplY3Rbc2NoZW1hLm5hbWVdID1cbiAgICAgICAgICAgICAgc2NoZW1hICYmIGRlZmF1bHRzXG4gICAgICAgICAgICAgICAgPyB7IC4uLmRlZmF1bHRzLCAuLi5zY2hlbWEgfVxuICAgICAgICAgICAgICAgIDogc2NoZW1hXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvYmplY3RcbiAgICAgICAgfSwge30pXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIHJldHVybiBpc0FycmF5KHNjaGVtYXMpXG4gICAgPyB0b09iamVjdChzY2hlbWFzLCB2YWx1ZSA9PlxuICAgICAgICBpc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIG5hbWU6IGNhbWVsaXplKHZhbHVlLCBmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgIClcbiAgICA6IGlzT2JqZWN0KHNjaGVtYXMpXG4gICAgICA/IHRvT2JqZWN0KFxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICAgICAgaXNPYmplY3QodmFsdWUpXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgIC4uLnZhbHVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IGlzU3RyaW5nKHZhbHVlKVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdmFsdWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgKVxuICAgICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdXR0b25TY2hlbWFzKGJ1dHRvbnMpIHtcbiAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyhcbiAgICBidXR0b25zLFxuICAgIHsgdHlwZTogJ2J1dHRvbicgfSAvLyBEZWZhdWx0c1xuICApXG59XG5cbmZ1bmN0aW9uIGdldFR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBpc09iamVjdChzY2hlbWFPclR5cGUpID8gc2NoZW1hT3JUeXBlLnR5cGUgOiBzY2hlbWFPclR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0VHlwZUNvbXBvbmVudChnZXRUeXBlKHNjaGVtYU9yVHlwZSksIHRydWUpID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiAoXG4gICAgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKT8uZ2V0U291cmNlVHlwZT8uKGdldFR5cGUoc2NoZW1hT3JUeXBlKSkgPz9cbiAgICBudWxsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsRW50cnkoc2NoZW1hLCBkYXRhUGF0aCA9IG51bGwsIHRhYkNvbXBvbmVudCA9IG51bGwpIHtcbiAgcmV0dXJuIHNjaGVtYVxuICAgID8ge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIG5hbWUsIGFwcGVuZCBpdCB0byB0aGUgZGF0YVBhdGguXG4gICAgICAgIC8vIFRoaXMgaXMgdXNlZCBlLmcuIGZvciAkZmlsdGVycyBwYW5lbHMuXG4gICAgICAgIGRhdGFQYXRoOlxuICAgICAgICAgIGRhdGFQYXRoICE9IG51bGwgJiYgc2NoZW1hLm5hbWVcbiAgICAgICAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNjaGVtYS5uYW1lKVxuICAgICAgICAgICAgOiBkYXRhUGF0aCxcbiAgICAgICAgdGFiQ29tcG9uZW50XG4gICAgICB9XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbEVudHJpZXMoXG4gIHBhbmVsU2NoZW1hcyxcbiAgZGF0YVBhdGgsXG4gIHRhYkNvbXBvbmVudCA9IG51bGwsXG4gIHBhbmVsRW50cmllcyA9IFtdXG4pIHtcbiAgaWYgKHBhbmVsU2NoZW1hcykge1xuICAgIGZvciAoY29uc3QgW2tleSwgc2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhwYW5lbFNjaGVtYXMpKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IGdldFBhbmVsRW50cnkoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGtleSksXG4gICAgICAgIHRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIHBhbmVsRW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxFbnRyaWVzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJTY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hPy50YWJzID8gT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicykgOiBbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hPy5wYW5lbHMgPyBPYmplY3QudmFsdWVzKHNjaGVtYS5wYW5lbHMpIDogW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbFBhbmVsRW50cmllcyhcbiAgYXBpLFxuICBzY2hlbWEsXG4gIGRhdGFQYXRoLFxuICBjb21wb25lbnQgPSBudWxsLFxuICB0YWJDb21wb25lbnQgPSBudWxsXG4pIHtcbiAgY29uc3QgcGFuZWxTY2hlbWEgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5nZXRQYW5lbFNjaGVtYT8uKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgZGF0YVBhdGgsXG4gICAgY29tcG9uZW50XG4gIClcbiAgY29uc3QgcGFuZWxFbnRyaWVzID0gcGFuZWxTY2hlbWFcbiAgICA/IFtnZXRQYW5lbEVudHJ5KHBhbmVsU2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KV1cbiAgICA6IFtdXG4gIC8vIEFsbG93IGVhY2ggY29tcG9uZW50IHRvIHByb3ZpZGUgaXRzIG93biBzZXQgb2YgcGFuZWxzLCBpblxuICAvLyBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBvbmUgKGUuZy4gZ2V0RmlsdGVyc1BhbmVsKCksICRmaWx0ZXJzKTpcbiAgZ2V0UGFuZWxFbnRyaWVzKHNjaGVtYT8ucGFuZWxzLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50LCBwYW5lbEVudHJpZXMpXG4gIHJldHVybiBwYW5lbEVudHJpZXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnb2JqZWN0J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMaXN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnbGlzdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pIHtcbiAgY29uc3QgaWQgPSBpdGVtW3NvdXJjZVNjaGVtYS5pZEtleSB8fCAnaWQnXVxuICByZXR1cm4gaWQgIT0gbnVsbCA/IFN0cmluZyhpZCkgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1VaWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIC8vIFRyeSB0byB1c2UgdGhlIGl0ZW0gaWQgYXMgdGhlIHVpZCwgZmFsbGluZyBiYWNrIG9uIGF1dG8tZ2VuZXJhdGVkIGlkcywgYnV0XG4gIC8vIGVpdGhlciB3YXksIHBhc3MgdGhyb3VnaCBgZ2V0VWlkKClgIHNvIHRoYXQgdGhlIGlkcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICAvLyBpdGVtIHRocm91Z2ggYSB3ZWFrIG1hcCwgYXMgdGhlIGlkcyBjYW4gYmUgZmlsdGVyZWQgb3V0IGluIGBwcm9jZXNzRGF0YSgpYFxuICAvLyB3aGlsZSB0aGUgY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgdWlkcyBhcyBrZXkgYXJlIHN0aWxsIHZpc2libGUuXG4gIHJldHVybiBnZXRVaWQoaXRlbSwgaXRlbSA9PiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSlcbn1cbiIsImltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgcGlja0J5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Jlc291cmNlKHNjaGVtYSkge1xuICByZXR1cm4gISFnZXRSZXNvdXJjZShzY2hlbWEucmVzb3VyY2UpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNvdXJjZShyZXNvdXJjZSwgZGVmYXVsdHMgPSB7fSkge1xuICBjb25zdCB7IHBhcmVudCwgLi4uZGVmcyB9ID0gZGVmYXVsdHNcbiAgcmVzb3VyY2UgPSBpc09iamVjdChyZXNvdXJjZSlcbiAgICA/IHsgLi4uZGVmcywgLi4ucmVzb3VyY2UgfVxuICAgIDogaXNTdHJpbmcocmVzb3VyY2UpXG4gICAgICA/IHsgLi4uZGVmcywgcGF0aDogcmVzb3VyY2UgfVxuICAgICAgOiBudWxsXG4gIC8vIE9ubHkgc2V0IHBhcmVudCBpZiBwYXRoIGRvZXNuJ3Qgc3RhcnQgd2l0aCAnLycsIHNvIHJlbGF0aXZlIFVSTHMgYXJlXG4gIC8vIGRlYWx0IHdpdGggY29ycmVjdGx5LlxuICBpZiAoXG4gICAgcmVzb3VyY2UgJiZcbiAgICBwYXJlbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgIHJlc291cmNlLnBhcmVudCA9PT0gdW5kZWZpbmVkICYmXG4gICAgIXJlc291cmNlLnBhdGg/LnN0YXJ0c1dpdGgoJy8nKVxuICApIHtcbiAgICByZXNvdXJjZS5wYXJlbnQgPSBwYXJlbnRcbiAgICBpZiAoIXJlc291cmNlLnBhdGgpIHtcbiAgICAgIHJlc291cmNlLnBhdGggPSAnLidcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc291cmNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW1iZXJSZXNvdXJjZShpZCwgcmVzb3VyY2UpIHtcbiAgcmV0dXJuIGlkICE9IG51bGwgJiYgcmVzb3VyY2U/LnR5cGUgPT09ICdjb2xsZWN0aW9uJ1xuICAgID8ge1xuICAgICAgICB0eXBlOiAnbWVtYmVyJyxcbiAgICAgICAgLi4ucGlja0J5KFxuICAgICAgICAgIHJlc291cmNlLFxuICAgICAgICAgICh2YWx1ZSwga2V5KSA9PiBbJ21ldGhvZCcsICdwYXRoJywgJ3BhcmVudCddLmluY2x1ZGVzKGtleSlcbiAgICAgICAgKSxcbiAgICAgICAgaWQ6IGAke2lkfWBcbiAgICAgIH1cbiAgICA6IG51bGxcbn1cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNGdW5jdGlvbixcbiAgZXF1YWxzLFxuICBsYWJlbGl6ZSxcbiAgaHlwaGVuYXRlLFxuICBmb3JtYXRcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBhcHBTdGF0ZSBmcm9tICcuLi9hcHBTdGF0ZS5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBFbWl0dGVyTWl4aW4gZnJvbSAnLi9FbWl0dGVyTWl4aW4uanMnXG5pbXBvcnQge1xuICBmbGF0dGVuVmlld3MsXG4gIGdldFNjaGVtYVZhbHVlLFxuICBzaG91bGRSZW5kZXJTY2hlbWFcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBjb21wdXRlZCwgcmVhY3RpdmUgfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0VtaXR0ZXJNaXhpbl0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJ2FwaScsXG4gICAgJyR2ZXJicycsXG4gICAgJyR2aWV3cycsXG4gICAgJyRpc1BvcHVsYXRlZCcsXG4gICAgJyRwYXJlbnRDb21wb25lbnQnLFxuICAgICckc2NoZW1hQ29tcG9uZW50JyxcbiAgICAnJHJvdXRlQ29tcG9uZW50JyxcbiAgICAnJGRhdGFDb21wb25lbnQnLFxuICAgICckc291cmNlQ29tcG9uZW50JyxcbiAgICAnJHJlc291cmNlQ29tcG9uZW50JyxcbiAgICAnJGRpYWxvZ0NvbXBvbmVudCcsXG4gICAgJyRwYW5lbENvbXBvbmVudCcsXG4gICAgJyR0YWJDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICBjb25zdCBzZWxmID0gKCkgPT4gdGhpc1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVzRGF0YVxuICAgICAgPyB7XG4gICAgICAgICAgJHBhcmVudENvbXBvbmVudDogc2VsZixcbiAgICAgICAgICAkZGF0YUNvbXBvbmVudDogc2VsZlxuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICAkcGFyZW50Q29tcG9uZW50OiBzZWxmXG4gICAgICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhcHBTdGF0ZSxcbiAgICAgIGlzTW91bnRlZDogZmFsc2UsXG4gICAgICBvdmVycmlkZXM6IG51bGwgLy8gU2VlIGFjY2Vzc29yLmpzXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgLy8gTk9URTogVGhpcyBpcyBvdmVycmlkZGVuIGluIFJlc291cmNlTWl4aW4sIHVzZWQgYnkgbGlzdHMuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YT8uc2NoZW1hXG4gICAgfSxcblxuICAgIHVzZXIoKSB7XG4gICAgICByZXR1cm4gYXBwU3RhdGUudXNlclxuICAgIH0sXG5cbiAgICAvLyAkdmVyYnMsICR2ZXJicyBhbmQgJGlzUG9wdWxhdGVkIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmVcbiAgICAvLyByZWFjdGl2ZW5lc3MgYWNyb3NzIHByb3ZpZGUvaW5qZWN0LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgdmVyYnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdmVyYnMoKVxuICAgIH0sXG5cbiAgICB2aWV3cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2aWV3cygpXG4gICAgfSxcblxuICAgIGZsYXR0ZW5lZFZpZXdzKCkge1xuICAgICAgcmV0dXJuIGZsYXR0ZW5WaWV3cyh0aGlzLnZpZXdzKVxuICAgIH0sXG5cbiAgICBpc1BvcHVsYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRpc1BvcHVsYXRlZCgpXG4gICAgfSxcblxuICAgIGxvY2FsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwaS5sb2NhbGVcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IGZhbHNlIH0pXG4gICAgfSxcblxuICAgIHJvb3RDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm9vdC4kcmVmcy5yb290XG4gICAgfSxcblxuICAgIC8vIFVzZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGFzIGxpbmtzIHRvIGluamVjdHMsIHNvIERpdG9TY2hlbWEgY2FuXG4gICAgLy8gb3ZlcnJpZGUgdGhlIHByb3BlcnR5IGFuZCByZXR1cm4gYHRoaXNgIGluc3RlYWQgb2YgdGhlIHBhcmVudC5cbiAgICBwYXJlbnRDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50Q29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHNjaGVtYUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgZm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzRm9ybSA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgdmlld0NvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzVmlldyA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzLCBpbmNsdWRpbmdcbiAgICAvLyB0aGlzIGN1cnJlbnQgY29tcG9uZW50LCB0aGF0IGlzIGxpbmtlZCB0byBhIHJlc291cmNlIChhbmQgdGh1cyBsb2FkcyBpdHNcbiAgICAvLyBvd24gZGF0YSBhbmQgZG9lc24ndCBob2xkIG5lc3RlZCBkYXRhKS5cbiAgICBkYXRhQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhID8gdGhpcyA6IHRoaXMuJGRhdGFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc291cmNlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kZGlhbG9nQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFuZWxDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdGFiQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50Py5wYXJlbnRDb21wb25lbnQuc2NoZW1hQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudFJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVDb21wb25lbnQ/LnBhcmVudENvbXBvbmVudC5yb3V0ZUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYXJlbnRGb3JtQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbXBvbmVudD8ucGFyZW50Q29tcG9uZW50LmZvcm1Db21wb25lbnRcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZGF0YSBvZiB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzXG4gICAgLy8gdGhhdCBsb2FkcyBpdHMgb3duIGRhdGEgZnJvbSBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZS5cbiAgICByb290RGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFDb21wb25lbnQ/LmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLmlzTW91bnRlZCA9IHRydWVcbiAgfSxcblxuICBiZWZvcmVDcmVhdGUoKSB7XG4gICAgY29uc3QgdWlkID0gbmV4dFVpZCsrXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICckdWlkJywgeyBnZXQ6ICgpID0+IHVpZCB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBsYWJlbGl6ZSxcblxuICAgIC8vIFRoZSBzdGF0ZSBvZiBjb21wb25lbnRzIGlzIG9ubHkgYXZhaWxhYmxlIGR1cmluZyB0aGUgbGlmZS1jeWNsZSBvZiBhXG4gICAgLy8gY29tcG9uZW50LiBTb21lIGluZm9ybWF0aW9uIHdlIG5lZWQgYXZhaWxhYmxlIGxvbmdlciB0aGFuIHRoYXQsIGUuZy5cbiAgICAvLyBgcXVlcnlgICYgYHRvdGFsYCBvbiBUeXBlTGlzdCwgc28gdGhhdCB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlcyBiYWNrIGZyb21cbiAgICAvLyBlZGl0aW5nIGFuIGl0ZW0gaW4gdGhlIGxpc3QsIHRoZSBzdGF0ZSBvZiB0aGUgbGlzdCBpcyBzdGlsbCB0aGUgc2FtZS5cbiAgICAvLyBXZSBjYW4ndCBzdG9yZSB0aGlzIGluIGBkYXRhYCwgYXMgdGhpcyBpcyBhbHJlYWR5IHRoZSBwdXJlIGRhdGEgZnJvbSB0aGVcbiAgICAvLyBBUEkgc2VydmVyLiBUaGF0J3Mgd2hhdCB0aGUgYHN0b3JlYCBpcyBmb3I6IE1lbW9yeSB0aGF0J3MgYXZhaWxhYmxlIGFzXG4gICAgLy8gbG9uZyBhcyB0aGUgY3VycmVudCBlZGl0aW5nIHBhdGggaXMgc3RpbGwgdmFsaWQuIEZvciB0eXBlIGNvbXBvbmVudHMsXG4gICAgLy8gdGhpcyBtZW1vcnkgaXMgcHJvdmlkZWQgYnkgdGhlIHBhcmVudCwgc2VlIFJvdXRlTWl4aW4gYW5kIERpdG9QYW5lLlxuICAgIGdldFN0b3JlKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZShrZXksIHZhbHVlKSB7XG4gICAgICB0aGlzLnN0b3JlW2tleV0gPSB2YWx1ZVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIHJlbW92ZVN0b3JlKGtleSkge1xuICAgICAgZGVsZXRlIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBnZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlLiRrZXlzQnlJbmRleD8uW2luZGV4XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgsIGtleSkge1xuICAgICAgdGhpcy5zdG9yZS4ka2V5c0J5SW5kZXggPz89IHt9XG4gICAgICB0aGlzLnN0b3JlLiRrZXlzQnlJbmRleFtpbmRleF0gPSBrZXlcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRTdG9yZShrZXksIGluZGV4KSB7XG4gICAgICBsZXQgc3RvcmUgPSB0aGlzLmdldFN0b3JlKGtleSlcbiAgICAgIGlmICghc3RvcmUgJiYgaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAvLyBXaGVuIHN0b3JpbmcsIHRlbXBvcmFyeSBpZHMgY2hhbmdlIHRvIHBlcm1hbmVudCBvbmVzIGFuZCB0aHVzIHRoZSBrZXlcbiAgICAgICAgLy8gY2FuIGNoYW5nZS4gVG8gc3RpbGwgZmluZCB0aGUgc3RvcmUsIHdlIHJlZmVyZW5jZSBieSBpbmRleCBhcyB3ZWxsLFxuICAgICAgICAvLyB0byBiZSBhYmxlIHRvIGZpbmQgdGhlIHN0b3JlIGFnYWluIGFmdGVyIHRoZSBpdGVtIHdhcyBzYXZlZC5cbiAgICAgICAgY29uc3Qgb2xkS2V5ID0gdGhpcy5nZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgpXG4gICAgICAgIHN0b3JlID0gdGhpcy5nZXRTdG9yZShvbGRLZXkpXG4gICAgICAgIGlmIChzdG9yZSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RvcmUoa2V5LCBzdG9yZSlcbiAgICAgICAgICB0aGlzLnJlbW92ZVN0b3JlKG9sZEtleSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFzdG9yZSkge1xuICAgICAgICBzdG9yZSA9IHRoaXMuc2V0U3RvcmUoa2V5LCByZWFjdGl2ZSh7fSkpXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgsIGtleSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0b3JlXG4gICAgfSxcblxuICAgIHJlbW92ZUNoaWxkU3RvcmUoa2V5LCBpbmRleCkge1xuICAgICAgLy8gR0V0IHRoZSBjaGlsZC1zdG9yZSBmaXJzdCwgc28gdGhhdCBpbmRpY2VzIGNhbiBiZSB0cmFuc2ZlcnJlZCBvdmVyXG4gICAgICAvLyB0ZW1wb3JhcnkgaWQgY2hhbmdlcyBkdXJpbmcgcGVyc2lzdGVuY2UuXG4gICAgICB0aGlzLmdldENoaWxkU3RvcmUoa2V5LCBpbmRleClcbiAgICAgIHRoaXMucmVtb3ZlU3RvcmUoa2V5KVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFWYWx1ZShcbiAgICAgIGtleU9yRGF0YVBhdGgsXG4gICAgICB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIGRlZmF1bHQ6IGRlZixcbiAgICAgICAgc2NoZW1hID0gdGhpcy5zY2hlbWEsXG4gICAgICAgIGNvbnRleHQgPSB0aGlzLmNvbnRleHQsXG4gICAgICAgIGNhbGxiYWNrID0gdHJ1ZVxuICAgICAgfSA9IHt9XG4gICAgKSB7XG4gICAgICByZXR1cm4gZ2V0U2NoZW1hVmFsdWUoa2V5T3JEYXRhUGF0aCwge1xuICAgICAgICB0eXBlLFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgICBkZWZhdWx0OiBpc0Z1bmN0aW9uKGRlZikgPyAoKSA9PiBkZWYuY2FsbCh0aGlzKSA6IGRlZlxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ2V0TGFiZWwoc2NoZW1hLCBuYW1lKSB7XG4gICAgICByZXR1cm4gc2NoZW1hXG4gICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgnbGFiZWwnLCB7IHR5cGU6IFN0cmluZywgc2NoZW1hIH0pIHx8XG4gICAgICAgICAgbGFiZWxpemUobmFtZSB8fCBzY2hlbWEubmFtZSlcbiAgICAgICAgOiBsYWJlbGl6ZShuYW1lKSB8fCAnJ1xuICAgIH0sXG5cbiAgICBnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsYXNzOiBgZGl0by1idXR0b24tJHt2ZXJifWAsXG4gICAgICAgIHRpdGxlOiBsYWJlbGl6ZSh2ZXJiKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgKkxpbmsoKSB0byAqUm91dGUoKS5cbiAgICBnZXRRdWVyeUxpbmsocXVlcnkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICAvLyBQcmVzZXJ2ZSBoYXNoIGZvciB0YWJzOlxuICAgICAgICBoYXNoOiB0aGlzLiRyb3V0ZS5oYXNoXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEgPSBudWxsKSB7XG4gICAgICByZXR1cm4gc2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBzaG91bGRTaG93U2NoZW1hKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNjaGVtYVZhbHVlKCd2aXNpYmxlJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNob3VsZERpc2FibGVTY2hlbWEoc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2Rpc2FibGVkJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgc2NoZW1hXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpIHtcbiAgICAgIHJlc291cmNlID0gZ2V0UmVzb3VyY2UocmVzb3VyY2UpXG4gICAgICAvLyBSZXNvdXJjZXMgd2l0aG91dCBhIHBhcmVudCBpbmhlcml0IHRoZSBvbmUgZnJvbSBgZGF0YUNvbXBvbmVudGBcbiAgICAgIC8vIGF1dG9tYXRpY2FsbHkuXG4gICAgICBpZiAocmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzb3VyY2UucGFyZW50ID0gdGhpcy5kYXRhQ29tcG9uZW50Py5yZXNvdXJjZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXBpLnJlc291cmNlcy5hbnkoZ2V0UmVzb3VyY2UocmVzb3VyY2UpKVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVVybChyZXNvdXJjZSkge1xuICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpXG4gICAgICByZXR1cm4gdXJsID8gdGhpcy5hcGkuZ2V0QXBpVXJsKHsgdXJsLCBxdWVyeTogcmVzb3VyY2UucXVlcnkgfSkgOiBudWxsXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHJlc291cmNlLFxuICAgICAgcXVlcnksXG4gICAgICBkYXRhLFxuICAgICAgc2lnbmFsLFxuICAgICAgaW50ZXJuYWxcbiAgICB9KSB7XG4gICAgICB1cmwgfHw9IHRoaXMuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gICAgICBtZXRob2QgfHw9IHJlc291cmNlPy5tZXRob2RcbiAgICAgIGNvbnN0IGNoZWNrVXNlciA9ICFpbnRlcm5hbCAmJiB0aGlzLmFwaS5pc0FwaVVybCh1cmwpXG4gICAgICBpZiAoY2hlY2tVc2VyKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm9vdENvbXBvbmVudC5lbnN1cmVVc2VyKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5hcGkucmVxdWVzdCh7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgdXJsLFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgc2lnbmFsXG4gICAgICB9KVxuICAgICAgLy8gRGV0ZWN0IGNoYW5nZSBvZiB0aGUgb3duIHVzZXIsIGFuZCBmZXRjaCBpdCBhZ2FpbiBpZiBpdCB3YXMgY2hhbmdlZC5cbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tVc2VyICYmXG4gICAgICAgIG1ldGhvZCA9PT0gJ3BhdGNoJyAmJlxuICAgICAgICBlcXVhbHMocmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlKHRoaXMudXNlci5pZCwgdGhpcy5hcGkudXNlcnMpKVxuICAgICAgKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm9vdENvbXBvbmVudC5mZXRjaFVzZXIoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfSxcblxuICAgIHNob3dEaWFsb2coeyBjb21wb25lbnRzLCBidXR0b25zLCBkYXRhLCBzZXR0aW5ncyB9KSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290Q29tcG9uZW50LnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICBidXR0b25zLFxuICAgICAgICBkYXRhLFxuICAgICAgICBzZXR0aW5nc1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgcmVxdWVzdCh7IGNhY2hlLCAuLi5vcHRpb25zIH0pIHtcbiAgICAgIC8vIEFsbG93IGNhY2hpbmcgb2YgbG9hZGVkIGRhdGEgb24gdHdvIGxldmVsczpcbiAgICAgIC8vIC0gJ2dsb2JhbCc6IGNhY2hlIGdsb2JhbGx5LCBmb3IgdGhlIGVudGlyZSBhZG1pbiBzZXNzaW9uXG4gICAgICAvLyAtICdsb2NhbCc6IGNhY2hlIGxvY2FsbHkgd2l0aGluIHRoZSBjbG9zZXN0IHJvdXRlIGNvbXBvbmVudCB0aGF0IGlzXG4gICAgICAvLyAgICBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZSBhbmQgbG9hZHMgaXRzIG93biBkYXRhLlxuICAgICAgY29uc3QgY2FjaGVQYXJlbnQgPSAoXG4gICAgICAgIGNhY2hlICYmXG4gICAgICAgIHtcbiAgICAgICAgICBnbG9iYWw6IHRoaXMuYXBwU3RhdGUsXG4gICAgICAgICAgbG9jYWw6IHRoaXMuZGF0YUNvbXBvbmVudFxuICAgICAgICB9W2NhY2hlXVxuICAgICAgKVxuICAgICAgY29uc3QgbG9hZENhY2hlID0gY2FjaGVQYXJlbnQ/LmxvYWRDYWNoZVxuICAgICAgLy8gQnVpbGQgYSBjYWNoZSBrZXkgZnJvbSB0aGUgY29uZmlnOlxuICAgICAgY29uc3QgY2FjaGVLZXkgPSAoXG4gICAgICAgIGxvYWRDYWNoZSAmJlxuICAgICAgICBgJHtcbiAgICAgICAgICBvcHRpb25zLm1ldGhvZCB8fCAnZ2V0J1xuICAgICAgICB9ICR7XG4gICAgICAgICAgb3B0aW9ucy51cmxcbiAgICAgICAgfSAke1xuICAgICAgICAgIC8vIFRPRE86IGByZXF1ZXN0LnBhcmFtc2Agd2FzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGBxdWVyeWAgb25cbiAgICAgICAgICAvLyAyMDIyLTExLTAxLCByZW1vdmUgb25jZSBub3QgaW4gdXNlIGFueXdoZXJlIGFueSBtb3JlLlxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucXVlcnkgfHwgb3B0aW9ucy5wYXJhbXMgfHwgJycpXG4gICAgICAgIH0gJHtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcHRpb25zLmRhdGEgfHwgJycpXG4gICAgICAgIH1gXG4gICAgICApXG4gICAgICBpZiAobG9hZENhY2hlICYmIChjYWNoZUtleSBpbiBsb2FkQ2FjaGUpKSB7XG4gICAgICAgIHJldHVybiBsb2FkQ2FjaGVbY2FjaGVLZXldXG4gICAgICB9XG4gICAgICAvLyBOT1RFOiBObyBhd2FpdCBoZXJlLCByZXMgaXMgYSBwcm9taXNlIHRoYXQgd2UgY2FuIGVhc2lseSBjYWNoZS5cbiAgICAgIC8vIFRoYXQncyBmaW5lIGJlY2F1c2UgcHJvbWlzZXMgY2FuIGJlIHJlc29sdmVkIG92ZXIgYW5kIG92ZXIgYWdhaW4uXG4gICAgICBjb25zdCByZXMgPSB0aGlzLnNlbmRSZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEpXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgLy8gQ29udmVydCBheGlvcyBlcnJvcnMgdG8gbm9ybWFsIGVycm9yc1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBlcnJvci5yZXNwb25zZT8uZGF0YVxuICAgICAgICAgIHRocm93IGRhdGFcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoZGF0YS5tZXNzYWdlKSwgZGF0YSlcbiAgICAgICAgICAgIDogZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIGlmIChsb2FkQ2FjaGUpIHtcbiAgICAgICAgbG9hZENhY2hlW2NhY2hlS2V5XSA9IHJlc1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0sXG5cbiAgICBmb3JtYXQodmFsdWUsIHtcbiAgICAgIGxvY2FsZSA9IHRoaXMuYXBpLmxvY2FsZSxcbiAgICAgIGRlZmF1bHRzID0gdGhpcy5hcGkuZm9ybWF0cyxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBmb3JtYXQodmFsdWUsIHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGUobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZXIucHVzaChsb2NhdGlvbilcbiAgICB9LFxuXG4gICAgZG93bmxvYWQob3B0aW9ucyA9IHt9KSB7XG4gICAgICBpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcbiAgICAgICAgb3B0aW9ucyA9IHsgdXJsOiBvcHRpb25zIH1cbiAgICAgIH1cbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQ5OTE3MDY2LzExNjM3MDhcbiAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcbiAgICAgIGEuaHJlZiA9IG9wdGlvbnMudXJsPy5zdGFydHNXaXRoKCdibG9iOicpXG4gICAgICAgID8gb3B0aW9ucy51cmxcbiAgICAgICAgOiB0aGlzLmFwaS5nZXRBcGlVcmwob3B0aW9ucylcbiAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLmZpbGVuYW1lID8/IG51bGxcbiAgICAgIGNvbnN0IHsgYm9keSB9ID0gZG9jdW1lbnRcbiAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSlcbiAgICAgIGEuY2xpY2soKVxuICAgICAgYm9keS5yZW1vdmVDaGlsZChhKVxuICAgIH0sXG5cbiAgICBub3RpZnkob3B0aW9ucykge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgIH0sXG5cbiAgICBjbG9zZU5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnQuY2xvc2VOb3RpZmljYXRpb25zKClcbiAgICB9LFxuXG4gICAgc2V0dXBTY2hlbWFGaWVsZHMoKSB7XG4gICAgICB0aGlzLnNldHVwTWV0aG9kcygpXG4gICAgICB0aGlzLnNldHVwQ29tcHV0ZWQoKVxuICAgICAgdGhpcy5zZXR1cEV2ZW50cygpXG4gICAgfSxcblxuICAgIHNldHVwTWV0aG9kcygpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLm1ldGhvZHMgfHwge30pKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICAgIHRoaXNba2V5XSA9IHZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBtZXRob2QgZGVmaW5pdGlvbjogJHtrZXl9OiAke3ZhbHVlfWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBDb21wdXRlZCgpIHtcbiAgICAgIGNvbnN0IGdldENvbXB1dGVkQWNjZXNzb3IgPSAoeyBnZXQsIHNldCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGdldHRlciA9IGNvbXB1dGVkKCgpID0+IGdldC5jYWxsKHRoaXMpKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGdldDogKCkgPT4gZ2V0dGVyLnZhbHVlLFxuICAgICAgICAgIHNldDogc2V0ID8gdmFsdWUgPT4gc2V0LmNhbGwodGhpcywgdmFsdWUpIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBba2V5LCBpdGVtXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5jb21wdXRlZCB8fCB7fSkpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzb3IgPSBpc0Z1bmN0aW9uKGl0ZW0pXG4gICAgICAgICAgPyBnZXRDb21wdXRlZEFjY2Vzc29yKHsgZ2V0OiBpdGVtIH0pXG4gICAgICAgICAgOiBpc09iamVjdChpdGVtKSAmJiBpc0Z1bmN0aW9uKGl0ZW0uZ2V0KVxuICAgICAgICAgICAgPyBnZXRDb21wdXRlZEFjY2Vzc29yKGl0ZW0pXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgaWYgKGFjY2Vzc29yKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwgYWNjZXNzb3IpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBJbnZhbGlkIGNvbXB1dGVkIHByb3BlcnR5IGRlZmluaXRpb246ICR7a2V5fTogJHtpdGVtfWBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBFdmVudHMoKSB7XG4gICAgICBjb25zdCB7IHdhdGNoLCBldmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAod2F0Y2gpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBpc0Z1bmN0aW9uKHdhdGNoKSA/IHdhdGNoLmNhbGwodGhpcykgOiB3YXRjaFxuICAgICAgICBpZiAoaXNPYmplY3QoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgLy8gSW5zdGFsbCB0aGUgd2F0Y2ggaGFuZGxlcnMgaW4gdGhlIG5leHQgdGljaywgc28gYWxsIGNvbXBvbmVudHMgYXJlXG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZWQgYW5kIHdlIGNhbiBjaGVjayBhZ2FpbnN0IHRoZWlyIG5hbWVzLlxuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGhhbmRsZXJzKSkge1xuICAgICAgICAgICAgICAvLyBFeHBhbmQgcHJvcGVydHkgbmFtZXMgdG8gJ2RhdGEucHJvcGVydHknOlxuICAgICAgICAgICAgICBjb25zdCBleHByID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlOYW1lKGtleSlcbiAgICAgICAgICAgICAgICA/IGBkYXRhLiR7a2V5fWBcbiAgICAgICAgICAgICAgICA6IGtleVxuICAgICAgICAgICAgICB0aGlzLiR3YXRjaChleHByLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFkZEV2ZW50ID0gKGtleSwgZXZlbnQsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgIHRoaXMub24oaHlwaGVuYXRlKGV2ZW50KSwgY2FsbGJhY2spXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBldmVudCBkZWZpbml0aW9uOiAke2tleX06ICR7Y2FsbGJhY2t9YClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50cykpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFsc28gc2NhbiBzY2hlbWEgZm9yIGBvbltBLVpdYC1zdHlsZSBjYWxsYmFja3MgYW5kIGFkZCB0aGVtXG4gICAgICAvLyBUT0RPOiBEZXByZWNhdGUgb25lIGZvcm1hdCBvciB0aGUgb3RoZXIsIGluIGZhdm91ciBvZiBvbmx5IG9uZSB3YXkgb2ZcbiAgICAgIC8vIGRvaW5nIHRoaW5ncy4gRGVjaWRlIHdoaWNoIG9uZSB0byByZW1vdmUuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYSkpIHtcbiAgICAgICAgaWYgKC9eb25bQS1aXS8udGVzdChrZXkpKSB7XG4gICAgICAgICAgYWRkRXZlbnQoa2V5LCBrZXkuc2xpY2UoMiksIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGVtaXRFdmVudChldmVudCwge1xuICAgICAgY29udGV4dCA9IG51bGwsXG4gICAgICBwYXJlbnQgPSBudWxsXG4gICAgfSA9IHt9KSB7XG4gICAgICBjb25zdCBoYXNMaXN0ZW5lcnMgPSB0aGlzLmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGNvbnN0IHBhcmVudEhhc0xpc3RlbmVycyA9IHBhcmVudD8uaGFzTGlzdGVuZXJzKGV2ZW50KVxuICAgICAgaWYgKGhhc0xpc3RlbmVycyB8fCBwYXJlbnRIYXNMaXN0ZW5lcnMpIHtcbiAgICAgICAgLy8gVGhlIGVmZmVjdHMgb2Ygc29tZSBldmVudHMgbmVlZCBzb21lIHRpbWUgdG8gcHJvcGFnYXRlIHRocm91Z2ggVnVlLlxuICAgICAgICAvLyBVc2UgJG5leHRUaWNrKCkgdG8gbWFrZSBzdXJlIG91ciBoYW5kbGVycyBzZWUgdGhlc2UgY2hhbmdlcy5cbiAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGBwcm9jZXNzZWRJdGVtYCBpcyBvbmx5IGNvcnJlY3QgYWZ0ZXIgY29tcG9uZW50cyB0aGF0XG4gICAgICAgIC8vIGFyZSBuZXdseSByZW5kZXJlZCBkdWUgdG8gZGF0YSBjaGFuZ2VzIGhhdmUgcmVnaXN0ZXJlZCB0aGVtc2VsdmVzLlxuICAgICAgICBpZiAoWydsb2FkJywgJ2NoYW5nZSddLmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdldENvbnRleHQgPSAoKSA9PiAoY29udGV4dCA9IERpdG9Db250ZXh0LmdldCh0aGlzLCBjb250ZXh0KSlcbiAgICAgICAgY29uc3QgcmVzID0gaGFzTGlzdGVuZXJzXG4gICAgICAgICAgPyBhd2FpdCB0aGlzLmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAvLyBEb24ndCBidWJibGUgdG8gcGFyZW50IGlmIGhhbmRsZWQgZXZlbnQgcmV0dXJuZWQgYGZhbHNlYFxuICAgICAgICBpZiAocGFyZW50SGFzTGlzdGVuZXJzICYmIHJlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBwYXJlbnQuZW1pdChldmVudCwgZ2V0Q29udGV4dCgpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZW1pdFNjaGVtYUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudC5lbWl0RXZlbnQoZXZlbnQsIHBhcmFtcylcbiAgICB9XG4gIH1cbn1cblxubGV0IG5leHRVaWQgPSAwXG4iLCIvLyBBIG1pbmktcmVwbGljYXRpb24gb2YgdnVlJ3MgaW50ZXJuYWwgYHJlc29sdmVNZXJnZWRPcHRpb25zKClgIGJ1dCBvbmx5XG4vLyBoYW5kbGluZyBvdXIgb3duIGFkZGVkIG9wdGlvbnMgcHJvcGVydGllcyBhbmQgbWVyZ2luZyB0aGVtIGVhcmx5IGluc3RlYWRcbi8vIG9mIGxhemlseS5cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVNZXJnZWRPcHRpb25zKG9wdGlvbnMpIHtcbiAgY29uc3QgeyBtaXhpbnMgfSA9IG9wdGlvbnNcbiAgcmV0dXJuIG1peGlucyB8fCBvcHRpb25zLmV4dGVuZHNcbiAgICA/IG1lcmdlT3B0aW9ucyhcbiAgICAgICAgeyAuLi5vcHRpb25zIH0sXG4gICAgICAgIG9wdGlvbnNcbiAgICAgIClcbiAgICA6IG9wdGlvbnNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlT3B0aW9ucyh0bywgZnJvbSkge1xuICBpZiAoZnJvbS5leHRlbmRzKSB7XG4gICAgbWVyZ2VPcHRpb25zKHRvLCBmcm9tLmV4dGVuZHMpXG4gIH1cbiAgaWYgKGZyb20ubWl4aW5zKSB7XG4gICAgZm9yIChjb25zdCBtaXhpbiBvZiBmcm9tLm1peGlucykge1xuICAgICAgbWVyZ2VPcHRpb25zKHRvLCBtaXhpbilcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBrZXkgb2YgZGl0b09wdGlvbktleXMpIHtcbiAgICBpZiAoa2V5IGluIGZyb20pIHtcbiAgICAgIHRvW2tleV0gPSBmcm9tW2tleV1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRvXG59XG5cbmNvbnN0IGRpdG9PcHRpb25LZXlzID0gW1xuICAnZGVmYXVsdFZhbHVlJyxcbiAgJ2RlZmF1bHROZXN0ZWQnLFxuICAnZGVmYXVsdFZpc2libGUnLFxuICAnZ2VuZXJhdGVMYWJlbCcsXG4gICdleGNsdWRlVmFsdWUnLFxuICAnaWdub3JlTWlzc2luZ1ZhbHVlJyxcbiAgJ29taXRTcGFjaW5nJyxcbiAgJ3Byb2Nlc3NWYWx1ZScsXG4gICdwcm9jZXNzU2NoZW1hJyxcbiAgJ2dldFBhbmVsU2NoZW1hJyxcbiAgJ2dldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZycsXG4gIC8vIFZ1ZSAzIC8gVnVlLXJvdXRlciA0IGZvcmdldHMgdGhlc2UuXG4gIC8vIFRPRE86IENyZWF0ZSBidWctcmVwb3J0P1xuICAnYmVmb3JlUm91dGVVcGRhdGUnLFxuICAnYmVmb3JlUm91dGVMZWF2ZSdcbl1cbiIsImltcG9ydCBEaXRvTWl4aW4gZnJvbSAnLi9taXhpbnMvRGl0b01peGluLmpzJ1xuaW1wb3J0IHsgZ2V0VHlwZUNvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgcmVzb2x2ZU1lcmdlZE9wdGlvbnMgfSBmcm9tICcuL3V0aWxzL29wdGlvbnMuanMnXG5pbXBvcnQgeyBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgY29tcG9uZW50cyA9IHt9XG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RpdG9NaXhpbl0sXG4gIC8vIE1ha2Ugc3VyZSB0aGF0IHJlZ2lzdGVyZWQgY29tcG9uZW50cyBhcmUgcHJlc2VudCBpbiBhbGwgRGl0b0NvbXBvbmVudC5cbiAgY29tcG9uZW50cyxcblxuICBjb21wb25lbnQobmFtZSwgZGVmaW5pdGlvbikge1xuICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChkZWZpbml0aW9uKSkge1xuICAgICAgICBkZWZpbml0aW9uID0gcmVzb2x2ZU1lcmdlZE9wdGlvbnMoe1xuICAgICAgICAgIGV4dGVuZHM6IHRoaXMsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICAuLi5kZWZpbml0aW9uXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBjb21wb25lbnRzW25hbWVdID0gZGVmaW5pdGlvblxuICAgIH1cbiAgICBpZiAoIShuYW1lIGluIGNvbXBvbmVudHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCBcIiR7bmFtZX1cIiBub3QgcmVnaXN0ZXJlZGApXG4gICAgfVxuICAgIHJldHVybiBjb21wb25lbnRzW25hbWVdXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFR5cGVDb21wb25lbnRcbiAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGRlc2NyaWJlRGF0ZShkYXRlKSB7XG4gIHJldHVybiB7XG4gICAgeWVhcjogZGF0ZT8uZ2V0RnVsbFllYXIoKSA/PyAwLFxuICAgIG1vbnRoOiBkYXRlPy5nZXRNb250aCgpID8/IDAsXG4gICAgZGF5OiBkYXRlPy5nZXREYXRlKCkgPz8gMCxcbiAgICBob3VyOiBkYXRlPy5nZXRIb3VycygpID8/IDAsXG4gICAgbWludXRlOiBkYXRlPy5nZXRNaW51dGVzKCkgPz8gMCxcbiAgICBzZWNvbmQ6IGRhdGU/LmdldFNlY29uZHMoKSA/PyAwLFxuICAgIG1pbGxpc2Vjb25kOiBkYXRlPy5nZXRNaWxsaXNlY29uZHMoKSA/PyAwXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsdGVyRGF0ZShkYXRlLCBvdmVycmlkZXMgPSB7fSkge1xuICByZXR1cm4gbmV3IERhdGUoLi4uT2JqZWN0LnZhbHVlcyh7IC4uLmRlc2NyaWJlRGF0ZShkYXRlKSwgLi4ub3ZlcnJpZGVzIH0pKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHN0cmluZywge1xuICBsb2NhbGUgPSAnZW4tVVMnLFxuICBkYXRlID0gdHJ1ZSxcbiAgdGltZSA9IHRydWVcbn0gPSB7fSkge1xuICBjb25zdCB0aW1lRGVmYXVsdCA9IHRpbWUgPyBudWxsIDogMFxuICBsZXQgW1xuICAgIGRheSxcbiAgICBzZXAxLFxuICAgIG1vbnRoLFxuICAgIHNlcDIsXG4gICAgeWVhcixcbiAgICAsXG4gICAgaG91ciA9IHRpbWVEZWZhdWx0LFxuICAgICxcbiAgICBtaW51dGUgPSB0aW1lRGVmYXVsdCxcbiAgICAsXG4gICAgc2Vjb25kID0gdGltZURlZmF1bHQsXG4gICAgLFxuICAgIG1pbGxpc2Vjb25kID0gdGltZURlZmF1bHRcbiAgXSA9IGdldERhdGVQYXJ0cyhzdHJpbmcsIHsgZGF0ZSwgdGltZSB9KVxuICBpZiAoeWVhciAmJiB5ZWFyLmxlbmd0aCA+PSA0KSB7XG4gICAgaWYgKGxvY2FsZSA9PT0gJ2VuLVVTJyAmJiBzZXAxID09PSAnLycgJiYgc2VwMiA9PT0gJy8nKSB7XG4gICAgICAvLyBBbWVyaWNhbiBmb3JtYXQ6IE1NL0REL1lZWVlcbiAgICAgIDtbZGF5LCBtb250aF0gPSBbbW9udGgsIGRheV1cbiAgICB9XG4gICAgbW9udGggPSBnZXRNb250aEluZGV4KG1vbnRoLCB7IGxvY2FsZSB9KVxuICAgIGNvbnN0IGlzVmFsaWRUaW1lUGFydCA9IHBhcnQgPT4gcGFydCA9PT0gbnVsbCB8fCBwYXJ0Lmxlbmd0aCA9PT0gMlxuICAgIGlmIChcbiAgICAgIG1vbnRoICE9PSBudWxsICYmIChcbiAgICAgICAgIXRpbWUgfHwgKFxuICAgICAgICAgIGlzVmFsaWRUaW1lUGFydChob3VyKSAmJlxuICAgICAgICAgIGlzVmFsaWRUaW1lUGFydChtaW51dGUpICYmXG4gICAgICAgICAgaXNWYWxpZFRpbWVQYXJ0KHNlY29uZClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKFxuICAgICAgICAreWVhcixcbiAgICAgICAgK21vbnRoLFxuICAgICAgICArZGF5LFxuICAgICAgICAraG91cixcbiAgICAgICAgK21pbnV0ZSxcbiAgICAgICAgK3NlY29uZCxcbiAgICAgICAgK21pbGxpc2Vjb25kXG4gICAgICApXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlUGFydEF0UG9zaXRpb24oc3RyaW5nLCBwb3NpdGlvbiwge1xuICBsb2NhbGUgPSAnZW4tVVMnLFxuICBkYXRlID0gdHJ1ZSxcbiAgdGltZSA9IHRydWVcbn0gPSB7fSkge1xuICBjb25zdCBwYXJ0cyA9IGdldERhdGVQYXJ0cyhzdHJpbmcsIHsgZGF0ZSwgdGltZSB9KVxuXG4gIGNvbnN0IGdldFBvc2l0aW9uID0gKHBvc2l0aW9uLCBsZW5ndGggPSBwYXJ0cy5sZW5ndGgpID0+IHtcbiAgICBsZXQgcG9zID0gMFxuICAgIGxldCBpbmRleCA9IDBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgIHdoaWxlICgocG9zaXRpb24gPT09IG51bGwgfHwgcG9zIDw9IHBvc2l0aW9uKSAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgICAgcG9zICs9IHBhcnRzW2luZGV4KytdPy5sZW5ndGggPz8gMFxuICAgIH1cbiAgICByZXR1cm4geyBwb3NpdGlvbjogcG9zLCBpbmRleCB9XG4gIH1cblxuICAvLyBUaW1lIHN0YXJ0cyBhdCBpbmRleCA2LCBkdWUgdG8gdGhlIHNlcGFyYXRvciBhZnRlciB0aGUgZGF0ZS5cbiAgY29uc3Qgb2Zmc2V0ID0gIWRhdGUgPyBnZXRQb3NpdGlvbihudWxsLCA2KS5wb3NpdGlvbiA6IDBcbiAgcG9zaXRpb24gKz0gb2Zmc2V0XG5cbiAgbGV0IHsgaW5kZXggfSA9IGdldFBvc2l0aW9uKHBvc2l0aW9uKVxuXG4gIGNvbnN0IGlzVVMgPSBsb2NhbGUgPT09ICdlbi1VUydcbiAgY29uc3QgdmFsdWVzID0gW1xuICAgIGlzVVMgPyAnbW9udGgnIDogJ2RheScsXG4gICAgbnVsbCxcbiAgICBpc1VTID8gJ2RheScgOiAnbW9udGgnLFxuICAgIG51bGwsXG4gICAgJ3llYXInLFxuICAgIG51bGwsXG4gICAgJ2hvdXInLFxuICAgIG51bGwsXG4gICAgJ21pbnV0ZScsXG4gICAgbnVsbCxcbiAgICAnc2Vjb25kJyxcbiAgICBudWxsLFxuICAgICdtaWxsaXNlY29uZCdcbiAgXVxuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIGlmICh2YWx1ZXNbaW5kZXhdKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGdldFBvc2l0aW9uKG51bGwsIGluZGV4KS5wb3NpdGlvbiAtIG9mZnNldFxuICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBwYXJ0c1tpbmRleF0ubGVuZ3RoXG4gICAgICByZXR1cm4geyBuYW1lOiB2YWx1ZXNbaW5kZXhdLCBzdGFydCwgZW5kIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gZ2V0RGF0ZVBhcnRzKHN0cmluZywgeyBkYXRlID0gdHJ1ZSwgdGltZSA9IHRydWUgfSA9IHt9KSB7XG4gIGNvbnN0IHBhcnRzID0gc3RyaW5nPy5zcGxpdCgvKFtcXHMuLDovXSspLykgfHwgW11cbiAgaWYgKCFkYXRlKSB7XG4gICAgLy8gQWRkIGR1bW15IGRhdGUgcGFydHMgdG8gbWFrZSBzdXJlIHdlIGdldCBhIHRpbWUtb25seSBkYXRlLlxuICAgIHBhcnRzLnVuc2hpZnQoJzEnLCAnLicsICcxJywgJy4nLCAnMjAwMCcsICcgJylcbiAgfVxuICBpZiAoIXRpbWUgJiYgcGFydHMubGVuZ3RoID4gNSkge1xuICAgIHBhcnRzLmxlbmd0aCA9IDVcbiAgfVxuICByZXR1cm4gcGFydHNcbn1cblxuZnVuY3Rpb24gZ2V0TW9udGhJbmRleChtb250aCwgeyBsb2NhbGUgPSAnZW4tVVMnIH0gPSB7fSkge1xuICBjb25zdCB2YWx1ZSA9ICttb250aFxuICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZSAtIDFcbiAgfVxuICBjb25zdCBtYXRjaCA9IG1vbnRoLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gIGlmIChtYXRjaC5sZW5ndGggPCAzKSByZXR1cm4gbnVsbFxuICBjb25zdCBzaG9ydEZvcm1hdCA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwgeyBtb250aDogJ3Nob3J0JyB9KVxuICBjb25zdCBsb25nRm9ybWF0ID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCB7IG1vbnRoOiAnbG9uZycgfSlcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDIwMDAsIGksIDEpXG4gICAgaWYgKFxuICAgICAgc2hvcnRGb3JtYXQuZm9ybWF0KGRhdGUpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChtYXRjaCkgfHxcbiAgICAgIGxvbmdGb3JtYXQuZm9ybWF0KGRhdGUpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChtYXRjaClcbiAgICApIHtcbiAgICAgIHJldHVybiBpXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNhbGVuZGFyXG4gIC5kaXRvLWNhbGVuZGFyLXBvcHVwXG4gICAgLmRpdG8tY2FsZW5kYXItaW5uZXJcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwiY3VycmVudE1vZGUgPT09ICdkYXknXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgneWVhcicpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiB0cnVlIH0pIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LW1vbnRoKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCdtb250aCcpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyBtb250aDogdHJ1ZSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci13ZWVrZGF5c1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ3ZWVrZGF5IGluIHdlZWtkYXlOYW1lc1wiXG4gICAgICAgICAgICApIHt7IHdlZWtkYXkuc2hvcnQgfX1cbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1kYXRlc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJkYXRlIGluIGRhdGVSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImRhdGUuc3RhdGUgJiYgYGRpdG8tY2FsZW5kYXItaXRlbS0ke2RhdGUuc3RhdGV9YFwiXG4gICAgICAgICAgICAgIEBjbGljaz1cImRhdGUuc3RhdGUgIT09ICdkaXNhYmxlZCcgJiYgc2VsZWN0RGF0ZShkYXRlLmRhdGUpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZS50ZXh0IH19XG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWZvb3RlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3Qtbm93KFxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA6dGl0bGU9XCJkYXRlVG9TdHJpbmcobmV3IERhdGUoKSlcIlxuICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0RGF0ZShuZXcgRGF0ZSgpKVwiXG4gICAgICAgICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cImN1cnJlbnRNb2RlID09PSAnbW9udGgnXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgneWVhcicpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiB0cnVlIH0pIH19XG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1tb250aHNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwiKG1vbnRoLCBpbmRleCkgaW4gbW9udGhOYW1lc1wiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldE1vbnRoQ2xhc3MoaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0TW9udGgoaW5kZXgpXCJcbiAgICAgICAgICAgICkge3sgbW9udGguc2hvcnQgfX1cbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ3llYXInXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBEZWNhZGUoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgc3BhbiB7eyBkZWNhZGVUb1N0cmluZyhjdXJyZW50VmFsdWUpIH19XG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBEZWNhZGUoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLXllYXJzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cInllYXIgaW4geWVhclJhbmdlXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0WWVhckNsYXNzKHllYXIpXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0WWVhcih5ZWFyKVwiXG4gICAgICAgICAgICApIHt7IHllYXIgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBkZXNjcmliZURhdGUsIGFsdGVyRGF0ZSB9IGZyb20gJy4uL3V0aWxzL2RhdGUuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAnc2VsZWN0J10sXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGlzYWJsZWREYXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIG1vZGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZGF5JyB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICBjb25zdCB7IHdlZWtkYXlOYW1lcywgbW9udGhOYW1lcyB9ID0gZ2V0TG9jYWxlTmFtZXModGhpcy5sb2NhbGUpXG4gICAgcmV0dXJuIHtcbiAgICAgIHdlZWtkYXlOYW1lcyxcbiAgICAgIG1vbnRoTmFtZXMsXG4gICAgICBkYXRlUmFuZ2U6IFtdLFxuICAgICAgeWVhclJhbmdlOiBbXSxcbiAgICAgIGN1cnJlbnRWYWx1ZTogKFxuICAgICAgICB0aGlzLm1vZGVsVmFsdWUgfHxcbiAgICAgICAgLy8gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIHVzZSBjdXJyZW50IGRhdGUgYnV0IGNsZWFyIHRpbWUgZmllbGRzOlxuICAgICAgICBhbHRlckRhdGUobmV3IERhdGUoKSwgeyBob3VyOiAwLCBtaW51dGU6IDAsIHNlY29uZDogMCwgbWlsbGlzZWNvbmQ6IDAgfSlcbiAgICAgICksXG4gICAgICBjdXJyZW50TW9kZTogdGhpcy5tb2RlXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0byB8fCBuZXcgRGF0ZSgpXG4gICAgICAgIHRoaXMudXBkYXRlRGF0ZVJhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRpc2FibGVkRGF0ZTogJ3VwZGF0ZURhdGVSYW5nZScsXG5cbiAgICBtb2RlKG1vZGUpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vZGUgPSBtb2RlXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRNb250aENsYXNzKG1vbnRoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSc6IChcbiAgICAgICAgICB0aGlzLm1vZGVsVmFsdWUgJiZcbiAgICAgICAgICBtb250aCA9PT0gdGhpcy5tb2RlbFZhbHVlLmdldE1vbnRoKCkgJiZcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpID09PSB0aGlzLm1vZGVsVmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgICApLFxuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQnOiBtb250aCA9PT0gdGhpcy5jdXJyZW50VmFsdWUuZ2V0TW9udGgoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRZZWFyQ2xhc3MoeWVhcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUnOiAoXG4gICAgICAgICAgdGhpcy5tb2RlbFZhbHVlICYmIHllYXIgPT09IHRoaXMubW9kZWxWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICksXG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCc6IHllYXIgPT09IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0RGF0ZShvdmVycmlkZXMsIHVwZGF0ZSA9IGZhbHNlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGFsdGVyRGF0ZSh0aGlzLmN1cnJlbnRWYWx1ZSwgb3ZlcnJpZGVzKVxuICAgICAgaWYgKHVwZGF0ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdGVwRGVjYWRlKHN0ZXApIHtcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwICogMTBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNldE1vZGUobW9kZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9kZSA9IG1vZGVcbiAgICB9LFxuXG4gICAgc3RlcE1vbnRoKHN0ZXApIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IHllYXIsIG1vbnRoIH0gPSB0aGlzLmdldFllYXJNb250aChcbiAgICAgICAgY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgIGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpICsgc3RlcFxuICAgICAgKVxuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgbW9udGgsXG4gICAgICAgIGRheTogTWF0aC5taW4oXG4gICAgICAgICAgdGhpcy5nZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCksXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUuZ2V0RGF0ZSgpXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHN0ZXBZZWFyKHN0ZXApIHtcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzZWxlY3REYXRlKGRhdGUpIHtcbiAgICAgIHRoaXMuc2V0RGF0ZShkZXNjcmliZURhdGUoZGF0ZSksIHRydWUpXG4gICAgICB0aGlzLiRlbWl0KCdzZWxlY3QnKVxuICAgIH0sXG5cbiAgICBzZWxlY3RNb250aChtb250aCkge1xuICAgICAgdGhpcy5zZXRNb2RlKCdkYXknKVxuICAgICAgLy8gU2V0IGRheSB0byAxIHRvIGF2b2lkIHNlbGVjdGluZyBhIGRhdGUgdGhhdCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZVxuICAgICAgLy8gbmV3IG1vbnRoLCBlLmcuIEZlYiAzMSAtPiBNYXIgMy5cbiAgICAgIHRoaXMuc2V0RGF0ZSh7IG1vbnRoLCBkYXk6IDEgfSwgdHJ1ZSlcbiAgICB9LFxuXG4gICAgc2VsZWN0WWVhcih5ZWFyKSB7XG4gICAgICB0aGlzLnNldE1vZGUoJ21vbnRoJylcbiAgICAgIHRoaXMuc2V0RGF0ZSh7IHllYXIgfSwgdHJ1ZSlcbiAgICB9LFxuXG4gICAgZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICBpZiAobW9udGggPiAxMSkge1xuICAgICAgICB5ZWFyKytcbiAgICAgICAgbW9udGggPSAwXG4gICAgICB9IGVsc2UgaWYgKG1vbnRoIDwgMCkge1xuICAgICAgICB5ZWFyLS1cbiAgICAgICAgbW9udGggPSAxMVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgeWVhciwgbW9udGggfVxuICAgIH0sXG5cbiAgICBkYXRlVG9TdHJpbmcoXG4gICAgICBkYXRlLFxuICAgICAgeyB5ZWFyLCBtb250aCwgZGF5IH0gPSB7IHllYXI6IHRydWUsIG1vbnRoOiB0cnVlLCBkYXk6IHRydWUgfVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcodGhpcy5sb2NhbGUsIHtcbiAgICAgICAgeWVhcjogeWVhciAmJiAnbnVtZXJpYycsXG4gICAgICAgIG1vbnRoOiBtb250aCAmJiAnbG9uZycsXG4gICAgICAgIGRheTogZGF5ICYmICdudW1lcmljJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZGVjYWRlVG9TdHJpbmcoZGF0ZSkge1xuICAgICAgY29uc3QgeWVhciA9IHRoaXMuZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoZGF0ZS5nZXRGdWxsWWVhcigpKVxuICAgICAgcmV0dXJuIGAke3llYXJ9IOKAkyAke3llYXIgKyA5fWBcbiAgICB9LFxuXG4gICAgZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApLmdldERhdGUoKVxuICAgIH0sXG5cbiAgICBnZXRGaXJzdFllYXJPZkRlY2FkZSh5ZWFyKSB7XG4gICAgICBjb25zdCB5ZWFyU3RyID0geWVhci50b1N0cmluZygpXG4gICAgICByZXR1cm4gK2Ake3llYXJTdHIuc2xpY2UoMCwgLTEpfTBgXG4gICAgfSxcblxuICAgIG5hdmlnYXRlKHsgc3RlcCwgZW50ZXIsIG1vZGUgPSB0aGlzLmN1cnJlbnRNb2RlLCB1cGRhdGUgPSBmYWxzZSB9KSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7IGRheTogY3VycmVudFZhbHVlLmdldERhdGUoKSArIHN0ZXAgfSwgdXBkYXRlKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICB0aGlzLnNldERhdGUoeyBtb250aDogY3VycmVudFZhbHVlLmdldE1vbnRoKCkgKyBzdGVwIH0sIHVwZGF0ZSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICB0aGlzLnNldERhdGUoeyB5ZWFyOiBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXAgfSwgdXBkYXRlKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBlbHNlIGlmIChlbnRlcikge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuY3VycmVudE1vZGUpIHtcbiAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRlKGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgdGhpcy5zZXRNb2RlKCdkYXknKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgIHRoaXMuc2V0TW9kZSgnbW9udGgnKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVEYXRlUmFuZ2UoKSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZSA9IFtdXG4gICAgICB0aGlzLnllYXJSYW5nZSA9IFtdXG5cbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBjb25zdCB5ZWFyID0gY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgIGNvbnN0IG1vbnRoID0gY3VycmVudFZhbHVlLmdldE1vbnRoKClcbiAgICAgIGNvbnN0IHN0YXJ0WWVhciA9IHRoaXMuZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoeWVhcilcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgICAgICB0aGlzLnllYXJSYW5nZS5wdXNoKHN0YXJ0WWVhciArIGkpXG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyTW9udGhGaXJzdERheSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKVxuICAgICAgbGV0IGZpcnN0RGF5V2VlayA9IGN1cnJNb250aEZpcnN0RGF5LmdldERheSgpICsgMVxuICAgICAgaWYgKGZpcnN0RGF5V2VlayA9PT0gMCkge1xuICAgICAgICBmaXJzdERheVdlZWsgPSA3XG4gICAgICB9XG4gICAgICBjb25zdCBudW1EYXlzID0gdGhpcy5nZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aClcbiAgICAgIGlmIChmaXJzdERheVdlZWsgPiAxKSB7XG4gICAgICAgIGNvbnN0IHByZXZNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoIC0gMSlcbiAgICAgICAgY29uc3QgcHJldk1vbnRoTnVtRGF5cyA9IHRoaXMuZ2V0RGF5c0luTW9udGgoXG4gICAgICAgICAgcHJldk1vbnRoLnllYXIsXG4gICAgICAgICAgcHJldk1vbnRoLm1vbnRoXG4gICAgICAgIClcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBmaXJzdERheVdlZWs7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRheSA9IHByZXZNb250aE51bURheXMgLSBmaXJzdERheVdlZWsgKyBpICsgMVxuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShwcmV2TW9udGgueWVhciwgcHJldk1vbnRoLm1vbnRoLCBkYXkpXG4gICAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgICB0ZXh0OiBkYXksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGU6IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJyA6ICdncmF5J1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKVxuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbnVtRGF5czsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgaSlcbiAgICAgICAgY29uc3QgaXNEYXkgPSBkYXRlID0+IChcbiAgICAgICAgICBkYXRlICYmXG4gICAgICAgICAgZGF0ZS5nZXREYXRlKCkgPT09IGkgJiZcbiAgICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IHllYXIgJiZcbiAgICAgICAgICBkYXRlLmdldE1vbnRoKCkgPT09IG1vbnRoXG4gICAgICAgIClcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBpc0RheSh0aGlzLm1vZGVsVmFsdWUpXG4gICAgICAgICAgPyAnYWN0aXZlJ1xuICAgICAgICAgIDogaXNEYXkobm93KVxuICAgICAgICAgICAgPyAndG9kYXknXG4gICAgICAgICAgICA6IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpXG4gICAgICAgICAgICAgID8gJ2Rpc2FibGVkJ1xuICAgICAgICAgICAgICA6IGlzRGF5KGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgICAgICAgICA/ICdjdXJyZW50J1xuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgc3RhdGVcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dE1vbnRoTmVlZCA9IDQyIC0gdGhpcy5kYXRlUmFuZ2UubGVuZ3RoXG4gICAgICBpZiAobmV4dE1vbnRoTmVlZCA+IDApIHtcbiAgICAgICAgY29uc3QgbmV4dE1vbnRoID0gdGhpcy5nZXRZZWFyTW9udGgoeWVhciwgbW9udGggKyAxKVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBuZXh0TW9udGhOZWVkOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUobmV4dE1vbnRoLnllYXIsIG5leHRNb250aC5tb250aCwgaSlcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJyA6ICdncmF5J1xuICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY29uc3QgbG9jYWxlTmFtZXMgPSB7fVxuXG4vLyBDYWxsaW5nIGB0b0xvY2FsZVN0cmluZygpYCB0aGlzIG11Y2ggYXBwZWFycyB0byBiZSBleHBlbnNpdmUsIHNvIGNhY2hlIGl0OlxuZnVuY3Rpb24gZ2V0TG9jYWxlTmFtZXMobG9jYWxlKSB7XG4gIGxldCBuYW1lcyA9IGxvY2FsZU5hbWVzW2xvY2FsZV1cbiAgaWYgKCFuYW1lcykge1xuICAgIGNvbnN0IHdlZWtkYXlOYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgwLCAwLCBpKVxuICAgICAgd2Vla2RheU5hbWVzLnB1c2goe1xuICAgICAgICBsb25nOiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyB3ZWVrZGF5OiAnbG9uZycgfSksXG4gICAgICAgIHNob3J0OiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyB3ZWVrZGF5OiAnc2hvcnQnIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICBjb25zdCBtb250aE5hbWVzID0gW11cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAxMjsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCwgaSwgMClcbiAgICAgIG1vbnRoTmFtZXMucHVzaCh7XG4gICAgICAgIGxvbmc6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1vbnRoOiAnbG9uZycgfSksXG4gICAgICAgIHNob3J0OiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogJ3Nob3J0JyB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgbmFtZXMgPSBsb2NhbGVOYW1lc1tsb2NhbGVdID0ge1xuICAgICAgd2Vla2RheU5hbWVzLFxuICAgICAgbW9udGhOYW1lc1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmFtZXNcbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNhbGVuZGFyIHtcbiAgbWluLXdpZHRoOiAyNDBweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLmRpdG8tY2FsZW5kYXItcG9wdXAge1xuICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuICB6LWluZGV4OiAkei1pbmRleC1wb3B1cDtcbn1cblxuLmRpdG8tY2FsZW5kYXItYm9keSB7XG4gIHBhZGRpbmc6IDAgMC41ZW07XG5cbiAgc3BhbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLyA3KTtcbiAgICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG4gICAgbGluZS1oZWlnaHQ6IGNhbGMoI3skaW5wdXQtaGVpZ2h0fSAtIDJweCk7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS10b2RheSB7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmU7XG4gICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gIH1cblxuICAuZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSB7XG4gICAgJixcbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1kaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1kaXNhYmxlZCxcbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1ncmF5IHtcbiAgICBjb2xvcjogIzk5OTk5OTtcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1tb250aHMsXG4uZGl0by1jYWxlbmRhci15ZWFycyB7XG4gIHNwYW4ge1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLyA0KTtcbiAgICBtYXJnaW46IDAuNWVtIDA7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXIteWVhcnMgc3BhbiB7XG4gIHdpZHRoOiBjYWxjKDEwMCUgLyA1KTtcbn1cblxuLmRpdG8tY2FsZW5kYXIgYSxcbi5kaXRvLWNhbGVuZGFyLWRhdGVzIHNwYW4sXG4uZGl0by1jYWxlbmRhci1tb250aHMgc3Bhbixcbi5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW4ge1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWhlYWRlciBzcGFuIHtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuXG4gIGEge1xuICAgIHBhZGRpbmc6IDAgMC4yZW07XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3Bhbjpob3Zlcixcbi5kaXRvLWNhbGVuZGFyLW1vbnRocyBzcGFuOmhvdmVyLFxuLmRpdG8tY2FsZW5kYXIteWVhcnMgc3Bhbjpob3Zlcixcbi5kaXRvLWNhbGVuZGFyOm5vdCg6aG92ZXIpIC5kaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCB7XG4gIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHQ7XG59XG5cbi5kaXRvLWNhbGVuZGFyLXdlZWtkYXlzIHNwYW4ge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWhlYWRlcixcbi5kaXRvLWNhbGVuZGFyLWZvb3RlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG4gIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xufVxuXG4uZGl0by1jYWxlbmRhci1mb290ZXIge1xuICBib3JkZXItdG9wOiAkYm9yZGVyLXN0eWxlO1xufVxuXG4uZGl0by1jYWxlbmRhci1oZWFkZXIge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci1zdHlsZTtcbiAgZGlzcGxheTogZmxleDtcblxuICA+IHNwYW4ge1xuICAgIG1hcmdpbjogYXV0bztcbiAgICBwYWRkaW5nOiAwIDAuNWVtO1xuICB9XG5cbiAgYSB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1zdGVwLXByZXYsXG4uZGl0by1jYWxlbmRhci1zdGVwLW5leHQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiA1JTtcbiAgbWluLXdpZHRoOiAyZW07XG4gIG1heC13aWR0aDogM2VtO1xuXG4gICY6OmFmdGVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICBmb250LXNpemU6IDEuMjVlbTtcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1zdGVwLXByZXYge1xuICAmOjphZnRlciB7XG4gICAgY29udGVudDogJ+KAuSc7XG4gIH1cblxuICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlciB7XG4gICAgY29udGVudDogJ8KrJztcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1zdGVwLW5leHQge1xuICAmOjphZnRlciB7XG4gICAgY29udGVudDogJ+KAuic7XG4gIH1cblxuICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlciB7XG4gICAgY29udGVudDogJ8K7JztcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1zZWxlY3Qtbm93IHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICdOb3cnO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRFdmVudHModGFyZ2V0cywgZXZlbnRzKSB7XG4gIHRhcmdldHMgPVxuICAgIHRhcmdldHMgaW5zdGFuY2VvZiBOb2RlTGlzdFxuICAgICAgPyBBcnJheS5mcm9tKHRhcmdldHMpXG4gICAgICA6IGFzQXJyYXkodGFyZ2V0cylcblxuICBmb3IgKGNvbnN0IFt0eXBlLCBoYW5kbGVyXSBvZiBPYmplY3QuZW50cmllcyhldmVudHMpKSB7XG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICByZW1vdmUoKSB7XG4gICAgICBmb3IgKGNvbnN0IFt0eXBlLCBoYW5kbGVyXSBvZiBPYmplY3QuZW50cmllcyhldmVudHMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUV2ZW50cyguLi5ldmVudHMpIHtcbiAgcmV0dXJuIHtcbiAgICByZW1vdmUoKSB7XG4gICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgICAgICBldmVudC5yZW1vdmUoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5KGV2ZW50KSB7XG4gIHJldHVybiB7XG4gICAgMzc6ICdsZWZ0JyxcbiAgICAzODogJ3VwJyxcbiAgICAzOTogJ3JpZ2h0JyxcbiAgICA0MDogJ2Rvd24nLFxuICAgIDEzOiAnZW50ZXInXG4gIH1bZXZlbnQ/LmtleUNvZGVdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KSB7XG4gIGNvbnN0IGtleSA9IGdldEtleShldmVudClcbiAgcmV0dXJuIHtcbiAgICBob3I6IHsgbGVmdDogLTEsIHJpZ2h0OiAxIH1ba2V5XSB8fCAwLFxuICAgIHZlcjogeyB1cDogLTEsIGRvd246IDEgfVtrZXldIHx8IDAsXG4gICAgZW50ZXI6IGtleSA9PT0gJ2VudGVyJ1xuICB9XG59XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYXJnZXQoY29tcG9uZW50KSB7XG4gIGNvbnN0IHRhcmdldCA9IGlzU3RyaW5nKGNvbXBvbmVudC50YXJnZXQpXG4gICAgPyBjb21wb25lbnQuJHJlZnNbY29tcG9uZW50LnRhcmdldF1cbiAgICA6IGNvbXBvbmVudC50YXJnZXRcbiAgcmV0dXJuIHRhcmdldD8uJGVsID8/IHRhcmdldFxufVxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10cmlnZ2VyLWNvbnRhaW5lclxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtaWY9XCJhbHdheXNTaG93XCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdjbGljaydcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgQGNsaWNrPVwib25DbGlja1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdmb2N1cycgfHwgdHJpZ2dlciA9PT0gJ2Fsd2F5cydcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIFRyYW5zaXRpb24oOm5hbWU9XCJgZGl0by0ke3RyYW5zaXRpb259YFwiKVxuICAgIC5kaXRvLXBvcHVwKFxuICAgICAgdi1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICApXG4gICAgLmRpdG8tcG9wdXAoXG4gICAgICB2LWVsc2VcbiAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICByZWY9XCJwb3B1cFwiXG4gICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMsIGNvbWJpbmVFdmVudHMgfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcbmltcG9ydCB7IGdldFRhcmdldCB9IGZyb20gJy4uL3V0aWxzL3RyaWdnZXInXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOnNob3cnXSxcblxuICBwcm9wczoge1xuICAgIHRyaWdnZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnY2xpY2snIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tJyB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjdXN0b21DbGFzczogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB6SW5kZXg6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH0sXG4gICAga2VlcEluVmlldzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgaGlkZVdoZW5DbGlja091dHNpZGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGFsd2F5c1Nob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb3ZlcjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGhpZGVEZWxheTogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgcG9wdXBQbGFjZW1lbnQ6IHRoaXMucGxhY2VtZW50LFxuICAgICAgZm9jdXNFdmVudHM6IG51bGwsXG4gICAgICBjbG9zZUV2ZW50czogbnVsbCxcbiAgICAgIHBvcHVwRXZlbnRzOiBudWxsLFxuICAgICAgYmx1clRpbWVyOiBudWxsLFxuICAgICAgbW91c2VMZWF2ZVRpbWVyOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdHJpZ2dlckNsYXNzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tdHJpZ2dlci1kaXNhYmxlZCc6IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcG9wdXBDbGFzcygpIHtcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSB7XG4gICAgICAgIFtgZGl0by1wb3B1cC0ke2h5cGhlbmF0ZSh0aGlzLnBsYWNlbWVudCl9YF06IHRydWVcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmN1c3RvbUNsYXNzKSB7XG4gICAgICAgIGNsYXNzZXNbdGhpcy5jdXN0b21DbGFzc10gPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3Nlc1xuICAgIH0sXG5cbiAgICBwb3B1cFN0eWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuekluZGV4ID8gYHotaW5kZXg6ICR7dGhpcy56SW5kZXh9YCA6ICcnXG4gICAgfSxcblxuICAgIHRyaWdnZXJUYXJnZXQoKSB7XG4gICAgICByZXR1cm4gZ2V0VGFyZ2V0KHRoaXMpXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3cgfHwgdGhpcy5hbHdheXNTaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6c2hvdycsIHRvKVxuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLm9uU2hvd1BvcHVwKHRvKSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBjb25zdCB7IHRyaWdnZXIsIHBvcHVwIH0gPSB0aGlzLiRyZWZzXG4gICAgaWYgKHRoaXMudHJpZ2dlciA9PT0gJ2ZvY3VzJykge1xuICAgICAgdGhpcy5mb2N1c0V2ZW50cyA9IHRoaXMuYWRkRm9jdXNFdmVudHModGhpcy50cmlnZ2VyVGFyZ2V0ID8/IHRyaWdnZXIpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGlkZVdoZW5DbGlja091dHNpZGUgJiYgIXRoaXMuYWx3YXlzU2hvdykge1xuICAgICAgLy8gVXNlICdtb3VzZXVwJyBpbnN0ZWFkIG9mICdjbGljaycsIHNpbmNlIGNsaWNrIGFwcGVhcnMgdG8gaGFwcGVuIGFmdGVyXG4gICAgICAvLyB0aGUgRE9NIGluc2lkZSBvZiBwb3B1cHMgY291bGQgY2hhbmdlIGluIGEgd2F5IHNvIHRoYXQgdGhlIGNoZWNrXG4gICAgICAvLyBgcG9wdXAuY29udGFpbnMoZXZlbnQudGFyZ2V0KWAgd291bGQgZmFpbDpcbiAgICAgIHRoaXMuY2xvc2VFdmVudHMgPSBhZGRFdmVudHMod2luZG93LCB7XG4gICAgICAgIG1vdXNldXA6IGV2ZW50ID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCAmJlxuICAgICAgICAgICAgIXBvcHVwLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICAgICAgICF0cmlnZ2VyLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICAgICAgICF0aGlzLnRyaWdnZXJUYXJnZXQ/LmNvbnRhaW5zKGV2ZW50LnRhcmdldClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hbHdheXNTaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLnNob3dQb3B1cCA9IHRoaXMuc2hvd1xuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLmZvY3VzRXZlbnRzPy5yZW1vdmUoKVxuICAgIHRoaXMuY2xvc2VFdmVudHM/LnJlbW92ZSgpXG4gICAgdGhpcy5wb3B1cEV2ZW50cz8ucmVtb3ZlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdXBkYXRlUG9zaXRpb24oKSB7XG4gICAgICBjb25zdCB7IHRyaWdnZXIsIHBvcHVwIH0gPSB0aGlzLiRyZWZzXG4gICAgICBpZiAodGhpcy5zaG93ICYmIHBvcHVwLm9mZnNldFdpZHRoID09PSAwKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVQb3NpdGlvbigpLCAwKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy50cmlnZ2VyVGFyZ2V0ID8/IHRyaWdnZXJcbiAgICAgIC8vIEFjdHVhbGx5IHJlc2l6ZSB0aGUgcG9wdXAncyBmaXJzdCBjaGlsZCwgc28gdGhleSBjYW4gc2V0IHNpemUgbGltaXRzLlxuICAgICAgY29uc3QgZWwgPSB0aGlzLnRhcmdldCA9PT0gJ3BvcHVwJyA/IHRyaWdnZXIgOiBwb3B1cC5maXJzdEVsZW1lbnRDaGlsZFxuICAgICAgaWYgKGVsKSB7XG4gICAgICAgIGVsLnN0eWxlLndpZHRoID0gZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLndpZHRoXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJvdW5kcyA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgY29uc3QgdHJpZ2dlckxlZnQgPSBib3VuZHMubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgICBjb25zdCB0cmlnZ2VyVG9wID0gYm91bmRzLnRvcCArIHdpbmRvdy5zY3JvbGxZXG4gICAgICBjb25zdCB0cmlnZ2VyV2lkdGggPSBib3VuZHMud2lkdGhcbiAgICAgIGNvbnN0IHRyaWdnZXJIZWlnaHQgPSBib3VuZHMuaGVpZ2h0XG4gICAgICBjb25zdCBwb3B1cFdpZHRoID0gcG9wdXAub2Zmc2V0V2lkdGhcbiAgICAgIGNvbnN0IHBvcHVwSGVpZ2h0ID0gcG9wdXAub2Zmc2V0SGVpZ2h0XG5cbiAgICAgIGxldCBbcGFydDEsIHBhcnQyXSA9IHRoaXMucG9wdXBQbGFjZW1lbnQuc3BsaXQoJy0nKSB8fCBbXVxuICAgICAgaWYgKHRoaXMua2VlcEluVmlldykge1xuICAgICAgICBjb25zdCB3aW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoXG4gICAgICAgIGNvbnN0IHdpbkhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJUb3AgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAnYm90dG9tJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCAtIHRyaWdnZXJIZWlnaHQgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAndG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJMZWZ0IDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDEgPSAncmlnaHQnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHdpbldpZHRoIC0gdHJpZ2dlckxlZnQgLSB0cmlnZ2VyV2lkdGggPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdsZWZ0J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJ0MiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdib3R0b20nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnYm90dG9tJykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyVG9wICsgdHJpZ2dlckhlaWdodCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICd0b3AnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnbGVmdCcpIHtcbiAgICAgICAgICBpZiAod2luV2lkdGggLSB0cmlnZ2VyTGVmdCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyTGVmdCArIHRyaWdnZXJXaWR0aCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ2xlZnQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCBsZWZ0ID0gMFxuICAgICAgbGV0IHRvcCA9IDBcbiAgICAgIHN3aXRjaCAocGFydDEpIHtcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHRcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICBsZWZ0IC09IHBvcHVwV2lkdGhcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgbGVmdCArPSB0cmlnZ2VyV2lkdGhcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIHRvcCArPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAocGFydDIpIHtcbiAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aCAtIHRyaWdnZXJXaWR0aFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgdG9wIC09IHBvcHVwSGVpZ2h0IC0gdHJpZ2dlckhlaWdodFxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb3Zlcikge1xuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICB0b3AgLT0gdHJpZ2dlckhlaWdodFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0ICE9PSB0cmlnZ2VyKSB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXJCb3VuZHMgPSB0cmlnZ2VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgIGxlZnQgKz0gdHJpZ2dlckxlZnQgLSB0cmlnZ2VyQm91bmRzLmxlZnRcbiAgICAgICAgdG9wICs9IHRyaWdnZXJUb3AgLSB0cmlnZ2VyQm91bmRzLnRvcFxuICAgICAgfVxuICAgICAgcG9wdXAuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgXG4gICAgICBwb3B1cC5zdHlsZS50b3AgPSBgJHt0b3B9cHhgXG4gICAgfSxcblxuICAgIGFkZEZvY3VzRXZlbnRzKHBhcmVudCkge1xuICAgICAgY29uc3QgdGFyZ2V0cyA9IHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCwgdGV4dGFyZWEnKVxuICAgICAgbGV0IGlucHV0XG5cbiAgICAgIHJldHVybiBjb21iaW5lRXZlbnRzKFxuICAgICAgICBhZGRFdmVudHModGFyZ2V0cywge1xuICAgICAgICAgIGZvY3VzOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmJsdXJUaW1lcilcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgICAgLy8gVXNlIHRpbWVvdXQgdG8gYWxsb3cgY2xpY2tlZCBpbnB1dHMgdG8gZ3JhYiBmb2N1c1xuICAgICAgICAgICAgdGhpcy5ibHVyVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLiRyZWZzLnBvcHVwLm1hdGNoZXMoJzpmb2N1cy13aXRoaW4nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMClcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuXG4gICAgICAgIGFkZEV2ZW50cyhwYXJlbnQsIHtcbiAgICAgICAgICBtb3VzZWRvd246IGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0Lm1hdGNoZXMoJ2lucHV0LCB0ZXh0YXJlYSwgYnV0dG9uJykpIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFldmVudC50YXJnZXQubWF0Y2hlcygnLmRpdG8tYnV0dG9uLWNsZWFyJykpIHtcbiAgICAgICAgICAgICAgY29uc3QgdHJpZ2dlciA9IHRoaXMudHJpZ2dlclRhcmdldCA/PyB0aGlzLiRyZWZzLnRyaWdnZXJcbiAgICAgICAgICAgICAgLy8gTWFyayB0cmlnZ2VyIGlucHV0IGFzIHJlYWRvbmx5IHNvIGl0IGNhbid0IGxvb3NlIGZvY3VzIHdoaWxlXG4gICAgICAgICAgICAgIC8vIHVzZXIgZG9lcyBvdGhlciBtb3VzZS1hY3Rpdml0aWVzIGluIHBvcHVwLlxuICAgICAgICAgICAgICBpbnB1dCA9IHRyaWdnZXIucXVlcnlTZWxlY3RvcignaW5wdXQsIHRleHRhcmVhJylcbiAgICAgICAgICAgICAgaWYgKGlucHV0ICYmICFpbnB1dC5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ3JlYWRvbmx5JywgJ3RydWUnKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIG1vdXNldXA6IGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgICAvLyBHaXZlIHNvbWUgdGltZSBmb3Igb3RoZXIgZXZlbnRzIHRvIHVwZGF0ZSBpbnB1dCBiZWZvcmUgaXRcbiAgICAgICAgICAgICAgLy8gYmVjb21lcyBlZGl0YWJsZSBhbmQgc3RpbGwgZm9jdXNlZCBhZ2Fpbi5cbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaW5wdXQucmVtb3ZlQXR0cmlidXRlKCdyZWFkb25seScpXG4gICAgICAgICAgICAgICAgaWYgKCFldmVudC50YXJnZXQubWF0Y2hlcygnaW5wdXQsIHRleHRhcmVhLCBidXR0b24nKSkge1xuICAgICAgICAgICAgICAgICAgaW5wdXQuZm9jdXMoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbnB1dCA9IG51bGxcbiAgICAgICAgICAgICAgfSwgMClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSxcblxuICAgIG9uU2hvd1BvcHVwKHNob3cpIHtcbiAgICAgIGlmIChzaG93KSB7XG4gICAgICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdmb2N1cycpIHtcbiAgICAgICAgICB0aGlzLnBvcHVwRXZlbnRzID0gdGhpcy5hZGRGb2N1c0V2ZW50cyh0aGlzLiRyZWZzLnBvcHVwKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wb3B1cEV2ZW50cz8ucmVtb3ZlKClcbiAgICAgICAgdGhpcy5wb3B1cEV2ZW50cyA9IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25DbGljaygpIHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Ib3ZlcihlbnRlcikge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1vdXNlTGVhdmVUaW1lcilcbiAgICAgICAgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuaGlkZURlbGF5KSB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlTGVhdmVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgICB9LCB0aGlzLmhpZGVEZWxheSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcbkBpbXBvcnQgJy4uL3N0eWxlcy90cmFuc2l0aW9ucy9pbmRleC5zY3NzJztcblxuLmRpdG8tdHJpZ2dlci1jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5kaXRvLXRyaWdnZXItZGlzYWJsZWQge1xuICBjb2xvcjogJGNvbG9yLWRpc2FibGVkO1xuICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gIGN1cnNvcjogZGVmYXVsdDtcblxuICAqIHtcbiAgICBjdXJzb3I6IGRlZmF1bHQgIWltcG9ydGFudDtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgICY6Zm9jdXMge1xuICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8tcG9wdXAge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogJHotaW5kZXgtcG9wdXA7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWlucHV0KDpjbGFzcz1cImNsYXNzZXNcIilcbiAgc2xvdChuYW1lPVwiYmVmb3JlXCIpXG4gIGlucHV0KFxuICAgIDppZD1cImlkXCJcbiAgICByZWY9XCJpbnB1dFwiXG4gICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgOnR5cGU9XCJ0eXBlXCJcbiAgICA6bmFtZT1cIm5hbWVcIlxuICAgIDp0aXRsZT1cInRpdGxlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOnJlYWRvbmx5PVwicmVhZG9ubHlcIlxuICAgIDphdXRvZm9jdXM9XCJhdXRvZm9jdXNcIlxuICAgIDpwbGFjZWhvbGRlcj1cInBsYWNlaG9sZGVyXCJcbiAgICA6YXV0b2NvbXBsZXRlPVwiYXV0b2NvbXBsZXRlXCJcbiAgICA6YXJpYS1sYWJlbD1cInRpdGxlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgKVxuICBzbG90KG5hbWU9XCJhZnRlclwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnXSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogW1N0cmluZywgTnVtYmVyXSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHR5cGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAndGV4dCcgfSxcbiAgICBpZDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBuYW1lOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRpdGxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgcmVhZG9ubHk6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhdXRvZm9jdXM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBhdXRvY29tcGxldGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnb2ZmJyB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBob3ZlcmluZzogZmFsc2UsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kYXR0cnMuY2xhc3NcbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IF8sIC4uLmF0dHJpYnV0ZXMgfSA9IHRoaXMuJGF0dHJzXG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH0sXG5cbiAgICBpbnB1dCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLmlucHV0XG4gICAgfSxcblxuICAgIHNpemUoKSB7XG4gICAgICAvLyBEZXRlcm1pbmUgc2l6ZSBiYXNlZCBvbiBtaW4gJiBtYXggc2V0dGluZ3MsIGlmIHRoZXkncmUgcHJvdmlkZWQuXG4gICAgICBjb25zdCB7IHNpemUsIG1pbiwgbWF4IH0gPSB0aGlzLiRhdHRyc1xuICAgICAgY29uc3QgZ2V0TGVuZ3RoID0gdmFsdWUgPT4gKHZhbHVlICE9IG51bGwgPyBgJHt2YWx1ZX1gLmxlbmd0aCA6IDApXG4gICAgICByZXR1cm4gc2l6ZSB8fCBnZXRMZW5ndGgobWluKSB8fCBnZXRMZW5ndGgobWF4KSB8fCB1bmRlZmluZWRcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0b1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUoY3VycmVudFZhbHVlKSB7XG4gICAgICBpZiAoY3VycmVudFZhbHVlICE9PSB0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBjdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWlucHV0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXG4gIEBleHRlbmQgJWlucHV0O1xuXG4gIGlucHV0IHtcbiAgICAvLyBJbmhlcml0IGFsbCBzdHlsaW5nIGZyb20gLmRpdG8taW5wdXRcbiAgICBhbGw6IGluaGVyaXQ7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlcjogMDtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5pLmRpdG8taWNvbihcbiAgOmNsYXNzPWB7XG4gICAgWydkaXRvLWljb24tLScgKyBuYW1lXTogdHJ1ZSxcbiAgICAnZGl0by1pY29uLS1kaXNhYmxlZCc6IGRpc2FibGVkXG4gIH1gXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIG5hbWU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBkaXNhYmxlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4vLyBgeWFybiBidWlsZDppY29uc2AgY29udmVydHMgdGhlIGljb24gU1ZHIGZpbGVzIHRvIHNpbGVudCBjbGFzc2VzIGluc2lkZVxuLy8gYHNyYy9zdHlsZXMvbWl4aW5zL19pY29ucy5zY3NzYCwgbWFraW5nIHRoZW0gYXZhaWxhYmxlIHRvIGFsbCBvdGhlciBzYXNzXG4vLyBjb2RlIHRocm91Z2ggYF9pbXBvcnRzYC5cbi8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIHRoZW0gYXMgbm9ybWFsIENTUyBjbGFzc2VzLCBjb252ZXJ0IHRoZW0gaGVyZTpcbkBlYWNoICRuYW1lIGluICRpY29ucyB7XG4gIC5kaXRvLWljb24tLSN7JG5hbWV9IHtcbiAgICAmOjphZnRlciB7XG4gICAgICBAZXh0ZW5kICVpY29uLSN7JG5hbWV9O1xuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLWljb24ge1xuICBAYXQtcm9vdCAuZGl0by1pbnB1dCAmIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgaW5zZXQ6ICRib3JkZXItd2lkdGg7XG4gICAgbGVmdDogdW5zZXQ7XG4gICAgd2lkdGg6IDJlbTtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgY29sb3I6ICRjb2xvci1ncmV5O1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcblxuICAgICYtLWRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItbGlnaHQ7XG4gICAgfVxuICB9XG5cbiAgQGF0LXJvb3QgLmRpdG8taW5wdXQ6Zm9jdXMtd2l0aGluICYge1xuICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICB9XG59XG48L3N0eWxlPlxuIiwiZXhwb3J0IGZ1bmN0aW9uIHNldFNlbGVjdGlvbihpbnB1dCwgeyBzdGFydCwgZW5kIH0pIHtcbiAgaWYgKGlucHV0Py5zZXRTZWxlY3Rpb25SYW5nZSkge1xuICAgIGlucHV0LmZvY3VzKClcbiAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb24oaW5wdXQpIHtcbiAgcmV0dXJuIGlucHV0ICYmICdzZWxlY3Rpb25TdGFydCcgaW4gaW5wdXRcbiAgICA/IHsgc3RhcnQ6IGlucHV0LnNlbGVjdGlvblN0YXJ0LCBlbmQ6IGlucHV0LnNlbGVjdGlvbkVuZCB9XG4gICAgOiBudWxsXG59XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblRyaWdnZXIuZGl0by1kYXRlLXBpY2tlcihcbiAgcmVmPVwidHJpZ2dlclwiXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJmb2N1c1wiXG4gIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuKVxuICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICBzbG90KFxuICAgICAgdi1pZj1cIiRzbG90cy50cmlnZ2VyXCJcbiAgICAgIG5hbWU9XCJ0cmlnZ2VyXCJcbiAgICApXG4gICAgSW5wdXRGaWVsZC5kaXRvLWRhdGUtcGlja2VyLWlucHV0KFxuICAgICAgdi1lbHNlXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFRleHRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCwgLi4uJGF0dHJzIH1cIlxuICAgICAgQGZvY3VzPVwib25Gb2N1cyh0cnVlKVwiXG4gICAgICBAYmx1cj1cIm9uRm9jdXMoZmFsc2UpXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uTW91c2VEb3duKGZhbHNlKVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI2JlZm9yZSlcbiAgICAgICAgc2xvdChuYW1lPVwiYmVmb3JlXCIpXG4gICAgICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgICAgIEljb24oXG4gICAgICAgICAgbmFtZT1cImNhbGVuZGFyXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgQG1vdXNlZG93bi5wcmV2ZW50PVwib25Nb3VzZURvd24odHJ1ZSlcIlxuICAgICAgICApXG4gICAgICAgIHNsb3QobmFtZT1cImFmdGVyXCIpXG4gIHRlbXBsYXRlKCNwb3B1cClcbiAgICBDYWxlbmRhci5kaXRvLWRhdGUtcGlja2VyLXBvcHVwKFxuICAgICAgcmVmPVwiY2FsZW5kYXJcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJ7IGxvY2FsZSwgZGlzYWJsZWREYXRlIH1cIlxuICAgICAgQHNlbGVjdD1cInNob3dQb3B1cCA9IGZhbHNlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZm9ybWF0LCBkZWZhdWx0Rm9ybWF0cyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgVHJpZ2dlciBmcm9tICcuL1RyaWdnZXIudnVlJ1xuaW1wb3J0IENhbGVuZGFyIGZyb20gJy4vQ2FsZW5kYXIudnVlJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCBJY29uIGZyb20gJy4vSWNvbi52dWUnXG5pbXBvcnQgeyBwYXJzZURhdGUsIGdldERhdGVQYXJ0QXRQb3NpdGlvbiB9IGZyb20gJy4uL3V0aWxzL2RhdGUuanMnXG5pbXBvcnQgeyBnZXRTZWxlY3Rpb24sIHNldFNlbGVjdGlvbiB9IGZyb20gJy4uL3V0aWxzL3NlbGVjdGlvbi5qcydcbmltcG9ydCB7IGdldEtleU5hdmlnYXRpb24gfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcbmltcG9ydCB7IGdldFRhcmdldCB9IGZyb20gJy4uL3V0aWxzL3RyaWdnZXIuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBDYWxlbmRhciwgSW5wdXRGaWVsZCwgSWNvbiB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICd1cGRhdGU6c2hvdycsICdjaGFuZ2UnLCAnZm9jdXMnLCAnYmx1ciddLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tLWxlZnQnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogJ3RyaWdnZXInIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogKCkgPT4gKHtcbiAgICAgICAgZGF0ZTogZGVmYXVsdEZvcm1hdHMuZGF0ZSxcbiAgICAgICAgdGltZTogZmFsc2VcbiAgICAgIH0pXG4gICAgfSxcbiAgICBkaXNhYmxlZERhdGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZSxcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgaW5wdXRGb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93UG9wdXBcbiAgICB9LFxuXG4gICAgaW5wdXQoKSB7XG4gICAgICByZXR1cm4gZ2V0VGFyZ2V0KHRoaXMpPy5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpXG4gICAgfSxcblxuICAgIGZvcm1hdE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgICAuLi50aGlzLmZvcm1hdFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpIHx8ICcnXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHBhcnNlRGF0ZSh2YWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKVxuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gZGF0ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0b1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUodmFsdWUpIHtcbiAgICAgIGlmICgrdmFsdWUgIT09ICt0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB2YWx1ZSlcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6c2hvdycsIHRvKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQodG8gPyAnZm9jdXMnIDogJ2JsdXInKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25Gb2N1cyhmb2N1cykge1xuICAgICAgdGhpcy5pbnB1dEZvY3VzZWQgPSBmb2N1c1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBmb2N1c1xuICAgIH0sXG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGNvbnN0IHsgdmVyOiBzdGVwLCBlbnRlciB9ID0gZ2V0S2V5TmF2aWdhdGlvbihldmVudClcbiAgICAgIGlmIChzdGVwIHx8IGVudGVyKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGdldFNlbGVjdGlvbih0aGlzLmlucHV0KT8uc3RhcnRcbiAgICAgICAgY29uc3QgZ2V0RGF0ZVBhcnQgPSBwb3NpdGlvbiA9PlxuICAgICAgICAgIGdldERhdGVQYXJ0QXRQb3NpdGlvbih0aGlzLmN1cnJlbnRUZXh0LCBwb3NpdGlvbiwgdGhpcy5mb3JtYXRPcHRpb25zKVxuXG4gICAgICAgIGlmIChzdGVwICYmICF0aGlzLnNob3dQb3B1cCkge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHsgY2FsZW5kYXIgfSA9IHRoaXMuJHJlZnNcbiAgICAgICAgICBpZiAoY2FsZW5kYXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmFtZTogbW9kZSwgc3RhcnQgfSA9IGdldERhdGVQYXJ0KHBvc2l0aW9uKSB8fCB7fVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBtb2RlICYmXG4gICAgICAgICAgICAgIGNhbGVuZGFyLm5hdmlnYXRlKHsgc3RlcCwgZW50ZXIsIG1vZGUsIHVwZGF0ZTogdHJ1ZSB9KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHNldFNlbGVjdGlvbih0aGlzLmlucHV0LCBnZXREYXRlUGFydChzdGFydCkpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbk1vdXNlRG93bih0b2dnbGUpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gIXRoaXMuZGlzYWJsZWQgJiYgKCF0b2dnbGUgfHwgIXRoaXMuc2hvd1BvcHVwKVxuICAgICAgaWYgKHRoaXMuc2hvd1BvcHVwKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWRhdGUtcGlja2VyIHtcbiAgLmRpdG8taW5wdXQge1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWluLXdpZHRoOiA4ZW07XG4gIH1cbn1cblxuLmRpdG8tZGF0ZS1waWNrZXItcG9wdXAge1xuICBtYXJnaW46ICRwb3B1cC1tYXJnaW47XG59XG48L3N0eWxlPlxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5UcmlnZ2VyLmRpdG8tdGltZS1waWNrZXIoXG4gIHJlZj1cInRyaWdnZXJcIlxuICB2LW1vZGVsOnNob3c9XCJzaG93UG9wdXBcIlxuICB0cmlnZ2VyPVwiZm9jdXNcIlxuICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbilcbiAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgc2xvdChcbiAgICAgIHYtaWY9XCIkc2xvdHMudHJpZ2dlclwiXG4gICAgICBuYW1lPVwidHJpZ2dlclwiXG4gICAgKVxuICAgIElucHV0RmllbGQuZGl0by10aW1lLXBpY2tlci1pbnB1dChcbiAgICAgIHYtZWxzZVxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRUZXh0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIlxuICAgICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQsIC4uLiRhdHRycyB9XCJcbiAgICAgIEBmb2N1cz1cIm9uRm9jdXModHJ1ZSlcIlxuICAgICAgQGJsdXI9XCJvbkZvY3VzKGZhbHNlKVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvbk1vdXNlRG93bihmYWxzZSlcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCNiZWZvcmUpXG4gICAgICAgIHNsb3QobmFtZT1cImJlZm9yZVwiKVxuICAgICAgdGVtcGxhdGUoI2FmdGVyKVxuICAgICAgICBJY29uKFxuICAgICAgICAgIG5hbWU9XCJjbG9ja1wiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIEBtb3VzZWRvd24ucHJldmVudD1cIm9uTW91c2VEb3duKHRydWUpXCJcbiAgICAgICAgKVxuICAgICAgICBzbG90KG5hbWU9XCJhZnRlclwiKVxuICB0ZW1wbGF0ZSgjcG9wdXApXG4gICAgLmRpdG8tdGltZS1waWNrZXItcG9wdXBcbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItaG91cihyZWY9XCJob3VyXCIpXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDI0XCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZEhvdXIoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IGhvdXIgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiaG91ciA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1taW51dGUocmVmPVwibWludXRlXCIpXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZE1pbnV0ZShpbmRleCAtIDEpXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogbWludXRlID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cIm1pbnV0ZSA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1zZWNvbmQocmVmPVwic2Vjb25kXCIpXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZFNlY29uZChpbmRleCAtIDEpXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogc2Vjb25kID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlY29uZCA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGZvcm1hdCwgZGVmYXVsdEZvcm1hdHMgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IFRyaWdnZXIgZnJvbSAnLi9UcmlnZ2VyLnZ1ZSdcbmltcG9ydCBJbnB1dEZpZWxkIGZyb20gJy4vSW5wdXRGaWVsZC52dWUnXG5pbXBvcnQgSWNvbiBmcm9tICcuL0ljb24udnVlJ1xuaW1wb3J0IHsgYWx0ZXJEYXRlLCBwYXJzZURhdGUsIGdldERhdGVQYXJ0QXRQb3NpdGlvbiB9IGZyb20gJy4uL3V0aWxzL2RhdGUuanMnXG5pbXBvcnQgeyBnZXRTZWxlY3Rpb24sIHNldFNlbGVjdGlvbiB9IGZyb20gJy4uL3V0aWxzL3NlbGVjdGlvbi5qcydcbmltcG9ydCB7IGdldEtleU5hdmlnYXRpb24gfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcbmltcG9ydCB7IGdldFRhcmdldCB9IGZyb20gJy4uL3V0aWxzL3RyaWdnZXIuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBJbnB1dEZpZWxkLCBJY29uIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ3VwZGF0ZTpzaG93JywgJ2NoYW5nZScsICdmb2N1cycsICdibHVyJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20tbGVmdCcgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiAndHJpZ2dlcicgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiAoKSA9PiAoe1xuICAgICAgICB0aW1lOiBkZWZhdWx0Rm9ybWF0cy50aW1lLFxuICAgICAgICBkYXRlOiBmYWxzZVxuICAgICAgfSlcbiAgICB9LFxuICAgIGRpc2FibGVkSG91cjogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZE1pbnV0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZFNlY29uZDogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgaWdub3JlTmV4dENoYW5nZTogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd1BvcHVwXG4gICAgfSxcblxuICAgIGlucHV0KCkge1xuICAgICAgcmV0dXJuIGdldFRhcmdldCh0aGlzKT8ucXVlcnlTZWxlY3RvcignaW5wdXQnKVxuICAgIH0sXG5cbiAgICBmb3JtYXRPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgLi4udGhpcy5mb3JtYXRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKSB8fCAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBwYXJzZURhdGUodmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucylcbiAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50RGF0ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlIHx8XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBEYXRlKCkgb2JqZWN0IHdpdGggdGhlIHRpbWUgc2V0IHRvIDAsIHRvIGJlIHVzZWQgd2hlblxuICAgICAgICAvLyBmaXJzdCBzZXR0aW5nIGFueSBvZiB0aGUgdGltZXMsIGZvciBtZWFuaW5nZnVsIGRhdGVzIGluIGNhc2UgdGhlXG4gICAgICAgIC8vIG9iamVjdCBpcyBzaGFyZWQgd2l0aCBhIERhdGVQaWNrZXIsIGUuZy4gdGhyb3VnaCBEYXRlVGltZVBpY2tlci5cbiAgICAgICAgYWx0ZXJEYXRlKG5ldyBEYXRlKCksIHsgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAsIG1pbGxpc2Vjb25kOiAwIH0pXG4gICAgICApXG4gICAgfSxcblxuICAgIGhvdXI6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0SG91cnMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KGhvdXIpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgaG91ciB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtaW51dGU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0TWludXRlcygpXG4gICAgICB9LFxuXG4gICAgICBzZXQobWludXRlKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IG1pbnV0ZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWNvbmQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0U2Vjb25kcygpXG4gICAgICB9LFxuXG4gICAgICBzZXQoc2Vjb25kKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IHNlY29uZCB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgICAgdGhpcy5zY3JvbGxBbGwodHJ1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKHZhbHVlKSB7XG4gICAgICBpZiAoK3ZhbHVlICE9PSArdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdmFsdWUpXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbHVlKVxuICAgICAgICB0aGlzLnNjcm9sbEFsbCh0cnVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dCgpIHtcbiAgICAgIGNvbnN0IHsgaW5wdXQgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbihpbnB1dClcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5mb2N1c2VkICYmXG4gICAgICAgICF0aGlzLmlnbm9yZU5leHRDaGFuZ2UgJiZcbiAgICAgICAgc2VsZWN0aW9uLnN0YXJ0ID09PSBzZWxlY3Rpb24uZW5kXG4gICAgICApIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKGlucHV0LCBzZWxlY3Rpb24pKVxuICAgICAgfVxuICAgICAgdGhpcy5pZ25vcmVOZXh0Q2hhbmdlID0gZmFsc2VcbiAgICB9LFxuXG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8pIHtcbiAgICAgICAgdGhpcy5zY3JvbGxBbGwoZmFsc2UpXG4gICAgICB9XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBsZWZ0UGFkKHZhbHVlKSB7XG4gICAgICByZXR1cm4gKCcwJyArIHZhbHVlKS5zbGljZSgtMilcbiAgICB9LFxuXG4gICAgc2V0VGltZShvdmVycmlkZXMpIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gYWx0ZXJEYXRlKHRoaXMuY3VycmVudERhdGUsIHtcbiAgICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgICAgICBtaWxsaXNlY29uZDogMFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2Nyb2xsQWxsKHNtb290aCkge1xuICAgICAgY29uc3Qgc2Nyb2xsID0gKHJlZiwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4kcmVmc1tyZWZdXG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gKFxuICAgICAgICAgICAgdGFyZ2V0LnNjcm9sbEhlaWdodCAvXG4gICAgICAgICAgICAvLyBGaXJzdCBhbmQgbGFzdCBvbmUgYWRkIDMgdGltZXMgdGhlIG1hcmdpbi5cbiAgICAgICAgICAgICh0YXJnZXQuY2hpbGRFbGVtZW50Q291bnQgKyA2KVxuICAgICAgICAgIClcbiAgICAgICAgICBjb25zdCB0b3AgPSBNYXRoLnJvdW5kKHZhbHVlICogbGluZUhlaWdodClcbiAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguYWJzKHRhcmdldC5zY3JvbGxUb3AgLSB0b3ApXG4gICAgICAgICAgdGFyZ2V0LnNjcm9sbFRvKHtcbiAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgIGJlaGF2aW9yOiBzbW9vdGggJiYgZGlzdGFuY2UgPCAxMDAgPyAnc21vb3RoJyA6ICdhdXRvJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsKCdob3VyJywgdGhpcy5ob3VyKVxuICAgICAgICBzY3JvbGwoJ21pbnV0ZScsIHRoaXMubWludXRlKVxuICAgICAgICBzY3JvbGwoJ3NlY29uZCcsIHRoaXMuc2Vjb25kKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25Gb2N1cyhmb2N1cykge1xuICAgICAgdGhpcy5pbnB1dEZvY3VzZWQgPSBmb2N1c1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBmb2N1c1xuICAgIH0sXG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGNvbnN0IHsgaW5wdXQgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbihpbnB1dClcbiAgICAgIGNvbnN0IHsgdmVyOiBzdGVwLCBlbnRlciB9ID0gZ2V0S2V5TmF2aWdhdGlvbihldmVudClcbiAgICAgIGlmIChzdGVwIHx8IGVudGVyKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICAgICAgICBjb25zdCBnZXREYXRlUGFydCA9IHBvc2l0aW9uID0+XG4gICAgICAgICAgZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uKHRoaXMuY3VycmVudFRleHQsIHBvc2l0aW9uLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG5cbiAgICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgICBpZiAoIXRoaXMuc2hvd1BvcHVwKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeyBuYW1lLCBzdGFydCB9ID0gZ2V0RGF0ZVBhcnQoc2VsZWN0aW9uLnN0YXJ0KSB8fCB7fVxuICAgICAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW25hbWVdICsgc3RlcFxuICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMuJHJlZnNbbmFtZV0uY2hpbGRFbGVtZW50Q291bnRcbiAgICAgICAgICAgICAgdGhpc1tuYW1lXSA9XG4gICAgICAgICAgICAgICAgdmFsdWUgPCAwXG4gICAgICAgICAgICAgICAgICA/IHZhbHVlICsgY291bnRcbiAgICAgICAgICAgICAgICAgIDogdmFsdWUgPj0gY291bnRcbiAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZSAtIGNvdW50XG4gICAgICAgICAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgICAgICAgdGhpcy5pZ25vcmVOZXh0Q2hhbmdlID0gdHJ1ZVxuICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24oaW5wdXQsIGdldERhdGVQYXJ0KHN0YXJ0KSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5zdGFydCA9PT0gc2VsZWN0aW9uLmVuZCkge1xuICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSBpbnB1dFxuICAgICAgICBsZXQgcG9zID0gc2VsZWN0aW9uLnN0YXJ0XG5cbiAgICAgICAgY29uc3QgaXNEaWdpdCA9IGNoYXIgPT4gIWlzTmFOKHBhcnNlSW50KGNoYXIsIDEwKSlcblxuICAgICAgICBpZiAoZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGlmIChpc0RpZ2l0KGV2ZW50LmtleSkgJiYgcG9zIDwgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHZhbHVlW3Bvc10gPT09ICc6JyAmJlxuICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3BvcyAtIDFdKSAmJlxuICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3BvcyAtIDJdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHBvcysrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZW1vdmUgbmV4dCBkaWdpdCBzbyB0aGUgZXZlbnQgb3ZlcnJpZGVzIGl0IGluc3RlYWQgb2YgaW5zZXJ0aW5nXG4gICAgICAgICAgICAvLyBuZXcgY2hhcnMuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zXSkgJiYgKFxuICAgICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zICsgMV0pIHx8XG4gICAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3MgLSAxXSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gKFxuICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKDAsIHBvcykgK1xuICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKHBvcyArIDEpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCB7IHN0YXJ0OiBwb3MsIGVuZDogcG9zIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKS5sZW5ndGhcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IGxlbmd0aCkge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IGxlbmd0aCkge1xuICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIGxlbmd0aClcbiAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCBzZWxlY3Rpb24pXG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBvcyA9PT0gMSB8fFxuICAgICAgICAgICAgWycgJywgJzonXS5pbmNsdWRlcyh2YWx1ZVtwb3MgLSAyXSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcG9zID09PSB2YWx1ZS5sZW5ndGggfHxcbiAgICAgICAgICAgICAgdmFsdWVbcG9zXSA9PT0gJzonXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcG9zLS1cbiAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSAoXG4gICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoMCwgcG9zKSArXG4gICAgICAgICAgICAgICAgKCh2YWx1ZVtwb3MgLSAxXSA/PyAnJykgKyAnMDAnKSArXG4gICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UocG9zICsgMSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzZXRTZWxlY3Rpb24oaW5wdXQsIHsgc3RhcnQ6IHBvcywgZW5kOiBwb3MgfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zXSkgJiZcbiAgICAgICAgICAgICAgIWlzRGlnaXQoK3ZhbHVlW3BvcyArIDFdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIFdoZW4gcmVtb3ZpbmcgdGhlIGZpcnN0IG9mIHR3byBkaWdpdHMsIHJlcGxhY2Ugd2l0aCAwXG4gICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgcG9zKSArICcwJyArIHZhbHVlLnNsaWNlKHBvcylcbiAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCB7IHN0YXJ0OiBwb3MsIGVuZDogcG9zIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uTW91c2VEb3duKHRvZ2dsZSkge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSAhdGhpcy5kaXNhYmxlZCAmJiAoIXRvZ2dsZSB8fCAhdGhpcy5zaG93UG9wdXApXG4gICAgICBpZiAodGhpcy5zaG93UG9wdXApIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdGltZS1waWNrZXIge1xuICAuZGl0by1pbnB1dCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWluLXdpZHRoOiA2ZW07XG4gIH1cbn1cblxuLmRpdG8tdGltZS1waWNrZXItcG9wdXAge1xuICBtYXgtd2lkdGg6IDE2MHB4O1xuICBtYXJnaW46ICRwb3B1cC1tYXJnaW47XG59XG5cbiR0aW1lLXBpY2tlci1saW5lLWhlaWdodDogMjRweDtcblxuLmRpdG8tdGltZS1waWNrZXIge1xuICAuZGl0by1pbnB1dCB7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuXG4uZGl0by10aW1lLXBpY2tlci1wb3B1cCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5kaXRvLXRpbWUtcGlja2VyLXBvcHVwIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgYm9yZGVyLXdpZHRoOiAwIDFweCAwO1xuICBtYXJnaW4tbGVmdDogLTFweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgd2lkdGg6IGNhbGMoMTAwJSAvIDMgKyAxcHgpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICY6bGFzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICB9XG5cbiAgdWwge1xuICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiAwO1xuICAgIC8vIEhpZGUgc2Nyb2xsYmFyOlxuICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgIHBhZGRpbmc6IDAgMTdweCAwIDA7XG4gICAgaGVpZ2h0OiA3ICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuXG4gICAgJiA+IGxpIHtcbiAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6ICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDMgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDMgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0O1xuICAgICAgfVxuXG4gICAgICAmLnNlbGVjdGVkLFxuICAgICAgJi5zZWxlY3RlZDpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIH1cblxuICAgICAgJi5kaXNhYmxlZCB7XG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZDtcbiAgICAgIH1cblxuICAgICAgJi5kaXNhYmxlZDpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1kYXRlLXRpbWUtcGlja2VyKHJlZj1cInBpY2tlclwiKVxuICAuZGl0by1kYXRlLXRpbWUtcGlja2VyX19pbm5lcig6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogZm9jdXNlZCB9XCIpXG4gICAgSW5wdXRGaWVsZC5kaXRvLWRhdGUtdGltZS1waWNrZXJfX2lucHV0KFxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRUZXh0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIlxuICAgICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQsIC4uLiRhdHRycyB9XCJcbiAgICAgIEBmb2N1cz1cIm9uRm9jdXModHJ1ZSlcIlxuICAgICAgQGJsdXI9XCJvbkZvY3VzKGZhbHNlKVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvbk1vdXNlRG93bihmYWxzZSlcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCNiZWZvcmUpXG4gICAgICAgIHNsb3QobmFtZT1cImJlZm9yZVwiKVxuICAgICAgdGVtcGxhdGUoI2FmdGVyKVxuICAgICAgICBJY29uKFxuICAgICAgICAgIG5hbWU9XCJjYWxlbmRhclwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIEBtb3VzZWRvd24ucHJldmVudD1cIm9uTW91c2VEb3duKHRydWUpXCJcbiAgICAgICAgKVxuICAgICAgICBzbG90KG5hbWU9XCJhZnRlclwiKVxuICAgIERhdGVQaWNrZXIoXG4gICAgICByZWY9XCJkYXRlXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1tb2RlbDpzaG93PVwic2hvd0RhdGVcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICAgICAgLy8tIEludGVudGlvbmFsbHkgZW1wdHlcbiAgICBUaW1lUGlja2VyKFxuICAgICAgcmVmPVwidGltZVwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtbW9kZWw6c2hvdz1cInNob3dUaW1lXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXG4gICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgICAgICAvLy0gSW50ZW50aW9uYWxseSBlbXB0eVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGZvcm1hdCwgZGVmYXVsdEZvcm1hdHMsIGFzc2lnbkRlZXBseSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQudnVlJ1xuaW1wb3J0IERhdGVQaWNrZXIgZnJvbSAnLi9EYXRlUGlja2VyLnZ1ZSdcbmltcG9ydCBUaW1lUGlja2VyIGZyb20gJy4vVGltZVBpY2tlci52dWUnXG5pbXBvcnQgSWNvbiBmcm9tICcuL0ljb24udnVlJ1xuaW1wb3J0IHsgcGFyc2VEYXRlIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcbmltcG9ydCB7IGdldFNlbGVjdGlvbiwgc2V0U2VsZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0aW9uLmpzJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCwgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgSWNvbiB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICdjaGFuZ2UnLCAnZm9jdXMnLCAnYmx1ciddLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBmb3JtYXQ6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZSxcbiAgICAgIHNob3dEYXRlOiBmYWxzZSxcbiAgICAgIHNob3dUaW1lOiBmYWxzZSxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICBkYXRlRm9jdXNlZDogZmFsc2UsXG4gICAgICB0aW1lRm9jdXNlZDogZmFsc2UsXG4gICAgICBjbG9zZWRNb2RlOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgdHJhbnNpdGlvbiwgZGlzYWJsZWQsIGxvY2FsZSwgZm9ybWF0T3B0aW9uczogZm9ybWF0IH0gPSB0aGlzXG4gICAgICByZXR1cm4geyB0cmFuc2l0aW9uLCBkaXNhYmxlZCwgbG9jYWxlLCBmb3JtYXQgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd0RhdGUgfHwgdGhpcy5zaG93VGltZVxuICAgIH0sXG5cbiAgICBpbnB1dCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLmlucHV0LmlucHV0XG4gICAgfSxcblxuICAgIGZvcm1hdE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gYXNzaWduRGVlcGx5KFxuICAgICAgICB7XG4gICAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgICB0aW1lOiBkZWZhdWx0Rm9ybWF0cy50aW1lLFxuICAgICAgICAgIGRhdGU6IGRlZmF1bHRGb3JtYXRzLmRhdGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgIG1vbnRoOiAnc2hvcnQnLFxuICAgICAgICAgICAgZm9ybWF0OiAodmFsdWUsIHR5cGUsIG9wdGlvbnMpID0+XG4gICAgICAgICAgICAgIHR5cGUgPT09ICdsaXRlcmFsJyAmJiAvXFxiYXRcXGIvLnRlc3QodmFsdWUpXG4gICAgICAgICAgICAgICAgPyAnLCAnXG4gICAgICAgICAgICAgICAgOiB0aGlzLmZvcm1hdD8uZGF0ZT8uZm9ybWF0Py4odmFsdWUsIHR5cGUsIG9wdGlvbnMpID8/IHZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB0aGlzLmZvcm1hdFxuICAgICAgKVxuICAgIH0sXG5cbiAgICB0aW1lSW5kZXgoKSB7XG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy5jdXJyZW50VGV4dFxuICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgY29uc3QgdGltZSA9IHRleHQubWF0Y2goLyhbXFxTXStcXHMqKSQvKT8uWzFdXG4gICAgICAgIGlmICh0aW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHRleHQubGVuZ3RoIC0gdGltZS5sZW5ndGhcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKSB8fCAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBwYXJzZURhdGUodmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucylcbiAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBnZXRTZWxlY3Rpb24odGhpcy5pbnB1dClcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24odGhpcy5pbnB1dCwgc2VsZWN0aW9uKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKHZhbHVlKSB7XG4gICAgICBpZiAoK3ZhbHVlICE9PSArdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdmFsdWUpXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQodG8gPyAnZm9jdXMnIDogJ2JsdXInKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25Gb2N1cyhmb2N1cykge1xuICAgICAgdGhpcy5pbnB1dEZvY3VzZWQgPSBmb2N1c1xuICAgICAgaWYgKGZvY3VzKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUG9wdXBzKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd0RhdGUgPSBmYWxzZVxuICAgICAgICB0aGlzLnNob3dUaW1lID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Nb3VzZURvd24odG9nZ2xlKSB7XG4gICAgICBpZiAodG9nZ2xlICYmICh0aGlzLnNob3dEYXRlIHx8IHRoaXMuc2hvd1RpbWUpKSB7XG4gICAgICAgIHRoaXMuc2hvd0RhdGUgPSBmYWxzZVxuICAgICAgICB0aGlzLnNob3dUaW1lID0gZmFsc2VcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLnVwZGF0ZVBvcHVwcygpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLmdldE1vZGUoZXZlbnQpXG4gICAgICB0aGlzLiRyZWZzW21vZGVdLm9uS2V5RG93bihldmVudClcbiAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgIHRoaXMuY2xvc2VkTW9kZSA9IG1vZGVcbiAgICAgIH0gZWxzZSBpZiAobW9kZSAhPT0gdGhpcy5jbG9zZWRNb2RlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUG9wdXBzKG1vZGUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldE1vZGUoZXZlbnQgPSBudWxsKSB7XG4gICAgICBjb25zdCB7IHN0YXJ0IH0gPSBnZXRTZWxlY3Rpb24odGhpcy5pbnB1dClcbiAgICAgIGNvbnN0IHsgaG9yOiBzdGVwIH0gPSBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgcmV0dXJuIHRoaXMudGltZUluZGV4ID09PSBudWxsIHx8IHN0YXJ0ICsgc3RlcCA8IHRoaXMudGltZUluZGV4XG4gICAgICAgID8gJ2RhdGUnXG4gICAgICAgIDogJ3RpbWUnXG4gICAgfSxcblxuICAgIHVwZGF0ZVBvcHVwcyhtb2RlID0gdGhpcy5nZXRNb2RlKCkpIHtcbiAgICAgIGlmIChtb2RlKSB7XG4gICAgICAgIHRoaXMuY2xvc2VkTW9kZSA9IG51bGxcbiAgICAgIH1cbiAgICAgIHRoaXMuc2hvd0RhdGUgPSBtb2RlID09PSAnZGF0ZSdcbiAgICAgIHRoaXMuc2hvd1RpbWUgPSBtb2RlID09PSAndGltZSdcbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kYXRlLXRpbWUtcGlja2VyIHtcbiAgJl9faW5uZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gIH1cblxuICAmX19pbnB1dCB7XG4gICAgZmxleDogMTtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIG1pbi13aWR0aDogMTJlbTtcbiAgfVxuXG4gIC5kaXRvLWRhdGUtcGlja2VyLFxuICAuZGl0by10aW1lLXBpY2tlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPCEtLSBlc2xpbnQtZGlzYWJsZSB2dWUvbm8tdGVtcGxhdGUtc2hhZG93IC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhZ2luYXRpb25cbiAgLmRpdG8tcGFnaW5hdGlvbi10b3RhbChcbiAgICB2LWlmPVwic2hvd1RvdGFsXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1pZj1cInRvdGFsID4gMFwiXG4gICAgKSB7eyBmaXJzdCB9fSDigJMge3sgbGFzdCB9fSAvIHt7IHRvdGFsIH19XG4gIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICAgIHYtaWY9XCJudW1QYWdlcyA+IDFcIlxuICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdi1mb3I9XCJidXR0b24gaW4gYnV0dG9uc1wiXG4gICAgICA6Y2xhc3M9XCJnZXRCdXR0b25DbGFzc2VzKGJ1dHRvbilcIlxuICAgICAgOmRpc2FibGVkPVwiYnV0dG9uLmRpc2FibGVkXCJcbiAgICAgIEBjbGljaz1cIm9uQ2xpY2tCdXR0b24oYnV0dG9uKVwiXG4gICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1pZj1cImJ1dHRvbi50ZXh0XCJcbiAgICAgICkge3sgYnV0dG9uLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTpwYWdlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBwYWdlOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMSB9LFxuICAgIHBhZ2VTaXplOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMTAgfSxcbiAgICBzaG93VG90YWw6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1ByZXY6IHRydWUsXG4gICAgICBzaG93TmV4dDogdHJ1ZSxcbiAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLnBhZ2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmaXJzdCgpIHtcbiAgICAgIHJldHVybiAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZSArIDFcbiAgICB9LFxuXG4gICAgbGFzdCgpIHtcbiAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLmZpcnN0ICsgdGhpcy5wYWdlU2l6ZSAtIDEsIHRoaXMudG90YWwpXG4gICAgfSxcblxuICAgIG51bVBhZ2VzKCkge1xuICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLnRvdGFsIC8gdGhpcy5wYWdlU2l6ZSlcbiAgICB9LFxuXG4gICAgYnV0dG9ucygpIHtcbiAgICAgIGNvbnN0IHsgc2hvd1ByZXYsIHNob3dOZXh0LCBjdXJyZW50UGFnZSwgbnVtUGFnZXMgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHNob3dMZW5ndGggPSBzaG93UHJldiArIHNob3dOZXh0ICsgMVxuXG4gICAgICBsZXQgc3RhcnQgPSAxXG4gICAgICBsZXQgZW5kID0gMVxuICAgICAgaWYgKG51bVBhZ2VzIDw9IHNob3dMZW5ndGgpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPD0gc2hvd1ByZXYgKyAxKSB7XG4gICAgICAgIGVuZCA9IHNob3dMZW5ndGhcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPj0gbnVtUGFnZXMgLSBzaG93TmV4dCkge1xuICAgICAgICBlbmQgPSBudW1QYWdlc1xuICAgICAgICBzdGFydCA9IG51bVBhZ2VzIC0gc2hvd0xlbmd0aCArIDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0ID0gY3VycmVudFBhZ2UgLSBzaG93UHJldlxuICAgICAgICBlbmQgPSBjdXJyZW50UGFnZSArIHNob3dOZXh0XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJ1dHRvbnMgPSBbXVxuICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgaW5kZXg6IGN1cnJlbnRQYWdlIC0gMSxcbiAgICAgICAgdHlwZTogJ3ByZXYnLFxuICAgICAgICBkaXNhYmxlZDogY3VycmVudFBhZ2UgPD0gMVxuICAgICAgfSlcbiAgICAgIGlmIChzdGFydCA+PSAyKSB7XG4gICAgICAgIGJ1dHRvbnMucHVzaCh7IGluZGV4OiAxLCB0ZXh0OiAxIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3RhcnQgPiAyKSB7XG4gICAgICAgIGJ1dHRvbnMucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWF4KDEsIGN1cnJlbnRQYWdlIC0gMTApLFxuICAgICAgICAgIHR5cGU6ICdlbGxpcHNpcy1wcmV2J1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgIGJ1dHRvbnMucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICBhY3RpdmU6IGkgPT09IGN1cnJlbnRQYWdlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoZW5kIDwgbnVtUGFnZXMgLSAxKSB7XG4gICAgICAgIGJ1dHRvbnMucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWluKG51bVBhZ2VzLCBjdXJyZW50UGFnZSArIDEwKSxcbiAgICAgICAgICB0eXBlOiAnZWxsaXBzaXMtbmV4dCdcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPD0gbnVtUGFnZXMgLSAxKSB7XG4gICAgICAgIGJ1dHRvbnMucHVzaCh7IGluZGV4OiBudW1QYWdlcywgdGV4dDogbnVtUGFnZXMgfSlcbiAgICAgIH1cbiAgICAgIGJ1dHRvbnMucHVzaCh7XG4gICAgICAgIGluZGV4OiBjdXJyZW50UGFnZSArIDEsXG4gICAgICAgIHR5cGU6ICduZXh0JyxcbiAgICAgICAgZGlzYWJsZWQ6IGN1cnJlbnRQYWdlID49IG51bVBhZ2VzXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gYnV0dG9uc1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHBhZ2UocGFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2VcbiAgICB9LFxuXG4gICAgcGFnZVNpemUoKSB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IHRoaXMubnVtUGFnZXMpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMubnVtUGFnZXNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFBhZ2UodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byAhPT0gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6cGFnZScsIHRvKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0QnV0dG9uQ2xhc3NlcyhidXR0b24pIHtcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSB7XG4gICAgICAgICdkaXRvLXNlbGVjdGVkJzogYnV0dG9uLmFjdGl2ZVxuICAgICAgfVxuICAgICAgaWYgKGJ1dHRvbi50eXBlKSB7XG4gICAgICAgIGNsYXNzZXNbYGRpdG8tYnV0dG9uLSR7YnV0dG9uLnR5cGV9YF0gPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3Nlc1xuICAgIH0sXG5cbiAgICBvbkNsaWNrQnV0dG9uKGJ1dHRvbikge1xuICAgICAgaWYgKFxuICAgICAgICBidXR0b24uaW5kZXggJiZcbiAgICAgICAgIWJ1dHRvbi5kaXNhYmxlZCAmJlxuICAgICAgICBidXR0b24uaW5kZXggIT09IHRoaXMuY3VycmVudFBhZ2VcbiAgICAgICkge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gYnV0dG9uLmluZGV4XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYWdpbmF0aW9uIHtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsIHtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgIG1hcmdpbjogMCAwLjVlbTtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbiB7XG4gICAgdHJhbnNpdGlvbjpcbiAgICAgIGFsbCAwLjNzIGVhc2UsXG4gICAgICBjb2xvciAwcyxcbiAgICAgIGJhY2tncm91bmQgMHMsXG4gICAgICBib3JkZXIgMHM7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICBwYWRkaW5nOiAwIDAuNWVtO1xuXG4gICAgJi1wcmV2LFxuICAgICYtbmV4dCB7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWFycm93O1xuICAgICAgfVxuICAgIH1cblxuICAgICYtcHJldjo6YmVmb3JlIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbiAgICB9XG5cbiAgICAmLWVsbGlwc2lzLXByZXYsXG4gICAgJi1lbGxpcHNpcy1uZXh0IHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIEBleHRlbmQgJWljb24tZWxsaXBzaXM7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXI6OmJlZm9yZSB7XG4gICAgICAgIEBleHRlbmQgJWljb24tY2hldnJvbnM7XG4gICAgICB9XG5cbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgICB9XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLWVsbGlwc2lzLXByZXY6OmJlZm9yZSB7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXN3aXRjaChcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIDpzdHlsZT1cInN0eWxlc1wiXG4pXG4gIC5kaXRvLXN3aXRjaC1wYW5lXG4gICAgaW5wdXQoXG4gICAgICA6aWQ9XCJpZFwiXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtbW9kZWw9XCJjaGVja2VkXCJcbiAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICA6bmFtZT1cIm5hbWVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgc3Bhbi5kaXRvLXN3aXRjaC1sYWJlbChcbiAgICAgIHYtaWY9XCJsYWJlbHNcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJjaGVja2VkXCJcbiAgICAgICAgbmFtZT1cImNoZWNrZWRcIlxuICAgICAgKSB7eyBsYWJlbHMuY2hlY2tlZCB8fCAnb24nIH19XG4gICAgICBzbG90KFxuICAgICAgICB2LWVsc2VcbiAgICAgICAgbmFtZT1cInVuY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy51bmNoZWNrZWQgfHwgJ29mZicgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ2NoYW5nZSddLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGlkOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbHM6IHsgdHlwZTogW09iamVjdCwgQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjaGVja2VkOiB0aGlzLm1vZGVsVmFsdWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy4kYXR0cnMuY2xhc3MsXG4gICAgICAgIHtcbiAgICAgICAgICAnZGl0by1jaGVja2VkJzogdGhpcy5jaGVja2VkLFxuICAgICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5kaXNhYmxlZFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWxzOiB7IGNoZWNrZWQsIHVuY2hlY2tlZCB9ID0ge30gfSA9IHRoaXNcbiAgICAgIC8vIENhbGN1bGF0ZSBgLS1zd2l0Y2gtd2lkdGhgIGluIGByZW1gLCBiYXNlZCBvbiBsYWJlbCBsZW5ndGguXG4gICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1heCgwLCBjaGVja2VkPy5sZW5ndGgsIHVuY2hlY2tlZD8ubGVuZ3RoKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJy0tc3dpdGNoLXdpZHRoJzogbGVuZ3RoID8gYCR7bGVuZ3RoICogMS41fXJlbWAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzOiBfLCAuLi5hdHRyaWJ1dGVzIH0gPSB0aGlzLiRhdHRyc1xuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKG1vZGVsVmFsdWUpIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IG1vZGVsVmFsdWVcbiAgICB9LFxuXG4gICAgY2hlY2tlZChjaGVja2VkKSB7XG4gICAgICBpZiAoY2hlY2tlZCAhPT0gdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgY2hlY2tlZClcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgY2hlY2tlZClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zd2l0Y2gge1xuICAvLyBVc2Ugd2hvbGUgbXVsdGlwbGVzIG9mIGByZW1gIGZvciBzaXplcyBhbmQgYHB4YCBtYXJnaW5zL3BhZGRpbmcgYWxvbmdcbiAgLy8gd2l0aCBgY2FsYygpYCB0byBlbmQgdXAgd2l0aCBldmVuIHBpeGVsIHNpemVzLlxuICAtLXN3aXRjaC13aWR0aDogNGVtO1xuICAtLXN3aXRjaC1oZWlnaHQ6IDJlbTtcbiAgLS1zd2l0Y2gtbWFyZ2luOiAycHg7XG4gIC0tc3dpdGNoLXBhZGRpbmc6IDNweDtcbiAgLS1zd2l0Y2gtc3BlZWQ6IDMwMG1zO1xuICAtLWxhYmVsLW1hcmdpbjogMC41ZW07XG4gIC0td2lkdGg6IGNhbGModmFyKC0tc3dpdGNoLXdpZHRoKSAtIDIgKiB2YXIoLS1zd2l0Y2gtbWFyZ2luKSk7XG4gIC0taGVpZ2h0OiBjYWxjKHZhcigtLXN3aXRjaC1oZWlnaHQpIC0gMiAqIHZhcigtLXN3aXRjaC1tYXJnaW4pKTtcbiAgLS1vZmZzZXQ6IGNhbGModmFyKC0td2lkdGgpIC0gdmFyKC0taGVpZ2h0KSk7XG5cbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogdmFyKC0tc3dpdGNoLWhlaWdodCk7XG4gIC8vIFRvIG1ha2UgaW5saW5lIGxhYmVscyBhcHBlYXIgb24gY29uc2lzdGVudCBiYXNlbGluZTpcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgLmRpdG8tc3dpdGNoLXBhbmUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogdmFyKC0td2lkdGgpO1xuICAgIGhlaWdodDogdmFyKC0taGVpZ2h0KTtcbiAgfVxuXG4gIC5kaXRvLXN3aXRjaC1wYW5lLFxuICAuZGl0by1zd2l0Y2gtbGFiZWwge1xuICAgIHRvcDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgfVxuXG4gIGlucHV0IHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYm9yZGVyLXJhZGl1czogMWVtO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodDtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgYm9yZGVyLWNvbG9yIDAuM3MsXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XG4gIH1cblxuICAuZGl0by1zd2l0Y2gtYnV0dG9uIHtcbiAgICAtLXNpemU6IGNhbGModmFyKC0taGVpZ2h0KSAtIDIgKiB2YXIoLS1zd2l0Y2gtcGFkZGluZykpO1xuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogdmFyKC0tc3dpdGNoLXBhZGRpbmcpO1xuICAgIGxlZnQ6IHZhcigtLXN3aXRjaC1wYWRkaW5nKTtcbiAgICB3aWR0aDogdmFyKC0tc2l6ZSk7XG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplKTtcbiAgICBib3JkZXItcmFkaXVzOiBjYWxjKHZhcigtLXNpemUpIC8gMik7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLXN3aXRjaC1zcGVlZCk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLWJ1dHRvbixcbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuXG4gIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiB2YXIoLS1sYWJlbC1tYXJnaW4pO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgfVxuXG4gICYuZGl0by1jaGVja2VkIHtcbiAgICBpbnB1dCB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cblxuICAgIC5kaXRvLXN3aXRjaC1idXR0b24ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHZhcigtLW9mZnNldCkpO1xuICAgIH1cblxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgICBsZWZ0OiB2YXIoLS1sYWJlbC1tYXJnaW4pO1xuICAgICAgcmlnaHQ6IHVuc2V0O1xuICAgIH1cbiAgfVxuXG4gICYuZGl0by1kaXNhYmxlZCB7XG4gICAgQGV4dGVuZCAlYnV0dG9uLWRpc2FibGVkO1xuICB9XG5cbiAgJjpmb2N1cy13aXRoaW46bm90KDpob3Zlcikge1xuICAgIC5kaXRvLXN3aXRjaC1idXR0b24ge1xuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy1mb2N1cztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IHsgaCBhcyBjcmVhdGVFbGVtZW50LCBUcmFuc2l0aW9uIH0gZnJvbSAndnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZnVuY3Rpb24gVHJhbnNpdGlvbkhlaWdodCh7IGVuYWJsZWQgfSwgeyBzbG90cyB9KSB7XG4gIHJldHVybiBlbmFibGVkXG4gICAgPyBjcmVhdGVFbGVtZW50KFRyYW5zaXRpb24sIHByb3BzLCBzbG90cylcbiAgICA6IHNsb3RzLmRlZmF1bHQoKVxufVxuXG5UcmFuc2l0aW9uSGVpZ2h0LnByb3BzID0ge1xuICBlbmFibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUcmFuc2l0aW9uSGVpZ2h0XG5cbmNvbnN0IHNldFN0eWxlID0gKGVsZW1lbnQsIHN0eWxlKSA9PiBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKVxuXG5jb25zdCBuZXh0VGltZW91dCA9IGNhbGxiYWNrID0+IHNldFRpbWVvdXQoY2FsbGJhY2ssIDApXG5cbi8vIEZvcmNlIHJlcGFpbnQgdG8gbWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgdHJpZ2dlcmVkIGNvcnJlY3RseS5cbmNvbnN0IGZvcmNlUmVwYWludCA9IGVsZW1lbnQgPT4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHRcblxuY29uc3QgcHJvcHMgPSB7XG4gIG5hbWU6ICdkaXRvLWhlaWdodCcsXG5cbiAgb25BZnRlckVudGVyKGVsZW1lbnQpIHtcbiAgICAvLyBBIHRpbWVvdXQgYmVmb3JlIHNldHRpbmcgc3R5bGUgaXMgb25seSByZWFsbHkgbmVlZGVkIGFmdGVyIGNhbGxzIHRvXG4gICAgLy8gYGZvcmNlUmVwYWludCgpYCwgYnV0IHVzaW5nIG9uZSBoZXJlIHRvbyBwcmVzZXJ2ZXMgZXhlY3V0aW9uIHNlcXVlbmNlIHNvXG4gICAgLy8gdGhhdCB0aGUgY2FsbCBmcm9tIGBlbnRlcigpYCBjYW4gbmV2ZXIgb3V0cnVuIHRoZSBvbmUgZnJvbSBgYWZ0ZXJFbnRlcigpYFxuICAgIG5leHRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiBudWxsIH0pKVxuICB9LFxuXG4gIG9uRW50ZXIoZWxlbWVudCkge1xuICAgIC8vIEZvciBzb21lIHJlYXNvbiB3ZSdyZSBnZXR0aW5nIHR3byBgb25FbnRlcigpYCBjYWxscyBwZXIgdHJhbnNpdGlvbixcbiAgICAvLyBzbyB3ZSBuZWVkIHRvIGlnbm9yZSB0aGUgc2Vjb25kIG9uZS4gVGhpcyBtaWdodCBiZSBsaW5rZWQgdG8gdGhlIHVzZVxuICAgIC8vIG9mIGBuZXh0VGltZW91dCgpYCwgd2hpY2ggaXMgcmVxdWlyZWQgdG8gZ2V0IHRoZSBjb3JyZWN0IHZhbHVlIGZvclxuICAgIC8vIGBoZWlnaHRgLCBiYXNlZCBvbiBgJi0tbGFiZWwtdmVydGljYWxgIGNhbGN1bGF0aW9ucy5cbiAgICBjb25zdCB7IHdpZHRoIH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwge1xuICAgICAgd2lkdGgsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgICAgaGVpZ2h0OiAnYXV0bydcbiAgICB9KVxuICAgIG5leHRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgICBzZXRTdHlsZShlbGVtZW50LCB7XG4gICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICBwb3NpdGlvbjogbnVsbCxcbiAgICAgICAgdmlzaWJpbGl0eTogbnVsbCxcbiAgICAgICAgaGVpZ2h0OiAwXG4gICAgICB9KVxuICAgICAgZm9yY2VSZXBhaW50KGVsZW1lbnQpXG4gICAgICBuZXh0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodCB9KSlcbiAgICB9KVxuICB9LFxuXG4gIG9uTGVhdmUoZWxlbWVudCkge1xuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBuZXh0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodDogMCB9KSlcbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuJGR1cmF0aW9uOiAwLjE1cztcblxuLmRpdG8taGVpZ2h0LWVudGVyLWFjdGl2ZSxcbi5kaXRvLWhlaWdodC1sZWF2ZS1hY3RpdmUge1xuICB0cmFuc2l0aW9uOiBoZWlnaHQgJGR1cmF0aW9uICRlYXNlLW91dC1xdWFydDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmRpdG8taGVpZ2h0LWVudGVyLWFjdGl2ZSB7XG4gIGFuaW1hdGlvbjogZGl0by1zbGlkZS1lbnRlciAkZHVyYXRpb24gJGVhc2Utb3V0LXF1YXJ0O1xufVxuXG4uZGl0by1oZWlnaHQtbGVhdmUtYWN0aXZlIHtcbiAgYW5pbWF0aW9uOiBkaXRvLXNsaWRlLWxlYXZlICRkdXJhdGlvbiAkZWFzZS1vdXQtcXVhcnQ7XG59XG5cbi5kaXRvLWhlaWdodC1lbnRlci1mcm9tLFxuLmRpdG8taGVpZ2h0LWxlYXZlLXRvIHtcbiAgaGVpZ2h0OiAwO1xufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IHVzZVNsb3RzLCBDb21tZW50IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgaXNTdHJpbmcsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzVk5vZGVDb250ZW50KHZub2RlKSB7XG4gIHJldHVybiB2bm9kZSAmJiBhc0FycmF5KHZub2RlKS5zb21lKHZub2RlID0+IHZub2RlLnR5cGUgIT09IENvbW1lbnQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNTbG90Q29udGVudChzbG90LCBwcm9wcyA9IHt9KSB7XG4gIHNsb3QgPSBpc1N0cmluZyhzbG90KSA/IHVzZVNsb3RzKClbc2xvdF0gOiBzbG90XG4gIHJldHVybiBoYXNWTm9kZUNvbnRlbnQoc2xvdD8uKHByb3BzKSlcbn1cbiIsImltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkb21IYW5kbGVyczogW11cbiAgICB9XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIGZvciAoY29uc3QgeyByZW1vdmUgfSBvZiB0aGlzLmRvbUhhbmRsZXJzKSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgICB0aGlzLmRvbUhhbmRsZXJzID0gW11cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZG9tT24oZWxlbWVudCwgdHlwZSwgaGFuZGxlcikge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYWRkRXZlbnRzKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBpc09iamVjdCh0eXBlKSA/IHR5cGUgOiB7IFt0eXBlXTogaGFuZGxlciB9XG4gICAgICApXG4gICAgICB0aGlzLmRvbUhhbmRsZXJzLnB1c2gocmVzdWx0KVxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b1VzZXIge1xuICBoYXNSb2xlKC4uLnJvbGVzKSB7XG4gICAgaWYgKHRoaXMucm9sZXMpIHtcbiAgICAgIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlcykge1xuICAgICAgICBpZiAodGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NoZW1hQ29tcG9uZW50czogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtYWluU2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50c1swXVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGBEaXRvU2NoZW1hLmNyZWF0ZWQoKS91bm1vdW50ZWQoKWAgb24gaXRzXG4gICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnRgLCBpZiB0aGUgcGFyZW50IHVzZXMgdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHNjaGVtYUNvbXBvbmVudCwgYWRkKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50cy5wdXNoKHNjaGVtYUNvbXBvbmVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMuc3BsaWNlKHNjaGVtYUNvbXBvbmVudHMuaW5kZXhPZihzY2hlbWFDb21wb25lbnQpLCAxKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFNjaGVtYVBhcmVudE1peGluIGZyb20gJy4vU2NoZW1hUGFyZW50TWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1NjaGVtYVBhcmVudE1peGluXSxcblxuICBjb21wdXRlZDoge1xuICAgIGVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZmxhdE1hcCgoeyBlcnJvcnMgfSkgPT4gZXJyb3JzIHx8IFtdKVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5zb21lKGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQudmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSkpXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52ZXJpZnlBbGwobWF0Y2gpKVxuICAgIH0sXG5cbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5yZXNldFZhbGlkYXRpb24oKSlcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5jbGVhckVycm9ycygpKVxuICAgIH0sXG5cbiAgICBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChcbiAgICAgICAgaXQgPT4gaXQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cylcbiAgICAgIClcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRDb21tb25QcmVmaXggfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtWYWxpZGF0b3JNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbG9hZDogZmFsc2UsXG4gICAgICAvLyBFYWNoIHJvdXRlLWNvbXBvbmVudCBkZWZpbmVzIGEgc3RvcmUgdGhhdCBnZXRzIHBhc3NlZCBvbiB0byBpdHNcbiAgICAgIC8vIGNoaWxkIGNvbXBvbmVudHMsIHNvIHRoZXkgY2FuIHN0b3JlIHZhbHVlcyBpbiB0aGVtIHRoYXQgbGl2ZSBiZXlvbmRcbiAgICAgIC8vIHRoZWlyIGxpZmUtY3ljbGUuIFNlZTogRGl0b1BhbmUsIFNvdXJjZU1peGluXG4gICAgICBzdG9yZToge30sXG4gICAgICBsb2FkQ2FjaGU6IHt9IC8vIFNlZSBUeXBlTWl4aW4ubG9hZCgpXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyByb3V0ZUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcm91dGVMZXZlbCgpIHtcbiAgICAgIGxldCBsZXZlbCA9IDBcbiAgICAgIGxldCByb3V0ZUNvbXBvbmVudCA9IHRoaXNcbiAgICAgIHdoaWxlICgocm91dGVDb21wb25lbnQgPSByb3V0ZUNvbXBvbmVudC5wYXJlbnRDb21wb25lbnQucm91dGVDb21wb25lbnQpKSB7XG4gICAgICAgIGxldmVsKytcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZXZlbFxuICAgIH0sXG5cbiAgICByb3V0ZVJlY29yZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5tYXRjaGVkW3RoaXMucm91dGVMZXZlbF1cbiAgICB9LFxuXG4gICAgaXNMYXN0Um91dGUoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGlzIHJvdXRlciBjb21wb25lbnQgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSByb3V0ZS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkID09PSBtYXRjaGVkW21hdGNoZWQubGVuZ3RoIC0gMV1cbiAgICB9LFxuXG4gICAgaXNMYXN0VW5uZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHJvdXRlIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlIHRoYXRcbiAgICAgIC8vIG5lZWRzIGl0cyBvd24gcm91dGVyLXZpZXcgKD0gaXMgbm90IG5lc3RlZCkuXG4gICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlXG4gICAgICBmb3IgKGxldCBpID0gbWF0Y2hlZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBtYXRjaGVkW2ldXG4gICAgICAgIGlmICghcmVjb3JkLm1ldGEubmVzdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IHJlY29yZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgaXNOZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEubmVzdGVkXG4gICAgfSxcblxuICAgIGlzVmlldygpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQ/Lm1ldGFcbiAgICB9LFxuXG4gICAgcGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJvdXRlUGF0aCh0aGlzLnJvdXRlUmVjb3JkPy5wYXRoKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iKCkge1xuICAgICAgY29uc3QgeyBicmVhZGNydW1iIH0gPSB0aGlzLnNjaGVtYSB8fCB7fVxuICAgICAgcmV0dXJuIGJyZWFkY3J1bWIgfHwgYCR7dGhpcy5icmVhZGNydW1iUHJlZml4fSAke3RoaXMubGFiZWx9YFxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfSxcblxuICAgIHBhcmFtKCkge1xuICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdnVlLXJvdXRlciBub3QgYmVpbmcgYWJsZSB0byBtYXAgbXVsdGlwbGUgdXJsIHBhcmFtZXRlcnNcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgbmFtZSB0byBtdWx0aXBsZSBjb21wb25lbnRzLCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhcmFtc1t0aGlzLm1ldGE/LnBhcmFtXSB8fCBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZSwgc2VlIERpdG9Gb3JtXG4gICAgaXNNdXRhdGluZygpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVSb3V0ZVVwZGF0ZSh0bywgZnJvbSwgbmV4dCkge1xuICAgIHRoaXM/LmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlTGVhdmUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzPy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIEtlZXAgYSBzaGFyZWQgc3RhY2sgb2Ygcm9vdCBjb21wb25lbnRzIGZvciBEaXRvVHJhaWwgdG8gdXNlIHRvIHJlbmRlclxuICAgIC8vIGxhYmVscy4gQ2FuJ3QgcmVseSBvbiAkcm91dGUubWF0Y2hlZFtpXS5pbnN0YW5jZXMuZGVmYXVsdCB1bmZvcnR1bmF0ZWx5LFxuICAgIC8vIGFzIGluc3RhbmNlcyBhcmVuJ3QgaW1tZWRpYXRlbHkgcmVhZHksIGFuZCBpbnN0YW5jZXMgaXMgbm90IHJlYWN0aXZlLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLnB1c2godGhpcylcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICByb3V0ZUNvbXBvbmVudHMuc3BsaWNlKHJvdXRlQ29tcG9uZW50cy5pbmRleE9mKHRoaXMpLCAxKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBiZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dCkge1xuICAgICAgbGV0IG9rID0gdHJ1ZVxuICAgICAgY29uc3QgaXNDbG9zaW5nID0gKFxuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0aGlzIHJvdXRlIGNoYW5nZSBpZiB0aGUgZm9ybSBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlXG4gICAgICAgIC8vIGBmcm9tYCByb3V0ZSwgYnV0IGluY2x1ZGUgcGFyZW50IGZvcm1zIG9mIGNsb3NpbmcgbmVzdGVkIGZvcm1zIGFzIGFzXG4gICAgICAgIC8vIHdlbGwsIGJ5IG1hdGNoaW5nIHRoZSB0aGUgc3RhcnQgb2YgZnJvbS90byBwYXRoIGFnYWluc3QgYHRoaXMucGF0aGA6XG4gICAgICAgIGZyb20ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgIXRvLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgIC8vIEV4Y2x1ZGUgaGFzaCBjaGFuZ2VzIG9ubHkgKD0gdGFiIGNoYW5nZXMpOlxuICAgICAgICBmcm9tLnBhdGggIT09IHRvLnBhdGggJiYgKFxuICAgICAgICAgIHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHx8XG4gICAgICAgICAgLy8gRGVjaWRlIGlmIHdlJ3JlIG1vdmluZyB0b3dhcmRzIGEgbmV3IG5lc3RlZCBmb3JtLCBvciBjbG9zaW5nIC9cbiAgICAgICAgICAvLyByZXBsYWNpbmcgYW4gYWxyZWFkeSBvcGVuIG9uZSBieSBjb21wYXJpbmcgcGF0aCBsZW5ndGhzLlxuICAgICAgICAgIC8vIFRoZSBjYXNlIG9mIGA9YCBtYXRjaGVzIHRoZSByZXBsYWNpbmcgb2YgYW4gYWxyZWFkeSBvcGVuIG9uZS5cbiAgICAgICAgICB0by5wYXRoLmxlbmd0aCA8PSBmcm9tLnBhdGgubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIGlmIChpc0Nsb3NpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNdXRhdGluZykge1xuICAgICAgICAgIC8vIEZvciBhY3RpdmUgZGlyZWN0bHkgbXV0YXRpbmcgKG5lc3RlZCkgZm9ybXMgdGhhdCB3ZXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgICAvLyB5ZXQsIHZhbGlkYXRlIHRoZW0gb25jZS4gSWYgdGhlIHVzZXIgdGhlbiBzdGlsbCB3YW50cyB0byBsZWF2ZVxuICAgICAgICAgIC8vIHRoZW0sIHRoZXkgY2FuIGNsaWNrIGNsb3NlIC8gbmF2aWdhdGUgYXdheSBhZ2Fpbi5cbiAgICAgICAgICBvayA9IChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgfHxcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGwoKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGUgZm9ybSBkb2Vzbid0IGRpcmVjdGx5IG11dGF0ZSBkYXRhLiBJZiBpdCBpcyBkaXJ0eSwgYXNrIGlmIHVzZXJcbiAgICAgICAgICAvLyB3YW50cyB0byBwZXJzaXN0IGRhdGEgZmlyc3QuXG4gICAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xuICAgICAgICAgICAgb2sgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICAgICAgYFlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHJlYWxseSB3YW50IHRvICR7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJicy5jYW5jZWxcbiAgICAgICAgICAgICAgfT9gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KG9rKVxuICAgIH0sXG5cbiAgICBnZXRSb3V0ZVBhdGgocmVjb3JkUGF0aCkge1xuICAgICAgLy8gTWFwcyB0aGUgcm91dGUncyBhY3R1YWwgcGF0aCB0byB0aGUgbWF0Y2hlZCByb3V0ZXMgYnkgY291bnRpbmcgaXRzXG4gICAgICAvLyBwYXJ0cyBzZXBhcmF0ZWQgYnkgJy8nLCBzcGxpdHRpbmcgdGhlIHBhdGggaW50byB0aGUgbWFwcGVkIHBhcnRzXG4gICAgICAvLyBjb250YWluaW5nIGFjdHVhbCBwYXJhbWV0ZXJzLlxuICAgICAgY29uc3QgeyBwYXRoIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgcmV0dXJuIHJlY29yZFBhdGhcbiAgICAgICAgPyBwYXRoXG4gICAgICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAgICAgLnNsaWNlKDAsIHJlY29yZFBhdGguc3BsaXQoJy8nKS5sZW5ndGgpXG4gICAgICAgICAgICAuam9pbignLycpXG4gICAgICAgIDogcGF0aFxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHtcbiAgICAgIC8vIFRoZSByb3V0ZSBwYXRoIGlzIHRoZSBwYXRoIHVwIHRvIHRoZSBmaXJzdCAvIChleGNsdWRpbmcgdGhlIGluaXRpYWwgLyk6XG4gICAgICBjb25zdCByb290UGF0aCA9IHRoaXMucGF0aC5tYXRjaCgvXihcXC9bXi9dKikvKVsxXVxuICAgICAgcmV0dXJuICFnZXRDb21tb25QcmVmaXgodG8ucGF0aCwgZnJvbS5wYXRoKS5zdGFydHNXaXRoKHJvb3RQYXRoKVxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRlbXBsYXRlKFxuICB2LWlmPVwidXNlclwiXG4pXG4gIC8vLSBPbmx5IHJlbmRlciBEaXRvVmlldyB3aGVuIGl0IGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIGEgbm9ybWFsIHJvdXRlci12aWV3XG4gIC8vLSBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbiAgLy8tIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuICAvLy0gdXNlZCB0byBhbHdheXMgcmVuZGVyIGZvcm1zIGV2ZW4gd2hlbiBvdGhlciBuZXN0ZWQgZm9ybXMgYXJlIHByZXNlbnQuXG4gIFJvdXRlclZpZXcoXG4gICAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gICAgOmtleT1cIm5hbWVcIlxuICApXG4gIC5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICAgIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlclNjaGVtYSh2aWV3U2NoZW1hKVwiXG4gICAgOmRhdGEtcmVzb3VyY2U9XCJzb3VyY2VTY2hlbWEucGF0aFwiXG4gIClcbiAgICBEaXRvU2NoZW1hKFxuICAgICAgOmtleT1cIm5hbWVcIlxuICAgICAgOnNjaGVtYT1cInZpZXdTY2hlbWFcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKG5hbWUpXCJcbiAgICAgIHBhZGRpbmc9XCJyb290XCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICBzY3JvbGxhYmxlXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCB7XG4gIGlzU2luZ2xlQ29tcG9uZW50VmlldyxcbiAgc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudFxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9WaWV3Jywge1xuICBtaXhpbnM6IFtSb3V0ZU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIC8vIFJlZGlyZWN0ICRzb3VyY2VDb21wb25lbnQgYW5kICRyZXNvdXJjZUNvbXBvbmVudCB0byB0aGUgbWFpbiBjb21wb25lbnQ6XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMubWFpbkNvbXBvbmVudD8uc291cmNlQ29tcG9uZW50IHx8IG51bGwsXG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMubWFpbkNvbXBvbmVudD8ucmVzb3VyY2VDb21wb25lbnQgfHwgbnVsbFxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBVcGRhdGVkIGZyb20gTG9hZGluZ01peGluIHRocm91Z2ggYHNldExvYWRpbmcoaXNMb2FkaW5nKWA6XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgLy8gTk9URTogRGF0YSBpcyBzaGFyZWQgYWNyb3NzIGFsbCB2aWV3cyBiZWNhdXNlIHRoZSByb3V0ZXIgcmVjeWNsZXMgdGhlXG4gICAgICAvLyBEaXRvVmlldyBjb21wb25lbnQuXG4gICAgICBkYXRhOiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEuc2NoZW1hXG4gICAgfSxcblxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICBpc1ZpZXcoKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBpc1NpbmdsZUNvbXBvbmVudFZpZXcoKSB7XG4gICAgICByZXR1cm4gaXNTaW5nbGVDb21wb25lbnRWaWV3KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBtYWluQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeURhdGFQYXRoKHRoaXMubmFtZSlcbiAgICB9LFxuXG4gICAgdmlld1NjaGVtYSgpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50LCAuLi5zY2hlbWEgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAvLyBUcmFuc2xhdGUgc2luZ2xlLWNvbXBvbmVudCBzY2hlbWFzIGludG8gbXVsdGktY29tcG9uZW50IHNjaGVtYXMsXG4gICAgICAvLyBzbyB0aGV5IGNhbiBiZSByZW5kZXJlZCBkaXJlY3RseSB0aHJvdWdoIERpdG9TY2hlbWEgYWxzbzpcbiAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50Vmlld1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgICAgW3NjaGVtYS5uYW1lXToge1xuICAgICAgICAgICAgICAgIG5hbWU6IHNjaGVtYS5uYW1lLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAuLi5jb21wb25lbnRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgOiBzY2hlbWFcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgcmV0dXJuIHNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnQodGhpcy52aWV3U2NoZW1hLCBoYXNSZXNvdXJjZSlcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGU6IHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8zMzkzI2lzc3VlY29tbWVudC0xMTU4NDcwMTQ5XG4gICAgICBmbHVzaDogJ3Bvc3QnLFxuICAgICAgaGFuZGxlcih0bywgZnJvbSkge1xuICAgICAgICAvLyBTZWUgaWYgdGhlIHJvdXRlIGNoYW5nZXMgY29tcGxldGVseSwgYW5kIGNsZWFyIHRoZSBkYXRhIGlmIGl0IGRvZXMuXG4gICAgICAgIGlmICh0aGlzLmlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSkge1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICB0aGlzLmRhdGEgPSB7fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRQYXRoKHBhdGgpIHtcbiAgICAgIC8vIExpc3RzIGluc2lkZSBzaW5nbGUtY29tcG9uZW50IHZpZXdzIHVzZSB0aGUgdmlldydzIHBhdGggZm9yIHN1Yi1wYXRoczpcbiAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50Vmlld1xuICAgICAgICA/IHRoaXMucGF0aFxuICAgICAgICA6IGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGRlZmluZUNvbXBvbmVudCwgcmVmLCB3YXRjaCwgb25TY29wZURpc3Bvc2UsIGggfSBmcm9tICd2dWUtZGVtaSc7XG5pbXBvcnQgeyBjcmVhdGVGb2N1c1RyYXAgfSBmcm9tICdmb2N1cy10cmFwJztcbmltcG9ydCB7IHVucmVmRWxlbWVudCB9IGZyb20gJ0B2dWV1c2UvY29yZSc7XG5cbmNvbnN0IFVzZUZvY3VzVHJhcCA9IC8qIEBfX1BVUkVfXyAqLyAvKiAjX19QVVJFX18gKi8gZGVmaW5lQ29tcG9uZW50KHtcbiAgbmFtZTogXCJVc2VGb2N1c1RyYXBcIixcbiAgcHJvcHM6IFtcImFzXCIsIFwib3B0aW9uc1wiXSxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMgfSkge1xuICAgIGxldCB0cmFwO1xuICAgIGNvbnN0IHRhcmdldCA9IHJlZigpO1xuICAgIGNvbnN0IGFjdGl2YXRlID0gKCkgPT4gdHJhcCAmJiB0cmFwLmFjdGl2YXRlKCk7XG4gICAgY29uc3QgZGVhY3RpdmF0ZSA9ICgpID0+IHRyYXAgJiYgdHJhcC5kZWFjdGl2YXRlKCk7XG4gICAgd2F0Y2goXG4gICAgICAoKSA9PiB1bnJlZkVsZW1lbnQodGFyZ2V0KSxcbiAgICAgIChlbCkgPT4ge1xuICAgICAgICBpZiAoIWVsKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdHJhcCA9IGNyZWF0ZUZvY3VzVHJhcChlbCwgcHJvcHMub3B0aW9ucyB8fCB7fSk7XG4gICAgICAgIGFjdGl2YXRlKCk7XG4gICAgICB9LFxuICAgICAgeyBmbHVzaDogXCJwb3N0XCIgfVxuICAgICk7XG4gICAgb25TY29wZURpc3Bvc2UoKCkgPT4gZGVhY3RpdmF0ZSgpKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHNsb3RzLmRlZmF1bHQpXG4gICAgICAgIHJldHVybiBoKHByb3BzLmFzIHx8IFwiZGl2XCIsIHsgcmVmOiB0YXJnZXQgfSwgc2xvdHMuZGVmYXVsdCgpKTtcbiAgICB9O1xuICB9XG59KTtcblxuZXhwb3J0IHsgVXNlRm9jdXNUcmFwIH07XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZGlhbG9nKFxuICByZWY9XCJkaWFsb2dcIlxuICByb2xlPVwiZGlhbG9nXCJcbiAgYXJpYS1leHBhbmRlZD1cInRydWVcIlxuICBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gIDpzdHlsZT1cInsgJy0td2lkdGgnOiBzZXR0aW5ncy53aWR0aCA/IGAke3NldHRpbmdzLndpZHRofXB4YCA6IG51bGwgfVwiXG4gIEBtb3VzZXVwPVwib25Nb3VzZVVwXCJcbilcbiAgVXNlRm9jdXNUcmFwLmRpdG8tZGlhbG9nX19mb2N1cy10cmFwKDpvcHRpb25zPVwiZm9jdXNUcmFwT3B0aW9uc1wiKVxuICAgIGZvcm0uZGl0by1zY3JvbGwtcGFyZW50KFxuICAgICAgQHN1Ym1pdC5wcmV2ZW50PVwic3VibWl0XCJcbiAgICApXG4gICAgICAvLyBBZGQgYW4gaW52aXNpYmxlIGJ1dHRvbiB0aGF0IHByZXZlbnRzIHRoZSBjbGVhcmFibGUgYnV0dG9ucyBmcm9tIGJlaW5nXG4gICAgICAvLyBwcmVzc2VkIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyB0aGUgRW50ZXIga2V5OlxuICAgICAgYnV0dG9uKFxuICAgICAgICB2LXNob3c9XCJmYWxzZVwiXG4gICAgICApXG4gICAgICBEaXRvU2NoZW1hKFxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICAgICAgcGFkZGluZz1cInJvb3RcIlxuICAgICAgICBzY3JvbGxhYmxlXG4gICAgICAgIGdlbmVyYXRlTGFiZWxzXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKCNidXR0b25zKVxuICAgICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBVc2VGb2N1c1RyYXAgfSBmcm9tICdAdnVldXNlL2ludGVncmF0aW9ucy91c2VGb2N1c1RyYXAvY29tcG9uZW50J1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9EaWFsb2cnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcbiAgY29tcG9uZW50czogeyBVc2VGb2N1c1RyYXAgfSxcbiAgZW1pdHM6IFsncmVtb3ZlJ10sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGRpYWxvZ0NvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIGNvbXBvbmVudHM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHByb21pc2U6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc2V0dGluZ3M6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6ICgpID0+ICh7XG4gICAgICAgIHdpZHRoOiA0ODAsXG4gICAgICAgIGNsaWNrVG9DbG9zZTogZmFsc2VcbiAgICAgIH0pXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgLy8gTWFrZSBzdXJlIGRpYWxvZyBkYXRhIGNvbnRhaW5zIGFsbCB0aGUgZXhwZWN0ZWQga2V5c1xuICAgIGNvbnN0IGRpYWxvZ0RhdGEgPSBjbG9uZSh0aGlzLmRhdGEpXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gZGlhbG9nRGF0YSkpIHtcbiAgICAgICAgZGlhbG9nRGF0YVtrZXldID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZGlhbG9nRGF0YVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdkaWFsb2cnLFxuICAgICAgICBjb21wb25lbnRzOiB0aGlzLmNvbXBvbmVudHNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGdldEJ1dHRvblNjaGVtYXModGhpcy5idXR0b25zKSkubWFwKFxuICAgICAgICAgIC8vIFByb2Nlc3MgdGhlIGJ1dHRvbiBzY2hlbWFzIHRvIGFkZCBkZWZhdWx0IGNsaWNrIGV2ZW50c1xuICAgICAgICAgIC8vIGZvciBib3RoICdzdWJtaXQnIGFuZCAnY2FuY2VsJyBidXR0b25zOlxuICAgICAgICAgIChba2V5LCBzY2hlbWFdKSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnY2FuY2VsJyAmJiAhc2NoZW1hLmV2ZW50cykge1xuICAgICAgICAgICAgICBzY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuY2FuY2VsKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGZvY3VzVHJhcE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICAgIGZhbGxiYWNrRm9jdXM6ICgpID0+IHRoaXMuJHJlZnMuZGlhbG9nLFxuICAgICAgICBvbkRlYWN0aXZhdGU6IHRoaXMuY2FuY2VsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGhhc0J1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5idXR0b25TY2hlbWFzKS5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIGhhc0NhbmNlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuYnV0dG9uU2NoZW1hcy5jYW5jZWxcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLmRvbU9uKHdpbmRvdywge1xuICAgICAga2V5dXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKCh0aGlzLmhhc0NhbmNlbCB8fCAhdGhpcy5oYXNCdXR0b25zKSAmJiBldmVudC5rZXlDb2RlID09PSAyNykge1xuICAgICAgICAgIHRoaXMuY2FuY2VsKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbW92ZSgpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ3JlbW92ZScpXG4gICAgfSxcblxuICAgIHJlc29sdmUodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvbWlzZS5yZXNvbHZlKHZhbHVlKVxuICAgICAgdGhpcy5yZW1vdmUoKVxuICAgIH0sXG5cbiAgICByZWplY3QodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvbWlzZS5yZWplY3QodmFsdWUpXG4gICAgICB0aGlzLnJlbW92ZSgpXG4gICAgfSxcblxuICAgIHN1Ym1pdCgpIHtcbiAgICAgIHRoaXMucmVzb2x2ZSh0aGlzLmRpYWxvZ0RhdGEpXG4gICAgfSxcblxuICAgIGNhbmNlbCgpIHtcbiAgICAgIC8vIFdoZW4gY2FuY2VsbGluZywgcmVzb2x2ZSBhcyBgdW5kZWZpbmVkYCBzbyB3ZSBjYW4gaGF2ZSBkaWFsb2dzXG4gICAgICAvLyByZXR1cm5pbmcgbnVsbCBhcyBhIGRlZmluZWQgdmFsdWUgYXMgd2VsbC5cbiAgICAgIHRoaXMucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgfSxcblxuICAgIGNsb3NlKCkge1xuICAgICAgdGhpcy5jYW5jZWwoKVxuICAgIH0sXG5cbiAgICBvbk1vdXNlVXAoKSB7XG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5jbGlja1RvQ2xvc2UpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGlhbG9nIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBkaXNwbGF5OiBmbGV4O1xuICBpbnNldDogMDtcbiAgei1pbmRleDogJHotaW5kZXgtZGlhbG9nO1xuICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgLy8gUHJldmVudCBzY3JvbGxpbmcgb2YgdGhlIHBhZ2UgYmVoaW5kIHRoZSBkaWFsb2c6XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTtcblxuICAmX19mb2N1cy10cmFwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gIH1cblxuICAvLyBUT0RPOiBgJl9faW5uZXJgXG4gIGZvcm0ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgbWF4LXdpZHRoOiB2YXIoLS13aWR0aCwgNDgwcHgpO1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gICAgYm94LXNoYWRvdzogMCAyMHB4IDYwcHggLTJweCByZ2JhKDI3LCAzMywgNTgsIDAuNCk7XG4gIH1cbn1cblxuLmRpdG8tZGlhbG9nLWVudGVyLWFjdGl2ZSxcbi5kaXRvLWRpYWxvZy1sZWF2ZS1hY3RpdmUge1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzO1xuXG4gIGZvcm0ge1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjI1cztcbiAgfVxufVxuXG4uZGl0by1kaWFsb2ctZW50ZXItZnJvbSxcbi5kaXRvLWRpYWxvZy1sZWF2ZS10byB7XG4gIG9wYWNpdHk6IDA7XG5cbiAgZm9ybSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMHB4KTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1yb290KFxuICA6ZGF0YS1hZ2VudC1icm93c2VyPVwiYXBwU3RhdGUuYWdlbnQuYnJvd3NlclwiXG4gIDpkYXRhLWFnZW50LXBsYXRmb3JtPVwiYXBwU3RhdGUuYWdlbnQucGxhdGZvcm1cIlxuICA6ZGF0YS1hZ2VudC12ZXJzaW9uPVwiYXBwU3RhdGUuYWdlbnQudmVyc2lvbk51bWJlclwiXG4pXG4gIFRyYW5zaXRpb24obmFtZT1cImRpdG8tZHJhZ1wiKVxuICAgIC5kaXRvLWRyYWctb3ZlcmxheShcbiAgICAgIHYtaWY9XCJpc0RyYWdnaW5nRmlsZXNcIlxuICAgIClcbiAgVHJhbnNpdGlvbkdyb3VwKG5hbWU9XCJkaXRvLWRpYWxvZ1wiKVxuICAgIERpdG9EaWFsb2coXG4gICAgICB2LWZvcj1cIihkaWFsb2csIGtleSkgaW4gZGlhbG9nc1wiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDpjb21wb25lbnRzPVwiZGlhbG9nLmNvbXBvbmVudHNcIlxuICAgICAgOmJ1dHRvbnM9XCJkaWFsb2cuYnV0dG9uc1wiXG4gICAgICA6cHJvbWlzZT1cImRpYWxvZy5wcm9taXNlXCJcbiAgICAgIDpkYXRhPVwiZGlhbG9nLmRhdGFcIlxuICAgICAgOnNldHRpbmdzPVwiZGlhbG9nLnNldHRpbmdzXCJcbiAgICAgIEByZW1vdmU9XCJyZW1vdmVEaWFsb2coa2V5KVwiXG4gICAgKVxuICBEaXRvTmF2aWdhdGlvblxuICBtYWluLmRpdG8tcGFnZS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gICAgdi1yZXNpemU9XCJvblJlc2l6ZVBhZ2VcIlxuICAgIDpjbGFzcz1cInBhZ2VDbGFzc2VzXCJcbiAgKVxuICAgIERpdG9IZWFkZXIoXG4gICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICApXG4gICAgUm91dGVyVmlld1xuICBEaXRvU2lkZWJhclxuICAgIERpdG9BY2NvdW50KFxuICAgICAgdi1pZj1cInVzZXJcIlxuICAgIClcbiAgICBhLmRpdG8tbG9naW4oXG4gICAgICB2LWVsc2UtaWY9XCJhbGxvd0xvZ2luXCJcbiAgICAgIEBjbGljaz1cInJvb3RDb21wb25lbnQubG9naW4oKVwiXG4gICAgKVxuICAgICAgc3BhbiBMb2dpblxuICBEaXRvTm90aWZpY2F0aW9ucyhyZWY9XCJub3RpZmljYXRpb25zXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZGVsZWdhdGUgYXMgdGlwcHlEZWxlZ2F0ZSB9IGZyb20gJ3RpcHB5LmpzJ1xuaW1wb3J0IHsgbWFwQ29uY3VycmVudGx5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IERpdG9Vc2VyIGZyb20gJy4uL0RpdG9Vc2VyLmpzJ1xuaW1wb3J0IERpdG9WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlJ1xuaW1wb3J0IERpdG9EaWFsb2cgZnJvbSAnLi9EaXRvRGlhbG9nLnZ1ZSdcbmltcG9ydCB7XG4gIHByb2Nlc3NWaWV3LFxuICByZXNvbHZlVmlld3MsXG4gIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUm9vdCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IERpdG9EaWFsb2cgfSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdmlld3M6ICgpID0+IHRoaXMucmVzb2x2ZWRWaWV3c1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHVucmVzb2x2ZWRWaWV3czogeyB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbiwgUHJvbWlzZV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgb3B0aW9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkVmlld3M6IHt9LFxuICAgICAgcmVtb3ZlUm91dGVzOiBudWxsLFxuICAgICAgZGlhbG9nczoge30sXG4gICAgICBwYWdlV2lkdGg6IDAsXG4gICAgICBsb2FkaW5nQ291bnQ6IDAsXG4gICAgICBhbGxvd0xvZ2luOiBmYWxzZSxcbiAgICAgIGlzRHJhZ2dpbmdGaWxlczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBub3RpZmljYXRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNNb3VudGVkICYmIHRoaXMuJHJlZnMubm90aWZpY2F0aW9uc1xuICAgIH0sXG5cbiAgICBpc0xvYWRpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ291bnQgPiAwXG4gICAgfSxcblxuICAgIHBhZ2VDbGFzc2VzKCkge1xuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tcGFnZSdcbiAgICAgIC8vIE5PVEU6IEtlZXAgc3luY2VkIHdpdGggJGNvbnRlbnQtd2lkdGggaW4gU0NTUzpcbiAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IDkwMFxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy5hcHBTdGF0ZS5wYWdlQ2xhc3MsXG4gICAgICAgIHtcbiAgICAgICAgICBbYCR7cHJlZml4fS0td2lkdGgtODBgXTogdGhpcy5wYWdlV2lkdGggPD0gY29udGVudFdpZHRoICogMC44LFxuICAgICAgICAgIFtgJHtwcmVmaXh9LS13aWR0aC02MGBdOiB0aGlzLnBhZ2VXaWR0aCA8PSBjb250ZW50V2lkdGggKiAwLjZcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuYXBwU3RhdGUudGl0bGUgPSBkb2N1bWVudC50aXRsZSB8fCAnRGl0by5qcyBBZG1pbidcbiAgICAvLyBXaXRoIGhvdC1yZWxvYWRpbmcsIGl0IGxvb2tzIGxpa2UgZGVzdHJveWVkIGhvb2tzIGFyZW4ndCBhbHdheXMgY2FsbGVkXG4gICAgLy8gZm9yIHJvdXRlIGNvbXBvbmVudHMgc28gcmVzZXQgdGhlIGFycmF5IG9mIHJlZ2lzdGVyZWQgY29tcG9uZW50cyBpbnN0ZWFkLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzID0gW11cbiAgfSxcblxuICBhc3luYyBtb3VudGVkKCkge1xuICAgIHRoaXMuc2V0dXBEcmFnQW5kRHJvcCgpXG5cbiAgICB0aXBweURlbGVnYXRlKHRoaXMuJGVsLCB7XG4gICAgICB0YXJnZXQ6ICcuZGl0by1pbmZvJyxcbiAgICAgIHRoZW1lOiAnaW5mbycsXG4gICAgICBhcHBlbmRUbzogbm9kZSA9PiBub2RlLmNsb3Nlc3QoJy5kaXRvLXBhbmUnKSxcbiAgICAgIGFuaW1hdGlvbjogJ3NoaWZ0LWF3YXktc3VidGxlJyxcbiAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgZGVsYXk6IDI1MCxcbiAgICAgIHpJbmRleDogMSxcbiAgICAgIG9uQ3JlYXRlKGluc3RhbmNlKSB7XG4gICAgICAgIGluc3RhbmNlLnNldENvbnRlbnQoaW5zdGFuY2UucmVmZXJlbmNlLmRhdGFzZXQuaW5mbylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gQ2xlYXIgdGhlIGxhYmVsIG1hcmtlZCBhcyBhY3RpdmUgb24gYWxsIG1vdXNlIGFuZCBrZXlib2FyZCBldmVudHMsIGV4Y2VwdFxuICAgIC8vIHRoZSBvbmVzIHRoYXQgRGl0b0xhYmVsIGl0c2VsZiBpbnRlcmNlcHRzLlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgIGNsaWNrOiBldmVudCA9PiB7XG4gICAgICAgIGlmICghZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5kaXRvLWxhYmVsJykpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmFsbG93TG9naW4gPSBmYWxzZVxuICAgICAgaWYgKGF3YWl0IHRoaXMuZmV0Y2hVc2VyKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlVmlld3MoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICB9XG4gICAgdGhpcy5hbGxvd0xvZ2luID0gdHJ1ZVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXR1cERyYWdBbmREcm9wKCkge1xuICAgICAgLy8gVGhpcyBjb2RlIG9ubHkgaGFwcGVucyB0aGUgdmlzdWFsIGVmZmVjdHMgYXJvdW5kIGRyYWdnaW5nIGFuZCBkcm9wcGluZ1xuICAgICAgLy8gZmlsZXMgaW50byBhIGBEaXRvVHlwZVVwbG9hZGAgY29tcG9uZW50LiBUaGUgYWN0dWFsIHVwbG9hZGluZyBpc1xuICAgICAgLy8gaGFuZGxlZCBieSB0aGUgYERpdG9UeXBlVXBsb2FkYCBjb21wb25lbnQgaXRzZWxmLlxuXG4gICAgICBsZXQgZHJhZ0NvdW50ID0gMFxuICAgICAgbGV0IHVwbG9hZHMgPSBbXVxuXG4gICAgICBjb25zdCB0b2dnbGVEcm9wVGFyZ2V0Q2xhc3MgPSBlbmFibGVkID0+IHtcbiAgICAgICAgZm9yIChjb25zdCB1cGxvYWQgb2YgdXBsb2Fkcykge1xuICAgICAgICAgIHVwbG9hZFxuICAgICAgICAgICAgLmNsb3Nlc3QoJy5kaXRvLWNvbnRhaW5lcicpXG4gICAgICAgICAgICAuY2xhc3NMaXN0LnRvZ2dsZSgnZGl0by1kcm9wLXRhcmdldCcsIGVuYWJsZWQpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICAgICAgdXBsb2FkcyA9IFtdXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2V0RHJhZ2dpbmdGaWxlcyA9IGVuYWJsZWQgPT4ge1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmdGaWxlcyA9IGVuYWJsZWRcbiAgICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgICB0b2dnbGVEcm9wVGFyZ2V0Q2xhc3ModHJ1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRvZ2dsZURyb3BUYXJnZXRDbGFzcyhmYWxzZSksIDE1MClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICAgIGRyYWdlbnRlcjogZXZlbnQgPT4ge1xuICAgICAgICAgIGlmICghZHJhZ0NvdW50ICYmIGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgICAgICAgdXBsb2FkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kaXRvLXVwbG9hZCcpXG4gICAgICAgICAgICBjb25zdCBoYXNVcGxvYWRzID0gdXBsb2Fkcy5sZW5ndGggPiAwXG4gICAgICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9IGhhc1VwbG9hZHMgPyAnY29weScgOiAnbm9uZSdcbiAgICAgICAgICAgIGlmIChoYXNVcGxvYWRzKSB7XG4gICAgICAgICAgICAgIHNldERyYWdnaW5nRmlsZXModHJ1ZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGRyYWdDb3VudCsrXG4gICAgICAgIH0sXG5cbiAgICAgICAgZHJhZ2xlYXZlOiBldmVudCA9PiB7XG4gICAgICAgICAgZHJhZ0NvdW50LS1cbiAgICAgICAgICBpZiAoIWRyYWdDb3VudCAmJiBldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgICAgIHNldERyYWdnaW5nRmlsZXMoZmFsc2UpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGRyYWdvdmVyOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgICAgICAgY29uc3QgY2FuRHJvcCA9IGV2ZW50LnRhcmdldC5jbG9zZXN0KFxuICAgICAgICAgICAgICAnLmRpdG8tY29udGFpbmVyOmhhcyguZGl0by11cGxvYWQpJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSBjYW5Ecm9wID8gJ2NvcHknIDogJ25vbmUnXG4gICAgICAgICAgICBpZiAoIWNhbkRyb3ApIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBkcm9wOiBldmVudCA9PiB7XG4gICAgICAgICAgZHJhZ0NvdW50ID0gMFxuICAgICAgICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgICAgIHNldERyYWdnaW5nRmlsZXMoZmFsc2UpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBub3RpZnkoeyB0eXBlID0gJ2luZm8nLCB0aXRsZSwgdGV4dCB9ID0ge30pIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5ub3RpZnkoeyB0eXBlLCB0aXRsZSwgdGV4dCB9KVxuICAgIH0sXG5cbiAgICBjbG9zZU5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuZGVzdHJveUFsbCgpXG4gICAgfSxcblxuICAgIHJlZ2lzdGVyTG9hZGluZyhpc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMubG9hZGluZ0NvdW50ICs9IGlzTG9hZGluZyA/IDEgOiAtMVxuICAgIH0sXG5cbiAgICBzaG93RGlhbG9nKHsgY29tcG9uZW50cywgYnV0dG9ucywgZGF0YSwgc2V0dGluZ3MgfSkge1xuICAgICAgLy8gU2hvd3MgYSBkaXRvLWRpYWxvZyBjb21wb25lbnQgYW5kIHdyYXBzIGl0IGluIGEgcHJvbWlzZSBzbyB0aGF0IHRoZVxuICAgICAgLy8gYnV0dG9ucyBpbiB0aGUgZGlhbG9nIGNhbiB1c2UgYGRpYWxvZy5yZXNvbHZlKClgIGFuZCBgZGlhbG9nLnJlamVjdCgpYFxuICAgICAgLy8gdG8gY2xvc2UgdGhlIG1vZGFsIGRpYWxvZyBhbmQgcmVzb2x2ZSAvIHJlamVjdCB0aGUgcHJvbWlzZSBhdCBvbmNlLlxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvclxuICAgICAgICBhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgLy8gUHJvY2VzcyBjb21wb25lbnRzIHRvIHJlc29sdmUgYXN5bmMgc2NoZW1hcy5cbiAgICAgICAgICBjb25zdCByb3V0ZXMgPSBbXVxuICAgICAgICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKFxuICAgICAgICAgICAgdGhpcy5hcGksXG4gICAgICAgICAgICB7IHR5cGU6ICdkaWFsb2cnLCBjb21wb25lbnRzIH0sXG4gICAgICAgICAgICByb3V0ZXMsXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKVxuICAgICAgICAgIGlmIChyb3V0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAnRGlhbG9ncyBkbyBub3Qgc3VwcG9ydCBjb21wb25lbnRzIHRoYXQgcHJvZHVjZSByb3V0ZXMnXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGtleSA9IGBkaWFsb2ctJHsrK2RpYWxvZ0lkfWBcbiAgICAgICAgICB0aGlzLmRpYWxvZ3Nba2V5XSA9IHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgICAgICBidXR0b25zLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHNldHRpbmdzLFxuICAgICAgICAgICAgcHJvbWlzZTogeyByZXNvbHZlLCByZWplY3QgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICByZW1vdmVEaWFsb2coa2V5KSB7XG4gICAgICBkZWxldGUgdGhpcy5kaWFsb2dzW2tleV1cbiAgICB9LFxuXG4gICAgYXN5bmMgbG9naW4oKSB7XG4gICAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFkZGl0aW9uYWxDb21wb25lbnRzLFxuICAgICAgICByZWRpcmVjdEFmdGVyTG9naW5cbiAgICAgIH0gPSB0aGlzLm9wdGlvbnMubG9naW4gfHwge31cbiAgICAgIGNvbnN0IGxvZ2luRGF0YSA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICB1c2VybmFtZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uYWRkaXRpb25hbENvbXBvbmVudHNcbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge1xuICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICB0ZXh0OiAnQ2FuY2VsJ1xuICAgICAgICAgICAgLy8gTk9URTogVGhlIGNsaWNrIGV2ZW50IGlzIGFkZGVkIGluIERpdG9EaWFsb2cuYnV0dG9uU2NoZW1hcygpXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGxvZ2luOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICAgIHRleHQ6ICdMb2dpbidcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBpZiAobG9naW5EYXRhKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5sb2dpbixcbiAgICAgICAgICAgIGRhdGE6IGxvZ2luRGF0YSxcbiAgICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAocmVkaXJlY3RBZnRlckxvZ2luKSB7XG4gICAgICAgICAgICBsb2NhdGlvbi5yZXBsYWNlKHJlZGlyZWN0QWZ0ZXJMb2dpbilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRVc2VyKHJlc3BvbnNlLmRhdGEudXNlcilcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzb2x2ZVZpZXdzKClcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gZXJyLnJlc3BvbnNlPy5kYXRhPy5lcnJvclxuICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICB0aXRsZTogJ0F1dGhlbnRpY2F0aW9uIEVycm9yJyxcbiAgICAgICAgICAgIHRleHQ6IGVycm9yIHx8IGVyclxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5yZXNwb25zZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2dpbigpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbmF2aWdhdGVIb21lKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGUoJy8nKVxuICAgIH0sXG5cbiAgICBhc3luYyBsb2dvdXQoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5sb2dvdXQsXG4gICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuc2V0VXNlcihudWxsKVxuICAgICAgICAgIHRoaXMubmF2aWdhdGVIb21lKClcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFVzZXIoKSB7XG4gICAgICBsZXQgdXNlciA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLnNlc3Npb24sXG4gICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgdXNlciA9IHJlc3BvbnNlLmRhdGEudXNlciB8fCBudWxsXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbiBFcnJvcicsXG4gICAgICAgICAgdGV4dDogZXJyXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICB0aGlzLnNldFVzZXIodXNlcilcbiAgICAgIHJldHVybiB1c2VyXG4gICAgfSxcblxuICAgIHNldFVzZXIodXNlcikge1xuICAgICAgdGhpcy5hcHBTdGF0ZS51c2VyID0gKFxuICAgICAgICB1c2VyICYmXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih1c2VyLCBEaXRvVXNlci5wcm90b3R5cGUpXG4gICAgICApXG4gICAgICAvLyBDbGVhciByZXNvbHZlZCB2aWV3cyB3aGVuIHVzZXIgaXMgbG9nZ2VkIG91dC5cbiAgICAgIGlmICghdXNlcikge1xuICAgICAgICB0aGlzLnJlc29sdmVkVmlld3MgPSB7fVxuICAgICAgICB0aGlzLm5hdmlnYXRlSG9tZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGVuc3VyZVVzZXIoKSB7XG4gICAgICBpZiAoIShhd2FpdCB0aGlzLmZldGNoVXNlcigpKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgcmVzb2x2ZVZpZXdzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFZpZXdzID0gYXdhaXQgcmVzb2x2ZVZpZXdzKHRoaXMudW5yZXNvbHZlZFZpZXdzKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCFlcnJvci5yZXF1ZXN0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgICAvLyBDb2xsZWN0IGFsbCByb3V0ZXMgZnJvbSB0aGUgcm9vdCBzY2hlbWEgY29tcG9uZW50c1xuICAgICAgY29uc3Qgcm91dGVzID0gYXdhaXQgbWFwQ29uY3VycmVudGx5KFxuICAgICAgICBPYmplY3QuZW50cmllcyh0aGlzLnJlc29sdmVkVmlld3MpLFxuICAgICAgICAoW25hbWUsIHNjaGVtYV0pID0+IHByb2Nlc3NWaWV3KERpdG9WaWV3LCB0aGlzLmFwaSwgc2NoZW1hLCBuYW1lKVxuICAgICAgKVxuICAgICAgLy8gTm93IHRoYXQgdGhlIHJvdXRlcyBhcmUgbG9hZGVkLCByZXBsYWNlIGFsbCBleGlzdGluZyByb3V0ZXMgd2l0aCB0aGVcbiAgICAgIC8vIG5ldyByb3V0ZXMsIGFuZCByZXN0b3JlIHRoZSBjdXJyZW50IHBhdGguXG4gICAgICBjb25zdCB7IGZ1bGxQYXRoIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgdGhpcy5yZW1vdmVSb3V0ZXM/LigpXG4gICAgICB0aGlzLnJlbW92ZVJvdXRlcyA9IGFkZFJvdXRlcyh0aGlzLiRyb3V0ZXIsIFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdyb290JyxcbiAgICAgICAgICBwYXRoOiAnLycsXG4gICAgICAgICAgY29tcG9uZW50czoge31cbiAgICAgICAgfSxcbiAgICAgICAgLi4ucm91dGVzLmZsYXQoKVxuICAgICAgXSlcbiAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKGZ1bGxQYXRoKVxuICAgIH0sXG5cbiAgICBvblJlc2l6ZVBhZ2UoeyBjb250ZW50UmVjdDogeyB3aWR0aCB9IH0pIHtcbiAgICAgIHRoaXMucGFnZVdpZHRoID0gd2lkdGhcbiAgICB9XG4gIH1cbn0pXG5cbmxldCBkaWFsb2dJZCA9IDBcblxuZnVuY3Rpb24gYWRkUm91dGVzKHJvdXRlciwgcm91dGVzKSB7XG4gIGNvbnN0IHJlbW92ZXJzID0gW11cbiAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXMpIHtcbiAgICBjb25zdCByZW1vdmUgPSByb3V0ZXIuYWRkUm91dGUocm91dGUpXG4gICAgcmVtb3ZlcnMucHVzaChyZW1vdmUpXG4gIH1cblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGZvciAoY29uc3QgcmVtb3ZlIG9mIHJlbW92ZXJzKSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL3N0eWxlJztcblxuLmRpdG8tYXBwLFxuLmRpdG8tcm9vdCB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG5cbi5kaXRvLXBhZ2Uge1xuICAtLW1heC1jb250ZW50LXdpZHRoOiAjeyRjb250ZW50LXdpZHRofTtcbiAgLS1tYXgtcGFnZS13aWR0aDogY2FsYyh2YXIoLS1tYXgtY29udGVudC13aWR0aCkgKyAyICogI3skY29udGVudC1wYWRkaW5nfSk7XG5cbiAgZmxleDogMCAxIHZhcigtLW1heC1wYWdlLXdpZHRoKTtcbiAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgbWluLXdpZHRoOiAwJTtcbiAgbWF4LXdpZHRoOiB2YXIoLS1tYXgtcGFnZS13aWR0aCk7XG4gIG92ZXJmbG93OiB2aXNpYmxlOyAvLyBGb3IgLmRpdG8taGVhZGVyIGZ1bGwtd2lkdGggYmFja2dyb3VuZC5cblxuICAmLS13aWRlIHtcbiAgICAtLW1heC1jb250ZW50LXdpZHRoOiAjeyRjb250ZW50LXdpZHRoLXdpZGV9O1xuICB9XG59XG5cbi5kaXRvLWFjY291bnQsXG4uZGl0by1sb2dpbiB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmRpdG8tZHJhZy1vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHotaW5kZXg6ICR6LWluZGV4LWRyYWctb3ZlcmxheTtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpO1xufVxuXG4uZGl0by1kcm9wLXRhcmdldCB7XG4gIC0tc2hhZG93LWFscGhhOiAwLjI1O1xuXG4gIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICB6LWluZGV4OiAkei1pbmRleC1kcmFnLW92ZXJsYXkgKyAxO1xuICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgNHB4IDhweCByZ2JhKDAsIDAsIDAsIHZhcigtLXNoYWRvdy1hbHBoYSkpKTtcbn1cblxuLmRpdG8tZHJhZy1lbnRlci1hY3RpdmUsXG4uZGl0by1kcmFnLWxlYXZlLWFjdGl2ZSB7XG4gICRkdXJhdGlvbjogMC4xNXM7XG5cbiAgdHJhbnNpdGlvbjpcbiAgICBvcGFjaXR5ICRkdXJhdGlvbixcbiAgICBiYWNrZHJvcC1maWx0ZXIgJGR1cmF0aW9uO1xuXG4gIH4gKiAuZGl0by1kcm9wLXRhcmdldCB7XG4gICAgdHJhbnNpdGlvbjogZmlsdGVyICRkdXJhdGlvbjtcbiAgfVxufVxuXG4uZGl0by1kcmFnLWVudGVyLWZyb20sXG4uZGl0by1kcmFnLWxlYXZlLXRvIHtcbiAgb3BhY2l0eTogMDtcbiAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDApO1xuXG4gIH4gKiAuZGl0by1kcm9wLXRhcmdldCB7XG4gICAgLS1zaGFkb3ctYWxwaGE6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudWwuZGl0by1tZW51KFxuICB2LXJlc2l6ZT1cIm9uUmVzaXplXCJcbiAgOnN0eWxlPVwieyAnLS13aWR0aCc6IHdpZHRoID8gYCR7d2lkdGh9cHhgIDogbnVsbCB9XCJcbilcbiAgbGkoXG4gICAgdi1mb3I9XCJpdGVtIGluIGl0ZW1zXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShpdGVtKVwiXG4gICAgKVxuICAgICAgYS5kaXRvLWxpbmsoXG4gICAgICAgIDpocmVmPVwiZ2V0SXRlbUhyZWYoaXRlbSlcIlxuICAgICAgICA6Y2xhc3M9XCJnZXRJdGVtQ2xhc3MoaXRlbSwgJ2RpdG8tc3ViLW1lbnUtbGluaycpXCJcbiAgICAgICAgQGNsaWNrLnByZXZlbnQuc3RvcD1cIm9uQ2xpY2tJdGVtKGl0ZW0pXCJcbiAgICAgICkge3sgZ2V0TGFiZWwoaXRlbSkgfX1cbiAgICAgIERpdG9NZW51KFxuICAgICAgICB2LWlmPVwiaXRlbS5pdGVtc1wiXG4gICAgICAgIDpjbGFzcz1cImdldEl0ZW1DbGFzcyhpdGVtLCAnZGl0by1zdWItbWVudScpXCJcbiAgICAgICAgOml0ZW1zPVwiaXRlbS5pdGVtc1wiXG4gICAgICAgIDpwYXRoPVwiZ2V0SXRlbVBhdGgoaXRlbSwgZmFsc2UpXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9NZW51Jywge1xuICBwcm9wczoge1xuICAgIGl0ZW1zOiB7XG4gICAgICB0eXBlOiBbT2JqZWN0LCBBcnJheV0sXG4gICAgICBkZWZhdWx0OiAoKSA9PiBbXVxuICAgIH0sXG4gICAgcGF0aDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IDBcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUmVzaXplKHsgY29udGVudFJlY3Q6IHsgd2lkdGggfSB9KSB7XG4gICAgICBpZiAod2lkdGgpIHtcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEl0ZW1DbGFzcyhpdGVtLCBzdWJNZW51Q2xhc3MpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtzdWJNZW51Q2xhc3NdOiAhIWl0ZW0uaXRlbXMsXG4gICAgICAgICdkaXRvLWFjdGl2ZSc6IHRoaXMuaXNBY3RpdmVJdGVtKGl0ZW0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEl0ZW1QYXRoKGl0ZW0sIGZpcnN0Q2hpbGQpIHtcbiAgICAgIGNvbnN0IHBhdGggPSBpdGVtLnBhdGggPyBgJHt0aGlzLnBhdGh9LyR7aXRlbS5wYXRofWAgOiBudWxsXG4gICAgICByZXR1cm4gZmlyc3RDaGlsZCAmJiBwYXRoICYmIGl0ZW0uaXRlbXNcbiAgICAgICAgPyBgJHtwYXRofSR7dGhpcy5nZXRJdGVtUGF0aChPYmplY3QudmFsdWVzKGl0ZW0uaXRlbXMpWzBdLCBmYWxzZSl9YFxuICAgICAgICA6IHBhdGhcbiAgICB9LFxuXG4gICAgZ2V0SXRlbUhyZWYoaXRlbSkge1xuICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0SXRlbVBhdGgoaXRlbSwgdHJ1ZSlcbiAgICAgIHJldHVybiBwYXRoID8gdGhpcy4kcm91dGVyLnJlc29sdmUocGF0aCkuaHJlZiA6IG51bGxcbiAgICB9LFxuXG4gICAgaXNBY3RpdmVJdGVtKGl0ZW0pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuJHJvdXRlLnBhdGguc3RhcnRzV2l0aCh0aGlzLmdldEl0ZW1QYXRoKGl0ZW0sIGZhbHNlKSkgfHxcbiAgICAgICAgaXRlbS5pdGVtcyAmJiBPYmplY3QudmFsdWVzKGl0ZW0uaXRlbXMpLnNvbWUodGhpcy5pc0FjdGl2ZUl0ZW0pXG4gICAgICApXG4gICAgfSxcblxuICAgIG9uQ2xpY2tJdGVtKGl0ZW0pIHtcbiAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmdldEl0ZW1QYXRoKGl0ZW0sIHRydWUpXG4gICAgICBpZiAocGF0aCkge1xuICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IHBhdGgsIGZvcmNlOiB0cnVlIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQHVzZSAnc2Fzczpjb2xvcic7XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1tZW51IHtcbiAgJGl0ZW0taGVpZ2h0OiAkbWVudS1mb250LXNpemUgKyAyICogJG1lbnUtcGFkZGluZy12ZXI7XG5cbiAgYm9yZGVyLXJpZ2h0OiAkYm9yZGVyLXN0eWxlO1xuICBwYWRkaW5nOiAwICRtZW51LXNwYWNpbmc7XG5cbiAgbGkge1xuICAgICY6aGFzKC5kaXRvLXN1Yi1tZW51Om5vdCguZGl0by1hY3RpdmUpKSB7XG4gICAgICAvLyBQb3Atb3V0IHN1Yi1tZW51cyBvbiBob3ZlcjpcbiAgICAgICY6aG92ZXIge1xuICAgICAgICAuZGl0by1zdWItbWVudS1saW5rIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlc3Q7XG4gICAgICAgIH1cblxuICAgICAgICAuZGl0by1zdWItbWVudSB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHdpZHRoOiB2YXIoLS13aWR0aCk7XG4gICAgICAgICAgei1pbmRleDogJHotaW5kZXgtaGVhZGVyO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChjYWxjKHZhcigtLXdpZHRoKSArIDIgKiAkbWVudS1zcGFjaW5nKSlcbiAgICAgICAgICAgIHRyYW5zbGF0ZVkoLSRpdGVtLWhlaWdodCk7XG5cbiAgICAgICAgICBsaTpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAuZGl0by1saW5rIHtcbiAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgICAgLy8gRmlsbCB0aGUgZ2FwIHRvIG5vdCBsb29zZSB0aGUgaG92ZXIgd2hlbiBtb3Zpbmcgb3ZlciBpdC5cbiAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgICAgbGVmdDogLTIgKiAkbWVudS1zcGFjaW5nO1xuICAgICAgICAgICAgd2lkdGg6IDIgKiAkbWVudS1zcGFjaW5nO1xuICAgICAgICAgICAgaGVpZ2h0OiAkaXRlbS1oZWlnaHQ7XG4gICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC5kaXRvLXN1Yi1tZW51LWxpbmssXG4gICAgICAgIC5kaXRvLXN1Yi1tZW51IHtcbiAgICAgICAgICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWxpbmsge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmc7XG4gICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0O1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIG1hcmdpbi10b3A6ICRtZW51LXNwYWNpbmc7XG5cbiAgICAmOmZvY3VzOm5vdCg6YWN0aXZlLCAuZGl0by1hY3RpdmUpIHtcbiAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctZm9jdXM7XG4gICAgfVxuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gICAgfVxuXG4gICAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1zdWItbWVudS1saW5rIHtcbiAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6IGNvbG9yLmFkanVzdCgkY29sb3ItYWN0aXZlLCAkYWxwaGE6IC0wLjMpO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXN1Yi1tZW51IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIGJvcmRlci1yaWdodDogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVzdDtcblxuICAgICYuZGl0by1hY3RpdmUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRyYWlsXG4gIHVsXG4gICAgbGkoXG4gICAgICB2LWZvcj1cImNvbXBvbmVudCBpbiB0cmFpbFwiXG4gICAgKVxuICAgICAgYS5kaXRvLWxpbmsoXG4gICAgICAgIDpjbGFzcz1cImdldExpbmtDbGFzcyhjb21wb25lbnQpXCJcbiAgICAgICAgOmhyZWY9XCJnZXRDb21wb25lbnRIcmVmKGNvbXBvbmVudClcIlxuICAgICAgICBAY2xpY2sucHJldmVudC5zdG9wPVwib25DbGlja0NvbXBvbmVudChjb21wb25lbnQpXCJcbiAgICAgIClcbiAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRTcGFuQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgc2xvdFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RyYWlsJywge1xuICBjb21wdXRlZDoge1xuICAgIHRyYWlsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLmZpbHRlcihcbiAgICAgICAgY29tcG9uZW50ID0+ICEhY29tcG9uZW50LnJvdXRlUmVjb3JkXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb21wb25lbnRQYXRoKGNvbXBvbmVudCkge1xuICAgICAgLy8gRG8gdGhlIHNhbWUgYXMgaW4gYERpdG9NZW51YDogTGluayBtZW51IGl0ZW1zIHRvIHRoZSBmaXJzdCBjaGlsZHJlbi5cbiAgICAgIGNvbnN0IHsgc2NoZW1hIH0gPSBjb21wb25lbnRcbiAgICAgIHJldHVybiBzY2hlbWEudHlwZSA9PT0gJ21lbnUnXG4gICAgICAgID8gT2JqZWN0LnZhbHVlcyhzY2hlbWEuaXRlbXMpWzBdLmZ1bGxQYXRoXG4gICAgICAgIDogY29tcG9uZW50LnBhdGhcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50SHJlZihjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZXIucmVzb2x2ZSh0aGlzLmdldENvbXBvbmVudFBhdGgoY29tcG9uZW50KSkuaHJlZlxuICAgIH0sXG5cbiAgICBvbkNsaWNrQ29tcG9uZW50KGNvbXBvbmVudCkge1xuICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICBwYXRoOiB0aGlzLmdldENvbXBvbmVudFBhdGgoY29tcG9uZW50KSxcbiAgICAgICAgZm9yY2U6IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldExpbmtDbGFzcyhjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWFjdGl2ZSc6IGNvbXBvbmVudC5wYXRoID09PSB0aGlzLiRyb3V0ZS5wYXRoXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFNwYW5DbGFzcyhjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWRpcnR5JzogY29tcG9uZW50LmlzRGlydHlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10cmFpbCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGhlaWdodDogM2VtO1xuXG4gIHVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICB9XG5cbiAgbGkge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cblxuICBhIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIHNwYW4ge1xuICAgICAgICBjb2xvcjogJGNvbG9yLWxpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxpOm5vdCg6bGFzdC1jaGlsZCkgYSB7XG4gICAgJGFuZ2xlOiAzM2RlZztcblxuICAgICY6OmJlZm9yZSxcbiAgICAmOjphZnRlciB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHdpZHRoOiAxcHg7XG4gICAgICBoZWlnaHQ6IDAuNzVlbTtcbiAgICAgIHJpZ2h0OiAtMC4yNWVtO1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgIH1cblxuICAgICY6OmJlZm9yZSB7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKCRhbmdsZSk7XG4gICAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3A7XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgYm90dG9tOiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtJGFuZ2xlKTtcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGJvdHRvbTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxubmF2LmRpdG8taGVhZGVyXG4gIERpdG9UcmFpbFxuICAgIERpdG9TcGlubmVyKFxuICAgICAgdi1pZj1cImlzTG9hZGluZ1wiXG4gICAgICA6c2l6ZT1cInNwaW5uZXI/LnNpemVcIlxuICAgICAgOmNvbG9yPVwic3Bpbm5lcj8uY29sb3JcIlxuICAgIClcbiAgLy8tIFRlbGVwb3J0IHRhcmdldCBmb3IgYC5kaXRvLXNjaGVtYS1oZWFkZXJgOlxuICAuZGl0by1oZWFkZXJfX3RlbGVwb3J0XG4gIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9IZWFkZXInLCB7XG4gIHByb3BzOiB7XG4gICAgc3Bpbm5lcjoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgaXNMb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1oZWFkZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJhY2tncm91bmQ6ICRjb2xvci1ibGFjaztcbiAgZm9udC1zaXplOiAkaGVhZGVyLWZvbnQtc2l6ZTtcbiAgbGluZS1oZWlnaHQ6ICRoZWFkZXItbGluZS1oZWlnaHQ7XG4gIHotaW5kZXg6ICR6LWluZGV4LWhlYWRlcjtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgJjo6YWZ0ZXIge1xuICAgIC8vIFNldCB0aGUgZnVsbC13aWR0aCBoZWFkZXIgYmFja2dyb3VuZCB0byB0aGUgaGVhZGVyIGNvbG9yLlxuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGluc2V0OiAwO1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYmFja2dyb3VuZDogaW5oZXJpdDtcbiAgICB6LWluZGV4OiAtMTtcbiAgfVxuXG4gIHNwYW4ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwYWRkaW5nOiAkaGVhZGVyLXBhZGRpbmc7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcblxuICAgICY6ZW1wdHkge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnXFwyMDBiJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZGl0by1kaXJ0eSB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICB3aWR0aDogOHB4O1xuICAgICAgaGVpZ2h0OiA4cHg7XG4gICAgICBtYXJnaW46IDJweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwLjVlbTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gICAgfVxuICB9XG5cbiAgJl9fdGVsZXBvcnQge1xuICAgIC8vIEFsaWduIHRoZSB0ZWxlcG9ydGVkIHNjaGVtYSBoZWFkZXJzIG9uIHRvcCBvZiB0byB0aGUgaGVhZGVyIG1lbnUuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBwYWRkaW5nOiAwICRoZWFkZXItcGFkZGluZy1ob3I7XG4gICAgLy8gVHVybiBvZmYgcG9pbnRlciBldmVudHMgc28gdGhhdCBEaXRvVHJhaWwga2VlcHMgcmVjZWl2aW5nIGV2ZW50cy4uLlxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIC8vIC4uLmJ1dCBtb3ZlIHRoZW0gdG8gdGhlIGNoaWxkcmVuLlxuICAgID4gKiB7XG4gICAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICB9XG5cbiAgICAuZGl0by1idXR0b24ge1xuICAgICAgbWFyZ2luOiAwIDAgJHRhYi1tYXJnaW4gJHRhYi1tYXJnaW47XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbm5hdi5kaXRvLW5hdmlnYXRpb24uZGl0by1zY3JvbGwtcGFyZW50XG4gIGgxXG4gICAgUm91dGVyTGluay5kaXRvLWxpbmsodG89XCIvXCIpIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gIERpdG9NZW51LmRpdG8tc2Nyb2xsKDppdGVtcz1cInZpZXdzXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvTmF2aWdhdGlvbicsIHt9KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbmF2aWdhdGlvbiB7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gIGZsZXg6IDAgMCBtaW4tY29udGVudDtcbiAgZm9udC1zaXplOiAkbWVudS1mb250LXNpemU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyO1xuXG4gIGgxIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBsaW5lLWhlaWdodDogJGhlYWRlci1saW5lLWhlaWdodDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyO1xuICAgIGJvcmRlci1yaWdodDogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItZGFya2VzdDtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuXG4gICAgLmRpdG8tbGluayB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBhZGRpbmc6ICRoZWFkZXItcGFkZGluZztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tbm90aWZpY2F0aW9uc1xuICAuZGl0by1oZWFkZXJcbiAgICBzcGFuXG4gIC5kaXRvLW5vdGlmaWNhdGlvbnNfX2lubmVyXG4gICAgVnVlTm90aWZpY2F0aW9ucyhcbiAgICAgIHJlZj1cIm5vdGlmaWNhdGlvbnNcIlxuICAgICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgICAgIDpkYW5nZXJvdXNseVNldElubmVySHRtbD1cInRydWVcIlxuICAgICAgcG9zaXRpb249XCJcIlxuICAgICAgd2lkdGg9XCJcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXNBcnJheSwgc3RyaXBUYWdzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvTm90aWZpY2F0aW9ucycsIHtcbiAgbm90aWZpY2F0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5pc01vdW50ZWQgJiYgdGhpcy4kcmVmcy5ub3RpZmljYXRpb25zXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG5vdGlmeSh7IHR5cGUgPSAnaW5mbycsIHRpdGxlLCB0ZXh0IH0gPSB7fSkge1xuICAgICAgdGl0bGUgfHw9IChcbiAgICAgICAge1xuICAgICAgICAgIHdhcm5pbmc6ICdXYXJuaW5nJyxcbiAgICAgICAgICBlcnJvcjogJ0Vycm9yJyxcbiAgICAgICAgICBpbmZvOiAnSW5mb3JtYXRpb24nLFxuICAgICAgICAgIHN1Y2Nlc3M6ICdTdWNjZXNzJ1xuICAgICAgICB9W3R5cGVdIHx8XG4gICAgICAgICdOb3RpZmljYXRpb24nXG4gICAgICApXG4gICAgICB0ZXh0ID0gYDxwPiR7XG4gICAgICAgIGFzQXJyYXkodGV4dCkuam9pbignPC9wPiA8cD4nKVxuICAgICAgfTwvcD5gLnJlcGxhY2UoL1xcbnxcXHJcXG58XFxyL2csICc8YnI+JylcbiAgICAgIGNvbnN0IGxvZyA9IChcbiAgICAgICAge1xuICAgICAgICAgIHdhcm5pbmc6ICd3YXJuJyxcbiAgICAgICAgICBlcnJvcjogJ2Vycm9yJyxcbiAgICAgICAgICBpbmZvOiAnbG9nJyxcbiAgICAgICAgICBzdWNjZXNzOiAnbG9nJ1xuICAgICAgICB9W3R5cGVdIHx8XG4gICAgICAgICdlcnJvcidcbiAgICAgIClcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlW2xvZ10oc3RyaXBUYWdzKHRleHQpKVxuICAgICAgY29uc3QgeyBub3RpZmljYXRpb25zID0gdHJ1ZSB9ID0gdGhpcy5hcGlcbiAgICAgIGlmIChub3RpZmljYXRpb25zKSB7XG4gICAgICAgIC8vIENhbGN1bGF0ZSBkaXNwbGF5LWR1cmF0aW9uIGZvciB0aGUgbm90aWZpY2F0aW9uIGJhc2VkIG9uIGl0cyBjb250ZW50XG4gICAgICAgIC8vIGFuZCB0aGUgc2V0dGluZyBvZiB0aGUgYGR1cmF0aW9uRmFjdG9yYCBjb25maWd1cmF0aW9uLiBJdCBkZWZpbmVzIHRoZVxuICAgICAgICAvLyBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIG11bHRpcGxpZWQgd2l0aCB0aGUgYW1vdW50IG9mIGNoYXJhY3RlcnNcbiAgICAgICAgLy8gZGlzcGxheWVkIGluIHRoZSBub3RpZmljYXRpb24sIHBsdXMgNDAgKDQwICsgdGl0bGUgKyBtZXNzYWdlKTpcbiAgICAgICAgY29uc3QgeyBkdXJhdGlvbkZhY3RvciA9IDIwIH0gPSBub3RpZmljYXRpb25zXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKDQwICsgdGV4dC5sZW5ndGggKyB0aXRsZS5sZW5ndGgpICogZHVyYXRpb25GYWN0b3JcbiAgICAgICAgdGhpcy4kbm90aWZ5KHsgdHlwZSwgdGl0bGUsIHRleHQsIGR1cmF0aW9uIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlc3Ryb3lBbGwoKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuZGVzdHJveUFsbCgpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQHVzZSAnc2Fzczpjb2xvcic7XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG5AbWl4aW4gdHlwZSgkYmFja2dyb3VuZCkge1xuICBiYWNrZ3JvdW5kOiBjb2xvci5hZGp1c3QoJGJhY2tncm91bmQsICRsaWdodG5lc3M6IDUlKTtcbiAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgYm9yZGVyLWxlZnQ6IDEycHggc29saWQgY29sb3IuYWRqdXN0KCRiYWNrZ3JvdW5kLCAkbGlnaHRuZXNzOiAtMTAlKTtcbn1cblxuLmRpdG8tbm90aWZpY2F0aW9ucyB7XG4gICRub3RpZmljYXRpb24td2lkdGg6IDMwMHB4O1xuXG4gIGZsZXg6IDE7XG4gIHotaW5kZXg6ICR6LWluZGV4LW5vdGlmaWNhdGlvbnM7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nO1xuICAvLyBGb3IgdGhlIGBAY29udGFpbmVyYCBydWxlIHRvIHdvcms6XG4gIGNvbnRhaW5lci10eXBlOiBpbmxpbmUtc2l6ZTtcblxuICAuZGl0by1oZWFkZXIge1xuICAgIHNwYW4ge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICB9XG4gIH1cblxuICAmX19pbm5lciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLnZ1ZS1ub3RpZmljYXRpb24tZ3JvdXAge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIHRvcDogMDtcbiAgICB3aWR0aDogJG5vdGlmaWNhdGlvbi13aWR0aDtcblxuICAgIEBjb250YWluZXIgKHdpZHRoIDwgI3skbm90aWZpY2F0aW9uLXdpZHRoICsgJGNvbnRlbnQtcGFkZGluZ30pIHtcbiAgICAgIGxlZnQ6IHVuc2V0O1xuICAgICAgcmlnaHQ6ICRjb250ZW50LXBhZGRpbmc7XG4gICAgfVxuICB9XG5cbiAgLnZ1ZS1ub3RpZmljYXRpb24td3JhcHBlciB7XG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIH1cblxuICAuZGl0by1ub3RpZmljYXRpb24ge1xuICAgIHBhZGRpbmc6IDhweDtcbiAgICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmcgMDtcbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcblxuICAgIC5ub3RpZmljYXRpb24tdGl0bGUge1xuICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogOHB4O1xuICAgIH1cblxuICAgIC5ub3RpZmljYXRpb24tY29udGVudCB7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgd29yZC1icmVhazogYnJlYWstYWxsO1xuXG4gICAgICBwIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAgICYgKyBwIHtcbiAgICAgICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLFxuICAgICYuaW5mbyB7XG4gICAgICBAaW5jbHVkZSB0eXBlKCRjb2xvci1hY3RpdmUpO1xuICAgIH1cblxuICAgICYuc3VjY2VzcyB7XG4gICAgICBAaW5jbHVkZSB0eXBlKCRjb2xvci1zdWNjZXNzKTtcbiAgICB9XG5cbiAgICAmLndhcm5pbmcge1xuICAgICAgQGluY2x1ZGUgdHlwZSgkY29sb3Itd2FybmluZyk7XG4gICAgfVxuXG4gICAgJi5lcnJvciB7XG4gICAgICBAaW5jbHVkZSB0eXBlKCRjb2xvci1lcnJvcik7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmFzaWRlLmRpdG8tc2lkZWJhci5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIHYtcmVzaXplPVwib25SZXNpemVTaWRlYmFyXCJcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4pXG4gIG5hdi5kaXRvLWhlYWRlclxuICAgIHNsb3RcbiAgLmRpdG8tc2lkZWJhcl9fdGVsZXBvcnQuZGl0by1zY3JvbGxcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9TaWRlYmFyJywge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaWRlYmFyV2lkdGg6IDBcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tc2lkZWJhcidcbiAgICAgIC8vIE5PVEU6IEtlZXAgc3luY2VkIHdpdGggJHNpZGViYXItbWF4LXdpZHRoIGluIFNDU1M6XG4gICAgICBjb25zdCBzaWRlYmFyV2lkdGggPSAzNjBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtgJHtwcmVmaXh9LS13aWR0aC05OWBdOiB0aGlzLnNpZGViYXJXaWR0aCA8IHNpZGViYXJXaWR0aCxcbiAgICAgICAgW2Ake3ByZWZpeH0tLXdpZHRoLTYwYF06IHRoaXMuc2lkZWJhcldpZHRoIDw9IHNpZGViYXJXaWR0aCAqIDAuNlxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25SZXNpemVTaWRlYmFyKHsgY29udGVudFJlY3Q6IHsgd2lkdGggfSB9KSB7XG4gICAgICB0aGlzLnNpZGViYXJXaWR0aCA9IHdpZHRoXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2lkZWJhciB7XG4gIGZsZXg6IDAgMSAkc2lkZWJhci1tYXgtd2lkdGg7XG4gIG1heC13aWR0aDogJHNpZGViYXItbWF4LXdpZHRoO1xuICBtaW4td2lkdGg6ICRzaWRlYmFyLW1pbi13aWR0aDtcbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi9Eb21NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1bGxkb3duOiB7XG4gICAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgICBzdGFydFRpbWU6IDAsXG4gICAgICAgIGNoZWNrVGltZTogdHJ1ZSxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgbW91c2Vkb3duOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgbW91c2V1cDogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub25QdWxsZG93bk1vdXNlVXAoKSkge1xuICAgICAgICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVyczogbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSA9IG51bGwpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLnNldFB1bGxkb3duT3Blbih0cnVlKVxuICAgICAgICB0aGlzLmNoZWNrVGltZSA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93bk1vdXNlVXAodmFsdWUgPSBudWxsKSB7XG4gICAgICBjb25zdCB7IHN0YXJ0VGltZSB9ID0gdGhpcy5wdWxsZG93blxuICAgICAgaWYgKCF0aGlzLmNoZWNrVGltZSB8fCBzdGFydFRpbWUgJiYgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPiAyNTApKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLm9uUHVsbGRvd25TZWxlY3QodmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93blNlbGVjdCgvKiB2YWx1ZSAqLykge1xuICAgICAgLy8gTk9URTogVG8gYmUgb3ZlcnJpZGRlbi5cbiAgICB9LFxuXG4gICAgc2V0UHVsbGRvd25PcGVuKG9wZW4pIHtcbiAgICAgIHRoaXMucHVsbGRvd24ub3BlbiA9IG9wZW5cbiAgICAgIHRoaXMucHVsbGRvd24uc3RhcnRUaW1lID0gb3BlbiA/IERhdGUubm93KCkgOiAwXG4gICAgICBpZiAob3Blbikge1xuICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwgdGhpcy5wdWxsZG93bi5ldmVudHMpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tYWNjb3VudFxuICBhKFxuICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gIClcbiAgICBzcGFuIHt7IHVzZXIudXNlcm5hbWUgfX1cbiAgdWwuZGl0by1wdWxsZG93big6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIilcbiAgICBsaShcbiAgICAgIHYtZm9yPVwiKGxhYmVsLCB2YWx1ZSkgb2YgaXRlbXNcIlxuICAgIClcbiAgICAgIGEoXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpXCJcbiAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh2YWx1ZSlcIlxuICAgICAgKSB7eyBsYWJlbCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUHVsbGRvd25NaXhpbiBmcm9tICcuLi9taXhpbnMvUHVsbGRvd25NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQWNjb3VudCcsIHtcbiAgbWl4aW5zOiBbUHVsbGRvd25NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHtcbiAgICAgICAgc2V0dGluZ3M6ICdTZXR0aW5ncycsXG4gICAgICAgIGxvZ291dDogJ0xvZ291dCdcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUHVsbGRvd25TZWxlY3QodmFsdWUpIHtcbiAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgY2FzZSAnbG9nb3V0JzpcbiAgICAgICAgICB0aGlzLnJvb3RDb21wb25lbnQubG9nb3V0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdzZXR0aW5ncyc6XG4gICAgICAgICAgY29uc29sZS5pbmZvKCdUT0RPOiBJbXBsZW1lbnQgU2V0dGluZ3MnKVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tYWNjb3VudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXG4gIC5kaXRvLXB1bGxkb3duIHtcbiAgICB0b3A6ICRwdWxsZG93bi1wYWRkaW5nLXZlcjtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5jb21wb25lbnQoXG4gIHYtaWY9XCJvcHRpb25zPy50ZXh0ICE9IG51bGxcIlxuICA6aXM9XCJ0YWdOYW1lXCJcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIDpzdHlsZT1cInN0eWxlc1wiXG4pIHt7IG9wdGlvbnMudGV4dCB9fVxuY29tcG9uZW50KFxuICB2LWVsc2UtaWY9XCJvcHRpb25zPy5odG1sICE9IG51bGxcIlxuICA6aXM9XCJ0YWdOYW1lXCJcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIDpzdHlsZT1cInN0eWxlc1wiXG4gIHYtaHRtbD1cIm9wdGlvbnMuaHRtbFwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0VsZW1lbnQnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFnOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NwYW4nIH0sXG4gICAgY29udGVudDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG9wdGlvbnMoKSB7XG4gICAgICBjb25zdCB7IGNvbnRlbnQgfSA9IHRoaXNcbiAgICAgIHJldHVybiBjb250ZW50ICE9IG51bGxcbiAgICAgICAgPyBpc09iamVjdChjb250ZW50KVxuICAgICAgICAgID8gY29udGVudFxuICAgICAgICAgIDogeyB0ZXh0OiBjb250ZW50IH1cbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIHRhZ05hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRhZyB8fCB0aGlzLnRhZ1xuICAgIH0sXG5cbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy4kYXR0cnMuY2xhc3MpLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuY2xhc3MpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMuJGF0dHJzLnN0eWxlKSxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLnN0eWxlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuZnVuY3Rpb24gYXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLnJlZHVjZSgob2JqZWN0LCBlbnRyeSkgPT4ge1xuICAgIGlmIChpc1N0cmluZyhlbnRyeSkpIHtcbiAgICAgIG9iamVjdFtlbnRyeV0gPSB0cnVlXG4gICAgfSBlbHNlIGlmIChpc09iamVjdChlbnRyeSkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqZWN0LCBlbnRyeSlcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdFxuICB9LCB7fSlcbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmNvbXBvbmVudC5kaXRvLWxhYmVsKFxuICB2LWlmPVwidGV4dCB8fCBjb2xsYXBzaWJsZVwiXG4gIDppcz1cInRhZ1wiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuKVxuICAuZGl0by1jaGV2cm9uKFxuICAgIHYtaWY9XCJjb2xsYXBzaWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogIWNvbGxhcHNlZCB9XCJcbiAgKVxuICAuZGl0by1sYWJlbF9faW5uZXIoXG4gICAgdi1pZj1cInRleHQgfHwgcHJlZml4ZXMubGVuZ3RoID4gMCB8fCBzdWZmaXhlcy5sZW5ndGggPiAwXCJcbiAgKVxuICAgIERpdG9FbGVtZW50LmRpdG8tbGFiZWxfX3ByZWZpeChcbiAgICAgIHYtZm9yPVwiKHByZWZpeCwgaW5kZXgpIG9mIHByZWZpeGVzXCJcbiAgICAgIDprZXk9XCJgcHJlZml4LSR7aW5kZXh9YFwiXG4gICAgICB0YWc9XCJzcGFuXCJcbiAgICAgIDpjb250ZW50PVwicHJlZml4XCJcbiAgICApXG4gICAgbGFiZWwoXG4gICAgICB2LWlmPVwidGV4dFwiXG4gICAgICA6Zm9yPVwiZGF0YVBhdGhcIlxuICAgICAgdi1odG1sPVwidGV4dFwiXG4gICAgKVxuICAgIERpdG9FbGVtZW50LmRpdG8tbGFiZWxfX3N1ZmZpeChcbiAgICAgIHYtZm9yPVwiKHN1ZmZpeCwgaW5kZXgpIG9mIHN1ZmZpeGVzXCJcbiAgICAgIDprZXk9XCJgc3VmZml4LSR7aW5kZXh9YFwiXG4gICAgICB0YWc9XCJzcGFuXCJcbiAgICAgIDpjb250ZW50PVwic3VmZml4XCJcbiAgICApXG4gICAgLmRpdG8taW5mbyhcbiAgICAgIHYtaWY9XCJpbmZvXCJcbiAgICAgIDpkYXRhLWluZm89XCJpbmZvXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvTGFiZWwnLCB7XG4gIGVtaXRzOiBbJ29wZW4nXSxcblxuICBwcm9wczoge1xuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGluZm86IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlID8gJ2EnIDogJ2RpdidcbiAgICB9LFxuXG4gICAgdGV4dCgpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChsYWJlbCkgPyBsYWJlbD8udGV4dCA6IGxhYmVsXG4gICAgfSxcblxuICAgIHByZWZpeGVzKCkge1xuICAgICAgcmV0dXJuIGFzQXJyYXkodGhpcy5sYWJlbD8ucHJlZml4KVxuICAgIH0sXG5cbiAgICBzdWZmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnN1ZmZpeClcbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlID8geyBvbkNsaWNrOiB0aGlzLm9uQ2xpY2sgfSA6IHt9XG4gICAgfSxcblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPT09IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2soKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gdGhpc1xuICAgICAgdGhpcy4kZW1pdCgnb3BlbicsIHRoaXMuY29sbGFwc2VkKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWxhYmVsIHtcbiAgJHNlbGY6ICY7XG5cbiAgLy8gRm9yIGJ1dHRvbnMgYW5kIGNoZXZyb24gdG8gYWxpZ24gcmlnaHQ6XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgLy8gVmVydGljYWxseSBjZW50ZXIgYWxsIGl0ZW1zIGluIHRoZSBsYWJlbCwgZS5nLiBjaGV2cm9uLCBlZGl0LWJ1dHRvbnMuXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1pbi1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG4gIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZy1oYWxmOyAvLyBXaGVuIGlubGluZWQuXG5cbiAgJjpoYXMoLmRpdG8tc2NoZW1hLWhlYWRlcikge1xuICAgIC8vIFRoZSBjb250YWluZXIncyBsYWJlbCBpcyB1c2VkIGFzIHRlbGVwb3J0IGZvciBhIG5lc3RlZCBzZWN0aW9uIG9yIG9iamVjdFxuICAgIC8vIGxhYmVsLiBIaWRlIGAmX19pbm5lcmAsIGFzIGl0IGlzIGJlIGR1cGxpY2F0ZWQgaW5zaWRlIHRoZSBuZXN0ZWQgbGFiZWwuXG4gICAgPiAjeyRzZWxmfV9faW5uZXIge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAmOm5vdCg6aGFzKCsgLmRpdG8tdGFicykpIHtcbiAgICAvLyBUYWtlIGZ1bGwgd2lkdGggYnV0IG9ubHkgaWYgdGhlcmUgYXJlbid0IGFsc28gdGFicyB0byBiZSBjZW50ZXJlZC5cbiAgICBmbGV4OiAxO1xuICB9XG5cbiAgJl9faW5uZXIge1xuICAgIGZsZXg6IDEgMCAwJTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gIGxhYmVsIHtcbiAgICBjdXJzb3I6IGluaGVyaXQ7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cblxuICBsYWJlbCxcbiAgJl9fcHJlZml4LFxuICAmX19zdWZmaXgge1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgfVxuXG4gICZfX3ByZWZpeCArIGxhYmVsLFxuICBsYWJlbCArICZfX3N1ZmZpeCB7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6ICdcXGEwJzsgLy8gJm5ic3A7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tYnV0dG9ucyB7XG4gICAgLy8gTW92ZSB0aGUgbGFiZWwgcGFkZGluZyBpbnNpZGUgLmRpdG8tYnV0dG9ucywgc28gdGhhdCBpdCBjYXB0dXJlcyBhbGxcbiAgICAvLyBuZWFyIG1vdXNlIGV2ZW50czpcbiAgICBtYXJnaW46IGNhbGMoLTEgKiB2YXIoLS1sYWJlbC1wYWRkaW5nKSk7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZyk7XG4gIH1cblxuICAmLmRpdG8td2lkdGgtZmlsbCB7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAvLyBJbiBvcmRlciBmb3IgZWxsaXBzaXMgdG8gd29yayBvbiBsYWJlbHMgd2l0aG91dCBhZmZlY3Rpbmcgb3RoZXIgbGF5b3V0LFxuICAgIC8vIHdlIG5lZWQgdG8gcG9zaXRpb24gaXQgYWJzb2x1dGVseSBpbnNpZGUgaXRzIGNvbnRhaW5lci4gQnV0IHdlIGNhbiBvbmx5XG4gICAgLy8gZG8gc28gaWYgdGhlcmUgaXMndCBhbHNvIGEgY2hldnJvbiBvciBvdGhlciBVWCBlbGVtZW50cyBiZXNpZGVzIGl0LlxuICAgICY6aGFzKD4gI3skc2VsZn1fX2lubmVyOm9ubHktY2hpbGQpIHtcbiAgICAgIGZsZXg6IDE7IC8vIFdoZW4gaW4gYC5kaXRvLXNjaGVtYS1oZWFkZXJgLlxuXG4gICAgICA+ICN7JHNlbGZ9X19pbm5lciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgaW5zZXQ6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgLy8gU2luY2UgPGxhYmVsPiB1c2VzIGBwb3NpdGlvbjogYWJzb2x1dGVgLCBzZXQgY29udGVudCB0byBhIHplcm8td2lkdGhcbiAgICAgIC8vIHNwYWNlIG9uIGl0cyBwYXJlbnQgdG8gZW5mb3JjZSB0aGUgcmlnaHQgdGV4dCBoZWlnaHQgaW4gdGhlIGNvbnRhaW5lclxuICAgICAgY29udGVudDogJ1xcMjAwYic7IC8vIHplcm8td2lkdGggc3BhY2U7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8taW5mbyB7XG4gICAgbWFyZ2luLWxlZnQ6IDAuMzVlbTtcbiAgfVxufVxuXG5hLmRpdG8tbGFiZWwge1xuICAmOmhvdmVyIHtcbiAgICAuZGl0by1jaGV2cm9uIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItZGFya2VyO1xuICAgIH1cbiAgfVxuXG4gICY6Zm9jdXM6bm90KDphY3RpdmUsIC5kaXRvLWFjdGl2ZSkge1xuICAgIC5kaXRvLWNoZXZyb24ge1xuICAgICAgLXdlYmtpdC10ZXh0LXN0cm9rZTogJGJvcmRlci13aWR0aCAkY29sb3ItYWN0aXZlO1xuICAgIH1cbiAgICAvLyBEaXNwbGF5IGxhYmVscyBpbiBjb21wYWN0IHNjaGVtYSBhcyBpbmxpbmUtYmxvY2tzLCB0byBhbGxvdyBjb21wYWN0XG4gICAgLy8gbGF5b3V0cyB3aXRoIGB3aWR0aDogJ2F1dG8nYCBlbGVtZW50czpcbiAgICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byBjb250cm9sIHRoaXMgYmVoYXZpb3IuXG4gIH1cbn1cblxuLmRpdG8tc2NoZW1hLWNvbXBhY3Qge1xuICA+IC5kaXRvLXNjaGVtYS1jb250ZW50IHtcbiAgICA+IC5kaXRvLXBhbmUge1xuICAgICAgPiAuZGl0by1jb250YWluZXI6bm90KC5kaXRvLWNvbnRhaW5lci0tbGFiZWwtdmVydGljYWwpIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQge1xuICBnZXRJdGVtRm9ybVNjaGVtYSxcbiAgZ2V0SXRlbUlkLFxuICBnZXRJdGVtVWlkLFxuICBpc0xpc3RTb3VyY2Vcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWV0aG9kczoge1xuICAgIGdldEl0ZW1Gb3JtU2NoZW1hLFxuXG4gICAgZ2V0SXRlbVVpZCxcblxuICAgIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4ID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnQgJiYgaW5kZXggIT09IG51bGxcbiAgICAgICAgPyBTdHJpbmcoaW5kZXgpXG4gICAgICAgIDogZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSlcbiAgICB9LFxuXG4gICAgZ2V0SXRlbURhdGFQYXRoKHNvdXJjZVNjaGVtYSwgaW5kZXgpIHtcbiAgICAgIGxldCB7IGRhdGFQYXRoIH0gPSB0aGlzXG4gICAgICBpZiAoc291cmNlU2NoZW1hICE9PSB0aGlzLnNjaGVtYSkge1xuICAgICAgICBkYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBzb3VyY2VTY2hlbWEubmFtZSlcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGluZGV4KVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFQYXRoXG4gICAgfSxcblxuICAgIGdldEl0ZW1TdG9yZShzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDaGlsZFN0b3JlKHRoaXMuZ2V0SXRlbVVpZChzb3VyY2VTY2hlbWEsIGl0ZW0pLCBpbmRleClcbiAgICB9LFxuXG4gICAgcmVtb3ZlSXRlbVN0b3JlKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXgpIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2hpbGRTdG9yZSh0aGlzLmdldEl0ZW1VaWQoc291cmNlU2NoZW1hLCBpdGVtKSwgaW5kZXgpXG4gICAgfSxcblxuICAgIGZpbmRJdGVtSWRJbmRleChzb3VyY2VTY2hlbWEsIGRhdGEsIGl0ZW1JZCkge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmlzVHJhbnNpZW50XG4gICAgICAgID8gLy8gRm9yIHRyYW5zaWVudCBkYXRhLCB0aGUgaW5kZXggaXMgdXNlZCBhcyB0aGUgaWRcbiAgICAgICAgICBpdGVtSWRcbiAgICAgICAgOiBkYXRhPy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoaXRlbSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgdGhpcy5nZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCkgPT09IGl0ZW1JZFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgIHJldHVybiBpbmRleCAhPT0gLTEgPyBpbmRleCA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0SXRlbUxhYmVsKHNvdXJjZVNjaGVtYSwgaXRlbSwge1xuICAgICAgaW5kZXggPSBudWxsLFxuICAgICAgZXh0ZW5kZWQgPSBmYWxzZSxcbiAgICAgIGFzT2JqZWN0ID0gZmFsc2VcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IHsgaXRlbUxhYmVsIH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgIGlmICghaXRlbSB8fCAhZXh0ZW5kZWQgJiYgaXRlbUxhYmVsID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YVBhdGhcbiAgICAgIGNvbnN0IGdldERhdGFQYXRoID0gKCkgPT5cbiAgICAgICAgKGRhdGFQYXRoID8/PSB0aGlzLmdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSlcblxuICAgICAgbGV0IGZvcm1MYWJlbFxuICAgICAgY29uc3QgZ2V0Rm9ybUxhYmVsID0gKCkgPT5cbiAgICAgICAgKGZvcm1MYWJlbCA/Pz0gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgICBnZXRJdGVtRm9ybVNjaGVtYShzb3VyY2VTY2hlbWEsIGl0ZW0sIHRoaXMuY29udGV4dClcbiAgICAgICAgKSlcblxuICAgICAgbGV0IHRleHRcbiAgICAgIGxldCBwcmVmaXhcbiAgICAgIGxldCBzdWZmaXhcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGl0ZW1MYWJlbCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBpdGVtTGFiZWwuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgaW5kZXgsXG5cbiAgICAgICAgICAgIGdldCBkYXRhUGF0aCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldERhdGFQYXRoKClcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldCBmb3JtTGFiZWwoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRGb3JtTGFiZWwoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgaWYgKGlzT2JqZWN0KGxhYmVsKSkge1xuICAgICAgICAgIDsoeyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9ID0gbGFiZWwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dCA9IGxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgLy8gSXQncyB1cCB0byBgaXRlbUxhYmVsKClgIGVudGlyZWx5IHRvIHByb2R1Y2UgdGhlIGxhYmVsOlxuICAgICAgICBleHRlbmRlZCA9IGZhbHNlXG4gICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKGl0ZW1MYWJlbCkgJiYgIShpdGVtTGFiZWwgaW4gaXRlbSkpIHtcbiAgICAgICAgLy8gYGl0ZW1MYWJlbGAgY2FuIGJlIGJvdGggYSBrZXksIG9yIHNpbXBseSBhIGxhYmVsLlxuICAgICAgICB0ZXh0ID0gaXRlbUxhYmVsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMb29rIHVwIHRoZSBuYW1lIG9uIHRoZSBpdGVtLCBieSB0aGVzZSBydWxlczpcbiAgICAgICAgLy8gMS4gSWYgYGl0ZW1MYWJlbGAgaXMgYSBzdHJpbmcsIHVzZSBpdCBhcyB0aGUgcHJvcGVydHkga2V5XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgdGhlcmUgYXJlIGNvbHVtbnMsIHVzZSB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0XG4gICAgICAgIC8vIDMuIE90aGVyd2lzZSwgc2VlIGlmIHRoZSBpdGVtIGhhcyBhIHByb3BlcnR5IG5hbWVkICduYW1lJ1xuICAgICAgICBjb25zdCB7IGNvbHVtbnMgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgICBjb25zdCBrZXkgPSAoXG4gICAgICAgICAgaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiBpdGVtTGFiZWwgfHxcbiAgICAgICAgICBpc0xpc3RTb3VyY2Uoc291cmNlU2NoZW1hKSAmJiBjb2x1bW5zICYmIE9iamVjdC5rZXlzKGNvbHVtbnMpWzBdIHx8XG4gICAgICAgICAgJ25hbWUnXG4gICAgICAgIClcbiAgICAgICAgdGV4dCA9IGl0ZW1ba2V5XVxuICAgICAgfVxuICAgICAgY29uc3QgaGFkTGFiZWwgPSAhIXRleHRcbiAgICAgIC8vIElmIG5vIGxhYmVsIHdhcyBmb3VuZCBzbyBmYXIsIHRyeSB0byBwcm9kdWNlIG9uZSBmcm9tIHRoZSBpbmRleC5cbiAgICAgIGlmICh0ZXh0ID09IG51bGwpIHtcbiAgICAgICAgLy8gQWx3YXlzIHVzZSBleHRlbmRlZCBzdHlsZSB3aGVuIGF1dG8tZ2VuZXJhdGluZyBsYWJlbHMgZnJvbSBpbmRleC9pZDpcbiAgICAgICAgZXh0ZW5kZWQgPSB0cnVlXG4gICAgICAgIHRleHQgPVxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGluZGV4ICE9PSBudWxsXG4gICAgICAgICAgICA/ICh0ZXh0ID0gYCR7aW5kZXggKyAxfWApXG4gICAgICAgICAgICA6ICcnXG4gICAgICB9XG4gICAgICBpZiAoZXh0ZW5kZWQpIHtcbiAgICAgICAgY29uc3QgZm9ybUxhYmVsID0gZ2V0Rm9ybUxhYmVsKClcbiAgICAgICAgaWYgKGZvcm1MYWJlbCkge1xuICAgICAgICAgIC8vIElmIGEgbGFiZWwgd2FzIHByb3ZpZGVkLCBwdXQgaW4gcXVvdGVzIHdoZW4gcHJlZml4ZWQgd2l0aCB0aGVcbiAgICAgICAgICAvLyBmb3JtIGxhYmVsIGZvciB0aGUgZXh0ZW5kZWQgc3R5bGU6XG4gICAgICAgICAgdGV4dCA9IGAke2Zvcm1MYWJlbH0gJHtoYWRMYWJlbCA/IGAnJHt0ZXh0fSdgIDogdGV4dH1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhc09iamVjdFxuICAgICAgICA/IHRleHQgfHwgcHJlZml4IHx8IHN1ZmZpeFxuICAgICAgICAgID8geyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9XG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIDogdGV4dFxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnNsb3QobmFtZT1cImJlZm9yZVwiKVxuLmRpdG8tc2NoZW1hKFxuICA6Y2xhc3M9XCJ7ICdkaXRvLXNjcm9sbC1wYXJlbnQnOiBzY3JvbGxhYmxlLCAnZGl0by1zY2hlbWEtLW9wZW4nOiBvcGVuZWQgfVwiXG4gIHYtYmluZD1cIiRhdHRyc1wiXG4pXG4gIFRlbGVwb3J0KFxuICAgIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBwYW5lbEVudHJpZXMubGVuZ3RoID4gMFwiXG4gICAgdG89XCIuZGl0by1zaWRlYmFyX190ZWxlcG9ydFwiXG4gIClcbiAgICBEaXRvUGFuZWxzKFxuICAgICAgOnBhbmVscz1cInBhbmVsRW50cmllc1wiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gIFRlbGVwb3J0KFxuICAgIHYtaWY9XCJoYXNIZWFkZXJcIlxuICAgIDp0bz1cImhlYWRlclRlbGVwb3J0XCJcbiAgICA6ZGlzYWJsZWQ9XCIhaGVhZGVyVGVsZXBvcnRcIlxuICApXG4gICAgLmRpdG8tc2NoZW1hLWhlYWRlclxuICAgICAgRGl0b0xhYmVsKFxuICAgICAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICA6Y29sbGFwc2VkPVwiIW9wZW5lZFwiXG4gICAgICAgIEBvcGVuPVwib25PcGVuXCJcbiAgICAgIClcbiAgICAgIFRyYW5zaXRpb24oXG4gICAgICAgIHYtaWY9XCJ0YWJzXCJcbiAgICAgICAgbmFtZT1cImRpdG8tZmFkZVwiXG4gICAgICApXG4gICAgICAgIERpdG9UYWJzKFxuICAgICAgICAgIHYtaWY9XCJvcGVuZWRcIlxuICAgICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFRhYlwiXG4gICAgICAgICAgOnRhYnM9XCJ0YWJzXCJcbiAgICAgICAgKVxuICAgICAgRGl0b0NsaXBib2FyZChcbiAgICAgICAgdi1pZj1cImNsaXBib2FyZFwiXG4gICAgICAgIDpjbGlwYm9hcmQ9XCJjbGlwYm9hcmRcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIClcbiAgICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuICBUcmFuc2l0aW9uSGVpZ2h0KDplbmFibGVkPVwiaW5saW5lZFwiKVxuICAgIC5kaXRvLXNjaGVtYS1jb250ZW50KFxuICAgICAgdi1pZj1cIm9wZW5lZFwiXG4gICAgICByZWY9XCJjb250ZW50XCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2Nyb2xsJzogc2Nyb2xsYWJsZSB9XCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cImhhc1RhYnNcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWZvcj1cIih0YWJTY2hlbWEsIHRhYikgaW4gdGFic1wiXG4gICAgICAgICAgOmtleT1cInRhYlwiXG4gICAgICAgIClcbiAgICAgICAgICAvLy0gVE9ETzogU3dpdGNoIHRvIHYtaWYgaW5zdGVhZCBvZiB2LXNob3csIG9uY2UgdmFsaWRhdGlvbiBpc1xuICAgICAgICAgIC8vLSBkZWNvdXBsZWQgZnJvbSBjb21wb25lbnRzLlxuICAgICAgICAgIERpdG9QYW5lLmRpdG8tcGFuZV9fdGFiKFxuICAgICAgICAgICAgdi1zaG93PVwic2VsZWN0ZWRUYWIgPT09IHRhYlwiXG4gICAgICAgICAgICByZWY9XCJ0YWJzXCJcbiAgICAgICAgICAgIDp0YWI9XCJ0YWJcIlxuICAgICAgICAgICAgOnNjaGVtYT1cInRhYlNjaGVtYVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgIDpwYWRkaW5nPVwicGFkZGluZ1wiXG4gICAgICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc01haW5QYW5lXCJcbiAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgICAgICAgIDphY2N1bXVsYXRlZEJhc2lzPVwiYWNjdW11bGF0ZWRCYXNpc1wiXG4gICAgICAgICAgKVxuICAgICAgRGl0b1BhbmUuZGl0by1wYW5lX19tYWluKFxuICAgICAgICB2LWlmPVwiaGFzTWFpblBhbmVcIlxuICAgICAgICByZWY9XCJjb21wb25lbnRzXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6cGFkZGluZz1cInBhZGRpbmdcIlxuICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc1RhYnNcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgICAgOmFjY3VtdWxhdGVkQmFzaXM9XCJhY2N1bXVsYXRlZEJhc2lzXCJcbiAgICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCIhaW5saW5lZCAmJiBpc1BvcHVsYXRlZFwiXG4gICAgICAgIG5hbWU9XCJidXR0b25zXCJcbiAgICAgIClcbiAgc2xvdChcbiAgICB2LWlmPVwiaW5saW5lZCAmJiAhaGFzSGVhZGVyXCJcbiAgICBuYW1lPVwiZWRpdC1idXR0b25zXCJcbiAgKVxuc2xvdChuYW1lPVwiYWZ0ZXJcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNBcnJheSxcbiAgaXNGdW5jdGlvbixcbiAgaXNSZWdFeHAsXG4gIGVxdWFscyxcbiAgcGFyc2VEYXRhUGF0aCxcbiAgbm9ybWFsaXplRGF0YVBhdGgsXG4gIGxhYmVsaXplXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBUcmFuc2l0aW9uSGVpZ2h0IH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuLi9taXhpbnMvSXRlbU1peGluLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGgsIGdldFBhcmVudEl0ZW0gfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgZ2V0TmFtZWRTY2hlbWFzLFxuICBnZXRQYW5lbEVudHJpZXMsXG4gIHNldERlZmF1bHRWYWx1ZXMsXG4gIHByb2Nlc3NEYXRhXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yLCBnZXRTdG9yZUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1NjaGVtYScsIHtcbiAgbWl4aW5zOiBbSXRlbU1peGluXSxcbiAgY29tcG9uZW50czogeyBUcmFuc2l0aW9uSGVpZ2h0IH0sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNjaGVtYUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBpbmplY3Q6IFtcbiAgICAnJHNjaGVtYVBhcmVudENvbXBvbmVudCdcbiAgXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcGFkZGluZzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBpbmxpbmVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHNjcm9sbGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBoYXNPd25EYXRhOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbE5vZGU6IHsgdHlwZTogSFRNTEVsZW1lbnQsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBhY2N1bXVsYXRlZEJhc2lzOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBwcm92aWRlIG1vcmUgZGF0YSB0aHJvdWdoIGBzY2hlbWEuZGF0YWAsIHZ1ZS1zdHlsZTpcbiAgICAgIC4uLihcbiAgICAgICAgZGF0YSAmJiBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgICAgPyBkYXRhKHRoaXMuY29udGV4dClcbiAgICAgICAgICA6IGRhdGFcbiAgICAgICksXG4gICAgICBjdXJyZW50VGFiOiBudWxsLFxuICAgICAgY29tcG9uZW50c1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZWxzUmVnaXN0cnk6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgc2NoZW1hQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBEb24ndCByZXR1cm4gdGhlIGFjdHVhbCBwYXJlbnQgc2NoZW1hIGlzIHRoaXMgc2NoZW1hIGhhbmRsZXMgaXRzIG93blxuICAgICAgLy8gZGF0YS4gVGhpcyBwcmV2ZW50cyBkZWxlZ2F0aW5nIGV2ZW50cyB0byB0aGUgcGFyZW50LCBhbmQgcmVnaXN0ZXJpbmdcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCB0aGUgcGFyZW50IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gc2V0IGlzRGlydHkgZmxhZ3MuXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gbnVsbCA6IHRoaXMucGFyZW50Q29tcG9uZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYW5lbEVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0UGFuZWxFbnRyaWVzKHRoaXMuc2NoZW1hLnBhbmVscywgdGhpcy5kYXRhUGF0aClcbiAgICB9LFxuXG4gICAgdGFicygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEudGFicylcbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRUYWI6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFRhYiB8fCB0aGlzLmRlZmF1bHRUYWIgfHwgbnVsbFxuICAgICAgfSxcblxuICAgICAgc2V0KHNlbGVjdGVkVGFiKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFRhYiA9IHNlbGVjdGVkVGFiXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlZmF1bHRUYWIoKSB7XG4gICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICBpZiAodGhpcy50YWJzKSB7XG4gICAgICAgIGNvbnN0IHRhYnMgPSBPYmplY3QudmFsdWVzKHRoaXMudGFicykuZmlsdGVyKHRoaXMuc2hvdWxkUmVuZGVyU2NoZW1hKVxuICAgICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgZGVmYXVsdFRhYiB9IG9mIHRhYnMpIHtcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihkZWZhdWx0VGFiKSA/IGRlZmF1bHRUYWIodGhpcy5jb250ZXh0KSA6IGRlZmF1bHRUYWIpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lXG4gICAgICAgICAgfVxuICAgICAgICAgIGZpcnN0ID8/PSBuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmaXJzdFxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWE/LmNsaXBib2FyZCA/PyBudWxsXG4gICAgfSxcblxuICAgIGhhc0hlYWRlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc0xhYmVsIHx8IHRoaXMuaGFzVGFicyB8fCAhIXRoaXMuY2xpcGJvYXJkXG4gICAgfSxcblxuICAgIGhlYWRlclRlbGVwb3J0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNSb290U2NoZW1hXG4gICAgICAgID8gJy5kaXRvLWhlYWRlcl9fdGVsZXBvcnQnXG4gICAgICAgIDogdGhpcy5sYWJlbE5vZGVcbiAgICB9LFxuXG4gICAgcGFyZW50RGF0YSgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBnZXRQYXJlbnRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIGZhbHNlKVxuICAgICAgcmV0dXJuIGRhdGEgIT09IHRoaXMuZGF0YSA/IGRhdGEgOiBudWxsXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGF0YSh7IHRhcmdldDogJ3NlcnZlcicsIHNjaGVtYU9ubHk6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkRGF0YToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGF0YSh7IHRhcmdldDogJ2NsaXBib2FyZCcsIHNjaGVtYU9ubHk6IHRydWUgfSlcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzLlxuICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgYXM6XG4gICAgLy8gcmV0dXJuIGdldEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcGFyZW50SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudERhdGFcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkRGF0YVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xpcGJvYXJkRGF0YVxuICAgIH0sXG5cbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgdGhpcy5nZXRJdGVtRm9ybVNjaGVtYSh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB0aGlzLmNvbnRleHQpXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzUm9vdFNjaGVtYSgpIHtcbiAgICAgIC8vIFNlY3Rpb24gc2NoZW1hcyBjYW4gc2hhcmUgdGhlIHJvb3QgZGF0YVBhdGggYnV0IHRoZXkgYXJlIGlubGluZWQuXG4gICAgICByZXR1cm4gdGhpcy5kYXRhUGF0aCA9PT0gJycgJiYgIXRoaXMuaW5saW5lZFxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5pc0RpcnR5KVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzVG91Y2hlZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZXJ5Q29tcG9uZW50KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZGF0ZWQpXG4gICAgfSxcblxuICAgIGhhc0Vycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaGFzRXJyb3JzKVxuICAgIH0sXG5cbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5sYWJlbCB8fCB0aGlzLmNvbGxhcHNpYmxlXG4gICAgfSxcblxuICAgIGhhc1RhYnMoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnRhYnNcbiAgICB9LFxuXG4gICAgaGFzTWFpblRhYnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNUYWJzICYmIHRoaXMuaXNSb290U2NoZW1hXG4gICAgfSxcblxuICAgIGhhc01haW5QYW5lKCkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnRzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuICEhY29tcG9uZW50cyAmJiBPYmplY3Qua2V5cyhjb21wb25lbnRzKS5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIG9wZW5lZDogZ2V0U3RvcmVBY2Nlc3Nvcignb3BlbmVkJywge1xuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmNvbGxhcHNlZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50cygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucGFuZXNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZWxzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lbHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgY29tcG9uZW50c0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lc0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZXNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZWxzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgd2lkZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJyRyb3V0ZS5oYXNoJzoge1xuICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzMzOTMjaXNzdWVjb21tZW50LTExNTg0NzAxNDlcbiAgICAgIGZsdXNoOiAncG9zdCcsXG4gICAgICBoYW5kbGVyKGhhc2gpIHtcbiAgICAgICAgLy8gUmVtZW1iZXIgdGhlIGN1cnJlbnQgcGF0aCB0byBrbm93IGlmIHRhYiBjaGFuZ2VzIHNob3VsZCBzdGlsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkLCBidXQgcmVtb3ZlIHRoZSB0cmFpbGluZyBgL2NyZWF0ZWAgb3IgYC86aWRgIGZyb20gaXQgc28gdGhhdFxuICAgICAgICAvLyB0YWJzIGluZm9ybXMgdGhhdCBzdGF5IG9wZW4gYWZ0ZXIgY3JlYXRpb24gc3RpbGwgd29yay5cbiAgICAgICAgaWYgKHRoaXMuaGFzTWFpblRhYnMpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRUYWIgPSBoYXNoPy5zbGljZSgxKSB8fCBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgJ3NlbGVjdGVkVGFiJyhzZWxlY3RlZFRhYikge1xuICAgICAgaWYgKHRoaXMuaGFzTWFpblRhYnMpIHtcbiAgICAgICAgY29uc3QgdGFiID0gdGhpcy5zaG91bGRSZW5kZXJTY2hlbWEodGhpcy50YWJzW3NlbGVjdGVkVGFiXSlcbiAgICAgICAgICA/IHNlbGVjdGVkVGFiXG4gICAgICAgICAgOiB0aGlzLmRlZmF1bHRUYWJcbiAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBoYXNoOiB0YWIgPyBgIyR7dGFifWAgOiBudWxsIH0pXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5oYXNFcnJvcnMpIHtcbiAgICAgICAgdGhpcy5yZXBvc2l0aW9uRXJyb3JzKClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICAgIC8vIERlbGVnYXRlIGNoYW5nZSBldmVudHMgdGhyb3VnaCB0byBwYXJlbnQgc2NoZW1hOlxuICAgIHRoaXMuZGVsZWdhdGUoJ2NoYW5nZScsIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50KVxuICAgIHRoaXMuZW1pdEV2ZW50KCdpbml0aWFsaXplJykgLy8gTm90IGAnY3JlYXRlJ2AsIHNpbmNlIHRoYXQncyBmb3IgZGF0YS5cbiAgICBpZiAodGhpcy5zY3JvbGxhYmxlICYmIHRoaXMud2lkZSkge1xuICAgICAgdGhpcy5hcHBTdGF0ZS5wYWdlQ2xhc3MgPSAnZGl0by1wYWdlLS13aWRlJ1xuICAgIH1cbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5lbWl0RXZlbnQoJ2Rlc3Ryb3knKVxuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICAgIGlmICh0aGlzLnNjcm9sbGFibGUgJiYgdGhpcy53aWRlKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLnBhZ2VDbGFzcyA9IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgodGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudHNCeU5hbWUoZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRCeU5hbWUobmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudHMoZGF0YVBhdGhPck5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoT3JOYW1lKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnQoZGF0YVBhdGhPck5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHMoZGF0YVBhdGhPck5hbWUpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZWxzQnlEYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgfSxcblxuICAgIGdldFBhbmVsQnlEYXRhUGF0aChkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRQYW5lbHMoZGF0YVBhdGhPck5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMucGFuZWxzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUpXG4gICAgfSxcblxuICAgIGdldFBhbmVsKGRhdGFQYXRoT3JOYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQYW5lbHMoZGF0YVBhdGhPck5hbWUpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgc29tZUNvbXBvbmVudChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNQb3B1bGF0ZWQgJiYgdGhpcy5jb21wb25lbnRzLnNvbWUoY2FsbGJhY2spXG4gICAgfSxcblxuICAgIGV2ZXJ5Q29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuZXZlcnkoY2FsbGJhY2spXG4gICAgfSxcblxuICAgIG9uT3BlbihvcGVuKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnb3BlbicsIHsgY29udGV4dDogeyBvcGVuIH0gfSlcbiAgICAgIC8vIFByZXZlbnQgY2xvc2luZyB0aGUgc2NoZW1hIHdpdGggaW52YWxpZCBkYXRhLCBzaW5jZSB0aGUgaW4tY29tcG9uZW50XG4gICAgICAvLyB2YWxpZGF0aW9uIHdpbGwgbm90IGJlIGV4ZWN1dGVkIG9uY2UgaXQncyBjbG9zZWQuXG5cbiAgICAgIC8vIFRPRE86IE1vdmUgdmFsaWRhdGlvbiBvdXQgb2YgY29tcG9uZW50cywgdG8gc2NoZW1hLCBqdXN0IGxpa2VcbiAgICAgIC8vIHByb2Nlc3NpbmcsIGFuZCB1c2UgYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIGZvciB0aGUgcmVzdWx0aW5nIGVycm9ycyxcbiAgICAgIC8vIHRoZW4gcmVtb3ZlIHRoaXMgcmVxdWlyZW1lbnQsIHNpbmNlIHdlIGNhbiB2YWxpZGF0ZSBjbG9zZWQgZm9ybXMgYW5kXG4gICAgICAvLyBzY2hlbWFzIHRoZW4uXG4gICAgICBpZiAoIXRoaXMub3BlbmVkIHx8IG9wZW4gfHwgdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHRoaXMub3BlbmVkID0gb3BlblxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdjaGFuZ2UnKVxuICAgIH0sXG5cbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICAgIGNvbXBvbmVudC5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlcG9zaXRpb25FcnJvcnMoKSB7XG4gICAgICAvLyBGaXJlIGEgZmFrZSBzY3JvbGwgZXZlbnQgdG8gZm9yY2UgdGhlIHJlcG9zaXRpb25pbmcgb2YgZXJyb3IgdG9vbHRpcHMsXG4gICAgICAvLyBhcyBvdGhlcndpc2UgdGhleSBzb21ldGltZXMgZG9uJ3Qgc2hvdyB1cCBpbiB0aGUgcmlnaHQgcGxhY2UgaW5pdGlhbGx5XG4gICAgICAvLyB3aGVuIGNoYW5naW5nIHRhYnMuXG4gICAgICBjb25zdCBzY3JvbGxDb250YWluZXIgPSB0aGlzLiRyZWZzLmNvbnRlbnQuY2xvc2VzdCgnLmRpdG8tc2Nyb2xsJylcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gKCkgPT4gc2Nyb2xsQ29udGFpbmVyLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdzY3JvbGwnKSlcbiAgICAgIGRpc3BhdGNoKClcbiAgICAgIC8vIFRoaXMgaXMgcmVxdWlyZWQgdG8gaGFuZGxlIGAmLS1sYWJlbC12ZXJ0aWNhbGAgYmFzZWQgbGF5b3V0IGNoYW5nZXMuXG4gICAgICBzZXRUaW1lb3V0KGRpc3BhdGNoLCAwKVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMub3BlbmVkID0gdHJ1ZVxuICAgICAgcmV0dXJuIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50Py5mb2N1cygpXG4gICAgfSxcblxuICAgIHZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHNCeURhdGFQYXRoIH0gPSB0aGlzXG4gICAgICBsZXQgZGF0YVBhdGhzXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgY2hlY2sgPSBpc0Z1bmN0aW9uKG1hdGNoKVxuICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICA6IGlzUmVnRXhwKG1hdGNoKVxuICAgICAgICAgICAgPyBmaWVsZCA9PiBtYXRjaC50ZXN0KGZpZWxkKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIGRhdGFQYXRocyA9IGNoZWNrXG4gICAgICAgICAgPyBPYmplY3Qua2V5cyhjb21wb25lbnRzQnlEYXRhUGF0aCkuZmlsdGVyKGNoZWNrKVxuICAgICAgICAgIDogaXNBcnJheShtYXRjaClcbiAgICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICAgIDogW21hdGNoXVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgbGV0IGZpcnN0ID0gdHJ1ZVxuICAgICAgZGF0YVBhdGhzIHx8PSBPYmplY3Qua2V5cyhjb21wb25lbnRzQnlEYXRhUGF0aClcbiAgICAgIGZvciAoY29uc3QgZGF0YVBhdGggb2YgZGF0YVBhdGhzKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKCFjb21wb25lbnQudmFsaWRhdGUobm90aWZ5KSkge1xuICAgICAgICAgICAgLy8gRm9jdXMgZmlyc3QgZXJyb3IgZmllbGRcbiAgICAgICAgICAgIGlmIChub3RpZnkgJiYgZmlyc3QpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50LnNjcm9sbEludG9WaWV3KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSAmJiAhaXNWYWxpZCkge1xuICAgICAgICB0aGlzLm5vdGlmeUVycm9ycygpXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNWYWxpZFxuICAgIH0sXG5cbiAgICB2ZXJpZnlBbGwobWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQWxsKG1hdGNoLCBmYWxzZSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBjb25zdCB1bm1hdGNoZWQgPSBbXVxuICAgICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIGVycnNdIG9mIE9iamVjdC5lbnRyaWVzKGVycm9ycykpIHtcbiAgICAgICAgLy8gSWYgdGhlIHNjaGVtYSBpcyBhIGRhdGEtcm9vdCwgcHJlZml4IGl0cyBvd24gZGF0YVBhdGggdG8gYWxsIGVycm9ycyxcbiAgICAgICAgLy8gc2luY2UgdGhlIGRhdGEgdGhhdCBpdCBzZW5kcyBhbmQgdmFsaWRhdGVzIHdpbGwgYmUgdW5wcmVmaXhlZC5cbiAgICAgICAgY29uc3QgZnVsbERhdGFQYXRoID0gdGhpcy5oYXNPd25EYXRhXG4gICAgICAgICAgPyBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBkYXRhUGF0aClcbiAgICAgICAgICA6IGRhdGFQYXRoXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMsIHRoaXMuZGF0YVBhdGgsIHRoaXMuaGFzT3duRGF0YSwgZnVsbERhdGFQYXRoKVxuICAgICAgICAvLyBDb252ZXJ0IGZyb20gSmF2YVNjcmlwdCBwcm9wZXJ0eSBhY2Nlc3Mgbm90YXRpb24sIHRvIG91ciBvd24gZm9ybVxuICAgICAgICAvLyBvZiByZWxhdGl2ZSBKU09OIHBvaW50ZXJzIGFzIGRhdGEtcGF0aHM6XG4gICAgICAgIGNvbnN0IGRhdGFQYXRoUGFydHMgPSBwYXJzZURhdGFQYXRoKGZ1bGxEYXRhUGF0aClcbiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGhQYXJ0cylcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgIGlmIChjb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJycywgZmlyc3QgJiYgZm9jdXMpKSB7XG4gICAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgIC8vIENvdWxkbid0IGZpbmQgYSBjb21wb25lbnQgaW4gYW4gYWN0aXZlIGZvcm0gZm9yIHRoZSBnaXZlbiBkYXRhUGF0aC5cbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSBjb21wb25lbnQgc2VydmluZyBhIHBhcnQgb2YgdGhlIGRhdGFQYXRoLFxuICAgICAgICAgIC8vIGFuZCB0YWtlIGl0IGZyb20gdGhlcmU6XG4gICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgICAgd2hpbGUgKGRhdGFQYXRoUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGhQYXJ0cylcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbXBvbmVudC5uYXZpZ2F0ZVRvQ29tcG9uZW50Py4oXG4gICAgICAgICAgICAgICAgICBmdWxsRGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgICBzdWJDb21wb25lbnRzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2Ygc3ViQ29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycnMgPSBlcnJvcnNbY29tcG9uZW50LmRhdGFQYXRoXVxuICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cylcbiAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIEZvdW5kIGEgbmVzdGVkIGZvcm0gdG8gZGlzcGxheSBhdCBsZWFzdCBwYXJ0cyBmbyB0aGUgZXJyb3JzLlxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IHNob3cgYWxsIGVycm9ycyBhdCBvbmNlLCBzbyB3ZSdyZSBkb25lLiBEb24ndCBjYWxsXG4gICAgICAgICAgICAgICAgLy8gYG5vdGlmeUVycm9ycygpYCB5ZXQsIGFzIHdlIGNhbiBvbmx5IGRpc3BsYXkgaXQgb25jZVxuICAgICAgICAgICAgICAgIC8vIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCB3YXMgY2FsbGVkIGZyb20gYERpdG9Gb3JtLm1vdW50ZWQoKWBcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RpbGwgaGVyZSwgc28ga2VlcCByZW1vdmluZyB0aGUgbGFzdCBwYXJ0IHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cbiAgICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gV2hlbiB0aGUgZXJyb3IgY2FuJ3QgYmUgbWF0Y2hlZCwgYWRkIGl0IHRvIGEgbGlzdCBvZiB1bm1hdGNoZWRcbiAgICAgICAgICAvLyBlcnJvcnMgd2l0aCBkZWNlbnQgbWVzc2FnZSwgdG8gcmVwb3J0IGF0IHRoZSBlbmQuXG4gICAgICAgICAgY29uc3QgZmllbGQgPSBsYWJlbGl6ZShwcm9wZXJ0eSlcbiAgICAgICAgICBmb3IgKGNvbnN0IGVyciBvZiBlcnJzKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSBmaWVsZFxuICAgICAgICAgICAgICA/IGBUaGUgZmllbGQgJHtmaWVsZH1gXG4gICAgICAgICAgICAgIDogYFRoZSAke3RoaXMuZm9ybUxhYmVsfWBcbiAgICAgICAgICAgIHVubWF0Y2hlZC5wdXNoKGAke3ByZWZpeH0gJHtlcnIubWVzc2FnZX1gKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICB9XG4gICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKHVubWF0Y2hlZC5qb2luKCdcXG4nKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbm90aWZ5RXJyb3JzKG1lc3NhZ2UpIHtcbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgdGl0bGU6ICdWYWxpZGF0aW9uIEVycm9ycycsXG4gICAgICAgIHRleHQ6IG1lc3NhZ2UgfHwgJ1BsZWFzZSBjb3JyZWN0IHRoZSBoaWdobGlnaHRlZCBlcnJvcnMuJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgcmVzZXREYXRhKCkge1xuICAgICAgLy8gV2UgY2FuJ3Qgc2V0IGB0aGlzLmRhdGEgPSAuLi5gIGJlY2F1c2UgaXQncyBhIHByb3BlcnR5LCBidXQgd2UgY2FuIHNldFxuICAgICAgLy8gYWxsIGtub3duIHByb3BlcnRpZXMgb24gaXQgdG8gdGhlIHZhbHVlcyByZXR1cm5lZCBieVxuICAgICAgLy8gYHNldERlZmF1bHRWYWx1ZXMoKWAsIGFzIHRoZXkgYXJlIGFsbCByZWFjdGl2ZSBhbHJlYWR5IGZyb20gdGhlIHN0YXJ0czpcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5kYXRhLCBzZXREZWZhdWx0VmFsdWVzKHRoaXMuc2NoZW1hLCB7fSwgdGhpcykpXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gZGF0YSkge1xuICAgICAgICBpZiAobmFtZSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLW11dGF0aW5nLXByb3BzXG4gICAgICAgICAgaWYgKCFlcXVhbHModGhpcy5kYXRhW25hbWVdLCBkYXRhW25hbWVdKSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1tdXRhdGluZy1wcm9wc1xuICAgICAgICAgICAgdGhpcy5kYXRhW25hbWVdID0gZGF0YVtuYW1lXVxuICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpKSB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudC5tYXJrRGlydHkoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmaWx0ZXJEYXRhKGRhdGEpIHtcbiAgICAgIC8vIEZpbHRlcnMgb3V0IGFycmF5cyBhbmQgb2JqZWN0cyB0aGF0IGFyZSBiYWNrIGJ5IGRhdGEgcmVzb3VyY2VzXG4gICAgICAvLyB0aGVtc2VsdmVzLCBhcyB0aG9zZSBhcmUgYWxyZWFkeSB0YWtpbmcgY2FyZSBvZiB0aHJvdWdoIHRoZWlyIG93biBBUElcbiAgICAgIC8vIHJlc291cmNlIGVuZC1wb2ludHMgYW5kIHNob3VsZG4ndCBiZSBzZXQuXG4gICAgICBjb25zdCBjb3B5ID0ge31cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkgfHwgaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKVxuICAgICAgICAgIGlmIChjb21wb25lbnRzLnNvbWUoY29tcG9uZW50ID0+IGNvbXBvbmVudC5wcm92aWRlc0RhdGEpKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb3B5W25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb3B5XG4gICAgfSxcblxuICAgIHByb2Nlc3NEYXRhKHsgdGFyZ2V0ID0gJ2NsaXBib2FyZCcsIHNjaGVtYU9ubHkgPSB0cnVlIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIHByb2Nlc3NEYXRhKFxuICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAge1xuICAgICAgICAgIC8vIE5lZWRlZCBmb3IgRGl0b0NvbnRleHQgaGFuZGxpbmcgaW5zaWRlIGBwcm9jZXNzRGF0YWAgYW5kXG4gICAgICAgICAgLy8gYHByb2Nlc3NTY2hlbWFEYXRhKClgOlxuICAgICAgICAgIHJvb3REYXRhOiB0aGlzLnJvb3REYXRhLFxuICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICBzY2hlbWFPbmx5LFxuICAgICAgICAgIHRhcmdldFxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIGAkc2NoZW1hUGFyZW50Q29tcG9uZW50KClgIGlzIG9ubHkgc2V0IGlmIG9uZSBvZiB0aGUgYW5jZXN0b3JzIHVzZXNcbiAgICAgIC8vIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgICAgdGhpcy4kc2NoZW1hUGFyZW50Q29tcG9uZW50KCk/Ll9yZWdpc3RlclNjaGVtYUNvbXBvbmVudCh0aGlzLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSwgY29tcG9uZW50LCBhZGQpXG4gICAgICAvLyBPbmx5IHJlZ2lzdGVyIHdpdGggdGhlIHBhcmVudCBpZiBzY2hlbWEgc2hhcmVzIGRhdGEgd2l0aCBpdC5cbiAgICAgIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50Py5fcmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50LCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmUocGFuZSwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMucGFuZXNSZWdpc3RyeSwgcGFuZSwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJQYW5lbChwYW5lbCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMucGFuZWxzUmVnaXN0cnksIHBhbmVsLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlckVudHJ5KHJlZ2lzdHJ5LCBlbnRyeSwgYWRkKSB7XG4gICAgICBjb25zdCB1aWQgPSBlbnRyeS4kdWlkXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHJlZ2lzdHJ5W3VpZF0gPSBlbnRyeVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHJlZ2lzdHJ5W3VpZF1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2xpc3RFbnRyaWVzQnlEYXRhUGF0aChyZWdpc3RyeSkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMocmVnaXN0cnkpLnJlZHVjZSgoZW50cmllc0J5RGF0YVBhdGgsIGVudHJ5KSA9PiB7XG4gICAgICAgIC8vIE11bHRpcGxlIGVudHJpZXMgY2FuIGJlIGxpbmtlZCB0byB0aGUgc2FtZSBkYXRhLXBhdGgsIGUuZy4gd2hlblxuICAgICAgICAvLyB0aGVyZSBhcmUgdGFicy4gTGluayBlYWNoIGRhdGEtcGF0aCB0byBhbiBhcnJheSBvZiBlbnRyaWVzLlxuICAgICAgICBjb25zdCB7IGRhdGFQYXRoIH0gPSBlbnRyeVxuICAgICAgICBjb25zdCBlbnRyaWVzID0gKGVudHJpZXNCeURhdGFQYXRoW2RhdGFQYXRoXSB8fD0gW10pXG4gICAgICAgIGVudHJpZXMucHVzaChlbnRyeSlcbiAgICAgICAgcmV0dXJuIGVudHJpZXNCeURhdGFQYXRoXG4gICAgICB9LCB7fSlcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXMoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgPyB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgICAgIDogdGhpcy5fZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiBlbnRyaWVzQnlEYXRhUGF0aFtub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCldIHx8IFtdXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBuYW1lKSB7XG4gICAgICByZXR1cm4gZW50cmllc0J5RGF0YVBhdGhbYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSldIHx8IFtdXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2NoZW1hIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcblxuICA+IC5kaXRvLXNjaGVtYS1oZWFkZXIgKyAuZGl0by1zY2hlbWEtY29udGVudCA+IC5kaXRvLXBhbmUge1xuICAgIG1hcmdpbi10b3A6ICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgfVxuXG4gICY6aGFzKD4gLmRpdG8tc2NoZW1hLWNvbnRlbnQgKyAuZGl0by1lZGl0LWJ1dHRvbnMpIHtcbiAgICAvLyBEaXNwbGF5IHRoZSBpbmxpbmVkIGVkaXQgYnV0dG9ucyB0byB0aGUgcmlnaHQgb2YgdGhlIHNjaGVtYTpcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG5cbiAgICA+IC5kaXRvLWVkaXQtYnV0dG9ucyB7XG4gICAgICBmbGV4OiAxIDAgMCU7XG4gICAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZztcbiAgICB9XG4gIH1cblxuICA+IC5kaXRvLXNjaGVtYS1jb250ZW50IHtcbiAgICBmbGV4OiAwIDEgMTAwJTtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgLy8gU28gdGhhdCBzY2hlbWEgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b20uXG4gICAgLy8gTk9URTogV2UgYWxzbyBuZWVkIGdyaWQgZm9yIGBUcmFuc2l0aW9uSGVpZ2h0YCB0byB3b3JrIHdlbGwuIFN3aXRjaGluZ1xuICAgIC8vIHRvIGZsZXggYm94IGhlcmUgY2F1c2VzIGp1bXB5IGNvbGxhcHNpbmcgdHJhbnNpdGlvbnMuXG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50O1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMTAwJTtcblxuICAgID4gOm9ubHktY2hpbGQge1xuICAgICAgZ3JpZC1yb3ctZW5kOiBub25lO1xuICAgIH1cbiAgfVxufVxuXG4uZGl0by1zY2hlbWEtaGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gIC5kaXRvLWhlYWRlciAmIHtcbiAgICAvLyBXaGVuIHRlbGVwb3J0ZWQgaW50byBtYWluIGhlYWRlci5cbiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG4gIH1cblxuICAuZGl0by1sYWJlbCAmIHtcbiAgICAvLyBXaGVuIHRlbGVwb3J0ZWQgaW50byBjb250YWluZXIgbGFiZWwuXG4gICAgZmxleDogMTtcbiAgfVxuXG4gID4gLmRpdG8tbGFiZWwge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cblxuICA+IC5kaXRvLWJ1dHRvbnMge1xuICAgIG1hcmdpbi1sZWZ0OiB2YXIoLS1idXR0b24tbWFyZ2luLCAwKTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5EaXRvU2NoZW1hLmRpdG8tc2NoZW1hLWlubGluZWQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLWNvbXBhY3QnOiBpc0NvbXBhY3QgfVwiXG4gIDpzY2hlbWE9XCJzY2hlbWFcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgOmxhYmVsPVwiaXNDb21wYWN0ID8gbnVsbCA6IGxhYmVsXCJcbiAgOnBhZGRpbmc9XCJwYWRkaW5nID8/ICdpbmxpbmVkJ1wiXG4gIDppbmxpbmVkPVwidHJ1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgOmdlbmVyYXRlTGFiZWxzPVwiIWlzQ29tcGFjdFwiXG4gIDpsYWJlbE5vZGU9XCJsYWJlbE5vZGVcIlxuICA6YWNjdW11bGF0ZWRCYXNpcz1cImFjY3VtdWxhdGVkQmFzaXNcIlxuKVxuICAvLy0gUmVuZGVyIGRpdG8tZWRpdC1idXR0b25zIGZvciBpbmxpbmVkIHNjaGVtYXMgc2VwYXJhdGVseSBmcm9tIGFsbFxuICAvLy0gb3RoZXJzIGluIGBUeXBlTGlzdGAgYXMgYSBzY29wZSwgZm9yIGJldHRlciBoYW5kbGluZyBvZiBsYXlvdXQuXG4gIHRlbXBsYXRlKCNlZGl0LWJ1dHRvbnMpXG4gICAgRGl0b0VkaXRCdXR0b25zKFxuICAgICAgdi1pZj1cImRlbGV0YWJsZSB8fCBkcmFnZ2FibGUgfHwgZWRpdGFibGVcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gICAgICBAZGVsZXRlPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzQ29tcGFjdCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1NjaGVtYUlubGluZWQnLCB7XG4gIGVtaXRzOiBbJ2RlbGV0ZSddLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwYWRkaW5nOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxhYmVsTm9kZTogeyB0eXBlOiBIVE1MRWxlbWVudCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGFjY3VtdWxhdGVkQmFzaXM6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGlzQ29tcGFjdCgpIHtcbiAgICAgIHJldHVybiBpc0NvbXBhY3QodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzQ29tcGFjdCAmJiAhIXRoaXMubGFiZWxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zY2hlbWEtaW5saW5lZCB7XG4gIC8vIFVzZSBncmlkIGxheW91dCBmb3IgdHdvIHJlYXNvbnM6IEZvciBgVHJhbnNpdGlvbkhlaWdodGAgdG8gd29yayBzbW9vdGhseSxcbiAgLy8gYW5kIHRvIGFsaWduIHRoZSBoZWFkZXIgYWJvdmUgdGhlIGNvbnRlbnQgd2hlbiB0aGUgaGVhZGVyIGlzIG5vdCB0ZWxlcG9ydGVkXG4gIC8vIG91dHNpZGUgb2YgdGhlIHNjaGVtYS5cbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW4tY29udGVudDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxMDAlO1xuXG4gICY6bm90KDpob3ZlciwgLmRpdG8tc2NoZW1hLS1vcGVuKSB7XG4gICAgPiAuZGl0by1zY2hlbWEtaGVhZGVyIHtcbiAgICAgID4gLmRpdG8tY2xpcGJvYXJkIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8IS0tIGVzbGludC1kaXNhYmxlIHZ1ZS9uby10ZW1wbGF0ZS1zaGFkb3cgLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tcGFuZShcbiAgdi1pZj1cImlzUG9wdWxhdGVkICYmIGNvbXBvbmVudFNjaGVtYXMubGVuZ3RoID4gMFwiXG4gIHYtcmVzaXplPVwib25SZXNpemVQYW5lXCJcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPWB7XG4gICAgICBzY2hlbWEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgbmVzdGVkLFxuICAgICAgc3RvcmVcbiAgICB9LCBpbmRleCBpbiBjb21wb25lbnRTY2hlbWFzYFxuICApXG4gICAgLy8gLVVzZSA8c3Bhbj4gZm9yIC5kaXRvLWJyZWFrIHNvIHdlIGNhbiB1c2UgYC5kaXRvLWNvbnRhaW5lcjpmaXJzdC1vZi10eXBlYFxuICAgIC8vIHNlbGVjdG9yLlxuICAgIHNwYW4uZGl0by1icmVhayhcbiAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdiZWZvcmUnXCJcbiAgICApXG4gICAgRGl0b0NvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoc2NoZW1hKVwiXG4gICAgICByZWY9XCJjb250YWluZXJzXCJcbiAgICAgIDprZXk9XCJuZXN0ZWREYXRhUGF0aFwiXG4gICAgICA6ZGF0YS1pbmRleD1cImluZGV4XCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwiaXNTaW5nbGVDb21wb25lbnRcIlxuICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICA6dmVydGljYWxMYWJlbHM9XCJpc0luTGFiZWxlZFJvdyhpbmRleClcIlxuICAgICAgOmFjY3VtdWxhdGVkQmFzaXM9XCJhY2N1bXVsYXRlZEJhc2lzXCJcbiAgICApXG4gICAgc3Bhbi5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2FmdGVyJ1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc05lc3RlZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFuZScsIHtcbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy50YWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0YWI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcGFkZGluZzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvc2l0aW9uczogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tcGFuZS0tc2luZ2xlJzogdGhpcy5pc1NpbmdsZUNvbXBvbmVudCxcbiAgICAgICAgW2BkaXRvLXBhbmUtLXBhZGRpbmctJHt0aGlzLnBhZGRpbmd9YF06ICEhdGhpcy5wYWRkaW5nXG4gICAgICB9XG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYiA/IHRoaXMgOiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRTY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGNvbXBvbmVudHMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXNcbiAgICAgIC8vIGFuZCBhZGRzIHRoZSBrZXkgYXMgdGhlIG5hbWUgdG8gZWFjaCBjb21wb25lbnQsIHVzZWQgZm9yIGxhYmVscywgZXRjLlxuICAgICAgLy8gTk9URTogc2NoZW1hIGNhbiBiZSBudWxsIHdoaWxlIG11bHRpLWZvcm0gbGlzdHMgbG9hZCB0aGVpciBkYXRhLFxuICAgICAgLy8gYmVjYXVzZSBvbmx5IHRoZSBhdmFpbGFibGUgZGF0YSB3aWxsIGRldGVybWluZSB0aGUgdHlwZSBvZiBmb3JtLlxuICAgICAgLy8gV2hlbiBlZGl0aW5nIHByaW1pdGl2ZSB2YWx1ZXMgdGhyb3VnaCBhIGZvcm0sIGRvIG5vdCBhcHBlbmQgJ25hbWUnIHRvXG4gICAgICAvLyB0aGUgY29tcG9uZW50J3MgZGF0YVBhdGggc28gaXQgY2FuIGJlIG1hcHBlZCB0byBmcm9tIHZhbGlkYXRpb24gZXJyb3JzLlxuICAgICAgLy8gTk9URTogTm90IGFsbCBzY2hlbWFzIC8gY29tcG9uZW50cyBoYXZlIGEgc291cmNlU2NoZW1hLCBlLmcuIGRpYWxvZ3MuXG4gICAgICBjb25zdCB3cmFwUHJpbWl0aXZlcyA9IHRoaXMuc291cmNlU2NoZW1hPy53cmFwUHJpbWl0aXZlc1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hPy5jb21wb25lbnRzIHx8IHt9KS5tYXAoXG4gICAgICAgIChbbmFtZSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgIC8vIEFsd2F5cyBhZGQgbmFtZSB0byBjb21wb25lbnQgc2NoZW1hLlxuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICAgIC8vIFNoYXJlIGRhdGFQYXRoIGFuZCBzdG9yZSB3aXRoIHBhcmVudCBpZiBub3QgbmVzdGVkOlxuICAgICAgICAgIGNvbnN0IG5lc3RlZCA9IGlzTmVzdGVkKHNjaGVtYSlcbiAgICAgICAgICBjb25zdCBuZXN0ZWREYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIGRhdGFQYXRoOlxuICAgICAgICAgICAgICBuZXN0ZWQgJiYgIXdyYXBQcmltaXRpdmVzXG4gICAgICAgICAgICAgICAgPyBuZXN0ZWREYXRhUGF0aFxuICAgICAgICAgICAgICAgIDogdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgc3RvcmU6IHRoaXMuZ2V0Q2hpbGRTdG9yZShuYW1lKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1NpbmdsZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpbmdsZSAmJiB0aGlzLmNvbXBvbmVudFNjaGVtYXMubGVuZ3RoID09PSAxXG4gICAgfSxcblxuICAgIHZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzKCkge1xuICAgICAgY29uc3QgeyBwb3NpdGlvbnMgfSA9IHRoaXNcblxuICAgICAgY29uc3QgaXNMYXN0SW5Sb3cgPSBpbmRleCA9PiAoXG4gICAgICAgIHBvc2l0aW9uc1tpbmRleF0gJiYgKFxuICAgICAgICAgIGluZGV4ID09PSBwb3NpdGlvbnMubGVuZ3RoIC0gMSB8fFxuICAgICAgICAgIGZpbmROZXh0UG9zaXRpb24oaW5kZXgpLnRvcCA+IHBvc2l0aW9uc1tpbmRleF0udG9wXG4gICAgICAgIClcbiAgICAgIClcblxuICAgICAgY29uc3QgZmluZE5leHRQb3NpdGlvbiA9IGluZGV4ID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4ICsgMTsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChwb3NpdGlvbnNbaV0pIHJldHVybiBwb3NpdGlvbnNbaV1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMFxuICAgICAgfVxuXG4gICAgICBjb25zdCByb3dzID0gW11cbiAgICAgIGxldCByb3cgPSBbXVxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHBvc2l0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgcm93LnB1c2goaW5kZXgpXG4gICAgICAgIGlmIChpc0xhc3RJblJvdyhpbmRleCkpIHtcbiAgICAgICAgICByb3dzLnB1c2gocm93KVxuICAgICAgICAgIHJvdyA9IFtdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyb3cubGVuZ3RoID4gMCkge1xuICAgICAgICByb3dzLnB1c2gocm93KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB2ZXJ0aWNhbExhYmVsc0J5SW5kaWNlcyA9IFtdXG5cbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgICAgbGV0IGhhc0xhYmVsc0luUm93ID0gZmFsc2VcbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBvZiByb3cpIHtcbiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb25zW2luZGV4XVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBvc2l0aW9uPy5oZWlnaHQgPiAyICYmIChcbiAgICAgICAgICAgICAgcG9zaXRpb24ubm9kZS5tYXRjaGVzKCc6aGFzKD4gLmRpdG8tbGFiZWwpJykgfHxcbiAgICAgICAgICAgICAgcG9zaXRpb24ubm9kZVxuICAgICAgICAgICAgICAgIC5jbG9zZXN0KCcuZGl0by1jb250YWluZXInKVxuICAgICAgICAgICAgICAgIC5tYXRjaGVzKCcuZGl0by1jb250YWluZXItLWxhYmVsLXZlcnRpY2FsJylcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBuZXN0ZWQgc2NoZW1hcywgZS5nLiAnc2VjdGlvbicgb3IgJ29iamVjdCcgYW5kXG4gICAgICAgICAgICAvLyBkZXRlY3QgbGFiZWxzIHRoZXJlIHRvby5cbiAgICAgICAgICAgIGhhc0xhYmVsc0luUm93ID0gdHJ1ZVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBvZiByb3cpIHtcbiAgICAgICAgICB2ZXJ0aWNhbExhYmVsc0J5SW5kaWNlc1tpbmRleF0gPSBoYXNMYWJlbHNJblJvd1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2ZXJ0aWNhbExhYmVsc0J5SW5kaWNlc1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICdjb21wb25lbnRTY2hlbWFzLmxlbmd0aCcobGVuZ3RoKSB7XG4gICAgICB0aGlzLnBvc2l0aW9ucy5sZW5ndGggPSBsZW5ndGhcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZSh0aGlzLCBhZGQpXG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgaWYgKHRoaXMudGFiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyb3V0ZXIucHVzaCh7IGhhc2g6IGAjJHt0aGlzLnRhYn1gIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUmVzaXplUGFuZSgpIHtcbiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBjb250YWluZXIgb2YgdGhpcy4kcmVmcy5jb250YWluZXJzKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IGNvbnRhaW5lci4kZWxcbiAgICAgICAgICBjb25zdCBpbmRleCA9ICtub2RlLmRhdGFzZXQuaW5kZXhcbiAgICAgICAgICBjb25zdCBib3VuZHMgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgICAgY29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKG5vZGUpXG4gICAgICAgICAgY29uc3QgcGFkZGluZyA9IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZylcbiAgICAgICAgICBjb25zdCBmb250U2l6ZSA9IHBhcnNlRmxvYXQoc3R5bGUuZm9udFNpemUpXG4gICAgICAgICAgY29uc3QgaGVpZ2h0ID0gYm91bmRzLmhlaWdodCAtIDIgKiBwYWRkaW5nXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbnNbaW5kZXhdID1cbiAgICAgICAgICAgIGhlaWdodCA8PSAwXG4gICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIHRvcDogYm91bmRzLnksXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCAvIGZvbnRTaXplLFxuICAgICAgICAgICAgICAgICAgbm9kZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgaXNJbkxhYmVsZWRSb3coaW5kZXgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmVydGljYWxMYWJlbHNCeUluZGljZXNbaW5kZXhdXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tcGFuZSB7XG4gICRzZWxmOiAmO1xuICAkcm9vdC1wYWRkaW5nOiAkY29udGVudC1wYWRkaW5nIC0gJGZvcm0tc3BhY2luZy1oYWxmO1xuXG4gIC0tcGFuZS1wYWRkaW5nOiAwcHg7XG5cbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDtcbiAgLy8gUmVtb3ZlIHRoZSBwYWRkaW5nIGFkZGVkIGJ5IGAuZGl0by1jb250YWluZXJgIGluc2lkZSBgLmRpdG8tcGFuZWA6XG4gIG1hcmdpbjogLSRmb3JtLXNwYWNpbmctaGFsZjtcbiAgcGFkZGluZzogdmFyKC0tcGFuZS1wYWRkaW5nKTtcbiAgLy8gVXNlIGBmbGV4OiAwJWAgZm9yIGFsbCBgLmRpdG8tcGFuZWAgZXhjZXB0IGAuZGl0by1wYW5lX19tYWluYCxcbiAgLy8gc28gdGhhdCB0aGUgYC5kaXRvLWJ1dHRvbnMtbWFpbmAgY2FuIGJlIG1vdmVkIGFsbCB0aGUgd2F5IHRvIHRoZSBib3R0b20uXG4gIGZsZXg6IDAlO1xuXG4gICZfX21haW4ge1xuICAgIGZsZXg6IDEwMCU7XG4gIH1cblxuICAmLS1wYWRkaW5nLXJvb3Qge1xuICAgIC8vIEEgcm9vdC1sZXZlbCBwYW5lIGluc2lkZSBhIHNjcm9sbCB2aWV3LiBDbGVhciBuZWdhdGl2ZSBtYXJnaW4gZnJvbSBhYm92ZS5cbiAgICBtYXJnaW46IDA7XG4gICAgLy8gTW92ZSB0aGUgbmVnYXRpdmUgbWFyZ2luIHVzZWQgdG8gcmVtb3ZlIHRoZSBwYWRkaW5nIGFkZGVkIGJ5XG4gICAgLy8gYC5kaXRvLWNvbnRhaW5lcmAgaW5zaWRlIGAuZGl0by1wYW5lYCB0byB0aGUgcGFkZGluZzpcbiAgICAtLXBhbmUtcGFkZGluZzogI3skcm9vdC1wYWRkaW5nfTtcblxuICAgICYjeyRzZWxmfS0tc2luZ2xlIHtcbiAgICAgIC0tcGFuZS1wYWRkaW5nOiAjeyRjb250ZW50LXBhZGRpbmd9O1xuICAgIH1cblxuICAgICY6aGFzKD4gLmRpdG8tY29udGFpbmVyLS1sYWJlbC12ZXJ0aWNhbDpmaXJzdC1vZi10eXBlKSB7XG4gICAgICAvLyBSZWR1Y2UgdG9wIHNwYWNpbmcgd2hlbiB0aGUgZmlyc3Qgcm93IGhhcyBsYWJlbHMuXG4gICAgICBtYXJnaW4tdG9wOiAtJGZvcm0tc3BhY2luZy1oYWxmO1xuICAgIH1cblxuICAgIC8vIERpc3BsYXkgYSBydWxlciBiZXR3ZWVuIHRhYmJlZCBjb21wb25lbnRzIGFuZCB0b3dhcmRzIHRoZSAuZGl0by1idXR0b25zXG4gICAgJl9fdGFiICsgJl9fbWFpbiB7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICAvLyBVc2UgYSBwc2V1ZG8gZWxlbWVudCB0byBkaXNwbGF5IGEgcnVsZXIgd2l0aCBwcm9wZXIgbWFyZ2luc1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXN0eWxlO1xuICAgICAgICAvLyBTaGlmdCBydWxlciB1cCBieSAkcm9vdC1wYWRkaW5nIHRvIGV4Y2x1ZGUgcmVtb3ZlZCAkZm9ybS1zcGFjaW5nLWhhbGZcbiAgICAgICAgbWFyZ2luOiAoLSRyb290LXBhZGRpbmcpICRmb3JtLXNwYWNpbmctaGFsZiAkcm9vdC1wYWRkaW5nO1xuICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fbWFpbiArIC5kaXRvLWJ1dHRvbnMtbWFpbiB7XG4gICAgICAvLyBOZWVkZWQgZm9ybXMgd2l0aCBzdGlja3kgbWFpbiBidXR0b25zLlxuICAgICAgbWFyZ2luOiAkY29udGVudC1wYWRkaW5nO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cblxuICAmLS1wYWRkaW5nLWlubGluZWQge1xuICAgIC0tcGFuZS1wYWRkaW5nOiAwcHg7XG4gIH1cblxuICAmLS1wYWRkaW5nLW5lc3RlZCB7XG4gICAgLS1wYW5lLXBhZGRpbmc6ICN7JGZvcm0tc3BhY2luZ307XG5cbiAgICAmOmhhcyg+IC5kaXRvLWNvbnRhaW5lci0tbGFiZWwtdmVydGljYWw6Zmlyc3Qtb2YtdHlwZSkge1xuICAgICAgLy8gUmVkdWNlIHRvcCBzcGFjaW5nIHdoZW4gdGhlIGZpcnN0IHJvdyBoYXMgbGFiZWxzLlxuICAgICAgcGFkZGluZy10b3A6ICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgICB9XG4gIH1cblxuICAuZGl0by1icmVhayB7XG4gICAgLy8gYC5kaXRvLWJyZWFrYCBpcyByZW5kZXJlZCBhcyA8c3Bhbj4gc28gd2UgY2FuIHVzZSB0aGVcbiAgICAvLyBgLmRpdG8tY29udGFpbmVyOmZpcnN0LW9mLXR5cGVgIHNlbGVjdG9yIHRvIG1hdGNoIHRoZSBmaXJzdCBjb250YWluZXJcbiAgICAvLyBldmVuIGlmIGl0IGhhcyBhIGJyZWFrIGJlZm9yZSBpdC5cbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbGV4OiAxMDAlO1xuICAgIGhlaWdodDogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRnJhY3Rpb24odmFsdWUpIHtcbiAgY29uc3QgbWF0Y2ggPSAoXG4gICAgaXNTdHJpbmcodmFsdWUpICYmXG4gICAgdmFsdWUubWF0Y2goL15cXHMqKFsrLV0/XFxkKylcXHMqXFwvXFxzKihbKy1dP1xcZCspXFxzKiQvKVxuICApXG4gIGlmIChtYXRjaCkge1xuICAgIGNvbnN0IFssIGRpdmlkZW5kLCBkaXZpc29yXSA9IG1hdGNoXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoZGl2aWRlbmQpIC8gcGFyc2VGbG9hdChkaXZpc29yKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY29udGFpbmVyKFxuICB2LXNob3c9XCJjb21wb25lbnRWaXNpYmxlXCJcbiAgOmNsYXNzPVwiY29udGFpbmVyQ2xhc3Nlc1wiXG4gIDpzdHlsZT1cImNvbnRhaW5lclN0eWxlc1wiXG4pXG4gIFRlbGVwb3J0KFxuICAgIHYtaWY9XCJpc01vdW50ZWQgJiYgcGFuZWxFbnRyaWVzLmxlbmd0aCA+IDBcIlxuICAgIHRvPVwiLmRpdG8tc2lkZWJhcl9fdGVsZXBvcnRcIlxuICApXG4gICAgRGl0b1BhbmVscyhcbiAgICAgIDpwYW5lbHM9XCJwYW5lbEVudHJpZXNcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICBEaXRvTGFiZWwoXG4gICAgdi1pZj1cImhhc0xhYmVsXCJcbiAgICA6Y2xhc3M9XCJsYXlvdXRDbGFzc2VzXCJcbiAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgOmRhdGFQYXRoPVwibGFiZWxEYXRhUGF0aFwiXG4gICAgOmluZm89XCJpbmZvXCJcbiAgKVxuICBjb21wb25lbnQuZGl0by1jb21wb25lbnQoXG4gICAgOmlzPVwidHlwZUNvbXBvbmVudFwiXG4gICAgcmVmPVwiY29tcG9uZW50XCJcbiAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc2VzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6d2lkdGg9XCJ3aWR0aFwiXG4gICAgOmxhYmVsPVwibGFiZWxcIlxuICAgIDpzaW5nbGU9XCJzaW5nbGVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImNvbXBvbmVudERpc2FibGVkXCJcbiAgICA6YWNjdW11bGF0ZWRCYXNpcz1cImNvbWJpbmVkQmFzaXNcIlxuICAgIEBlcnJvcnM9XCJvbkVycm9yc1wiXG4gIClcbiAgRGl0b0Vycm9ycyg6ZXJyb3JzPVwiZXJyb3JzXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNTdHJpbmcsIGlzTnVtYmVyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHtcbiAgZ2V0QWxsUGFuZWxFbnRyaWVzLFxuICBnZXRUeXBlQ29tcG9uZW50LFxuICBoYXNMYWJlbCxcbiAgb21pdFNwYWNpbmdcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgcGFyc2VGcmFjdGlvbiB9IGZyb20gJy4uL3V0aWxzL21hdGguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0NvbnRhaW5lcicsIHtcbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdmVydGljYWxMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY2N1bXVsYXRlZEJhc2lzOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3JzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIHR5cGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gZ2V0VHlwZUNvbXBvbmVudCh0aGlzLnNjaGVtYS50eXBlKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiBoYXNMYWJlbCh0aGlzLnNjaGVtYSwgdGhpcy5nZW5lcmF0ZUxhYmVscylcbiAgICB9LFxuXG4gICAgbGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNMYWJlbCA/IHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEpIDogbnVsbFxuICAgIH0sXG5cbiAgICBsYWJlbERhdGFQYXRoKCkge1xuICAgICAgLy8gVW5uZXN0ZWQgdHlwZXMgZG9uJ3QgaGF2ZSBhIGRhdGFQYXRoIGZvciB0aGVtc2VsdmVzLCBkb24ndCB1c2UgaXQ6XG4gICAgICByZXR1cm4gdGhpcy5uZXN0ZWQgPyB0aGlzLmRhdGFQYXRoIDogbnVsbFxuICAgIH0sXG5cbiAgICBpbmZvOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5mbycsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIHdpZHRoOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZUNvbXBvbmVudD8uZGVmYXVsdFdpZHRoXG4gICAgICB9LFxuICAgICAgZ2V0KHdpZHRoKSB7XG4gICAgICAgIC8vIFVzZSAxMDAlID09IDEuMCBhcyBkZWZhdWx0IHdpZHRoIHdoZW4gbm90aGluZyBpcyBzZXQ6XG4gICAgICAgIHJldHVybiB3aWR0aCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAxLjBcbiAgICAgICAgICA6IGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgICAgPyB3aWR0aC5tYXRjaCgvXlxccypbPD5dP1xccyooLiopJC8pWzFdIC8vIFJlbW92ZSB3aWR0aCBvcGVyYXRvclxuICAgICAgICAgICAgOiB3aWR0aFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgd2lkdGhPcGVyYXRvcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZ2V0KHdpZHRoKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyh3aWR0aClcbiAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKihbPD5dPykvKVsxXSB8fCBudWxsXG4gICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRWaXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlQ29tcG9uZW50Py5kZWZhdWx0VmlzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50RGlzYWJsZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdkaXNhYmxlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkaXNhYmxlZCkge1xuICAgICAgICByZXR1cm4gZGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZmxleEdyb3coKSB7XG4gICAgICAvLyBJbnRlcnByZXQgJz41MCUnIGFzICc1MCUsIGZsZXgtZ3JvdzogMWBcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMud2lkdGhPcGVyYXRvciA9PT0gJz4nIHx8XG4gICAgICAgIHRoaXMud2lkdGggPT09ICdmaWxsJ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICBmbGV4U2hyaW5rKCkge1xuICAgICAgLy8gSW50ZXJwcmV0ICc8NTAlJyBhcyAnNTAlLCBmbGV4LXNocmluazogMWBcbiAgICAgIHJldHVybiB0aGlzLndpZHRoT3BlcmF0b3IgPT09ICc8J1xuICAgIH0sXG5cbiAgICBmbGV4QmFzaXMoKSB7XG4gICAgICBjb25zdCB3aWR0aCA9IHRoaXMud2lkdGhcbiAgICAgIC8vICdhdXRvJyA9IG5vIGZpdHRpbmc6XG4gICAgICByZXR1cm4gW251bGwsICdhdXRvJywgJ2ZpbGwnXS5pbmNsdWRlcyh3aWR0aClcbiAgICAgICAgPyAnYXV0bydcbiAgICAgICAgOiAvJSQvLnRlc3Qod2lkdGgpXG4gICAgICAgICAgPyBwYXJzZUZsb2F0KHdpZHRoKSAvIDEwMCAvLyBwZXJjZW50YWdlIC0+IGZyYWN0aW9uXG4gICAgICAgICAgOiAvW2Etel0vLnRlc3Qod2lkdGgpXG4gICAgICAgICAgICA/IHdpZHRoIC8vIG5hdGl2ZSB1bml0c1xuICAgICAgICAgICAgOiBwYXJzZUZyYWN0aW9uKHdpZHRoKSAvLyBmcmFjdGlvblxuICAgIH0sXG5cbiAgICBjb21iaW5lZEJhc2lzKCkge1xuICAgICAgY29uc3QgeyBhY2N1bXVsYXRlZEJhc2lzLCBmbGV4QmFzaXMgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc051bWJlcihhY2N1bXVsYXRlZEJhc2lzKSAmJiBpc051bWJlcihmbGV4QmFzaXMpXG4gICAgICAgID8gYWNjdW11bGF0ZWRCYXNpcyAqIGZsZXhCYXNpc1xuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgY29udGFpbmVyQ2xhc3NlcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IGNsYXNzZXMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBjb25zdCBwcmVmaXggPSAnZGl0by1jb250YWluZXInXG4gICAgICByZXR1cm4ge1xuICAgICAgICBbYCR7cHJlZml4fS0tc2luZ2xlYF06IHRoaXMuc2luZ2xlLFxuICAgICAgICAnZGl0by1kaXNhYmxlZCc6IHRoaXMuY29tcG9uZW50RGlzYWJsZWQsXG4gICAgICAgICdkaXRvLWhhcy1lcnJvcnMnOiAhIXRoaXMuZXJyb3JzLFxuICAgICAgICBbYCR7cHJlZml4fS0tbGFiZWwtdmVydGljYWxgXTogdGhpcy52ZXJ0aWNhbExhYmVscyxcbiAgICAgICAgW2Ake3ByZWZpeH0tLW9taXQtc3BhY2luZ2BdOiBvbWl0U3BhY2luZyh0aGlzLnNjaGVtYSksXG4gICAgICAgIC4uLihpc1N0cmluZyhjbGFzc2VzKSA/IHsgW2NsYXNzZXNdOiB0cnVlIH0gOiBjbGFzc2VzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb250YWluZXJTdHlsZXMoKSB7XG4gICAgICBjb25zdCB7IGZsZXhCYXNpcywgY29tYmluZWRCYXNpcyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJy0tZ3Jvdyc6IHRoaXMuZmxleEdyb3cgPyAxIDogMCxcbiAgICAgICAgJy0tc2hyaW5rJzogdGhpcy5mbGV4U2hyaW5rID8gMSA6IDAsXG4gICAgICAgICctLWJhc2lzJzogaXNOdW1iZXIoZmxleEJhc2lzKSA/IGAke2ZsZXhCYXNpcyAqIDEwMH0lYCA6IGZsZXhCYXNpcyxcbiAgICAgICAgJy0tYmFzaXMtbW9iaWxlJzpcbiAgICAgICAgICBpc051bWJlcihjb21iaW5lZEJhc2lzKSAmJiBjb21iaW5lZEJhc2lzIDw9IDAuMjVcbiAgICAgICAgICAgID8gYCR7ZmxleEJhc2lzICogMjAwfSVgXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcG9uZW50Q2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXNpbmdsZSc6IHRoaXMuc2luZ2xlLFxuICAgICAgICAuLi50aGlzLmxheW91dENsYXNzZXNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbGF5b3V0Q2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXdpZHRoLWZpbGwnOiB0aGlzLndpZHRoID09PSAnZmlsbCcgfHwgdGhpcy5mbGV4QmFzaXMgIT09ICdhdXRvJyxcbiAgICAgICAgJ2RpdG8td2lkdGgtZ3Jvdyc6IHRoaXMuZmxleEdyb3csXG4gICAgICAgICdkaXRvLXdpZHRoLXNocmluayc6IHRoaXMuZmxleFNocmlua1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYW5lbEVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QWxsUGFuZWxFbnRyaWVzKFxuICAgICAgICB0aGlzLmFwaSxcbiAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgIHRoaXMuZGF0YVBhdGgsXG4gICAgICAgIHRoaXMuJHJlZnMuY29tcG9uZW50LFxuICAgICAgICB0aGlzLnRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25FcnJvcnMoZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IGVycm9yc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNvbnRhaW5lciB7XG4gIC0tZ3JvdzogMDtcbiAgLS1zaHJpbms6IDE7XG4gIC0tYmFzaXM6IGF1dG87XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4OiB2YXIoLS1ncm93KSB2YXIoLS1zaHJpbmspIHZhcigtLWJhc2lzKTtcbiAgZmxleC1mbG93OiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAvLyBUbyBwcmV2ZW50IGxpc3QgdGFibGVzIGZyb20gYmxvd2luZyBvdXQgb2YgdGhlaXIgZmxleCBib3ggY29udGFpbmVycy5cbiAgbWF4LXdpZHRoOiAxMDAlO1xuICAvLyBDYW5ub3QgdXNlIG1hcmdpbiBoZXJlIGFzIGl0IG5lZWRzIHRvIGJlIHBhcnQgb2YgYm94LXNpemluZyBmb3JcbiAgLy8gcGVyY2VudGFnZXMgaW4gZmxleC1iYXNpcyB0byB3b3JrLlxuICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGY7XG5cbiAgLmRpdG8tcGFuZSA+ICYge1xuICAgIC5kaXRvLXBhZ2UtLXdpZHRoLTgwICYge1xuICAgICAgZmxleC1ncm93OiAxO1xuICAgICAgZmxleC1iYXNpczogdmFyKC0tYmFzaXMtbW9iaWxlLCB2YXIoLS1iYXNpcykpO1xuICAgICAgLy8gREVCVUc6IGJhY2tncm91bmQ6IHllbGxvdztcbiAgICB9XG5cbiAgICAuZGl0by1wYWdlLS13aWR0aC02MCAmIHtcbiAgICAgIGZsZXgtYmFzaXM6IGNhbGMoMiAqIHZhcigtLWJhc2lzKSk7XG4gICAgICAvLyBERUJVRzogYmFja2dyb3VuZDogb3JhbmdlO1xuICAgIH1cblxuICAgIC5kaXRvLXNpZGViYXItLXdpZHRoLTk5ICYge1xuICAgICAgZmxleC1ncm93OiAxO1xuICAgICAgLy8gREVCVUc6IGJhY2tncm91bmQ6IHllbGxvdztcbiAgICB9XG5cbiAgICAuZGl0by1zaWRlYmFyLS13aWR0aC02MCAmIHtcbiAgICAgIGZsZXgtYmFzaXM6IGNhbGMoMiAqIHZhcigtLWJhc2lzKSk7XG4gICAgICAvLyBERUJVRzogYmFja2dyb3VuZDogb3JhbmdlO1xuICAgIH1cbiAgfVxuXG4gICY6ZW1wdHkge1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICAmLS1zaW5nbGUge1xuICAgIGhlaWdodDogMTAwJTsgLy8gU28gdGhhdCBsaXN0IGJ1dHRvbnMgY2FuIGJlIHN0aWNreSBhdCB0aGUgYm90dG9tO1xuICAgIC8vIEp1c3QgbGlrZSBvbiBEaXRvUGFuZSwgY2xlYXIgc2V0dGluZ3MgZnJvbSBhYm92ZS5cbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgJi0tbGFiZWwtdmVydGljYWwge1xuICAgIC8vIEZvciBwbGFpbiBjb21wb25lbnRzIHdpdGhvdXQgbGFiZWxzIGluIHJvd3Mgd2l0aCBvdGhlciBjb21wb25lbnRzIHRoYXRcbiAgICAvLyBoYXZlIGxhYmVscywgYWRkIHNvbWUgc3BhY2luZyB0byB0aGUgdG9wIHRvIGFsaWduIHdpdGggdGhlIG90aGVyXG4gICAgLy8gY29tcG9uZW50cyAoZS5nLiAgYnV0dG9ucyk6XG4gICAgPiAuZGl0by1jb21wb25lbnQ6Zmlyc3QtY2hpbGQ6bm90KC5kaXRvLXNlY3Rpb24sIC5kaXRvLWxpc3QsIC5kaXRvLW9iamVjdCkge1xuICAgICAgbWFyZ2luLXRvcDogJGlucHV0LWhlaWdodDtcbiAgICB9XG4gIH1cblxuICAmLS1vbWl0LXNwYWNpbmcge1xuICAgIHBhZGRpbmc6IDA7XG5cbiAgICA+IC5kaXRvLWxhYmVsIHtcbiAgICAgIG1hcmdpbjogJGZvcm0tc3BhY2luZy1oYWxmICRmb3JtLXNwYWNpbmctaGFsZiAwO1xuICAgIH1cbiAgfVxufVxuXG4vLyBOT1RFOiBUaGlzIGlzIG5vdCBuZXN0ZWQgaW5zaWRlIGAuZGl0by1jb250YWluZXJgIHNvIHRoYXQgb3RoZXJcbi8vIHR5cGUgY29tcG9uZW50cyBjYW4gb3ZlcnJpZGUgYC5kaXRvLXdpZHRoLWZpbGxgIGNsYXNzIChmaWx0ZXIgcHJlY2VkZW5jZSkuXG4uZGl0by1jb21wb25lbnQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgJi5kaXRvLXdpZHRoLWZpbGwge1xuICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgJi5kaXRvLWNoZWNrYm94LFxuICAgICYuZGl0by1yYWRpby1idXR0b24ge1xuICAgICAgLy8gV2ViS2l0IGRvZXNuJ3QgbGlrZSBjaGFuZ2VkIHdpZHRoIG9uIGNoZWNrYm94ZXMgYW5kIHJhZGlvcywgb3ZlcnJpZGU6XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB3aWR0aDogYXV0bztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdGFic1xuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1cIih0YWJTY2hlbWEsIGtleSkgaW4gdGFic1wiXG4gIClcbiAgICBhLmRpdG8tbGluayhcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEodGFiU2NoZW1hKVwiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogbW9kZWxWYWx1ZSA9PT0ga2V5IH1cIlxuICAgICAgQGNsaWNrPVwiJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywga2V5KVwiXG4gICAgKSB7eyBnZXRMYWJlbCh0YWJTY2hlbWEsIGtleSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UYWJzJywge1xuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZSddLFxuICBwcm9wczoge1xuICAgIHRhYnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQHVzZSAnc2Fzczpjb2xvcic7XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10YWJzIHtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1saW5rIHtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICB9XG5cbiAgICAvLyBXaGVuIGluIG1haW4gaGVhZGVyOlxuICAgIC5kaXRvLWhlYWRlciAmIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodDtcbiAgICAgIHBhZGRpbmc6ICR0YWItcGFkZGluZy12ZXIgJHRhYi1wYWRkaW5nLWhvcjtcbiAgICAgIG1hcmdpbi1sZWZ0OiAkdGFiLW1hcmdpbjtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVzdDtcbiAgICAgIH1cblxuICAgICAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVzdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXaGVuIGluc2lkZSBhIGlubGluZSBzY2hlbWE6XG4gICAgLmRpdG8tc2NoZW1hLWlubGluZWQgJixcbiAgICAuZGl0by1sYWJlbCAmIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyO1xuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gICAgICBtYXJnaW4tbGVmdDogLSRib3JkZXItd2lkdGg7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHRhYi1yYWRpdXM7XG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuICAgICAgfVxuXG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHRhYi1yYWRpdXM7XG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkdGFiLXJhZGl1cztcbiAgICAgIH1cblxuICAgICAgJjphY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlcjtcbiAgICAgIH1cblxuICAgICAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICAgIGJvcmRlci1jb2xvcjogY29sb3IuYWRqdXN0KCRjb2xvci1hY3RpdmUsICRsaWdodG5lc3M6IC0xMCUpO1xuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXNjaGVtYSAmIHtcbiAgICAvLyBQdXNoIGNsaXBib2FyZCB0byB0aGUgcmlnaHQgaW4gdGhlIGZsZXggbGF5b3V0LCBzZWU6XG4gICAgLy8gaHR0cHM6Ly9jb2RlcGVuLmlvL3Rob2xleC9wZW4vaHZlQngvXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gT25seSBzaG93IHBhbmVscyBpbiB0YWJzIHdoZW4gdGhlIHRhYnMgYXJlIGFsc28gdmlzaWJsZS5cbmNvbXBvbmVudC5kaXRvLXBhbmVsKFxuICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHBhbmVsU2NoZW1hKVwiXG4gIHYtc2hvdz1cInZpc2libGUgJiYgKCFwYW5lbFRhYkNvbXBvbmVudCB8fCBwYW5lbFRhYkNvbXBvbmVudC52aXNpYmxlKVwiXG4gIDppcz1cInBhbmVsVGFnXCJcbiAgQHN1Ym1pdC5wcmV2ZW50XG4pXG4gIERpdG9TY2hlbWEuZGl0by1wYW5lbF9fc2NoZW1hKFxuICAgIDpzY2hlbWE9XCJwYW5lbFNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIHBhZGRpbmc9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6aGFzT3duRGF0YT1cImhhc093bkRhdGFcIlxuICAgIGdlbmVyYXRlTGFiZWxzXG4gIClcbiAgICB0ZW1wbGF0ZSgjYmVmb3JlKVxuICAgICAgaDIuZGl0by1wYW5lbF9faGVhZGVyKDpjbGFzcz1cInsgJ2RpdG8tcGFuZWxfX2hlYWRlci0tc3RpY2t5Jzogc3RpY2t5IH1cIilcbiAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChzY2hlbWEpIH19XG4gICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbChcbiAgICAgICAgICA6YnV0dG9ucz1cInBhbmVsQnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgKVxuICAgIHRlbXBsYXRlKCNidXR0b25zKVxuICAgICAgRGl0b0J1dHRvbnMoXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFuZWwnLCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFuZWxUYWJDb21wb25lbnQ6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvd25EYXRhOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgcGFuZWxCdXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEucGFuZWxCdXR0b25zKVxuICAgIH0sXG5cbiAgICBoYXNPd25EYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5vd25EYXRhXG4gICAgfSxcblxuICAgIHBhbmVsRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm93bkRhdGEgfHwgdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIHBhbmVsU2NoZW1hKCkge1xuICAgICAgaWYgKHRoaXMuaGFzT3duRGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY2hlbWFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBgZGF0YWAgZnJvbSB0aGUgc2NoZW1hLCBzbyB0aGF0IERpdG9TY2hlbWEgaXNuJ3QgdXNpbmcgaXQgdG9cbiAgICAgICAgLy8gcHJvZHVjZSBpdHMgb3duIGRhdGEuIFNlZSAkZmlsdGVycyBwYW5lbCBmb3IgbW9yZSBkZXRhaWxzIG9uIGRhdGEuXG4gICAgICAgIGNvbnN0IHsgZGF0YSwgLi4uc2NoZW1hIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICByZXR1cm4gc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhbmVsVGFnKCkge1xuICAgICAgLy8gUGFuZWxzIHRoYXQgcHJvdmlkZSB0aGVpciBvd24gZGF0YSBuZWVkIHRoZWlyIG93biBmb3JtLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/ICdmb3JtJyA6ICdkaXYnXG4gICAgfSxcblxuICAgIHBhbmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBJZiB0aGUgcGFuZWwgcHJvdmlkZXMgaXRzIG93biBkYXRhLCB0aGVuIGl0IG5lZWRzIHRvIHByZWZpeCBhbGxcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCBpdHMgZGF0YS1wYXRoLCBidXQgaWYgaXQgc2hhcmVzIGRhdGEgd2l0aCB0aGUgc2NoZW1hXG4gICAgICAvLyBjb21wb25lbnQsIHRoZW4gaXQgc2hvdWxkIHNoYXJlIHRoZSBkYXRhLXBhdGggbmFtZSBzcGFjZSB0b28uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gdGhpcy5kYXRhUGF0aCA6IHRoaXMuc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoXG4gICAgfSxcblxuICAgIHZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSxcblxuICAgIHN0aWNreTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0aWNreScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIC8vIE5PVEU6IFRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIGBzY2hlbWEuZGF0YWAgaGFuZGxpbmcgaW4gRGl0b1NjaGVtYSxcbiAgICAvLyB3aGVyZSB0aGUgZGF0YSBpcyBhZGRlZCB0byB0aGUgYWN0dWFsIGNvbXBvbmVudC5cbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHRoaXMub3duRGF0YSA9IGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgPyBkYXRhKHRoaXMuY29udGV4dClcbiAgICAgICAgOiBkYXRhXG4gICAgfVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUmVnaXN0ZXIgdGhlIHBhbmVscyBzbyB0aGF0IG90aGVyIGNvbXBvbmVudHMgY2FuIGZpbmQgdGhlbSBieSB0aGVpclxuICAgICAgLy8gZGF0YS1wYXRoLCBlLmcuIGluIFR5cGVMaXN0Lm9uRmlsdGVyRXJyb3JzKClcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlclBhbmVsKHRoaXMsIGFkZClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYW5lbCB7XG4gICY6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgbWFyZ2luLWJvdHRvbTogJGNvbnRlbnQtcGFkZGluZztcbiAgfVxuXG4gICZfX2hlYWRlciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gICAgYmFja2dyb3VuZDogJGJ1dHRvbi1jb2xvcjtcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuXG4gICAgJi0tc3RpY2t5IHtcbiAgICAgICRtYXJnaW46ICRpbnB1dC1oZWlnaHQtZmFjdG9yICogJGxpbmUtaGVpZ2h0ICogJGZvbnQtc2l6ZS1zbWFsbCArXG4gICAgICAgICRmb3JtLXNwYWNpbmc7XG5cbiAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICB0b3A6ICRjb250ZW50LXBhZGRpbmc7XG4gICAgICBtYXJnaW4tYm90dG9tOiAkbWFyZ2luO1xuICAgICAgei1pbmRleDogMTtcblxuICAgICAgJiArICoge1xuICAgICAgICBtYXJnaW4tdG9wOiAtJG1hcmdpbjtcbiAgICAgIH1cblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBoZWlnaHQ6ICRjb250ZW50LXBhZGRpbmc7XG4gICAgICAgIHRvcDogLSRjb250ZW50LXBhZGRpbmc7XG4gICAgICAgIG1hcmdpbjogLSRib3JkZXItd2lkdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmRpdG8tYnV0dG9ucyB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICByaWdodDogJGlucHV0LXBhZGRpbmctdmVyO1xuICAgICAgdG9wOiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgfVxuICB9XG5cbiAgJl9fc2NoZW1hIHtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGw7XG4gICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgYm9yZGVyLXRvcDogMDtcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG5cbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50IHtcbiAgICAgIC5kaXRvLW9iamVjdCB7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgIH1cblxuICAgICAgPiAuZGl0by1idXR0b25zIHtcbiAgICAgICAgLS1idXR0b24tbWFyZ2luOiAjeyRmb3JtLXNwYWNpbmd9O1xuXG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmc7XG5cbiAgICAgICAgLmRpdG8tY29udGFpbmVyIHtcbiAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmRpdG8tbGFiZWwge1xuICAgICAgbGFiZWwge1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1wYW5lbHMoXG4gIHYtaWY9XCJwYW5lbHMubGVuZ3RoID4gMFwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwieyBzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQgfSBpbiBwYW5lbHNcIlxuICApXG4gICAgRGl0b1BhbmVsKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEpXCJcbiAgICAgIDprZXk9XCJnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShzY2hlbWEubmFtZSlcIlxuICAgICAgOmRpc2FibGVkPVwic2NoZW1hLmRpc2FibGVkID8/IGRpc2FibGVkXCJcbiAgICAgIDpwYW5lbFRhYkNvbXBvbmVudD1cInRhYkNvbXBvbmVudFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1BhbmVscycsIHtcbiAgcHJvcHM6IHtcbiAgICBwYW5lbHM6IHsgdHlwZTogQXJyYXksIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KSB7XG4gICAgICAvLyBBbGxvdyBzZXBhcmF0ZSB0YWJzIHRvIHVzZSBwYW5lbHMgb2YgdGhlIHNhbWUgbmFtZSwgYnlcbiAgICAgIC8vIHByZWZpeGluZyB0aGVpciBrZXkgd2l0aCB0aGUgdGFiIG5hbWUuXG4gICAgICByZXR1cm4gdGFiQ29tcG9uZW50ID8gYCR7dGFiQ29tcG9uZW50LnRhYn1fJHtkYXRhUGF0aH1gIDogZGF0YVBhdGhcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYW5lbHMge1xuICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmc7XG4gIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1idXR0b25zKFxuICB2LWlmPVwiYnV0dG9uU2NoZW1hcyB8fCBoYXNTbG90Q29udGVudCgkc2xvdHMuZGVmYXVsdClcIlxuKVxuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1cIihidXR0b25TY2hlbWEsIGJ1dHRvbkRhdGFQYXRoKSBpbiBidXR0b25TY2hlbWFzXCJcbiAgKVxuICAgIERpdG9Db250YWluZXIoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKGJ1dHRvblNjaGVtYSlcIlxuICAgICAgOmtleT1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJidXR0b25TY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGJ1dHRvblNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1cInZub2RlIG9mICRzbG90cy5kZWZhdWx0Py4oKVwiXG4gIClcbiAgICAvLy0gUmVuZGVyIGVhY2ggbm9kZSBpbiB0aGUgZGVmYXVsdCBzbG90IHRocm91Z2ggYGRpdG8tdm5vZGVgLFxuICAgIC8vLSBzbyBpdCBjYW4gYmUgd3JhcHBlZCBpbiBhIGAuZGl0by1jb250YWluZXJgIGNsYXNzLlxuICAgIC5kaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJoYXNWTm9kZUNvbnRlbnQodm5vZGUpXCJcbiAgICApXG4gICAgICBEaXRvVm5vZGUoOnZub2RlPVwidm5vZGVcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaGFzU2xvdENvbnRlbnQsIGhhc1ZOb2RlQ29udGVudCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9CdXR0b25zJywge1xuICBwcm92aWRlOiB7XG4gICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICAvLyBDb21wdXRlIGEgYnV0dG9ucyBsaXN0IHdoaWNoIGhhcyB0aGUgZGF0YVBhdGggYmFrZWQgaW50byBpdHMga2V5cy5cbiAgICAgIGNvbnN0IHsgZGF0YVBhdGgsIGJ1dHRvbnMgfSA9IHRoaXNcbiAgICAgIHJldHVybiBidXR0b25zXG4gICAgICAgID8gT2JqZWN0LnZhbHVlcyhidXR0b25zKS5yZWR1Y2UoKHNjaGVtYXMsIGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgc2NoZW1hc1thcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgYnV0dG9uLm5hbWUpXSA9IGJ1dHRvblxuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYXNcbiAgICAgICAgICB9LCB7fSlcbiAgICAgICAgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYXNTbG90Q29udGVudCxcbiAgICBoYXNWTm9kZUNvbnRlbnRcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWJ1dHRvbnMge1xuICA+IC5kaXRvLWNvbnRhaW5lciB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gU2V0IGBAY2xpY2suc3RvcGAgdG8gcHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsLlxuRGl0b0J1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgQGNsaWNrLnN0b3BcbilcbiAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgYS5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWRpc2FibGVkJzogaXNEcmFnZ2FibGVEaXNhYmxlZCB9XCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgKVxuICBSb3V0ZXJMaW5rLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1kaXNhYmxlZCc6IGlzRWRpdGFibGVEaXNhYmxlZCB9XCJcbiAgICA6dG89XCJlZGl0UGF0aCA/IHsgcGF0aDogZWRpdFBhdGggfSA6IHt9XCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgKVxuICBEaXRvQ3JlYXRlQnV0dG9uKFxuICAgIHYtaWY9XCJjcmVhdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgOnZlcmI9XCJ2ZXJicy5jcmVhdGVcIlxuICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gICAgOmRpc2FibGVkPVwiaXNDcmVhdGFibGVEaXNhYmxlZFwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIDpkaXNhYmxlZD1cImlzRGVsZXRhYmxlRGlzYWJsZWRcIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgQGNsaWNrPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBjYXBpdGFsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRWRpdEJ1dHRvbnMnLCB7XG4gIGVtaXRzOiBbJ2RlbGV0ZSddLFxuXG4gIHByb3BzOiB7XG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY3JlYXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3JlYXRlUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9ybUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEuZm9ybSlcbiAgICB9LFxuXG4gICAgaXNEcmFnZ2FibGVEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmhhc1NjaGVtYU9wdGlvbignZHJhZ2dhYmxlJylcbiAgICB9LFxuXG4gICAgaXNEZWxldGFibGVEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmhhc1NjaGVtYU9wdGlvbignZGVsZXRhYmxlJylcbiAgICB9LFxuXG4gICAgaXNFZGl0YWJsZURpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5kaXNhYmxlZCB8fFxuICAgICAgICAhdGhpcy5lZGl0UGF0aCB8fFxuICAgICAgICAhdGhpcy5oYXNTY2hlbWFPcHRpb24oJ2VkaXRhYmxlJylcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNDcmVhdGFibGVEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgfHxcbiAgICAgICAgIXRoaXMuY3JlYXRlUGF0aCB8fFxuICAgICAgICAhdGhpcy5oYXNTY2hlbWFPcHRpb24oJ2NyZWF0YWJsZScpXG4gICAgICApXG4gICAgfSxcblxuICAgIGNyZWF0ZUJ1dHRvblRleHQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgY3JlYXRlIGJ1dHRvbiB0aHJvdWdoIGNyZWF0YWJsZSBvYmplY3Q6XG4gICAgICAgIHRoaXMuc2NoZW1hLmNyZWF0YWJsZT8ubGFiZWwgfHwgKFxuICAgICAgICAgIC8vIEF1dG8tZ2VuZXJhdGUgY3JlYXRlIGJ1dHRvbiBsYWJlbHMgZnJvbSBmcm9tIGxhYmVscyBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMgd2l0aCBvbmx5IG9uZSBmb3JtOlxuICAgICAgICAgIHRoaXMuZm9ybUxhYmVsICYmXG4gICAgICAgICAgYCR7Y2FwaXRhbGl6ZSh0aGlzLnZlcmJzLmNyZWF0ZSl9ICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICApIHx8XG4gICAgICAgIG51bGxcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc1NjaGVtYU9wdGlvbihuYW1lKSB7XG4gICAgICAvLyBBbGwgb3B0aW9ucyBjYW4gYmUgZGlzYWJsZWQgb24gYSBwZXItZm9ybSBiYXNpcyBieSBzZXR0aW5nXG4gICAgICAvLyBgc2NoZW1hW25hbWVdYCB0byBgZmFsc2VgIG9yIGEgY2FsbGJhY2sgcmV0dXJuaW5nIGBmYWxzZWAuXG4gICAgICByZXR1cm4gdGhpcy5nZXRTY2hlbWFWYWx1ZShuYW1lLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgLy8gT3ZlcnJpZGUgY3Vyc29yIGZyb20gY29sbGFwc2libGUgZGl0by1sYWJlbDpcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBmbGV4OiBub25lO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jcmVhdGUtYnV0dG9uXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiY3JlYXRhYmxlRm9ybVwiXG4gICAgOnR5cGU9XCJpc0lubGluZWQgPyAnYnV0dG9uJyA6ICdzdWJtaXQnXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJiKVwiXG4gICAgQGNsaWNrPVwiY3JlYXRlSXRlbShjcmVhdGFibGVGb3JtKVwiXG4gICkge3sgdGV4dCB9fVxuICB0ZW1wbGF0ZShcbiAgICB2LWVsc2UtaWY9XCJjcmVhdGFibGVGb3Jtc1wiXG4gIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYilcIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgICApIHt7IHRleHQgfX1cbiAgICB1bC5kaXRvLXB1bGxkb3duKDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiKVxuICAgICAgbGkoXG4gICAgICAgIHYtZm9yPVwiKGZvcm0sIHR5cGUpIGluIGNyZWF0YWJsZUZvcm1zXCJcbiAgICAgIClcbiAgICAgICAgYShcbiAgICAgICAgICB2LXNob3c9XCJzaG91bGRTaG93U2NoZW1hKGZvcm0pXCJcbiAgICAgICAgICA6Y2xhc3M9XCJnZXRGb3JtQ2xhc3MoZm9ybSwgdHlwZSlcIlxuICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odHlwZSlcIlxuICAgICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodHlwZSlcIlxuICAgICAgICApIHt7IGdldExhYmVsKGZvcm0pIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Rm9ybVNjaGVtYXMsIGlzSW5saW5lZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQ3JlYXRlQnV0dG9uJywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gVGhlIG5leHQgZm91ciBwcm9wcyBhcmUgdGhlcmUgZm9yIGBEaXRvQ29udGV4dGAgYW5kIHRoZSBgY29udGV4dCgpYFxuICAgIC8vIGdldHRlciBpbiBgRGl0b01peGluYC5cbiAgICAvLyBUT0RPOiBTaG91bGQgdGhleSBiZSBtb3ZlZCB0byBzaGFyZWQgbWl4aW4gdGhhdCBkZWZpbmVzIHRoZW0gYXMgcmVxdWlyZWRcbiAgICAvLyBhbmQgYWxzbyBwcm92aWRlcyB0aGUgYGNvbnRleHQoKWAgZ2V0dGVyLCBwZXJoYXBzIGBDb250ZXh0TWl4aW5gP1xuICAgIC8vIGBzY2hlbWFgIGNvdWxkIGJlIGluY2x1ZGVkIGFzIHdlbGwsIGFuZCBgQ29udGV4dE1peGluYCBjb3VsZCBiZSB1c2VkIGluXG4gICAgLy8gYERpdG9Gb3JtYCwgYERpdG9WaWV3YCwgYERpdG9QYW5lbGAsIGBEaXRvU2NoZW1hYCwgYERpdG9FZGl0QnV0dG9uc2AsXG4gICAgLy8gZXRjPyBCdXQgdGhlIHByb2JsZW0gd2l0aCB0aGUgcm9vdCBjb21wb25lbnRzIGlzIHRoYXQgdGhleSBkb24ndCBoYXZlXG4gICAgLy8gdGhlc2UgcHJvcHMuIFdlIGNvdWxkIGFkZCBhIGBjb250ZXh0QXR0cmlidXRlcygpYCBnZXR0ZXIgZm9yIGVhc3kgcGFzc2luZ1xuICAgIC8vIG9uIGFzIGB2LWJpbmQ9XCJjb250ZXh0QXR0cmlidXRlc1wiYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdmVyYjogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGV4dDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBjcmVhdGFibGVGb3JtcygpIHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLmZvcm1zKS5maWx0ZXIoXG4gICAgICAgIChbLCBmb3JtXSkgPT4gdGhpcy5pc0Zvcm1DcmVhdGFibGUoZm9ybSlcbiAgICAgIClcbiAgICAgIHJldHVybiBlbnRyaWVzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcylcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGNyZWF0YWJsZUZvcm0oKSB7XG4gICAgICBjb25zdCBmb3JtcyA9IHRoaXMuY3JlYXRhYmxlRm9ybXNcbiAgICAgIHJldHVybiBmb3JtcyAmJiBPYmplY3Qua2V5cyhmb3JtcykubGVuZ3RoID09PSAxICYmIGZvcm1zLmRlZmF1bHQgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaXNGb3JtQ3JlYXRhYmxlKGZvcm0pIHtcbiAgICAgIC8vIEZvcm1zIGNhbiBiZSBleGNsdWRlZCBmcm9tIHRoZSBsaXN0IGJ5IHByb3ZpZGluZyBgaWY6IGZhbHNlYCBvclxuICAgICAgLy8gYGNyZWF0YWJsZTogZmFsc2VgLlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5zaG91bGRSZW5kZXJTY2hlbWEoZm9ybSkgJiZcbiAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnY3JlYXRhYmxlJywge1xuICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgICBzY2hlbWE6IGZvcm1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShmb3JtLCB0eXBlID0gbnVsbCkge1xuICAgICAgaWYgKCF0aGlzLnNob3VsZERpc2FibGVTY2hlbWEoZm9ybSkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbmxpbmVkKSB7XG4gICAgICAgICAgdGhpcy5zb3VyY2VDb21wb25lbnQuY3JlYXRlSXRlbShmb3JtLCB0eXBlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgICAgIHBhdGg6IGAke3RoaXMucGF0aH0vY3JlYXRlYCxcbiAgICAgICAgICAgIHF1ZXJ5OiB7IHR5cGUgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGFsbG93ZWQgdG8gY3JlYXRlIGl0ZW0gZm9yIGdpdmVuIGZvcm0nKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRGb3JtQ2xhc3MoZm9ybSwgdHlwZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2BkaXRvLXR5cGUtJHt0eXBlfWBdOiB0cnVlLFxuICAgICAgICAnZGl0by1kaXNhYmxlZCc6IHRoaXMuc2hvdWxkRGlzYWJsZVNjaGVtYShmb3JtKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KHR5cGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlSXRlbSh0aGlzLmZvcm1zW3R5cGVdLCB0eXBlKVxuICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tY3JlYXRlLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAuZGl0by1wdWxsZG93biB7XG4gICAgcmlnaHQ6IDA7XG5cbiAgICAuZGl0by1idXR0b25zLXN0aWNreSAmIHtcbiAgICAgIHRvcDogdW5zZXQ7XG4gICAgICByaWdodDogdW5zZXQ7XG4gICAgICBib3R0b206IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jbGlwYm9hcmQuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgdi1pZj1cImNsaXBib2FyZFwiXG4pXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1jb3B5KFxuICAgIHJlZj1cImNvcHlEYXRhXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0aXRsZT1cIkNvcHkgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIWNvcHlFbmFibGVkXCJcbiAgICBAY2xpY2s9XCJvbkNvcHlcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1wYXN0ZShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0aXRsZT1cIlBhc3RlIERhdGFcIlxuICAgIDpkaXNhYmxlZD1cIiFwYXN0ZUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uUGFzdGVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNPYmplY3QsIGNsb25lLCBkZWluZGVudCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQ2xpcGJvYXJkJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBjbGlwYm9hcmQ6IHsgdHlwZTogW0Jvb2xlYW4sIE9iamVjdF0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvcHlFbmFibGVkOiBmYWxzZSxcbiAgICAgIHBhc3RlRW5hYmxlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGlwYm9hcmRPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KHRoaXMuY2xpcGJvYXJkKSA/IHRoaXMuY2xpcGJvYXJkIDoge31cbiAgICB9LFxuXG4gICAgY29weURhdGEoKSB7XG4gICAgICBjb25zdCB7IGNvcHkgfSA9IHRoaXMuY2xpcGJvYXJkT3B0aW9uc1xuICAgICAgcmV0dXJuIGNvcHlcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+XG4gICAgICAgICAgICBjb3B5LmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgY2xpcGJvYXJkRGF0YSB9KSlcbiAgICAgICAgOiBjbGlwYm9hcmREYXRhID0+IGNsb25lKGNsaXBib2FyZERhdGEpXG4gICAgfSxcblxuICAgIHBhc3RlRGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgcGFzdGUgfSA9IHRoaXMuY2xpcGJvYXJkT3B0aW9uc1xuICAgICAgcmV0dXJuIHBhc3RlXG4gICAgICAgID8gY2xpcGJvYXJkRGF0YSA9PlxuICAgICAgICAgICAgcGFzdGUuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBjbGlwYm9hcmREYXRhIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xpcGJvYXJkRGF0YVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIC8vIENoZWNrIHJpZ2h0IGF3YXkgYWxzbyBpbiBjYXNlIHRoZXJlJ3MgYWxyZWFkeSBkYXRhIChlLmcuIGNyZWF0ZSBmb3JtKTpcbiAgICAncGFyZW50Q29tcG9uZW50Lmhhc0RhdGEnOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiAndXBkYXRlQ29weSdcbiAgICB9LFxuXG4gICAgJ2FwcFN0YXRlLmNsaXBib2FyZERhdGEnOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiAndXBkYXRlUGFzdGUnXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgLy8gQ2hlY2sgY2xpcGJvYXJkIGNvbnRlbnQgd2hlbmV2ZXIgc29tZXRoaW5nIGdldHMgY29waWVkIG9yIHRoZSB3aW5kb3cgZ2V0c1xuICAgIC8vIChyZSlhY3RpdmF0ZWQsIGFzIHRob3NlIGFyZSB0aGUgbW9tZW50cyB3aGVuIHRoZSBjbGlwYm9hcmQgY2FuIGNoYW5nZTpcbiAgICB0aGlzLmRvbU9uKGRvY3VtZW50LCB7IGNvcHk6IHRoaXMudXBkYXRlUGFzdGUgfSlcbiAgICB0aGlzLmRvbU9uKHdpbmRvdywgeyBmb2N1czogdGhpcy51cGRhdGVQYXN0ZSB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBjaGVja0NsaXBib2FyZERhdGEoY2xpcGJvYXJkRGF0YSkge1xuICAgICAgY29uc3QgeyAkc2NoZW1hLCAuLi5kYXRhIH0gPSBjbGlwYm9hcmREYXRhIHx8IHt9XG4gICAgICByZXR1cm4gJHNjaGVtYSA9PT0gdGhpcy5zY2hlbWEubmFtZSA/IGRhdGEgOiBudWxsXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENsaXBib2FyZERhdGEocmVwb3J0KSB7XG4gICAgICAvLyBVc2UgdGhlIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgIGxldCB7IGNsaXBib2FyZERhdGEgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy5yZWFkVGV4dD8uKClcbiAgICAgICAgaWYgKGpzb24pIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhID0gSlNPTi5wYXJzZShqc29uKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJlcG9ydCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgaWYgKGVyci5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICBhbGVydChkZWluZGVudGBcbiAgICAgICAgICAgICAgVGhlIGRhdGEgaW4gdGhlIGNsaXBib2FyZCBhcHBlYXJzIHRvIGJlIG1hbGZvcm1lZDpcbiAgICAgICAgICAgICAgJHtlcnIubWVzc2FnZX1cbiAgICAgICAgICAgIGApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jaGVja0NsaXBib2FyZERhdGEoY2xpcGJvYXJkRGF0YSlcbiAgICB9LFxuXG4gICAgdXBkYXRlQ29weSgpIHtcbiAgICAgIHRoaXMuY29weUVuYWJsZWQgPSB0aGlzLnBhcmVudENvbXBvbmVudC5oYXNEYXRhXG4gICAgfSxcblxuICAgIGFzeW5jIHVwZGF0ZVBhc3RlKCkge1xuICAgICAgdGhpcy5wYXN0ZUVuYWJsZWQgPSAhIXRoaXMuY2hlY2tDbGlwYm9hcmREYXRhKHRoaXMuYXBwU3RhdGUuY2xpcGJvYXJkRGF0YSlcbiAgICAgIGlmICghdGhpcy5wYXN0ZUVuYWJsZWQgJiYgdGhpcy5hcHBTdGF0ZS5hZ2VudC5jaHJvbWUpIHtcbiAgICAgICAgLy8gU2VlIGlmIHRoZSBjbGlwYm9hcmQgY29udGVudCBpcyB2YWxpZCBKU09OIGRhdGEgdGhhdCBpcyBjb21wYXRpYmxlXG4gICAgICAgIC8vIHdpdGggdGhlIGN1cnJlbnQgdGFyZ2V0IHNjaGVtYSwgYW5kIG9ubHkgdGhlbiBhY3RpdmF0ZSB0aGUgcGFzdGluZzpcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YShmYWxzZSkgLy8gRG9uJ3QgcmVwb3J0XG4gICAgICAgIHRoaXMucGFzdGVFbmFibGVkID0gISFkYXRhXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ29weSgpIHtcbiAgICAgIGxldCBkYXRhID0gdGhpcy5wYXJlbnRDb21wb25lbnQuY2xpcGJvYXJkRGF0YVxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICBkYXRhID0ge1xuICAgICAgICAgICAgJHNjaGVtYTogdGhpcy5zY2hlbWEubmFtZSxcbiAgICAgICAgICAgIC4uLnRoaXMuY29weURhdGEoZGF0YSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gS2VlcCBhbiBpbnRlcm5hbCBjbGlwYm9hcmQgYXMgZmFsbGJhY2suXG4gICAgICAgIHRoaXMuYXBwU3RhdGUuY2xpcGJvYXJkRGF0YSA9IGRhdGFcbiAgICAgICAgdGhpcy5wYXN0ZUVuYWJsZWQgPSB0cnVlXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5uYW1lLCBlcnIubWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgYWxlcnQoZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25QYXN0ZSgpIHtcbiAgICAgIGxldCBkYXRhID0gYXdhaXQgdGhpcy5nZXRDbGlwYm9hcmREYXRhKHRydWUpIC8vIFJlcG9ydFxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGRhdGEgJiYgdGhpcy5wYXN0ZURhdGEoZGF0YSlcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICB0aGlzLnBhcmVudENvbXBvbmVudC5jbGlwYm9hcmREYXRhID0gZGF0YVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNsaXBib2FyZCB7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgLmRpdG8tc2NoZW1hICYge1xuICAgIC8vIFB1c2ggY2xpcGJvYXJkIHRvIHRoZSByaWdodCBpbiB0aGUgZmxleCBsYXlvdXQsIHNlZTpcbiAgICAvLyBodHRwczovL2NvZGVwZW4uaW8vdGhvbGV4L3Blbi9odmVCeC9cbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgfVxuXG4gIC5kaXRvLWhlYWRlciAmIHtcbiAgICBtYXJnaW4tbGVmdDogMDtcblxuICAgIC5kaXRvLWJ1dHRvbiB7XG4gICAgICBtYXJnaW46IDAgMCAkdGFiLW1hcmdpbiAkdGFiLW1hcmdpbjtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZywgeyB1cGRhdGVSb290ID0gZmFsc2UsIHVwZGF0ZVZpZXcgPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICghdGhpcy5pc0xvYWRpbmcgXiAhaXNMb2FkaW5nKSB7XG4gICAgICAgIC8vIEJvb2xlYW4geG9yXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICAgICAgaWYgKHVwZGF0ZVJvb3QpIHtcbiAgICAgICAgICB0aGlzLnJvb3RDb21wb25lbnQucmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZylcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlVmlldykge1xuICAgICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXRMb2FkaW5nKHRoaXMuaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgSXRlbU1peGluIGZyb20gJy4vSXRlbU1peGluLmpzJ1xuaW1wb3J0IExvYWRpbmdNaXhpbiBmcm9tICcuL0xvYWRpbmdNaXhpbi5qcydcbmltcG9ydCB7IHNldERlZmF1bHRWYWx1ZXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgTG9hZGluZ01peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAvLyBQYXNzIGxvY2FsIHZlcmJzIG92ZXJyaWRlcyBvbiB0byBjaGlsZHJlbiwgc2VlIHZlcmJzKCkgY29tcHV0ZWQgcHJvcC5cbiAgICAgICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyxcbiAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdGhpcy5oYXNEYXRhXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRlZERhdGE6IG51bGwsXG4gICAgICBhYm9ydENvbnRyb2xsZXI6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgLy8gUmV0dXJucyB0aGUgcmVzb3VyY2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVzb3VyY2UgZm9yIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBzb3VyY2Ugc2NoZW1hLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBhIGRhdGEtc291cmNlIGlmIGl0IGhhcyBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZTpcbiAgICAgIHJldHVybiAhIXRoaXMucmVzb3VyY2VcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICAvLyBSZXR1cm5zIGBmYWxzZWBoZXJlLCBidXQgaXMgb3ZlcnJpZGRlbiB0byByZXR1cm4gYHRydWVgIGluXG4gICAgICAvLyBgU291cmNlTWl4aW5gIGZvciBjb21wb25lbnQgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGVpciBvd24gZGF0YSwgYnV0XG4gICAgICAvLyBlZGl0IHRoZWlyIGl0ZW1zIHRocm91Z2ggYSBsaW5rZWQgdmlldy4gIEluIHRoaXMgY2FzZSwgcmVhbCBpZHMgbmVlZCB0b1xuICAgICAgLy8gYmUgdXNlZC5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIC8vIENoZWNrIHRoZSBmb3JtIHRoYXQgdGhpcyBjb21wb25lbnQgYmVsb25ncyB0byBhcyB3ZWxsLCBzaW5jZSBpdCBtYXkgYmVcbiAgICAgIC8vIGluIGNyZWF0aW9uIG1vZGUsIHdoaWNoIG1ha2VzIGl0IHRyYW5zaWVudC5cbiAgICAgIC8vIE5PVEU6IFRoaXMgZG9lcyBub3QgbG9vcCBlbmRsZXNzbHkgYmVjYXVzZSBEaXRvRm9ybSByZWRlZmluZXNcbiAgICAgIC8vIGBpc1RyYW5zaWVudCgpYCB0byBvbmx5IHJldHVybiBgIXRoaXMucHJvdmlkZXNEYXRhYC5cbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1Db21wb25lbnRcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAhdGhpcy5saW5rc1RvVmlldyB8fFxuICAgICAgICBmb3JtICYmIChcbiAgICAgICAgICBmb3JtLmlzVHJhbnNpZW50IHx8XG4gICAgICAgICAgZm9ybS5pc0NyZWF0aW5nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdHJhbnNpZW50Tm90ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiYgKFxuICAgICAgICAgICc8Yj5Ob3RlPC9iPjogdGhlIHBhcmVudCBzdGlsbCBuZWVkcyB0byBiZSBzYXZlZCAnICtcbiAgICAgICAgICAnaW4gb3JkZXIgdG8gcGVyc2lzdCB0aGlzIGNoYW5nZS4nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgc2hvdWxkTG9hZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgICF0aGlzLmlzTG9hZGluZ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBoYXNEYXRhKCkge1xuICAgICAgLy8gQmFzZSBkZWZpbml0aW9uLCB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluXG4gICAgICByZXR1cm4gISF0aGlzLmxvYWRlZERhdGFcbiAgICB9LFxuXG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBUaGUgYWN0dWFsIGNvZGUgaXMgdGhlIGBnZXRWZXJicygpYCBtZXRob2QsIGZvciBlYXNpZXIgb3ZlcnJpZGluZyBvZlxuICAgICAgLy8gdGhpcyBjb21wdXRlZCBwcm9wZXJ0eSBpbiBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSBSZXNvdXJjZU1peGluLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmVyYnMoKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0aW9uUmFuZ2UoKSB7XG4gICAgICAvLyBPbmx5IGFwcGx5IHBhZ2luYXRpb24gdG8gbGlzdHMuXG4gICAgICBjb25zdCB7IHBhZ2luYXRlOiBhbW91bnQgfSA9IHRoaXMuc291cmNlU2NoZW1hXG4gICAgICBpZiAodGhpcy5pc0xpc3RTb3VyY2UgJiYgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHsgcGFnZSA9IDAgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwYWdlICogYW1vdW50XG4gICAgICAgIHJldHVybiBbc3RhcnQsIHN0YXJ0ICsgYW1vdW50IC0gMV1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIHF1ZXJ5UGFyYW1zKCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnBhZ2luYXRpb25SYW5nZVxuICAgICAgY29uc3QgeyBwYWdlLCAuLi5xdWVyeSB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucXVlcnksIC8vIFF1ZXJ5IG1heSBvdmVycmlkZSBzY29wZS5cbiAgICAgICAgLi4uKHJhbmdlICYmIHtcbiAgICAgICAgICAvLyBQYXNzIHBhZ2luYXRpb24gYXMgcmFuZ2UsIHNvIHRoYXQgd2UgYXV0b21hdGljYWxseSBnZXQgT2JqZWN0aW9uJ3NcbiAgICAgICAgICAvLyByZXN1bHRzIGNvdW50aW5nOlxuICAgICAgICAgIHJhbmdlOiByYW5nZS5qb2luKCcsJylcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBXaGVuIGNyZWF0aW5nIG5lc3RlZCBkYXRhLCB3ZSBzdGlsbCBuZWVkIHRvIGNhbGwgc2V0dXBEYXRhKClcbiAgICBpZiAodGhpcy5wcm92aWRlc0RhdGEgfHwgdGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICB0aGlzLnNldHVwRGF0YSgpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRSZXNvdXJjZSgpIHtcbiAgICAgIC8vIFRoaXMgaXMgZGVmaW5lZCBhcyBhIG1ldGhvZCBzbyB0aGUgY29tcHV0ZWQgYHJlc291cmNlYCBnZXR0ZXIgY2FuXG4gICAgICAvLyBiZSBvdmVycmlkZGVuIGFuZCBgc3VwZXJgIGZ1bmN0aW9uYWxpdHkgY2FuIHN0aWxsIGJlIGFjY2Vzc2VkLlxuICAgICAgcmV0dXJuIGdldFJlc291cmNlKHRoaXMuc291cmNlU2NoZW1hPy5yZXNvdXJjZSwge1xuICAgICAgICB0eXBlOiAnY29sbGVjdGlvbicsXG4gICAgICAgIHBhcmVudDogdGhpcy5wYXJlbnRGb3JtQ29tcG9uZW50Py5yZXNvdXJjZSA/PyBudWxsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRWZXJicygpIHtcbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy4kdmVyYnMoKVxuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHQgdmVyYnMgd2l0aCB0aGVpciB0cmFuc2llbnQgdmVyc2lvbnM6XG4gICAgICAgICAgICBjcmVhdGU6ICdhZGQnLFxuICAgICAgICAgICAgY3JlYXRlZDogJ2FkZGVkJyxcbiAgICAgICAgICAgIHNhdmU6ICdhcHBseScsXG4gICAgICAgICAgICBzYXZlZDogJ2FwcGxpZWQnLFxuICAgICAgICAgICAgZGVsZXRlOiAncmVtb3ZlJyxcbiAgICAgICAgICAgIGRlbGV0ZWQ6ICdyZW1vdmVkJ1xuICAgICAgICAgIH1cbiAgICAgICAgOiB2ZXJic1xuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICAvLyBBY3R1YWwgY29kZSBpcyBpbiBzZXBhcmF0ZSBmdW5jdGlvbiBzbyBpdCdzIGVhc2VyIHRvIG92ZXJyaWRlXG4gICAgICAvLyBgc2V0dXBEYXRhKClgIGFuZCBhbmQgY2FsbCBgZW5zdXJlRGF0YSgpYCBmcm9tIHRoZSBvdmVycmlkZXMsXG4gICAgICAvLyBzZWUgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluLlxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgZW5zdXJlRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZExvYWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGF0YSkge1xuICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2FkRGF0YSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbG9hZERhdGEoKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgIH0sXG5cbiAgICBsb2FkRGF0YShjbGVhcikge1xuICAgICAgaWYgKCF0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIGlmIChjbGVhcikge1xuICAgICAgICAgIHRoaXMuY2xlYXJEYXRhKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlcXVlc3REYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIHJldHVybiBzZXREZWZhdWx0VmFsdWVzKHNjaGVtYSwgdHlwZSA/IHsgdHlwZSB9IDoge30sIHRoaXMpXG4gICAgfSxcblxuICAgIHJlcXVlc3REYXRhKCkge1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJ5UGFyYW1zXG4gICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdnZXQnLCBxdWVyeSB9LCAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGRhdGE/LnR5cGUgPT09ICdGaWx0ZXJWYWxpZGF0aW9uJyAmJlxuICAgICAgICAgICAgICB0aGlzLm9uRmlsdGVyRXJyb3JzPy4oZGF0YS5lcnJvcnMpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBDYW4gd2UgcmVhbGx5IHN3YWxsb3cgdGhlc2UgZXJyb3JzP1xuICAgICAgICAgICAgICAvLyBJcyBjYWxsaW5nIGBlbnN1cmVVc2VyKClgIGluIGBvbkJlZm9yZVJlcXVlc3QoKWAgZW5vdWdoP1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldERhdGEocmVzcG9uc2UuZGF0YSlcbiAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnbG9hZCcpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGlvbkVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAwXG4gICAgfSxcblxuICAgIGlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDFcbiAgICB9LFxuXG4gICAgYXN5bmMgaGFuZGxlUmVxdWVzdChcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBkYXRhXG4gICAgICB9LFxuICAgICAgY2FsbGJhY2tcbiAgICApIHtcbiAgICAgIGNvbnN0IGxvYWRpbmdPcHRpb25zID0ge1xuICAgICAgICB1cGRhdGVSb290OiB0cnVlLCAvLyBEaXNwbGF5IHNwaW5uZXIgaW4gaGVhZGVyIHdoZW4gbG9hZGluZyBpbiByZXNvdXJjZXNcbiAgICAgICAgdXBkYXRlVmlldzogdGhpcy5pc0luVmlldyAvLyBOb3RpZnkgdmlldyBvZiBsb2FkaW5nIGZvciB2aWV3IGNvbXBvbmVudHNcbiAgICAgIH1cbiAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyPy5hYm9ydCgpXG4gICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgICB0aGlzLmFib3J0Q29udHJvbGxlciA9IGNvbnRyb2xsZXJcbiAgICAgIGNvbnN0IHsgc2lnbmFsIH0gPSBjb250cm9sbGVyXG4gICAgICBjb25zdCByZXF1ZXN0ID0geyBtZXRob2QsIHJlc291cmNlLCBxdWVyeSwgZGF0YSwgc2lnbmFsIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAvLyBQYXNzIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UgdG8gdGhlIGNhbGxiYWNrLCBzbyB0aGV5IGNhbiBiZVxuICAgICAgICAvLyBleHBvc2VkIHRvIGZ1cnRoZXIgY2FsbGJhY2tzIHRocm91Z2ggRGl0b0NvbnRleHQuXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLm5hbWUgIT09ICdBYm9ydEVycm9yJykge1xuICAgICAgICAgIC8vIElmIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSwgZXJyb3JzIHdlcmUgYWxyZWFkeSBoYW5kbGVkLlxuICAgICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGVycm9yXG4gICAgICAgICAgaWYgKCFjYWxsYmFjayhlcnJvciwgcmVzcG9uc2UpKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gaXNTdHJpbmcoZGF0YT8udHlwZSlcbiAgICAgICAgICAgICAgPyBsYWJlbGl6ZShkYXRhLnR5cGUpXG4gICAgICAgICAgICAgIDogJ0Vycm9yJ1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGRhdGE/Lm1lc3NhZ2UgPz8gZXJyb3JcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHsgdHlwZTogJ2Vycm9yJywgdGl0bGUsIHRleHQgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmFib3J0Q29udHJvbGxlciA9PT0gY29udHJvbGxlcikge1xuICAgICAgICAvLyBPbmx5IGNsZWFyIHRoZSBsb2FkaW5nIHN0YXRlIGlmIHRoaXMgaXMgc3RpbGwgdGhlIGN1cnJlbnQgcmVxdWVzdC5cbiAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIgPSBudWxsXG4gICAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKSB7XG4gICAgICAvLyBDb252ZW50aW9uOiBvbmx5IHBvc3QsIHB1dCBhbmQgcGF0Y2ggcmVxdWVzdHMgcGFzcyB0aGUgZGF0YSBhcyBwYXlsb2FkLlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluY2x1ZGVzKG1ldGhvZCkgJiYgKFxuICAgICAgICAgIC8vIFRPRE86IFVzZSBgaGFuZGxlRGF0YVNjaGVtYSgpYCBhc3luY2hyb25vdXNseSBoZXJlIGluc3RlYWQsIHRvXG4gICAgICAgICAgLy8gb2ZmZXIgdGhlIHNhbWUgYW1vdW50IG9mIHBvc3NpYmlsaXRpZXMgZm9yIGRhdGEgbG9hZGluZy5cbiAgICAgICAgICBidXR0b24uZ2V0U2NoZW1hVmFsdWUoWydyZXNvdXJjZScsICdkYXRhJ10pIHx8XG4gICAgICAgICAgYnV0dG9uLnByb2Nlc3NlZEl0ZW1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0aG9kIH0gPSByZXNvdXJjZVxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgc2V0RGF0YSA9IGZhbHNlLFxuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MgPSAoKSA9PlxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBTdWNjZXNzZnVsJyxcbiAgICAgICAgICB0ZXh0OiAnUmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQuJ1xuICAgICAgICB9KSxcbiAgICAgIG5vdGlmeUVycm9yID0gZXJyb3IgPT5cbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICBgVW5hYmxlIHRvIHNlbmQgcmVxdWVzdCR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdChcbiAgICAgICAgICB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEgfSxcbiAgICAgICAgICBhc3luYyAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBEaXRvIHZhbGlkYXRpb24gZXJyb3I6XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpICYmIGRhdGEuZXJyb3JzXG4gICAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzT2JqZWN0KGRhdGEpID8gZGF0YSA6IGVyclxuICAgICAgICAgICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdW5kZXJseWluZyBkYXRhIGJlZm9yZSBjYWxsaW5nIGBub3RpZnkoKWAgb3JcbiAgICAgICAgICAgICAgLy8gYHRoaXMuaXRlbUxhYmVsYCwgc28gaWQgaXMgc2V0IGFmdGVyIGNyZWF0aW5nIG5ldyBpdGVtcy5cbiAgICAgICAgICAgICAgaWYgKHNldERhdGEgJiYgZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgZXZlbnQsIHsgbm90aWZ5LCBlcnJvciB9KSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgb3V0c2lkZSBvZiBgZW1pdEV2ZW50KClgLCBzbyB0aGF0XG4gICAgICAvLyBgY29udGV4dC53YXNOb3RpZmllZGAgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIuXG4gICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KGJ1dHRvbiwge1xuICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgIGl0ZW1MYWJlbDogdGhpcy5pdGVtTGFiZWwsXG4gICAgICAgIGVycm9yXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYnV0dG9uLmVtaXRFdmVudChldmVudCwgeyBjb250ZXh0IH0pXG4gICAgICBpZiAoXG4gICAgICAgIG5vdGlmeSAmJlxuICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgaWYgYW55dGhpbmcgd2FzIHJldHVybmVkIGZyb20gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIC8vIERvIG5vdCBkaXNwbGF5IGRlZmF1bHQgbm90aWZpY2F0aW9uIGlmIHRoZSBldmVudCBoYW5kbGVyIGFscmVhZHlcbiAgICAgICAgLy8gZGlzcGxheWVkIGEgbm90aWZpY2F0aW9uLlxuICAgICAgICAhY29udGV4dC53YXNOb3RpZmllZFxuICAgICAgKSB7XG4gICAgICAgIG5vdGlmeShlcnJvcilcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGF0aChwYXRoKSB7XG4gIC8vIEZvciBwYXRocyBzdGFyaW5nIHdpdGggYC9gLCB3ZSBjYW4gdXNlIHRoZSBuYXRpdmUgYFVSTCgpYCBjbGFzcyB0byByZXNvbHZlXG4gIC8vIHRoZSBwYXRoLCB3aGljaCB3aWxsIGFsc28gaGFuZGxlIGAuLmAgYW5kIGAuYCBzZWdtZW50czpcbiAgcmV0dXJuIG5ldyBVUkwoYGZpbGU6JHtwYXRofWApLnBhdGhuYW1lXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbilcbiAgLy8tIE5PVEU6IE5lc3RlZCBmb3JtIGNvbXBvbmVudHMgYXJlIGtlcHQgYWxpdmUgYnkgdXNpbmcgYHYtc2hvd2AgaW5zdGVhZCBvZlxuICAvLy0gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLy0gZWRpdGluZy4gT25seSByZW5kZXIgYSByb3V0ZXItdmlldyBoZXJlIGlmIHRoaXMgaXNuJ3QgdGhlIGxhc3QgZGF0YSByb3V0ZVxuICAvLy0gYW5kIG5vdCBhIG5lc3RlZCBmb3JtIHJvdXRlLCB3aGljaCB3aWxsIGFwcGVhciBlbHNld2hlcmUgaW4gaXRzIG93biB2aWV3LlxuICBSb3V0ZXJWaWV3KFxuICAgIHYtaWY9XCIhKGlzTGFzdFVubmVzdGVkUm91dGUgfHwgaXNOZXN0ZWRSb3V0ZSlcIlxuICAgIHYtc2hvdz1cIiFpc0FjdGl2ZVwiXG4gIClcbiAgLy8tIFVzZSBhIDxkaXY+IGZvciBpbmxpbmVkIGZvcm1zLCBhcyB3ZSBzaG91bGRuJ3QgbmVzdCBhY3R1YWwgPGZvcm0+IHRhZ3MuXG4gIGNvbXBvbmVudChcbiAgICB2LXNob3c9XCJpc0FjdGl2ZVwiXG4gICAgOmlzPVwiaXNOZXN0ZWRSb3V0ZSA/ICdkaXYnIDogJ2Zvcm0nXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjcm9sbC1wYXJlbnQnOiBpc1Jvb3RGb3JtIH1cIlxuICAgIEBzdWJtaXQucHJldmVudFxuICApXG4gICAgLy8tIFByZXZlbnQgaW1wbGljaXQgc3VibWlzc2lvbiBvZiB0aGUgZm9ybSwgZm9yIGV4YW1wbGUgd2hlbiB0eXBpbmcgZW50ZXJcbiAgICAvLy0gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTUwNzgwNlxuICAgIGJ1dHRvbihcbiAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgZGlzYWJsZWRcbiAgICApXG4gICAgRGl0b1NjaGVtYShcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6cGFkZGluZz1cImlzTmVzdGVkUm91dGUgPyAnbmVzdGVkJyA6ICdyb290J1wiXG4gICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgOnNjcm9sbGFibGU9XCJpc1Jvb3RGb3JtXCJcbiAgICAgIGdlbmVyYXRlTGFiZWxzXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI2J1dHRvbnMpXG4gICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbGFyZ2UuZGl0by1idXR0b25zLW1haW4oXG4gICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1idXR0b25zLXN0aWNreSc6IGlzUm9vdEZvcm0gfVwiXG4gICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUsIGNhcGl0YWxpemUsIHBhcnNlRGF0YVBhdGgsIGFzc2lnbkRlZXBseSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcywgaXNPYmplY3RTb3VyY2UgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyByZXNvbHZlUGF0aCB9IGZyb20gJy4uL3V0aWxzL3BhdGguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0Zvcm0nLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW4sIFJlc291cmNlTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWF0ZWREYXRhOiBudWxsLFxuICAgICAgY2xvbmVkRGF0YTogdW5kZWZpbmVkLFxuICAgICAgc291cmNlS2V5OiBudWxsLFxuICAgICAgaXNGb3JtOiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBBZGQgc3VibWl0IC8gc3VibWl0dGVkIHRvIHRoZSB2ZXJicyByZXR1cm5lZCBieSBSZXNvdXJjZU1peGluXG4gICAgICAvLyBOT1RFOiBUaGVzZSBnZXQgcGFzc2VkIG9uIHRvIGNoaWxkcmVuIHRocm91Z2g6XG4gICAgICAvLyBgcHJvdmlkZSgpIC4uLiB7ICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyB9YCBpbiBSZXNvdXJjZU1peGluXG4gICAgICBjb25zdCB2ZXJicyA9IHRoaXMuZ2V0VmVyYnMoKVxuICAgICAgY29uc3QgeyBpc0NyZWF0aW5nLCBwcm92aWRlc0RhdGEgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnZlcmJzLFxuICAgICAgICBzdWJtaXQ6IGlzQ3JlYXRpbmcgPyB2ZXJicy5jcmVhdGUgOiB2ZXJicy5zYXZlLFxuICAgICAgICBzdWJtaXR0ZWQ6IGlzQ3JlYXRpbmcgPyB2ZXJicy5jcmVhdGVkIDogdmVyYnMuc2F2ZWQsXG4gICAgICAgIGNhbmNlbDogcHJvdmlkZXNEYXRhID8gdmVyYnMuY2FuY2VsIDogdmVyYnMuY2xvc2UsXG4gICAgICAgIGNhbmNlbGxlZDogcHJvdmlkZXNEYXRhID8gdmVyYnMuY2FuY2VsbGVkIDogdmVyYnMuY2xvc2VkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuZ2V0SXRlbUZvcm1TY2hlbWEoXG4gICAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGF0YSB5ZXQsIHByb3ZpZGUgYW4gZW1wdHkgb2JqZWN0IHdpdGgganVzdCB0aGVcbiAgICAgICAgICAvLyByaWdodCB0eXBlIHNldCwgc28gdGhlIGZvcm0gY2FuIGFsd2F5cyBiZSBkZXRlcm1pbmVkLlxuICAgICAgICAgIHRoaXMuZGF0YSB8fCB7IHR5cGU6IHRoaXMudHlwZSB9LFxuICAgICAgICAgIHRoaXMuY29udGV4dFxuICAgICAgICApIHx8IHt9XG4gICAgICApIC8vIEFsd2F5cyByZXR1cm4gYSBzY2hlbWEgb2JqZWN0IHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIGl0LlxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXMoXG4gICAgICAgIGFzc2lnbkRlZXBseShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjYW5jZWw6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHN1Ym1pdDogIXRoaXMuaXNNdXRhdGluZyAmJiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICAgICAgICAvLyBTdWJtaXQgYnV0dG9ucyBjbG9zZSB0aGUgZm9ybSBieSBkZWZhdWx0OlxuICAgICAgICAgICAgICBjbG9zZUZvcm06IHRydWUsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoeyBjb21wb25lbnQ6IGJ1dHRvbiB9KSA9PiBidXR0b24uc3VibWl0KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5zY2hlbWEuYnV0dG9uc1xuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzUm9vdEZvcm0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhUGF0aCA9PT0gJycgJiYgIXRoaXMuaXNOZXN0ZWRSb3V0ZVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGFzdFJvdXRlIHx8IHRoaXMuaXNMYXN0VW5uZXN0ZWRSb3V0ZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNDcmVhdGluZygpIHtcbiAgICAgIC8vIHRoaXMucGFyYW0gaXMgaW5oZXJpdGVkIGZyb20gUm91dGVNaXhpblxuICAgICAgcmV0dXJuIHRoaXMucGFyYW0gPT09ICdjcmVhdGUnXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNNdXRhdGluZyAmJiAhIXRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uaXNEaXJ0eVxuICAgIH0sXG5cbiAgICBpc011dGF0aW5nKCkge1xuICAgICAgLy8gV2hlbiBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgdGhlIGZvcm0gZWRpdHMgdGhlIGluaGVyaXRlZCBkYXRhXG4gICAgICAvLyBkaXJlY3RseSBpbnN0ZWFkIG9mIG1ha2luZyBhIGNvcHkgZm9yIHBlcnNpc3RlbmNlIHVwb24gc3VibWlzc2lvbi5cbiAgICAgIC8vIFNlZSBgaW5oZXJpdGVkRGF0YSgpYCBjb21wdXRlZCBwcm9wZXJ0eSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuICEhdGhpcy5zb3VyY2VTY2hlbWEubXV0YXRlXG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uc2VsZWN0ZWRUYWIgfHwgbnVsbFxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgLy8gVGhlIHR5cGUgb2YgZm9ybSB0byBjcmVhdGUsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5xdWVyeS50eXBlXG4gICAgfSxcblxuICAgIGl0ZW1JZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy5wYXJhbSA/PyBudWxsXG4gICAgfSxcblxuICAgIG1ldGhvZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmcgPyAncG9zdCcgOiAncGF0Y2gnXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLmdldFJlc291cmNlKClcbiAgICAgIHJldHVybiBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLml0ZW1JZCwgcmVzb3VyY2UpIHx8IHJlc291cmNlXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWJQcmVmaXgoKSB7XG4gICAgICByZXR1cm4gY2FwaXRhbGl6ZSh0aGlzLmlzQ3JlYXRpbmcgPyB0aGlzLnZlcmJzLmNyZWF0ZSA6IHRoaXMudmVyYnMuZWRpdClcbiAgICB9LFxuXG4gICAgZGF0YSgpIHtcbiAgICAgIC8vIFJldHVybiBkaWZmZXJlbnQgZGF0YSBcImNvbnRhaW5lcnNcIiBiYXNlZCBvbiBkaWZmZXJlbnQgc2NlbmFyaW9zOlxuICAgICAgLy8gMS4gY3JlYXRlZERhdGEsIGlmIHdlJ3JlIGluIGEgZm9ybSBmb3IgYSBuZXdseSBjcmVhdGVkIG9iamVjdC5cbiAgICAgIC8vIDIuIGxvYWRlZERhdGEsIGlmIHRoZSBmb3JtIGl0c2VsZiBpcyB0aGUgcm9vdCBvZiB0aGUgZGF0YSAoZS5nLiB3aGVuXG4gICAgICAvLyAgICBkaXJlY3RseSBsb2FkaW5nIGFuIGVkaXRpbmcgcm9vdCkuXG4gICAgICAvLyAzLiBUaGUgZGF0YSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50LCB3aGljaCBpdHNlbGYgbWF5IGJlIGVpdGhlciBhXG4gICAgICAvLyAgICB2aWV3IHRoYXQgbG9hZGVkIHRoZSBkYXRhLCBvciBhIGZvcm0gdGhhdCBlaXRoZXIgbG9hZGVkIHRoZSBkYXRhLCBvclxuICAgICAgLy8gICAgYWxzbyBpbmhlcml0ZWQgaXQgZnJvbSBpdHMgcGFyZW50LiBOb3RlIHRoYXQgd2UgdXNlIGEgY2xvbmUgb2YgaXQsXG4gICAgICAvLyAgICBzbywgZGF0YSBjaGFuZ2VzIGFyZW4ndCBhcHBsaWVkIHVudGlsIHNldFNvdXJjZURhdGEoKSBpcyBjYWxsZWQuXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVkRGF0YSB8fCB0aGlzLmxvYWRlZERhdGEgfHwgdGhpcy5pbmhlcml0ZWREYXRhIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREYXRhUGF0aEZyb20odGhpcy5kYXRhQ29tcG9uZW50KVxuICAgIH0sXG5cbiAgICBzb3VyY2VEYXRhKCkge1xuICAgICAgLy8gUG9zc2libGUgcGFyZW50cyBhcmUgRGl0b0Zvcm0gZm9yIGZvcm1zLCBvciBEaXRvVmlldyBmb3Igcm9vdCBsaXN0cy5cbiAgICAgIC8vIEJvdGggaGF2ZSBhIGRhdGEgcHJvcGVydHkgd2hpY2ggYWJzdHJhY3RzIGF3YXkgbG9hZGluZyBhbmQgaW5oZXJpdGluZ1xuICAgICAgLy8gb2YgZGF0YS5cbiAgICAgIC8vIEZvcm1zIHRoYXQgYXJlIGFib3V0IHRvIGJlIGRlc3Ryb3llZCBkdWUgdG8gbmF2aWdhdGlvbiBsb29zZSB0aGVpclxuICAgICAgLy8gcm91dGUtcmVjb3JkLCBidXQgbWlnaHQgc3RpbGwgdHJpZ2dlciB0aGlzIGdldHRlci4gRmlsdGVyIHRob3NlIG91dC5cbiAgICAgIGxldCBkYXRhID0gdGhpcy5yb3V0ZVJlY29yZCA/IHRoaXMucGFyZW50Um91dGVDb21wb25lbnQuZGF0YSA6IG51bGxcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIC8vIEhhbmRsZSBuZXN0ZWQgZGF0YSBieSBzcGxpdHRpbmcgdGhlIGRhdGFQYXRoLCBpdGVyYXRlIHRocm91Z2ggdGhlXG4gICAgICAgIC8vIGFjdHVhbCBkYXRhIGFuZCBsb29rIG5lc3QgY2hpbGQtZGF0YSB1cC5cbiAgICAgICAgY29uc3QgZGF0YVBhcnRzID0gcGFyc2VEYXRhUGF0aChcbiAgICAgICAgICB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50KVxuICAgICAgICApXG4gICAgICAgIC8vIENvbXBhcmUgZGF0YVBhcnRzIGFnYWluc3QgbWF0Y2hlZCByb3V0ZVBhdGggcGFydHMsIHRvIGlkZW50aWZ5IHRob3NlXG4gICAgICAgIC8vIHBhcnRzIHRoYXQgbmVlZCB0byBiZSB0cmVhdGVkIGxpa2UgaWRzIGFuZCBtYXBwZWQgdG8gaW5kaWNlcyBpbiBkYXRhLlxuICAgICAgICBjb25zdCBwYXRoUGFydHMgPSB0aGlzLnJvdXRlUmVjb3JkLnBhdGguc3BsaXQoJy8nKVxuICAgICAgICBjb25zdCByb3V0ZVBhcnRzID0gcGF0aFBhcnRzLnNsaWNlKHBhdGhQYXJ0cy5sZW5ndGggLSBkYXRhUGFydHMubGVuZ3RoKVxuICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBudWxsXG4gICAgICAgIGNvbnN0IGxhc3REYXRhUGFydCA9IGRhdGFQYXJ0c1tkYXRhUGFydHMubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKSAmJiBsYXN0RGF0YVBhcnQgPT09ICdjcmVhdGUnKSB7XG4gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBvYmplY3Qgc291cmNlIGFuZCBhcmUgY3JlYXRpbmcsIHRoZSBkYXRhUGF0aCBuZWVkcyB0b1xuICAgICAgICAgIC8vIGJlIHNob3J0ZW5lZCBieSB0aGUgJ2NyZWF0ZScgZW50cnkuIFRoaXMgaXNuJ3QgbmVlZGVkIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcywgYXMgdGhlcmUgdGhlIHBhcmFtZXRlciBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlIGl0ZW0gaWQuXG4gICAgICAgICAgZGF0YVBhcnRzLmxlbmd0aC0tXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBkYXRhUGFydHMubGVuZ3RoOyBpIDwgbCAmJiBkYXRhOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRhUGFydCA9IGRhdGFQYXJ0c1tpXVxuICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gOmlkIHBhcnQsIGZpbmQgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdpdGggZ2l2ZW4gaWQuXG4gICAgICAgICAgY29uc3Qga2V5ID0gL146aWQvLnRlc3Qocm91dGVQYXJ0c1tpXSlcbiAgICAgICAgICAgID8gZGF0YVBhcnQgPT09ICdjcmVhdGUnXG4gICAgICAgICAgICAgID8gbnVsbCAvLyBUaGVyZSdzIG5vIGluZGV4IGZvciBlbnRyaWVzIGFib3V0IHRvIGJlIGNyZWF0ZWRcbiAgICAgICAgICAgICAgOiB0aGlzLmZpbmRJdGVtSWRJbmRleCh0aGlzLnNvdXJjZVNjaGVtYSwgZGF0YSwgZGF0YVBhcnQpXG4gICAgICAgICAgICA6IGRhdGFQYXJ0XG4gICAgICAgICAgLy8gU2tpcCB0aGUgZmluYWwgbG9va3VwIGJ1dCByZW1lbWJlciBgc291cmNlS2V5YCwgYXMgd2Ugd2FudCB0aGVcbiAgICAgICAgICAvLyBwYXJlbnQgZGF0YSBzbyB3ZSBjYW4gcmVwbGFjZSB0aGUgZW50cnkgYXQgYHNvdXJjZUtleWAgb24gaXQuXG4gICAgICAgICAgaWYgKGkgPT09IGwgLSAxKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMuc291cmNlS2V5ID0ga2V5XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhW2tleV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGluaGVyaXRlZERhdGEoKSB7XG4gICAgICAvLyBEYXRhIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgYW5kIGNsb25lZCB0byBwcm90ZWN0IGFnYWluc3QgcmVhY3RpdmVcbiAgICAgIC8vIGNoYW5nZXMgdW50aWwgY2hhbmdlcyBhcmUgYXBwbGllZCB0aHJvdWdoIHNldFNvdXJjZURhdGEoKSwgdW5sZXNzXG4gICAgICAvLyBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgaW4gd2hpY2ggY2FzZSBkYXRhIGlzIG11dGF0ZWQgZGlyZWN0bHkuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhICYmXG4gICAgICAgIHRoaXMuc291cmNlS2V5ICE9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnNvdXJjZURhdGFbdGhpcy5zb3VyY2VLZXldXG4gICAgICAgIGlmICghdGhpcy5pc011dGF0aW5nKSB7XG4gICAgICAgICAgLy8gVXNlIGEgdHJpY2sgdG8gc3RvcmUgY2xvbmVkIGluaGVyaXRlZCBkYXRhIGluIGNsb25lZERhdGEsIHRvIG1ha2VcbiAgICAgICAgICAvLyBpdCByZWFjdGl2ZSBhbmQgcHJldmVudCBpdCBmcm9tIGJlaW5nIGNsb25lZCBtdWx0aXBsZSB0aW1lcy5cbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IGRhdGEgPSBjbG9uZShkYXRhKVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhID09PSBudWxsICYmXG4gICAgICAgICAgIXRoaXMuaXNDcmVhdGluZyAmJlxuICAgICAgICAgIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIG9mIGFuIG9iamVjdCBzb3VyY2UgaXMgbnVsbCwgcmVkaXJlY3QgdG8gaXRzIGNyZWF0ZSByb3V0ZS5cbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgcGF0aDogYCR7dGhpcy5wYXRofS9jcmVhdGVgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNsb25lZERhdGFcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBpdGVtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zb3VyY2VTY2hlbWEsIHRoaXMuZGF0YSwgeyBleHRlbmRlZDogdHJ1ZSB9KVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZToge1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzMzOTMjaXNzdWVjb21tZW50LTExNTg0NzAxNDlcbiAgICAgIGZsdXNoOiAncG9zdCcsXG4gICAgICBoYW5kbGVyKHRvLCBmcm9tKSB7XG4gICAgICAgIC8vIFJlbG9hZCBmb3JtIGRhdGEgd2hlbiBuYXZpZ2F0aW5nIHRvIGEgZGlmZmVyZW50IGVudGl0eSBpbiBzYW1lIGZvcm0uXG4gICAgICAgIGNvbnN0IHBhcmFtID0gdGhpcy5tZXRhPy5wYXJhbVxuICAgICAgICBpZiAoXG4gICAgICAgICAgcGFyYW0gJiZcbiAgICAgICAgICB0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAgIC8vIFRPRE86IFNlZSBpZiB3ZSBjYW4gcmVtb3ZlIHRoaXMgZHVlIHRvIGBmbHVzaDogJ3Bvc3QnYC5cbiAgICAgICAgICBmcm9tLm1hdGNoZWRbMF0ucGF0aCA9PT0gdG8ubWF0Y2hlZFswXS5wYXRoICYmIC8vIFN0YXlpbmcgb24gc2FtZSBmb3JtXG4gICAgICAgICAgZnJvbS5wYXJhbXNbcGFyYW1dICE9PSAnY3JlYXRlJyAmJiAvLyBCdXQgaGF2ZW4ndCBiZWVuIGNyZWF0aW5nXG4gICAgICAgICAgdG8ucGFyYW1zW3BhcmFtXSAhPT0gZnJvbS5wYXJhbXNbcGFyYW1dIC8vIEdvaW5nIHRvIGEgZGlmZmVyZW50IGVudGl0eVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc291cmNlRGF0YTogJ2NsZWFyQ2xvbmVkRGF0YScsXG4gICAgLy8gTmVlZGVkIGZvciB0aGUgJ2NyZWF0ZScgcmVkaXJlY3QgaW4gYGluaGVyaXRlZERhdGEoKWAgdG8gd29yazpcbiAgICBjcmVhdGU6ICdzZXR1cERhdGEnXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmVtaXRFdmVudChldmVudCwgcGFyYW1zKVxuICAgIH0sXG5cbiAgICBnZXREYXRhUGF0aEZyb20ocm91dGVDb21wb25lbnQpIHtcbiAgICAgIC8vIEdldCB0aGUgZGF0YSBwYXRoIGJ5IGRlbm9ybWFsaXplUGF0aCB0aGUgcmVsYXRpdmUgcm91dGUgcGF0aFxuICAgICAgcmV0dXJuIHRoaXMuYXBpLmRlbm9ybWFsaXplUGF0aChcbiAgICAgICAgdGhpcy5wYXRoXG4gICAgICAgICAgLy8gRGl0b1ZpZXdzIGhhdmUgbmVzdGVkIHJvdXRlcywgc28gZG9uJ3QgcmVtb3ZlIHRoZWlyIHBhdGguXG4gICAgICAgICAgLnNsaWNlKChyb3V0ZUNvbXBvbmVudC5pc1ZpZXcgPyAwIDogcm91dGVDb21wb25lbnQucGF0aC5sZW5ndGgpICsgMSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0dXBEYXRhKClcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICBpZiAodGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZERhdGEgfHw9IHRoaXMuY3JlYXRlRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy50eXBlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0U291cmNlRGF0YShkYXRhKSB7XG4gICAgICBpZiAodGhpcy5zb3VyY2VEYXRhICYmIHRoaXMuc291cmNlS2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHsgbWFpblNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgICB0aGlzLnNvdXJjZURhdGFbdGhpcy5zb3VyY2VLZXldID0gbWFpblNjaGVtYUNvbXBvbmVudC5maWx0ZXJEYXRhKGRhdGEpXG4gICAgICAgIG1haW5TY2hlbWFDb21wb25lbnQub25DaGFuZ2UoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFkZFNvdXJjZURhdGEoZGF0YSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICA/IHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgICA6ICEhdGhpcy5zb3VyY2VEYXRhPy5wdXNoKGRhdGEpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy5zZXREYXRhKG51bGwpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gc2V0RGF0YSgpIGlzIGNhbGxlZCBhZnRlciBzdWJtaXQgd2hlbiBkYXRhIGhhcyBjaGFuZ2VkLlxuICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgLy8gRm9yIGNvbXBvbmVudHMgd2l0aCB0cmFuc2llbnQgZGF0YSwgbW9kaWZ5IHRoaXMuc291cmNlRGF0YS5cbiAgICAgICAgdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhID0gbnVsbFxuICAgICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyQ2xvbmVkRGF0YSh0bywgZnJvbSkge1xuICAgICAgLy8gT25seSBjbGVhciBpZiB0aGUgd2F0Y2hlZCBzb3VyY2VEYXRhIGl0c2VsZiBjaGFuZ2VzIGluIHRoZSBmb3JtLlxuICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbG9zZSgpXG4gICAgfSxcblxuICAgIGFzeW5jIGNsb3NlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGUodGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudC5wYXRoKVxuICAgIH0sXG5cbiAgICBnZXRTdWJtaXRWZXJiKHByZXNlbnQgPSB0cnVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gcHJlc2VudFxuICAgICAgICAgID8gJ2NyZWF0ZSdcbiAgICAgICAgICA6ICdjcmVhdGVkJ1xuICAgICAgICA6IHByZXNlbnRcbiAgICAgICAgICA/ICdzdWJtaXQnXG4gICAgICAgICAgOiAnc3VibWl0dGVkJ1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uLCB7IHZhbGlkYXRlID0gdHJ1ZSwgY2xvc2VGb3JtID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAodmFsaWRhdGUgJiYgIXRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2V0VmVyYiA9IHByZXNlbnQgPT4gdGhpcy52ZXJic1t0aGlzLmdldFN1Ym1pdFZlcmIocHJlc2VudCldXG5cbiAgICAgIC8vIEFsbG93IGJ1dHRvbnMgdG8gb3ZlcnJpZGUgYm90aCBtZXRob2QgYW5kIHJlc291cmNlIHBhdGggdG8gc3VibWl0IHRvOlxuICAgICAgY29uc3QgYnV0dG9uUmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5yZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlc291cmNlID0gYnV0dG9uUmVzb3VyY2UgfHwgdGhpcy5yZXNvdXJjZVxuICAgICAgY29uc3QgbWV0aG9kID0gcmVzb3VyY2U/Lm1ldGhvZCB8fCB0aGlzLm1ldGhvZFxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpXG4gICAgICBsZXQgc3VjY2Vzc1xuICAgICAgaWYgKCFidXR0b25SZXNvdXJjZSAmJiB0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zaWVudChidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KHRoaXMuZ2V0U3VibWl0VmVyYigpKSxcbiAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PlxuICAgICAgICAgICAgdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2Vycm9yJywge1xuICAgICAgICAgICAgICBjb250ZXh0OiB7IGVycm9yIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgICAgICAgICA/IGBJdGVtICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gXG4gICAgICAgICAgICAgICAgOiBgQ2hhbmdlICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgICA/IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICAgICAgICA6IGBDaGFuZ2VzIHRvICR7dGhpcy5pdGVtTGFiZWx9IHdlcmUgJHt2ZXJifS5gLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IGBVbmFibGUgdG8gJHt2ZXJifSAke3RoaXMuaXRlbUxhYmVsfS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIHNldERhdGE6IHRydWUsXG4gICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCh0aGlzLmdldFN1Ym1pdFZlcmIoKSksXG4gICAgICAgICAgb25FcnJvcjogZXJyb3IgPT5cbiAgICAgICAgICAgIHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgICAgY29udGV4dDogeyBlcnJvciB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBub3RpZnlTdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICB0aXRsZTogYFN1Y2Nlc3NmdWxseSAke2NhcGl0YWxpemUodmVyYil9YCxcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5pdGVtTGFiZWx9IHdhcyAke3ZlcmJ9LmBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub3RpZnlFcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIodHJ1ZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgIGBVbmFibGUgdG8gJHt2ZXJifSAke3RoaXMuaXRlbUxhYmVsfSR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgICAgICAgIGVycm9yPy5tZXNzYWdlIHx8IGVycm9yXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb24oKVxuICAgICAgICBpZiAoY2xvc2VGb3JtIHx8IGJ1dHRvbi5jbG9zZUZvcm0pIHtcbiAgICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgICAgICAvLyBSZWRpcmVjdCB0byB0aGUgZm9ybSBlZGl0aW5nIHRoZSBuZXdseSBjcmVhdGVkIGl0ZW06XG4gICAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgdGhpcy5kYXRhKVxuICAgICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHtcbiAgICAgICAgICAgIHBhdGg6IHJlc29sdmVQYXRoKGAke3RoaXMucGF0aH0vLi4vJHtpZH1gKSxcbiAgICAgICAgICAgIC8vIFByZXNlcnZlIGhhc2ggZm9yIHRhYnM6XG4gICAgICAgICAgICBoYXNoOiB0aGlzLiRyb3V0ZS5oYXNoXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgX3Jlc291cmNlLCBfbWV0aG9kLCBkYXRhLCB7XG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBvbkVycm9yLFxuICAgICAgbm90aWZ5U3VjY2VzcyxcbiAgICAgIG5vdGlmeUVycm9yXG4gICAgfSkge1xuICAgICAgLy8gSGFuZGxlIHRoZSBkZWZhdWx0IFwic3VibWl0dGluZ1wiIG9mIHRyYW5zaWVudCwgbmVzdGVkIGRhdGE6XG4gICAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gdGhpcy5hZGRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICBvblN1Y2Nlc3M/LigpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ3N1Y2Nlc3MnLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlTdWNjZXNzXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnJvciA9ICdDb3VsZCBub3Qgc3VibWl0IHRyYW5zaWVudCBpdGVtJ1xuICAgICAgICBvbkVycm9yPy4oZXJyb3IpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvRm9ybSBmcm9tICcuL0RpdG9Gb3JtLnZ1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRm9ybU5lc3RlZCcsIHtcbiAgZXh0ZW5kczogRGl0b0Zvcm1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1mb3JtLW5lc3RlZCB7XG4gIC8vIE5vIHNjcm9sbGluZyBpbnNpZGUgbmVzdGVkIGZvcm1zLCBhbmQgcHJldmVudCBvcGVuIC5tdWx0aXNlbGVjdCBmcm9tXG4gIC8vIGJlaW5nIGNyb3BwZWQuXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1lcnJvcnMoXG4gIHYtaWY9XCJlcnJvcnNcIlxuKVxuICB1bFxuICAgIGxpKFxuICAgICAgdi1mb3I9XCJlcnJvciBvZiBlcnJvcnNcIlxuICAgICkge3sgZXJyb3IgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgdGlwcHkgZnJvbSAndGlwcHkuanMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgbWFya1JhdyB9IGZyb20gJ3Z1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRXJyb3JzJywge1xuICBwcm9wczoge1xuICAgIGVycm9yczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGlwOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgZXJyb3JzKCkge1xuICAgICAgdGhpcy4kbmV4dFRpY2sodGhpcy51cGRhdGVFcnJvcnMpXG4gICAgfVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLnRpcD8uZGVzdHJveSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHVwZGF0ZUVycm9ycygpIHtcbiAgICAgIGxldCB7IHRpcCB9ID0gdGhpc1xuICAgICAgdGlwPy5oaWRlKClcbiAgICAgIGlmICh0aGlzLmVycm9ycykge1xuICAgICAgICB0aXAgPSB0aGlzLnRpcCA/Pz0gbWFya1Jhdyh0aXBweSh0aGlzLiRlbC5jbG9zZXN0KCcuZGl0by1jb250YWluZXInKSkpXG4gICAgICAgIHRpcC5zZXRQcm9wcyh7XG4gICAgICAgICAgY29udGVudDogdGhpcy5lcnJvcnMuam9pbignXFxuJyksXG4gICAgICAgICAgdGhlbWU6ICdlcnJvcicsXG4gICAgICAgICAgdHJpZ2dlcjogJ21hbnVhbCcsXG4gICAgICAgICAgYXBwZW5kVG86ICdwYXJlbnQnLFxuICAgICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbS1zdGFydCcsXG4gICAgICAgICAgYW5pbWF0aW9uOiAnc2hpZnQtYXdheS1zdWJ0bGUnLFxuICAgICAgICAgIHBvcHBlck9wdGlvbnM6IHtcbiAgICAgICAgICAgIG1vZGlmaWVyczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2ZsaXAnLFxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGhpZGVPbkNsaWNrOiBmYWxzZSxcbiAgICAgICAgICBvZmZzZXQ6IFszLCAzXSwgLy8gMS8yIGZvcm0tc3BhY2luZ1xuICAgICAgICAgIHpJbmRleDogMVxuICAgICAgICB9KVxuICAgICAgICB0aXAucG9wcGVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsICgpID0+IHRpcC5oaWRlKCkpXG4gICAgICAgIHRpcC5zaG93KClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1lcnJvcnMge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcblxuICB1bCB7XG4gICAgY29sb3I6ICRjb2xvci1lcnJvcjtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zY29wZXNcbiAgUm91dGVyTGluayhcbiAgICB2LWZvcj1cIihzY29wZSwga2V5KSBpbiBzY29wZXNcIlxuICAgIDprZXk9XCJrZXlcIlxuICAgIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgOnRvPVwiZ2V0U2NvcGVMaW5rKHNjb3BlKVwiXG4gICAgY3VzdG9tXG4gIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2VsZWN0ZWQnOiBzY29wZS5uYW1lID09PSBxdWVyeS5zY29wZSB9XCJcbiAgICAgIDp0aXRsZT1cInNjb3BlLmhpbnQgfHwgZ2V0TGFiZWwoc2NvcGUpXCJcbiAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICApIHt7IGdldExhYmVsKHNjb3BlKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1Njb3BlcycsIHtcbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NvcGVzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRTY29wZUxpbmsoc2NvcGUpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0geyAuLi50aGlzLnF1ZXJ5LCBzY29wZTogc2NvcGUubmFtZSB9XG4gICAgICBpZiAocXVlcnkucGFnZSkge1xuICAgICAgICBxdWVyeS5wYWdlID0gMFxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlMaW5rKHF1ZXJ5KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNjb3BlcyB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgLmRpdG8tYnV0dG9uIHtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgLy8gQSBiaXQgbW9yZSB0aGFuIHRoZSB3aWR0aCBvZiBlbGxpcHNpcywgdG8gcHJldmVudCByZXBsYWNpbmcgc2hvcnQgd29yZHNcbiAgICAvLyB3aXRoIGVsbGlwc2lzLlxuICAgIG1pbi13aWR0aDogM2VtO1xuICAgIGZsZXg6IDAgMSBhdXRvO1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxZW07XG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAxZW07XG4gICAgICBwYWRkaW5nLWxlZnQ6IDFlbTtcbiAgICB9XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDFlbTtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAxZW07XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAxZW07XG4gICAgfVxuXG4gICAgJiArIC5kaXRvLWJ1dHRvbiB7XG4gICAgICBtYXJnaW4tbGVmdDogLTFweDtcbiAgICB9IC8vIERvbid0IGNvdmVyIHRoZSBmb2N1c2VkIGJvcmRlciBvZiBidXR0b25zOlxuICAgICY6Zm9jdXMge1xuICAgICAgei1pbmRleDogMTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuUGFnaW5hdGlvbihcbiAgdi1tb2RlbDpwYWdlPVwicGFnZVwiXG4gIDpwYWdlU2l6ZT1cImxpbWl0XCJcbiAgOnRvdGFsPVwidG90YWxcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IFBhZ2luYXRpb24gfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1BhZ2luYXRpb24nLCB7XG4gIGNvbXBvbmVudHM6IHsgUGFnaW5hdGlvbiB9LFxuXG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxpbWl0OiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhZ2U6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICgrdGhpcy5xdWVyeS5wYWdlIHx8IDApICsgMVxuICAgICAgfSxcblxuICAgICAgc2V0KHBhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMucGFnZSAhPT0gcGFnZSkge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKFxuICAgICAgICAgICAgdGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICAgICAgICBwYWdlOiBwYWdlIC0gMVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzRHJhZ2dpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXREcmFnZ2FibGVPcHRpb25zKGZvcmNlRmFsbGJhY2sgPSBmYWxzZSkge1xuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tZHJhZ2dhYmxlJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW5pbWF0aW9uOiAxNTAsXG4gICAgICAgIGhhbmRsZTogJy5kaXRvLWJ1dHRvbi1kcmFnJyxcbiAgICAgICAgZHJhZ0NsYXNzOiBgJHtwcmVmaXh9X19kcmFnYCxcbiAgICAgICAgY2hvc2VuQ2xhc3M6IGAke3ByZWZpeH1fX2Nob3NlbmAsXG4gICAgICAgIGdob3N0Q2xhc3M6IGAke3ByZWZpeH1fX2dob3N0YCxcbiAgICAgICAgZmFsbGJhY2tDbGFzczogYCR7cHJlZml4fV9fZmFsbGJhY2tgLFxuICAgICAgICBmb3JjZUZhbGxiYWNrLFxuICAgICAgICBvblN0YXJ0OiB0aGlzLm9uU3RhcnREcmFnLFxuICAgICAgICBvbkVuZDogdGhpcy5vbkVuZERyYWdcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25TdGFydERyYWcoKSB7XG4gICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlXG4gICAgfSxcblxuICAgIG9uRW5kRHJhZyh7IG9sZEluZGV4LCBuZXdJbmRleCB9KSB7XG4gICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZVxuICAgICAgaWYgKG9sZEluZGV4ICE9PSBuZXdJbmRleCkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0LCBwYWdpbmF0aW9uUmFuZ2UpIHtcbiAgICAgIGNvbnN0IHsgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICAgIC8vIFJlb3JkZXIgdGhlIGNoYW5nZWQgZW50cmllcyBieSB0aGVpciBvcmRlciBrZXksIHRha2luZyBwYWdpbmF0aW9uXG4gICAgICAgIC8vIG9mZnNldHMgaW50byBhY2NvdW50OlxuICAgICAgICBjb25zdCBvZmZzZXQgPSBwYWdpbmF0aW9uUmFuZ2U/LlswXSB8fCAwXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxpc3RbaV1bb3JkZXJLZXldID0gaSArIG9mZnNldFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRyZWUtaXRlbShcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9YHtcbiAgICAnZGl0by1kcmFnZ2luZyc6IGlzRHJhZ2dpbmcsXG4gICAgJ2RpdG8tYWN0aXZlJzogYWN0aXZlXG4gIH1gXG4gIDpzdHlsZT1cImxldmVsID4gMCAmJiB7ICctLWxldmVsJzogbGV2ZWwgfVwiXG4pXG4gIC5kaXRvLXRyZWUtaGVhZGVyKFxuICAgIHYtaWY9XCJsYWJlbFwiXG4gIClcbiAgICAuZGl0by10cmVlLWJyYW5jaChcbiAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgIEBjbGljay5zdG9wPVwib3BlbmVkID0gIW9wZW5lZFwiXG4gICAgKVxuICAgICAgLmRpdG8tY2hldnJvbihcbiAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBvcGVuZWQgfVwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWxhYmVsKFxuICAgICAgICB2LWh0bWw9XCJsYWJlbFwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWluZm8oXG4gICAgICAgIHYtaWY9XCJkZXRhaWxzXCJcbiAgICAgICkge3sgZGV0YWlscyB9fVxuICAgIC5kaXRvLXRyZWUtbGVhZihcbiAgICAgIHYtZWxzZVxuICAgIClcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwoXG4gICAgICAgIHYtaHRtbD1cImxhYmVsXCJcbiAgICAgIClcbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbChcbiAgICAgIHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICAgICAgICBAY2xpY2s9XCJvbkVkaXRcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICAgIEBjbGljaz1cIm9uRGVsZXRlXCJcbiAgICAgIClcbiAgdGFibGUuZGl0by1wcm9wZXJ0aWVzKFxuICAgIHYtaWY9XCJwcm9wZXJ0aWVzXCJcbiAgICB2LXNob3c9XCJvcGVuZWRcIlxuICApXG4gICAgdHIoXG4gICAgICB2LWZvcj1cInByb3BlcnR5IGluIHByb3BlcnRpZXNcIlxuICAgIClcbiAgICAgIHRkXG4gICAgICAgIERpdG9MYWJlbChcbiAgICAgICAgICB2LWlmPVwicHJvcGVydHkubGFiZWwgIT09IGZhbHNlXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgICAgOmxhYmVsPVwiZ2V0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgKVxuICAgICAgRGl0b1RhYmxlQ2VsbChcbiAgICAgICAgOmNlbGw9XCJwcm9wZXJ0eVwiXG4gICAgICAgIDpzY2hlbWE9XCJwcm9wZXJ0eVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG4gIERpdG9EcmFnZ2FibGUoXG4gICAgdi1pZj1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICB2LXNob3c9XCJvcGVuZWRcIlxuICAgIDptb2RlbFZhbHVlPVwidXBkYXRlT3JkZXIoY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdClcIlxuICAgIDpvcHRpb25zPVwiZ2V0RHJhZ2dhYmxlT3B0aW9ucyh0cnVlKVwiXG4gICAgOmRyYWdnYWJsZT1cImNoaWxkcmVuRHJhZ2dhYmxlXCJcbiAgICBAdXBkYXRlOm1vZGVsVmFsdWU9XCJ2YWx1ZSA9PiAoY2hpbGRyZW5MaXN0ID0gdmFsdWUpXCJcbiAgKVxuICAgIERpdG9UcmVlSXRlbShcbiAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBjaGlsZHJlbkl0ZW1zXCJcbiAgICAgIDprZXk9XCJnZXRJdGVtVWlkKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEpXCJcbiAgICAgIDpzY2hlbWE9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJnZXRJdGVtRGF0YVBhdGgoY2hpbGRyZW5TY2hlbWEsIGluZGV4KVwiXG4gICAgICA6ZGF0YT1cIml0ZW0uZGF0YVwiXG4gICAgICA6cGF0aD1cIml0ZW0ucGF0aFwiXG4gICAgICA6b3Blbj1cIml0ZW0ub3BlblwiXG4gICAgICA6YWN0aXZlPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgOmRyYWdnYWJsZT1cImNoaWxkcmVuRHJhZ2dhYmxlXCJcbiAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhLCB7IGluZGV4IH0pXCJcbiAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiXG4gICAgKVxuICAgIC8vLSBUT0RPOiBDb252ZXJ0IGRpdG8tdHJlZS1pdGVtIHRvIHVzZSBkaXRvLWxhYmVsIGludGVybmFsbHksIGFuZCB0aGVuXG4gICAgLy8tIHBhc3MgYGFzT2JqZWN0OiB0cnVlYCBpbiB0aGUgYGdldEl0ZW1MYWJlbCgpYCBjYWxsIGFib3ZlLlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4nXG5pbXBvcnQgU29ydGFibGVNaXhpbiBmcm9tICcuLi9taXhpbnMvU29ydGFibGVNaXhpbi5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXROYW1lZFNjaGVtYXMsIGhhc0Zvcm1TY2hlbWEgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RyZWVJdGVtJywge1xuICBtaXhpbnM6IFtJdGVtTWl4aW4sIFNvcnRhYmxlTWl4aW5dLFxuICBpbmplY3Q6IFsnY29udGFpbmVyJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtBcnJheSwgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIG9wZW46IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY3RpdmU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsZXZlbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZW5lZDogdGhpcy5vcGVuIHx8IHRoaXMuc2NoZW1hLm9wZW5cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLm1ldGFcbiAgICB9LFxuXG4gICAgc3RvcmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuc3RvcmVcbiAgICB9LFxuXG4gICAgZGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuZGlzYWJsZWRcbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzKVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTaG91bGQgdGhpcyBiZSBuYW1lZCBgc291cmNlU2NoZW1hYCBpbnN0ZWFkPyBVc2UgU291cmNlTWl4aW4/XG4gICAgY2hpbGRyZW5TY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEuY2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5MaXN0OiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNoaWxkcmVuU2NoZW1hPy5uYW1lXG4gICAgICAgIHJldHVybiBuYW1lICYmIHRoaXMuZGF0YVtuYW1lXVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNoaWxkcmVuU2NoZW1hPy5uYW1lXG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1tdXRhdGluZy1wcm9wc1xuICAgICAgICAgIHRoaXMuZGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5EcmFnZ2FibGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoID4gMSAmJlxuICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdkcmFnZ2FibGUnLCB7XG4gICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICBzY2hlbWE6IHRoaXMuY2hpbGRyZW5TY2hlbWFcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbnVtQ2hpbGRyZW4oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbkxpc3Q/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bVByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzPy5sZW5ndGggfHwgMFxuICAgIH0sXG5cbiAgICBudW1FbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMubnVtUHJvcGVydGllcyArIHRoaXMubnVtQ2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5JdGVtcygpIHtcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdCB9ID0gdGhpc1xuICAgICAgaWYgKGNoaWxkcmVuU2NoZW1hICYmIGNoaWxkcmVuTGlzdCkge1xuICAgICAgICBjb25zdCB7IGVkaXRQYXRoIH0gPSB0aGlzLmNvbnRhaW5lclxuICAgICAgICBjb25zdCBjaGlsZHJlbk9wZW4gPSAhdGhpcy5wYXRoICYmIGNoaWxkcmVuU2NoZW1hLm9wZW5cbiAgICAgICAgLy8gQnVpbGQgYSBjaGlsZHJlbiBsaXN0IHdpdGggY2hpbGQgbWV0YSBpbmZvcm1hdGlvbiBmb3IgdGhlIHRlbXBsYXRlLlxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVPcmRlcihcbiAgICAgICAgICBjaGlsZHJlblNjaGVtYSxcbiAgICAgICAgICBjaGlsZHJlbkxpc3QubWFwKChkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IChcbiAgICAgICAgICAgICAgY2hpbGRyZW5TY2hlbWEucGF0aCAmJlxuICAgICAgICAgICAgICBgJHt0aGlzLnBhdGh9LyR7Y2hpbGRyZW5TY2hlbWEucGF0aH0vJHtpbmRleH1gXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcGVuID0gKFxuICAgICAgICAgICAgICBjaGlsZHJlbk9wZW4gfHxcbiAgICAgICAgICAgICAgLy8gT25seSBjb3VudCBhcyBcImluIGVkaXQgcGF0aFwiIHdoZW4gaXQncyBub3QgdGhlIGZ1bGwgZWRpdCBwYXRoLlxuICAgICAgICAgICAgICBlZGl0UGF0aC5zdGFydHNXaXRoKHBhdGgpICYmIHBhdGgubGVuZ3RoIDwgZWRpdFBhdGgubGVuZ3RoXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBhY3RpdmUgPSBlZGl0UGF0aCA9PT0gcGF0aFxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgb3BlbixcbiAgICAgICAgICAgICAgYWN0aXZlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIFtdXG4gICAgfSxcblxuICAgIGRldGFpbHMoKSB7XG4gICAgICBjb25zdCB7IG51bUNoaWxkcmVuIH0gPSB0aGlzXG4gICAgICByZXR1cm4gKFxuICAgICAgICBudW1DaGlsZHJlbiAmJlxuICAgICAgICBgJHtudW1DaGlsZHJlbn0gJHtcbiAgICAgICAgICBudW1DaGlsZHJlbiA9PT0gMSA/ICdpdGVtJyA6ICdpdGVtcydcbiAgICAgICAgfWBcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kcmFnZ2FibGUgfHwgdGhpcy5lZGl0YWJsZSB8fCB0aGlzLmRlbGV0YWJsZVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTdXBwb3J0IGNyZWF0YWJsZSFcbiAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgY3JlYXRhYmxlLCBlZGl0YWJsZSBhbmQgZGVsZXRhYmxlIG92ZXJyaWRlcyBvbiB0aGVcbiAgICAvLyBhc3NvY2lhdGVkIGZvcm1zLCBqdXN0IGxpa2UgaW4gYFR5cGVMaXN0YCBhbmQgYFR5cGVPYmplY3RgLCB0aHJvdWdoXG4gICAgLy8gYERpdG9FZGl0QnV0dG9uc2AuIEl0IHdvdWxkIGJlIGJlc3QgdG8gdXNlIGBEaXRvRWRpdEJ1dHRvbnNgIGhlcmUgdG9vLlxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBwcm9wZXJ0eS5uYW1lKVxuICAgIH0sXG5cbiAgICBvbkVkaXQoKSB7XG4gICAgICAvLyBBbGwgd2UgZ290IHRvIGRvIGlzIHB1c2ggdGhlIHJpZ2h0IGVkaXQgcGF0aCB0byB0aGUgcm91dGVyLCB0aGUgcmVzdFxuICAgICAgLy8gaXMgaGFuZGxlZCBieSBvdXIgcm91dGVzLCBhbGxvd2luZyByZWxvYWRzIGFzIHdlbGwuXG4gICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgIHBhdGg6IGAke3RoaXMuY29udGFpbmVyLnBhdGh9JHt0aGlzLnBhdGh9YCxcbiAgICAgICAgLy8gUHJlc2VydmUgY3VycmVudCBxdWVyeVxuICAgICAgICBxdWVyeTogdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRGVsZXRlKCkge1xuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLm9uQ2hhbmdlKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10cmVlLWl0ZW0ge1xuICAtLWNoZXZyb24taW5kZW50OiAjeyRjaGV2cm9uLWluZGVudH07XG5cbiAgPiAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgPiAuZGl0by10cmVlLWJyYW5jaCxcbiAgICA+IC5kaXRvLXRyZWUtbGVhZiB7XG4gICAgICAvLyBVc2UgYC0tbGV2ZWxgIENTUyB2YXJpYWJsZSB0byBjYWxjdWxhdGVkIHRoZSBhY2N1bXVsYXRlZCBpbmRlbnRcbiAgICAgIC8vIHBhZGRpbmcgZGlyZWN0bHkgaW5zdGVhZCBvZiBoYXZpbmcgaXQgYWNjdW11bGF0ZSBpbiBuZXN0ZWQgQ1NTLlxuICAgICAgLy8gVGhpcyB3YXksIHdlIGNhbiBrZWVwIHRoZSAuZGl0by1hY3RpdmUgYXJlYSBjb3ZlciB0aGUgZnVsbCB3aWR0aDpcbiAgICAgIHBhZGRpbmctbGVmdDogY2FsYyh2YXIoLS1jaGV2cm9uLWluZGVudCkgKiAodmFyKC0tbGV2ZWwsIDEpIC0gMSkpO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXRyZWUtYnJhbmNoIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cblxuICAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIH1cblxuICAuZGl0by10cmVlLWJyYW5jaCxcbiAgLmRpdG8tdHJlZS1sZWFmIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXg6IGF1dG87XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbjogMXB4IDA7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG4gIH1cblxuICAuZGl0by10cmVlLWxhYmVsLFxuICAuZGl0by10cmVlLWluZm8ge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cblxuICAuZGl0by10cmVlLWluZm8ge1xuICAgIHBhZGRpbmctbGVmdDogMC4zNWVtO1xuICAgIGNvbG9yOiByZ2JhKCRjb2xvci1ibGFjaywgMC4yKTtcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXJnaW46IDFweCAwIDFweCAxZW07XG4gIH1cblxuICAuZGl0by10cmVlLWhlYWRlcjpob3ZlciB7XG4gICAgPiAuZGl0by1idXR0b25zIHtcbiAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgfSAvLyBIaWRlIGJ1dHRvbnMgZHVyaW5nIGRyYWdnaW5nXG4gIH1cblxuICAmLmRpdG8tZHJhZ2dpbmcge1xuICAgIC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICAgID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmLmRpdG8tYWN0aXZlIHtcbiAgICA+IC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICBwYWRkaW5nOiAwICRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgICAgIG1hcmdpbjogMCAoLSRpbnB1dC1wYWRkaW5nLWhvcik7XG5cbiAgICAgID4gLmRpdG8tdHJlZS1icmFuY2gge1xuICAgICAgICA+IC5kaXRvLWNoZXZyb246OmJlZm9yZSB7XG4gICAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA+ICogPiAuZGl0by10cmVlLWxhYmVsIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZGl0by1wcm9wZXJ0aWVzIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tbGVmdDogJGNoZXZyb24taW5kZW50O1xuXG4gICAgPiB0ciB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gICAgfVxuXG4gICAgLmRpdG8tbGFiZWwge1xuICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICc6ICc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICB0clxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgKVxuICAgICAgdGgoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoY29sdW1uKVwiXG4gICAgICAgIDpjbGFzcz1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgICAgKVxuICAgICAgICBSb3V0ZXJMaW5rKFxuICAgICAgICAgIHYtaWY9XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgICAgIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgICAgICAgOnRvPVwiZ2V0U29ydExpbmsoY29sdW1uKVwiXG4gICAgICAgICAgY3VzdG9tXG4gICAgICAgIClcbiAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImdldFNvcnRDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1vcmRlci1hcnJvd3NcbiAgICAgICAgICAgIHNwYW4ge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgICBzcGFuKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICApIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICB0aChcbiAgICAgIHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgICAgLy8tIEVtcHR5IDxzcGFuPiBpcyBuZWVkZWQgZm9yIHN0eWxpbmcsIHNlZSBfdGFibGUuc2Nzc1xuICAgICAgc3BhblxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UYWJsZUhlYWQnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbHVtbnM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGhhc0VkaXRCdXR0b25zOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvcnQoKSB7XG4gICAgICBjb25zdCBvcmRlciA9ICh0aGlzLnF1ZXJ5Lm9yZGVyIHx8ICcnKS5zcGxpdCgvXFxzKy8pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBvcmRlclswXSxcbiAgICAgICAgb3JkZXI6IG9yZGVyWzFdXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb2x1bW5DbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jb2x1bW4tJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0U29ydENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZVxuICAgICAgICA/IGBkaXRvLXNlbGVjdGVkIGRpdG8tb3JkZXItJHt0aGlzLnNvcnQub3JkZXJ9YFxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0U29ydExpbmsoY29sdW1uKSB7XG4gICAgICAvLyBUb2dnbGUgb3JkZXIgaWYgdGhlIHNhbWUgY29sdW1uIGlzIGNsaWNrZWQgYWdhaW4uXG4gICAgICBjb25zdCBvcmRlciA9XG4gICAgICAgIHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZSAmJiB0aGlzLnNvcnQub3JkZXIgPT09ICdhc2MnXG4gICAgICAgICAgPyAnZGVzYydcbiAgICAgICAgICA6ICdhc2MnXG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICBvcmRlcjogYCR7Y29sdW1uLm5hbWV9ICR7b3JkZXJ9YFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10YWJsZS1oZWFkIHtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgdHIge1xuICAgIHRoIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAgIC5kaXRvLWJ1dHRvbiB7XG4gICAgICAgIC8vIENvbnZlbnRpb246IE5lc3RlZCBzcGFucyBoYW5kbGUgcGFkZGluZywgc2VlIGJlbG93XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrOyAvLyBPdmVycmlkZSBkZWZhdWx0IGlubGluZS1mbGV4IHBvc2l0aW9uaW5nLlxuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgIH1cblxuICAgICAgc3BhbiB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgLy8gQ29udmVudGlvbjogTmVzdGVkIHNwYW5zIGhhbmRsZSBwYWRkaW5nXG4gICAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gICAgICAgICY6ZW1wdHk6OmFmdGVyIHtcbiAgICAgICAgICAvLyBQcmV2ZW50IGVtcHR5IDx0aD4gZnJvbSBjb2xsYXBzaW5nXG4gICAgICAgICAgY29udGVudDogJ1xcMjAwYic7IC8vIHplcm8td2lkdGggc3BhY2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgPiBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRkKFxuICA6Y2xhc3M9XCJjZWxsLmNsYXNzXCJcbiAgOnN0eWxlPVwiY2VsbC5zdHlsZVwiXG4pXG4gIC8vLSBUT0RPOiBJbXBsZW1lbnQgaW5saW5lZCBjb21wb25lbnRzIGluIGNlbGwgbW9kZSFcbiAgY29tcG9uZW50KFxuICAgIHYtaWY9XCJjZWxsLmNvbXBvbmVudFwiXG4gICAgOmlzPVwiY2VsbC5jb21wb25lbnRcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuICBzcGFuKFxuICAgIHYtZWxzZVxuICAgIHYtaHRtbD1cInJlbmRlckNlbGwoZGF0YSlcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UYWJsZUNlbGwnLCB7XG4gIHByb3BzOiB7XG4gICAgY2VsbDogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZW5kZXJDZWxsKGl0ZW0pIHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgcmVuZGVyIH0gPSB0aGlzLmNlbGxcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtuYW1lXVxuICAgICAgcmV0dXJuIHJlbmRlclxuICAgICAgICA/IHJlbmRlci5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwodmFsdWUpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdXBsb2FkLWZpbGVcbiAgLmRpdG8tdGh1bWJuYWlsKFxuICAgIHYtaWY9XCJ0aHVtYm5haWxcIlxuICAgIDpjbGFzcz1cImBkaXRvLXRodW1ibmFpbC0tJHt0aHVtYm5haWx9YFwiXG4gIClcbiAgICAuZGl0by10aHVtYm5haWxfX2lubmVyXG4gICAgICBpbWcoXG4gICAgICAgIHYtaWY9XCJzb3VyY2VcIlxuICAgICAgICA6c3JjPVwic291cmNlXCJcbiAgICAgICAgY3Jvc3NvcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tdGh1bWJuYWlsX190eXBlKFxuICAgICAgICB2LWVsc2VcbiAgICAgIClcbiAgICAgICAgc3BhbiB7eyB0eXBlIH19XG4gIHNwYW4ge3sgZmlsZS5uYW1lIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVXBsb2FkRmlsZScsIHtcbiAgcHJvcHM6IHtcbiAgICBmaWxlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aHVtYm5haWw6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdGh1bWJuYWlsVXJsOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBsb2FkVXJsOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdHlwZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIFRZUEVTW3RoaXMuZmlsZS50eXBlXSB8fFxuICAgICAgICB0aGlzLmZpbGUubmFtZS5zcGxpdCgnLicpLnBvcCgpLnRvVXBwZXJDYXNlKClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgc291cmNlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2FkVXJsIHx8IHRoaXMudGh1bWJuYWlsVXJsXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJ2ZpbGUudXBsb2FkLmZpbGUnOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyKGZpbGUpIHtcbiAgICAgICAgaWYgKHRoaXMudGh1bWJuYWlsICYmIGZpbGU/LnR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJykpIHtcbiAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gICAgICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBsb2FkVXJsID0gcmVhZGVyLnJlc3VsdFxuICAgICAgICAgIH1cbiAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudXBsb2FkVXJsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5jb25zdCBUWVBFUyA9IHtcbiAgJ3RleHQvcGxhaW4nOiAnVFhUJyxcbiAgJ3RleHQvaHRtbCc6ICdIVE1MJyxcbiAgJ3RleHQvY3NzJzogJ0NTUycsXG4gICd0ZXh0L2phdmFzY3JpcHQnOiAnSlMnLFxuICAnaW1hZ2UvanBlZyc6ICdKUEcnLFxuICAnaW1hZ2UvcG5nJzogJ1BORycsXG4gICdpbWFnZS9naWYnOiAnR0lGJyxcbiAgJ2ltYWdlL3N2Zyt4bWwnOiAnU1ZHJyxcbiAgJ21vdmllL21wNCc6ICdNUDQnLFxuICAnYXVkaW8vbXBlZyc6ICdNUDMnLFxuICAnYXBwbGljYXRpb24vanNvbic6ICdKU09OJyxcbiAgJ2FwcGxpY2F0aW9uL3htbCc6ICdYTUwnLFxuICAnYXBwbGljYXRpb24vcGRmJzogJ1BERicsXG4gICdhcHBsaWNhdGlvbi96aXAnOiAnWklQJ1xufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQHVzZSAnc2FzczptYXRoJztcbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXVwbG9hZC1maWxlIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xufVxuXG4uZGl0by10aHVtYm5haWwge1xuICAkc2VsZjogJjtcblxuICAvLyBTbWFsbCBzaXplIGJ5IGRlZmF1bHRcbiAgLS1tYXgtc2l6ZTogI3sxICogJGlucHV0LWhlaWdodH07XG4gIC0tY29ybmVyLXNpemU6IGNhbGModmFyKC0tbWF4LXNpemUpIC8gNSk7XG4gIC0tc2hhZG93LXNpemU6IDFweDtcbiAgLS1taW4tc2l6ZTogY2FsYygyICogdmFyKC0tY29ybmVyLXNpemUpKTtcbiAgLS1tYXJnaW46IDBlbTtcbiAgLS1kcm9wLXNoYWRvdzogZHJvcC1zaGFkb3coXG4gICAgMCBjYWxjKHZhcigtLXNoYWRvdy1zaXplKSAqIDAuNzUpIHZhcigtLXNoYWRvdy1zaXplKSAje3JnYmEoXG4gICAgICAgICRjb2xvci1ibGFjayxcbiAgICAgICAgMC40XG4gICAgICApfVxuICApO1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiB2YXIoLS1tYXJnaW4pO1xuICBtYXJnaW4tcmlnaHQ6IDAuNWVtO1xuICBmaWx0ZXI6IHZhcigtLWRyb3Atc2hhZG93KTtcblxuICAmLS1zbWFsbCB7XG4gICAgLS1tYXgtc2l6ZTogI3sxICogJGlucHV0LWhlaWdodH07XG4gICAgLS1tYXJnaW46IDBlbTtcbiAgICAtLXNoYWRvdy1zaXplOiAxcHg7XG4gIH1cblxuICAmLS1tZWRpdW0ge1xuICAgIC0tbWF4LXNpemU6ICN7MiAqICRpbnB1dC1oZWlnaHR9O1xuICAgIC0tbWFyZ2luOiAwLjI1ZW07XG4gICAgLS1zaGFkb3ctc2l6ZTogMS41cHg7XG4gIH1cblxuICAmLS1sYXJnZSB7XG4gICAgLS1tYXgtc2l6ZTogI3s0ICogJGlucHV0LWhlaWdodH07XG4gICAgLS1tYXJnaW46IDAuNWVtO1xuICAgIC0tc2hhZG93LXNpemU6IDIuNXB4O1xuICB9XG5cbiAgJl9faW5uZXIge1xuICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgY2xpcC1wYXRoOiBwb2x5Z29uKFxuICAgICAgMCAwLFxuICAgICAgY2FsYygxMDAlIC0gdmFyKC0tY29ybmVyLXNpemUpKSAwLFxuICAgICAgMTAwJSB2YXIoLS1jb3JuZXItc2l6ZSksXG4gICAgICAxMDAlIDEwMCUsXG4gICAgICAwIDEwMCVcbiAgICApO1xuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIHdpZHRoOiB2YXIoLS1jb3JuZXItc2l6ZSk7XG4gICAgICBoZWlnaHQ6IHZhcigtLWNvcm5lci1zaXplKTtcbiAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgI2ZmZmZmZiwgI2VlZWVlZSA0MCUsICNkZGRkZGQgNTAlKTtcbiAgICAgIGZpbHRlcjogdmFyKC0tZHJvcC1zaGFkb3cpO1xuICAgIH1cbiAgfVxuXG4gICZfX3R5cGUge1xuICAgIC0tZm9udC1zaXplOiB2YXIoLS1jb3JuZXItc2l6ZSk7XG5cbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgbWluLXdpZHRoOiB2YXIoLS1taW4tc2l6ZSk7XG4gICAgbWluLWhlaWdodDogdmFyKC0tbWF4LXNpemUpO1xuICAgIGFzcGVjdC1yYXRpbzogMyAvIDQ7XG5cbiAgICBzcGFuIHtcbiAgICAgIC0tY29sb3I6ICN7JGNvbG9yLWdyZXl9O1xuXG4gICAgICBmb250LXNpemU6IG1pbih2YXIoLS1mb250LXNpemUpLCAjezEuMjUgKiAkZm9udC1zaXplfSk7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3IpO1xuXG4gICAgICAjeyRzZWxmfTpub3QoI3skc2VsZn0tLXNtYWxsKSAmIHtcbiAgICAgICAgcGFkZGluZzogMCBjYWxjKHZhcigtLWZvbnQtc2l6ZSkgLyA0KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogY2FsYyh2YXIoLS1mb250LXNpemUpIC8gNCk7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yKTtcbiAgICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICB9XG5cbiAgICAgICN7JHNlbGZ9LS1tZWRpdW0gJiB7XG4gICAgICAgIC0tY29sb3I6ICN7JGNvbG9yLWxpZ2h0fTtcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn0tLWxhcmdlICYge1xuICAgICAgICAtLWNvbG9yOiAjeyRjb2xvci1saWdodGVyfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpbWcge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIC8vIFNWRyBpbWFnZXMgbmVlZCAxMDAlIHNldHRpbmdzIHRvIHNjYWxlIGludG8gdGhlIGNvbnRhaW5lci5cbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWluLXdpZHRoOiB2YXIoLS1taW4tc2l6ZSk7XG4gICAgbWluLWhlaWdodDogdmFyKC0tbWluLXNpemUpO1xuICAgIG1heC13aWR0aDogdmFyKC0tbWF4LXNpemUpO1xuICAgIG1heC1oZWlnaHQ6IHZhcigtLW1heC1zaXplKTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGlzUmVmLCBuZXh0VGljaywgZGVmaW5lQ29tcG9uZW50LCByZWYsIHJlYWN0aXZlLCBoIH0gZnJvbSAndnVlLWRlbWknO1xuaW1wb3J0IHsgdHJ5T25Nb3VudGVkLCB0cnlPblNjb3BlRGlzcG9zZSwgdW5yZWZFbGVtZW50LCBkZWZhdWx0RG9jdW1lbnQsIHRvVmFsdWUsIHVzZVZNb2RlbCB9IGZyb20gJ0B2dWV1c2UvY29yZSc7XG5pbXBvcnQgU29ydGFibGUgZnJvbSAnc29ydGFibGVqcyc7XG5cbmZ1bmN0aW9uIHVzZVNvcnRhYmxlKGVsLCBsaXN0LCBvcHRpb25zID0ge30pIHtcbiAgbGV0IHNvcnRhYmxlO1xuICBjb25zdCB7IGRvY3VtZW50ID0gZGVmYXVsdERvY3VtZW50LCAuLi5yZXNldE9wdGlvbnMgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIG9uVXBkYXRlOiAoZSkgPT4ge1xuICAgICAgbW92ZUFycmF5RWxlbWVudChsaXN0LCBlLm9sZEluZGV4LCBlLm5ld0luZGV4KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHN0YXJ0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IHR5cGVvZiBlbCA9PT0gXCJzdHJpbmdcIiA/IGRvY3VtZW50Py5xdWVyeVNlbGVjdG9yKGVsKSA6IHVucmVmRWxlbWVudChlbCk7XG4gICAgaWYgKCF0YXJnZXQpXG4gICAgICByZXR1cm47XG4gICAgc29ydGFibGUgPSBuZXcgU29ydGFibGUodGFyZ2V0LCB7IC4uLmRlZmF1bHRPcHRpb25zLCAuLi5yZXNldE9wdGlvbnMgfSk7XG4gIH07XG4gIGNvbnN0IHN0b3AgPSAoKSA9PiBzb3J0YWJsZT8uZGVzdHJveSgpO1xuICBjb25zdCBvcHRpb24gPSAobmFtZSwgdmFsdWUpID0+IHtcbiAgICBpZiAodmFsdWUgIT09IHZvaWQgMClcbiAgICAgIHNvcnRhYmxlPy5vcHRpb24obmFtZSwgdmFsdWUpO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBzb3J0YWJsZT8ub3B0aW9uKG5hbWUpO1xuICB9O1xuICB0cnlPbk1vdW50ZWQoc3RhcnQpO1xuICB0cnlPblNjb3BlRGlzcG9zZShzdG9wKTtcbiAgcmV0dXJuIHsgc3RvcCwgc3RhcnQsIG9wdGlvbiB9O1xufVxuZnVuY3Rpb24gbW92ZUFycmF5RWxlbWVudChsaXN0LCBmcm9tLCB0bykge1xuICBjb25zdCBfdmFsdWVJc1JlZiA9IGlzUmVmKGxpc3QpO1xuICBjb25zdCBhcnJheSA9IF92YWx1ZUlzUmVmID8gWy4uLnRvVmFsdWUobGlzdCldIDogdG9WYWx1ZShsaXN0KTtcbiAgaWYgKHRvID49IDAgJiYgdG8gPCBhcnJheS5sZW5ndGgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXkuc3BsaWNlKGZyb20sIDEpWzBdO1xuICAgIG5leHRUaWNrKCgpID0+IHtcbiAgICAgIGFycmF5LnNwbGljZSh0bywgMCwgZWxlbWVudCk7XG4gICAgICBpZiAoX3ZhbHVlSXNSZWYpXG4gICAgICAgIGxpc3QudmFsdWUgPSBhcnJheTtcbiAgICB9KTtcbiAgfVxufVxuXG5jb25zdCBVc2VTb3J0YWJsZSA9IC8qIEBfX1BVUkVfXyAqLyAvKiAjX19QVVJFX18gKi8gZGVmaW5lQ29tcG9uZW50KHtcbiAgbmFtZTogXCJVc2VTb3J0YWJsZVwiLFxuICBtb2RlbDoge1xuICAgIC8vIENvbXBhdGlibGUgd2l0aCB2dWUyXG4gICAgcHJvcDogXCJtb2RlbFZhbHVlXCIsXG4gICAgZXZlbnQ6IFwidXBkYXRlOm1vZGVsVmFsdWVcIlxuICB9LFxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHRhZzoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogXCJkaXZcIlxuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IHNsb3RzIH0pIHtcbiAgICBjb25zdCBsaXN0ID0gdXNlVk1vZGVsKHByb3BzLCBcIm1vZGVsVmFsdWVcIik7XG4gICAgY29uc3QgdGFyZ2V0ID0gcmVmKCk7XG4gICAgY29uc3QgZGF0YSA9IHJlYWN0aXZlKHVzZVNvcnRhYmxlKHRhcmdldCwgbGlzdCwgcHJvcHMub3B0aW9ucykpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoc2xvdHMuZGVmYXVsdClcbiAgICAgICAgcmV0dXJuIGgocHJvcHMudGFnLCB7IHJlZjogdGFyZ2V0IH0sIHNsb3RzLmRlZmF1bHQoZGF0YSkpO1xuICAgIH07XG4gIH1cbn0pO1xuXG5leHBvcnQgeyBVc2VTb3J0YWJsZSB9O1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblVzZVNvcnRhYmxlLmRpdG8tZHJhZ2dhYmxlKFxuICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgOmNsYXNzPVwieyAnZGl0by1kcmFnZ2FibGUtLWRyYWdnaW5nJzogaXNEcmFnZ2luZyB9XCJcbiAgOnRhZz1cInRhZ1wiXG4gIDptb2RlbFZhbHVlPVwibW9kZWxWYWx1ZVwiXG4gIDpvcHRpb25zPVwieyAuLi5vcHRpb25zLCBvblN0YXJ0LCBvbkVuZCB9XCJcbiAgQHVwZGF0ZTptb2RlbFZhbHVlPVwiJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgJGV2ZW50KVwiXG4pXG4gIHNsb3RcbmNvbXBvbmVudChcbiAgdi1lbHNlXG4gIDppcz1cInRhZ1wiXG4pXG4gIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50J1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IFVzZVNvcnRhYmxlIH0gZnJvbSAnQHZ1ZXVzZS9pbnRlZ3JhdGlvbnMvdXNlU29ydGFibGUvY29tcG9uZW50J1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9EcmFnZ2FibGUnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcbiAgY29tcG9uZW50czogeyBVc2VTb3J0YWJsZSB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZSddLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZToge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgdGFnOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZGl2J1xuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGRyYWdnYWJsZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbW91c2VFdmVudHM6IG51bGwsXG4gICAgICBpc0RyYWdnaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25TdGFydChldmVudCkge1xuICAgICAgdGhpcy5vcHRpb25zLm9uU3RhcnQ/LihldmVudClcbiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWVcbiAgICAgIHRoaXMubW91c2VFdmVudHM/LnJlbW92ZSgpXG4gICAgfSxcblxuICAgIG9uRW5kKGV2ZW50KSB7XG4gICAgICB0aGlzLm9wdGlvbnMub25FbmQ/LihldmVudClcbiAgICAgIC8vIEtlZXAgYGlzRHJhZ2dpbmdgIHRydWUgdW50aWwgdGhlIG5leHQgbW91c2UgaW50ZXJhY3Rpb24gc28gdGhhdFxuICAgICAgLy8gY29uZnVzZWQgaG92ZXIgc3RhdGVzIGFyZSBjbGVhcmVkIGJlZm9yZSByZW1vdmluZyB0aGUgaG92ZXIgY2F0Y2hlci5cbiAgICAgIHRoaXMubW91c2VFdmVudHMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICAgIG1vdXNlZG93bjogdGhpcy5vbk1vdXNlLFxuICAgICAgICBtb3VzZW1vdmU6IHRoaXMub25Nb3VzZSxcbiAgICAgICAgbW91c2VsZWF2ZTogdGhpcy5vbk1vdXNlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbk1vdXNlKCkge1xuICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2VcbiAgICAgIHRoaXMubW91c2VFdmVudHM/LnJlbW92ZSgpXG4gICAgICB0aGlzLm1vdXNlRXZlbnRzID0gbnVsbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWRyYWdnYWJsZSB7XG4gIC8vIE92ZXJsYXkgYSBob3ZlciBjYXRjaGVyIHdoaWxlIHdlJ3JlIGRyYWdnaW5nIHRvIHByZXZlbnQgaG92ZXIgc3RhdGVzIGZyb21cbiAgLy8gZ2V0dGluZyBzdHVjayAvIGNvbmZ1c2VkLiBTYWZhcmkgc3RydWdnbGVzIHdpdGggdGhpcywgc28gZGlzYWJsZSBpdCB0aGVyZS5cbiAgQGluY2x1ZGUgYnJvd3Nlci1xdWVyeSgoJ2Nocm9tZScsICdmaXJlZm94JykpIHtcbiAgICAmOmhhcygmX19jaG9zZW4pLFxuICAgICYtLWRyYWdnaW5nIHtcbiAgICAgID4gKiB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICAgICA+IDpmaXJzdC1jaGlsZDo6YWZ0ZXIge1xuICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBpbnNldDogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZfX2ZhbGxiYWNrIHtcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMnB4IDRweCAkY29sb3Itc2hhZG93KTtcblxuICAgIC8vIE5lc3RlZCA8dGQ+IG5lZWQgdG8gYWxzbyBzd2l0Y2ggdG8gYGRpc3BsYXk6IGZsZXhgIHN0eWxlIGR1cmluZyBkcmFnZ2luZy5cbiAgICAmLFxuICAgIHRkIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG5cbiAgICAgID4gKiB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNwaW5uZXIoXG4gIHYtc2hvdz1cImxvYWRpbmdcIlxuICA6c3R5bGU9XCJ7ICctLWNvbG9yJzogY29sb3IsICctLXNpemUnOiBzaXplLCAnLS1tYXJnaW4nOiBtYXJnaW4gfVwiXG4pXG4gIC5kaXRvLXNwaW5uZXJfX3B1bHNlLmRpdG8tc3Bpbm5lcl9fcHVsc2UxXG4gIC5kaXRvLXNwaW5uZXJfX3B1bHNlLmRpdG8tc3Bpbm5lcl9fcHVsc2UyXG4gIC5kaXRvLXNwaW5uZXJfX3B1bHNlLmRpdG8tc3Bpbm5lcl9fcHVsc2UzXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU3Bpbm5lcicsIHtcbiAgcHJvcHM6IHtcbiAgICBsb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgY29sb3I6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9LFxuICAgIHNpemU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9LFxuICAgIG1hcmdpbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLXNwaW5uZXIge1xuICAtLWNvbG9yOiAjOTk5OTk5O1xuICAtLXNpemU6IDhweDtcbiAgLS1tYXJnaW46IDJweDtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICZfX3B1bHNlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3IpO1xuICAgIHdpZHRoOiB2YXIoLS1zaXplKTtcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUpO1xuICAgIG1hcmdpbjogdmFyKC0tbWFyZ2luKTtcbiAgICBib3JkZXItcmFkaXVzOiAxMDAlO1xuICAgIGFuaW1hdGlvbjogZGl0by1zcGlubmVyLXB1bHNlIDAuNzVzIGN1YmljLWJlemllcigwLjIsIDAuNjgsIDAuMTgsIDEuMDgpIDBzXG4gICAgICBpbmZpbml0ZSBib3RoO1xuICB9XG5cbiAgJl9fcHVsc2UxIHtcbiAgICBhbmltYXRpb24tZGVsYXk6IDAuMTJzO1xuICB9XG5cbiAgJl9fcHVsc2UyIHtcbiAgICBhbmltYXRpb24tZGVsYXk6IDAuMjRzO1xuICB9XG5cbiAgJl9fcHVsc2UzIHtcbiAgICBhbmltYXRpb24tZGVsYXk6IDAuMzZzO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgZGl0by1zcGlubmVyLXB1bHNlIHtcbiAgMCUsXG4gIDgwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgNDUlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgb3BhY2l0eTogMC43O1xuICB9XG59XG5cbkBrZXlmcmFtZXMgZGl0by1zcGlubmVyLXB1bHNlIHtcbiAgMCUsXG4gIDgwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgNDUlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgb3BhY2l0eTogMC43O1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5mdW5jdGlvbiBEaXRvVk5vZGUoeyB2bm9kZSB9KSB7XG4gIHJldHVybiB2bm9kZVxufVxuXG5EaXRvVk5vZGUucHJvcHMgPSB7XG4gIHZub2RlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1Zub2RlJywgRGl0b1ZOb2RlKVxuPC9zY3JpcHQ+XG4iLCIvLyBEaXRvVHlwZUNvbXBvbmVudCBpcyB0aGUgYWJzdHJhY3QgYmFzZSBjb21wb25lbnQgZm9yIGFsbCBvdGhlciB0eXBlXG4vLyBjb21wb25lbnRzIGluc2lkZSB0aGUgdHlwZXMvIGZvbGRlci4gVGhlcmUncyBhbHNvIGEgc2VwYXJhdGUgY29uY3JldGVcbi8vIGBEaXRvVHlwZUNvbXBvbmVudC52dWVgIGNvbXBvbmVudCwgdXNlIHRvIHJlbmRlciBgeyB0eXBlOiAnY29tcG9uZW50JyB9YFxuaW1wb3J0IHsgYXNBcnJheSwgY2FtZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyByZWdpc3RlclR5cGVDb21wb25lbnQsIGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZXh0ZW5kczogRGl0b0NvbXBvbmVudCxcbiAgbWl4aW5zOiBbVHlwZU1peGluXSxcblxuICBuYXRpdmVGaWVsZDogZmFsc2UsXG4gIHRleHRGaWVsZDogZmFsc2UsXG4gIC8vIFNldCByZWFzb25hYmxlIGRlZmF1bHRzIGZvciBhbGwgb2YgdGhlc2UgdGhhdCBhcmUgdXNlZCBieSBtb3N0IHR5cGVcbiAgLy8gY29tcG9uZW50cy4gVGhlc2Ugb25seSBuZWVkIGRlZmluaW5nIGluIHN1Yi1jbGFzc2VzIHdoZW4gdGhleSBkaWZmZXIuXG4gIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgZGVmYXVsdE5lc3RlZDogdHJ1ZSxcbiAgZGVmYXVsdFZpc2libGU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IHRydWUsXG4gIGV4Y2x1ZGVWYWx1ZTogZmFsc2UsXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogbnVsbCxcbiAgb21pdFNwYWNpbmc6IGZhbHNlLFxuXG4gIGNvbXBvbmVudDogRGl0b0NvbXBvbmVudC5jb21wb25lbnQsXG5cbiAgZ2V0OiBnZXRUeXBlQ29tcG9uZW50LFxuXG4gIHJlZ2lzdGVyKHR5cGVzLCBkZWZpbml0aW9uID0ge30pIHtcbiAgICB0eXBlcyA9IGFzQXJyYXkodHlwZXMpXG4gICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnQoXG4gICAgICBgRGl0b1R5cGUke2NhbWVsaXplKHR5cGVzWzBdLCB0cnVlKX1gLFxuICAgICAgZGVmaW5pdGlvblxuICAgIClcbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpXG4gICAgfVxuICAgIHJldHVybiBjb21wb25lbnRcbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgOnR5cGU9XCJ0eXBlXCJcbiAgOnRpdGxlPVwidGl0bGVcIlxuICA6Y2xhc3M9XCJidXR0b25DbGFzc1wiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuICAuZGl0by1idXR0b25fX3RleHQoXG4gICAgdi1pZj1cInRleHRcIlxuICApIHt7IHRleHQgfX1cbiAgLmRpdG8taW5mbyhcbiAgICB2LWlmPVwiIWxhYmVsICYmIGluZm9cIlxuICAgIDpkYXRhLWluZm89XCJpbmZvXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWydidXR0b24nLCAnc3VibWl0J10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgICBleGNsdWRlVmFsdWU6IHRydWUsXG4gICAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG4gICAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgdmVyYigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmVyYnNbdGhpcy5uYW1lXVxuICAgICAgfSxcblxuICAgICAgYnV0dG9uQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcmIgPyBgZGl0by1idXR0b24tJHt0aGlzLnZlcmJ9YCA6IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHRleHQ6IGdldFNjaGVtYUFjY2Vzc29yKCd0ZXh0Jywge1xuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICAgIH0pLFxuXG4gICAgICB0aXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dCB8fCBsYWJlbGl6ZSh0aGlzLnZlcmIpXG4gICAgICB9LFxuXG4gICAgICBpbmZvOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5mbycsIHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICB9KSxcblxuICAgICAgY2xvc2VGb3JtOiBnZXRTY2hlbWFBY2Nlc3NvcignY2xvc2VGb3JtJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgLy8gQG92ZXJyaWRlXG4gICAgICBnZXRFdmVudHMoKSB7XG4gICAgICAgIGNvbnN0IHsgb25Gb2N1cywgb25CbHVyLCBvbkNsaWNrIH0gPSB0aGlzXG4gICAgICAgIHJldHVybiB7IG9uRm9jdXMsIG9uQmx1ciwgb25DbGljayB9XG4gICAgICB9LFxuXG4gICAgICBhc3luYyBzdWJtaXQob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZUNvbXBvbmVudD8uc3VibWl0KHRoaXMsIG9wdGlvbnMpXG4gICAgICB9LFxuXG4gICAgICBhc3luYyBvbkNsaWNrKCkge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmVtaXRFdmVudCgnY2xpY2snLCB7XG4gICAgICAgICAgcGFyZW50OiB0aGlzLnNjaGVtYUNvbXBvbmVudFxuICAgICAgICB9KVxuICAgICAgICAvLyBIYXZlIGJ1dHRvbnMgdGhhdCBkZWZpbmUgcmVzb3VyY2VzIGNhbGwgYHRoaXMuc3VibWl0KClgIGJ5IGRlZmF1bHQ6XG4gICAgICAgIGlmIChcbiAgICAgICAgICByZXMgPT09IHVuZGVmaW5lZCAmJiAvLyBNZWFuaW5nOiBkb24ndCBwcmV2ZW50IGRlZmF1bHQuXG4gICAgICAgICAgaGFzUmVzb3VyY2UodGhpcy5zY2hlbWEpXG4gICAgICAgICkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc3VibWl0KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tYnV0dG9uIHtcbiAgJHNlbGY6ICY7XG5cbiAgJl9fdGV4dCB7XG4gICAgQGluY2x1ZGUgZWxsaXBzaXM7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY2hlY2tib3hcbiAgaW5wdXQoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveCcsIHtcbiAgbmF0aXZlRmllbGQ6IHRydWVcbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jaGVja2JveCB7XG4gIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3M7XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzRnVuY3Rpb24sXG4gIGlzUHJvbWlzZSxcbiAgbm9ybWFsaXplRGF0YVBhdGgsXG4gIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgcmVhY3RpdmUgfSBmcm9tICd2dWUnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtMb2FkaW5nTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBhc3luY0RhdGFFbnRyaWVzOiB7fVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlRGF0YVNjaGVtYShzY2hlbWEsIG5hbWUsIGxvYWRpbmdPcHRpb25zKSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KHNjaGVtYSkpIHtcbiAgICAgICAgc2NoZW1hID0geyBkYXRhOiBzY2hlbWEgfVxuICAgICAgfVxuICAgICAgbGV0IHsgZGF0YSA9IHVuZGVmaW5lZCwgZGF0YVBhdGggPSBudWxsIH0gPSBzY2hlbWFcbiAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhc3luYyBkYXRhIGxvYWRpbmcgYWxyZWFkeSBpbiBwcm9jZXNzLlxuICAgICAgY29uc3QgYXN5bmNFbnRyeSA9ICh0aGlzLmFzeW5jRGF0YUVudHJpZXNbbmFtZV0gfHw9IHJlYWN0aXZlKHtcbiAgICAgICAgZGVwZW5kZW5jeUZ1bmN0aW9uOiBudWxsLFxuICAgICAgICByZXNvbHZlZERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVzb2x2aW5nOiBmYWxzZSxcbiAgICAgICAgcmVzb2x2ZWQ6IGZhbHNlXG4gICAgICB9KSlcbiAgICAgIC8vIElmIHRoZSBkYXRhIGNhbGxiYWNrIHByb3ZpZGVkIGEgZGVwZW5kZW5jeSBmdW5jdGlvbiB3aGVuIGl0IHdhcyBjYWxsZWQsXG4gICAgICAvLyBjYWwgaXQgaW4gZXZlcnkgY2FsbCBvZiBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBmb3JjZSBWdWUgdG8ga2VlcCB0cmFja1xuICAgICAgLy8gb2YgdGhlIGFzeW5jIGRlcGVuZGVuY2llcy5cbiAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uPy4odGhpcy5jb250ZXh0KVxuXG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZlZCkge1xuICAgICAgICAvLyBJZiB0aGUgZGF0YSB3YXMgcmVzb2x2ZWQgYWxyZWFkeSwgcmV0dXJuIGl0IGFuZCBjbGVhciB0aGUgcmVzb2x2ZWRcbiAgICAgICAgLy8gdmFsdWUuIFRoaXMgd29ya3MgYmVjYXVzZSBWdWUgY2FjaGVzIHRoZSByZXN1bHQgb2YgY29tcHV0ZWQgZ2V0dGVyc1xuICAgICAgICAvLyBhbmQgb25seSByZWV2YWx1YXRlcyBpZiBvbmUgb2YgdGhlIGRlcGVuZGVuY2llcyBjaGFuZ2VkLiBUaGlzIGlzIHRvXG4gICAgICAgIC8vIGVuc3VyZSB0aGF0IGEgY2FjaGVkIHZhbHVlIGhlcmUgZG9lc24ndCBibG9jayAvIG92ZXJyaWRlXG4gICAgICAgIC8vIHJlZXZhbHVhdGlvbiB3aGVuIGEgZGVwZW5kZW5jeSBjaGFuZ2VzOlxuICAgICAgICBjb25zdCB7IHJlc29sdmVkRGF0YSB9ID0gYXN5bmNFbnRyeVxuICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkRGF0YSA9IHVuZGVmaW5lZFxuICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkID0gZmFsc2VcbiAgICAgICAgcmV0dXJuIHJlc29sdmVkRGF0YVxuICAgICAgfVxuICAgICAgLy8gQXZvaWQgY2FsbGluZyB0aGUgZGF0YSBmdW5jdGlvbiB0d2ljZTpcbiAgICAgIGlmIChhc3luY0VudHJ5LnJlc29sdmluZykge1xuICAgICAgICBkYXRhID0gbnVsbFxuICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGRhdGEpKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGF0YSh0aGlzLmNvbnRleHQpXG4gICAgICAgICAgLy8gSWYgdGhlIHJlc3VsdCBvZiB0aGUgZGF0YSBmdW5jdGlvbiBpcyBhbm90aGVyIGZ1bmN0aW9uLCB0aGVuIHRoZVxuICAgICAgICAgIC8vIGZpcnN0IGRhdGEgZnVuY3Rpb24gaXMgdGhlcmUgdG8gdHJhY2sgZGVwZW5kZW5jaWVzIGFuZCB0aGUgcmVhbFxuICAgICAgICAgIC8vIGRhdGEgbG9hZGluZyBoYXBwZW5zIGluIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkLiBLZWVwIHRyYWNrXG4gICAgICAgICAgLy8gaXQgaW4gYGRlcGVuZGVuY3lGdW5jdGlvbmAgc28gaXQgY2FuIGJlIGNhbGxlZCBvbiBlYWNoIGNhbGwgb2ZcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBrZWVwIHRoZSBkZXBlbmRlbmNpZXMgaW50YWN0LCBhbmQgY2FsbFxuICAgICAgICAgIC8vIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkIG9uY2UgdG8gZ2V0IHRoZSBhY3R1YWwgZGF0YTpcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXN1bHQpKSB7XG4gICAgICAgICAgICBhc3luY0VudHJ5LmRlcGVuZGVuY3lGdW5jdGlvbiA9IGRhdGFcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHQodGhpcy5jb250ZXh0KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gcmVzdWx0XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE5PVEU6IElmIHRoZSBkYXRhIGlzIG5vdCBhIHByb21pc2UsIGl0IGlzIHJlc29sdmVkIGFscmVhZHkuXG4gICAgICAgIGlmIChpc1Byb21pc2UoZGF0YSkpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGF0YSBpcyBhc3luY2hyb25vdXMsIGl0IGNhbid0IGJlIHJldHVybmVkIHN0cmFpZ2h0IGF3YXkuXG4gICAgICAgICAgLy8gQnV0IHdlIGNhbiBjaGVhdCB1c2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFuZCBgcmVzb2x2ZWREYXRhYCxcbiAgICAgICAgICAvLyB3aGljaCBpcyBnb2luZyB0byByZWNlaXZlIHRoZSBsb2FkZWQgZGF0YSBhc3luY2hyb25vdXNseSxcbiAgICAgICAgICAvLyB0cmlnZ2VyaW5nIGEgcmVjb21wdXRlIG9mIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSB0aGF0IGNhbGxzXG4gICAgICAgICAgLy8gYGhhbmRsZURhdGFTY2hlbWEoKWAuXG4gICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSB0cnVlXG4gICAgICAgICAgdGhpcy5yZXNvbHZlRGF0YShkYXRhLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgICAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkRGF0YSA9IGRhdGFcbiAgICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkID0gdHJ1ZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gZmFsc2VcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gQ2xlYXIgZGF0YSB1bnRpbCBwcm9taXNlIGlzIHJlc29sdmVkIGFuZCBgcmVzb2x2ZWREYXRhYCBpcyBzZXRcbiAgICAgICAgICBkYXRhID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGFQYXRoKSB7XG4gICAgICAgIGRhdGEgPSBnZXRWYWx1ZUF0RGF0YVBhdGgoXG4gICAgICAgICAgdGhpcy5yb290RGF0YSxcbiAgICAgICAgICBub3JtYWxpemVEYXRhUGF0aChgJHt0aGlzLmRhdGFQYXRofS8ke2RhdGFQYXRofWApXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVEYXRhKGxvYWQsIGxvYWRpbmdPcHRpb25zID0ge30pIHtcbiAgICAgIC8vIFVzZSBhIHRpbWVvdXQgdG8gYWxsb3cgYWxyZWFkeSByZXNvbHZlZCBwcm9taXNlcyB0byByZXR1cm4gZGF0YSB3aXRob3V0XG4gICAgICAvLyBzaG93aW5nIGEgbG9hZGluZyBpbmRpY2F0b3IuXG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRMb2FkaW5nKHRydWUsIGxvYWRpbmdPcHRpb25zKSwgMClcbiAgICAgIGxldCBkYXRhID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IChpc0Z1bmN0aW9uKGxvYWQpID8gbG9hZCgpIDogbG9hZClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3IubWVzc2FnZSB8fCBlcnJvcilcbiAgICAgIH1cbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcilcbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICByZXR1cm4gZGF0YVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERhdGFNaXhpbiBmcm9tICcuL0RhdGFNaXhpbi5qcydcbmltcG9ydCB7IGhhc1ZpZXdTY2hlbWEsIGdldFZpZXdFZGl0UGF0aCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBzZXRUZW1wb3JhcnlJZCwgaXNSZWZlcmVuY2UgfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzQXJyYXksXG4gIGlzU3RyaW5nLFxuICBpc0Z1bmN0aW9uLFxuICBub3JtYWxpemVEYXRhUGF0aCxcbiAgbGFiZWxpemUsXG4gIGRlYm91bmNlQXN5bmNcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBoYXNPcHRpb25zOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgY29udmVydFZhbHVlID0gdmFsdWUgPT5cbiAgICAgICAgICB0aGlzLnJlbGF0ZVxuICAgICAgICAgICAgPyB0aGlzLmhhc09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgICAgPyB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpc0FycmF5KHRoaXMudmFsdWUpXG4gICAgICAgICAgPyB0aGlzLnZhbHVlLm1hcChjb252ZXJ0VmFsdWUpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbClcbiAgICAgICAgICA6IGNvbnZlcnRWYWx1ZSh0aGlzLnZhbHVlKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gV2hlbiByZWxhdGluZyBhbmQgYXMgc29vbiBhcyB0aGUgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLi4uXG4gICAgICAgICAgdGhpcy5yZWxhdGUgJiZcbiAgICAgICAgICB0aGlzLmhhc09wdGlvbnMgJiYgKFxuICAgICAgICAgICAgLy8gLi4uaWYgdGhlIHZhbHVlIGlzIGZvcmNlZCB0byBudWxsIGJlY2F1c2UgYSBkaXNhcHBlYXJlZCBvcHRpb24uLi5cbiAgICAgICAgICAgIHZhbHVlID09PSBudWxsICYmIHRoaXMudmFsdWUgIT09IG51bGwgfHxcbiAgICAgICAgICAgIC8vIC4uLm9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlZmVyZW5jZSwgcmVwbGFjZSBpdCB3aXRoIGl0cyBvcHRpb25cbiAgICAgICAgICAgIC8vIHZhbHVlLCBzbyB0aGF0IGl0J2xsIGhvbGQgYWN0dWFsIGRhdGEsIG5vdCBqdXN0IGEgcmVmZXJlbmNlIGlkLlxuICAgICAgICAgICAgaXNSZWZlcmVuY2UodGhpcy52YWx1ZSlcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjb252ZXJ0ID0gdmFsdWUgPT5cbiAgICAgICAgICB0aGlzLnJlbGF0ZVxuICAgICAgICAgICAgPyB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKVxuICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICB0aGlzLnZhbHVlID0gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlLm1hcChjb252ZXJ0KVxuICAgICAgICAgIDogY29udmVydCh2YWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRPcHRpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWUpXG4gICAgfSxcblxuICAgIG9wdGlvbnMoKSB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5oYW5kbGVEYXRhU2NoZW1hKHRoaXMuc2NoZW1hLm9wdGlvbnMsICdvcHRpb25zJykgPz8gW11cbiAgICAgIGlmICghaXNBcnJheShkYXRhKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgb3B0aW9ucyBkYXRhLCBzaG91bGQgYmUgYXJyYXk6ICR7ZGF0YX1gKVxuICAgICAgfVxuICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgdGhpcy5oYXNPcHRpb25zID0gZGF0YS5sZW5ndGggPiAwXG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzT3B0aW9ucyhkYXRhKVxuICAgIH0sXG5cbiAgICBhY3RpdmVPcHRpb25zKCkge1xuICAgICAgLy8gVGhpcyBpcyBvdmVycmlkZGVuIGluIGBUeXBlTXVsdGlzZWxlY3RgIHRvIHJldHVybiB0aGUgYHNlYXJjaGVkT3B0aW9uc2BcbiAgICAgIC8vIHdoZW4gYSBzZWFyY2ggZmlsdGVyIHdhcyBhcHBsaWVkLlxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1xuICAgIH0sXG5cbiAgICByZWxhdGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZWxhdGUnLCB7XG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IHRvIGByZWxhdGVCeTogJ2lkJ2BcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIC8vIFdlIGNhbm5vdCB1c2Ugc2NoZW1hIGFjY2Vzc29yIGNhbGxiYWNrIG1hZ2ljIGZvciBgcmVsYXRlYCBhcyB3ZSBuZWVkXG4gICAgICAvLyB0aGlzIG91dHNpZGUgb2YgdGhlIGNvbXBvbmVudCdzIGxpZmUtc3Bhbiwgc2VlIGBwcm9jZXNzRGF0YSgpYCBiZWxvdy5cbiAgICAgIGNhbGxiYWNrOiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZ3JvdXBCeTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2dyb3VwQnknLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYG9wdGlvbnMubGFiZWxLZXlgIC8gYG9wdGlvbkxhYmVsS2V5YD9cbiAgICBvcHRpb25MYWJlbDogZ2V0U2NoZW1hQWNjZXNzb3IoJ29wdGlvbnMubGFiZWwnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KGxhYmVsKSB7XG4gICAgICAgIC8vIElmIG5vIGBsYWJlbGAgd2FzIHByb3ZpZGVkIGJ1dCB0aGUgb3B0aW9ucyBhcmUgb2JqZWN0cywgYXNzdW1lIGFcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBvZiAnbGFiZWwnOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGxhYmVsIHx8XG4gICAgICAgICAgdGhpcy5nZXRPcHRpb25LZXkoJ2xhYmVsJykgfHxcbiAgICAgICAgICBudWxsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgb3B0aW9ucy52YWx1ZUtleWAgLyBgb3B0aW9uVmFsdWVLZXlgP1xuICAgIG9wdGlvblZhbHVlOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy52YWx1ZScsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQodmFsdWUpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICd2YWx1ZSc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdmFsdWUgfHxcbiAgICAgICAgICB0aGlzLnJlbGF0ZSAmJiAnaWQnIHx8XG4gICAgICAgICAgdGhpcy5nZXRPcHRpb25LZXkoJ3ZhbHVlJykgfHxcbiAgICAgICAgICBudWxsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IENvbnNpZGVyIG1vdmluZyBzZWFyY2ggdG8gYG9wdGlvbnMuc2VhcmNoYD9cbiAgICBzZWFyY2hGaWx0ZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdzZWFyY2gnLCB7XG4gICAgICB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KHNlYXJjaCkge1xuICAgICAgICBpZiAoc2VhcmNoKSB7XG4gICAgICAgICAgY29uc3QgeyBmaWx0ZXIsIGRlYm91bmNlIH0gPSBpc0Z1bmN0aW9uKHNlYXJjaClcbiAgICAgICAgICAgID8geyBmaWx0ZXI6IHNlYXJjaCB9XG4gICAgICAgICAgICA6IHNlYXJjaFxuICAgICAgICAgIHJldHVybiBkZWJvdW5jZSA/IGRlYm91bmNlQXN5bmMoZmlsdGVyLCBkZWJvdW5jZSkgOiBmaWx0ZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGVkaXRhYmxlICYmXG4gICAgICAgICAgaGFzVmlld1NjaGVtYSh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0UGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmVkaXRhYmxlICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZVxuICAgICAgICA/IGdldFZpZXdFZGl0UGF0aCh0aGlzLnNjaGVtYSwgdGhpcy5zZWxlY3RlZFZhbHVlLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBncm91cEJ5TGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ2xhYmVsJyA6IG51bGxcbiAgICB9LFxuXG4gICAgZ3JvdXBCeU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ29wdGlvbnMnIDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0T3B0aW9uS2V5KGtleSkge1xuICAgICAgY29uc3QgW29wdGlvbl0gPSB0aGlzLmFjdGl2ZU9wdGlvbnNcbiAgICAgIHJldHVybiBpc09iamVjdChvcHRpb24pICYmIGtleSBpbiBvcHRpb24gPyBrZXkgOiBudWxsXG4gICAgfSxcblxuICAgIHByb2Nlc3NPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5yZWxhdGUpIHtcbiAgICAgICAgICAvLyBJZiBpZHMgYXJlIG1pc3NpbmcgYW5kIHdlIHdhbnQgdG8gcmVsYXRlLCBzZXQgdGVtcG9yYXJ5IGlkcy5cbiAgICAgICAgICAvLyBOT1RFOiBXZSBuZWVkIHRvIG1vZGlmeSB0aGUgYWN0dWFsIGRhdGEsIG1ha2luZyBhIGNvcHkgd29uJ3Qgd29ya1xuICAgICAgICAgIC8vIGFzIGl0IHdvbid0IHByb3BhZ2F0ZS5cbiAgICAgICAgICAvLyBOT1RFOiBUaGlzIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIGRhdGEgaXMgZnJvbSB0aGUgZ3JhcGggdGhhdFxuICAgICAgICAgIC8vIHdlJ3JlIGN1cnJlbnRseSBlZGl0aW5nLlxuICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghKCdpZCcgaW4gb3B0aW9uKSkge1xuICAgICAgICAgICAgICBzZXRUZW1wb3JhcnlJZChvcHRpb24sICdpZCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyb3VwQnkpIHtcbiAgICAgICAgICBjb25zdCBncm91cGVkID0ge31cbiAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5yZWR1Y2UoXG4gICAgICAgICAgICAocmVzdWx0cywgb3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gb3B0aW9uW3RoaXMuZ3JvdXBCeV1cbiAgICAgICAgICAgICAgbGV0IGVudHJ5ID0gZ3JvdXBlZFtncm91cF1cbiAgICAgICAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgICAgICAgIGVudHJ5ID0gZ3JvdXBlZFtncm91cF0gPSB7XG4gICAgICAgICAgICAgICAgICBbdGhpcy5ncm91cEJ5TGFiZWxdOiBncm91cCxcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlPcHRpb25zXTogW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGVudHJ5KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVudHJ5Lm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW11cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfSxcblxuICAgIGhhc09wdGlvbihvcHRpb24pIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgIH0sXG5cbiAgICBnZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgY29uc3QgZmluZE9wdGlvbiA9IChvcHRpb25zLCB2YWx1ZSwgZ3JvdXBCeSkgPT4ge1xuICAgICAgICAvLyBTZWFyY2ggZm9yIHRoZSBvcHRpb24gb2JqZWN0IHdpdGggdGhlIGdpdmVuIHZhbHVlIGFuZCByZXR1cm4gdGhlXG4gICAgICAgIC8vIHdob2xlIG9iamVjdC5cbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgIGlmIChncm91cEJ5KSB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IGZpbmRPcHRpb24ob3B0aW9uLm9wdGlvbnMsIHZhbHVlLCBudWxsKVxuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25WYWx1ZVxuICAgICAgICA/IGZpbmRPcHRpb24odGhpcy5hY3RpdmVPcHRpb25zLCB2YWx1ZSwgdGhpcy5ncm91cEJ5KVxuICAgICAgICA6IHZhbHVlXG4gICAgfSxcblxuICAgIGdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvblZhbHVlKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvblZhbHVlXVxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uVmFsdWUpXG4gICAgICAgICAgPyBvcHRpb25WYWx1ZShuZXcgRGl0b0NvbnRleHQodGhpcywgeyBvcHRpb24gfSkpXG4gICAgICAgICAgOiBvcHRpb25cbiAgICB9LFxuXG4gICAgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgICBjb25zdCB7IG9wdGlvbkxhYmVsIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNTdHJpbmcob3B0aW9uTGFiZWwpXG4gICAgICAgID8gb3B0aW9uPy5bb3B0aW9uTGFiZWxdXG4gICAgICAgIDogaXNGdW5jdGlvbihvcHRpb25MYWJlbClcbiAgICAgICAgICA/IG9wdGlvbkxhYmVsKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IGxhYmVsaXplKGAke29wdGlvbn1gKVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKSB7XG4gICAgaWYgKHNjaGVtYS5yZWxhdGUpIHtcbiAgICAgIC8vIEZvciBpbnRlcm5hbGx5IHJlbGF0aW5nIGRhdGEgKGBzY2hlbWEub3B0aW9ucy5kYXRhUGF0aGApLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBwcm9jZXNzIGJvdGggdGhlIG9wdGlvbnMgKGZvciAnI3JlZicpIGFuZCB0aGUgdmFsdWUgKCcjaWQnKS5cbiAgICAgIC8vIFNlZSBgRGF0YU1peGluLmhhbmRsZURhdGFTY2hlbWEoKWA6XG4gICAgICBjb25zdCBwYXRoID0gc2NoZW1hLm9wdGlvbnM/LmRhdGFQYXRoXG4gICAgICBjb25zdCByZWxhdGVkRGF0YVBhdGggPSBwYXRoXG4gICAgICAgID8gbm9ybWFsaXplRGF0YVBhdGgoYCR7ZGF0YVBhdGh9LyR7cGF0aH1gKVxuICAgICAgICA6IG51bGxcbiAgICAgIGdyYXBoLmFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSlcbiAgICAgIGlmIChyZWxhdGVkRGF0YVBhdGgpIHtcbiAgICAgICAgZ3JhcGguc2V0U291cmNlUmVsYXRlZChyZWxhdGVkRGF0YVBhdGgpXG4gICAgICB9XG4gICAgICAvLyBDb252ZXJ0IHJlbGF0aW5nIG9iamVjdHMgdG8gYSBzaGFsbG93IGNvcHkgd2l0aCBvbmx5IHRoZSBpZCBsZWZ0LlxuICAgICAgLy8gVE9ETzogQ29udmVydCB0byB1c2luZyBgcmVsYXRlQnlgOlxuICAgICAgY29uc3QgcHJvY2Vzc1JlbGF0ZSA9IHZhbHVlID0+ICh2YWx1ZSA/IHsgaWQ6IHZhbHVlLmlkIH0gOiB2YWx1ZSlcbiAgICAgIC8vIFNlbGVjdGVkIG9wdGlvbnMgY2FuIGJlIGJvdGggb2JqZWN0cyAmIGFycmF5cywgZS5nLiAnY2hlY2tib3hlcyc6XG4gICAgICB2YWx1ZSA9IGlzQXJyYXkodmFsdWUpXG4gICAgICAgID8gdmFsdWUubWFwKHByb2Nlc3NSZWxhdGUpXG4gICAgICAgIDogcHJvY2Vzc1JlbGF0ZSh2YWx1ZSlcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG51bC5kaXRvLWNoZWNrYm94ZXMoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuKVxuICBsaShcbiAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgKVxuICAgIGxhYmVsXG4gICAgICAuZGl0by1jaGVja2JveFxuICAgICAgICBpbnB1dChcbiAgICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICApXG4gICAgICAgIHNwYW4ge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveGVzJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICBkZWZhdWx0VmFsdWU6IFtdLFxuICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkT3B0aW9uczoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuc2VsZWN0ZWRWYWx1ZSB8fCBbXSkuZmlsdGVyKHZhbHVlID0+IHZhbHVlKVxuICAgICAgfSxcblxuICAgICAgc2V0KG9wdGlvbikge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBvcHRpb24gfHwgW11cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jaGVja2JveGVzIHtcbiAgbGFiZWwge1xuICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3M7XG4gIH1cblxuICBpbnB1dCB7XG4gICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNvZGUoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiY29kZVwiXG4gIDpzdHlsZT1cInN0eWxlXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IENvZGVGbGFzayBmcm9tICdjb2RlZmxhc2snXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29kZScsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgM1xuICAgIH0sXG5cbiAgICBzdHlsZSgpIHtcbiAgICAgIHJldHVybiBgaGVpZ2h0OiBjYWxjKCR7dGhpcy5saW5lc31lbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlgXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgZmxhc2sgPSBuZXcgQ29kZUZsYXNrKHRoaXMuJHJlZnMuY29kZSwge1xuICAgICAgbGFuZ3VhZ2U6IHRoaXMuc2NoZW1hLmxhbmd1YWdlIHx8ICdqYXZhc2NyaXB0JyxcbiAgICAgIHRhYlNpemU6IHRoaXMuc2NoZW1hLmluZGVudFNpemUgfHwgMixcbiAgICAgIGxpbmVOdW1iZXJzOiBmYWxzZVxuICAgIH0pXG5cbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICBsZXQgaWdub3JlVXBkYXRlID0gZmFsc2VcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvY3VzZWQgJiYgY2hhbmdlZCkge1xuICAgICAgICBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfVxuXG4gICAgdGhpcy5kb21Pbih0aGlzLiRyZWZzLmNvZGUucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKSwge1xuICAgICAgZm9jdXM6IG9uRm9jdXMsXG4gICAgICBibHVyOiBvbkJsdXJcbiAgICB9KVxuXG4gICAgY29uc3Qgc2V0Q29kZSA9IGNvZGUgPT4ge1xuICAgICAgaWYgKGNvZGUgIT09IGZsYXNrLmNvZGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gdHJ1ZVxuICAgICAgICBmbGFzay51cGRhdGVDb2RlKGNvZGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgICBvbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZmxhc2sub25VcGRhdGUodmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVVwZGF0ZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VmFsdWUodmFsdWUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRDb2RlKHZhbHVlIHx8ICcnKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBzZXRDb2RlKHRoaXMudmFsdWUgfHwgJycpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk/LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1ckVsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpPy5mb2N1cygpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY29kZSB7XG4gIEBleHRlbmQgJWlucHV0O1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgLy8gRm9yIHByb3BlciBzaXppbmcgb2YgY29udGVudCBhbG9uZyB3aXRoIDpzdHlsZT1cInN0eWxlXCIgc2V0dGluZyBhYm92ZSxcbiAgLy8gZm9yIHByb3BlciBsaW5lLWhlaWdodCBjYWxjdWxhdGlvbi5cbiAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG5cbiAgLmNvZGVmbGFzayB7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAvLyBJZ25vcmUgdGhlIHBhcmVudCBwYWRkaW5nIGRlZmluZWQgYWJvdmUgd2hpY2ggaXMgb25seSBuZWVkZWQgdG8gc2V0XG4gICAgLy8gdGhlIGRlc2lyZWQgaGVpZ2h0IHdpdGggOnN0eWxlPVwic3R5bGVcIi5cbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgfVxuXG4gIC5jb2RlZmxhc2tfX3RleHRhcmVhLFxuICAuY29kZWZsYXNrX19wcmUge1xuICAgIC8vIFVzZSBzYW1lIHBhZGRpbmcgYXMgLmRpdG8tY29kZVxuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICB9XG5cbiAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gIC5jb2RlZmxhc2tfX2NvZGUsXG4gIC5jb2RlZmxhc2tfX2xpbmVzIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm87XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUpO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XG4gIH1cblxuICAuY29kZWZsYXNrX19saW5lcyB7XG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuVHJpZ2dlci5kaXRvLWNvbG9yKFxuICB2LW1vZGVsOnNob3c9XCJzaG93UG9wdXBcIlxuICB0cmlnZ2VyPVwiZm9jdXNcIlxuKVxuICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICAuZGl0by1pbnB1dCg6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIilcbiAgICAgIGlucHV0KFxuICAgICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB2LW1vZGVsPVwiaGV4VmFsdWVcIlxuICAgICAgICB0eXBlPVwiaW5wdXRcIlxuICAgICAgICBzaXplPVwiOFwiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tY29sb3ItcHJldmlldy5kaXRvLWluaGVyaXQtZm9jdXMoXG4gICAgICAgIHYtaWY9XCJ2YWx1ZVwiXG4gICAgICApXG4gICAgICAgIGRpdig6c3R5bGU9XCJ7IGJhY2tncm91bmQ6IGAjJHtoZXhWYWx1ZSB8fCAnMDAwMDAwMDAnfWAgfVwiKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgICAgKVxuICB0ZW1wbGF0ZSgjcG9wdXApXG4gICAgU2tldGNoUGlja2VyLmRpdG8tY29sb3ItcGlja2VyKFxuICAgICAgdi1tb2RlbD1cImNvbG9yVmFsdWVcIlxuICAgICAgOmRpc2FibGVBbHBoYT1cIiFhbHBoYVwiXG4gICAgICA6ZGlzYWJsZUZpZWxkcz1cIiFpbnB1dHNcIlxuICAgICAgOnByZXNldENvbG9ycz1cInByZXNldHNcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgdGlueWNvbG9yIGZyb20gJ3Rpbnljb2xvcjInXG5pbXBvcnQgeyBTa2V0Y2ggYXMgU2tldGNoUGlja2VyIH0gZnJvbSAnQGxrNzcvdnVlMy1jb2xvcidcbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IFRyaWdnZXIgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29sb3InLCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgU2tldGNoUGlja2VyIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1BvcHVwOiBmYWxzZSxcbiAgICAgIGNvbnZlcnRlZEhleFZhbHVlOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29sb3JWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSB8fCB7fVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMuY29sb3JGb3JtYXRcbiAgICAgICAgY29uc3Qga2V5ID0gKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIE5PVEU6IHZ1ZTMtY29sb3IgY2FsbHMgaXQgJ2hleCcsIHdoaWxlIHRpbnljb2xvciBjYWxscyBpdCAnaGV4NidcbiAgICAgICAgICAgIGhleDogdmFsdWU/LmEgPCAxID8gJ2hleDgnIDogJ2hleCcsXG4gICAgICAgICAgICByZ2I6ICdyZ2JhJ1xuICAgICAgICAgIH1bZm9ybWF0XSB8fFxuICAgICAgICAgIGZvcm1hdFxuICAgICAgICApXG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aW55Y29sb3IodmFsdWUpLnRvU3RyaW5nKGZvcm1hdClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaGV4VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IG51bGxcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAhdGhpcy5mb2N1c2VkIHx8XG4gICAgICAgICAgdGhpcy4kcmVmcy5lbGVtZW50Lmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcih0aGlzLnZhbHVlKVxuICAgICAgICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IGNvbG9yXG4gICAgICAgICAgICAgIC50b1N0cmluZyhjb2xvci5nZXRBbHBoYSgpIDwgMSA/ICdoZXg4JyA6ICdoZXg2JylcbiAgICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZEhleFZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IGBmb3JtYXRgIGNsYXNoZXMgd2l0aCBUeXBlTWl4aW4uZm9ybWF0KClgLCB3aGljaCBzaGFsbCBiZSByZW5hbWVkXG4gICAgLy8gc29vbiB0byBgZm9ybWF0VmFsdWUoKWAuIFJlbmFtZSBgY29sb3JGb3JtYXRgIGJhY2sgdG8gYGZvcm1hdGAgYWZ0ZXIuXG4gICAgY29sb3JGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdmb3JtYXQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaGV4J1xuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93QWxwaGFgP1xuICAgIGFscGhhOiBnZXRTY2hlbWFBY2Nlc3NvcignYWxwaGEnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0c2A/XG4gICAgaW5wdXRzOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXRzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSxcblxuICAgIHByZXNldHM6IGdldFNjaGVtYUFjY2Vzc29yKCdwcmVzZXRzJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBbXG4gICAgICAgICcjZmZmZmZmJyxcbiAgICAgICAgJyNjM2MzYzMnLFxuICAgICAgICAnIzdmN2Y3ZicsXG4gICAgICAgICcjMDAwMDAwJyxcbiAgICAgICAgJyM4ODAwMTUnLFxuICAgICAgICAnI2VkMWMyNCcsXG4gICAgICAgICcjZmY3ZjI3JyxcbiAgICAgICAgJyNmZmYyMDAnLFxuXG4gICAgICAgICcjMjJiMTRjJyxcbiAgICAgICAgJyMwMGEyZTgnLFxuICAgICAgICAnIzNmNDhjYycsXG4gICAgICAgICcjYTM0OWE0JyxcbiAgICAgICAgJyNiOTdhNTcnLFxuICAgICAgICAnI2ZmYWVjOScsXG4gICAgICAgICcjZmZjOTBlJyxcbiAgICAgICAgJyMwMDAwMDAwMCdcbiAgICAgIF1cbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuJGNvbG9yLXN3YXRjaC13aWR0aDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5LXNpemU7XG4kY29sb3Itc3dhdGNoLXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAkYm9yZGVyLXdpZHRoO1xuXG4uZGl0by1jb2xvciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICBpbnB1dCB7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICAgIHBhZGRpbmctcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGg7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tYnV0dG9uLWNsZWFyIHtcbiAgICBtYXJnaW4tcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGg7XG4gIH1cblxuICAuZGl0by1jb2xvci1waWNrZXIge1xuICAgIG1hcmdpbjogJHBvcHVwLW1hcmdpbjtcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuICB9XG5cbiAgLmRpdG8tY29sb3ItcHJldmlldyB7XG4gICAgYmFja2dyb3VuZDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5O1xuICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlO1xuXG4gICAgJixcbiAgICBkaXYge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgd2lkdGg6ICRjb2xvci1zd2F0Y2gtd2lkdGg7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1cztcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1cztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuY29tcG9uZW50KFxuICA6aXM9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgdi1iaW5kPVwiJHByb3BzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4vLyBUaGlzIGlzIHRoZSBnZW5lcmFsIHB1cnBvc2UgJ2NvbXBvbmVudCcgdHlwZSwgd2hpY2ggY2FuIHJlc29sdmUgdG8gYW55IGN1c3RvbVxuLy8gY29tcG9uZW50IHRocm91Z2ggYHNjaGVtYS5jb21wb25lbnRgLCBzZWUgYHJlc29sdmVTY2hlbWFDb21wb25lbnQoKWAuIFRoaXNcbi8vIGNhbiBiZSB1c2VkIHRvIG5lc3QgYXJiaXRyYXJ5IHZ1ZSBjb21wb25lbnRzIGluIHNjaGVtYTpcbi8vIHtcbi8vICAgdHlwZTogJ2NvbXBvbmVudCcsXG4vLyAgIGNvbXBvbmVudDogaW1wb3J0KCcuL2NvbXBvbmVudCcpXG4vLyB9XG5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IHJlc29sdmVTY2hlbWFDb21wb25lbnQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29tcG9uZW50Jywge1xuICAvLyBPdmVycmlkZSB0aGUgc3RhbmRhcmQgYGRlZmF1bHRWYWx1ZTogbnVsbGAgdG8gbm90IHNldCBhbnkgZGF0YSBmb3IgY3VzdG9tXG4gIC8vIGNvbXBvbmVudHMsIHVubGVzcyB0aGV5IHByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlLlxuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gISgnZGVmYXVsdCcgaW4gc2NoZW1hKSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKGFwaSwgc2NoZW1hKSB7XG4gICAgYXdhaXQgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gdHJpZ2dlciBldmFsdWF0aW9uIG9mIGB2YWx1ZWAgdGhhdCBkb3NlIG5vdFxuLy8tIGludm9sdmUgYWN0dWFsbHkgcmVuZGVyaW5nIGl0IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgdmlzaWJsZS5cbmlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6bmFtZT1cIm5hbWVcIlxuICB0eXBlPVwidGV4dFwiXG4gIDp2YWx1ZT1cInZhbHVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6cmVhZG9ubHk9XCJ0cnVlXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4uL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgRGF0YU1peGluIGZyb20gJy4uL21peGlucy9EYXRhTWl4aW4uanMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ2NvbXB1dGVkJywgJ2RhdGEnLCAnaGlkZGVuJ10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gICAgZGVmYXVsdFZpc2libGU6IGZhbHNlLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgICAgIGlmIChzY2hlbWEuZGF0YSB8fCBzY2hlbWEuZGF0YVBhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5oYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgJ3NjaGVtYScpXG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMuZGF0YVt0aGlzLm5hbWVdID0gdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFR5cGVNaXhpbi5jb21wdXRlZC52YWx1ZS5nZXQuY2FsbCh0aGlzKVxuICAgICAgICB9LFxuXG4gICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgIFR5cGVNaXhpbi5jb21wdXRlZC52YWx1ZS5zZXQuY2FsbCh0aGlzLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZGF0ZVxuICBjb21wb25lbnQoXG4gICAgOmlzPVwiZ2V0Q29tcG9uZW50KHR5cGUpXCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cImRhdGVWYWx1ZVwiXG4gICAgOmxvY2FsZT1cImxvY2FsZVwiXG4gICAgOmZvcm1hdD1cImZvcm1hdHNcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICApXG4gICAgdGVtcGxhdGUoI2FmdGVyKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgICAgICBAbW91c2Vkb3duLnN0b3BcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7IGlzRGF0ZSwgYXNzaWduRGVlcGx5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnZGF0ZScsICdkYXRldGltZScsICd0aW1lJ10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBjb21wb25lbnRzOiB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIsIERhdGVUaW1lUGlja2VyIH0sXG4gICAgLy8gVE9ETzogVGhpcyBpcyBvbmx5IGhlcmUgc28gd2UgZ2V0IHBsYWNlaG9sZGVyIGFkZGVkLiBDb21lIHVwIHdpdGggYVxuICAgIC8vIGJldHRlciB3YXkgdG8gc3VwcG9ydCBhdHRyaWJ1dGVzIHBlciBjb21wb25lbnQgKGEgbGlzdCBvZiBhY3R1YWxseVxuICAgIC8vIHN1cHBvcnRlZCBhdHRyaWJ1dGVzKVxuICAgIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICAgIHRleHRGaWVsZDogdHJ1ZSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBkYXRlVmFsdWU6IHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB2YWx1ZVxuICAgICAgICB9LFxuXG4gICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYGZvcm1hdGAsIG9uY2UgYHNjaGVtYS5mb3JtYXQoKWAgd2FzIHJlbW92ZWQgdG9cbiAgICAgIC8vIGBmb3JtYXRWYWx1ZSgpYC5cbiAgICAgIGZvcm1hdHM6IGdldFNjaGVtYUFjY2Vzc29yKCdmb3JtYXRzJywge1xuICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgIGdldChmb3JtYXRzKSB7XG4gICAgICAgICAgY29uc3QgeyBkYXRlLCB0aW1lIH0gPSBhc3NpZ25EZWVwbHkoe30sIHRoaXMuYXBpLmZvcm1hdHMsIGZvcm1hdHMpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGU6IFsnZGF0ZScsICdkYXRldGltZSddLmluY2x1ZGVzKHRoaXMudHlwZSkgPyBkYXRlIDogbnVsbCxcbiAgICAgICAgICAgIHRpbWU6IFsndGltZScsICdkYXRldGltZSddLmluY2x1ZGVzKHRoaXMudHlwZSkgPyB0aW1lIDogbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgZ2V0Q29tcG9uZW50KHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRlOiAnZGF0ZS1waWNrZXInLFxuICAgICAgICAgIHRpbWU6ICd0aW1lLXBpY2tlcicsXG4gICAgICAgICAgZGF0ZXRpbWU6ICdkYXRlLXRpbWUtcGlja2VyJ1xuICAgICAgICB9W3R5cGVdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNEYXRlKHZhbHVlKSA/IHZhbHVlLnRvSVNPU3RyaW5nKCkgOiB2YWx1ZVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFF1ZXJ5KHF1ZXJ5KSB7XG4gIGNvbnN0IGVudHJpZXMgPSBxdWVyeVxuICAgID8gaXNBcnJheShxdWVyeSlcbiAgICAgID8gcXVlcnlcbiAgICAgIDogT2JqZWN0LmVudHJpZXMocXVlcnkpXG4gICAgOiBbXVxuICByZXR1cm4gKFxuICAgIG5ldyBVUkxTZWFyY2hQYXJhbXMoXG4gICAgICAvLyBFeHBhbmQgYXJyYXkgdmFsdWVzIGludG8gbXVsdGlwbGUgZW50cmllcyB1bmRlciB0aGUgc2FtZSBrZXksIHNvXG4gICAgICAvLyBgZm9ybWF0UXVlcnkoeyBmb286IFsxLCAyXSwgYmFyOiAzIH0pYCA9PiAnZm9vPTEmZm9vPTImYmFyPTMnLlxuICAgICAgZW50cmllcy5yZWR1Y2UoXG4gICAgICAgIChlbnRyaWVzLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiBhc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksIHZhbF0pXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgICAgIH0sXG4gICAgICAgIFtdXG4gICAgICApXG4gICAgKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC8vIGRlY29kZSBhbGwgdGhlc2UgZW5jb2RlZCBjaGFyYWN0ZXJzIHRvIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3IgYXNcbiAgICAgIC8vIHZ1ZS1yb3V0ZXIncyBvd24gcXVlcnkgZW5jb2RpbmcuXG4gICAgICAucmVwbGFjZUFsbCgvJSg/OjIxfDI0fDI4fDI5fDJDfDJGfDNBfDNCfDNEfDNGfDQwKS9nLCBkZWNvZGVVUklDb21wb25lbnQpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VSb3V0ZSh7IHBhdGgsIHF1ZXJ5LCBoYXNoIH0pIHtcbiAgLy8gUHJlc2VydmUgYGhpc3Rvcnkuc3RhdGVgLCBzZWU6XG4gIC8vIGh0dHBzOi8vcm91dGVyLnZ1ZWpzLm9yZy9ndWlkZS9taWdyYXRpb24vI3VzYWdlLW9mLWhpc3Rvcnktc3RhdGVcbiAgaGlzdG9yeS5yZXBsYWNlU3RhdGUoXG4gICAgaGlzdG9yeS5zdGF0ZSxcbiAgICBudWxsLFxuICAgIGAke1xuICAgICAgbG9jYXRpb24ub3JpZ2luXG4gICAgfSR7XG4gICAgICBwYXRoID8/IGxvY2F0aW9uLnBhdGhuYW1lXG4gICAgfT8ke1xuICAgICAgcXVlcnkgPyBmb3JtYXRRdWVyeShxdWVyeSkgOiBsb2NhdGlvbi5zZWFyY2guc2xpY2UoMSlcbiAgICB9JHtcbiAgICAgIGhhc2ggPz8gbG9jYXRpb24uaGFzaFxuICAgIH1gXG4gIClcbn1cbiIsImltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4vSXRlbU1peGluLmpzJ1xuaW1wb3J0IFJlc291cmNlTWl4aW4gZnJvbSAnLi9SZXNvdXJjZU1peGluLmpzJ1xuaW1wb3J0IFNjaGVtYVBhcmVudE1peGluIGZyb20gJy4uL21peGlucy9TY2hlbWFQYXJlbnRNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yLCBnZXRTdG9yZUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgcmVwbGFjZVJvdXRlIH0gZnJvbSAnLi4vdXRpbHMvcm91dGUuanMnXG5pbXBvcnQge1xuICBwcm9jZXNzUm91dGVTY2hlbWEsXG4gIHByb2Nlc3NGb3JtcyxcbiAgZ2V0TmFtZWRTY2hlbWFzLFxuICBnZXRCdXR0b25TY2hlbWFzLFxuICBoYXNGb3JtU2NoZW1hLFxuICBnZXRGb3JtU2NoZW1hcyxcbiAgZ2V0Vmlld1NjaGVtYSxcbiAgaXNDb21wYWN0LFxuICBpc0lubGluZWQsXG4gIGlzT2JqZWN0U291cmNlLFxuICBpc0xpc3RTb3VyY2Vcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzU3RyaW5nLFxuICBpc0FycmF5LFxuICBpc051bWJlcixcbiAgZXF1YWxzLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtJdGVtTWl4aW4sIFJlc291cmNlTWl4aW4sIFNjaGVtYVBhcmVudE1peGluXSxcblxuICBkZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gICAgcmV0dXJuIGlzTGlzdFNvdXJjZShzY2hlbWEpID8gW10gOiBudWxsXG4gIH0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cmFwcGVkUHJpbWl0aXZlczogbnVsbCxcbiAgICAgIHVud3JhcHBpbmdQcmltaXRpdmVzOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGlzT2JqZWN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgaXNMaXN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzTGlzdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZhbHVlXG4gICAgfSxcblxuICAgIGlzUmVhZHkoKSB7XG4gICAgICAvLyBMaXN0cyB0aGF0IGhhdmUgbm8gZGF0YSBhbmQgbm8gYXNzb2NpYXRlZCByZXNvdXJjZSBzaG91bGQgc3RpbGwgcmVuZGVyLFxuICAgICAgLy8gYXMgdGhleSBtYXkgYmUgZ2V0dGluZyB0aGVpciBkYXRhIGVsc2V3aGVyZSwgZS5nLiBgY29tcHV0ZSgpYC5cbiAgICAgIHJldHVybiB0aGlzLmhhc0RhdGEgfHwgIXRoaXMucHJvdmlkZXNEYXRhXG4gICAgfSxcblxuICAgIGlzSW5WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3Q29tcG9uZW50XG4gICAgfSxcblxuICAgIHdyYXBQcmltaXRpdmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLndyYXBQcmltaXRpdmVzXG4gICAgfSxcblxuICAgIGxpc3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy52YWx1ZVxuICAgICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICAgIC8vIENvbnZlcnQgdG8gbGlzdCBhcnJheS5cbiAgICAgICAgICBkYXRhID0gZGF0YSAhPSBudWxsID8gW2RhdGFdIDogW11cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIGdldHMgaW5oZXJpdGVkIGZyb20gcGFyZW50LCB1bndyYXBwaW5nIGlzIG5vdCBoYXBwZW5pbmdcbiAgICAgICAgICAvLyBhdCB0aGUgcm9vdCBpbiBgc2V0RGF0YSgpYCwgYnV0IGhlcmUgaW5zdGVhZC5cbiAgICAgICAgICBkYXRhID0gdGhpcy51bndyYXBMaXN0RGF0YShkYXRhKSB8fCBkYXRhXG4gICAgICAgIH1cbiAgICAgICAgZGF0YSB8fD0gW11cbiAgICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcyB9ID0gdGhpc1xuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICBpZiAodGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcykge1xuICAgICAgICAgICAgLy8gV2UncmUgZG9uZSB1bndyYXBwaW5nIG9uY2UgYGxpc3REYXRhYCBpcyByZWV2YWx1YXRlZCwgc28gc2V0XG4gICAgICAgICAgICAvLyB0aGlzIHRvIGBmYWxzZWAgYWdhaW4uIFNlZSBgd3JhcHBlZFByaW1pdGl2ZXNgIHdhdGNoZXIgYWJvdmUuXG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDb252ZXJ0IGRhdGEgdG8gYSBsaXN0IG9mIHdyYXBwZWQgcHJpbWl0aXZlcywgYW5kIHJldHVybiBpdC5cbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGEubWFwKHZhbHVlID0+ICh7XG4gICAgICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IHZhbHVlXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMud3JhcHBlZFByaW1pdGl2ZXNcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfSxcblxuICAgICAgc2V0KGRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMud3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICA/IGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8gZGF0YVswXVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIDogZGF0YVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9iamVjdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gQWx3YXlzIGdvIHRocm91Z2ggYGxpc3REYXRhYCBpbnRlcm5hbGx5LCB3aGljaCBkb2VzIGFsbCB0aGVcbiAgICAgICAgLy8gcHJvY2Vzc2luZyBvZiBgd3JhcFByaW1pdGl2ZXNgLCBldGMuXG4gICAgICAgIHJldHVybiB0aGlzLmxpc3REYXRhWzBdIHx8IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIHRoaXMubGlzdERhdGEgPSBkYXRhID8gW2RhdGFdIDogW11cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgLy8gVGhlIHNvdXJjZVNjaGVtYSBvZiBhIGxpc3QgaXMgdGhlIGxpc3QncyBzY2hlbWEgaXRzZWxmLlxuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICAvLyBUaGlzIGlzIHVzZWQgaW4gVHlwZUxpc3QgZm9yIERpdG9Gb3JtQ2hvb3Nlci5cbiAgICAgIHJldHVybiB0aGlzLnJvdXRlQ29tcG9uZW50LmdldENoaWxkUGF0aCh0aGlzLnNjaGVtYS5wYXRoKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0UXVlcnkoKSB7XG4gICAgICBjb25zdCB7IGRlZmF1bHRPcmRlcjogb3JkZXIgfSA9IHRoaXNcbiAgICAgIHJldHVybiBvcmRlciA/IHsgb3JkZXIgfSA6IHt9XG4gICAgfSxcblxuICAgIHF1ZXJ5OiBnZXRTdG9yZUFjY2Vzc29yKCdxdWVyeScsIHtcbiAgICAgIGdldChxdWVyeSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnRoaXMuZGVmYXVsdFF1ZXJ5LFxuICAgICAgICAgIC4uLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIHNldChxdWVyeSkge1xuICAgICAgICAvLyBBbHdheXMga2VlcCB0aGUgZGlzcGxheWVkIHF1ZXJ5IHBhcmFtZXRlcnMgaW4gc3luYyB3aXRoIHRoZSBzdG9yZWRcbiAgICAgICAgLy8gb25lcy4gVXNlIHNjb3BlIGFuZCBwYWdlIGZyb20gdGhlIGxpc3Qgc2NoZW1hIGFzIGRlZmF1bHRzLCBidXQgYWxsb3dcbiAgICAgICAgLy8gdGhlIHJvdXRlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gb3ZlcnJpZGUgdGhlbS5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHNjb3BlID0gdGhpcy5kZWZhdWx0U2NvcGU/Lm5hbWUsXG4gICAgICAgICAgcGFnZSA9IHRoaXMuc2NoZW1hLnBhZ2VcbiAgICAgICAgfSA9IHRoaXMucXVlcnlcbiAgICAgICAgLy8gUHJlc2VydmUgLyBtZXJnZSBjdXJyZW50bHkgc3RvcmVkIHZhbHVlcy5cbiAgICAgICAgcXVlcnkgPSB7XG4gICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICAuLi4oc2NvcGUgIT0gbnVsbCAmJiB7IHNjb3BlIH0pLFxuICAgICAgICAgIC4uLihwYWdlICE9IG51bGwgJiYgeyBwYWdlIH0pLFxuICAgICAgICAgIC4uLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlcXVhbHMocXVlcnksIHRoaXMuJHJvdXRlLnF1ZXJ5KSkge1xuICAgICAgICAgIC8vIENoYW5nZSB0aGUgcm91dGUgcXVlcnkgcGFyYW1ldGVycywgYnV0IGRvbid0IHRyaWdnZXIgYSByb3V0ZVxuICAgICAgICAgIC8vIGNoYW5nZSwgYXMgdGhhdCB3b3VsZCBjYXVzZSB0aGUgbGlzdCB0byByZWxvYWQuXG4gICAgICAgICAgcmVwbGFjZVJvdXRlKHsgcXVlcnkgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVlcnkgLy8gTGV0IGdldFN0b3JlQWNjZXNzb3IoKSBkbyB0aGUgYWN0dWFsIHNldHRpbmdcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHRvdGFsOiBnZXRTdG9yZUFjY2Vzc29yKCd0b3RhbCcpLFxuXG4gICAgY29sdW1ucygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuY29sdW1ucylcbiAgICB9LFxuXG4gICAgc2NvcGVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5zY29wZXMpXG4gICAgfSxcblxuICAgIGRlZmF1bHRTY29wZSgpIHtcbiAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgIGlmICh0aGlzLnNjb3Blcykge1xuICAgICAgICBmb3IgKGNvbnN0IHNjb3BlIG9mIE9iamVjdC52YWx1ZXModGhpcy5zY29wZXMpKSB7XG4gICAgICAgICAgaWYgKHNjb3BlLmRlZmF1bHRTY29wZSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjb3BlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgICAgIGZpcnN0ID0gc2NvcGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmaXJzdFxuICAgIH0sXG5cbiAgICBkZWZhdWx0T3JkZXIoKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5zKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIE9iamVjdC52YWx1ZXModGhpcy5jb2x1bW5zKSkge1xuICAgICAgICAgIGNvbnN0IHsgZGVmYXVsdFNvcnQgfSA9IGNvbHVtblxuICAgICAgICAgIGlmIChkZWZhdWx0U29ydCkge1xuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gaXNTdHJpbmcoZGVmYXVsdFNvcnQpID8gZGVmYXVsdFNvcnQgOiAnYXNjJ1xuICAgICAgICAgICAgcmV0dXJuIGAke2NvbHVtbi5uYW1lfSAke2RpcmVjdGlvbn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZ2V0Rm9ybVNjaGVtYXModGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dCkpXG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGxpbmtlZCB2aWV3IHNjaGVtYSBpZiB0aGlzIHNvdXJjZSBlZGl0cyBpdCBpdHMgaXRlbXMgdGhyb3VnaFxuICAgIC8vIGEgbGlua2VkIHZpZXcuXG4gICAgdmlldygpIHtcbiAgICAgIHJldHVybiBnZXRWaWV3U2NoZW1hKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGxpbmtzVG9WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3Jtcy5ldmVyeShpc0NvbXBhY3QpXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIHBhZ2luYXRlOiBnZXRTY2hlbWFBY2Nlc3NvcigncGFnaW5hdGUnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHJlbmRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbmRlcicsIHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgY3JlYXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY3JlYXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGNyZWF0YWJsZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICAgICAgPyB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICA/ICF0aGlzLnZhbHVlXG4gICAgICAgICAgICA6IHRydWVcbiAgICAgICAgICA6IGZhbHNlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBlZGl0YWJsZSAmJiAhdGhpcy5pc0lubGluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2UgJiYgdGhpcy5saXN0RGF0YS5sZW5ndGggPiAxICYmIGRyYWdnYWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsLCAvLyBzbyB0aGF0IGA/P2AgYmVsb3cgY2FuIGRvIGl0cyB0aGluZzpcbiAgICAgIGdldChjb2xsYXBzaWJsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0lubGluZWQgJiYgISEoY29sbGFwc2libGUgPz8gdGhpcy5jb2xsYXBzZWQgIT09IG51bGwpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb2xsYXBzZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGU6IHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8zMzkzI2lzc3VlY29tbWVudC0xMTU4NDcwMTQ5XG4gICAgICBmbHVzaDogJ3Bvc3QnLFxuICAgICAgaGFuZGxlcih0bywgZnJvbSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5wcm92aWRlc0RhdGEgJiZcbiAgICAgICAgICBmcm9tLnBhdGggPT09IHRvLnBhdGggJiZcbiAgICAgICAgICBmcm9tLmhhc2ggPT09IHRvLmhhc2hcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gUGF0aHMgYW5kIGhhc2hlcyByZW1haW4gdGhlIHNhbWUsIHNvIG9ubHkgcXVlcmllcyBoYXZlIGNoYW5nZWQuXG4gICAgICAgICAgLy8gVXBkYXRlIGZpbHRlciBhbmQgcmVsb2FkIGRhdGEgd2l0aG91dCBjbGVhcmluZy5cbiAgICAgICAgICB0aGlzLnF1ZXJ5ID0gdG8ucXVlcnlcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHdyYXBwZWRQcmltaXRpdmVzOiB7XG4gICAgICBkZWVwOiB0cnVlLFxuICAgICAgaGFuZGxlcih0bywgZnJvbSkge1xuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIC8vIFNraXAgdGhlIGluaXRpYWwgc2V0dGluZyBvZiB3cmFwcGVkUHJpbWl0aXZlcyBhcnJheVxuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMgJiYgZnJvbSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdoZW5ldmVyIHRoZSB3cmFwcGVkUHJpbWl0aXZlcyBjaGFuZ2UsIG1hcCB0aGVpciB2YWx1ZXMgYmFjayB0b1xuICAgICAgICAgIC8vIHRoZSBhcnJheSBvZiBwcmltaXRpdmVzLCBpbiBhIHByaW1pdGl2ZSB3YXkgOilcbiAgICAgICAgICAvLyBCdXQgc2V0IGB1bndyYXBwaW5nUHJpbWl0aXZlcyA9IHRydWVgLCBzbyB0aGUgYGxpc3REYXRhYCBjb21wdXRlZFxuICAgICAgICAgIC8vIHByb3BlcnR5IGtub3dzIGFib3V0IGl0LCB3aGljaCBzZXRzIGl0IHRvIGBmYWxzZWAgYWdhaW4uXG4gICAgICAgICAgdGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcyA9IHRydWVcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdG8ubWFwKG9iamVjdCA9PiBvYmplY3Rbd3JhcFByaW1pdGl2ZXNdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy50b3RhbCA9IDBcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gV2hlbiBuZXcgZGF0YSBpcyBsb2FkZWQsIHdlIGNhbiBzdG9yZSBpdCByaWdodCBiYWNrIGluIHRoZSBkYXRhIG9mIHRoZVxuICAgICAgLy8gdmlldyBvciBmb3JtIHRoYXQgY3JlYXRlZCB0aGlzIGxpc3QgY29tcG9uZW50LlxuICAgICAgLy8gU3VwcG9ydCB0d28gZm9ybWF0cyBmb3IgbGlzdCBkYXRhOlxuICAgICAgLy8gLSBBcnJheTogYFsuLi5dYFxuICAgICAgLy8gLSBPYmplY3Q6IGB7IHJlc3VsdHM6IFsuLi5dLCB0b3RhbCB9YCwgc2VlIGB1bndyYXBMaXN0RGF0YSgpYFxuICAgICAgaWYgKFxuICAgICAgICAhZGF0YSB8fFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJiBpc0FycmF5KGRhdGEpIHx8XG4gICAgICAgIHRoaXMuaXNPYmplY3RTb3VyY2UgJiYgaXNPYmplY3QoZGF0YSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLnZhbHVlID0gZGF0YVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpKSB7XG4gICAgICAgIC8vIFRoZSBmb3JtYXQgZGlkbid0IG1hdGNoLCBzZWUgaWYgd2UgcmVjZWl2ZWQgYSBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyBvYmplY3QsIGluIHdoaWNoIGNhc2UgYHRoaXMudmFsdWVgIHdhcyBhbHJlYWR5IHNldCBieVxuICAgICAgICAvLyBgdW53cmFwTGlzdERhdGEoKWAgYW5kIHdlJ3JlIGRvbmUgbm93LlxuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkYXRhKSAmJiB0aGlzLmlzSW5WaWV3KSB7XG4gICAgICAgIC8vIFRoZSBjb250cm9sbGVyIGlzIHNlbmRpbmcgZGF0YSBmb3IgYSBmdWxsIG11bHRpLWNvbXBvbmVudCB2aWV3LFxuICAgICAgICAvLyBpbmNsdWRpbmcgdGhlIG5lc3RlZCBsaXN0IGRhdGEuXG4gICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXREYXRhKGRhdGEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVud3JhcExpc3REYXRhKGRhdGEpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2UgJiZcbiAgICAgICAgaXNPYmplY3QoZGF0YSkgJiZcbiAgICAgICAgaXNOdW1iZXIoZGF0YS50b3RhbCkgJiZcbiAgICAgICAgaXNBcnJheShkYXRhLnJlc3VsdHMpXG4gICAgICApIHtcbiAgICAgICAgLy8gSWYgQGRpdG9qcy9zZXJ2ZXIgc2VuZHMgZGF0YSBpbiB0aGUgZm9ybSBvZiBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyByZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIHJlc3VsdCwgYnV0IHJlbWVtYmVyIHRoZSB0b3RhbCBpbiB0aGUgc3RvcmUuXG4gICAgICAgIHRoaXMudG90YWwgPSBkYXRhLnRvdGFsXG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhLnJlc3VsdHNcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNyZWF0ZURhdGEoc2NoZW1hLCB0eXBlKVxuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gaXRlbVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YS5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLm9wZW5TY2hlbWFDb21wb25lbnQoLTEpKVxuICAgICAgfVxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICByZXR1cm4gaXRlbVxuICAgIH0sXG5cbiAgICByZW1vdmVJdGVtKGl0ZW0sIGluZGV4KSB7XG4gICAgICBsZXQgcmVtb3ZlZCA9IGZhbHNlXG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBudWxsXG4gICAgICAgIHJlbW92ZWQgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgbGlzdERhdGEuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIHJlbW92ZWQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZW1vdmVkKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlSXRlbVN0b3JlKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IGxhYmVsID0gKFxuICAgICAgICBpdGVtICYmXG4gICAgICAgIHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc2NoZW1hLCBpdGVtLCB7XG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgZXh0ZW5kZWQ6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIClcblxuICAgICAgY29uc3Qgbm90aWZ5ID0gKCkgPT5cbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6IHRoaXMuaXNUcmFuc2llbnQgPyAnaW5mbycgOiAnc3VjY2VzcycsXG4gICAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgYCR7bGFiZWx9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYCxcbiAgICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICAgIF1cbiAgICAgICAgfSlcblxuICAgICAgaWYgKFxuICAgICAgICBpdGVtICYmXG4gICAgICAgIHdpbmRvdy5jb25maXJtKFxuICAgICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLmRlbGV0ZX0gJHtsYWJlbH0/YFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSwgaW5kZXgpXG4gICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpdGVtSWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSwgaW5kZXgpXG4gICAgICAgICAgY29uc3QgcmVzb3VyY2UgPSBnZXRNZW1iZXJSZXNvdXJjZShpdGVtSWQsIHRoaXMucmVzb3VyY2UpXG4gICAgICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdkZWxldGUnLCByZXNvdXJjZSB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtLCBpbmRleClcbiAgICAgICAgICAgICAgICBub3RpZnkoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50cyB9ID0gdGhpc1xuICAgICAgY29uc3QgeyBsZW5ndGggfSA9IHNjaGVtYUNvbXBvbmVudHNcbiAgICAgIHJldHVybiBzY2hlbWFDb21wb25lbnRzWygoaW5kZXggJSBsZW5ndGgpICsgbGVuZ3RoKSAlIGxlbmd0aF1cbiAgICB9LFxuXG4gICAgb3BlblNjaGVtYUNvbXBvbmVudChpbmRleCkge1xuICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoaW5kZXgpXG4gICAgICBpZiAoc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG5hdmlnYXRlVG9Db21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpIHtcbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YVBhdGguc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICAgID8gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICAgID8gcGFyc2VEYXRhUGF0aChkYXRhUGF0aC5zbGljZSh0aGlzLmRhdGFQYXRoLmxlbmd0aCArIDEpKVswXSA/PyBudWxsXG4gICAgICAgICAgICA6IDBcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsICYmIGlzTnVtYmVyKCtpbmRleCkpIHtcbiAgICAgICAgICBjb25zdCBzY2hlbWFDb21wb25lbnQgPSB0aGlzLmdldFNjaGVtYUNvbXBvbmVudCgraW5kZXgpXG4gICAgICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICAgICAgY29uc3QgeyBvcGVuZWQgfSA9IHNjaGVtYUNvbXBvbmVudFxuICAgICAgICAgICAgaWYgKCFvcGVuZWQpIHtcbiAgICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IHRydWVcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy4kbmV4dFRpY2soKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgICAgIGlmIChjb21wb25lbnRzLmxlbmd0aCA+IDAgJiYgKG9uQ29tcGxldGU/Lihjb21wb25lbnRzKSA/PyB0cnVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IG9wZW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZVRvUm91dGVDb21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxPbkNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgICAgIC8vIFJldHJpZXZlIHRoZSBsYXN0IHJvdXRlIGNvbXBvbmVudCwgd2hpY2ggd2lsbCBiZSB0aGUgY29tcG9uZW50IHRoYXRcbiAgICAgICAgICAvLyB3ZSBqdXN0IG5hdmlnYXRlZCB0bywgYW5kIHBhc3MgaXQgb24gdG8gYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICBjb25zdCB7IHJvdXRlQ29tcG9uZW50cyB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgICAgICAgIGNvbnN0IHJvdXRlQ29tcG9uZW50ID0gcm91dGVDb21wb25lbnRzW3JvdXRlQ29tcG9uZW50cy5sZW5ndGggLSAxXVxuICAgICAgICAgIHJlc29sdmUob25Db21wbGV0ZT8uKFtyb3V0ZUNvbXBvbmVudF0pID8/IHRydWUpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhUGF0aFBhcnRzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgcm91dGUgdGhhdCBjYW4gc2VydmUgcGFydCBvZiB0aGUgZ2l2ZW4gZGF0YVBhdGgsXG4gICAgICAgIC8vIGFuZCB0YWtlIGl0IGZyb20gdGhlcmU6XG4gICAgICAgIHdoaWxlIChkYXRhUGF0aFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgoXG4gICAgICAgICAgICB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKG5vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoUGFydHMpKVxuICAgICAgICAgIClcbiAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgYWN0dWFsbHkgaXMgYSByb3V0ZSBmb3IgdGhpcyBzdWItY29tcG9uZW50OlxuICAgICAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVyLnJlc29sdmUocGF0aClcbiAgICAgICAgICBpZiAobWF0Y2hlZC5sZW5ndGggJiYgbWF0Y2hlZFswXS5uYW1lICE9PSAnY2F0Y2gtYWxsJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuJHJvdXRlLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgICAgLy8gV2UncmUgYWxyZWFkeSB0aGVyZSwgc28ganVzdCBjYWxsIGBvbkNvbXBsZXRlKClgOlxuICAgICAgICAgICAgICBjYWxsT25Db21wbGV0ZSgpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgY29tcG9uZW50J3MgcGF0aCwgdGhlbiBjYWxsIGBvbkNvbXBsZXRlKClgXzpcbiAgICAgICAgICAgICAgdGhpcy4kcm91dGVyXG4gICAgICAgICAgICAgICAgLnB1c2goeyBwYXRoIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKHJlamVjdClcbiAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQgdG8gYmUgbW91bnRlZCBpbiB0aGUgbmV4dFxuICAgICAgICAgICAgICAgIC8vIHRpY2sgYmVmb3JlIGNhbGxpbmcgYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljayhjYWxsT25Db21wbGV0ZSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBLZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgfSlcbiAgICB9XG4gIH0sIC8vIGVuZCBvZiBgbWV0aG9kc2BcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgICBjb25zdCBpbmxpbmVkID0gaXNJbmxpbmVkKHNjaGVtYSlcbiAgICBpZiAoaW5saW5lZCAmJiBzY2hlbWEucmVzb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE5lc3RlZCAke1xuICAgICAgICAgIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgICA/ICdsaXN0cydcbiAgICAgICAgICAgIDogdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgICA/ICdvYmplY3RzJ1xuICAgICAgICAgICAgICA6ICdzY2hlbWEnXG4gICAgICAgIH0gY2Fubm90IGxvYWQgZGF0YSBmcm9tIHRoZWlyIG93biByZXNvdXJjZXNgXG4gICAgICApXG4gICAgfVxuICAgIC8vIFVzZSBkaWZmZXJlbnRseSBuYW1lZCB1cmwgcGFyYW1ldGVycyBvbiBlYWNoIG5lc3RlZCBsZXZlbCBmb3IgaWQgYXNcbiAgICAvLyBvdGhlcndpc2UgdGhleSB3b3VsZCBjbGFzaCBhbmQgb3ZlcnJpZGUgZWFjaCBvdGhlciBpbnNpZGUgJHJvdXRlLnBhcmFtc1xuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzNDVcbiAgICBjb25zdCBwYXJhbSA9IGBpZCR7bGV2ZWwgKyAxfWBcbiAgICBjb25zdCBtZXRhID0ge1xuICAgICAgYXBpLFxuICAgICAgc2NoZW1hXG4gICAgfVxuICAgIGNvbnN0IGZvcm1NZXRhID0ge1xuICAgICAgLi4ubWV0YSxcbiAgICAgIC8vIFdoZW4gY2hpbGRyZW4gYXJlIGZsYXR0ZW5lZCAoZS5nLiB0cmVlLWxpc3RzKSwgaW5jbHVkZSB0aGUgYGZsYXR0ZW5gXG4gICAgICAvLyBzZXR0aW5nIGFsc28sIGZvciBmbGF0dGVuaW5nIGJlbG93LlxuICAgICAgZmxhdHRlbixcbiAgICAgIG5lc3RlZCxcbiAgICAgIHBhcmFtXG4gICAgfVxuICAgIGNvbnN0IGNoaWxkUm91dGVzID0gYXdhaXQgcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbClcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgYXdhaXQgcHJvY2VzcyhjaGlsZFJvdXRlcywgbGV2ZWwgKyAxKVxuICAgIH1cbiAgICAvLyBJbmxpbmVkIGZvcm1zIGRvbid0IG5lZWQgdG8gYWN0dWFsbHkgYWRkIHJvdXRlcy5cbiAgICBpZiAoaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmICFpbmxpbmVkKSB7XG4gICAgICAvLyBMaXN0cyBpbiBzaW5nbGUtY29tcG9uZW50LXZpZXdzIChsZXZlbCA9PT0gMCkgdXNlIHRoZWlyIHZpZXcncyBwYXRoLFxuICAgICAgLy8gd2hpbGUgYWxsIG90aGVycyBuZWVkIHRoZWlyIHBhdGggcHJlZml4ZWQgd2l0aCB0aGUgcGFyZW50J3MgcGF0aDpcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBsZXZlbCA9PT0gMCA/ICcnIDogc2NoZW1hLnBhdGhcbiAgICAgIGNvbnN0IGZvcm1Sb3V0ZSA9IHtcbiAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShcbiAgICAgICAgICBzb3VyY2VQYXRoLFxuICAgICAgICAgIC8vIE9iamVjdCBzb3VyY2VzIGRvbid0IG5lZWQgaWQgcGFyYW1zIGluIHRoZWlyIGZvcm0gcGF0aHMsIGFzIHRoZXlcbiAgICAgICAgICAvLyBkaXJlY3RseSBlZGl0IG9uZSBvYmplY3QuXG4gICAgICAgICAgaXNMaXN0U291cmNlKHNjaGVtYSkgPyBwYXJhbSA6IG51bGxcbiAgICAgICAgKSxcbiAgICAgICAgY29tcG9uZW50OiBEaXRvQ29tcG9uZW50LmNvbXBvbmVudChcbiAgICAgICAgICBuZXN0ZWQgPyAnRGl0b0Zvcm1OZXN0ZWQnIDogJ0RpdG9Gb3JtJ1xuICAgICAgICApLFxuICAgICAgICBtZXRhOiBmb3JtTWV0YVxuICAgICAgfVxuICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHNjaGVtYSkpIHtcbiAgICAgICAgLy8gQWxzbyBhZGQgYSBwYXJhbSByb3V0ZSwgc2ltcGx5IHRvIGhhbmRsZSAnL2NyZWF0ZScgbGlua3MgdGhlIHNhbWVcbiAgICAgICAgLy8gd2F5IHRoYXQgbGlzdHMgZG8sIHdoZXJlIGl0IG92ZXJsYXBzIHdpdGggOmlkIGZvciBpdGVtIGlkcy5cbiAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgIC4uLmZvcm1Sb3V0ZSxcbiAgICAgICAgICBwYXRoOiBnZXRQYXRoV2l0aFBhcmFtKHNvdXJjZVBhdGgsIHBhcmFtKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHNvdXJjZVBhdGgpIHtcbiAgICAgICAgLy8gSnVzdCByZWRpcmVjdCBiYWNrIHRvIHRoZSBwYXJlbnQgd2hlbiBhIG5lc3RlZCBzb3VyY2Ugcm91dGUgaXMgaGl0LlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgcGF0aDogc291cmNlUGF0aCxcbiAgICAgICAgICByZWRpcmVjdDogJy4nLFxuICAgICAgICAgIG1ldGFcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIC8vIFBhcnRpdGlvbiBjaGlsZFJvdXRlcyBpbnRvIHRob3NlIHRoYXQgbmVlZCBmbGF0dGVuaW5nIChlLmcuIHRyZWUtbGlzdHMpXG4gICAgICAvLyBhbmQgdGhvc2UgdGhhdCBkb24ndCwgYW5kIHByb2Nlc3MgZWFjaCBncm91cCBzZXBhcmF0ZWx5IGFmdGVyLlxuICAgICAgY29uc3QgW2ZsYXRSb3V0ZXMsIHN1YlJvdXRlc10gPSBjaGlsZFJvdXRlcy5yZWR1Y2UoXG4gICAgICAgIChyZXMsIHJvdXRlKSA9PiB7XG4gICAgICAgICAgcmVzW3JvdXRlLm1ldGEuZmxhdHRlbiA/IDAgOiAxXS5wdXNoKHJvdXRlKVxuICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfSxcbiAgICAgICAgW1tdLCBbXV1cbiAgICAgIClcbiAgICAgIGlmIChzdWJSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvcm1Sb3V0ZS5jaGlsZHJlbiA9IHN1YlJvdXRlc1xuICAgICAgfVxuICAgICAgcm91dGVzLnB1c2goZm9ybVJvdXRlKVxuICAgICAgLy8gQWRkIHRoZSBwcmVmaXhlZCBmb3JtUm91dGVzIHdpdGggdGhlaXIgY2hpbGRyZW4gZm9yIG5lc3RlZCBsaXN0cy5cbiAgICAgIGlmIChmbGF0Um91dGVzLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkUm91dGUgb2YgZmxhdFJvdXRlcykge1xuICAgICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLihjaGlsZFJvdXRlLnJlZGlyZWN0ID8gY2hpbGRSb3V0ZSA6IGZvcm1Sb3V0ZSksXG4gICAgICAgICAgICBwYXRoOiBgJHtmb3JtUm91dGUucGF0aH0vJHtjaGlsZFJvdXRlLnBhdGh9YCxcbiAgICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgICAgLi4uY2hpbGRSb3V0ZS5tZXRhLFxuICAgICAgICAgICAgICBmbGF0dGVuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKSB7XG4gICAgZ3JhcGguYWRkU291cmNlKGRhdGFQYXRoLCBzY2hlbWEpXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UGF0aFdpdGhQYXJhbShwYXRoLCBwYXJhbSkge1xuICByZXR1cm4gcGFyYW1cbiAgICA/IHBhdGhcbiAgICAgID8gYCR7cGF0aH0vOiR7cGFyYW19YFxuICAgICAgOiBgOiR7cGFyYW19YFxuICAgIDogcGF0aFxufVxuIiwiaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSwgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMgfSBmcm9tICcuL3NjaGVtYSdcblxuZXhwb3J0IGNvbnN0IGZpbHRlckNvbXBvbmVudHMgPSB7XG4gICd0ZXh0JyhmaWx0ZXIpIHtcbiAgICBjb25zdCBvcHRpb25zID0gW1xuICAgICAge1xuICAgICAgICBsYWJlbDogJ2NvbnRhaW5zJyxcbiAgICAgICAgdmFsdWU6ICdjb250YWlucydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnZXF1YWxzJyxcbiAgICAgICAgdmFsdWU6ICdlcXVhbHMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ3N0YXJ0cyB3aXRoJyxcbiAgICAgICAgdmFsdWU6ICdzdGFydHMtd2l0aCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnZW5kcyB3aXRoJyxcbiAgICAgICAgdmFsdWU6ICdlbmRzLXdpdGgnXG4gICAgICB9XG4gICAgXVxuICAgIHJldHVybiB7XG4gICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yc1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgICAgd2lkdGg6ICcyLzUnLFxuICAgICAgICAgICAgb3B0aW9uczogaXNBcnJheShmaWx0ZXIub3BlcmF0b3JzKVxuICAgICAgICAgICAgICA/IG9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgb3B0aW9uID0+IGZpbHRlci5vcGVyYXRvcnMuaW5jbHVkZXMob3B0aW9uLnZhbHVlKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBvcHRpb25zLFxuICAgICAgICAgICAgY2xlYXJhYmxlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICA6IG51bGwsXG4gICAgICB0ZXh0OiB7XG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgd2lkdGg6IGZpbHRlci5vcGVyYXRvcnMgPyAnMy81JyA6ICdmaWxsJyxcbiAgICAgICAgY2xlYXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gICdkYXRlLXJhbmdlJygpIHtcbiAgICBjb25zdCBkYXRldGltZSA9IHtcbiAgICAgIHR5cGU6ICdkYXRldGltZScsXG4gICAgICB3aWR0aDogJzEvMicsXG4gICAgICBmb3JtYXRzOiB7XG4gICAgICAgIC8vIFVzZSBzaG9ydGVyIGRhdGUgZm9ybWF0IGluIGRhdGUtcmFuZ2UgZmlsdGVyczpcbiAgICAgICAgZGF0ZToge1xuICAgICAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXG4gICAgICAgICAgeWVhcjogJ251bWVyaWMnXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjbGVhcmFibGU6IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGZyb206IGRhdGV0aW1lLFxuICAgICAgdG86IGRhdGV0aW1lXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGaWx0ZXJzUGFuZWwoYXBpLCBmaWx0ZXJzLCBkYXRhUGF0aCwgcXVlcnkpIHtcbiAgY29uc3QgeyBzdGlja3ksIC4uLmZpbHRlclNjaGVtYXMgfSA9IGZpbHRlcnNcbiAgY29uc3QgcGFuZWwgPSB7XG4gICAgdHlwZTogJ3BhbmVsJyxcbiAgICBsYWJlbDogJ0ZpbHRlcnMnLFxuICAgIG5hbWU6ICckZmlsdGVycycsXG4gICAgLy8gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgc3RpY2t5LFxuXG4gICAgLy8gTk9URTogT24gcGFuZWxzLCB0aGUgZGF0YSgpIGNhbGxiYWNrIGRvZXMgc29tZXRoaW5nIGVsc2UgdGhhbiBvbiBub3JtYWxcbiAgICAvLyBzY2hlbWE6IEl0IHByb2R1Y2VzIHRoZSBgZGF0YWAgcHJvcGVydHkgdG8gYmUgcGFzc2VkIHRvIHRoZSBwYW5lbCdzXG4gICAgLy8gc2NoZW1hLCBub3QgdGhlIGRhdGEgdG8gYmUgdXNlZCBmb3IgdGhlIHBhbmVsIGNvbXBvbmVudCBkaXJlY3RseS5cbiAgICBkYXRhKCkge1xuICAgICAgcmV0dXJuIHBhcnNlRmlsdGVyc0RhdGEoXG4gICAgICAgIHBhbmVsLFxuICAgICAgICBxdWVyeS52YWx1ZVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRzOiBjcmVhdGVGaWx0ZXJzQ29tcG9uZW50cyhmaWx0ZXJTY2hlbWFzKSxcbiAgICBidXR0b25zOiBjcmVhdGVGaWx0ZXJzQnV0dG9ucyhmYWxzZSksXG4gICAgcGFuZWxCdXR0b25zOiBjcmVhdGVGaWx0ZXJzQnV0dG9ucyh0cnVlKSxcblxuICAgIGV2ZW50czoge1xuICAgICAgY2hhbmdlKCkge1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBmaWx0ZXJzKCkge1xuICAgICAgICByZXR1cm4gZm9ybWF0RmlsdGVyc0RhdGEodGhpcy5zY2hlbWEsIHRoaXMuZGF0YSlcbiAgICAgIH0sXG5cbiAgICAgIGhhc0ZpbHRlcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcnMubGVuZ3RoID4gMFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICBhcHBseUZpbHRlcnMoKSB7XG4gICAgICAgIHF1ZXJ5LnZhbHVlID0ge1xuICAgICAgICAgIC4uLnF1ZXJ5LnZhbHVlLFxuICAgICAgICAgIGZpbHRlcjogdGhpcy5maWx0ZXJzLFxuICAgICAgICAgIC8vIENsZWFyIHBhZ2luYXRpb24gd2hlbiBhcHBseWluZyBvciBjbGVhcmluZyBmaWx0ZXJzOlxuICAgICAgICAgIHBhZ2U6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBjbGVhckZpbHRlcnMoKSB7XG4gICAgICAgIHRoaXMucmVzZXREYXRhKClcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMoYXBpLCBwYW5lbClcbiAgcmV0dXJuIHBhbmVsXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbHRlcnNCdXR0b25zKHNtYWxsKSB7XG4gIHJldHVybiB7XG4gICAgY2xlYXI6IHtcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgdGV4dDogc21hbGwgPyBudWxsIDogJ0NsZWFyJyxcbiAgICAgIGRpc2FibGVkOiAoeyBzY2hlbWFDb21wb25lbnQgfSkgPT4gIXNjaGVtYUNvbXBvbmVudC5oYXNGaWx0ZXJzLFxuICAgICAgZXZlbnRzOiB7XG4gICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAvLyBTaW5jZSBwYW5lbCBidXR0b25zIGFyZSBvdXRzaWRlIG9mIHRoZSBzY2hlbWEsIHdlIG5lZWQgdG8gdXNlIHRoZVxuICAgICAgICAgIC8vIHNjaGVtYSBjb21wb25lbnQgcmVjZWl2ZWQgZnJvbSB0aGUgaW5pdGlhbGl6ZSBldmVudCBiZWxvdzpcbiAgICAgICAgICBzY2hlbWFDb21wb25lbnQuY2xlYXJGaWx0ZXJzKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdWJtaXQ6IHtcbiAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgdGV4dDogc21hbGwgPyBudWxsIDogJ0ZpbHRlcicsXG4gICAgICB2aXNpYmxlOiAhc21hbGwsXG4gICAgICBldmVudHM6IHtcbiAgICAgICAgY2xpY2soeyBzY2hlbWFDb21wb25lbnQgfSkge1xuICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5hcHBseUZpbHRlcnMoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldERhdGFOYW1lKGZpbHRlck5hbWUpIHtcbiAgLy8gUHJlZml4IGZpbHRlciBkYXRhIGtleXMgd2l0aCAnJCcgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggb3RoZXIgZGF0YSBrZXlzOlxuICByZXR1cm4gYCQke2ZpbHRlck5hbWV9YFxufVxuXG5mdW5jdGlvbiBnZXRGaWx0ZXJOYW1lKGRhdGFOYW1lKSB7XG4gIHJldHVybiBkYXRhTmFtZS5zdGFydHNXaXRoKCckJykgPyBkYXRhTmFtZS5zbGljZSgxKSA6IG51bGxcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmlsdGVyc0NvbXBvbmVudHMoZmlsdGVycykge1xuICBjb25zdCBjb21wcyA9IHt9XG4gIGZvciAoY29uc3QgZmlsdGVyIG9mIE9iamVjdC52YWx1ZXMoZ2V0TmFtZWRTY2hlbWFzKGZpbHRlcnMpIHx8IHt9KSkge1xuICAgIC8vIFN1cHBvcnQgYm90aCBjdXN0b20gZm9ybXMgYW5kIGRlZmF1bHQgZmlsdGVyIGNvbXBvbmVudHMsIHRocm91Z2ggdGhlXG4gICAgLy8gYGZpbHRlckNvbXBvbmVudHNgIHJlZ2lzdHJ5LiBFdmVuIGZvciBkZWZhdWx0IGZpbHRlcnMsIHN0aWxsIHVzZSB0aGVcbiAgICAvLyBwcm9wZXJ0aWVzIGluIGBmaWx0ZXJgIGFzIHRoZSBiYXNlIGZvciBgZm9ybWAsIHNvIHRoaW5ncyBsaWtlIGBsYWJlbGBcbiAgICAvLyBjYW4gYmUgY2hhbmdlZCBvbiB0aGUgcmVzdWx0aW5nIGZvcm0uXG4gICAgY29uc3QgeyBmaWx0ZXI6IHR5cGUsIHdpZHRoLCAuLi5mb3JtIH0gPSBmaWx0ZXJcbiAgICBjb25zdCBjb21wb25lbnRzID0gdHlwZVxuICAgICAgPyBmaWx0ZXJDb21wb25lbnRzW3R5cGVdPy4oZmlsdGVyKVxuICAgICAgOiBmaWx0ZXIuY29tcG9uZW50c1xuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICBmb3JtLnR5cGUgPSAnZm9ybSdcbiAgICAgIGZvcm0uY29tcG9uZW50cyA9IHt9XG4gICAgICAvLyBDb252ZXJ0IGxhYmVscyB0byBwbGFjZWhvbGRlcnM6XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGNvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgIGNvbnN0IGxhYmVsID0gY29tcG9uZW50LmxhYmVsIHx8IGxhYmVsaXplKGNvbXBvbmVudC5uYW1lIHx8IGtleSlcbiAgICAgICAgICBmb3JtLmNvbXBvbmVudHNba2V5XSA9IHtcbiAgICAgICAgICAgIC4uLmNvbXBvbmVudCxcbiAgICAgICAgICAgIGxhYmVsOiBmYWxzZSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBsYWJlbFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29tcHNbZ2V0RGF0YU5hbWUoZmlsdGVyLm5hbWUpXSA9IHtcbiAgICAgICAgbGFiZWw6IGZvcm0ubGFiZWwgPz8gbGFiZWxpemUoZmlsdGVyLm5hbWUpLFxuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+ICh7fSksXG4gICAgICAgIGZvcm0sXG4gICAgICAgIGlubGluZWQ6IHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBmaWx0ZXIgJyR7ZmlsdGVyLm5hbWV9JzogVW5rbm93biBmaWx0ZXIgdHlwZSAnJHt0eXBlfScuYFxuICAgICAgKVxuICAgIH1cbiAgfVxuICByZXR1cm4gY29tcHNcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIGRhdGFOYW1lKSB7XG4gIGNvbnN0IGNvbXBvbmVudCA9IHNjaGVtYS5jb21wb25lbnRzW2RhdGFOYW1lXVxuICByZXR1cm4gY29tcG9uZW50Py5mb3JtPy5jb21wb25lbnRzXG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZpbHRlcnNEYXRhKHNjaGVtYSwgZGF0YSkge1xuICBjb25zdCBmaWx0ZXJzID0gW11cbiAgZm9yIChjb25zdCBkYXRhTmFtZSBpbiBkYXRhKSB7XG4gICAgY29uc3QgZW50cnkgPSBkYXRhW2RhdGFOYW1lXVxuICAgIGlmIChlbnRyeSkge1xuICAgICAgLy8gTWFwIGNvbXBvbmVudHMgc2VxdWVuY2UgdG8gYXJndW1lbnRzOlxuICAgICAgY29uc3QgYXJncyA9IE9iamVjdC5rZXlzKFxuICAgICAgICBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgZGF0YU5hbWUpXG4gICAgICApLm1hcChcbiAgICAgICAga2V5ID0+IGVudHJ5W2tleV0gPz8gbnVsbFxuICAgICAgKVxuICAgICAgLy8gT25seSBhcHBseSBmaWx0ZXIgaWYgdGhlcmUgYXJlIHNvbWUgYXJndW1lbnRzIHRoYXQgYXJlbid0IG51bGw6XG4gICAgICBpZiAoYXJncy5zb21lKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKSkge1xuICAgICAgICBmaWx0ZXJzLnB1c2goXG4gICAgICAgICAgYCR7XG4gICAgICAgICAgICBnZXRGaWx0ZXJOYW1lKGRhdGFOYW1lKVxuICAgICAgICAgIH06JHtcbiAgICAgICAgICAgIGFyZ3MubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKCcsJylcbiAgICAgICAgICB9YFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmaWx0ZXJzXG59XG5cbmZ1bmN0aW9uIHBhcnNlRmlsdGVyc0RhdGEoc2NoZW1hLCBxdWVyeSkge1xuICBjb25zdCBmaWx0ZXJzID0ge31cbiAgLy8gU2FtZSBhcyBAZGl0b2pzL3NlcnZlcidzIFF1ZXJ5UGFyYW1ldGVycy5maWx0ZXI6IFRyYW5zbGF0ZSB0aGUgc3RyaW5nIGRhdGFcbiAgLy8gZnJvbSAkcm91dGUucXVlcnkgYmFjayB0byBwYXJhbSBsaXN0cyBwZXIgZmlsdGVyOlxuICBpZiAocXVlcnkpIHtcbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBhc0FycmF5KHF1ZXJ5LmZpbHRlcikpIHtcbiAgICAgIGNvbnN0IFssIGZpbHRlck5hbWUsIGpzb25dID0gZmlsdGVyLm1hdGNoKC9eKFxcdyspOiguKikkLylcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbHRlcnNbZmlsdGVyTmFtZV0gPSBhc0FycmF5KEpTT04ucGFyc2UoYFske2pzb259XWApKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgfVxuICB9XG4gIGNvbnN0IGZpbHRlcnNEYXRhID0ge31cbiAgZm9yIChjb25zdCBkYXRhTmFtZSBpbiBzY2hlbWEuY29tcG9uZW50cykge1xuICAgIGNvbnN0IGRhdGEgPSB7fVxuICAgIC8vIElmIHdlIGhhdmUgcmV0cmlldmVkIHBhcmFtcyBmcm9tIHRoZSBxdWVyeSwgZmV0Y2ggdGhlIGFzc29jaWF0ZWRcbiAgICAvLyBmb3JtIGNvbXBvbmVudHMgc28gd2UgY2FuIG1hcCB0aGUgdmFsdWVzIGJhY2sgdG8gb2JqZWN0IGtleXM6XG4gICAgY29uc3QgYXJncyA9IGZpbHRlcnNbZ2V0RmlsdGVyTmFtZShkYXRhTmFtZSldXG4gICAgaWYgKGFyZ3MpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgZGF0YU5hbWUpXG4gICAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgICBsZXQgaW5kZXggPSAwXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBkYXRhW2tleV0gPSBhcmdzW2luZGV4KytdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZmlsdGVyc0RhdGFbZGF0YU5hbWVdID0gZGF0YVxuICB9XG4gIHJldHVybiBmaWx0ZXJzRGF0YVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWxpc3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuKVxuICAuZGl0by1saXN0X19oZWFkZXIoXG4gICAgdi1pZj1cInNjb3BlcyB8fCBoYXNQYWdpbmF0aW9uXCJcbiAgKVxuICAgIERpdG9TY29wZXMoXG4gICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICAgIClcbiAgICAvLy0gV2hlbiB0aGVyZSdzIG9ubHkgcGFnaW5hdGlvbiB3aXRob3V0IHNjb3Blcywgd2UgbmVlZCBhIGdvb2Qgb2wnIHNwYWNlclxuICAgIC8vLSBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgIC5kaXRvLXNwYWNlcihcbiAgICAgIHYtZWxzZS1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgIClcbiAgICBEaXRvUGFnaW5hdGlvbihcbiAgICAgIHYtaWY9XCJoYXNQYWdpbmF0aW9uXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpsaW1pdD1cInBhZ2luYXRlXCJcbiAgICAgIDp0b3RhbD1cInRvdGFsIHx8IDBcIlxuICAgIClcbiAgdGFibGUuZGl0by10YWJsZShcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLXRhYmxlLXNlcGFyYXRvcnMnOiBpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1sYXJnZXItcGFkZGluZyc6IGhhc0VkaXRCdXR0b25zICYmICFpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1hbHRlcm5hdGUtY29sb3JzJzogIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWV2ZW4tY291bnQnOiBoYXNFdmVuQ291bnRcbiAgICB9YFxuICApXG4gICAgRGl0b1RhYmxlSGVhZChcbiAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpjb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICA6aGFzRWRpdEJ1dHRvbnM9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgIERpdG9EcmFnZ2FibGUoXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICA6bW9kZWxWYWx1ZT1cInVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdERhdGEsIHBhZ2luYXRpb25SYW5nZSlcIlxuICAgICAgOm9wdGlvbnM9XCJnZXREcmFnZ2FibGVPcHRpb25zKClcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICBAdXBkYXRlOm1vZGVsVmFsdWU9XCJ2YWx1ZSA9PiAobGlzdERhdGEgPSB2YWx1ZSlcIlxuICAgIClcbiAgICAgIHRyKFxuICAgICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gbGlzdERhdGFcIlxuICAgICAgICA6aWQ9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICA6a2V5PVwiZ2V0SXRlbVVpZChzY2hlbWEsIGl0ZW0pXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImNvbHVtbiBpbiBjb2x1bW5zXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBEaXRvVGFibGVDZWxsKFxuICAgICAgICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKGNvbHVtbilcIlxuICAgICAgICAgICAgICA6a2V5PVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRDZWxsQ2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDpjZWxsPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgIClcbiAgICAgICAgICB0ZFxuICAgICAgICAgICAgRGl0b1NjaGVtYUlubGluZWQoXG4gICAgICAgICAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4LCBhc09iamVjdDogdHJ1ZSB9KVwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwiZ2V0SXRlbVN0b3JlKHNjaGVtYSwgaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb21wb25lbnQoXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgICAgICAgICA6aXM9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXggfSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgIHYtaWY9XCJoYXNDZWxsRWRpdEJ1dHRvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgRGl0b0VkaXRCdXR0b25zKFxuICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwiZ2V0SXRlbVN0b3JlKHNjaGVtYSwgaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgKVxuICAgIC8vLSBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgaW5zaWRlIHRhYmxlIHdoZW4gbm90IGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgIHRmb290KFxuICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmICFzaW5nbGVcIlxuICAgIClcbiAgICAgIHRyXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoOmNvbHNwYW49XCJudW1Db2x1bW5zXCIpXG4gICAgICAgICAgRGl0b0VkaXRCdXR0b25zKFxuICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgICAgICApXG4gIC8vLSBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgb3V0c2lkZSB0YWJsZSB3aGVuIGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICBEaXRvRWRpdEJ1dHRvbnMuZGl0by1idXR0b25zLWxhcmdlLmRpdG8tYnV0dG9ucy1tYWluLmRpdG8tYnV0dG9ucy1zdGlja3koXG4gICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmIHNpbmdsZVwiXG4gICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCBTb3J0YWJsZU1peGluIGZyb20gJy4uL21peGlucy9Tb3J0YWJsZU1peGluLmpzJ1xuaW1wb3J0IHtcbiAgZ2V0Vmlld0VkaXRQYXRoLFxuICByZXNvbHZlU2NoZW1hQ29tcG9uZW50LFxuICByZXNvbHZlU2NoZW1hQ29tcG9uZW50c1xufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBjcmVhdGVGaWx0ZXJzUGFuZWwgfSBmcm9tICcuLi91dGlscy9maWx0ZXIuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBwaWNrQnksIGVxdWFscywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAndnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xpc3QnLCB7XG4gIG1peGluczogW1NvdXJjZU1peGluLCBTb3J0YWJsZU1peGluXSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAvLyBObyBuZWVkIGZvciB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBTZWUgVHlwZVRyZWVMaXN0IGZvciBkZXRhaWxzLlxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgZ2V0UGFuZWxTY2hlbWEoYXBpLCBzY2hlbWEsIGRhdGFQYXRoLCBjb21wb25lbnQpIHtcbiAgICBjb25zdCB7IGZpbHRlcnMgfSA9IHNjaGVtYVxuICAgIC8vIFNlZSBpZiB0aGlzIGxpc3QgY29tcG9uZW50IHdhbnRzIHRvIGRpc3BsYXkgYSBmaWx0ZXIgcGFuZWwsIGFuZCBpZiBzbyxcbiAgICAvLyBjcmVhdGUgdGhlIHBhbmVsIHNjaGVtYSBmb3IgaXQgdGhyb3VnaCBgZ2V0RmlsdGVyc1BhbmVsKClgLlxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICByZXR1cm4gY3JlYXRlRmlsdGVyc1BhbmVsKFxuICAgICAgICBhcGksXG4gICAgICAgIGZpbHRlcnMsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAvLyBQYXNzIGEgY29tcHV0ZWQgdmFsdWUgdG8gZ2V0IC8gc2V0IHRoZSBxdWVyeSwgc2VlIGdldEZpbHRlcnNQYW5lbCgpXG4gICAgICAgIGNvbXB1dGVkKHtcbiAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gY29tcG9uZW50LnF1ZXJ5XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIHNldChxdWVyeSkge1xuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCB1bmRlZmluZWQgdmFsdWVzIGZvciBjb21wYXJpbmcgd2l0aCBlcXVhbHMoKVxuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gb2JqID0+IHBpY2tCeShvYmosIHZhbHVlID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBpZiAoIWVxdWFscyhmaWx0ZXIocXVlcnkpLCBmaWx0ZXIoY29tcG9uZW50LnF1ZXJ5KSkpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50LnF1ZXJ5ID0gcXVlcnlcbiAgICAgICAgICAgICAgY29tcG9uZW50LmxvYWREYXRhKGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBoYXNQYWdpbmF0aW9uKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5wYWdpbmF0ZVxuICAgIH0sXG5cbiAgICBoYXNMaXN0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiAhISh0aGlzLmJ1dHRvblNjaGVtYXMgfHwgdGhpcy5jcmVhdGFibGUpXG4gICAgfSxcblxuICAgIGhhc0VkaXRCdXR0b25zKCkge1xuICAgICAgY29uc3QgeyBsaXN0RGF0YSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbGlzdERhdGEubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgdGhpcy5lZGl0YWJsZSB8fFxuICAgICAgICAgIHRoaXMuZGVsZXRhYmxlIHx8XG4gICAgICAgICAgdGhpcy5kcmFnZ2FibGVcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNDZWxsRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNJbmxpbmVkICYmIHRoaXMuaGFzRWRpdEJ1dHRvbnNcbiAgICB9LFxuXG4gICAgaGFzRXZlbkNvdW50KCkge1xuICAgICAgcmV0dXJuICEodGhpcy5saXN0RGF0YS5sZW5ndGggJSAyKVxuICAgIH0sXG5cbiAgICBudW1Db2x1bW5zKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHRoaXMuY29sdW1ucyA/IE9iamVjdC5rZXlzKHRoaXMuY29sdW1ucykubGVuZ3RoIDogMSkgK1xuICAgICAgICAodGhpcy5oYXNDZWxsRWRpdEJ1dHRvbnMgPyAxIDogMClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldERhdGFQYXRoKGluZGV4KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgfSxcblxuICAgIGdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KSB7XG4gICAgICBpZiAodGhpcy5lZGl0YWJsZSkge1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBnZXRWaWV3RWRpdFBhdGgodGhpcy5zY2hlbWEsIGlkLCB0aGlzLmNvbnRleHQpIHx8XG4gICAgICAgICAgYCR7dGhpcy5wYXRofS8ke2lkfWBcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q2VsbENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIGBkaXRvLWNlbGwtJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0Q29udGV4dChpdGVtLCBpbmRleCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgZGF0YVBhdGg6IHRoaXMuZ2V0RGF0YVBhdGgoaW5kZXgpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkZpbHRlckVycm9ycyhlcnJvcnMpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnNEYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsICckZmlsdGVycycpXG4gICAgICBjb25zdCBwYW5lbCA9IHRoaXMuc2NoZW1hQ29tcG9uZW50LmdldFBhbmVsQnlEYXRhUGF0aChmaWx0ZXJzRGF0YVBhdGgpXG4gICAgICBpZiAocGFuZWwpIHtcbiAgICAgICAgcGFuZWwuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSxcbiAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYS5jb2x1bW5zKSxcbiAgICAgIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgIGFwaSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBuYW1lLFxuICAgICAgICByb3V0ZXMsXG4gICAgICAgIGxldmVsLFxuICAgICAgICBuZXN0ZWQsXG4gICAgICAgIGZsYXR0ZW4sXG4gICAgICAgIHByb2Nlc3NcbiAgICAgIClcbiAgICBdKVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbGlzdCB7XG4gICRzZWxmOiAmO1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAmX19oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIHBhZGRpbmctYm90dG9tOiAkY29udGVudC1wYWRkaW5nLWhhbGY7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgICAmOmVtcHR5IHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgLmRpdG8tc2NvcGVzLFxuICAgIC5kaXRvLXBhZ2luYXRpb24ge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXg6IDAgMSBhdXRvO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgIH1cbiAgfVxuXG4gICYuZGl0by1zaW5nbGUge1xuICAgIC8vIFNvIHRoYXQgbGlzdCBidXR0b25zIGNhbiBiZSBzdGlja3kgdG8gdGhlIGJvdHRvbTpcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnQ7XG4gICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgLy8gTWFrZSBzaW5nbGUgbGlzdCBoZWFkZXIsIG5hdmlnYXRpb24gYW5kIGJ1dHRvbnMgc3RpY2t5IHRvIHRoZSB0b3AgYW5kXG4gICAgLy8gYm90dG9tOlxuICAgICN7JHNlbGZ9X19oZWFkZXIge1xuICAgICAgcG9zaXRpb246IHN0aWNreTtcbiAgICAgIHRvcDogMDtcbiAgICAgIG1hcmdpbi10b3A6IC0kY29udGVudC1wYWRkaW5nO1xuICAgICAgcGFkZGluZy10b3A6ICRjb250ZW50LXBhZGRpbmc7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgICAgei1pbmRleDogMTtcblxuICAgICAgKyAuZGl0by10YWJsZSB7XG4gICAgICAgIC5kaXRvLXRhYmxlLWhlYWQge1xuICAgICAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICAgICAgdG9wOiBjYWxjKCRpbnB1dC1oZWlnaHQgKyAkY29udGVudC1wYWRkaW5nICsgJGNvbnRlbnQtcGFkZGluZy1oYWxmKTtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuRGl0b0xhYmVsLmRpdG8tbGFiZWwtY29tcG9uZW50KFxuICA6bGFiZWw9XCJ2YWx1ZVwiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGFiZWwnLCB7XG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2Vcbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1sYWJlbC1jb21wb25lbnQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBoZWlnaHQ6IDJlbTtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tbWFya3VwKDppZD1cImRhdGFQYXRoXCIpXG4gIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXRvb2xiYXIoXG4gICAgdi1pZj1cImdyb3VwZWRCdXR0b25zLmxlbmd0aCA+IDBcIlxuICApXG4gICAgLmRpdG8tYnV0dG9uLWdyb3VwKFxuICAgICAgdi1mb3I9XCJidXR0b25zIGluIGdyb3VwZWRCdXR0b25zXCJcbiAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtZm9yPVwieyBuYW1lLCBpY29uLCBpc0FjdGl2ZSwgb25DbGljayB9IGluIGJ1dHRvbnNcIlxuICAgICAgICA6a2V5PVwibmFtZVwiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4gICAgICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICAgICAgKVxuICAgICAgICBJY29uKDpuYW1lPVwiaWNvblwiKVxuICBFZGl0b3JDb250ZW50LmRpdG8tbWFya3VwLWVkaXRvcihcbiAgICByZWY9XCJlZGl0b3JcIlxuICAgIDplZGl0b3I9XCJlZGl0b3JcIlxuICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gIClcbiAgLmRpdG8tcmVzaXplKFxuICAgIHYtaWY9XCJyZXNpemFibGVcIlxuICAgIEBtb3VzZWRvd24uc3RvcC5wcmV2ZW50PVwib25EcmFnUmVzaXplXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRWRpdG9yLCBFZGl0b3JDb250ZW50LCBNYXJrLCBnZXRNYXJrQXR0cmlidXRlcyB9IGZyb20gJ0B0aXB0YXAvdnVlLTMnXG4vLyBpbXBvcnQgeyB0b2dnbGVNYXJrIH0gZnJvbSAndGlwdGFwLWNvbW1hbmRzJ1xuLy8gRXNzZW50aWFsczpcbmltcG9ydCB7IERvY3VtZW50IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tZG9jdW1lbnQnXG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGV4dCdcbi8vIE1hcmtzOlxuaW1wb3J0IHsgQm9sZCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWJvbGQnXG5pbXBvcnQgeyBDb2RlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tY29kZSdcbmltcG9ydCB7IEl0YWxpYyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWl0YWxpYydcbmltcG9ydCB7IExpbmsgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1saW5rJ1xuaW1wb3J0IHsgU3RyaWtlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tc3RyaWtlJ1xuaW1wb3J0IHsgVW5kZXJsaW5lIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdW5kZXJsaW5lJ1xuLy8gTm9kZXM6XG5pbXBvcnQgeyBCbG9ja3F1b3RlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tYmxvY2txdW90ZSdcbmltcG9ydCB7IENvZGVCbG9jayB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWNvZGUtYmxvY2snXG5pbXBvcnQgeyBIYXJkQnJlYWsgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1oYXJkLWJyZWFrJ1xuaW1wb3J0IHsgSGVhZGluZyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhlYWRpbmcnXG5pbXBvcnQgeyBQYXJhZ3JhcGggfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1wYXJhZ3JhcGgnXG5pbXBvcnQgeyBIb3Jpem9udGFsUnVsZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhvcml6b250YWwtcnVsZSdcbmltcG9ydCB7IE9yZGVyZWRMaXN0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tb3JkZXJlZC1saXN0J1xuaW1wb3J0IHsgQnVsbGV0TGlzdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWJ1bGxldC1saXN0J1xuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1saXN0LWl0ZW0nXG4vLyBUT0RPOlxuLy8gaW1wb3J0IHsgSW1hZ2UgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1pbWFnZSdcbi8vIGltcG9ydCB7IE1lbnRpb24gfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1tZW50aW9uJ1xuLy8gaW1wb3J0IHsgQ29kZUJsb2NrSGlnaGxpZ2h0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tY29kZS1ibG9jay1oaWdobGlnaHQnXG4vLyBpbXBvcnQgeyBUYWJsZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlJ1xuLy8gaW1wb3J0IHsgVGFibGVDZWxsIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtY2VsbCdcbi8vIGltcG9ydCB7IFRhYmxlSGVhZGVyIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtaGVhZGVyJ1xuLy8gaW1wb3J0IHsgVGFibGVOb2RlcyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLW5vZGVzJ1xuLy8gaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1yb3cnXG4vLyBpbXBvcnQgeyBUYXNrTGlzdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhc2stbGlzdCdcbi8vIGltcG9ydCB7IFRhc2tJdGVtIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFzay1pdGVtJ1xuLy8gVG9vbHM6XG5pbXBvcnQgeyBIaXN0b3J5IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taGlzdG9yeSdcblxuaW1wb3J0IHsgSWNvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QsIGh5cGhlbmF0ZSwgZGVib3VuY2UsIGNhbWVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdtYXJrdXAnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcbiAgY29tcG9uZW50czoge1xuICAgIEVkaXRvckNvbnRlbnQsXG4gICAgSWNvblxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVkaXRvcjogbnVsbCxcbiAgICAgIGhlaWdodDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDEwXG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQgfHwgYGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWFya0J1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdtYXJrcycsIHtcbiAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgaXRhbGljOiB0cnVlLFxuICAgICAgICB1bmRlcmxpbmU6IHRydWUsXG4gICAgICAgIHN0cmlrZTogdHJ1ZSxcbiAgICAgICAgc21hbGw6IHRydWUsXG4gICAgICAgIGNvZGU6IHRydWUsXG4gICAgICAgIGxpbms6IHtcbiAgICAgICAgICBvbkNsaWNrOiBlZGl0b3IgPT4gdGhpcy5vbkNsaWNrTGluayhlZGl0b3IpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGJhc2ljTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgcGFyYWdyYXBoOiB7XG4gICAgICAgICAgY29tbWFuZDogJ3NldFBhcmFncmFwaCdcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZGluZzoge1xuICAgICAgICAgIGF0dHJpYnV0ZTogJ2xldmVsJyxcbiAgICAgICAgICB2YWx1ZXM6IFsxLCAyLCAzLCA0LCA1LCA2XVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhZHZhbmNlZE5vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIGJ1bGxldExpc3Q6IHRydWUsXG4gICAgICAgIG9yZGVyZWRMaXN0OiB0cnVlLFxuICAgICAgICBibG9ja3F1b3RlOiB0cnVlLFxuICAgICAgICBjb2RlQmxvY2s6IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHRvb2xCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygndG9vbHMnLCB7XG4gICAgICAgIHVuZG86IHRydWUsXG4gICAgICAgIHJlZG86IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdyb3VwZWRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy5tYXJrQnV0dG9ucyxcbiAgICAgICAgdGhpcy5iYXNpY05vZGVCdXR0b25zLFxuICAgICAgICB0aGlzLmFkdmFuY2VkTm9kZUJ1dHRvbnMsXG4gICAgICAgIHRoaXMudG9vbEJ1dHRvbnNcbiAgICAgIF0uZmlsdGVyKGJ1dHRvbnMgPT4gYnV0dG9ucy5sZW5ndGggPiAwKVxuICAgIH0sXG5cbiAgICBwYXJzZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2U6IHtcbiAgICAgICAgICAnY29sbGFwc2UnOiBmYWxzZSxcbiAgICAgICAgICAncHJlc2VydmUnOiB0cnVlLFxuICAgICAgICAgICdwcmVzZXJ2ZS1hbGwnOiAnZnVsbCdcbiAgICAgICAgfVt0aGlzLndoaXRlc3BhY2VdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVkaXRvck9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlZGl0YWJsZTogIXRoaXMucmVhZHlvbmx5LFxuICAgICAgICBhdXRvRm9jdXM6IHRoaXMuYXV0b2ZvY3VzLFxuICAgICAgICBkaXNhYmxlSW5wdXRSdWxlczogIXRoaXMuZW5hYmxlUnVsZXMuaW5wdXQsXG4gICAgICAgIGRpc2FibGVQYXN0ZVJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5wYXN0ZSxcbiAgICAgICAgcGFyc2VPcHRpb25zOiB0aGlzLnBhcnNlT3B0aW9uc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXNpemFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXNpemFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHdoaXRlc3BhY2U6IGdldFNjaGVtYUFjY2Vzc29yKCd3aGl0ZXNwYWNlJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2NvbGxhcHNlJ1xuICAgICAgLy8gUG9zc2libGUgdmFsdWVzIGFyZTogJ2NvbGxhcHNlJywgJ3ByZXNlcnZlJywgJ3ByZXNlcnZlLWFsbCdcbiAgICB9KSxcblxuICAgIGVuYWJsZVJ1bGVzOiBnZXRTY2hlbWFBY2Nlc3NvcignZW5hYmxlUnVsZXMnLCB7XG4gICAgICB0eXBlOiBbT2JqZWN0LCBCb29sZWFuXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVuYWJsZVJ1bGVzKSB7XG4gICAgICAgIHJldHVybiBpc09iamVjdChlbmFibGVSdWxlcylcbiAgICAgICAgICA/IGVuYWJsZVJ1bGVzXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIGlucHV0OiAhIWVuYWJsZVJ1bGVzLFxuICAgICAgICAgICAgICBwYXN0ZTogISFlbmFibGVSdWxlc1xuICAgICAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICByZWFkeW9ubHk6ICd1cGRhdGVFZGl0b3JPcHRpb25zJyxcbiAgICBhdXRvZm9jdXM6ICd1cGRhdGVFZGl0b3JPcHRpb25zJyxcbiAgICBlbmFibGVSdWxlczogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvY3VzZWQgJiYgY2hhbmdlZCkge1xuICAgICAgICBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWVEZWJvdW5jZWQgPSBkZWJvdW5jZShlZGl0b3IgPT4ge1xuICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICB0aGlzLnZhbHVlID0gZWRpdG9yLmdldEhUTUwoKVxuICAgICAgY2hhbmdlZCA9IHRydWVcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9LCAxMDApXG5cbiAgICBjb25zdCBvblVwZGF0ZSA9ICh7IGVkaXRvciB9KSA9PiB7XG4gICAgICBzZXRWYWx1ZURlYm91bmNlZChlZGl0b3IpXG4gICAgICB0aGlzLm9uSW5wdXQoKVxuICAgIH1cblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVkaXRvci5jb21tYW5kcy5zZXRDb250ZW50KHZhbHVlLCBmYWxzZSwgdGhpcy5wYXJzZU9wdGlvbnMpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7XG4gICAgICAuLi50aGlzLmVkaXRvck9wdGlvbnMsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25CbHVyLFxuICAgICAgb25VcGRhdGUsXG4gICAgICBleHRlbnNpb25zOiB0aGlzLmdldEV4dGVuc2lvbnMoKSxcbiAgICAgIGNvbnRlbnQ6IHRoaXMudmFsdWUgfHwgJydcbiAgICB9KVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLmVkaXRvci5kZXN0cm95KClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25EcmFnUmVzaXplKGV2ZW50KSB7XG4gICAgICBjb25zdCBnZXRQb2ludCA9ICh7IGNsaWVudFg6IHgsIGNsaWVudFk6IHkgfSkgPT4gKHsgeCwgeSB9KVxuXG4gICAgICBsZXQgcHJldlkgPSBnZXRQb2ludChldmVudCkueVxuICAgICAgbGV0IGhlaWdodCA9IHBhcnNlRmxvYXQoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiRyZWZzLmVkaXRvci4kZWwpLmhlaWdodClcblxuICAgICAgY29uc3QgbW91c2Vtb3ZlID0gZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCB7IHkgfSA9IGdldFBvaW50KGV2ZW50KVxuICAgICAgICBoZWlnaHQgKz0geSAtIHByZXZZXG4gICAgICAgIHByZXZZID0geVxuICAgICAgICB0aGlzLmhlaWdodCA9IGAke01hdGgubWF4KGhlaWdodCwgMCl9cHhgXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgICBtb3VzZW1vdmUsXG5cbiAgICAgICAgbW91c2V1cChldmVudCkge1xuICAgICAgICAgIG1vdXNlbW92ZShldmVudClcbiAgICAgICAgICBoYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB1cGRhdGVFZGl0b3JPcHRpb25zKCkge1xuICAgICAgdGhpcy5lZGl0b3Iuc2V0T3B0aW9ucyh0aGlzLmVkaXRvck9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ2xpY2tMaW5rKGVkaXRvcikge1xuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGF3YWl0IHRoaXMucm9vdENvbXBvbmVudC5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIGhyZWY6IHtcbiAgICAgICAgICAgIHR5cGU6ICd1cmwnLFxuICAgICAgICAgICAgbGFiZWw6ICdMaW5rJyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGxhYmVsOiAnVGl0bGUnXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBidXR0b25zOiB7XG4gICAgICAgICAgY2FuY2VsOiB7fSxcbiAgICAgICAgICBhcHBseTogeyB0eXBlOiAnc3VibWl0JyB9LFxuICAgICAgICAgIHJlbW92ZToge1xuICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgIGNsaWNrKHsgZGlhbG9nQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb21wb25lbnQucmVzb2x2ZShudWxsKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXRhOiBnZXRNYXJrQXR0cmlidXRlcyh0aGlzLmVkaXRvci5zdGF0ZSwgJ2xpbmsnKVxuICAgICAgfSlcbiAgICAgIGlmIChhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGxldCB7IGhyZWYsIHRpdGxlIH0gPSBhdHRyaWJ1dGVzXG4gICAgICAgIGlmIChocmVmKSB7XG4gICAgICAgICAgLy8gU2VlIGlmIGBocmVmYCBjYW4gYmUgcGFyc2VkIGFzIGEgVVJMLCBhbmQgaWYgbm90LFxuICAgICAgICAgIC8vIHByZWZpeCBpdCB3aXRoIGEgZGVmYXVsdCBwcm90b2NvbC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ld1xuICAgICAgICAgICAgbmV3IFVSTChocmVmKVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgaHJlZiA9IGBodHRwczovLyR7aHJlZn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVkaXRvci5jb21tYW5kcy5zZXRMaW5rKHsgaHJlZiwgdGl0bGUgfSlcbiAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcyA9PT0gbnVsbCkge1xuICAgICAgICBlZGl0b3IuY29tbWFuZHMudW5zZXRMaW5rKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RXh0ZW5zaW9ucygpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFya3MgPSB7fSxcbiAgICAgICAgbm9kZXMgPSB7fSxcbiAgICAgICAgdG9vbHMgPSB7fVxuICAgICAgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gW1xuICAgICAgICAvLyBFc3NlbnRpYWxzOlxuICAgICAgICBEb2N1bWVudCxcbiAgICAgICAgVGV4dCxcbiAgICAgICAgUGFyYWdyYXBoLCAvLyBidXR0b24gY2FuIGJlIGNvbnRyb2xsZWQsIGJ1dCBub2RlIG5lZWRzIHRvIGJlIG9uLlxuXG4gICAgICAgIC8vIE1hcmtzOiBgc2NoZW1hLm1hcmtzYFxuICAgICAgICBtYXJrcy5ib2xkICYmIEJvbGQsXG4gICAgICAgIG1hcmtzLml0YWxpYyAmJiBJdGFsaWMsXG4gICAgICAgIG1hcmtzLnVuZGVybGluZSAmJiBVbmRlcmxpbmUsXG4gICAgICAgIG1hcmtzLnN0cmlrZSAmJiBTdHJpa2UsXG4gICAgICAgIG1hcmtzLnNtYWxsICYmIFNtYWxsLFxuICAgICAgICBtYXJrcy5jb2RlICYmIENvZGUsXG4gICAgICAgIG1hcmtzLmxpbmsgJiYgTGlua1dpdGhUaXRsZSxcblxuICAgICAgICAvLyBOb2RlczogYHNjaGVtYS5ub2Rlc2BcbiAgICAgICAgbm9kZXMuYmxvY2txdW90ZSAmJiBCbG9ja3F1b3RlLFxuICAgICAgICBub2Rlcy5jb2RlQmxvY2sgJiYgQ29kZUJsb2NrLFxuICAgICAgICBIYXJkQnJlYWssIC8vIFRPRE86IFNob3VsZCB0aGlzIGFsd2F5cyBvbj9cbiAgICAgICAgbm9kZXMuaGVhZGluZyAmJiBIZWFkaW5nLmNvbmZpZ3VyZSh7IGxldmVsczogbm9kZXMuaGVhZGluZyB9KSxcbiAgICAgICAgbm9kZXMuaG9yaXpvbnRhbFJ1bGUgJiYgSG9yaXpvbnRhbFJ1bGUsXG4gICAgICAgIChub2Rlcy5vcmRlcmVkTGlzdCB8fCBub2Rlcy5idWxsZXRMaXN0KSAmJiBMaXN0SXRlbSxcbiAgICAgICAgbm9kZXMuYnVsbGV0TGlzdCAmJiBCdWxsZXRMaXN0LFxuICAgICAgICBub2Rlcy5vcmRlcmVkTGlzdCAmJiBPcmRlcmVkTGlzdCxcbiAgICAgICAgLy8gVE9ETzpcbiAgICAgICAgLy8gbm9kZXMudG9kb0xpc3QgJiYgVG9kb0l0ZW0sXG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIFRvZG9MaXN0LFxuXG4gICAgICAgIC8vIFRvb2xzOiBgc2NoZW1hLnRvb2xzYFxuICAgICAgICB0b29scy5oaXN0b3J5ICYmIEhpc3RvcnlcbiAgICAgIF0uZmlsdGVyKGV4dGVuc2lvbiA9PiAhIWV4dGVuc2lvbilcbiAgICB9LFxuXG4gICAgZ2V0QnV0dG9ucyhzZXR0aW5nc05hbWUsIGRlc2NyaXB0aW9ucykge1xuICAgICAgY29uc3QgbGlzdCA9IFtdXG4gICAgICBjb25zdCB7IGNvbW1hbmRzIH0gPSB0aGlzLmVkaXRvclxuXG4gICAgICBjb25zdCBhZGRCdXR0b24gPSAoeyBuYW1lLCBpY29uLCBjb21tYW5kLCBhdHRyaWJ1dGVzLCBvbkNsaWNrIH0pID0+IHtcbiAgICAgICAgbGlzdC5wdXNoKHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGljb24sXG4gICAgICAgICAgaXNBY3RpdmU6IHRoaXMuZWRpdG9yLmlzQWN0aXZlKG5hbWUsIGF0dHJpYnV0ZXMpLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbW1hbmQgPz89XG4gICAgICAgICAgICAgIG5hbWUgaW4gY29tbWFuZHNcbiAgICAgICAgICAgICAgICA/IG5hbWVcbiAgICAgICAgICAgICAgICA6IGB0b2dnbGUke2NhbWVsaXplKG5hbWUsIHRydWUpfWBcbiAgICAgICAgICAgIGlmIChjb21tYW5kIGluIGNvbW1hbmRzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFwcGx5ID0gYXR0cmlidXRlcyA9PlxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLmNoYWluKClbY29tbWFuZF0oYXR0cmlidXRlcykuZm9jdXMoKS5ydW4oKVxuICAgICAgICAgICAgICBvbkNsaWNrXG4gICAgICAgICAgICAgICAgPyBvbkNsaWNrKHRoaXMuZWRpdG9yLCBhdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIDogYXBwbHkoYXR0cmlidXRlcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zY2hlbWFbc2V0dGluZ3NOYW1lXVxuICAgICAgaWYgKHNldHRpbmdzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIGRlc2NyaXB0aW9uXSBvZiBPYmplY3QuZW50cmllcyhkZXNjcmlwdGlvbnMpKSB7XG4gICAgICAgICAgY29uc3Qgc2V0dGluZ05hbWUgPSBbJ3VuZG8nLCAncmVkbyddLmluY2x1ZGVzKG5hbWUpID8gJ2hpc3RvcnknIDogbmFtZVxuICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1tzZXR0aW5nTmFtZV1cbiAgICAgICAgICBjb25zdCBpY29uID0gaHlwaGVuYXRlKG5hbWUpXG4gICAgICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBhZGRCdXR0b24oeyBuYW1lLCBpY29uIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRlc2NyaXB0aW9uKSkge1xuICAgICAgICAgICAgICBjb25zdCB7IGNvbW1hbmQsIGF0dHJpYnV0ZSwgdmFsdWVzLCBvbkNsaWNrIH0gPSBkZXNjcmlwdGlvblxuICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWVzKSAmJiBpc0FycmF5KHNldHRpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGhlYWRpbmcgbGV2ZWwgYXR0cnM6XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhZGRCdXR0b24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IGAke2ljb259LSR7dmFsdWV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7IFthdHRyaWJ1dGVdOiB2YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkQnV0dG9uKHsgbmFtZSwgaWNvbiwgY29tbWFuZCwgb25DbGljayB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLmVkaXRvci5jb21tYW5kcy5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXJFbGVtZW50KCkge1xuICAgICAgdGhpcy5lZGl0b3IuY29tbWFuZHMuYmx1cigpXG4gICAgfVxuICB9XG59KVxuXG5jb25zdCBTbWFsbCA9IE1hcmsuY3JlYXRlKHtcbiAgbmFtZTogJ3NtYWxsJyxcblxuICBwYXJzZUhUTUwoKSB7XG4gICAgcmV0dXJuIFt7IHRhZzogJ3NtYWxsJyB9XVxuICB9LFxuXG4gIHJlbmRlckhUTUwoKSB7XG4gICAgcmV0dXJuIFsnc21hbGwnLCAwXVxuICB9LFxuXG4gIGFkZENvbW1hbmRzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZXRTbWFsbDpcbiAgICAgICAgYXR0cmlidXRlcyA9PlxuICAgICAgICAoeyBjb21tYW5kcyB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnNldE1hcmsodGhpcy5uYW1lLCBhdHRyaWJ1dGVzKVxuICAgICAgICB9LFxuICAgICAgdG9nZ2xlU21hbGw6XG4gICAgICAgIGF0dHJpYnV0ZXMgPT5cbiAgICAgICAgKHsgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiBjb21tYW5kcy50b2dnbGVNYXJrKHRoaXMubmFtZSwgYXR0cmlidXRlcylcbiAgICAgICAgfSxcbiAgICAgIHVuc2V0U21hbGw6XG4gICAgICAgICgpID0+XG4gICAgICAgICh7IGNvbW1hbmRzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gY29tbWFuZHMudW5zZXRNYXJrKHRoaXMubmFtZSlcbiAgICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuY29uc3QgTGlua1dpdGhUaXRsZSA9IExpbmsuZXh0ZW5kKHtcbiAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgc2NoZW1hOiB7XG4gICAgYXR0cnM6IHtcbiAgICAgIGhyZWY6IHtcbiAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgfSxcbiAgICAgIHRpdGxlOiB7XG4gICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFyc2VIVE1MKCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIHRhZzogJ2EnLFxuICAgICAgICAgIGdldEF0dHJzOiBlbGVtZW50ID0+ICh7XG4gICAgICAgICAgICBocmVmOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpLFxuICAgICAgICAgICAgdGl0bGU6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0aXRsZScpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG5cbiAgICByZW5kZXJIVE1MKG5vZGUpIHtcbiAgICAgIHJldHVybiBbJ2EnLCBub2RlLmF0dHJzLCAwXVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLW1hcmt1cCB7XG4gIEBleHRlbmQgJWlucHV0O1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAuZGl0by1yZXNpemUge1xuICAgIEBleHRlbmQgJWljb24tcmVzaXplO1xuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogdW5zZXQ7XG4gICAgbGVmdDogdW5zZXQ7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIHdpZHRoOiAxZW07XG4gICAgaGVpZ2h0OiAxZW07XG4gIH1cblxuICAuUHJvc2VNaXJyb3Ige1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBvdXRsaW5lOiBub25lO1xuICB9XG5cbiAgLmRpdG8tbWFya3VwLWVkaXRvciB7XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgIG1hcmdpbi10b3A6ICRpbnB1dC1wYWRkaW5nLXZlcjtcbiAgICAvLyBNb3ZlIHBhZGRpbmcgXCJpbnNpZGVcIiBlZGl0b3IgdG8gY29ycmVjdGx5IHBvc2l0aW9uIHNjcm9sbGJhclxuICAgIG1hcmdpbi1yaWdodDogLSRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkaW5wdXQtcGFkZGluZy1ob3I7XG4gIH1cblxuICAuZGl0by1idXR0b25zLXRvb2xiYXIge1xuICAgIG1hcmdpbjogMDtcbiAgfVxuXG4gIGgxLFxuICBoMixcbiAgaDMsXG4gIHAsXG4gIHVsLFxuICBvbCxcbiAgcHJlLFxuICBibG9ja3F1b3RlIHtcbiAgICBtYXJnaW46IDFyZW0gMDtcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cblxuICBoMSxcbiAgaDIsXG4gIGgzIHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIGgxIHtcbiAgICBmb250LXNpemU6IDEuNHJlbTtcbiAgfVxuXG4gIGgyIHtcbiAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgfVxuXG4gIHVsIHtcbiAgICBsaXN0LXN0eWxlOiBkaXNjO1xuICB9XG5cbiAgY29kZSB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vO1xuICB9XG5cbiAgcHJlIHtcbiAgICBwYWRkaW5nOiAwLjdyZW0gMXJlbTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyO1xuICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcblxuICAgIGNvZGUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICB9XG5cbiAgcCBjb2RlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgcGFkZGluZzogMCAwLjNyZW07XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXI7XG4gIH1cblxuICBhIHtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgY29sb3I6IGJsdWU7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIH1cblxuICB1bCxcbiAgb2wge1xuICAgIHBhZGRpbmctbGVmdDogMnJlbTtcbiAgfVxuXG4gIGxpIHtcbiAgICAmID4gcCxcbiAgICAmID4gb2wsXG4gICAgJiA+IHVsIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG4gIH1cblxuICBibG9ja3F1b3RlIHtcbiAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICRjb2xvci1saWdodGVyO1xuICAgIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG5cbiAgICBwIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tbXVsdGlzZWxlY3RcbiAgLmRpdG8tbXVsdGlzZWxlY3RfX2lubmVyXG4gICAgVnVlTXVsdGlzZWxlY3QoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgICAgOmNsYXNzPWB7XG4gICAgICAgICdtdWx0aXNlbGVjdC0tbXVsdGlwbGUnOiBtdWx0aXBsZSxcbiAgICAgICAgJ211bHRpc2VsZWN0LS1sb2FkaW5nJzogaXNMb2FkaW5nLFxuICAgICAgICAnbXVsdGlzZWxlY3QtLWhpZ2hsaWdodCc6IHNob3dIaWdobGlnaHRcbiAgICAgIH1gXG4gICAgICA6c2hvd0xhYmVscz1cImZhbHNlXCJcbiAgICAgIDpwbGFjZWhvbGRlcj1cInBsYWNlaG9sZGVyXCJcbiAgICAgIHRhZ1BsYWNlaG9sZGVyPVwiUHJlc3MgZW50ZXIgdG8gYWRkIG5ldyB0YWdcIlxuICAgICAgOm9wdGlvbnM9XCJwb3B1bGF0ZSAmJiBhY3RpdmVPcHRpb25zIHx8IFtdXCJcbiAgICAgIDpjdXN0b21MYWJlbD1cImdldExhYmVsRm9yT3B0aW9uXCJcbiAgICAgIDp0cmFja0J5PVwib3B0aW9uVmFsdWVcIlxuICAgICAgOmdyb3VwTGFiZWw9XCJncm91cEJ5TGFiZWxcIlxuICAgICAgOmdyb3VwVmFsdWVzPVwiZ3JvdXBCeU9wdGlvbnNcIlxuICAgICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgICAgOnRhZ2dhYmxlPVwidGFnZ2FibGVcIlxuICAgICAgOnNlYXJjaGFibGU9XCJzZWFyY2hhYmxlXCJcbiAgICAgIDppbnRlcm5hbFNlYXJjaD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOnByZXNlcnZlU2VhcmNoPVwiISFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsZWFyT25TZWxlY3Q9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICAgIDpjbG9zZU9uU2VsZWN0PVwiIXN0YXlPcGVuXCJcbiAgICAgIDpsb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgQG9wZW49XCJvbk9wZW5cIlxuICAgICAgQGNsb3NlPVwib25DbG9zZVwiXG4gICAgICBAdGFnPVwib25BZGRUYWdcIlxuICAgICAgQHNlYXJjaC1jaGFuZ2U9XCJvblNlYXJjaENoYW5nZVwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICApXG4gIC8vLSBFZGl0IGJ1dHRvbiBpcyBuZXZlciBkaXNhYmxlZCwgZXZlbiBpZiB0aGUgZmllbGQgaXMgZGlzYWJsZWQuXG4gIERpdG9FZGl0QnV0dG9ucyhcbiAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImZhbHNlXCJcbiAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuaW1wb3J0IFZ1ZU11bHRpc2VsZWN0IGZyb20gJ3Z1ZS1tdWx0aXNlbGVjdCdcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBpc0Jvb2xlYW4gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ211bHRpc2VsZWN0Jywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFZ1ZU11bHRpc2VsZWN0IH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VhcmNoZWRPcHRpb25zOiBudWxsLFxuICAgICAgcG9wdWxhdGU6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKVxuICAgICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAgIC8vIElmIGFuIG9wdGlvbiBjYW5ub3QgYmUgZm91bmQsIHdlIG1heSBiZSBpbiB0YWdnYWJsZSBtb2RlIGFuZFxuICAgICAgICAgICAgICAgIC8vIGNhbiBhZGQgaXQuXG4gICAgICAgICAgICAgICAgdmFsdWUgPT4gKFxuICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkgfHwgdGhpcy5hZGRUYWdPcHRpb24odmFsdWUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgb3B0aW9ucyB0aGF0IHdlIGNvdWxkbid0IG1hdGNoLlxuICAgICAgICAgICAgICAvLyBUT0RPOiBTaG91bGQgd2UgZGlzcGxheSBhbiBlcnJvciBpbnN0ZWFkP1xuICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgOiB0aGlzLnNlbGVjdGVkT3B0aW9uXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIC8vIENvbnZlcnQgdmFsdWUgdG8gb3B0aW9ucyBvYmplY3QsIHNpbmNlIHZ1ZS1tdWx0aXNlbGVjdCBjYW4ndCBtYXAgdGhhdFxuICAgICAgICAvLyBpdHNlbGYgdW5mb3J0dW5hdGVseS4gYHRyYWNrLWJ5YCBpcyB1c2VkIGZvciA6a2V5IG1hcHBpbmcgaXQgc2VlbXMuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/IChvcHRpb24gfHwgW10pLm1hcCh2YWx1ZSA9PiB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKHZhbHVlKSlcbiAgICAgICAgICA6IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWN0aXZlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaGVkT3B0aW9ucyB8fCB0aGlzLm9wdGlvbnNcbiAgICB9LFxuXG4gICAgbXVsdGlwbGU6IGdldFNjaGVtYUFjY2Vzc29yKCdtdWx0aXBsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgc2VhcmNoYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHRhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndGFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHN0YXlPcGVuOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RheU9wZW4nLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHBsYWNlaG9sZGVyKCkge1xuICAgICAgbGV0IHsgcGxhY2Vob2xkZXIsIHNlYXJjaGFibGUsIHRhZ2dhYmxlIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgaWYgKGlzQm9vbGVhbihwbGFjZWhvbGRlcikpIHtcbiAgICAgICAgcGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlciA/IHVuZGVmaW5lZCA6IG51bGxcbiAgICAgIH1cbiAgICAgIHJldHVybiBwbGFjZWhvbGRlciA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gc2VhcmNoYWJsZSAmJiB0YWdnYWJsZVxuICAgICAgICAgID8gYFNlYXJjaCBvciBhZGQgYSAke3RoaXMubGFiZWx9YFxuICAgICAgICAgIDogc2VhcmNoYWJsZVxuICAgICAgICAgICAgPyBgU2VsZWN0IG9yIHNlYXJjaCAke3RoaXMubGFiZWx9YFxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgOiBwbGFjZWhvbGRlclxuICAgIH0sXG5cbiAgICBzaG93SGlnaGxpZ2h0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNNb3VudGVkICYmIHRoaXMuJHJlZnMuZWxlbWVudC5wb2ludGVyRGlydHlcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBpZiAodGhpcy5hdXRvZm9jdXMpIHtcbiAgICAgIC8vIHZ1ZS1tdWx0aXNlbGVjdCBkb2Vzbid0IHN1cHBvcnQgdGhlIGF1dG9mb2N1cyBhdHRyaWJ1dGUuIFdlIG5lZWQgdG9cbiAgICAgIC8vIGhhbmRsZSBpdCBoZXJlLlxuICAgICAgdGhpcy5mb2N1cygpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBhZGRUYWdPcHRpb24odGFnKSB7XG4gICAgICBpZiAodGhpcy50YWdnYWJsZSkge1xuICAgICAgICBjb25zdCB7IG9wdGlvbkxhYmVsLCBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgICBjb25zdCBvcHRpb24gPVxuICAgICAgICAgIG9wdGlvbkxhYmVsICYmIG9wdGlvblZhbHVlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdOiB0YWcsXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogRGVmaW5lIGEgc2ltcGxlIHNjaGVtYSBvcHRpb24gdG8gY29udmVydCB0aGUgdGFnIHZhbHVlXG4gICAgICAgICAgICAgICAgLy8gdG8gc29tZXRoaW5nIGVsc2UsIGUuZy4gYHRvVGFnOiB0YWcgPT4gdW5kZXJzY29yZSh0YWcpYFxuICAgICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV06IHRhZ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHRhZ1xuICAgICAgICB0aGlzLm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kcmVmcy5lbGVtZW50LmFjdGl2YXRlKClcbiAgICB9LFxuXG4gICAgYmx1ckVsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRyZWZzLmVsZW1lbnQuZGVhY3RpdmF0ZSgpXG4gICAgfSxcblxuICAgIG9uT3BlbigpIHtcbiAgICAgIHRoaXMucG9wdWxhdGUgPSB0cnVlXG4gICAgfSxcblxuICAgIG9uQ2xvc2UoKSB7XG4gICAgICAvLyBTaW5jZSB3ZSBkb24ndCBmaXJlIGJsdXIgZXZlbnRzIHdoaWxlIHRoZSBtdWx0aXNlbGVjdCBpcyBvcGVuIChzZWVcbiAgICAgIC8vIGJlbG93KSwgd2UgbmVlZCB0byBkbyBpdCBoZXJlLCB3aGVuIGl0J3MgYWN0dWFsbHkgY2xvc2VkLlxuICAgICAgaWYgKHRoaXMuZm9jdXNlZCkge1xuICAgICAgICB0aGlzLm9uQmx1cigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQmx1cigpIHtcbiAgICAgIGlmICghdGhpcy4kcmVmcy5lbGVtZW50LmlzT3Blbikge1xuICAgICAgICBUeXBlTWl4aW4ubWV0aG9kcy5vbkJsdXIuY2FsbCh0aGlzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkFkZFRhZyh0YWcpIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuYWRkVGFnT3B0aW9uKHRhZylcbiAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25TZWFyY2hDaGFuZ2UocXVlcnkpIHtcbiAgICAgIGlmICh0aGlzLnNlYXJjaEZpbHRlcikge1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICAvLyBTZXQgYHNlYXJjaGVkT3B0aW9uc2AgdG8gYW4gZW1wdHkgYXJyYXksIGJlZm9yZSBpdCB3aWxsIGJlXG4gICAgICAgICAgLy8gcG9wdWxhdGVkIGFzeW5jaHJvbm91c2x5IHdpdGggdGhlIGFjdHVhbCByZXN1bHRzLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gW11cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IGF3YWl0IHRoaXMucmVzb2x2ZURhdGEoXG4gICAgICAgICAgICAoKSA9PiB0aGlzLnNlYXJjaEZpbHRlcihuZXcgRGl0b0NvbnRleHQodGhpcywgeyBxdWVyeSB9KSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQ2xlYXIgYHNlYXJjaGVkT3B0aW9uc2Agd2hlbiB0aGUgcXVlcnkgaXMgY2xlYXJlZC5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5AaW1wb3J0ICd2dWUtbXVsdGlzZWxlY3QvZGlzdC92dWUtbXVsdGlzZWxlY3QuY3NzJztcblxuJHNwaW5uZXItd2lkdGg6ICRzZWxlY3QtYXJyb3ctd2lkdGg7XG4kdGFnLWljb24td2lkdGg6IDEuOGVtO1xuJHRhZy1tYXJnaW46IDJweDtcbiR0YWctcGFkZGluZzogM3B4O1xuJHRhZy1saW5lLWhlaWdodDogMWVtO1xuXG4uZGl0by1tdWx0aXNlbGVjdCB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgJl9faW5uZXIge1xuICAgIGZsZXg6IDE7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZy1oYWxmO1xuICB9XG5cbiAgLm11bHRpc2VsZWN0IHtcbiAgICAkc2VsZjogbGFzdC1zZWxlY3RvcigmKTtcblxuICAgIC0taW5wdXQtd2lkdGg6IDEwMCU7XG5cbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgbWluLWhlaWdodDogaW5oZXJpdDtcbiAgICBjb2xvcjogJGNvbG9yLWJsYWNrO1xuXG4gICAgJi0tbXVsdGlwbGUge1xuICAgICAgLS1pbnB1dC13aWR0aDogYXV0bztcbiAgICB9XG5cbiAgICAmX190YWdzIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgICBtaW4taGVpZ2h0OiBpbmhlcml0O1xuICAgICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgICBwYWRkaW5nOiAwICRzcGlubmVyLXdpZHRoIDAgMDtcbiAgICAgIC8vIFNvIHRhZ3MgY2FuIGZsb2F0IG9uIG11bHRpcGxlIGxpbmVzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zOlxuICAgICAgcGFkZGluZy1ib3R0b206ICR0YWctbWFyZ2luO1xuXG4gICAgICAuZGl0by1oYXMtZXJyb3JzICYge1xuICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvci1lcnJvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX190YWcge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICBtYXJnaW46ICR0YWctbWFyZ2luIDAgMCAkdGFnLW1hcmdpbjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcbiAgICAgIHBhZGRpbmc6ICR0YWctcGFkZGluZyAkdGFnLWljb24td2lkdGggJHRhZy1wYWRkaW5nIDAuOGVtO1xuICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHQ7XG4gICAgICBoZWlnaHQ6IGNhbGMoJGlucHV0LWhlaWdodCAtIDIgKiAkdGFnLXBhZGRpbmcpO1xuICAgIH1cblxuICAgICZfX3RhZ3Mtd3JhcCB7XG4gICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgIGxpbmUtaGVpZ2h0OiAwO1xuICAgIH1cblxuICAgICZfX3NpbmdsZSxcbiAgICAmX19wbGFjZWhvbGRlcixcbiAgICAmX19pbnB1dCB7XG4gICAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgICAgZmxleDogMSAwIDAlO1xuICAgICAgd2lkdGg6IDA7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgbWFyZ2luOiAwIDAgMXB4IDA7XG4gICAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgc3R5bGU9XCJwYWRkaW5nOiAuLi47XCIgaW4gYWRkaXRpb24gdG8gdXNpbmdcbiAgICAgIC8vIGNsYXNzZXMsIHNvIGAhaW1wb3J0YW50YCBpcyBuZWNlc3Nhcnk6XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZyAhaW1wb3J0YW50O1xuICAgICAgLy8gU28gaW5wdXQgY2FuIGZsb2F0IG5leHQgdG8gdGFncyBhbmQgaGF2ZSBwcm9wZXIgbWFyZ2lucyB3aXRoXG4gICAgICAvLyAmX190YWdzOlxuICAgICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgfVxuXG4gICAgJl9fcGxhY2Vob2xkZXIsXG4gICAgJl9faW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItcGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgJl9fcGxhY2Vob2xkZXIge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAvLyBFbmZvcmNlIGFjdHVhbCBsaW5lLWhlaWdodCBmb3IgcG9zaXRpb25pbmcuXG4gICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3NlbGVjdCxcbiAgICAmX19zcGlubmVyIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAvLyAkYm9yZGVyLXdpZHRoIHRvIHByZXZlbnQgbWFza2luZyBib3JkZXIgd2l0aCAmX19zcGlubmVyXG4gICAgICB0b3A6ICRib3JkZXItd2lkdGg7XG4gICAgICByaWdodDogJGJvcmRlci13aWR0aDtcbiAgICAgIGJvdHRvbTogJGJvcmRlci13aWR0aDtcbiAgICAgIGhlaWdodDogaW5oZXJpdDtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIH1cblxuICAgICZfX3NlbGVjdCB7XG4gICAgICB3aWR0aDogMDtcbiAgICAgIG1hcmdpbi1yaWdodDogY2FsYygkc2VsZWN0LWFycm93LXdpZHRoIC8gMik7XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIEBpbmNsdWRlIGFycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSk7XG5cbiAgICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbTtcbiAgICAgICAgcmlnaHQ6IGNhbGMoLTEgKiAkc2VsZWN0LWFycm93LXNpemUgLyAyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19zcGlubmVyIHtcbiAgICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aDtcblxuICAgICAgJjo6YmVmb3JlLFxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAvLyBDaGFuZ2UgdGhlIHdpZHRoIG9mIHRoZSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgICAgYm9yZGVyLXdpZHRoOiAzcHg7XG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgICAgIGluc2V0OiAwO1xuICAgICAgICBtYXJnaW46IGF1dG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fb3B0aW9uIHtcbiAgICAgICRvcHRpb246IGxhc3Qtc2VsZWN0b3IoJik7XG5cbiAgICAgIG1pbi1oZWlnaHQ6IHVuc2V0O1xuICAgICAgaGVpZ2h0OiB1bnNldDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAvLyBJbnN0cnVjdGlvbiB0ZXh0IGZvciBvcHRpb25zXG4gICAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICAgICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodDtcbiAgICAgIH1cblxuICAgICAgLy8gT25seSBzaG93IHRoZSBoaWdobGlnaHQgb25jZSB0aGUgcHVsbGRvd24gaGFzIHJlY2VpdmVkIG1vdXNlIG9yXG4gICAgICAvLyBrZXlib2FyZCBpbnRlcmFjdGlvbiwgaW4gd2hpY2ggY2FzZSBgJi0taGlnaGxpZ2h0YCB3aWxsIGJlIHNldCxcbiAgICAgIC8vIHdoaWNoIGlzIGNvbnRyb2xsZWQgYnkgYHBvaW50ZXJEaXJ0eWAgaW4gdnVlLW11bHRpc2VsZWN0LlxuICAgICAgLy8gVW50aWwgdGhlbiwgY2xlYXIgdGhlIGhpZ2hsaWdodCBzdHlsZSwgYnV0IG9ubHkgaWYgaXQgaXNuJ3QgYWxzb1xuICAgICAgLy8gZGlzYWJsZWQgb3Igc2VsZWN0ZWQsIGluIHdoaWNoIGNhc2Ugd2Ugd2FudCB0byBrZWVwIHRoZSBzdHlsZS5cbiAgICAgIEBhdC1yb290ICN7JHNlbGZ9Om5vdCgjeyRzZWxmfS0taGlnaGxpZ2h0KVxuICAgICAgICAgICN7JG9wdGlvbn06bm90KCN7JG9wdGlvbn0tLWRpc2FibGVkKTpub3QoI3skb3B0aW9ufS0tc2VsZWN0ZWQpIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cblxuICAgICAgJi0taGlnaGxpZ2h0IHtcbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgQGF0LXJvb3QgI3skc2VsZn0jeyRzZWxmfS0taGlnaGxpZ2h0ICN7bGFzdC1zZWxlY3RvcigmKX0ge1xuICAgICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICYtLXNlbGVjdGVkIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0O1xuXG4gICAgICAgIEBhdC1yb290ICN7JHNlbGZ9I3skc2VsZn0tLWhpZ2hsaWdodCAmI3skb3B0aW9ufS0taGlnaGxpZ2h0IHtcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi0tZGlzYWJsZWQge1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3RhZyB7XG4gICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cblxuICAgICZfX3RhZy1pY29uIHtcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICBib3JkZXItcmFkaXVzOiAxZW07XG4gICAgICB3aWR0aDogJHRhZy1pY29uLXdpZHRoO1xuICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIEBleHRlbmQgJWljb24tY2xlYXI7XG5cbiAgICAgICAgZm9udC1zaXplOiAwLjllbTtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyOjphZnRlciB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX190YWdzLFxuICAgICZfX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICB9XG5cbiAgICAmX19jb250ZW50LXdyYXBwZXIge1xuICAgICAgei1pbmRleDogJHotaW5kZXgtcG9wdXA7XG4gICAgICBib3JkZXItY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuXG4gICAgJjpub3QoJi0tYWJvdmUpICN7JHNlbGZ9X19jb250ZW50LXdyYXBwZXIge1xuICAgICAgbWFyZ2luOiAoLSRib3JkZXItd2lkdGgpIDAgMDtcbiAgICAgIGJvcmRlci10b3AtY29sb3I6ICRib3JkZXItY29sb3I7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gICAgfVxuXG4gICAgJi0tYWJvdmUgI3skc2VsZn1fX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICBtYXJnaW46IDAgMCAoLSRib3JkZXItd2lkdGgpO1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICB9XG5cbiAgICAmLS1hY3RpdmUge1xuICAgICAgI3skc2VsZn1fX3BsYWNlaG9sZGVyIHtcbiAgICAgICAgLy8gRG9uJ3QgdXNlIGBkaXNwbGF5OiBub25lYCB0byBoaWRlIHBsYWNlLWhvbGRlciwgYXMgdGhlIGxheW91dCB3b3VsZFxuICAgICAgICAvLyBjb2xsYXBzZS5cbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICB9XG5cbiAgICAgICN7JHNlbGZ9X19zaW5nbGUsXG4gICAgICAjeyRzZWxmfV9faW5wdXQge1xuICAgICAgICAvLyBTYWRseSwgdnVlLXNlbGVjdCBzZXRzIGBzdHlsZT1cIndpZHRoXCJgIGluIGFkZGl0aW9uIHRvIHVzaW5nIGNsYXNzZXNcbiAgICAgICAgLy8gc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgICAgd2lkdGg6IHZhcigtLWlucHV0LXdpZHRoKSAhaW1wb3J0YW50O1xuICAgICAgfVxuXG4gICAgICAjeyRzZWxmfV9fdGFncyB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gICAgICB9XG5cbiAgICAgICYjeyRzZWxmfS0tYWJvdmUge1xuICAgICAgICAjeyRzZWxmfV9fdGFncyB7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICYtLWxvYWRpbmcge1xuICAgICAgI3skc2VsZn1fX3RhZ3Mge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn1fX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wdXRlZDoge1xuICAgIGlucHV0VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgIT09IG51bGwgPyB0aGlzLnZhbHVlIDogJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID1cbiAgICAgICAgICB2YWx1ZSAhPT0gJydcbiAgICAgICAgICAgID8gdGhpcy5pc0ludGVnZXJcbiAgICAgICAgICAgICAgPyBwYXJzZUludCh2YWx1ZSwgMTApXG4gICAgICAgICAgICAgIDogcGFyc2VGbG9hdCh2YWx1ZSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBpc0ludGVnZXIoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc3RlcFZhbHVlKCkge1xuICAgICAgLy8gRG9uJ3Qgc2hvdyBzdGVwcyBpZiB0aGUgaW5wdXQgaXMgYWxzbyBjbGVhcmFibGUsIHNpbmNlIHRoZSBzdGVwIGJ1dHRvbnNcbiAgICAgIC8vIHdvdWxkIGNvbGxpZGUgd2l0aCB0aGUgY2xlYXIgYnV0dG9uLlxuICAgICAgcmV0dXJuIHRoaXMuY2xlYXJhYmxlXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHRoaXMuc3RlcCA9PSBudWxsICYmICF0aGlzLmlzSW50ZWdlclxuICAgICAgICAgID8gJ2FueSdcbiAgICAgICAgICA6IHRoaXMuc3RlcFxuICAgIH0sXG5cbiAgICBkZWNpbWFsczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlY2ltYWxzJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICBzdGVwOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RlcCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChzdGVwKSB7XG4gICAgICAgIC8vIEZvciBpbnRlZ2Vycywgcm91bmQgdGhlIHN0ZXBzIHRvIHRoZSBuZXh0IGJpZ2dlciBpbnRlZ2VyIHZhbHVlOlxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgc3RlcCAhPSBudWxsID8gTWF0aC5jZWlsKHN0ZXApIDogc3RlcFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWluOiBnZXRTY2hlbWFBY2Nlc3NvcignbWluJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1pbikge1xuICAgICAgICBtaW4gPVxuICAgICAgICAgIG1pbiA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzBdXG4gICAgICAgICAgICA6IG1pblxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWluICE9IG51bGwgPyBNYXRoLmZsb29yKG1pbikgOiBtaW5cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heDogZ2V0U2NoZW1hQWNjZXNzb3IoJ21heCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtYXgpIHtcbiAgICAgICAgbWF4ID1cbiAgICAgICAgICBtYXggPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdyYW5nZScsIHsgdHlwZTogQXJyYXkgfSk/LlsxXVxuICAgICAgICAgICAgOiBtYXhcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1heCAhPSBudWxsID8gTWF0aC5jZWlsKG1heCkgOiBtYXhcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHJhbmdlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmFuZ2UnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gYHRoaXMubWluYCwgYHRoaXMubWF4YCBhbHJlYWR5IHN1cHBvcnQgYHNjaGVtYS5yYW5nZWAsXG4gICAgICAgIC8vIHNvIHJlZGlyZWN0IHRoZXJlLlxuICAgICAgICBjb25zdCB7IG1pbiwgbWF4IH0gPSB0aGlzXG4gICAgICAgIHJldHVybiBtaW4gIT0gbnVsbCAmJiBtYXggIT0gbnVsbCA/IFttaW4sIG1heF0gOiB1bmRlZmluZWRcbiAgICAgIH0sXG5cbiAgICAgIHNldChyYW5nZSkge1xuICAgICAgICAvLyBQcm92aWRlIGEgc2V0dGVyIHRoYXQgZGVsZWdhdGVzIHRvIGBbdGhpcy5taW4sIHRoaXMubWF4XWAsXG4gICAgICAgIC8vIHNpbmNlIHRob3NlIGFscmVhZHkgaGFuZGxlIGBzY2hlbWEucmFuZ2VgLlxuICAgICAgICBpZiAoaXNBcnJheShyYW5nZSkpIHtcbiAgICAgICAgICA7W3RoaXMubWluLCB0aGlzLm1heF0gPSByYW5nZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHt9XG4gICAgICBjb25zdCB7IHJhbmdlLCBtaW4sIG1heCwgZGVjaW1hbHMsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yYW5nZSA9IHJhbmdlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobWluICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5taW4gPSBtaW5cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4ICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5tYXggPSBtYXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRlY2ltYWxzICE9IG51bGwpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgfSBlbHNlIGlmIChzdGVwKSB7XG4gICAgICAgIGNvbnN0IGRlY2ltYWxzID0gKGAke3N0ZXB9YC5zcGxpdCgnLicpWzFdIHx8ICcnKS5sZW5ndGhcbiAgICAgICAgaWYgKGRlY2ltYWxzID4gMCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmRlY2ltYWxzID0gZGVjaW1hbHNcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc0ludGVnZXIpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuaW50ZWdlciA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uc1xuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbklucHV0RmllbGQuZGl0by1udW1iZXIoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgdHlwZT1cIm51bWJlclwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICA6bWluPVwibWluXCJcbiAgOm1heD1cIm1heFwiXG4gIDpzdGVwPVwic3RlcFZhbHVlXCJcbilcbiAgdGVtcGxhdGUoI2FmdGVyKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnbnVtYmVyJywgJ2ludGVnZXInXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIG1peGluczogW051bWJlck1peGluXSxcbiAgICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgaXNJbnRlZ2VyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnaW50ZWdlcidcbiAgICAgIH1cbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi8vIE9ubHkgc2hvdyBzcGluIGJ1dHRvbnMgaWYgdGhlIG51bWJlciBjb21wb25lbnQgZGVmaW5lcyBhIHN0ZXAgc2l6ZS5cbmlucHV0W3R5cGU9J251bWJlciddOm5vdChbc3RlcF0pIHtcbiAgJjo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgJjo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIG1hcmdpbjogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1vYmplY3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuKVxuICAuZGl0by1vYmplY3QtY29udGVudChcbiAgICB2LWlmPVwib2JqZWN0RGF0YVwiXG4gIClcbiAgICAvLy0gU3VwcG9ydCB0aGUgc2FtZSByZW5kZXJpbmcgb3B0aW9ucyBhcyBUeXBlTGlzdDpcbiAgICBEaXRvU2NoZW1hSW5saW5lZChcbiAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgOmxhYmVsPVwib2JqZWN0TGFiZWxcIlxuICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgb2JqZWN0RGF0YSwgY29udGV4dClcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICA6ZGVsZXRhYmxlPVwib2JqZWN0RGF0YSAmJiBkZWxldGFibGVcIlxuICAgICAgOmVkaXRhYmxlPVwib2JqZWN0RGF0YSAmJiBlZGl0YWJsZVwiXG4gICAgICA6ZWRpdFBhdGg9XCJwYXRoXCJcbiAgICAgIDphY2N1bXVsYXRlZEJhc2lzPVwiYWNjdW11bGF0ZWRCYXNpc1wiXG4gICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShvYmplY3REYXRhKVwiXG4gICAgKVxuICAgIGNvbXBvbmVudChcbiAgICAgIHYtZWxzZS1pZj1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgOmlzPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dCgpKVwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2VcbiAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIG9iamVjdERhdGEpXCJcbiAgICApXG4gIC8vLSBOT1RFOiBgRGl0b0VkaXRCdXR0b25zYCBoZXJlIG9ubHkgaGFuZGxlIHRoZSBjcmVhdGUgYnV0dG9uIG91dHNpZGUgb2YgdGhlXG4gIC8vLSBzY2hlbWEsIHRoZSBlZGl0IGJ1dHRvbnMgaW5zaWRlIGFyZSBoYW5kbGVkIGJ5IGBEaXRvU2NoZW1hSW5saW5lZGAuXG4gIERpdG9FZGl0QnV0dG9ucyhcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgIDpwYXRoPVwicGF0aFwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IHJlc29sdmVTY2hlbWFDb21wb25lbnQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignb2JqZWN0Jywge1xuICBtaXhpbnM6IFtTb3VyY2VNaXhpbl0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgLy8gTm8gbmVlZCBmb3IgdHJhbnNmb3JtYXRpb24gaGVyZS4gU2VlIFR5cGVUcmVlTGlzdCBmb3IgZGV0YWlscy5cbiAgICByZXR1cm4gdHlwZVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgb2JqZWN0TGFiZWwoKSB7XG4gICAgICAvLyBPbmx5IHNob3cgYSBsYWJlbCBpZiB0aGUgb2JqZWN0IGlzIGNvbGxhcHNpYmxlLlxuICAgICAgcmV0dXJuIHRoaXMuY29sbGFwc2libGVcbiAgICAgICAgPyB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNjaGVtYSwgdGhpcy5vYmplY3REYXRhLCB7IGFzT2JqZWN0OiB0cnVlIH0pXG4gICAgICAgIDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBkYXRhOiB0aGlzLm9iamVjdERhdGEgfSlcbiAgICB9XG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICBhcGksXG4gICAgc2NoZW1hLFxuICAgIG5hbWUsXG4gICAgcm91dGVzLFxuICAgIGxldmVsLFxuICAgIG5lc3RlZCA9IGZhbHNlLFxuICAgIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICByZXNvbHZlU2NoZW1hQ29tcG9uZW50KHNjaGVtYSksXG4gICAgICBTb3VyY2VNaXhpbi5wcm9jZXNzU2NoZW1hKFxuICAgICAgICBhcGksXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcm91dGVzLFxuICAgICAgICBsZXZlbCxcbiAgICAgICAgbmVzdGVkLFxuICAgICAgICBmbGF0dGVuLFxuICAgICAgICBwcm9jZXNzXG4gICAgICApXG4gICAgXSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLW9iamVjdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogJGZvcm0tc3BhY2luZztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgbWluLXdpZHRoOiBtaW4tY29udGVudDtcblxuICAuZGl0by1vYmplY3QtY29udGVudCB7XG4gICAgZmxleDogMCAxIDEwMCU7XG4gIH1cblxuICA+IC5kaXRvLWVkaXQtYnV0dG9ucyB7XG4gICAgZmxleDogMSAwIDAlO1xuICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdwYW5lbCcsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gIG9taXRTcGFjaW5nOiB0cnVlLFxuXG4gIGdldFBhbmVsU2NoZW1hKGFwaSwgc2NoZW1hKSB7XG4gICAgLy8gRm9yIGEgVHlwZVBhbmVsLCB0aGUgY29tcG9uZW50IHNjaGVtYSBpcyBhbHNvIHRoZSBwYW5lbCBzY2hlbWEsIGJ1dFxuICAgIC8vIHJlbW92ZSB0aGUgYWRkZWQgbmFtZSwgc28gaXQgZG9lc24ndCBnZXQgYXBwZW5kZWQgdHdpY2UgdG8gZGF0YS1wYXRoLlxuICAgIGNvbnN0IHsgbmFtZSwgLi4ucGFuZWwgfSA9IHNjaGVtYVxuICAgIHJldHVybiBwYW5lbFxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxucHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgOnZhbHVlPVwicHJvZ3Jlc3NWYWx1ZVwiXG4gIDptYXg9XCJwcm9ncmVzc01heFwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncHJvZ3Jlc3MnLCB7XG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBwcm9ncmVzc1ZhbHVlKCkge1xuICAgICAgbGV0IHsgdmFsdWUsIHJhbmdlLCBzdGVwIH0gPSB0aGlzXG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgdmFsdWUgLT0gcmFuZ2VbMF1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcCkge1xuICAgICAgICAgIHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSAvIHN0ZXApICogc3RlcFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICcnXG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgcHJvZ3Jlc3NNYXgoKSB7XG4gICAgICBjb25zdCB7IHJhbmdlIH0gPSB0aGlzXG4gICAgICByZXR1cm4gcmFuZ2UgPyByYW5nZVsxXSAtIHJhbmdlWzBdIDogbnVsbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKFxuICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICApXG4gICAgbGFiZWxcbiAgICAgIGlucHV0LmRpdG8tcmFkaW8tYnV0dG9uKFxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncmFkaW8nLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tcmFkaW8tYnV0dG9ucyB7XG4gIGxhYmVsIHtcbiAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzO1xuICB9XG5cbiAgLmRpdG8tcmFkaW8tYnV0dG9uIHtcbiAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc2VjdGlvbig6Y2xhc3M9XCJ7ICdkaXRvLXNlY3Rpb24tLWxhYmVsbGVkJzogaGFzTGFiZWwgfVwiKVxuICBEaXRvU2NoZW1hSW5saW5lZC5kaXRvLXNlY3Rpb25fX3NjaGVtYShcbiAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cIml0ZW1cIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpwYWRkaW5nPVwiaGFzTGFiZWwgPyAnbmVzdGVkJyA6ICdpbmxpbmVkJ1wiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICA6bGFiZWxOb2RlPVwibGFiZWxOb2RlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXRJdGVtRm9ybVNjaGVtYSwgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VjdGlvbicsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+ICFzY2hlbWEubmVzdGVkICYmICEoJ2RlZmF1bHQnIGluIHNjaGVtYSksXG4gIGRlZmF1bHROZXN0ZWQ6IGZhbHNlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcblxuICBjb21wdXRlZDoge1xuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5uZXN0ZWQgPyB0aGlzLnZhbHVlIDogdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5zY2hlbWEubGFiZWxcbiAgICB9LFxuXG4gICAgY29sbGFwc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsLCAvLyBzbyB0aGF0IGA/P2AgYmVsb3cgY2FuIGRvIGl0cyB0aGluZzpcbiAgICAgIGdldChjb2xsYXBzaWJsZSkge1xuICAgICAgICByZXR1cm4gISEoY29sbGFwc2libGUgPz8gdGhpcy5jb2xsYXBzZWQgIT09IG51bGwpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb2xsYXBzZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEl0ZW1Gb3JtU2NoZW1hXG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCkge1xuICAgIC8vIFByb2Nlc3Mgc2VjdGlvbiBjb21wb25lbnRzIHNvIHRoZWlyIGZvcm1zIGdldCByZXNvbHZlZCB0b28uXG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwpXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zZWN0aW9uIHtcbiAgJi0tbGFiZWxsZWQge1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4ycyAkZWFzZS1vdXQtcXVhcnQ7XG4gICAgbWFyZ2luLXRvcDogJGZvcm0tc3BhY2luZy1oYWxmO1xuXG4gICAgJjpoYXMoLmRpdG8tc2NoZW1hLS1vcGVuKSB7XG4gICAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBOZXN0aW5nIGlzIG5lZWRlZCB0byBtYWtlIGFuIGFycm93IGFwcGVhciBvdmVyIHRoZSBzZWxlY3QgaXRlbTpcbi5kaXRvLXNlbGVjdFxuICAuZGl0by1zZWxlY3RfX2lubmVyXG4gICAgc2VsZWN0KFxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIEBtb3VzZWRvd249XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgICAgQGZvY3VzPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cInBvcHVsYXRlXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBvcHRncm91cChcbiAgICAgICAgICAgIHYtaWY9XCJncm91cEJ5XCJcbiAgICAgICAgICAgIDpsYWJlbD1cIm9wdGlvbltncm91cEJ5TGFiZWxdXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICAgIHYtZm9yPVwib3B0IGluIG9wdGlvbltncm91cEJ5T3B0aW9uc11cIlxuICAgICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHQpXCJcbiAgICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0KSB9fVxuICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwic2VsZWN0ZWRPcHRpb25cIlxuICAgICAgKVxuICAgICAgICBvcHRpb24oOnZhbHVlPVwic2VsZWN0ZWRWYWx1ZVwiKSB7eyBnZXRMYWJlbEZvck9wdGlvbihzZWxlY3RlZE9wdGlvbikgfX1cbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIClcbiAgLy8tIEVkaXQgYnV0dG9uIGlzIG5ldmVyIGRpc2FibGVkLCBldmVuIGlmIHRoZSBmaWVsZCBpcyBkaXNhYmxlZC5cbiAgRGl0b0VkaXRCdXR0b25zKFxuICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZmFsc2VcIlxuICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VsZWN0Jywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIERpc2FibGUgbGF6eS1wb3B1bGF0aW9uIGZvciBub3cuXG4gICAgICAvLyBUT0RPOiBTZXQgdG8gYGZhbHNlYCBPbmNlIGxpbmV0byBlMmUgdGVzdHMgYWRkcmVzcyB0aGVpciBpc3N1ZXMuXG4gICAgICBwb3B1bGF0ZTogdHJ1ZVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi8vIFRPRE86IE1vdmUgdG8gZGl0by11aVxuJHNlbGVjdC1hcnJvdy1yaWdodDogY2FsYygoJHNlbGVjdC1hcnJvdy13aWR0aCAtICRzZWxlY3QtYXJyb3ctc2l6ZSkgLyAyKTtcblxuLmRpdG8tc2VsZWN0IHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICBzZWxlY3Qge1xuICAgIEBleHRlbmQgJWlucHV0O1xuXG4gICAgcGFkZGluZy1yaWdodDogJHNlbGVjdC1hcnJvdy13aWR0aDtcbiAgfVxuXG4gIC8vIGAmX19faW5uZXJgIGlzIG5lZWRlZCB0byBtYWtlIHRoZSBlZGl0IGJ1dHRvbnMgYXBwZWFyIHRvIHRoZSByaWdodCBvZiB0aGVcbiAgLy8gc2VsZWN0OlxuICAmX19pbm5lciB7XG4gICAgZmxleDogMTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgQGluY2x1ZGUgYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKTtcblxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbTtcbiAgICAgIHJpZ2h0OiBjYWxjKCN7JHNlbGVjdC1hcnJvdy1yaWdodH0gKyAjeyRib3JkZXItd2lkdGh9KTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1lZGl0LWJ1dHRvbnMge1xuICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gIH1cblxuICAvLyBIYW5kbGUgLmRpdG8td2lkdGgtZmlsbCBzZXBhcmF0ZWx5IGR1ZSB0byByZXF1aXJlZCBuZXN0aW5nIG9mIHNlbGVjdDpcbiAgJi5kaXRvLXdpZHRoLWZpbGwge1xuICAgIHNlbGVjdCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cblxuICAmLmRpdG8tZGlzYWJsZWQ6OmFmdGVyIHtcbiAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc2xpZGVyXG4gIGlucHV0LmRpdG8tcmFuZ2UoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB0eXBlPVwicmFuZ2VcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuICBJbnB1dEZpZWxkLmRpdG8tbnVtYmVyKFxuICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHR5cGU9XCJudW1iZXJcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NsaWRlcicsIHtcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dJbnB1dGA/XG4gICAgaW5wdXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdpbnB1dCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNsaWRlciB7XG4gIEBleHRlbmQgJWlucHV0O1xuXG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgLmRpdG8tcmFuZ2Uge1xuICAgIGZsZXg6IGF1dG87XG4gICAgaGVpZ2h0OiBjYWxjKDFlbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSk7XG4gIH1cblxuICAuZGl0by1udW1iZXIge1xuICAgIGJvcmRlcjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuU3dpdGNoQnV0dG9uLmRpdG8tc3dpdGNoKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICA6bGFiZWxzPVwibGFiZWxzXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgU3dpdGNoQnV0dG9uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc3dpdGNoJywge1xuICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcblxuICBjb21wb25lbnRzOiB7XG4gICAgU3dpdGNoQnV0dG9uXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsYWJlbHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGFiZWxzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc3dpdGNoIHtcbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGw7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBnZXREZWZhdWx0VmFsdWUgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wdXRlZDoge1xuICAgIHRyaW06IGdldFNjaGVtYUFjY2Vzc29yKCd0cmltJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgIGlmIChzY2hlbWEudHJpbSAmJiB2YWx1ZSAhPSBudWxsICYmIGlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgLy8gVGV4dCBmaWVsZHMgZG9uJ3QgbmVjZXNzYXJpbHkgaGF2ZSBhIGBTdHJpbmdgIHZhbHVlIHdoZW4gYGZvcm1hdCgpYFxuICAgICAgLy8gd2l0aG91dCBgcGFyc2UoKWAgaXMgdXNlZC5cbiAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpXG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgIHZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSlcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5JbnB1dEZpZWxkLmRpdG8tdGV4dChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICA6dHlwZT1cImlucHV0VHlwZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgVGV4dE1peGluIGZyb20gJy4uL21peGlucy9UZXh0TWl4aW4nXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbmNvbnN0IG1hc2tlZFBhc3N3b3JkID0gJyoqKioqKioqKioqKioqKionXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbXG4gICAgJ3RleHQnLFxuICAgICdlbWFpbCcsXG4gICAgJ3VybCcsXG4gICAgJ2hvc3RuYW1lJyxcbiAgICAnZG9tYWluJyxcbiAgICAndGVsJyxcbiAgICAncGFzc3dvcmQnLFxuICAgICdjcmVkaXRjYXJkJ1xuICBdLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgbWl4aW5zOiBbVGV4dE1peGluXSxcbiAgICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgICB0ZXh0RmllbGQ6IHRydWUsXG4gICAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gc2NoZW1hLnR5cGUgPT09ICdwYXNzd29yZCcsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgaW5wdXRUeXBlKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNyZWRpdGNhcmQ6ICd0ZXh0JyxcbiAgICAgICAgICAgIGhvc3RuYW1lOiAndGV4dCcsXG4gICAgICAgICAgICBkb21haW46ICd0ZXh0J1xuICAgICAgICAgIH1bdGhpcy50eXBlXSB8fFxuICAgICAgICAgIHRoaXMudHlwZVxuICAgICAgICApXG4gICAgICB9LFxuXG4gICAgICBpbnB1dFZhbHVlOiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy50eXBlID09PSAncGFzc3dvcmQnICYmXG4gICAgICAgICAgICB0aGlzLnZhbHVlID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICF0aGlzLmZvY3VzZWRcbiAgICAgICAgICApXG4gICAgICAgICAgICA/IG1hc2tlZFBhc3N3b3JkXG4gICAgICAgICAgICA6IHRoaXMudmFsdWVcbiAgICAgICAgfSxcblxuICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgICAgY29uc3QgcnVsZSA9IHtcbiAgICAgICAgICBlbWFpbDogJ2VtYWlsJyxcbiAgICAgICAgICB1cmw6ICd1cmwnLFxuICAgICAgICAgIGhvc3RuYW1lOiAnaG9zdG5hbWUnLFxuICAgICAgICAgIGRvbWFpbjogJ2RvbWFpbicsXG4gICAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZCcsXG4gICAgICAgICAgY3JlZGl0Y2FyZDogJ2NyZWRpdGNhcmQnXG4gICAgICAgIH1bdGhpcy50eXBlXVxuICAgICAgICByZXR1cm4gcnVsZSA/IHsgW3J1bGVdOiB0cnVlIH0gOiB7fVxuICAgICAgfVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGV4dGFyZWEuZGl0by10ZXh0YXJlYS5kaXRvLWlucHV0KFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgOnJvd3M9XCJsaW5lc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tcmVzaXphYmxlJzogcmVzaXphYmxlIH1cIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUZXh0TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1RleHRNaXhpbidcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndGV4dGFyZWEnLCB7XG4gIG1peGluczogW1RleHRNaXhpbl0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCA0XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10ZXh0YXJlYSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICByZXNpemU6IG5vbmU7XG4gIG1pbi1oZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpICsgI3syICogJGlucHV0LXBhZGRpbmctdmVyfSk7XG5cbiAgJi5kaXRvLXJlc2l6YWJsZSB7XG4gICAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10cmVlLWxpc3RcbiAgRGl0b1Njb3BlcyhcbiAgICB2LWlmPVwic2NvcGVzXCJcbiAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gIClcbiAgLmRpdG8tdHJlZS1wYW5lbFxuICAgIERpdG9UcmVlSXRlbShcbiAgICAgIDpzY2hlbWE9XCJ0cmVlU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cInRyZWVEYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cInRyZWVEYXRhXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOm9wZW49XCJ0cnVlXCJcbiAgICApXG4gICAgLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJoYXNFZGl0YWJsZUZvcm1zXCJcbiAgICApXG4gICAgICAvLy0gSW5jbHVkZSBhIHJvdXRlci12aWV3IGZvciB0aGUgb3B0aW9uYWwgRGl0b0Zvcm1JbmxpbmVkXG4gICAgICBSb3V0ZXJWaWV3XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7XG4gIGhhc0Zvcm1TY2hlbWEsXG4gIGdldEZvcm1TY2hlbWFzLFxuICByZXNvbHZlU2NoZW1hQ29tcG9uZW50c1xufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ3RyZWUtbGlzdCcsICd0cmVlLW9iamVjdCddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gICAgcHJvdmlkZSgpIHtcbiAgICAgIHJldHVybiB7IGNvbnRhaW5lcjogdGhpcyB9XG4gICAgfSxcblxuICAgIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgICAgcmV0dXJuIHR5cGUgPT09ICd0cmVlLW9iamVjdCcgPyAnb2JqZWN0JyA6ICdsaXN0J1xuICAgIH0sXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgcGF0aCgpIHtcbiAgICAgICAgLy8gQWNjZXNzZWQgZnJvbSBEaXRvVHJlZUl0ZW0gdGhyb3VnaCBgY29udGFpbmVyLnBhdGhgOlxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py5wYXRoXG4gICAgICB9LFxuXG4gICAgICBlZGl0UGF0aCgpIHtcbiAgICAgICAgLy8gQWNjZXNzZWQgZnJvbSBEaXRvVHJlZUl0ZW0gdGhyb3VnaCBgY29udGFpbmVyLmVkaXRQYXRoYDpcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGguc2xpY2UodGhpcy5wYXRoPy5sZW5ndGgpXG4gICAgICB9LFxuXG4gICAgICB0cmVlRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgPyB7IFt0aGlzLm5hbWVdOiB0aGlzLnZhbHVlIH1cbiAgICAgICAgICA6IHRoaXMudmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHRyZWVEYXRhUGF0aCgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGBuYW1lYCBmcm9tIGBkYXRhUGF0aGAsIGFzIGl0IGlzIGFkZGVkXG4gICAgICAgIC8vIHRvIGB0cmVlRGF0YWAgYW5kIGB0cmVlU2NoZW1hYFxuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICA/IHRoaXMuZGF0YVBhdGguc2xpY2UoMCwgdGhpcy5kYXRhUGF0aC5sZW5ndGggLSB0aGlzLm5hbWUubGVuZ3RoKVxuICAgICAgICAgIDogdGhpcy5kYXRhUGF0aFxuICAgICAgfSxcblxuICAgICAgdHJlZVNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuc2NoZW1hXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHRoaXMuc2NoZW1hXG4gICAgICB9LFxuXG4gICAgICBoYXNFZGl0YWJsZUZvcm1zKCkge1xuICAgICAgICBjb25zdCBoYXNFZGl0YWJsZUZvcm1zID0gc2NoZW1hID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmIChcbiAgICAgICAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZWRpdGFibGUnLCB7XG4gICAgICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzY2hlbWFcbiAgICAgICAgICAgICAgfSkgfHxcbiAgICAgICAgICAgICAgc2NoZW1hLmNoaWxkcmVuICYmXG4gICAgICAgICAgICAgIGhhc0VkaXRhYmxlRm9ybXMoc2NoZW1hLmNoaWxkcmVuKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzRWRpdGFibGVGb3Jtcyh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYSxcbiAgICAgIG5hbWUsXG4gICAgICByb3V0ZXMsXG4gICAgICBsZXZlbCxcbiAgICAgIG5lc3RlZCA9IHRydWUsXG4gICAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgICBwcm9jZXNzID0gbnVsbFxuICAgICkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICByZXNvbHZlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEucHJvcGVydGllcyksXG4gICAgICAgIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgICAgYXBpLFxuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHJvdXRlcyxcbiAgICAgICAgICBsZXZlbCxcbiAgICAgICAgICBuZXN0ZWQsXG4gICAgICAgICAgZmxhdHRlbixcbiAgICAgICAgICAvLyBQYXNzIHByb2Nlc3MoKSB0byBhZGQgbW9yZSByb3V0ZXMgdG8gY2hpbGRSb3V0ZXM6XG4gICAgICAgICAgKGNoaWxkUm91dGVzLCBsZXZlbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gc2NoZW1hXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgLy8gQWRkIGB0eXBlYCB0byB0aGUgbmVzdGVkIHRyZWUgbGlzdC5cbiAgICAgICAgICAgICAgY2hpbGRyZW4udHlwZSA9ICd0cmVlLWxpc3QnXG4gICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNhbGwgYHByb2Nlc3NTY2hlbWEoKWAgZm9yIHRoZSBuZXN0ZWQgdHJlZSBsaXN0OlxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2NoZW1hKFxuICAgICAgICAgICAgICAgIGFwaSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5uYW1lLFxuICAgICAgICAgICAgICAgIGNoaWxkUm91dGVzLFxuICAgICAgICAgICAgICAgIGxldmVsLFxuICAgICAgICAgICAgICAgIG5lc3RlZCxcbiAgICAgICAgICAgICAgICB0cnVlLCAvLyBQYXNzIGB0cnVlYCBmb3IgYGZsYXR0ZW5gIGluIHRyZWUgbGlzdHMuXG4gICAgICAgICAgICAgICAgcHJvY2Vzc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdKVxuICAgIH0sXG5cbiAgICBnZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3Npbmcoc2NoZW1hLCBjb250ZXh0KSB7XG4gICAgICAvLyBDb252ZXJ0IG5lc3RlZCBjaGlsZHJlbiBzY2hlbWEgdG8gc3RhbmQtYWxvbmUgc2NoZW1hIGNvbXBvbmVudCxcbiAgICAgIC8vIHByZXNlbnQgaW4gZWFjaCBvZiB0aGUgZm9ybXMsIGFzIHJlcXVpcmVkIGJ5IGBwcm9jZXNzU2NoZW1hRGF0YSgpYFxuICAgICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gc2NoZW1hXG4gICAgICByZXR1cm4gZ2V0Rm9ybVNjaGVtYXMoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICAgICA/IGZvcm0gPT4gKHtcbiAgICAgICAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgICAgIC4uLmZvcm0uY29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICBbY2hpbGRyZW4ubmFtZV06IGNoaWxkcmVuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBudWxsXG4gICAgICApXG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10cmVlLWxpc3Qge1xuICBAZXh0ZW5kICVmaWVsZDtcblxuICAuZGl0by10cmVlLXBhbmVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAgID4gLmRpdG8tdHJlZS1pdGVtIHtcbiAgICAgIGZsZXg6IDEgMSAyNSU7XG4gICAgfVxuXG4gICAgPiAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyIHtcbiAgICAgIGZsZXg6IDAgMSA3NSU7XG4gICAgICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlO1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMTtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDE7XG4gICAgICBtYXJnaW46ICgtJGlucHV0LXBhZGRpbmctdmVyKSAoLSRpbnB1dC1wYWRkaW5nLWhvcik7XG4gICAgICBtYXJnaW4tbGVmdDogJGlucHV0LXBhZGRpbmctaG9yO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGZpbGVzaXplIH0gZnJvbSAnZmlsZXNpemUnXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRGaWxlU2l6ZShzaXplKSB7XG4gIHJldHVybiBmaWxlc2l6ZShzaXplLCB7IGJhc2U6IDEwIH0pXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdXBsb2FkXG4gIC8vLSBJbiBvcmRlciB0byBoYW5kbGUgdXBsb2FkIGJ1dHRvbnMgaW4gbXVsdGlwbGUgcG9zc2libGUgcGxhY2VzLCBkZXBlbmRpbmdcbiAgLy8tIG9uIHdoZXRoZXIgdGhleSBoYW5kbGUgc2luZ2xlIG9yIG11bHRpcGxlIHVwbG9hZHMsIHJlbmRlciB0aGUgdXBsb2FkXG4gIC8vLSBjb21wb25lbnQgaW52aXNpYmx5IGF0IHRoZSByb290LCBhbmQgZGVsZWdhdGUgdGhlIGNsaWNrIGV2ZW50cyB0byBpdCBmcm9tXG4gIC8vLSB0aGUgYnV0dG9ucyByZW5kZXJlZCBmdXJ0aGVyIGJlbG93LiBMdWNraWx5IHRoaXMgd29ya3Mgc3VycHJpc2luZ2x5IHdlbGwuXG4gIFZ1ZVVwbG9hZC5kaXRvLXVwbG9hZF9faW5wdXQoXG4gICAgcmVmPVwidXBsb2FkXCJcbiAgICB2LW1vZGVsPVwidXBsb2Fkc1wiXG4gICAgOmlucHV0SWQ9XCJkYXRhUGF0aFwiXG4gICAgOm5hbWU9XCJkYXRhUGF0aFwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpwb3N0QWN0aW9uPVwidXBsb2FkUGF0aFwiXG4gICAgOmV4dGVuc2lvbnM9XCJleHRlbnNpb25zXCJcbiAgICA6YWNjZXB0PVwiYWNjZXB0XCJcbiAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgOnNpemU9XCJtYXhTaXplXCJcbiAgICA6ZHJvcD1cIiRlbD8uY2xvc2VzdCgnLmRpdG8tY29udGFpbmVyJylcIlxuICAgIDpkcm9wRGlyZWN0b3J5PVwidHJ1ZVwiXG4gICAgQGlucHV0LWZpbHRlcj1cIm9uSW5wdXRGaWx0ZXJcIlxuICAgIEBpbnB1dC1maWxlPVwib25JbnB1dEZpbGVcIlxuICApXG4gIHRhYmxlLmRpdG8tdGFibGUuZGl0by10YWJsZS1zZXBhcmF0b3JzLmRpdG8tdGFibGUtYmFja2dyb3VuZFxuICAgIC8vLSBTdHlsaW5nIGNvbWVzIGZyb20gYERpdG9UYWJsZUhlYWRgXG4gICAgdGhlYWQuZGl0by10YWJsZS1oZWFkXG4gICAgICB0clxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gRmlsZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU2l6ZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU3RhdHVzXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhblxuICAgIERpdG9EcmFnZ2FibGUoXG4gICAgICB2LW1vZGVsPVwiZmlsZXNcIlxuICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgOm9wdGlvbnM9XCJnZXREcmFnZ2FibGVPcHRpb25zKClcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJtdWx0aXBsZSB8fCAhaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgKVxuICAgICAgICB0cihcbiAgICAgICAgICB2LWZvcj1cIihmaWxlLCBpbmRleCkgaW4gZmlsZXNcIlxuICAgICAgICAgIDprZXk9XCJmaWxlLm5hbWVcIlxuICAgICAgICApXG4gICAgICAgICAgdGQoXG4gICAgICAgICAgICB2LWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlckZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgdGQoXG4gICAgICAgICAgICB2LWVsc2UtaWY9XCJkb3dubG9hZFVybHNbaW5kZXhdXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBhKFxuICAgICAgICAgICAgICA6ZG93bmxvYWQ9XCJmaWxlLm5hbWVcIlxuICAgICAgICAgICAgICA6aHJlZj1cImRvd25sb2FkVXJsc1tpbmRleF1cIlxuICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cIm9uQ2xpY2tEb3dubG9hZChmaWxlLCBpbmRleClcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBEaXRvVXBsb2FkRmlsZShcbiAgICAgICAgICAgICAgICA6ZmlsZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgIDp0aHVtYm5haWw9XCJ0aHVtYm5haWxzXCJcbiAgICAgICAgICAgICAgICA6dGh1bWJuYWlsVXJsPVwidGh1bWJuYWlsVXJsc1tpbmRleF1cIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgdGQoXG4gICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICApXG4gICAgICAgICAgICBEaXRvVXBsb2FkRmlsZShcbiAgICAgICAgICAgICAgOmZpbGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgOnRodW1ibmFpbD1cInRodW1ibmFpbHNcIlxuICAgICAgICAgICAgICA6dGh1bWJuYWlsVXJsPVwidGh1bWJuYWlsVXJsc1tpbmRleF1cIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIHRkLmRpdG8tdXBsb2FkX19zaXplIHt7IGZvcm1hdEZpbGVTaXplKGZpbGUuc2l6ZSkgfX1cbiAgICAgICAgICB0ZC5kaXRvLXVwbG9hZF9fc3RhdHVzXG4gICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgdi1pZj1cImZpbGUudXBsb2FkXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgdi1pZj1cImZpbGUudXBsb2FkLmVycm9yXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIHwgRXJyb3I6IHt7IGZpbGUudXBsb2FkLmVycm9yIH19XG4gICAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLmFjdGl2ZVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB8IFVwbG9hZGluZy4uLlxuICAgICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5zdWNjZXNzXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIHwgVXBsb2FkZWRcbiAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfCBTdG9yZWRcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zXG4gICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tdXBsb2FkKFxuICAgICAgICAgICAgICAgIHYtaWY9XCIhbXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgIDp0aXRsZT1cInVwbG9hZFRpdGxlXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJvbkNsaWNrVXBsb2FkXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cImRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgKVxuICAgIHRmb290KFxuICAgICAgdi1pZj1cIm11bHRpcGxlIHx8IGlzVXBsb2FkQWN0aXZlIHx8ICFoYXNGaWxlc1wiXG4gICAgKVxuICAgICAgdHJcbiAgICAgICAgdGQoOmNvbHNwYW49XCI0XCIpXG4gICAgICAgICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgICAgICAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwidXBsb2FkUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gZmFsc2VcIlxuICAgICAgICAgICAgICApIENhbmNlbFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tdXBsb2FkKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJtdWx0aXBsZSB8fCAhaGFzRmlsZXNcIlxuICAgICAgICAgICAgICAgIDp0aXRsZT1cInVwbG9hZFRpdGxlXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJvbkNsaWNrVXBsb2FkXCJcbiAgICAgICAgICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3J0YWJsZU1peGluIGZyb20gJy4uL21peGlucy9Tb3J0YWJsZU1peGluLmpzJ1xuaW1wb3J0IHBhcnNlRmlsZVNpemUgZnJvbSAnZmlsZXNpemUtcGFyc2VyJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGZvcm1hdEZpbGVTaXplIH0gZnJvbSAnLi4vdXRpbHMvdW5pdHMuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBWdWVVcGxvYWQgZnJvbSAndnVlLXVwbG9hZC1jb21wb25lbnQnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndXBsb2FkJywge1xuICBtaXhpbnM6IFtTb3J0YWJsZU1peGluXSxcbiAgY29tcG9uZW50czogeyBWdWVVcGxvYWQgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB1cGxvYWRzOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHVwbG9hZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLnVwbG9hZFxuICAgIH0sXG5cbiAgICB1cGxvYWRUaXRsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlID8gJ1VwbG9hZCBGaWxlcycgOiAnVXBsb2FkIEZpbGUnXG4gICAgfSxcblxuICAgIGZpbGVzKCkge1xuICAgICAgcmV0dXJuIGFzRmlsZXModGhpcy52YWx1ZSlcbiAgICB9LFxuXG4gICAgZG93bmxvYWRVcmxzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZXMubWFwKChmaWxlLCBpbmRleCkgPT4gdGhpcy5nZXREb3dubG9hZFVybChmaWxlLCBpbmRleCkpXG4gICAgfSxcblxuICAgIHRodW1ibmFpbFVybHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWxlcy5tYXAoKGZpbGUsIGluZGV4KSA9PiB0aGlzLmdldFRodW1ibmFpbFVybChmaWxlLCBpbmRleCkpXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBObyBjYWxsYmFjayBhcyBpdCdzIHVzZWQgaW4gYHByb2Nlc3NWYWx1ZSgpYFxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBleHRlbnNpb25zOiBnZXRTY2hlbWFBY2Nlc3NvcignZXh0ZW5zaW9ucycsIHtcbiAgICAgIHR5cGU6IFtBcnJheSwgU3RyaW5nLCBSZWdFeHBdXG4gICAgfSksXG5cbiAgICBhY2NlcHQ6IGdldFNjaGVtYUFjY2Vzc29yKCdhY2NlcHQnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldChhY2NlcHQpIHtcbiAgICAgICAgcmV0dXJuIGlzQXJyYXkoYWNjZXB0KSA/IGFjY2VwdC5qb2luKCcsJykgOiBhY2NlcHRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heFNpemU6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXhTaXplJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGdldChtYXhTaXplKSB7XG4gICAgICAgIHJldHVybiBtYXhTaXplID8gcGFyc2VGaWxlU2l6ZShtYXhTaXplKSA6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gZHJhZ2dhYmxlICYmIHRoaXMuZmlsZXMubGVuZ3RoID4gMVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICByZW5kZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdyZW5kZXInLCB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIHRodW1ibmFpbHM6IGdldFNjaGVtYUFjY2Vzc29yKCd0aHVtYm5haWxzJywge1xuICAgICAgdHlwZTogW0Jvb2xlYW4sIFN0cmluZ10sXG4gICAgICBkZWZhdWx0KHRodW1ibmFpbHMpIHtcbiAgICAgICAgcmV0dXJuIHRodW1ibmFpbHMgPz8gISF0aGlzLnNjaGVtYS50aHVtYm5haWxVcmxcbiAgICAgIH0sXG4gICAgICBnZXQodGh1bWJuYWlscykge1xuICAgICAgICByZXR1cm4gdGh1bWJuYWlscyA9PT0gdHJ1ZSA/ICdtZWRpdW0nIDogdGh1bWJuYWlscyB8fCBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBoYXNGaWxlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbGVzLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgaGFzVXBsb2FkcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZHMubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBpc1VwbG9hZFJlYWR5KCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5oYXNVcGxvYWRzICYmXG4gICAgICAgICEodGhpcy51cGxvYWQuYWN0aXZlIHx8IHRoaXMudXBsb2FkLnVwbG9hZGVkKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1VwbG9hZEFjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc1VwbG9hZHMgJiYgdGhpcy51cGxvYWQuYWN0aXZlXG4gICAgfSxcblxuICAgIHVwbG9hZFByb2dyZXNzKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy51cGxvYWRzLnJlZHVjZSgodG90YWwsIGZpbGUpID0+IHRvdGFsICsgK2ZpbGUucHJvZ3Jlc3MsIDApIC9cbiAgICAgICAgdGhpcy51cGxvYWRzLmxlbmd0aFxuICAgICAgKVxuICAgIH0sXG5cbiAgICB1cGxvYWRQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VVcmwoe1xuICAgICAgICB0eXBlOiAndXBsb2FkJyxcbiAgICAgICAgcGF0aDogdGhpcy5hcGkubm9ybWFsaXplUGF0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBpc1VwbG9hZFJlYWR5KHJlYWR5KSB7XG4gICAgICBpZiAocmVhZHkpIHtcbiAgICAgICAgLy8gQXV0by11cGxvYWQuXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnVwbG9hZC5hY3RpdmUgPSB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb3JtYXRGaWxlU2l6ZSxcblxuICAgIGdldEZpbGVDb250ZXh0KGZpbGUsIGluZGV4KSB7XG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZVxuICAgICAgICA/IG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICB2YWx1ZTogZmlsZSxcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuZmlsZXMsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICB9KVxuICAgICAgICA6IHRoaXMuY29udGV4dFxuICAgIH0sXG5cbiAgICByZW5kZXJGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXIodGhpcy5nZXRGaWxlQ29udGV4dChmaWxlLCBpbmRleCkpXG4gICAgfSxcblxuICAgIGdldERvd25sb2FkVXJsKGZpbGUsIGluZGV4KSB7XG4gICAgICByZXR1cm4gZmlsZS51cmxcbiAgICAgICAgPyBmaWxlLnVybFxuICAgICAgICA6ICFmaWxlLnVwbG9hZCB8fCBmaWxlLnVwbG9hZC5zdWNjZXNzXG4gICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdkb3dubG9hZFVybCcsIHtcbiAgICAgICAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHRoaXMuZ2V0RmlsZUNvbnRleHQoZmlsZSwgaW5kZXgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBnZXRUaHVtYm5haWxVcmwoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiAhZmlsZS51cGxvYWQgfHwgZmlsZS51cGxvYWQuc3VjY2Vzc1xuICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3RodW1ibmFpbFVybCcsIHtcbiAgICAgICAgICAgIHR5cGU6ICdTdHJpbmcnLFxuICAgICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICAgIGNvbnRleHQ6IHRoaXMuZ2V0RmlsZUNvbnRleHQoZmlsZSwgaW5kZXgpXG4gICAgICAgICAgfSkgfHwgKFxuICAgICAgICAgICAgZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpXG4gICAgICAgICAgICAgID8gZmlsZS51cmxcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgKVxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgZGVsZXRlRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgY29uc3QgeyBuYW1lIH0gPSBmaWxlXG5cbiAgICAgIGlmIChcbiAgICAgICAgZmlsZSAmJlxuICAgICAgICB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICBgRG8geW91IHJlYWxseSB3YW50IHRvICR7dGhpcy52ZXJicy5yZW1vdmV9ICR7bmFtZX0/YFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGlmIChmaWxlLnVwbG9hZCkge1xuICAgICAgICAgIHRoaXMudXBsb2FkLnJlbW92ZShmaWxlLnVwbG9hZClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICB0aXRsZTogJ1N1Y2Nlc3NmdWxseSBSZW1vdmVkJyxcbiAgICAgICAgICB0ZXh0OiBgJHtuYW1lfSB3YXMgJHt0aGlzLnZlcmJzLmRlbGV0ZWR9LmBcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RmlsZUluZGV4KGZpbGUpIHtcbiAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlICYmIHRoaXMudmFsdWVcbiAgICAgICAgPyB0aGlzLnZhbHVlLmZpbmRJbmRleChpdCA9PiBpdC5pZCA9PT0gZmlsZS5pZClcbiAgICAgICAgOiAtMVxuICAgIH0sXG5cbiAgICBhZGRGaWxlKGZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKGZpbGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IFtmaWxlXVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gZmlsZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXBsYWNlRmlsZShmaWxlLCBuZXdGaWxlKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0RmlsZUluZGV4KGZpbGUpXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5ld0ZpbGUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVbaW5kZXhdID0gbmV3RmlsZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXdGaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbW92ZUZpbGUoZmlsZSkge1xuICAgICAgdGhpcy5yZXBsYWNlRmlsZShmaWxlLCBudWxsKVxuICAgIH0sXG5cbiAgICBvbklucHV0RmlsZShuZXdGaWxlLCBvbGRGaWxlKSB7XG4gICAgICBpZiAobmV3RmlsZSAmJiAhb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IGlkLCBuYW1lLCBzaXplIH0gPSBuZXdGaWxlXG4gICAgICAgIHRoaXMuYWRkRmlsZSh7IGlkLCBuYW1lLCBzaXplLCB1cGxvYWQ6IG5ld0ZpbGUgfSlcbiAgICAgIH1cbiAgICAgIGlmIChuZXdGaWxlICYmIG9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBzdWNjZXNzLCBlcnJvciB9ID0gbmV3RmlsZVxuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICAgIGNvbnN0IGZpbGUgPSBuZXdGaWxlLnJlc3BvbnNlWzBdXG4gICAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICAgIGZpbGUudXBsb2FkID0gbmV3RmlsZVxuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgdXBsb2FkIGZpbGUgb2JqZWN0IHdpdGggdGhlIGZpbGUgb2JqZWN0IHJlY2VpdmVkXG4gICAgICAgICAgICAvLyBmcm9tIHRoZSB1cGxvYWQgcmVzcG9uc2UuXG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VGaWxlKG5ld0ZpbGUsIGZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlcnJvcikge1xuICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICAgIGNvbnN0IHRleHQgPSAoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFib3J0OiAnVXBsb2FkIGFib3J0ZWQnLFxuICAgICAgICAgICAgICBkZW5pZWQ6ICdVcGxvYWQgZGVuaWVkJyxcbiAgICAgICAgICAgICAgZXh0ZW5zaW9uOiBgVW5zdXBwb3J0ZWQgZmlsZS10eXBlOiAke25ld0ZpbGUubmFtZX1gLFxuICAgICAgICAgICAgICBuZXR3b3JrOiAnTmV0d29yayBlcnJvciBlbmNvdW50ZXJlZCBkdXJpbmcgdXBsb2FkJyxcbiAgICAgICAgICAgICAgc2VydmVyOiAnU2VydmVyIGVycm9yIG9jY3VycmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgICBzaXplOiBgRmlsZSBpcyB0b28gbGFyZ2U6ICR7Zm9ybWF0RmlsZVNpemUobmV3RmlsZS5zaXplKX1gLFxuICAgICAgICAgICAgICB0aW1lb3V0OiAnVGltZW91dCBvY2N1cnJlZCBkdXJpbmcgdXBsb2FkJ1xuICAgICAgICAgICAgfVtlcnJvcl0gfHxcbiAgICAgICAgICAgIGBVbmtub3duIEZpbGUgVXBsb2FkIEVycm9yOiAnJHtlcnJvcn0nYFxuICAgICAgICAgIClcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdGaWxlIFVwbG9hZCBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbklucHV0RmlsdGVyKG5ld0ZpbGUgLyosIG9sZEZpbGUsIHByZXZlbnQgKi8pIHtcbiAgICAgIGNvbnN0IHhociA9IG5ld0ZpbGU/LnhoclxuICAgICAgaWYgKHRoaXMuYXBpLmNvcnM/LmNyZWRlbnRpYWxzICYmIHhociAmJiAheGhyLndpdGhDcmVkZW50aWFscykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrRG93bmxvYWQoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godGhpcy5kb3dubG9hZFVybHNbaW5kZXhdKVxuICAgICAgICBjb25zdCBibG9iID0gYXdhaXQgcmVzcG9uc2UuYmxvYigpXG4gICAgICAgIHRoaXMuZG93bmxvYWQoe1xuICAgICAgICAgIGZpbGVuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgdXJsOiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkNsaWNrVXBsb2FkKGV2ZW50KSB7XG4gICAgICAvLyBEZWxlZ2F0ZSB0aGUgY2xpY2sgZXZlbnQgdG8gdGhlIGhpZGRlbiBmaWxlIGlucHV0LlxuICAgICAgdGhpcy51cGxvYWQuJGVsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IGV2ZW50LmNvbnN0cnVjdG9yKGV2ZW50LnR5cGUsIGV2ZW50KVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgIC8vIEZpbHRlciBvdXQgYWxsIG5ld2x5IGFkZGVkIGZpbGVzIHRoYXQgd2VyZW4ndCBhY3R1YWxseSB1cGxvYWRlZC5cbiAgICBjb25zdCBmaWxlcyA9IGFzRmlsZXModmFsdWUpXG4gICAgICAubWFwKCh7IHVwbG9hZCwgLi4uZmlsZSB9KSA9PiAoIXVwbG9hZCB8fCB1cGxvYWQuc3VjY2VzcyA/IGZpbGUgOiBudWxsKSlcbiAgICAgIC5maWx0ZXIoZmlsZSA9PiBmaWxlKVxuICAgIHJldHVybiBzY2hlbWEubXVsdGlwbGUgPyBmaWxlcyA6IGZpbGVzWzBdIHx8IG51bGxcbiAgfVxufSlcblxuZnVuY3Rpb24gYXNGaWxlcyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPyBhc0FycmF5KHZhbHVlKSA6IFtdXG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by11cGxvYWQge1xuICAuZGl0by10YWJsZSB7XG4gICAgdHIsXG4gICAgLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMge1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB9XG4gIH1cblxuICAmX19zaXplLFxuICAmX19zdGF0dXMge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cblxuICAmICZfX2lucHV0IHtcbiAgICAvLyBTZWUgYG9uQ2xpY2tVcGxvYWQoKWAgbWV0aG9kIGZvciBkZXRhaWxzLlxuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG5cbiAgJl9fZm9vdGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAgIC5kaXRvLXByb2dyZXNzIHtcbiAgICAgIGZsZXg6IGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmc7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbW91bnRlZChub2RlLCBiaW5kaW5nKSB7XG4gICAgb2JzZXJ2ZVJlc2l6ZShub2RlLCBiaW5kaW5nLnZhbHVlLCBiaW5kaW5nLmFyZylcbiAgfSxcblxuICB1bm1vdW50ZWQobm9kZSwgYmluZGluZykge1xuICAgIHVub2JzZXJ2ZVJlc2l6ZShub2RlLCBiaW5kaW5nLnZhbHVlLCBiaW5kaW5nLmFyZylcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2ZVJlc2l6ZShub2RlLCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gIE9ic2VydmVyLmdldE9ic2VydmVyKG9wdGlvbnMpLm9ic2VydmUobm9kZSwgaGFuZGxlcilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVub2JzZXJ2ZVJlc2l6ZShub2RlLCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gIE9ic2VydmVyLmdldE9ic2VydmVyKG9wdGlvbnMpLnVub2JzZXJ2ZShub2RlLCBoYW5kbGVyKVxufVxuXG5leHBvcnQgY29uc3QgaXNSZXNpemVTdXBwb3J0ZWQgPSB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnXG5cbmNvbnN0IG9ic2VydmVycyA9IHt9XG5cbmNsYXNzIE9ic2VydmVyIHtcbiAgY29uc3RydWN0b3Ioa2V5LCBvcHRpb25zKSB7XG4gICAgdGhpcy5rZXkgPSBrZXlcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG4gICAgdGhpcy5vYnNlcnZlciA9IGlzUmVzaXplU3VwcG9ydGVkXG4gICAgICA/IG5ldyBSZXNpemVPYnNlcnZlcihlbnRyaWVzID0+IHRoaXMuaGFuZGxlKGVudHJpZXMpKVxuICAgICAgOiBudWxsXG4gICAgdGhpcy5oYW5kbGVyc0J5Tm9kZSA9IG5ldyBXZWFrTWFwKClcbiAgICB0aGlzLm5vZGVDb3VudCA9IDBcbiAgfVxuXG4gIG9ic2VydmUobm9kZSwgaGFuZGxlcikge1xuICAgIGxldCBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnNCeU5vZGUuZ2V0KG5vZGUpXG4gICAgaWYgKCFoYW5kbGVycykge1xuICAgICAgaGFuZGxlcnMgPSBuZXcgU2V0KClcbiAgICAgIHRoaXMuaGFuZGxlcnNCeU5vZGUuc2V0KG5vZGUsIGhhbmRsZXJzKVxuICAgICAgdGhpcy5vYnNlcnZlcj8ub2JzZXJ2ZShub2RlLCB0aGlzLm9wdGlvbnMpXG4gICAgICB0aGlzLm5vZGVDb3VudCsrXG4gICAgfVxuICAgIGhhbmRsZXJzLmFkZChoYW5kbGVyKVxuICB9XG5cbiAgdW5vYnNlcnZlKG5vZGUsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnNCeU5vZGUuZ2V0KG5vZGUpXG4gICAgaWYgKGhhbmRsZXJzPy5kZWxldGUoaGFuZGxlcikgJiYgaGFuZGxlcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhpcy5oYW5kbGVyc0J5Tm9kZS5kZWxldGUobm9kZSlcbiAgICAgIHRoaXMub2JzZXJ2ZXI/LnVub2JzZXJ2ZShub2RlKVxuICAgICAgaWYgKC0tdGhpcy5ub2RlQ291bnQgPT09IDApIHtcbiAgICAgICAgZGVsZXRlIG9ic2VydmVyc1t0aGlzLmtleV1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGUoZW50cmllcykge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzQnlOb2RlLmdldChlbnRyeS50YXJnZXQpXG4gICAgICBpZiAoaGFuZGxlcnMpIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICAgICAgdGFyZ2V0OiBlbnRyeS50YXJnZXQsXG4gICAgICAgICAgY29udGVudFJlY3Q6IGVudHJ5LmNvbnRlbnRSZWN0LFxuICAgICAgICAgIC8vIFVzZSBgYXNBcnJheWAgc2luY2UgRmlyZWZveCBiZWZvcmUgdjkyIHJldHVybnMgdGhlc2UgYXMgb2JqZWN0czpcbiAgICAgICAgICBib3JkZXJCb3hTaXplOiBhc0FycmF5KGVudHJ5LmJvcmRlckJveFNpemUpLFxuICAgICAgICAgIGNvbnRlbnRCb3hTaXplOiBhc0FycmF5KGVudHJ5LmNvbnRlbnRCb3hTaXplKSxcbiAgICAgICAgICBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplOiBhc0FycmF5KGVudHJ5LmRldmljZVBpeGVsQ29udGVudEJveFNpemUpXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIGhhbmRsZXJzKSB7XG4gICAgICAgICAgaGFuZGxlcihldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRPYnNlcnZlcih7IGJveCA9ICdjb250ZW50LWJveCcgfSA9IHt9KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgYm94IH1cbiAgICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeShvcHRpb25zKVxuICAgIG9ic2VydmVyc1trZXldIHx8PSBuZXcgT2JzZXJ2ZXIoa2V5LCBvcHRpb25zKVxuICAgIHJldHVybiBvYnNlcnZlcnNba2V5XVxuICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBbXG4gICdjcmVhdGUnLCAnY3JlYXRlZCcsXG4gICdzYXZlJywgJ3NhdmVkJyxcbiAgJ2FwcGx5JywgJ2FwcGxpZWQnLFxuICAnc3VibWl0JywgJ3N1Ym1pdHRlZCcsXG4gICdkZWxldGUnLCAnZGVsZXRlZCcsXG4gICdyZW1vdmUnLCAncmVtb3ZlZCcsXG4gICdjbGVhcicsICdjbGVhcmVkJyxcbiAgJ2VkaXQnLCAnZWRpdGVkJyxcbiAgJ2Nsb3NlJywgJ2Nsb3NlZCcsXG4gICdjYW5jZWwnLCAnY2FuY2VsbGVkJyxcbiAgJ2RyYWcnLCAnZHJhZ2dlZCcsXG4gICdsb2dpbicsICdsb2dnZWQgaW4nXG5dLnJlZHVjZSgodmVyYnMsIHZlcmIpID0+IHtcbiAgdmVyYnNbdmVyYl0gPSB2ZXJiXG4gIHJldHVybiB2ZXJic1xufSwge30pXG4iLCJpbXBvcnQgeyBjcmVhdGVBcHAsIGggYXMgY3JlYXRlRWxlbWVudCB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IGNyZWF0ZVJvdXRlciwgY3JlYXRlV2ViSGlzdG9yeSB9IGZyb20gJ3Z1ZS1yb3V0ZXInXG5pbXBvcnQgVnVlTm90aWZpY2F0aW9ucyBmcm9tICdAa3l2Zy92dWUzLW5vdGlmaWNhdGlvbidcbmltcG9ydCB7XG4gIGlzU3RyaW5nLFxuICBpc0Fic29sdXRlVXJsLFxuICBhc3NpZ25EZWVwbHksXG4gIGh5cGhlbmF0ZSxcbiAgY2FtZWxpemUsXG4gIGRlZmF1bHRGb3JtYXRzLFxuICBkZXByZWNhdGVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCAqIGFzIGNvbXBvbmVudHMgZnJvbSAnLi9jb21wb25lbnRzL2luZGV4LmpzJ1xuaW1wb3J0ICogYXMgdHlwZXMgZnJvbSAnLi90eXBlcy9pbmRleC5qcydcbmltcG9ydCBEaXRvUm9vdCBmcm9tICcuL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlJ1xuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgUmVzaXplRGlyZWN0aXZlIGZyb20gJy4vZGlyZWN0aXZlcy9yZXNpemUuanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSB9IGZyb20gJy4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBmb3JtYXRRdWVyeSB9IGZyb20gJy4vdXRpbHMvcm91dGUuanMnXG5pbXBvcnQgdmVyYnMgZnJvbSAnLi92ZXJicy5qcydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0FkbWluIHtcbiAgY29uc3RydWN0b3IoZWwsIHtcbiAgICAvLyBgZGl0b2AgY29udGFpbnMgdGhlIGJhc2UgYW5kIGFwaSBzZXR0aW5ncyBwYXNzZWQgZnJvbSBgQWRtaW5Db250cm9sbGVyYFxuICAgIGRpdG8gPSB7fSxcbiAgICBhcGksXG4gICAgdmlld3MgPSB7fSxcbiAgICAuLi5vcHRpb25zXG4gIH0gPSB7fSkge1xuICAgIHRoaXMuZWwgPSBlbFxuICAgIC8vIE1lcmdlIGluIGBhcGlgIHNldHRpbmdzIGFzIHBhc3NlZCBmcm9tIGBjb25maWcuYWRtaW5gIGFuZCB0aHJvdWdoIHRoZVxuICAgIC8vIGBBZG1pbkNvbnRyb2xsZXJgIHdpdGggYGFwaWAgdmFsdWVzIGZyb20gZnJvbSAnYWRtaW4vaW5kZXguanMnXG4gICAgLy8gTk9URTogYEFkbWluQ29udHJvbGxlcmAgcHJvdmlkZXMgYGRpdG8uYXBpLmJhc2VgXG4gICAgdGhpcy5hcGkgPSBhcGkgPSBhc3NpZ25EZWVwbHkoeyBiYXNlOiAnLycgfSwgZGl0by5hcGksIGFwaSlcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG5cbiAgICAvLyBTZXR1cCBkZWZhdWx0IGFwaSBzZXR0aW5nczpcbiAgICBhcGkubG9jYWxlIHx8PSAnZW4tVVMnXG4gICAgYXBpLmZvcm1hdHMgPSBhc3NpZ25EZWVwbHkoe30sIGRlZmF1bHRGb3JtYXRzLCBhcGkuZm9ybWF0cylcbiAgICBhcGkucmVxdWVzdCB8fD0gb3B0aW9ucyA9PiByZXF1ZXN0KGFwaSwgb3B0aW9ucylcbiAgICBhcGkuZ2V0QXBpVXJsIHx8PSBvcHRpb25zID0+IGdldEFwaVVybChhcGksIG9wdGlvbnMpXG4gICAgYXBpLmlzQXBpVXJsIHx8PSB1cmwgPT4gaXNBcGlVcmwoYXBpLCB1cmwpXG4gICAgLy8gU2V0dGluZyBgYXBpLm5vcm1hbGl6ZVBhdGhzID0gdHJ1ZSAocGx1cmFsKSBzZXRzIGJvdGg6XG4gICAgLy8gYGFwaS5ub3JtYWxpemVQYXRoID0gaHlwaGVuYXRlYCBhbmQgYGFwaS5kZW5vcm1hbGl6ZVBhdGggPSBjYW1lbGl6ZWBcbiAgICBhcGkubm9ybWFsaXplUGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGhzID8gaHlwaGVuYXRlIDogdmFsID0+IHZhbFxuICAgIGFwaS5kZW5vcm1hbGl6ZVBhdGggfHw9IGFwaS5ub3JtYWxpemVQYXRocyA/IGNhbWVsaXplIDogdmFsID0+IHZhbFxuXG4gICAgLy8gQWxsb3cgZGVmaW5pdGlvbiBvZiBkZWZhdWx0cyBmb3IgYWRtaW4gY29tcG9uZW50IHR5cGVzLCBuZXN0ZWQgcGVyIHR5cGU6XG4gICAgLy8gYXBpLmRlZmF1bHRzID0ge1xuICAgIC8vICAgJ211bHRpc2VsZWN0Jzoge1xuICAgIC8vICAgICBzZWxlY3RhYmxlOiB0cnVlXG4gICAgLy8gICB9LFxuICAgIC8vICAgJ2Zha2UtdHlwZSc6IHNjaGVtYSA9PiB7XG4gICAgLy8gICAgIC8vIFJldHVybiBkZWZhdWx0cywgb3IgZGlyZWN0bHkgbW9kaWZ5IHRoZSBzY2hlbWE6XG4gICAgLy8gICAgIE9iamVjdC5hc3NpZ24oc2NoZW1hLCB7XG4gICAgLy8gICAgICAgdHlwZTogJ3JlYWwtdHlwZScsXG4gICAgLy8gICAgICAgZm9ybWF0OiAoeyB2YWx1ZSB9KSA9PiBgRm9ybWF0dGVkICR7dmFsdWV9YCxcbiAgICAvLyAgICAgICBwcm9jZXNzOiAoeyB2YWx1ZSB9KSA9PiBgUHJvY2Vzc2VkICR7dmFsdWV9YFxuICAgIC8vICAgICB9KVxuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGFwaS5kZWZhdWx0cyB8fD0ge31cblxuICAgIC8vIEFsbG93IHRoZSBjb25maWd1cmF0aW9uIG9mIGFsbCBhdXRoIHJlc291cmNlcywgbGlrZSBzbzpcbiAgICAvLyBhcGkudXNlcnMgPSB7XG4gICAgLy8gICBwYXRoOiAnL2FkbWlucycsXG4gICAgLy8gICAvLyBUaGVzZSBhcmUgdGhlIGRlZmF1bHRzOlxuICAgIC8vICAgbG9naW46IHtcbiAgICAvLyAgICAgcGF0aDogJ2xvZ2luJyxcbiAgICAvLyAgICAgbWV0aG9kOiAncG9zdCdcbiAgICAvLyAgIH0sXG4gICAgLy8gICBsb2dvdXQ6IHtcbiAgICAvLyAgICAgcGF0aDogJ2xvZ291dCcsXG4gICAgLy8gICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgLy8gICB9LFxuICAgIC8vICAgc2Vzc2lvbjoge1xuICAgIC8vICAgICBwYXRoOiAnc2Vzc2lvbicsXG4gICAgLy8gICAgIG1ldGhvZDogJ2dldCdcbiAgICAvLyAgIH1cbiAgICAvLyB9XG4gICAgY29uc3QgdXNlcnMgPSBnZXRSZXNvdXJjZShhcGkudXNlcnMsIHtcbiAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJ1xuICAgIH0pIHx8IHt9XG4gICAgdXNlcnMubG9naW4gPSBnZXRSZXNvdXJjZSh1c2Vycy5sb2dpbiB8fCAnbG9naW4nLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIHVzZXJzLmxvZ291dCA9IGdldFJlc291cmNlKHVzZXJzLmxvZ291dCB8fCAnbG9nb3V0Jywge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICB1c2Vycy5zZXNzaW9uID0gZ2V0UmVzb3VyY2UodXNlcnMuc2Vzc2lvbiB8fCAnc2Vzc2lvbicsIHtcbiAgICAgIG1ldGhvZDogJ2dldCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICBhcGkudXNlcnMgPSB1c2Vyc1xuXG4gICAgLy8gQWxsb3cgb3ZlcnJpZGluZyBvZiByZXNvdXJjZSBwYXRoIGhhbmRsZXJzOlxuICAgIC8vIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgLy8gICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgLy8gICAgIHJldHVybiByZXNvdXJjZS5wYXJlbnRcbiAgICAvLyAgICAgICA/IGAke3Jlc291cmNlLnBhdGh9PyR7cmVzb3VyY2UucGFyZW50LnBhdGh9X2lkPSR7XG4gICAgLy8gICAgICAgICAgcmVzb3VyY2UucGFyZW50LmlkfWBcbiAgICAvLyAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICBhcGkucmVzb3VyY2VzID0ge1xuICAgICAgYW55KHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzW3Jlc291cmNlPy50eXBlXSB8fCB0aGlzLmRlZmF1bHRcbiAgICAgICAgcmV0dXJuIHJlc291cmNlICYmIGhhbmRsZXIuY2FsbCh0aGlzLCByZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIGRlZmF1bHQocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgcGFyZW50UGF0aCA9IHRoaXMuYW55KHJlc291cmNlLnBhcmVudClcbiAgICAgICAgcmV0dXJuIHBhcmVudFBhdGhcbiAgICAgICAgICA/IGAke3BhcmVudFBhdGh9LyR7cmVzb3VyY2UucGF0aH1gXG4gICAgICAgICAgOiByZXNvdXJjZS5wYXRoXG4gICAgICB9LFxuXG4gICAgICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHQocmVzb3VyY2UpXG4gICAgICB9LFxuXG4gICAgICBtZW1iZXIocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gTk9URTogV2UgYXNzdW1lIHRoYXQgYWxsIG1lbWJlcnMgaGF2ZSByb290LWxldmVsIGNvbGxlY3Rpb24gcm91dGVzLFxuICAgICAgICAvLyB0byBhdm9pZCBleGNlc3NpdmUgbmVzdGluZyBvZiAoc3ViLSljb2xsZWN0aW9uIHJvdXRlcy5cbiAgICAgICAgcmV0dXJuIGAke3Jlc291cmNlLnBhdGh9LyR7cmVzb3VyY2UuaWR9YFxuICAgICAgfSxcblxuICAgICAgdXBsb2FkKHJlc291cmNlKSB7XG4gICAgICAgIC8vIERpdG8gU2VydmVyIGhhbmRsZXMgdXBsb2FkIHJvdXRlcyBvbiB0aGUgY29sbGVjdGlvbiByZXNvdXJjZTpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29sbGVjdGlvbihyZXNvdXJjZS5wYXJlbnQpfS91cGxvYWQvJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgIH0sXG5cbiAgICAgIC4uLmFwaS5yZXNvdXJjZXNcbiAgICB9XG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIC8gZXh0ZW5kaW5nIG9mIGhlYWRlcnM6XG4gICAgLy8gYXBpLmhlYWRlcnMgPSB7XG4gICAgLy8gICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgLy8gfVxuICAgIGFwaS5oZWFkZXJzID0ge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIC4uLmFwaS5oZWFkZXJzXG4gICAgfVxuXG4gICAgaWYgKGlzU3RyaW5nKGVsKSkge1xuICAgICAgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKVxuICAgIH1cblxuICAgIGNvbnN0IGFwcCA9ICh0aGlzLmFwcCA9IGNyZWF0ZUFwcCh7XG4gICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIERpdG9Sb290LFxuICAgICAgICBWdWVOb3RpZmljYXRpb25zLFxuICAgICAgICAvLyBUaGlzIG1heSBvbmx5IGJlIG5lZWRlZCB0byBhdm9pZCB0cmVlLXNoYWNraW5nIG9mIHRoZXNlIGNvbXBvbmVudHMsXG4gICAgICAgIC8vIHNpbmNlIHRoZXkgYWN0dWFsbHkgaGFuZGxlIHJlZ2lzdHJ5IGludGVybmFsbHkgYWxyZWFkeS5cbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgb25jZSB3ZSBoYXZlIGEgYmV0dGVyIHNvbHV0aW9uLlxuICAgICAgICAuLi5jb21wb25lbnRzLFxuICAgICAgICAuLi50eXBlc1xuICAgICAgfSxcblxuICAgICAgLy8gTW9zdCBpbmplY3RzIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmUgcmVhY3RpdmVuZXNzIGFjcm9zc1xuICAgICAgLy8gcHJvdmlkZS9pbmplY3QsIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvaXNzdWVzLzcwMTcjaXNzdWVjb21tZW50LTQ4MDkwNjY5MVxuICAgICAgcHJvdmlkZToge1xuICAgICAgICBhcGksXG4gICAgICAgIC8vIEEgZGVmYXVsdCBsaXN0IG9mIHZlcmJzIGFyZSBwcm92aWRlZCBieSAkdmVyYnMoKSBhbmQgY2FuIGJlXG4gICAgICAgIC8vIG92ZXJyaWRkZW4gYXQgYW55IHBvaW50IGluIHRoZSBjb21wb25lbnQgaGllcmFyY2h5LlxuICAgICAgICAkdmVyYnM6ICgpID0+IHZlcmJzLFxuICAgICAgICAvLyBQcm92aWRlIGRlZmF1bHRzIHNvIERpdG9NaXhpbiBjYW4gaW5qZWN0IHRoZW0gZm9yIGFsbCBjb21wb25lbnRzOlxuICAgICAgICAvLyAgIGluamVjdDogWyAgJyRpc1BvcHVsYXRlZCcsICckc2NoZW1hQ29tcG9uZW50JywgJyRyb3V0ZUNvbXBvbmVudCcgXVxuICAgICAgICAkdmlld3M6ICgpID0+IHt9LFxuICAgICAgICAkaXNQb3B1bGF0ZWQ6ICgpID0+IHRydWUsXG4gICAgICAgICRwYXJlbnRDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRyb3V0ZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJGRhdGFDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJGRpYWxvZ0NvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHBhbmVsQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gICAgICB9LFxuXG4gICAgICByZW5kZXI6ICgpID0+XG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoRGl0b1Jvb3QsIHtcbiAgICAgICAgICByZWY6ICdyb290JyxcbiAgICAgICAgICBjbGFzczogZGl0by5zZXR0aW5ncy5yb290Q2xhc3MsXG4gICAgICAgICAgdW5yZXNvbHZlZFZpZXdzOiB2aWV3cyxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgIH0pXG4gICAgfSkpXG5cbiAgICAvLyBQcmV2ZW50IGVuZGxlc3MgbG9vcHMgb2YgZXJyb3IgbWVzc2FnZXMgZHVyaW5nIHJlbmRlciBmdW5jdGlvbnMgYnlcbiAgICAvLyBzZXR0aW5nIGEgY3VzdG9tIGVycm9yIGhhbmRsZXIuXG4gICAgYXBwLmNvbmZpZy5lcnJvckhhbmRsZXIgPSBjb25zb2xlLmVycm9yXG5cbiAgICBhcHAudXNlKFZ1ZU5vdGlmaWNhdGlvbnMsIHtcbiAgICAgIGNvbXBvbmVudE5hbWU6ICdWdWVOb3RpZmljYXRpb25zJyxcbiAgICAgIG5hbWU6ICdub3RpZnknXG4gICAgfSlcblxuICAgIGFwcC5kaXJlY3RpdmUoJ3Jlc2l6ZScsIFJlc2l6ZURpcmVjdGl2ZSlcblxuICAgIGFwcC51c2UoXG4gICAgICBjcmVhdGVSb3V0ZXIoe1xuICAgICAgICAvLyBTdGFydCB3aXRoIGEgY2F0Y2gtYWxsIHJvdXRlLCB0byBiZSByZXBsYWNlZCBieSB0aGUgYWN0dWFsIHJvdXRlc1xuICAgICAgICAvLyBvbmNlIHRoZSBzY2hlbWFzIGFyZSBsb2FkZWQsIHRvIHByZXZlbnQgdnVlLXJvdXRlciBmcm9tIGNvbXBsYWluaW5nLFxuICAgICAgICAvLyBzZWU6IGByZXNvbHZlVmlld3MoKWAgaW4gYERpdG9Sb290YCBmb3IgdGhlIGFjdHVhbCByb3V0ZSBzZXR1cC5cbiAgICAgICAgcm91dGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2NhdGNoLWFsbCcsXG4gICAgICAgICAgICBwYXRoOiAnLzpfKC4qKScsXG4gICAgICAgICAgICBjb21wb25lbnRzOiB7fVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgaGlzdG9yeTogY3JlYXRlV2ViSGlzdG9yeShkaXRvLmJhc2UpLFxuICAgICAgICBsaW5rQWN0aXZlQ2xhc3M6ICcnLFxuICAgICAgICBsaW5rRXhhY3RBY3RpdmVDbGFzczogJydcbiAgICAgIH0pXG4gICAgKVxuXG4gICAgZWwuY2xhc3NMaXN0LmFkZCgnZGl0by1hcHAnKVxuICAgIGFwcC5tb3VudChlbClcbiAgfVxuXG4gIHJlZ2lzdGVyKHR5cGUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIodHlwZSwgb3B0aW9ucylcbiAgfVxufVxuXG5jbGFzcyBSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlc3BvbnNlKSB7XG4gICAgc3VwZXIoXG4gICAgICBgUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZTogJHtyZXNwb25zZS5zdGF0dXN9ICgke1xuICAgICAgICByZXNwb25zZS5zdGF0dXNUZXh0XG4gICAgICB9KWBcbiAgICApXG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdChhcGksIHtcbiAgdXJsLFxuICBtZXRob2QgPSAnZ2V0JyxcbiAgLy8gVE9ETzogYHJlcXVlc3QucGFyYW1zYCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgYHF1ZXJ5YCBvbiAyMDIyLTExLTAxLFxuICAvLyByZW1vdmUgb25jZSBub3QgaW4gdXNlIGFueXdoZXJlIGFueSBtb3JlLlxuICBwYXJhbXMgPSBudWxsLFxuICBxdWVyeSA9IHBhcmFtcyB8fCBudWxsLFxuICBoZWFkZXJzID0gbnVsbCxcbiAgZGF0YSA9IG51bGwsXG4gIHNpZ25hbCA9IG51bGxcbn0pIHtcbiAgaWYgKHBhcmFtcykge1xuICAgIGRlcHJlY2F0ZShcbiAgICAgIGByZXF1ZXN0LnBhcmFtcyBpcyBkZXByZWNhdGVkLiBVc2UgYWN0aW9uLm1ldGhvZCBhbmQgYWN0aW9uLnBhdGggaW5zdGVhZC5gXG4gICAgKVxuICB9XG5cbiAgY29uc3QgaXNBcGlVcmwgPSBhcGkuaXNBcGlVcmwodXJsKVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYXBpLmdldEFwaVVybCh7IHVybCwgcXVlcnkgfSksIHtcbiAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgIC4uLihkYXRhICYmIHsgYm9keTogSlNPTi5zdHJpbmdpZnkoZGF0YSkgfSksXG4gICAgaGVhZGVyczoge1xuICAgICAgLi4uKGlzQXBpVXJsICYmIGFwaS5oZWFkZXJzKSxcbiAgICAgIC4uLmhlYWRlcnNcbiAgICB9LFxuICAgIGNyZWRlbnRpYWxzOlxuICAgICAgaXNBcGlVcmwgJiYgYXBpLmNvcnM/LmNyZWRlbnRpYWxzXG4gICAgICAgID8gJ2luY2x1ZGUnXG4gICAgICAgIDogJ3NhbWUtb3JpZ2luJyxcbiAgICBzaWduYWxcbiAgfSlcblxuICBpZiAocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpPy5pbmNsdWRlcygnYXBwbGljYXRpb24vanNvbicpKSB7XG4gICAgcmVzcG9uc2UuZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICB9XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IocmVzcG9uc2UpXG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbmZ1bmN0aW9uIGlzQXBpVXJsKGFwaSwgdXJsKSB7XG4gIHJldHVybiAhaXNBYnNvbHV0ZVVybCh1cmwpIHx8IHVybC5zdGFydHNXaXRoKGFwaS51cmwpXG59XG5cbmZ1bmN0aW9uIGdldEFwaVVybChhcGksIHsgdXJsLCBxdWVyeSB9KSB7XG4gIGlmICghdXJsLnN0YXJ0c1dpdGgoYXBpLnVybCkgJiYgIWlzQWJzb2x1dGVVcmwodXJsKSkge1xuICAgIHVybCA9IGNvbWJpbmVVcmxzKGFwaS51cmwsIHVybClcbiAgfVxuICAvLyBTdXBwb3J0IG9wdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMsIHRvIGJlIGFyZSBhZGRlZCB0byB0aGUgVVJMLlxuICBjb25zdCBzZWFyY2ggPSBmb3JtYXRRdWVyeShxdWVyeSlcbiAgcmV0dXJuIHNlYXJjaCA/IGAke3VybH0ke3VybC5pbmNsdWRlcygnPycpID8gJyYnIDogJz8nfSR7c2VhcmNofWAgOiB1cmxcbn1cblxuZnVuY3Rpb24gY29tYmluZVVybHMoYmFzZVVybCwgcmVsYXRpdmVVcmwpIHtcbiAgLy8gVXNlIHNhbWUgYXBwcm9hY2ggYXMgYXhpb3MgYGNvbWJpbmVVUkxzKClgIHRvIGpvaW4gYmFzZVVybCAmIHJlbGF0aXZlVXJsOlxuICByZXR1cm4gYCR7YmFzZVVybC5yZXBsYWNlKC9cXC8rJC8sICcnKX0vJHtyZWxhdGl2ZVVybC5yZXBsYWNlKC9eXFwvKy8sICcnKX1gXG59XG4iXSwibmFtZXMiOlsicGFyc2VVc2VyQWdlbnQiLCJ1c2VyQWdlbnQiLCJhZ2VudCIsInVhIiwib3MiLCJwbGF0Zm9ybSIsIm1hdGNoIiwiYnJvd3NlciIsInYxIiwidjIiLCJydiIsInZlcnNpb24iLCJhcHBTdGF0ZSIsInJlYWN0aXZlIiwiYXBwZW5kRGF0YVBhdGgiLCJkYXRhUGF0aCIsInRva2VuIiwicGFyc2VQYXJlbnREYXRhUGF0aCIsInBhdGgiLCJwYXJzZURhdGFQYXRoIiwicGFyc2VJdGVtRGF0YVBhdGgiLCJuZXN0ZWQiLCJnZXRJdGVtRGF0YVBhdGgiLCJub3JtYWxpemVEYXRhUGF0aCIsInBhcnNlUGFyZW50SXRlbURhdGFQYXRoIiwiaXNJbnRlZ2VyIiwiZ2V0UGFyZW50SXRlbURhdGFQYXRoIiwiZ2V0SXRlbSIsInJvb3RJdGVtIiwiZ2V0VmFsdWVBdERhdGFQYXRoIiwiZ2V0UGFyZW50SXRlbSIsImdldExhc3REYXRhUGF0aFRva2VuIiwiZ2V0TGFzdERhdGFQYXRoTmFtZSIsImdldExhc3REYXRhUGF0aEluZGV4IiwiaW5kZXgiLCJ0ZW1wb3JhcnlJZCIsInNldFRlbXBvcmFyeUlkIiwiZGF0YSIsImlkS2V5IiwiaXNUZW1wb3JhcnlJZCIsImlkIiwiaXNSZWZlcmVuY2UiLCJoYXNPd25Qcm9wZXJ0eSIsImNvbnRleHRzIiwiZ2V0IiwiY29udGV4dCIsImtleSIsImRlZmF1bHRWYWx1ZSIsIm9iamVjdCIsInRvUmF3IiwidmFsdWUiLCJpc0Z1bmN0aW9uIiwic2V0IiwiRGl0b0NvbnRleHQiLCJjb21wb25lbnQiLCJpdGVtIiwib3B0aW9ucyIsImxvY2F0aW9uIiwicmVzb3VyY2UiLCJFbWl0dGVyTWl4aW4iLCJldmVudCIsImNhbGxiYWNrIiwiaXNBcnJheSIsImV2IiwiaXNQbGFpbk9iamVjdCIsImxpc3RlbmVycyIsImNhbGxiYWNrcyIsIm9uIiwiYXJncyIsImVudHJ5IiwiX2EiLCJjYiIsInF1ZXVlIiwicmVzb2x2ZSIsIm5leHQiLCJyZXN1bHQiLCJyZXMiLCJlcnJvciIsInRhcmdldCIsImlzQ3JlZGl0Q2FyZCIsImRlY2ltYWxzIiwiaXNEb21haW4iLCJpc0VtYWlsIiwiaXNIb3N0bmFtZSIsIm1heCIsIm1pbiIsInNldHRpbmdzIiwicGFzc3dvcmQiLCJpc1VybCIsIlZhbGlkYXRpb25NaXhpbiIsIm5vdGlmeSIsImlzVmFsaWQiLCJydWxlIiwic2V0dGluZyIsInZhbGlkYXRvciIsInZhbGlkYXRpb25zIiwidmFsaWRhdGUiLCJtZXNzYWdlIiwiYWRkTGFiZWwiLCJlcnJvcnMiLCJmb2N1cyIsImdldFNjaGVtYUFjY2Vzc29yIiwia2V5T3JEYXRhUGF0aCIsInR5cGUiLCJkZWYiLCJpc1N0cmluZyIsIm5hbWUiLCJnZXRTdG9yZUFjY2Vzc29yIiwiVHlwZU1peGluIiwiY29tcHV0ZVZhbHVlIiwiZm9ybWF0IiwicGFyc2UiLCJzY2hlbWFDb21wb25lbnQiLCJub2RlIiwiZXZlbnRzIiwiY2FtZWxpemUiLCJuYXRpdmVGaWVsZCIsInRleHRGaWVsZCIsImF0dHJpYnV0ZXMiLCJhZGQiLCJvbkZvY3VzIiwib25CbHVyIiwib25JbnB1dCIsIm9uQ2hhbmdlIiwiX2IiLCJlbGVtZW50IiwiYXNBcnJheSIsInVpZE1hcCIsInVpZCIsImdldFVpZCIsImdldEl0ZW1JZCIsInJhdyIsIlNjaGVtYUdyYXBoIiwiX19wdWJsaWNGaWVsZCIsImRlZmF1bHRzIiwic3ViR3JhcGgiLCJwYXJ0Iiwic2NoZW1hIiwicmVsYXRlZERhdGFQYXRoIiwibmFub2lkIiwiZmxhdHRlbiIsImdyYXBoIiwiZW50cmllcyIsIiRzZXR0aW5ncyIsInN1YktleSIsInNvdXJjZVNjaGVtYSIsImNsaXBib2FyZCIsImludGVybmFsIiwicmVsYXRlZCIsInJlZmVyZW5jZSIsInNvdXJjZSIsInJlbGF0aW9uIiwidmFsdWVzIiwicmVtb3ZlSWQiLCJyZWZlcmVuY2VJZCIsInJlZktleSIsInJldlZhbHVlIiwidHlwZUNoZWNrZXJzIiwiaXNCb29sZWFuIiwiaXNOdW1iZXIiLCJpc0RhdGUiLCJpc09iamVjdCIsImlzUmVnRXhwIiwidHlwZUNvbnZlcnRlcnMiLCJpc01hdGNoaW5nVHlwZSIsInR5cGVzIiwiY29udmVydFR5cGUiLCJjb252ZXJ0ZXIiLCJ0eXBlQ29tcG9uZW50cyIsInVua25vd25UeXBlUmVwb3J0ZWQiLCJyZWdpc3RlclR5cGVDb21wb25lbnQiLCJnZXRUeXBlQ29tcG9uZW50IiwiYWxsb3dOdWxsIiwiaXRlcmF0ZVNjaGVtYUNvbXBvbmVudHMiLCJzY2hlbWFzIiwiaXNTaW5nbGVDb21wb25lbnRWaWV3IiwiaXNTY2hlbWEiLCJpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyIsImdldFRhYlNjaGVtYXMiLCJmaW5kTmVzdGVkU2NoZW1hQ29tcG9uZW50Iiwic29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudCIsImhhc05lc3RlZFNjaGVtYUNvbXBvbmVudHMiLCJpc0Zvcm0iLCJpc1ZpZXciLCJpc1RhYiIsImlzUGFuZWwiLCJpc01lbnUiLCJnZXRTY2hlbWFJZGVudGlmaWVyIiwicmVzb2x2ZVNjaGVtYSIsInVud3JhcE1vZHVsZSIsImlzUHJvbWlzZSIsImlzTW9kdWxlIiwia2V5cyIsInJlc29sdmVTY2hlbWFzIiwidW5yZXNvbHZlZFNjaGVtYXMiLCJyZXNvbHZlSXRlbSIsIm1hcENvbmN1cnJlbnRseSIsInJlc29sdmVWaWV3cyIsInVucmVzb2x2ZWRWaWV3cyIsImZsYXR0ZW5WaWV3cyIsInZpZXdzIiwicmVzb2x2ZVNjaGVtYUNvbXBvbmVudCIsIm1hcmtSYXciLCJEaXRvTWl4aW4iLCJyZXNvbHZlU2NoZW1hQ29tcG9uZW50cyIsInByb2Nlc3NTY2hlbWFDb21wb25lbnRzIiwiYXBpIiwicm91dGVzIiwibGV2ZWwiLCJwcm9taXNlcyIsInByb2Nlc3MiLCJyZWxhdGl2ZUxldmVsIiwicHJvY2Vzc1NjaGVtYUNvbXBvbmVudCIsImdldFBhbmVsU2NoZW1hcyIsInByb2Nlc3NTY2hlbWFEZWZhdWx0cyIsInBhbmVsIiwiZ2V0VHlwZU9wdGlvbnMiLCJwcm9jZXNzVmlldyIsImZ1bGxQYXRoIiwicHJvY2Vzc1JvdXRlU2NoZW1hIiwiY2hpbGRyZW4iLCJwcm9jZXNzTmVzdGVkU2NoZW1hcyIsImFzc2lnbkRlZXBseSIsInByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyIsImZvcm1zIiwiZ2V0Rm9ybVNjaGVtYXMiLCJmb3JtIiwicHJvY2Vzc0Zvcm1zIiwiY29tcG9uZW50cyIsInByb2Nlc3NGb3JtIiwicHJvY2Vzc1RhYiIsInByb2Nlc3NQYW5lbCIsInRhYnMiLCJwYW5lbHMiLCJ0YWIiLCJoYXNGb3JtU2NoZW1hIiwiaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyIsImdldFZpZXdGb3JtU2NoZW1hIiwidmlldyIsInZpZXdTY2hlbWEiLCJnZXRWaWV3U2NoZW1hIiwiaGFzVmlld1NjaGVtYSIsImdldFZpZXdFZGl0UGF0aCIsIm1vZGlmeUZvcm0iLCJjb21wYWN0IiwiZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMiLCJnZXRJdGVtRm9ybVNjaGVtYSIsImlzQ29tcGFjdCIsImlzSW5saW5lZCIsImlzTmVzdGVkIiwiaGFzTGFiZWwiLCJnZW5lcmF0ZUxhYmVscyIsImxhYmVsIiwib21pdFNwYWNpbmciLCJnZXRTY2hlbWFWYWx1ZSIsImNvbnZlcnRlZCIsInNob3VsZFJlbmRlclNjaGVtYSIsImdldERlZmF1bHRWYWx1ZSIsImNsb25lIiwiaWdub3JlTWlzc2luZ1ZhbHVlIiwidHlwZU9wdGlvbnMiLCJzZXREZWZhdWx0VmFsdWVzIiwicHJvY2Vzc1NjaGVtYURhdGEiLCJyb290RGF0YSIsImNvbXB1dGUiLCJjbG9uZUl0ZW0iLCJjb3B5Iiwib3JkZXJLZXkiLCJwcm9jZXNzRGF0YSIsInNjaGVtYU9ubHkiLCJwcm9jZXNzZWREYXRhIiwid3JhcFByaW1pdGl2ZXMiLCJhIiwiYiIsImlkMSIsImlkMiIsImV4Y2x1ZGUiLCJnZXRDb250ZXh0IiwicHJvY2Vzc1ZhbHVlIiwicHJvY2Vzc0JlZm9yZSIsInByb2Nlc3NBZnRlciIsInByb2Nlc3NDb21wb25lbnRzIiwiZ2V0RGF0YVBhdGgiLCJjb21wb25lbnRTY2hlbWEiLCJjb21wb25lbnREYXRhUGF0aCIsInByb2Nlc3NJdGVtIiwiaXRlbURhdGFQYXRoIiwicHJvY2Vzc2VkSXRlbSIsImdldE5hbWVkU2NoZW1hcyIsInRvT2JqZWN0IiwiYXJyYXkiLCJ0b1NjaGVtYSIsImdldEJ1dHRvblNjaGVtYXMiLCJidXR0b25zIiwiZ2V0VHlwZSIsInNjaGVtYU9yVHlwZSIsImdldFNvdXJjZVR5cGUiLCJnZXRQYW5lbEVudHJ5IiwidGFiQ29tcG9uZW50IiwiZ2V0UGFuZWxFbnRyaWVzIiwicGFuZWxTY2hlbWFzIiwicGFuZWxFbnRyaWVzIiwiZ2V0QWxsUGFuZWxFbnRyaWVzIiwicGFuZWxTY2hlbWEiLCJpc09iamVjdFNvdXJjZSIsImlzTGlzdFNvdXJjZSIsImdldEl0ZW1VaWQiLCJoYXNSZXNvdXJjZSIsImdldFJlc291cmNlIiwicGFyZW50IiwiZGVmcyIsImdldE1lbWJlclJlc291cmNlIiwicGlja0J5Iiwic2VsZiIsIm5leHRVaWQiLCJsYWJlbGl6ZSIsInN0b3JlIiwib2xkS2V5IiwidmVyYiIsInF1ZXJ5IiwidXJsIiwibWV0aG9kIiwic2lnbmFsIiwiY2hlY2tVc2VyIiwicmVzcG9uc2UiLCJlcXVhbHMiLCJjYWNoZSIsImNhY2hlUGFyZW50IiwibG9hZENhY2hlIiwiY2FjaGVLZXkiLCJsb2NhbGUiLCJib2R5IiwiZ2V0Q29tcHV0ZWRBY2Nlc3NvciIsImdldHRlciIsImNvbXB1dGVkIiwiYWNjZXNzb3IiLCJ3YXRjaCIsImhhbmRsZXJzIiwiZXhwciIsImFkZEV2ZW50IiwiaHlwaGVuYXRlIiwiaGFzTGlzdGVuZXJzIiwicGFyZW50SGFzTGlzdGVuZXJzIiwicGFyYW1zIiwicmVzb2x2ZU1lcmdlZE9wdGlvbnMiLCJtaXhpbnMiLCJtZXJnZU9wdGlvbnMiLCJ0byIsImZyb20iLCJtaXhpbiIsImRpdG9PcHRpb25LZXlzIiwiRGl0b0NvbXBvbmVudCIsImRlZmluaXRpb24iLCJkZXNjcmliZURhdGUiLCJkYXRlIiwiYWx0ZXJEYXRlIiwib3ZlcnJpZGVzIiwicGFyc2VEYXRlIiwic3RyaW5nIiwidGltZSIsInRpbWVEZWZhdWx0IiwiZGF5Iiwic2VwMSIsIm1vbnRoIiwic2VwMiIsInllYXIiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwibWlsbGlzZWNvbmQiLCJnZXREYXRlUGFydHMiLCJnZXRNb250aEluZGV4IiwiaXNWYWxpZFRpbWVQYXJ0IiwiZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uIiwicG9zaXRpb24iLCJwYXJ0cyIsImdldFBvc2l0aW9uIiwibGVuZ3RoIiwicG9zIiwib2Zmc2V0IiwiaXNVUyIsInN0YXJ0IiwiZW5kIiwic2hvcnRGb3JtYXQiLCJsb25nRm9ybWF0IiwiX3NmY19tYWluIiwid2Vla2RheU5hbWVzIiwibW9udGhOYW1lcyIsImdldExvY2FsZU5hbWVzIiwibW9kZSIsInVwZGF0ZSIsInN0ZXAiLCJjdXJyZW50VmFsdWUiLCJlbnRlciIsInN0YXJ0WWVhciIsImkiLCJmaXJzdERheVdlZWsiLCJudW1EYXlzIiwicHJldk1vbnRoIiwicHJldk1vbnRoTnVtRGF5cyIsIm5vdyIsImlzRGF5Iiwic3RhdGUiLCJuZXh0TW9udGhOZWVkIiwibmV4dE1vbnRoIiwibG9jYWxlTmFtZXMiLCJuYW1lcyIsImFkZEV2ZW50cyIsInRhcmdldHMiLCJoYW5kbGVyIiwiY29tYmluZUV2ZW50cyIsImdldEtleSIsImdldEtleU5hdmlnYXRpb24iLCJnZXRUYXJnZXQiLCJjbGFzc2VzIiwic2hvdyIsInRyaWdnZXIiLCJwb3B1cCIsIl9jIiwiZWwiLCJib3VuZHMiLCJ0cmlnZ2VyTGVmdCIsInRyaWdnZXJUb3AiLCJ0cmlnZ2VyV2lkdGgiLCJ0cmlnZ2VySGVpZ2h0IiwicG9wdXBXaWR0aCIsInBvcHVwSGVpZ2h0IiwicGFydDEiLCJwYXJ0MiIsIndpbldpZHRoIiwid2luSGVpZ2h0IiwibGVmdCIsInRvcCIsInRyaWdnZXJCb3VuZHMiLCJpbnB1dCIsIl8iLCJzaXplIiwiZ2V0TGVuZ3RoIiwiX29wZW5CbG9jayIsIl9jcmVhdGVFbGVtZW50QmxvY2siLCJzZXRTZWxlY3Rpb24iLCJnZXRTZWxlY3Rpb24iLCJUcmlnZ2VyIiwiQ2FsZW5kYXIiLCJJbnB1dEZpZWxkIiwiSWNvbiIsImRlZmF1bHRGb3JtYXRzIiwiZ2V0RGF0ZVBhcnQiLCJjYWxlbmRhciIsInRvZ2dsZSIsInNlbGVjdGlvbiIsInNtb290aCIsInNjcm9sbCIsInJlZiIsImxpbmVIZWlnaHQiLCJkaXN0YW5jZSIsImNvdW50IiwiaXNEaWdpdCIsImNoYXIiLCJEYXRlUGlja2VyIiwiVGltZVBpY2tlciIsInRyYW5zaXRpb24iLCJkaXNhYmxlZCIsInRleHQiLCJzaG93UHJldiIsInNob3dOZXh0IiwiY3VycmVudFBhZ2UiLCJudW1QYWdlcyIsInNob3dMZW5ndGgiLCJwYWdlIiwiYnV0dG9uIiwiY2hlY2tlZCIsInVuY2hlY2tlZCIsIm1vZGVsVmFsdWUiLCJUcmFuc2l0aW9uSGVpZ2h0IiwiZW5hYmxlZCIsInNsb3RzIiwiY3JlYXRlRWxlbWVudCIsIlRyYW5zaXRpb24iLCJwcm9wcyIsInNldFN0eWxlIiwic3R5bGUiLCJuZXh0VGltZW91dCIsImZvcmNlUmVwYWludCIsIndpZHRoIiwiaGVpZ2h0IiwiaGFzVk5vZGVDb250ZW50Iiwidm5vZGUiLCJDb21tZW50IiwiaGFzU2xvdENvbnRlbnQiLCJzbG90IiwidXNlU2xvdHMiLCJEb21NaXhpbiIsInJlbW92ZSIsIkRpdG9Vc2VyIiwicm9sZXMiLCJyb2xlIiwiU2NoZW1hUGFyZW50TWl4aW4iLCJzY2hlbWFDb21wb25lbnRzIiwiVmFsaWRhdG9yTWl4aW4iLCJpdCIsIlJvdXRlTWl4aW4iLCJyb3V0ZUNvbXBvbmVudCIsIm1hdGNoZWQiLCJyZWNvcmQiLCJicmVhZGNydW1iIiwicm91dGVDb21wb25lbnRzIiwib2siLCJyZWNvcmRQYXRoIiwicm9vdFBhdGgiLCJnZXRDb21tb25QcmVmaXgiLCJpc0xvYWRpbmciLCJVc2VGb2N1c1RyYXAiLCJkZWZpbmVDb21wb25lbnQiLCJ0cmFwIiwiYWN0aXZhdGUiLCJkZWFjdGl2YXRlIiwidW5yZWZFbGVtZW50IiwiY3JlYXRlRm9jdXNUcmFwIiwib25TY29wZURpc3Bvc2UiLCJoIiwiZGlhbG9nRGF0YSIsIkRpdG9EaWFsb2ciLCJwcmVmaXgiLCJ0aXBweURlbGVnYXRlIiwiaW5zdGFuY2UiLCJlcnIiLCJkcmFnQ291bnQiLCJ1cGxvYWRzIiwidG9nZ2xlRHJvcFRhcmdldENsYXNzIiwidXBsb2FkIiwic2V0RHJhZ2dpbmdGaWxlcyIsImhhc1VwbG9hZHMiLCJjYW5Ecm9wIiwidGl0bGUiLCJyZWplY3QiLCJkaWFsb2dJZCIsImFkZGl0aW9uYWxDb21wb25lbnRzIiwicmVkaXJlY3RBZnRlckxvZ2luIiwibG9naW5EYXRhIiwidXNlciIsIkRpdG9WaWV3IiwiYWRkUm91dGVzIiwicm91dGVyIiwicmVtb3ZlcnMiLCJyb3V0ZSIsInN1Yk1lbnVDbGFzcyIsImZpcnN0Q2hpbGQiLCJsb2ciLCJzdHJpcFRhZ3MiLCJub3RpZmljYXRpb25zIiwiZHVyYXRpb25GYWN0b3IiLCJkdXJhdGlvbiIsIlB1bGxkb3duTWl4aW4iLCJzdGFydFRpbWUiLCJvcGVuIiwiY29udGVudCIsImFzT2JqZWN0IiwiSXRlbU1peGluIiwiaXRlbUlkIiwiZXh0ZW5kZWQiLCJpdGVtTGFiZWwiLCJmb3JtTGFiZWwiLCJnZXRGb3JtTGFiZWwiLCJzdWZmaXgiLCJjb2x1bW5zIiwiaGFkTGFiZWwiLCJzZWxlY3RlZFRhYiIsImZpcnN0IiwiZGVmYXVsdFRhYiIsImhhc2giLCJkYXRhUGF0aE9yTmFtZSIsInNjcm9sbENvbnRhaW5lciIsImRpc3BhdGNoIiwiY29tcG9uZW50c0J5RGF0YVBhdGgiLCJkYXRhUGF0aHMiLCJjaGVjayIsImZpZWxkIiwidW5tYXRjaGVkIiwiZXJycyIsImZ1bGxEYXRhUGF0aCIsImRhdGFQYXRoUGFydHMiLCJmb3VuZCIsInByb3BlcnR5Iiwic3ViQ29tcG9uZW50cyIsInBhbmUiLCJyZWdpc3RyeSIsImVudHJpZXNCeURhdGFQYXRoIiwiX3dpdGhEaXJlY3RpdmVzIiwiX0ZyYWdtZW50IiwiX3JlbmRlckxpc3QiLCJfY3R4IiwiX2hvaXN0ZWRfMSIsIl9jcmVhdGVCbG9jayIsIl9jb21wb25lbnRfRGl0b0NvbnRhaW5lciIsIm5lc3RlZERhdGFQYXRoIiwiX2hvaXN0ZWRfMiIsInBvc2l0aW9ucyIsImlzTGFzdEluUm93IiwiZmluZE5leHRQb3NpdGlvbiIsInJvd3MiLCJyb3ciLCJ2ZXJ0aWNhbExhYmVsc0J5SW5kaWNlcyIsImhhc0xhYmVsc0luUm93IiwiY29udGFpbmVyIiwicGFkZGluZyIsImZvbnRTaXplIiwicGFyc2VGcmFjdGlvbiIsImRpdmlkZW5kIiwiZGl2aXNvciIsImFjY3VtdWxhdGVkQmFzaXMiLCJmbGV4QmFzaXMiLCJjb21iaW5lZEJhc2lzIiwiY2FwaXRhbGl6ZSIsImNsaXBib2FyZERhdGEiLCJwYXN0ZSIsIiRzY2hlbWEiLCJyZXBvcnQiLCJqc29uIiwiZGVpbmRlbnQiLCJMb2FkaW5nTWl4aW4iLCJ1cGRhdGVSb290IiwidXBkYXRlVmlldyIsIlJlc291cmNlTWl4aW4iLCJhbW91bnQiLCJyYW5nZSIsInZlcmJzIiwiY2xlYXIiLCJsb2FkaW5nT3B0aW9ucyIsImNvbnRyb2xsZXIiLCJyZXF1ZXN0Iiwic2V0RGF0YSIsIm9uU3VjY2VzcyIsIm9uRXJyb3IiLCJub3RpZnlTdWNjZXNzIiwibm90aWZ5RXJyb3IiLCJyZXNvbHZlUGF0aCIsImlzQ3JlYXRpbmciLCJwcm92aWRlc0RhdGEiLCJkYXRhUGFydHMiLCJwYXRoUGFydHMiLCJyb3V0ZVBhcnRzIiwibGFzdERhdGFQYXJ0IiwibCIsImRhdGFQYXJ0IiwicGFyYW0iLCJtYWluU2NoZW1hQ29tcG9uZW50IiwicHJlc2VudCIsImNsb3NlRm9ybSIsImdldFZlcmIiLCJidXR0b25SZXNvdXJjZSIsInN1Y2Nlc3MiLCJfcmVzb3VyY2UiLCJfbWV0aG9kIiwiRGl0b0Zvcm0iLCJ0aXAiLCJ0aXBweSIsInNjb3BlIiwiUGFnaW5hdGlvbiIsIlNvcnRhYmxlTWl4aW4iLCJmb3JjZUZhbGxiYWNrIiwib2xkSW5kZXgiLCJuZXdJbmRleCIsImxpc3QiLCJwYWdpbmF0aW9uUmFuZ2UiLCJfbm9ybWFsaXplU3R5bGUiLCJfY2FjaGUiLCJfd2l0aE1vZGlmaWVycyIsIiRldmVudCIsIl9ub3JtYWxpemVDbGFzcyIsIl9jcmVhdGVFbGVtZW50Vk5vZGUiLCJfaG9pc3RlZF80IiwiX3RvRGlzcGxheVN0cmluZyIsIl9ob2lzdGVkXzUiLCJfaG9pc3RlZF83IiwiX21lcmdlUHJvcHMiLCJfaG9pc3RlZF84IiwiX2NvbXBvbmVudF9EaXRvTGFiZWwiLCJfY3JlYXRlVk5vZGUiLCJfY29tcG9uZW50X0RpdG9UYWJsZUNlbGwiLCJfY29tcG9uZW50X0RpdG9EcmFnZ2FibGUiLCJfY29tcG9uZW50X0RpdG9UcmVlSXRlbSIsImNoaWxkcmVuU2NoZW1hIiwiY2hpbGRyZW5MaXN0IiwiZWRpdFBhdGgiLCJjaGlsZHJlbk9wZW4iLCJudW1DaGlsZHJlbiIsImNyZWF0YWJsZSIsImVkaXRhYmxlIiwib3JkZXIiLCJjb2x1bW4iLCJyZW5kZXIiLCJlc2NhcGVIdG1sIiwiVFlQRVMiLCJmaWxlIiwicmVhZGVyIiwidXNlU29ydGFibGUiLCJzb3J0YWJsZSIsImRvY3VtZW50IiwiZGVmYXVsdERvY3VtZW50IiwicmVzZXRPcHRpb25zIiwiZGVmYXVsdE9wdGlvbnMiLCJlIiwibW92ZUFycmF5RWxlbWVudCIsIlNvcnRhYmxlIiwic3RvcCIsIm9wdGlvbiIsInRyeU9uTW91bnRlZCIsInRyeU9uU2NvcGVEaXNwb3NlIiwiX3ZhbHVlSXNSZWYiLCJpc1JlZiIsInRvVmFsdWUiLCJuZXh0VGljayIsIlVzZVNvcnRhYmxlIiwidXNlVk1vZGVsIiwiRGl0b1ZOb2RlIiwiRGl0b1R5cGVDb21wb25lbnQkMSIsIkRpdG9UeXBlQ29tcG9uZW50Iiwib25DbGljayIsIkRhdGFNaXhpbiIsImFzeW5jRW50cnkiLCJyZXNvbHZlZERhdGEiLCJsb2FkIiwidGltZXIiLCJPcHRpb25zTWl4aW4iLCJjb252ZXJ0VmFsdWUiLCJjb252ZXJ0Iiwic2VhcmNoIiwiZmlsdGVyIiwiZGVib3VuY2UiLCJkZWJvdW5jZUFzeW5jIiwiZ3JvdXBlZCIsInJlc3VsdHMiLCJncm91cCIsImZpbmRPcHRpb24iLCJncm91cEJ5Iiwib3B0aW9uVmFsdWUiLCJvcHRpb25MYWJlbCIsInByb2Nlc3NSZWxhdGUiLCJmbGFzayIsIkNvZGVGbGFzayIsImNoYW5nZWQiLCJpZ25vcmVXYXRjaCIsImlnbm9yZVVwZGF0ZSIsInNldENvZGUiLCJjb2RlIiwic2V0VmFsdWUiLCJTa2V0Y2hQaWNrZXIiLCJ0aW55Y29sb3IiLCJjb2xvciIsIkRhdGVUaW1lUGlja2VyIiwiZm9ybWF0cyIsImZvcm1hdFF1ZXJ5IiwidmFsIiwicmVwbGFjZVJvdXRlIiwiU291cmNlTWl4aW4iLCJkZWZhdWx0U29ydCIsImRpcmVjdGlvbiIsImRyYWdnYWJsZSIsImNvbGxhcHNpYmxlIiwicmVtb3ZlZCIsImxpc3REYXRhIiwib25Db21wbGV0ZSIsIm9wZW5lZCIsImNhbGxPbkNvbXBsZXRlIiwiaW5saW5lZCIsIm1ldGEiLCJmb3JtTWV0YSIsImNoaWxkUm91dGVzIiwic291cmNlUGF0aCIsImZvcm1Sb3V0ZSIsImdldFBhdGhXaXRoUGFyYW0iLCJmbGF0Um91dGVzIiwic3ViUm91dGVzIiwiY2hpbGRSb3V0ZSIsImZpbHRlckNvbXBvbmVudHMiLCJkYXRldGltZSIsImNyZWF0ZUZpbHRlcnNQYW5lbCIsImZpbHRlcnMiLCJzdGlja3kiLCJmaWx0ZXJTY2hlbWFzIiwicGFyc2VGaWx0ZXJzRGF0YSIsImNyZWF0ZUZpbHRlcnNDb21wb25lbnRzIiwiY3JlYXRlRmlsdGVyc0J1dHRvbnMiLCJmb3JtYXRGaWx0ZXJzRGF0YSIsInNtYWxsIiwiZ2V0RGF0YU5hbWUiLCJmaWx0ZXJOYW1lIiwiZ2V0RmlsdGVyTmFtZSIsImRhdGFOYW1lIiwiY29tcHMiLCJnZXRDb21wb25lbnRzRm9yRmlsdGVyIiwiZmlsdGVyc0RhdGEiLCJfY29tcG9uZW50X0RpdG9UYWJsZUhlYWQiLCJfY29tcG9uZW50X0RpdG9TY2hlbWFJbmxpbmVkIiwiX3Jlc29sdmVEeW5hbWljQ29tcG9uZW50IiwiX2NvbXBvbmVudF9EaXRvRWRpdEJ1dHRvbnMiLCJfaG9pc3RlZF85Iiwib2JqIiwiZmlsdGVyc0RhdGFQYXRoIiwiRWRpdG9yQ29udGVudCIsImVkaXRvciIsImVuYWJsZVJ1bGVzIiwic2V0VmFsdWVEZWJvdW5jZWQiLCJvblVwZGF0ZSIsIkVkaXRvciIsImdldFBvaW50IiwieCIsInkiLCJwcmV2WSIsIm1vdXNlbW92ZSIsImRpYWxvZ0NvbXBvbmVudCIsImdldE1hcmtBdHRyaWJ1dGVzIiwiaHJlZiIsIm1hcmtzIiwibm9kZXMiLCJ0b29scyIsIkRvY3VtZW50IiwiVGV4dCIsIlBhcmFncmFwaCIsIkJvbGQiLCJJdGFsaWMiLCJVbmRlcmxpbmUiLCJTdHJpa2UiLCJTbWFsbCIsIkNvZGUiLCJMaW5rV2l0aFRpdGxlIiwiQmxvY2txdW90ZSIsIkNvZGVCbG9jayIsIkhhcmRCcmVhayIsIkhlYWRpbmciLCJIb3Jpem9udGFsUnVsZSIsIkxpc3RJdGVtIiwiQnVsbGV0TGlzdCIsIk9yZGVyZWRMaXN0IiwiSGlzdG9yeSIsImV4dGVuc2lvbiIsInNldHRpbmdzTmFtZSIsImRlc2NyaXB0aW9ucyIsImNvbW1hbmRzIiwiYWRkQnV0dG9uIiwiaWNvbiIsImNvbW1hbmQiLCJkZXNjcmlwdGlvbiIsInNldHRpbmdOYW1lIiwiYXR0cmlidXRlIiwiTWFyayIsIkxpbmsiLCJfY29tcG9uZW50X1Z1ZU11bHRpc2VsZWN0IiwiVnVlTXVsdGlzZWxlY3QiLCJwbGFjZWhvbGRlciIsInNlYXJjaGFibGUiLCJ0YWdnYWJsZSIsInRhZyIsIk51bWJlck1peGluIiwiU3dpdGNoQnV0dG9uIiwiVGV4dE1peGluIiwibWFza2VkUGFzc3dvcmQiLCJoYXNFZGl0YWJsZUZvcm1zIiwiZm9ybWF0RmlsZVNpemUiLCJmaWxlc2l6ZSIsIlZ1ZVVwbG9hZCIsImFzRmlsZXMiLCJhY2NlcHQiLCJtYXhTaXplIiwicGFyc2VGaWxlU2l6ZSIsInRodW1ibmFpbHMiLCJ0b3RhbCIsInJlYWR5IiwibmV3RmlsZSIsIm9sZEZpbGUiLCJ4aHIiLCJibG9iIiwiZmlsZXMiLCJSZXNpemVEaXJlY3RpdmUiLCJiaW5kaW5nIiwib2JzZXJ2ZVJlc2l6ZSIsInVub2JzZXJ2ZVJlc2l6ZSIsIk9ic2VydmVyIiwiaXNSZXNpemVTdXBwb3J0ZWQiLCJvYnNlcnZlcnMiLCJib3giLCJEaXRvQWRtaW4iLCJkaXRvIiwiZ2V0QXBpVXJsIiwiaXNBcGlVcmwiLCJ1c2VycyIsInBhcmVudFBhdGgiLCJhcHAiLCJjcmVhdGVBcHAiLCJEaXRvUm9vdCIsIlZ1ZU5vdGlmaWNhdGlvbnMiLCJjcmVhdGVSb3V0ZXIiLCJjcmVhdGVXZWJIaXN0b3J5IiwiUmVxdWVzdEVycm9yIiwiaGVhZGVycyIsImRlcHJlY2F0ZSIsImlzQWJzb2x1dGVVcmwiLCJjb21iaW5lVXJscyIsImJhc2VVcmwiLCJyZWxhdGl2ZVVybCJdLCJtYXBwaW5ncyI6ImlzR0FHTyxTQUFTQSxHQUFlQyxFQUFZLEdBQUksQ0FDN0MsTUFBTUMsRUFBUSxDQUFFLEVBRVZDLEVBQUtGLEVBQVUsWUFBYSxFQUM1QixDQUFDRyxDQUFFLEVBQ1Asa0VBQWtFLEtBQ2hFRCxDQUNOLEdBQVMsQ0FBRSxFQUNIRSxFQUNKLENBQ0UsT0FBVSxNQUNWLE9BQVUsTUFDVixLQUFRLE1BQ1IsaUJBQWtCLFNBQ25CLEVBQUNELENBQUUsR0FDSkEsRUFFRixPQUFJQyxJQUNGSCxFQUFNLFNBQVdHLEVBQ2pCSCxFQUFNRyxDQUFRLEVBQUksSUFFcEJGLEVBQUcsUUFDRCwrR0FDQSxDQUFDRyxFQUFPQyxFQUFTQyxFQUFJQyxFQUFJQyxJQUFPLENBRTlCLEdBQUksQ0FBQ1IsRUFBTSxPQUFRLENBQ2pCLE1BQU1TLEVBQVVELEdBQU1ELEdBQU1ELEdBQ3hCLENBQUNOLEVBQU0sU0FBV0ssSUFBWSxZQUdoQ0wsRUFBTSxRQUFVUyxFQUNoQlQsRUFBTSxjQUFnQixXQUFXUyxDQUFPLEdBRTFDVCxFQUFNLFFBQVVLLEVBQ2hCTCxFQUFNSyxDQUFPLEVBQUksRUFDbEIsQ0FDRixDQUNGLEVBQ0dMLEVBQU0sUUFFUixPQUFPQSxFQUFNLE9BRVJBLENBQ1QsQ0MzQ0EsTUFBQVUsR0FBZUMsV0FBUyxDQUN0QixNQUFPLEdBQ1AsZ0JBQWlCLENBQUUsRUFDbkIsS0FBTSxLQUNOLE1BQU9iLEdBQWUsVUFBVSxXQUFhLEVBQUUsRUFDL0MsVUFBVyxDQUFFLEVBQ2IsWUFBYSxL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