@mattilsynet/design 1.1.8 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,20 +1,20 @@
1
- var mtds=function(S){"use strict";var bt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Qn=bt&&/android/i.test(navigator.userAgent),Kt;bt&&/^Mac/i.test(((Kt=navigator.userAgentData)==null?void 0:Kt.platform)||navigator.platform);var Jn=`${Qn?"data":"aria"}-labelledby`,gt=":host(:not([hidden])) { display: block }",Z=typeof HTMLElement>"u"?class{}:HTMLElement;function w(t,e,n){var o;return n===void 0?(o=t.getAttribute(e))!=null?o:null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var Gt=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Zn=(t,...e)=>Gt("add",t,e),to=(t,...e)=>Gt("remove",t,e),tt=(t,e)=>t.attachShadow({mode:"open"}).append(Jt("slot"),Jt("style",e)),et=new WeakMap,Xt=(t,e)=>{if(e===void 0)return et.get(t);try{et.get(t).disconnect(),et.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),et.set(t,n)}},eo=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},zt=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},no=0,Qt=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++no).toString(32)}`),t.id):"",Jt=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},nt={define:(t,e)=>!bt||window.customElements.get(t)||window.customElements.define(t,e)},ot="aria-controls",R="aria-selected",Zt=class extends Z{constructor(){super(),tt(this,gt)}get tabList(){return it("u-tablist",this)[0]||null}get selectedIndex(){return st(this.tabs)}set selectedIndex(t){wt(this.tabs[t])}get tabs(){return it("u-tab",this)}get panels(){return it("u-tabpanel",this)}},te=class extends Z{constructor(){super(),tt(this,gt)}connectedCallback(){w(this,"role","tablist"),Zn(this,"click,keydown",this),Xt(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){to(this,"click,keydown",this),Xt(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s==null?void 0:s.setAttribute(R,"true")}const{key:e}=t,n=[...this.tabs],o=n.findIndex(s=>s.contains(t.target));let i=o;if(!(t.defaultPrevented||o===-1)&&(t.type==="click"&&wt(n[o]),t.type==="keydown"&&!eo(t))){if(e==="ArrowDown"||e==="ArrowRight")i=(o+1)%n.length;else if(e==="ArrowUp"||e==="ArrowLeft")i=(o||n.length)-1;else if(e==="End")i=n.length-1;else if(e==="Home")i=0;else if(e==="Tab")i=st(n);else return;setTimeout(()=>{n[o].tabIndex=-1,n[i].tabIndex=0}),e!=="Tab"&&(t.preventDefault(),n[i].focus())}}get tabsElement(){return this.closest("u-tabs")}get tabs(){return this.querySelectorAll("u-tab")}get selectedIndex(){return st(this.tabs)}set selectedIndex(t){wt(this.tabs[t])}},yt=!1,ee=class extends Z{static get observedAttributes(){return["id",R,ot]}constructor(){super(),tt(this,":host(:not([hidden])) { cursor: pointer; display: inline-block }")}connectedCallback(){w(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!yt&&this.selected&&this.tabList){yt=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=it("u-tabpanel",this.tabsElement||this),n=Et(this,e[t.indexOf(this)]);n&&w(n,Jn,Qt(this)),t.forEach((o,i)=>{const s=Et(o,e[i]);o.tabIndex=o===this?0:-1,w(o,R,`${o===this}`),s&&(s.hidden=s!==n),s&&w(o,ot,s.id)}),yt=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return(t==null?void 0:t.nodeName)==="U-TABLIST"?t:null}get selected(){return w(this,R)==="true"}set selected(t){w(this,R,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return Et(this)}},ne=class extends Z{static get observedAttributes(){return["hidden"]}constructor(){super(),tt(this,gt)}connectedCallback(){w(this,"role","tabpanel"),this.hidden=st(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){this.hidden||oo(this.firstChild)?w(this,"tabindex",null):this.tabIndex=0}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${ot}="${this.id}"]`;return zt(this).querySelectorAll(t)}},it=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),Et=(t,e)=>{const n=w(t,ot)||Qt(e),o=zt(t).getElementById(n);return(o==null?void 0:o.nodeName)==="U-TABPANEL"?o:null},st=t=>[...t].findIndex(e=>w(e,R)==="true"),wt=t=>t&&w(t,"aria-selected","true"),oo=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');nt.define("u-tabs",Zt),nt.define("u-tablist",te),nt.define("u-tab",ee),nt.define("u-tabpanel",ne);var io=Object.defineProperty,oe=Object.getOwnPropertySymbols,so=Object.prototype.hasOwnProperty,ao=Object.prototype.propertyIsEnumerable,ie=(t,e,n)=>e in t?io(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,ro=(t,e)=>{for(var n in e||(e={}))so.call(e,n)&&ie(t,n,e[n]);if(oe)for(var n of oe(e))ao.call(e,n)&&ie(t,n,e[n]);return t},F=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",se=F&&/android/i.test(navigator.userAgent),lo=F&&/firefox/i.test(navigator.userAgent),co=F&&/iPad|iPhone|iPod/.test(navigator.userAgent),ae;F&&/^Mac/i.test(((ae=navigator.userAgentData)==null?void 0:ae.platform)||navigator.platform);var uo="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",po=typeof HTMLElement>"u"?class{}:HTMLElement;function h(t,e,n){return n===void 0?t.getAttribute(e):(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var re=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},le=(t,...e)=>re("add",t,e),fo=(t,...e)=>re("remove",t,e),at=new WeakMap,$t=(t,e)=>{if(e===void 0)return at.get(t);try{at.get(t).disconnect(),at.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),at.set(t,n)}},mo=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},ho=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},vo=0,_o=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++vo).toString(32)}`),t.id):"",V=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))h(o,i,s);return o},bo={define:(t,e)=>!F||window.customElements.get(t)||window.customElements.define(t,e)},go=t=>{const e=V("div");return e.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",h(e,"aria-live",t),e},yo=(t,e,n="")=>{var o,i;const s={bubbles:!0,composed:!0,data:e,inputType:n},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(o=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:o.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},O,Eo=0,St=!1,de="beforeinput,blur,focus,click,input,keydown,mousedown,mouseup",wo={once:!0,passive:!0},$o=lo&&!se,So=se||co,rt="false",ko="insertReplacementText",lt={added:"Added",empty:"No selected",found:"Navigate left to find %d selected",invalid:"Invalid value",of:"of",remove:"Press to remove",removed:"Removed"},kt=class extends po{constructor(){super(),this._speak="",this._texts=ro({},lt),this._value="",this.attachShadow({mode:"open"}).append(V("slot"),V("style",`:host(:not([hidden])) { display: block; cursor: pointer } /* Must be display block in Safari to allow focus inside */
1
+ var mtds=function(S){"use strict";var Et=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Jn=Et&&/android/i.test(navigator.userAgent),Xt;Et&&/^Mac/i.test(((Xt=navigator.userAgentData)==null?void 0:Xt.platform)||navigator.platform);var Zn=`${Jn?"data":"aria"}-labelledby`,wt=":host(:not([hidden])) { display: block }",tt=typeof HTMLElement>"u"?class{}:HTMLElement;function w(t,e,n){var o;return n===void 0?(o=t.getAttribute(e))!=null?o:null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var zt=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},to=(t,...e)=>zt("add",t,e),eo=(t,...e)=>zt("remove",t,e),et=(t,e)=>t.attachShadow({mode:"open"}).append(te("slot"),te("style",e)),nt=new WeakMap,Qt=(t,e)=>{if(e===void 0)return nt.get(t);try{nt.get(t).disconnect(),nt.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),nt.set(t,n)}},no=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},Jt=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},oo=0,Zt=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++oo).toString(32)}`),t.id):"",te=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},ot={define:(t,e)=>!Et||window.customElements.get(t)||window.customElements.define(t,e)},it="aria-controls",B="aria-selected",ee=class extends tt{constructor(){super(),et(this,wt)}get tabList(){return st("u-tablist",this)[0]||null}get selectedIndex(){return at(this.tabs)}set selectedIndex(t){kt(this.tabs[t])}get tabs(){return st("u-tab",this)}get panels(){return st("u-tabpanel",this)}},ne=class extends tt{constructor(){super(),et(this,wt)}connectedCallback(){w(this,"role","tablist"),to(this,"click,keydown",this),Qt(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){eo(this,"click,keydown",this),Qt(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s==null?void 0:s.setAttribute(B,"true")}const{key:e}=t,n=[...this.tabs],o=n.findIndex(s=>s.contains(t.target));let i=o;if(!(t.defaultPrevented||o===-1)&&(t.type==="click"&&kt(n[o]),t.type==="keydown"&&!no(t))){if(e==="ArrowDown"||e==="ArrowRight")i=(o+1)%n.length;else if(e==="ArrowUp"||e==="ArrowLeft")i=(o||n.length)-1;else if(e==="End")i=n.length-1;else if(e==="Home")i=0;else if(e==="Tab")i=at(n);else return;setTimeout(()=>{n[o].tabIndex=-1,n[i].tabIndex=0}),e!=="Tab"&&(t.preventDefault(),n[i].focus())}}get tabsElement(){return this.closest("u-tabs")}get tabs(){return this.querySelectorAll("u-tab")}get selectedIndex(){return at(this.tabs)}set selectedIndex(t){kt(this.tabs[t])}},$t=!1,oe=class extends tt{static get observedAttributes(){return["id",B,it]}constructor(){super(),et(this,":host(:not([hidden])) { cursor: pointer; display: inline-block }")}connectedCallback(){w(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!$t&&this.selected&&this.tabList){$t=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=st("u-tabpanel",this.tabsElement||this),n=St(this,e[t.indexOf(this)]);n&&w(n,Zn,Zt(this)),t.forEach((o,i)=>{const s=St(o,e[i]);o.tabIndex=o===this?0:-1,w(o,B,`${o===this}`),s&&(s.hidden=s!==n),s&&w(o,it,s.id)}),$t=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return(t==null?void 0:t.nodeName)==="U-TABLIST"?t:null}get selected(){return w(this,B)==="true"}set selected(t){w(this,B,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return St(this)}},ie=class extends tt{static get observedAttributes(){return["hidden"]}constructor(){super(),et(this,wt)}connectedCallback(){w(this,"role","tabpanel"),this.hidden=at(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){this.hidden||io(this.firstChild)?w(this,"tabindex",null):this.tabIndex=0}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${it}="${this.id}"]`;return Jt(this).querySelectorAll(t)}},st=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),St=(t,e)=>{const n=w(t,it)||Zt(e),o=Jt(t).getElementById(n);return(o==null?void 0:o.nodeName)==="U-TABPANEL"?o:null},at=t=>[...t].findIndex(e=>w(e,B)==="true"),kt=t=>t&&w(t,"aria-selected","true"),io=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');ot.define("u-tabs",ee),ot.define("u-tablist",ne),ot.define("u-tab",oe),ot.define("u-tabpanel",ie);var so=Object.defineProperty,se=Object.getOwnPropertySymbols,ao=Object.prototype.hasOwnProperty,ro=Object.prototype.propertyIsEnumerable,ae=(t,e,n)=>e in t?so(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,lo=(t,e)=>{for(var n in e||(e={}))ao.call(e,n)&&ae(t,n,e[n]);if(se)for(var n of se(e))ro.call(e,n)&&ae(t,n,e[n]);return t},K=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",re=K&&/android/i.test(navigator.userAgent),co=K&&/firefox/i.test(navigator.userAgent),uo=K&&/iPad|iPhone|iPod/.test(navigator.userAgent),le;K&&/^Mac/i.test(((le=navigator.userAgentData)==null?void 0:le.platform)||navigator.platform);var fo="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",po=typeof HTMLElement>"u"?class{}:HTMLElement;function m(t,e,n){return n===void 0?t.getAttribute(e):(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var de=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},ce=(t,...e)=>de("add",t,e),mo=(t,...e)=>de("remove",t,e),rt=new WeakMap,Tt=(t,e)=>{if(e===void 0)return rt.get(t);try{rt.get(t).disconnect(),rt.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),rt.set(t,n)}},ho=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},go=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},vo=0,_o=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++vo).toString(32)}`),t.id):"",j=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))m(o,i,s);return o},bo={define:(t,e)=>!K||window.customElements.get(t)||window.customElements.define(t,e)},yo=t=>{const e=j("div");return e.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",m(e,"aria-live",t),e},Eo=(t,e,n="")=>{var o,i;const s={bubbles:!0,composed:!0,data:e,inputType:n},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(o=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:o.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},O,wo=0,Ct=!1,ue="beforeinput,blur,focus,click,input,keydown,mousedown,mouseup",$o={once:!0,passive:!0},So=co&&!re,ko=re||uo,lt="false",To="insertReplacementText",dt={added:"Added",empty:"No selected",found:"Navigate left to find %d selected",invalid:"Invalid value",of:"of",remove:"Press to remove",removed:"Removed"},xt=class extends po{constructor(){super(),this._speak="",this._texts=lo({},dt),this._value="",this.attachShadow({mode:"open"}).append(j("slot"),j("style",`:host(:not([hidden])) { display: block; cursor: pointer } /* Must be display block in Safari to allow focus inside */
2
2
  :host(:not([data-multiple])) ::slotted(data),
3
3
  :host([data-multiple="false"]) ::slotted(data) { display: none } /* Hide data if not multiple */
4
4
  ::slotted(data) { display: inline-block; pointer-events: none }
5
5
  ::slotted(data)::after { content: '\\00D7'; content: '\\00D7' / ''; padding-inline: .5ch; pointer-events: auto }
6
- ::slotted(data:focus) { ${uo} }`))}static get observedAttributes(){return Object.keys(lt).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=ho(this),le(this,de,this,!0),$t(this,{childList:!0}),setTimeout(Y,0,this),setTimeout(Tt,0,this)}attributeChangedCallback(t,e,n){const o=t.split("data-sr-")[1];lt[o]&&(this._texts[o]=n||lt[o])}disconnectedCallback(){ue(this),$t(this,!1),fo(this,de,this,!0),this._root=void 0}handleEvent(t){const e=t.target;t.type==="beforeinput"&&(this._value=(e==null?void 0:e.value)||""),t.type==="blur"&&Co(this),t.type==="click"&&Ao(this,t),t.type==="focus"&&To(this,t),t.type==="input"&&Io(this,t),t.type==="keydown"&&Lo(this,t),t.type==="mousedown"&&(St=this.contains(e)),t.type==="mouseup"&&(St=!1),t.type==="mutation"&&Y(this,t)}get multiple(){var t;return((t=h(this,"data-multiple"))!=null?t:rt)!==rt}set multiple(t){h(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=h(this,"data-creatable"))!=null?t:rt)!==rt}set creatable(t){h(this,"data-creatable",t?"":null)}get control(){return this._control||this.querySelector("input")}get list(){return this._list||this.querySelector("u-datalist,datalist")||null}get items(){return this._items||this.getElementsByTagName("data")}get options(){var t,e;const n=`${((t=this.list)==null?void 0:t.nodeName)==="U-DATALIST"?"u-":""}option`;return this._options||((e=this.list)==null?void 0:e.getElementsByTagName(n))}get values(){return[...this.items].map(({value:t})=>t)}add(t){var e;const n=ce(t);this.values.includes(n.value)||((e=this.control)==null||e.insertAdjacentElement("beforebegin",n))}},P=t=>{var e;return((e=t==null?void 0:t.textContent)==null?void 0:e.trim())||""},ce=t=>typeof t=="string"?V("data",t,{value:t}):t instanceof HTMLDataElement?t:V("data",t.label||t.value,{value:t.value||t.label||""}),ue=t=>{t._focus=t._control=t._items=t._list=t._options=void 0},Y=(t,e)=>{var n,o,i;let{_focus:s,_speak:a,_texts:r,items:u,control:d,list:v,multiple:f}=t;const{addedNodes:m,removedNodes:T}=(e==null?void 0:e.detail[0])||{},C=(e==null?void 0:e.detail[1])||(m==null?void 0:m[1])||(m==null?void 0:m[1])?null:(m==null?void 0:m[0])||(T==null?void 0:T[0]),z=f?u.length:1,Q=[];(C==null?void 0:C.nodeName)==="DATA"&&(f?s:C===s)&&(a=`${r[C.isConnected?"added":"removed"]} ${P(C)}, `,(So||s===d)&&(O.textContent=a),d==null||d.focus(),setTimeout(()=>{var p,x;(x=(p=(s==null?void 0:s.nodeName)==="DATA"?d:s)==null?void 0:p.focus)==null||x.call(p),t._speak="",$o?le(t,"blur",()=>Y(t),wo):setTimeout(Y,100,t)},100));const Vt=C!=null&&C.isConnected?C:u[0];for(const p of u)if(!f&&p!==Vt)p.remove();else{const x=P(p),J=p.value||x,Wt=`${a}${x}, ${r.remove}, ${Q.push(J)} ${r.of} ${z}`;h(p,"role","button"),h(p,"value",J),h(p,"tabindex","-1"),h(p,"aria-label",Wt)}for(const p of t.options||[]){const x=(n=h(p,"value"))!=null?n:P(p);h(p,"aria-label",a?`${a}${P(p)}`:null),h(p,"selected",Q.includes(x)?"":null)}const Yt=`${a}${P((o=d==null?void 0:d.labels)==null?void 0:o[0])}, ${f?z?r.found.replace("%d",`${z}`):r.empty:""}`;v&&h(v,"aria-multiselectable",`${f}`),d&&h(d,"list",_o(v)),d&&h(d,"aria-label",Yt);const M=t.querySelector("select");M&&(M.multiple=f);for(const p of(M==null?void 0:M.options)||[])p.remove();M==null||M.append(...Q.map(p=>new Option("",p,!0,!0))),(i=$t(t))==null||i.takeRecords()},Tt=(t,e)=>{const{multiple:n,control:o,items:i}=t;if(!(n||!o||!i[0])){if(e)return yo(o,P(t.items[0]));o.value=P(t.items[0])}},pe=t=>{var e;const{options:n=[],creatable:o,control:i,items:s,multiple:a}=t,r=((e=i==null?void 0:i.value)==null?void 0:e.trim())||"",u=r.toLowerCase()||null;let d=[...n].find(f=>f.label.trim().toLowerCase()===u);const v={bubbles:!0,cancelable:!0,detail:d};if(t.dispatchEvent(new CustomEvent("beforematch",v)))for(const f of n)f.selected=f===d;if(d=[...n].find(f=>f.selected),!d&&o&&r)return t.add(r);if(!d&&!a&&s[0])return W(t,s[0]);if(!d||t.values.includes(d.value))return Y(t);W(t,d,!1)},W=(t,e,n=!0)=>{const o=ce(e),i=[...t.items].find(a=>a.value===e.value),s={bubbles:!0,cancelable:!0,detail:i||o};i&&!n||t.dispatchEvent(new CustomEvent("beforechange",s))&&(i?i.remove():t.add(o),t.dispatchEvent(new CustomEvent("afterchange",s)))},To=(t,{target:e})=>{O||(O=go("assertive")),O.isConnected||document.body.appendChild(O),e instanceof HTMLElement&&(t._focus=e),t._items||(t._control=t.control||void 0,t._items=t.items,t._list=t.list||void 0,t._options=t.options||void 0)},Co=t=>St||setTimeout(xo,0,t),xo=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(Tt(t,!0),ue(t))},Ao=(t,e)=>{var n;const{clientX:o,clientY:i,target:s}=e;for(const a of t.items){const{top:r,right:u,bottom:d,left:v}=a.getBoundingClientRect();if(a.contains(s))return W(t,a);if(i>=r&&i<=d&&o>=v&&o<=u)return a.focus()}s===t&&((n=t.control)==null||n.focus())},Io=(t,e)=>{const{options:n=[],control:o,multiple:i}=t;if(!(e instanceof InputEvent?!e.inputType||e.inputType===ko:o==null?void 0:o.value))return i||pe(t);for(const a of n)if(a.value&&a.value===(o==null?void 0:o.value))return o.value=i?t._value:a.label,i&&e.stopImmediatePropagation(),W(t,a,i)},Lo=(t,e)=>{var n;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;const{_texts:o,control:i,items:s,multiple:a}=t,{key:r,repeat:u,target:d}=e,v=i&&i===d,f=v&&(i==null?void 0:i.selectionEnd);let m=v?s.length:[...s].indexOf(d);if(!(m===-1||!v&&mo(e))){if(r==="ArrowRight"&&!v)m+=1;else if(r==="ArrowLeft"&&!f)m-=1;else if(r==="Enter"&&v){const T=h(i,"form");return h(i,"form","#"),requestAnimationFrame(()=>h(i,"form",T)),a?pe(t):!t.items[0]&&O&&(O.textContent=`${o.invalid}${++Eo%2?" ":""}`),Tt(t,!0)}else if((r==="Backspace"||r==="Delete")&&!f){if(e.preventDefault(),!u&&s[m])return W(t,s[m]);v&&(m-=1)}else return v||(i==null?void 0:i.focus());e.preventDefault(),(n=s[Math.max(0,m)]||i)==null||n.focus()}};bo.define("u-combobox",kt);const Mo="1.1.8",Oo=(t,e,n=Number.POSITIVE_INFINITY)=>{const o=(n-1)/2,i=Math.max(Math.min(t-Math.floor(o),e-n+1),1),s=Math.min(Math.max(t+Math.ceil(o),n),e),a=Array.from({length:s+1-i},(r,u)=>u+i);return n>4&&i>1&&a.splice(0,2,1,0),n>3&&s<e&&a.splice(-2,2,0,e),a},Po=({current:t=1,total:e=10,show:n=7})=>({prev:t>1?t-1:0,next:t<e?t+1:0,pages:Oo(t,e,n).map((o,i)=>({current:o===t&&"page",key:`key-${o}-${i}`,page:o}))}),fe="_alert_k2qjp_1 _ds-alert_1efle_1",me="_app_k2qjp_1",he="_sticky_k2qjp_1",ve="_avatar_k2qjp_1 _ds-avatar_1efle_1",_e="_badge_k2qjp_1",be="_breadcrumbs_k2qjp_1 _ds-breadcrumbs_1efle_1",ge="_button_k2qjp_1 _ds-button_1efle_1",ye="_card_k2qjp_1",Ee="_group_k2qjp_1",we="_chip_k2qjp_1 _ds-chip_1efle_1",$e="_details_k2qjp_1 _ds-details_1efle_1",Se="_dialog_k2qjp_1 _ds-dialog_1efle_1",ke="_divider_k2qjp_1",Te="_errorsummary_k2qjp_1 _ds-error-summary_1efle_1",Ce="__errorsummary_k2qjp_1",xe="_field_k2qjp_1 _ds-field_1efle_1",Ae="_affixes_k2qjp_1 _ds-field-affixes_1efle_1",Ie="_fieldset_k2qjp_1 _ds-fieldset_1efle_1",Le="_heading_k2qjp_1 _ds-heading_1efle_1",Me="_ingress_k2qjp_1",Oe="_muted_k2qjp_1",Pe="_info_k2qjp_1",De="_prose_k2qjp_1",Ne="_helptext_k2qjp_1 _ds-focus_1efle_1",He="_input_k2qjp_1 _ds-input_1efle_1",Re="_grid_k2qjp_1",qe="_flex_k2qjp_1",je="_link_k2qjp_1",Be="_logo_k2qjp_1",Ue="_pagination_k2qjp_1 _ds-pagination_1efle_1",Fe="_popover_k2qjp_1",Ve="_progress_k2qjp_1",Ye="__indeterminate_k2qjp_1",We="_skeleton_k2qjp_1 _ds-skeleton_1efle_1",Ke="__skeleton_k2qjp_1",Ge="_spinner_k2qjp_1",Xe="_table_k2qjp_1 _ds-table_1efle_1",ze="__scrollShadow_k2qjp_1",Qe="_tabs_k2qjp_1 _ds-tabs_1efle_1",Je="_tag_k2qjp_1 _ds-tag_1efle_1",Ze="_togglegroup_k2qjp_1",tn="__tooltip_k2qjp_1",en="_validation_k2qjp_1 _ds-validation-message_1efle_1",nn="_body_k2qjp_148",y={alert:fe,app:me,sticky:he,avatar:ve,badge:_e,breadcrumbs:be,button:ge,card:ye,group:Ee,chip:we,details:$e,dialog:Se,divider:ke,errorsummary:Te,_errorsummary:Ce,field:xe,affixes:Ae,fieldset:Ie,heading:Le,ingress:Me,muted:Oe,info:Pe,prose:De,helptext:Ne,input:He,grid:Re,flex:qe,link:je,logo:Be,pagination:Ue,popover:Fe,progress:Ve,_indeterminate:Ye,skeleton:We,_skeleton:Ke,spinner:Ge,table:Xe,_scrollShadow:ze,tabs:Qe,tag:Je,togglegroup:Ze,_tooltip:tn,validation:en,body:nn},Do=Object.freeze(Object.defineProperty({__proto__:null,_errorsummary:Ce,_indeterminate:Ye,_scrollShadow:ze,_skeleton:Ke,_tooltip:tn,affixes:Ae,alert:fe,app:me,avatar:ve,badge:_e,body:nn,breadcrumbs:be,button:ge,card:ye,chip:we,default:y,details:$e,dialog:Se,divider:ke,errorsummary:Te,field:xe,fieldset:Ie,flex:qe,grid:Re,group:Ee,heading:Le,helptext:Ne,info:Pe,ingress:Me,input:He,link:je,logo:Be,muted:Oe,pagination:Ue,popover:Fe,progress:Ve,prose:De,skeleton:We,spinner:Ge,sticky:he,table:Xe,tabs:Qe,tag:Je,togglegroup:Ze,validation:en},Symbol.toStringTag,{value:"Module"})),$={capture:!0,passive:!0},dt=typeof window<"u"&&typeof document<"u";function No(t,e){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>t(...o),e)}}function l(t,e,n){return n===void 0?t.getAttribute(e)??null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}let Ho=0;const Ro=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function Ct(t){return t.id||(t.id=`${Ro}${++Ho}`),t.id}const qo=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,e[`${t}EventListener`](...n)},_=(t,...e)=>qo("add",t,e),A=dt?document.createElement("div"):null,ct=new Map,jo=()=>{for(const[t,e]of ct)e()};A&&(A.style.cssText="position:absolute;padding:1px;top:0;left:0px",_(window,"load,resize,scroll",jo,$));const q={top:0,right:1,bottom:2,left:3};function D(t,e,n){var J;if(e===!1||!e.isConnected||!t.isConnected)return ct.delete(t);if(A!=null&&A.isConnected||document.body.append(A||""),!ct.has(t)){const Wt=q[n]??q.bottom;return(J=ct.set(t,()=>D(t,e,Wt)).get(t))==null?void 0:J()}const o=e instanceof HTMLElement,{offsetWidth:i,offsetHeight:s}=t,a=o?e.offsetWidth:e.clientWidth,r=o?e.offsetHeight:e.clientHeight,{width:u,height:d,left:v,top:f}=e.getBoundingClientRect(),m=Math.round(v-(a-u)/2),T=Math.round(f-(r-d)/2),zn=m-i>0,C=a+a+i<window.innerWidth,z=T-s>0,Q=T+r+s<window.innerHeight,Vt=n===q.right&&C||!zn,Yt=n===q.bottom&&Q||!z,M=Math.min(Math.max(10,m-(i-a)/2),window.innerWidth-i-10),p=Math.min(Math.max(10,T-(s-r)/2),window.innerHeight-s-10),x=n===q.top||n===q.bottom;t.style.left=`${Math.round(x?M:Vt?m+a:m-i)}px`,t.style.top=`${Math.round(x?Yt?T+r:T-s:p)}px`,A==null||A.style.setProperty("translate",`${Math.round(window.scrollX+m+a+i+30)}px ${Math.round(window.scrollY+T+r+s+30)}px`)}function on(t){let e=0;const n=()=>setTimeout(o,200),o=()=>{t([],i),i.takeRecords(),e=0},i=new MutationObserver(()=>{e||(e=requestAnimationFrame(n))});return i}const xt=new WeakMap,j=(t,e,n)=>{const o=t.getElementsByClassName(e),i=xt.get(t)||[];i.length||(xt.set(t,i),on((s,a)=>{if(t.isConnected&&(i!=null&&i.length))for(const r of i)r();else a==null||a.disconnect(),xt.delete(t)}).observe(t,{attributeFilter:["class"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>n(o))},k=t=>{if(!dt)return;const e=()=>requestAnimationFrame(t);document.readyState==="complete"?e():_(window,"load",e)},At=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement);typeof window<"u"&&window.CSSStyleSheet&&document.adoptedStyleSheets&&(()=>{const t="--mtds-app-expanded",e=new CSSStyleSheet;document.adoptedStyleSheets.push(e),window.mtdsToggleAppExpanded=n=>{var o,i;try{const s=!((o=window.localStorage.getItem(t))!=null&&o.includes("false")),a=n??!s;(i=e.replaceSync)==null||i.call(e,`:root { ${t}: var(${t}--${a})}`),window.localStorage.setItem(t,a)}catch{}},window.mtdsToggleAppExpanded(!1)})();const sn=y.app.split(" ")[0],Bo=y.sticky.split(" ")[0],Uo='[data-command="toggle-app-expanded"]',an=`.${sn} > dialog,.${sn} dialog ~ main`,rn=t=>{document.startViewTransition?document.startViewTransition(t):t()},ln=t=>rn(()=>{var e;return(e=window.mtdsToggleAppExpanded)==null?void 0:e.call(window,t)});function Fo({target:t}){if(!(!(t instanceof HTMLButtonElement)||!t.matches(Uo))){if(getComputedStyle(t).position==="sticky")return ln();rn(()=>{const e=document.querySelector(an);e==null||e.setAttribute("data-closedby","any"),e==null||e.showModal()})}}function Vo(){var t;(t=document.querySelector(an))==null||t.close()}let It=0,B,I=0,b,Lt=0,ut=0,Mt=!1,Ot=0,N=0;function Yo([t]){b=t,dn()}function dn(){var n;if(!(b!=null&&b.isConnected))return;const t=window.scrollY,e=t<N;N=t,e!==B&&(It=(((n=b.parentElement)==null?void 0:n.getBoundingClientRect().top)||0)+N,B=e,Lt=b.offsetHeight,ut=b.getBoundingClientRect().top+N,Mt=b.offsetHeight<=window.innerHeight,Ot=window.innerHeight),!(I===-1&&Mt)&&(I!==-1&&(Mt||B&&N<=ut)?(b.style.setProperty("--pos","sticky"),b.style.setProperty("--top","0px"),I=-1):I===-1&&!B?(b.style.setProperty("--pos","relative"),b.style.setProperty("--top",`${Math.max(0,N-It)}px`),I=0):I!==1&&!B&&N+Ot>=ut+Lt?(b.style.setProperty("--pos","sticky"),b.style.setProperty("--top",`${Ot-Lt}px`),I=1):I===1&&B&&(b.style.setProperty("--pos","relative"),b.style.setProperty("--top",`${ut-It}px`),I=0))}k(()=>{j(document.documentElement,Bo,Yo),_(document,"click",Fo,$),_(window,"resize",No(Vo,100),$),_(window,"scroll",dn,$)});const Wo=y.breadcrumbs.split(" ")[0];function Ko(t){for(const e of t)e.querySelectorAll("li a").forEach((n,o,{length:i})=>{l(n,"aria-current",o===i-1?"page":null)})}k(()=>j(document.documentElement,Wo,Ko));const Go=y.dialog.split(" ")[0],Xo=dt?document.getElementsByClassName(Go):[],zo=()=>{for(const t of Xo)t.isConnected&&t.showModal&&t.close&&(t.matches('[open]:not([data-modal="false"]):not(:modal)')?(l(t,"open",null),t.showModal()):t.matches(":modal:not([open])")&&(l(t,"open",""),t.close()))},Qo=({clientX:t,clientY:e,target:n})=>{var o;if(n instanceof HTMLDialogElement&&l(n,"data-closedby")==="any"){const{top:i,right:s,bottom:a,left:r}=n.getBoundingClientRect();i<=e&&e<=a&&r<=t&&t<=s||n.close()}else n instanceof Element&&n.closest('button[data-command="close"]')&&((o=n==null?void 0:n.closest("dialog"))==null||o.close())};k(()=>{_(document,"click",Qo,$),on(zo).observe(document.documentElement,{attributeFilter:["open"],attributes:!0,childList:!0,subtree:!0})});function Jo(t){var n;if(t.animationName!==y._errorsummary)return;const e=(n=t.target)==null?void 0:n.firstElementChild;e instanceof HTMLHeadingElement&&(l(e,"tabindex","-1"),e.focus())}k(()=>_(document,"animationend",Jo,$));var Zo=Object.defineProperty,cn=Object.getOwnPropertySymbols,ti=Object.prototype.hasOwnProperty,ei=Object.prototype.propertyIsEnumerable,un=(t,e,n)=>e in t?Zo(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,ni=(t,e)=>{for(var n in e||(e={}))ti.call(e,n)&&un(t,n,e[n]);if(cn)for(var n of cn(e))ei.call(e,n)&&un(t,n,e[n]);return t},K=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",pn=K&&/android/i.test(navigator.userAgent),Pt=K&&/iPad|iPhone|iPod/.test(navigator.userAgent),fn;K&&/^Mac/i.test(((fn=navigator.userAgentData)==null?void 0:fn.platform)||navigator.platform);var oi=`${pn?"data":"aria"}-labelledby`,ii=":host(:not([hidden])) { display: block }",si="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",mn=typeof HTMLElement>"u"?class{}:HTMLElement;function c(t,e,n){return n===void 0?t.getAttribute(e):(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var hn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},pt=(t,...e)=>hn("add",t,e),ft=(t,...e)=>hn("remove",t,e),ai=(t,e)=>t.attachShadow({mode:"open"}).append(Nt("slot"),Nt("style",e)),mt=new WeakMap,vn=(t,e)=>{if(e===void 0)return mt.get(t);try{mt.get(t).disconnect(),mt.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),mt.set(t,n)}},_n=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},ri=0,Dt=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++ri).toString(32)}`),t.id):"",Nt=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},bn={define:(t,e)=>!K||window.customElements.get(t)||window.customElements.define(t,e)},li=t=>{const e=Nt("div");return e.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",c(e,"aria-live",t),e},di=(t,e,n="")=>{var o,i;const s={bubbles:!0,composed:!0,data:e,inputType:n},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(o=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:o.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},Ht="disabled",G="selected",ci=class extends mn{static get observedAttributes(){return[Ht,G]}connectedCallback(){Pt||(this.tabIndex=-1),this.hasAttribute("role")||c(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){c(this,"aria-disabled",`${this.disabled}`),c(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[G]}set defaultSelected(t){this[G]=t}get disabled(){return c(this,Ht)!==null}set disabled(t){c(this,Ht,t?"":null)}get form(){return this.closest("form")}get index(){var t;return[...((t=this.parentElement)==null?void 0:t.options)||[this]].indexOf(this)}get label(){var t;return(t=c(this,"label"))!=null?t:this.text}set label(t){c(this,"label",t)}get selected(){return c(this,G)!==null}set selected(t){c(this,G,t?"":null)}get text(){var t;return((t=this.textContent)==null?void 0:t.trim())||""}set text(t){this.textContent=t}get value(){var t;return(t=c(this,"value"))!=null?t:this.text}set value(t){c(this,"value",t)}};bn.define("u-option",ci);var gn,ui=0,U,yn=0,Rt=!1,pi=Pt||pn,En="click,focusout,input,keydown,mousedown,mouseup",wn="focus,focusin,blur,focusout",ht={singular:"%d hit",plural:"%d hits"},$n=class extends mn{constructor(){super(),this._texts=ni({},ht),this._value="",ai(this,`${ii}
6
+ ::slotted(data:focus) { ${fo} }`))}static get observedAttributes(){return Object.keys(dt).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=go(this),ce(this,ue,this,!0),Tt(this,{childList:!0}),setTimeout(U,0,this),setTimeout(ct,0,this)}attributeChangedCallback(t,e,n){const o=t.split("data-sr-")[1];dt[o]&&(this._texts[o]=n||dt[o])}disconnectedCallback(){fe(this),Tt(this,!1),mo(this,ue,this,!0),this._root=void 0}handleEvent(t){const e=t.target;t.type==="beforeinput"&&(this._value=(e==null?void 0:e.value)||""),t.type==="blur"&&xo(this),t.type==="click"&&Io(this,t),t.type==="focus"&&Co(this,t),t.type==="input"&&Lo(this,t),t.type==="keydown"&&Mo(this,t),t.type==="mousedown"&&(Ct=this.contains(e)),t.type==="mouseup"&&(Ct=!1),t.type==="mutation"&&U(this,t)}get multiple(){var t;return((t=m(this,"data-multiple"))!=null?t:lt)!==lt}set multiple(t){m(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=m(this,"data-creatable"))!=null?t:lt)!==lt}set creatable(t){m(this,"data-creatable",t?"":null)}get control(){return this._control||this.querySelector("input")}get list(){return this._list||this.querySelector("u-datalist,datalist")||null}get items(){return this._items||this.getElementsByTagName("data")}get options(){var t,e;const n=`${((t=this.list)==null?void 0:t.nodeName)==="U-DATALIST"?"u-":""}option`;return this._options||((e=this.list)==null?void 0:e.getElementsByTagName(n))}get values(){return[...this.items].map(({value:t})=>t)}add(t){var e;const n=At(t);this.values.includes(n.value)||((e=this.control)==null||e.insertAdjacentElement("beforebegin",n))}},P=t=>{var e;return((e=t==null?void 0:t.textContent)==null?void 0:e.trim())||""},At=t=>typeof t=="string"?j("data",t,{value:t}):t instanceof HTMLDataElement?t:j("data",t.label||t.value,{value:t.value||t.label||""}),fe=t=>{t._focus=t._control=t._items=t._list=t._options=void 0},U=(t,e)=>{var n,o,i;let{_focus:s,_speak:a,_texts:r,items:d,control:c,list:h,multiple:p}=t;const{addedNodes:b,removedNodes:I}=(e==null?void 0:e.detail[0])||{},T=(e==null?void 0:e.detail[1])||(b==null?void 0:b[1])||(b==null?void 0:b[1])?null:(b==null?void 0:b[0])||(I==null?void 0:I[0]),Q=p?d.length:1,J=[];(T==null?void 0:T.nodeName)==="DATA"&&(p?s:T===s)&&(a=`${r[T.isConnected?"added":"removed"]} ${P(T)}, `,(ko||s===c)&&(O.textContent=a),c==null||c.focus(),setTimeout(()=>{var f,M;(M=(f=(s==null?void 0:s.nodeName)==="DATA"?c:s)==null?void 0:f.focus)==null||M.call(f),t._speak="",So?ce(t,"blur",()=>U(t),$o):setTimeout(U,100,t)},100));const jt=T!=null&&T.isConnected?T:d[0];for(const f of d)if(!p&&f!==jt)f.remove();else{const M=P(f),Z=f.value||M,yt=`${a}${M}, ${r.remove}, ${J.push(Z)} ${r.of} ${Q}`;m(f,"role","button"),m(f,"value",Z),m(f,"tabindex","-1"),m(f,"aria-label",yt)}for(const f of t.options||[]){const M=(n=m(f,"value"))!=null?n:P(f);m(f,"aria-label",a?`${a}${P(f)}`:null),m(f,"selected",J.includes(M)?"":null)}const Gt=`${a}${P((o=c==null?void 0:c.labels)==null?void 0:o[0])}, ${p?Q?r.found.replace("%d",`${Q}`):r.empty:""}`;h&&m(h,"aria-multiselectable",`${p}`),c&&m(c,"list",_o(h)),c&&m(c,"aria-label",Gt),c&&(t._value=c.value);const L=t.querySelector("select");L&&(L.multiple=p),L&&(L.textContent=""),L==null||L.append(...J.map(f=>new Option("",f,!0,!0))),(i=Tt(t))==null||i.takeRecords()},ct=(t,e)=>{const{multiple:n,control:o,items:i}=t;if(!(n||!o||!i[0])){if(e)return Eo(o,P(t.items[0]),"insertText");o.value=P(t.items[0])}},pe=t=>{var e;const{options:n=[],creatable:o,control:i,items:s,multiple:a}=t,r=((e=i==null?void 0:i.value)==null?void 0:e.trim())||"",d=r.toLowerCase()||null;let c=[...n].find(p=>p.label.trim().toLowerCase()===d);const h={bubbles:!0,cancelable:!0,detail:c};if(t.dispatchEvent(new CustomEvent("beforematch",h)))for(const p of n)p.selected=p===c;if(c=[...n].find(p=>p.selected),!c&&o&&r)return F(t,At(r));if(!c&&!a&&s[0])return F(t,s[0]);if(!c||t.values.includes(c.value))return U(t);F(t,c,!1)},F=(t,e,n=!0)=>{const o=At(e),i=[...t.items].find(a=>a.value===e.value),s={bubbles:!0,cancelable:!0,detail:i||o};if(!(i&&!n)){if(!t.dispatchEvent(new CustomEvent("beforechange",s)))return U(t);i?i.remove():t.add(o),t.dispatchEvent(new CustomEvent("afterchange",s))}},Co=(t,{target:e})=>{O||(O=yo("assertive")),O.isConnected||document.body.appendChild(O),e instanceof HTMLElement&&(t._focus=e),t._items||(t._control=t.control||void 0,t._items=t.items,t._list=t.list||void 0,t._options=t.options||void 0)},xo=t=>Ct||setTimeout(Ao,0,t),Ao=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(ct(t,!0),fe(t))},Io=(t,e)=>{var n;const{clientX:o,clientY:i,target:s}=e;for(const a of t.items){const{top:r,right:d,bottom:c,left:h}=a.getBoundingClientRect();if(a.contains(s))return F(t,a);if(i>=r&&i<=c&&o>=h&&o<=d)return a.focus()}s===t&&((n=t.control)==null||n.focus())},Lo=(t,e)=>{var n;const{options:o=[],control:i,multiple:s}=t,a=((n=i==null?void 0:i.value)==null?void 0:n.trim())||"";if(!(e instanceof InputEvent?!e.inputType||e.inputType===To:!!a))return s||pe(t);e.stopImmediatePropagation(),i&&(i.value=t._value);for(const d of o)if(d.value&&d.value===a)return F(t,d,s),setTimeout(ct,0,t,!0)},Mo=(t,e)=>{var n;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;const{_texts:o,control:i,items:s,multiple:a}=t,{key:r,repeat:d,target:c}=e,h=i&&i===c,p=h&&(i==null?void 0:i.selectionEnd);let b=h?s.length:[...s].indexOf(c);if(!(b===-1||!h&&ho(e))){if(r==="ArrowRight"&&!h)b+=1;else if(r==="ArrowLeft"&&!p)b-=1;else if(r==="Enter"&&h){const I=m(i,"form");return m(i,"form","#"),requestAnimationFrame(()=>m(i,"form",I)),a?pe(t):!t.items[0]&&O&&(O.textContent=`${o.invalid}${++wo%2?" ":""}`),ct(t,!0)}else if((r==="Backspace"||r==="Delete")&&!p){if(e.preventDefault(),!d&&s[b])return F(t,s[b]);h&&(b-=1)}else return h||(i==null?void 0:i.focus());e.preventDefault(),(n=s[Math.max(0,b)]||i)==null||n.focus()}};bo.define("u-combobox",xt);const Oo="1.2.1",Po=(t,e,n=Number.POSITIVE_INFINITY)=>{const o=(n-1)/2,i=Math.max(Math.min(t-Math.floor(o),e-n+1),1),s=Math.min(Math.max(t+Math.ceil(o),n),e),a=Array.from({length:s+1-i},(r,d)=>d+i);return n>4&&i>1&&a.splice(0,2,1,0),n>3&&s<e&&a.splice(-2,2,0,e),a},Do=({current:t=1,total:e=10,show:n=7})=>({prev:t>1?t-1:0,next:t<e?t+1:0,pages:Po(t,e,n).map((o,i)=>({current:o===t&&"page",key:`key-${o}-${i}`,page:o}))}),me="_alert_1gkgt_1 _ds-alert_1efle_1",he="_app_1gkgt_1",ge="_sticky_1gkgt_1",ve="_avatar_1gkgt_1 _ds-avatar_1efle_1",_e="_badge_1gkgt_1",be="_breadcrumbs_1gkgt_1 _ds-breadcrumbs_1efle_1",ye="_button_1gkgt_1 _ds-button_1efle_1",Ee="_card_1gkgt_1",we="_group_1gkgt_1",$e="_chip_1gkgt_1 _ds-chip_1efle_1",Se="_details_1gkgt_1 _ds-details_1efle_1",ke="_dialog_1gkgt_1 _ds-dialog_1efle_1",Te="_divider_1gkgt_1",Ce="_errorsummary_1gkgt_1 _ds-error-summary_1efle_1",xe="__errorsummary_1gkgt_1",Ae="_field_1gkgt_1 _ds-field_1efle_1",Ie="_affixes_1gkgt_1 _ds-field-affixes_1efle_1",Le="_fieldset_1gkgt_1 _ds-fieldset_1efle_1",Me="_heading_1gkgt_1 _ds-heading_1efle_1",Oe="_ingress_1gkgt_1",Pe="_muted_1gkgt_1",De="_info_1gkgt_1",Ne="_prose_1gkgt_1",He="_helptext_1gkgt_1 _ds-focus_1efle_1",Re="_input_1gkgt_1 _ds-input_1efle_1",Be="_grid_1gkgt_1",Ue="_flex_1gkgt_1",Fe="_link_1gkgt_1",Ve="_logo_1gkgt_1",qe="_pagination_1gkgt_1 _ds-pagination_1efle_1",Ye="_popover_1gkgt_1",We="_progress_1gkgt_1",Ke="__indeterminate_1gkgt_1",je="_skeleton_1gkgt_1 _ds-skeleton_1efle_1",Ge="__skeleton_1gkgt_1",Xe="_spinner_1gkgt_1",ze="_table_1gkgt_1 _ds-table_1efle_1",Qe="__scrollShadow_1gkgt_1",Je="_tabs_1gkgt_1 _ds-tabs_1efle_1",Ze="__scrollMask_1gkgt_1",tn="_tag_1gkgt_1 _ds-tag_1efle_1",en="_togglegroup_1gkgt_1",nn="__tooltip_1gkgt_1",on="_validation_1gkgt_1 _ds-validation-message_1efle_1",sn="_body_1gkgt_148",y={alert:me,app:he,sticky:ge,avatar:ve,badge:_e,breadcrumbs:be,button:ye,card:Ee,group:we,chip:$e,details:Se,dialog:ke,divider:Te,errorsummary:Ce,_errorsummary:xe,field:Ae,affixes:Ie,fieldset:Le,heading:Me,ingress:Oe,muted:Pe,info:De,prose:Ne,helptext:He,input:Re,grid:Be,flex:Ue,link:Fe,logo:Ve,pagination:qe,popover:Ye,progress:We,_indeterminate:Ke,skeleton:je,_skeleton:Ge,spinner:Xe,table:ze,_scrollShadow:Qe,tabs:Je,_scrollMask:Ze,tag:tn,togglegroup:en,_tooltip:nn,validation:on,body:sn},No=Object.freeze(Object.defineProperty({__proto__:null,_errorsummary:xe,_indeterminate:Ke,_scrollMask:Ze,_scrollShadow:Qe,_skeleton:Ge,_tooltip:nn,affixes:Ie,alert:me,app:he,avatar:ve,badge:_e,body:sn,breadcrumbs:be,button:ye,card:Ee,chip:$e,default:y,details:Se,dialog:ke,divider:Te,errorsummary:Ce,field:Ae,fieldset:Le,flex:Ue,grid:Be,group:we,heading:Me,helptext:He,info:De,ingress:Oe,input:Re,link:Fe,logo:Ve,muted:Pe,pagination:qe,popover:Ye,progress:We,prose:Ne,skeleton:je,spinner:Xe,sticky:ge,table:ze,tabs:Je,tag:tn,togglegroup:en,validation:on},Symbol.toStringTag,{value:"Module"})),$={capture:!0,passive:!0},ut=typeof window<"u"&&typeof document<"u";function Ho(t,e){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>t(...o),e)}}function l(t,e,n){return n===void 0?t.getAttribute(e)??null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}let Ro=0;const Bo=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function It(t){return t.id||(t.id=`${Bo}${++Ro}`),t.id}const Uo=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,e[`${t}EventListener`](...n)},g=(t,...e)=>Uo("add",t,e),C=ut?document.createElement("div"):null,ft=new Map,Fo=()=>{for(const[t,e]of ft)e()};C&&(C.style.cssText="position:absolute;padding:1px;top:0;left:0px",g(window,"load,resize,scroll",Fo,$));const V={top:0,right:1,bottom:2,left:3};function D(t,e,n,o){var yt;if(e===!1||!e.isConnected||!t.isConnected)return ft.delete(t);if(C!=null&&C.isConnected||document.body.append(C||""),!ft.has(t)){const Zi=V[n]??V.bottom;return(yt=ft.set(t,()=>D(t,e,Zi,o)).get(t))==null?void 0:yt()}const i=e instanceof HTMLElement,{offsetWidth:s,offsetHeight:a}=t,r=i?e.offsetWidth:e.clientWidth,d=i?e.offsetHeight:e.clientHeight,{width:c,height:h,left:p,top:b}=e.getBoundingClientRect(),I=Math.round(p-(r-c)/2),R=Math.round(b-(d-h)/2),T=I-s>0,Q=r+r+s<window.innerWidth,J=R-a>0,jt=R+d+a<window.innerHeight,Gt=n===V.right&&(o||Q)||!T,L=n===V.bottom&&(o||jt)||!J,f=Math.min(Math.max(10,I-(s-r)/2),window.innerWidth-s-10),M=Math.min(Math.max(10,R-(a-d)/2),window.innerHeight-a-10),Z=n===V.top||n===V.bottom;t.style.left=`${Math.round(Z?f:Gt?I+r:I-s)}px`,t.style.top=`${Math.round(Z?L?R+d:R-a:M)}px`,C==null||C.style.setProperty("translate",`0px ${Math.round(L?window.scrollY+R+d+a+30:0)}px`)}function an(t){let e=0;const n=()=>setTimeout(o,200),o=()=>{t([],i),i.takeRecords(),e=0},i=new MutationObserver(()=>{e||(e=requestAnimationFrame(n))});return i}const Lt=new WeakMap,q=(t,e,n)=>{const o=t.getElementsByClassName(e),i=Lt.get(t)||[];i.length||(Lt.set(t,i),an((s,a)=>{if(t.isConnected&&(i!=null&&i.length))for(const r of i)r();else a==null||a.disconnect(),Lt.delete(t)}).observe(t,{attributeFilter:["class"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>n(o))},k=t=>{if(!ut)return;const e=()=>requestAnimationFrame(t);document.readyState==="complete"?e():g(window,"load",e)},Mt=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement);typeof window<"u"&&window.CSSStyleSheet&&document.adoptedStyleSheets&&(()=>{const t="--mtds-app-expanded",e=new CSSStyleSheet,n=()=>{var o;return!((o=window.localStorage.getItem(t))!=null&&o.includes("false"))};document.adoptedStyleSheets.push(e),window.mtdsToggleAppExpanded=o=>{var i;try{const s=o??!n();(i=e.replaceSync)==null||i.call(e,`:root { ${t}: var(${t}--${s})}`),window.localStorage.setItem(t,s)}catch{}},window.mtdsToggleAppExpanded(n())})();const rn=y.app.split(" ")[0],Vo=y.sticky.split(" ")[0],qo='[data-command="toggle-app-expanded"]',ln=`.${rn} > dialog,.${rn} dialog ~ main`,dn=t=>{document.startViewTransition?document.startViewTransition(t):t()},cn=t=>dn(()=>{var e;return(e=window.mtdsToggleAppExpanded)==null?void 0:e.call(window,t)});function Yo({target:t}){if(!(!(t instanceof HTMLButtonElement)||!t.matches(qo))){if(getComputedStyle(t).position==="sticky")return cn();dn(()=>{const e=document.querySelector(ln);e==null||e.setAttribute("data-closedby","any"),e==null||e.showModal()})}}function Wo(){var t;(t=document.querySelector(ln))==null||t.close()}let Ot=0,Y,x=0,v,Pt=0,pt=0,Dt=!1,Nt=0,N=0;function Ko([t]){v=t,un()}function un(){var n;if(!(v!=null&&v.isConnected))return;const t=window.scrollY,e=t<N;N=t,e!==Y&&(Ot=(((n=v.parentElement)==null?void 0:n.getBoundingClientRect().top)||0)+N,Y=e,Pt=v.offsetHeight,pt=v.getBoundingClientRect().top+N,Dt=v.offsetHeight<=window.innerHeight,Nt=window.innerHeight),!(x===-1&&Dt)&&(x!==-1&&(Dt||Y&&N<=pt)?(v.style.setProperty("--pos","sticky"),v.style.setProperty("--top","0px"),x=-1):x===-1&&!Y?(v.style.setProperty("--pos","relative"),v.style.setProperty("--top",`${Math.max(0,N-Ot)}px`),x=0):x!==1&&!Y&&N+Nt>=pt+Pt?(v.style.setProperty("--pos","sticky"),v.style.setProperty("--top",`${Nt-Pt}px`),x=1):x===1&&Y&&(v.style.setProperty("--pos","relative"),v.style.setProperty("--top",`${pt-Ot}px`),x=0))}k(()=>{q(document.documentElement,Vo,Ko),g(document,"click",Yo,$),g(window,"resize",Ho(Wo,100),$),g(window,"scroll",un,$)});const jo=y.breadcrumbs.split(" ")[0];function Go(t){for(const e of t)e.querySelectorAll("li a").forEach((n,o,{length:i})=>{l(n,"aria-current",o===i-1?"page":null)})}k(()=>q(document.documentElement,jo,Go));const Xo=y.dialog.split(" ")[0],zo=ut?document.getElementsByClassName(Xo):[],Qo=()=>{for(const t of zo)t.isConnected&&t.showModal&&t.close&&(t.matches('[open]:not([data-modal="false"]):not(:modal)')?(l(t,"open",null),t.showModal()):t.matches(":modal:not([open])")&&(l(t,"open",""),t.close()))},Jo=({clientX:t,clientY:e,target:n})=>{var o;if(n instanceof HTMLDialogElement&&l(n,"data-closedby")==="any"){const{top:i,right:s,bottom:a,left:r}=n.getBoundingClientRect();i<=e&&e<=a&&r<=t&&t<=s||n.close()}else n instanceof Element&&n.closest('button[data-command="close"]')&&((o=n==null?void 0:n.closest("dialog"))==null||o.close())};k(()=>{g(document,"click",Jo,$),an(Qo).observe(document.documentElement,{attributeFilter:["open"],attributes:!0,childList:!0,subtree:!0})});function Zo(t){var n;if(t.animationName!==y._errorsummary)return;const e=(n=t.target)==null?void 0:n.firstElementChild;e instanceof HTMLHeadingElement&&(l(e,"tabindex","-1"),e.focus())}k(()=>g(document,"animationend",Zo,$));var ti=Object.defineProperty,fn=Object.getOwnPropertySymbols,ei=Object.prototype.hasOwnProperty,ni=Object.prototype.propertyIsEnumerable,pn=(t,e,n)=>e in t?ti(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,oi=(t,e)=>{for(var n in e||(e={}))ei.call(e,n)&&pn(t,n,e[n]);if(fn)for(var n of fn(e))ni.call(e,n)&&pn(t,n,e[n]);return t},G=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",mn=G&&/android/i.test(navigator.userAgent),Ht=G&&/iPad|iPhone|iPod/.test(navigator.userAgent),hn;G&&/^Mac/i.test(((hn=navigator.userAgentData)==null?void 0:hn.platform)||navigator.platform);var ii=`${mn?"data":"aria"}-labelledby`,si=":host(:not([hidden])) { display: block }",ai="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",gn=typeof HTMLElement>"u"?class{}:HTMLElement;function u(t,e,n){return n===void 0?t.getAttribute(e):(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var vn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},mt=(t,...e)=>vn("add",t,e),ht=(t,...e)=>vn("remove",t,e),ri=(t,e)=>t.attachShadow({mode:"open"}).append(Bt("slot"),Bt("style",e)),gt=new WeakMap,_n=(t,e)=>{if(e===void 0)return gt.get(t);try{gt.get(t).disconnect(),gt.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),gt.set(t,n)}},bn=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},li=0,Rt=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++li).toString(32)}`),t.id):"",Bt=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},yn={define:(t,e)=>!G||window.customElements.get(t)||window.customElements.define(t,e)},di=t=>{const e=Bt("div");return e.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",u(e,"aria-live",t),e},ci=(t,e,n="")=>{var o,i;const s={bubbles:!0,composed:!0,data:e,inputType:n},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(o=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:o.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},Ut="disabled",X="selected",ui=class extends gn{static get observedAttributes(){return[Ut,X]}connectedCallback(){Ht||(this.tabIndex=-1),this.hasAttribute("role")||u(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){u(this,"aria-disabled",`${this.disabled}`),u(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[X]}set defaultSelected(t){this[X]=t}get disabled(){return u(this,Ut)!==null}set disabled(t){u(this,Ut,t?"":null)}get form(){return this.closest("form")}get index(){var t;return[...((t=this.parentElement)==null?void 0:t.options)||[this]].indexOf(this)}get label(){var t;return(t=u(this,"label"))!=null?t:this.text}set label(t){u(this,"label",t)}get selected(){return u(this,X)!==null}set selected(t){u(this,X,t?"":null)}get text(){var t;return((t=this.textContent)==null?void 0:t.trim())||""}set text(t){this.textContent=t}get value(){var t;return(t=u(this,"value"))!=null?t:this.text}set value(t){u(this,"value",t)}};yn.define("u-option",ui);var En,fi=0,W,wn=0,Ft=!1,pi=Ht||mn,$n="click,focusout,input,keydown,mousedown,mouseup",Sn="focus,focusin,blur,focusout",vt={singular:"%d hit",plural:"%d hits"},kn=class extends gn{constructor(){super(),this._texts=oi({},vt),this._value="",ri(this,`${si}
7
7
  ::slotted(u-option) { display: block; cursor: pointer }
8
- ::slotted(u-option:focus) { ${si} }
8
+ ::slotted(u-option:focus) { ${ai} }
9
9
  ::slotted(u-option[aria-hidden="true"]),
10
10
  ::slotted(u-option[disabled]),
11
- ::slotted(u-option[hidden]) { display: none !important }`)}static get observedAttributes(){return["id",...Object.keys(ht).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=_n(this),c(this,"role","listbox"),c(this,"tabindex","-1"),pt(this._root,"focusin",this),pt(this._root,"focus",this,!0),vn(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){ft(this._root||this,"focus",this,!0),ft(this._root||this,"focusin",this),vn(this,!1),qt(this),this._root=void 0}attributeChangedCallback(t,e,n){const o=t==null?void 0:t.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(ht[o])this._texts[o]=n||ht[o];else if(this._root)for(const s of this._root.querySelectorAll(i))Sn(this,s)}handleEvent(t){const{target:e,type:n}=t;t.defaultPrevented||(n==="click"&&vi(this,t),(n==="focus"||n==="focusin")&&fi(this,t),(n==="blur"||n==="focusout")&&mi(this,t),n==="keydown"&&bi(this,t),n==="mousedown"&&(Rt=this.contains(e)),n==="mouseup"&&(Rt=!1),(n==="mutation"||n==="input")&&(clearTimeout(yn),yn=setTimeout(kn,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},X=(t,e)=>{var n;t.hidden===e&&(t.hidden=!e,t._input&&Sn(t,t._input,e),t.popover&&((n=t._input)!=null&&n.isConnected)&&(c(t._input,"popovertarget",Dt(t)),c(t,"popover","manual"),t.togglePopover(e)),e&&kn(t))},qt=t=>{ft(t._input||t,wn,t),ft(t._root||t,En,t),X(t,!1),t._input=void 0},Sn=(t,e,n=!1)=>{pt(e,wn,t,!0),c(e,"aria-autocomplete","list"),c(e,"aria-controls",Dt(t)),c(e,"aria-expanded",`${pi?n:"true"}`),c(e,"autocomplete","off"),c(e,"role","combobox")},fi=(t,e)=>{var n;const o=e.target instanceof HTMLInputElement;o&&e.isTrusted&&e.stopImmediatePropagation(),U||(U=li("assertive")),U.isConnected||document.body.appendChild(U),t._input!==e.target&&o&&e.target.list===t&&(t._input&&qt(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus",{view:window})),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0,view:window})),c(t,oi,Dt((n=t._input.labels)==null?void 0:n[0])),pt(t._root||t,En,t),X(t,!0))},mi=(t,e)=>{Rt||setTimeout(hi,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},hi=t=>{var e;const n=((e=t._root)==null?void 0:e.activeElement)||null,o=t._input,i=window;o&&o!==n&&!t.contains(n)&&(o.dispatchEvent(new FocusEvent("blur",{relatedTarget:n,view:i})),o.dispatchEvent(new FocusEvent("focusout",{bubbles:!0,relatedTarget:n,view:i})),qt(t))},vi=(t,{target:e})=>{if(!t._input||t._input===e)return X(t,!0);[...t.options].includes(e)&&(di(t._input,e.value),c(t,"aria-multiselectable")!=="true"&&(t._input.focus(),X(t,!1)))},_i=t=>c(t,"aria-hidden")!=="true",bi=(t,e)=>{var n;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;X(t,e.key!=="Escape"&&e.key!=="Tab");const{key:o,target:i}=e,s=[...t.options].filter(_i),a=s.indexOf(i);let r=-1;if(o==="ArrowDown"&&(r=(a+1)%s.length),o==="ArrowUp"&&(r=(~a?a:s.length)-1),~a&&((o==="Home"||o==="PageUp")&&(r=0),(o==="End"||o==="PageDown")&&(r=s.length-1),o==="Enter"))return s[a].click(),e.preventDefault();if(s[r])for(const u of s)u.tabIndex=-1;s[r]&&e.preventDefault(),(n=s[r]||t._input)==null||n.focus()},kn=t=>{var e;const n=((e=t._input)==null?void 0:e.value.toLowerCase().trim())||"",o=!t.hasAttribute("data-nofilter"),i=[];for(const a of t.options){const r=`${a.disabled||a.hidden||o&&!a.label.toLowerCase().includes(n)}`;c(a,"aria-hidden",r),r==="false"&&c(a,"role")!=="none"&&i.push(a)}const{length:s}=i;clearTimeout(gn),gn=setTimeout(()=>{var a;if(t.hidden||((a=t._root)==null?void 0:a.activeElement)!==t._input)return;const r=`${`${t._texts[s===1?"singular":"plural"]}`.replace("%d",`${s}`)}`,u=`${!s&&t.innerText.trim()||r}${++ui%2?" ":""}`;n!==t._value&&U&&(U.textContent=u),t._value=n},1e3),Pt&&i.forEach((a,r)=>c(a,"title",`${r+1}/${s}`))};K&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return _n(this).getElementById(c(this,"list")||"")}}),bn.define("u-datalist",$n);const Tn=y.field.split(" ")[0],gi="--mtds-text-count-over",yi="--mtds-text-count-under",Cn=y.validation.split(" "),Ei=Cn[0];function wi(t){for(const e of t)if(e.isConnected){const n=[],o=[];let i=null,s=null,a=!0;for(const r of e.getElementsByTagName("*"))r instanceof HTMLLabelElement?n.push(r):r instanceof kt?i=r:At(r)?s=r:r.hasAttribute("data-description")?o.push(r):r.classList.contains(Ei)?(a=l(r,"data-color")==="success"||!r.clientWidth||!r.clientHeight,o.unshift(r)):r instanceof HTMLParagraphElement&&(o.some(u=>u.contains(r))||o.push(r));if(s){for(const r of n)r.htmlFor=Ct(s);$i(i),An(s),xn(s),l(s,"aria-describedby",o.map(Ct).join(" ")||null),l(s,"aria-invalid",`${!a}`)}}}function xn(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function $i(t){if(!t)return;const e=t.querySelector("u-datalist,datalist"),n=window.getComputedStyle(t),o=i=>n.getPropertyValue(`--mtds-text-${i}`);e&&(l(e,"data-sr-plural",o("datalist-plural")),l(e,"data-sr-singular",o("datalist-singular")),l(e,"popover","manual")),l(t,"data-sr-added",o("combobox-added")),l(t,"data-sr-empty",o("combobox-empty")),l(t,"data-sr-found",o("combobox-found")),l(t,"data-sr-invalid",o("combobox-invalid")),l(t,"data-sr-of",o("combobox-of")),l(t,"data-sr-remove",o("combobox-remove")),l(t,"data-sr-removed",o("combobox-removed")),l(t,"data-sr-removed",o("combobox-removed"))}function An(t){var o,i;const e=t==null?void 0:t.nextElementSibling,n=e&&l(e,"data-count");if(e&&n){const s=Number(n)-t.value.length,a=s<0,r=l(e,"aria-live")==="polite",u=window.getComputedStyle(e||t),d=((o=u.getPropertyValue(gi))==null?void 0:o.slice(1,-1))||"",v=((i=u.getPropertyValue(yi))==null?void 0:i.slice(1,-1))||"";if(r!==a){l(e,"aria-live",a?"polite":"off");for(const f of Cn)e.classList.toggle(f,a)}e.textContent=(a?d:v).replace("%d",`${Math.abs(s)}`)}}function Si({target:t,newState:e}){var n;if(t instanceof $n){const o=(n=t.getRootNode())==null?void 0:n.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?D(t,!1):o&&(t.style.width=`${o.clientWidth}px`,D(t,o,"bottom"))}}function ki({target:t}){At(t)&&(An(t),xn(t))}function Ti(t){var e,n;(n=(e=t.target)==null?void 0:e.closest)!=null&&n.call(e,`.${Tn}`)&&t.preventDefault()}k(()=>{j(document.documentElement,Tn,wi),_(document,"input",ki,$),_(document,"invalid",Ti,!0),_(document,"toggle",Si,$)});const Ci=y.fieldset.split(" ")[0],xi=y.validation.split(" ")[0];function Ai(t){for(const e of t)if(e.isConnected){const n=[];let o=null;for(const i of e.getElementsByTagName("*"))i.classList.contains(xi)?o=Ct(i):At(i)&&n.push(i);for(const i of n)l(i,"aria-describedby",o),l(i,"aria-invalid",`${!!o}`)}}k(()=>j(document.documentElement,Ci,Ai));const Ii=y.logo.split(" ")[0];function Li([t]){if(t!=null&&t.isConnected&&(t==null?void 0:t.firstElementChild)instanceof SVGSVGElement){for(const r of document.head.querySelectorAll("link[rel~='icon']"))r.setAttribute("rel","disabled");const e=t.firstElementChild,n=t==null?void 0:t.hasAttribute("data-env"),o=window.getComputedStyle(e),i=o.getPropertyValue("color"),s=o.getPropertyValue("--mtds-logo-color"),a=e.outerHTML.replace(/\n+/g," ").replace(/(fill|width|height|xmlns)="[^"]+"/gi,"").replace("<svg",`<svg width="40" height="40" fill="${i}"`);document.head.appendChild(Object.assign(document.createElement("link"),{href:`data:image/svg+xml,${encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 55 55'><rect fill='${n?"none":s}' width='51' height='51' x='2' y='2' stroke='${i}' stroke-dasharray='0.09 6.38' stroke-linecap='round' stroke-opacity='${n?.6:0}' stroke-width='2.3' rx='25.5'/><g transform="translate(7.5 7.5)">${a}</g></svg>`)}`,rel:"icon"}))}}k(()=>j(document.documentElement,Ii,Li));const In=y.popover.split(" ")[0];let jt=0;function Mi({target:t,newState:e}){var n;if(t instanceof HTMLElement&&t.classList.contains(In)){const o=(n=t.getRootNode())==null?void 0:n.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?(jt-=1,D(t,!1)):o&&(jt+=1,D(t,o,l(t,"data-position")||"bottom"))}}function Oi({target:t}){var n;const e=jt&&((n=t==null?void 0:t.closest)==null?void 0:n.call(t,"a,[popovertargetaction]"));if(e){const o=l(e,"popovertargetaction")||"toggle",i=o==="show"||(o==="hide"?!1:void 0),a=(document.getElementById(l(e,"popovertarget")||"")||e).closest(`.${In}`);a!=null&&a.isConnected&&(a!=null&&a.togglePopover)&&a.togglePopover(i)}}k(()=>{_(document,"toggle",Mi,$),_(document,"click",Oi)});const Pi=y.table.split(" ")[0];function Di(t){for(const e of t){const n=[];l(e,"role","table"),e.caption&&l(e.caption,"role","caption");for(const o of[e.tHead,e.tFoot,...e.tBodies])if(o){l(o,"role","rowgroup");const i=o.nodeName==="TBODY";for(const s of o.rows){l(s,"role","row");for(const a of s.cells)i?l(a,"data-th",n[a.cellIndex]||":empty"):n.push(a.innerText.trim()),a.nodeName==="TD"?l(a,"role","cell"):(l(a,"role",i?"rowheader":"columnheader"),l(a,"scope",i?"row":"col"))}}}}k(()=>j(document.documentElement,Pi,Di));const Ni=`.${y.togglegroup.split(" ")[0]}`;function Hi(t){var i;const{key:e,target:n}=t,o=n instanceof HTMLInputElement&&n.closest(Ni);if(o&&(e==="Enter"&&n.click(),e!=null&&e.startsWith("Arrow"))){t.preventDefault();const s=o.getElementsByTagName("input"),a=[...s].indexOf(n),r=e.match(/Arrow(Right|Down)/)?1:-1;(i=s[(s.length+a+r)%s.length])==null||i.focus()}}k(()=>_(document,"keydown",Hi));const Ln="aria-describedby",Mn="Escape",vt="aria-labelledby",Ri="--mtds-tooltip-position",qi=300,g=dt?Object.assign(document.createElement("div"),{className:y._tooltip,id:"mtds-tooltip",popover:"manual"}):null;let L=null,On=Number.NEGATIVE_INFINITY,Pn=0;function Bt({target:t,type:e,key:n}){if(e==="keydown"&&n!==Mn)return;const o=On+qi-Date.now();clearTimeout(Pn),Pn=setTimeout(ji,Math.max(o,0),n===Mn?null:t)}function ji(t){var r,u,d;if(On=Date.now(),!g||t===g)return;g!=null&&g.isConnected||document.body.append(g);let e=((r=t==null?void 0:t.closest)==null?void 0:r.call(t,"[data-tooltip]"))||null;if(e===L)return;const n=e&&l(e,"data-tooltip")||"",o=e&&l(e,"data-tooltip-position")||((u=window.getComputedStyle(e||document.body).getPropertyValue(Ri))==null?void 0:u.trim())||"top";(!n||n==="false"||n==="true"||o==="none")&&(e=null),e&&(g.textContent=n);const s=L&&l(L,vt)===(g==null?void 0:g.id),a=((d=e instanceof HTMLElement?e.innerText:e==null?void 0:e.textContent)==null?void 0:d.trim())||(e==null?void 0:e.hasAttribute(vt))||(e==null?void 0:e.hasAttribute("aria-label"));L==null||L.removeAttribute(s?vt:Ln),D(g,!1),L=e,L&&l(L,a?Ln:vt,g==null?void 0:g.id),g.togglePopover(!!e),D(g,e||!1,o)}k(()=>{_(document,"blur,focus,mouseout,mouseover",Bt,$),_(window,"keydown",Bt,$),_(window,"blur",Bt,$)});var Dn=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Nn;Dn&&/^Mac/i.test(((Nn=navigator.userAgentData)==null?void 0:Nn.platform)||navigator.platform);var Bi=":host(:not([hidden])) { display: block }",Hn=typeof HTMLElement>"u"?class{}:HTMLElement;function H(t,e,n){var o;return n===void 0?(o=t.getAttribute(e))!=null?o:null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var Rn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},qn=(t,...e)=>Rn("add",t,e),jn=(t,...e)=>Rn("remove",t,e),Ui=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},Fi=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},Ut=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))H(o,i,s);return o},Bn={define:(t,e)=>!Dn||window.customElements.get(t)||window.customElements.define(t,e)},Vi=class extends Hn{constructor(){super(),this._content=null,this.attachShadow({mode:"open"}).append(Ut("slot",null,{name:"summary"}),Ut("slot",null,{part:"details-content"}),Ut("style",`${Bi}
11
+ ::slotted(u-option[hidden]) { display: none !important }`)}static get observedAttributes(){return["id",...Object.keys(vt).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=bn(this),u(this,"role","listbox"),u(this,"tabindex","-1"),mt(this._root,"focusin",this),mt(this._root,"focus",this,!0),_n(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){ht(this._root||this,"focus",this,!0),ht(this._root||this,"focusin",this),_n(this,!1),Vt(this),this._root=void 0}attributeChangedCallback(t,e,n){const o=t==null?void 0:t.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(vt[o])this._texts[o]=n||vt[o];else if(this._root)for(const s of this._root.querySelectorAll(i))Tn(this,s)}handleEvent(t){const{target:e,type:n}=t;t.defaultPrevented||(n==="click"&&vi(this,t),(n==="focus"||n==="focusin")&&mi(this,t),(n==="blur"||n==="focusout")&&hi(this,t),n==="keydown"&&bi(this,t),n==="mousedown"&&(Ft=this.contains(e)),n==="mouseup"&&(Ft=!1),(n==="mutation"||n==="input")&&(clearTimeout(wn),wn=setTimeout(Cn,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},z=(t,e)=>{var n;t.hidden===e&&(t.hidden=!e,t._input&&Tn(t,t._input,e),t.popover&&((n=t._input)!=null&&n.isConnected)&&(u(t._input,"popovertarget",Rt(t)),u(t,"popover","manual"),t.togglePopover(e)),e&&Cn(t))},Vt=t=>{t._input&&(ht(t._input||t,Sn,t),ht(t._root||t,$n,t),z(t,!1),t._input=void 0)},Tn=(t,e,n=!1)=>{mt(e,Sn,t,!0),u(e,"aria-autocomplete","list"),u(e,"aria-controls",Rt(t)),u(e,"aria-expanded",`${pi?n:"true"}`),u(e,"autocomplete","off"),u(e,"role","combobox")},mi=(t,e)=>{var n;const o=e.target instanceof HTMLInputElement;o&&e.isTrusted&&e.stopImmediatePropagation(),W||(W=di("assertive")),W.isConnected||document.body.appendChild(W),t._input!==e.target&&o&&e.target.list===t&&(t._input&&Vt(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus",{view:window})),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0,view:window})),u(t,ii,Rt((n=t._input.labels)==null?void 0:n[0])),mt(t._root||t,$n,t),z(t,!0))},hi=(t,e)=>{Ft||setTimeout(gi,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},gi=t=>{var e;const n=((e=t._root)==null?void 0:e.activeElement)||null,o=t._input,i=window;o&&o!==n&&!t.contains(n)&&(o.dispatchEvent(new FocusEvent("blur",{relatedTarget:n,view:i})),o.dispatchEvent(new FocusEvent("focusout",{bubbles:!0,relatedTarget:n,view:i})),Vt(t))},vi=(t,{target:e})=>{var n;if(!t._input||t._input===e)return z(t,!0);[...t.options].includes(e)&&(u(t,"aria-multiselectable")!=="true"&&((n=t._input)==null||n.focus(),z(t,!1)),ci(t._input,e.value))},_i=t=>u(t,"aria-hidden")!=="true",bi=(t,e)=>{var n;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;z(t,e.key!=="Escape"&&e.key!=="Tab");const{key:o,target:i}=e,s=[...t.options].filter(_i),a=s.indexOf(i);let r=-1;if(o==="ArrowDown"&&(r=(a+1)%s.length),o==="ArrowUp"&&(r=(~a?a:s.length)-1),~a&&((o==="Home"||o==="PageUp")&&(r=0),(o==="End"||o==="PageDown")&&(r=s.length-1),o==="Enter"))return s[a].click(),e.preventDefault();if(s[r])for(const d of s)d.tabIndex=-1;s[r]&&e.preventDefault(),(n=s[r]||t._input)==null||n.focus()},Cn=t=>{var e;const n=((e=t._input)==null?void 0:e.value.toLowerCase().trim())||"",o=!t.hasAttribute("data-nofilter"),i=[];for(const a of t.options){const r=`${a.disabled||a.hidden||o&&!a.label.toLowerCase().includes(n)}`;u(a,"aria-hidden",r),r==="false"&&u(a,"role")!=="none"&&i.push(a)}const{length:s}=i;clearTimeout(En),En=setTimeout(()=>{var a;if(t.hidden||((a=t._root)==null?void 0:a.activeElement)!==t._input)return;const r=`${`${t._texts[s===1?"singular":"plural"]}`.replace("%d",`${s}`)}`,d=`${!s&&t.innerText.trim()||r}${++fi%2?" ":""}`;n!==t._value&&W&&(W.textContent=d),t._value=n},1e3),Ht&&i.forEach((a,r)=>u(a,"title",`${r+1}/${s}`))};G&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return bn(this).getElementById(u(this,"list")||"")}}),yn.define("u-datalist",kn);const xn=y.field.split(" ")[0],yi="--mtds-text-count-over",Ei="--mtds-text-count-under",An=y.validation.split(" "),wi=An[0];function $i(t){for(const e of t)if(e.isConnected){const n=[],o=[];let i=null,s=null,a=!0;for(const r of e.getElementsByTagName("*"))r instanceof HTMLLabelElement?n.push(r):r instanceof xt?i=r:Mt(r)?s=r:r.hasAttribute("data-description")?o.push(r):r.classList.contains(wi)?(a=l(r,"data-color")==="success"||!r.clientWidth||!r.clientHeight,o.unshift(r)):r instanceof HTMLParagraphElement&&(o.some(d=>d.contains(r))||o.push(r));if(s){for(const r of n)r.htmlFor=It(s);Si(i),Ln(s),In(s),l(s,"aria-describedby",o.map(It).join(" ")||null),l(s,"aria-invalid",`${!a}`)}}}function In(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function Si(t){if(!t)return;const e=t.querySelector("u-datalist,datalist"),n=window.getComputedStyle(t),o=i=>n.getPropertyValue(`--mtds-text-${i}`);e&&(l(e,"data-sr-plural",o("datalist-plural")),l(e,"data-sr-singular",o("datalist-singular")),l(e,"popover","manual")),l(t,"data-sr-added",o("combobox-added")),l(t,"data-sr-empty",o("combobox-empty")),l(t,"data-sr-found",o("combobox-found")),l(t,"data-sr-invalid",o("combobox-invalid")),l(t,"data-sr-of",o("combobox-of")),l(t,"data-sr-remove",o("combobox-remove")),l(t,"data-sr-removed",o("combobox-removed")),l(t,"data-sr-removed",o("combobox-removed"))}function Ln(t){var o,i;const e=t==null?void 0:t.nextElementSibling,n=e&&l(e,"data-count");if(e&&n){const s=Number(n)-t.value.length,a=s<0,r=l(e,"aria-live")==="polite",d=window.getComputedStyle(e||t),c=((o=d.getPropertyValue(yi))==null?void 0:o.slice(1,-1))||"",h=((i=d.getPropertyValue(Ei))==null?void 0:i.slice(1,-1))||"";if(r!==a){l(e,"aria-live",a?"polite":"off");for(const p of An)e.classList.toggle(p,a)}e.textContent=(a?c:h).replace("%d",`${Math.abs(s)}`)}}function ki({target:t,newState:e}){if(t instanceof kn){const n=t.getRootNode(),o=n==null?void 0:n.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?D(t,!1):o&&(t.style.width=`${o.clientWidth}px`,D(t,o,"bottom",!0))}}function Ti({target:t}){Mt(t)&&(Ln(t),In(t))}function Ci(t){var e,n;(n=(e=t.target)==null?void 0:e.closest)!=null&&n.call(e,`.${xn}`)&&t.preventDefault()}k(()=>{q(document.documentElement,xn,$i),g(document,"input",Ti,$),g(document,"invalid",Ci,!0),g(document,"toggle",ki,$)});const xi=y.fieldset.split(" ")[0],Ai=y.validation.split(" ")[0];function Ii(t){for(const e of t)if(e.isConnected){const n=[];let o=null;for(const i of e.getElementsByTagName("*"))i.classList.contains(Ai)?o=It(i):Mt(i)&&n.push(i);for(const i of n)l(i,"aria-describedby",o),l(i,"aria-invalid",`${!!o}`)}}k(()=>q(document.documentElement,xi,Ii));const Li=y.logo.split(" ")[0];function Mi([t]){if(t!=null&&t.isConnected&&(t==null?void 0:t.firstElementChild)instanceof SVGSVGElement){for(const r of document.head.querySelectorAll("link[rel~='icon']"))r.setAttribute("rel","disabled");const e=t.firstElementChild,n=t==null?void 0:t.hasAttribute("data-env"),o=window.getComputedStyle(e),i=o.getPropertyValue("color"),s=o.getPropertyValue("--mtds-logo-color"),a=e.outerHTML.replace(/\n+/g," ").replace(/(fill|width|height|xmlns)="[^"]+"/gi,"").replace("<svg",`<svg width="40" height="40" fill="${i}"`);document.head.appendChild(Object.assign(document.createElement("link"),{href:`data:image/svg+xml,${encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 55 55'><rect fill='${n?"none":s}' width='51' height='51' x='2' y='2' stroke='${i}' stroke-dasharray='0.09 6.38' stroke-linecap='round' stroke-opacity='${n?.6:0}' stroke-width='2.3' rx='25.5'/><g transform="translate(7.5 7.5)">${a}</g></svg>`)}`,rel:"icon"}))}}k(()=>q(document.documentElement,Li,Mi));const Mn=y.popover.split(" ")[0];let qt=0;function Oi({target:t,newState:e}){var n;if(t instanceof HTMLElement&&t.classList.contains(Mn)){const o=(n=t.getRootNode())==null?void 0:n.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?(qt-=1,D(t,!1)):o&&(qt+=1,D(t,o,l(t,"data-position")||"bottom"))}}function Pi({target:t}){var n;const e=qt&&((n=t==null?void 0:t.closest)==null?void 0:n.call(t,"a,[popovertargetaction]"));if(e){const o=l(e,"popovertargetaction")||"toggle",i=o==="show"||(o==="hide"?!1:void 0),a=(document.getElementById(l(e,"popovertarget")||"")||e).closest(`.${Mn}`);a!=null&&a.isConnected&&(a!=null&&a.togglePopover)&&a.togglePopover(i)}}k(()=>{g(document,"toggle",Oi,$),g(document,"click",Pi)});const Di=y.table.split(" ")[0];function Ni(t){for(const e of t){const n=[];l(e,"role","table"),e.caption&&l(e.caption,"role","caption");for(const o of[e.tHead,e.tFoot,...e.tBodies])if(o){l(o,"role","rowgroup");const i=o.nodeName==="TBODY";for(const s of o.rows){l(s,"role","row");for(const a of s.cells)i?l(a,"data-th",n[a.cellIndex]||":empty"):n.push(a.innerText.trim()),a.nodeName==="TD"?l(a,"role","cell"):(l(a,"role",i?"rowheader":"columnheader"),l(a,"scope",i?"row":"col"))}}}}k(()=>q(document.documentElement,Di,Ni));const Hi=`.${y.togglegroup.split(" ")[0]}`;function Ri(t){var i;const{key:e,target:n}=t,o=n instanceof HTMLInputElement&&n.closest(Hi);if(o&&(e==="Enter"&&n.click(),e!=null&&e.startsWith("Arrow"))){t.preventDefault();const s=o.getElementsByTagName("input"),a=[...s].indexOf(n),r=e.match(/Arrow(Right|Down)/)?1:-1;(i=s[(s.length+a+r)%s.length])==null||i.focus()}}k(()=>g(document,"keydown",Ri));const On="aria-describedby",Pn="Escape",_t="aria-labelledby",Bi="--mtds-tooltip-position",Ui=300,_=ut?Object.assign(document.createElement("div"),{className:y._tooltip,id:"mtds-tooltip",popover:"manual"}):null;let A=null,Dn=Number.NEGATIVE_INFINITY,Nn=0;function Yt({target:t,type:e,key:n}){if(e==="keydown"&&n!==Pn)return;const o=Dn+Ui-Date.now();clearTimeout(Nn),Nn=setTimeout(Fi,Math.max(o,0),n===Pn?null:t)}function Fi(t){var r,d,c;if(Dn=Date.now(),!_||t===_)return;_!=null&&_.isConnected||document.body.append(_);let e=((r=t==null?void 0:t.closest)==null?void 0:r.call(t,"[data-tooltip]"))||null;if(e===A)return;const n=e&&l(e,"data-tooltip")||"",o=e&&l(e,"data-tooltip-position")||((d=window.getComputedStyle(e||document.body).getPropertyValue(Bi))==null?void 0:d.trim())||"top";(!n||n==="false"||n==="true"||o==="none")&&(e=null),e&&(_.textContent=n);const s=A&&l(A,_t)===(_==null?void 0:_.id),a=((c=e instanceof HTMLElement?e.innerText:e==null?void 0:e.textContent)==null?void 0:c.trim())||(e==null?void 0:e.hasAttribute(_t))||(e==null?void 0:e.hasAttribute("aria-label"));A==null||A.removeAttribute(s?_t:On),D(_,!1),A=e,A&&l(A,a?On:_t,_==null?void 0:_.id),_.togglePopover(!!e),D(_,e||!1,o)}k(()=>{g(document,"blur,focus,mouseout,mouseover",Yt,$),g(window,"keydown",Yt,$),g(window,"blur",Yt,$)});var Hn=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Rn;Hn&&/^Mac/i.test(((Rn=navigator.userAgentData)==null?void 0:Rn.platform)||navigator.platform);var Vi=":host(:not([hidden])) { display: block }",Bn=typeof HTMLElement>"u"?class{}:HTMLElement;function H(t,e,n){var o;return n===void 0?(o=t.getAttribute(e))!=null?o:null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var Un=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Fn=(t,...e)=>Un("add",t,e),Vn=(t,...e)=>Un("remove",t,e),qi=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},Yi=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},Wt=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))H(o,i,s);return o},qn={define:(t,e)=>!Hn||window.customElements.get(t)||window.customElements.define(t,e)},Wi=class extends Bn{constructor(){super(),this._content=null,this.attachShadow({mode:"open"}).append(Wt("slot",null,{name:"summary"}),Wt("slot",null,{part:"details-content"}),Wt("style",`${Vi}
12
12
  ::slotted(u-summary) { cursor: pointer; display: block }
13
13
  ::slotted(u-summary)::before { content: ''; display: inline-block; vertical-align: middle; margin-inline: .05em .3125em; border-block: .3125em solid transparent; border-inline-start: .5em solid }
14
14
  ::slotted(u-summary[aria-expanded="true"])::before { rotate: 90deg }
15
- :host > [part="details-content"]:not([hidden=""]) { display: block }`))}static get observedAttributes(){return["open"]}connectedCallback(){var t;this._content=(t=this.shadowRoot)==null?void 0:t.children[1],qn(this._content,"beforematch",this),qn(this,"click,keydown",this),this.attributeChangedCallback()}disconnectedCallback(){this._content&&jn(this._content,"beforematch",this),jn(this,"click,keydown",this),this._content=null}attributeChangedCallback(t,e,n){const o="onbeforematch"in this?"until-found":!0,i=this.open;for(const s of this.children)s.nodeName==="U-SUMMARY"&&H(s,"aria-expanded",`${i}`);if(this._content&&(H(this._content,"aria-hidden",`${!i}`),this._content.hidden=i?!1:o),i&&this.name){const s=Fi(this).querySelectorAll(`${this.nodeName}[name="${this.name}"]`);for(const a of s)a!==this&&(a.open=!1)}t==="open"&&e===null!=(n===null)&&this.dispatchEvent(new Event("toggle"))}handleEvent(t){const e=this.querySelector(":scope > u-summary"),n=e==null?void 0:e.contains(t.target);t.defaultPrevented||(t.type==="beforematch"&&(this.open=!0),n&&t.type==="keydown"&&Ui(t),n&&t.type==="click"&&(this.open=!this.open))}get open(){return this.hasAttribute("open")}set open(t){H(this,"open",t?"":null)}get name(){return H(this,"name")||""}set name(t){H(this,"name",t)}},Yi=class extends Hn{connectedCallback(){H(this,"role","button"),this.slot="summary",this.tabIndex=0}};Bn.define("u-details",Vi),Bn.define("u-summary",Yi);var _t=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Un=_t&&/firefox/i.test(navigator.userAgent),Wi=_t&&/iPad|iPhone|iPod/.test(navigator.userAgent),Fn;_t&&/^Mac/i.test(((Fn=navigator.userAgentData)==null?void 0:Fn.platform)||navigator.platform);var Ki=typeof HTMLElement>"u"?class{}:HTMLElement;function E(t,e,n){var o;return n===void 0?(o=t.getAttribute(e))!=null?o:null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var Vn=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},Gi=0,Xi=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++Gi).toString(32)}`),t.id):"",Yn=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))E(o,i,s);return o},zi={define:(t,e)=>!_t||window.customElements.get(t)||window.customElements.define(t,e)},Qi=t=>{var e;const n=Vn(t),o=E(t,"aria-label")||"";return[...(((e=E(t,"aria-labelledby"))==null?void 0:e.trim().split(/\s+/))||[]).map(s=>n==null?void 0:n.querySelector(`[id="${s}"]`)),...Array.from(t.labels||[])].reduce((s,a)=>{var r;return s||((r=a==null?void 0:a.innerText)==null?void 0:r.trim())||""},o)},Ft=!1,Wn=class extends Ki{static get observedAttributes(){return["aria-label","aria-labelledby","value","max"]}constructor(){super(),this.attachShadow({mode:"open"}).append(Yn("slot",null,{hidden:""}),Yn("style",`:host(:not([hidden])) { box-sizing: border-box; border: 1px solid; display: inline-block; height: .5em; width: 10em; overflow: hidden }
15
+ :host > [part="details-content"]:not([hidden=""]) { display: block }`))}static get observedAttributes(){return["open"]}connectedCallback(){var t;this._content=(t=this.shadowRoot)==null?void 0:t.children[1],Fn(this._content,"beforematch",this),Fn(this,"click,keydown",this),this.attributeChangedCallback()}disconnectedCallback(){this._content&&Vn(this._content,"beforematch",this),Vn(this,"click,keydown",this),this._content=null}attributeChangedCallback(t,e,n){const o="onbeforematch"in this?"until-found":!0,i=this.open;for(const s of this.children)s.nodeName==="U-SUMMARY"&&H(s,"aria-expanded",`${i}`);if(this._content&&(H(this._content,"aria-hidden",`${!i}`),this._content.hidden=i?!1:o),i&&this.name){const s=Yi(this).querySelectorAll(`${this.nodeName}[name="${this.name}"]`);for(const a of s)a!==this&&(a.open=!1)}t==="open"&&e===null!=(n===null)&&this.dispatchEvent(new Event("toggle"))}handleEvent(t){const e=this.querySelector(":scope > u-summary"),n=e==null?void 0:e.contains(t.target);t.defaultPrevented||(t.type==="beforematch"&&(this.open=!0),n&&t.type==="keydown"&&qi(t),n&&t.type==="click"&&(this.open=!this.open))}get open(){return this.hasAttribute("open")}set open(t){H(this,"open",t?"":null)}get name(){return H(this,"name")||""}set name(t){H(this,"name",t)}},Ki=class extends Bn{connectedCallback(){H(this,"role","button"),this.slot="summary",this.tabIndex=0}};qn.define("u-details",Wi),qn.define("u-summary",Ki);var bt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Yn=bt&&/firefox/i.test(navigator.userAgent),ji=bt&&/iPad|iPhone|iPod/.test(navigator.userAgent),Wn;bt&&/^Mac/i.test(((Wn=navigator.userAgentData)==null?void 0:Wn.platform)||navigator.platform);var Gi=typeof HTMLElement>"u"?class{}:HTMLElement;function E(t,e,n){var o;return n===void 0?(o=t.getAttribute(e))!=null?o:null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var Kn=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},Xi=0,zi=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++Xi).toString(32)}`),t.id):"",jn=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))E(o,i,s);return o},Qi={define:(t,e)=>!bt||window.customElements.get(t)||window.customElements.define(t,e)},Ji=t=>{var e;const n=Kn(t),o=E(t,"aria-label")||"";return[...(((e=E(t,"aria-labelledby"))==null?void 0:e.trim().split(/\s+/))||[]).map(s=>n==null?void 0:n.querySelector(`[id="${s}"]`)),...Array.from(t.labels||[])].reduce((s,a)=>{var r;return s||((r=a==null?void 0:a.innerText)==null?void 0:r.trim())||""},o)},Kt=!1,Gn=class extends Gi{static get observedAttributes(){return["aria-label","aria-labelledby","value","max"]}constructor(){super(),this.attachShadow({mode:"open"}).append(jn("slot",null,{hidden:""}),jn("style",`:host(:not([hidden])) { box-sizing: border-box; border: 1px solid; display: inline-block; height: .5em; width: 10em; overflow: hidden }
16
16
  :host::before { content: ''; display: block; height: 100%; background: currentColor; width: var(--percentage, 0%); transition: width .2s }
17
17
  :host(:not([value])) { background: linear-gradient(90deg,currentColor 25%, transparent 50%, currentColor 75%) 50%/400% }
18
18
  @media (prefers-reduced-motion: no-preference) { :host { animation: indeterminate 2s linear infinite } }
19
- @keyframes indeterminate { from { background-position-x: 100% } to { background-position-x: 0 } }`))}connectedCallback(){this.attributeChangedCallback()}attributeChangedCallback(){if(Ft)return;Ft=!0;const t=Wi||Un,e=Math.max(0,Math.round(this.position*100));this.style.setProperty("--percentage",`${e}%`);let n=Qi(this);if(t&&(n=`${n.replace(/\d+%$/,"")} ${e}%`),Un)for(const o of this.labels)E(o,"aria-label",n);E(this,"aria-busy",`${this.position===-1}`),E(this,"aria-label",n.trim()),E(this,"aria-labelledby",null),E(this,"aria-valuemax","100"),E(this,"aria-valuemin","0"),E(this,"aria-valuenow",`${e}`),E(this,"role",t?"img":"progressbar"),Ft=!1}get labels(){const t=this.closest("label:not([for])"),e=Xi(this);return t&&(t.htmlFor=e),Vn(this).querySelectorAll(`label[for="${e}"]`)}get position(){return this.value===null?-1:Math.min(this.value/this.max,1)}get value(){return Gn(this,"value")}set value(t){Xn(this,"value",t)}get max(){return Gn(this,"max")||1}set max(t){Xn(this,"max",t)}};Wn.formAssociated=!0;var Kn=t=>!Number.isNaN(Number.parseFloat(`${t}`))&&Number.isFinite(Number(t)),Gn=(t,e)=>{const n=E(t,e);return Kn(n)?Math.max(0,Number.parseFloat(n)):null},Xn=(t,e,n)=>{if(n===null||Kn(n))E(t,e,`${n}`);else throw new Error(`Failed to set non-numeric '${E}': '${n}'`)};return zi.define("u-progress",Wn),S.UHTMLComboboxElement=kt,S.UHTMLTabElement=ee,S.UHTMLTabListElement=te,S.UHTMLTabPanelElement=ne,S.UHTMLTabsElement=Zt,S.pagination=Po,S.styles=Do,S.toggleAppExpanded=ln,S.version=Mo,Object.defineProperty(S,Symbol.toStringTag,{value:"Module"}),S}({});
20
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWNvbWJvYm94L2Rpc3QvdS1jb21ib2JveC5qcyIsIi4uL2Rlc2lnbnN5c3RlbS9wYWdpbmF0aW9uL3BhZ2luYXRpb24taGVscGVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3V0aWxzLnRzIiwiLi4vZGVzaWduc3lzdGVtL2FwcC9hcHAtdG9nZ2xlLmpzIiwiLi4vZGVzaWduc3lzdGVtL2FwcC9hcHAtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYnJlYWRjcnVtYnMvYnJlYWRjcnVtYnMtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZGlhbG9nL2RpYWxvZy1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9lcnJvcnN1bW1hcnkvZXJyb3JzdW1tYXJ5LW9ic2VydmVyLnRzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtZGF0YWxpc3QvZGlzdC91LWRhdGFsaXN0LmpzIiwiLi4vZGVzaWduc3lzdGVtL2ZpZWxkL2ZpZWxkLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2ZpZWxkc2V0L2ZpZWxkc2V0LW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2xvZ28vbG9nby1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9wb3BvdmVyL3BvcG92ZXItb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vdGFibGUvdGFibGUtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vdG9nZ2xlZ3JvdXAvdG9nZ2xlZ3JvdXAtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vdG9vbHRpcC90b29sdGlwLW9ic2VydmVyLnRzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtZGV0YWlscy9kaXN0L3UtZGV0YWlscy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LXByb2dyZXNzL2Rpc3QvdS1wcm9ncmVzcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfQU5EUk9JRCA9IElTX0JST1dTRVIgJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBTQUZFX0xBQkVMTEVEQlkgPSBgJHtJU19BTkRST0lEID8gXCJkYXRhXCIgOiBcImFyaWFcIn0tbGFiZWxsZWRieWA7XG52YXIgRElTUExBWV9CTE9DSyA9IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2sgfVwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBfYTI7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gKF9hMiA9IGVsLmdldEF0dHJpYnV0ZShuYW1lKSkgIT0gbnVsbCA/IF9hMiA6IG51bGw7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXR0YWNoU3R5bGUgPSAoZWxlbWVudCwgY3NzKSA9PiBlbGVtZW50LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gIC8vIFVubmFtZWQgc2xvdCBkb2VzIGF1dG9tYXRpY2FsbHkgcmVuZGVyIGFsbCB0b3AgZWxlbWVudCBub2Rlc1xuICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgY3NzKVxuKTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gIH1cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgKGRldGFpbCkgPT4gZWxlbWVudC5oYW5kbGVFdmVudCh7IHR5cGU6IFwibXV0YXRpb25cIiwgZGV0YWlsIH0pXG4gICAgKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIG9ic2VydmVycy5zZXQoZWxlbWVudCwgb2JzZXJ2ZXIpO1xuICB9XG59O1xudmFyIGFzQnV0dG9uID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGlzQ2xpY2sgPSBcImtleVwiIGluIGV2ZW50ICYmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKTtcbiAgaWYgKGlzQ2xpY2spIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGlmIChpc0NsaWNrICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBldmVudC50YXJnZXQuY2xpY2soKTtcbiAgcmV0dXJuIGlzQ2xpY2s7XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcblxuLy8gdS10YWJzLnRzXG52YXIgQVJJQV9DT05UUk9MUyA9IFwiYXJpYS1jb250cm9sc1wiO1xudmFyIEFSSUFfU0VMRUNURUQgPSBcImFyaWEtc2VsZWN0ZWRcIjtcbnZhciBVSFRNTFRhYnNFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGdldCB0YWJMaXN0KCkge1xuICAgIHJldHVybiBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYmxpc3RcIiwgdGhpcylbMF0gfHwgbnVsbDtcbiAgfVxuICBnZXQgc2VsZWN0ZWRJbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpO1xuICB9XG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4KSB7XG4gICAgc2V0U2VsZWN0ZWQodGhpcy50YWJzW2luZGV4XSk7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFiXCIsIHRoaXMpO1xuICB9XG4gIGdldCBwYW5lbHMoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFicGFuZWxcIiwgdGhpcyk7XG4gIH1cbn07XG52YXIgVUhUTUxUYWJMaXN0RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBESVNQTEFZX0JMT0NLKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcInRhYmxpc3RcIik7XG4gICAgb24odGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgeyBjaGlsZExpc3Q6IHRydWUgfSk7XG4gICAgaWYgKHRoaXMudGFicy5sZW5ndGgpIHRoaXMuaGFuZGxlRXZlbnQoKTtcbiAgfVxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBvZmYodGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgaWYgKCFldmVudCB8fCBldmVudC50eXBlID09PSBcIm11dGF0aW9uXCIpIHtcbiAgICAgIGNvbnN0IHRhYiA9IHRoaXMudGFic1tNYXRoLm1heCh0aGlzLnNlbGVjdGVkSW5kZXgsIDApXTtcbiAgICAgIHJldHVybiB0YWIgPT0gbnVsbCA/IHZvaWQgMCA6IHRhYi5zZXRBdHRyaWJ1dGUoQVJJQV9TRUxFQ1RFRCwgXCJ0cnVlXCIpO1xuICAgIH1cbiAgICBjb25zdCB7IGtleSB9ID0gZXZlbnQ7XG4gICAgY29uc3QgdGFicyA9IFsuLi50aGlzLnRhYnNdO1xuICAgIGNvbnN0IHByZXYgPSB0YWJzLmZpbmRJbmRleCgodGFiKSA9PiB0YWIuY29udGFpbnMoZXZlbnQudGFyZ2V0KSk7XG4gICAgbGV0IG5leHQgPSBwcmV2O1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkIHx8IHByZXYgPT09IC0xKSByZXR1cm47XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikgc2V0U2VsZWN0ZWQodGFic1twcmV2XSk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwia2V5ZG93blwiICYmICFhc0J1dHRvbihldmVudCkpIHtcbiAgICAgIGlmIChrZXkgPT09IFwiQXJyb3dEb3duXCIgfHwga2V5ID09PSBcIkFycm93UmlnaHRcIilcbiAgICAgICAgbmV4dCA9IChwcmV2ICsgMSkgJSB0YWJzLmxlbmd0aDtcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJBcnJvd1VwXCIgfHwga2V5ID09PSBcIkFycm93TGVmdFwiKVxuICAgICAgICBuZXh0ID0gKHByZXYgfHwgdGFicy5sZW5ndGgpIC0gMTtcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJFbmRcIikgbmV4dCA9IHRhYnMubGVuZ3RoIC0gMTtcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJIb21lXCIpIG5leHQgPSAwO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIlRhYlwiKSBuZXh0ID0gZ2V0U2VsZWN0ZWRJbmRleCh0YWJzKTtcbiAgICAgIGVsc2UgcmV0dXJuO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRhYnNbcHJldl0udGFiSW5kZXggPSAtMTtcbiAgICAgICAgdGFic1tuZXh0XS50YWJJbmRleCA9IDA7XG4gICAgICB9KTtcbiAgICAgIGlmIChrZXkgIT09IFwiVGFiXCIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGFic1tuZXh0XS5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXQgdGFic0VsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdChcInUtdGFic1wiKTtcbiAgfVxuICBnZXQgdGFicygpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKFwidS10YWJcIik7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldFNlbGVjdGVkSW5kZXgodGhpcy50YWJzKTtcbiAgfVxuICBzZXQgc2VsZWN0ZWRJbmRleChpbmRleCkge1xuICAgIHNldFNlbGVjdGVkKHRoaXMudGFic1tpbmRleF0pO1xuICB9XG59O1xudmFyIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbnZhciBVSFRNTFRhYkVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJpZFwiLCBBUklBX1NFTEVDVEVELCBBUklBX0NPTlRST0xTXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKFxuICAgICAgdGhpcyxcbiAgICAgIFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgfVwiXG4gICAgKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcInRhYlwiKTtcbiAgICB0aGlzLnRhYkluZGV4ID0gdGhpcy5zZWxlY3RlZCA/IDAgOiAtMTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgaWYgKCFTS0lQX0FUVFJfQ0hBTkdFICYmIHRoaXMuc2VsZWN0ZWQgJiYgdGhpcy50YWJMaXN0KSB7XG4gICAgICBTS0lQX0FUVFJfQ0hBTkdFID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHRhYnMgPSBbLi4udGhpcy50YWJMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKV07XG4gICAgICBjb25zdCBwYW5lbHMgPSBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYnBhbmVsXCIsIHRoaXMudGFic0VsZW1lbnQgfHwgdGhpcyk7XG4gICAgICBjb25zdCBuZXh0UGFuZWwgPSBnZXRQYW5lbCh0aGlzLCBwYW5lbHNbdGFicy5pbmRleE9mKHRoaXMpXSk7XG4gICAgICBpZiAobmV4dFBhbmVsKSBhdHRyKG5leHRQYW5lbCwgU0FGRV9MQUJFTExFREJZLCB1c2VJZCh0aGlzKSk7XG4gICAgICB0YWJzLmZvckVhY2goKHRhYiwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSBnZXRQYW5lbCh0YWIsIHBhbmVsc1tpbmRleF0pO1xuICAgICAgICB0YWIudGFiSW5kZXggPSB0YWIgPT09IHRoaXMgPyAwIDogLTE7XG4gICAgICAgIGF0dHIodGFiLCBBUklBX1NFTEVDVEVELCBgJHt0YWIgPT09IHRoaXN9YCk7XG4gICAgICAgIGlmIChwYW5lbCkgcGFuZWwuaGlkZGVuID0gcGFuZWwgIT09IG5leHRQYW5lbDtcbiAgICAgICAgaWYgKHBhbmVsKSBhdHRyKHRhYiwgQVJJQV9DT05UUk9MUywgcGFuZWwuaWQpO1xuICAgICAgfSk7XG4gICAgICBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJMaXN0KCkge1xuICAgIGNvbnN0IHRhYmxpc3QgPSB0aGlzLnBhcmVudEVsZW1lbnQ7XG4gICAgcmV0dXJuICh0YWJsaXN0ID09IG51bGwgPyB2b2lkIDAgOiB0YWJsaXN0Lm5vZGVOYW1lKSA9PT0gXCJVLVRBQkxJU1RcIiA/IHRhYmxpc3QgOiBudWxsO1xuICB9XG4gIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBBUklBX1NFTEVDVEVEKSA9PT0gXCJ0cnVlXCI7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBBUklBX1NFTEVDVEVELCBgJHshIXZhbHVlfWApO1xuICB9XG4gIC8qKiBSZXRyaWV2ZXMgdGhlIG9yZGluYWwgcG9zaXRpb24gb2YgYW4gdGFiIGluIGEgdGFibGlzdC4gKi9cbiAgZ2V0IGluZGV4KCkge1xuICAgIGNvbnN0IHRhYkxpc3QgPSB0aGlzLnRhYkxpc3Q7XG4gICAgcmV0dXJuIHRhYkxpc3QgPyBbLi4udGFiTGlzdC5xdWVyeVNlbGVjdG9yQWxsKFwidS10YWJcIildLmluZGV4T2YodGhpcykgOiAwO1xuICB9XG4gIGdldCBwYW5lbCgpIHtcbiAgICByZXR1cm4gZ2V0UGFuZWwodGhpcyk7XG4gIH1cbn07XG52YXIgVUhUTUxUYWJQYW5lbEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJoaWRkZW5cIl07XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBESVNQTEFZX0JMT0NLKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcInRhYnBhbmVsXCIpO1xuICAgIHRoaXMuaGlkZGVuID0gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpID09PSAtMTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAodGhpcy5oaWRkZW4gfHwgaXNGb2N1c2FibGUodGhpcy5maXJzdENoaWxkKSlcbiAgICAgIGF0dHIodGhpcywgXCJ0YWJpbmRleFwiLCBudWxsKTtcbiAgICBlbHNlIHRoaXMudGFiSW5kZXggPSAwO1xuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJzKCkge1xuICAgIGNvbnN0IGNzcyA9IGB1LXRhYlske0FSSUFfQ09OVFJPTFN9PVwiJHt0aGlzLmlkfVwiXWA7XG4gICAgcmV0dXJuIGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChjc3MpO1xuICB9XG59O1xudmFyIHF1ZXJ5V2l0aG91dE5lc3RlZCA9ICh0YWcsIHNlbGYpID0+IHNlbGYucXVlcnlTZWxlY3RvckFsbChgJHt0YWd9Om5vdCg6c2NvcGUgdS10YWJwYW5lbCAke3RhZ30pYCk7XG52YXIgZ2V0UGFuZWwgPSAodGFiLCBwYW5lbCkgPT4ge1xuICBjb25zdCBpZDIgPSBhdHRyKHRhYiwgQVJJQV9DT05UUk9MUykgfHwgdXNlSWQocGFuZWwpO1xuICBjb25zdCBlbCA9IGdldFJvb3QodGFiKS5nZXRFbGVtZW50QnlJZChpZDIpO1xuICByZXR1cm4gKGVsID09IG51bGwgPyB2b2lkIDAgOiBlbC5ub2RlTmFtZSkgPT09IFwiVS1UQUJQQU5FTFwiID8gZWwgOiBudWxsO1xufTtcbnZhciBnZXRTZWxlY3RlZEluZGV4ID0gKHRhYnMpID0+IFsuLi50YWJzXS5maW5kSW5kZXgoKHRhYikgPT4gYXR0cih0YWIsIEFSSUFfU0VMRUNURUQpID09PSBcInRydWVcIik7XG52YXIgc2V0U2VsZWN0ZWQgPSAodGFiKSA9PiB0YWIgJiYgYXR0cih0YWIsIFwiYXJpYS1zZWxlY3RlZFwiLCBcInRydWVcIik7XG52YXIgaXNGb2N1c2FibGUgPSAoZWwpID0+IGVsIGluc3RhbmNlb2YgRWxlbWVudCAmJiAhZWwubWF0Y2hlcygnOmRpc2FibGVkLFt0YWJpbmRleF49XCItXCJdJykgJiYgZWwubWF0Y2hlcyhcbiAgYFtjb250ZW50ZWRpdGFibGVdLFtjb250cm9sc10sW2hyZWZdLFt0YWJpbmRleF0saW5wdXQ6bm90KFt0eXBlPVwiaGlkZGVuXCJdKSxzZWxlY3QsdGV4dGFyZWEsYnV0dG9uLHN1bW1hcnksaWZyYW1lYFxuKTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtdGFic1wiLCBVSFRNTFRhYnNFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtdGFibGlzdFwiLCBVSFRNTFRhYkxpc3RFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtdGFiXCIsIFVIVE1MVGFiRWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYnBhbmVsXCIsIFVIVE1MVGFiUGFuZWxFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxUYWJFbGVtZW50LCBVSFRNTFRhYkxpc3RFbGVtZW50LCBVSFRNTFRhYlBhbmVsRWxlbWVudCwgVUhUTUxUYWJzRWxlbWVudCB9O1xuIiwidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuXG4vLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfQU5EUk9JRCA9IElTX0JST1dTRVIgJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0ZJUkVGT1ggPSBJU19CUk9XU0VSICYmIC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBGT0NVU19PVVRMSU5FID0gXCJvdXRsaW5lOiAxcHggZG90dGVkOyBvdXRsaW5lOiA1cHggYXV0byBIaWdobGlnaHQ7IG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvclwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0MiwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dDIpIGVsLnRleHRDb250ZW50ID0gdGV4dDI7XG4gIGlmIChhdHRycykgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJzKSkgYXR0cihlbCwga2V5LCB2YWwpO1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcbnZhciBjcmVhdGVBcmlhTGl2ZSA9IChtb2RlKSA9PiB7XG4gIGNvbnN0IGxpdmUgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBsaXZlLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwXCI7XG4gIGF0dHIobGl2ZSwgXCJhcmlhLWxpdmVcIiwgbW9kZSk7XG4gIHJldHVybiBsaXZlO1xufTtcbnZhciBzZXRWYWx1ZSA9IChpbnB1dCwgZGF0YSwgdHlwZSA9IFwiXCIpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSwgZGF0YSwgaW5wdXRUeXBlOiB0eXBlIH07XG4gIGNvbnN0IHByb3RvID0gSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGU7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJiZWZvcmVpbnB1dFwiLCBldmVudCkpO1xuICAoX2IgPSAoX2EyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgXCJ2YWx1ZVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5zZXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKGlucHV0LCBkYXRhKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImlucHV0XCIsIGV2ZW50KSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiY2hhbmdlXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG59O1xuXG4vLyB1LWNvbWJvYm94LnRzXG52YXIgTElWRTtcbnZhciBMSVZFX1NSX0ZJWCA9IDA7XG52YXIgSVNfUFJFU1MgPSBmYWxzZTtcbnZhciBFVkVOVFMgPSBcImJlZm9yZWlucHV0LGJsdXIsZm9jdXMsY2xpY2ssaW5wdXQsa2V5ZG93bixtb3VzZWRvd24sbW91c2V1cFwiO1xudmFyIEVWRU5UX09OQ0UgPSB7IG9uY2U6IHRydWUsIHBhc3NpdmU6IHRydWUgfTtcbnZhciBJU19GSVJFRk9YX01BQyA9IElTX0ZJUkVGT1ggJiYgIUlTX0FORFJPSUQ7XG52YXIgSVNfTU9CSUxFID0gSVNfQU5EUk9JRCB8fCBJU19JT1M7XG52YXIgRkFMU0UgPSBcImZhbHNlXCI7XG52YXIgQ0xJQ0sgPSBcImluc2VydFJlcGxhY2VtZW50VGV4dFwiO1xudmFyIFRFWFRTID0ge1xuICBhZGRlZDogXCJBZGRlZFwiLFxuICBlbXB0eTogXCJObyBzZWxlY3RlZFwiLFxuICBmb3VuZDogXCJOYXZpZ2F0ZSBsZWZ0IHRvIGZpbmQgJWQgc2VsZWN0ZWRcIixcbiAgaW52YWxpZDogXCJJbnZhbGlkIHZhbHVlXCIsXG4gIG9mOiBcIm9mXCIsXG4gIHJlbW92ZTogXCJQcmVzcyB0byByZW1vdmVcIixcbiAgcmVtb3ZlZDogXCJSZW1vdmVkXCJcbn07XG52YXIgVUhUTUxDb21ib2JveEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fc3BlYWsgPSBcIlwiO1xuICAgIHRoaXMuX3RleHRzID0gX19zcHJlYWRWYWx1ZXMoe30sIFRFWFRTKTtcbiAgICB0aGlzLl92YWx1ZSA9IFwiXCI7XG4gICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgICAgIC8vIENvbnRlbnQgc2xvdFxuICAgICAgY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2s7IGN1cnNvcjogcG9pbnRlciB9ICAvKiBNdXN0IGJlIGRpc3BsYXkgYmxvY2sgaW4gU2FmYXJpIHRvIGFsbG93IGZvY3VzIGluc2lkZSAqL1xuXHRcdFx0XHQ6aG9zdCg6bm90KFtkYXRhLW11bHRpcGxlXSkpIDo6c2xvdHRlZChkYXRhKSxcblx0XHRcdFx0Omhvc3QoW2RhdGEtbXVsdGlwbGU9XCJmYWxzZVwiXSkgOjpzbG90dGVkKGRhdGEpIHsgZGlzcGxheTogbm9uZSB9IC8qIEhpZGUgZGF0YSBpZiBub3QgbXVsdGlwbGUgKi9cblx0XHRcdFx0OjpzbG90dGVkKGRhdGEpIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwb2ludGVyLWV2ZW50czogbm9uZSB9XG4gICAgICAgIDo6c2xvdHRlZChkYXRhKTo6YWZ0ZXIgeyBjb250ZW50OiAnXFxcXDAwRDcnOyBjb250ZW50OiAnXFxcXDAwRDcnIC8gJyc7IHBhZGRpbmctaW5saW5lOiAuNWNoOyBwb2ludGVyLWV2ZW50czogYXV0byB9XG4gICAgICAgIDo6c2xvdHRlZChkYXRhOmZvY3VzKSB7ICR7Rk9DVVNfT1VUTElORX0gfWBcbiAgICAgICAgLy8gU2hvdyBmb2N1cyBvdXRsaW5lIGFyb3VuZCA6OmFmdGVyIG9ubHlcbiAgICAgIClcbiAgICApO1xuICB9XG4gIC8vIExvY2FsbHkgc3RvcmUgdmFsdWUgdG8gc3RvcmUgdmFsdWUgYmVmb3JlIGlucHV0LWNsaWNrXG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhURVhUUykubWFwKChrZXkpID0+IGBkYXRhLXNyLSR7a2V5fWApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuX3Jvb3QgPSBnZXRSb290KHRoaXMpO1xuICAgIG9uKHRoaXMsIEVWRU5UUywgdGhpcywgdHJ1ZSk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgICBzZXRUaW1lb3V0KHJlbmRlciwgMCwgdGhpcyk7XG4gICAgc2V0VGltZW91dChzeW5jSW5wdXRWYWx1ZSwgMCwgdGhpcyk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIF8sIHZhbCkge1xuICAgIGNvbnN0IHRleHQyID0gcHJvcC5zcGxpdChcImRhdGEtc3ItXCIpWzFdO1xuICAgIGlmIChURVhUU1t0ZXh0Ml0pIHRoaXMuX3RleHRzW3RleHQyXSA9IHZhbCB8fCBURVhUU1t0ZXh0Ml07XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgZGlzY29ubmVjdENhY2hlKHRoaXMpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICAgIG9mZih0aGlzLCBFVkVOVFMsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuX3Jvb3QgPSB2b2lkIDA7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmVmb3JlaW5wdXRcIikgdGhpcy5fdmFsdWUgPSAodGFyZ2V0ID09IG51bGwgPyB2b2lkIDAgOiB0YXJnZXQudmFsdWUpIHx8IFwiXCI7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmx1clwiKSBvbkJsdXIodGhpcyk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikgb25DbGljayh0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiZm9jdXNcIikgb25Gb2N1cyh0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiaW5wdXRcIikgb25JbnB1dCh0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwia2V5ZG93blwiKSBvbktleURvd24odGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcIm1vdXNlZG93blwiKSBJU19QUkVTUyA9IHRoaXMuY29udGFpbnModGFyZ2V0KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJtb3VzZXVwXCIpIElTX1BSRVNTID0gZmFsc2U7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwibXV0YXRpb25cIikgcmVuZGVyKHRoaXMsIGV2ZW50KTtcbiAgfVxuICBnZXQgbXVsdGlwbGUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKChfYTIgPSBhdHRyKHRoaXMsIFwiZGF0YS1tdWx0aXBsZVwiKSkgIT0gbnVsbCA/IF9hMiA6IEZBTFNFKSAhPT0gRkFMU0U7XG4gIH1cbiAgc2V0IG11bHRpcGxlKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImRhdGEtbXVsdGlwbGVcIiwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgZ2V0IGNyZWF0YWJsZSgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IGF0dHIodGhpcywgXCJkYXRhLWNyZWF0YWJsZVwiKSkgIT0gbnVsbCA/IF9hMiA6IEZBTFNFKSAhPT0gRkFMU0U7XG4gIH1cbiAgc2V0IGNyZWF0YWJsZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJkYXRhLWNyZWF0YWJsZVwiLCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBnZXQgY29udHJvbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29udHJvbCB8fCB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFwiKTtcbiAgfVxuICBnZXQgbGlzdCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbGlzdCB8fCB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJ1LWRhdGFsaXN0LGRhdGFsaXN0XCIpIHx8IG51bGw7XG4gIH1cbiAgZ2V0IGl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9pdGVtcyB8fCB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZGF0YVwiKTtcbiAgfVxuICBnZXQgb3B0aW9ucygpIHtcbiAgICB2YXIgX2EyLCBfYjtcbiAgICBjb25zdCB0YWcgPSBgJHsoKF9hMiA9IHRoaXMubGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5ub2RlTmFtZSkgPT09IFwiVS1EQVRBTElTVFwiID8gXCJ1LVwiIDogXCJcIn1vcHRpb25gO1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zIHx8ICgoX2IgPSB0aGlzLmxpc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYi5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWcpKTtcbiAgfVxuICBnZXQgdmFsdWVzKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5pdGVtc10ubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKTtcbiAgfVxuICBhZGQodmFsdWUpIHtcbiAgICB2YXIgX2EyO1xuICAgIGNvbnN0IGl0ZW0gPSBjcmVhdGVJdGVtKHZhbHVlKTtcbiAgICB0aGlzLnZhbHVlcy5pbmNsdWRlcyhpdGVtLnZhbHVlKSB8fCAvLyBQcmV2ZW50IGR1cGxpY2F0ZXNcbiAgICAoKF9hMiA9IHRoaXMuY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pbnNlcnRBZGphY2VudEVsZW1lbnQoXCJiZWZvcmViZWdpblwiLCBpdGVtKSk7XG4gIH1cbn07XG52YXIgdGV4dCA9IChlbCkgPT4ge1xuICB2YXIgX2EyO1xuICByZXR1cm4gKChfYTIgPSBlbCA9PSBudWxsID8gdm9pZCAwIDogZWwudGV4dENvbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xufTtcbnZhciBjcmVhdGVJdGVtID0gKHZhbHVlKSA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHJldHVybiBjcmVhdGVFbGVtZW50KFwiZGF0YVwiLCB2YWx1ZSwgeyB2YWx1ZSB9KTtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgSFRNTERhdGFFbGVtZW50KSByZXR1cm4gdmFsdWU7XG4gIHJldHVybiBjcmVhdGVFbGVtZW50KFwiZGF0YVwiLCB2YWx1ZS5sYWJlbCB8fCB2YWx1ZS52YWx1ZSwge1xuICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSB8fCB2YWx1ZS5sYWJlbCB8fCBcIlwiXG4gIH0pO1xufTtcbnZhciBkaXNjb25uZWN0Q2FjaGUgPSAoZWwpID0+IHtcbiAgZWwuX2ZvY3VzID0gZWwuX2NvbnRyb2wgPSBlbC5faXRlbXMgPSBlbC5fbGlzdCA9IGVsLl9vcHRpb25zID0gdm9pZCAwO1xufTtcbnZhciByZW5kZXIgPSAoc2VsZiwgZSkgPT4ge1xuICB2YXIgX2EyLCBfYiwgX2M7XG4gIGxldCB7IF9mb2N1cywgX3NwZWFrLCBfdGV4dHMsIGl0ZW1zLCBjb250cm9sLCBsaXN0LCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgeyBhZGRlZE5vZGVzLCByZW1vdmVkTm9kZXMgfSA9IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmRldGFpbFswXSkgfHwge307XG4gIGNvbnN0IGlzTXVsdGlFZGl0ID0gKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZGV0YWlsWzFdKSB8fCAoYWRkZWROb2RlcyA9PSBudWxsID8gdm9pZCAwIDogYWRkZWROb2Rlc1sxXSkgfHwgKGFkZGVkTm9kZXMgPT0gbnVsbCA/IHZvaWQgMCA6IGFkZGVkTm9kZXNbMV0pO1xuICBjb25zdCBlZGl0ID0gaXNNdWx0aUVkaXQgPyBudWxsIDogKGFkZGVkTm9kZXMgPT0gbnVsbCA/IHZvaWQgMCA6IGFkZGVkTm9kZXNbMF0pIHx8IChyZW1vdmVkTm9kZXMgPT0gbnVsbCA/IHZvaWQgMCA6IHJlbW92ZWROb2Rlc1swXSk7XG4gIGNvbnN0IHRvdGFsID0gbXVsdGlwbGUgPyBpdGVtcy5sZW5ndGggOiAxO1xuICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgaWYgKChlZGl0ID09IG51bGwgPyB2b2lkIDAgOiBlZGl0Lm5vZGVOYW1lKSA9PT0gXCJEQVRBXCIgJiYgKG11bHRpcGxlID8gX2ZvY3VzIDogZWRpdCA9PT0gX2ZvY3VzKSkge1xuICAgIF9zcGVhayA9IGAke190ZXh0c1tlZGl0LmlzQ29ubmVjdGVkID8gXCJhZGRlZFwiIDogXCJyZW1vdmVkXCJdfSAke3RleHQoZWRpdCl9LCBgO1xuICAgIGlmIChJU19NT0JJTEUgfHwgX2ZvY3VzID09PSBjb250cm9sKSBMSVZFLnRleHRDb250ZW50ID0gX3NwZWFrO1xuICAgIGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuZm9jdXMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHZhciBfYTMsIF9iMjtcbiAgICAgIChfYjIgPSAoX2EzID0gKF9mb2N1cyA9PSBudWxsID8gdm9pZCAwIDogX2ZvY3VzLm5vZGVOYW1lKSA9PT0gXCJEQVRBXCIgPyBjb250cm9sIDogX2ZvY3VzKSA9PSBudWxsID8gdm9pZCAwIDogX2EzLmZvY3VzKSA9PSBudWxsID8gdm9pZCAwIDogX2IyLmNhbGwoX2EzKTtcbiAgICAgIHNlbGYuX3NwZWFrID0gXCJcIjtcbiAgICAgIGlmIChJU19GSVJFRk9YX01BQykgb24oc2VsZiwgXCJibHVyXCIsICgpID0+IHJlbmRlcihzZWxmKSwgRVZFTlRfT05DRSk7XG4gICAgICBlbHNlIHNldFRpbWVvdXQocmVuZGVyLCAxMDAsIHNlbGYpO1xuICAgIH0sIDEwMCk7XG4gIH1cbiAgY29uc3Qga2VlcCA9IChlZGl0ID09IG51bGwgPyB2b2lkIDAgOiBlZGl0LmlzQ29ubmVjdGVkKSA/IGVkaXQgOiBpdGVtc1swXTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgaWYgKCFtdWx0aXBsZSAmJiBpdGVtICE9PSBrZWVwKSBpdGVtLnJlbW92ZSgpO1xuICAgIGVsc2Uge1xuICAgICAgY29uc3QgbGFiZWwyID0gdGV4dChpdGVtKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS52YWx1ZSB8fCBsYWJlbDI7XG4gICAgICBjb25zdCBhcmlhID0gYCR7X3NwZWFrfSR7bGFiZWwyfSwgJHtfdGV4dHMucmVtb3ZlfSwgJHt2YWx1ZXMucHVzaCh2YWx1ZSl9ICR7X3RleHRzLm9mfSAke3RvdGFsfWA7XG4gICAgICBhdHRyKGl0ZW0sIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgICAgIGF0dHIoaXRlbSwgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gICAgICBhdHRyKGl0ZW0sIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcbiAgICAgIGF0dHIoaXRlbSwgXCJhcmlhLWxhYmVsXCIsIGFyaWEpO1xuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IG9wdCBvZiBzZWxmLm9wdGlvbnMgfHwgW10pIHtcbiAgICBjb25zdCB2YWx1ZSA9IChfYTIgPSBhdHRyKG9wdCwgXCJ2YWx1ZVwiKSkgIT0gbnVsbCA/IF9hMiA6IHRleHQob3B0KTtcbiAgICBhdHRyKG9wdCwgXCJhcmlhLWxhYmVsXCIsIF9zcGVhayA/IGAke19zcGVha30ke3RleHQob3B0KX1gIDogbnVsbCk7XG4gICAgYXR0cihvcHQsIFwic2VsZWN0ZWRcIiwgdmFsdWVzLmluY2x1ZGVzKHZhbHVlKSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBjb25zdCBsYWJlbCA9IGAke19zcGVha30ke3RleHQoKF9iID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5sYWJlbHMpID09IG51bGwgPyB2b2lkIDAgOiBfYlswXSl9LCAke211bHRpcGxlID8gdG90YWwgPyBfdGV4dHMuZm91bmQucmVwbGFjZShcIiVkXCIsIGAke3RvdGFsfWApIDogX3RleHRzLmVtcHR5IDogXCJcIn1gO1xuICBpZiAobGlzdCkgYXR0cihsaXN0LCBcImFyaWEtbXVsdGlzZWxlY3RhYmxlXCIsIGAke211bHRpcGxlfWApO1xuICBpZiAoY29udHJvbCkgYXR0cihjb250cm9sLCBcImxpc3RcIiwgdXNlSWQobGlzdCkpO1xuICBpZiAoY29udHJvbCkgYXR0cihjb250cm9sLCBcImFyaWEtbGFiZWxcIiwgbGFiZWwpO1xuICBjb25zdCBzZWxlY3QgPSBzZWxmLnF1ZXJ5U2VsZWN0b3IoXCJzZWxlY3RcIik7XG4gIGlmIChzZWxlY3QpIHNlbGVjdC5tdWx0aXBsZSA9IG11bHRpcGxlO1xuICBmb3IgKGNvbnN0IG9wdCBvZiAoc2VsZWN0ID09IG51bGwgPyB2b2lkIDAgOiBzZWxlY3Qub3B0aW9ucykgfHwgW10pIG9wdC5yZW1vdmUoKTtcbiAgc2VsZWN0ID09IG51bGwgPyB2b2lkIDAgOiBzZWxlY3QuYXBwZW5kKC4uLnZhbHVlcy5tYXAoKHZhbHVlKSA9PiBuZXcgT3B0aW9uKFwiXCIsIHZhbHVlLCB0cnVlLCB0cnVlKSkpO1xuICAoX2MgPSBtdXRhdGlvbk9ic2VydmVyKHNlbGYpKSA9PSBudWxsID8gdm9pZCAwIDogX2MudGFrZVJlY29yZHMoKTtcbn07XG52YXIgc3luY0lucHV0VmFsdWUgPSAoc2VsZiwgd2l0aEV2ZW50KSA9PiB7XG4gIGNvbnN0IHsgbXVsdGlwbGUsIGNvbnRyb2wsIGl0ZW1zIH0gPSBzZWxmO1xuICBpZiAobXVsdGlwbGUgfHwgIWNvbnRyb2wgfHwgIWl0ZW1zWzBdKSByZXR1cm47XG4gIGlmICh3aXRoRXZlbnQpIHJldHVybiBzZXRWYWx1ZShjb250cm9sLCB0ZXh0KHNlbGYuaXRlbXNbMF0pKTtcbiAgY29udHJvbC52YWx1ZSA9IHRleHQoc2VsZi5pdGVtc1swXSk7XG59O1xudmFyIGRpc3BhdGNoTWF0Y2ggPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IG9wdGlvbnMgPSBbXSwgY3JlYXRhYmxlLCBjb250cm9sLCBpdGVtcywgbXVsdGlwbGUgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gKChfYTIgPSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKSkgfHwgXCJcIjtcbiAgY29uc3QgcXVlcnkgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpIHx8IG51bGw7XG4gIGxldCBtYXRjaCA9IFsuLi5vcHRpb25zXS5maW5kKChvKSA9PiBvLmxhYmVsLnRyaW0oKS50b0xvd2VyQ2FzZSgpID09PSBxdWVyeSk7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IG1hdGNoIH07XG4gIGlmIChzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiYmVmb3JlbWF0Y2hcIiwgZXZlbnQpKSlcbiAgICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKSBvcHQuc2VsZWN0ZWQgPSBvcHQgPT09IG1hdGNoO1xuICBtYXRjaCA9IFsuLi5vcHRpb25zXS5maW5kKChvKSA9PiBvLnNlbGVjdGVkKTtcbiAgaWYgKCFtYXRjaCAmJiBjcmVhdGFibGUgJiYgdmFsdWUpIHJldHVybiBzZWxmLmFkZCh2YWx1ZSk7XG4gIGlmICghbWF0Y2ggJiYgIW11bHRpcGxlICYmIGl0ZW1zWzBdKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgaXRlbXNbMF0pO1xuICBpZiAoIW1hdGNoIHx8IHNlbGYudmFsdWVzLmluY2x1ZGVzKG1hdGNoLnZhbHVlKSkgcmV0dXJuIHJlbmRlcihzZWxmKTtcbiAgZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgbWF0Y2gsIGZhbHNlKTtcbn07XG52YXIgZGlzcGF0Y2hDaGFuZ2UgPSAoc2VsZiwgaXRlbSwgcmVtb3ZlYWJsZSA9IHRydWUpID0+IHtcbiAgY29uc3QgYWRkID0gY3JlYXRlSXRlbShpdGVtKTtcbiAgY29uc3QgcmVtb3ZlID0gWy4uLnNlbGYuaXRlbXNdLmZpbmQoKGkpID0+IGkudmFsdWUgPT09IGl0ZW0udmFsdWUpO1xuICBjb25zdCBldmVudCA9IHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSwgZGV0YWlsOiByZW1vdmUgfHwgYWRkIH07XG4gIGlmIChyZW1vdmUgJiYgIXJlbW92ZWFibGUpIHJldHVybjtcbiAgaWYgKCFzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiYmVmb3JlY2hhbmdlXCIsIGV2ZW50KSkpIHJldHVybjtcbiAgcmVtb3ZlID8gcmVtb3ZlLnJlbW92ZSgpIDogc2VsZi5hZGQoYWRkKTtcbiAgc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImFmdGVyY2hhbmdlXCIsIGV2ZW50KSk7XG59O1xudmFyIG9uRm9jdXMgPSAoc2VsZiwgeyB0YXJnZXQgfSkgPT4ge1xuICBpZiAoIUxJVkUpIExJVkUgPSBjcmVhdGVBcmlhTGl2ZShcImFzc2VydGl2ZVwiKTtcbiAgaWYgKCFMSVZFLmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKExJVkUpO1xuICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHNlbGYuX2ZvY3VzID0gdGFyZ2V0O1xuICBpZiAoIXNlbGYuX2l0ZW1zKSB7XG4gICAgc2VsZi5fY29udHJvbCA9IHNlbGYuY29udHJvbCB8fCB2b2lkIDA7XG4gICAgc2VsZi5faXRlbXMgPSBzZWxmLml0ZW1zO1xuICAgIHNlbGYuX2xpc3QgPSBzZWxmLmxpc3QgfHwgdm9pZCAwO1xuICAgIHNlbGYuX29wdGlvbnMgPSBzZWxmLm9wdGlvbnMgfHwgdm9pZCAwO1xuICB9XG59O1xudmFyIG9uQmx1ciA9IChzZWxmKSA9PiBJU19QUkVTUyB8fCBzZXRUaW1lb3V0KG9uQmx1cnJlZCwgMCwgc2VsZik7XG52YXIgb25CbHVycmVkID0gKHNlbGYpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKCFzZWxmLl9mb2N1cyB8fCBzZWxmLmNvbnRhaW5zKChfYTIgPSBzZWxmLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmFjdGl2ZUVsZW1lbnQpKSByZXR1cm47XG4gIHN5bmNJbnB1dFZhbHVlKHNlbGYsIHRydWUpO1xuICBkaXNjb25uZWN0Q2FjaGUoc2VsZik7XG59O1xudmFyIG9uQ2xpY2sgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5LCB0YXJnZXQgfSA9IGV2ZW50O1xuICBmb3IgKGNvbnN0IGl0ZW0gb2Ygc2VsZi5pdGVtcykge1xuICAgIGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSBpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChpdGVtLmNvbnRhaW5zKHRhcmdldCkpIHJldHVybiBkaXNwYXRjaENoYW5nZShzZWxmLCBpdGVtKTtcbiAgICBpZiAoeSA+PSB0b3AgJiYgeSA8PSBib3R0b20gJiYgeCA+PSBsZWZ0ICYmIHggPD0gcmlnaHQpIHJldHVybiBpdGVtLmZvY3VzKCk7XG4gIH1cbiAgaWYgKHRhcmdldCA9PT0gc2VsZikgKF9hMiA9IHNlbGYuY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xufTtcbnZhciBvbklucHV0ID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIGNvbnN0IHsgb3B0aW9ucyA9IFtdLCBjb250cm9sLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgaXNDbGljayA9IGV2ZW50IGluc3RhbmNlb2YgSW5wdXRFdmVudCA/ICFldmVudC5pbnB1dFR5cGUgfHwgZXZlbnQuaW5wdXRUeXBlID09PSBDTElDSyA6IGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wudmFsdWU7XG4gIGlmICghaXNDbGljaykgcmV0dXJuIG11bHRpcGxlIHx8IGRpc3BhdGNoTWF0Y2goc2VsZik7XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpXG4gICAgaWYgKG9wdC52YWx1ZSAmJiBvcHQudmFsdWUgPT09IChjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLnZhbHVlKSkge1xuICAgICAgY29udHJvbC52YWx1ZSA9IG11bHRpcGxlID8gc2VsZi5fdmFsdWUgOiBvcHQubGFiZWw7XG4gICAgICBpZiAobXVsdGlwbGUpIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIG9wdCwgbXVsdGlwbGUpO1xuICAgIH1cbn07XG52YXIgb25LZXlEb3duID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LnNoaWZ0S2V5KSByZXR1cm47XG4gIGNvbnN0IHsgX3RleHRzLCBjb250cm9sLCBpdGVtcywgbXVsdGlwbGUgfSA9IHNlbGY7XG4gIGNvbnN0IHsga2V5LCByZXBlYXQsIHRhcmdldCB9ID0gZXZlbnQ7XG4gIGNvbnN0IGlzQ29udHJvbCA9IGNvbnRyb2wgJiYgY29udHJvbCA9PT0gdGFyZ2V0O1xuICBjb25zdCBpblRleHQgPSBpc0NvbnRyb2wgJiYgKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuc2VsZWN0aW9uRW5kKTtcbiAgbGV0IGluZGV4ID0gaXNDb250cm9sID8gaXRlbXMubGVuZ3RoIDogWy4uLml0ZW1zXS5pbmRleE9mKHRhcmdldCk7XG4gIGlmIChpbmRleCA9PT0gLTEgfHwgIWlzQ29udHJvbCAmJiBhc0J1dHRvbihldmVudCkpIHJldHVybjtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd1JpZ2h0XCIgJiYgIWlzQ29udHJvbCkgaW5kZXggKz0gMTtcbiAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93TGVmdFwiICYmICFpblRleHQpIGluZGV4IC09IDE7XG4gIGVsc2UgaWYgKGtleSA9PT0gXCJFbnRlclwiICYmIGlzQ29udHJvbCkge1xuICAgIGNvbnN0IGZvcm0gPSBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiKTtcbiAgICBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiLCBcIiNcIik7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IGF0dHIoY29udHJvbCwgXCJmb3JtXCIsIGZvcm0pKTtcbiAgICBpZiAobXVsdGlwbGUpIGRpc3BhdGNoTWF0Y2goc2VsZik7XG4gICAgZWxzZSBpZiAoIXNlbGYuaXRlbXNbMF0gJiYgTElWRSlcbiAgICAgIExJVkUudGV4dENvbnRlbnQgPSBgJHtfdGV4dHMuaW52YWxpZH0keysrTElWRV9TUl9GSVggJSAyID8gXCJcXHhBMFwiIDogXCJcIn1gO1xuICAgIHJldHVybiBzeW5jSW5wdXRWYWx1ZShzZWxmLCB0cnVlKTtcbiAgfSBlbHNlIGlmICgoa2V5ID09PSBcIkJhY2tzcGFjZVwiIHx8IGtleSA9PT0gXCJEZWxldGVcIikgJiYgIWluVGV4dCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCFyZXBlYXQgJiYgaXRlbXNbaW5kZXhdKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgaXRlbXNbaW5kZXhdKTtcbiAgICBpZiAoaXNDb250cm9sKSBpbmRleCAtPSAxO1xuICB9IGVsc2UgcmV0dXJuIGlzQ29udHJvbCB8fCAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpKTtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgKF9hMiA9IGl0ZW1zW01hdGgubWF4KDAsIGluZGV4KV0gfHwgY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtY29tYm9ib3hcIiwgVUhUTUxDb21ib2JveEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTENvbWJvYm94RWxlbWVudCB9O1xuIiwiY29uc3QgZ2V0U3RlcHMgPSAoXG5cdG5vdzogbnVtYmVyLFxuXHRtYXg6IG51bWJlcixcblx0c2hvdyA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbikgPT4ge1xuXHRjb25zdCBvZmZzZXQgPSAoc2hvdyAtIDEpIC8gMjtcblx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heChNYXRoLm1pbihub3cgLSBNYXRoLmZsb29yKG9mZnNldCksIG1heCAtIHNob3cgKyAxKSwgMSk7XG5cdGNvbnN0IGVuZCA9IE1hdGgubWluKE1hdGgubWF4KG5vdyArIE1hdGguY2VpbChvZmZzZXQpLCBzaG93KSwgbWF4KTtcblx0Y29uc3QgcGFnZXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBlbmQgKyAxIC0gc3RhcnQgfSwgKF8sIGkpID0+IGkgKyBzdGFydCk7XG5cblx0aWYgKHNob3cgPiA0ICYmIHN0YXJ0ID4gMSkgcGFnZXMuc3BsaWNlKDAsIDIsIDEsIDApO1xuXHRpZiAoc2hvdyA+IDMgJiYgZW5kIDwgbWF4KSBwYWdlcy5zcGxpY2UoLTIsIDIsIDAsIG1heCk7XG5cdHJldHVybiBwYWdlcztcbn07XG5cbmV4cG9ydCBjb25zdCBwYWdpbmF0aW9uID0gKHsgY3VycmVudCA9IDEsIHRvdGFsID0gMTAsIHNob3cgPSA3IH0pID0+ICh7XG5cdHByZXY6IGN1cnJlbnQgPiAxID8gY3VycmVudCAtIDEgOiAwLFxuXHRuZXh0OiBjdXJyZW50IDwgdG90YWwgPyBjdXJyZW50ICsgMSA6IDAsXG5cdHBhZ2VzOiBnZXRTdGVwcyhjdXJyZW50LCB0b3RhbCwgc2hvdykubWFwKChwYWdlLCBpbmRleCkgPT4gKHtcblx0XHRjdXJyZW50OiBwYWdlID09PSBjdXJyZW50ICYmIChcInBhZ2VcIiBhcyBjb25zdCksXG5cdFx0a2V5OiBga2V5LSR7cGFnZX0tJHtpbmRleH1gLFxuXHRcdHBhZ2UsXG5cdH0pKSxcbn0pO1xuIiwiaW1wb3J0IHsgY2xzeCB9IGZyb20gXCJjbHN4XCI7XG5cbmV4cG9ydCBjb25zdCBRVUlDS19FVkVOVCA9IHsgY2FwdHVyZTogdHJ1ZSwgcGFzc2l2ZTogdHJ1ZSB9O1xuZXhwb3J0IGNvbnN0IElTX0JST1dTRVIgPVxuXHR0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIjtcblxuLy8gVE9ETzogRG9jdW1lbnRhdGlvbiBmb3IgcHJldHR5TnVtYmVyXG5sZXQgSU5UTF9OVU06IEludGwuTnVtYmVyRm9ybWF0IHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHByZXR0eU51bWJlcihudW1iZXI6IG51bWJlciB8IHN0cmluZykge1xuXHRpZiAoIUlOVExfTlVNKVxuXHRcdElOVExfTlVNID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KFxuXHRcdFx0KElTX0JST1dTRVIgJiYgYXR0cihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIFwibGFuZ1wiKSkgfHwgXCJub1wiLFxuXHRcdCk7XG5cdHJldHVybiBJTlRMX05VTS5mb3JtYXQoTnVtYmVyKG51bWJlcikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVib3VuY2U8VCBleHRlbmRzIHVua25vd25bXT4oXG5cdGNhbGxiYWNrOiAoLi4uYXJnczogVCkgPT4gdm9pZCxcblx0ZGVsYXk6IG51bWJlcixcbikge1xuXHRsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuXG5cdHJldHVybiAoLi4uYXJnczogVCkgPT4ge1xuXHRcdGNsZWFyVGltZW91dCh0aW1lcik7XG5cdFx0dGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IGNhbGxiYWNrKC4uLmFyZ3MpLCBkZWxheSk7XG5cdH07XG59XG5cbi8qKlxuICogYXR0clxuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBnZXQsIHNldCBhbmQgcmVtb3ZlIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSBlbCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSBuYW1lIFRoZSBhdHRyaWJ1dGUgbmFtZSB0byBnZXQsIHNldCBvciByZW1vdmUsIG9yIGEgb2JqZWN0IHRvIHNldCBtdWx0aXBsZSBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0gdmFsdWUgQSB2YWxpZCBhdHRyaWJ1dGUgdmFsdWUgb3IgbnVsbCB0byByZW1vdmUgYXR0cmlidXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRyKFxuXHRlbDogRWxlbWVudCxcblx0bmFtZTogc3RyaW5nLFxuXHR2YWx1ZT86IHN0cmluZyB8IG51bGwsXG4pOiBzdHJpbmcgfCBudWxsIHtcblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSkgPz8gbnVsbDsgLy8gRmFsbGJhY2sgdG8gbnVsbCBvbmx5IGlmIGVsIGlzIHVuZGVmaW5lZFxuXHRpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblx0ZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcblx0cmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogdXNlSWRcbiAqIEByZXR1cm4gQSBnZW5lcmF0ZWQgdW5pcXVlIElEXG4gKi9cbmxldCBpZCA9IDA7XG5jb25zdCBVVUlEID0gYCR7RGF0ZS5ub3coKS50b1N0cmluZygzNil9JHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCA1KX1gO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlkKGVsOiBFbGVtZW50KSB7XG5cdGlmICghZWwuaWQpIGVsLmlkID0gYCR7VVVJRH0keysraWR9YDtcblx0cmV0dXJuIGVsLmlkO1xufVxuXG4vLyBJbnRlcm5hbCBoZWxwZXIgZm9yIG9uIC8gb2ZmXG5jb25zdCBldmVudHMgPSAoXG5cdGFjdGlvbjogXCJhZGRcIiB8IFwicmVtb3ZlXCIsXG5cdGVsZW1lbnQ6IE5vZGUgfCBXaW5kb3csXG5cdHJlc3Q6IFBhcmFtZXRlcnM8dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI+LFxuKTogdm9pZCA9PiB7XG5cdGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuXHRcdHJlc3RbMF0gPSB0eXBlO1xuXHRcdGVsZW1lbnRbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXSguLi5yZXN0KTtcblx0fVxufTtcblxuLyoqXG4gKiBvblxuICogQHBhcmFtIGVsZW1lbnQgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gdHlwZXMgQSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGV2ZW50IHR5cGVzXG4gKiBAcGFyYW0gbGlzdGVuZXIgQW4gZXZlbnQgbGlzdGVuZXIgZnVuY3Rpb24gb3IgbGlzdGVuZXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBvbiA9IChcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Li4ucmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj5cbik6IHZvaWQgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xuXG4vKipcbiAqIG9mZlxuICogQHBhcmFtIGVsZW1lbnQgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gdHlwZXMgQSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGV2ZW50IHR5cGVzXG4gKiBAcGFyYW0gbGlzdGVuZXIgQW4gZXZlbnQgbGlzdGVuZXIgZnVuY3Rpb24gb3IgbGlzdGVuZXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBvZmYgPSAoXG5cdGVsZW1lbnQ6IE5vZGUgfCBXaW5kb3csXG5cdC4uLnJlc3Q6IFBhcmFtZXRlcnM8dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXI+XG4pOiB2b2lkID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcblxuLyoqXG4gKiBTY3JvbGxlciB0YXJnZXMgaGVscGluZyBhbmNob3JQb3NpdGlvblxuICovXG5jb25zdCBTQ1JPTExFUiA9IElTX0JST1dTRVIgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpIDogbnVsbDsgLy8gVXNlZCB0byBlbnN1cmUgd2UgaGF2ZSBzY3JvbGxhYmlsaXR5IHVuZGVyXG5jb25zdCBUQVJHRVRTID0gbmV3IE1hcDxFbGVtZW50LCAoKSA9PiB2b2lkPigpOyAvLyBTdG9yZSBjdXJyZW50IG9wZW4gcG9wcGVycyBhbmQgdGhlaXIgdXBkYXRlIGZ1bmN0aW9uc1xuY29uc3QgVEFSR0VUU19VUERBVEUgPSAoKSA9PiB7XG5cdGZvciAoY29uc3QgW18sIHVwZGF0ZV0gb2YgVEFSR0VUUykgdXBkYXRlKCk7XG59O1xuXG5pZiAoU0NST0xMRVIpIHtcblx0U0NST0xMRVIuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7cGFkZGluZzoxcHg7dG9wOjA7bGVmdDowcHhcIjtcblx0b24od2luZG93LCBcImxvYWQscmVzaXplLHNjcm9sbFwiLCBUQVJHRVRTX1VQREFURSwgUVVJQ0tfRVZFTlQpO1xufVxuXG4vKipcbiAqIGFuY2hvclBvc2l0aW9uXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSBFbGVtZW50IHRvIHBvc2l0aW9uXG4gKiBAcGFyYW0gYW5jaG9yIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBhbmNob3JcbiAqL1xuY29uc3QgUE9TSVRJT04gPSB7IHRvcDogMCwgcmlnaHQ6IDEsIGJvdHRvbTogMiwgbGVmdDogMyB9OyAvLyBTcGVlZCB1cCBieSB1c2luZyBhIGNvbnN0IG1hcFxuXG5leHBvcnQgZnVuY3Rpb24gYW5jaG9yUG9zaXRpb24oXG5cdHRhcmdldDogSFRNTEVsZW1lbnQsXG5cdGFuY2hvcjogRWxlbWVudCB8IGZhbHNlLFxuXHRwb3NpdGlvbj86IHN0cmluZyB8IG51bWJlcixcbikge1xuXHRpZiAoYW5jaG9yID09PSBmYWxzZSB8fCAhYW5jaG9yLmlzQ29ubmVjdGVkIHx8ICF0YXJnZXQuaXNDb25uZWN0ZWQpXG5cdFx0cmV0dXJuIFRBUkdFVFMuZGVsZXRlKHRhcmdldCk7IC8vIFN0b3Agd2F0Y2hpbmcgaWYgYW5jaG9yIGlzIHJlbW92ZWQgZnJvbSBET01cblx0aWYgKCFTQ1JPTExFUj8uaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKFNDUk9MTEVSIHx8IFwiXCIpOyAvLyBFbnN1cmUgd2UgaGF2ZSB0aGUgc2Nyb2xsZXJcblx0aWYgKCFUQVJHRVRTLmhhcyh0YXJnZXQpKSB7XG5cdFx0Ly8gU2V0dXAgbmV3IHRhcmdldCBvciB1cGRhdGUgcG9zaXRpb25cblx0XHRjb25zdCBwbGFjZSA9XG5cdFx0XHRQT1NJVElPTltwb3NpdGlvbiBhcyBrZXlvZiB0eXBlb2YgUE9TSVRJT05dID8/IFBPU0lUSU9OLmJvdHRvbTsgLy8gVXNlIENTUyBwcm9wZXJ0eSB0byBzdG9yZSBwb3NpdGlvbiBmb3IgbW9yZSBmbGV4aWJpbGl0eVxuXHRcdHJldHVybiBUQVJHRVRTLnNldCh0YXJnZXQsICgpID0+IGFuY2hvclBvc2l0aW9uKHRhcmdldCwgYW5jaG9yLCBwbGFjZSkpLmdldChcblx0XHRcdHRhcmdldCxcblx0XHQpPy4oKTsgLy8gU3RhcnQgd2F0Y2hpbmcgaWYgbm90IGFscmVhZHkgd2F0Y2hpbmdcblx0fVxuXG5cdGNvbnN0IGlzSFRNTEFuY2hvciA9IGFuY2hvciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OyAvLyBTVkcgb3IgWE1MIGVsZW1lbnRzIGRvZXMgbm90IGhhdmUgb2Zmc2V0V2lkdGggb3Igb2Zmc2V0SGVpZ2h0XG5cdGNvbnN0IHsgb2Zmc2V0V2lkdGg6IHRhcmdldFcsIG9mZnNldEhlaWdodDogdGFyZ2V0SCB9ID0gdGFyZ2V0O1xuXHRjb25zdCBhbmNob3JXID0gaXNIVE1MQW5jaG9yID8gYW5jaG9yLm9mZnNldFdpZHRoIDogYW5jaG9yLmNsaWVudFdpZHRoO1xuXHRjb25zdCBhbmNob3JIID0gaXNIVE1MQW5jaG9yID8gYW5jaG9yLm9mZnNldEhlaWdodCA6IGFuY2hvci5jbGllbnRIZWlnaHQ7XG5cdGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wIH0gPSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdGNvbnN0IGFuY2hvclggPSBNYXRoLnJvdW5kKGxlZnQgLSAoYW5jaG9yVyAtIHdpZHRoKSAvIDIpOyAvLyBDb3JyZWN0IGZvciBDU1MgdHJhbnNmb3JtIHNjYWxlXG5cdGNvbnN0IGFuY2hvclkgPSBNYXRoLnJvdW5kKHRvcCAtIChhbmNob3JIIC0gaGVpZ2h0KSAvIDIpOyAvLyBDb3JyZWN0IGZvciBDU1MgdHJhbnNmb3JtIHNjYWxlXG5cblx0Y29uc3QgaGFzU3BhY2VMZWZ0ID0gYW5jaG9yWCAtIHRhcmdldFcgPiAwO1xuXHRjb25zdCBoYXNTcGFjZVJpZ2h0ID0gYW5jaG9yVyArIGFuY2hvclcgKyB0YXJnZXRXIDwgd2luZG93LmlubmVyV2lkdGg7XG5cdGNvbnN0IGhhc1NwYWNlT3ZlciA9IGFuY2hvclkgLSB0YXJnZXRIID4gMDtcblx0Y29uc3QgaGFzU3BhY2VVbmRlciA9IGFuY2hvclkgKyBhbmNob3JIICsgdGFyZ2V0SCA8IHdpbmRvdy5pbm5lckhlaWdodDtcblx0Y29uc3QgcG9zaXRpb25SaWdodCA9XG5cdFx0KHBvc2l0aW9uID09PSBQT1NJVElPTi5yaWdodCAmJiBoYXNTcGFjZVJpZ2h0KSB8fCAhaGFzU3BhY2VMZWZ0OyAvLyBBbHdheXMgcG9zaXRpb24gcmlnaHQgd2hlbiBubyBoYXNTcGFjZUxlZnQsIGFzIG5vIE9TIHNjcm9sbHMgZnVydGhlciB1cCB0aGFuIDBcblx0Y29uc3QgcG9zaXRpb25VbmRlciA9XG5cdFx0KHBvc2l0aW9uID09PSBQT1NJVElPTi5ib3R0b20gJiYgaGFzU3BhY2VVbmRlcikgfHwgIWhhc1NwYWNlT3ZlcjsgLy8gQWx3YXlzIHBvc2l0aW9uIHVuZGVyIHdoZW4gbm8gaGFzU3BhY2VPdmVyLCBhcyBubyBPUyBzY3JvbGxzIGZ1cnRoZXIgdXAgdGhhbiAwXG5cdGNvbnN0IGNlbnRlclggPSBNYXRoLm1pbihcblx0XHRNYXRoLm1heCgxMCwgYW5jaG9yWCAtICh0YXJnZXRXIC0gYW5jaG9yVykgLyAyKSxcblx0XHR3aW5kb3cuaW5uZXJXaWR0aCAtIHRhcmdldFcgLSAxMCxcblx0KTtcblx0Y29uc3QgY2VudGVyWSA9IE1hdGgubWluKFxuXHRcdE1hdGgubWF4KDEwLCBhbmNob3JZIC0gKHRhcmdldEggLSBhbmNob3JIKSAvIDIpLFxuXHRcdHdpbmRvdy5pbm5lckhlaWdodCAtIHRhcmdldEggLSAxMCxcblx0KTtcblx0Y29uc3QgaXNWZXJ0aWNhbCA9IHBvc2l0aW9uID09PSBQT1NJVElPTi50b3AgfHwgcG9zaXRpb24gPT09IFBPU0lUSU9OLmJvdHRvbTtcblxuXHR0YXJnZXQuc3R5bGUubGVmdCA9IGAke01hdGgucm91bmQoaXNWZXJ0aWNhbCA/IGNlbnRlclggOiBwb3NpdGlvblJpZ2h0ID8gYW5jaG9yWCArIGFuY2hvclcgOiBhbmNob3JYIC0gdGFyZ2V0Vyl9cHhgO1xuXHR0YXJnZXQuc3R5bGUudG9wID0gYCR7TWF0aC5yb3VuZChpc1ZlcnRpY2FsID8gKHBvc2l0aW9uVW5kZXIgPyBhbmNob3JZICsgYW5jaG9ySCA6IGFuY2hvclkgLSB0YXJnZXRIKSA6IGNlbnRlclkpfXB4YDtcblx0U0NST0xMRVI/LnN0eWxlLnNldFByb3BlcnR5KFxuXHRcdFwidHJhbnNsYXRlXCIsXG5cdFx0YCR7TWF0aC5yb3VuZCh3aW5kb3cuc2Nyb2xsWCArIGFuY2hvclggKyBhbmNob3JXICsgdGFyZ2V0VyArIDMwKX1weCAke01hdGgucm91bmQod2luZG93LnNjcm9sbFkgKyBhbmNob3JZICsgYW5jaG9ySCArIHRhcmdldEggKyAzMCl9cHhgLFxuXHQpO1xufVxuXG4vKipcbiAqIFNwZWVkIHVwIE11dGF0aW9uT2JzZXJ2ZXIgYnkgZGVib3VuY2luZyBhbmQgb25seSBydW5uaW5nIHdoZW4gcGFnZSBpcyB2aXNpYmxlXG4gKiBAcmV0dXJuIG5ldyBNdXRhaW9uT2JzZXJ2ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2s6IE11dGF0aW9uQ2FsbGJhY2spIHtcblx0bGV0IHF1ZXVlID0gMDtcblxuXHRjb25zdCBvbkZyYW1lID0gKCkgPT4gc2V0VGltZW91dChvblRpbWVyLCAyMDApOyAvLyBVc2UgYm90aCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgYW5kIHNldFRpbWVvdXQgdG8gZGVib3VuY2UgYW5kIG9ubHkgcnVuIHdoZW4gdmlzaWJsZVxuXHRjb25zdCBvblRpbWVyID0gKCkgPT4ge1xuXHRcdGNhbGxiYWNrKFtdLCBvYnNlcnZlcik7XG5cdFx0b2JzZXJ2ZXIudGFrZVJlY29yZHMoKTsgLy8gQ2xlYXIgcmVjb3JkcyB0byBhdm9pZCBydW5uaW5nIGNhbGxiYWNrIG11bHRpcGxlIHRpbWVzXG5cdFx0cXVldWUgPSAwO1xuXHR9O1xuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcblx0XHRpZiAoIXF1ZXVlKSBxdWV1ZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShvbkZyYW1lKTtcblx0fSk7XG5cblx0cmV0dXJuIG9ic2VydmVyO1xufVxuXG4vKipcbiAqIG9uTXV0YXRpb25cbiAqIEBkZXNjcmlwdGlvbiBVdGlsaXR5IHRvIHF1aWNrbHkgb2JzZXJ2ZSBtdXRhdGlvbnMgb24gYSBzcGVjaWZpYyBjbGFzcyBuYW1lXG4gKiBAcGFyYW0gZWwgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gY2xhc3NOYW1lIFRoZSBjbGFzcyBuYW1lIHRvIG9ic2VydmVcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcnVuIHdoZW4gbXV0YXRpb25zIGFyZSBkZXRlY3RlZFxuICovXG5jb25zdCBNVVRBVE9SUyA9IG5ldyBXZWFrTWFwPEVsZW1lbnQsIEFycmF5PCgpID0+IHZvaWQ+PigpO1xuZXhwb3J0IGNvbnN0IG9uTXV0YXRpb24gPSA8VCBleHRlbmRzIEVsZW1lbnQ+KFxuXHRlbDogRWxlbWVudCxcblx0Y2xhc3NOYW1lOiBzdHJpbmcsXG5cdGNhbGxiYWNrOiAoZWxlbXM6IEhUTUxDb2xsZWN0aW9uT2Y8VD4pID0+IHZvaWQsXG4pID0+IHtcblx0Y29uc3QgZWxlbXMgPSBlbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7XG5cdGNvbnN0IG11dGF0b3IgPSBNVVRBVE9SUy5nZXQoZWwpIHx8IFtdO1xuXG5cdGlmICghbXV0YXRvci5sZW5ndGgpIHtcblx0XHRNVVRBVE9SUy5zZXQoZWwsIG11dGF0b3IpO1xuXHRcdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoKF8sIG9ic2VydmVyKSA9PiB7XG5cdFx0XHRpZiAoZWwuaXNDb25uZWN0ZWQgJiYgbXV0YXRvcj8ubGVuZ3RoKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgY2FsbGJhY2sgb2YgbXV0YXRvcikgY2FsbGJhY2soKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdE1VVEFUT1JTLmRlbGV0ZShlbCk7XG5cdFx0XHR9XG5cdFx0fSkub2JzZXJ2ZShlbCwge1xuXHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbXCJjbGFzc1wiXSxcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdH0pO1xuXHR9XG5cdG11dGF0b3IucHVzaCgoKSA9PiBjYWxsYmFjayhlbGVtcyBhcyBIVE1MQ29sbGVjdGlvbk9mPFQ+KSk7XG59O1xuXG4vKipcbiAqIG9uTG9hZGVkXG4gKiBAZGVzY3JpcHRpb24gUnVucyBhIGNhbGxiYWNrIHdoZW4gd2luZG93IGlzIGxvYWRlZCBpbiBicm93c2VyXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIHJ1biB3aGVuIHRoZSBwYWdlIGlzIHJlYWR5XG4gKi9cbmV4cG9ydCBjb25zdCBvbkxvYWRlZCA9IChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4ge1xuXHRpZiAoIUlTX0JST1dTRVIpIHJldHVybjtcblx0Y29uc3QgcnVuID0gKCkgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrKTsgLy8gRW5zdXJlIHdlIHJ1biBhZnRlciBhbGwgb3RoZXIgbG9hZCBldmVudHNcblx0aWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikgcnVuKCk7XG5cdGVsc2Ugb24od2luZG93LCBcImxvYWRcIiwgcnVuKTtcbn07XG5cbi8qKlxuICogaXNJbnB1dExpa2VcbiAqIEBkZXNjcmlwdGlvbiBDaGVjayBpZiBlbGVtZW50IGlzIGFuIGlucHV0IGxpa2UgZWxlbWVudFxuICogQHBhcmFtIGVsIFRoZSBlbGVtZW50IHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBlbGVtZW50IGlzIGFuIGlucHV0IGxpa2UgZWxlbWVudFxuICovXG5leHBvcnQgY29uc3QgaXNJbnB1dExpa2UgPSAoZWw6IHVua25vd24pOiBlbCBpcyBIVE1MSW5wdXRFbGVtZW50ID0+XG5cdGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcblx0XCJ2YWxpZGl0eVwiIGluIGVsICYmXG5cdCEoZWwgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCk7XG5cbi8qKlxuICogdG9DdXN0b21FbGVtZW50UHJvcHNcbiAqIEBkZXNjcmlwdGlvbiBVdGlsaXR5IHRvIHF1aWNrbHkgY29udmVydCBwcm9wcyB0byBjdXN0b20gZWxlbWVudCBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0gcHJvcHMgVGhlIHByb3BzIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgcHJvcHNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvQ3VzdG9tRWxlbWVudFByb3BzID0gKFxuXHR7IGNsYXNzTmFtZSwgaGlkZGVuLCBvcGVuLCAuLi5yZXN0IH06IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRrbGFzcz86IHN0cmluZyxcbikgPT4ge1xuXHRyZXN0LnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyA9IHRydWU7IC8vIE1ha2UgTmV4dC5qcyBoYXBweVxuXHRyZXN0LmNsYXNzID0gY2xzeChrbGFzcywgY2xhc3NOYW1lIHx8IFwiXCIpIHx8IHVuZGVmaW5lZDsgLy8gVXNlIGNsYXNzIGluc3RlYWQgb2YgY2xhc3NOYW1lXG5cdGlmIChoaWRkZW4pIHJlc3QuaGlkZGVuID0gdHJ1ZTsgLy8gRW5zdXJlIGJvb2xlYW4gcHJvcCBiZWhhdmlvdXJcblx0aWYgKG9wZW4pIHJlc3Qub3BlbiA9IHRydWU7IC8vIEVuc3VyZSBib29sZWFuIHByb3AgYmVoYXZpb3VyXG5cdHJldHVybiByZXN0O1xufTtcbiIsImlmIChcblx0dHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHR3aW5kb3cuQ1NTU3R5bGVTaGVldCAmJlxuXHRkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHNcbilcblx0KCgpID0+IHtcblx0XHRjb25zdCBrZXkgPSBcIi0tbXRkcy1hcHAtZXhwYW5kZWRcIjtcblx0XHRjb25zdCBzaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cblx0XHRkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMucHVzaChzaGVldCk7XG5cdFx0d2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZCA9IChmb3JjZSkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgcHJldiA9ICF3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KT8uaW5jbHVkZXMoXCJmYWxzZVwiKTtcblx0XHRcdFx0Y29uc3QgbmV4dCA9IGZvcmNlID8/ICFwcmV2O1xuXG5cdFx0XHRcdHNoZWV0LnJlcGxhY2VTeW5jPy4oYDpyb290IHsgJHtrZXl9OiB2YXIoJHtrZXl9LS0ke25leHR9KX1gKTtcblx0XHRcdFx0d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgbmV4dCk7XG5cdFx0XHR9IGNhdGNoIChlcnIpIHt9IC8vIExvY2FsU3RvcmFnZSBpcyBmdWxsIG9yIHJlcGxhY2VTeW5jIGlzIG5vdCBzdXBwb3J0ZWRcblx0XHR9O1xuXG5cdFx0Ly8gU2V0IGFuZCBzdG9yZSBpbml0aWFsIHN0YXRlIC0gZG91YmxlIHRvIGdldCBpbml0aWFsIHZhbHVlXG5cdFx0d2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZChmYWxzZSk7XG5cdH0pKCk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgUVVJQ0tfRVZFTlQsIGRlYm91bmNlLCBvbiwgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCBcIi4vYXBwLXRvZ2dsZVwiO1xuXG5jb25zdCBDU1NfQVBQID0gc3R5bGVzLmFwcC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfU1RJQ0tZID0gc3R5bGVzLnN0aWNreS5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVE9HR0xFID0gJ1tkYXRhLWNvbW1hbmQ9XCJ0b2dnbGUtYXBwLWV4cGFuZGVkXCJdJztcbmNvbnN0IENTU19TSURFQkFSID0gYC4ke0NTU19BUFB9ID4gZGlhbG9nLC4ke0NTU19BUFB9IGRpYWxvZyB+IG1haW5gO1xuXG5jb25zdCB1c2VUcmFuc2l0aW9uID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB7XG5cdGlmICghZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbikgY2FsbGJhY2soKTtcblx0ZWxzZSBkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydCBjb25zdCB0b2dnbGVBcHBFeHBhbmRlZCA9IChmb3JjZT86IGJvb2xlYW4pID0+XG5cdC8vIEB0cy1leHBlY3QtZXJyb3Igd2luZG93Lm10ZHNBcHBUb2dnbGUgY29tZXMgZnJvbSBhcHAtdG9nZ2xlLmpzXG5cdHVzZVRyYW5zaXRpb24oKCkgPT4gd2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZD8uKGZvcmNlKSk7XG5cbmZ1bmN0aW9uIGhhbmRsZVRvZ2dsZUNsaWNrKHsgdGFyZ2V0OiBlbCB9OiBFdmVudCkge1xuXHRpZiAoIShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KSB8fCAhZWwubWF0Y2hlcyhDU1NfVE9HR0xFKSkgcmV0dXJuO1xuXHRpZiAoZ2V0Q29tcHV0ZWRTdHlsZShlbCkucG9zaXRpb24gPT09IFwic3RpY2t5XCIpIHJldHVybiB0b2dnbGVBcHBFeHBhbmRlZCgpO1xuXHR1c2VUcmFuc2l0aW9uKCgpID0+IHtcblx0XHRjb25zdCBzaWRlYmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGlhbG9nRWxlbWVudD4oQ1NTX1NJREVCQVIpO1xuXHRcdHNpZGViYXI/LnNldEF0dHJpYnV0ZShcImRhdGEtY2xvc2VkYnlcIiwgXCJhbnlcIik7IC8vIEFsbG93IGNsb3NpbmcgYnkgY2xpY2tpbmcgb3V0c2lkZVxuXHRcdHNpZGViYXI/LnNob3dNb2RhbCgpO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlUmVzaXplKCkge1xuXHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaWFsb2dFbGVtZW50PihDU1NfU0lERUJBUik/LmNsb3NlKCk7XG59XG5cbi8vIFNjcm9sbCBzdGF0ZVxubGV0IE1JTl9ZID0gMDsgLy8gT2Zmc2V0IHRvIGF2b2lkIHNjcm9sbCBqdW1wIHdoZW4gc3RpY2t5IGlzIHNldCB0byByZWxhdGl2ZVxubGV0IFNDUk9MTF9VUDogYm9vbGVhbjtcbmxldCBTVElDSyA9IDA7IC8vIC0xID0gc3RpY2sgdG9wLCAwID0gcmVsYXRpdmUsIDEgPSBzdGljayBib3R0b21cbmxldCBTVElDS19FTDogSFRNTEVsZW1lbnQ7XG5sZXQgU1RJQ0tfSCA9IDA7XG5sZXQgU1RJQ0tfWSA9IDA7XG5sZXQgU1RVQ0sgPSBmYWxzZTsgLy8gVXNlZCB0byBmaWd1cmUgaWYgbmF2IGlzIGxhcmdlciB0aGFuIHZpZXdwb3J0XG5sZXQgV0lOX0ggPSAwO1xubGV0IFdJTl9ZID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oW3N0aWNreV06IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdFNUSUNLX0VMID0gc3RpY2t5O1xuXHRoYW5kbGVTY3JvbGwoKTsgLy8gUnVuIG9uIGNvbm5lY3Rcbn1cblxuZnVuY3Rpb24gaGFuZGxlU2Nyb2xsKCkge1xuXHRpZiAoIVNUSUNLX0VMPy5pc0Nvbm5lY3RlZCkgcmV0dXJuO1xuXHRjb25zdCBORVhUX1kgPSB3aW5kb3cuc2Nyb2xsWTtcblx0Y29uc3QgTkVYVF9VUCA9IE5FWFRfWSA8IFdJTl9ZO1xuXHRXSU5fWSA9IE5FWFRfWTtcblxuXHQvLyBPbmx5IGNhbGN1bGF0ZSBpZiBzY3JvbGwgZGlyZWN0aW9uIGhhcyBjaGFuZ2VkXG5cdGlmIChORVhUX1VQICE9PSBTQ1JPTExfVVApIHtcblx0XHRNSU5fWSA9IChTVElDS19FTC5wYXJlbnRFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgfHwgMCkgKyBXSU5fWTtcblx0XHRTQ1JPTExfVVAgPSBORVhUX1VQO1xuXHRcdFNUSUNLX0ggPSBTVElDS19FTC5vZmZzZXRIZWlnaHQ7XG5cdFx0U1RJQ0tfWSA9IFNUSUNLX0VMLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIFdJTl9ZO1xuXHRcdFNUVUNLID0gU1RJQ0tfRUwub2Zmc2V0SGVpZ2h0IDw9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0XHRXSU5fSCA9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0fVxuXG5cdGlmIChTVElDSyA9PT0gLTEgJiYgU1RVQ0spIHJldHVybjsgLy8gQWxsd2F5cyBzdGlja3kgd2hlbiBzaWRlYmFyIGlzIHNtYWxsZXIgdGhhbiB2aWV3cG9ydFxuXHRpZiAoU1RJQ0sgIT09IC0xICYmIChTVFVDSyB8fCAoU0NST0xMX1VQICYmIFdJTl9ZIDw9IFNUSUNLX1kpKSkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJzdGlja3lcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBcIjBweFwiKTtcblx0XHRTVElDSyA9IC0xOyAvLyBOb3Qgc3RpY2tpbmcgdG8gdG9wIGFuZCBzaWRlYmFyIGlzIHNtYWxsZXIgdGhhbiB2aWV3cG9ydCBvciBzY3JvbGxpbmcgdXBcblx0fSBlbHNlIGlmIChTVElDSyA9PT0gLTEgJiYgIVNDUk9MTF9VUCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJyZWxhdGl2ZVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke01hdGgubWF4KDAsIFdJTl9ZIC0gTUlOX1kpfXB4YCk7XG5cdFx0U1RJQ0sgPSAwOyAvLyBTdGlja2luZyB0byB0b3AgYW5kIHNjcm9sbGluZyBkb3duXG5cdH0gZWxzZSBpZiAoU1RJQ0sgIT09IDEgJiYgIVNDUk9MTF9VUCAmJiBXSU5fWSArIFdJTl9IID49IFNUSUNLX1kgKyBTVElDS19IKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInN0aWNreVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke1dJTl9IIC0gU1RJQ0tfSH1weGApO1xuXHRcdFNUSUNLID0gMTsgLy8gTm90IHN0aWNraW5nIHRvIGJvdHRvbSBhbmQgc2Nyb2xsaW5nIGRvd25cblx0fSBlbHNlIGlmIChTVElDSyA9PT0gMSAmJiBTQ1JPTExfVVApIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwicmVsYXRpdmVcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBgJHtTVElDS19ZIC0gTUlOX1l9cHhgKTtcblx0XHRTVElDSyA9IDA7IC8vIFN0aWNraW5nIHRvIGJvdHRvbSBhbmQgc2Nyb2xsaW5nIHVwXG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX1NUSUNLWSwgaGFuZGxlTXV0YXRpb24pO1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVUb2dnbGVDbGljaywgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwicmVzaXplXCIsIGRlYm91bmNlKGhhbmRsZVJlc2l6ZSwgMTAwKSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwic2Nyb2xsXCIsIGhhbmRsZVNjcm9sbCwgUVVJQ0tfRVZFTlQpO1xufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0JSRUFEQ1JVTUJTID0gc3R5bGVzLmJyZWFkY3J1bWJzLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oYnJlYWRjcnVtYnM6IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgYnJlYWRjdW1icyBvZiBicmVhZGNydW1icylcblx0XHRicmVhZGN1bWJzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaSBhXCIpLmZvckVhY2goKGNydW1iLCBpbmRleCwgeyBsZW5ndGggfSkgPT4ge1xuXHRcdFx0YXR0cihjcnVtYiwgXCJhcmlhLWN1cnJlbnRcIiwgaW5kZXggPT09IGxlbmd0aCAtIDEgPyBcInBhZ2VcIiA6IG51bGwpO1xuXHRcdH0pO1xufVxuXG5vbkxvYWRlZCgoKSA9PlxuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0JSRUFEQ1JVTUJTLCBoYW5kbGVNdXRhdGlvbiksXG4pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdElTX0JST1dTRVIsXG5cdFFVSUNLX0VWRU5ULFxuXHRhdHRyLFxuXHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyLFxuXHRvbixcblx0b25Mb2FkZWQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRElBTE9HID0gc3R5bGVzLmRpYWxvZy5zcGxpdChcIiBcIilbMF07XG5jb25zdCBESUFMT0dTID0gSVNfQlJPV1NFUlxuXHQ/IChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuXHRcdFx0Q1NTX0RJQUxPRyxcblx0XHQpIGFzIEhUTUxDb2xsZWN0aW9uT2Y8SFRNTERpYWxvZ0VsZW1lbnQ+KVxuXHQ6IFtdO1xuXG5jb25zdCBoYW5kbGVNb2RhbCA9ICgpID0+IHtcblx0Zm9yIChjb25zdCBkaWFsb2cgb2YgRElBTE9HUylcblx0XHRpZiAoZGlhbG9nLmlzQ29ubmVjdGVkICYmIGRpYWxvZy5zaG93TW9kYWwgJiYgZGlhbG9nLmNsb3NlKSB7XG5cdFx0XHRpZiAoZGlhbG9nLm1hdGNoZXMoJ1tvcGVuXTpub3QoW2RhdGEtbW9kYWw9XCJmYWxzZVwiXSk6bm90KDptb2RhbCknKSkge1xuXHRcdFx0XHRhdHRyKGRpYWxvZywgXCJvcGVuXCIsIG51bGwpOyAvLyBVc2luZyBhdHRyaWJ1dGUgaW5zdGVhZCBvZiAuY2xvc2UgdG8gYXZvaWQgYGNsb3NlYCBldmVudFxuXHRcdFx0XHRkaWFsb2cuc2hvd01vZGFsKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGRpYWxvZy5tYXRjaGVzKFwiOm1vZGFsOm5vdChbb3Blbl0pXCIpKSB7XG5cdFx0XHRcdGF0dHIoZGlhbG9nLCBcIm9wZW5cIiwgXCJcIik7IC8vIFNldCBhcyBvcGVuXG5cdFx0XHRcdGRpYWxvZy5jbG9zZSgpOyAvLyBTbyB3ZSBjb3JyZWNsdHkgY2FuIGNhbGwgLmNsb3NlLCByZW1vdmluZyA8ZGlhbG9nPiBmcm9tICN0b3AtbGF5ZXJcblx0XHRcdH1cblx0XHR9XG59O1xuXG5jb25zdCBoYW5kbGVDbGljayA9ICh7IGNsaWVudFg6IHgsIGNsaWVudFk6IHksIHRhcmdldDogZWwgfTogTW91c2VFdmVudCkgPT4ge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MRGlhbG9nRWxlbWVudCAmJiBhdHRyKGVsLCBcImRhdGEtY2xvc2VkYnlcIikgPT09IFwiYW55XCIpIHtcblx0XHRjb25zdCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCB9ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0Y29uc3QgaXNJbnNpZGUgPSB0b3AgPD0geSAmJiB5IDw9IGJvdHRvbSAmJiBsZWZ0IDw9IHggJiYgeCA8PSByaWdodDtcblxuXHRcdGlmICghaXNJbnNpZGUpIGVsLmNsb3NlKCk7XG5cdH0gZWxzZSBpZiAoXG5cdFx0ZWwgaW5zdGFuY2VvZiBFbGVtZW50ICYmXG5cdFx0ZWwuY2xvc2VzdCgnYnV0dG9uW2RhdGEtY29tbWFuZD1cImNsb3NlXCJdJylcblx0KSB7XG5cdFx0ZWw/LmNsb3Nlc3QoXCJkaWFsb2dcIik/LmNsb3NlKCk7XG5cdH1cbn07XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlQ2xpY2sgYXMgRXZlbnRMaXN0ZW5lciwgUVVJQ0tfRVZFTlQpO1xuXHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKGhhbmRsZU1vZGFsKS5vYnNlcnZlKFxuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHR7XG5cdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFtcIm9wZW5cIl0sXG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdFx0c3VidHJlZTogdHJ1ZSxcblx0XHR9LFxuXHQpO1xufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgUVVJQ0tfRVZFTlQsIGF0dHIsIG9uLCBvbkxvYWRlZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5mdW5jdGlvbiBoYW5kbGVJbmplY3QoZXZlbnQ6IEV2ZW50ICYgeyBhbmltYXRpb25OYW1lPzogc3RyaW5nIH0pIHtcblx0aWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgIT09IHN0eWxlcy5fZXJyb3JzdW1tYXJ5KSByZXR1cm47XG5cdGNvbnN0IGZpcnN0ID0gKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KT8uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cblx0aWYgKGZpcnN0IGluc3RhbmNlb2YgSFRNTEhlYWRpbmdFbGVtZW50KSB7XG5cdFx0YXR0cihmaXJzdCwgXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuXHRcdGZpcnN0LmZvY3VzKCk7IC8vIEF1dG9mb2N1cyBmaXJzdCBoZWFkaW5nXG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb24oZG9jdW1lbnQsIFwiYW5pbWF0aW9uZW5kXCIsIGhhbmRsZUluamVjdCwgUVVJQ0tfRVZFTlQpKTtcbiIsInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcblxuLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBTQUZFX0xBQkVMTEVEQlkgPSBgJHtJU19BTkRST0lEID8gXCJkYXRhXCIgOiBcImFyaWFcIn0tbGFiZWxsZWRieWA7XG52YXIgRElTUExBWV9CTE9DSyA9IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2sgfVwiO1xudmFyIEZPQ1VTX09VVExJTkUgPSBcIm91dGxpbmU6IDFweCBkb3R0ZWQ7IG91dGxpbmU6IDVweCBhdXRvIEhpZ2hsaWdodDsgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yXCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXR0YWNoU3R5bGUgPSAoZWxlbWVudCwgY3NzKSA9PiBlbGVtZW50LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gIC8vIFVubmFtZWQgc2xvdCBkb2VzIGF1dG9tYXRpY2FsbHkgcmVuZGVyIGFsbCB0b3AgZWxlbWVudCBub2Rlc1xuICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgY3NzKVxuKTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gIH1cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgKGRldGFpbCkgPT4gZWxlbWVudC5oYW5kbGVFdmVudCh7IHR5cGU6IFwibXV0YXRpb25cIiwgZGV0YWlsIH0pXG4gICAgKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIG9ic2VydmVycy5zZXQoZWxlbWVudCwgb2JzZXJ2ZXIpO1xuICB9XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcbnZhciBjcmVhdGVBcmlhTGl2ZSA9IChtb2RlKSA9PiB7XG4gIGNvbnN0IGxpdmUgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBsaXZlLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwXCI7XG4gIGF0dHIobGl2ZSwgXCJhcmlhLWxpdmVcIiwgbW9kZSk7XG4gIHJldHVybiBsaXZlO1xufTtcbnZhciBzZXRWYWx1ZSA9IChpbnB1dCwgZGF0YSwgdHlwZSA9IFwiXCIpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSwgZGF0YSwgaW5wdXRUeXBlOiB0eXBlIH07XG4gIGNvbnN0IHByb3RvID0gSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGU7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJiZWZvcmVpbnB1dFwiLCBldmVudCkpO1xuICAoX2IgPSAoX2EyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgXCJ2YWx1ZVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5zZXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKGlucHV0LCBkYXRhKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImlucHV0XCIsIGV2ZW50KSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiY2hhbmdlXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG59O1xuXG4vLyB1LW9wdGlvbi50c1xudmFyIERJU0FCTEVEID0gXCJkaXNhYmxlZFwiO1xudmFyIFNFTEVDVEVEID0gXCJzZWxlY3RlZFwiO1xudmFyIFVIVE1MT3B0aW9uRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtESVNBQkxFRCwgU0VMRUNURURdO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICghSVNfSU9TKSB0aGlzLnRhYkluZGV4ID0gLTE7XG4gICAgaWYgKCF0aGlzLmhhc0F0dHJpYnV0ZShcInJvbGVcIikpIGF0dHIodGhpcywgXCJyb2xlXCIsIFwib3B0aW9uXCIpO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWRpc2FibGVkXCIsIGAke3RoaXMuZGlzYWJsZWR9YCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtc2VsZWN0ZWRcIiwgYCR7dGhpcy5zZWxlY3RlZH1gKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgd2hldGhlciB0aGUgb3B0aW9uIGluIHRoZSBsaXN0IGJveCBpcyB0aGUgZGVmYXVsdCBpdGVtLiAqL1xuICBnZXQgZGVmYXVsdFNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzW1NFTEVDVEVEXTtcbiAgfVxuICBzZXQgZGVmYXVsdFNlbGVjdGVkKHZhbHVlKSB7XG4gICAgdGhpc1tTRUxFQ1RFRF0gPSB2YWx1ZTtcbiAgfVxuICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgRElTQUJMRUQpICE9PSBudWxsO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgRElTQUJMRUQsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIC8qKiBSZXRyaWV2ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGZvcm0gdGhhdCB0aGUgb2JqZWN0IGlzIGVtYmVkZGVkIGluLiAqL1xuICBnZXQgZm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwiZm9ybVwiKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIG9yZGluYWwgcG9zaXRpb24gb2YgYW4gb3B0aW9uIGluIGEgbGlzdCBib3guICovXG4gIGdldCBpbmRleCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiBbXG4gICAgICAuLi4oKF9hMiA9IHRoaXMucGFyZW50RWxlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5vcHRpb25zKSB8fCBbdGhpc11cbiAgICBdLmluZGV4T2YodGhpcyk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIGEgdmFsdWUgdGhhdCB5b3UgY2FuIHVzZSB0byBpbXBsZW1lbnQgeW91ciBvd24gbGFiZWwgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIG9iamVjdC4gKi9cbiAgZ2V0IGxhYmVsKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIChfYTIgPSBhdHRyKHRoaXMsIFwibGFiZWxcIikpICE9IG51bGwgPyBfYTIgOiB0aGlzLnRleHQ7XG4gIH1cbiAgc2V0IGxhYmVsKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImxhYmVsXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgU0VMRUNURUQpICE9PSBudWxsO1xuICB9XG4gIHNldCBzZWxlY3RlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgU0VMRUNURUQsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgdGV4dCBzdHJpbmcgc3BlY2lmaWVkIGJ5IHRoZSBvcHRpb24gdGFnLiAqL1xuICBnZXQgdGV4dCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IHRoaXMudGV4dENvbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICB9XG4gIHNldCB0ZXh0KHRleHQpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIHZhbHVlIHdoaWNoIGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIgd2hlbiB0aGUgZm9ybSBjb250cm9sIGlzIHN1Ym1pdHRlZC4gKi9cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIChfYTIgPSBhdHRyKHRoaXMsIFwidmFsdWVcIikpICE9IG51bGwgPyBfYTIgOiB0aGlzLnRleHQ7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgfVxufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtb3B0aW9uXCIsIFVIVE1MT3B0aW9uRWxlbWVudCk7XG5cbi8vIHUtZGF0YWxpc3QudHNcbnZhciBMSVZFX1RJTUVSO1xudmFyIExJVkVfU1JfRklYID0gMDtcbnZhciBMSVZFO1xudmFyIElOUFVUX0RFQk9VTkNFID0gMDtcbnZhciBJU19QUkVTUyA9IGZhbHNlO1xudmFyIElTX01PQklMRSA9IElTX0lPUyB8fCBJU19BTkRST0lEO1xudmFyIEVWRU5UUyA9IFwiY2xpY2ssZm9jdXNvdXQsaW5wdXQsa2V5ZG93bixtb3VzZWRvd24sbW91c2V1cFwiO1xudmFyIEVWRU5UU19JTlBVVCA9IFwiZm9jdXMsZm9jdXNpbixibHVyLGZvY3Vzb3V0XCI7XG52YXIgVEVYVFMgPSB7XG4gIHNpbmd1bGFyOiBcIiVkIGhpdFwiLFxuICBwbHVyYWw6IFwiJWQgaGl0c1wiXG59O1xudmFyIFVIVE1MRGF0YUxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3RleHRzID0gX19zcHJlYWRWYWx1ZXMoe30sIFRFWFRTKTtcbiAgICB0aGlzLl92YWx1ZSA9IFwiXCI7XG4gICAgYXR0YWNoU3R5bGUoXG4gICAgICB0aGlzLFxuICAgICAgYCR7RElTUExBWV9CTE9DS31cblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbikgeyBkaXNwbGF5OiBibG9jazsgY3Vyc29yOiBwb2ludGVyIH1cblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbjpmb2N1cykgeyAke0ZPQ1VTX09VVExJTkV9IH1cblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvblthcmlhLWhpZGRlbj1cInRydWVcIl0pLFxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uW2Rpc2FibGVkXSksXG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb25baGlkZGVuXSkgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQgfWBcbiAgICApO1xuICB9XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJpZFwiLCAuLi5PYmplY3Qua2V5cyhURVhUUykubWFwKChrZXkpID0+IGBkYXRhLXNyLSR7a2V5fWApXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLmhpZGRlbiA9IHRydWU7XG4gICAgdGhpcy5fcm9vdCA9IGdldFJvb3QodGhpcyk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJsaXN0Ym94XCIpO1xuICAgIGF0dHIodGhpcywgXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuICAgIG9uKHRoaXMuX3Jvb3QsIFwiZm9jdXNpblwiLCB0aGlzKTtcbiAgICBvbih0aGlzLl9yb290LCBcImZvY3VzXCIsIHRoaXMsIHRydWUpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywge1xuICAgICAgYXR0cmlidXRlRmlsdGVyOiBbXCJkaXNhYmxlZFwiLCBcImhpZGRlblwiLCBcImxhYmVsXCIsIFwidmFsdWVcIl0sXG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgc3VidHJlZTogdHJ1ZVxuICAgIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgb2ZmKHRoaXMuX3Jvb3QgfHwgdGhpcywgXCJmb2N1c1wiLCB0aGlzLCB0cnVlKTtcbiAgICBvZmYodGhpcy5fcm9vdCB8fCB0aGlzLCBcImZvY3VzaW5cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gICAgZGlzY29ubmVjdElucHV0KHRoaXMpO1xuICAgIHRoaXMuX3Jvb3QgPSB2b2lkIDA7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIF9wcmV2LCBuZXh0KSB7XG4gICAgY29uc3QgdGV4dCA9IHByb3AgPT0gbnVsbCA/IHZvaWQgMCA6IHByb3Auc3BsaXQoXCJkYXRhLXNyLVwiKVsxXTtcbiAgICBjb25zdCBjc3MgPSBgaW5wdXRbbGlzdD1cIiR7dGhpcy5pZH1cIl1gO1xuICAgIGlmIChURVhUU1t0ZXh0XSkgdGhpcy5fdGV4dHNbdGV4dF0gPSBuZXh0IHx8IFRFWFRTW3RleHRdO1xuICAgIGVsc2UgaWYgKHRoaXMuX3Jvb3QpXG4gICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIHRoaXMuX3Jvb3QucXVlcnlTZWxlY3RvckFsbChjc3MpKVxuICAgICAgICBzZXR1cElucHV0KHRoaXMsIGlucHV0KTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHsgdGFyZ2V0LCB0eXBlIH0gPSBldmVudDtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmICh0eXBlID09PSBcImNsaWNrXCIpIG9uQ2xpY2sodGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImZvY3VzXCIgfHwgdHlwZSA9PT0gXCJmb2N1c2luXCIpIG9uRm9jdXModGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImJsdXJcIiB8fCB0eXBlID09PSBcImZvY3Vzb3V0XCIpIG9uQmx1cih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwia2V5ZG93blwiKSBvbktleURvd24odGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiKSBJU19QUkVTUyA9IHRoaXMuY29udGFpbnModGFyZ2V0KTtcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIpIElTX1BSRVNTID0gZmFsc2U7XG4gICAgaWYgKHR5cGUgPT09IFwibXV0YXRpb25cIiB8fCB0eXBlID09PSBcImlucHV0XCIpIHtcbiAgICAgIGNsZWFyVGltZW91dChJTlBVVF9ERUJPVU5DRSk7XG4gICAgICBJTlBVVF9ERUJPVU5DRSA9IHNldFRpbWVvdXQob25JbnB1dCwgMCwgdGhpcywgZXZlbnQpO1xuICAgIH1cbiAgfVxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShcInUtb3B0aW9uXCIpO1xuICB9XG59O1xudmFyIHNldEV4cGFuZGVkID0gKHNlbGYsIG9wZW4pID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKHNlbGYuaGlkZGVuICE9PSBvcGVuKSByZXR1cm47XG4gIHNlbGYuaGlkZGVuID0gIW9wZW47XG4gIGlmIChzZWxmLl9pbnB1dCkgc2V0dXBJbnB1dChzZWxmLCBzZWxmLl9pbnB1dCwgb3Blbik7XG4gIGlmIChzZWxmLnBvcG92ZXIgJiYgKChfYTIgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpIHtcbiAgICBhdHRyKHNlbGYuX2lucHV0LCBcInBvcG92ZXJ0YXJnZXRcIiwgdXNlSWQoc2VsZikpO1xuICAgIGF0dHIoc2VsZiwgXCJwb3BvdmVyXCIsIFwibWFudWFsXCIpO1xuICAgIHNlbGYudG9nZ2xlUG9wb3ZlcihvcGVuKTtcbiAgfVxuICBpZiAob3Blbikgb25JbnB1dChzZWxmKTtcbn07XG52YXIgZGlzY29ubmVjdElucHV0ID0gKHNlbGYpID0+IHtcbiAgb2ZmKHNlbGYuX2lucHV0IHx8IHNlbGYsIEVWRU5UU19JTlBVVCwgc2VsZik7XG4gIG9mZihzZWxmLl9yb290IHx8IHNlbGYsIEVWRU5UUywgc2VsZik7XG4gIHNldEV4cGFuZGVkKHNlbGYsIGZhbHNlKTtcbiAgc2VsZi5faW5wdXQgPSB2b2lkIDA7XG59O1xudmFyIHNldHVwSW5wdXQgPSAoc2VsZiwgaW5wdXQsIG9wZW4gPSBmYWxzZSkgPT4ge1xuICBvbihpbnB1dCwgRVZFTlRTX0lOUFVULCBzZWxmLCB0cnVlKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWF1dG9jb21wbGV0ZVwiLCBcImxpc3RcIik7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1jb250cm9sc1wiLCB1c2VJZChzZWxmKSk7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1leHBhbmRlZFwiLCBgJHtJU19NT0JJTEUgPyBvcGVuIDogXCJ0cnVlXCJ9YCk7XG4gIGF0dHIoaW5wdXQsIFwiYXV0b2NvbXBsZXRlXCIsIFwib2ZmXCIpO1xuICBhdHRyKGlucHV0LCBcInJvbGVcIiwgXCJjb21ib2JveFwiKTtcbn07XG52YXIgb25Gb2N1cyA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCBpc0lucHV0ID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudDtcbiAgaWYgKGlzSW5wdXQgJiYgZXZlbnQuaXNUcnVzdGVkKSBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgaWYgKCFMSVZFKSBMSVZFID0gY3JlYXRlQXJpYUxpdmUoXCJhc3NlcnRpdmVcIik7XG4gIGlmICghTElWRS5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChMSVZFKTtcbiAgaWYgKHNlbGYuX2lucHV0ICE9PSBldmVudC50YXJnZXQgJiYgaXNJbnB1dCAmJiBldmVudC50YXJnZXQubGlzdCA9PT0gc2VsZikge1xuICAgIGlmIChzZWxmLl9pbnB1dCkgZGlzY29ubmVjdElucHV0KHNlbGYpO1xuICAgIHNlbGYuX2lucHV0ID0gZXZlbnQudGFyZ2V0O1xuICAgIHNlbGYuX2lucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJmb2N1c1wiLCB7IHZpZXc6IHdpbmRvdyB9KSk7XG4gICAgc2VsZi5faW5wdXQuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNpblwiLCB7IGJ1YmJsZXM6IHRydWUsIHZpZXc6IHdpbmRvdyB9KVxuICAgICk7XG4gICAgYXR0cihzZWxmLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKChfYTIgPSBzZWxmLl9pbnB1dC5sYWJlbHMpID09IG51bGwgPyB2b2lkIDAgOiBfYTJbMF0pKTtcbiAgICBvbihzZWxmLl9yb290IHx8IHNlbGYsIEVWRU5UUywgc2VsZik7XG4gICAgc2V0RXhwYW5kZWQoc2VsZiwgdHJ1ZSk7XG4gIH1cbn07XG52YXIgb25CbHVyID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIGlmICghSVNfUFJFU1MpIHNldFRpbWVvdXQob25CbHVycmVkLCAwLCBzZWxmKTtcbiAgaWYgKGV2ZW50LnRhcmdldCA9PT0gc2VsZi5faW5wdXQgJiYgZXZlbnQuaXNUcnVzdGVkKVxuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufTtcbnZhciBvbkJsdXJyZWQgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByZWxhdGVkVGFyZ2V0ID0gKChfYTIgPSBzZWxmLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmFjdGl2ZUVsZW1lbnQpIHx8IG51bGw7XG4gIGNvbnN0IGlucHV0ID0gc2VsZi5faW5wdXQ7XG4gIGNvbnN0IHZpZXcgPSB3aW5kb3c7XG4gIGlmIChpbnB1dCAmJiBpbnB1dCAhPT0gcmVsYXRlZFRhcmdldCAmJiAhc2VsZi5jb250YWlucyhyZWxhdGVkVGFyZ2V0KSkge1xuICAgIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJibHVyXCIsIHsgcmVsYXRlZFRhcmdldCwgdmlldyB9KSk7XG4gICAgaW5wdXQuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNvdXRcIiwgeyBidWJibGVzOiB0cnVlLCByZWxhdGVkVGFyZ2V0LCB2aWV3IH0pXG4gICAgKTtcbiAgICBkaXNjb25uZWN0SW5wdXQoc2VsZik7XG4gIH1cbn07XG52YXIgb25DbGljayA9IChzZWxmLCB7IHRhcmdldCB9KSA9PiB7XG4gIGlmICghc2VsZi5faW5wdXQgfHwgc2VsZi5faW5wdXQgPT09IHRhcmdldCkgcmV0dXJuIHNldEV4cGFuZGVkKHNlbGYsIHRydWUpO1xuICBpZiAoWy4uLnNlbGYub3B0aW9uc10uaW5jbHVkZXModGFyZ2V0KSkge1xuICAgIHNldFZhbHVlKHNlbGYuX2lucHV0LCB0YXJnZXQudmFsdWUpO1xuICAgIGlmIChhdHRyKHNlbGYsIFwiYXJpYS1tdWx0aXNlbGVjdGFibGVcIikgIT09IFwidHJ1ZVwiKSB7XG4gICAgICBzZWxmLl9pbnB1dC5mb2N1cygpO1xuICAgICAgc2V0RXhwYW5kZWQoc2VsZiwgZmFsc2UpO1xuICAgIH1cbiAgfVxufTtcbnZhciBpc1Zpc2libGUgPSAoZWwpID0+IGF0dHIoZWwsIFwiYXJpYS1oaWRkZW5cIikgIT09IFwidHJ1ZVwiO1xudmFyIG9uS2V5RG93biA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSkgcmV0dXJuO1xuICBzZXRFeHBhbmRlZChzZWxmLCBldmVudC5rZXkgIT09IFwiRXNjYXBlXCIgJiYgZXZlbnQua2V5ICE9PSBcIlRhYlwiKTtcbiAgY29uc3QgeyBrZXksIHRhcmdldCB9ID0gZXZlbnQ7XG4gIGNvbnN0IG9wdGlvbnMgPSBbLi4uc2VsZi5vcHRpb25zXS5maWx0ZXIoaXNWaXNpYmxlKTtcbiAgY29uc3QgcHJldiA9IG9wdGlvbnMuaW5kZXhPZih0YXJnZXQpO1xuICBsZXQgbmV4dCA9IC0xO1xuICBpZiAoa2V5ID09PSBcIkFycm93RG93blwiKSBuZXh0ID0gKHByZXYgKyAxKSAlIG9wdGlvbnMubGVuZ3RoO1xuICBpZiAoa2V5ID09PSBcIkFycm93VXBcIikgbmV4dCA9ICh+cHJldiA/IHByZXYgOiBvcHRpb25zLmxlbmd0aCkgLSAxO1xuICBpZiAofnByZXYpIHtcbiAgICBpZiAoa2V5ID09PSBcIkhvbWVcIiB8fCBrZXkgPT09IFwiUGFnZVVwXCIpIG5leHQgPSAwO1xuICAgIGlmIChrZXkgPT09IFwiRW5kXCIgfHwga2V5ID09PSBcIlBhZ2VEb3duXCIpIG5leHQgPSBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgaWYgKGtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICBvcHRpb25zW3ByZXZdLmNsaWNrKCk7XG4gICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbiAgaWYgKG9wdGlvbnNbbmV4dF0pIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIG9wdGlvbi50YWJJbmRleCA9IC0xO1xuICBpZiAob3B0aW9uc1tuZXh0XSkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgKF9hMiA9IG9wdGlvbnNbbmV4dF0gfHwgc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZm9jdXMoKTtcbn07XG52YXIgb25JbnB1dCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHZhbHVlID0gKChfYTIgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi52YWx1ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKSkgfHwgXCJcIjtcbiAgY29uc3QgZmlsdGVyID0gIXNlbGYuaGFzQXR0cmlidXRlKFwiZGF0YS1ub2ZpbHRlclwiKTtcbiAgY29uc3QgdmlzaWJsZSA9IFtdO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBzZWxmLm9wdGlvbnMpIHtcbiAgICBjb25zdCBoaWRkZW4gPSBgJHtvcHQuZGlzYWJsZWQgfHwgb3B0LmhpZGRlbiB8fCBmaWx0ZXIgJiYgIW9wdC5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHZhbHVlKX1gO1xuICAgIGF0dHIob3B0LCBcImFyaWEtaGlkZGVuXCIsIGhpZGRlbik7XG4gICAgaWYgKGhpZGRlbiA9PT0gXCJmYWxzZVwiICYmIGF0dHIob3B0LCBcInJvbGVcIikgIT09IFwibm9uZVwiKSB2aXNpYmxlLnB1c2gob3B0KTtcbiAgfVxuICBjb25zdCB7IGxlbmd0aDogdG90YWwgfSA9IHZpc2libGU7XG4gIGNsZWFyVGltZW91dChMSVZFX1RJTUVSKTtcbiAgTElWRV9USU1FUiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHZhciBfYTM7XG4gICAgaWYgKHNlbGYuaGlkZGVuIHx8ICgoX2EzID0gc2VsZi5fcm9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMy5hY3RpdmVFbGVtZW50KSAhPT0gc2VsZi5faW5wdXQpIHJldHVybjtcbiAgICBjb25zdCBoaXRzVGV4dCA9IGAke2Ake3NlbGYuX3RleHRzW3RvdGFsID09PSAxID8gXCJzaW5ndWxhclwiIDogXCJwbHVyYWxcIl19YC5yZXBsYWNlKFwiJWRcIiwgYCR7dG90YWx9YCl9YDtcbiAgICBjb25zdCBsaXZlVGV4dCA9IGAkeyF0b3RhbCAmJiBzZWxmLmlubmVyVGV4dC50cmltKCkgfHwgaGl0c1RleHR9JHsrK0xJVkVfU1JfRklYICUgMiA/IFwiXFx4QTBcIiA6IFwiXCJ9YDtcbiAgICBpZiAodmFsdWUgIT09IHNlbGYuX3ZhbHVlICYmIExJVkUpIExJVkUudGV4dENvbnRlbnQgPSBsaXZlVGV4dDtcbiAgICBzZWxmLl92YWx1ZSA9IHZhbHVlO1xuICB9LCAxZTMpO1xuICBpZiAoSVNfSU9TKVxuICAgIHZpc2libGUuZm9yRWFjaCgob3B0LCBpZHgpID0+IGF0dHIob3B0LCBcInRpdGxlXCIsIGAke2lkeCArIDF9LyR7dG90YWx9YCkpO1xufTtcbmlmIChJU19CUk9XU0VSKVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwibGlzdFwiLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGdldFJvb3QodGhpcykuZ2V0RWxlbWVudEJ5SWQoYXR0cih0aGlzLCBcImxpc3RcIikgfHwgXCJcIik7XG4gICAgfVxuICB9KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtZGF0YWxpc3RcIiwgVUhUTUxEYXRhTGlzdEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTERhdGFMaXN0RWxlbWVudCB9O1xuIiwiaW1wb3J0IHsgVUhUTUxDb21ib2JveEVsZW1lbnQgfSBmcm9tIFwiQHUtZWxlbWVudHMvdS1jb21ib2JveFwiO1xuaW1wb3J0IHsgVUhUTUxEYXRhTGlzdEVsZW1lbnQgfSBmcm9tIFwiQHUtZWxlbWVudHMvdS1kYXRhbGlzdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdFFVSUNLX0VWRU5ULFxuXHRhbmNob3JQb3NpdGlvbixcblx0YXR0cixcblx0aXNJbnB1dExpa2UsXG5cdG9uLFxuXHRvbkxvYWRlZCxcblx0b25NdXRhdGlvbixcblx0dXNlSWQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRklFTEQgPSBzdHlsZXMuZmllbGQuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1BST1BFUlRZX09WRVIgPSBcIi0tbXRkcy10ZXh0LWNvdW50LW92ZXJcIjtcbmNvbnN0IENTU19QUk9QRVJUWV9VTkRFUiA9IFwiLS1tdGRzLXRleHQtY291bnQtdW5kZXJcIjtcbmNvbnN0IENTU19WQUxJREFUSU9OUyA9IHN0eWxlcy52YWxpZGF0aW9uLnNwbGl0KFwiIFwiKTtcbmNvbnN0IENTU19WQUxJREFUSU9OID0gQ1NTX1ZBTElEQVRJT05TWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihmaWVsZHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpXG5cdFx0aWYgKGZpZWxkLmlzQ29ubmVjdGVkKSB7XG5cdFx0XHRjb25zdCBsYWJlbHM6IEhUTUxMYWJlbEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0Y29uc3QgZGVzY3M6IEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0bGV0IGNvbWJvYm94OiBVSFRNTENvbWJvYm94RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXHRcdFx0bGV0IGlucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdFx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGVsIG9mIGZpZWxkLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSkge1xuXHRcdFx0XHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MTGFiZWxFbGVtZW50KSBsYWJlbHMucHVzaChlbCk7XG5cdFx0XHRcdGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgVUhUTUxDb21ib2JveEVsZW1lbnQpIGNvbWJvYm94ID0gZWw7XG5cdFx0XHRcdGVsc2UgaWYgKGlzSW5wdXRMaWtlKGVsKSkgaW5wdXQgPSBlbDtcblx0XHRcdFx0ZWxzZSBpZiAoZWwuaGFzQXR0cmlidXRlKFwiZGF0YS1kZXNjcmlwdGlvblwiKSkgZGVzY3MucHVzaChlbCk7XG5cdFx0XHRcdGVsc2UgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhDU1NfVkFMSURBVElPTikpIHtcblx0XHRcdFx0XHR2YWxpZCA9XG5cdFx0XHRcdFx0XHRhdHRyKGVsLCBcImRhdGEtY29sb3JcIikgPT09IFwic3VjY2Vzc1wiIHx8XG5cdFx0XHRcdFx0XHQhZWwuY2xpZW50V2lkdGggfHxcblx0XHRcdFx0XHRcdCFlbC5jbGllbnRIZWlnaHQ7IC8vIE9ubHkgc2V0IGludmFsaWQgaWYgVmFsaWRhdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRcdFx0ZGVzY3MudW5zaGlmdChlbCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBIVE1MUGFyYWdyYXBoRWxlbWVudClcblx0XHRcdFx0XHRkZXNjcy5zb21lKChkZXNjKSA9PiBkZXNjLmNvbnRhaW5zKGVsKSkgfHwgZGVzY3MucHVzaChlbCk7IC8vIE9ubHkgYWRkIGlmIG5vdCBhbHJlYWR5IGluc2lkZSBkZXNjcmlwdGlvblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaW5wdXQpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBsYWJlbCBvZiBsYWJlbHMpIGxhYmVsLmh0bWxGb3IgPSB1c2VJZChpbnB1dCk7XG5cdFx0XHRcdHJlbmRlckNvbWJvYm94KGNvbWJvYm94KTtcblx0XHRcdFx0cmVuZGVyQ291bnRlcihpbnB1dCk7XG5cdFx0XHRcdHJlbmRlclRleHRhcmVhU2l6ZShpbnB1dCk7XG5cdFx0XHRcdGF0dHIoaW5wdXQsIFwiYXJpYS1kZXNjcmliZWRieVwiLCBkZXNjcy5tYXAodXNlSWQpLmpvaW4oXCIgXCIpIHx8IG51bGwpOyAvLyBSZW1vdmUgaWYgZW1wdHlcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWludmFsaWRcIiwgYCR7IXZhbGlkfWApO1xuXHRcdFx0fVxuXHRcdH1cbn1cblxuLy8gaU9TIGRvZXMgbm90IHN1cHBvcnQgZmllbGQtc2l6aW5nOiBjb250ZW50LCBzbyB3ZSBuZWVkIHRvIG1hbnVhbGx5IHJlc2l6ZVxuZnVuY3Rpb24gcmVuZGVyVGV4dGFyZWFTaXplKHRleHRhcmVhOiBFbGVtZW50KSB7XG5cdGlmICh0ZXh0YXJlYSBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcblx0XHR0ZXh0YXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tbXRkcy10ZXh0YXJlYS1oZWlnaHRcIiwgXCJhdXRvXCIpO1xuXHRcdHRleHRhcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuXHRcdFx0XCItLW10ZHMtdGV4dGFyZWEtaGVpZ2h0XCIsXG5cdFx0XHRgJHt0ZXh0YXJlYS5zY3JvbGxIZWlnaHR9cHhgLFxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyQ29tYm9ib3goY29tYm9ib3g6IFVIVE1MQ29tYm9ib3hFbGVtZW50IHwgbnVsbCkge1xuXHRpZiAoIWNvbWJvYm94KSByZXR1cm47XG5cblx0Ly8gU2V0dXAgdHJhbnNsYXRpb25zIGZyb20gQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzXG5cdGNvbnN0IGxpc3QgPSBjb21ib2JveC5xdWVyeVNlbGVjdG9yKFwidS1kYXRhbGlzdCxkYXRhbGlzdFwiKTtcblx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjb21ib2JveCk7XG5cdGNvbnN0IGkxMW4gPSAoa2V5OiBzdHJpbmcpID0+IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoYC0tbXRkcy10ZXh0LSR7a2V5fWApO1xuXG5cdGlmIChsaXN0KSB7XG5cdFx0YXR0cihsaXN0LCBcImRhdGEtc3ItcGx1cmFsXCIsIGkxMW4oXCJkYXRhbGlzdC1wbHVyYWxcIikpO1xuXHRcdGF0dHIobGlzdCwgXCJkYXRhLXNyLXNpbmd1bGFyXCIsIGkxMW4oXCJkYXRhbGlzdC1zaW5ndWxhclwiKSk7XG5cdFx0YXR0cihsaXN0LCBcInBvcG92ZXJcIiwgXCJtYW51YWxcIik7XG5cdH1cblxuXHRhdHRyKGNvbWJvYm94LCBcImRhdGEtc3ItYWRkZWRcIiwgaTExbihcImNvbWJvYm94LWFkZGVkXCIpKTtcblx0YXR0cihjb21ib2JveCwgXCJkYXRhLXNyLWVtcHR5XCIsIGkxMW4oXCJjb21ib2JveC1lbXB0eVwiKSk7XG5cdGF0dHIoY29tYm9ib3gsIFwiZGF0YS1zci1mb3VuZFwiLCBpMTFuKFwiY29tYm9ib3gtZm91bmRcIikpO1xuXHRhdHRyKGNvbWJvYm94LCBcImRhdGEtc3ItaW52YWxpZFwiLCBpMTFuKFwiY29tYm9ib3gtaW52YWxpZFwiKSk7XG5cdGF0dHIoY29tYm9ib3gsIFwiZGF0YS1zci1vZlwiLCBpMTFuKFwiY29tYm9ib3gtb2ZcIikpO1xuXHRhdHRyKGNvbWJvYm94LCBcImRhdGEtc3ItcmVtb3ZlXCIsIGkxMW4oXCJjb21ib2JveC1yZW1vdmVcIikpO1xuXHRhdHRyKGNvbWJvYm94LCBcImRhdGEtc3ItcmVtb3ZlZFwiLCBpMTFuKFwiY29tYm9ib3gtcmVtb3ZlZFwiKSk7XG5cdGF0dHIoY29tYm9ib3gsIFwiZGF0YS1zci1yZW1vdmVkXCIsIGkxMW4oXCJjb21ib2JveC1yZW1vdmVkXCIpKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyQ291bnRlcihpbnB1dDogSFRNTElucHV0RWxlbWVudCkge1xuXHRjb25zdCBlbCA9IGlucHV0Py5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdGNvbnN0IGxpbWl0ID0gZWwgJiYgYXR0cihlbCwgXCJkYXRhLWNvdW50XCIpO1xuXG5cdGlmIChlbCAmJiBsaW1pdCkge1xuXHRcdGNvbnN0IHJlbWFpbmRlciA9IE51bWJlcihsaW1pdCkgLSBpbnB1dC52YWx1ZS5sZW5ndGg7XG5cdFx0Y29uc3QgbmV4dEludmFsaWQgPSByZW1haW5kZXIgPCAwO1xuXHRcdGNvbnN0IHByZXZJbnZhbGlkID0gYXR0cihlbCwgXCJhcmlhLWxpdmVcIikgPT09IFwicG9saXRlXCI7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCB8fCBpbnB1dCk7XG5cdFx0Y29uc3Qgb3ZlciA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoQ1NTX1BST1BFUlRZX09WRVIpPy5zbGljZSgxLCAtMSkgfHwgXCJcIjsgLy8gc2xpY2UgdG8gdHJpbSBxdW90ZXNcblx0XHRjb25zdCB1bmRlciA9XG5cdFx0XHRzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKENTU19QUk9QRVJUWV9VTkRFUik/LnNsaWNlKDEsIC0xKSB8fCBcIlwiOyAvLyBzbGljZSB0byB0cmltIHF1b3Rlc1xuXG5cdFx0aWYgKHByZXZJbnZhbGlkICE9PSBuZXh0SW52YWxpZCkge1xuXHRcdFx0YXR0cihlbCwgXCJhcmlhLWxpdmVcIiwgbmV4dEludmFsaWQgPyBcInBvbGl0ZVwiIDogXCJvZmZcIik7XG5cdFx0XHRmb3IgKGNvbnN0IGNzcyBvZiBDU1NfVkFMSURBVElPTlMpIGVsLmNsYXNzTGlzdC50b2dnbGUoY3NzLCBuZXh0SW52YWxpZCk7XG5cdFx0fVxuXHRcdGVsLnRleHRDb250ZW50ID0gKG5leHRJbnZhbGlkID8gb3ZlciA6IHVuZGVyKS5yZXBsYWNlKFxuXHRcdFx0XCIlZFwiLFxuXHRcdFx0YCR7TWF0aC5hYnMocmVtYWluZGVyKX1gLFxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlKHsgdGFyZ2V0OiBlbCwgbmV3U3RhdGUgfTogRXZlbnQgJiB7IG5ld1N0YXRlPzogc3RyaW5nIH0pIHtcblx0aWYgKGVsIGluc3RhbmNlb2YgVUhUTUxEYXRhTGlzdEVsZW1lbnQpIHtcblx0XHRjb25zdCBhbmNob3IgPSAoZWwuZ2V0Um9vdE5vZGUoKSBhcyBTaGFkb3dSb290KT8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG5cdFx0XHRgW3BvcG92ZXJ0YXJnZXQ9XCIke2VsLmlkfVwiXWAsXG5cdFx0KTtcblxuXHRcdGlmIChuZXdTdGF0ZSA9PT0gXCJjbG9zZWRcIikgYW5jaG9yUG9zaXRpb24oZWwsIGZhbHNlKTtcblx0XHRlbHNlIGlmIChhbmNob3IpIHtcblx0XHRcdGVsLnN0eWxlLndpZHRoID0gYCR7YW5jaG9yLmNsaWVudFdpZHRofXB4YDtcblx0XHRcdGFuY2hvclBvc2l0aW9uKGVsLCBhbmNob3IsIFwiYm90dG9tXCIpOyAvLyBUT0RPOiBQcmV2ZW50IGZsaXBcblx0XHR9XG5cdH1cbn1cbi8vIFVwZGF0ZSB3aGVuIHR5cGluZ1xuZnVuY3Rpb24gaGFuZGxlSW5wdXQoeyB0YXJnZXQgfTogRXZlbnQpIHtcblx0aWYgKGlzSW5wdXRMaWtlKHRhcmdldCkpIHtcblx0XHRyZW5kZXJDb3VudGVyKHRhcmdldCk7XG5cdFx0cmVuZGVyVGV4dGFyZWFTaXplKHRhcmdldCk7XG5cdH1cbn1cblxuLy8gUHJldmVudCBicm93c2VycyBmcm9tIHNob3dpbmcgZGVmYXVsdCB2YWxpZGF0aW9uIGJ1YmJsZXNcbmZ1bmN0aW9uIGhhbmRsZUludmFsaWQoZXZlbnQ6IEV2ZW50KSB7XG5cdGlmICgoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oYC4ke0NTU19GSUVMRH1gKSlcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfRklFTEQsIGhhbmRsZU11dGF0aW9uKTtcblx0b24oZG9jdW1lbnQsIFwiaW5wdXRcIiwgaGFuZGxlSW5wdXQsIFFVSUNLX0VWRU5UKTtcblx0b24oZG9jdW1lbnQsIFwiaW52YWxpZFwiLCBoYW5kbGVJbnZhbGlkLCB0cnVlKTsgLy8gVXNlIGNhcHR1cmUgYXMgaW52YWxpZCBkb2VzIG5vZSBidWJibGVcblx0b24oZG9jdW1lbnQsIFwidG9nZ2xlXCIsIGhhbmRsZVRvZ2dsZSwgUVVJQ0tfRVZFTlQpOyAvLyBVc2UgY2FwdHVyZSBzaW5jZSB0b2dnbGUgZG9lcyBub3QgYnViYmxlXG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBpc0lucHV0TGlrZSwgb25Mb2FkZWQsIG9uTXV0YXRpb24sIHVzZUlkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19GSUVMRFNFVCA9IHN0eWxlcy5maWVsZHNldC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVkFMSURBVElPTiA9IHN0eWxlcy52YWxpZGF0aW9uLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oZmllbGRzZXRzOiBIVE1MQ29sbGVjdGlvbk9mPEVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgZmllbGRzZXQgb2YgZmllbGRzZXRzKVxuXHRcdGlmIChmaWVsZHNldC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0Y29uc3QgaW5wdXRzOiBIVE1MSW5wdXRFbGVtZW50W10gPSBbXTtcblx0XHRcdGxldCB2YWxpZGF0aW9uSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGVsIG9mIGZpZWxkc2V0LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSkge1xuXHRcdFx0XHRpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkgdmFsaWRhdGlvbklkID0gdXNlSWQoZWwpO1xuXHRcdFx0XHRlbHNlIGlmIChpc0lucHV0TGlrZShlbCkpIGlucHV0cy5wdXNoKGVsKTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCBpbnB1dCBvZiBpbnB1dHMpIHtcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIHZhbGlkYXRpb25JZCk7XG5cdFx0XHRcdGF0dHIoaW5wdXQsIFwiYXJpYS1pbnZhbGlkXCIsIGAkeyEhdmFsaWRhdGlvbklkfWApO1xuXHRcdFx0fVxuXHRcdH1cbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRFNFVCwgaGFuZGxlTXV0YXRpb24pLFxuKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfTE9HTyA9IHN0eWxlcy5sb2dvLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oW2xvZ29dOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRpZiAobG9nbz8uaXNDb25uZWN0ZWQgJiYgbG9nbz8uZmlyc3RFbGVtZW50Q2hpbGQgaW5zdGFuY2VvZiBTVkdTVkdFbGVtZW50KSB7XG5cdFx0Zm9yIChjb25zdCBpY29uIG9mIGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvckFsbChcImxpbmtbcmVsfj0naWNvbiddXCIpKVxuXHRcdFx0aWNvbi5zZXRBdHRyaWJ1dGUoXCJyZWxcIiwgXCJkaXNhYmxlZFwiKTsgLy8gRGlzYWJsZSBwcmV2aW91cyBpY29uIChidXQgbm90IHJlbW92ZSBpcyBhcyB0aGlzIG1ha2VzIE5leHQuanMgc2FkKVxuXG5cdFx0Y29uc3Qgc3ZnID0gbG9nby5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRjb25zdCBpc0RvdCA9IGxvZ28/Lmhhc0F0dHJpYnV0ZShcImRhdGEtZW52XCIpO1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoc3ZnKTtcblx0XHRjb25zdCB0ZXh0ID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcImNvbG9yXCIpO1xuXHRcdGNvbnN0IGJhY2sgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1tdGRzLWxvZ28tY29sb3JcIik7XG5cdFx0Y29uc3QgaWNvbiA9IHN2Zy5vdXRlckhUTUxcblx0XHRcdC5yZXBsYWNlKC9cXG4rL2csIFwiIFwiKSAvLyBQcmV2ZW50IGxpbmUgYnJlYWtzXG5cdFx0XHQucmVwbGFjZSgvKGZpbGx8d2lkdGh8aGVpZ2h0fHhtbG5zKT1cIlteXCJdK1wiL2dpLCBcIlwiKVxuXHRcdFx0LnJlcGxhY2UoXCI8c3ZnXCIsIGA8c3ZnIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIGZpbGw9XCIke3RleHR9XCJgKTtcblxuXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoXG5cdFx0XHRPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpLCB7XG5cdFx0XHRcdGhyZWY6IGBkYXRhOmltYWdlL3N2Zyt4bWwsJHtlbmNvZGVVUklDb21wb25lbnQoYDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNTUgNTUnPjxyZWN0IGZpbGw9JyR7aXNEb3QgPyBcIm5vbmVcIiA6IGJhY2t9JyB3aWR0aD0nNTEnIGhlaWdodD0nNTEnIHg9JzInIHk9JzInIHN0cm9rZT0nJHt0ZXh0fScgc3Ryb2tlLWRhc2hhcnJheT0nMC4wOSA2LjM4JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1vcGFjaXR5PScke2lzRG90ID8gMC42IDogMH0nIHN0cm9rZS13aWR0aD0nMi4zJyByeD0nMjUuNScvPjxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg3LjUgNy41KVwiPiR7aWNvbn08L2c+PC9zdmc+YCl9YCxcblx0XHRcdFx0cmVsOiBcImljb25cIixcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19MT0dPLCBoYW5kbGVNdXRhdGlvbikpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFFVSUNLX0VWRU5ULCBhbmNob3JQb3NpdGlvbiwgYXR0ciwgb24sIG9uTG9hZGVkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19QT1BPVkVSID0gc3R5bGVzLnBvcG92ZXIuc3BsaXQoXCIgXCIpWzBdO1xubGV0IE9QRU5fUE9QT1ZFUlMgPSAwOyAvLyBTcGVlZCB1cCBieSBvbmx5IGNoZWNraW5nIGNsaWNrcyBpZiB3ZSBoYXZlIG9wZW4gcG9wb3ZlcnNcblxuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlKHsgdGFyZ2V0OiBlbCwgbmV3U3RhdGUgfTogRXZlbnQgJiB7IG5ld1N0YXRlPzogc3RyaW5nIH0pIHtcblx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19QT1BPVkVSKSkge1xuXHRcdGNvbnN0IGFuY2hvciA9IChlbC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QpPy5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pihcblx0XHRcdGBbcG9wb3ZlcnRhcmdldD1cIiR7ZWwuaWR9XCJdYCxcblx0XHQpO1xuXG5cdFx0aWYgKG5ld1N0YXRlID09PSBcImNsb3NlZFwiKSB7XG5cdFx0XHRPUEVOX1BPUE9WRVJTIC09IDE7XG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgZmFsc2UpO1xuXHRcdH0gZWxzZSBpZiAoYW5jaG9yKSB7XG5cdFx0XHRPUEVOX1BPUE9WRVJTICs9IDE7XG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgYW5jaG9yLCBhdHRyKGVsLCBcImRhdGEtcG9zaXRpb25cIikgfHwgXCJib3R0b21cIik7XG5cdFx0fVxuXHR9XG59XG5cbi8vIFBvbHlmaWxsIHBvcG92ZXJ0YXJnZXQgZm9yIDxhPiAobm90IHN1cHBvcnRlZCBieSBuYXRpdmUpXG4vLyBhbmQgYXV0b21hdGljYWxseSBhc3N1bWUgcG9wb3ZlcnRhcmdldCBpcyB0aGUgY2xvc2VzdCBwYXJlbnQgcG9wb3ZlclxuLy8gYnV0IHJlc3BlY3QgdGhlIHBvcG92ZXJ0YXJnZXQgYW5kIHBvcG92ZXJ0YXJnZXRhY3Rpb24gYXR0cmlidXRlXG5mdW5jdGlvbiBoYW5kbGVMaW5rQ2xpY2soeyB0YXJnZXQgfTogRXZlbnQpIHtcblx0Y29uc3QgY2xvc2UgPVxuXHRcdE9QRU5fUE9QT1ZFUlMgJiYgKHRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKFwiYSxbcG9wb3ZlcnRhcmdldGFjdGlvbl1cIik7XG5cblx0aWYgKGNsb3NlKSB7XG5cdFx0Y29uc3QgYWN0aW9uID0gYXR0cihjbG9zZSwgXCJwb3BvdmVydGFyZ2V0YWN0aW9uXCIpIHx8IFwidG9nZ2xlXCI7XG5cdFx0Y29uc3Qgb3BlbiA9IGFjdGlvbiA9PT0gXCJzaG93XCIgfHwgKGFjdGlvbiA9PT0gXCJoaWRlXCIgPyBmYWxzZSA6IHVuZGVmaW5lZCk7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXR0cihjbG9zZSwgXCJwb3BvdmVydGFyZ2V0XCIpIHx8IFwiXCIpO1xuXHRcdGNvbnN0IHBvcG92ZXIgPSAodGFyZ2V0IHx8IGNsb3NlKS5jbG9zZXN0PEhUTUxFbGVtZW50PihgLiR7Q1NTX1BPUE9WRVJ9YCk7XG5cblx0XHQvLyBQb3BvdmVyIGNhbiBiZSBkaXNjb25uZXRlZCBieSBjbGljayBoYW5kbGVyIGRlZXBlciBkb3duIGluIHRoZSBET00gdGhyZWUgYmVmb3JlIHJlYWNoaW5nIGRvY3VtZW50XG5cdFx0aWYgKHBvcG92ZXI/LmlzQ29ubmVjdGVkICYmIHBvcG92ZXI/LnRvZ2dsZVBvcG92ZXIpXG5cdFx0XHRwb3BvdmVyLnRvZ2dsZVBvcG92ZXIob3Blbik7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJ0b2dnbGVcIiwgaGFuZGxlVG9nZ2xlLCBRVUlDS19FVkVOVCk7IC8vIFVzZSBjYXB0dXJlIHNpbmNlIHRvZ2dsZSBkb2VzIG5vdCBidWJibGVcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlTGlua0NsaWNrKTsgLy8gQWxsb3cgYDxhPmAgdG8gdXNlIGBwb3BvdmVydGFyZ2V0YCBhcyB3ZWxsXG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfVEFCTEUgPSBzdHlsZXMudGFibGUuc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbih0YWJsZXM6IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTFRhYmxlRWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCB0YWJsZSBvZiB0YWJsZXMpIHtcblx0XHRjb25zdCB0aHM6IHN0cmluZ1tdID0gW107IC8vIEFkZCBkYXRhLXRoPVwiXCIgdG8gZWFjaCBjZWxsIHRvIHN1cHBvcnQgZGF0YS1tb2JpbGUgZGVzaWduc1xuXG5cdFx0YXR0cih0YWJsZSwgXCJyb2xlXCIsIFwidGFibGVcIik7IC8vIEFkZCBoZWxwaW5nIHJvbGU9XCJcIiB0byBlbnN1cmUgc2NyZWVuIHJlYWRlcnMgdW5kZXJzdGFuZCB0aGUgdGFibGUgcmVnYXJkbGVzcyBvZiBDU1MgZGlzcGxheVxuXHRcdGlmICh0YWJsZS5jYXB0aW9uKSBhdHRyKHRhYmxlLmNhcHRpb24sIFwicm9sZVwiLCBcImNhcHRpb25cIik7XG5cdFx0Zm9yIChjb25zdCBncm91cCBvZiBbdGFibGUudEhlYWQsIHRhYmxlLnRGb290LCAuLi50YWJsZS50Qm9kaWVzXSlcblx0XHRcdGlmIChncm91cCkge1xuXHRcdFx0XHRhdHRyKGdyb3VwLCBcInJvbGVcIiwgXCJyb3dncm91cFwiKTtcblx0XHRcdFx0Y29uc3QgaXNUYm9keSA9IGdyb3VwLm5vZGVOYW1lID09PSBcIlRCT0RZXCI7XG5cblx0XHRcdFx0Zm9yIChjb25zdCByb3cgb2YgZ3JvdXAucm93cykge1xuXHRcdFx0XHRcdGF0dHIocm93LCBcInJvbGVcIiwgXCJyb3dcIik7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjZWxsIG9mIHJvdy5jZWxscykge1xuXHRcdFx0XHRcdFx0aWYgKGlzVGJvZHkpIGF0dHIoY2VsbCwgXCJkYXRhLXRoXCIsIHRoc1tjZWxsLmNlbGxJbmRleF0gfHwgXCI6ZW1wdHlcIik7XG5cdFx0XHRcdFx0XHRlbHNlIHRocy5wdXNoKGNlbGwuaW5uZXJUZXh0LnRyaW0oKSk7IC8vIFVzaW5nIGlubmVyVGV4dCB0byBvbmx5IGluY2x1ZGUgdmlzaWJsZSB0ZXh0XG5cdFx0XHRcdFx0XHRpZiAoY2VsbC5ub2RlTmFtZSA9PT0gXCJURFwiKSBhdHRyKGNlbGwsIFwicm9sZVwiLCBcImNlbGxcIik7XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0YXR0cihjZWxsLCBcInJvbGVcIiwgaXNUYm9keSA/IFwicm93aGVhZGVyXCIgOiBcImNvbHVtbmhlYWRlclwiKTtcblx0XHRcdFx0XHRcdFx0YXR0cihjZWxsLCBcInNjb3BlXCIsIGlzVGJvZHkgPyBcInJvd1wiIDogXCJjb2xcIik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19UQUJMRSwgaGFuZGxlTXV0YXRpb24pKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBvbiwgb25Mb2FkZWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1RPR0dMRUdST1VQID0gYC4ke3N0eWxlcy50b2dnbGVncm91cC5zcGxpdChcIiBcIilbMF19YDtcblxuLy8gUHJldmVudCBicm93c2VycyBmcm9tIHNob3dpbmcgZGVmYXVsdCB2YWxpZGF0aW9uIGJ1YmJsZXNcbmZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQ6IEV2ZW50ICYgUGFydGlhbDxLZXlib2FyZEV2ZW50Pikge1xuXHRjb25zdCB7IGtleSwgdGFyZ2V0OiBlbCB9ID0gZXZlbnQ7XG5cdGNvbnN0IGdyb3VwID0gZWwgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIGVsLmNsb3Nlc3QoQ1NTX1RPR0dMRUdST1VQKTtcblxuXHRpZiAoIWdyb3VwKSByZXR1cm47XG5cdGlmIChrZXkgPT09IFwiRW50ZXJcIikgZWwuY2xpY2soKTtcblx0aWYgKGtleT8uc3RhcnRzV2l0aChcIkFycm93XCIpKSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRjb25zdCBpbnB1dHMgPSBncm91cC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpO1xuXHRcdGNvbnN0IGluZGV4ID0gWy4uLmlucHV0c10uaW5kZXhPZihlbCk7XG5cdFx0Y29uc3QgbW92ZSA9IGtleS5tYXRjaCgvQXJyb3coUmlnaHR8RG93bikvKSA/IDEgOiAtMTtcblx0XHRpbnB1dHNbKGlucHV0cy5sZW5ndGggKyBpbmRleCArIG1vdmUpICUgaW5wdXRzLmxlbmd0aF0/LmZvY3VzKCk7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb24oZG9jdW1lbnQsIFwia2V5ZG93blwiLCBoYW5kbGVLZXlEb3duKSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0SVNfQlJPV1NFUixcblx0UVVJQ0tfRVZFTlQsXG5cdGFuY2hvclBvc2l0aW9uLFxuXHRhdHRyLFxuXHRvbixcblx0b25Mb2FkZWQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBERVNDUklCRURCWSA9IFwiYXJpYS1kZXNjcmliZWRieVwiO1xuY29uc3QgRVNDID0gXCJFc2NhcGVcIjtcbmNvbnN0IExBQkVMTEVEQlkgPSBcImFyaWEtbGFiZWxsZWRieVwiO1xuY29uc3QgUE9TSVRJT05fQ1NTX1BST1BFUlRZID0gXCItLW10ZHMtdG9vbHRpcC1wb3NpdGlvblwiO1xuY29uc3QgVEhST1RUTEVfREVMQVkgPSAzMDA7XG5jb25zdCBUT09MVElQID0gSVNfQlJPV1NFUlxuXHQ/IE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwge1xuXHRcdFx0Y2xhc3NOYW1lOiBzdHlsZXMuX3Rvb2x0aXAsXG5cdFx0XHRpZDogXCJtdGRzLXRvb2x0aXBcIixcblx0XHRcdHBvcG92ZXI6IFwibWFudWFsXCIsXG5cdFx0fSlcblx0OiBudWxsOyAvLyBDcmVhdGUgYSBkdW1teSBlbGVtZW50IHRvIGF2b2lkIG51bGwgY2hlY2tzXG5cbmxldCBBTkNIT1I6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbmxldCBMQVNUX0NBTEwgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5sZXQgVEhST1RUTEU6IG51bWJlciB8IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+ID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlTW92ZSh7IHRhcmdldCwgdHlwZSwga2V5IH06IEV2ZW50ICYgeyBrZXk/OiBzdHJpbmcgfSkge1xuXHRpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIgJiYga2V5ICE9PSBFU0MpIHJldHVybjsgLy8gQWxsb3cgRVNDIGRpc21pc3MgdG8gZm9sbG93IGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvQVJJQS9hcGcvcGF0dGVybnMvdG9vbHRpcC9cblx0Y29uc3Qgd2FpdCA9IExBU1RfQ0FMTCArIFRIUk9UVExFX0RFTEFZIC0gRGF0ZS5ub3coKTtcblx0Y2xlYXJUaW1lb3V0KFRIUk9UVExFKTtcblx0VEhST1RUTEUgPSBzZXRUaW1lb3V0KFxuXHRcdGhhbmRsZU1vdmVUaHJvdHRsZWQsXG5cdFx0TWF0aC5tYXgod2FpdCwgMCksXG5cdFx0a2V5ID09PSBFU0MgPyBudWxsIDogdGFyZ2V0LFxuXHQpO1xufVxuXG4vLyBVc2luZyBhIHRocm90dGxlZCBmdW5jdGlvbiB0byBhdm9pZCBwZXJmb3JtYW5jZSBpc3N1ZXNcbmZ1bmN0aW9uIGhhbmRsZU1vdmVUaHJvdHRsZWQodGFyZ2V0OiBFbGVtZW50IHwgbnVsbCkge1xuXHRMQVNUX0NBTEwgPSBEYXRlLm5vdygpO1xuXG5cdC8vIEJ1aWxkIGFuZCBhcHBlbmQgdG9vbHRpcCBpZiBub3QgZXhpc3Rpbmdcblx0aWYgKCFUT09MVElQIHx8IHRhcmdldCA9PT0gVE9PTFRJUCkgcmV0dXJuOyAvLyBBbGxvdyB0b29sdGlwIHRvIGJlIGhvdmVyZWQsIGZvbGxvd2luZyBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIxLyNjb250ZW50LW9uLWhvdmVyLW9yLWZvY3VzXG5cdGlmICghVE9PTFRJUD8uaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKFRPT0xUSVApOyAvLyBFbnN1cmUgY29ubmVjdGVkXG5cdGxldCBhbmNob3IgPSB0YXJnZXQ/LmNsb3Nlc3Q/LjxFbGVtZW50PihcIltkYXRhLXRvb2x0aXBdXCIpIHx8IG51bGw7XG5cblx0Ly8gTm8gbmVlZCB0byB1cGRhdGVcblx0aWYgKGFuY2hvciA9PT0gQU5DSE9SKSByZXR1cm47XG5cblx0Y29uc3QgY29udGVudCA9IChhbmNob3IgJiYgYXR0cihhbmNob3IsIFwiZGF0YS10b29sdGlwXCIpKSB8fCBcIlwiO1xuXHRjb25zdCBwb3NpdGlvbiA9XG5cdFx0KGFuY2hvciAmJiBhdHRyKGFuY2hvciwgXCJkYXRhLXRvb2x0aXAtcG9zaXRpb25cIikpIHx8XG5cdFx0d2luZG93XG5cdFx0XHQuZ2V0Q29tcHV0ZWRTdHlsZShhbmNob3IgfHwgZG9jdW1lbnQuYm9keSlcblx0XHRcdC5nZXRQcm9wZXJ0eVZhbHVlKFBPU0lUSU9OX0NTU19QUk9QRVJUWSlcblx0XHRcdD8udHJpbSgpIHx8XG5cdFx0XCJ0b3BcIjtcblxuXHRjb25zdCBpc0hpZGRlbiA9XG5cdFx0IWNvbnRlbnQgfHxcblx0XHRjb250ZW50ID09PSBcImZhbHNlXCIgfHxcblx0XHRjb250ZW50ID09PSBcInRydWVcIiB8fFxuXHRcdHBvc2l0aW9uID09PSBcIm5vbmVcIjtcblxuXHRpZiAoaXNIaWRkZW4pIGFuY2hvciA9IG51bGw7IC8vIERvIG5vdCBzaG93IHRvb2x0aXAgaWYgYm9vbGlzaCB2YWx1ZVxuXHRpZiAoYW5jaG9yKSBUT09MVElQLnRleHRDb250ZW50ID0gY29udGVudDsgLy8gT25seSB1cGRhdGUgY29udGVudCBpZiBuZXcgYW5jaG9yXG5cblx0Y29uc3QgaGFkTGFiZWwgPSBBTkNIT1IgJiYgYXR0cihBTkNIT1IsIExBQkVMTEVEQlkpID09PSBUT09MVElQPy5pZDtcblx0Y29uc3QgaGFzTGFiZWwgPVxuXHRcdChhbmNob3IgaW5zdGFuY2VvZiBIVE1MRWxlbWVudFxuXHRcdFx0PyBhbmNob3IuaW5uZXJUZXh0XG5cdFx0XHQ6IGFuY2hvcj8udGV4dENvbnRlbnRcblx0XHQpPy50cmltKCkgfHxcblx0XHRhbmNob3I/Lmhhc0F0dHJpYnV0ZShMQUJFTExFREJZKSB8fFxuXHRcdGFuY2hvcj8uaGFzQXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKTtcblxuXHRBTkNIT1I/LnJlbW92ZUF0dHJpYnV0ZShoYWRMYWJlbCA/IExBQkVMTEVEQlkgOiBERVNDUklCRURCWSk7IC8vIFVubGluayBwcmV2aW91cyBhbmNob3Jcblx0YW5jaG9yUG9zaXRpb24oVE9PTFRJUCwgZmFsc2UpOyAvLyBSZXNldCBhbmNob3IgcG9zaXRpb25cblxuXHRBTkNIT1IgPSBhbmNob3I7IC8vIFN0b3JlIG5ldyBhbmNob3IgLSBtaWdodCBiZSBudWxsIGlmIG5vIG5ldyBhbmNob3Jcblx0aWYgKEFOQ0hPUikgYXR0cihBTkNIT1IsIGhhc0xhYmVsID8gREVTQ1JJQkVEQlkgOiBMQUJFTExFREJZLCBUT09MVElQPy5pZCk7IC8vIFVzZSB0b29sdGlwIGFzIGRlc2NyaXB0aW9uIGlmIGFsbHJlYWR5IGhhcyBsYWJlbFxuXHRUT09MVElQLnRvZ2dsZVBvcG92ZXIoISFhbmNob3IpO1xuXHRhbmNob3JQb3NpdGlvbihUT09MVElQLCBhbmNob3IgfHwgZmFsc2UsIHBvc2l0aW9uKTtcbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJibHVyLGZvY3VzLG1vdXNlb3V0LG1vdXNlb3ZlclwiLCBoYW5kbGVNb3ZlLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJrZXlkb3duXCIsIGhhbmRsZU1vdmUsIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcImJsdXJcIiwgaGFuZGxlTW92ZSwgUVVJQ0tfRVZFTlQpO1xufSk7XG4iLCIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgX2EyO1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIChfYTIgPSBlbC5nZXRBdHRyaWJ1dGUobmFtZSkpICE9IG51bGwgPyBfYTIgOiBudWxsO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIGFzQnV0dG9uID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGlzQ2xpY2sgPSBcImtleVwiIGluIGV2ZW50ICYmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKTtcbiAgaWYgKGlzQ2xpY2spIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGlmIChpc0NsaWNrICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBldmVudC50YXJnZXQuY2xpY2soKTtcbiAgcmV0dXJuIGlzQ2xpY2s7XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIGlmIChhdHRycykgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJzKSkgYXR0cihlbCwga2V5LCB2YWwpO1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcblxuLy8gdS1kZXRhaWxzLnRzXG52YXIgVUhUTUxEZXRhaWxzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvLyBVc2luZyB1bmRlcnNjb3JlIGluc3RlYWQgb2YgcHJpdmF0ZSBmaWVsZHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgdGhpcy5fY29udGVudCA9IG51bGw7XG4gICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IG5hbWU6IFwic3VtbWFyeVwiIH0pLFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBwYXJ0OiBcImRldGFpbHMtY29udGVudFwiIH0pLFxuICAgICAgY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgJHtESVNQTEFZX0JMT0NLfVxuICAgICAgICA6OnNsb3R0ZWQodS1zdW1tYXJ5KSB7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogYmxvY2sgfVxuXHRcdFx0XHQ6OnNsb3R0ZWQodS1zdW1tYXJ5KTo6YmVmb3JlIHsgY29udGVudDogJyc7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgbWFyZ2luLWlubGluZTogLjA1ZW0gLjMxMjVlbTsgYm9yZGVyLWJsb2NrOiAuMzEyNWVtIHNvbGlkIHRyYW5zcGFyZW50OyBib3JkZXItaW5saW5lLXN0YXJ0OiAuNWVtIHNvbGlkIH1cblx0XHRcdFx0OjpzbG90dGVkKHUtc3VtbWFyeVthcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXSk6OmJlZm9yZSB7IHJvdGF0ZTogOTBkZWcgfVxuXHRcdFx0XHQ6aG9zdCA+IFtwYXJ0PVwiZGV0YWlscy1jb250ZW50XCJdOm5vdChbaGlkZGVuPVwiXCJdKSB7IGRpc3BsYXk6IGJsb2NrIH1gXG4gICAgICApXG4gICAgKTtcbiAgfVxuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wib3BlblwiXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB2YXIgX2EyO1xuICAgIHRoaXMuX2NvbnRlbnQgPSAoX2EyID0gdGhpcy5zaGFkb3dSb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNoaWxkcmVuWzFdO1xuICAgIG9uKHRoaXMuX2NvbnRlbnQsIFwiYmVmb3JlbWF0Y2hcIiwgdGhpcyk7XG4gICAgb24odGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMuX2NvbnRlbnQpIG9mZih0aGlzLl9jb250ZW50LCBcImJlZm9yZW1hdGNoXCIsIHRoaXMpO1xuICAgIG9mZih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgdGhpcy5fY29udGVudCA9IG51bGw7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIHByZXYsIG5leHQpIHtcbiAgICBjb25zdCBoaWRlID0gXCJvbmJlZm9yZW1hdGNoXCIgaW4gdGhpcyA/IFwidW50aWwtZm91bmRcIiA6IHRydWU7XG4gICAgY29uc3Qgb3BlbiA9IHRoaXMub3BlbjtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIHRoaXMuY2hpbGRyZW4pXG4gICAgICBpZiAoZWwubm9kZU5hbWUgPT09IFwiVS1TVU1NQVJZXCIpIGF0dHIoZWwsIFwiYXJpYS1leHBhbmRlZFwiLCBgJHtvcGVufWApO1xuICAgIGlmICh0aGlzLl9jb250ZW50KSB7XG4gICAgICBhdHRyKHRoaXMuX2NvbnRlbnQsIFwiYXJpYS1oaWRkZW5cIiwgYCR7IW9wZW59YCk7XG4gICAgICB0aGlzLl9jb250ZW50LmhpZGRlbiA9IG9wZW4gPyBmYWxzZSA6IGhpZGU7XG4gICAgfVxuICAgIGlmIChvcGVuICYmIHRoaXMubmFtZSkge1xuICAgICAgY29uc3QgdURldGFpbHNMaXN0ID0gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgJHt0aGlzLm5vZGVOYW1lfVtuYW1lPVwiJHt0aGlzLm5hbWV9XCJdYFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgdURldGFpbHMgb2YgdURldGFpbHNMaXN0KVxuICAgICAgICBpZiAodURldGFpbHMgIT09IHRoaXMpIHVEZXRhaWxzLm9wZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHByb3AgPT09IFwib3BlblwiICYmIHByZXYgPT09IG51bGwgIT09IChuZXh0ID09PSBudWxsKSlcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJ0b2dnbGVcIikpO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3Qgc3VtbWFyeSA9IHRoaXMucXVlcnlTZWxlY3RvcihcIjpzY29wZSA+IHUtc3VtbWFyeVwiKTtcbiAgICBjb25zdCBpc1N1bW1hcnkgPSBzdW1tYXJ5ID09IG51bGwgPyB2b2lkIDAgOiBzdW1tYXJ5LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJiZWZvcmVtYXRjaFwiKSB0aGlzLm9wZW4gPSB0cnVlO1xuICAgIGlmIChpc1N1bW1hcnkgJiYgZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIGFzQnV0dG9uKGV2ZW50KTtcbiAgICBpZiAoaXNTdW1tYXJ5ICYmIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikgdGhpcy5vcGVuID0gIXRoaXMub3BlbjtcbiAgfVxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJvcGVuXCIpO1xuICB9XG4gIHNldCBvcGVuKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcIm9wZW5cIiwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgXCJuYW1lXCIpIHx8IFwiXCI7XG4gIH1cbiAgc2V0IG5hbWUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwibmFtZVwiLCB2YWx1ZSk7XG4gIH1cbn07XG52YXIgVUhUTUxTdW1tYXJ5RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJidXR0b25cIik7XG4gICAgdGhpcy5zbG90ID0gXCJzdW1tYXJ5XCI7XG4gICAgdGhpcy50YWJJbmRleCA9IDA7XG4gIH1cbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWRldGFpbHNcIiwgVUhUTUxEZXRhaWxzRWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXN1bW1hcnlcIiwgVUhUTUxTdW1tYXJ5RWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MRGV0YWlsc0VsZW1lbnQsIFVIVE1MU3VtbWFyeUVsZW1lbnQgfTtcbiIsIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19GSVJFRk9YID0gSVNfQlJPV1NFUiAmJiAvZmlyZWZveC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfSU9TID0gSVNfQlJPV1NFUiAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZ2V0TGFiZWwgPSAoZWwpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9IGdldFJvb3QoZWwpO1xuICBjb25zdCBsYWJlbCA9IGF0dHIoZWwsIFwiYXJpYS1sYWJlbFwiKSB8fCBcIlwiO1xuICBjb25zdCBsYWJlbHMgPSAoKF9hMiA9IGF0dHIoZWwsIFwiYXJpYS1sYWJlbGxlZGJ5XCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKS5zcGxpdCgvXFxzKy8pKSB8fCBbXTtcbiAgcmV0dXJuIFtcbiAgICAuLi5sYWJlbHMubWFwKChpZDIpID0+IHJvb3QgPT0gbnVsbCA/IHZvaWQgMCA6IHJvb3QucXVlcnlTZWxlY3RvcihgW2lkPVwiJHtpZDJ9XCJdYCkpLFxuICAgIC8vIEdldCBhbGwgbGFiZWxsZWRieSBlbGVtZW50c1xuICAgIC4uLkFycmF5LmZyb20oZWwubGFiZWxzIHx8IFtdKVxuICAgIC8vIEdldCBhbGwgPGxhYmVsPiBlbGVtZW50c1xuICBdLnJlZHVjZSgoYWNjLCBlbDIpID0+IHtcbiAgICB2YXIgX2EzO1xuICAgIHJldHVybiBhY2MgfHwgKChfYTMgPSBlbDIgPT0gbnVsbCA/IHZvaWQgMCA6IGVsMi5pbm5lclRleHQpID09IG51bGwgPyB2b2lkIDAgOiBfYTMudHJpbSgpKSB8fCBcIlwiO1xuICB9LCBsYWJlbCk7XG59O1xuXG4vLyB1LXByb2dyZXNzLnRzXG52YXIgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xudmFyIFVIVE1MUHJvZ3Jlc3NFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiYXJpYS1sYWJlbFwiLCBcImFyaWEtbGFiZWxsZWRieVwiLCBcInZhbHVlXCIsIFwibWF4XCJdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IGhpZGRlbjogXCJcIiB9KSxcbiAgICAgIC8vIFNsb3QgaGlkaW5nIGNvbnRlbnQgYWxsb3dzIGxlZ2FjeSBicm93c2VyIHRvIGRpc3BsYXkgZmFsbGJhY2sgdGV4dFxuICAgICAgY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgYm9yZGVyOiAxcHggc29saWQ7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgaGVpZ2h0OiAuNWVtOyB3aWR0aDogMTBlbTsgb3ZlcmZsb3c6IGhpZGRlbiB9XG4gICAgICAgIDpob3N0OjpiZWZvcmUgeyBjb250ZW50OiAnJzsgZGlzcGxheTogYmxvY2s7IGhlaWdodDogMTAwJTsgYmFja2dyb3VuZDogY3VycmVudENvbG9yOyB3aWR0aDogdmFyKC0tcGVyY2VudGFnZSwgMCUpOyB0cmFuc2l0aW9uOiB3aWR0aCAuMnMgfVxuICAgICAgICA6aG9zdCg6bm90KFt2YWx1ZV0pKSB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZyxjdXJyZW50Q29sb3IgMjUlLCB0cmFuc3BhcmVudCA1MCUsIGN1cnJlbnRDb2xvciA3NSUpIDUwJS80MDAlIH1cbiAgICAgICAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiBuby1wcmVmZXJlbmNlKSB7IDpob3N0IHsgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlIDJzIGxpbmVhciBpbmZpbml0ZSB9ICB9XG4gICAgICAgIEBrZXlmcmFtZXMgaW5kZXRlcm1pbmF0ZSB7IGZyb20geyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IDEwMCUgfSB0byB7IGJhY2tncm91bmQtcG9zaXRpb24teDogMCB9IH1gXG4gICAgICApXG4gICAgKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoU0tJUF9BVFRSX0NIQU5HRSkgcmV0dXJuO1xuICAgIFNLSVBfQVRUUl9DSEFOR0UgPSB0cnVlO1xuICAgIGNvbnN0IHJvbGVJbWFnZSA9IElTX0lPUyB8fCBJU19GSVJFRk9YO1xuICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKHRoaXMucG9zaXRpb24gKiAxMDApKTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wZXJjZW50YWdlXCIsIGAke3BlcmNlbnRhZ2V9JWApO1xuICAgIGxldCBsYWJlbCA9IGdldExhYmVsKHRoaXMpO1xuICAgIGlmIChyb2xlSW1hZ2UpIGxhYmVsID0gYCR7bGFiZWwucmVwbGFjZSgvXFxkKyUkLywgXCJcIil9ICR7cGVyY2VudGFnZX0lYDtcbiAgICBpZiAoSVNfRklSRUZPWCkgZm9yIChjb25zdCBlbCBvZiB0aGlzLmxhYmVscykgYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIsIGxhYmVsKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1idXN5XCIsIGAke3RoaXMucG9zaXRpb24gPT09IC0xfWApO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWxhYmVsXCIsIGxhYmVsLnRyaW0oKSk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtbGFiZWxsZWRieVwiLCBudWxsKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW1heFwiLCBcIjEwMFwiKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW1pblwiLCBcIjBcIik7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVub3dcIiwgYCR7cGVyY2VudGFnZX1gKTtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCByb2xlSW1hZ2UgPyBcImltZ1wiIDogXCJwcm9ncmVzc2JhclwiKTtcbiAgICBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG4gIH1cbiAgZ2V0IGxhYmVscygpIHtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuY2xvc2VzdChcImxhYmVsOm5vdChbZm9yXSlcIik7XG4gICAgY29uc3QgaWQyID0gdXNlSWQodGhpcyk7XG4gICAgaWYgKGxhYmVsKSBsYWJlbC5odG1sRm9yID0gaWQyO1xuICAgIGNvbnN0IGVsID0gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYGxhYmVsW2Zvcj1cIiR7aWQyfVwiXWBcbiAgICApO1xuICAgIHJldHVybiBlbDtcbiAgfVxuICBnZXQgcG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUgPT09IG51bGwgPyAtMSA6IE1hdGgubWluKHRoaXMudmFsdWUgLyB0aGlzLm1heCwgMSk7XG4gIH1cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBnZXROdW1iZXIodGhpcywgXCJ2YWx1ZVwiKTtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICBzZXROdW1iZXIodGhpcywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IG1heCgpIHtcbiAgICByZXR1cm4gZ2V0TnVtYmVyKHRoaXMsIFwibWF4XCIpIHx8IDE7XG4gIH1cbiAgc2V0IG1heChtYXgpIHtcbiAgICBzZXROdW1iZXIodGhpcywgXCJtYXhcIiwgbWF4KTtcbiAgfVxufTtcbi8vIFByZXZlbnQgQ2hyb21lIERldlRvb2xzIHdhcm5pbmcgYWJvdXQgPGxhYmVsIGZvcj1cIlwiPiBwb2ludGluZyB0byA8dS1wcm9ncmVzcz5cblVIVE1MUHJvZ3Jlc3NFbGVtZW50LmZvcm1Bc3NvY2lhdGVkID0gdHJ1ZTtcbnZhciBpc051bWVyaWMgPSAodmFsdWUpID0+ICFOdW1iZXIuaXNOYU4oTnVtYmVyLnBhcnNlRmxvYXQoYCR7dmFsdWV9YCkpICYmIE51bWJlci5pc0Zpbml0ZShOdW1iZXIodmFsdWUpKTtcbnZhciBnZXROdW1iZXIgPSAoZWwsIGtleSkgPT4ge1xuICBjb25zdCB2YWx1ZSA9IGF0dHIoZWwsIGtleSk7XG4gIHJldHVybiBpc051bWVyaWModmFsdWUpID8gTWF0aC5tYXgoMCwgTnVtYmVyLnBhcnNlRmxvYXQodmFsdWUpKSA6IG51bGw7XG59O1xudmFyIHNldE51bWJlciA9IChlbCwga2V5LCB2YWwpID0+IHtcbiAgaWYgKHZhbCA9PT0gbnVsbCB8fCBpc051bWVyaWModmFsKSkgYXR0cihlbCwga2V5LCBgJHt2YWx9YCk7XG4gIGVsc2UgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2V0IG5vbi1udW1lcmljICcke2F0dHJ9JzogJyR7dmFsfSdgKTtcbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXByb2dyZXNzXCIsIFVIVE1MUHJvZ3Jlc3NFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxQcm9ncmVzc0VsZW1lbnQgfTtcbiJdLCJuYW1lcyI6WyJJU19CUk9XU0VSIiwiSVNfQU5EUk9JRCIsIl9hIiwiSVNfQlJPV1NFUiQ1IiwiU0FGRV9MQUJFTExFREJZIiwiRElTUExBWV9CTE9DSyIsIlVIVE1MRWxlbWVudCIsImF0dHIiLCJlbCIsIm5hbWUiLCJ2YWx1ZSIsIl9hMiIsImV2ZW50cyIsImFjdGlvbiIsImVsZW1lbnQiLCJyZXN0IiwidHlwZSIsIm9uIiwib2ZmIiwiYXR0YWNoU3R5bGUiLCJjc3MiLCJjcmVhdGVFbGVtZW50Iiwib2JzZXJ2ZXJzIiwibXV0YXRpb25PYnNlcnZlciIsIm9wdGlvbnMiLCJvYnNlcnZlciIsImRldGFpbCIsImFzQnV0dG9uIiwiZXZlbnQiLCJpc0NsaWNrIiwiZ2V0Um9vdCIsIm5vZGUiLCJyb290IiwiaWQiLCJ1c2VJZCIsInRhZ05hbWUiLCJ0ZXh0IiwiYXR0cnMiLCJjdXN0b21FbGVtZW50cyIsImluc3RhbmNlIiwiQVJJQV9DT05UUk9MUyIsIkFSSUFfU0VMRUNURUQiLCJVSFRNTFRhYnNFbGVtZW50IiwicXVlcnlXaXRob3V0TmVzdGVkIiwiZ2V0U2VsZWN0ZWRJbmRleCIsImluZGV4Iiwic2V0U2VsZWN0ZWQiLCJVSFRNTFRhYkxpc3RFbGVtZW50IiwidGFiIiwia2V5IiwidGFicyIsInByZXYiLCJuZXh0IiwiU0tJUF9BVFRSX0NIQU5HRSIsIlVIVE1MVGFiRWxlbWVudCIsInBhbmVscyIsIm5leHRQYW5lbCIsImdldFBhbmVsIiwicGFuZWwiLCJ0YWJsaXN0IiwidGFiTGlzdCIsIlVIVE1MVGFiUGFuZWxFbGVtZW50IiwiaXNGb2N1c2FibGUiLCJ0YWciLCJzZWxmIiwiaWQyIiwiX19kZWZQcm9wIiwiX19nZXRPd25Qcm9wU3ltYm9scyIsIl9faGFzT3duUHJvcCIsIl9fcHJvcElzRW51bSIsIl9fZGVmTm9ybWFsUHJvcCIsIm9iaiIsIl9fc3ByZWFkVmFsdWVzIiwiYSIsImIiLCJwcm9wIiwiSVNfRklSRUZPWCIsIklTX0lPUyIsIklTX0JST1dTRVIkNCIsIkZPQ1VTX09VVExJTkUiLCJ0ZXh0MiIsInZhbCIsImNyZWF0ZUFyaWFMaXZlIiwibW9kZSIsImxpdmUiLCJzZXRWYWx1ZSIsImlucHV0IiwiZGF0YSIsIl9iIiwicHJvdG8iLCJMSVZFIiwiTElWRV9TUl9GSVgiLCJJU19QUkVTUyIsIkVWRU5UUyIsIkVWRU5UX09OQ0UiLCJJU19GSVJFRk9YX01BQyIsIklTX01PQklMRSIsIkZBTFNFIiwiQ0xJQ0siLCJURVhUUyIsIlVIVE1MQ29tYm9ib3hFbGVtZW50IiwicmVuZGVyIiwic3luY0lucHV0VmFsdWUiLCJfIiwiZGlzY29ubmVjdENhY2hlIiwidGFyZ2V0Iiwib25CbHVyIiwib25DbGljayIsIm9uRm9jdXMiLCJvbklucHV0Iiwib25LZXlEb3duIiwiaXRlbSIsImNyZWF0ZUl0ZW0iLCJfYyIsIl9mb2N1cyIsIl9zcGVhayIsIl90ZXh0cyIsIml0ZW1zIiwiY29udHJvbCIsImxpc3QiLCJtdWx0aXBsZSIsImFkZGVkTm9kZXMiLCJyZW1vdmVkTm9kZXMiLCJlZGl0IiwidG90YWwiLCJ2YWx1ZXMiLCJfYTMiLCJfYjIiLCJrZWVwIiwibGFiZWwyIiwiYXJpYSIsIm9wdCIsImxhYmVsIiwic2VsZWN0Iiwid2l0aEV2ZW50IiwiZGlzcGF0Y2hNYXRjaCIsImNyZWF0YWJsZSIsInF1ZXJ5IiwibWF0Y2giLCJvIiwiZGlzcGF0Y2hDaGFuZ2UiLCJyZW1vdmVhYmxlIiwiYWRkIiwicmVtb3ZlIiwiaSIsIm9uQmx1cnJlZCIsIngiLCJ5IiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwicmVwZWF0IiwiaXNDb250cm9sIiwiaW5UZXh0IiwiZm9ybSIsImdldFN0ZXBzIiwibm93IiwibWF4Iiwic2hvdyIsIm9mZnNldCIsInN0YXJ0IiwiZW5kIiwicGFnZXMiLCJwYWdpbmF0aW9uIiwiY3VycmVudCIsInBhZ2UiLCJRVUlDS19FVkVOVCIsImRlYm91bmNlIiwiY2FsbGJhY2siLCJkZWxheSIsInRpbWVyIiwiYXJncyIsIlVVSUQiLCJTQ1JPTExFUiIsIlRBUkdFVFMiLCJUQVJHRVRTX1VQREFURSIsInVwZGF0ZSIsIlBPU0lUSU9OIiwiYW5jaG9yUG9zaXRpb24iLCJhbmNob3IiLCJwb3NpdGlvbiIsInBsYWNlIiwiaXNIVE1MQW5jaG9yIiwidGFyZ2V0VyIsInRhcmdldEgiLCJhbmNob3JXIiwiYW5jaG9ySCIsIndpZHRoIiwiaGVpZ2h0IiwiYW5jaG9yWCIsImFuY2hvclkiLCJoYXNTcGFjZUxlZnQiLCJoYXNTcGFjZVJpZ2h0IiwiaGFzU3BhY2VPdmVyIiwiaGFzU3BhY2VVbmRlciIsInBvc2l0aW9uUmlnaHQiLCJwb3NpdGlvblVuZGVyIiwiY2VudGVyWCIsImNlbnRlclkiLCJpc1ZlcnRpY2FsIiwiY3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlciIsInF1ZXVlIiwib25GcmFtZSIsIm9uVGltZXIiLCJNVVRBVE9SUyIsIm9uTXV0YXRpb24iLCJjbGFzc05hbWUiLCJlbGVtcyIsIm11dGF0b3IiLCJvbkxvYWRlZCIsInJ1biIsImlzSW5wdXRMaWtlIiwic2hlZXQiLCJmb3JjZSIsIkNTU19BUFAiLCJzdHlsZXMiLCJDU1NfU1RJQ0tZIiwiQ1NTX1RPR0dMRSIsIkNTU19TSURFQkFSIiwidXNlVHJhbnNpdGlvbiIsInRvZ2dsZUFwcEV4cGFuZGVkIiwiaGFuZGxlVG9nZ2xlQ2xpY2siLCJzaWRlYmFyIiwiaGFuZGxlUmVzaXplIiwiTUlOX1kiLCJTQ1JPTExfVVAiLCJTVElDSyIsIlNUSUNLX0VMIiwiU1RJQ0tfSCIsIlNUSUNLX1kiLCJTVFVDSyIsIldJTl9IIiwiV0lOX1kiLCJoYW5kbGVNdXRhdGlvbiIsInN0aWNreSIsImhhbmRsZVNjcm9sbCIsIk5FWFRfWSIsIk5FWFRfVVAiLCJDU1NfQlJFQURDUlVNQlMiLCJicmVhZGNydW1icyIsImJyZWFkY3VtYnMiLCJjcnVtYiIsImxlbmd0aCIsIkNTU19ESUFMT0ciLCJESUFMT0dTIiwiaGFuZGxlTW9kYWwiLCJkaWFsb2ciLCJoYW5kbGVDbGljayIsImhhbmRsZUluamVjdCIsImZpcnN0IiwiSVNfQlJPV1NFUiQyIiwiRElTQUJMRUQiLCJTRUxFQ1RFRCIsIlVIVE1MT3B0aW9uRWxlbWVudCIsIkxJVkVfVElNRVIiLCJJTlBVVF9ERUJPVU5DRSIsIkVWRU5UU19JTlBVVCIsIlVIVE1MRGF0YUxpc3RFbGVtZW50IiwiZGlzY29ubmVjdElucHV0IiwiX3ByZXYiLCJzZXR1cElucHV0Iiwic2V0RXhwYW5kZWQiLCJvcGVuIiwiaXNJbnB1dCIsInJlbGF0ZWRUYXJnZXQiLCJ2aWV3IiwiaXNWaXNpYmxlIiwib3B0aW9uIiwiZmlsdGVyIiwidmlzaWJsZSIsImhpZGRlbiIsImhpdHNUZXh0IiwibGl2ZVRleHQiLCJpZHgiLCJDU1NfRklFTEQiLCJDU1NfUFJPUEVSVFlfT1ZFUiIsIkNTU19QUk9QRVJUWV9VTkRFUiIsIkNTU19WQUxJREFUSU9OUyIsIkNTU19WQUxJREFUSU9OIiwiZmllbGRzIiwiZmllbGQiLCJsYWJlbHMiLCJkZXNjcyIsImNvbWJvYm94IiwidmFsaWQiLCJkZXNjIiwicmVuZGVyQ29tYm9ib3giLCJyZW5kZXJDb3VudGVyIiwicmVuZGVyVGV4dGFyZWFTaXplIiwidGV4dGFyZWEiLCJzdHlsZSIsImkxMW4iLCJsaW1pdCIsInJlbWFpbmRlciIsIm5leHRJbnZhbGlkIiwicHJldkludmFsaWQiLCJvdmVyIiwidW5kZXIiLCJoYW5kbGVUb2dnbGUiLCJuZXdTdGF0ZSIsImhhbmRsZUlucHV0IiwiaGFuZGxlSW52YWxpZCIsIkNTU19GSUVMRFNFVCIsImZpZWxkc2V0cyIsImZpZWxkc2V0IiwiaW5wdXRzIiwidmFsaWRhdGlvbklkIiwiQ1NTX0xPR08iLCJsb2dvIiwiaWNvbiIsInN2ZyIsImlzRG90IiwiYmFjayIsIkNTU19QT1BPVkVSIiwiT1BFTl9QT1BPVkVSUyIsImhhbmRsZUxpbmtDbGljayIsImNsb3NlIiwicG9wb3ZlciIsIkNTU19UQUJMRSIsInRhYmxlcyIsInRhYmxlIiwidGhzIiwiZ3JvdXAiLCJpc1Rib2R5Iiwicm93IiwiY2VsbCIsIkNTU19UT0dHTEVHUk9VUCIsImhhbmRsZUtleURvd24iLCJtb3ZlIiwiREVTQ1JJQkVEQlkiLCJFU0MiLCJMQUJFTExFREJZIiwiUE9TSVRJT05fQ1NTX1BST1BFUlRZIiwiVEhST1RUTEVfREVMQVkiLCJUT09MVElQIiwiQU5DSE9SIiwiTEFTVF9DQUxMIiwiVEhST1RUTEUiLCJoYW5kbGVNb3ZlIiwid2FpdCIsImhhbmRsZU1vdmVUaHJvdHRsZWQiLCJjb250ZW50IiwiaGFkTGFiZWwiLCJoYXNMYWJlbCIsIklTX0JST1dTRVIkMSIsIlVIVE1MRGV0YWlsc0VsZW1lbnQiLCJoaWRlIiwidURldGFpbHNMaXN0IiwidURldGFpbHMiLCJzdW1tYXJ5IiwiaXNTdW1tYXJ5IiwiVUhUTUxTdW1tYXJ5RWxlbWVudCIsImdldExhYmVsIiwiYWNjIiwiZWwyIiwiVUhUTUxQcm9ncmVzc0VsZW1lbnQiLCJyb2xlSW1hZ2UiLCJwZXJjZW50YWdlIiwiZ2V0TnVtYmVyIiwic2V0TnVtYmVyIiwiaXNOdW1lcmljIl0sIm1hcHBpbmdzIjoia0NBQ0EsSUFBSUEsR0FBYSxPQUFPLE9BQVcsS0FBZSxPQUFPLE9BQU8sU0FBYSxLQUFlLE9BQU8sT0FBTyxVQUFjLElBQ3BIQyxHQUFhRCxJQUFjLFdBQVcsS0FBSyxVQUFVLFNBQVMsRUFDOURFLEdBQ01DLElBQ1YsUUFBUSxPQUFPRCxHQUFLLFVBQVUsZ0JBQWtCLEtBQU8sT0FBU0EsR0FBRyxXQUFhLFVBQVUsUUFBUSxFQUNsRyxJQUFJRSxHQUFrQixHQUFHSCxHQUFhLE9BQVMsTUFBTSxjQUNqREksR0FBZ0IsMkNBQ2hCQyxFQUFlLE9BQU8sWUFBZ0IsSUFBYyxLQUFNLENBQzlELEVBQUksWUFDSixTQUFTQyxFQUFLQyxFQUFJQyxFQUFNQyxFQUFPLENBQzdCLElBQUlDLEVBQ0osT0FBSUQsSUFBVSxRQUFnQkMsRUFBTUgsRUFBRyxhQUFhQyxDQUFJLElBQU0sS0FBT0UsRUFBTSxNQUN2RUQsSUFBVSxLQUFNRixFQUFHLGdCQUFnQkMsQ0FBSSxFQUNsQ0QsRUFBRyxhQUFhQyxDQUFJLElBQU1DLEdBQU9GLEVBQUcsYUFBYUMsRUFBTUMsQ0FBSyxFQUM5RCxLQUNULENBQ0EsSUFBSUUsR0FBUyxDQUFDQyxFQUFRQyxFQUFTQyxJQUFTLENBQ3RDLFVBQVdDLEtBQVFELEVBQUssQ0FB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
19
+ @keyframes indeterminate { from { background-position-x: 100% } to { background-position-x: 0 } }`))}connectedCallback(){this.attributeChangedCallback()}attributeChangedCallback(){if(Kt)return;Kt=!0;const t=ji||Yn,e=Math.max(0,Math.round(this.position*100));this.style.setProperty("--percentage",`${e}%`);let n=Ji(this);if(t&&(n=`${n.replace(/\d+%$/,"")} ${e}%`),Yn)for(const o of this.labels)E(o,"aria-label",n);E(this,"aria-busy",`${this.position===-1}`),E(this,"aria-label",n.trim()),E(this,"aria-labelledby",null),E(this,"aria-valuemax","100"),E(this,"aria-valuemin","0"),E(this,"aria-valuenow",`${e}`),E(this,"role",t?"img":"progressbar"),Kt=!1}get labels(){const t=this.closest("label:not([for])"),e=zi(this);return t&&(t.htmlFor=e),Kn(this).querySelectorAll(`label[for="${e}"]`)}get position(){return this.value===null?-1:Math.min(this.value/this.max,1)}get value(){return zn(this,"value")}set value(t){Qn(this,"value",t)}get max(){return zn(this,"max")||1}set max(t){Qn(this,"max",t)}};Gn.formAssociated=!0;var Xn=t=>!Number.isNaN(Number.parseFloat(`${t}`))&&Number.isFinite(Number(t)),zn=(t,e)=>{const n=E(t,e);return Xn(n)?Math.max(0,Number.parseFloat(n)):null},Qn=(t,e,n)=>{if(n===null||Xn(n))E(t,e,`${n}`);else throw new Error(`Failed to set non-numeric '${E}': '${n}'`)};return Qi.define("u-progress",Gn),S.UHTMLComboboxElement=xt,S.UHTMLTabElement=oe,S.UHTMLTabListElement=ne,S.UHTMLTabPanelElement=ie,S.UHTMLTabsElement=ee,S.pagination=Do,S.styles=No,S.toggleAppExpanded=cn,S.version=Oo,Object.defineProperty(S,Symbol.toStringTag,{value:"Module"}),S}({});
20
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWNvbWJvYm94L2Rpc3QvdS1jb21ib2JveC5qcyIsIi4uL2Rlc2lnbnN5c3RlbS9wYWdpbmF0aW9uL3BhZ2luYXRpb24taGVscGVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3V0aWxzLnRzIiwiLi4vZGVzaWduc3lzdGVtL2FwcC9hcHAtdG9nZ2xlLmpzIiwiLi4vZGVzaWduc3lzdGVtL2FwcC9hcHAtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYnJlYWRjcnVtYnMvYnJlYWRjcnVtYnMtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZGlhbG9nL2RpYWxvZy1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9lcnJvcnN1bW1hcnkvZXJyb3JzdW1tYXJ5LW9ic2VydmVyLnRzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtZGF0YWxpc3QvZGlzdC91LWRhdGFsaXN0LmpzIiwiLi4vZGVzaWduc3lzdGVtL2ZpZWxkL2ZpZWxkLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2ZpZWxkc2V0L2ZpZWxkc2V0LW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2xvZ28vbG9nby1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9wb3BvdmVyL3BvcG92ZXItb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vdGFibGUvdGFibGUtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vdG9nZ2xlZ3JvdXAvdG9nZ2xlZ3JvdXAtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vdG9vbHRpcC90b29sdGlwLW9ic2VydmVyLnRzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtZGV0YWlscy9kaXN0L3UtZGV0YWlscy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LXByb2dyZXNzL2Rpc3QvdS1wcm9ncmVzcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfQU5EUk9JRCA9IElTX0JST1dTRVIgJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBTQUZFX0xBQkVMTEVEQlkgPSBgJHtJU19BTkRST0lEID8gXCJkYXRhXCIgOiBcImFyaWFcIn0tbGFiZWxsZWRieWA7XG52YXIgRElTUExBWV9CTE9DSyA9IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2sgfVwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBfYTI7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gKF9hMiA9IGVsLmdldEF0dHJpYnV0ZShuYW1lKSkgIT0gbnVsbCA/IF9hMiA6IG51bGw7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXR0YWNoU3R5bGUgPSAoZWxlbWVudCwgY3NzKSA9PiBlbGVtZW50LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gIC8vIFVubmFtZWQgc2xvdCBkb2VzIGF1dG9tYXRpY2FsbHkgcmVuZGVyIGFsbCB0b3AgZWxlbWVudCBub2Rlc1xuICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgY3NzKVxuKTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gIH1cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgKGRldGFpbCkgPT4gZWxlbWVudC5oYW5kbGVFdmVudCh7IHR5cGU6IFwibXV0YXRpb25cIiwgZGV0YWlsIH0pXG4gICAgKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIG9ic2VydmVycy5zZXQoZWxlbWVudCwgb2JzZXJ2ZXIpO1xuICB9XG59O1xudmFyIGFzQnV0dG9uID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGlzQ2xpY2sgPSBcImtleVwiIGluIGV2ZW50ICYmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKTtcbiAgaWYgKGlzQ2xpY2spIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGlmIChpc0NsaWNrICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBldmVudC50YXJnZXQuY2xpY2soKTtcbiAgcmV0dXJuIGlzQ2xpY2s7XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcblxuLy8gdS10YWJzLnRzXG52YXIgQVJJQV9DT05UUk9MUyA9IFwiYXJpYS1jb250cm9sc1wiO1xudmFyIEFSSUFfU0VMRUNURUQgPSBcImFyaWEtc2VsZWN0ZWRcIjtcbnZhciBVSFRNTFRhYnNFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGdldCB0YWJMaXN0KCkge1xuICAgIHJldHVybiBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYmxpc3RcIiwgdGhpcylbMF0gfHwgbnVsbDtcbiAgfVxuICBnZXQgc2VsZWN0ZWRJbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpO1xuICB9XG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4KSB7XG4gICAgc2V0U2VsZWN0ZWQodGhpcy50YWJzW2luZGV4XSk7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFiXCIsIHRoaXMpO1xuICB9XG4gIGdldCBwYW5lbHMoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFicGFuZWxcIiwgdGhpcyk7XG4gIH1cbn07XG52YXIgVUhUTUxUYWJMaXN0RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBESVNQTEFZX0JMT0NLKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcInRhYmxpc3RcIik7XG4gICAgb24odGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgeyBjaGlsZExpc3Q6IHRydWUgfSk7XG4gICAgaWYgKHRoaXMudGFicy5sZW5ndGgpIHRoaXMuaGFuZGxlRXZlbnQoKTtcbiAgfVxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBvZmYodGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgaWYgKCFldmVudCB8fCBldmVudC50eXBlID09PSBcIm11dGF0aW9uXCIpIHtcbiAgICAgIGNvbnN0IHRhYiA9IHRoaXMudGFic1tNYXRoLm1heCh0aGlzLnNlbGVjdGVkSW5kZXgsIDApXTtcbiAgICAgIHJldHVybiB0YWIgPT0gbnVsbCA/IHZvaWQgMCA6IHRhYi5zZXRBdHRyaWJ1dGUoQVJJQV9TRUxFQ1RFRCwgXCJ0cnVlXCIpO1xuICAgIH1cbiAgICBjb25zdCB7IGtleSB9ID0gZXZlbnQ7XG4gICAgY29uc3QgdGFicyA9IFsuLi50aGlzLnRhYnNdO1xuICAgIGNvbnN0IHByZXYgPSB0YWJzLmZpbmRJbmRleCgodGFiKSA9PiB0YWIuY29udGFpbnMoZXZlbnQudGFyZ2V0KSk7XG4gICAgbGV0IG5leHQgPSBwcmV2O1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkIHx8IHByZXYgPT09IC0xKSByZXR1cm47XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikgc2V0U2VsZWN0ZWQodGFic1twcmV2XSk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwia2V5ZG93blwiICYmICFhc0J1dHRvbihldmVudCkpIHtcbiAgICAgIGlmIChrZXkgPT09IFwiQXJyb3dEb3duXCIgfHwga2V5ID09PSBcIkFycm93UmlnaHRcIilcbiAgICAgICAgbmV4dCA9IChwcmV2ICsgMSkgJSB0YWJzLmxlbmd0aDtcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJBcnJvd1VwXCIgfHwga2V5ID09PSBcIkFycm93TGVmdFwiKVxuICAgICAgICBuZXh0ID0gKHByZXYgfHwgdGFicy5sZW5ndGgpIC0gMTtcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJFbmRcIikgbmV4dCA9IHRhYnMubGVuZ3RoIC0gMTtcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJIb21lXCIpIG5leHQgPSAwO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIlRhYlwiKSBuZXh0ID0gZ2V0U2VsZWN0ZWRJbmRleCh0YWJzKTtcbiAgICAgIGVsc2UgcmV0dXJuO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRhYnNbcHJldl0udGFiSW5kZXggPSAtMTtcbiAgICAgICAgdGFic1tuZXh0XS50YWJJbmRleCA9IDA7XG4gICAgICB9KTtcbiAgICAgIGlmIChrZXkgIT09IFwiVGFiXCIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGFic1tuZXh0XS5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXQgdGFic0VsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdChcInUtdGFic1wiKTtcbiAgfVxuICBnZXQgdGFicygpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKFwidS10YWJcIik7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldFNlbGVjdGVkSW5kZXgodGhpcy50YWJzKTtcbiAgfVxuICBzZXQgc2VsZWN0ZWRJbmRleChpbmRleCkge1xuICAgIHNldFNlbGVjdGVkKHRoaXMudGFic1tpbmRleF0pO1xuICB9XG59O1xudmFyIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbnZhciBVSFRNTFRhYkVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJpZFwiLCBBUklBX1NFTEVDVEVELCBBUklBX0NPTlRST0xTXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKFxuICAgICAgdGhpcyxcbiAgICAgIFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgfVwiXG4gICAgKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcInRhYlwiKTtcbiAgICB0aGlzLnRhYkluZGV4ID0gdGhpcy5zZWxlY3RlZCA/IDAgOiAtMTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgaWYgKCFTS0lQX0FUVFJfQ0hBTkdFICYmIHRoaXMuc2VsZWN0ZWQgJiYgdGhpcy50YWJMaXN0KSB7XG4gICAgICBTS0lQX0FUVFJfQ0hBTkdFID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHRhYnMgPSBbLi4udGhpcy50YWJMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKV07XG4gICAgICBjb25zdCBwYW5lbHMgPSBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYnBhbmVsXCIsIHRoaXMudGFic0VsZW1lbnQgfHwgdGhpcyk7XG4gICAgICBjb25zdCBuZXh0UGFuZWwgPSBnZXRQYW5lbCh0aGlzLCBwYW5lbHNbdGFicy5pbmRleE9mKHRoaXMpXSk7XG4gICAgICBpZiAobmV4dFBhbmVsKSBhdHRyKG5leHRQYW5lbCwgU0FGRV9MQUJFTExFREJZLCB1c2VJZCh0aGlzKSk7XG4gICAgICB0YWJzLmZvckVhY2goKHRhYiwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSBnZXRQYW5lbCh0YWIsIHBhbmVsc1tpbmRleF0pO1xuICAgICAgICB0YWIudGFiSW5kZXggPSB0YWIgPT09IHRoaXMgPyAwIDogLTE7XG4gICAgICAgIGF0dHIodGFiLCBBUklBX1NFTEVDVEVELCBgJHt0YWIgPT09IHRoaXN9YCk7XG4gICAgICAgIGlmIChwYW5lbCkgcGFuZWwuaGlkZGVuID0gcGFuZWwgIT09IG5leHRQYW5lbDtcbiAgICAgICAgaWYgKHBhbmVsKSBhdHRyKHRhYiwgQVJJQV9DT05UUk9MUywgcGFuZWwuaWQpO1xuICAgICAgfSk7XG4gICAgICBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJMaXN0KCkge1xuICAgIGNvbnN0IHRhYmxpc3QgPSB0aGlzLnBhcmVudEVsZW1lbnQ7XG4gICAgcmV0dXJuICh0YWJsaXN0ID09IG51bGwgPyB2b2lkIDAgOiB0YWJsaXN0Lm5vZGVOYW1lKSA9PT0gXCJVLVRBQkxJU1RcIiA/IHRhYmxpc3QgOiBudWxsO1xuICB9XG4gIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBBUklBX1NFTEVDVEVEKSA9PT0gXCJ0cnVlXCI7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBBUklBX1NFTEVDVEVELCBgJHshIXZhbHVlfWApO1xuICB9XG4gIC8qKiBSZXRyaWV2ZXMgdGhlIG9yZGluYWwgcG9zaXRpb24gb2YgYW4gdGFiIGluIGEgdGFibGlzdC4gKi9cbiAgZ2V0IGluZGV4KCkge1xuICAgIGNvbnN0IHRhYkxpc3QgPSB0aGlzLnRhYkxpc3Q7XG4gICAgcmV0dXJuIHRhYkxpc3QgPyBbLi4udGFiTGlzdC5xdWVyeVNlbGVjdG9yQWxsKFwidS10YWJcIildLmluZGV4T2YodGhpcykgOiAwO1xuICB9XG4gIGdldCBwYW5lbCgpIHtcbiAgICByZXR1cm4gZ2V0UGFuZWwodGhpcyk7XG4gIH1cbn07XG52YXIgVUhUTUxUYWJQYW5lbEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJoaWRkZW5cIl07XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBESVNQTEFZX0JMT0NLKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcInRhYnBhbmVsXCIpO1xuICAgIHRoaXMuaGlkZGVuID0gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpID09PSAtMTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAodGhpcy5oaWRkZW4gfHwgaXNGb2N1c2FibGUodGhpcy5maXJzdENoaWxkKSlcbiAgICAgIGF0dHIodGhpcywgXCJ0YWJpbmRleFwiLCBudWxsKTtcbiAgICBlbHNlIHRoaXMudGFiSW5kZXggPSAwO1xuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJzKCkge1xuICAgIGNvbnN0IGNzcyA9IGB1LXRhYlske0FSSUFfQ09OVFJPTFN9PVwiJHt0aGlzLmlkfVwiXWA7XG4gICAgcmV0dXJuIGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChjc3MpO1xuICB9XG59O1xudmFyIHF1ZXJ5V2l0aG91dE5lc3RlZCA9ICh0YWcsIHNlbGYpID0+IHNlbGYucXVlcnlTZWxlY3RvckFsbChgJHt0YWd9Om5vdCg6c2NvcGUgdS10YWJwYW5lbCAke3RhZ30pYCk7XG52YXIgZ2V0UGFuZWwgPSAodGFiLCBwYW5lbCkgPT4ge1xuICBjb25zdCBpZDIgPSBhdHRyKHRhYiwgQVJJQV9DT05UUk9MUykgfHwgdXNlSWQocGFuZWwpO1xuICBjb25zdCBlbCA9IGdldFJvb3QodGFiKS5nZXRFbGVtZW50QnlJZChpZDIpO1xuICByZXR1cm4gKGVsID09IG51bGwgPyB2b2lkIDAgOiBlbC5ub2RlTmFtZSkgPT09IFwiVS1UQUJQQU5FTFwiID8gZWwgOiBudWxsO1xufTtcbnZhciBnZXRTZWxlY3RlZEluZGV4ID0gKHRhYnMpID0+IFsuLi50YWJzXS5maW5kSW5kZXgoKHRhYikgPT4gYXR0cih0YWIsIEFSSUFfU0VMRUNURUQpID09PSBcInRydWVcIik7XG52YXIgc2V0U2VsZWN0ZWQgPSAodGFiKSA9PiB0YWIgJiYgYXR0cih0YWIsIFwiYXJpYS1zZWxlY3RlZFwiLCBcInRydWVcIik7XG52YXIgaXNGb2N1c2FibGUgPSAoZWwpID0+IGVsIGluc3RhbmNlb2YgRWxlbWVudCAmJiAhZWwubWF0Y2hlcygnOmRpc2FibGVkLFt0YWJpbmRleF49XCItXCJdJykgJiYgZWwubWF0Y2hlcyhcbiAgYFtjb250ZW50ZWRpdGFibGVdLFtjb250cm9sc10sW2hyZWZdLFt0YWJpbmRleF0saW5wdXQ6bm90KFt0eXBlPVwiaGlkZGVuXCJdKSxzZWxlY3QsdGV4dGFyZWEsYnV0dG9uLHN1bW1hcnksaWZyYW1lYFxuKTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtdGFic1wiLCBVSFRNTFRhYnNFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtdGFibGlzdFwiLCBVSFRNTFRhYkxpc3RFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtdGFiXCIsIFVIVE1MVGFiRWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYnBhbmVsXCIsIFVIVE1MVGFiUGFuZWxFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxUYWJFbGVtZW50LCBVSFRNTFRhYkxpc3RFbGVtZW50LCBVSFRNTFRhYlBhbmVsRWxlbWVudCwgVUhUTUxUYWJzRWxlbWVudCB9O1xuIiwidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuXG4vLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfQU5EUk9JRCA9IElTX0JST1dTRVIgJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0ZJUkVGT1ggPSBJU19CUk9XU0VSICYmIC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBGT0NVU19PVVRMSU5FID0gXCJvdXRsaW5lOiAxcHggZG90dGVkOyBvdXRsaW5lOiA1cHggYXV0byBIaWdobGlnaHQ7IG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvclwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0MiwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dDIpIGVsLnRleHRDb250ZW50ID0gdGV4dDI7XG4gIGlmIChhdHRycykgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJzKSkgYXR0cihlbCwga2V5LCB2YWwpO1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcbnZhciBjcmVhdGVBcmlhTGl2ZSA9IChtb2RlKSA9PiB7XG4gIGNvbnN0IGxpdmUgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBsaXZlLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwXCI7XG4gIGF0dHIobGl2ZSwgXCJhcmlhLWxpdmVcIiwgbW9kZSk7XG4gIHJldHVybiBsaXZlO1xufTtcbnZhciBzZXRWYWx1ZSA9IChpbnB1dCwgZGF0YSwgdHlwZSA9IFwiXCIpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSwgZGF0YSwgaW5wdXRUeXBlOiB0eXBlIH07XG4gIGNvbnN0IHByb3RvID0gSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGU7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJiZWZvcmVpbnB1dFwiLCBldmVudCkpO1xuICAoX2IgPSAoX2EyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgXCJ2YWx1ZVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5zZXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKGlucHV0LCBkYXRhKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImlucHV0XCIsIGV2ZW50KSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiY2hhbmdlXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG59O1xuXG4vLyB1LWNvbWJvYm94LnRzXG52YXIgTElWRTtcbnZhciBMSVZFX1NSX0ZJWCA9IDA7XG52YXIgSVNfUFJFU1MgPSBmYWxzZTtcbnZhciBFVkVOVFMgPSBcImJlZm9yZWlucHV0LGJsdXIsZm9jdXMsY2xpY2ssaW5wdXQsa2V5ZG93bixtb3VzZWRvd24sbW91c2V1cFwiO1xudmFyIEVWRU5UX09OQ0UgPSB7IG9uY2U6IHRydWUsIHBhc3NpdmU6IHRydWUgfTtcbnZhciBJU19GSVJFRk9YX01BQyA9IElTX0ZJUkVGT1ggJiYgIUlTX0FORFJPSUQ7XG52YXIgSVNfTU9CSUxFID0gSVNfQU5EUk9JRCB8fCBJU19JT1M7XG52YXIgRkFMU0UgPSBcImZhbHNlXCI7XG52YXIgQ0xJQ0sgPSBcImluc2VydFJlcGxhY2VtZW50VGV4dFwiO1xudmFyIFRFWFRTID0ge1xuICBhZGRlZDogXCJBZGRlZFwiLFxuICBlbXB0eTogXCJObyBzZWxlY3RlZFwiLFxuICBmb3VuZDogXCJOYXZpZ2F0ZSBsZWZ0IHRvIGZpbmQgJWQgc2VsZWN0ZWRcIixcbiAgaW52YWxpZDogXCJJbnZhbGlkIHZhbHVlXCIsXG4gIG9mOiBcIm9mXCIsXG4gIHJlbW92ZTogXCJQcmVzcyB0byByZW1vdmVcIixcbiAgcmVtb3ZlZDogXCJSZW1vdmVkXCJcbn07XG52YXIgVUhUTUxDb21ib2JveEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fc3BlYWsgPSBcIlwiO1xuICAgIHRoaXMuX3RleHRzID0gX19zcHJlYWRWYWx1ZXMoe30sIFRFWFRTKTtcbiAgICB0aGlzLl92YWx1ZSA9IFwiXCI7XG4gICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgICAgIC8vIENvbnRlbnQgc2xvdFxuICAgICAgY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2s7IGN1cnNvcjogcG9pbnRlciB9ICAvKiBNdXN0IGJlIGRpc3BsYXkgYmxvY2sgaW4gU2FmYXJpIHRvIGFsbG93IGZvY3VzIGluc2lkZSAqL1xuXHRcdFx0XHQ6aG9zdCg6bm90KFtkYXRhLW11bHRpcGxlXSkpIDo6c2xvdHRlZChkYXRhKSxcblx0XHRcdFx0Omhvc3QoW2RhdGEtbXVsdGlwbGU9XCJmYWxzZVwiXSkgOjpzbG90dGVkKGRhdGEpIHsgZGlzcGxheTogbm9uZSB9IC8qIEhpZGUgZGF0YSBpZiBub3QgbXVsdGlwbGUgKi9cblx0XHRcdFx0OjpzbG90dGVkKGRhdGEpIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwb2ludGVyLWV2ZW50czogbm9uZSB9XG4gICAgICAgIDo6c2xvdHRlZChkYXRhKTo6YWZ0ZXIgeyBjb250ZW50OiAnXFxcXDAwRDcnOyBjb250ZW50OiAnXFxcXDAwRDcnIC8gJyc7IHBhZGRpbmctaW5saW5lOiAuNWNoOyBwb2ludGVyLWV2ZW50czogYXV0byB9XG4gICAgICAgIDo6c2xvdHRlZChkYXRhOmZvY3VzKSB7ICR7Rk9DVVNfT1VUTElORX0gfWBcbiAgICAgICAgLy8gU2hvdyBmb2N1cyBvdXRsaW5lIGFyb3VuZCA6OmFmdGVyIG9ubHlcbiAgICAgIClcbiAgICApO1xuICB9XG4gIC8vIExvY2FsbHkgc3RvcmUgdmFsdWUgdG8gc3RvcmUgdmFsdWUgYmVmb3JlIGlucHV0LWNsaWNrXG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhURVhUUykubWFwKChrZXkpID0+IGBkYXRhLXNyLSR7a2V5fWApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuX3Jvb3QgPSBnZXRSb290KHRoaXMpO1xuICAgIG9uKHRoaXMsIEVWRU5UUywgdGhpcywgdHJ1ZSk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgICBzZXRUaW1lb3V0KHJlbmRlciwgMCwgdGhpcyk7XG4gICAgc2V0VGltZW91dChzeW5jSW5wdXRWYWx1ZSwgMCwgdGhpcyk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIF8sIHZhbCkge1xuICAgIGNvbnN0IHRleHQyID0gcHJvcC5zcGxpdChcImRhdGEtc3ItXCIpWzFdO1xuICAgIGlmIChURVhUU1t0ZXh0Ml0pIHRoaXMuX3RleHRzW3RleHQyXSA9IHZhbCB8fCBURVhUU1t0ZXh0Ml07XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgZGlzY29ubmVjdENhY2hlKHRoaXMpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICAgIG9mZih0aGlzLCBFVkVOVFMsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuX3Jvb3QgPSB2b2lkIDA7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmVmb3JlaW5wdXRcIikgdGhpcy5fdmFsdWUgPSAodGFyZ2V0ID09IG51bGwgPyB2b2lkIDAgOiB0YXJnZXQudmFsdWUpIHx8IFwiXCI7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmx1clwiKSBvbkJsdXIodGhpcyk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikgb25DbGljayh0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiZm9jdXNcIikgb25Gb2N1cyh0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiaW5wdXRcIikgb25JbnB1dCh0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwia2V5ZG93blwiKSBvbktleURvd24odGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcIm1vdXNlZG93blwiKSBJU19QUkVTUyA9IHRoaXMuY29udGFpbnModGFyZ2V0KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJtb3VzZXVwXCIpIElTX1BSRVNTID0gZmFsc2U7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwibXV0YXRpb25cIikgcmVuZGVyKHRoaXMsIGV2ZW50KTtcbiAgfVxuICBnZXQgbXVsdGlwbGUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKChfYTIgPSBhdHRyKHRoaXMsIFwiZGF0YS1tdWx0aXBsZVwiKSkgIT0gbnVsbCA/IF9hMiA6IEZBTFNFKSAhPT0gRkFMU0U7XG4gIH1cbiAgc2V0IG11bHRpcGxlKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImRhdGEtbXVsdGlwbGVcIiwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgZ2V0IGNyZWF0YWJsZSgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IGF0dHIodGhpcywgXCJkYXRhLWNyZWF0YWJsZVwiKSkgIT0gbnVsbCA/IF9hMiA6IEZBTFNFKSAhPT0gRkFMU0U7XG4gIH1cbiAgc2V0IGNyZWF0YWJsZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJkYXRhLWNyZWF0YWJsZVwiLCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBnZXQgY29udHJvbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29udHJvbCB8fCB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFwiKTtcbiAgfVxuICBnZXQgbGlzdCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbGlzdCB8fCB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJ1LWRhdGFsaXN0LGRhdGFsaXN0XCIpIHx8IG51bGw7XG4gIH1cbiAgZ2V0IGl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9pdGVtcyB8fCB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZGF0YVwiKTtcbiAgfVxuICBnZXQgb3B0aW9ucygpIHtcbiAgICB2YXIgX2EyLCBfYjtcbiAgICBjb25zdCB0YWcgPSBgJHsoKF9hMiA9IHRoaXMubGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5ub2RlTmFtZSkgPT09IFwiVS1EQVRBTElTVFwiID8gXCJ1LVwiIDogXCJcIn1vcHRpb25gO1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zIHx8ICgoX2IgPSB0aGlzLmxpc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYi5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWcpKTtcbiAgfVxuICBnZXQgdmFsdWVzKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5pdGVtc10ubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKTtcbiAgfVxuICBhZGQodmFsdWUpIHtcbiAgICB2YXIgX2EyO1xuICAgIGNvbnN0IGl0ZW0gPSBjcmVhdGVJdGVtKHZhbHVlKTtcbiAgICB0aGlzLnZhbHVlcy5pbmNsdWRlcyhpdGVtLnZhbHVlKSB8fCAvLyBQcmV2ZW50IGR1cGxpY2F0ZXNcbiAgICAoKF9hMiA9IHRoaXMuY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pbnNlcnRBZGphY2VudEVsZW1lbnQoXCJiZWZvcmViZWdpblwiLCBpdGVtKSk7XG4gIH1cbn07XG52YXIgdGV4dCA9IChlbCkgPT4ge1xuICB2YXIgX2EyO1xuICByZXR1cm4gKChfYTIgPSBlbCA9PSBudWxsID8gdm9pZCAwIDogZWwudGV4dENvbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xufTtcbnZhciBjcmVhdGVJdGVtID0gKHZhbHVlKSA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHJldHVybiBjcmVhdGVFbGVtZW50KFwiZGF0YVwiLCB2YWx1ZSwgeyB2YWx1ZSB9KTtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgSFRNTERhdGFFbGVtZW50KSByZXR1cm4gdmFsdWU7XG4gIHJldHVybiBjcmVhdGVFbGVtZW50KFwiZGF0YVwiLCB2YWx1ZS5sYWJlbCB8fCB2YWx1ZS52YWx1ZSwge1xuICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSB8fCB2YWx1ZS5sYWJlbCB8fCBcIlwiXG4gIH0pO1xufTtcbnZhciBkaXNjb25uZWN0Q2FjaGUgPSAoZWwpID0+IHtcbiAgZWwuX2ZvY3VzID0gZWwuX2NvbnRyb2wgPSBlbC5faXRlbXMgPSBlbC5fbGlzdCA9IGVsLl9vcHRpb25zID0gdm9pZCAwO1xufTtcbnZhciByZW5kZXIgPSAoc2VsZiwgZSkgPT4ge1xuICB2YXIgX2EyLCBfYiwgX2M7XG4gIGxldCB7IF9mb2N1cywgX3NwZWFrLCBfdGV4dHMsIGl0ZW1zLCBjb250cm9sLCBsaXN0LCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgeyBhZGRlZE5vZGVzLCByZW1vdmVkTm9kZXMgfSA9IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmRldGFpbFswXSkgfHwge307XG4gIGNvbnN0IGlzTXVsdGlFZGl0ID0gKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZGV0YWlsWzFdKSB8fCAoYWRkZWROb2RlcyA9PSBudWxsID8gdm9pZCAwIDogYWRkZWROb2Rlc1sxXSkgfHwgKGFkZGVkTm9kZXMgPT0gbnVsbCA/IHZvaWQgMCA6IGFkZGVkTm9kZXNbMV0pO1xuICBjb25zdCBlZGl0ID0gaXNNdWx0aUVkaXQgPyBudWxsIDogKGFkZGVkTm9kZXMgPT0gbnVsbCA/IHZvaWQgMCA6IGFkZGVkTm9kZXNbMF0pIHx8IChyZW1vdmVkTm9kZXMgPT0gbnVsbCA/IHZvaWQgMCA6IHJlbW92ZWROb2Rlc1swXSk7XG4gIGNvbnN0IHRvdGFsID0gbXVsdGlwbGUgPyBpdGVtcy5sZW5ndGggOiAxO1xuICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgaWYgKChlZGl0ID09IG51bGwgPyB2b2lkIDAgOiBlZGl0Lm5vZGVOYW1lKSA9PT0gXCJEQVRBXCIgJiYgKG11bHRpcGxlID8gX2ZvY3VzIDogZWRpdCA9PT0gX2ZvY3VzKSkge1xuICAgIF9zcGVhayA9IGAke190ZXh0c1tlZGl0LmlzQ29ubmVjdGVkID8gXCJhZGRlZFwiIDogXCJyZW1vdmVkXCJdfSAke3RleHQoZWRpdCl9LCBgO1xuICAgIGlmIChJU19NT0JJTEUgfHwgX2ZvY3VzID09PSBjb250cm9sKSBMSVZFLnRleHRDb250ZW50ID0gX3NwZWFrO1xuICAgIGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuZm9jdXMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHZhciBfYTMsIF9iMjtcbiAgICAgIChfYjIgPSAoX2EzID0gKF9mb2N1cyA9PSBudWxsID8gdm9pZCAwIDogX2ZvY3VzLm5vZGVOYW1lKSA9PT0gXCJEQVRBXCIgPyBjb250cm9sIDogX2ZvY3VzKSA9PSBudWxsID8gdm9pZCAwIDogX2EzLmZvY3VzKSA9PSBudWxsID8gdm9pZCAwIDogX2IyLmNhbGwoX2EzKTtcbiAgICAgIHNlbGYuX3NwZWFrID0gXCJcIjtcbiAgICAgIGlmIChJU19GSVJFRk9YX01BQykgb24oc2VsZiwgXCJibHVyXCIsICgpID0+IHJlbmRlcihzZWxmKSwgRVZFTlRfT05DRSk7XG4gICAgICBlbHNlIHNldFRpbWVvdXQocmVuZGVyLCAxMDAsIHNlbGYpO1xuICAgIH0sIDEwMCk7XG4gIH1cbiAgY29uc3Qga2VlcCA9IChlZGl0ID09IG51bGwgPyB2b2lkIDAgOiBlZGl0LmlzQ29ubmVjdGVkKSA/IGVkaXQgOiBpdGVtc1swXTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgaWYgKCFtdWx0aXBsZSAmJiBpdGVtICE9PSBrZWVwKSBpdGVtLnJlbW92ZSgpO1xuICAgIGVsc2Uge1xuICAgICAgY29uc3QgbGFiZWwyID0gdGV4dChpdGVtKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS52YWx1ZSB8fCBsYWJlbDI7XG4gICAgICBjb25zdCBhcmlhID0gYCR7X3NwZWFrfSR7bGFiZWwyfSwgJHtfdGV4dHMucmVtb3ZlfSwgJHt2YWx1ZXMucHVzaCh2YWx1ZSl9ICR7X3RleHRzLm9mfSAke3RvdGFsfWA7XG4gICAgICBhdHRyKGl0ZW0sIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgICAgIGF0dHIoaXRlbSwgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gICAgICBhdHRyKGl0ZW0sIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcbiAgICAgIGF0dHIoaXRlbSwgXCJhcmlhLWxhYmVsXCIsIGFyaWEpO1xuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IG9wdCBvZiBzZWxmLm9wdGlvbnMgfHwgW10pIHtcbiAgICBjb25zdCB2YWx1ZSA9IChfYTIgPSBhdHRyKG9wdCwgXCJ2YWx1ZVwiKSkgIT0gbnVsbCA/IF9hMiA6IHRleHQob3B0KTtcbiAgICBhdHRyKG9wdCwgXCJhcmlhLWxhYmVsXCIsIF9zcGVhayA/IGAke19zcGVha30ke3RleHQob3B0KX1gIDogbnVsbCk7XG4gICAgYXR0cihvcHQsIFwic2VsZWN0ZWRcIiwgdmFsdWVzLmluY2x1ZGVzKHZhbHVlKSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBjb25zdCBsYWJlbCA9IGAke19zcGVha30ke3RleHQoKF9iID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5sYWJlbHMpID09IG51bGwgPyB2b2lkIDAgOiBfYlswXSl9LCAke211bHRpcGxlID8gdG90YWwgPyBfdGV4dHMuZm91bmQucmVwbGFjZShcIiVkXCIsIGAke3RvdGFsfWApIDogX3RleHRzLmVtcHR5IDogXCJcIn1gO1xuICBpZiAobGlzdCkgYXR0cihsaXN0LCBcImFyaWEtbXVsdGlzZWxlY3RhYmxlXCIsIGAke211bHRpcGxlfWApO1xuICBpZiAoY29udHJvbCkgYXR0cihjb250cm9sLCBcImxpc3RcIiwgdXNlSWQobGlzdCkpO1xuICBpZiAoY29udHJvbCkgYXR0cihjb250cm9sLCBcImFyaWEtbGFiZWxcIiwgbGFiZWwpO1xuICBpZiAoY29udHJvbCkgc2VsZi5fdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICBjb25zdCBzZWxlY3QgPSBzZWxmLnF1ZXJ5U2VsZWN0b3IoXCJzZWxlY3RcIik7XG4gIGlmIChzZWxlY3QpIHNlbGVjdC5tdWx0aXBsZSA9IG11bHRpcGxlO1xuICBpZiAoc2VsZWN0KSBzZWxlY3QudGV4dENvbnRlbnQgPSBcIlwiO1xuICBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5hcHBlbmQoLi4udmFsdWVzLm1hcCgodmFsdWUpID0+IG5ldyBPcHRpb24oXCJcIiwgdmFsdWUsIHRydWUsIHRydWUpKSk7XG4gIChfYyA9IG11dGF0aW9uT2JzZXJ2ZXIoc2VsZikpID09IG51bGwgPyB2b2lkIDAgOiBfYy50YWtlUmVjb3JkcygpO1xufTtcbnZhciBzeW5jSW5wdXRWYWx1ZSA9IChzZWxmLCB3aXRoRXZlbnQpID0+IHtcbiAgY29uc3QgeyBtdWx0aXBsZSwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGlmIChtdWx0aXBsZSB8fCAhY29udHJvbCB8fCAhaXRlbXNbMF0pIHJldHVybjtcbiAgaWYgKHdpdGhFdmVudCkgcmV0dXJuIHNldFZhbHVlKGNvbnRyb2wsIHRleHQoc2VsZi5pdGVtc1swXSksIFwiaW5zZXJ0VGV4dFwiKTtcbiAgY29udHJvbC52YWx1ZSA9IHRleHQoc2VsZi5pdGVtc1swXSk7XG59O1xudmFyIGRpc3BhdGNoTWF0Y2ggPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IG9wdGlvbnMgPSBbXSwgY3JlYXRhYmxlLCBjb250cm9sLCBpdGVtcywgbXVsdGlwbGUgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gKChfYTIgPSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKSkgfHwgXCJcIjtcbiAgY29uc3QgcXVlcnkgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpIHx8IG51bGw7XG4gIGxldCBtYXRjaCA9IFsuLi5vcHRpb25zXS5maW5kKChvKSA9PiBvLmxhYmVsLnRyaW0oKS50b0xvd2VyQ2FzZSgpID09PSBxdWVyeSk7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IG1hdGNoIH07XG4gIGlmIChzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiYmVmb3JlbWF0Y2hcIiwgZXZlbnQpKSlcbiAgICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKSBvcHQuc2VsZWN0ZWQgPSBvcHQgPT09IG1hdGNoO1xuICBtYXRjaCA9IFsuLi5vcHRpb25zXS5maW5kKChvKSA9PiBvLnNlbGVjdGVkKTtcbiAgaWYgKCFtYXRjaCAmJiBjcmVhdGFibGUgJiYgdmFsdWUpXG4gICAgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGNyZWF0ZUl0ZW0odmFsdWUpKTtcbiAgaWYgKCFtYXRjaCAmJiAhbXVsdGlwbGUgJiYgaXRlbXNbMF0pIHJldHVybiBkaXNwYXRjaENoYW5nZShzZWxmLCBpdGVtc1swXSk7XG4gIGlmICghbWF0Y2ggfHwgc2VsZi52YWx1ZXMuaW5jbHVkZXMobWF0Y2gudmFsdWUpKSByZXR1cm4gcmVuZGVyKHNlbGYpO1xuICBkaXNwYXRjaENoYW5nZShzZWxmLCBtYXRjaCwgZmFsc2UpO1xufTtcbnZhciBkaXNwYXRjaENoYW5nZSA9IChzZWxmLCBpdGVtLCByZW1vdmVhYmxlID0gdHJ1ZSkgPT4ge1xuICBjb25zdCBhZGQgPSBjcmVhdGVJdGVtKGl0ZW0pO1xuICBjb25zdCByZW1vdmUgPSBbLi4uc2VsZi5pdGVtc10uZmluZCgoaSkgPT4gaS52YWx1ZSA9PT0gaXRlbS52YWx1ZSk7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IHJlbW92ZSB8fCBhZGQgfTtcbiAgaWYgKHJlbW92ZSAmJiAhcmVtb3ZlYWJsZSkgcmV0dXJuO1xuICBpZiAoIXNlbGYuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJiZWZvcmVjaGFuZ2VcIiwgZXZlbnQpKSlcbiAgICByZXR1cm4gcmVuZGVyKHNlbGYpO1xuICByZW1vdmUgPyByZW1vdmUucmVtb3ZlKCkgOiBzZWxmLmFkZChhZGQpO1xuICBzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiYWZ0ZXJjaGFuZ2VcIiwgZXZlbnQpKTtcbn07XG52YXIgb25Gb2N1cyA9IChzZWxmLCB7IHRhcmdldCB9KSA9PiB7XG4gIGlmICghTElWRSkgTElWRSA9IGNyZWF0ZUFyaWFMaXZlKFwiYXNzZXJ0aXZlXCIpO1xuICBpZiAoIUxJVkUuaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoTElWRSk7XG4gIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgc2VsZi5fZm9jdXMgPSB0YXJnZXQ7XG4gIGlmICghc2VsZi5faXRlbXMpIHtcbiAgICBzZWxmLl9jb250cm9sID0gc2VsZi5jb250cm9sIHx8IHZvaWQgMDtcbiAgICBzZWxmLl9pdGVtcyA9IHNlbGYuaXRlbXM7XG4gICAgc2VsZi5fbGlzdCA9IHNlbGYubGlzdCB8fCB2b2lkIDA7XG4gICAgc2VsZi5fb3B0aW9ucyA9IHNlbGYub3B0aW9ucyB8fCB2b2lkIDA7XG4gIH1cbn07XG52YXIgb25CbHVyID0gKHNlbGYpID0+IElTX1BSRVNTIHx8IHNldFRpbWVvdXQob25CbHVycmVkLCAwLCBzZWxmKTtcbnZhciBvbkJsdXJyZWQgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoIXNlbGYuX2ZvY3VzIHx8IHNlbGYuY29udGFpbnMoKF9hMiA9IHNlbGYuX3Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuYWN0aXZlRWxlbWVudCkpIHJldHVybjtcbiAgc3luY0lucHV0VmFsdWUoc2VsZiwgdHJ1ZSk7XG4gIGRpc2Nvbm5lY3RDYWNoZShzZWxmKTtcbn07XG52YXIgb25DbGljayA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IGNsaWVudFg6IHgsIGNsaWVudFk6IHksIHRhcmdldCB9ID0gZXZlbnQ7XG4gIGZvciAoY29uc3QgaXRlbSBvZiBzZWxmLml0ZW1zKSB7XG4gICAgY29uc3QgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfSA9IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKGl0ZW0uY29udGFpbnModGFyZ2V0KSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW0pO1xuICAgIGlmICh5ID49IHRvcCAmJiB5IDw9IGJvdHRvbSAmJiB4ID49IGxlZnQgJiYgeCA8PSByaWdodCkgcmV0dXJuIGl0ZW0uZm9jdXMoKTtcbiAgfVxuICBpZiAodGFyZ2V0ID09PSBzZWxmKSAoX2EyID0gc2VsZi5jb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKCk7XG59O1xudmFyIG9uSW5wdXQgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgeyBvcHRpb25zID0gW10sIGNvbnRyb2wsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9ICgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IGlzQ2xpY2sgPSBldmVudCBpbnN0YW5jZW9mIElucHV0RXZlbnQgPyAhZXZlbnQuaW5wdXRUeXBlIHx8IGV2ZW50LmlucHV0VHlwZSA9PT0gQ0xJQ0sgOiAhIXZhbHVlO1xuICBpZiAoIWlzQ2xpY2spIHJldHVybiBtdWx0aXBsZSB8fCBkaXNwYXRjaE1hdGNoKHNlbGYpO1xuICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgaWYgKGNvbnRyb2wpIGNvbnRyb2wudmFsdWUgPSBzZWxmLl92YWx1ZTtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucylcbiAgICBpZiAob3B0LnZhbHVlICYmIG9wdC52YWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIG9wdCwgbXVsdGlwbGUpO1xuICAgICAgcmV0dXJuIHNldFRpbWVvdXQoc3luY0lucHV0VmFsdWUsIDAsIHNlbGYsIHRydWUpO1xuICAgIH1cbn07XG52YXIgb25LZXlEb3duID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LnNoaWZ0S2V5KSByZXR1cm47XG4gIGNvbnN0IHsgX3RleHRzLCBjb250cm9sLCBpdGVtcywgbXVsdGlwbGUgfSA9IHNlbGY7XG4gIGNvbnN0IHsga2V5LCByZXBlYXQsIHRhcmdldCB9ID0gZXZlbnQ7XG4gIGNvbnN0IGlzQ29udHJvbCA9IGNvbnRyb2wgJiYgY29udHJvbCA9PT0gdGFyZ2V0O1xuICBjb25zdCBpblRleHQgPSBpc0NvbnRyb2wgJiYgKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuc2VsZWN0aW9uRW5kKTtcbiAgbGV0IGluZGV4ID0gaXNDb250cm9sID8gaXRlbXMubGVuZ3RoIDogWy4uLml0ZW1zXS5pbmRleE9mKHRhcmdldCk7XG4gIGlmIChpbmRleCA9PT0gLTEgfHwgIWlzQ29udHJvbCAmJiBhc0J1dHRvbihldmVudCkpIHJldHVybjtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd1JpZ2h0XCIgJiYgIWlzQ29udHJvbCkgaW5kZXggKz0gMTtcbiAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93TGVmdFwiICYmICFpblRleHQpIGluZGV4IC09IDE7XG4gIGVsc2UgaWYgKGtleSA9PT0gXCJFbnRlclwiICYmIGlzQ29udHJvbCkge1xuICAgIGNvbnN0IGZvcm0gPSBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiKTtcbiAgICBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiLCBcIiNcIik7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IGF0dHIoY29udHJvbCwgXCJmb3JtXCIsIGZvcm0pKTtcbiAgICBpZiAobXVsdGlwbGUpIGRpc3BhdGNoTWF0Y2goc2VsZik7XG4gICAgZWxzZSBpZiAoIXNlbGYuaXRlbXNbMF0gJiYgTElWRSlcbiAgICAgIExJVkUudGV4dENvbnRlbnQgPSBgJHtfdGV4dHMuaW52YWxpZH0keysrTElWRV9TUl9GSVggJSAyID8gXCJcXHhBMFwiIDogXCJcIn1gO1xuICAgIHJldHVybiBzeW5jSW5wdXRWYWx1ZShzZWxmLCB0cnVlKTtcbiAgfSBlbHNlIGlmICgoa2V5ID09PSBcIkJhY2tzcGFjZVwiIHx8IGtleSA9PT0gXCJEZWxldGVcIikgJiYgIWluVGV4dCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCFyZXBlYXQgJiYgaXRlbXNbaW5kZXhdKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgaXRlbXNbaW5kZXhdKTtcbiAgICBpZiAoaXNDb250cm9sKSBpbmRleCAtPSAxO1xuICB9IGVsc2UgcmV0dXJuIGlzQ29udHJvbCB8fCAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpKTtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgKF9hMiA9IGl0ZW1zW01hdGgubWF4KDAsIGluZGV4KV0gfHwgY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtY29tYm9ib3hcIiwgVUhUTUxDb21ib2JveEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTENvbWJvYm94RWxlbWVudCB9O1xuIiwiY29uc3QgZ2V0U3RlcHMgPSAoXG5cdG5vdzogbnVtYmVyLFxuXHRtYXg6IG51bWJlcixcblx0c2hvdyA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbikgPT4ge1xuXHRjb25zdCBvZmZzZXQgPSAoc2hvdyAtIDEpIC8gMjtcblx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heChNYXRoLm1pbihub3cgLSBNYXRoLmZsb29yKG9mZnNldCksIG1heCAtIHNob3cgKyAxKSwgMSk7XG5cdGNvbnN0IGVuZCA9IE1hdGgubWluKE1hdGgubWF4KG5vdyArIE1hdGguY2VpbChvZmZzZXQpLCBzaG93KSwgbWF4KTtcblx0Y29uc3QgcGFnZXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBlbmQgKyAxIC0gc3RhcnQgfSwgKF8sIGkpID0+IGkgKyBzdGFydCk7XG5cblx0aWYgKHNob3cgPiA0ICYmIHN0YXJ0ID4gMSkgcGFnZXMuc3BsaWNlKDAsIDIsIDEsIDApO1xuXHRpZiAoc2hvdyA+IDMgJiYgZW5kIDwgbWF4KSBwYWdlcy5zcGxpY2UoLTIsIDIsIDAsIG1heCk7XG5cdHJldHVybiBwYWdlcztcbn07XG5cbmV4cG9ydCBjb25zdCBwYWdpbmF0aW9uID0gKHsgY3VycmVudCA9IDEsIHRvdGFsID0gMTAsIHNob3cgPSA3IH0pID0+ICh7XG5cdHByZXY6IGN1cnJlbnQgPiAxID8gY3VycmVudCAtIDEgOiAwLFxuXHRuZXh0OiBjdXJyZW50IDwgdG90YWwgPyBjdXJyZW50ICsgMSA6IDAsXG5cdHBhZ2VzOiBnZXRTdGVwcyhjdXJyZW50LCB0b3RhbCwgc2hvdykubWFwKChwYWdlLCBpbmRleCkgPT4gKHtcblx0XHRjdXJyZW50OiBwYWdlID09PSBjdXJyZW50ICYmIChcInBhZ2VcIiBhcyBjb25zdCksXG5cdFx0a2V5OiBga2V5LSR7cGFnZX0tJHtpbmRleH1gLFxuXHRcdHBhZ2UsXG5cdH0pKSxcbn0pO1xuIiwiaW1wb3J0IHsgY2xzeCB9IGZyb20gXCJjbHN4XCI7XG5cbmV4cG9ydCBjb25zdCBRVUlDS19FVkVOVCA9IHsgY2FwdHVyZTogdHJ1ZSwgcGFzc2l2ZTogdHJ1ZSB9O1xuZXhwb3J0IGNvbnN0IElTX0JST1dTRVIgPVxuXHR0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIjtcblxuLy8gVE9ETzogRG9jdW1lbnRhdGlvbiBmb3IgcHJldHR5TnVtYmVyXG5sZXQgSU5UTF9OVU06IEludGwuTnVtYmVyRm9ybWF0IHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHByZXR0eU51bWJlcihudW1iZXI6IG51bWJlciB8IHN0cmluZykge1xuXHRpZiAoIUlOVExfTlVNKVxuXHRcdElOVExfTlVNID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KFxuXHRcdFx0KElTX0JST1dTRVIgJiYgYXR0cihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIFwibGFuZ1wiKSkgfHwgXCJub1wiLFxuXHRcdCk7XG5cdHJldHVybiBJTlRMX05VTS5mb3JtYXQoTnVtYmVyKG51bWJlcikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVib3VuY2U8VCBleHRlbmRzIHVua25vd25bXT4oXG5cdGNhbGxiYWNrOiAoLi4uYXJnczogVCkgPT4gdm9pZCxcblx0ZGVsYXk6IG51bWJlcixcbikge1xuXHRsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuXG5cdHJldHVybiAoLi4uYXJnczogVCkgPT4ge1xuXHRcdGNsZWFyVGltZW91dCh0aW1lcik7XG5cdFx0dGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IGNhbGxiYWNrKC4uLmFyZ3MpLCBkZWxheSk7XG5cdH07XG59XG5cbi8qKlxuICogYXR0clxuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBnZXQsIHNldCBhbmQgcmVtb3ZlIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSBlbCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSBuYW1lIFRoZSBhdHRyaWJ1dGUgbmFtZSB0byBnZXQsIHNldCBvciByZW1vdmUsIG9yIGEgb2JqZWN0IHRvIHNldCBtdWx0aXBsZSBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0gdmFsdWUgQSB2YWxpZCBhdHRyaWJ1dGUgdmFsdWUgb3IgbnVsbCB0byByZW1vdmUgYXR0cmlidXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRyKFxuXHRlbDogRWxlbWVudCxcblx0bmFtZTogc3RyaW5nLFxuXHR2YWx1ZT86IHN0cmluZyB8IG51bGwsXG4pOiBzdHJpbmcgfCBudWxsIHtcblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSkgPz8gbnVsbDsgLy8gRmFsbGJhY2sgdG8gbnVsbCBvbmx5IGlmIGVsIGlzIHVuZGVmaW5lZFxuXHRpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblx0ZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcblx0cmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogdXNlSWRcbiAqIEByZXR1cm4gQSBnZW5lcmF0ZWQgdW5pcXVlIElEXG4gKi9cbmxldCBpZCA9IDA7XG5jb25zdCBVVUlEID0gYCR7RGF0ZS5ub3coKS50b1N0cmluZygzNil9JHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCA1KX1gO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlkKGVsOiBFbGVtZW50KSB7XG5cdGlmICghZWwuaWQpIGVsLmlkID0gYCR7VVVJRH0keysraWR9YDtcblx0cmV0dXJuIGVsLmlkO1xufVxuXG4vLyBJbnRlcm5hbCBoZWxwZXIgZm9yIG9uIC8gb2ZmXG5jb25zdCBldmVudHMgPSAoXG5cdGFjdGlvbjogXCJhZGRcIiB8IFwicmVtb3ZlXCIsXG5cdGVsZW1lbnQ6IE5vZGUgfCBXaW5kb3csXG5cdHJlc3Q6IFBhcmFtZXRlcnM8dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI+LFxuKTogdm9pZCA9PiB7XG5cdGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuXHRcdHJlc3RbMF0gPSB0eXBlO1xuXHRcdGVsZW1lbnRbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXSguLi5yZXN0KTtcblx0fVxufTtcblxuLyoqXG4gKiBvblxuICogQHBhcmFtIGVsZW1lbnQgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gdHlwZXMgQSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGV2ZW50IHR5cGVzXG4gKiBAcGFyYW0gbGlzdGVuZXIgQW4gZXZlbnQgbGlzdGVuZXIgZnVuY3Rpb24gb3IgbGlzdGVuZXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBvbiA9IChcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Li4ucmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj5cbik6IHZvaWQgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xuXG4vKipcbiAqIG9mZlxuICogQHBhcmFtIGVsZW1lbnQgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gdHlwZXMgQSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGV2ZW50IHR5cGVzXG4gKiBAcGFyYW0gbGlzdGVuZXIgQW4gZXZlbnQgbGlzdGVuZXIgZnVuY3Rpb24gb3IgbGlzdGVuZXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBvZmYgPSAoXG5cdGVsZW1lbnQ6IE5vZGUgfCBXaW5kb3csXG5cdC4uLnJlc3Q6IFBhcmFtZXRlcnM8dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXI+XG4pOiB2b2lkID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcblxuLyoqXG4gKiBTY3JvbGxlciB0YXJnZXMgaGVscGluZyBhbmNob3JQb3NpdGlvblxuICovXG5jb25zdCBTQ1JPTExFUiA9IElTX0JST1dTRVIgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpIDogbnVsbDsgLy8gVXNlZCB0byBlbnN1cmUgd2UgaGF2ZSBzY3JvbGxhYmlsaXR5IHVuZGVyXG5jb25zdCBUQVJHRVRTID0gbmV3IE1hcDxFbGVtZW50LCAoKSA9PiB2b2lkPigpOyAvLyBTdG9yZSBjdXJyZW50IG9wZW4gcG9wcGVycyBhbmQgdGhlaXIgdXBkYXRlIGZ1bmN0aW9uc1xuY29uc3QgVEFSR0VUU19VUERBVEUgPSAoKSA9PiB7XG5cdGZvciAoY29uc3QgW18sIHVwZGF0ZV0gb2YgVEFSR0VUUykgdXBkYXRlKCk7XG59O1xuXG5pZiAoU0NST0xMRVIpIHtcblx0U0NST0xMRVIuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7cGFkZGluZzoxcHg7dG9wOjA7bGVmdDowcHhcIjtcblx0b24od2luZG93LCBcImxvYWQscmVzaXplLHNjcm9sbFwiLCBUQVJHRVRTX1VQREFURSwgUVVJQ0tfRVZFTlQpO1xufVxuXG4vKipcbiAqIGFuY2hvclBvc2l0aW9uXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSBFbGVtZW50IHRvIHBvc2l0aW9uXG4gKiBAcGFyYW0gYW5jaG9yIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBhbmNob3JcbiAqL1xuY29uc3QgUE9TSVRJT04gPSB7IHRvcDogMCwgcmlnaHQ6IDEsIGJvdHRvbTogMiwgbGVmdDogMyB9OyAvLyBTcGVlZCB1cCBieSB1c2luZyBhIGNvbnN0IG1hcFxuXG5leHBvcnQgZnVuY3Rpb24gYW5jaG9yUG9zaXRpb24oXG5cdHRhcmdldDogSFRNTEVsZW1lbnQsXG5cdGFuY2hvcjogRWxlbWVudCB8IGZhbHNlLFxuXHRwb3NpdGlvbj86IHN0cmluZyB8IG51bWJlcixcblx0Zm9yY2U/OiBib29sZWFuLFxuKSB7XG5cdGlmIChhbmNob3IgPT09IGZhbHNlIHx8ICFhbmNob3IuaXNDb25uZWN0ZWQgfHwgIXRhcmdldC5pc0Nvbm5lY3RlZClcblx0XHRyZXR1cm4gVEFSR0VUUy5kZWxldGUodGFyZ2V0KTsgLy8gU3RvcCB3YXRjaGluZyBpZiBhbmNob3IgaXMgcmVtb3ZlZCBmcm9tIERPTVxuXHRpZiAoIVNDUk9MTEVSPy5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoU0NST0xMRVIgfHwgXCJcIik7IC8vIEVuc3VyZSB3ZSBoYXZlIHRoZSBzY3JvbGxlclxuXHRpZiAoIVRBUkdFVFMuaGFzKHRhcmdldCkpIHtcblx0XHQvLyBTZXR1cCBuZXcgdGFyZ2V0IG9yIHVwZGF0ZSBwb3NpdGlvblxuXHRcdGNvbnN0IHBsYWNlID1cblx0XHRcdFBPU0lUSU9OW3Bvc2l0aW9uIGFzIGtleW9mIHR5cGVvZiBQT1NJVElPTl0gPz8gUE9TSVRJT04uYm90dG9tOyAvLyBVc2UgQ1NTIHByb3BlcnR5IHRvIHN0b3JlIHBvc2l0aW9uIGZvciBtb3JlIGZsZXhpYmlsaXR5XG5cdFx0cmV0dXJuIFRBUkdFVFMuc2V0KHRhcmdldCwgKCkgPT5cblx0XHRcdGFuY2hvclBvc2l0aW9uKHRhcmdldCwgYW5jaG9yLCBwbGFjZSwgZm9yY2UpLFxuXHRcdCkuZ2V0KHRhcmdldCk/LigpOyAvLyBTdGFydCB3YXRjaGluZyBpZiBub3QgYWxyZWFkeSB3YXRjaGluZ1xuXHR9XG5cblx0Y29uc3QgaXNIVE1MQW5jaG9yID0gYW5jaG9yIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7IC8vIFNWRyBvciBYTUwgZWxlbWVudHMgZG9lcyBub3QgaGF2ZSBvZmZzZXRXaWR0aCBvciBvZmZzZXRIZWlnaHRcblx0Y29uc3QgeyBvZmZzZXRXaWR0aDogdGFyZ2V0Vywgb2Zmc2V0SGVpZ2h0OiB0YXJnZXRIIH0gPSB0YXJnZXQ7XG5cdGNvbnN0IGFuY2hvclcgPSBpc0hUTUxBbmNob3IgPyBhbmNob3Iub2Zmc2V0V2lkdGggOiBhbmNob3IuY2xpZW50V2lkdGg7XG5cdGNvbnN0IGFuY2hvckggPSBpc0hUTUxBbmNob3IgPyBhbmNob3Iub2Zmc2V0SGVpZ2h0IDogYW5jaG9yLmNsaWVudEhlaWdodDtcblx0Y29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3AgfSA9IGFuY2hvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0Y29uc3QgYW5jaG9yWCA9IE1hdGgucm91bmQobGVmdCAtIChhbmNob3JXIC0gd2lkdGgpIC8gMik7IC8vIENvcnJlY3QgZm9yIENTUyB0cmFuc2Zvcm0gc2NhbGVcblx0Y29uc3QgYW5jaG9yWSA9IE1hdGgucm91bmQodG9wIC0gKGFuY2hvckggLSBoZWlnaHQpIC8gMik7IC8vIENvcnJlY3QgZm9yIENTUyB0cmFuc2Zvcm0gc2NhbGVcblxuXHRjb25zdCBoYXNTcGFjZUxlZnQgPSBhbmNob3JYIC0gdGFyZ2V0VyA+IDA7XG5cdGNvbnN0IGhhc1NwYWNlUmlnaHQgPSBhbmNob3JXICsgYW5jaG9yVyArIHRhcmdldFcgPCB3aW5kb3cuaW5uZXJXaWR0aDtcblx0Y29uc3QgaGFzU3BhY2VPdmVyID0gYW5jaG9yWSAtIHRhcmdldEggPiAwO1xuXHRjb25zdCBoYXNTcGFjZVVuZGVyID0gYW5jaG9yWSArIGFuY2hvckggKyB0YXJnZXRIIDwgd2luZG93LmlubmVySGVpZ2h0O1xuXHRjb25zdCBwb3NpdGlvblJpZ2h0ID1cblx0XHQocG9zaXRpb24gPT09IFBPU0lUSU9OLnJpZ2h0ICYmIChmb3JjZSB8fCBoYXNTcGFjZVJpZ2h0KSkgfHwgIWhhc1NwYWNlTGVmdDsgLy8gQWx3YXlzIHBvc2l0aW9uIHJpZ2h0IHdoZW4gbm8gaGFzU3BhY2VMZWZ0LCBhcyBubyBPUyBzY3JvbGxzIGZ1cnRoZXIgdXAgdGhhbiAwXG5cdGNvbnN0IHBvc2l0aW9uVW5kZXIgPVxuXHRcdChwb3NpdGlvbiA9PT0gUE9TSVRJT04uYm90dG9tICYmIChmb3JjZSB8fCBoYXNTcGFjZVVuZGVyKSkgfHwgIWhhc1NwYWNlT3ZlcjsgLy8gQWx3YXlzIHBvc2l0aW9uIHVuZGVyIHdoZW4gbm8gaGFzU3BhY2VPdmVyLCBhcyBubyBPUyBzY3JvbGxzIGZ1cnRoZXIgdXAgdGhhbiAwXG5cdGNvbnN0IGNlbnRlclggPSBNYXRoLm1pbihcblx0XHRNYXRoLm1heCgxMCwgYW5jaG9yWCAtICh0YXJnZXRXIC0gYW5jaG9yVykgLyAyKSxcblx0XHR3aW5kb3cuaW5uZXJXaWR0aCAtIHRhcmdldFcgLSAxMCxcblx0KTtcblx0Y29uc3QgY2VudGVyWSA9IE1hdGgubWluKFxuXHRcdE1hdGgubWF4KDEwLCBhbmNob3JZIC0gKHRhcmdldEggLSBhbmNob3JIKSAvIDIpLFxuXHRcdHdpbmRvdy5pbm5lckhlaWdodCAtIHRhcmdldEggLSAxMCxcblx0KTtcblx0Y29uc3QgaXNWZXJ0aWNhbCA9IHBvc2l0aW9uID09PSBQT1NJVElPTi50b3AgfHwgcG9zaXRpb24gPT09IFBPU0lUSU9OLmJvdHRvbTtcblxuXHR0YXJnZXQuc3R5bGUubGVmdCA9IGAke01hdGgucm91bmQoaXNWZXJ0aWNhbCA/IGNlbnRlclggOiBwb3NpdGlvblJpZ2h0ID8gYW5jaG9yWCArIGFuY2hvclcgOiBhbmNob3JYIC0gdGFyZ2V0Vyl9cHhgO1xuXHR0YXJnZXQuc3R5bGUudG9wID0gYCR7TWF0aC5yb3VuZChpc1ZlcnRpY2FsID8gKHBvc2l0aW9uVW5kZXIgPyBhbmNob3JZICsgYW5jaG9ySCA6IGFuY2hvclkgLSB0YXJnZXRIKSA6IGNlbnRlclkpfXB4YDtcblx0U0NST0xMRVI/LnN0eWxlLnNldFByb3BlcnR5KFxuXHRcdFwidHJhbnNsYXRlXCIsXG5cdFx0YDBweCAke01hdGgucm91bmQocG9zaXRpb25VbmRlciA/IHdpbmRvdy5zY3JvbGxZICsgYW5jaG9yWSArIGFuY2hvckggKyB0YXJnZXRIICsgMzAgOiAwKX1weGAsXG5cdCk7XG59XG5cbi8qKlxuICogU3BlZWQgdXAgTXV0YXRpb25PYnNlcnZlciBieSBkZWJvdW5jaW5nIGFuZCBvbmx5IHJ1bm5pbmcgd2hlbiBwYWdlIGlzIHZpc2libGVcbiAqIEByZXR1cm4gbmV3IE11dGFpb25PYnNlcnZlclxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjazogTXV0YXRpb25DYWxsYmFjaykge1xuXHRsZXQgcXVldWUgPSAwO1xuXG5cdGNvbnN0IG9uRnJhbWUgPSAoKSA9PiBzZXRUaW1lb3V0KG9uVGltZXIsIDIwMCk7IC8vIFVzZSBib3RoIHJlcXVlc3RBbmltYXRpb25GcmFtZSBhbmQgc2V0VGltZW91dCB0byBkZWJvdW5jZSBhbmQgb25seSBydW4gd2hlbiB2aXNpYmxlXG5cdGNvbnN0IG9uVGltZXIgPSAoKSA9PiB7XG5cdFx0Y2FsbGJhY2soW10sIG9ic2VydmVyKTtcblx0XHRvYnNlcnZlci50YWtlUmVjb3JkcygpOyAvLyBDbGVhciByZWNvcmRzIHRvIGF2b2lkIHJ1bm5pbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcblx0XHRxdWV1ZSA9IDA7XG5cdH07XG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdGlmICghcXVldWUpIHF1ZXVlID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKG9uRnJhbWUpO1xuXHR9KTtcblxuXHRyZXR1cm4gb2JzZXJ2ZXI7XG59XG5cbi8qKlxuICogb25NdXRhdGlvblxuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBvYnNlcnZlIG11dGF0aW9ucyBvbiBhIHNwZWNpZmljIGNsYXNzIG5hbWVcbiAqIEBwYXJhbSBlbCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSBjbGFzc05hbWUgVGhlIGNsYXNzIG5hbWUgdG8gb2JzZXJ2ZVxuICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBydW4gd2hlbiBtdXRhdGlvbnMgYXJlIGRldGVjdGVkXG4gKi9cbmNvbnN0IE1VVEFUT1JTID0gbmV3IFdlYWtNYXA8RWxlbWVudCwgQXJyYXk8KCkgPT4gdm9pZD4+KCk7XG5leHBvcnQgY29uc3Qgb25NdXRhdGlvbiA9IDxUIGV4dGVuZHMgRWxlbWVudD4oXG5cdGVsOiBFbGVtZW50LFxuXHRjbGFzc05hbWU6IHN0cmluZyxcblx0Y2FsbGJhY2s6IChlbGVtczogSFRNTENvbGxlY3Rpb25PZjxUPikgPT4gdm9pZCxcbikgPT4ge1xuXHRjb25zdCBlbGVtcyA9IGVsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcblx0Y29uc3QgbXV0YXRvciA9IE1VVEFUT1JTLmdldChlbCkgfHwgW107XG5cblx0aWYgKCFtdXRhdG9yLmxlbmd0aCkge1xuXHRcdE1VVEFUT1JTLnNldChlbCwgbXV0YXRvcik7XG5cdFx0Y3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcigoXywgb2JzZXJ2ZXIpID0+IHtcblx0XHRcdGlmIChlbC5pc0Nvbm5lY3RlZCAmJiBtdXRhdG9yPy5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBjYWxsYmFjayBvZiBtdXRhdG9yKSBjYWxsYmFjaygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0TVVUQVRPUlMuZGVsZXRlKGVsKTtcblx0XHRcdH1cblx0XHR9KS5vYnNlcnZlKGVsLCB7XG5cdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFtcImNsYXNzXCJdLFxuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRcdHN1YnRyZWU6IHRydWUsXG5cdFx0fSk7XG5cdH1cblx0bXV0YXRvci5wdXNoKCgpID0+IGNhbGxiYWNrKGVsZW1zIGFzIEhUTUxDb2xsZWN0aW9uT2Y8VD4pKTtcbn07XG5cbi8qKlxuICogb25Mb2FkZWRcbiAqIEBkZXNjcmlwdGlvbiBSdW5zIGEgY2FsbGJhY2sgd2hlbiB3aW5kb3cgaXMgbG9hZGVkIGluIGJyb3dzZXJcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcnVuIHdoZW4gdGhlIHBhZ2UgaXMgcmVhZHlcbiAqL1xuZXhwb3J0IGNvbnN0IG9uTG9hZGVkID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB7XG5cdGlmICghSVNfQlJPV1NFUikgcmV0dXJuO1xuXHRjb25zdCBydW4gPSAoKSA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spOyAvLyBFbnN1cmUgd2UgcnVuIGFmdGVyIGFsbCBvdGhlciBsb2FkIGV2ZW50c1xuXHRpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSBydW4oKTtcblx0ZWxzZSBvbih3aW5kb3csIFwibG9hZFwiLCBydW4pO1xufTtcblxuLyoqXG4gKiBpc0lucHV0TGlrZVxuICogQGRlc2NyaXB0aW9uIENoZWNrIGlmIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKiBAcGFyYW0gZWwgVGhlIGVsZW1lbnQgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKi9cbmV4cG9ydCBjb25zdCBpc0lucHV0TGlrZSA9IChlbDogdW5rbm93bik6IGVsIGlzIEhUTUxJbnB1dEVsZW1lbnQgPT5cblx0ZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcInZhbGlkaXR5XCIgaW4gZWwgJiZcblx0IShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KTtcblxuLyoqXG4gKiB0b0N1c3RvbUVsZW1lbnRQcm9wc1xuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBjb252ZXJ0IHByb3BzIHRvIGN1c3RvbSBlbGVtZW50IGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSBwcm9wcyBUaGUgcHJvcHMgdG8gY29udmVydFxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBwcm9wc1xuICovXG5leHBvcnQgY29uc3QgdG9DdXN0b21FbGVtZW50UHJvcHMgPSAoXG5cdHsgY2xhc3NOYW1lLCBoaWRkZW4sIG9wZW4sIC4uLnJlc3QgfTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdGtsYXNzPzogc3RyaW5nLFxuKSA9PiB7XG5cdHJlc3Quc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nID0gdHJ1ZTsgLy8gTWFrZSBOZXh0LmpzIGhhcHB5XG5cdHJlc3QuY2xhc3MgPSBjbHN4KGtsYXNzLCBjbGFzc05hbWUgfHwgXCJcIikgfHwgdW5kZWZpbmVkOyAvLyBVc2UgY2xhc3MgaW5zdGVhZCBvZiBjbGFzc05hbWVcblx0aWYgKGhpZGRlbikgcmVzdC5oaWRkZW4gPSB0cnVlOyAvLyBFbnN1cmUgYm9vbGVhbiBwcm9wIGJlaGF2aW91clxuXHRpZiAob3BlbikgcmVzdC5vcGVuID0gdHJ1ZTsgLy8gRW5zdXJlIGJvb2xlYW4gcHJvcCBiZWhhdmlvdXJcblx0cmV0dXJuIHJlc3Q7XG59O1xuIiwiaWYgKFxuXHR0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdHdpbmRvdy5DU1NTdHlsZVNoZWV0ICYmXG5cdGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0c1xuKVxuXHQoKCkgPT4ge1xuXHRcdGNvbnN0IGtleSA9IFwiLS1tdGRzLWFwcC1leHBhbmRlZFwiO1xuXHRcdGNvbnN0IHNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblx0XHRjb25zdCBwcmV2ID0gKCkgPT4gIXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpPy5pbmNsdWRlcyhcImZhbHNlXCIpO1xuXG5cdFx0ZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzLnB1c2goc2hlZXQpO1xuXHRcdHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQgPSAoZm9yY2UpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IG5leHQgPSBmb3JjZSA/PyAhcHJldigpO1xuXHRcdFx0XHRzaGVldC5yZXBsYWNlU3luYz8uKGA6cm9vdCB7ICR7a2V5fTogdmFyKCR7a2V5fS0tJHtuZXh0fSl9YCk7XG5cdFx0XHRcdHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIG5leHQpO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7fSAvLyBsb2NhbFN0b3JhZ2UgaXMgZnVsbCBvciByZXBsYWNlU3luYyBpcyBub3Qgc3VwcG9ydGVkXG5cdFx0fTtcblxuXHRcdC8vIFNldCBhbmQgc3RvcmUgaW5pdGlhbCBzdGF0ZVxuXHRcdHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQocHJldigpKTtcblx0fSkoKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBRVUlDS19FVkVOVCwgZGVib3VuY2UsIG9uLCBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IFwiLi9hcHAtdG9nZ2xlXCI7XG5cbmNvbnN0IENTU19BUFAgPSBzdHlsZXMuYXBwLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19TVElDS1kgPSBzdHlsZXMuc3RpY2t5LnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19UT0dHTEUgPSAnW2RhdGEtY29tbWFuZD1cInRvZ2dsZS1hcHAtZXhwYW5kZWRcIl0nO1xuY29uc3QgQ1NTX1NJREVCQVIgPSBgLiR7Q1NTX0FQUH0gPiBkaWFsb2csLiR7Q1NTX0FQUH0gZGlhbG9nIH4gbWFpbmA7XG5cbmNvbnN0IHVzZVRyYW5zaXRpb24gPSAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcblx0aWYgKCFkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKSBjYWxsYmFjaygpO1xuXHRlbHNlIGRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24oY2FsbGJhY2spO1xufTtcblxuZXhwb3J0IGNvbnN0IHRvZ2dsZUFwcEV4cGFuZGVkID0gKGZvcmNlPzogYm9vbGVhbikgPT5cblx0Ly8gQHRzLWV4cGVjdC1lcnJvciB3aW5kb3cubXRkc0FwcFRvZ2dsZSBjb21lcyBmcm9tIGFwcC10b2dnbGUuanNcblx0dXNlVHJhbnNpdGlvbigoKSA9PiB3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkPy4oZm9yY2UpKTtcblxuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlQ2xpY2soeyB0YXJnZXQ6IGVsIH06IEV2ZW50KSB7XG5cdGlmICghKGVsIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpIHx8ICFlbC5tYXRjaGVzKENTU19UT0dHTEUpKSByZXR1cm47XG5cdGlmIChnZXRDb21wdXRlZFN0eWxlKGVsKS5wb3NpdGlvbiA9PT0gXCJzdGlja3lcIikgcmV0dXJuIHRvZ2dsZUFwcEV4cGFuZGVkKCk7XG5cdHVzZVRyYW5zaXRpb24oKCkgPT4ge1xuXHRcdGNvbnN0IHNpZGViYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaWFsb2dFbGVtZW50PihDU1NfU0lERUJBUik7XG5cdFx0c2lkZWJhcj8uc2V0QXR0cmlidXRlKFwiZGF0YS1jbG9zZWRieVwiLCBcImFueVwiKTsgLy8gQWxsb3cgY2xvc2luZyBieSBjbGlja2luZyBvdXRzaWRlXG5cdFx0c2lkZWJhcj8uc2hvd01vZGFsKCk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVSZXNpemUoKSB7XG5cdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpYWxvZ0VsZW1lbnQ+KENTU19TSURFQkFSKT8uY2xvc2UoKTtcbn1cblxuLy8gU2Nyb2xsIHN0YXRlXG5sZXQgTUlOX1kgPSAwOyAvLyBPZmZzZXQgdG8gYXZvaWQgc2Nyb2xsIGp1bXAgd2hlbiBzdGlja3kgaXMgc2V0IHRvIHJlbGF0aXZlXG5sZXQgU0NST0xMX1VQOiBib29sZWFuO1xubGV0IFNUSUNLID0gMDsgLy8gLTEgPSBzdGljayB0b3AsIDAgPSByZWxhdGl2ZSwgMSA9IHN0aWNrIGJvdHRvbVxubGV0IFNUSUNLX0VMOiBIVE1MRWxlbWVudDtcbmxldCBTVElDS19IID0gMDtcbmxldCBTVElDS19ZID0gMDtcbmxldCBTVFVDSyA9IGZhbHNlOyAvLyBVc2VkIHRvIGZpZ3VyZSBpZiBuYXYgaXMgbGFyZ2VyIHRoYW4gdmlld3BvcnRcbmxldCBXSU5fSCA9IDA7XG5sZXQgV0lOX1kgPSAwO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihbc3RpY2t5XTogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0U1RJQ0tfRUwgPSBzdGlja3k7XG5cdGhhbmRsZVNjcm9sbCgpOyAvLyBSdW4gb24gY29ubmVjdFxufVxuXG5mdW5jdGlvbiBoYW5kbGVTY3JvbGwoKSB7XG5cdGlmICghU1RJQ0tfRUw/LmlzQ29ubmVjdGVkKSByZXR1cm47XG5cdGNvbnN0IE5FWFRfWSA9IHdpbmRvdy5zY3JvbGxZO1xuXHRjb25zdCBORVhUX1VQID0gTkVYVF9ZIDwgV0lOX1k7XG5cdFdJTl9ZID0gTkVYVF9ZO1xuXG5cdC8vIE9ubHkgY2FsY3VsYXRlIGlmIHNjcm9sbCBkaXJlY3Rpb24gaGFzIGNoYW5nZWRcblx0aWYgKE5FWFRfVVAgIT09IFNDUk9MTF9VUCkge1xuXHRcdE1JTl9ZID0gKFNUSUNLX0VMLnBhcmVudEVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCB8fCAwKSArIFdJTl9ZO1xuXHRcdFNDUk9MTF9VUCA9IE5FWFRfVVA7XG5cdFx0U1RJQ0tfSCA9IFNUSUNLX0VMLm9mZnNldEhlaWdodDtcblx0XHRTVElDS19ZID0gU1RJQ0tfRUwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgV0lOX1k7XG5cdFx0U1RVQ0sgPSBTVElDS19FTC5vZmZzZXRIZWlnaHQgPD0gd2luZG93LmlubmVySGVpZ2h0O1xuXHRcdFdJTl9IID0gd2luZG93LmlubmVySGVpZ2h0O1xuXHR9XG5cblx0aWYgKFNUSUNLID09PSAtMSAmJiBTVFVDSykgcmV0dXJuOyAvLyBBbGx3YXlzIHN0aWNreSB3aGVuIHNpZGViYXIgaXMgc21hbGxlciB0aGFuIHZpZXdwb3J0XG5cdGlmIChTVElDSyAhPT0gLTEgJiYgKFNUVUNLIHx8IChTQ1JPTExfVVAgJiYgV0lOX1kgPD0gU1RJQ0tfWSkpKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInN0aWNreVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIFwiMHB4XCIpO1xuXHRcdFNUSUNLID0gLTE7IC8vIE5vdCBzdGlja2luZyB0byB0b3AgYW5kIHNpZGViYXIgaXMgc21hbGxlciB0aGFuIHZpZXdwb3J0IG9yIHNjcm9sbGluZyB1cFxuXHR9IGVsc2UgaWYgKFNUSUNLID09PSAtMSAmJiAhU0NST0xMX1VQKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInJlbGF0aXZlXCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7TWF0aC5tYXgoMCwgV0lOX1kgLSBNSU5fWSl9cHhgKTtcblx0XHRTVElDSyA9IDA7IC8vIFN0aWNraW5nIHRvIHRvcCBhbmQgc2Nyb2xsaW5nIGRvd25cblx0fSBlbHNlIGlmIChTVElDSyAhPT0gMSAmJiAhU0NST0xMX1VQICYmIFdJTl9ZICsgV0lOX0ggPj0gU1RJQ0tfWSArIFNUSUNLX0gpIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwic3RpY2t5XCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7V0lOX0ggLSBTVElDS19IfXB4YCk7XG5cdFx0U1RJQ0sgPSAxOyAvLyBOb3Qgc3RpY2tpbmcgdG8gYm90dG9tIGFuZCBzY3JvbGxpbmcgZG93blxuXHR9IGVsc2UgaWYgKFNUSUNLID09PSAxICYmIFNDUk9MTF9VUCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJyZWxhdGl2ZVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke1NUSUNLX1kgLSBNSU5fWX1weGApO1xuXHRcdFNUSUNLID0gMDsgLy8gU3RpY2tpbmcgdG8gYm90dG9tIGFuZCBzY3JvbGxpbmcgdXBcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfU1RJQ0tZLCBoYW5kbGVNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZVRvZ2dsZUNsaWNrLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJyZXNpemVcIiwgZGVib3VuY2UoaGFuZGxlUmVzaXplLCAxMDApLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJzY3JvbGxcIiwgaGFuZGxlU2Nyb2xsLCBRVUlDS19FVkVOVCk7XG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfQlJFQURDUlVNQlMgPSBzdHlsZXMuYnJlYWRjcnVtYnMuc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihicmVhZGNydW1iczogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCBicmVhZGN1bWJzIG9mIGJyZWFkY3J1bWJzKVxuXHRcdGJyZWFkY3VtYnMucXVlcnlTZWxlY3RvckFsbChcImxpIGFcIikuZm9yRWFjaCgoY3J1bWIsIGluZGV4LCB7IGxlbmd0aCB9KSA9PiB7XG5cdFx0XHRhdHRyKGNydW1iLCBcImFyaWEtY3VycmVudFwiLCBpbmRleCA9PT0gbGVuZ3RoIC0gMSA/IFwicGFnZVwiIDogbnVsbCk7XG5cdFx0fSk7XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfQlJFQURDUlVNQlMsIGhhbmRsZU11dGF0aW9uKSxcbik7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0SVNfQlJPV1NFUixcblx0UVVJQ0tfRVZFTlQsXG5cdGF0dHIsXG5cdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIsXG5cdG9uLFxuXHRvbkxvYWRlZCxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19ESUFMT0cgPSBzdHlsZXMuZGlhbG9nLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IERJQUxPR1MgPSBJU19CUk9XU0VSXG5cdD8gKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG5cdFx0XHRDU1NfRElBTE9HLFxuXHRcdCkgYXMgSFRNTENvbGxlY3Rpb25PZjxIVE1MRGlhbG9nRWxlbWVudD4pXG5cdDogW107XG5cbmNvbnN0IGhhbmRsZU1vZGFsID0gKCkgPT4ge1xuXHRmb3IgKGNvbnN0IGRpYWxvZyBvZiBESUFMT0dTKVxuXHRcdGlmIChkaWFsb2cuaXNDb25uZWN0ZWQgJiYgZGlhbG9nLnNob3dNb2RhbCAmJiBkaWFsb2cuY2xvc2UpIHtcblx0XHRcdGlmIChkaWFsb2cubWF0Y2hlcygnW29wZW5dOm5vdChbZGF0YS1tb2RhbD1cImZhbHNlXCJdKTpub3QoOm1vZGFsKScpKSB7XG5cdFx0XHRcdGF0dHIoZGlhbG9nLCBcIm9wZW5cIiwgbnVsbCk7IC8vIFVzaW5nIGF0dHJpYnV0ZSBpbnN0ZWFkIG9mIC5jbG9zZSB0byBhdm9pZCBgY2xvc2VgIGV2ZW50XG5cdFx0XHRcdGRpYWxvZy5zaG93TW9kYWwoKTtcblx0XHRcdH0gZWxzZSBpZiAoZGlhbG9nLm1hdGNoZXMoXCI6bW9kYWw6bm90KFtvcGVuXSlcIikpIHtcblx0XHRcdFx0YXR0cihkaWFsb2csIFwib3BlblwiLCBcIlwiKTsgLy8gU2V0IGFzIG9wZW5cblx0XHRcdFx0ZGlhbG9nLmNsb3NlKCk7IC8vIFNvIHdlIGNvcnJlY2x0eSBjYW4gY2FsbCAuY2xvc2UsIHJlbW92aW5nIDxkaWFsb2c+IGZyb20gI3RvcC1sYXllclxuXHRcdFx0fVxuXHRcdH1cbn07XG5cbmNvbnN0IGhhbmRsZUNsaWNrID0gKHsgY2xpZW50WDogeCwgY2xpZW50WTogeSwgdGFyZ2V0OiBlbCB9OiBNb3VzZUV2ZW50KSA9PiB7XG5cdGlmIChlbCBpbnN0YW5jZW9mIEhUTUxEaWFsb2dFbGVtZW50ICYmIGF0dHIoZWwsIFwiZGF0YS1jbG9zZWRieVwiKSA9PT0gXCJhbnlcIikge1xuXHRcdGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRjb25zdCBpc0luc2lkZSA9IHRvcCA8PSB5ICYmIHkgPD0gYm90dG9tICYmIGxlZnQgPD0geCAmJiB4IDw9IHJpZ2h0O1xuXG5cdFx0aWYgKCFpc0luc2lkZSkgZWwuY2xvc2UoKTtcblx0fSBlbHNlIGlmIChcblx0XHRlbCBpbnN0YW5jZW9mIEVsZW1lbnQgJiZcblx0XHRlbC5jbG9zZXN0KCdidXR0b25bZGF0YS1jb21tYW5kPVwiY2xvc2VcIl0nKVxuXHQpIHtcblx0XHRlbD8uY2xvc2VzdChcImRpYWxvZ1wiKT8uY2xvc2UoKTtcblx0fVxufTtcblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVDbGljayBhcyBFdmVudExpc3RlbmVyLCBRVUlDS19FVkVOVCk7XG5cdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoaGFuZGxlTW9kYWwpLm9ic2VydmUoXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRcdHtcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogW1wib3BlblwiXSxcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdH0sXG5cdCk7XG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBRVUlDS19FVkVOVCwgYXR0ciwgb24sIG9uTG9hZGVkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmZ1bmN0aW9uIGhhbmRsZUluamVjdChldmVudDogRXZlbnQgJiB7IGFuaW1hdGlvbk5hbWU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSAhPT0gc3R5bGVzLl9lcnJvcnN1bW1hcnkpIHJldHVybjtcblx0Y29uc3QgZmlyc3QgPSAoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpPy5maXJzdEVsZW1lbnRDaGlsZDtcblxuXHRpZiAoZmlyc3QgaW5zdGFuY2VvZiBIVE1MSGVhZGluZ0VsZW1lbnQpIHtcblx0XHRhdHRyKGZpcnN0LCBcInRhYmluZGV4XCIsIFwiLTFcIik7XG5cdFx0Zmlyc3QuZm9jdXMoKTsgLy8gQXV0b2ZvY3VzIGZpcnN0IGhlYWRpbmdcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiBvbihkb2N1bWVudCwgXCJhbmltYXRpb25lbmRcIiwgaGFuZGxlSW5qZWN0LCBRVUlDS19FVkVOVCkpO1xuIiwidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuXG4vLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfQU5EUk9JRCA9IElTX0JST1dTRVIgJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFNBRkVfTEFCRUxMRURCWSA9IGAke0lTX0FORFJPSUQgPyBcImRhdGFcIiA6IFwiYXJpYVwifS1sYWJlbGxlZGJ5YDtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgRk9DVVNfT1VUTElORSA9IFwib3V0bGluZTogMXB4IGRvdHRlZDsgb3V0bGluZTogNXB4IGF1dG8gSGlnaGxpZ2h0OyBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3JcIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgLy8gVW5uYW1lZCBzbG90IGRvZXMgYXV0b21hdGljYWxseSByZW5kZXIgYWxsIHRvcCBlbGVtZW50IG5vZGVzXG4gIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBjc3MpXG4pO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIGNyZWF0ZUFyaWFMaXZlID0gKG1vZGUpID0+IHtcbiAgY29uc3QgbGl2ZSA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGxpdmUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246Zml4ZWQ7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXBcIjtcbiAgYXR0cihsaXZlLCBcImFyaWEtbGl2ZVwiLCBtb2RlKTtcbiAgcmV0dXJuIGxpdmU7XG59O1xudmFyIHNldFZhbHVlID0gKGlucHV0LCBkYXRhLCB0eXBlID0gXCJcIikgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlLCBkYXRhLCBpbnB1dFR5cGU6IHR5cGUgfTtcbiAgY29uc3QgcHJvdG8gPSBIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImJlZm9yZWlucHV0XCIsIGV2ZW50KSk7XG4gIChfYiA9IChfYTIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBcInZhbHVlXCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwoaW5wdXQsIGRhdGEpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiaW5wdXRcIiwgZXZlbnQpKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJjaGFuZ2VcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbn07XG5cbi8vIHUtb3B0aW9uLnRzXG52YXIgRElTQUJMRUQgPSBcImRpc2FibGVkXCI7XG52YXIgU0VMRUNURUQgPSBcInNlbGVjdGVkXCI7XG52YXIgVUhUTUxPcHRpb25FbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW0RJU0FCTEVELCBTRUxFQ1RFRF07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKCFJU19JT1MpIHRoaXMudGFiSW5kZXggPSAtMTtcbiAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKFwicm9sZVwiKSkgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJvcHRpb25cIik7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtZGlzYWJsZWRcIiwgYCR7dGhpcy5kaXNhYmxlZH1gKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1zZWxlY3RlZFwiLCBgJHt0aGlzLnNlbGVjdGVkfWApO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB3aGV0aGVyIHRoZSBvcHRpb24gaW4gdGhlIGxpc3QgYm94IGlzIHRoZSBkZWZhdWx0IGl0ZW0uICovXG4gIGdldCBkZWZhdWx0U2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXNbU0VMRUNURURdO1xuICB9XG4gIHNldCBkZWZhdWx0U2VsZWN0ZWQodmFsdWUpIHtcbiAgICB0aGlzW1NFTEVDVEVEXSA9IHZhbHVlO1xuICB9XG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBESVNBQkxFRCkgIT09IG51bGw7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBESVNBQkxFRCwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgLyoqIFJldHJpZXZlcyBhIHJlZmVyZW5jZSB0byB0aGUgZm9ybSB0aGF0IHRoZSBvYmplY3QgaXMgZW1iZWRkZWQgaW4uICovXG4gIGdldCBmb3JtKCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJmb3JtXCIpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiBhbiBvcHRpb24gaW4gYSBsaXN0IGJveC4gKi9cbiAgZ2V0IGluZGV4KCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLigoX2EyID0gdGhpcy5wYXJlbnRFbGVtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLm9wdGlvbnMpIHx8IFt0aGlzXVxuICAgIF0uaW5kZXhPZih0aGlzKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgYSB2YWx1ZSB0aGF0IHlvdSBjYW4gdXNlIHRvIGltcGxlbWVudCB5b3VyIG93biBsYWJlbCBmdW5jdGlvbmFsaXR5IGZvciB0aGUgb2JqZWN0LiAqL1xuICBnZXQgbGFiZWwoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKF9hMiA9IGF0dHIodGhpcywgXCJsYWJlbFwiKSkgIT0gbnVsbCA/IF9hMiA6IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgbGFiZWwodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwibGFiZWxcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBTRUxFQ1RFRCkgIT09IG51bGw7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBTRUxFQ1RFRCwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSB0ZXh0IHN0cmluZyBzcGVjaWZpZWQgYnkgdGhlIG9wdGlvbiB0YWcuICovXG4gIGdldCB0ZXh0KCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gdGhpcy50ZXh0Q29udGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIH1cbiAgc2V0IHRleHQodGV4dCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB0ZXh0O1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgdmFsdWUgd2hpY2ggaXMgcmV0dXJuZWQgdG8gdGhlIHNlcnZlciB3aGVuIHRoZSBmb3JtIGNvbnRyb2wgaXMgc3VibWl0dGVkLiAqL1xuICBnZXQgdmFsdWUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKF9hMiA9IGF0dHIodGhpcywgXCJ2YWx1ZVwiKSkgIT0gbnVsbCA/IF9hMiA6IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwidmFsdWVcIiwgdmFsdWUpO1xuICB9XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1vcHRpb25cIiwgVUhUTUxPcHRpb25FbGVtZW50KTtcblxuLy8gdS1kYXRhbGlzdC50c1xudmFyIExJVkVfVElNRVI7XG52YXIgTElWRV9TUl9GSVggPSAwO1xudmFyIExJVkU7XG52YXIgSU5QVVRfREVCT1VOQ0UgPSAwO1xudmFyIElTX1BSRVNTID0gZmFsc2U7XG52YXIgSVNfTU9CSUxFID0gSVNfSU9TIHx8IElTX0FORFJPSUQ7XG52YXIgRVZFTlRTID0gXCJjbGljayxmb2N1c291dCxpbnB1dCxrZXlkb3duLG1vdXNlZG93bixtb3VzZXVwXCI7XG52YXIgRVZFTlRTX0lOUFVUID0gXCJmb2N1cyxmb2N1c2luLGJsdXIsZm9jdXNvdXRcIjtcbnZhciBURVhUUyA9IHtcbiAgc2luZ3VsYXI6IFwiJWQgaGl0XCIsXG4gIHBsdXJhbDogXCIlZCBoaXRzXCJcbn07XG52YXIgVUhUTUxEYXRhTGlzdEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fdGV4dHMgPSBfX3NwcmVhZFZhbHVlcyh7fSwgVEVYVFMpO1xuICAgIHRoaXMuX3ZhbHVlID0gXCJcIjtcbiAgICBhdHRhY2hTdHlsZShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtESVNQTEFZX0JMT0NLfVxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uKSB7IGRpc3BsYXk6IGJsb2NrOyBjdXJzb3I6IHBvaW50ZXIgfVxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uOmZvY3VzKSB7ICR7Rk9DVVNfT1VUTElORX0gfVxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uW2FyaWEtaGlkZGVuPVwidHJ1ZVwiXSksXG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb25bZGlzYWJsZWRdKSxcblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbltoaWRkZW5dKSB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudCB9YFxuICAgICk7XG4gIH1cbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImlkXCIsIC4uLk9iamVjdC5rZXlzKFRFWFRTKS5tYXAoKGtleSkgPT4gYGRhdGEtc3ItJHtrZXl9YCldO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuaGlkZGVuID0gdHJ1ZTtcbiAgICB0aGlzLl9yb290ID0gZ2V0Um9vdCh0aGlzKTtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcImxpc3Rib3hcIik7XG4gICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIFwiLTFcIik7XG4gICAgb24odGhpcy5fcm9vdCwgXCJmb2N1c2luXCIsIHRoaXMpO1xuICAgIG9uKHRoaXMuX3Jvb3QsIFwiZm9jdXNcIiwgdGhpcywgdHJ1ZSk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7XG4gICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFtcImRpc2FibGVkXCIsIFwiaGlkZGVuXCIsIFwibGFiZWxcIiwgXCJ2YWx1ZVwiXSxcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpKTtcbiAgfVxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBvZmYodGhpcy5fcm9vdCB8fCB0aGlzLCBcImZvY3VzXCIsIHRoaXMsIHRydWUpO1xuICAgIG9mZih0aGlzLl9yb290IHx8IHRoaXMsIFwiZm9jdXNpblwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIGZhbHNlKTtcbiAgICBkaXNjb25uZWN0SW5wdXQodGhpcyk7XG4gICAgdGhpcy5fcm9vdCA9IHZvaWQgMDtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socHJvcCwgX3ByZXYsIG5leHQpIHtcbiAgICBjb25zdCB0ZXh0ID0gcHJvcCA9PSBudWxsID8gdm9pZCAwIDogcHJvcC5zcGxpdChcImRhdGEtc3ItXCIpWzFdO1xuICAgIGNvbnN0IGNzcyA9IGBpbnB1dFtsaXN0PVwiJHt0aGlzLmlkfVwiXWA7XG4gICAgaWYgKFRFWFRTW3RleHRdKSB0aGlzLl90ZXh0c1t0ZXh0XSA9IG5leHQgfHwgVEVYVFNbdGV4dF07XG4gICAgZWxzZSBpZiAodGhpcy5fcm9vdClcbiAgICAgIGZvciAoY29uc3QgaW5wdXQgb2YgdGhpcy5fcm9vdC5xdWVyeVNlbGVjdG9yQWxsKGNzcykpXG4gICAgICAgIHNldHVwSW5wdXQodGhpcywgaW5wdXQpO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgeyB0YXJnZXQsIHR5cGUgfSA9IGV2ZW50O1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKHR5cGUgPT09IFwiY2xpY2tcIikgb25DbGljayh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiZm9jdXNcIiB8fCB0eXBlID09PSBcImZvY3VzaW5cIikgb25Gb2N1cyh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiYmx1clwiIHx8IHR5cGUgPT09IFwiZm9jdXNvdXRcIikgb25CbHVyKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIG9uS2V5RG93bih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIElTX1BSRVNTID0gdGhpcy5jb250YWlucyh0YXJnZXQpO1xuICAgIGlmICh0eXBlID09PSBcIm1vdXNldXBcIikgSVNfUFJFU1MgPSBmYWxzZTtcbiAgICBpZiAodHlwZSA9PT0gXCJtdXRhdGlvblwiIHx8IHR5cGUgPT09IFwiaW5wdXRcIikge1xuICAgICAgY2xlYXJUaW1lb3V0KElOUFVUX0RFQk9VTkNFKTtcbiAgICAgIElOUFVUX0RFQk9VTkNFID0gc2V0VGltZW91dChvbklucHV0LCAwLCB0aGlzLCBldmVudCk7XG4gICAgfVxuICB9XG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidS1vcHRpb25cIik7XG4gIH1cbn07XG52YXIgc2V0RXhwYW5kZWQgPSAoc2VsZiwgb3BlbikgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoc2VsZi5oaWRkZW4gIT09IG9wZW4pIHJldHVybjtcbiAgc2VsZi5oaWRkZW4gPSAhb3BlbjtcbiAgaWYgKHNlbGYuX2lucHV0KSBzZXR1cElucHV0KHNlbGYsIHNlbGYuX2lucHV0LCBvcGVuKTtcbiAgaWYgKHNlbGYucG9wb3ZlciAmJiAoKF9hMiA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmlzQ29ubmVjdGVkKSkge1xuICAgIGF0dHIoc2VsZi5faW5wdXQsIFwicG9wb3ZlcnRhcmdldFwiLCB1c2VJZChzZWxmKSk7XG4gICAgYXR0cihzZWxmLCBcInBvcG92ZXJcIiwgXCJtYW51YWxcIik7XG4gICAgc2VsZi50b2dnbGVQb3BvdmVyKG9wZW4pO1xuICB9XG4gIGlmIChvcGVuKSBvbklucHV0KHNlbGYpO1xufTtcbnZhciBkaXNjb25uZWN0SW5wdXQgPSAoc2VsZikgPT4ge1xuICBpZiAoIXNlbGYuX2lucHV0KSByZXR1cm47XG4gIG9mZihzZWxmLl9pbnB1dCB8fCBzZWxmLCBFVkVOVFNfSU5QVVQsIHNlbGYpO1xuICBvZmYoc2VsZi5fcm9vdCB8fCBzZWxmLCBFVkVOVFMsIHNlbGYpO1xuICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gIHNlbGYuX2lucHV0ID0gdm9pZCAwO1xufTtcbnZhciBzZXR1cElucHV0ID0gKHNlbGYsIGlucHV0LCBvcGVuID0gZmFsc2UpID0+IHtcbiAgb24oaW5wdXQsIEVWRU5UU19JTlBVVCwgc2VsZiwgdHJ1ZSk7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1hdXRvY29tcGxldGVcIiwgXCJsaXN0XCIpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtY29udHJvbHNcIiwgdXNlSWQoc2VsZikpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7SVNfTU9CSUxFID8gb3BlbiA6IFwidHJ1ZVwifWApO1xuICBhdHRyKGlucHV0LCBcImF1dG9jb21wbGV0ZVwiLCBcIm9mZlwiKTtcbiAgYXR0cihpbnB1dCwgXCJyb2xlXCIsIFwiY29tYm9ib3hcIik7XG59O1xudmFyIG9uRm9jdXMgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgaXNJbnB1dCA9IGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQ7XG4gIGlmIChpc0lucHV0ICYmIGV2ZW50LmlzVHJ1c3RlZCkgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gIGlmICghTElWRSkgTElWRSA9IGNyZWF0ZUFyaWFMaXZlKFwiYXNzZXJ0aXZlXCIpO1xuICBpZiAoIUxJVkUuaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoTElWRSk7XG4gIGlmIChzZWxmLl9pbnB1dCAhPT0gZXZlbnQudGFyZ2V0ICYmIGlzSW5wdXQgJiYgZXZlbnQudGFyZ2V0Lmxpc3QgPT09IHNlbGYpIHtcbiAgICBpZiAoc2VsZi5faW5wdXQpIGRpc2Nvbm5lY3RJbnB1dChzZWxmKTtcbiAgICBzZWxmLl9pbnB1dCA9IGV2ZW50LnRhcmdldDtcbiAgICBzZWxmLl9pbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNcIiwgeyB2aWV3OiB3aW5kb3cgfSkpO1xuICAgIHNlbGYuX2lucHV0LmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgRm9jdXNFdmVudChcImZvY3VzaW5cIiwgeyBidWJibGVzOiB0cnVlLCB2aWV3OiB3aW5kb3cgfSlcbiAgICApO1xuICAgIGF0dHIoc2VsZiwgU0FGRV9MQUJFTExFREJZLCB1c2VJZCgoX2EyID0gc2VsZi5faW5wdXQubGFiZWxzKSA9PSBudWxsID8gdm9pZCAwIDogX2EyWzBdKSk7XG4gICAgb24oc2VsZi5fcm9vdCB8fCBzZWxmLCBFVkVOVFMsIHNlbGYpO1xuICAgIHNldEV4cGFuZGVkKHNlbGYsIHRydWUpO1xuICB9XG59O1xudmFyIG9uQmx1ciA9IChzZWxmLCBldmVudCkgPT4ge1xuICBpZiAoIUlTX1BSRVNTKSBzZXRUaW1lb3V0KG9uQmx1cnJlZCwgMCwgc2VsZik7XG4gIGlmIChldmVudC50YXJnZXQgPT09IHNlbGYuX2lucHV0ICYmIGV2ZW50LmlzVHJ1c3RlZClcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbn07XG52YXIgb25CbHVycmVkID0gKHNlbGYpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgcmVsYXRlZFRhcmdldCA9ICgoX2EyID0gc2VsZi5fcm9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5hY3RpdmVFbGVtZW50KSB8fCBudWxsO1xuICBjb25zdCBpbnB1dCA9IHNlbGYuX2lucHV0O1xuICBjb25zdCB2aWV3ID0gd2luZG93O1xuICBpZiAoaW5wdXQgJiYgaW5wdXQgIT09IHJlbGF0ZWRUYXJnZXQgJiYgIXNlbGYuY29udGFpbnMocmVsYXRlZFRhcmdldCkpIHtcbiAgICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiYmx1clwiLCB7IHJlbGF0ZWRUYXJnZXQsIHZpZXcgfSkpO1xuICAgIGlucHV0LmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgRm9jdXNFdmVudChcImZvY3Vzb3V0XCIsIHsgYnViYmxlczogdHJ1ZSwgcmVsYXRlZFRhcmdldCwgdmlldyB9KVxuICAgICk7XG4gICAgZGlzY29ubmVjdElucHV0KHNlbGYpO1xuICB9XG59O1xudmFyIG9uQ2xpY2sgPSAoc2VsZiwgeyB0YXJnZXQgfSkgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoIXNlbGYuX2lucHV0IHx8IHNlbGYuX2lucHV0ID09PSB0YXJnZXQpIHJldHVybiBzZXRFeHBhbmRlZChzZWxmLCB0cnVlKTtcbiAgaWYgKFsuLi5zZWxmLm9wdGlvbnNdLmluY2x1ZGVzKHRhcmdldCkpIHtcbiAgICBpZiAoYXR0cihzZWxmLCBcImFyaWEtbXVsdGlzZWxlY3RhYmxlXCIpICE9PSBcInRydWVcIikge1xuICAgICAgKF9hMiA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKCk7XG4gICAgICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gICAgfVxuICAgIHNldFZhbHVlKHNlbGYuX2lucHV0LCB0YXJnZXQudmFsdWUpO1xuICB9XG59O1xudmFyIGlzVmlzaWJsZSA9IChlbCkgPT4gYXR0cihlbCwgXCJhcmlhLWhpZGRlblwiKSAhPT0gXCJ0cnVlXCI7XG52YXIgb25LZXlEb3duID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LnNoaWZ0S2V5KSByZXR1cm47XG4gIHNldEV4cGFuZGVkKHNlbGYsIGV2ZW50LmtleSAhPT0gXCJFc2NhcGVcIiAmJiBldmVudC5rZXkgIT09IFwiVGFiXCIpO1xuICBjb25zdCB7IGtleSwgdGFyZ2V0IH0gPSBldmVudDtcbiAgY29uc3Qgb3B0aW9ucyA9IFsuLi5zZWxmLm9wdGlvbnNdLmZpbHRlcihpc1Zpc2libGUpO1xuICBjb25zdCBwcmV2ID0gb3B0aW9ucy5pbmRleE9mKHRhcmdldCk7XG4gIGxldCBuZXh0ID0gLTE7XG4gIGlmIChrZXkgPT09IFwiQXJyb3dEb3duXCIpIG5leHQgPSAocHJldiArIDEpICUgb3B0aW9ucy5sZW5ndGg7XG4gIGlmIChrZXkgPT09IFwiQXJyb3dVcFwiKSBuZXh0ID0gKH5wcmV2ID8gcHJldiA6IG9wdGlvbnMubGVuZ3RoKSAtIDE7XG4gIGlmICh+cHJldikge1xuICAgIGlmIChrZXkgPT09IFwiSG9tZVwiIHx8IGtleSA9PT0gXCJQYWdlVXBcIikgbmV4dCA9IDA7XG4gICAgaWYgKGtleSA9PT0gXCJFbmRcIiB8fCBrZXkgPT09IFwiUGFnZURvd25cIikgbmV4dCA9IG9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICBpZiAoa2V5ID09PSBcIkVudGVyXCIpIHtcbiAgICAgIG9wdGlvbnNbcHJldl0uY2xpY2soKTtcbiAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuICBpZiAob3B0aW9uc1tuZXh0XSkgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykgb3B0aW9uLnRhYkluZGV4ID0gLTE7XG4gIGlmIChvcHRpb25zW25leHRdKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAoX2EyID0gb3B0aW9uc1tuZXh0XSB8fCBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xufTtcbnZhciBvbklucHV0ID0gKHNlbGYpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgdmFsdWUgPSAoKF9hMiA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBmaWx0ZXIgPSAhc2VsZi5oYXNBdHRyaWJ1dGUoXCJkYXRhLW5vZmlsdGVyXCIpO1xuICBjb25zdCB2aXNpYmxlID0gW107XG4gIGZvciAoY29uc3Qgb3B0IG9mIHNlbGYub3B0aW9ucykge1xuICAgIGNvbnN0IGhpZGRlbiA9IGAke29wdC5kaXNhYmxlZCB8fCBvcHQuaGlkZGVuIHx8IGZpbHRlciAmJiAhb3B0LmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmFsdWUpfWA7XG4gICAgYXR0cihvcHQsIFwiYXJpYS1oaWRkZW5cIiwgaGlkZGVuKTtcbiAgICBpZiAoaGlkZGVuID09PSBcImZhbHNlXCIgJiYgYXR0cihvcHQsIFwicm9sZVwiKSAhPT0gXCJub25lXCIpIHZpc2libGUucHVzaChvcHQpO1xuICB9XG4gIGNvbnN0IHsgbGVuZ3RoOiB0b3RhbCB9ID0gdmlzaWJsZTtcbiAgY2xlYXJUaW1lb3V0KExJVkVfVElNRVIpO1xuICBMSVZFX1RJTUVSID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgdmFyIF9hMztcbiAgICBpZiAoc2VsZi5oaWRkZW4gfHwgKChfYTMgPSBzZWxmLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EzLmFjdGl2ZUVsZW1lbnQpICE9PSBzZWxmLl9pbnB1dCkgcmV0dXJuO1xuICAgIGNvbnN0IGhpdHNUZXh0ID0gYCR7YCR7c2VsZi5fdGV4dHNbdG90YWwgPT09IDEgPyBcInNpbmd1bGFyXCIgOiBcInBsdXJhbFwiXX1gLnJlcGxhY2UoXCIlZFwiLCBgJHt0b3RhbH1gKX1gO1xuICAgIGNvbnN0IGxpdmVUZXh0ID0gYCR7IXRvdGFsICYmIHNlbGYuaW5uZXJUZXh0LnRyaW0oKSB8fCBoaXRzVGV4dH0keysrTElWRV9TUl9GSVggJSAyID8gXCJcXHhBMFwiIDogXCJcIn1gO1xuICAgIGlmICh2YWx1ZSAhPT0gc2VsZi5fdmFsdWUgJiYgTElWRSkgTElWRS50ZXh0Q29udGVudCA9IGxpdmVUZXh0O1xuICAgIHNlbGYuX3ZhbHVlID0gdmFsdWU7XG4gIH0sIDFlMyk7XG4gIGlmIChJU19JT1MpXG4gICAgdmlzaWJsZS5mb3JFYWNoKChvcHQsIGlkeCkgPT4gYXR0cihvcHQsIFwidGl0bGVcIiwgYCR7aWR4ICsgMX0vJHt0b3RhbH1gKSk7XG59O1xuaWYgKElTX0JST1dTRVIpXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJsaXN0XCIsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gZ2V0Um9vdCh0aGlzKS5nZXRFbGVtZW50QnlJZChhdHRyKHRoaXMsIFwibGlzdFwiKSB8fCBcIlwiKTtcbiAgICB9XG4gIH0pO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1kYXRhbGlzdFwiLCBVSFRNTERhdGFMaXN0RWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MRGF0YUxpc3RFbGVtZW50IH07XG4iLCJpbXBvcnQgeyBVSFRNTENvbWJvYm94RWxlbWVudCB9IGZyb20gXCJAdS1lbGVtZW50cy91LWNvbWJvYm94XCI7XG5pbXBvcnQgeyBVSFRNTERhdGFMaXN0RWxlbWVudCB9IGZyb20gXCJAdS1lbGVtZW50cy91LWRhdGFsaXN0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0UVVJQ0tfRVZFTlQsXG5cdGFuY2hvclBvc2l0aW9uLFxuXHRhdHRyLFxuXHRpc0lucHV0TGlrZSxcblx0b24sXG5cdG9uTG9hZGVkLFxuXHRvbk11dGF0aW9uLFxuXHR1c2VJZCxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19GSUVMRCA9IHN0eWxlcy5maWVsZC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfUFJPUEVSVFlfT1ZFUiA9IFwiLS1tdGRzLXRleHQtY291bnQtb3ZlclwiO1xuY29uc3QgQ1NTX1BST1BFUlRZX1VOREVSID0gXCItLW10ZHMtdGV4dC1jb3VudC11bmRlclwiO1xuY29uc3QgQ1NTX1ZBTElEQVRJT05TID0gc3R5bGVzLnZhbGlkYXRpb24uc3BsaXQoXCIgXCIpO1xuY29uc3QgQ1NTX1ZBTElEQVRJT04gPSBDU1NfVkFMSURBVElPTlNbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKGZpZWxkczogSFRNTENvbGxlY3Rpb25PZjxFbGVtZW50Pikge1xuXHRmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcylcblx0XHRpZiAoZmllbGQuaXNDb25uZWN0ZWQpIHtcblx0XHRcdGNvbnN0IGxhYmVsczogSFRNTExhYmVsRWxlbWVudFtdID0gW107XG5cdFx0XHRjb25zdCBkZXNjczogRWxlbWVudFtdID0gW107XG5cdFx0XHRsZXQgY29tYm9ib3g6IFVIVE1MQ29tYm9ib3hFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdFx0XHRsZXQgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblx0XHRcdGxldCB2YWxpZCA9IHRydWU7XG5cblx0XHRcdGZvciAoY29uc3QgZWwgb2YgZmllbGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpKSB7XG5cdFx0XHRcdGlmIChlbCBpbnN0YW5jZW9mIEhUTUxMYWJlbEVsZW1lbnQpIGxhYmVscy5wdXNoKGVsKTtcblx0XHRcdFx0ZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBVSFRNTENvbWJvYm94RWxlbWVudCkgY29tYm9ib3ggPSBlbDtcblx0XHRcdFx0ZWxzZSBpZiAoaXNJbnB1dExpa2UoZWwpKSBpbnB1dCA9IGVsO1xuXHRcdFx0XHRlbHNlIGlmIChlbC5oYXNBdHRyaWJ1dGUoXCJkYXRhLWRlc2NyaXB0aW9uXCIpKSBkZXNjcy5wdXNoKGVsKTtcblx0XHRcdFx0ZWxzZSBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkge1xuXHRcdFx0XHRcdHZhbGlkID1cblx0XHRcdFx0XHRcdGF0dHIoZWwsIFwiZGF0YS1jb2xvclwiKSA9PT0gXCJzdWNjZXNzXCIgfHxcblx0XHRcdFx0XHRcdCFlbC5jbGllbnRXaWR0aCB8fFxuXHRcdFx0XHRcdFx0IWVsLmNsaWVudEhlaWdodDsgLy8gT25seSBzZXQgaW52YWxpZCBpZiBWYWxpZGF0aW9uIGlzIHZpc2libGVcblx0XHRcdFx0XHRkZXNjcy51bnNoaWZ0KGVsKTtcblx0XHRcdFx0fSBlbHNlIGlmIChlbCBpbnN0YW5jZW9mIEhUTUxQYXJhZ3JhcGhFbGVtZW50KVxuXHRcdFx0XHRcdGRlc2NzLnNvbWUoKGRlc2MpID0+IGRlc2MuY29udGFpbnMoZWwpKSB8fCBkZXNjcy5wdXNoKGVsKTsgLy8gT25seSBhZGQgaWYgbm90IGFscmVhZHkgaW5zaWRlIGRlc2NyaXB0aW9uXG5cdFx0XHR9XG5cblx0XHRcdGlmIChpbnB1dCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGxhYmVsIG9mIGxhYmVscykgbGFiZWwuaHRtbEZvciA9IHVzZUlkKGlucHV0KTtcblx0XHRcdFx0cmVuZGVyQ29tYm9ib3goY29tYm9ib3gpO1xuXHRcdFx0XHRyZW5kZXJDb3VudGVyKGlucHV0KTtcblx0XHRcdFx0cmVuZGVyVGV4dGFyZWFTaXplKGlucHV0KTtcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIGRlc2NzLm1hcCh1c2VJZCkuam9pbihcIiBcIikgfHwgbnVsbCk7IC8vIFJlbW92ZSBpZiBlbXB0eVxuXHRcdFx0XHRhdHRyKGlucHV0LCBcImFyaWEtaW52YWxpZFwiLCBgJHshdmFsaWR9YCk7XG5cdFx0XHR9XG5cdFx0fVxufVxuXG4vLyBpT1MgZG9lcyBub3Qgc3VwcG9ydCBmaWVsZC1zaXppbmc6IGNvbnRlbnQsIHNvIHdlIG5lZWQgdG8gbWFudWFsbHkgcmVzaXplXG5mdW5jdGlvbiByZW5kZXJUZXh0YXJlYVNpemUodGV4dGFyZWE6IEVsZW1lbnQpIHtcblx0aWYgKHRleHRhcmVhIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuXHRcdHRleHRhcmVhLnN0eWxlLnNldFByb3BlcnR5KFwiLS1tdGRzLXRleHRhcmVhLWhlaWdodFwiLCBcImF1dG9cIik7XG5cdFx0dGV4dGFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG5cdFx0XHRcIi0tbXRkcy10ZXh0YXJlYS1oZWlnaHRcIixcblx0XHRcdGAke3RleHRhcmVhLnNjcm9sbEhlaWdodH1weGAsXG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW5kZXJDb21ib2JveChjb21ib2JveDogVUhUTUxDb21ib2JveEVsZW1lbnQgfCBudWxsKSB7XG5cdGlmICghY29tYm9ib3gpIHJldHVybjtcblxuXHQvLyBTZXR1cCB0cmFuc2xhdGlvbnMgZnJvbSBDU1MgY3VzdG9tIHByb3BlcnRpZXNcblx0Y29uc3QgbGlzdCA9IGNvbWJvYm94LnF1ZXJ5U2VsZWN0b3IoXCJ1LWRhdGFsaXN0LGRhdGFsaXN0XCIpO1xuXHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNvbWJvYm94KTtcblx0Y29uc3QgaTExbiA9IChrZXk6IHN0cmluZykgPT4gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShgLS1tdGRzLXRleHQtJHtrZXl9YCk7XG5cblx0aWYgKGxpc3QpIHtcblx0XHRhdHRyKGxpc3QsIFwiZGF0YS1zci1wbHVyYWxcIiwgaTExbihcImRhdGFsaXN0LXBsdXJhbFwiKSk7XG5cdFx0YXR0cihsaXN0LCBcImRhdGEtc3Itc2luZ3VsYXJcIiwgaTExbihcImRhdGFsaXN0LXNpbmd1bGFyXCIpKTtcblx0XHRhdHRyKGxpc3QsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcblx0fVxuXG5cdGF0dHIoY29tYm9ib3gsIFwiZGF0YS1zci1hZGRlZFwiLCBpMTFuKFwiY29tYm9ib3gtYWRkZWRcIikpO1xuXHRhdHRyKGNvbWJvYm94LCBcImRhdGEtc3ItZW1wdHlcIiwgaTExbihcImNvbWJvYm94LWVtcHR5XCIpKTtcblx0YXR0cihjb21ib2JveCwgXCJkYXRhLXNyLWZvdW5kXCIsIGkxMW4oXCJjb21ib2JveC1mb3VuZFwiKSk7XG5cdGF0dHIoY29tYm9ib3gsIFwiZGF0YS1zci1pbnZhbGlkXCIsIGkxMW4oXCJjb21ib2JveC1pbnZhbGlkXCIpKTtcblx0YXR0cihjb21ib2JveCwgXCJkYXRhLXNyLW9mXCIsIGkxMW4oXCJjb21ib2JveC1vZlwiKSk7XG5cdGF0dHIoY29tYm9ib3gsIFwiZGF0YS1zci1yZW1vdmVcIiwgaTExbihcImNvbWJvYm94LXJlbW92ZVwiKSk7XG5cdGF0dHIoY29tYm9ib3gsIFwiZGF0YS1zci1yZW1vdmVkXCIsIGkxMW4oXCJjb21ib2JveC1yZW1vdmVkXCIpKTtcblx0YXR0cihjb21ib2JveCwgXCJkYXRhLXNyLXJlbW92ZWRcIiwgaTExbihcImNvbWJvYm94LXJlbW92ZWRcIikpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJDb3VudGVyKGlucHV0OiBIVE1MSW5wdXRFbGVtZW50KSB7XG5cdGNvbnN0IGVsID0gaW5wdXQ/Lm5leHRFbGVtZW50U2libGluZztcblx0Y29uc3QgbGltaXQgPSBlbCAmJiBhdHRyKGVsLCBcImRhdGEtY291bnRcIik7XG5cblx0aWYgKGVsICYmIGxpbWl0KSB7XG5cdFx0Y29uc3QgcmVtYWluZGVyID0gTnVtYmVyKGxpbWl0KSAtIGlucHV0LnZhbHVlLmxlbmd0aDtcblx0XHRjb25zdCBuZXh0SW52YWxpZCA9IHJlbWFpbmRlciA8IDA7XG5cdFx0Y29uc3QgcHJldkludmFsaWQgPSBhdHRyKGVsLCBcImFyaWEtbGl2ZVwiKSA9PT0gXCJwb2xpdGVcIjtcblx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsIHx8IGlucHV0KTtcblx0XHRjb25zdCBvdmVyID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShDU1NfUFJPUEVSVFlfT1ZFUik/LnNsaWNlKDEsIC0xKSB8fCBcIlwiOyAvLyBzbGljZSB0byB0cmltIHF1b3Rlc1xuXHRcdGNvbnN0IHVuZGVyID1cblx0XHRcdHN0eWxlLmdldFByb3BlcnR5VmFsdWUoQ1NTX1BST1BFUlRZX1VOREVSKT8uc2xpY2UoMSwgLTEpIHx8IFwiXCI7IC8vIHNsaWNlIHRvIHRyaW0gcXVvdGVzXG5cblx0XHRpZiAocHJldkludmFsaWQgIT09IG5leHRJbnZhbGlkKSB7XG5cdFx0XHRhdHRyKGVsLCBcImFyaWEtbGl2ZVwiLCBuZXh0SW52YWxpZCA/IFwicG9saXRlXCIgOiBcIm9mZlwiKTtcblx0XHRcdGZvciAoY29uc3QgY3NzIG9mIENTU19WQUxJREFUSU9OUykgZWwuY2xhc3NMaXN0LnRvZ2dsZShjc3MsIG5leHRJbnZhbGlkKTtcblx0XHR9XG5cdFx0ZWwudGV4dENvbnRlbnQgPSAobmV4dEludmFsaWQgPyBvdmVyIDogdW5kZXIpLnJlcGxhY2UoXG5cdFx0XHRcIiVkXCIsXG5cdFx0XHRgJHtNYXRoLmFicyhyZW1haW5kZXIpfWAsXG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBoYW5kbGVUb2dnbGUoeyB0YXJnZXQ6IGVsLCBuZXdTdGF0ZSB9OiBFdmVudCAmIHsgbmV3U3RhdGU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBVSFRNTERhdGFMaXN0RWxlbWVudCkge1xuXHRcdGNvbnN0IHJvb3QgPSBlbC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QgfCBudWxsO1xuXHRcdGNvbnN0IGFuY2hvciA9IHJvb3Q/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxuXHRcdFx0YFtwb3BvdmVydGFyZ2V0PVwiJHtlbC5pZH1cIl1gLFxuXHRcdCk7XG5cblx0XHRpZiAobmV3U3RhdGUgPT09IFwiY2xvc2VkXCIpIGFuY2hvclBvc2l0aW9uKGVsLCBmYWxzZSk7XG5cdFx0ZWxzZSBpZiAoYW5jaG9yKSB7XG5cdFx0XHRlbC5zdHlsZS53aWR0aCA9IGAke2FuY2hvci5jbGllbnRXaWR0aH1weGA7XG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgYW5jaG9yLCBcImJvdHRvbVwiLCB0cnVlKTtcblx0XHR9XG5cdH1cbn1cbi8vIFVwZGF0ZSB3aGVuIHR5cGluZ1xuZnVuY3Rpb24gaGFuZGxlSW5wdXQoeyB0YXJnZXQgfTogRXZlbnQpIHtcblx0aWYgKGlzSW5wdXRMaWtlKHRhcmdldCkpIHtcblx0XHRyZW5kZXJDb3VudGVyKHRhcmdldCk7XG5cdFx0cmVuZGVyVGV4dGFyZWFTaXplKHRhcmdldCk7XG5cdH1cbn1cblxuLy8gUHJldmVudCBicm93c2VycyBmcm9tIHNob3dpbmcgZGVmYXVsdCB2YWxpZGF0aW9uIGJ1YmJsZXNcbmZ1bmN0aW9uIGhhbmRsZUludmFsaWQoZXZlbnQ6IEV2ZW50KSB7XG5cdGlmICgoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oYC4ke0NTU19GSUVMRH1gKSlcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfRklFTEQsIGhhbmRsZU11dGF0aW9uKTtcblx0b24oZG9jdW1lbnQsIFwiaW5wdXRcIiwgaGFuZGxlSW5wdXQsIFFVSUNLX0VWRU5UKTtcblx0b24oZG9jdW1lbnQsIFwiaW52YWxpZFwiLCBoYW5kbGVJbnZhbGlkLCB0cnVlKTsgLy8gVXNlIGNhcHR1cmUgYXMgaW52YWxpZCBkb2VzIG5vZSBidWJibGVcblx0b24oZG9jdW1lbnQsIFwidG9nZ2xlXCIsIGhhbmRsZVRvZ2dsZSwgUVVJQ0tfRVZFTlQpOyAvLyBVc2UgY2FwdHVyZSBzaW5jZSB0b2dnbGUgZG9lcyBub3QgYnViYmxlXG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBpc0lucHV0TGlrZSwgb25Mb2FkZWQsIG9uTXV0YXRpb24sIHVzZUlkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19GSUVMRFNFVCA9IHN0eWxlcy5maWVsZHNldC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVkFMSURBVElPTiA9IHN0eWxlcy52YWxpZGF0aW9uLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oZmllbGRzZXRzOiBIVE1MQ29sbGVjdGlvbk9mPEVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgZmllbGRzZXQgb2YgZmllbGRzZXRzKVxuXHRcdGlmIChmaWVsZHNldC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0Y29uc3QgaW5wdXRzOiBIVE1MSW5wdXRFbGVtZW50W10gPSBbXTtcblx0XHRcdGxldCB2YWxpZGF0aW9uSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGVsIG9mIGZpZWxkc2V0LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSkge1xuXHRcdFx0XHRpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkgdmFsaWRhdGlvbklkID0gdXNlSWQoZWwpO1xuXHRcdFx0XHRlbHNlIGlmIChpc0lucHV0TGlrZShlbCkpIGlucHV0cy5wdXNoKGVsKTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCBpbnB1dCBvZiBpbnB1dHMpIHtcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIHZhbGlkYXRpb25JZCk7XG5cdFx0XHRcdGF0dHIoaW5wdXQsIFwiYXJpYS1pbnZhbGlkXCIsIGAkeyEhdmFsaWRhdGlvbklkfWApO1xuXHRcdFx0fVxuXHRcdH1cbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRFNFVCwgaGFuZGxlTXV0YXRpb24pLFxuKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfTE9HTyA9IHN0eWxlcy5sb2dvLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oW2xvZ29dOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRpZiAobG9nbz8uaXNDb25uZWN0ZWQgJiYgbG9nbz8uZmlyc3RFbGVtZW50Q2hpbGQgaW5zdGFuY2VvZiBTVkdTVkdFbGVtZW50KSB7XG5cdFx0Zm9yIChjb25zdCBpY29uIG9mIGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvckFsbChcImxpbmtbcmVsfj0naWNvbiddXCIpKVxuXHRcdFx0aWNvbi5zZXRBdHRyaWJ1dGUoXCJyZWxcIiwgXCJkaXNhYmxlZFwiKTsgLy8gRGlzYWJsZSBwcmV2aW91cyBpY29uIChidXQgbm90IHJlbW92ZSBpcyBhcyB0aGlzIG1ha2VzIE5leHQuanMgc2FkKVxuXG5cdFx0Y29uc3Qgc3ZnID0gbG9nby5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRjb25zdCBpc0RvdCA9IGxvZ28/Lmhhc0F0dHJpYnV0ZShcImRhdGEtZW52XCIpO1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoc3ZnKTtcblx0XHRjb25zdCB0ZXh0ID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcImNvbG9yXCIpO1xuXHRcdGNvbnN0IGJhY2sgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1tdGRzLWxvZ28tY29sb3JcIik7XG5cdFx0Y29uc3QgaWNvbiA9IHN2Zy5vdXRlckhUTUxcblx0XHRcdC5yZXBsYWNlKC9cXG4rL2csIFwiIFwiKSAvLyBQcmV2ZW50IGxpbmUgYnJlYWtzXG5cdFx0XHQucmVwbGFjZSgvKGZpbGx8d2lkdGh8aGVpZ2h0fHhtbG5zKT1cIlteXCJdK1wiL2dpLCBcIlwiKVxuXHRcdFx0LnJlcGxhY2UoXCI8c3ZnXCIsIGA8c3ZnIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIGZpbGw9XCIke3RleHR9XCJgKTtcblxuXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoXG5cdFx0XHRPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpLCB7XG5cdFx0XHRcdGhyZWY6IGBkYXRhOmltYWdlL3N2Zyt4bWwsJHtlbmNvZGVVUklDb21wb25lbnQoYDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNTUgNTUnPjxyZWN0IGZpbGw9JyR7aXNEb3QgPyBcIm5vbmVcIiA6IGJhY2t9JyB3aWR0aD0nNTEnIGhlaWdodD0nNTEnIHg9JzInIHk9JzInIHN0cm9rZT0nJHt0ZXh0fScgc3Ryb2tlLWRhc2hhcnJheT0nMC4wOSA2LjM4JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1vcGFjaXR5PScke2lzRG90ID8gMC42IDogMH0nIHN0cm9rZS13aWR0aD0nMi4zJyByeD0nMjUuNScvPjxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg3LjUgNy41KVwiPiR7aWNvbn08L2c+PC9zdmc+YCl9YCxcblx0XHRcdFx0cmVsOiBcImljb25cIixcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19MT0dPLCBoYW5kbGVNdXRhdGlvbikpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFFVSUNLX0VWRU5ULCBhbmNob3JQb3NpdGlvbiwgYXR0ciwgb24sIG9uTG9hZGVkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19QT1BPVkVSID0gc3R5bGVzLnBvcG92ZXIuc3BsaXQoXCIgXCIpWzBdO1xubGV0IE9QRU5fUE9QT1ZFUlMgPSAwOyAvLyBTcGVlZCB1cCBieSBvbmx5IGNoZWNraW5nIGNsaWNrcyBpZiB3ZSBoYXZlIG9wZW4gcG9wb3ZlcnNcblxuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlKHsgdGFyZ2V0OiBlbCwgbmV3U3RhdGUgfTogRXZlbnQgJiB7IG5ld1N0YXRlPzogc3RyaW5nIH0pIHtcblx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19QT1BPVkVSKSkge1xuXHRcdGNvbnN0IGFuY2hvciA9IChlbC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QpPy5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pihcblx0XHRcdGBbcG9wb3ZlcnRhcmdldD1cIiR7ZWwuaWR9XCJdYCxcblx0XHQpO1xuXG5cdFx0aWYgKG5ld1N0YXRlID09PSBcImNsb3NlZFwiKSB7XG5cdFx0XHRPUEVOX1BPUE9WRVJTIC09IDE7XG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgZmFsc2UpO1xuXHRcdH0gZWxzZSBpZiAoYW5jaG9yKSB7XG5cdFx0XHRPUEVOX1BPUE9WRVJTICs9IDE7XG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgYW5jaG9yLCBhdHRyKGVsLCBcImRhdGEtcG9zaXRpb25cIikgfHwgXCJib3R0b21cIik7XG5cdFx0fVxuXHR9XG59XG5cbi8vIFBvbHlmaWxsIHBvcG92ZXJ0YXJnZXQgZm9yIDxhPiAobm90IHN1cHBvcnRlZCBieSBuYXRpdmUpXG4vLyBhbmQgYXV0b21hdGljYWxseSBhc3N1bWUgcG9wb3ZlcnRhcmdldCBpcyB0aGUgY2xvc2VzdCBwYXJlbnQgcG9wb3ZlclxuLy8gYnV0IHJlc3BlY3QgdGhlIHBvcG92ZXJ0YXJnZXQgYW5kIHBvcG92ZXJ0YXJnZXRhY3Rpb24gYXR0cmlidXRlXG5mdW5jdGlvbiBoYW5kbGVMaW5rQ2xpY2soeyB0YXJnZXQgfTogRXZlbnQpIHtcblx0Y29uc3QgY2xvc2UgPVxuXHRcdE9QRU5fUE9QT1ZFUlMgJiYgKHRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKFwiYSxbcG9wb3ZlcnRhcmdldGFjdGlvbl1cIik7XG5cblx0aWYgKGNsb3NlKSB7XG5cdFx0Y29uc3QgYWN0aW9uID0gYXR0cihjbG9zZSwgXCJwb3BvdmVydGFyZ2V0YWN0aW9uXCIpIHx8IFwidG9nZ2xlXCI7XG5cdFx0Y29uc3Qgb3BlbiA9IGFjdGlvbiA9PT0gXCJzaG93XCIgfHwgKGFjdGlvbiA9PT0gXCJoaWRlXCIgPyBmYWxzZSA6IHVuZGVmaW5lZCk7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXR0cihjbG9zZSwgXCJwb3BvdmVydGFyZ2V0XCIpIHx8IFwiXCIpO1xuXHRcdGNvbnN0IHBvcG92ZXIgPSAodGFyZ2V0IHx8IGNsb3NlKS5jbG9zZXN0PEhUTUxFbGVtZW50PihgLiR7Q1NTX1BPUE9WRVJ9YCk7XG5cblx0XHQvLyBQb3BvdmVyIGNhbiBiZSBkaXNjb25uZXRlZCBieSBjbGljayBoYW5kbGVyIGRlZXBlciBkb3duIGluIHRoZSBET00gdGhyZWUgYmVmb3JlIHJlYWNoaW5nIGRvY3VtZW50XG5cdFx0aWYgKHBvcG92ZXI/LmlzQ29ubmVjdGVkICYmIHBvcG92ZXI/LnRvZ2dsZVBvcG92ZXIpXG5cdFx0XHRwb3BvdmVyLnRvZ2dsZVBvcG92ZXIob3Blbik7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJ0b2dnbGVcIiwgaGFuZGxlVG9nZ2xlLCBRVUlDS19FVkVOVCk7IC8vIFVzZSBjYXB0dXJlIHNpbmNlIHRvZ2dsZSBkb2VzIG5vdCBidWJibGVcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlTGlua0NsaWNrKTsgLy8gQWxsb3cgYDxhPmAgdG8gdXNlIGBwb3BvdmVydGFyZ2V0YCBhcyB3ZWxsXG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfVEFCTEUgPSBzdHlsZXMudGFibGUuc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbih0YWJsZXM6IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTFRhYmxlRWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCB0YWJsZSBvZiB0YWJsZXMpIHtcblx0XHRjb25zdCB0aHM6IHN0cmluZ1tdID0gW107IC8vIEFkZCBkYXRhLXRoPVwiXCIgdG8gZWFjaCBjZWxsIHRvIHN1cHBvcnQgZGF0YS1tb2JpbGUgZGVzaWduc1xuXG5cdFx0YXR0cih0YWJsZSwgXCJyb2xlXCIsIFwidGFibGVcIik7IC8vIEFkZCBoZWxwaW5nIHJvbGU9XCJcIiB0byBlbnN1cmUgc2NyZWVuIHJlYWRlcnMgdW5kZXJzdGFuZCB0aGUgdGFibGUgcmVnYXJkbGVzcyBvZiBDU1MgZGlzcGxheVxuXHRcdGlmICh0YWJsZS5jYXB0aW9uKSBhdHRyKHRhYmxlLmNhcHRpb24sIFwicm9sZVwiLCBcImNhcHRpb25cIik7XG5cdFx0Zm9yIChjb25zdCBncm91cCBvZiBbdGFibGUudEhlYWQsIHRhYmxlLnRGb290LCAuLi50YWJsZS50Qm9kaWVzXSlcblx0XHRcdGlmIChncm91cCkge1xuXHRcdFx0XHRhdHRyKGdyb3VwLCBcInJvbGVcIiwgXCJyb3dncm91cFwiKTtcblx0XHRcdFx0Y29uc3QgaXNUYm9keSA9IGdyb3VwLm5vZGVOYW1lID09PSBcIlRCT0RZXCI7XG5cblx0XHRcdFx0Zm9yIChjb25zdCByb3cgb2YgZ3JvdXAucm93cykge1xuXHRcdFx0XHRcdGF0dHIocm93LCBcInJvbGVcIiwgXCJyb3dcIik7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjZWxsIG9mIHJvdy5jZWxscykge1xuXHRcdFx0XHRcdFx0aWYgKGlzVGJvZHkpIGF0dHIoY2VsbCwgXCJkYXRhLXRoXCIsIHRoc1tjZWxsLmNlbGxJbmRleF0gfHwgXCI6ZW1wdHlcIik7XG5cdFx0XHRcdFx0XHRlbHNlIHRocy5wdXNoKGNlbGwuaW5uZXJUZXh0LnRyaW0oKSk7IC8vIFVzaW5nIGlubmVyVGV4dCB0byBvbmx5IGluY2x1ZGUgdmlzaWJsZSB0ZXh0XG5cdFx0XHRcdFx0XHRpZiAoY2VsbC5ub2RlTmFtZSA9PT0gXCJURFwiKSBhdHRyKGNlbGwsIFwicm9sZVwiLCBcImNlbGxcIik7XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0YXR0cihjZWxsLCBcInJvbGVcIiwgaXNUYm9keSA/IFwicm93aGVhZGVyXCIgOiBcImNvbHVtbmhlYWRlclwiKTtcblx0XHRcdFx0XHRcdFx0YXR0cihjZWxsLCBcInNjb3BlXCIsIGlzVGJvZHkgPyBcInJvd1wiIDogXCJjb2xcIik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19UQUJMRSwgaGFuZGxlTXV0YXRpb24pKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBvbiwgb25Mb2FkZWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1RPR0dMRUdST1VQID0gYC4ke3N0eWxlcy50b2dnbGVncm91cC5zcGxpdChcIiBcIilbMF19YDtcblxuLy8gUHJldmVudCBicm93c2VycyBmcm9tIHNob3dpbmcgZGVmYXVsdCB2YWxpZGF0aW9uIGJ1YmJsZXNcbmZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQ6IEV2ZW50ICYgUGFydGlhbDxLZXlib2FyZEV2ZW50Pikge1xuXHRjb25zdCB7IGtleSwgdGFyZ2V0OiBlbCB9ID0gZXZlbnQ7XG5cdGNvbnN0IGdyb3VwID0gZWwgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIGVsLmNsb3Nlc3QoQ1NTX1RPR0dMRUdST1VQKTtcblxuXHRpZiAoIWdyb3VwKSByZXR1cm47XG5cdGlmIChrZXkgPT09IFwiRW50ZXJcIikgZWwuY2xpY2soKTtcblx0aWYgKGtleT8uc3RhcnRzV2l0aChcIkFycm93XCIpKSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRjb25zdCBpbnB1dHMgPSBncm91cC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpO1xuXHRcdGNvbnN0IGluZGV4ID0gWy4uLmlucHV0c10uaW5kZXhPZihlbCk7XG5cdFx0Y29uc3QgbW92ZSA9IGtleS5tYXRjaCgvQXJyb3coUmlnaHR8RG93bikvKSA/IDEgOiAtMTtcblx0XHRpbnB1dHNbKGlucHV0cy5sZW5ndGggKyBpbmRleCArIG1vdmUpICUgaW5wdXRzLmxlbmd0aF0/LmZvY3VzKCk7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb24oZG9jdW1lbnQsIFwia2V5ZG93blwiLCBoYW5kbGVLZXlEb3duKSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0SVNfQlJPV1NFUixcblx0UVVJQ0tfRVZFTlQsXG5cdGFuY2hvclBvc2l0aW9uLFxuXHRhdHRyLFxuXHRvbixcblx0b25Mb2FkZWQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBERVNDUklCRURCWSA9IFwiYXJpYS1kZXNjcmliZWRieVwiO1xuY29uc3QgRVNDID0gXCJFc2NhcGVcIjtcbmNvbnN0IExBQkVMTEVEQlkgPSBcImFyaWEtbGFiZWxsZWRieVwiO1xuY29uc3QgUE9TSVRJT05fQ1NTX1BST1BFUlRZID0gXCItLW10ZHMtdG9vbHRpcC1wb3NpdGlvblwiO1xuY29uc3QgVEhST1RUTEVfREVMQVkgPSAzMDA7XG5jb25zdCBUT09MVElQID0gSVNfQlJPV1NFUlxuXHQ/IE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwge1xuXHRcdFx0Y2xhc3NOYW1lOiBzdHlsZXMuX3Rvb2x0aXAsXG5cdFx0XHRpZDogXCJtdGRzLXRvb2x0aXBcIixcblx0XHRcdHBvcG92ZXI6IFwibWFudWFsXCIsXG5cdFx0fSlcblx0OiBudWxsOyAvLyBDcmVhdGUgYSBkdW1teSBlbGVtZW50IHRvIGF2b2lkIG51bGwgY2hlY2tzXG5cbmxldCBBTkNIT1I6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbmxldCBMQVNUX0NBTEwgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5sZXQgVEhST1RUTEU6IG51bWJlciB8IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+ID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlTW92ZSh7IHRhcmdldCwgdHlwZSwga2V5IH06IEV2ZW50ICYgeyBrZXk/OiBzdHJpbmcgfSkge1xuXHRpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIgJiYga2V5ICE9PSBFU0MpIHJldHVybjsgLy8gQWxsb3cgRVNDIGRpc21pc3MgdG8gZm9sbG93IGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvQVJJQS9hcGcvcGF0dGVybnMvdG9vbHRpcC9cblx0Y29uc3Qgd2FpdCA9IExBU1RfQ0FMTCArIFRIUk9UVExFX0RFTEFZIC0gRGF0ZS5ub3coKTtcblx0Y2xlYXJUaW1lb3V0KFRIUk9UVExFKTtcblx0VEhST1RUTEUgPSBzZXRUaW1lb3V0KFxuXHRcdGhhbmRsZU1vdmVUaHJvdHRsZWQsXG5cdFx0TWF0aC5tYXgod2FpdCwgMCksXG5cdFx0a2V5ID09PSBFU0MgPyBudWxsIDogdGFyZ2V0LFxuXHQpO1xufVxuXG4vLyBVc2luZyBhIHRocm90dGxlZCBmdW5jdGlvbiB0byBhdm9pZCBwZXJmb3JtYW5jZSBpc3N1ZXNcbmZ1bmN0aW9uIGhhbmRsZU1vdmVUaHJvdHRsZWQodGFyZ2V0OiBFbGVtZW50IHwgbnVsbCkge1xuXHRMQVNUX0NBTEwgPSBEYXRlLm5vdygpO1xuXG5cdC8vIEJ1aWxkIGFuZCBhcHBlbmQgdG9vbHRpcCBpZiBub3QgZXhpc3Rpbmdcblx0aWYgKCFUT09MVElQIHx8IHRhcmdldCA9PT0gVE9PTFRJUCkgcmV0dXJuOyAvLyBBbGxvdyB0b29sdGlwIHRvIGJlIGhvdmVyZWQsIGZvbGxvd2luZyBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIxLyNjb250ZW50LW9uLWhvdmVyLW9yLWZvY3VzXG5cdGlmICghVE9PTFRJUD8uaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKFRPT0xUSVApOyAvLyBFbnN1cmUgY29ubmVjdGVkXG5cdGxldCBhbmNob3IgPSB0YXJnZXQ/LmNsb3Nlc3Q/LjxFbGVtZW50PihcIltkYXRhLXRvb2x0aXBdXCIpIHx8IG51bGw7XG5cblx0Ly8gTm8gbmVlZCB0byB1cGRhdGVcblx0aWYgKGFuY2hvciA9PT0gQU5DSE9SKSByZXR1cm47XG5cblx0Y29uc3QgY29udGVudCA9IChhbmNob3IgJiYgYXR0cihhbmNob3IsIFwiZGF0YS10b29sdGlwXCIpKSB8fCBcIlwiO1xuXHRjb25zdCBwb3NpdGlvbiA9XG5cdFx0KGFuY2hvciAmJiBhdHRyKGFuY2hvciwgXCJkYXRhLXRvb2x0aXAtcG9zaXRpb25cIikpIHx8XG5cdFx0d2luZG93XG5cdFx0XHQuZ2V0Q29tcHV0ZWRTdHlsZShhbmNob3IgfHwgZG9jdW1lbnQuYm9keSlcblx0XHRcdC5nZXRQcm9wZXJ0eVZhbHVlKFBPU0lUSU9OX0NTU19QUk9QRVJUWSlcblx0XHRcdD8udHJpbSgpIHx8XG5cdFx0XCJ0b3BcIjtcblxuXHRjb25zdCBpc0hpZGRlbiA9XG5cdFx0IWNvbnRlbnQgfHxcblx0XHRjb250ZW50ID09PSBcImZhbHNlXCIgfHxcblx0XHRjb250ZW50ID09PSBcInRydWVcIiB8fFxuXHRcdHBvc2l0aW9uID09PSBcIm5vbmVcIjtcblxuXHRpZiAoaXNIaWRkZW4pIGFuY2hvciA9IG51bGw7IC8vIERvIG5vdCBzaG93IHRvb2x0aXAgaWYgYm9vbGlzaCB2YWx1ZVxuXHRpZiAoYW5jaG9yKSBUT09MVElQLnRleHRDb250ZW50ID0gY29udGVudDsgLy8gT25seSB1cGRhdGUgY29udGVudCBpZiBuZXcgYW5jaG9yXG5cblx0Y29uc3QgaGFkTGFiZWwgPSBBTkNIT1IgJiYgYXR0cihBTkNIT1IsIExBQkVMTEVEQlkpID09PSBUT09MVElQPy5pZDtcblx0Y29uc3QgaGFzTGFiZWwgPVxuXHRcdChhbmNob3IgaW5zdGFuY2VvZiBIVE1MRWxlbWVudFxuXHRcdFx0PyBhbmNob3IuaW5uZXJUZXh0XG5cdFx0XHQ6IGFuY2hvcj8udGV4dENvbnRlbnRcblx0XHQpPy50cmltKCkgfHxcblx0XHRhbmNob3I/Lmhhc0F0dHJpYnV0ZShMQUJFTExFREJZKSB8fFxuXHRcdGFuY2hvcj8uaGFzQXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKTtcblxuXHRBTkNIT1I/LnJlbW92ZUF0dHJpYnV0ZShoYWRMYWJlbCA/IExBQkVMTEVEQlkgOiBERVNDUklCRURCWSk7IC8vIFVubGluayBwcmV2aW91cyBhbmNob3Jcblx0YW5jaG9yUG9zaXRpb24oVE9PTFRJUCwgZmFsc2UpOyAvLyBSZXNldCBhbmNob3IgcG9zaXRpb25cblxuXHRBTkNIT1IgPSBhbmNob3I7IC8vIFN0b3JlIG5ldyBhbmNob3IgLSBtaWdodCBiZSBudWxsIGlmIG5vIG5ldyBhbmNob3Jcblx0aWYgKEFOQ0hPUikgYXR0cihBTkNIT1IsIGhhc0xhYmVsID8gREVTQ1JJQkVEQlkgOiBMQUJFTExFREJZLCBUT09MVElQPy5pZCk7IC8vIFVzZSB0b29sdGlwIGFzIGRlc2NyaXB0aW9uIGlmIGFsbHJlYWR5IGhhcyBsYWJlbFxuXHRUT09MVElQLnRvZ2dsZVBvcG92ZXIoISFhbmNob3IpO1xuXHRhbmNob3JQb3NpdGlvbihUT09MVElQLCBhbmNob3IgfHwgZmFsc2UsIHBvc2l0aW9uKTtcbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJibHVyLGZvY3VzLG1vdXNlb3V0LG1vdXNlb3ZlclwiLCBoYW5kbGVNb3ZlLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJrZXlkb3duXCIsIGhhbmRsZU1vdmUsIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcImJsdXJcIiwgaGFuZGxlTW92ZSwgUVVJQ0tfRVZFTlQpO1xufSk7XG4iLCIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgX2EyO1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIChfYTIgPSBlbC5nZXRBdHRyaWJ1dGUobmFtZSkpICE9IG51bGwgPyBfYTIgOiBudWxsO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIGFzQnV0dG9uID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGlzQ2xpY2sgPSBcImtleVwiIGluIGV2ZW50ICYmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKTtcbiAgaWYgKGlzQ2xpY2spIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGlmIChpc0NsaWNrICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBldmVudC50YXJnZXQuY2xpY2soKTtcbiAgcmV0dXJuIGlzQ2xpY2s7XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIGlmIChhdHRycykgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJzKSkgYXR0cihlbCwga2V5LCB2YWwpO1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcblxuLy8gdS1kZXRhaWxzLnRzXG52YXIgVUhUTUxEZXRhaWxzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvLyBVc2luZyB1bmRlcnNjb3JlIGluc3RlYWQgb2YgcHJpdmF0ZSBmaWVsZHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgdGhpcy5fY29udGVudCA9IG51bGw7XG4gICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IG5hbWU6IFwic3VtbWFyeVwiIH0pLFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBwYXJ0OiBcImRldGFpbHMtY29udGVudFwiIH0pLFxuICAgICAgY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgJHtESVNQTEFZX0JMT0NLfVxuICAgICAgICA6OnNsb3R0ZWQodS1zdW1tYXJ5KSB7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogYmxvY2sgfVxuXHRcdFx0XHQ6OnNsb3R0ZWQodS1zdW1tYXJ5KTo6YmVmb3JlIHsgY29udGVudDogJyc7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgbWFyZ2luLWlubGluZTogLjA1ZW0gLjMxMjVlbTsgYm9yZGVyLWJsb2NrOiAuMzEyNWVtIHNvbGlkIHRyYW5zcGFyZW50OyBib3JkZXItaW5saW5lLXN0YXJ0OiAuNWVtIHNvbGlkIH1cblx0XHRcdFx0OjpzbG90dGVkKHUtc3VtbWFyeVthcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXSk6OmJlZm9yZSB7IHJvdGF0ZTogOTBkZWcgfVxuXHRcdFx0XHQ6aG9zdCA+IFtwYXJ0PVwiZGV0YWlscy1jb250ZW50XCJdOm5vdChbaGlkZGVuPVwiXCJdKSB7IGRpc3BsYXk6IGJsb2NrIH1gXG4gICAgICApXG4gICAgKTtcbiAgfVxuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wib3BlblwiXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB2YXIgX2EyO1xuICAgIHRoaXMuX2NvbnRlbnQgPSAoX2EyID0gdGhpcy5zaGFkb3dSb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNoaWxkcmVuWzFdO1xuICAgIG9uKHRoaXMuX2NvbnRlbnQsIFwiYmVmb3JlbWF0Y2hcIiwgdGhpcyk7XG4gICAgb24odGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMuX2NvbnRlbnQpIG9mZih0aGlzLl9jb250ZW50LCBcImJlZm9yZW1hdGNoXCIsIHRoaXMpO1xuICAgIG9mZih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgdGhpcy5fY29udGVudCA9IG51bGw7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIHByZXYsIG5leHQpIHtcbiAgICBjb25zdCBoaWRlID0gXCJvbmJlZm9yZW1hdGNoXCIgaW4gdGhpcyA/IFwidW50aWwtZm91bmRcIiA6IHRydWU7XG4gICAgY29uc3Qgb3BlbiA9IHRoaXMub3BlbjtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIHRoaXMuY2hpbGRyZW4pXG4gICAgICBpZiAoZWwubm9kZU5hbWUgPT09IFwiVS1TVU1NQVJZXCIpIGF0dHIoZWwsIFwiYXJpYS1leHBhbmRlZFwiLCBgJHtvcGVufWApO1xuICAgIGlmICh0aGlzLl9jb250ZW50KSB7XG4gICAgICBhdHRyKHRoaXMuX2NvbnRlbnQsIFwiYXJpYS1oaWRkZW5cIiwgYCR7IW9wZW59YCk7XG4gICAgICB0aGlzLl9jb250ZW50LmhpZGRlbiA9IG9wZW4gPyBmYWxzZSA6IGhpZGU7XG4gICAgfVxuICAgIGlmIChvcGVuICYmIHRoaXMubmFtZSkge1xuICAgICAgY29uc3QgdURldGFpbHNMaXN0ID0gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgJHt0aGlzLm5vZGVOYW1lfVtuYW1lPVwiJHt0aGlzLm5hbWV9XCJdYFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgdURldGFpbHMgb2YgdURldGFpbHNMaXN0KVxuICAgICAgICBpZiAodURldGFpbHMgIT09IHRoaXMpIHVEZXRhaWxzLm9wZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHByb3AgPT09IFwib3BlblwiICYmIHByZXYgPT09IG51bGwgIT09IChuZXh0ID09PSBudWxsKSlcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJ0b2dnbGVcIikpO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3Qgc3VtbWFyeSA9IHRoaXMucXVlcnlTZWxlY3RvcihcIjpzY29wZSA+IHUtc3VtbWFyeVwiKTtcbiAgICBjb25zdCBpc1N1bW1hcnkgPSBzdW1tYXJ5ID09IG51bGwgPyB2b2lkIDAgOiBzdW1tYXJ5LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJiZWZvcmVtYXRjaFwiKSB0aGlzLm9wZW4gPSB0cnVlO1xuICAgIGlmIChpc1N1bW1hcnkgJiYgZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIGFzQnV0dG9uKGV2ZW50KTtcbiAgICBpZiAoaXNTdW1tYXJ5ICYmIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikgdGhpcy5vcGVuID0gIXRoaXMub3BlbjtcbiAgfVxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJvcGVuXCIpO1xuICB9XG4gIHNldCBvcGVuKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcIm9wZW5cIiwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgXCJuYW1lXCIpIHx8IFwiXCI7XG4gIH1cbiAgc2V0IG5hbWUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwibmFtZVwiLCB2YWx1ZSk7XG4gIH1cbn07XG52YXIgVUhUTUxTdW1tYXJ5RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJidXR0b25cIik7XG4gICAgdGhpcy5zbG90ID0gXCJzdW1tYXJ5XCI7XG4gICAgdGhpcy50YWJJbmRleCA9IDA7XG4gIH1cbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWRldGFpbHNcIiwgVUhUTUxEZXRhaWxzRWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXN1bW1hcnlcIiwgVUhUTUxTdW1tYXJ5RWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MRGV0YWlsc0VsZW1lbnQsIFVIVE1MU3VtbWFyeUVsZW1lbnQgfTtcbiIsIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19GSVJFRk9YID0gSVNfQlJPV1NFUiAmJiAvZmlyZWZveC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfSU9TID0gSVNfQlJPV1NFUiAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZ2V0TGFiZWwgPSAoZWwpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9IGdldFJvb3QoZWwpO1xuICBjb25zdCBsYWJlbCA9IGF0dHIoZWwsIFwiYXJpYS1sYWJlbFwiKSB8fCBcIlwiO1xuICBjb25zdCBsYWJlbHMgPSAoKF9hMiA9IGF0dHIoZWwsIFwiYXJpYS1sYWJlbGxlZGJ5XCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKS5zcGxpdCgvXFxzKy8pKSB8fCBbXTtcbiAgcmV0dXJuIFtcbiAgICAuLi5sYWJlbHMubWFwKChpZDIpID0+IHJvb3QgPT0gbnVsbCA/IHZvaWQgMCA6IHJvb3QucXVlcnlTZWxlY3RvcihgW2lkPVwiJHtpZDJ9XCJdYCkpLFxuICAgIC8vIEdldCBhbGwgbGFiZWxsZWRieSBlbGVtZW50c1xuICAgIC4uLkFycmF5LmZyb20oZWwubGFiZWxzIHx8IFtdKVxuICAgIC8vIEdldCBhbGwgPGxhYmVsPiBlbGVtZW50c1xuICBdLnJlZHVjZSgoYWNjLCBlbDIpID0+IHtcbiAgICB2YXIgX2EzO1xuICAgIHJldHVybiBhY2MgfHwgKChfYTMgPSBlbDIgPT0gbnVsbCA/IHZvaWQgMCA6IGVsMi5pbm5lclRleHQpID09IG51bGwgPyB2b2lkIDAgOiBfYTMudHJpbSgpKSB8fCBcIlwiO1xuICB9LCBsYWJlbCk7XG59O1xuXG4vLyB1LXByb2dyZXNzLnRzXG52YXIgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xudmFyIFVIVE1MUHJvZ3Jlc3NFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiYXJpYS1sYWJlbFwiLCBcImFyaWEtbGFiZWxsZWRieVwiLCBcInZhbHVlXCIsIFwibWF4XCJdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IGhpZGRlbjogXCJcIiB9KSxcbiAgICAgIC8vIFNsb3QgaGlkaW5nIGNvbnRlbnQgYWxsb3dzIGxlZ2FjeSBicm93c2VyIHRvIGRpc3BsYXkgZmFsbGJhY2sgdGV4dFxuICAgICAgY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgYm9yZGVyOiAxcHggc29saWQ7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgaGVpZ2h0OiAuNWVtOyB3aWR0aDogMTBlbTsgb3ZlcmZsb3c6IGhpZGRlbiB9XG4gICAgICAgIDpob3N0OjpiZWZvcmUgeyBjb250ZW50OiAnJzsgZGlzcGxheTogYmxvY2s7IGhlaWdodDogMTAwJTsgYmFja2dyb3VuZDogY3VycmVudENvbG9yOyB3aWR0aDogdmFyKC0tcGVyY2VudGFnZSwgMCUpOyB0cmFuc2l0aW9uOiB3aWR0aCAuMnMgfVxuICAgICAgICA6aG9zdCg6bm90KFt2YWx1ZV0pKSB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZyxjdXJyZW50Q29sb3IgMjUlLCB0cmFuc3BhcmVudCA1MCUsIGN1cnJlbnRDb2xvciA3NSUpIDUwJS80MDAlIH1cbiAgICAgICAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiBuby1wcmVmZXJlbmNlKSB7IDpob3N0IHsgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlIDJzIGxpbmVhciBpbmZpbml0ZSB9ICB9XG4gICAgICAgIEBrZXlmcmFtZXMgaW5kZXRlcm1pbmF0ZSB7IGZyb20geyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IDEwMCUgfSB0byB7IGJhY2tncm91bmQtcG9zaXRpb24teDogMCB9IH1gXG4gICAgICApXG4gICAgKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoU0tJUF9BVFRSX0NIQU5HRSkgcmV0dXJuO1xuICAgIFNLSVBfQVRUUl9DSEFOR0UgPSB0cnVlO1xuICAgIGNvbnN0IHJvbGVJbWFnZSA9IElTX0lPUyB8fCBJU19GSVJFRk9YO1xuICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKHRoaXMucG9zaXRpb24gKiAxMDApKTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wZXJjZW50YWdlXCIsIGAke3BlcmNlbnRhZ2V9JWApO1xuICAgIGxldCBsYWJlbCA9IGdldExhYmVsKHRoaXMpO1xuICAgIGlmIChyb2xlSW1hZ2UpIGxhYmVsID0gYCR7bGFiZWwucmVwbGFjZSgvXFxkKyUkLywgXCJcIil9ICR7cGVyY2VudGFnZX0lYDtcbiAgICBpZiAoSVNfRklSRUZPWCkgZm9yIChjb25zdCBlbCBvZiB0aGlzLmxhYmVscykgYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIsIGxhYmVsKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1idXN5XCIsIGAke3RoaXMucG9zaXRpb24gPT09IC0xfWApO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWxhYmVsXCIsIGxhYmVsLnRyaW0oKSk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtbGFiZWxsZWRieVwiLCBudWxsKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW1heFwiLCBcIjEwMFwiKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW1pblwiLCBcIjBcIik7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVub3dcIiwgYCR7cGVyY2VudGFnZX1gKTtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCByb2xlSW1hZ2UgPyBcImltZ1wiIDogXCJwcm9ncmVzc2JhclwiKTtcbiAgICBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG4gIH1cbiAgZ2V0IGxhYmVscygpIHtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuY2xvc2VzdChcImxhYmVsOm5vdChbZm9yXSlcIik7XG4gICAgY29uc3QgaWQyID0gdXNlSWQodGhpcyk7XG4gICAgaWYgKGxhYmVsKSBsYWJlbC5odG1sRm9yID0gaWQyO1xuICAgIGNvbnN0IGVsID0gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYGxhYmVsW2Zvcj1cIiR7aWQyfVwiXWBcbiAgICApO1xuICAgIHJldHVybiBlbDtcbiAgfVxuICBnZXQgcG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUgPT09IG51bGwgPyAtMSA6IE1hdGgubWluKHRoaXMudmFsdWUgLyB0aGlzLm1heCwgMSk7XG4gIH1cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBnZXROdW1iZXIodGhpcywgXCJ2YWx1ZVwiKTtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICBzZXROdW1iZXIodGhpcywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IG1heCgpIHtcbiAgICByZXR1cm4gZ2V0TnVtYmVyKHRoaXMsIFwibWF4XCIpIHx8IDE7XG4gIH1cbiAgc2V0IG1heChtYXgpIHtcbiAgICBzZXROdW1iZXIodGhpcywgXCJtYXhcIiwgbWF4KTtcbiAgfVxufTtcbi8vIFByZXZlbnQgQ2hyb21lIERldlRvb2xzIHdhcm5pbmcgYWJvdXQgPGxhYmVsIGZvcj1cIlwiPiBwb2ludGluZyB0byA8dS1wcm9ncmVzcz5cblVIVE1MUHJvZ3Jlc3NFbGVtZW50LmZvcm1Bc3NvY2lhdGVkID0gdHJ1ZTtcbnZhciBpc051bWVyaWMgPSAodmFsdWUpID0+ICFOdW1iZXIuaXNOYU4oTnVtYmVyLnBhcnNlRmxvYXQoYCR7dmFsdWV9YCkpICYmIE51bWJlci5pc0Zpbml0ZShOdW1iZXIodmFsdWUpKTtcbnZhciBnZXROdW1iZXIgPSAoZWwsIGtleSkgPT4ge1xuICBjb25zdCB2YWx1ZSA9IGF0dHIoZWwsIGtleSk7XG4gIHJldHVybiBpc051bWVyaWModmFsdWUpID8gTWF0aC5tYXgoMCwgTnVtYmVyLnBhcnNlRmxvYXQodmFsdWUpKSA6IG51bGw7XG59O1xudmFyIHNldE51bWJlciA9IChlbCwga2V5LCB2YWwpID0+IHtcbiAgaWYgKHZhbCA9PT0gbnVsbCB8fCBpc051bWVyaWModmFsKSkgYXR0cihlbCwga2V5LCBgJHt2YWx9YCk7XG4gIGVsc2UgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2V0IG5vbi1udW1lcmljICcke2F0dHJ9JzogJyR7dmFsfSdgKTtcbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXByb2dyZXNzXCIsIFVIVE1MUHJvZ3Jlc3NFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxQcm9ncmVzc0VsZW1lbnQgfTtcbiJdLCJuYW1lcyI6WyJJU19CUk9XU0VSIiwiSVNfQU5EUk9JRCIsIl9hIiwiSVNfQlJPV1NFUiQ1IiwiU0FGRV9MQUJFTExFREJZIiwiRElTUExBWV9CTE9DSyIsIlVIVE1MRWxlbWVudCIsImF0dHIiLCJlbCIsIm5hbWUiLCJ2YWx1ZSIsIl9hMiIsImV2ZW50cyIsImFjdGlvbiIsImVsZW1lbnQiLCJyZXN0IiwidHlwZSIsIm9uIiwib2ZmIiwiYXR0YWNoU3R5bGUiLCJjc3MiLCJjcmVhdGVFbGVtZW50Iiwib2JzZXJ2ZXJzIiwibXV0YXRpb25PYnNlcnZlciIsIm9wdGlvbnMiLCJvYnNlcnZlciIsImRldGFpbCIsImFzQnV0dG9uIiwiZXZlbnQiLCJpc0NsaWNrIiwiZ2V0Um9vdCIsIm5vZGUiLCJyb290IiwiaWQiLCJ1c2VJZCIsInRhZ05hbWUiLCJ0ZXh0IiwiYXR0cnMiLCJjdXN0b21FbGVtZW50cyIsImluc3RhbmNlIiwiQVJJQV9DT05UUk9MUyIsIkFSSUFfU0VMRUNURUQiLCJVSFRNTFRhYnNFbGVtZW50IiwicXVlcnlXaXRob3V0TmVzdGVkIiwiZ2V0U2VsZWN0ZWRJbmRleCIsImluZGV4Iiwic2V0U2VsZWN0ZWQiLCJVSFRNTFRhYkxpc3RFbGVtZW50IiwidGFiIiwia2V5IiwidGFicyIsInByZXYiLCJuZXh0IiwiU0tJUF9BVFRSX0NIQU5HRSIsIlVIVE1MVGFiRWxlbWVudCIsInBhbmVscyIsIm5leHRQYW5lbCIsImdldFBhbmVsIiwicGFuZWwiLCJ0YWJsaXN0IiwidGFiTGlzdCIsIlVIVE1MVGFiUGFuZWxFbGVtZW50IiwiaXNGb2N1c2FibGUiLCJ0YWciLCJzZWxmIiwiaWQyIiwiX19kZWZQcm9wIiwiX19nZXRPd25Qcm9wU3ltYm9scyIsIl9faGFzT3duUHJvcCIsIl9fcHJvcElzRW51bSIsIl9fZGVmTm9ybWFsUHJvcCIsIm9iaiIsIl9fc3ByZWFkVmFsdWVzIiwiYSIsImIiLCJwcm9wIiwiSVNfRklSRUZPWCIsIklTX0lPUyIsIklTX0JST1dTRVIkNCIsIkZPQ1VTX09VVExJTkUiLCJ0ZXh0MiIsInZhbCIsImNyZWF0ZUFyaWFMaXZlIiwibW9kZSIsImxpdmUiLCJzZXRWYWx1ZSIsImlucHV0IiwiZGF0YSIsIl9iIiwicHJvdG8iLCJMSVZFIiwiTElWRV9TUl9GSVgiLCJJU19QUkVTUyIsIkVWRU5UUyIsIkVWRU5UX09OQ0UiLCJJU19GSVJFRk9YX01BQyIsIklTX01PQklMRSIsIkZBTFNFIiwiQ0xJQ0siLCJURVhUUyIsIlVIVE1MQ29tYm9ib3hFbGVtZW50IiwicmVuZGVyIiwic3luY0lucHV0VmFsdWUiLCJfIiwiZGlzY29ubmVjdENhY2hlIiwidGFyZ2V0Iiwib25CbHVyIiwib25DbGljayIsIm9uRm9jdXMiLCJvbklucHV0Iiwib25LZXlEb3duIiwiaXRlbSIsImNyZWF0ZUl0ZW0iLCJfYyIsIl9mb2N1cyIsIl9zcGVhayIsIl90ZXh0cyIsIml0ZW1zIiwiY29udHJvbCIsImxpc3QiLCJtdWx0aXBsZSIsImFkZGVkTm9kZXMiLCJyZW1vdmVkTm9kZXMiLCJlZGl0IiwidG90YWwiLCJ2YWx1ZXMiLCJfYTMiLCJfYjIiLCJrZWVwIiwibGFiZWwyIiwiYXJpYSIsIm9wdCIsImxhYmVsIiwic2VsZWN0Iiwid2l0aEV2ZW50IiwiZGlzcGF0Y2hNYXRjaCIsImNyZWF0YWJsZSIsInF1ZXJ5IiwibWF0Y2giLCJvIiwiZGlzcGF0Y2hDaGFuZ2UiLCJyZW1vdmVhYmxlIiwiYWRkIiwicmVtb3ZlIiwiaSIsIm9uQmx1cnJlZCIsIngiLCJ5IiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwicmVwZWF0IiwiaXNDb250cm9sIiwiaW5UZXh0IiwiZm9ybSIsImdldFN0ZXBzIiwibm93IiwibWF4Iiwic2hvdyIsIm9mZnNldCIsInN0YXJ0IiwiZW5kIiwicGFnZXMiLCJwYWdpbmF0aW9uIiwiY3VycmVudCIsInBhZ2UiLCJRVUlDS19FVkVOVCIsImRlYm91bmNlIiwiY2FsbGJhY2siLCJkZWxheSIsInRpbWVyIiwiYXJncyIsIlVVSUQiLCJTQ1JPTExFUiIsIlRBUkdFVFMiLCJUQVJHRVRTX1VQREFURSIsInVwZGF0ZSIsIlBPU0lUSU9OIiwiYW5jaG9yUG9zaXRpb24iLCJhbmNob3IiLCJwb3NpdGlvbiIsImZvcmNlIiwicGxhY2UiLCJpc0hUTUxBbmNob3IiLCJ0YXJnZXRXIiwidGFyZ2V0SCIsImFuY2hvclciLCJhbmNob3JIIiwid2lkdGgiLCJoZWlnaHQiLCJhbmNob3JYIiwiYW5jaG9yWSIsImhhc1NwYWNlTGVmdCIsImhhc1NwYWNlUmlnaHQiLCJoYXNTcGFjZU92ZXIiLCJoYXNTcGFjZVVuZGVyIiwicG9zaXRpb25SaWdodCIsInBvc2l0aW9uVW5kZXIiLCJjZW50ZXJYIiwiY2VudGVyWSIsImlzVmVydGljYWwiLCJjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyIiwicXVldWUiLCJvbkZyYW1lIiwib25UaW1lciIsIk1VVEFUT1JTIiwib25NdXRhdGlvbiIsImNsYXNzTmFtZSIsImVsZW1zIiwibXV0YXRvciIsIm9uTG9hZGVkIiwicnVuIiwiaXNJbnB1dExpa2UiLCJzaGVldCIsIkNTU19BUFAiLCJzdHlsZXMiLCJDU1NfU1RJQ0tZIiwiQ1NTX1RPR0dMRSIsIkNTU19TSURFQkFSIiwidXNlVHJhbnNpdGlvbiIsInRvZ2dsZUFwcEV4cGFuZGVkIiwiaGFuZGxlVG9nZ2xlQ2xpY2siLCJzaWRlYmFyIiwiaGFuZGxlUmVzaXplIiwiTUlOX1kiLCJTQ1JPTExfVVAiLCJTVElDSyIsIlNUSUNLX0VMIiwiU1RJQ0tfSCIsIlNUSUNLX1kiLCJTVFVDSyIsIldJTl9IIiwiV0lOX1kiLCJoYW5kbGVNdXRhdGlvbiIsInN0aWNreSIsImhhbmRsZVNjcm9sbCIsIk5FWFRfWSIsIk5FWFRfVVAiLCJDU1NfQlJFQURDUlVNQlMiLCJicmVhZGNydW1icyIsImJyZWFkY3VtYnMiLCJjcnVtYiIsImxlbmd0aCIsIkNTU19ESUFMT0ciLCJESUFMT0dTIiwiaGFuZGxlTW9kYWwiLCJkaWFsb2ciLCJoYW5kbGVDbGljayIsImhhbmRsZUluamVjdCIsImZpcnN0IiwiSVNfQlJPV1NFUiQyIiwiRElTQUJMRUQiLCJTRUxFQ1RFRCIsIlVIVE1MT3B0aW9uRWxlbWVudCIsIkxJVkVfVElNRVIiLCJJTlBVVF9ERUJPVU5DRSIsIkVWRU5UU19JTlBVVCIsIlVIVE1MRGF0YUxpc3RFbGVtZW50IiwiZGlzY29ubmVjdElucHV0IiwiX3ByZXYiLCJzZXR1cElucHV0Iiwic2V0RXhwYW5kZWQiLCJvcGVuIiwiaXNJbnB1dCIsInJlbGF0ZWRUYXJnZXQiLCJ2aWV3IiwiaXNWaXNpYmxlIiwib3B0aW9uIiwiZmlsdGVyIiwidmlzaWJsZSIsImhpZGRlbiIsImhpdHNUZXh0IiwibGl2ZVRleHQiLCJpZHgiLCJDU1NfRklFTEQiLCJDU1NfUFJPUEVSVFlfT1ZFUiIsIkNTU19QUk9QRVJUWV9VTkRFUiIsIkNTU19WQUxJREFUSU9OUyIsIkNTU19WQUxJREFUSU9OIiwiZmllbGRzIiwiZmllbGQiLCJsYWJlbHMiLCJkZXNjcyIsImNvbWJvYm94IiwidmFsaWQiLCJkZXNjIiwicmVuZGVyQ29tYm9ib3giLCJyZW5kZXJDb3VudGVyIiwicmVuZGVyVGV4dGFyZWFTaXplIiwidGV4dGFyZWEiLCJzdHlsZSIsImkxMW4iLCJsaW1pdCIsInJlbWFpbmRlciIsIm5leHRJbnZhbGlkIiwicHJldkludmFsaWQiLCJvdmVyIiwidW5kZXIiLCJoYW5kbGVUb2dnbGUiLCJuZXdTdGF0ZSIsImhhbmRsZUlucHV0IiwiaGFuZGxlSW52YWxpZCIsIkNTU19GSUVMRFNFVCIsImZpZWxkc2V0cyIsImZpZWxkc2V0IiwiaW5wdXRzIiwidmFsaWRhdGlvbklkIiwiQ1NTX0xPR08iLCJsb2dvIiwiaWNvbiIsInN2ZyIsImlzRG90IiwiYmFjayIsIkNTU19QT1BPVkVSIiwiT1BFTl9QT1BPVkVSUyIsImhhbmRsZUxpbmtDbGljayIsImNsb3NlIiwicG9wb3ZlciIsIkNTU19UQUJMRSIsInRhYmxlcyIsInRhYmxlIiwidGhzIiwiZ3JvdXAiLCJpc1Rib2R5Iiwicm93IiwiY2VsbCIsIkNTU19UT0dHTEVHUk9VUCIsImhhbmRsZUtleURvd24iLCJtb3ZlIiwiREVTQ1JJQkVEQlkiLCJFU0MiLCJMQUJFTExFREJZIiwiUE9TSVRJT05fQ1NTX1BST1BFUlRZIiwiVEhST1RUTEVfREVMQVkiLCJUT09MVElQIiwiQU5DSE9SIiwiTEFTVF9DQUxMIiwiVEhST1RUTEUiLCJoYW5kbGVNb3ZlIiwid2FpdCIsImhhbmRsZU1vdmVUaHJvdHRsZWQiLCJjb250ZW50IiwiaGFkTGFiZWwiLCJoYXNMYWJlbCIsIklTX0JST1dTRVIkMSIsIlVIVE1MRGV0YWlsc0VsZW1lbnQiLCJoaWRlIiwidURldGFpbHNMaXN0IiwidURldGFpbHMiLCJzdW1tYXJ5IiwiaXNTdW1tYXJ5IiwiVUhUTUxTdW1tYXJ5RWxlbWVudCIsImdldExhYmVsIiwiYWNjIiwiZWwyIiwiVUhUTUxQcm9ncmVzc0VsZW1lbnQiLCJyb2xlSW1hZ2UiLCJwZXJjZW50YWdlIiwiZ2V0TnVtYmVyIiwic2V0TnVtYmVyIiwiaXNOdW1lcmljIl0sIm1hcHBpbmdzIjoia0NBQ0EsSUFBSUEsR0FBYSxPQUFPLE9BQVcsS0FBZSxPQUFPLE9BQU8sU0FBYSxLQUFlLE9BQU8sT0FBTyxVQUFjLElBQ3BIQyxHQUFhRCxJQUFjLFdBQVcsS0FBSyxVQUFVLFNBQVMsRUFDOURFLEdBQ01DLElBQ1YsUUFBUSxPQUFPRCxHQUFLLFVBQVUsZ0JBQWtCLEtBQU8sT0FBU0EsR0FBRyxXQUFhLFVBQVUsUUFBUSxFQUNsRyxJQUFJRSxHQUFrQixHQUFHSCxHQUFhLE9BQVMsTUFBTSxjQUNqREksR0FBZ0IsMkNBQ2hCQyxHQUFlLE9BQU8sWUFBZ0IsSUFBYyxLQUFNLENBQzlELEVBQUksWUFDSixTQUFTQyxFQUFLQyxFQUFJQyxFQUFNQyxFQUFPLENBQzdCLElBQUlDLEVBQ0osT0FBSUQsSUFBVSxRQUFnQkMsRUFBTUgsRUFBRyxh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QUcsS0FBSyxXQUFhLEVBQUUsRUFBRSxFQUNqREEsRUFBSyxLQUFNLGFBQWM2SCxFQUFNLEtBQUksQ0FBRSxFQUNyQzdILEVBQUssS0FBTSxrQkFBbUIsSUFBSSxFQUNsQ0EsRUFBSyxLQUFNLGdCQUFpQixLQUFLLEVBQ2pDQSxFQUFLLEtBQU0sZ0JBQWlCLEdBQUcsRUFDL0JBLEVBQUssS0FBTSxnQkFBaUIsR0FBRytWLENBQVUsRUFBRSxFQUMzQy9WLEVBQUssS0FBTSxPQUFROFYsRUFBWSxNQUFRLGFBQWEsRUFDcERoVCxHQUFtQixFQUN2QixDQUNFLElBQUksUUFBUyxDQUNYLE1BQU0rRSxFQUFRLEtBQUssUUFBUSxrQkFBa0IsRUFDdkNuRSxFQUFNL0IsR0FBTSxJQUFJLEVBQ3RCLE9BQUlrRyxJQUFPQSxFQUFNLFFBQVVuRSxHQUNoQm5DLEdBQVEsSUFBSSxFQUFFLGlCQUN2QixjQUFjbUMsQ0FBRyxJQUNsQixDQUVMLENBQ0UsSUFBSSxVQUFXLENBQ2IsT0FBTyxLQUFLLFFBQVUsS0FBTyxHQUFLLEtBQUssSUFBSSxLQUFLLE1BQVEsS0FBSyxJQUFLLENBQUMsQ0FDdkUsQ0FDRSxJQUFJLE9BQVEsQ0FDVixPQUFPc1MsR0FBVSxLQUFNLE9BQU8sQ0FDbEMsQ0FDRSxJQUFJLE1BQU03VixFQUFPLENBQ2Y4VixHQUFVLEtBQU0sUUFBUzlWLENBQUssQ0FDbEMsQ0FDRSxJQUFJLEtBQU0sQ0FDUixPQUFPNlYsR0FBVSxLQUFNLEtBQUssR0FBSyxDQUNyQyxDQUNFLElBQUksSUFBSXpNLEVBQUssQ0FDWDBNLEdBQVUsS0FBTSxNQUFPMU0sQ0FBRyxDQUM5QixDQUNBLEVBRUFzTSxHQUFxQixlQUFpQixHQUN0QyxJQUFJSyxHQUFhL1YsR0FBVSxDQUFDLE9BQU8sTUFBTSxPQUFPLFdBQVcsR0FBR0EsQ0FBSyxFQUFFLENBQUMsR0FBSyxPQUFPLFNBQVMsT0FBT0EsQ0FBSyxDQUFDLEVBQ3BHNlYsR0FBWSxDQUFDL1YsRUFBSXlDLElBQVEsQ0FDM0IsTUFBTXZDLEVBQVFILEVBQUtDLEVBQUl5QyxDQUFHLEVBQzFCLE9BQU93VCxHQUFVL1YsQ0FBSyxFQUFJLEtBQUssSUFBSSxFQUFHLE9BQU8sV0FBV0EsQ0FBSyxDQUFDLEVBQUksSUFDcEUsRUFDSThWLEdBQVksQ0FBQ2hXLEVBQUl5QyxFQUFLZ0MsSUFBUSxDQUNoQyxHQUFJQSxJQUFRLE1BQVF3UixHQUFVeFIsQ0FBRyxFQUFHMUUsRUFBS0MsRUFBSXlDLEVBQUssR0FBR2dDLENBQUcsRUFBRSxNQUNyRCxPQUFNLElBQUksTUFBTSw4QkFBOEIxRSxDQUFJLE9BQU8wRSxDQUFHLEdBQUcsQ0FDdEUsRUFDQSxPQUFBM0MsR0FBZSxPQUFPLGFBQWM4VCxFQUFvQiIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsOSwxNywxOF19