@mattilsynet/design 2.0.2 → 2.1.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.
- package/mtds/analytics/analytics.d.ts +10 -3
- package/mtds/analytics/analytics.js +92 -29
- package/mtds/analytics/analytics.js.map +1 -1
- package/mtds/app/app-observer.js +1 -1
- package/mtds/app/app-toggle.js +10 -26
- package/mtds/app/app-toggle.js.map +1 -1
- package/mtds/app/app-toggle2.js +26 -10
- package/mtds/app/app-toggle2.js.map +1 -1
- package/mtds/app/app.js +1 -1
- package/mtds/dialog/dialog-observer.js +12 -14
- package/mtds/dialog/dialog-observer.js.map +1 -1
- package/mtds/helptext/helptext.js +14 -13
- package/mtds/helptext/helptext.js.map +1 -1
- package/mtds/index.iife.js +7 -7
- package/mtds/package.json.js +1 -1
- package/mtds/pagination/pagination.js +18 -18
- package/mtds/pagination/pagination.js.map +1 -1
- package/mtds/styles.css +1 -1
- package/mtds/utils.d.ts +6 -6
- package/mtds/utils.js +72 -63
- package/mtds/utils.js.map +1 -1
- package/package.json +1 -1
package/mtds/index.iife.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
var mtds=function(T){"use strict";var
|
|
1
|
+
var mtds=function(T){"use strict";var En=Object.defineProperty,re=Object.getOwnPropertySymbols,Sn=Object.prototype.hasOwnProperty,$n=Object.prototype.propertyIsEnumerable,le=(t,e,o)=>e in t?En(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,Tn=(t,e)=>{for(var o in e||(e={}))Sn.call(e,o)&&le(t,o,e[o]);if(re)for(var o of re(e))$n.call(e,o)&&le(t,o,e[o]);return t},K=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",ce=K&&/android/i.test(navigator.userAgent),xn=K&&/firefox/i.test(navigator.userAgent),Cn=K&&/iPad|iPhone|iPod/.test(navigator.userAgent),de;K&&/^Mac/i.test(((de=navigator.userAgentData)==null?void 0:de.platform)||navigator.platform);var kn="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",In=typeof HTMLElement>"u"?class{}:HTMLElement;function f(t,e,o){return o===void 0?t.getAttribute(e):(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}var ue=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},ot=(t,...e)=>ue("add",t,e),An=(t,...e)=>ue("remove",t,e),nt=new WeakMap,Ct=(t,e)=>{if(e===void 0)return nt.get(t);try{nt.get(t).disconnect(),nt.delete(t)}catch{}if(e){const o=new MutationObserver(n=>t.handleEvent({type:"mutation",detail:n}));o.observe(t,e),nt.set(t,o)}},Ln=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},Mn=t=>{var e;const o=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return o instanceof Document||o instanceof ShadowRoot?o:document},On=0,Pn=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++On).toString(32)}`),t.id):"",it=(t,e,o)=>{const n=document.createElement(t);if(e&&(n.textContent=e),o)for(const[i,s]of Object.entries(o))f(n,i,s);return n},Dn={define:(t,e)=>!K||window.customElements.get(t)||window.customElements.define(t,e)},N,Nn=0,kt=t=>{N||(N=it("div"),N.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",f(N,"aria-live","assertive")),N.isConnected||document.body.append(N),t&&(N.textContent=`${t}${Nn++%2?" ":""}`)},pe=(t,e,o="")=>{var n,i;const s={bubbles:!0,composed:!0,data:e,inputType:o},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(n=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:n.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},It=!1,At=t=>(t?.type==="mouseup"&&(It=!1),t?.type==="mousedown"&&(It=!0,ot(document,"mouseup",At,{once:!0})),It),fe="beforeinput,blur,focus,click,input,keydown,mousedown",me={once:!0,passive:!0},Hn=xn&&!ce,Rn=ce||Cn,st="false",at={added:"Added",empty:"No selected",found:"Navigate left to find %d selected",invalid:"Invalid value",of:"of",remove:"Press to remove",removed:"Removed"},rt=class extends In{constructor(){super(),this._item="",this._speak="",this._texts=Tn({},at),this._value="",this.attachShadow({mode:"open"}).append(it("slot"),it("style",`:host(:not([hidden])) { display: block; -webkit-tap-highlight-color: rgba(0, 0, 0, 0) } /* 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(input[inputmode="none"]) { outline: none } /* Hide temporary foucs outline flash */
|
|
5
5
|
::slotted(del) { text-decoration: none }
|
|
6
6
|
::slotted(data:not([hidden])) { display: inline-block; pointer-events: none }
|
|
7
7
|
::slotted(data)::after { content: '\\00D7'; content: '\\00D7' / ''; padding-inline: .5ch; pointer-events: auto; cursor: pointer }
|
|
8
|
-
::slotted(data:focus) { ${Sn} }`))}static get observedAttributes(){return Object.keys(it).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=kn(this),tt(this,ue,this,!0),Tt(this,{attributeFilter:["value","id"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(at,0,this),setTimeout(rt,0,this)}attributeChangedCallback(t,e,o){const n=t.split("data-sr-")[1];it[n]&&(this._texts[n]=o||it[n])}disconnectedCallback(){Tt(this,!1),xn(this,ue,this,!0),this._items=this._clear=this._focus=this._control=void 0,this._list=this._options=this._root=void 0}handleEvent(t){const e=t.target;At(this)||(t.type==="beforeinput"&&(this._value=e?.value||""),t.type==="blur"&&Nn(this),t.type==="click"&&Rn(this,t),t.type==="focus"&&Pn(this,t),t.type==="input"&&Bn(this,t),t.type==="keydown"&&Un(this,t),t.type==="mousedown"&&kt(t),t.type==="mutation"&&at(this,t))}get multiple(){var t;return((t=f(this,"data-multiple"))!=null?t:nt)!==nt}set multiple(t){f(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=f(this,"data-creatable"))!=null?t:nt)!==nt}set creatable(t){f(this,"data-creatable",t?"":null)}get control(){var t;return(t=this._control)!=null&&t.isConnected||(this._control=this.querySelector("input")),this._control}get list(){var t;return(t=this._list)!=null&&t.isConnected||(this._list=this.querySelector("u-datalist,datalist")),this._list}get clear(){var t;return(t=this._clear)!=null&&t.isConnected||(this._clear=this.querySelector("del")),this._clear}get items(){return this._items||(this._items=this.getElementsByTagName("data")),this._items}get options(){var t,e;if(!this._options){const o=((t=this.list)==null?void 0:t.nodeName)==="U-DATALIST"?"u-option":"option";this._options=(e=this.list)==null?void 0:e.getElementsByTagName(o)}return this._options}get values(){return[...this.items].map(({value:t})=>t)}},M=t=>{var e;return((e=t?.textContent)==null?void 0:e.trim())||""},It=t=>t instanceof HTMLDataElement,At=({control:t})=>t?.disabled||t?.readOnly||!1,at=(t,e)=>{var o,n;const{_focus:i,_texts:s,items:a,control:r,list:u,multiple:l}=t;let p=`${M((o=r?.labels)==null?void 0:o[0])}${l?`, ${a.length?s.found.replace("%d",`${a.length}`):s.empty}`:""}`;const d=[];for(const{addedNodes:E,removedNodes:S}of e?.detail||[]){for(const v of E)It(v)&&d.unshift(v);for(const v of S)It(v)&&d.push(v)}const _=l?d.length===1:d[0]===i;if(i&&r&&_){const E=f(r,"aria-expanded"),S=f(r,"inputmode"),v=It(i)?r:i,P=!d[0].isConnected;t._speak=`${s[P?"removed":"added"]} ${M(d[0])}, `,(Dn||i===r)&&xt(t._speak),r!==v&&(f(r,"aria-expanded",null),f(r,"inputmode","none"),p=" ",r.focus()),setTimeout(()=>{var j;f(r,"aria-expanded",E),f(r,"inputmode",P?"none":S),(j=v?.focus)==null||j.call(v),f(r,"inputmode",S),t._speak="",On?tt(t,"blur",()=>at(t),pe):setTimeout(at,100,t)},100)}let h=0;const A=t.querySelector("select"),St=At(t)?"":`${s.remove}, `;for(const E of a){const S=A?.options[h],v=M(E),P=E.value||v,j=`${t._speak}${v}, ${St}${++h} ${s.of} ${a.length}`;f(E,"role","button"),f(E,"value",P),f(E,"tabindex","-1"),f(E,"aria-label",j),S?Object.assign(S,{textContent:v,value:P}):A?.appendChild(new Option(v,P,!0,!0))}A&&f(A,"multiple",l?"":null);for(const E of[...A?.options||[]].slice(h))E.remove();!l&&h>1&&console.warn("u-combobox: Multiple <data> found in single mode."),u&&f(u,"aria-multiselectable",`${l}`),r&&f(r,"list",An(u)),r&&f(r,"aria-label",`${t._speak}${p}`);const Z=M(a[0]);Z!==t._item&&rt(t),t._item=Z,fe(t),me(t),(n=Tt(t))==null||n.takeRecords()},fe=t=>{var e;t.clear&&f(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value)||At(t))},me=t=>{var e;const{_speak:o,options:n=[],values:i}=t;for(const s of n){const a=(e=f(s,"value"))!=null?e:M(s);f(s,"aria-label",o?`${o}${M(s)}`:null),f(s,"selected",i.includes(a)?"":null)}},rt=t=>{const{multiple:e,control:o,items:n}=t,i=M(n[0]);!e&&o&&i!==o.value&&de(o,i,i?"insertText":"deleteContent")},Lt=(t,e=!0)=>{var o;const{_texts:n,options:i=[],creatable:s,control:a,items:r,multiple:u}=t,l=((o=a?.value)==null?void 0:o.trim())||"",p=l.toLowerCase()||null;let d=[...i].find(h=>(f(h,"label")||M(h)).trim().toLowerCase()===p);const _={bubbles:!0,cancelable:!0,detail:d};if(t.dispatchEvent(new CustomEvent("comboboxbeforematch",_))||(d=[...i].find(h=>h.selected)),e)return me(t),d?U(t,d,!1):s&&l?U(t,{value:l},!1):(!u&&!l&&r[0]?U(t,r[0]):rt(t),xt(n.invalid));for(const h of i)h.selected=h===d},U=(t,e,o=!0)=>{const{control:n,items:i,multiple:s}=t,a=ot("data",e.label||e.value,{value:e.value}),r=[...i].find(p=>p.value===e.value),u={bubbles:!0,cancelable:!0,detail:r||a};if(r&&!o)return rt(t);if(t.dispatchEvent(new CustomEvent("comboboxbeforeselect",u))){if(!s)for(const p of[...i])p.remove();r?r.remove():n?.insertAdjacentElement("beforebegin",a),t.dispatchEvent(new CustomEvent("comboboxafterselect",u))}},Pn=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),xt()},Nn=t=>kt()||setTimeout(Hn,0,t),Hn=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(t.multiple||Lt(t),t._focus=void 0)},Rn=(t,e)=>{const{clientX:o,clientY:n,target:i}=e,{clear:s,control:a,items:r}=t;if(s?.contains(i))return a&&de(a,"","deleteContentBackward"),a?.focus();for(const u of r){const{top:l,right:p,bottom:d,left:_}=u.getBoundingClientRect();if(u.contains(i))return U(t,u);if(n>=l&&n<=d&&o>=_&&o<=p)return u.focus()}i===t&&a?.focus()},Bn=(t,e)=>{var o;const{options:n=[],control:i,multiple:s}=t,a=((o=i?.value)==null?void 0:o.trim())||"";if(e instanceof InputEvent?!e.inputType||e.inputType==="insertReplacementText":!!a){e.stopImmediatePropagation(),i&&(i.value=t._value);for(const u of n)if(u.value&&u.value===a)return U(t,u,s)}else s||Lt(t,!1);fe(t)},Un=(t,e)=>{var o;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;const{clear:n,control:i,items:s}=t,{key:a,repeat:r,target:u}=e,l=i&&i===u,p=l&&i?.selectionEnd;let d=l?s.length:[...s].indexOf(u);if(l&&a==="Tab"&&n&&!n.hidden&&(e.preventDefault(),n.tabIndex=-1,n.focus(),tt(n,"blur",()=>f(n,"tabindex",null),pe)),!(!l&&Cn(e)||d===-1)){if(a==="ArrowRight"&&!l)d+=1;else if(a==="ArrowLeft"&&!p)d-=1;else if(a==="Enter"&&l){const _=f(i,"form");return f(i,"form","#"),requestAnimationFrame(()=>f(i,"form",_)),Lt(t)}else if((a==="Backspace"||a==="Delete")&&!p){if(e.preventDefault(),!r&&s[d])return U(t,s[d]);l&&(d-=1)}else return l||i?.focus();e.preventDefault(),(o=s[Math.max(0,d)]||i)==null||o.focus()}};Ln.define("u-combobox",st);var Mt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",qn=Mt&&/android/i.test(navigator.userAgent),he;Mt&&/^Mac/i.test(((he=navigator.userAgentData)==null?void 0:he.platform)||navigator.platform);var Fn=`${qn?"data":"aria"}-labelledby`,Ot=":host(:not([hidden])) { display: block }",lt=typeof HTMLElement>"u"?class{}:HTMLElement;function x(t,e,o){var n;return o===void 0?(n=t.getAttribute(e))!=null?n:null:(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}var ve=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},Vn=(t,...e)=>ve("add",t,e),Yn=(t,...e)=>ve("remove",t,e),ct=(t,e)=>t.attachShadow({mode:"open"}).append(ye("slot"),ye("style",e)),dt=new WeakMap,_e=(t,e)=>{if(e===void 0)return dt.get(t);try{dt.get(t).disconnect(),dt.delete(t)}catch{}if(e){const o=new MutationObserver(n=>t.handleEvent({type:"mutation",detail:n}));o.observe(t,e),dt.set(t,o)}},jn=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},be=t=>{var e;const o=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return o instanceof Document||o instanceof ShadowRoot?o:document},Kn=0,ge=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++Kn).toString(32)}`),t.id):"",ye=(t,e,o)=>{const n=document.createElement(t);return e&&(n.textContent=e),n},ut={define:(t,e)=>!Mt||window.customElements.get(t)||window.customElements.define(t,e)},pt="aria-controls",q="aria-selected",we=class extends lt{constructor(){super(),ct(this,Ot)}get tabList(){return ft("u-tablist",this)[0]||null}get selectedIndex(){return mt(this.tabs)}set selectedIndex(t){Nt(this.tabs[t])}get tabs(){return ft("u-tab",this)}get panels(){return ft("u-tabpanel",this)}},Ee=class extends lt{constructor(){super(),ct(this,Ot)}connectedCallback(){x(this,"role","tablist"),Vn(this,"click,keydown",this),_e(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){Yn(this,"click,keydown",this),_e(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s?.setAttribute(q,"true")}const{key:e}=t,o=[...this.tabs],n=o.findIndex(s=>s.contains(t.target));let i=n;if(!(t.defaultPrevented||n===-1)&&(t.type==="click"&&Nt(o[n]),t.type==="keydown"&&!jn(t))){if(e==="ArrowDown"||e==="ArrowRight")i=(n+1)%o.length;else if(e==="ArrowUp"||e==="ArrowLeft")i=(n||o.length)-1;else if(e==="End")i=o.length-1;else if(e==="Home")i=0;else if(e==="Tab")i=mt(o);else return;setTimeout(()=>{o[n].tabIndex=-1,o[i].tabIndex=0}),e!=="Tab"&&(t.preventDefault(),o[i].focus())}}get tabsElement(){return this.closest("u-tabs")}get tabs(){return this.querySelectorAll("u-tab")}get selectedIndex(){return mt(this.tabs)}set selectedIndex(t){Nt(this.tabs[t])}},Dt=!1,$e=class extends lt{static get observedAttributes(){return["id",q,pt]}constructor(){super(),ct(this,":host(:not([hidden])) { cursor: pointer; display: inline-block }")}connectedCallback(){x(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!Dt&&this.selected&&this.tabList){Dt=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=ft("u-tabpanel",this.tabsElement||this),o=Pt(this,e[t.indexOf(this)]);o&&x(o,Fn,ge(this)),t.forEach((n,i)=>{const s=Pt(n,e[i]);n.tabIndex=n===this?0:-1,x(n,q,`${n===this}`),s&&(s.hidden=s!==o),s&&x(n,pt,s.id)}),Dt=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return t?.nodeName==="U-TABLIST"?t:null}get selected(){return x(this,q)==="true"}set selected(t){x(this,q,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return Pt(this)}},Se=class extends lt{static get observedAttributes(){return["hidden"]}constructor(){super(),ct(this,Ot)}connectedCallback(){x(this,"role","tabpanel"),this.hidden=mt(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){this.hidden||Wn(this.firstChild)?x(this,"tabindex",null):this.tabIndex=0}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${pt}="${this.id}"]`;return be(this).querySelectorAll(t)}},ft=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),Pt=(t,e)=>{const o=x(t,pt)||ge(e),n=be(t).getElementById(o);return n?.nodeName==="U-TABPANEL"?n:null},mt=t=>[...t].findIndex(e=>x(e,q)==="true"),Nt=t=>t&&x(t,"aria-selected","true"),Wn=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');ut.define("u-tabs",we),ut.define("u-tablist",Ee),ut.define("u-tab",$e),ut.define("u-tabpanel",Se);const Xn="2.0.2",$={capture:!0,passive:!0},W=typeof window<"u"&&typeof document<"u";function Gn(t,e){let o;return(...n)=>{clearTimeout(o),o=setTimeout(()=>t(...n),e)}}function c(t,e,o){return o===void 0?t.getAttribute(e)??null:(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}let zn=0;const Qn=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function ht(t){return t.id||(t.id=`${Qn}${++zn}`),t.id}const Jn=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,e[`${t}EventListener`](...o)},b=(t,...e)=>Jn("add",t,e),X=W?document.createElement("div"):null,vt=new Map,Zn=()=>{for(const[t,e]of vt)e()};X&&(X.style.cssText="position:absolute;padding:1px;top:0;left:0px",b(window,"load,resize,scroll",Zn,$));const F={top:0,right:1,bottom:2,left:3};function O(t,e,o,n){const i=F[o]??Number(o)??F.bottom;if(e===!1||!e.isConnected||!t.isConnected)return vt.delete(t);X?.isConnected||document.body.append(X||""),vt.has(t)||vt.set(t,()=>O(t,e,i,n));const s=e instanceof HTMLElement,{offsetWidth:a,offsetHeight:r}=t,u=s?e.offsetWidth:e.clientWidth,l=s?e.offsetHeight:e.clientHeight,{width:p,height:d,left:_,top:h}=e.getBoundingClientRect(),A=window.visualViewport?.width||window.innerWidth,St=window.visualViewport?.height||window.innerHeight,Z=window.pageXOffset||document.documentElement.scrollLeft,E=window.pageYOffset||document.documentElement.scrollTop,S=Math.round(_-(u-p)/2),v=Math.round(h-(l-d)/2),P=Math.min(Math.max(10,S-(a-u)/2),A-a-10),j=Math.min(Math.max(10,v-(r-l)/2),St-r-10),cs=S-a>0,ds=S+u+a<A,us=v-r>0,ps=v+l+r<St,vn=i===F.top||i===F.bottom,fs=i===F.right&&(n||ds)||!cs,_n=i===F.bottom&&(n||ps)||!us,ms=Math.round(vn?P:fs?S+u:S-a),hs=Math.round(vn?_n?v+l:v-r:j);t.style.position="absolute",t.style.left=`${ms+Z}px`,t.style.top=`${hs+E}px`,X?.style.setProperty("translate",`0px ${Math.round(_n?Z+v+l+r+30:0)}px`)}function Te(t){let e=0;const o=()=>setTimeout(n,200),n=()=>{t([],i),i.takeRecords(),e=0},i=new MutationObserver(()=>{e||(e=requestAnimationFrame(o))});return i}const Ht=new WeakMap,V=(t,e,o)=>{const n=t.getElementsByClassName(e),i=Ht.get(t)||[];i.length||(Ht.set(t,i),Te((s,a)=>{if(t.isConnected&&i?.length)for(const r of i)r();else a?.disconnect(),Ht.delete(t)}).observe(t,{attributeFilter:["class","hidden"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>o(n))},C=t=>{if(!W)return;const e=()=>requestAnimationFrame(t);document.readyState==="complete"?e():b(window,"load",e)},Rt=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),xe="mattilsynet.matomo.cloud";let Bt=!0;function ti(t,e={}){if(W){if(window._paq||(window._paq=[],window._paq.push(["HeatmapSessionRecording::disable"]),window._paq.push(["enableLinkTracking"]),window._paq.push(["setTrackerUrl",`https://${xe}/matomo.php`])),t==="init"){const{matomoId:o,enabled:n}=e;Bt=n??window.location.hostname==="localhost",window._paq.push(["setSiteId",o]),document.querySelector('script[src*="matomo.js"]')||document.head.append(Object.assign(document.createElement("script"),{async:!0,src:`https://cdn.matomo.cloud/${xe}/matomo.js`}))}if(Bt==="debug")return console.info(`Analytics: "${t}"`,e);if(Bt!==!1)if(t==="pageview"){const{url:o,title:n}=e;window._paq.push(["setCustomUrl",o||location.href]),window._paq.push(["setDocumentTitle",n||document.title]),window._paq.push(["trackPageView"])}else if(t==="event"){const{category:o,action:n,name:i,value:s}=e,a=["trackEvent",o,n,i,s];window._paq.push(a.filter(r=>r!==void 0))}else if(t==="search"){const{query:o,category:n=!1,results:i=!1}=e;window._paq.push(["trackSiteSearch",o,n,i])}else t==="matomo"&&window._paq.push(e)}}const Ce="_alert_1run0_1 _ds-alert_im5h3_1",ke="_app_1run0_1",Ie="_sticky_1run0_1",Ae="_avatar_1run0_1 _ds-avatar_im5h3_1",Le="_badge_1run0_1",Me="_breadcrumbs_1run0_1 _ds-breadcrumbs_im5h3_1",Oe="_button_1run0_1 _ds-button_im5h3_1",De="_card_1run0_1",Pe="_group_1run0_1",Ne="_chip_1run0_1 _ds-chip_im5h3_1",He="_details_1run0_1 _ds-details_im5h3_1",Re="_dialog_1run0_1 _ds-dialog_im5h3_1",Be="_divider_1run0_1",Ue="_errorsummary_1run0_1 _ds-error-summary_im5h3_1",qe="__errorsummary_1run0_1",Fe="_field_1run0_1 _ds-field_im5h3_1",Ve="__datalist_1run0_1",Ye="_affixes_1run0_1 _ds-field-affixes_im5h3_1",je="_fieldset_1run0_1 _ds-fieldset_im5h3_1",Ke="_heading_1run0_1 _ds-heading_im5h3_1",We="_ingress_1run0_1",Xe="_muted_1run0_1",Ge="_info_1run0_1",ze="_prose_1run0_1",Qe="_helptext_1run0_1 _ds-focus_im5h3_1",Je="_input_1run0_1 _ds-input_im5h3_1",Ze="_grid_1run0_1",to="_flex_1run0_1",eo="_link_1run0_1",oo="_logo_1run0_1",no="_pagination_1run0_1 _ds-pagination_im5h3_1",io="_popover_1run0_1",so="_progress_1run0_1",ao="__indeterminate_1run0_1",ro="_skeleton_1run0_1 _ds-skeleton_im5h3_1",lo="__skeleton_1run0_1",co="_spinner_1run0_1",uo="_steps_1run0_1",po="_table_1run0_1 _ds-table_im5h3_1",fo="__scrollShadow_1run0_1",mo="_tabs_1run0_1 _ds-tabs_im5h3_1",ho="__scrollMask_1run0_1",vo="_tag_1run0_1 _ds-tag_im5h3_1",_o="_togglegroup_1run0_1",bo="__tooltip_1run0_1",go="_validation_1run0_1 _ds-validation-message_im5h3_1",yo="_body_1run0_153",wo="__checked_1run0_1",g={alert:Ce,app:ke,sticky:Ie,avatar:Ae,badge:Le,breadcrumbs:Me,button:Oe,card:De,group:Pe,chip:Ne,details:He,dialog:Re,divider:Be,errorsummary:Ue,_errorsummary:qe,field:Fe,_datalist:Ve,affixes:Ye,fieldset:je,heading:Ke,ingress:We,muted:Xe,info:Ge,prose:ze,helptext:Qe,input:Je,grid:Ze,flex:to,link:eo,logo:oo,pagination:no,popover:io,progress:so,_indeterminate:ao,skeleton:ro,_skeleton:lo,spinner:co,steps:uo,table:po,_scrollShadow:fo,tabs:mo,_scrollMask:ho,tag:vo,togglegroup:_o,_tooltip:bo,validation:go,body:yo,_checked:wo},ei=Object.freeze(Object.defineProperty({__proto__:null,_checked:wo,_datalist:Ve,_errorsummary:qe,_indeterminate:ao,_scrollMask:ho,_scrollShadow:fo,_skeleton:lo,_tooltip:bo,affixes:Ye,alert:Ce,app:ke,avatar:Ae,badge:Le,body:yo,breadcrumbs:Me,button:Oe,card:De,chip:Ne,default:g,details:He,dialog:Re,divider:Be,errorsummary:Ue,field:Fe,fieldset:je,flex:to,grid:Ze,group:Pe,heading:Ke,helptext:Qe,info:Ge,ingress:We,input:Je,link:eo,logo:oo,muted:Xe,pagination:no,popover:io,progress:so,prose:ze,skeleton:ro,spinner:co,steps:uo,sticky:Ie,table:po,tabs:mo,tag:vo,togglegroup:_o,validation:go},Symbol.toStringTag,{value:"Module"}));typeof window<"u"&&window.CSSStyleSheet&&document.adoptedStyleSheets&&(()=>{const t="--mtds-app-expanded",e=new CSSStyleSheet,o=()=>!window.localStorage.getItem(t)?.includes("false");document.adoptedStyleSheets.push(e),window.mtdsToggleAppExpanded=n=>{try{const i=n??!o();e.replaceSync?.(`:root { ${t}: var(${t}--${i})}`),window.localStorage.setItem(t,i)}catch{}},window.mtdsToggleAppExpanded(o())})();const Eo=g.app.split(" ")[0],oi=g.sticky.split(" ")[0],ni='[data-command="toggle-app-expanded"]',Ut=`.${Eo} > dialog,.${Eo} dialog ~ main`,$o=t=>{document.startViewTransition?document.startViewTransition(t):t()},So=t=>$o(()=>window.mtdsToggleAppExpanded?.(t));function ii({target:t,defaultPrevented:e}){const o=t?.closest?.("a");if(o?.closest("dialog")&&o?.closest(Ut))return To();if(e||!(t instanceof HTMLButtonElement)||!t.matches(ni))return;getComputedStyle(t).position==="sticky"?So():$o(()=>{const i=document.querySelector(Ut);i?.setAttribute("data-closedby","any"),i?.showModal()})}function To(){document.querySelector(Ut)?.close()}let qt=0,Y,L=0,y,Ft=0,_t=0,Vt=!1,Yt=0,H=0;function si([t]){y=t,xo()}function xo(){if(!y?.isConnected)return;const t=window.scrollY,e=t<H;H=t,e!==Y&&(qt=(y.parentElement?.getBoundingClientRect().top||0)+H,Y=e,Ft=y.offsetHeight,_t=y.getBoundingClientRect().top+H,Vt=y.offsetHeight<=window.innerHeight,Yt=window.innerHeight),!(L===-1&&Vt)&&(L!==-1&&(Vt||Y&&H<=_t)?(y.style.setProperty("--pos","sticky"),y.style.setProperty("--top","0px"),L=-1):L===-1&&!Y?(y.style.setProperty("--pos","relative"),y.style.setProperty("--top",`${Math.max(0,H-qt)}px`),L=0):L!==1&&!Y&&H+Yt>=_t+Ft?(y.style.setProperty("--pos","sticky"),y.style.setProperty("--top",`${Yt-Ft}px`),L=1):L===1&&Y&&(y.style.setProperty("--pos","relative"),y.style.setProperty("--top",`${_t-qt}px`),L=0))}C(()=>{V(document.documentElement,oi,si),b(document,"click",ii,$),b(window,"resize",Gn(To,100),$),b(window,"scroll",xo,$)});const ai=(t,e,o=Number.POSITIVE_INFINITY)=>{const n=(o-1)/2,i=Math.max(Math.min(t-Math.floor(n),e-o+1),1),s=Math.min(Math.max(t+Math.ceil(n),o),e),a=Array.from({length:s+1-i},(r,u)=>u+i);return o>4&&i>1&&a.splice(0,2,1,0),o>3&&s<e&&a.splice(-2,2,0,e),a},ri=({current:t=1,total:e=10,show:o=7})=>({prev:t>1?t-1:0,next:t<e?t+1:0,pages:ai(t,e,o).map((n,i)=>({current:n===t&&"page",key:`key-${n}-${i}`,page:n}))}),li=g.breadcrumbs.split(" ")[0];function ci(t){for(const e of t)e.querySelectorAll("li a").forEach((o,n,{length:i})=>{c(o,"aria-current",n===i-1?"page":null)})}C(()=>V(document.documentElement,li,ci));const di=g.dialog.split(" ")[0],ui=W?document.getElementsByClassName(di):[],pi=()=>{for(const t of ui)t.isConnected&&t.showModal&&t.close&&(t.matches('[open]:not([data-modal="false"]):not(:modal)')?(c(t,"open",null),t.showModal()):t.matches(":modal:not([open])")&&(c(t,"open",""),t.close()))},fi=({clientX:t,clientY:e,target:o})=>{const n=o?.closest?.("dialog");if(n){if(o.closest('[data-command="close"]'))return n.close();if(c(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()}}};C(()=>{b(document,"click",fi,$),Te(pi).observe(document.documentElement,{attributeFilter:["open"],attributes:!0,childList:!0,subtree:!0})});function mi(t){if(t.animationName!==g._errorsummary)return;const e=t.target?.firstElementChild;e instanceof HTMLHeadingElement&&(c(e,"tabindex","-1"),e.focus())}C(()=>b(document,"animationend",mi,$));var hi=Object.defineProperty,Co=Object.getOwnPropertySymbols,vi=Object.prototype.hasOwnProperty,_i=Object.prototype.propertyIsEnumerable,ko=(t,e,o)=>e in t?hi(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,bi=(t,e)=>{for(var o in e||(e={}))vi.call(e,o)&&ko(t,o,e[o]);if(Co)for(var o of Co(e))_i.call(e,o)&&ko(t,o,e[o]);return t},G=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",bt=G&&/android/i.test(navigator.userAgent),jt=G&&/iPad|iPhone|iPod/.test(navigator.userAgent),Io;G&&/^Mac/i.test(((Io=navigator.userAgentData)==null?void 0:Io.platform)||navigator.platform);var gi=`${bt?"data":"aria"}-labelledby`,yi=":host(:not([hidden])) { display: block }",wi="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",Ao=typeof HTMLElement>"u"?class{}:HTMLElement;function m(t,e,o){return o===void 0?t.getAttribute(e):(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}var Lo=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},z=(t,...e)=>Lo("add",t,e),gt=(t,...e)=>Lo("remove",t,e),Ei=(t,e)=>t.attachShadow({mode:"open"}).append(Xt("slot"),Xt("style",e)),yt=new WeakMap,Kt=(t,e)=>{if(e===void 0)return yt.get(t);try{yt.get(t).disconnect(),yt.delete(t)}catch{}if(e){const o=new MutationObserver(n=>t.handleEvent({type:"mutation",detail:n}));o.observe(t,e),yt.set(t,o)}},Mo=t=>{var e;const o=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return o instanceof Document||o instanceof ShadowRoot?o:document},$i=0,Wt=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++$i).toString(32)}`),t.id):"",Xt=(t,e,o)=>{const n=document.createElement(t);return e&&(n.textContent=e),n},Oo={define:(t,e)=>!G||window.customElements.get(t)||window.customElements.define(t,e)},R,Si=0,Do=t=>{R||(R=Xt("div"),R.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",m(R,"aria-live","assertive")),R.isConnected||document.body.append(R),t&&(R.textContent=`${t}${Si++%2?" ":""}`)},Ti=(t,e,o="")=>{var n,i;const s={bubbles:!0,composed:!0,data:e,inputType:o},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(n=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:n.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},Gt=!1,zt=t=>(t?.type==="mouseup"&&(Gt=!1),t?.type==="mousedown"&&(Gt=!0,z(document,"mouseup",zt,{once:!0})),Gt),Qt="disabled",Q="selected",xi=class extends Ao{static get observedAttributes(){return[Qt,Q]}connectedCallback(){jt||(this.tabIndex=-1),this.hasAttribute("role")||m(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){m(this,"aria-disabled",`${this.disabled}`),m(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[Q]}set defaultSelected(t){this[Q]=t}get disabled(){return m(this,Qt)!==null}set disabled(t){m(this,Qt,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=m(this,"label"))!=null?t:this.text}set label(t){m(this,"label",t)}get selected(){return m(this,Q)!==null}set selected(t){m(this,Q,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=m(this,"value"))!=null?t:this.text}set value(t){m(this,"value",t)}};Oo.define("u-option",xi);var Po,No=0,Ci=jt||bt,Ho="click,focusout,input,keydown,mousedown,mouseup",Ro="focus,focusin,blur,focusout",wt={singular:"%d hit",plural:"%d hits"},Bo=class extends Ao{constructor(){super(),this._texts=bi({},wt),this._value="",Ei(this,`${yi}
|
|
8
|
+
::slotted(data:focus) { ${kn} }`))}static get observedAttributes(){return Object.keys(at).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=Mn(this),ot(this,fe,this,!0),Ct(this,{attributeFilter:["value","id"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(lt,0,this),setTimeout(ct,0,this)}attributeChangedCallback(t,e,o){const n=t.split("data-sr-")[1];at[n]&&(this._texts[n]=o||at[n])}disconnectedCallback(){Ct(this,!1),An(this,fe,this,!0),this._items=this._clear=this._focus=this._control=void 0,this._list=this._options=this._root=void 0}handleEvent(t){const e=t.target;Mt(this)||(t.type==="beforeinput"&&(this._value=e?.value||""),t.type==="blur"&&Un(this),t.type==="click"&&Fn(this,t),t.type==="focus"&&Bn(this,t),t.type==="input"&&Vn(this,t),t.type==="keydown"&&Wn(this,t),t.type==="mousedown"&&At(t),t.type==="mutation"&<(this,t))}get multiple(){var t;return((t=f(this,"data-multiple"))!=null?t:st)!==st}set multiple(t){f(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=f(this,"data-creatable"))!=null?t:st)!==st}set creatable(t){f(this,"data-creatable",t?"":null)}get control(){var t;return(t=this._control)!=null&&t.isConnected||(this._control=this.querySelector("input")),this._control}get list(){var t;return(t=this._list)!=null&&t.isConnected||(this._list=this.querySelector("u-datalist,datalist")),this._list}get clear(){var t;return(t=this._clear)!=null&&t.isConnected||(this._clear=this.querySelector("del")),this._clear}get items(){return this._items||(this._items=this.getElementsByTagName("data")),this._items}get options(){var t,e;if(!this._options){const o=((t=this.list)==null?void 0:t.nodeName)==="U-DATALIST"?"u-option":"option";this._options=(e=this.list)==null?void 0:e.getElementsByTagName(o)}return this._options}get values(){return[...this.items].map(({value:t})=>t)}},M=t=>{var e;return((e=t?.textContent)==null?void 0:e.trim())||""},Lt=t=>t instanceof HTMLDataElement,Mt=({control:t})=>t?.disabled||t?.readOnly||!1,lt=(t,e)=>{var o,n;const{_focus:i,_texts:s,items:a,control:r,list:u,multiple:c}=t;let p=`${M((o=r?.labels)==null?void 0:o[0])}${c?`, ${a.length?s.found.replace("%d",`${a.length}`):s.empty}`:""}`;const d=[];for(const{addedNodes:S,removedNodes:$}of e?.detail||[]){for(const _ of S)Lt(_)&&d.unshift(_);for(const _ of $)Lt(_)&&d.push(_)}const v=c?d.length===1:d[0]===i;if(i&&r&&v){const S=f(r,"aria-expanded"),$=f(r,"inputmode"),_=Lt(i)?r:i,D=!d[0].isConnected;t._speak=`${s[D?"removed":"added"]} ${M(d[0])}, `,(Rn||i===r)&&kt(t._speak),r!==_&&(f(r,"aria-expanded",null),f(r,"inputmode","none"),p=" ",r.focus()),setTimeout(()=>{var Y;f(r,"aria-expanded",S),f(r,"inputmode",D?"none":$),(Y=_?.focus)==null||Y.call(_),f(r,"inputmode",$),t._speak="",Hn?ot(t,"blur",()=>lt(t),me):setTimeout(lt,100,t)},100)}let h=0;const A=t.querySelector("select"),xt=Mt(t)?"":`${s.remove}, `;for(const S of a){const $=A?.options[h],_=M(S),D=S.value||_,Y=`${t._speak}${_}, ${xt}${++h} ${s.of} ${a.length}`;f(S,"role","button"),f(S,"value",D),f(S,"tabindex","-1"),f(S,"aria-label",Y),$?Object.assign($,{textContent:_,value:D}):A?.appendChild(new Option(_,D,!0,!0))}A&&f(A,"multiple",c?"":null);for(const S of[...A?.options||[]].slice(h))S.remove();!c&&h>1&&console.warn("u-combobox: Multiple <data> found in single mode."),u&&f(u,"aria-multiselectable",`${c}`),r&&f(r,"list",Pn(u)),r&&f(r,"aria-label",`${t._speak}${p}`);const et=M(a[0]);et!==t._item&&ct(t),t._item=et,he(t),ve(t),(n=Ct(t))==null||n.takeRecords()},he=t=>{var e;t.clear&&f(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value)||Mt(t))},ve=t=>{var e;const{_speak:o,options:n=[],values:i}=t;for(const s of n){const a=(e=f(s,"value"))!=null?e:M(s);f(s,"aria-label",o?`${o}${M(s)}`:null),f(s,"selected",i.includes(a)?"":null)}},ct=t=>{const{multiple:e,control:o,items:n}=t,i=M(n[0]);!e&&o&&i!==o.value&&pe(o,i,i?"insertText":"deleteContent")},Ot=(t,e=!0)=>{var o;const{_texts:n,options:i=[],creatable:s,control:a,items:r,multiple:u}=t,c=((o=a?.value)==null?void 0:o.trim())||"",p=c.toLowerCase()||null;let d=[...i].find(h=>(f(h,"label")||M(h)).trim().toLowerCase()===p);const v={bubbles:!0,cancelable:!0,detail:d};if(t.dispatchEvent(new CustomEvent("comboboxbeforematch",v))||(d=[...i].find(h=>h.selected)),e)return ve(t),d?U(t,d,!1):s&&c?U(t,{value:c},!1):(!u&&!c&&r[0]?U(t,r[0]):ct(t),kt(n.invalid));for(const h of i)h.selected=h===d},U=(t,e,o=!0)=>{const{control:n,items:i,multiple:s}=t,a=it("data",e.label||e.value,{value:e.value}),r=[...i].find(p=>p.value===e.value),u={bubbles:!0,cancelable:!0,detail:r||a};if(r&&!o)return ct(t);if(t.dispatchEvent(new CustomEvent("comboboxbeforeselect",u))){if(!s)for(const p of[...i])p.remove();r?r.remove():n?.insertAdjacentElement("beforebegin",a),t.dispatchEvent(new CustomEvent("comboboxafterselect",u))}},Bn=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),kt()},Un=t=>At()||setTimeout(qn,0,t),qn=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(t.multiple||Ot(t),t._focus=void 0)},Fn=(t,e)=>{const{clientX:o,clientY:n,target:i}=e,{clear:s,control:a,items:r}=t;if(s?.contains(i))return a&&pe(a,"","deleteContentBackward"),a?.focus();for(const u of r){const{top:c,right:p,bottom:d,left:v}=u.getBoundingClientRect();if(u.contains(i))return U(t,u);if(n>=c&&n<=d&&o>=v&&o<=p)return u.focus()}i===t&&a?.focus()},Vn=(t,e)=>{var o;const{options:n=[],control:i,multiple:s}=t,a=((o=i?.value)==null?void 0:o.trim())||"";if(e instanceof InputEvent?!e.inputType||e.inputType==="insertReplacementText":!!a){e.stopImmediatePropagation(),i&&(i.value=t._value);for(const u of n)if(u.value&&u.value===a)return U(t,u,s)}else s||Ot(t,!1);he(t)},Wn=(t,e)=>{var o;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;const{clear:n,control:i,items:s}=t,{key:a,repeat:r,target:u}=e,c=i&&i===u,p=c&&i?.selectionEnd;let d=c?s.length:[...s].indexOf(u);if(c&&a==="Tab"&&n&&!n.hidden&&(e.preventDefault(),n.tabIndex=-1,n.focus(),ot(n,"blur",()=>f(n,"tabindex",null),me)),!(!c&&Ln(e)||d===-1)){if(a==="ArrowRight"&&!c)d+=1;else if(a==="ArrowLeft"&&!p)d-=1;else if(a==="Enter"&&c){const v=f(i,"form");return f(i,"form","#"),requestAnimationFrame(()=>f(i,"form",v)),Ot(t)}else if((a==="Backspace"||a==="Delete")&&!p){if(e.preventDefault(),!r&&s[d])return U(t,s[d]);c&&(d-=1)}else return c||i?.focus();e.preventDefault(),(o=s[Math.max(0,d)]||i)==null||o.focus()}};Dn.define("u-combobox",rt);var Pt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Yn=Pt&&/android/i.test(navigator.userAgent),_e;Pt&&/^Mac/i.test(((_e=navigator.userAgentData)==null?void 0:_e.platform)||navigator.platform);var Kn=`${Yn?"data":"aria"}-labelledby`,Dt=":host(:not([hidden])) { display: block }",dt=typeof HTMLElement>"u"?class{}:HTMLElement;function x(t,e,o){var n;return o===void 0?(n=t.getAttribute(e))!=null?n:null:(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}var be=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},jn=(t,...e)=>be("add",t,e),Xn=(t,...e)=>be("remove",t,e),ut=(t,e)=>t.attachShadow({mode:"open"}).append(Ee("slot"),Ee("style",e)),pt=new WeakMap,ge=(t,e)=>{if(e===void 0)return pt.get(t);try{pt.get(t).disconnect(),pt.delete(t)}catch{}if(e){const o=new MutationObserver(n=>t.handleEvent({type:"mutation",detail:n}));o.observe(t,e),pt.set(t,o)}},Gn=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},ye=t=>{var e;const o=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return o instanceof Document||o instanceof ShadowRoot?o:document},zn=0,we=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++zn).toString(32)}`),t.id):"",Ee=(t,e,o)=>{const n=document.createElement(t);return e&&(n.textContent=e),n},ft={define:(t,e)=>!Pt||window.customElements.get(t)||window.customElements.define(t,e)},mt="aria-controls",q="aria-selected",Se=class extends dt{constructor(){super(),ut(this,Dt)}get tabList(){return ht("u-tablist",this)[0]||null}get selectedIndex(){return vt(this.tabs)}set selectedIndex(t){Rt(this.tabs[t])}get tabs(){return ht("u-tab",this)}get panels(){return ht("u-tabpanel",this)}},$e=class extends dt{constructor(){super(),ut(this,Dt)}connectedCallback(){x(this,"role","tablist"),jn(this,"click,keydown",this),ge(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){Xn(this,"click,keydown",this),ge(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s?.setAttribute(q,"true")}const{key:e}=t,o=[...this.tabs],n=o.findIndex(s=>s.contains(t.target));let i=n;if(!(t.defaultPrevented||n===-1)&&(t.type==="click"&&Rt(o[n]),t.type==="keydown"&&!Gn(t))){if(e==="ArrowDown"||e==="ArrowRight")i=(n+1)%o.length;else if(e==="ArrowUp"||e==="ArrowLeft")i=(n||o.length)-1;else if(e==="End")i=o.length-1;else if(e==="Home")i=0;else if(e==="Tab")i=vt(o);else return;setTimeout(()=>{o[n].tabIndex=-1,o[i].tabIndex=0}),e!=="Tab"&&(t.preventDefault(),o[i].focus())}}get tabsElement(){return this.closest("u-tabs")}get tabs(){return this.querySelectorAll("u-tab")}get selectedIndex(){return vt(this.tabs)}set selectedIndex(t){Rt(this.tabs[t])}},Nt=!1,Te=class extends dt{static get observedAttributes(){return["id",q,mt]}constructor(){super(),ut(this,":host(:not([hidden])) { cursor: pointer; display: inline-block }")}connectedCallback(){x(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!Nt&&this.selected&&this.tabList){Nt=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=ht("u-tabpanel",this.tabsElement||this),o=Ht(this,e[t.indexOf(this)]);o&&x(o,Kn,we(this)),t.forEach((n,i)=>{const s=Ht(n,e[i]);n.tabIndex=n===this?0:-1,x(n,q,`${n===this}`),s&&(s.hidden=s!==o),s&&x(n,mt,s.id)}),Nt=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return t?.nodeName==="U-TABLIST"?t:null}get selected(){return x(this,q)==="true"}set selected(t){x(this,q,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return Ht(this)}},xe=class extends dt{static get observedAttributes(){return["hidden"]}constructor(){super(),ut(this,Dt)}connectedCallback(){x(this,"role","tabpanel"),this.hidden=vt(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){this.hidden||Qn(this.firstChild)?x(this,"tabindex",null):this.tabIndex=0}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${mt}="${this.id}"]`;return ye(this).querySelectorAll(t)}},ht=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),Ht=(t,e)=>{const o=x(t,mt)||we(e),n=ye(t).getElementById(o);return n?.nodeName==="U-TABPANEL"?n:null},vt=t=>[...t].findIndex(e=>x(e,q)==="true"),Rt=t=>t&&x(t,"aria-selected","true"),Qn=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');ft.define("u-tabs",Se),ft.define("u-tablist",$e),ft.define("u-tab",Te),ft.define("u-tabpanel",xe);const Jn="2.1.1",Ce="_alert_1run0_1 _ds-alert_im5h3_1",ke="_app_1run0_1",Ie="_sticky_1run0_1",Ae="_avatar_1run0_1 _ds-avatar_im5h3_1",Le="_badge_1run0_1",Me="_breadcrumbs_1run0_1 _ds-breadcrumbs_im5h3_1",Oe="_button_1run0_1 _ds-button_im5h3_1",Pe="_card_1run0_1",De="_group_1run0_1",Ne="_chip_1run0_1 _ds-chip_im5h3_1",He="_details_1run0_1 _ds-details_im5h3_1",Re="_dialog_1run0_1 _ds-dialog_im5h3_1",Be="_divider_1run0_1",Ue="_errorsummary_1run0_1 _ds-error-summary_im5h3_1",qe="__errorsummary_1run0_1",Fe="_field_1run0_1 _ds-field_im5h3_1",Ve="__datalist_1run0_1",We="_affixes_1run0_1 _ds-field-affixes_im5h3_1",Ye="_fieldset_1run0_1 _ds-fieldset_im5h3_1",Ke="_heading_1run0_1 _ds-heading_im5h3_1",je="_ingress_1run0_1",Xe="_muted_1run0_1",Ge="_info_1run0_1",ze="_prose_1run0_1",Qe="_helptext_1run0_1 _ds-focus_im5h3_1",Je="_input_1run0_1 _ds-input_im5h3_1",Ze="_grid_1run0_1",to="_flex_1run0_1",eo="_link_1run0_1",oo="_logo_1run0_1",no="_pagination_1run0_1 _ds-pagination_im5h3_1",io="_popover_1run0_1",so="_progress_1run0_1",ao="__indeterminate_1run0_1",ro="_skeleton_1run0_1 _ds-skeleton_im5h3_1",lo="__skeleton_1run0_1",co="_spinner_1run0_1",uo="_steps_1run0_1",po="_table_1run0_1 _ds-table_im5h3_1",fo="__scrollShadow_1run0_1",mo="_tabs_1run0_1 _ds-tabs_im5h3_1",ho="__scrollMask_1run0_1",vo="_tag_1run0_1 _ds-tag_im5h3_1",_o="_togglegroup_1run0_1",bo="__tooltip_1run0_1",go="_validation_1run0_1 _ds-validation-message_im5h3_1",yo="_body_1run0_153",wo="__checked_1run0_1",b={alert:Ce,app:ke,sticky:Ie,avatar:Ae,badge:Le,breadcrumbs:Me,button:Oe,card:Pe,group:De,chip:Ne,details:He,dialog:Re,divider:Be,errorsummary:Ue,_errorsummary:qe,field:Fe,_datalist:Ve,affixes:We,fieldset:Ye,heading:Ke,ingress:je,muted:Xe,info:Ge,prose:ze,helptext:Qe,input:Je,grid:Ze,flex:to,link:eo,logo:oo,pagination:no,popover:io,progress:so,_indeterminate:ao,skeleton:ro,_skeleton:lo,spinner:co,steps:uo,table:po,_scrollShadow:fo,tabs:mo,_scrollMask:ho,tag:vo,togglegroup:_o,_tooltip:bo,validation:go,body:yo,_checked:wo},Zn=Object.freeze(Object.defineProperty({__proto__:null,_checked:wo,_datalist:Ve,_errorsummary:qe,_indeterminate:ao,_scrollMask:ho,_scrollShadow:fo,_skeleton:lo,_tooltip:bo,affixes:We,alert:Ce,app:ke,avatar:Ae,badge:Le,body:yo,breadcrumbs:Me,button:Oe,card:Pe,chip:Ne,default:b,details:He,dialog:Re,divider:Be,errorsummary:Ue,field:Fe,fieldset:Ye,flex:to,grid:Ze,group:De,heading:Ke,helptext:Qe,info:Ge,ingress:je,input:Je,link:eo,logo:oo,muted:Xe,pagination:no,popover:io,progress:so,prose:ze,skeleton:ro,spinner:co,steps:uo,sticky:Ie,table:po,tabs:mo,tag:vo,togglegroup:_o,validation:go},Symbol.toStringTag,{value:"Module"})),y={capture:!0,passive:!0},j=typeof window<"u"&&typeof document<"u";function ti(t,e){let o;return(...n)=>{clearTimeout(o),o=setTimeout(()=>t(...n),e)}}function l(t,e,o){return o===void 0?t.getAttribute(e)??null:(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}let ei=0;const oi=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function _t(t){return t.id||(t.id=`${oi}${++ei}`),t.id}const Eo=(t,e,[...o])=>{for(const n of o[0].split(","))o[0]=n,e[`${t}EventListener`](...o)},g=(t,...e)=>{X&&(t===window||t===document)&&X.push(()=>ni(t,...e)),Eo("add",t,e)},ni=(t,...e)=>Eo("remove",t,e);let X=null;const C=t=>{if(!j)return;window._mtdsUnbindEvents||(window._mtdsUnbindEvents=new Map);const e=()=>requestAnimationFrame(()=>{const o=String(t).replace(/(\n|\s)/g,"");window._mtdsUnbindEvents?.get(o)?.forEach(n=>n()),X=[],t(),window._mtdsUnbindEvents?.set(o,X?.slice(0)),X=null});document.readyState==="complete"?e():g(window,"load",e)},G=j?document.createElement("div"):null,bt=new Map,ii=()=>{for(const[t,e]of bt)e()};G&&(G.style.cssText="position:absolute;padding:1px;top:0;left:0px",g(window,"load,resize,scroll",ii,y));const F={top:0,right:1,bottom:2,left:3};function O(t,e,o,n){const i=F[o]??Number(o)??F.bottom;if(e===!1||!e.isConnected||!t.isConnected)return bt.delete(t);G?.isConnected||document.body.append(G||""),bt.has(t)||bt.set(t,()=>O(t,e,i,n));const{offsetWidth:s,offsetHeight:a}=t,{width:r,height:u,left:c,top:p}=e.getBoundingClientRect(),d=e instanceof HTMLElement,v=d?e.offsetWidth:e.clientWidth,h=d?e.offsetHeight:e.clientHeight,A=window.visualViewport?.width||window.innerWidth,xt=window.visualViewport?.height||window.innerHeight,et=window.pageXOffset||document.documentElement.scrollLeft,S=window.pageYOffset||document.documentElement.scrollTop,$=Math.round(c-(v-r)/2),_=Math.round(p-(h-u)/2),D=Math.min(Math.max(10,$-(s-v)/2),A-s-10),Y=Math.min(Math.max(10,_-(a-h)/2),xt-a-10),Ss=$-s>0,$s=$+v+s<A,Ts=_-a>0,xs=_+h+a<xt,yn=i===F.top||i===F.bottom,Cs=i===F.right&&(n||$s)||!Ss,wn=i===F.bottom&&(n||xs)||!Ts,ks=Math.round(yn?D:Cs?$+v:$-s),Is=Math.round(yn?wn?_+h:_-a:Y);t.style.position="absolute",t.style.left=`${ks+et}px`,t.style.top=`${Is+S}px`,G?.style.setProperty("translate",`0px ${Math.round(wn?et+_+h+a+30:0)}px`)}function So(t){let e=0;const o=()=>setTimeout(n,200),n=()=>{t([],i),i.takeRecords(),e=0},i=new MutationObserver(()=>{e||(e=requestAnimationFrame(o))});return i}const Bt=new WeakMap,V=(t,e,o)=>{const n=t.getElementsByClassName(e),i=Bt.get(t)||[];i.length||(Bt.set(t,i),So((s,a)=>{if(t.isConnected&&i?.length)for(const r of i)r();else a?.disconnect(),Bt.delete(t)}).observe(t,{attributeFilter:["class","hidden"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>o(n))},Ut=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),si=`.${b.breadcrumbs.split(" ")[0]}`,ai=`.${b.chip.split(" ")[0]}`,ri=`.${b.helptext.split(" ")[0]}`,li=`.${b.pagination.split(" ")[0]}`,ci='summary,u-summary,a,button,[role="tab"],[role="button"]',di="click,toggle,submit,change",qt="mattilsynet.matomo.cloud";function $o(t,e={}){if(j){if(window._paq||(window._paq=[],window._paq.push(["HeatmapSessionRecording::disable"]),window._paq.push(["enableLinkTracking"]),window._paq.push(["setTrackerUrl",`https://${qt}/matomo.php`])),window._mtm||(window._mtm=window._mtm||[],window._mtm.push({"mtm.startTime":Date.now(),event:"mtm.Start"})),t==="init"){window._mtdsTracking={enabled:window.location.hostname!=="localhost",...window._mtdsTracking,...e};const{enabled:o,matomoId:n,matomoTagManagerId:i}=window._mtdsTracking;if(n&&window._paq.push(["setSiteId",n]),o){const s=i?`https://cdn.matomo.cloud/${qt}/container_${i}.js`:`https://cdn.matomo.cloud/${qt}/matomo.js`;document.querySelector(`script[src="${s}"]`)||document.head.append(Object.assign(document.createElement("script"),{async:!0,src:s}))}}if(window._mtdsTracking?.enabled!==!1){if(window._mtdsTracking?.enabled==="debug")return console.info(`analytics("${t}", `,e,")");if(t==="pageview"){const{url:o,title:n}=e;window._paq.push(["setCustomUrl",o||location.href]),window._paq.push(["setDocumentTitle",n||document.title]),window._paq.push(["trackPageView"])}else if(t==="event"){const{category:o,action:n,name:i,value:s}=e,a=["trackEvent",o,n,i,s];let r=location.href;window._paq.push([function(){r=this.getCurrentUrl()}]),window._paq.push(["setCustomUrl",r.split("#")[0]]),window._paq.push(a.filter(u=>u!==void 0)),window._paq.push(["setCustomUrl",r])}else if(t==="search"){const{query:o,category:n=!1,results:i=!1}=e;window._paq.push(["trackSiteSearch",o,n,i])}else t==="matomo"&&window._paq.push(e)}}}const ui=t=>window._mtdsTracking?.enabled&&setTimeout(pi,0,t),pi=({type:t,target:e})=>{const o=t==="click"?e?.closest?.(ci):e;if(!(o instanceof Element)||l(o,"data-analytics")==="ignore")return;let n="click",i="Button",s=To(o)||hi(o)||l(o,"data-tooltip")||"";if(t==="submit")i="Form",n="submit",s=s||document.title;else if(t==="toggle"){if(!o.matches("dialog:modal"))return;i="Dialog",n="open"}else if(t==="change"){const a=l(o,"type"),r=a==="checkbox"||a==="radio"?o.closest("fieldset"):null;i="Form",n="change",s=To(r||o)||z(r?.querySelector("legend"))||z(o?.labels?.[0])}else if(l(o,"role")==="tab")i="Tab",n="navigate";else if(l(o,"popovertarget")){if(!fi(o)?.matches(":popover-open"))return;i=o.closest(ri)?"HelpText":"Popover",n="open"}else if(o.nodeName.endsWith("SUMMARY")){if(!o.parentElement.open)return;i="Details",n="open"}else if(l(o,"data-command")==="toggle-app-expanded"){const a=mi(o,"--mtds-tooltip-position")==="none";i="Sidebar",n=a?"expand":"minimize",s=a&&l(o,"data-tooltip")||z(o)}else if(o.closest(si))i="Breadcrumbs",n="navigate";else if(o.closest(li))i="Pagintation",n="navigate";else if(o.closest(ai))i="Chip",n=o.hasAttribute("data-removable")?"remove":"click";else if(o.closest("th[aria-sort]"))i="Table",n="sort";else if(o instanceof HTMLAnchorElement)i="Link",n=o.protocol==="mailto:"?"email":"navigate",o.hasAttribute("download")?n="download":o.hash&&o.href.startsWith(location.href.split("#")[0])&&(n="anchor");else if(o.hasAttribute("aria-expanded")){if(l(o,"aria-expanded")!=="true")return;i="Expand",n="open"}$o("event",{category:l(o,"data-analytics-category")??i,action:l(o,"data-analytics-action")??n,name:l(o,"data-analytics-name")??s})},z=t=>t?.textContent?.trim()||"",To=t=>t&&l(t,"aria-label")||"",fi=t=>document.getElementById(l(t,"popovertarget")||""),mi=(t,e)=>window.getComputedStyle(t).getPropertyValue(e)?.trim(),hi=t=>{const e=z(t),o=z(t.querySelector("h1,h2,h3,h4,h5,h6"));return e.startsWith(o)&&o||e.slice(0,100).trim()};C(()=>g(document,di,ui,y)),typeof window<"u"&&window.CSSStyleSheet&&document.adoptedStyleSheets&&(()=>{const t="--mtds-app-expanded",e=new CSSStyleSheet,o=()=>!window.localStorage.getItem(t)?.includes("false");document.adoptedStyleSheets.push(e),window.mtdsToggleAppExpanded=n=>{try{const i=n??!o();e.replaceSync?.(`:root { ${t}: var(${t}--${i})}`),window.localStorage.setItem(t,i)}catch{}},window.mtdsToggleAppExpanded(o())})();const xo=b.app.split(" ")[0],vi=b.sticky.split(" ")[0],_i='[data-command="toggle-app-expanded"]',Ft=`.${xo} > dialog,.${xo} dialog ~ main`,Co=t=>{document.startViewTransition?document.startViewTransition(t):t()},ko=t=>Co(()=>window.mtdsToggleAppExpanded?.(t));function bi({target:t,defaultPrevented:e}){const o=t?.closest?.("a");if(o?.closest("dialog")&&o?.closest(Ft))return Io();if(e||!(t instanceof HTMLButtonElement)||!t.matches(_i))return;getComputedStyle(t).position==="sticky"?ko():Co(()=>{const i=document.querySelector(Ft);i?.setAttribute("data-closedby","any"),i?.showModal()})}function Io(){document.querySelector(Ft)?.close()}let Vt=0,W,L=0,w,Wt=0,gt=0,Yt=!1,Kt=0,H=0;function gi([t]){w=t,Ao()}function Ao(){if(!w?.isConnected)return;const t=window.scrollY,e=t<H;H=t,e!==W&&(Vt=(w.parentElement?.getBoundingClientRect().top||0)+H,W=e,Wt=w.offsetHeight,gt=w.getBoundingClientRect().top+H,Yt=w.offsetHeight<=window.innerHeight,Kt=window.innerHeight),!(L===-1&&Yt)&&(L!==-1&&(Yt||W&&H<=gt)?(w.style.setProperty("--pos","sticky"),w.style.setProperty("--top","0px"),L=-1):L===-1&&!W?(w.style.setProperty("--pos","relative"),w.style.setProperty("--top",`${Math.max(0,H-Vt)}px`),L=0):L!==1&&!W&&H+Kt>=gt+Wt?(w.style.setProperty("--pos","sticky"),w.style.setProperty("--top",`${Kt-Wt}px`),L=1):L===1&&W&&(w.style.setProperty("--pos","relative"),w.style.setProperty("--top",`${gt-Vt}px`),L=0))}C(()=>{V(document.documentElement,vi,gi),g(document,"click",bi,y),g(window,"resize",ti(Io,100),y),g(window,"scroll",Ao,y)});const yi=(t,e,o=Number.POSITIVE_INFINITY)=>{const n=(o-1)/2,i=Math.max(Math.min(t-Math.floor(n),e-o+1),1),s=Math.min(Math.max(t+Math.ceil(n),o),e),a=Array.from({length:s+1-i},(r,u)=>u+i);return o>4&&i>1&&a.splice(0,2,1,0),o>3&&s<e&&a.splice(-2,2,0,e),a},wi=({current:t=1,total:e=10,show:o=7})=>({prev:t>1?t-1:0,next:t<e?t+1:0,pages:yi(t,e,o).map((n,i)=>({current:n===t&&"page",key:`key-${n}-${i}`,page:n}))}),Ei=b.breadcrumbs.split(" ")[0];function Si(t){for(const e of t)e.querySelectorAll("li a").forEach((o,n,{length:i})=>{l(o,"aria-current",n===i-1?"page":null)})}C(()=>V(document.documentElement,Ei,Si));const $i=b.dialog.split(" ")[0],Ti=j?document.getElementsByClassName($i):[],xi=()=>{for(const t of Ti)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()))},Ci=({clientX:t,clientY:e,target:o})=>{if(o instanceof HTMLDialogElement&&l(o,"data-closedby")==="any"){const{top:s,right:a,bottom:r,left:u}=o.getBoundingClientRect();if(!(s<=e&&e<=r&&u<=t&&t<=a))return o.close()}const n=o?.closest?.("dialog");n&&o?.closest?.('[data-command="close"]')&&n.close()};C(()=>{g(document,"click",Ci,y),So(xi).observe(document.documentElement,{attributeFilter:["open"],attributes:!0,childList:!0,subtree:!0})});function ki(t){if(t.animationName!==b._errorsummary)return;const e=t.target?.firstElementChild;e instanceof HTMLHeadingElement&&(l(e,"tabindex","-1"),e.focus())}C(()=>g(document,"animationend",ki,y));var Ii=Object.defineProperty,Lo=Object.getOwnPropertySymbols,Ai=Object.prototype.hasOwnProperty,Li=Object.prototype.propertyIsEnumerable,Mo=(t,e,o)=>e in t?Ii(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,Mi=(t,e)=>{for(var o in e||(e={}))Ai.call(e,o)&&Mo(t,o,e[o]);if(Lo)for(var o of Lo(e))Li.call(e,o)&&Mo(t,o,e[o]);return t},Q=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",yt=Q&&/android/i.test(navigator.userAgent),jt=Q&&/iPad|iPhone|iPod/.test(navigator.userAgent),Oo;Q&&/^Mac/i.test(((Oo=navigator.userAgentData)==null?void 0:Oo.platform)||navigator.platform);var Oi=`${yt?"data":"aria"}-labelledby`,Pi=":host(:not([hidden])) { display: block }",Di="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",Po=typeof HTMLElement>"u"?class{}:HTMLElement;function m(t,e,o){return o===void 0?t.getAttribute(e):(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}var Do=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},J=(t,...e)=>Do("add",t,e),wt=(t,...e)=>Do("remove",t,e),Ni=(t,e)=>t.attachShadow({mode:"open"}).append(zt("slot"),zt("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 o=new MutationObserver(n=>t.handleEvent({type:"mutation",detail:n}));o.observe(t,e),Et.set(t,o)}},No=t=>{var e;const o=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return o instanceof Document||o instanceof ShadowRoot?o:document},Hi=0,Gt=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++Hi).toString(32)}`),t.id):"",zt=(t,e,o)=>{const n=document.createElement(t);return e&&(n.textContent=e),n},Ho={define:(t,e)=>!Q||window.customElements.get(t)||window.customElements.define(t,e)},R,Ri=0,Ro=t=>{R||(R=zt("div"),R.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",m(R,"aria-live","assertive")),R.isConnected||document.body.append(R),t&&(R.textContent=`${t}${Ri++%2?" ":""}`)},Bi=(t,e,o="")=>{var n,i;const s={bubbles:!0,composed:!0,data:e,inputType:o},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(n=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:n.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},Qt=!1,Jt=t=>(t?.type==="mouseup"&&(Qt=!1),t?.type==="mousedown"&&(Qt=!0,J(document,"mouseup",Jt,{once:!0})),Qt),Zt="disabled",Z="selected",Ui=class extends Po{static get observedAttributes(){return[Zt,Z]}connectedCallback(){jt||(this.tabIndex=-1),this.hasAttribute("role")||m(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){m(this,"aria-disabled",`${this.disabled}`),m(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[Z]}set defaultSelected(t){this[Z]=t}get disabled(){return m(this,Zt)!==null}set disabled(t){m(this,Zt,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=m(this,"label"))!=null?t:this.text}set label(t){m(this,"label",t)}get selected(){return m(this,Z)!==null}set selected(t){m(this,Z,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=m(this,"value"))!=null?t:this.text}set value(t){m(this,"value",t)}};Ho.define("u-option",Ui);var Bo,Uo=0,qi=jt||yt,qo="click,focusout,input,keydown,mousedown,mouseup",Fo="focus,focusin,blur,focusout",St={singular:"%d hit",plural:"%d hits"},Vo=class extends Po{constructor(){super(),this._texts=Mi({},St),this._value="",Ni(this,`${Pi}
|
|
9
9
|
::slotted(u-option) { display: block; cursor: pointer }
|
|
10
|
-
::slotted(u-option:focus) { ${
|
|
10
|
+
::slotted(u-option:focus) { ${Di} }
|
|
11
11
|
::slotted(u-option[aria-hidden="true"]),
|
|
12
12
|
::slotted(u-option[disabled]),
|
|
13
|
-
::slotted(u-option[hidden]) { display: none !important }`)}static get observedAttributes(){return["id",...Object.keys(wt).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=Mo(this),m(this,"role","listbox"),m(this,"tabindex","-1"),z(this._root,"focusin",this),z(this._root,"focus",this,!0),Kt(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){gt(this._root||this,"focus",this,!0),gt(this._root||this,"focusin",this),Kt(this,!1),Jt(this),this._root=void 0}attributeChangedCallback(t,e,o){const n=t?.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(wt[n])this._texts[n]=o||wt[n];else if(this._root){this._input&&Zt(this,this._input);for(const s of this._root.querySelectorAll(i))Zt(this,s)}}handleEvent(t){const{target:e,type:o}=t;t.defaultPrevented||(o==="click"&&Ai(this,t),(o==="focus"||o==="focusin")&&ki(this,t),(o==="blur"||o==="focusout")&&Ii(this,t),o==="keydown"&&Li(this,t),o==="mousedown"&&this.contains(e)&&zt(t),(o==="mutation"||o==="input")&&(clearTimeout(No),No=setTimeout(Fo,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},Uo=t=>t?.disabled||t?.readOnly||!1,J=(t,e)=>{var o,n,i;if(t.hidden!==e)return;t.hidden=Uo(t?._input)||!e,(o=Kt(t))==null||o.takeRecords();const s=t.isConnected&&t.popover&&((n=t._input)==null?void 0:n.isConnected)&&((i=t._input)==null?void 0:i.popoverTargetElement)===t;t._input&&Zt(t,t._input,e),s&&m(t,"popover","manual"),s&&t.togglePopover(e),e&&Fo(t)},Jt=t=>{t._input&&(gt(t._input||t,Ro,t),gt(t._root||t,Ho,t),J(t,!1),t._input=void 0)},Zt=(t,e,o=!1)=>{t.popover&&m(e,"popovertarget",Wt(t)),z(e,Ro,t,!0),m(e,"aria-autocomplete","list"),m(e,"aria-controls",Wt(t)),m(e,"aria-expanded",`${!Ci||o}`),m(e,"autocomplete","off"),m(e,"role",Uo(e)?null:"combobox")},ki=(t,e)=>{var o;const n=e.target instanceof HTMLInputElement;n&&e.isTrusted&&e.stopImmediatePropagation(),t._input!==e.target&&n&&e.target.list===t&&(t._input&&Jt(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus")),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),m(t,gi,Wt((o=t._input.labels)==null?void 0:o[0])),z(t._root||t,Ho,t),J(t,m(t._input,"inputmode")!=="none"),Do())},Ii=(t,e)=>{!bt&&!zt()&&t._input&&setTimeout(qo,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},qo=t=>{var e;const o=((e=t._root)==null?void 0:e.activeElement)||null,n=t._input;n&&n!==o&&!t.contains(o)&&(n.dispatchEvent(new FocusEvent("blur",{relatedTarget:o})),n.dispatchEvent(new FocusEvent("focusout",{bubbles:!0,relatedTarget:o})),Jt(t))},Ai=(t,{target:e})=>{var o;if(!t._input||t._input===e)return J(t,!0);for(const n of t.options)if(n.contains(e))return m(t,"aria-multiselectable")!=="true"&&((o=t._input)==null||o.focus(),J(t,!1)),Ti(t._input,n.value);bt&&qo(t)},Li=(t,e)=>{var o;const{key:n,target:i,altKey:s,ctrlKey:a,shiftKey:r,metaKey:u}=e,l=n==="Escape"||n==="Esc";if(s||a||u||r||n==="Tab")return;l&&!t.hidden&&e?.preventDefault(),J(t,!l);const p=[...t.options].filter(h=>m(h,"aria-hidden")!=="true"&&h.offsetHeight),d=p.indexOf(i);let _=-1;if(n==="ArrowDown"&&(_=(d+1)%p.length),n==="ArrowUp"&&(_=(~d?d:p.length)-1),~d&&((n==="Home"||n==="PageUp")&&(_=0),(n==="End"||n==="PageDown")&&(_=p.length-1),n==="Enter"))return p[d].click(),e.preventDefault();if(p[_])for(const h of p)h.tabIndex=-1;p[_]&&e.preventDefault(),(o=p[_]||t._input)==null||o.focus(),!p[_]&&n==="ArrowUp"&&setTimeout(()=>{var h;return(h=t._input)==null?void 0:h.setSelectionRange(999,999)})},Fo=(t,e)=>{const{_texts:o,_root:n,_input:i,options:s}=t,a=i?.value.toLowerCase().trim()||"",r=!t.hasAttribute("data-nofilter"),u=[],l=[];for(const d of s)(d.disabled||d.hidden||r&&!d.label.toLowerCase().includes(a)?u:l).push(d);for(const d of u)m(d,"aria-hidden","true");for(const d of l)m(d,"aria-hidden","false");const p=l.length;clearTimeout(Po),e?.type==="input"&&a!==t._value&&(Po=setTimeout(()=>{const d=`${!p&&t.innerText.trim()||`${o[p===1?"singular":"plural"]}`.replace("%d",`${p}`)}`;!t.hidden&&n?.activeElement===i&&Do(d),t._value=a},1e3)),jt&&l.forEach((d,_)=>m(d,"title",`${_+1}/${p}`))};G&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return Mo(this).getElementById(m(this,"list")||"")}}),Oo.define("u-datalist",Bo);const te=g.field.split(" ")[0],Vo=g.validation.split(" "),Mi=Vo[0],k=(t,e)=>t.getPropertyValue(`--mtds-text-${e}`)?.slice(1,-1)||"";function Yo(t,e){for(const o of t)if(o.isConnected){const n=[],i=[],s=[];let a=null,r=null,u=!0;for(const l of o.getElementsByTagName("*"))l instanceof HTMLLabelElement?n.push(l):l instanceof st?a=l:Rt(l)&&!l.hidden?r=l:l.hasAttribute("data-description")?i.push(l):l.classList.contains(Mi)?(u=c(l,"data-color")==="success"||!l.clientHeight,s.push(l),i.unshift(l)):l instanceof HTMLParagraphElement&&(i.some(p=>p.contains(l))||i.push(l));if(r){for(const l of n)l.htmlFor=ht(r);if(e&&c(o,"data-validation")==="form"){u=r.matches(":valid");for(const l of s)c(l,"hidden",u?"":null)}Oi(a),Ko(r),jo(r),c(r,"aria-describedby",i.map(ht).join(" ")||null),c(r,"aria-invalid",`${!u}`)}}}function jo(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function Oi(t){const{control:e,list:o}=t||{};if(t&&o&&!t.hasAttribute("data-sr-added")){const n=window.getComputedStyle(t);c(t,"data-sr-added",k(n,"combobox-added")),c(t,"data-sr-empty",k(n,"combobox-empty")),c(t,"data-sr-found",k(n,"combobox-found")),c(t,"data-sr-invalid",k(n,"combobox-invalid")),c(t,"data-sr-of",k(n,"combobox-of")),c(t,"data-sr-remove",k(n,"combobox-remove")),c(t,"data-sr-removed",k(n,"combobox-removed")),c(o,"data-sr-plural",k(n,"datalist-plural")),c(o,"data-sr-singular",k(n,"datalist-singular"))}o&&e&&!o.hasAttribute("popover")&&(c(o,"popover","manual"),c(e,"popovertarget",ht(o)))}function Ko(t){const e=t?.nextElementSibling,o=e&&c(e,"data-count");if(e&&o){const n=Number(o)-t.value.length,i=n<0,s=c(e,"aria-live")==="polite",a=window.getComputedStyle(e||t),r=k(a,"count-over"),u=k(a,"count-under");if(s!==i){c(e,"aria-live",i?"polite":"off");for(const l of Vo)e.classList.toggle(l,i)}e.textContent=(i?r:u).replace("%d",`${Math.abs(n)}`)}}function Di({target:t,newState:e}){if(t instanceof Bo){const n=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?O(t,!1):n&&(t.style.width=`${n.clientWidth}px`,O(t,n,c(t,"data-position")??"bottom",!0))}}function Pi(t){Rt(t.target)&&(Ko(t.target),jo(t.target),Wo(t))}function Ni(t){const e=t.target?.closest?.(`.${te}`);t.type==="invalid"&&e&&t.preventDefault(),Yo(document.getElementsByClassName(te),!0)}function Wo({target:t}){const e=(t instanceof st||t instanceof HTMLInputElement)&&t.list;if(e&&!e?.hidden){const o=c(e,"data-position")??"bottom";setTimeout(()=>O(e,t,o,!0),10)}}C(()=>{V(document.documentElement,te,Yo),b(document,"comboboxbeforeselect",Wo,$),b(document,"input",Pi,$),b(document,"invalid,submit",Ni,!0),b(document,"toggle",Di,$)});const Hi=g.fieldset.split(" ")[0],Ri=g.validation.split(" ")[0],Xo="aria-describedby",Bi="aria-invalid";function Ui(t){requestAnimationFrame(()=>{for(const e of t)if(e.isConnected){const o=[];let n=null,i=!0;for(const s of e.getElementsByTagName("*"))s.classList.contains(Ri)?(i=c(s,"data-color")==="success"||!s.clientHeight,n=ht(s)):Rt(s)&&o.push(s);for(const s of o){const a=c(s,Xo)?.replace(n||"#","");c(s,Xo,`${n||""} ${a||""}`.trim()),c(s,Bi,`${!i}`)}}})}C(()=>V(document.documentElement,Hi,Ui));const qi=g.logo.split(" ")[0];function Fi([t]){if(t?.isConnected&&t?.firstElementChild instanceof SVGSVGElement){for(const r of document.head.querySelectorAll("link[rel~='icon']"))r.setAttribute("rel","disabled");const e=t.firstElementChild,o=t?.hasAttribute("data-env"),n=window.getComputedStyle(e),i=n.getPropertyValue("color"),s=n.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='${o?"none":s}' width='51' height='51' x='2' y='2' stroke='${i}' stroke-dasharray='0.09 6.38' stroke-linecap='round' stroke-opacity='${o?.6:0}' stroke-width='2.3' rx='25.5'/><g transform="translate(7.5 7.5)">${a}</g></svg>`)}`,rel:"icon"}))}}C(()=>V(document.documentElement,qi,Fi));const Go=g.popover.split(" ")[0];let ee=0;function Vi({target:t,newState:e}){if(t instanceof HTMLElement&&t.classList.contains(Go)){const o=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?(ee-=1,O(t,!1)):o&&(ee+=1,O(t,o,c(t,"data-position")||"bottom"))}}function Yi({target:t}){const e=ee&&t?.closest?.("a,[popovertargetaction]");if(e){const o=c(e,"popovertargetaction")||"toggle",n=o==="show"||(o==="hide"?!1:void 0),s=(document.getElementById(c(e,"popovertarget")||"")||e).closest(`.${Go}`);s?.isConnected&&s?.togglePopover&&s.togglePopover(n)}}C(()=>{b(document,"toggle",Vi,$),b(document,"click",Yi)});const ji=g.table.split(" ")[0];function Ki(t){for(const e of t){const o=[];c(e,"role","table"),e.caption&&c(e.caption,"role","caption");for(const n of[e.tHead,e.tFoot,...e.tBodies])if(n){c(n,"role","rowgroup");const i=n.nodeName==="TBODY";for(const s of n.rows){c(s,"role","row");for(const a of s.cells)i?c(a,"data-th",o[a.cellIndex]||":empty"):o.push(a.innerText.trim()),a.nodeName==="TD"?c(a,"role","cell"):(c(a,"role",i?"rowheader":"columnheader"),c(a,"scope",i?"row":"col"))}}}}C(()=>V(document.documentElement,ji,Ki));const Wi=`.${g.togglegroup.split(" ")[0]}`;function Xi(t){const{key:e,target:o}=t,n=o instanceof HTMLInputElement&&o.closest(Wi);if(n&&(e==="Enter"&&o.click(),e?.startsWith("Arrow"))){t.preventDefault();const i=n.getElementsByTagName("input"),s=[...i].indexOf(o),a=e.match(/Arrow(Right|Down)/)?1:-1;i[(i.length+s+a)%i.length]?.focus()}}C(()=>b(document,"keydown",Xi));const zo="aria-describedby",Qo="Escape",Et="aria-labelledby",Gi="--mtds-tooltip-position",zi=300,I=W?Object.assign(document.createElement("div"),{className:g._tooltip,id:"mtds-tooltip",popover:"manual"}):null;let D=null,Jo=Number.NEGATIVE_INFINITY,Zo=0;function oe({target:t,type:e,key:o}){if(e==="keydown"&&o!==Qo)return;const n=Jo+zi-Date.now();clearTimeout(Zo),Zo=setTimeout(Qi,Math.max(n,0),o===Qo?null:t)}function Qi(t){if(Jo=Date.now(),!I||t===I)return;I?.isConnected||document.body.append(I);let e=t?.closest?.("[data-tooltip]")||null;if(e===D)return;const o=e&&c(e,"data-tooltip")||"",n=e&&c(e,"data-tooltip-position")||window.getComputedStyle(e||document.body).getPropertyValue(Gi)?.trim()||"top";(!o||o==="false"||o==="true"||n==="none")&&(e=null),e&&(I.textContent=o);const s=D&&c(D,Et)===I?.id,a=(e instanceof HTMLElement?e.innerText:e?.textContent)?.trim()||e?.hasAttribute(Et)||e?.hasAttribute("aria-label");D?.removeAttribute(s?Et:zo),O(I,!1),D=e,D&&c(D,a?zo:Et,I?.id),D&&I.hidePopover(),I.togglePopover(!!e),O(I,e||!1,n)}C(()=>{b(document,"blur,focus,mouseout,mouseover",oe,$),b(window,"keydown",oe,$),b(window,"blur",oe,$)});var tn=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",en;tn&&/^Mac/i.test(((en=navigator.userAgentData)==null?void 0:en.platform)||navigator.platform);var Ji=":host(:not([hidden])) { display: block }",on=typeof HTMLElement>"u"?class{}:HTMLElement;function B(t,e,o){var n;return o===void 0?(n=t.getAttribute(e))!=null?n:null:(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}var nn=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},sn=(t,...e)=>nn("add",t,e),an=(t,...e)=>nn("remove",t,e),Zi=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},ts=t=>{var e;const o=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return o instanceof Document||o instanceof ShadowRoot?o:document},ne=(t,e,o)=>{const n=document.createElement(t);if(e&&(n.textContent=e),o)for(const[i,s]of Object.entries(o))B(n,i,s);return n},rn={define:(t,e)=>!tn||window.customElements.get(t)||window.customElements.define(t,e)},es=class extends on{constructor(){super(),this._content=null,this.attachShadow({mode:"open"}).append(ne("slot",null,{name:"summary"}),ne("slot",null,{part:"details-content"}),ne("style",`${Ji}
|
|
13
|
+
::slotted(u-option[hidden]) { display: none !important }`)}static get observedAttributes(){return["id",...Object.keys(St).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=No(this),m(this,"role","listbox"),m(this,"tabindex","-1"),J(this._root,"focusin",this),J(this._root,"focus",this,!0),Xt(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){wt(this._root||this,"focus",this,!0),wt(this._root||this,"focusin",this),Xt(this,!1),te(this),this._root=void 0}attributeChangedCallback(t,e,o){const n=t?.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(St[n])this._texts[n]=o||St[n];else if(this._root){this._input&&ee(this,this._input);for(const s of this._root.querySelectorAll(i))ee(this,s)}}handleEvent(t){const{target:e,type:o}=t;t.defaultPrevented||(o==="click"&&Wi(this,t),(o==="focus"||o==="focusin")&&Fi(this,t),(o==="blur"||o==="focusout")&&Vi(this,t),o==="keydown"&&Yi(this,t),o==="mousedown"&&this.contains(e)&&Jt(t),(o==="mutation"||o==="input")&&(clearTimeout(Uo),Uo=setTimeout(Ko,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},Wo=t=>t?.disabled||t?.readOnly||!1,tt=(t,e)=>{var o,n,i;if(t.hidden!==e)return;t.hidden=Wo(t?._input)||!e,(o=Xt(t))==null||o.takeRecords();const s=t.isConnected&&t.popover&&((n=t._input)==null?void 0:n.isConnected)&&((i=t._input)==null?void 0:i.popoverTargetElement)===t;t._input&&ee(t,t._input,e),s&&m(t,"popover","manual"),s&&t.togglePopover(e),e&&Ko(t)},te=t=>{t._input&&(wt(t._input||t,Fo,t),wt(t._root||t,qo,t),tt(t,!1),t._input=void 0)},ee=(t,e,o=!1)=>{t.popover&&m(e,"popovertarget",Gt(t)),J(e,Fo,t,!0),m(e,"aria-autocomplete","list"),m(e,"aria-controls",Gt(t)),m(e,"aria-expanded",`${!qi||o}`),m(e,"autocomplete","off"),m(e,"role",Wo(e)?null:"combobox")},Fi=(t,e)=>{var o;const n=e.target instanceof HTMLInputElement;n&&e.isTrusted&&e.stopImmediatePropagation(),t._input!==e.target&&n&&e.target.list===t&&(t._input&&te(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus")),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),m(t,Oi,Gt((o=t._input.labels)==null?void 0:o[0])),J(t._root||t,qo,t),tt(t,m(t._input,"inputmode")!=="none"),Ro())},Vi=(t,e)=>{!yt&&!Jt()&&t._input&&setTimeout(Yo,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},Yo=t=>{var e;const o=((e=t._root)==null?void 0:e.activeElement)||null,n=t._input;n&&n!==o&&!t.contains(o)&&(n.dispatchEvent(new FocusEvent("blur",{relatedTarget:o})),n.dispatchEvent(new FocusEvent("focusout",{bubbles:!0,relatedTarget:o})),te(t))},Wi=(t,{target:e})=>{var o;if(!t._input||t._input===e)return tt(t,!0);for(const n of t.options)if(n.contains(e))return m(t,"aria-multiselectable")!=="true"&&((o=t._input)==null||o.focus(),tt(t,!1)),Bi(t._input,n.value);yt&&Yo(t)},Yi=(t,e)=>{var o;const{key:n,target:i,altKey:s,ctrlKey:a,shiftKey:r,metaKey:u}=e,c=n==="Escape"||n==="Esc";if(s||a||u||r||n==="Tab")return;c&&!t.hidden&&e?.preventDefault(),tt(t,!c);const p=[...t.options].filter(h=>m(h,"aria-hidden")!=="true"&&h.offsetHeight),d=p.indexOf(i);let v=-1;if(n==="ArrowDown"&&(v=(d+1)%p.length),n==="ArrowUp"&&(v=(~d?d:p.length)-1),~d&&((n==="Home"||n==="PageUp")&&(v=0),(n==="End"||n==="PageDown")&&(v=p.length-1),n==="Enter"))return p[d].click(),e.preventDefault();if(p[v])for(const h of p)h.tabIndex=-1;p[v]&&e.preventDefault(),(o=p[v]||t._input)==null||o.focus(),!p[v]&&n==="ArrowUp"&&setTimeout(()=>{var h;return(h=t._input)==null?void 0:h.setSelectionRange(999,999)})},Ko=(t,e)=>{const{_texts:o,_root:n,_input:i,options:s}=t,a=i?.value.toLowerCase().trim()||"",r=!t.hasAttribute("data-nofilter"),u=[],c=[];for(const d of s)(d.disabled||d.hidden||r&&!d.label.toLowerCase().includes(a)?u:c).push(d);for(const d of u)m(d,"aria-hidden","true");for(const d of c)m(d,"aria-hidden","false");const p=c.length;clearTimeout(Bo),e?.type==="input"&&a!==t._value&&(Bo=setTimeout(()=>{const d=`${!p&&t.innerText.trim()||`${o[p===1?"singular":"plural"]}`.replace("%d",`${p}`)}`;!t.hidden&&n?.activeElement===i&&Ro(d),t._value=a},1e3)),jt&&c.forEach((d,v)=>m(d,"title",`${v+1}/${p}`))};Q&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return No(this).getElementById(m(this,"list")||"")}}),Ho.define("u-datalist",Vo);const oe=b.field.split(" ")[0],jo=b.validation.split(" "),Ki=jo[0],k=(t,e)=>t.getPropertyValue(`--mtds-text-${e}`)?.slice(1,-1)||"";function Xo(t,e){for(const o of t)if(o.isConnected){const n=[],i=[],s=[];let a=null,r=null,u=!0;for(const c of o.getElementsByTagName("*"))c instanceof HTMLLabelElement?n.push(c):c instanceof rt?a=c:Ut(c)&&!c.hidden?r=c:c.hasAttribute("data-description")?i.push(c):c.classList.contains(Ki)?(u=l(c,"data-color")==="success"||!c.clientHeight,s.push(c),i.unshift(c)):c instanceof HTMLParagraphElement&&(i.some(p=>p.contains(c))||i.push(c));if(r){for(const c of n)c.htmlFor=_t(r);if(e&&l(o,"data-validation")==="form"){u=r.matches(":valid");for(const c of s)l(c,"hidden",u?"":null)}ji(a),zo(r),Go(r),l(r,"aria-describedby",i.map(_t).join(" ")||null),l(r,"aria-invalid",`${!u}`)}}}function Go(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function ji(t){const{control:e,list:o}=t||{};if(t&&o&&!t.hasAttribute("data-sr-added")){const n=window.getComputedStyle(t);l(t,"data-sr-added",k(n,"combobox-added")),l(t,"data-sr-empty",k(n,"combobox-empty")),l(t,"data-sr-found",k(n,"combobox-found")),l(t,"data-sr-invalid",k(n,"combobox-invalid")),l(t,"data-sr-of",k(n,"combobox-of")),l(t,"data-sr-remove",k(n,"combobox-remove")),l(t,"data-sr-removed",k(n,"combobox-removed")),l(o,"data-sr-plural",k(n,"datalist-plural")),l(o,"data-sr-singular",k(n,"datalist-singular"))}o&&e&&!o.hasAttribute("popover")&&(l(o,"popover","manual"),l(e,"popovertarget",_t(o)))}function zo(t){const e=t?.nextElementSibling,o=e&&l(e,"data-count");if(e&&o){const n=Number(o)-t.value.length,i=n<0,s=l(e,"aria-live")==="polite",a=window.getComputedStyle(e||t),r=k(a,"count-over"),u=k(a,"count-under");if(s!==i){l(e,"aria-live",i?"polite":"off");for(const c of jo)e.classList.toggle(c,i)}e.textContent=(i?r:u).replace("%d",`${Math.abs(n)}`)}}function Xi({target:t,newState:e}){if(t instanceof Vo){const n=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?O(t,!1):n&&(t.style.width=`${n.clientWidth}px`,O(t,n,l(t,"data-position")??"bottom",!0))}}function Gi(t){Ut(t.target)&&(zo(t.target),Go(t.target),Qo(t))}function zi(t){const e=t.target?.closest?.(`.${oe}`);t.type==="invalid"&&e&&t.preventDefault(),Xo(document.getElementsByClassName(oe),!0)}function Qo({target:t}){const e=(t instanceof rt||t instanceof HTMLInputElement)&&t.list;if(e&&!e?.hidden){const o=l(e,"data-position")??"bottom";setTimeout(()=>O(e,t,o,!0),10)}}C(()=>{V(document.documentElement,oe,Xo),g(document,"comboboxbeforeselect",Qo,y),g(document,"input",Gi,y),g(document,"invalid,submit",zi,!0),g(document,"toggle",Xi,y)});const Qi=b.fieldset.split(" ")[0],Ji=b.validation.split(" ")[0],Jo="aria-describedby",Zi="aria-invalid";function ts(t){requestAnimationFrame(()=>{for(const e of t)if(e.isConnected){const o=[];let n=null,i=!0;for(const s of e.getElementsByTagName("*"))s.classList.contains(Ji)?(i=l(s,"data-color")==="success"||!s.clientHeight,n=_t(s)):Ut(s)&&o.push(s);for(const s of o){const a=l(s,Jo)?.replace(n||"#","");l(s,Jo,`${n||""} ${a||""}`.trim()),l(s,Zi,`${!i}`)}}})}C(()=>V(document.documentElement,Qi,ts));const es=b.logo.split(" ")[0];function os([t]){if(t?.isConnected&&t?.firstElementChild instanceof SVGSVGElement){for(const r of document.head.querySelectorAll("link[rel~='icon']"))r.setAttribute("rel","disabled");const e=t.firstElementChild,o=t?.hasAttribute("data-env"),n=window.getComputedStyle(e),i=n.getPropertyValue("color"),s=n.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='${o?"none":s}' width='51' height='51' x='2' y='2' stroke='${i}' stroke-dasharray='0.09 6.38' stroke-linecap='round' stroke-opacity='${o?.6:0}' stroke-width='2.3' rx='25.5'/><g transform="translate(7.5 7.5)">${a}</g></svg>`)}`,rel:"icon"}))}}C(()=>V(document.documentElement,es,os));const Zo=b.popover.split(" ")[0];let ne=0;function ns({target:t,newState:e}){if(t instanceof HTMLElement&&t.classList.contains(Zo)){const o=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?(ne-=1,O(t,!1)):o&&(ne+=1,O(t,o,l(t,"data-position")||"bottom"))}}function is({target:t}){const e=ne&&t?.closest?.("a,[popovertargetaction]");if(e){const o=l(e,"popovertargetaction")||"toggle",n=o==="show"||(o==="hide"?!1:void 0),s=(document.getElementById(l(e,"popovertarget")||"")||e).closest(`.${Zo}`);s?.isConnected&&s?.togglePopover&&s.togglePopover(n)}}C(()=>{g(document,"toggle",ns,y),g(document,"click",is)});const ss=b.table.split(" ")[0];function as(t){for(const e of t){const o=[];l(e,"role","table"),e.caption&&l(e.caption,"role","caption");for(const n of[e.tHead,e.tFoot,...e.tBodies])if(n){l(n,"role","rowgroup");const i=n.nodeName==="TBODY";for(const s of n.rows){l(s,"role","row");for(const a of s.cells)i?l(a,"data-th",o[a.cellIndex]||":empty"):o.push(a.innerText.trim()),a.nodeName==="TD"?l(a,"role","cell"):(l(a,"role",i?"rowheader":"columnheader"),l(a,"scope",i?"row":"col"))}}}}C(()=>V(document.documentElement,ss,as));const rs=`.${b.togglegroup.split(" ")[0]}`;function ls(t){const{key:e,target:o}=t,n=o instanceof HTMLInputElement&&o.closest(rs);if(n&&(e==="Enter"&&o.click(),e?.startsWith("Arrow"))){t.preventDefault();const i=n.getElementsByTagName("input"),s=[...i].indexOf(o),a=e.match(/Arrow(Right|Down)/)?1:-1;i[(i.length+s+a)%i.length]?.focus()}}C(()=>g(document,"keydown",ls));const tn="aria-describedby",en="Escape",$t="aria-labelledby",cs="--mtds-tooltip-position",ds=300,I=j?Object.assign(document.createElement("div"),{className:b._tooltip,id:"mtds-tooltip",popover:"manual"}):null;let P=null,on=Number.NEGATIVE_INFINITY,nn=0;function ie({target:t,type:e,key:o}){if(e==="keydown"&&o!==en)return;const n=on+ds-Date.now();clearTimeout(nn),nn=setTimeout(us,Math.max(n,0),o===en?null:t)}function us(t){if(on=Date.now(),!I||t===I)return;I?.isConnected||document.body.append(I);let e=t?.closest?.("[data-tooltip]")||null;if(e===P)return;const o=e&&l(e,"data-tooltip")||"",n=e&&l(e,"data-tooltip-position")||window.getComputedStyle(e||document.body).getPropertyValue(cs)?.trim()||"top";(!o||o==="false"||o==="true"||n==="none")&&(e=null),e&&(I.textContent=o);const s=P&&l(P,$t)===I?.id,a=(e instanceof HTMLElement?e.innerText:e?.textContent)?.trim()||e?.hasAttribute($t)||e?.hasAttribute("aria-label");P?.removeAttribute(s?$t:tn),O(I,!1),P=e,P&&l(P,a?tn:$t,I?.id),P&&I.hidePopover(),I.togglePopover(!!e),O(I,e||!1,n)}C(()=>{g(document,"blur,focus,mouseout,mouseover",ie,y),g(window,"keydown",ie,y),g(window,"blur",ie,y)});var sn=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",an;sn&&/^Mac/i.test(((an=navigator.userAgentData)==null?void 0:an.platform)||navigator.platform);var ps=":host(:not([hidden])) { display: block }",rn=typeof HTMLElement>"u"?class{}:HTMLElement;function B(t,e,o){var n;return o===void 0?(n=t.getAttribute(e))!=null?n:null:(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}var ln=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},cn=(t,...e)=>ln("add",t,e),dn=(t,...e)=>ln("remove",t,e),fs=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},ms=t=>{var e;const o=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return o instanceof Document||o instanceof ShadowRoot?o:document},se=(t,e,o)=>{const n=document.createElement(t);if(e&&(n.textContent=e),o)for(const[i,s]of Object.entries(o))B(n,i,s);return n},un={define:(t,e)=>!sn||window.customElements.get(t)||window.customElements.define(t,e)},hs=class extends rn{constructor(){super(),this._content=null,this.attachShadow({mode:"open"}).append(se("slot",null,{name:"summary"}),se("slot",null,{part:"details-content"}),se("style",`${ps}
|
|
14
14
|
::slotted(u-summary) { cursor: pointer; display: block }
|
|
15
15
|
::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 }
|
|
16
16
|
::slotted(u-summary[aria-expanded="true"])::before { rotate: 90deg }
|
|
17
|
-
: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],
|
|
17
|
+
: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],cn(this._content,"beforematch",this),cn(this,"click,keydown",this),this.attributeChangedCallback()}disconnectedCallback(){this._content&&dn(this._content,"beforematch",this),dn(this,"click,keydown",this),this._content=null}attributeChangedCallback(t,e,o){const n="onbeforematch"in this?"until-found":!0,i=this.open;for(const s of this.children)s.nodeName==="U-SUMMARY"&&B(s,"aria-expanded",`${i}`);if(this._content&&(B(this._content,"aria-hidden",`${!i}`),this._content.hidden=i?!1:n),i&&this.name){const s=ms(this).querySelectorAll(`${this.nodeName}[name="${this.name}"]`);for(const a of s)a!==this&&(a.open=!1)}t==="open"&&e===null!=(o===null)&&this.dispatchEvent(new Event("toggle"))}handleEvent(t){const e=this.querySelector(":scope > u-summary"),o=e?.contains(t.target);t.defaultPrevented||(t.type==="beforematch"&&(this.open=!0),o&&t.type==="keydown"&&fs(t),o&&t.type==="click"&&(this.open=!this.open))}get open(){return this.hasAttribute("open")}set open(t){B(this,"open",t?"":null)}get name(){return B(this,"name")||""}set name(t){B(this,"name",t)}},vs=class extends rn{connectedCallback(){B(this,"role","button"),this.slot="summary",this.tabIndex=0}};un.define("u-details",hs),un.define("u-summary",vs);var Tt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",pn=Tt&&/firefox/i.test(navigator.userAgent),_s=Tt&&/iPad|iPhone|iPod/.test(navigator.userAgent),fn;Tt&&/^Mac/i.test(((fn=navigator.userAgentData)==null?void 0:fn.platform)||navigator.platform);var bs=typeof HTMLElement>"u"?class{}:HTMLElement;function E(t,e,o){var n;return o===void 0?(n=t.getAttribute(e))!=null?n:null:(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}var mn=t=>{var e;const o=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return o instanceof Document||o instanceof ShadowRoot?o:document},gs=0,ys=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++gs).toString(32)}`),t.id):"",hn=(t,e,o)=>{const n=document.createElement(t);if(e&&(n.textContent=e),o)for(const[i,s]of Object.entries(o))E(n,i,s);return n},ws={define:(t,e)=>!Tt||window.customElements.get(t)||window.customElements.define(t,e)},Es=t=>{var e;const o=mn(t),n=E(t,"aria-label")||"";return[...(((e=E(t,"aria-labelledby"))==null?void 0:e.trim().split(/\s+/))||[]).map(s=>o?.querySelector(`[id="${s}"]`)),...Array.from(t.labels||[])].reduce((s,a)=>{var r;return s||((r=a?.innerText)==null?void 0:r.trim())||""},n)},ae=!1,vn=class extends bs{static get observedAttributes(){return["aria-label","aria-labelledby","value","max"]}constructor(){super(),this.attachShadow({mode:"open"}).append(hn("slot",null,{hidden:""}),hn("style",`:host(:not([hidden])) { box-sizing: border-box; border: 1px solid; display: inline-block; height: .5em; width: 10em; overflow: hidden }
|
|
18
18
|
:host::before { content: ''; display: block; height: 100%; background: currentColor; width: var(--percentage, 0%); transition: width .2s }
|
|
19
19
|
:host(:not([value])) { background: linear-gradient(90deg,currentColor 25%, transparent 50%, currentColor 75%) 50%/400% }
|
|
20
20
|
@media (prefers-reduced-motion: no-preference) { :host { animation: indeterminate 2s linear infinite } }
|
|
21
|
-
@keyframes indeterminate { from { background-position-x: 100% } to { background-position-x: 0 } }`))}connectedCallback(){this.attributeChangedCallback()}attributeChangedCallback(){if(
|
|
22
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtY29tYm9ib3gvZGlzdC91LWNvbWJvYm94LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL2Rlc2lnbnN5c3RlbS91dGlscy50cyIsIi4uL2Rlc2lnbnN5c3RlbS9hbmFseXRpY3MvYW5hbHl0aWNzLnRzIiwiLi4vZGVzaWduc3lzdGVtL2FwcC9hcHAtdG9nZ2xlLmpzIiwiLi4vZGVzaWduc3lzdGVtL2FwcC9hcHAtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vcGFnaW5hdGlvbi9wYWdpbmF0aW9uLWhlbHBlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9icmVhZGNydW1icy9icmVhZGNydW1icy1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9kaWFsb2cvZGlhbG9nLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2Vycm9yc3VtbWFyeS9lcnJvcnN1bW1hcnktb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kYXRhbGlzdC9kaXN0L3UtZGF0YWxpc3QuanMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGQvZmllbGQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGRzZXQvZmllbGRzZXQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vbG9nby9sb2dvLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3BvcG92ZXIvcG9wb3Zlci1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90YWJsZS90YWJsZS1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b2dnbGVncm91cC90b2dnbGVncm91cC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b29sdGlwL3Rvb2x0aXAtb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kZXRhaWxzL2Rpc3QvdS1kZXRhaWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtcHJvZ3Jlc3MvZGlzdC91LXByb2dyZXNzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcblxuLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19GSVJFRk9YID0gSVNfQlJPV1NFUiAmJiAvZmlyZWZveC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfSU9TID0gSVNfQlJPV1NFUiAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgRk9DVVNfT1VUTElORSA9IFwib3V0bGluZTogMXB4IGRvdHRlZDsgb3V0bGluZTogNXB4IGF1dG8gSGlnaGxpZ2h0OyBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3JcIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoX2Vycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQyLCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0MikgZWwudGV4dENvbnRlbnQgPSB0ZXh0MjtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIExJVkU7XG52YXIgTElWRV9TUl9GSVggPSAwO1xudmFyIHNwZWFrID0gKHRleHQyKSA9PiB7XG4gIGlmICghTElWRSkge1xuICAgIExJVkUgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIExJVkUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246Zml4ZWQ7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXBcIjtcbiAgICBhdHRyKExJVkUsIFwiYXJpYS1saXZlXCIsIFwiYXNzZXJ0aXZlXCIpO1xuICB9XG4gIGlmICghTElWRS5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoTElWRSk7XG4gIGlmICh0ZXh0MikgTElWRS50ZXh0Q29udGVudCA9IGAke3RleHQyfSR7TElWRV9TUl9GSVgrKyAlIDIgPyBcIlxceEEwXCIgOiBcIlwifWA7XG59O1xudmFyIHNldFZhbHVlID0gKGlucHV0LCBkYXRhLCB0eXBlID0gXCJcIikgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlLCBkYXRhLCBpbnB1dFR5cGU6IHR5cGUgfTtcbiAgY29uc3QgcHJvdG8gPSBIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImJlZm9yZWlucHV0XCIsIGV2ZW50KSk7XG4gIChfYiA9IChfYTIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBcInZhbHVlXCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwoaW5wdXQsIGRhdGEpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiaW5wdXRcIiwgZXZlbnQpKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJjaGFuZ2VcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbn07XG52YXIgSVNfUFJFU1MgPSBmYWxzZTtcbnZhciBpc01vdXNlRG93biA9IChldmVudCkgPT4ge1xuICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gXCJtb3VzZXVwXCIpIElTX1BSRVNTID0gZmFsc2U7XG4gIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSBcIm1vdXNlZG93blwiKSB7XG4gICAgSVNfUFJFU1MgPSB0cnVlO1xuICAgIG9uKGRvY3VtZW50LCBcIm1vdXNldXBcIiwgaXNNb3VzZURvd24sIHsgb25jZTogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gSVNfUFJFU1M7XG59O1xuXG4vLyB1LWNvbWJvYm94LnRzXG52YXIgRVZFTlRTID0gXCJiZWZvcmVpbnB1dCxibHVyLGZvY3VzLGNsaWNrLGlucHV0LGtleWRvd24sbW91c2Vkb3duXCI7XG52YXIgRVZFTlRfT05DRSA9IHsgb25jZTogdHJ1ZSwgcGFzc2l2ZTogdHJ1ZSB9O1xudmFyIElTX0ZJUkVGT1hfREVTS1RPUCA9IElTX0ZJUkVGT1ggJiYgIUlTX0FORFJPSUQ7XG52YXIgSVNfTU9CSUxFID0gSVNfQU5EUk9JRCB8fCBJU19JT1M7XG52YXIgRkFMU0UgPSBcImZhbHNlXCI7XG52YXIgVEVYVFMgPSB7XG4gIGFkZGVkOiBcIkFkZGVkXCIsXG4gIGVtcHR5OiBcIk5vIHNlbGVjdGVkXCIsXG4gIGZvdW5kOiBcIk5hdmlnYXRlIGxlZnQgdG8gZmluZCAlZCBzZWxlY3RlZFwiLFxuICBpbnZhbGlkOiBcIkludmFsaWQgdmFsdWVcIixcbiAgb2Y6IFwib2ZcIixcbiAgcmVtb3ZlOiBcIlByZXNzIHRvIHJlbW92ZVwiLFxuICByZW1vdmVkOiBcIlJlbW92ZWRcIlxufTtcbnZhciBVSFRNTENvbWJvYm94RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9pdGVtID0gXCJcIjtcbiAgICB0aGlzLl9zcGVhayA9IFwiXCI7XG4gICAgdGhpcy5fdGV4dHMgPSBfX3NwcmVhZFZhbHVlcyh7fSwgVEVYVFMpO1xuICAgIHRoaXMuX3ZhbHVlID0gXCJcIjtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAgICAgLy8gQ29udGVudCBzbG90XG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGA6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jazsgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApIH0gLyogTXVzdCBiZSBkaXNwbGF5IGJsb2NrIGluIFNhZmFyaSB0byBhbGxvdyBmb2N1cyBpbnNpZGUgKi9cblx0XHRcdFx0Omhvc3QoOm5vdChbZGF0YS1tdWx0aXBsZV0pKSA6OnNsb3R0ZWQoZGF0YSksXG5cdFx0XHRcdDpob3N0KFtkYXRhLW11bHRpcGxlPVwiZmFsc2VcIl0pIDo6c2xvdHRlZChkYXRhKSB7IGRpc3BsYXk6IG5vbmUgfSAvKiBIaWRlIGRhdGEgaWYgbm90IG11bHRpcGxlICovXG5cdFx0XHRcdDo6c2xvdHRlZChpbnB1dFtpbnB1dG1vZGU9XCJub25lXCJdKSB7IG91dGxpbmU6IG5vbmUgfSAvKiBIaWRlIHRlbXBvcmFyeSBmb3VjcyBvdXRsaW5lIGZsYXNoICovXG5cdFx0XHRcdDo6c2xvdHRlZChkZWwpIHsgdGV4dC1kZWNvcmF0aW9uOiBub25lIH1cblx0XHRcdFx0OjpzbG90dGVkKGRhdGE6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBvaW50ZXItZXZlbnRzOiBub25lIH1cbiAgICAgICAgOjpzbG90dGVkKGRhdGEpOjphZnRlciB7IGNvbnRlbnQ6ICdcXFxcMDBENyc7IGNvbnRlbnQ6ICdcXFxcMDBENycgLyAnJzsgcGFkZGluZy1pbmxpbmU6IC41Y2g7IHBvaW50ZXItZXZlbnRzOiBhdXRvOyBjdXJzb3I6IHBvaW50ZXIgfVxuICAgICAgICA6OnNsb3R0ZWQoZGF0YTpmb2N1cykgeyAke0ZPQ1VTX09VVExJTkV9IH1gXG4gICAgICApXG4gICAgKTtcbiAgfVxuICAvLyBMb2NhbGx5IHN0b3JlIHZhbHVlIHRvIHN0b3JlIHZhbHVlIGJlZm9yZSBpbnB1dC1jbGlja1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoVEVYVFMpLm1hcCgoa2V5KSA9PiBgZGF0YS1zci0ke2tleX1gKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLl9yb290ID0gZ2V0Um9vdCh0aGlzKTtcbiAgICBvbih0aGlzLCBFVkVOVFMsIHRoaXMsIHRydWUpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywge1xuICAgICAgYXR0cmlidXRlRmlsdGVyOiBbXCJ2YWx1ZVwiLCBcImlkXCJdLFxuICAgICAgLy8gUmVzcG9uZCB0byBjaGFuZ2VzIGluIDxkYXRhPiB2YWx1ZSBvciBjaGFuZ2Ugb2YgaWQgZm9yIDxkYXRhbGlzdD4gdG8gcmVjb25uZWN0IHdpdGggaW5wdXRcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxuICAgICAgLy8gUmVzcG9uZCB0byBjaGFuZ2VzIGluIDxkYXRhPiB0ZXh0Q29udGVudFxuICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgc3VidHJlZTogdHJ1ZVxuICAgIH0pO1xuICAgIHNldFRpbWVvdXQocmVuZGVyLCAwLCB0aGlzKTtcbiAgICBzZXRUaW1lb3V0KHN5bmNJbnB1dFZhbHVlLCAwLCB0aGlzKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socHJvcCwgXywgdmFsKSB7XG4gICAgY29uc3QgdGV4dDIgPSBwcm9wLnNwbGl0KFwiZGF0YS1zci1cIilbMV07XG4gICAgaWYgKFRFWFRTW3RleHQyXSkgdGhpcy5fdGV4dHNbdGV4dDJdID0gdmFsIHx8IFRFWFRTW3RleHQyXTtcbiAgfVxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIGZhbHNlKTtcbiAgICBvZmYodGhpcywgRVZFTlRTLCB0aGlzLCB0cnVlKTtcbiAgICB0aGlzLl9pdGVtcyA9IHRoaXMuX2NsZWFyID0gdGhpcy5fZm9jdXMgPSB0aGlzLl9jb250cm9sID0gdm9pZCAwO1xuICAgIHRoaXMuX2xpc3QgPSB0aGlzLl9vcHRpb25zID0gdGhpcy5fcm9vdCA9IHZvaWQgMDtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkgcmV0dXJuO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJlZm9yZWlucHV0XCIpIHRoaXMuX3ZhbHVlID0gKHRhcmdldCA9PSBudWxsID8gdm9pZCAwIDogdGFyZ2V0LnZhbHVlKSB8fCBcIlwiO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJsdXJcIikgb25CbHVyKHRoaXMpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIpIG9uQ2xpY2sodGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImZvY3VzXCIpIG9uRm9jdXModGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImlucHV0XCIpIG9uSW5wdXQodGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgb25LZXlEb3duKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgaXNNb3VzZURvd24oZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcIm11dGF0aW9uXCIpIHJlbmRlcih0aGlzLCBldmVudCk7XG4gIH1cbiAgZ2V0IG11bHRpcGxlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gYXR0cih0aGlzLCBcImRhdGEtbXVsdGlwbGVcIikpICE9IG51bGwgPyBfYTIgOiBGQUxTRSkgIT09IEZBTFNFO1xuICB9XG4gIHNldCBtdWx0aXBsZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJkYXRhLW11bHRpcGxlXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBjcmVhdGFibGUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKChfYTIgPSBhdHRyKHRoaXMsIFwiZGF0YS1jcmVhdGFibGVcIikpICE9IG51bGwgPyBfYTIgOiBGQUxTRSkgIT09IEZBTFNFO1xuICB9XG4gIHNldCBjcmVhdGFibGUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwiZGF0YS1jcmVhdGFibGVcIiwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgZ2V0IGNvbnRyb2woKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpXG4gICAgICB0aGlzLl9jb250cm9sID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIik7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2w7XG4gIH1cbiAgZ2V0IGxpc3QoKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fbGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpXG4gICAgICB0aGlzLl9saXN0ID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwidS1kYXRhbGlzdCxkYXRhbGlzdFwiKTtcbiAgICByZXR1cm4gdGhpcy5fbGlzdDtcbiAgfVxuICBnZXQgY2xlYXIoKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fY2xlYXIpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuaXNDb25uZWN0ZWQpKSB0aGlzLl9jbGVhciA9IHRoaXMucXVlcnlTZWxlY3RvcihcImRlbFwiKTtcbiAgICByZXR1cm4gdGhpcy5fY2xlYXI7XG4gIH1cbiAgZ2V0IGl0ZW1zKCkge1xuICAgIGlmICghdGhpcy5faXRlbXMpIHRoaXMuX2l0ZW1zID0gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImRhdGFcIik7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICB9XG4gIGdldCBvcHRpb25zKCkge1xuICAgIHZhciBfYTIsIF9iO1xuICAgIGlmICghdGhpcy5fb3B0aW9ucykge1xuICAgICAgY29uc3QgdGFnID0gKChfYTIgPSB0aGlzLmxpc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIubm9kZU5hbWUpID09PSBcIlUtREFUQUxJU1RcIiA/IFwidS1vcHRpb25cIiA6IFwib3B0aW9uXCI7XG4gICAgICB0aGlzLl9vcHRpb25zID0gKF9iID0gdGhpcy5saXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cbiAgZ2V0IHZhbHVlcygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuaXRlbXNdLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSk7XG4gIH1cbn07XG52YXIgdGV4dCA9IChlbCkgPT4ge1xuICB2YXIgX2EyO1xuICByZXR1cm4gKChfYTIgPSBlbCA9PSBudWxsID8gdm9pZCAwIDogZWwudGV4dENvbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xufTtcbnZhciBpc0RhdGEgPSAoZWwpID0+IGVsIGluc3RhbmNlb2YgSFRNTERhdGFFbGVtZW50O1xudmFyIGlzRGlzYWJsZWQgPSAoeyBjb250cm9sIH0pID0+IChjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmRpc2FibGVkKSB8fCAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5yZWFkT25seSkgfHwgZmFsc2U7XG52YXIgcmVuZGVyID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTIsIF9iO1xuICBjb25zdCB7IF9mb2N1cywgX3RleHRzLCBpdGVtcywgY29udHJvbCwgbGlzdCwgbXVsdGlwbGUgfSA9IHNlbGY7XG4gIGxldCBsYWJlbCA9IGAke3RleHQoKF9hMiA9IGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wubGFiZWxzKSA9PSBudWxsID8gdm9pZCAwIDogX2EyWzBdKX0ke211bHRpcGxlID8gYCwgJHtpdGVtcy5sZW5ndGggPyBfdGV4dHMuZm91bmQucmVwbGFjZShcIiVkXCIsIGAke2l0ZW1zLmxlbmd0aH1gKSA6IF90ZXh0cy5lbXB0eX1gIDogXCJcIn1gO1xuICBjb25zdCBlZGl0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHsgYWRkZWROb2RlcywgcmVtb3ZlZE5vZGVzIH0gb2YgKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC5kZXRhaWwpIHx8IFtdKSB7XG4gICAgZm9yIChjb25zdCBlbCBvZiBhZGRlZE5vZGVzKSBpZiAoaXNEYXRhKGVsKSkgZWRpdHMudW5zaGlmdChlbCk7XG4gICAgZm9yIChjb25zdCBlbCBvZiByZW1vdmVkTm9kZXMpIGlmIChpc0RhdGEoZWwpKSBlZGl0cy5wdXNoKGVsKTtcbiAgfVxuICBjb25zdCBzaG91bGRBbm5vdW5jZSA9IG11bHRpcGxlID8gZWRpdHMubGVuZ3RoID09PSAxIDogZWRpdHNbMF0gPT09IF9mb2N1cztcbiAgaWYgKF9mb2N1cyAmJiBjb250cm9sICYmIHNob3VsZEFubm91bmNlKSB7XG4gICAgY29uc3QgYXJpYUV4cGFuZGVkID0gYXR0cihjb250cm9sLCBcImFyaWEtZXhwYW5kZWRcIik7XG4gICAgY29uc3QgaW5wdXRNb2RlID0gYXR0cihjb250cm9sLCBcImlucHV0bW9kZVwiKTtcbiAgICBjb25zdCBuZXh0Rm9jdXMgPSBpc0RhdGEoX2ZvY3VzKSA/IGNvbnRyb2wgOiBfZm9jdXM7XG4gICAgY29uc3QgaXNSZW1vdmUgPSAhZWRpdHNbMF0uaXNDb25uZWN0ZWQ7XG4gICAgc2VsZi5fc3BlYWsgPSBgJHtfdGV4dHNbaXNSZW1vdmUgPyBcInJlbW92ZWRcIiA6IFwiYWRkZWRcIl19ICR7dGV4dChlZGl0c1swXSl9LCBgO1xuICAgIGlmIChJU19NT0JJTEUgfHwgX2ZvY3VzID09PSBjb250cm9sKSBzcGVhayhzZWxmLl9zcGVhayk7XG4gICAgaWYgKGNvbnRyb2wgIT09IG5leHRGb2N1cykge1xuICAgICAgYXR0cihjb250cm9sLCBcImFyaWEtZXhwYW5kZWRcIiwgbnVsbCk7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIsIFwibm9uZVwiKTtcbiAgICAgIGxhYmVsID0gXCJcXHhBMFwiO1xuICAgICAgY29udHJvbC5mb2N1cygpO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHZhciBfYTM7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiLCBhcmlhRXhwYW5kZWQpO1xuICAgICAgYXR0cihjb250cm9sLCBcImlucHV0bW9kZVwiLCBpc1JlbW92ZSA/IFwibm9uZVwiIDogaW5wdXRNb2RlKTtcbiAgICAgIChfYTMgPSBuZXh0Rm9jdXMgPT0gbnVsbCA/IHZvaWQgMCA6IG5leHRGb2N1cy5mb2N1cykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMy5jYWxsKG5leHRGb2N1cyk7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIsIGlucHV0TW9kZSk7XG4gICAgICBzZWxmLl9zcGVhayA9IFwiXCI7XG4gICAgICBpZiAoSVNfRklSRUZPWF9ERVNLVE9QKSBvbihzZWxmLCBcImJsdXJcIiwgKCkgPT4gcmVuZGVyKHNlbGYpLCBFVkVOVF9PTkNFKTtcbiAgICAgIGVsc2Ugc2V0VGltZW91dChyZW5kZXIsIDEwMCwgc2VsZik7XG4gICAgfSwgMTAwKTtcbiAgfVxuICBsZXQgaWR4ID0gMDtcbiAgY29uc3Qgc2VsZWN0ID0gc2VsZi5xdWVyeVNlbGVjdG9yKFwic2VsZWN0XCIpO1xuICBjb25zdCByZW1vdmUgPSBpc0Rpc2FibGVkKHNlbGYpID8gXCJcIiA6IGAke190ZXh0cy5yZW1vdmV9LCBgO1xuICBmb3IgKGNvbnN0IGl0ZW0yIG9mIGl0ZW1zKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gc2VsZWN0ID09IG51bGwgPyB2b2lkIDAgOiBzZWxlY3Qub3B0aW9uc1tpZHhdO1xuICAgIGNvbnN0IGxhYmVsMiA9IHRleHQoaXRlbTIpO1xuICAgIGNvbnN0IHZhbHVlID0gaXRlbTIudmFsdWUgfHwgbGFiZWwyO1xuICAgIGNvbnN0IGFyaWEgPSBgJHtzZWxmLl9zcGVha30ke2xhYmVsMn0sICR7cmVtb3ZlfSR7KytpZHh9ICR7X3RleHRzLm9mfSAke2l0ZW1zLmxlbmd0aH1gO1xuICAgIGF0dHIoaXRlbTIsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgICBhdHRyKGl0ZW0yLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgICBhdHRyKGl0ZW0yLCBcInRhYmluZGV4XCIsIFwiLTFcIik7XG4gICAgYXR0cihpdGVtMiwgXCJhcmlhLWxhYmVsXCIsIGFyaWEpO1xuICAgIGlmIChvcHRpb24pIE9iamVjdC5hc3NpZ24ob3B0aW9uLCB7IHRleHRDb250ZW50OiBsYWJlbDIsIHZhbHVlIH0pO1xuICAgIGVsc2Ugc2VsZWN0ID09IG51bGwgPyB2b2lkIDAgOiBzZWxlY3QuYXBwZW5kQ2hpbGQobmV3IE9wdGlvbihsYWJlbDIsIHZhbHVlLCB0cnVlLCB0cnVlKSk7XG4gIH1cbiAgaWYgKHNlbGVjdCkgYXR0cihzZWxlY3QsIFwibXVsdGlwbGVcIiwgbXVsdGlwbGUgPyBcIlwiIDogbnVsbCk7XG4gIGZvciAoY29uc3Qgb3B0IG9mIFsuLi4oc2VsZWN0ID09IG51bGwgPyB2b2lkIDAgOiBzZWxlY3Qub3B0aW9ucykgfHwgW11dLnNsaWNlKGlkeCkpIG9wdC5yZW1vdmUoKTtcbiAgaWYgKCFtdWx0aXBsZSAmJiBpZHggPiAxKVxuICAgIGNvbnNvbGUud2FybihcInUtY29tYm9ib3g6IE11bHRpcGxlIDxkYXRhPiBmb3VuZCBpbiBzaW5nbGUgbW9kZS5cIik7XG4gIGlmIChsaXN0KSBhdHRyKGxpc3QsIFwiYXJpYS1tdWx0aXNlbGVjdGFibGVcIiwgYCR7bXVsdGlwbGV9YCk7XG4gIGlmIChjb250cm9sKSBhdHRyKGNvbnRyb2wsIFwibGlzdFwiLCB1c2VJZChsaXN0KSk7XG4gIGlmIChjb250cm9sKSBhdHRyKGNvbnRyb2wsIFwiYXJpYS1sYWJlbFwiLCBgJHtzZWxmLl9zcGVha30ke2xhYmVsfWApO1xuICBjb25zdCBpdGVtID0gdGV4dChpdGVtc1swXSk7XG4gIGlmIChpdGVtICE9PSBzZWxmLl9pdGVtKSBzeW5jSW5wdXRWYWx1ZShzZWxmKTtcbiAgc2VsZi5faXRlbSA9IGl0ZW07XG4gIHN5bmNDbGVhcldpdGhJbnB1dChzZWxmKTtcbiAgc3luY09wdGlvbnNXaXRoSXRlbXMoc2VsZik7XG4gIChfYiA9IG11dGF0aW9uT2JzZXJ2ZXIoc2VsZikpID09IG51bGwgPyB2b2lkIDAgOiBfYi50YWtlUmVjb3JkcygpO1xufTtcbnZhciBzeW5jQ2xlYXJXaXRoSW5wdXQgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoc2VsZi5jbGVhcikgYXR0cihzZWxmLmNsZWFyLCBcInJvbGVcIiwgXCJidXR0b25cIik7XG4gIGlmIChzZWxmLmNsZWFyKSBzZWxmLmNsZWFyLmhpZGRlbiA9ICEoKF9hMiA9IHNlbGYuY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi52YWx1ZSkgfHwgaXNEaXNhYmxlZChzZWxmKTtcbn07XG52YXIgc3luY09wdGlvbnNXaXRoSXRlbXMgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF9zcGVhaywgb3B0aW9ucyA9IFtdLCB2YWx1ZXMgfSA9IHNlbGY7XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IChfYTIgPSBhdHRyKG9wdCwgXCJ2YWx1ZVwiKSkgIT0gbnVsbCA/IF9hMiA6IHRleHQob3B0KTtcbiAgICBhdHRyKG9wdCwgXCJhcmlhLWxhYmVsXCIsIF9zcGVhayA/IGAke19zcGVha30ke3RleHQob3B0KX1gIDogbnVsbCk7XG4gICAgYXR0cihvcHQsIFwic2VsZWN0ZWRcIiwgdmFsdWVzLmluY2x1ZGVzKHZhbHVlKSA/IFwiXCIgOiBudWxsKTtcbiAgfVxufTtcbnZhciBzeW5jSW5wdXRWYWx1ZSA9IChzZWxmKSA9PiB7XG4gIGNvbnN0IHsgbXVsdGlwbGUsIGNvbnRyb2wsIGl0ZW1zIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9IHRleHQoaXRlbXNbMF0pO1xuICBpZiAoIW11bHRpcGxlICYmIGNvbnRyb2wgJiYgdmFsdWUgIT09IGNvbnRyb2wudmFsdWUpXG4gICAgc2V0VmFsdWUoY29udHJvbCwgdmFsdWUsIHZhbHVlID8gXCJpbnNlcnRUZXh0XCIgOiBcImRlbGV0ZUNvbnRlbnRcIik7XG59O1xudmFyIGRpc3BhdGNoTWF0Y2ggPSAoc2VsZiwgY2hhbmdlID0gdHJ1ZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF90ZXh0cywgb3B0aW9ucyA9IFtdLCBjcmVhdGFibGUsIGNvbnRyb2wsIGl0ZW1zLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgdmFsdWUgPSAoKF9hMiA9IGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBxdWVyeSA9IHZhbHVlLnRvTG93ZXJDYXNlKCkgfHwgbnVsbDtcbiAgbGV0IG1hdGNoID0gWy4uLm9wdGlvbnNdLmZpbmQoXG4gICAgKG9wdCkgPT4gKGF0dHIob3B0LCBcImxhYmVsXCIpIHx8IHRleHQob3B0KSkudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IHF1ZXJ5XG4gICk7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IG1hdGNoIH07XG4gIGlmICghc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImNvbWJvYm94YmVmb3JlbWF0Y2hcIiwgZXZlbnQpKSlcbiAgICBtYXRjaCA9IFsuLi5vcHRpb25zXS5maW5kKChvKSA9PiBvLnNlbGVjdGVkKTtcbiAgaWYgKGNoYW5nZSkge1xuICAgIHN5bmNPcHRpb25zV2l0aEl0ZW1zKHNlbGYpO1xuICAgIGlmIChtYXRjaCkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIG1hdGNoLCBmYWxzZSk7XG4gICAgaWYgKGNyZWF0YWJsZSAmJiB2YWx1ZSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIHsgdmFsdWUgfSwgZmFsc2UpO1xuICAgIGlmICghbXVsdGlwbGUgJiYgIXZhbHVlICYmIGl0ZW1zWzBdKSBkaXNwYXRjaENoYW5nZShzZWxmLCBpdGVtc1swXSk7XG4gICAgZWxzZSBzeW5jSW5wdXRWYWx1ZShzZWxmKTtcbiAgICByZXR1cm4gc3BlYWsoX3RleHRzLmludmFsaWQpO1xuICB9XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIG9wdC5zZWxlY3RlZCA9IG9wdCA9PT0gbWF0Y2g7XG59O1xudmFyIGRpc3BhdGNoQ2hhbmdlID0gKHNlbGYsIGl0ZW0sIHJlbW92YWJsZSA9IHRydWUpID0+IHtcbiAgY29uc3QgeyBjb250cm9sLCBpdGVtcywgbXVsdGlwbGUgfSA9IHNlbGY7XG4gIGNvbnN0IGFkZCA9IGNyZWF0ZUVsZW1lbnQoXCJkYXRhXCIsIGl0ZW0ubGFiZWwgfHwgaXRlbS52YWx1ZSwge1xuICAgIHZhbHVlOiBpdGVtLnZhbHVlXG4gIH0pO1xuICBjb25zdCByZW1vdmUgPSBbLi4uaXRlbXNdLmZpbmQoKGkpID0+IGkudmFsdWUgPT09IGl0ZW0udmFsdWUpO1xuICBjb25zdCBldmVudCA9IHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSwgZGV0YWlsOiByZW1vdmUgfHwgYWRkIH07XG4gIGNvbnN0IHNraXAgPSByZW1vdmUgJiYgIXJlbW92YWJsZTtcbiAgaWYgKHNraXApIHJldHVybiBzeW5jSW5wdXRWYWx1ZShzZWxmKTtcbiAgaWYgKHNlbGYuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJjb21ib2JveGJlZm9yZXNlbGVjdFwiLCBldmVudCkpKSB7XG4gICAgaWYgKCFtdWx0aXBsZSkgZm9yIChjb25zdCBpdGVtMiBvZiBbLi4uaXRlbXNdKSBpdGVtMi5yZW1vdmUoKTtcbiAgICBpZiAocmVtb3ZlKSByZW1vdmUucmVtb3ZlKCk7XG4gICAgZWxzZSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmluc2VydEFkamFjZW50RWxlbWVudChcImJlZm9yZWJlZ2luXCIsIGFkZCk7XG4gICAgc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImNvbWJvYm94YWZ0ZXJzZWxlY3RcIiwgZXZlbnQpKTtcbiAgfVxufTtcbnZhciBvbkZvY3VzID0gKHNlbGYsIHsgdGFyZ2V0IH0pID0+IHtcbiAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBzZWxmLl9mb2N1cyA9IHRhcmdldDtcbiAgc3BlYWsoKTtcbn07XG52YXIgb25CbHVyID0gKHNlbGYpID0+IGlzTW91c2VEb3duKCkgfHwgc2V0VGltZW91dChvbkJsdXJyZWQsIDAsIHNlbGYpO1xudmFyIG9uQmx1cnJlZCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmICghc2VsZi5fZm9jdXMgfHwgc2VsZi5jb250YWlucygoX2EyID0gc2VsZi5fcm9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5hY3RpdmVFbGVtZW50KSkgcmV0dXJuO1xuICBpZiAoIXNlbGYubXVsdGlwbGUpIGRpc3BhdGNoTWF0Y2goc2VsZik7XG4gIHNlbGYuX2ZvY3VzID0gdm9pZCAwO1xufTtcbnZhciBvbkNsaWNrID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIGNvbnN0IHsgY2xpZW50WDogeCwgY2xpZW50WTogeSwgdGFyZ2V0IH0gPSBldmVudDtcbiAgY29uc3QgeyBjbGVhciwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGlmIChjbGVhciA9PSBudWxsID8gdm9pZCAwIDogY2xlYXIuY29udGFpbnModGFyZ2V0KSkge1xuICAgIGlmIChjb250cm9sKSBzZXRWYWx1ZShjb250cm9sLCBcIlwiLCBcImRlbGV0ZUNvbnRlbnRCYWNrd2FyZFwiKTtcbiAgICByZXR1cm4gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpO1xuICB9XG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSBpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChpdGVtLmNvbnRhaW5zKHRhcmdldCkpIHJldHVybiBkaXNwYXRjaENoYW5nZShzZWxmLCBpdGVtKTtcbiAgICBpZiAoeSA+PSB0b3AgJiYgeSA8PSBib3R0b20gJiYgeCA+PSBsZWZ0ICYmIHggPD0gcmlnaHQpIHJldHVybiBpdGVtLmZvY3VzKCk7XG4gIH1cbiAgaWYgKHRhcmdldCA9PT0gc2VsZikgY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpO1xufTtcbnZhciBvbklucHV0ID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgb3B0aW9ucyA9IFtdLCBjb250cm9sLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgdmFsdWUgPSAoKF9hMiA9IGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBpc0NsaWNrID0gZXZlbnQgaW5zdGFuY2VvZiBJbnB1dEV2ZW50ID8gIWV2ZW50LmlucHV0VHlwZSB8fCBldmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0XCIgOiAhIXZhbHVlO1xuICBpZiAoaXNDbGljaykge1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIGlmIChjb250cm9sKSBjb250cm9sLnZhbHVlID0gc2VsZi5fdmFsdWU7XG4gICAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucylcbiAgICAgIGlmIChvcHQudmFsdWUgJiYgb3B0LnZhbHVlID09PSB2YWx1ZSlcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIG9wdCwgbXVsdGlwbGUpO1xuICB9IGVsc2UgaWYgKCFtdWx0aXBsZSkgZGlzcGF0Y2hNYXRjaChzZWxmLCBmYWxzZSk7XG4gIHN5bmNDbGVhcldpdGhJbnB1dChzZWxmKTtcbn07XG52YXIgb25LZXlEb3duID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LnNoaWZ0S2V5KSByZXR1cm47XG4gIGNvbnN0IHsgY2xlYXIsIGNvbnRyb2wsIGl0ZW1zIH0gPSBzZWxmO1xuICBjb25zdCB7IGtleSwgcmVwZWF0LCB0YXJnZXQgfSA9IGV2ZW50O1xuICBjb25zdCBpc0NvbnRyb2wgPSBjb250cm9sICYmIGNvbnRyb2wgPT09IHRhcmdldDtcbiAgY29uc3QgaW5UZXh0ID0gaXNDb250cm9sICYmIChjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLnNlbGVjdGlvbkVuZCk7XG4gIGxldCBpbmRleCA9IGlzQ29udHJvbCA/IGl0ZW1zLmxlbmd0aCA6IFsuLi5pdGVtc10uaW5kZXhPZih0YXJnZXQpO1xuICBpZiAoaXNDb250cm9sICYmIGtleSA9PT0gXCJUYWJcIiAmJiBjbGVhciAmJiAhY2xlYXIuaGlkZGVuKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjbGVhci50YWJJbmRleCA9IC0xO1xuICAgIGNsZWFyLmZvY3VzKCk7XG4gICAgb24oY2xlYXIsIFwiYmx1clwiLCAoKSA9PiBhdHRyKGNsZWFyLCBcInRhYmluZGV4XCIsIG51bGwpLCBFVkVOVF9PTkNFKTtcbiAgfVxuICBpZiAoIWlzQ29udHJvbCAmJiBhc0J1dHRvbihldmVudCkgfHwgaW5kZXggPT09IC0xKSByZXR1cm47XG4gIGlmIChrZXkgPT09IFwiQXJyb3dSaWdodFwiICYmICFpc0NvbnRyb2wpIGluZGV4ICs9IDE7XG4gIGVsc2UgaWYgKGtleSA9PT0gXCJBcnJvd0xlZnRcIiAmJiAhaW5UZXh0KSBpbmRleCAtPSAxO1xuICBlbHNlIGlmIChrZXkgPT09IFwiRW50ZXJcIiAmJiBpc0NvbnRyb2wpIHtcbiAgICBjb25zdCBmb3JtID0gYXR0cihjb250cm9sLCBcImZvcm1cIik7XG4gICAgYXR0cihjb250cm9sLCBcImZvcm1cIiwgXCIjXCIpO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiLCBmb3JtKSk7XG4gICAgcmV0dXJuIGRpc3BhdGNoTWF0Y2goc2VsZik7XG4gIH0gZWxzZSBpZiAoKGtleSA9PT0gXCJCYWNrc3BhY2VcIiB8fCBrZXkgPT09IFwiRGVsZXRlXCIpICYmICFpblRleHQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghcmVwZWF0ICYmIGl0ZW1zW2luZGV4XSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW1zW2luZGV4XSk7XG4gICAgaWYgKGlzQ29udHJvbCkgaW5kZXggLT0gMTtcbiAgfSBlbHNlIHJldHVybiBpc0NvbnRyb2wgfHwgKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuZm9jdXMoKSk7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIChfYTIgPSBpdGVtc1tNYXRoLm1heCgwLCBpbmRleCldIHx8IGNvbnRyb2wpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZm9jdXMoKTtcbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWNvbWJvYm94XCIsIFVIVE1MQ29tYm9ib3hFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxDb21ib2JveEVsZW1lbnQgfTtcbiIsIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFNBRkVfTEFCRUxMRURCWSA9IGAke0lTX0FORFJPSUQgPyBcImRhdGFcIiA6IFwiYXJpYVwifS1sYWJlbGxlZGJ5YDtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgLy8gVW5uYW1lZCBzbG90IGRvZXMgYXV0b21hdGljYWxseSByZW5kZXIgYWxsIHRvcCBlbGVtZW50IG5vZGVzXG4gIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBjc3MpXG4pO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xuXG4vLyB1LXRhYnMudHNcbnZhciBBUklBX0NPTlRST0xTID0gXCJhcmlhLWNvbnRyb2xzXCI7XG52YXIgQVJJQV9TRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xudmFyIFVIVE1MVGFic0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgRElTUExBWV9CTE9DSyk7XG4gIH1cbiAgZ2V0IHRhYkxpc3QoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFibGlzdFwiLCB0aGlzKVswXSB8fCBudWxsO1xuICB9XG4gIGdldCBzZWxlY3RlZEluZGV4KCkge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicyk7XG4gIH1cbiAgc2V0IHNlbGVjdGVkSW5kZXgoaW5kZXgpIHtcbiAgICBzZXRTZWxlY3RlZCh0aGlzLnRhYnNbaW5kZXhdKTtcbiAgfVxuICBnZXQgdGFicygpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJcIiwgdGhpcyk7XG4gIH1cbiAgZ2V0IHBhbmVscygpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJwYW5lbFwiLCB0aGlzKTtcbiAgfVxufTtcbnZhciBVSFRNTFRhYkxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFibGlzdFwiKTtcbiAgICBvbih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCkgdGhpcy5oYW5kbGVFdmVudCgpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG9mZih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LnR5cGUgPT09IFwibXV0YXRpb25cIikge1xuICAgICAgY29uc3QgdGFiID0gdGhpcy50YWJzW01hdGgubWF4KHRoaXMuc2VsZWN0ZWRJbmRleCwgMCldO1xuICAgICAgcmV0dXJuIHRhYiA9PSBudWxsID8gdm9pZCAwIDogdGFiLnNldEF0dHJpYnV0ZShBUklBX1NFTEVDVEVELCBcInRydWVcIik7XG4gICAgfVxuICAgIGNvbnN0IHsga2V5IH0gPSBldmVudDtcbiAgICBjb25zdCB0YWJzID0gWy4uLnRoaXMudGFic107XG4gICAgY29uc3QgcHJldiA9IHRhYnMuZmluZEluZGV4KCh0YWIpID0+IHRhYi5jb250YWlucyhldmVudC50YXJnZXQpKTtcbiAgICBsZXQgbmV4dCA9IHByZXY7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgcHJldiA9PT0gLTEpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSBzZXRTZWxlY3RlZCh0YWJzW3ByZXZdKTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIgJiYgIWFzQnV0dG9uKGV2ZW50KSkge1xuICAgICAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIiB8fCBrZXkgPT09IFwiQXJyb3dSaWdodFwiKVxuICAgICAgICBuZXh0ID0gKHByZXYgKyAxKSAlIHRhYnMubGVuZ3RoO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93VXBcIiB8fCBrZXkgPT09IFwiQXJyb3dMZWZ0XCIpXG4gICAgICAgIG5leHQgPSAocHJldiB8fCB0YWJzLmxlbmd0aCkgLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkVuZFwiKSBuZXh0ID0gdGFicy5sZW5ndGggLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkhvbWVcIikgbmV4dCA9IDA7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiVGFiXCIpIG5leHQgPSBnZXRTZWxlY3RlZEluZGV4KHRhYnMpO1xuICAgICAgZWxzZSByZXR1cm47XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGFic1twcmV2XS50YWJJbmRleCA9IC0xO1xuICAgICAgICB0YWJzW25leHRdLnRhYkluZGV4ID0gMDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGtleSAhPT0gXCJUYWJcIikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0YWJzW25leHRdLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJzKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWRJbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpO1xuICB9XG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4KSB7XG4gICAgc2V0U2VsZWN0ZWQodGhpcy50YWJzW2luZGV4XSk7XG4gIH1cbn07XG52YXIgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xudmFyIFVIVE1MVGFiRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImlkXCIsIEFSSUFfU0VMRUNURUQsIEFSSUFfQ09OVFJPTFNdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUoXG4gICAgICB0aGlzLFxuICAgICAgXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jayB9XCJcbiAgICApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFiXCIpO1xuICAgIHRoaXMudGFiSW5kZXggPSB0aGlzLnNlbGVjdGVkID8gMCA6IC0xO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoIVNLSVBfQVRUUl9DSEFOR0UgJiYgdGhpcy5zZWxlY3RlZCAmJiB0aGlzLnRhYkxpc3QpIHtcbiAgICAgIFNLSVBfQVRUUl9DSEFOR0UgPSB0cnVlO1xuICAgICAgY29uc3QgdGFicyA9IFsuLi50aGlzLnRhYkxpc3QucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpXTtcbiAgICAgIGNvbnN0IHBhbmVscyA9IHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFicGFuZWxcIiwgdGhpcy50YWJzRWxlbWVudCB8fCB0aGlzKTtcbiAgICAgIGNvbnN0IG5leHRQYW5lbCA9IGdldFBhbmVsKHRoaXMsIHBhbmVsc1t0YWJzLmluZGV4T2YodGhpcyldKTtcbiAgICAgIGlmIChuZXh0UGFuZWwpIGF0dHIobmV4dFBhbmVsLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKHRoaXMpKTtcbiAgICAgIHRhYnMuZm9yRWFjaCgodGFiLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBwYW5lbCA9IGdldFBhbmVsKHRhYiwgcGFuZWxzW2luZGV4XSk7XG4gICAgICAgIHRhYi50YWJJbmRleCA9IHRhYiA9PT0gdGhpcyA/IDAgOiAtMTtcbiAgICAgICAgYXR0cih0YWIsIEFSSUFfU0VMRUNURUQsIGAke3RhYiA9PT0gdGhpc31gKTtcbiAgICAgICAgaWYgKHBhbmVsKSBwYW5lbC5oaWRkZW4gPSBwYW5lbCAhPT0gbmV4dFBhbmVsO1xuICAgICAgICBpZiAocGFuZWwpIGF0dHIodGFiLCBBUklBX0NPTlRST0xTLCBwYW5lbC5pZCk7XG4gICAgICB9KTtcbiAgICAgIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYkxpc3QoKSB7XG4gICAgY29uc3QgdGFibGlzdCA9IHRoaXMucGFyZW50RWxlbWVudDtcbiAgICByZXR1cm4gKHRhYmxpc3QgPT0gbnVsbCA/IHZvaWQgMCA6IHRhYmxpc3Qubm9kZU5hbWUpID09PSBcIlUtVEFCTElTVFwiID8gdGFibGlzdCA6IG51bGw7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIEFSSUFfU0VMRUNURUQpID09PSBcInRydWVcIjtcbiAgfVxuICBzZXQgc2VsZWN0ZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIEFSSUFfU0VMRUNURUQsIGAkeyEhdmFsdWV9YCk7XG4gIH1cbiAgLyoqIFJldHJpZXZlcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiBhbiB0YWIgaW4gYSB0YWJsaXN0LiAqL1xuICBnZXQgaW5kZXgoKSB7XG4gICAgY29uc3QgdGFiTGlzdCA9IHRoaXMudGFiTGlzdDtcbiAgICByZXR1cm4gdGFiTGlzdCA/IFsuLi50YWJMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKV0uaW5kZXhPZih0aGlzKSA6IDA7XG4gIH1cbiAgZ2V0IHBhbmVsKCkge1xuICAgIHJldHVybiBnZXRQYW5lbCh0aGlzKTtcbiAgfVxufTtcbnZhciBVSFRNTFRhYlBhbmVsRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImhpZGRlblwiXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFicGFuZWxcIik7XG4gICAgdGhpcy5oaWRkZW4gPSBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicykgPT09IC0xO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLmhpZGRlbiB8fCBpc0ZvY3VzYWJsZSh0aGlzLmZpcnN0Q2hpbGQpKVxuICAgICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIG51bGwpO1xuICAgIGVsc2UgdGhpcy50YWJJbmRleCA9IDA7XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgY29uc3QgY3NzID0gYHUtdGFiWyR7QVJJQV9DT05UUk9MU309XCIke3RoaXMuaWR9XCJdYDtcbiAgICByZXR1cm4gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKGNzcyk7XG4gIH1cbn07XG52YXIgcXVlcnlXaXRob3V0TmVzdGVkID0gKHRhZywgc2VsZikgPT4gc2VsZi5xdWVyeVNlbGVjdG9yQWxsKGAke3RhZ306bm90KDpzY29wZSB1LXRhYnBhbmVsICR7dGFnfSlgKTtcbnZhciBnZXRQYW5lbCA9ICh0YWIsIHBhbmVsKSA9PiB7XG4gIGNvbnN0IGlkMiA9IGF0dHIodGFiLCBBUklBX0NPTlRST0xTKSB8fCB1c2VJZChwYW5lbCk7XG4gIGNvbnN0IGVsID0gZ2V0Um9vdCh0YWIpLmdldEVsZW1lbnRCeUlkKGlkMik7XG4gIHJldHVybiAoZWwgPT0gbnVsbCA/IHZvaWQgMCA6IGVsLm5vZGVOYW1lKSA9PT0gXCJVLVRBQlBBTkVMXCIgPyBlbCA6IG51bGw7XG59O1xudmFyIGdldFNlbGVjdGVkSW5kZXggPSAodGFicykgPT4gWy4uLnRhYnNdLmZpbmRJbmRleCgodGFiKSA9PiBhdHRyKHRhYiwgQVJJQV9TRUxFQ1RFRCkgPT09IFwidHJ1ZVwiKTtcbnZhciBzZXRTZWxlY3RlZCA9ICh0YWIpID0+IHRhYiAmJiBhdHRyKHRhYiwgXCJhcmlhLXNlbGVjdGVkXCIsIFwidHJ1ZVwiKTtcbnZhciBpc0ZvY3VzYWJsZSA9IChlbCkgPT4gZWwgaW5zdGFuY2VvZiBFbGVtZW50ICYmICFlbC5tYXRjaGVzKCc6ZGlzYWJsZWQsW3RhYmluZGV4Xj1cIi1cIl0nKSAmJiBlbC5tYXRjaGVzKFxuICBgW2NvbnRlbnRlZGl0YWJsZV0sW2NvbnRyb2xzXSxbaHJlZl0sW3RhYmluZGV4XSxpbnB1dDpub3QoW3R5cGU9XCJoaWRkZW5cIl0pLHNlbGVjdCx0ZXh0YXJlYSxidXR0b24sc3VtbWFyeSxpZnJhbWVgXG4pO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJzXCIsIFVIVE1MVGFic0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJsaXN0XCIsIFVIVE1MVGFiTGlzdEVsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJcIiwgVUhUTUxUYWJFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtdGFicGFuZWxcIiwgVUhUTUxUYWJQYW5lbEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTFRhYkVsZW1lbnQsIFVIVE1MVGFiTGlzdEVsZW1lbnQsIFVIVE1MVGFiUGFuZWxFbGVtZW50LCBVSFRNTFRhYnNFbGVtZW50IH07XG4iLCJpbXBvcnQgeyBjbHN4IH0gZnJvbSBcImNsc3hcIjtcblxuZXhwb3J0IGNvbnN0IFFVSUNLX0VWRU5UID0geyBjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH07XG5leHBvcnQgY29uc3QgSVNfQlJPV1NFUiA9XG5cdHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiO1xuXG4vLyBUT0RPOiBEb2N1bWVudGF0aW9uIGZvciBwcmV0dHlOdW1iZXJcbmxldCBJTlRMX05VTTogSW50bC5OdW1iZXJGb3JtYXQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcHJldHR5TnVtYmVyKG51bWJlcjogbnVtYmVyIHwgc3RyaW5nKSB7XG5cdGlmICghSU5UTF9OVU0pXG5cdFx0SU5UTF9OVU0gPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXG5cdFx0XHQoSVNfQlJPV1NFUiAmJiBhdHRyKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgXCJsYW5nXCIpKSB8fCBcIm5vXCIsXG5cdFx0KTtcblx0cmV0dXJuIElOVExfTlVNLmZvcm1hdChOdW1iZXIobnVtYmVyKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWJvdW5jZTxUIGV4dGVuZHMgdW5rbm93bltdPihcblx0Y2FsbGJhY2s6ICguLi5hcmdzOiBUKSA9PiB2b2lkLFxuXHRkZWxheTogbnVtYmVyLFxuKSB7XG5cdGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cblx0cmV0dXJuICguLi5hcmdzOiBUKSA9PiB7XG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0XHR0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gY2FsbGJhY2soLi4uYXJncyksIGRlbGF5KTtcblx0fTtcbn1cblxuLyoqXG4gKiBhdHRyXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IGdldCwgc2V0IGFuZCByZW1vdmUgYXR0cmlidXRlc1xuICogQHBhcmFtIGVsIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIG5hbWUgVGhlIGF0dHJpYnV0ZSBuYW1lIHRvIGdldCwgc2V0IG9yIHJlbW92ZSwgb3IgYSBvYmplY3QgdG8gc2V0IG11bHRpcGxlIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB2YWx1ZSBBIHZhbGlkIGF0dHJpYnV0ZSB2YWx1ZSBvciBudWxsIHRvIHJlbW92ZSBhdHRyaWJ1dGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dHIoXG5cdGVsOiBFbGVtZW50LFxuXHRuYW1lOiBzdHJpbmcsXG5cdHZhbHVlPzogc3RyaW5nIHwgbnVsbCxcbik6IHN0cmluZyB8IG51bGwge1xuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKSA/PyBudWxsOyAvLyBGYWxsYmFjayB0byBudWxsIG9ubHkgaWYgZWwgaXMgdW5kZWZpbmVkXG5cdGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuXHRyZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiB1c2VJZFxuICogQHJldHVybiBBIGdlbmVyYXRlZCB1bmlxdWUgSURcbiAqL1xubGV0IGlkID0gMDtcbmNvbnN0IFVVSUQgPSBgJHtEYXRlLm5vdygpLnRvU3RyaW5nKDM2KX0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDUpfWA7XG5leHBvcnQgZnVuY3Rpb24gdXNlSWQoZWw6IEVsZW1lbnQpIHtcblx0aWYgKCFlbC5pZCkgZWwuaWQgPSBgJHtVVUlEfSR7KytpZH1gO1xuXHRyZXR1cm4gZWwuaWQ7XG59XG5cbi8vIEludGVybmFsIGhlbHBlciBmb3Igb24gLyBvZmZcbmNvbnN0IGV2ZW50cyA9IChcblx0YWN0aW9uOiBcImFkZFwiIHwgXCJyZW1vdmVcIixcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0cmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj4sXG4pOiB2b2lkID0+IHtcblx0Zm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG5cdFx0cmVzdFswXSA9IHR5cGU7XG5cdFx0ZWxlbWVudFtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdKC4uLnJlc3QpO1xuXHR9XG59O1xuXG4vKipcbiAqIG9uXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9uID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG5cbi8qKlxuICogb2ZmXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9mZiA9IChcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Li4ucmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj5cbik6IHZvaWQgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xuXG4vKipcbiAqIFNjcm9sbGVyIHRhcmdlcyBoZWxwaW5nIGFuY2hvclBvc2l0aW9uXG4gKi9cbmNvbnN0IFNDUk9MTEVSID0gSVNfQlJPV1NFUiA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikgOiBudWxsOyAvLyBVc2VkIHRvIGVuc3VyZSB3ZSBoYXZlIHNjcm9sbGFiaWxpdHkgdW5kZXJcbmNvbnN0IFRBUkdFVFMgPSBuZXcgTWFwPEVsZW1lbnQsICgpID0+IHZvaWQ+KCk7IC8vIFN0b3JlIGN1cnJlbnQgb3BlbiBwb3BwZXJzIGFuZCB0aGVpciB1cGRhdGUgZnVuY3Rpb25zXG5jb25zdCBUQVJHRVRTX1VQREFURSA9ICgpID0+IHtcblx0Zm9yIChjb25zdCBbXywgdXBkYXRlXSBvZiBUQVJHRVRTKSB1cGRhdGUoKTtcbn07XG5cbmlmIChTQ1JPTExFUikge1xuXHRTQ1JPTExFUi5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTtwYWRkaW5nOjFweDt0b3A6MDtsZWZ0OjBweFwiO1xuXHRvbih3aW5kb3csIFwibG9hZCxyZXNpemUsc2Nyb2xsXCIsIFRBUkdFVFNfVVBEQVRFLCBRVUlDS19FVkVOVCk7XG59XG5cbi8qKlxuICogYW5jaG9yUG9zaXRpb25cbiAqIEBwYXJhbSB0YXJnZXQgVGhlIEVsZW1lbnQgdG8gcG9zaXRpb25cbiAqIEBwYXJhbSBhbmNob3IgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIGFuY2hvclxuICovXG5jb25zdCBQT1NJVElPTiA9IHsgdG9wOiAwLCByaWdodDogMSwgYm90dG9tOiAyLCBsZWZ0OiAzIH07IC8vIFNwZWVkIHVwIGJ5IHVzaW5nIGEgY29uc3QgbWFwXG5cbmV4cG9ydCB0eXBlIEFuY2hvclBvc2l0aW9uID0ga2V5b2YgdHlwZW9mIFBPU0lUSU9OO1xuXG5leHBvcnQgZnVuY3Rpb24gYW5jaG9yUG9zaXRpb24oXG5cdHRhcmdldDogSFRNTEVsZW1lbnQsXG5cdGFuY2hvcjogRWxlbWVudCB8IGZhbHNlLFxuXHRwbGFjZT86IHN0cmluZyB8IG51bWJlcixcblx0Zm9yY2U/OiBib29sZWFuLFxuKSB7XG5cdGNvbnN0IHBvc2l0aW9uID1cblx0XHRQT1NJVElPTltwbGFjZSBhcyBrZXlvZiB0eXBlb2YgUE9TSVRJT05dID8/XG5cdFx0TnVtYmVyKHBsYWNlKSA/P1xuXHRcdFBPU0lUSU9OLmJvdHRvbTtcblxuXHRpZiAoYW5jaG9yID09PSBmYWxzZSB8fCAhYW5jaG9yLmlzQ29ubmVjdGVkIHx8ICF0YXJnZXQuaXNDb25uZWN0ZWQpXG5cdFx0cmV0dXJuIFRBUkdFVFMuZGVsZXRlKHRhcmdldCk7IC8vIFN0b3Agd2F0Y2hpbmcgaWYgYW5jaG9yIGlzIHJlbW92ZWQgZnJvbSBET01cblx0aWYgKCFTQ1JPTExFUj8uaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKFNDUk9MTEVSIHx8IFwiXCIpOyAvLyBFbnN1cmUgd2UgaGF2ZSB0aGUgc2Nyb2xsZXJcblx0aWYgKCFUQVJHRVRTLmhhcyh0YXJnZXQpKVxuXHRcdFRBUkdFVFMuc2V0KHRhcmdldCwgKCkgPT4gYW5jaG9yUG9zaXRpb24odGFyZ2V0LCBhbmNob3IsIHBvc2l0aW9uLCBmb3JjZSkpO1xuXG5cdGNvbnN0IGlzSFRNTEFuY2hvciA9IGFuY2hvciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OyAvLyBTVkcgb3IgWE1MIGVsZW1lbnRzIGRvZXMgbm90IGhhdmUgb2Zmc2V0V2lkdGggb3Igb2Zmc2V0SGVpZ2h0XG5cdGNvbnN0IHsgb2Zmc2V0V2lkdGg6IHRhcmdldFcsIG9mZnNldEhlaWdodDogdGFyZ2V0SCB9ID0gdGFyZ2V0O1xuXHRjb25zdCBhbmNob3JXID0gaXNIVE1MQW5jaG9yID8gYW5jaG9yLm9mZnNldFdpZHRoIDogYW5jaG9yLmNsaWVudFdpZHRoO1xuXHRjb25zdCBhbmNob3JIID0gaXNIVE1MQW5jaG9yID8gYW5jaG9yLm9mZnNldEhlaWdodCA6IGFuY2hvci5jbGllbnRIZWlnaHQ7XG5cdGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wIH0gPSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0Ly8gR2V0IHZpc3VhbCB2aWV3cG9ydCBpbmZvXG5cdGNvbnN0IHZpZXdXID0gd2luZG93LnZpc3VhbFZpZXdwb3J0Py53aWR0aCB8fCB3aW5kb3cuaW5uZXJXaWR0aDtcblx0Y29uc3Qgdmlld0ggPSB3aW5kb3cudmlzdWFsVmlld3BvcnQ/LmhlaWdodCB8fCB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdGNvbnN0IHNjcm9sbFggPSB3aW5kb3cucGFnZVhPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7XG5cdGNvbnN0IHNjcm9sbFkgPSB3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcblxuXHRjb25zdCBhbmNob3JYID0gTWF0aC5yb3VuZChsZWZ0IC0gKGFuY2hvclcgLSB3aWR0aCkgLyAyKTsgLy8gQ29ycmVjdCBmb3IgQ1NTIHRyYW5zZm9ybSBzY2FsZVxuXHRjb25zdCBhbmNob3JZID0gTWF0aC5yb3VuZCh0b3AgLSAoYW5jaG9ySCAtIGhlaWdodCkgLyAyKTsgLy8gQ29ycmVjdCBmb3IgQ1NTIHRyYW5zZm9ybSBzY2FsZVxuXHRjb25zdCBjZW50ZXJYID0gTWF0aC5taW4oXG5cdFx0TWF0aC5tYXgoMTAsIGFuY2hvclggLSAodGFyZ2V0VyAtIGFuY2hvclcpIC8gMiksXG5cdFx0dmlld1cgLSB0YXJnZXRXIC0gMTAsXG5cdCk7XG5cdGNvbnN0IGNlbnRlclkgPSBNYXRoLm1pbihcblx0XHRNYXRoLm1heCgxMCwgYW5jaG9yWSAtICh0YXJnZXRIIC0gYW5jaG9ySCkgLyAyKSxcblx0XHR2aWV3SCAtIHRhcmdldEggLSAxMCxcblx0KTtcblxuXHQvLyBVc2UgdmlzdWFsIHZpZXdwb3J0IGRpbWVuc2lvbnMgZm9yIHNwYWNlIGNhbGN1bGF0aW9uc1xuXHRjb25zdCBoYXNTcGFjZUxlZnQgPSBhbmNob3JYIC0gdGFyZ2V0VyA+IDA7XG5cdGNvbnN0IGhhc1NwYWNlUmlnaHQgPSBhbmNob3JYICsgYW5jaG9yVyArIHRhcmdldFcgPCB2aWV3Vztcblx0Y29uc3QgaGFzU3BhY2VPdmVyID0gYW5jaG9yWSAtIHRhcmdldEggPiAwO1xuXHRjb25zdCBoYXNTcGFjZVVuZGVyID0gYW5jaG9yWSArIGFuY2hvckggKyB0YXJnZXRIIDwgdmlld0g7XG5cblx0Y29uc3QgaXNWZXJ0aWNhbCA9IHBvc2l0aW9uID09PSBQT1NJVElPTi50b3AgfHwgcG9zaXRpb24gPT09IFBPU0lUSU9OLmJvdHRvbTtcblx0Y29uc3QgaXNSaWdodCA9XG5cdFx0KHBvc2l0aW9uID09PSBQT1NJVElPTi5yaWdodCAmJiAoZm9yY2UgfHwgaGFzU3BhY2VSaWdodCkpIHx8ICFoYXNTcGFjZUxlZnQ7IC8vIEFsd2F5cyBwb3NpdGlvbiByaWdodCB3aGVuIG5vIGhhc1NwYWNlTGVmdCwgYXMgbm8gT1Mgc2Nyb2xscyBmdXJ0aGVyIGxlZnQgdGhhbiAwXG5cdGNvbnN0IGlzVW5kZXIgPVxuXHRcdChwb3NpdGlvbiA9PT0gUE9TSVRJT04uYm90dG9tICYmIChmb3JjZSB8fCBoYXNTcGFjZVVuZGVyKSkgfHwgIWhhc1NwYWNlT3ZlcjsgLy8gQWx3YXlzIHBvc2l0aW9uIHVuZGVyIHdoZW4gbm8gaGFzU3BhY2VPdmVyLCBhcyBubyBPUyBzY3JvbGxzIGZ1cnRoZXIgdXAgdGhhbiAwXG5cblx0Ly8gQ2FsY3VsYXRlIHBvc2l0aW9ucyBpbiB2aWV3cG9ydCBjb29yZGluYXRlc1xuXHRjb25zdCB2aWV3WCA9IE1hdGgucm91bmQoXG5cdFx0aXNWZXJ0aWNhbCA/IGNlbnRlclggOiBpc1JpZ2h0ID8gYW5jaG9yWCArIGFuY2hvclcgOiBhbmNob3JYIC0gdGFyZ2V0Vyxcblx0KTtcblx0Y29uc3Qgdmlld1kgPSBNYXRoLnJvdW5kKFxuXHRcdGlzVmVydGljYWwgPyAoaXNVbmRlciA/IGFuY2hvclkgKyBhbmNob3JIIDogYW5jaG9yWSAtIHRhcmdldEgpIDogY2VudGVyWSxcblx0KTtcblxuXHQvLyBVc2UgYWJzb2x1dGUgcG9zaXRpb25pbmdcblx0dGFyZ2V0LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuXHR0YXJnZXQuc3R5bGUubGVmdCA9IGAke3ZpZXdYICsgc2Nyb2xsWH1weGA7XG5cdHRhcmdldC5zdHlsZS50b3AgPSBgJHt2aWV3WSArIHNjcm9sbFl9cHhgO1xuXG5cdFNDUk9MTEVSPy5zdHlsZS5zZXRQcm9wZXJ0eShcblx0XHRcInRyYW5zbGF0ZVwiLFxuXHRcdGAwcHggJHtNYXRoLnJvdW5kKGlzVW5kZXIgPyBzY3JvbGxYICsgYW5jaG9yWSArIGFuY2hvckggKyB0YXJnZXRIICsgMzAgOiAwKX1weGAsXG5cdCk7XG59XG5cbi8qKlxuICogU3BlZWQgdXAgTXV0YXRpb25PYnNlcnZlciBieSBkZWJvdW5jaW5nIGFuZCBvbmx5IHJ1bm5pbmcgd2hlbiBwYWdlIGlzIHZpc2libGVcbiAqIEByZXR1cm4gbmV3IE11dGFpb25PYnNlcnZlclxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjazogTXV0YXRpb25DYWxsYmFjaykge1xuXHRsZXQgcXVldWUgPSAwO1xuXG5cdGNvbnN0IG9uRnJhbWUgPSAoKSA9PiBzZXRUaW1lb3V0KG9uVGltZXIsIDIwMCk7IC8vIFVzZSBib3RoIHJlcXVlc3RBbmltYXRpb25GcmFtZSBhbmQgc2V0VGltZW91dCB0byBkZWJvdW5jZSBhbmQgb25seSBydW4gd2hlbiB2aXNpYmxlXG5cdGNvbnN0IG9uVGltZXIgPSAoKSA9PiB7XG5cdFx0Y2FsbGJhY2soW10sIG9ic2VydmVyKTtcblx0XHRvYnNlcnZlci50YWtlUmVjb3JkcygpOyAvLyBDbGVhciByZWNvcmRzIHRvIGF2b2lkIHJ1bm5pbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcblx0XHRxdWV1ZSA9IDA7XG5cdH07XG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdGlmICghcXVldWUpIHF1ZXVlID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKG9uRnJhbWUpO1xuXHR9KTtcblxuXHRyZXR1cm4gb2JzZXJ2ZXI7XG59XG5cbi8qKlxuICogb25NdXRhdGlvblxuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBvYnNlcnZlIG11dGF0aW9ucyBvbiBhIHNwZWNpZmljIGNsYXNzIG5hbWVcbiAqIEBwYXJhbSBlbCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSBjbGFzc05hbWUgVGhlIGNsYXNzIG5hbWUgdG8gb2JzZXJ2ZVxuICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBydW4gd2hlbiBtdXRhdGlvbnMgYXJlIGRldGVjdGVkXG4gKi9cbmNvbnN0IE1VVEFUT1JTID0gbmV3IFdlYWtNYXA8RWxlbWVudCwgQXJyYXk8KCkgPT4gdm9pZD4+KCk7XG5leHBvcnQgY29uc3Qgb25NdXRhdGlvbiA9IDxUIGV4dGVuZHMgRWxlbWVudD4oXG5cdGVsOiBFbGVtZW50LFxuXHRjbGFzc05hbWU6IHN0cmluZyxcblx0Y2FsbGJhY2s6IChlbGVtczogSFRNTENvbGxlY3Rpb25PZjxUPikgPT4gdm9pZCxcbikgPT4ge1xuXHRjb25zdCBlbGVtcyA9IGVsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcblx0Y29uc3QgbXV0YXRvciA9IE1VVEFUT1JTLmdldChlbCkgfHwgW107XG5cblx0aWYgKCFtdXRhdG9yLmxlbmd0aCkge1xuXHRcdE1VVEFUT1JTLnNldChlbCwgbXV0YXRvcik7XG5cdFx0Y3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcigoXywgb2JzZXJ2ZXIpID0+IHtcblx0XHRcdGlmIChlbC5pc0Nvbm5lY3RlZCAmJiBtdXRhdG9yPy5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBjYWxsYmFjayBvZiBtdXRhdG9yKSBjYWxsYmFjaygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0TVVUQVRPUlMuZGVsZXRlKGVsKTtcblx0XHRcdH1cblx0XHR9KS5vYnNlcnZlKGVsLCB7XG5cdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFtcImNsYXNzXCIsIFwiaGlkZGVuXCJdLFxuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRcdHN1YnRyZWU6IHRydWUsXG5cdFx0fSk7XG5cdH1cblx0bXV0YXRvci5wdXNoKCgpID0+IGNhbGxiYWNrKGVsZW1zIGFzIEhUTUxDb2xsZWN0aW9uT2Y8VD4pKTtcbn07XG5cbi8qKlxuICogb25Mb2FkZWRcbiAqIEBkZXNjcmlwdGlvbiBSdW5zIGEgY2FsbGJhY2sgd2hlbiB3aW5kb3cgaXMgbG9hZGVkIGluIGJyb3dzZXJcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcnVuIHdoZW4gdGhlIHBhZ2UgaXMgcmVhZHlcbiAqL1xuZXhwb3J0IGNvbnN0IG9uTG9hZGVkID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB7XG5cdGlmICghSVNfQlJPV1NFUikgcmV0dXJuO1xuXHRjb25zdCBydW4gPSAoKSA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spOyAvLyBFbnN1cmUgd2UgcnVuIGFmdGVyIGFsbCBvdGhlciBsb2FkIGV2ZW50c1xuXHRpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSBydW4oKTtcblx0ZWxzZSBvbih3aW5kb3csIFwibG9hZFwiLCBydW4pO1xufTtcblxuLyoqXG4gKiBpc0lucHV0TGlrZVxuICogQGRlc2NyaXB0aW9uIENoZWNrIGlmIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKiBAcGFyYW0gZWwgVGhlIGVsZW1lbnQgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKi9cbmV4cG9ydCBjb25zdCBpc0lucHV0TGlrZSA9IChlbDogdW5rbm93bik6IGVsIGlzIEhUTUxJbnB1dEVsZW1lbnQgPT5cblx0ZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcInZhbGlkaXR5XCIgaW4gZWwgJiZcblx0IShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KTtcblxuLyoqXG4gKiB0b0N1c3RvbUVsZW1lbnRQcm9wc1xuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBjb252ZXJ0IHByb3BzIHRvIGN1c3RvbSBlbGVtZW50IGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSBwcm9wcyBUaGUgcHJvcHMgdG8gY29udmVydFxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBwcm9wc1xuICovXG5jb25zdCBTRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xuZXhwb3J0IGNvbnN0IHRvQ3VzdG9tRWxlbWVudFByb3BzID0gKFxuXHR7IGNsYXNzTmFtZSwgaGlkZGVuLCBvcGVuLCAuLi5yZXN0IH06IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRrbGFzcz86IHN0cmluZyxcbikgPT4ge1xuXHRyZXN0LnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyA9IHRydWU7IC8vIE1ha2UgTmV4dC5qcyBoYXBweVxuXHRpZiAocmVzdFtTRUxFQ1RFRF0gIT09IHVuZGVmaW5lZClcblx0XHRyZXN0W1NFTEVDVEVEXSA9IGAkeyhyZXN0W1NFTEVDVEVEXSB8fCBcImZhbHNlXCIpICE9PSBcImZhbHNlXCJ9YDsgLy8gRW5zdXJlIGFyaWEtc2VsZWN0ZWQgYm9vbGVhbiBpcyBzdHJpbmdcblx0aWYgKGNsYXNzTmFtZSB8fCBrbGFzcykgcmVzdC5jbGFzcyA9IGNsc3goa2xhc3MsIGNsYXNzTmFtZSB8fCBcIlwiKTsgLy8gVXNlIGNsYXNzIGluc3RlYWQgb2YgY2xhc3NOYW1lXG5cdGlmIChoaWRkZW4pIHJlc3QuaGlkZGVuID0gdHJ1ZTsgLy8gRW5zdXJlIGJvb2xlYW4gcHJvcCBiZWhhdmlvdXJcblx0aWYgKG9wZW4pIHJlc3Qub3BlbiA9IHRydWU7IC8vIEVuc3VyZSBib29sZWFuIHByb3AgYmVoYXZpb3VyXG5cdHJldHVybiByZXN0O1xufTtcbiIsImltcG9ydCB7IElTX0JST1dTRVIgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgTUFUT01PID0gXCJtYXR0aWxzeW5ldC5tYXRvbW8uY2xvdWRcIjtcbmxldCBFTkFCTEVEOiBBbmFseXRpY3NBY3Rpb25zW1wiaW5pdFwiXVtcImVuYWJsZWRcIl0gPSB0cnVlO1xuXG50eXBlIE1hdG9tbyA9IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuKVtdO1xuZGVjbGFyZSBnbG9iYWwge1xuXHRpbnRlcmZhY2UgV2luZG93IHtcblx0XHRfcGFxPzogTWF0b21vW107XG5cdFx0X210bT86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj5bXTtcblx0fVxufVxuXG4vLyB3aW5kb3cuX3BhcSA9IHdpbmRvdy5fcGFxIHx8IFtdO1xuLy8gd2luZG93Ll9tdG0gPSB3aW5kb3cuX210bSB8fCBbXTtcblxuLy8gd2luZG93Ll9wYXEucHVzaChbXCJzZXRDdXN0b21VcmxcIiwgYCR7ZG9jdW1lbnQubG9jYXRpb24uaHJlZn0mZWlyaWtgXSk7XG4vLyB3aW5kb3cuX3BhcS5wdXNoKFtcInNldERvY3VtZW50VGl0bGVcIiwgXCJFaXJpayAzXCJdKTtcbi8vIHdpbmRvdy5fbXRtLnB1c2goe1xuLy8gXHRldmVudDogXCJtdG0uU3RhcnRcIixcbi8vIFx0XCJtdG0uc3RhcnRUaW1lXCI6IG5ldyBEYXRlKCkuZ2V0VGltZSgpLFxuLy8gXHRjdXN0b21UaXRsZTogXCJFaXJpayAxXCIsXG4vLyBcdGN1c3RvbVVybDogYCR7ZG9jdW1lbnQubG9jYXRpb24uaHJlZn0mZWlyaWtgLFxuLy8gfSk7XG5cbi8vIHdpbmRvdy5fbXRtLnB1c2goe1xuLy8gXHRldmVudDogXCJtdG0uUGFnZVZpZXdcIixcbi8vIFx0Y3VzdG9tVGl0bGU6IFwiRWlyaWsgMlwiLFxuLy8gXHRjdXN0b21Vcmw6IGAke2RvY3VtZW50LmxvY2F0aW9uLmhyZWZ9JmVpcmlrYCxcbi8vIH0pO1xuXG4vLyBjb25zdCBjb250YWluZXJJZCA9IFwiQTl1dEtrM09cIjtcblxuLy8gZG9jdW1lbnQuaGVhZC5hcHBlbmQoXG4vLyBcdE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSwge1xuLy8gXHRcdHNyYzogYGh0dHBzOi8vY2RuLm1hdG9tby5jbG91ZC9tYXR0aWxzeW5ldC5tYXRvbW8uY2xvdWQvY29udGFpbmVyXyR7Y29udGFpbmVySWR9LmpzYCxcbi8vIFx0XHRhc3luYzogdHJ1ZSxcbi8vIFx0XHRvbmxvYWQ6ICgpID0+IGNvbnNvbGUubG9nKHdpbmRvdy5fcGFxKSxcbi8vIFx0fSksXG4vLyApO1xuXG5leHBvcnQgdHlwZSBBbmFseXRpY3NBY3Rpb25zID0ge1xuXHRpbml0OiB7XG5cdFx0bWF0b21vSWQ6IG51bWJlciB8IHN0cmluZztcblx0XHRlbmFibGVkPzogYm9vbGVhbiB8IFwiZGVidWdcIjtcblx0fTtcblx0cGFnZXZpZXc6IHtcblx0XHR1cmw/OiBzdHJpbmc7XG5cdFx0dGl0bGU/OiBzdHJpbmc7XG5cdH07XG5cdGV2ZW50OiB7XG5cdFx0Y2F0ZWdvcnk6IHN0cmluZztcblx0XHRhY3Rpb246IHN0cmluZztcblx0XHRuYW1lPzogc3RyaW5nO1xuXHRcdHZhbHVlPzogbnVtYmVyO1xuXHR9O1xuXHRzZWFyY2g6IHtcblx0XHRxdWVyeTogc3RyaW5nO1xuXHRcdGNhdGVnb3J5Pzogc3RyaW5nO1xuXHRcdHJlc3VsdHM/OiBudW1iZXI7XG5cdH07XG5cdG1hdG9tbzogTWF0b21vO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFuYWx5dGljczxBY3Rpb24gZXh0ZW5kcyBrZXlvZiBBbmFseXRpY3NBY3Rpb25zPihcblx0YWN0aW9uOiBBY3Rpb24sXG5cdGFyZ3MgPSB7fSBhcyBBbmFseXRpY3NBY3Rpb25zW0FjdGlvbl0sXG4pIHtcblx0aWYgKCFJU19CUk9XU0VSKSByZXR1cm47XG5cdGlmICghd2luZG93Ll9wYXEpIHtcblx0XHR3aW5kb3cuX3BhcSA9IFtdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wiSGVhdG1hcFNlc3Npb25SZWNvcmRpbmc6OmRpc2FibGVcIl0pOyAvLyBEaXNhYmxlIGhlYXRtYXBzIGJ5IGRlZmF1bHQgYXMgdGhpcyByZXF1aXJlIGNvb2tpZXNcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcImVuYWJsZUxpbmtUcmFja2luZ1wiXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRUcmFja2VyVXJsXCIsIGBodHRwczovLyR7TUFUT01PfS9tYXRvbW8ucGhwYF0pO1xuXHR9XG5cdGlmIChhY3Rpb24gPT09IFwiaW5pdFwiKSB7XG5cdFx0Y29uc3QgeyBtYXRvbW9JZCwgZW5hYmxlZCB9ID0gYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wiaW5pdFwiXTtcblx0XHRFTkFCTEVEID0gZW5hYmxlZCA/PyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgPT09IFwibG9jYWxob3N0XCI7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRTaXRlSWRcIiwgbWF0b21vSWRdKTtcblx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzY3JpcHRbc3JjKj1cIm1hdG9tby5qc1wiXScpIHx8XG5cdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZChcblx0XHRcdFx0T2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpLCB7XG5cdFx0XHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRcdFx0c3JjOiBgaHR0cHM6Ly9jZG4ubWF0b21vLmNsb3VkLyR7TUFUT01PfS9tYXRvbW8uanNgLFxuXHRcdFx0XHR9KSxcblx0XHRcdCk7XG5cdH1cblxuXHRpZiAoRU5BQkxFRCA9PT0gXCJkZWJ1Z1wiKSByZXR1cm4gY29uc29sZS5pbmZvKGBBbmFseXRpY3M6IFwiJHthY3Rpb259XCJgLCBhcmdzKTtcblx0aWYgKEVOQUJMRUQgPT09IGZhbHNlKSByZXR1cm47XG5cblx0aWYgKGFjdGlvbiA9PT0gXCJwYWdldmlld1wiKSB7XG5cdFx0Y29uc3QgeyB1cmwsIHRpdGxlIH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJwYWdldmlld1wiXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldEN1c3RvbVVybFwiLCB1cmwgfHwgbG9jYXRpb24uaHJlZl0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0RG9jdW1lbnRUaXRsZVwiLCB0aXRsZSB8fCBkb2N1bWVudC50aXRsZV0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1widHJhY2tQYWdlVmlld1wiXSk7XG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcImV2ZW50XCIpIHtcblx0XHRjb25zdCB7IGNhdGVnb3J5LCBhY3Rpb24sIG5hbWUsIHZhbHVlIH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJldmVudFwiXTtcblx0XHRjb25zdCBldmVudCA9IFtcInRyYWNrRXZlbnRcIiwgY2F0ZWdvcnksIGFjdGlvbiwgbmFtZSwgdmFsdWVdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goZXZlbnQuZmlsdGVyKCh2KSA9PiB2ICE9PSB1bmRlZmluZWQpKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwic2VhcmNoXCIpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRxdWVyeSxcblx0XHRcdGNhdGVnb3J5ID0gZmFsc2UsXG5cdFx0XHRyZXN1bHRzID0gZmFsc2UsXG5cdFx0fSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcInNlYXJjaFwiXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInRyYWNrU2l0ZVNlYXJjaFwiLCBxdWVyeSwgY2F0ZWdvcnksIHJlc3VsdHNdKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwibWF0b21vXCIpIHtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcIm1hdG9tb1wiXSk7XG5cdH1cbn1cbiIsImlmIChcblx0dHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHR3aW5kb3cuQ1NTU3R5bGVTaGVldCAmJlxuXHRkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHNcbilcblx0KCgpID0+IHtcblx0XHRjb25zdCBrZXkgPSBcIi0tbXRkcy1hcHAtZXhwYW5kZWRcIjtcblx0XHRjb25zdCBzaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cdFx0Y29uc3QgcHJldiA9ICgpID0+ICF3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KT8uaW5jbHVkZXMoXCJmYWxzZVwiKTtcblxuXHRcdGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5wdXNoKHNoZWV0KTtcblx0XHR3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkID0gKGZvcmNlKSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBuZXh0ID0gZm9yY2UgPz8gIXByZXYoKTtcblx0XHRcdFx0c2hlZXQucmVwbGFjZVN5bmM/LihgOnJvb3QgeyAke2tleX06IHZhcigke2tleX0tLSR7bmV4dH0pfWApO1xuXHRcdFx0XHR3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBuZXh0KTtcblx0XHRcdH0gY2F0Y2ggKF9lcnIpIHt9IC8vIGxvY2FsU3RvcmFnZSBpcyBmdWxsIG9yIHJlcGxhY2VTeW5jIGlzIG5vdCBzdXBwb3J0ZWRcblx0XHR9O1xuXG5cdFx0Ly8gU2V0IGFuZCBzdG9yZSBpbml0aWFsIHN0YXRlXG5cdFx0d2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZChwcmV2KCkpO1xuXHR9KSgpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGRlYm91bmNlLCBvbiwgb25Mb2FkZWQsIG9uTXV0YXRpb24sIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgXCIuL2FwcC10b2dnbGVcIjtcblxuY29uc3QgQ1NTX0FQUCA9IHN0eWxlcy5hcHAuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1NUSUNLWSA9IHN0eWxlcy5zdGlja3kuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1RPR0dMRSA9ICdbZGF0YS1jb21tYW5kPVwidG9nZ2xlLWFwcC1leHBhbmRlZFwiXSc7XG5jb25zdCBDU1NfU0lERUJBUiA9IGAuJHtDU1NfQVBQfSA+IGRpYWxvZywuJHtDU1NfQVBQfSBkaWFsb2cgfiBtYWluYDtcblxuY29uc3QgdXNlVHJhbnNpdGlvbiA9IChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4ge1xuXHRpZiAoIWRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24pIGNhbGxiYWNrKCk7XG5cdGVsc2UgZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbihjYWxsYmFjayk7XG59O1xuXG5leHBvcnQgY29uc3QgdG9nZ2xlQXBwRXhwYW5kZWQgPSAoZm9yY2U/OiBib29sZWFuKSA9PlxuXHQvLyBAdHMtZXhwZWN0LWVycm9yIHdpbmRvdy5tdGRzQXBwVG9nZ2xlIGNvbWVzIGZyb20gYXBwLXRvZ2dsZS5qc1xuXHR1c2VUcmFuc2l0aW9uKCgpID0+IHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQ/Lihmb3JjZSkpO1xuXG5mdW5jdGlvbiBoYW5kbGVUb2dnbGVDbGljayh7IHRhcmdldDogZWwsIGRlZmF1bHRQcmV2ZW50ZWQ6IHN0b3AgfTogRXZlbnQpIHtcblx0Y29uc3QgbGluayA9IChlbCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKFwiYVwiKTtcblx0aWYgKGxpbms/LmNsb3Nlc3QoXCJkaWFsb2dcIikgJiYgbGluaz8uY2xvc2VzdChDU1NfU0lERUJBUikpXG5cdFx0cmV0dXJuIGNsb3NlU2lkZWJhcigpOyAvLyBDbG9zZSBzaWRlYmFyIGlmIGxpbmsgaXMgY2xpY2tlZCBpbnNpZGUgc2lkZWJhclxuXG5cdGlmIChzdG9wIHx8ICEoZWwgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCkgfHwgIWVsLm1hdGNoZXMoQ1NTX1RPR0dMRSkpXG5cdFx0cmV0dXJuO1xuXHRjb25zdCBpc0Rlc2t0b3AgPSBnZXRDb21wdXRlZFN0eWxlKGVsKS5wb3NpdGlvbiA9PT0gXCJzdGlja3lcIjtcblxuXHRpZiAoaXNEZXNrdG9wKSB0b2dnbGVBcHBFeHBhbmRlZCgpO1xuXHRlbHNlXG5cdFx0dXNlVHJhbnNpdGlvbigoKSA9PiB7XG5cdFx0XHRjb25zdCBzaWRlYmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGlhbG9nRWxlbWVudD4oQ1NTX1NJREVCQVIpO1xuXHRcdFx0c2lkZWJhcj8uc2V0QXR0cmlidXRlKFwiZGF0YS1jbG9zZWRieVwiLCBcImFueVwiKTsgLy8gQWxsb3cgY2xvc2luZyBieSBjbGlja2luZyBvdXRzaWRlXG5cdFx0XHRzaWRlYmFyPy5zaG93TW9kYWwoKTtcblx0XHR9KTtcbn1cblxuZnVuY3Rpb24gY2xvc2VTaWRlYmFyKCkge1xuXHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaWFsb2dFbGVtZW50PihDU1NfU0lERUJBUik/LmNsb3NlKCk7XG59XG5cbi8vIFNjcm9sbCBzdGF0ZVxubGV0IE1JTl9ZID0gMDsgLy8gT2Zmc2V0IHRvIGF2b2lkIHNjcm9sbCBqdW1wIHdoZW4gc3RpY2t5IGlzIHNldCB0byByZWxhdGl2ZVxubGV0IFNDUk9MTF9VUDogYm9vbGVhbjtcbmxldCBTVElDSyA9IDA7IC8vIC0xID0gc3RpY2sgdG9wLCAwID0gcmVsYXRpdmUsIDEgPSBzdGljayBib3R0b21cbmxldCBTVElDS19FTDogSFRNTEVsZW1lbnQ7XG5sZXQgU1RJQ0tfSCA9IDA7XG5sZXQgU1RJQ0tfWSA9IDA7XG5sZXQgU1RVQ0sgPSBmYWxzZTsgLy8gVXNlZCB0byBmaWd1cmUgaWYgbmF2IGlzIGxhcmdlciB0aGFuIHZpZXdwb3J0XG5sZXQgV0lOX0ggPSAwO1xubGV0IFdJTl9ZID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oW3N0aWNreV06IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdFNUSUNLX0VMID0gc3RpY2t5O1xuXHRoYW5kbGVTY3JvbGwoKTsgLy8gUnVuIG9uIGNvbm5lY3Rcbn1cblxuZnVuY3Rpb24gaGFuZGxlU2Nyb2xsKCkge1xuXHRpZiAoIVNUSUNLX0VMPy5pc0Nvbm5lY3RlZCkgcmV0dXJuO1xuXHRjb25zdCBORVhUX1kgPSB3aW5kb3cuc2Nyb2xsWTtcblx0Y29uc3QgTkVYVF9VUCA9IE5FWFRfWSA8IFdJTl9ZO1xuXHRXSU5fWSA9IE5FWFRfWTtcblxuXHQvLyBPbmx5IGNhbGN1bGF0ZSBpZiBzY3JvbGwgZGlyZWN0aW9uIGhhcyBjaGFuZ2VkXG5cdGlmIChORVhUX1VQICE9PSBTQ1JPTExfVVApIHtcblx0XHRNSU5fWSA9IChTVElDS19FTC5wYXJlbnRFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgfHwgMCkgKyBXSU5fWTtcblx0XHRTQ1JPTExfVVAgPSBORVhUX1VQO1xuXHRcdFNUSUNLX0ggPSBTVElDS19FTC5vZmZzZXRIZWlnaHQ7XG5cdFx0U1RJQ0tfWSA9IFNUSUNLX0VMLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIFdJTl9ZO1xuXHRcdFNUVUNLID0gU1RJQ0tfRUwub2Zmc2V0SGVpZ2h0IDw9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0XHRXSU5fSCA9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0fVxuXG5cdGlmIChTVElDSyA9PT0gLTEgJiYgU1RVQ0spIHJldHVybjsgLy8gQWxsd2F5cyBzdGlja3kgd2hlbiBzaWRlYmFyIGlzIHNtYWxsZXIgdGhhbiB2aWV3cG9ydFxuXHRpZiAoU1RJQ0sgIT09IC0xICYmIChTVFVDSyB8fCAoU0NST0xMX1VQICYmIFdJTl9ZIDw9IFNUSUNLX1kpKSkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJzdGlja3lcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBcIjBweFwiKTtcblx0XHRTVElDSyA9IC0xOyAvLyBOb3Qgc3RpY2tpbmcgdG8gdG9wIGFuZCBzaWRlYmFyIGlzIHNtYWxsZXIgdGhhbiB2aWV3cG9ydCBvciBzY3JvbGxpbmcgdXBcblx0fSBlbHNlIGlmIChTVElDSyA9PT0gLTEgJiYgIVNDUk9MTF9VUCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJyZWxhdGl2ZVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke01hdGgubWF4KDAsIFdJTl9ZIC0gTUlOX1kpfXB4YCk7XG5cdFx0U1RJQ0sgPSAwOyAvLyBTdGlja2luZyB0byB0b3AgYW5kIHNjcm9sbGluZyBkb3duXG5cdH0gZWxzZSBpZiAoU1RJQ0sgIT09IDEgJiYgIVNDUk9MTF9VUCAmJiBXSU5fWSArIFdJTl9IID49IFNUSUNLX1kgKyBTVElDS19IKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInN0aWNreVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke1dJTl9IIC0gU1RJQ0tfSH1weGApO1xuXHRcdFNUSUNLID0gMTsgLy8gTm90IHN0aWNraW5nIHRvIGJvdHRvbSBhbmQgc2Nyb2xsaW5nIGRvd25cblx0fSBlbHNlIGlmIChTVElDSyA9PT0gMSAmJiBTQ1JPTExfVVApIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwicmVsYXRpdmVcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBgJHtTVElDS19ZIC0gTUlOX1l9cHhgKTtcblx0XHRTVElDSyA9IDA7IC8vIFN0aWNraW5nIHRvIGJvdHRvbSBhbmQgc2Nyb2xsaW5nIHVwXG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX1NUSUNLWSwgaGFuZGxlTXV0YXRpb24pO1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVUb2dnbGVDbGljaywgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwicmVzaXplXCIsIGRlYm91bmNlKGNsb3NlU2lkZWJhciwgMTAwKSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwic2Nyb2xsXCIsIGhhbmRsZVNjcm9sbCwgUVVJQ0tfRVZFTlQpO1xufSk7XG4iLCJjb25zdCBnZXRTdGVwcyA9IChcblx0bm93OiBudW1iZXIsXG5cdG1heDogbnVtYmVyLFxuXHRzaG93ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuKSA9PiB7XG5cdGNvbnN0IG9mZnNldCA9IChzaG93IC0gMSkgLyAyO1xuXHRjb25zdCBzdGFydCA9IE1hdGgubWF4KE1hdGgubWluKG5vdyAtIE1hdGguZmxvb3Iob2Zmc2V0KSwgbWF4IC0gc2hvdyArIDEpLCAxKTtcblx0Y29uc3QgZW5kID0gTWF0aC5taW4oTWF0aC5tYXgobm93ICsgTWF0aC5jZWlsKG9mZnNldCksIHNob3cpLCBtYXgpO1xuXHRjb25zdCBwYWdlcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGVuZCArIDEgLSBzdGFydCB9LCAoXywgaSkgPT4gaSArIHN0YXJ0KTtcblxuXHRpZiAoc2hvdyA+IDQgJiYgc3RhcnQgPiAxKSBwYWdlcy5zcGxpY2UoMCwgMiwgMSwgMCk7XG5cdGlmIChzaG93ID4gMyAmJiBlbmQgPCBtYXgpIHBhZ2VzLnNwbGljZSgtMiwgMiwgMCwgbWF4KTtcblx0cmV0dXJuIHBhZ2VzO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhZ2luYXRpb24gPSAoeyBjdXJyZW50ID0gMSwgdG90YWwgPSAxMCwgc2hvdyA9IDcgfSkgPT4gKHtcblx0cHJldjogY3VycmVudCA+IDEgPyBjdXJyZW50IC0gMSA6IDAsXG5cdG5leHQ6IGN1cnJlbnQgPCB0b3RhbCA/IGN1cnJlbnQgKyAxIDogMCxcblx0cGFnZXM6IGdldFN0ZXBzKGN1cnJlbnQsIHRvdGFsLCBzaG93KS5tYXAoKHBhZ2UsIGluZGV4KSA9PiAoe1xuXHRcdGN1cnJlbnQ6IHBhZ2UgPT09IGN1cnJlbnQgJiYgKFwicGFnZVwiIGFzIGNvbnN0KSxcblx0XHRrZXk6IGBrZXktJHtwYWdlfS0ke2luZGV4fWAsXG5cdFx0cGFnZSxcblx0fSkpLFxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0JSRUFEQ1JVTUJTID0gc3R5bGVzLmJyZWFkY3J1bWJzLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oYnJlYWRjcnVtYnM6IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgYnJlYWRjdW1icyBvZiBicmVhZGNydW1icylcblx0XHRicmVhZGN1bWJzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaSBhXCIpLmZvckVhY2goKGNydW1iLCBpbmRleCwgeyBsZW5ndGggfSkgPT4ge1xuXHRcdFx0YXR0cihjcnVtYiwgXCJhcmlhLWN1cnJlbnRcIiwgaW5kZXggPT09IGxlbmd0aCAtIDEgPyBcInBhZ2VcIiA6IG51bGwpO1xuXHRcdH0pO1xufVxuXG5vbkxvYWRlZCgoKSA9PlxuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0JSRUFEQ1JVTUJTLCBoYW5kbGVNdXRhdGlvbiksXG4pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdGF0dHIsXG5cdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIsXG5cdElTX0JST1dTRVIsXG5cdG9uLFxuXHRvbkxvYWRlZCxcblx0UVVJQ0tfRVZFTlQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRElBTE9HID0gc3R5bGVzLmRpYWxvZy5zcGxpdChcIiBcIilbMF07XG5jb25zdCBESUFMT0dTID0gSVNfQlJPV1NFUlxuXHQ/IChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuXHRcdFx0Q1NTX0RJQUxPRyxcblx0XHQpIGFzIEhUTUxDb2xsZWN0aW9uT2Y8SFRNTERpYWxvZ0VsZW1lbnQ+KVxuXHQ6IFtdO1xuXG5jb25zdCBoYW5kbGVNb2RhbCA9ICgpID0+IHtcblx0Zm9yIChjb25zdCBkaWFsb2cgb2YgRElBTE9HUylcblx0XHRpZiAoZGlhbG9nLmlzQ29ubmVjdGVkICYmIGRpYWxvZy5zaG93TW9kYWwgJiYgZGlhbG9nLmNsb3NlKSB7XG5cdFx0XHRpZiAoZGlhbG9nLm1hdGNoZXMoJ1tvcGVuXTpub3QoW2RhdGEtbW9kYWw9XCJmYWxzZVwiXSk6bm90KDptb2RhbCknKSkge1xuXHRcdFx0XHRhdHRyKGRpYWxvZywgXCJvcGVuXCIsIG51bGwpOyAvLyBVc2luZyBhdHRyaWJ1dGUgaW5zdGVhZCBvZiAuY2xvc2UgdG8gYXZvaWQgYGNsb3NlYCBldmVudFxuXHRcdFx0XHRkaWFsb2cuc2hvd01vZGFsKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGRpYWxvZy5tYXRjaGVzKFwiOm1vZGFsOm5vdChbb3Blbl0pXCIpKSB7XG5cdFx0XHRcdGF0dHIoZGlhbG9nLCBcIm9wZW5cIiwgXCJcIik7IC8vIFNldCBhcyBvcGVuXG5cdFx0XHRcdGRpYWxvZy5jbG9zZSgpOyAvLyBTbyB3ZSBjb3JyZWNsdHkgY2FuIGNhbGwgLmNsb3NlLCByZW1vdmluZyA8ZGlhbG9nPiBmcm9tICN0b3AtbGF5ZXJcblx0XHRcdH1cblx0XHR9XG59O1xuXG5jb25zdCBoYW5kbGVDbGljayA9ICh7IGNsaWVudFg6IHgsIGNsaWVudFk6IHksIHRhcmdldDogZWwgfTogTW91c2VFdmVudCkgPT4ge1xuXHRjb25zdCBkaWFsb2cgPSAoZWwgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImRpYWxvZ1wiKTtcblxuXHRpZiAoIWRpYWxvZykgcmV0dXJuO1xuXHRpZiAoKGVsIGFzIEVsZW1lbnQpLmNsb3Nlc3QoJ1tkYXRhLWNvbW1hbmQ9XCJjbG9zZVwiXScpKSByZXR1cm4gZGlhbG9nLmNsb3NlKCk7XG5cdGlmIChhdHRyKGRpYWxvZywgXCJkYXRhLWNsb3NlZGJ5XCIpID09PSBcImFueVwiKSB7XG5cdFx0Y29uc3QgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfSA9IGRpYWxvZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRjb25zdCBpc0luc2lkZSA9IHRvcCA8PSB5ICYmIHkgPD0gYm90dG9tICYmIGxlZnQgPD0geCAmJiB4IDw9IHJpZ2h0O1xuXHRcdGlmICghaXNJbnNpZGUpIGRpYWxvZy5jbG9zZSgpO1xuXHR9XG59O1xuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZUNsaWNrIGFzIEV2ZW50TGlzdGVuZXIsIFFVSUNLX0VWRU5UKTtcblx0Y3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcihoYW5kbGVNb2RhbCkub2JzZXJ2ZShcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG5cdFx0e1xuXHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbXCJvcGVuXCJdLFxuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRcdHN1YnRyZWU6IHRydWUsXG5cdFx0fSxcblx0KTtcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIG9uLCBvbkxvYWRlZCwgUVVJQ0tfRVZFTlQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZnVuY3Rpb24gaGFuZGxlSW5qZWN0KGV2ZW50OiBFdmVudCAmIHsgYW5pbWF0aW9uTmFtZT86IHN0cmluZyB9KSB7XG5cdGlmIChldmVudC5hbmltYXRpb25OYW1lICE9PSBzdHlsZXMuX2Vycm9yc3VtbWFyeSkgcmV0dXJuO1xuXHRjb25zdCBmaXJzdCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmZpcnN0RWxlbWVudENoaWxkO1xuXG5cdGlmIChmaXJzdCBpbnN0YW5jZW9mIEhUTUxIZWFkaW5nRWxlbWVudCkge1xuXHRcdGF0dHIoZmlyc3QsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcblx0XHRmaXJzdC5mb2N1cygpOyAvLyBBdXRvZm9jdXMgZmlyc3QgaGVhZGluZ1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uKGRvY3VtZW50LCBcImFuaW1hdGlvbmVuZFwiLCBoYW5kbGVJbmplY3QsIFFVSUNLX0VWRU5UKSk7XG4iLCJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5cbi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfSU9TID0gSVNfQlJPV1NFUiAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgU0FGRV9MQUJFTExFREJZID0gYCR7SVNfQU5EUk9JRCA/IFwiZGF0YVwiIDogXCJhcmlhXCJ9LWxhYmVsbGVkYnlgO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBGT0NVU19PVVRMSU5FID0gXCJvdXRsaW5lOiAxcHggZG90dGVkOyBvdXRsaW5lOiA1cHggYXV0byBIaWdobGlnaHQ7IG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvclwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIGF0dGFjaFN0eWxlID0gKGVsZW1lbnQsIGNzcykgPT4gZWxlbWVudC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAvLyBVbm5hbWVkIHNsb3QgZG9lcyBhdXRvbWF0aWNhbGx5IHJlbmRlciBhbGwgdG9wIGVsZW1lbnQgbm9kZXNcbiAgY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIGNzcylcbik7XG52YXIgb2JzZXJ2ZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgbXV0YXRpb25PYnNlcnZlciA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHJldHVybiBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpO1xuICB0cnkge1xuICAgIG9ic2VydmVycy5nZXQoZWxlbWVudCkuZGlzY29ubmVjdCgpO1xuICAgIG9ic2VydmVycy5kZWxldGUoZWxlbWVudCk7XG4gIH0gY2F0Y2ggKF9lcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIExJVkU7XG52YXIgTElWRV9TUl9GSVggPSAwO1xudmFyIHNwZWFrID0gKHRleHQpID0+IHtcbiAgaWYgKCFMSVZFKSB7XG4gICAgTElWRSA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgTElWRS5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjpmaXhlZDtvdmVyZmxvdzpoaWRkZW47d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcFwiO1xuICAgIGF0dHIoTElWRSwgXCJhcmlhLWxpdmVcIiwgXCJhc3NlcnRpdmVcIik7XG4gIH1cbiAgaWYgKCFMSVZFLmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChMSVZFKTtcbiAgaWYgKHRleHQpIExJVkUudGV4dENvbnRlbnQgPSBgJHt0ZXh0fSR7TElWRV9TUl9GSVgrKyAlIDIgPyBcIlxceEEwXCIgOiBcIlwifWA7XG59O1xudmFyIHNldFZhbHVlID0gKGlucHV0LCBkYXRhLCB0eXBlID0gXCJcIikgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlLCBkYXRhLCBpbnB1dFR5cGU6IHR5cGUgfTtcbiAgY29uc3QgcHJvdG8gPSBIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImJlZm9yZWlucHV0XCIsIGV2ZW50KSk7XG4gIChfYiA9IChfYTIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBcInZhbHVlXCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwoaW5wdXQsIGRhdGEpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiaW5wdXRcIiwgZXZlbnQpKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJjaGFuZ2VcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbn07XG52YXIgSVNfUFJFU1MgPSBmYWxzZTtcbnZhciBpc01vdXNlRG93biA9IChldmVudCkgPT4ge1xuICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gXCJtb3VzZXVwXCIpIElTX1BSRVNTID0gZmFsc2U7XG4gIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSBcIm1vdXNlZG93blwiKSB7XG4gICAgSVNfUFJFU1MgPSB0cnVlO1xuICAgIG9uKGRvY3VtZW50LCBcIm1vdXNldXBcIiwgaXNNb3VzZURvd24sIHsgb25jZTogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gSVNfUFJFU1M7XG59O1xuXG4vLyB1LW9wdGlvbi50c1xudmFyIERJU0FCTEVEID0gXCJkaXNhYmxlZFwiO1xudmFyIFNFTEVDVEVEID0gXCJzZWxlY3RlZFwiO1xudmFyIFVIVE1MT3B0aW9uRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtESVNBQkxFRCwgU0VMRUNURURdO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICghSVNfSU9TKSB0aGlzLnRhYkluZGV4ID0gLTE7XG4gICAgaWYgKCF0aGlzLmhhc0F0dHJpYnV0ZShcInJvbGVcIikpIGF0dHIodGhpcywgXCJyb2xlXCIsIFwib3B0aW9uXCIpO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWRpc2FibGVkXCIsIGAke3RoaXMuZGlzYWJsZWR9YCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtc2VsZWN0ZWRcIiwgYCR7dGhpcy5zZWxlY3RlZH1gKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgd2hldGhlciB0aGUgb3B0aW9uIGluIHRoZSBsaXN0IGJveCBpcyB0aGUgZGVmYXVsdCBpdGVtLiAqL1xuICBnZXQgZGVmYXVsdFNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzW1NFTEVDVEVEXTtcbiAgfVxuICBzZXQgZGVmYXVsdFNlbGVjdGVkKHZhbHVlKSB7XG4gICAgdGhpc1tTRUxFQ1RFRF0gPSB2YWx1ZTtcbiAgfVxuICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgRElTQUJMRUQpICE9PSBudWxsO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgRElTQUJMRUQsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIC8qKiBSZXRyaWV2ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGZvcm0gdGhhdCB0aGUgb2JqZWN0IGlzIGVtYmVkZGVkIGluLiAqL1xuICBnZXQgZm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwiZm9ybVwiKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIG9yZGluYWwgcG9zaXRpb24gb2YgYW4gb3B0aW9uIGluIGEgbGlzdCBib3guICovXG4gIGdldCBpbmRleCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiBbXG4gICAgICAuLi4oKF9hMiA9IHRoaXMucGFyZW50RWxlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5vcHRpb25zKSB8fCBbdGhpc11cbiAgICBdLmluZGV4T2YodGhpcyk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIGEgdmFsdWUgdGhhdCB5b3UgY2FuIHVzZSB0byBpbXBsZW1lbnQgeW91ciBvd24gbGFiZWwgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIG9iamVjdC4gKi9cbiAgZ2V0IGxhYmVsKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIChfYTIgPSBhdHRyKHRoaXMsIFwibGFiZWxcIikpICE9IG51bGwgPyBfYTIgOiB0aGlzLnRleHQ7XG4gIH1cbiAgc2V0IGxhYmVsKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImxhYmVsXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgU0VMRUNURUQpICE9PSBudWxsO1xuICB9XG4gIHNldCBzZWxlY3RlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgU0VMRUNURUQsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgdGV4dCBzdHJpbmcgc3BlY2lmaWVkIGJ5IHRoZSBvcHRpb24gdGFnLiAqL1xuICBnZXQgdGV4dCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IHRoaXMudGV4dENvbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICB9XG4gIHNldCB0ZXh0KHRleHQpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIHZhbHVlIHdoaWNoIGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIgd2hlbiB0aGUgZm9ybSBjb250cm9sIGlzIHN1Ym1pdHRlZC4gKi9cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIChfYTIgPSBhdHRyKHRoaXMsIFwidmFsdWVcIikpICE9IG51bGwgPyBfYTIgOiB0aGlzLnRleHQ7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgfVxufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtb3B0aW9uXCIsIFVIVE1MT3B0aW9uRWxlbWVudCk7XG5cbi8vIHUtZGF0YWxpc3QudHNcbnZhciBMSVZFX1RJTUVSO1xudmFyIElOUFVUX0RFQk9VTkNFID0gMDtcbnZhciBJU19NT0JJTEUgPSBJU19JT1MgfHwgSVNfQU5EUk9JRDtcbnZhciBFVkVOVFMgPSBcImNsaWNrLGZvY3Vzb3V0LGlucHV0LGtleWRvd24sbW91c2Vkb3duLG1vdXNldXBcIjtcbnZhciBFVkVOVFNfSU5QVVQgPSBcImZvY3VzLGZvY3VzaW4sYmx1cixmb2N1c291dFwiO1xudmFyIFRFWFRTID0ge1xuICBzaW5ndWxhcjogXCIlZCBoaXRcIixcbiAgcGx1cmFsOiBcIiVkIGhpdHNcIlxufTtcbnZhciBVSFRNTERhdGFMaXN0RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl90ZXh0cyA9IF9fc3ByZWFkVmFsdWVzKHt9LCBURVhUUyk7XG4gICAgdGhpcy5fdmFsdWUgPSBcIlwiO1xuICAgIGF0dGFjaFN0eWxlKFxuICAgICAgdGhpcyxcbiAgICAgIGAke0RJU1BMQVlfQkxPQ0t9XG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb24pIHsgZGlzcGxheTogYmxvY2s7IGN1cnNvcjogcG9pbnRlciB9XG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb246Zm9jdXMpIHsgJHtGT0NVU19PVVRMSU5FfSB9XG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb25bYXJpYS1oaWRkZW49XCJ0cnVlXCJdKSxcblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbltkaXNhYmxlZF0pLFxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uW2hpZGRlbl0pIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50IH1gXG4gICAgKTtcbiAgfVxuICAvLyBVc2VkIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgYW5ub3VuY2VtZW50c1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiaWRcIiwgLi4uT2JqZWN0LmtleXMoVEVYVFMpLm1hcCgoa2V5KSA9PiBgZGF0YS1zci0ke2tleX1gKV07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuX3Jvb3QgPSBnZXRSb290KHRoaXMpO1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwibGlzdGJveFwiKTtcbiAgICBhdHRyKHRoaXMsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcbiAgICBvbih0aGlzLl9yb290LCBcImZvY3VzaW5cIiwgdGhpcyk7XG4gICAgb24odGhpcy5fcm9vdCwgXCJmb2N1c1wiLCB0aGlzLCB0cnVlKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHtcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogW1wiZGlzYWJsZWRcIiwgXCJoaWRkZW5cIiwgXCJsYWJlbFwiLCBcInZhbHVlXCJdLFxuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpKTtcbiAgfVxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBvZmYodGhpcy5fcm9vdCB8fCB0aGlzLCBcImZvY3VzXCIsIHRoaXMsIHRydWUpO1xuICAgIG9mZih0aGlzLl9yb290IHx8IHRoaXMsIFwiZm9jdXNpblwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIGZhbHNlKTtcbiAgICBkaXNjb25uZWN0SW5wdXQodGhpcyk7XG4gICAgdGhpcy5fcm9vdCA9IHZvaWQgMDtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socHJvcCwgX3ByZXYsIG5leHQpIHtcbiAgICBjb25zdCB0ZXh0ID0gcHJvcCA9PSBudWxsID8gdm9pZCAwIDogcHJvcC5zcGxpdChcImRhdGEtc3ItXCIpWzFdO1xuICAgIGNvbnN0IGNzcyA9IGBpbnB1dFtsaXN0PVwiJHt0aGlzLmlkfVwiXWA7XG4gICAgaWYgKFRFWFRTW3RleHRdKSB0aGlzLl90ZXh0c1t0ZXh0XSA9IG5leHQgfHwgVEVYVFNbdGV4dF07XG4gICAgZWxzZSBpZiAodGhpcy5fcm9vdCkge1xuICAgICAgaWYgKHRoaXMuX2lucHV0KSBzZXR1cElucHV0KHRoaXMsIHRoaXMuX2lucHV0KTtcbiAgICAgIGZvciAoY29uc3QgaW5wdXQgb2YgdGhpcy5fcm9vdC5xdWVyeVNlbGVjdG9yQWxsKGNzcykpXG4gICAgICAgIHNldHVwSW5wdXQodGhpcywgaW5wdXQpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHsgdGFyZ2V0LCB0eXBlIH0gPSBldmVudDtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmICh0eXBlID09PSBcImNsaWNrXCIpIG9uQ2xpY2sodGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImZvY3VzXCIgfHwgdHlwZSA9PT0gXCJmb2N1c2luXCIpIG9uRm9jdXModGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImJsdXJcIiB8fCB0eXBlID09PSBcImZvY3Vzb3V0XCIpIG9uQmx1cih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwia2V5ZG93blwiKSBvbktleURvd24odGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiICYmIHRoaXMuY29udGFpbnModGFyZ2V0KSlcbiAgICAgIGlzTW91c2VEb3duKGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJtdXRhdGlvblwiIHx8IHR5cGUgPT09IFwiaW5wdXRcIikge1xuICAgICAgY2xlYXJUaW1lb3V0KElOUFVUX0RFQk9VTkNFKTtcbiAgICAgIElOUFVUX0RFQk9VTkNFID0gc2V0VGltZW91dChvbklucHV0LCAwLCB0aGlzLCBldmVudCk7XG4gICAgfVxuICB9XG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidS1vcHRpb25cIik7XG4gIH1cbn07XG52YXIgaXNEaXNhYmxlZCA9IChpbnB1dCkgPT4gKGlucHV0ID09IG51bGwgPyB2b2lkIDAgOiBpbnB1dC5kaXNhYmxlZCkgfHwgKGlucHV0ID09IG51bGwgPyB2b2lkIDAgOiBpbnB1dC5yZWFkT25seSkgfHwgZmFsc2U7XG52YXIgc2V0RXhwYW5kZWQgPSAoc2VsZiwgb3BlbikgPT4ge1xuICB2YXIgX2EyLCBfYiwgX2M7XG4gIGlmIChzZWxmLmhpZGRlbiAhPT0gb3BlbikgcmV0dXJuO1xuICBzZWxmLmhpZGRlbiA9IGlzRGlzYWJsZWQoc2VsZiA9PSBudWxsID8gdm9pZCAwIDogc2VsZi5faW5wdXQpIHx8ICFvcGVuO1xuICAoX2EyID0gbXV0YXRpb25PYnNlcnZlcihzZWxmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50YWtlUmVjb3JkcygpO1xuICBjb25zdCBpc1BvcG92ZXIgPSBzZWxmLmlzQ29ubmVjdGVkICYmIHNlbGYucG9wb3ZlciAmJiAoKF9iID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5pc0Nvbm5lY3RlZCkgJiYgKChfYyA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2MucG9wb3ZlclRhcmdldEVsZW1lbnQpID09PSBzZWxmO1xuICBpZiAoc2VsZi5faW5wdXQpIHNldHVwSW5wdXQoc2VsZiwgc2VsZi5faW5wdXQsIG9wZW4pO1xuICBpZiAoaXNQb3BvdmVyKSBhdHRyKHNlbGYsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcbiAgaWYgKGlzUG9wb3Zlcikgc2VsZi50b2dnbGVQb3BvdmVyKG9wZW4pO1xuICBpZiAob3Blbikgb25JbnB1dChzZWxmKTtcbn07XG52YXIgZGlzY29ubmVjdElucHV0ID0gKHNlbGYpID0+IHtcbiAgaWYgKCFzZWxmLl9pbnB1dCkgcmV0dXJuO1xuICBvZmYoc2VsZi5faW5wdXQgfHwgc2VsZiwgRVZFTlRTX0lOUFVULCBzZWxmKTtcbiAgb2ZmKHNlbGYuX3Jvb3QgfHwgc2VsZiwgRVZFTlRTLCBzZWxmKTtcbiAgc2V0RXhwYW5kZWQoc2VsZiwgZmFsc2UpO1xuICBzZWxmLl9pbnB1dCA9IHZvaWQgMDtcbn07XG52YXIgc2V0dXBJbnB1dCA9IChzZWxmLCBpbnB1dCwgb3BlbiA9IGZhbHNlKSA9PiB7XG4gIGlmIChzZWxmLnBvcG92ZXIpIGF0dHIoaW5wdXQsIFwicG9wb3ZlcnRhcmdldFwiLCB1c2VJZChzZWxmKSk7XG4gIG9uKGlucHV0LCBFVkVOVFNfSU5QVVQsIHNlbGYsIHRydWUpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtYXV0b2NvbXBsZXRlXCIsIFwibGlzdFwiKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWNvbnRyb2xzXCIsIHVzZUlkKHNlbGYpKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWV4cGFuZGVkXCIsIGAkeyFJU19NT0JJTEUgfHwgb3Blbn1gKTtcbiAgYXR0cihpbnB1dCwgXCJhdXRvY29tcGxldGVcIiwgXCJvZmZcIik7XG4gIGF0dHIoaW5wdXQsIFwicm9sZVwiLCBpc0Rpc2FibGVkKGlucHV0KSA/IG51bGwgOiBcImNvbWJvYm94XCIpO1xufTtcbnZhciBvbkZvY3VzID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IGlzSW5wdXQgPSBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50O1xuICBpZiAoaXNJbnB1dCAmJiBldmVudC5pc1RydXN0ZWQpIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICBpZiAoc2VsZi5faW5wdXQgIT09IGV2ZW50LnRhcmdldCAmJiBpc0lucHV0ICYmIGV2ZW50LnRhcmdldC5saXN0ID09PSBzZWxmKSB7XG4gICAgaWYgKHNlbGYuX2lucHV0KSBkaXNjb25uZWN0SW5wdXQoc2VsZik7XG4gICAgc2VsZi5faW5wdXQgPSBldmVudC50YXJnZXQ7XG4gICAgc2VsZi5faW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImZvY3VzXCIpKTtcbiAgICBzZWxmLl9pbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNpblwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgIGF0dHIoc2VsZiwgU0FGRV9MQUJFTExFREJZLCB1c2VJZCgoX2EyID0gc2VsZi5faW5wdXQubGFiZWxzKSA9PSBudWxsID8gdm9pZCAwIDogX2EyWzBdKSk7XG4gICAgb24oc2VsZi5fcm9vdCB8fCBzZWxmLCBFVkVOVFMsIHNlbGYpO1xuICAgIHNldEV4cGFuZGVkKHNlbGYsIGF0dHIoc2VsZi5faW5wdXQsIFwiaW5wdXRtb2RlXCIpICE9PSBcIm5vbmVcIik7XG4gICAgc3BlYWsoKTtcbiAgfVxufTtcbnZhciBvbkJsdXIgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgaWYgKCFJU19BTkRST0lEICYmICFpc01vdXNlRG93bigpICYmIHNlbGYuX2lucHV0KVxuICAgIHNldFRpbWVvdXQob25CbHVycmVkLCAwLCBzZWxmKTtcbiAgaWYgKGV2ZW50LnRhcmdldCA9PT0gc2VsZi5faW5wdXQgJiYgZXZlbnQuaXNUcnVzdGVkKVxuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufTtcbnZhciBvbkJsdXJyZWQgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByZWxhdGVkVGFyZ2V0ID0gKChfYTIgPSBzZWxmLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmFjdGl2ZUVsZW1lbnQpIHx8IG51bGw7XG4gIGNvbnN0IGlucHV0ID0gc2VsZi5faW5wdXQ7XG4gIGlmIChpbnB1dCAmJiBpbnB1dCAhPT0gcmVsYXRlZFRhcmdldCAmJiAhc2VsZi5jb250YWlucyhyZWxhdGVkVGFyZ2V0KSkge1xuICAgIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJibHVyXCIsIHsgcmVsYXRlZFRhcmdldCB9KSk7XG4gICAgaW5wdXQuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNvdXRcIiwgeyBidWJibGVzOiB0cnVlLCByZWxhdGVkVGFyZ2V0IH0pXG4gICAgKTtcbiAgICBkaXNjb25uZWN0SW5wdXQoc2VsZik7XG4gIH1cbn07XG52YXIgb25DbGljayA9IChzZWxmLCB7IHRhcmdldCB9KSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmICghc2VsZi5faW5wdXQgfHwgc2VsZi5faW5wdXQgPT09IHRhcmdldCkgcmV0dXJuIHNldEV4cGFuZGVkKHNlbGYsIHRydWUpO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBzZWxmLm9wdGlvbnMpXG4gICAgaWYgKG9wdC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICBpZiAoYXR0cihzZWxmLCBcImFyaWEtbXVsdGlzZWxlY3RhYmxlXCIpICE9PSBcInRydWVcIikge1xuICAgICAgICAoX2EyID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZm9jdXMoKTtcbiAgICAgICAgc2V0RXhwYW5kZWQoc2VsZiwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNldFZhbHVlKHNlbGYuX2lucHV0LCBvcHQudmFsdWUpO1xuICAgIH1cbiAgaWYgKElTX0FORFJPSUQpIG9uQmx1cnJlZChzZWxmKTtcbn07XG52YXIgb25LZXlEb3duID0gKHNlbGYsIGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgeyBrZXksIHRhcmdldCwgYWx0S2V5LCBjdHJsS2V5LCBzaGlmdEtleSwgbWV0YUtleSB9ID0gZTtcbiAgY29uc3QgaXNFc2NhcGUgPSBrZXkgPT09IFwiRXNjYXBlXCIgfHwga2V5ID09PSBcIkVzY1wiO1xuICBpZiAoYWx0S2V5IHx8IGN0cmxLZXkgfHwgbWV0YUtleSB8fCBzaGlmdEtleSB8fCBrZXkgPT09IFwiVGFiXCIpIHJldHVybjtcbiAgaWYgKGlzRXNjYXBlICYmICFzZWxmLmhpZGRlbikgZSA9PSBudWxsID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICBzZXRFeHBhbmRlZChzZWxmLCAhaXNFc2NhcGUpO1xuICBjb25zdCBvcHRpb25zID0gWy4uLnNlbGYub3B0aW9uc10uZmlsdGVyKFxuICAgIChlbCkgPT4gYXR0cihlbCwgXCJhcmlhLWhpZGRlblwiKSAhPT0gXCJ0cnVlXCIgJiYgZWwub2Zmc2V0SGVpZ2h0XG4gICk7XG4gIGNvbnN0IHByZXYgPSBvcHRpb25zLmluZGV4T2YodGFyZ2V0KTtcbiAgbGV0IG5leHQgPSAtMTtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIikgbmV4dCA9IChwcmV2ICsgMSkgJSBvcHRpb25zLmxlbmd0aDtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd1VwXCIpIG5leHQgPSAofnByZXYgPyBwcmV2IDogb3B0aW9ucy5sZW5ndGgpIC0gMTtcbiAgaWYgKH5wcmV2KSB7XG4gICAgaWYgKGtleSA9PT0gXCJIb21lXCIgfHwga2V5ID09PSBcIlBhZ2VVcFwiKSBuZXh0ID0gMDtcbiAgICBpZiAoa2V5ID09PSBcIkVuZFwiIHx8IGtleSA9PT0gXCJQYWdlRG93blwiKSBuZXh0ID0gb3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIGlmIChrZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgb3B0aW9uc1twcmV2XS5jbGljaygpO1xuICAgICAgcmV0dXJuIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbiAgaWYgKG9wdGlvbnNbbmV4dF0pIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIG9wdGlvbi50YWJJbmRleCA9IC0xO1xuICBpZiAob3B0aW9uc1tuZXh0XSkgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAoX2EyID0gb3B0aW9uc1tuZXh0XSB8fCBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xuICBpZiAoIW9wdGlvbnNbbmV4dF0gJiYga2V5ID09PSBcIkFycm93VXBcIilcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHZhciBfYTM7XG4gICAgICByZXR1cm4gKF9hMyA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EzLnNldFNlbGVjdGlvblJhbmdlKDk5OSwgOTk5KTtcbiAgICB9KTtcbn07XG52YXIgb25JbnB1dCA9IChzZWxmLCBlKSA9PiB7XG4gIGNvbnN0IHsgX3RleHRzLCBfcm9vdCwgX2lucHV0LCBvcHRpb25zIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9IChfaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IF9pbnB1dC52YWx1ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKSkgfHwgXCJcIjtcbiAgY29uc3QgZmlsdGVyID0gIXNlbGYuaGFzQXR0cmlidXRlKFwiZGF0YS1ub2ZpbHRlclwiKTtcbiAgY29uc3QgaGlkZGVuID0gW107XG4gIGNvbnN0IHZpc2libGUgPSBbXTtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGNvbnN0IGhpZGUgPSBvcHQuZGlzYWJsZWQgfHwgb3B0LmhpZGRlbiB8fCBmaWx0ZXIgJiYgIW9wdC5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHZhbHVlKTtcbiAgICAoaGlkZSA/IGhpZGRlbiA6IHZpc2libGUpLnB1c2gob3B0KTtcbiAgfVxuICBmb3IgKGNvbnN0IG9wdCBvZiBoaWRkZW4pIGF0dHIob3B0LCBcImFyaWEtaGlkZGVuXCIsIFwidHJ1ZVwiKTtcbiAgZm9yIChjb25zdCBvcHQgb2YgdmlzaWJsZSkgYXR0cihvcHQsIFwiYXJpYS1oaWRkZW5cIiwgXCJmYWxzZVwiKTtcbiAgY29uc3QgdG90YWwgPSB2aXNpYmxlLmxlbmd0aDtcbiAgY2xlYXJUaW1lb3V0KExJVkVfVElNRVIpO1xuICBpZiAoKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUudHlwZSkgPT09IFwiaW5wdXRcIiAmJiB2YWx1ZSAhPT0gc2VsZi5fdmFsdWUpXG4gICAgTElWRV9USU1FUiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IGAkeyF0b3RhbCAmJiBzZWxmLmlubmVyVGV4dC50cmltKCkgfHwgYCR7X3RleHRzW3RvdGFsID09PSAxID8gXCJzaW5ndWxhclwiIDogXCJwbHVyYWxcIl19YC5yZXBsYWNlKFwiJWRcIiwgYCR7dG90YWx9YCl9YDtcbiAgICAgIGlmICghc2VsZi5oaWRkZW4gJiYgKF9yb290ID09IG51bGwgPyB2b2lkIDAgOiBfcm9vdC5hY3RpdmVFbGVtZW50KSA9PT0gX2lucHV0KSBzcGVhayh0ZXh0KTtcbiAgICAgIHNlbGYuX3ZhbHVlID0gdmFsdWU7XG4gICAgfSwgMWUzKTtcbiAgaWYgKElTX0lPUylcbiAgICB2aXNpYmxlLmZvckVhY2goKG9wdCwgaWR4KSA9PiBhdHRyKG9wdCwgXCJ0aXRsZVwiLCBgJHtpZHggKyAxfS8ke3RvdGFsfWApKTtcbn07XG5pZiAoSVNfQlJPV1NFUilcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcImxpc3RcIiwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBnZXRSb290KHRoaXMpLmdldEVsZW1lbnRCeUlkKGF0dHIodGhpcywgXCJsaXN0XCIpIHx8IFwiXCIpO1xuICAgIH1cbiAgfSk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWRhdGFsaXN0XCIsIFVIVE1MRGF0YUxpc3RFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxEYXRhTGlzdEVsZW1lbnQgfTtcbiIsImltcG9ydCB7IFVIVE1MQ29tYm9ib3hFbGVtZW50IH0gZnJvbSBcIkB1LWVsZW1lbnRzL3UtY29tYm9ib3hcIjtcbmltcG9ydCB7IFVIVE1MRGF0YUxpc3RFbGVtZW50IH0gZnJvbSBcIkB1LWVsZW1lbnRzL3UtZGF0YWxpc3RcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRhbmNob3JQb3NpdGlvbixcblx0YXR0cixcblx0aXNJbnB1dExpa2UsXG5cdG9uLFxuXHRvbkxvYWRlZCxcblx0b25NdXRhdGlvbixcblx0UVVJQ0tfRVZFTlQsXG5cdHVzZUlkLFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0ZJRUxEID0gc3R5bGVzLmZpZWxkLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19WQUxJREFUSU9OUyA9IHN0eWxlcy52YWxpZGF0aW9uLnNwbGl0KFwiIFwiKTtcbmNvbnN0IENTU19WQUxJREFUSU9OID0gQ1NTX1ZBTElEQVRJT05TWzBdO1xuXG5jb25zdCBnZXRUZXh0ID0gKHN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uLCBrZXk6IHN0cmluZykgPT5cblx0c3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShgLS1tdGRzLXRleHQtJHtrZXl9YCk/LnNsaWNlKDEsIC0xKSB8fCBcIlwiOyAvLyBzbGljZSB0byB0cmltIHF1b3Rlc1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihmaWVsZHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4sIHZhbGlkYXRlPzogYm9vbGVhbikge1xuXHRmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcylcblx0XHRpZiAoZmllbGQuaXNDb25uZWN0ZWQpIHtcblx0XHRcdGNvbnN0IGxhYmVsczogSFRNTExhYmVsRWxlbWVudFtdID0gW107XG5cdFx0XHRjb25zdCBkZXNjczogRWxlbWVudFtdID0gW107XG5cdFx0XHRjb25zdCB2YWxpZHM6IEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0bGV0IGNvbWJvYm94OiBVSFRNTENvbWJvYm94RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXHRcdFx0bGV0IGlucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdFx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGVsIG9mIGZpZWxkLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSkge1xuXHRcdFx0XHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MTGFiZWxFbGVtZW50KSBsYWJlbHMucHVzaChlbCk7XG5cdFx0XHRcdGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgVUhUTUxDb21ib2JveEVsZW1lbnQpIGNvbWJvYm94ID0gZWw7XG5cdFx0XHRcdGVsc2UgaWYgKGlzSW5wdXRMaWtlKGVsKSAmJiAhZWwuaGlkZGVuKSBpbnB1dCA9IGVsO1xuXHRcdFx0XHRlbHNlIGlmIChlbC5oYXNBdHRyaWJ1dGUoXCJkYXRhLWRlc2NyaXB0aW9uXCIpKSBkZXNjcy5wdXNoKGVsKTtcblx0XHRcdFx0ZWxzZSBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkge1xuXHRcdFx0XHRcdHZhbGlkID0gYXR0cihlbCwgXCJkYXRhLWNvbG9yXCIpID09PSBcInN1Y2Nlc3NcIiB8fCAhZWwuY2xpZW50SGVpZ2h0OyAvLyBPbmx5IHNldCBpbnZhbGlkIGlmIFZhbGlkYXRpb24gaXMgdmlzaWJsZVxuXHRcdFx0XHRcdHZhbGlkcy5wdXNoKGVsKTtcblx0XHRcdFx0XHRkZXNjcy51bnNoaWZ0KGVsKTtcblx0XHRcdFx0fSBlbHNlIGlmIChlbCBpbnN0YW5jZW9mIEhUTUxQYXJhZ3JhcGhFbGVtZW50KVxuXHRcdFx0XHRcdGRlc2NzLnNvbWUoKGRlc2MpID0+IGRlc2MuY29udGFpbnMoZWwpKSB8fCBkZXNjcy5wdXNoKGVsKTsgLy8gT25seSBhZGQgaWYgbm90IGFscmVhZHkgaW5zaWRlIGRlc2NyaXB0aW9uXG5cdFx0XHR9XG5cblx0XHRcdGlmIChpbnB1dCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGxhYmVsIG9mIGxhYmVscykgbGFiZWwuaHRtbEZvciA9IHVzZUlkKGlucHV0KTtcblx0XHRcdFx0aWYgKHZhbGlkYXRlICYmIGF0dHIoZmllbGQsIFwiZGF0YS12YWxpZGF0aW9uXCIpID09PSBcImZvcm1cIikge1xuXHRcdFx0XHRcdHZhbGlkID0gaW5wdXQubWF0Y2hlcyhcIjp2YWxpZFwiKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGVsIG9mIHZhbGlkcykgYXR0cihlbCwgXCJoaWRkZW5cIiwgdmFsaWQgPyBcIlwiIDogbnVsbCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVuZGVyQ29tYm9ib3goY29tYm9ib3gpO1xuXHRcdFx0XHRyZW5kZXJDb3VudGVyKGlucHV0KTtcblx0XHRcdFx0cmVuZGVyVGV4dGFyZWFTaXplKGlucHV0KTtcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIGRlc2NzLm1hcCh1c2VJZCkuam9pbihcIiBcIikgfHwgbnVsbCk7IC8vIFJlbW92ZSBpZiBlbXB0eVxuXHRcdFx0XHRhdHRyKGlucHV0LCBcImFyaWEtaW52YWxpZFwiLCBgJHshdmFsaWR9YCk7XG5cdFx0XHR9XG5cdFx0fVxufVxuXG4vLyBpT1MgZG9lcyBub3Qgc3VwcG9ydCBmaWVsZC1zaXppbmc6IGNvbnRlbnQsIHNvIHdlIG5lZWQgdG8gbWFudWFsbHkgcmVzaXplXG5mdW5jdGlvbiByZW5kZXJUZXh0YXJlYVNpemUodGV4dGFyZWE6IEVsZW1lbnQpIHtcblx0aWYgKHRleHRhcmVhIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuXHRcdHRleHRhcmVhLnN0eWxlLnNldFByb3BlcnR5KFwiLS1tdGRzLXRleHRhcmVhLWhlaWdodFwiLCBcImF1dG9cIik7XG5cdFx0dGV4dGFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG5cdFx0XHRcIi0tbXRkcy10ZXh0YXJlYS1oZWlnaHRcIixcblx0XHRcdGAke3RleHRhcmVhLnNjcm9sbEhlaWdodH1weGAsXG5cdFx0KTtcblx0fVxufVxuXG4vLyBTZXR1cCB0cmFuc2xhdGlvbnMgZnJvbSBDU1MgY3VzdG9tIHByb3BlcnRpZXNcbmZ1bmN0aW9uIHJlbmRlckNvbWJvYm94KGVsOiBVSFRNTENvbWJvYm94RWxlbWVudCB8IG51bGwpIHtcblx0Y29uc3QgeyBjb250cm9sLCBsaXN0IH0gPSBlbCB8fCB7fTtcblxuXHRpZiAoZWwgJiYgbGlzdCAmJiAhZWwuaGFzQXR0cmlidXRlKFwiZGF0YS1zci1hZGRlZFwiKSkge1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1hZGRlZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWFkZGVkXCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItZW1wdHlcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1lbXB0eVwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLWZvdW5kXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtZm91bmRcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1pbnZhbGlkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtaW52YWxpZFwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLW9mXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtb2ZcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1yZW1vdmVcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1yZW1vdmVcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1yZW1vdmVkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtcmVtb3ZlZFwiKSk7XG5cdFx0YXR0cihsaXN0LCBcImRhdGEtc3ItcGx1cmFsXCIsIGdldFRleHQoc3R5bGUsIFwiZGF0YWxpc3QtcGx1cmFsXCIpKTtcblx0XHRhdHRyKGxpc3QsIFwiZGF0YS1zci1zaW5ndWxhclwiLCBnZXRUZXh0KHN0eWxlLCBcImRhdGFsaXN0LXNpbmd1bGFyXCIpKTtcblx0fVxuXHRpZiAobGlzdCAmJiBjb250cm9sICYmICFsaXN0Lmhhc0F0dHJpYnV0ZShcInBvcG92ZXJcIikpIHtcblx0XHRhdHRyKGxpc3QsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcblx0XHRhdHRyKGNvbnRyb2wsIFwicG9wb3ZlcnRhcmdldFwiLCB1c2VJZChsaXN0KSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyQ291bnRlcihpbnB1dDogSFRNTElucHV0RWxlbWVudCkge1xuXHRjb25zdCBlbCA9IGlucHV0Py5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdGNvbnN0IGxpbWl0ID0gZWwgJiYgYXR0cihlbCwgXCJkYXRhLWNvdW50XCIpO1xuXG5cdGlmIChlbCAmJiBsaW1pdCkge1xuXHRcdGNvbnN0IHJlbWFpbmRlciA9IE51bWJlcihsaW1pdCkgLSBpbnB1dC52YWx1ZS5sZW5ndGg7XG5cdFx0Y29uc3QgbmV4dEludmFsaWQgPSByZW1haW5kZXIgPCAwO1xuXHRcdGNvbnN0IHByZXZJbnZhbGlkID0gYXR0cihlbCwgXCJhcmlhLWxpdmVcIikgPT09IFwicG9saXRlXCI7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCB8fCBpbnB1dCk7XG5cdFx0Y29uc3Qgb3ZlciA9IGdldFRleHQoc3R5bGUsIFwiY291bnQtb3ZlclwiKTtcblx0XHRjb25zdCB1bmRlciA9IGdldFRleHQoc3R5bGUsIFwiY291bnQtdW5kZXJcIik7XG5cblx0XHRpZiAocHJldkludmFsaWQgIT09IG5leHRJbnZhbGlkKSB7XG5cdFx0XHRhdHRyKGVsLCBcImFyaWEtbGl2ZVwiLCBuZXh0SW52YWxpZCA/IFwicG9saXRlXCIgOiBcIm9mZlwiKTtcblx0XHRcdGZvciAoY29uc3QgY3NzIG9mIENTU19WQUxJREFUSU9OUykgZWwuY2xhc3NMaXN0LnRvZ2dsZShjc3MsIG5leHRJbnZhbGlkKTtcblx0XHR9XG5cdFx0ZWwudGV4dENvbnRlbnQgPSAobmV4dEludmFsaWQgPyBvdmVyIDogdW5kZXIpLnJlcGxhY2UoXG5cdFx0XHRcIiVkXCIsXG5cdFx0XHRgJHtNYXRoLmFicyhyZW1haW5kZXIpfWAsXG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBoYW5kbGVUb2dnbGUoeyB0YXJnZXQ6IGVsLCBuZXdTdGF0ZSB9OiBFdmVudCAmIHsgbmV3U3RhdGU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBVSFRNTERhdGFMaXN0RWxlbWVudCkge1xuXHRcdGNvbnN0IHJvb3QgPSBlbC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QgfCBudWxsO1xuXHRcdGNvbnN0IGFuY2hvciA9IHJvb3Q/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxuXHRcdFx0YFtwb3BvdmVydGFyZ2V0PVwiJHtlbC5pZH1cIl1gLFxuXHRcdCk7XG5cblx0XHRpZiAobmV3U3RhdGUgPT09IFwiY2xvc2VkXCIpIGFuY2hvclBvc2l0aW9uKGVsLCBmYWxzZSk7XG5cdFx0ZWxzZSBpZiAoYW5jaG9yKSB7XG5cdFx0XHRlbC5zdHlsZS53aWR0aCA9IGAke2FuY2hvci5jbGllbnRXaWR0aH1weGA7XG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgYW5jaG9yLCBhdHRyKGVsLCBcImRhdGEtcG9zaXRpb25cIikgPz8gXCJib3R0b21cIiwgdHJ1ZSk7XG5cdFx0fVxuXHR9XG59XG4vLyBVcGRhdGUgd2hlbiB0eXBpbmdcbmZ1bmN0aW9uIGhhbmRsZUlucHV0KGV2ZW50OiBFdmVudCkge1xuXHRpZiAoaXNJbnB1dExpa2UoZXZlbnQudGFyZ2V0KSkge1xuXHRcdHJlbmRlckNvdW50ZXIoZXZlbnQudGFyZ2V0KTtcblx0XHRyZW5kZXJUZXh0YXJlYVNpemUoZXZlbnQudGFyZ2V0KTtcblx0XHRoYW5kbGVEYXRhbGlzdFBvc2l0aW9uKGV2ZW50KTsgLy8gUmVwb3NpdGlvbiBsaXN0IGRhdGFsaXN0IC8vIFRPRE8gRW5oYW5jZSBieSB1c2luZyBzdHlsZS5ib3R0b20/XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlVmFsZGlhdGlvbihldmVudDogRXZlbnQpIHtcblx0Y29uc3QgZmllbGQgPSAoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oYC4ke0NTU19GSUVMRH1gKTtcblxuXHRpZiAoZXZlbnQudHlwZSA9PT0gXCJpbnZhbGlkXCIgJiYgZmllbGQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIFByZXZlbnQgYnJvd3NlcnMgZnJvbSBzaG93aW5nIGRlZmF1bHQgdmFsaWRhdGlvbiBidWJibGVzXG5cdGhhbmRsZU11dGF0aW9uKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ1NTX0ZJRUxEKSwgdHJ1ZSk7IC8vIFVwZGF0ZSBzdGF0ZVxufVxuXG4vLyBQb3NpdGlvbiBjb21ib2JveCB3aGVuIGNoYW5naW5nIGNvbnRlbnRcbmZ1bmN0aW9uIGhhbmRsZURhdGFsaXN0UG9zaXRpb24oeyB0YXJnZXQ6IGVsIH06IEV2ZW50KSB7XG5cdGNvbnN0IGxpc3QgPVxuXHRcdChlbCBpbnN0YW5jZW9mIFVIVE1MQ29tYm9ib3hFbGVtZW50IHx8IGVsIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkgJiZcblx0XHRlbC5saXN0O1xuXHRpZiAobGlzdCAmJiAhbGlzdD8uaGlkZGVuKSB7XG5cdFx0Y29uc3QgcG9zaXRpb24gPSBhdHRyKGxpc3QsIFwiZGF0YS1wb3NpdGlvblwiKSA/PyBcImJvdHRvbVwiO1xuXHRcdHNldFRpbWVvdXQoKCkgPT4gYW5jaG9yUG9zaXRpb24obGlzdCwgZWwsIHBvc2l0aW9uLCB0cnVlKSwgMTApOyAvLyBSZXBvc2l0aW9uIGxpc3QgaWYgbm90IGhpZGRlblxuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRCwgaGFuZGxlTXV0YXRpb24pO1xuXHRvbihkb2N1bWVudCwgXCJjb21ib2JveGJlZm9yZXNlbGVjdFwiLCBoYW5kbGVEYXRhbGlzdFBvc2l0aW9uLCBRVUlDS19FVkVOVCk7XG5cdG9uKGRvY3VtZW50LCBcImlucHV0XCIsIGhhbmRsZUlucHV0LCBRVUlDS19FVkVOVCk7XG5cdG9uKGRvY3VtZW50LCBcImludmFsaWQsc3VibWl0XCIsIGhhbmRsZVZhbGRpYXRpb24sIHRydWUpOyAvLyBVc2UgY2FwdHVyZSBhcyBpbnZhbGlkIGFuZCBzdWJtaXQgZG9lcyBub3QgYnViYmxlXG5cdG9uKGRvY3VtZW50LCBcInRvZ2dsZVwiLCBoYW5kbGVUb2dnbGUsIFFVSUNLX0VWRU5UKTsgLy8gVXNlIGNhcHR1cmUgc2luY2UgdG9nZ2xlIGRvZXMgbm90IGJ1YmJsZVxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgaXNJbnB1dExpa2UsIG9uTG9hZGVkLCBvbk11dGF0aW9uLCB1c2VJZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRklFTERTRVQgPSBzdHlsZXMuZmllbGRzZXQuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1ZBTElEQVRJT04gPSBzdHlsZXMudmFsaWRhdGlvbi5zcGxpdChcIiBcIilbMF07XG5jb25zdCBBUklBX0RFU0MgPSBcImFyaWEtZGVzY3JpYmVkYnlcIjtcbmNvbnN0IEFSSUFfSU5WQUxJRCA9IFwiYXJpYS1pbnZhbGlkXCI7XG5cbi8vIFVzaW5nIHJlcXVlc3RBbmltYXRpb25GcmFtZSB0byBlbnN1cmUgaXQgcnVucyBhZnRlciBmaWVsZC1vYnNlcnZlclxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oZmllbGRzZXRzOiBIVE1MQ29sbGVjdGlvbk9mPEVsZW1lbnQ+KSB7XG5cdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBmaWVsZHNldCBvZiBmaWVsZHNldHMpXG5cdFx0XHRpZiAoZmllbGRzZXQuaXNDb25uZWN0ZWQpIHtcblx0XHRcdFx0Y29uc3QgaW5wdXRzOiBIVE1MSW5wdXRFbGVtZW50W10gPSBbXTtcblx0XHRcdFx0bGV0IHZhbGlkSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXHRcdFx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgZWwgb2YgZmllbGRzZXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpKSB7XG5cdFx0XHRcdFx0aWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhDU1NfVkFMSURBVElPTikpIHtcblx0XHRcdFx0XHRcdHZhbGlkID0gYXR0cihlbCwgXCJkYXRhLWNvbG9yXCIpID09PSBcInN1Y2Nlc3NcIiB8fCAhZWwuY2xpZW50SGVpZ2h0OyAvLyBPbmx5IHNldCBpbnZhbGlkIGlmIFZhbGlkYXRpb24gaXMgdmlzaWJsZVxuXHRcdFx0XHRcdFx0dmFsaWRJZCA9IHVzZUlkKGVsKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGlzSW5wdXRMaWtlKGVsKSkgaW5wdXRzLnB1c2goZWwpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCBpbnB1dCBvZiBpbnB1dHMpIHtcblx0XHRcdFx0XHRjb25zdCBkZXNjID0gYXR0cihpbnB1dCwgQVJJQV9ERVNDKT8ucmVwbGFjZSh2YWxpZElkIHx8IFwiI1wiLCBcIlwiKTtcblxuXHRcdFx0XHRcdGF0dHIoaW5wdXQsIEFSSUFfREVTQywgYCR7dmFsaWRJZCB8fCBcIlwifSAke2Rlc2MgfHwgXCJcIn1gLnRyaW0oKSk7XG5cdFx0XHRcdFx0YXR0cihpbnB1dCwgQVJJQV9JTlZBTElELCBgJHshdmFsaWR9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0fSk7XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfRklFTERTRVQsIGhhbmRsZU11dGF0aW9uKSxcbik7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0xPR08gPSBzdHlsZXMubG9nby5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKFtsb2dvXTogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0aWYgKGxvZ28/LmlzQ29ubmVjdGVkICYmIGxvZ28/LmZpcnN0RWxlbWVudENoaWxkIGluc3RhbmNlb2YgU1ZHU1ZHRWxlbWVudCkge1xuXHRcdGZvciAoY29uc3QgaWNvbiBvZiBkb2N1bWVudC5oZWFkLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaW5rW3JlbH49J2ljb24nXVwiKSlcblx0XHRcdGljb24uc2V0QXR0cmlidXRlKFwicmVsXCIsIFwiZGlzYWJsZWRcIik7IC8vIERpc2FibGUgcHJldmlvdXMgaWNvbiAoYnV0IG5vdCByZW1vdmUgaXMgYXMgdGhpcyBtYWtlcyBOZXh0LmpzIHNhZClcblxuXHRcdGNvbnN0IHN2ZyA9IGxvZ28uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0Y29uc3QgaXNEb3QgPSBsb2dvPy5oYXNBdHRyaWJ1dGUoXCJkYXRhLWVudlwiKTtcblx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHN2Zyk7XG5cdFx0Y29uc3QgdGV4dCA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJjb2xvclwiKTtcblx0XHRjb25zdCBiYWNrID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIi0tbXRkcy1sb2dvLWNvbG9yXCIpO1xuXHRcdGNvbnN0IGljb24gPSBzdmcub3V0ZXJIVE1MXG5cdFx0XHQucmVwbGFjZSgvXFxuKy9nLCBcIiBcIikgLy8gUHJldmVudCBsaW5lIGJyZWFrc1xuXHRcdFx0LnJlcGxhY2UoLyhmaWxsfHdpZHRofGhlaWdodHx4bWxucyk9XCJbXlwiXStcIi9naSwgXCJcIilcblx0XHRcdC5yZXBsYWNlKFwiPHN2Z1wiLCBgPHN2ZyB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiBmaWxsPVwiJHt0ZXh0fVwiYCk7XG5cblx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFxuXHRcdFx0T2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKSwge1xuXHRcdFx0XHRocmVmOiBgZGF0YTppbWFnZS9zdmcreG1sLCR7ZW5jb2RlVVJJQ29tcG9uZW50KGA8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDU1IDU1Jz48cmVjdCBmaWxsPScke2lzRG90ID8gXCJub25lXCIgOiBiYWNrfScgd2lkdGg9JzUxJyBoZWlnaHQ9JzUxJyB4PScyJyB5PScyJyBzdHJva2U9JyR7dGV4dH0nIHN0cm9rZS1kYXNoYXJyYXk9JzAuMDkgNi4zOCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2Utb3BhY2l0eT0nJHtpc0RvdCA/IDAuNiA6IDB9JyBzdHJva2Utd2lkdGg9JzIuMycgcng9JzI1LjUnLz48ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNy41IDcuNSlcIj4ke2ljb259PC9nPjwvc3ZnPmApfWAsXG5cdFx0XHRcdHJlbDogXCJpY29uXCIsXG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfTE9HTywgaGFuZGxlTXV0YXRpb24pKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhbmNob3JQb3NpdGlvbiwgYXR0ciwgb24sIG9uTG9hZGVkLCBRVUlDS19FVkVOVCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfUE9QT1ZFUiA9IHN0eWxlcy5wb3BvdmVyLnNwbGl0KFwiIFwiKVswXTtcbmxldCBPUEVOX1BPUE9WRVJTID0gMDsgLy8gU3BlZWQgdXAgYnkgb25seSBjaGVja2luZyBjbGlja3MgaWYgd2UgaGF2ZSBvcGVuIHBvcG92ZXJzXG5cbmZ1bmN0aW9uIGhhbmRsZVRvZ2dsZSh7IHRhcmdldDogZWwsIG5ld1N0YXRlIH06IEV2ZW50ICYgeyBuZXdTdGF0ZT86IHN0cmluZyB9KSB7XG5cdGlmIChlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGVsLmNsYXNzTGlzdC5jb250YWlucyhDU1NfUE9QT1ZFUikpIHtcblx0XHRjb25zdCBhbmNob3IgPSAoZWwuZ2V0Um9vdE5vZGUoKSBhcyBTaGFkb3dSb290KT8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG5cdFx0XHRgW3BvcG92ZXJ0YXJnZXQ9XCIke2VsLmlkfVwiXWAsXG5cdFx0KTtcblxuXHRcdGlmIChuZXdTdGF0ZSA9PT0gXCJjbG9zZWRcIikge1xuXHRcdFx0T1BFTl9QT1BPVkVSUyAtPSAxO1xuXHRcdFx0YW5jaG9yUG9zaXRpb24oZWwsIGZhbHNlKTtcblx0XHR9IGVsc2UgaWYgKGFuY2hvcikge1xuXHRcdFx0T1BFTl9QT1BPVkVSUyArPSAxO1xuXHRcdFx0YW5jaG9yUG9zaXRpb24oZWwsIGFuY2hvciwgYXR0cihlbCwgXCJkYXRhLXBvc2l0aW9uXCIpIHx8IFwiYm90dG9tXCIpO1xuXHRcdH1cblx0fVxufVxuXG4vLyBQb2x5ZmlsbCBwb3BvdmVydGFyZ2V0IGZvciA8YT4gKG5vdCBzdXBwb3J0ZWQgYnkgbmF0aXZlKVxuLy8gYW5kIGF1dG9tYXRpY2FsbHkgYXNzdW1lIHBvcG92ZXJ0YXJnZXQgaXMgdGhlIGNsb3Nlc3QgcGFyZW50IHBvcG92ZXJcbi8vIGJ1dCByZXNwZWN0IHRoZSBwb3BvdmVydGFyZ2V0IGFuZCBwb3BvdmVydGFyZ2V0YWN0aW9uIGF0dHJpYnV0ZVxuZnVuY3Rpb24gaGFuZGxlTGlua0NsaWNrKHsgdGFyZ2V0IH06IEV2ZW50KSB7XG5cdGNvbnN0IGNsb3NlID1cblx0XHRPUEVOX1BPUE9WRVJTICYmICh0YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImEsW3BvcG92ZXJ0YXJnZXRhY3Rpb25dXCIpO1xuXG5cdGlmIChjbG9zZSkge1xuXHRcdGNvbnN0IGFjdGlvbiA9IGF0dHIoY2xvc2UsIFwicG9wb3ZlcnRhcmdldGFjdGlvblwiKSB8fCBcInRvZ2dsZVwiO1xuXHRcdGNvbnN0IG9wZW4gPSBhY3Rpb24gPT09IFwic2hvd1wiIHx8IChhY3Rpb24gPT09IFwiaGlkZVwiID8gZmFsc2UgOiB1bmRlZmluZWQpO1xuXHRcdGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGF0dHIoY2xvc2UsIFwicG9wb3ZlcnRhcmdldFwiKSB8fCBcIlwiKTtcblx0XHRjb25zdCBwb3BvdmVyID0gKHRhcmdldCB8fCBjbG9zZSkuY2xvc2VzdDxIVE1MRWxlbWVudD4oYC4ke0NTU19QT1BPVkVSfWApO1xuXG5cdFx0Ly8gUG9wb3ZlciBjYW4gYmUgZGlzY29ubmV0ZWQgYnkgY2xpY2sgaGFuZGxlciBkZWVwZXIgZG93biBpbiB0aGUgRE9NIHRocmVlIGJlZm9yZSByZWFjaGluZyBkb2N1bWVudFxuXHRcdGlmIChwb3BvdmVyPy5pc0Nvbm5lY3RlZCAmJiBwb3BvdmVyPy50b2dnbGVQb3BvdmVyKVxuXHRcdFx0cG9wb3Zlci50b2dnbGVQb3BvdmVyKG9wZW4pO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwidG9nZ2xlXCIsIGhhbmRsZVRvZ2dsZSwgUVVJQ0tfRVZFTlQpOyAvLyBVc2UgY2FwdHVyZSBzaW5jZSB0b2dnbGUgZG9lcyBub3QgYnViYmxlXG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZUxpbmtDbGljayk7IC8vIEFsbG93IGA8YT5gIHRvIHVzZSBgcG9wb3ZlcnRhcmdldGAgYXMgd2VsbFxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1RBQkxFID0gc3R5bGVzLnRhYmxlLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24odGFibGVzOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxUYWJsZUVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgdGFibGUgb2YgdGFibGVzKSB7XG5cdFx0Y29uc3QgdGhzOiBzdHJpbmdbXSA9IFtdOyAvLyBBZGQgZGF0YS10aD1cIlwiIHRvIGVhY2ggY2VsbCB0byBzdXBwb3J0IGRhdGEtbW9iaWxlIGRlc2lnbnNcblxuXHRcdGF0dHIodGFibGUsIFwicm9sZVwiLCBcInRhYmxlXCIpOyAvLyBBZGQgaGVscGluZyByb2xlPVwiXCIgdG8gZW5zdXJlIHNjcmVlbiByZWFkZXJzIHVuZGVyc3RhbmQgdGhlIHRhYmxlIHJlZ2FyZGxlc3Mgb2YgQ1NTIGRpc3BsYXlcblx0XHRpZiAodGFibGUuY2FwdGlvbikgYXR0cih0YWJsZS5jYXB0aW9uLCBcInJvbGVcIiwgXCJjYXB0aW9uXCIpO1xuXHRcdGZvciAoY29uc3QgZ3JvdXAgb2YgW3RhYmxlLnRIZWFkLCB0YWJsZS50Rm9vdCwgLi4udGFibGUudEJvZGllc10pXG5cdFx0XHRpZiAoZ3JvdXApIHtcblx0XHRcdFx0YXR0cihncm91cCwgXCJyb2xlXCIsIFwicm93Z3JvdXBcIik7XG5cdFx0XHRcdGNvbnN0IGlzVGJvZHkgPSBncm91cC5ub2RlTmFtZSA9PT0gXCJUQk9EWVwiO1xuXG5cdFx0XHRcdGZvciAoY29uc3Qgcm93IG9mIGdyb3VwLnJvd3MpIHtcblx0XHRcdFx0XHRhdHRyKHJvdywgXCJyb2xlXCIsIFwicm93XCIpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgY2VsbCBvZiByb3cuY2VsbHMpIHtcblx0XHRcdFx0XHRcdGlmIChpc1Rib2R5KSBhdHRyKGNlbGwsIFwiZGF0YS10aFwiLCB0aHNbY2VsbC5jZWxsSW5kZXhdIHx8IFwiOmVtcHR5XCIpO1xuXHRcdFx0XHRcdFx0ZWxzZSB0aHMucHVzaChjZWxsLmlubmVyVGV4dC50cmltKCkpOyAvLyBVc2luZyBpbm5lclRleHQgdG8gb25seSBpbmNsdWRlIHZpc2libGUgdGV4dFxuXHRcdFx0XHRcdFx0aWYgKGNlbGwubm9kZU5hbWUgPT09IFwiVERcIikgYXR0cihjZWxsLCBcInJvbGVcIiwgXCJjZWxsXCIpO1xuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGF0dHIoY2VsbCwgXCJyb2xlXCIsIGlzVGJvZHkgPyBcInJvd2hlYWRlclwiIDogXCJjb2x1bW5oZWFkZXJcIik7XG5cdFx0XHRcdFx0XHRcdGF0dHIoY2VsbCwgXCJzY29wZVwiLCBpc1Rib2R5ID8gXCJyb3dcIiA6IFwiY29sXCIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfVEFCTEUsIGhhbmRsZU11dGF0aW9uKSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgb24sIG9uTG9hZGVkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19UT0dHTEVHUk9VUCA9IGAuJHtzdHlsZXMudG9nZ2xlZ3JvdXAuc3BsaXQoXCIgXCIpWzBdfWA7XG5cbi8vIFByZXZlbnQgYnJvd3NlcnMgZnJvbSBzaG93aW5nIGRlZmF1bHQgdmFsaWRhdGlvbiBidWJibGVzXG5mdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50OiBFdmVudCAmIFBhcnRpYWw8S2V5Ym9hcmRFdmVudD4pIHtcblx0Y29uc3QgeyBrZXksIHRhcmdldDogZWwgfSA9IGV2ZW50O1xuXHRjb25zdCBncm91cCA9IGVsIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiBlbC5jbG9zZXN0KENTU19UT0dHTEVHUk9VUCk7XG5cblx0aWYgKCFncm91cCkgcmV0dXJuO1xuXHRpZiAoa2V5ID09PSBcIkVudGVyXCIpIGVsLmNsaWNrKCk7XG5cdGlmIChrZXk/LnN0YXJ0c1dpdGgoXCJBcnJvd1wiKSkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0Y29uc3QgaW5wdXRzID0gZ3JvdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKTtcblx0XHRjb25zdCBpbmRleCA9IFsuLi5pbnB1dHNdLmluZGV4T2YoZWwpO1xuXHRcdGNvbnN0IG1vdmUgPSBrZXkubWF0Y2goL0Fycm93KFJpZ2h0fERvd24pLykgPyAxIDogLTE7XG5cdFx0aW5wdXRzWyhpbnB1dHMubGVuZ3RoICsgaW5kZXggKyBtb3ZlKSAlIGlucHV0cy5sZW5ndGhdPy5mb2N1cygpO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uKGRvY3VtZW50LCBcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bikpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdGFuY2hvclBvc2l0aW9uLFxuXHRhdHRyLFxuXHRJU19CUk9XU0VSLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdFFVSUNLX0VWRU5ULFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgREVTQ1JJQkVEQlkgPSBcImFyaWEtZGVzY3JpYmVkYnlcIjtcbmNvbnN0IEVTQyA9IFwiRXNjYXBlXCI7XG5jb25zdCBMQUJFTExFREJZID0gXCJhcmlhLWxhYmVsbGVkYnlcIjtcbmNvbnN0IFBPU0lUSU9OX0NTU19QUk9QRVJUWSA9IFwiLS1tdGRzLXRvb2x0aXAtcG9zaXRpb25cIjtcbmNvbnN0IFRIUk9UVExFX0RFTEFZID0gMzAwO1xuY29uc3QgVE9PTFRJUCA9IElTX0JST1dTRVJcblx0PyBPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIHtcblx0XHRcdGNsYXNzTmFtZTogc3R5bGVzLl90b29sdGlwLFxuXHRcdFx0aWQ6IFwibXRkcy10b29sdGlwXCIsXG5cdFx0XHRwb3BvdmVyOiBcIm1hbnVhbFwiLFxuXHRcdH0pXG5cdDogbnVsbDsgLy8gQ3JlYXRlIGEgZHVtbXkgZWxlbWVudCB0byBhdm9pZCBudWxsIGNoZWNrc1xuXG5sZXQgQU5DSE9SOiBFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5sZXQgTEFTVF9DQUxMID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xubGV0IFRIUk9UVExFOiBudW1iZXIgfCBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiA9IDA7XG5cbmZ1bmN0aW9uIGhhbmRsZU1vdmUoeyB0YXJnZXQsIHR5cGUsIGtleSB9OiBFdmVudCAmIHsga2V5Pzogc3RyaW5nIH0pIHtcblx0aWYgKHR5cGUgPT09IFwia2V5ZG93blwiICYmIGtleSAhPT0gRVNDKSByZXR1cm47IC8vIEFsbG93IEVTQyBkaXNtaXNzIHRvIGZvbGxvdyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3BhdHRlcm5zL3Rvb2x0aXAvXG5cdGNvbnN0IHdhaXQgPSBMQVNUX0NBTEwgKyBUSFJPVFRMRV9ERUxBWSAtIERhdGUubm93KCk7XG5cdGNsZWFyVGltZW91dChUSFJPVFRMRSk7XG5cdFRIUk9UVExFID0gc2V0VGltZW91dChcblx0XHRoYW5kbGVNb3ZlVGhyb3R0bGVkLFxuXHRcdE1hdGgubWF4KHdhaXQsIDApLFxuXHRcdGtleSA9PT0gRVNDID8gbnVsbCA6IHRhcmdldCxcblx0KTtcbn1cblxuLy8gVXNpbmcgYSB0aHJvdHRsZWQgZnVuY3Rpb24gdG8gYXZvaWQgcGVyZm9ybWFuY2UgaXNzdWVzXG5mdW5jdGlvbiBoYW5kbGVNb3ZlVGhyb3R0bGVkKHRhcmdldDogRWxlbWVudCB8IG51bGwpIHtcblx0TEFTVF9DQUxMID0gRGF0ZS5ub3coKTtcblxuXHQvLyBCdWlsZCBhbmQgYXBwZW5kIHRvb2x0aXAgaWYgbm90IGV4aXN0aW5nXG5cdGlmICghVE9PTFRJUCB8fCB0YXJnZXQgPT09IFRPT0xUSVApIHJldHVybjsgLy8gQWxsb3cgdG9vbHRpcCB0byBiZSBob3ZlcmVkLCBmb2xsb3dpbmcgaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMS8jY29udGVudC1vbi1ob3Zlci1vci1mb2N1c1xuXHRpZiAoIVRPT0xUSVA/LmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChUT09MVElQKTsgLy8gRW5zdXJlIGNvbm5lY3RlZFxuXHRsZXQgYW5jaG9yID0gdGFyZ2V0Py5jbG9zZXN0Py48RWxlbWVudD4oXCJbZGF0YS10b29sdGlwXVwiKSB8fCBudWxsO1xuXG5cdC8vIE5vIG5lZWQgdG8gdXBkYXRlXG5cdGlmIChhbmNob3IgPT09IEFOQ0hPUikgcmV0dXJuO1xuXG5cdGNvbnN0IGNvbnRlbnQgPSAoYW5jaG9yICYmIGF0dHIoYW5jaG9yLCBcImRhdGEtdG9vbHRpcFwiKSkgfHwgXCJcIjtcblx0Y29uc3QgcG9zaXRpb24gPVxuXHRcdChhbmNob3IgJiYgYXR0cihhbmNob3IsIFwiZGF0YS10b29sdGlwLXBvc2l0aW9uXCIpKSB8fFxuXHRcdHdpbmRvd1xuXHRcdFx0LmdldENvbXB1dGVkU3R5bGUoYW5jaG9yIHx8IGRvY3VtZW50LmJvZHkpXG5cdFx0XHQuZ2V0UHJvcGVydHlWYWx1ZShQT1NJVElPTl9DU1NfUFJPUEVSVFkpXG5cdFx0XHQ/LnRyaW0oKSB8fFxuXHRcdFwidG9wXCI7XG5cblx0Y29uc3QgaXNIaWRkZW4gPVxuXHRcdCFjb250ZW50IHx8XG5cdFx0Y29udGVudCA9PT0gXCJmYWxzZVwiIHx8XG5cdFx0Y29udGVudCA9PT0gXCJ0cnVlXCIgfHxcblx0XHRwb3NpdGlvbiA9PT0gXCJub25lXCI7XG5cblx0aWYgKGlzSGlkZGVuKSBhbmNob3IgPSBudWxsOyAvLyBEbyBub3Qgc2hvdyB0b29sdGlwIGlmIGJvb2xpc2ggdmFsdWVcblx0aWYgKGFuY2hvcikgVE9PTFRJUC50ZXh0Q29udGVudCA9IGNvbnRlbnQ7IC8vIE9ubHkgdXBkYXRlIGNvbnRlbnQgaWYgbmV3IGFuY2hvclxuXG5cdGNvbnN0IGhhZExhYmVsID0gQU5DSE9SICYmIGF0dHIoQU5DSE9SLCBMQUJFTExFREJZKSA9PT0gVE9PTFRJUD8uaWQ7XG5cdGNvbnN0IGhhc0xhYmVsID1cblx0XHQoYW5jaG9yIGluc3RhbmNlb2YgSFRNTEVsZW1lbnRcblx0XHRcdD8gYW5jaG9yLmlubmVyVGV4dFxuXHRcdFx0OiBhbmNob3I/LnRleHRDb250ZW50XG5cdFx0KT8udHJpbSgpIHx8XG5cdFx0YW5jaG9yPy5oYXNBdHRyaWJ1dGUoTEFCRUxMRURCWSkgfHxcblx0XHRhbmNob3I/Lmhhc0F0dHJpYnV0ZShcImFyaWEtbGFiZWxcIik7XG5cblx0QU5DSE9SPy5yZW1vdmVBdHRyaWJ1dGUoaGFkTGFiZWwgPyBMQUJFTExFREJZIDogREVTQ1JJQkVEQlkpOyAvLyBVbmxpbmsgcHJldmlvdXMgYW5jaG9yXG5cdGFuY2hvclBvc2l0aW9uKFRPT0xUSVAsIGZhbHNlKTsgLy8gUmVzZXQgYW5jaG9yIHBvc2l0aW9uXG5cblx0QU5DSE9SID0gYW5jaG9yOyAvLyBTdG9yZSBuZXcgYW5jaG9yIC0gbWlnaHQgYmUgbnVsbCBpZiBubyBuZXcgYW5jaG9yXG5cdGlmIChBTkNIT1IpIGF0dHIoQU5DSE9SLCBoYXNMYWJlbCA/IERFU0NSSUJFREJZIDogTEFCRUxMRURCWSwgVE9PTFRJUD8uaWQpOyAvLyBVc2UgdG9vbHRpcCBhcyBkZXNjcmlwdGlvbiBpZiBhbGxyZWFkeSBoYXMgbGFiZWxcblx0aWYgKEFOQ0hPUikgVE9PTFRJUC5oaWRlUG9wb3ZlcigpOyAvLyBIaWRlIHRvb2x0aXAgc28gaXQgY2FuIGJlIHBsYWNlZCBvbiB0b3AtbGF5ZXIgb24gbmV4dCBzaG93XG5cdFRPT0xUSVAudG9nZ2xlUG9wb3ZlcighIWFuY2hvcik7XG5cdGFuY2hvclBvc2l0aW9uKFRPT0xUSVAsIGFuY2hvciB8fCBmYWxzZSwgcG9zaXRpb24pO1xufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uKGRvY3VtZW50LCBcImJsdXIsZm9jdXMsbW91c2VvdXQsbW91c2VvdmVyXCIsIGhhbmRsZU1vdmUsIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcImtleWRvd25cIiwgaGFuZGxlTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwiYmx1clwiLCBoYW5kbGVNb3ZlLCBRVUlDS19FVkVOVCk7XG59KTtcbiIsIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgRElTUExBWV9CTE9DSyA9IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2sgfVwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBfYTI7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gKF9hMiA9IGVsLmdldEF0dHJpYnV0ZShuYW1lKSkgIT0gbnVsbCA/IF9hMiA6IG51bGw7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xuXG4vLyB1LWRldGFpbHMudHNcbnZhciBVSFRNTERldGFpbHNFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIFVzaW5nIHVuZGVyc2NvcmUgaW5zdGVhZCBvZiBwcml2YXRlIGZpZWxkcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICB0aGlzLl9jb250ZW50ID0gbnVsbDtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgbmFtZTogXCJzdW1tYXJ5XCIgfSksXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IHBhcnQ6IFwiZGV0YWlscy1jb250ZW50XCIgfSksXG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGAke0RJU1BMQVlfQkxPQ0t9XG4gICAgICAgIDo6c2xvdHRlZCh1LXN1bW1hcnkpIHsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBibG9jayB9XG5cdFx0XHRcdDo6c2xvdHRlZCh1LXN1bW1hcnkpOjpiZWZvcmUgeyBjb250ZW50OiAnJzsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBtYXJnaW4taW5saW5lOiAuMDVlbSAuMzEyNWVtOyBib3JkZXItYmxvY2s6IC4zMTI1ZW0gc29saWQgdHJhbnNwYXJlbnQ7IGJvcmRlci1pbmxpbmUtc3RhcnQ6IC41ZW0gc29saWQgfVxuXHRcdFx0XHQ6OnNsb3R0ZWQodS1zdW1tYXJ5W2FyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJdKTo6YmVmb3JlIHsgcm90YXRlOiA5MGRlZyB9XG5cdFx0XHRcdDpob3N0ID4gW3BhcnQ9XCJkZXRhaWxzLWNvbnRlbnRcIl06bm90KFtoaWRkZW49XCJcIl0pIHsgZGlzcGxheTogYmxvY2sgfWBcbiAgICAgIClcbiAgICApO1xuICB9XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJvcGVuXCJdO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHZhciBfYTI7XG4gICAgdGhpcy5fY29udGVudCA9IChfYTIgPSB0aGlzLnNoYWRvd1Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2hpbGRyZW5bMV07XG4gICAgb24odGhpcy5fY29udGVudCwgXCJiZWZvcmVtYXRjaFwiLCB0aGlzKTtcbiAgICBvbih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBpZiAodGhpcy5fY29udGVudCkgb2ZmKHRoaXMuX2NvbnRlbnQsIFwiYmVmb3JlbWF0Y2hcIiwgdGhpcyk7XG4gICAgb2ZmKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICB0aGlzLl9jb250ZW50ID0gbnVsbDtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socHJvcCwgcHJldiwgbmV4dCkge1xuICAgIGNvbnN0IGhpZGUgPSBcIm9uYmVmb3JlbWF0Y2hcIiBpbiB0aGlzID8gXCJ1bnRpbC1mb3VuZFwiIDogdHJ1ZTtcbiAgICBjb25zdCBvcGVuID0gdGhpcy5vcGVuO1xuICAgIGZvciAoY29uc3QgZWwgb2YgdGhpcy5jaGlsZHJlbilcbiAgICAgIGlmIChlbC5ub2RlTmFtZSA9PT0gXCJVLVNVTU1BUllcIikgYXR0cihlbCwgXCJhcmlhLWV4cGFuZGVkXCIsIGAke29wZW59YCk7XG4gICAgaWYgKHRoaXMuX2NvbnRlbnQpIHtcbiAgICAgIGF0dHIodGhpcy5fY29udGVudCwgXCJhcmlhLWhpZGRlblwiLCBgJHshb3Blbn1gKTtcbiAgICAgIHRoaXMuX2NvbnRlbnQuaGlkZGVuID0gb3BlbiA/IGZhbHNlIDogaGlkZTtcbiAgICB9XG4gICAgaWYgKG9wZW4gJiYgdGhpcy5uYW1lKSB7XG4gICAgICBjb25zdCB1RGV0YWlsc0xpc3QgPSBnZXRSb290KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAke3RoaXMubm9kZU5hbWV9W25hbWU9XCIke3RoaXMubmFtZX1cIl1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCB1RGV0YWlscyBvZiB1RGV0YWlsc0xpc3QpXG4gICAgICAgIGlmICh1RGV0YWlscyAhPT0gdGhpcykgdURldGFpbHMub3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAocHJvcCA9PT0gXCJvcGVuXCIgJiYgcHJldiA9PT0gbnVsbCAhPT0gKG5leHQgPT09IG51bGwpKVxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInRvZ2dsZVwiKSk7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwiOnNjb3BlID4gdS1zdW1tYXJ5XCIpO1xuICAgIGNvbnN0IGlzU3VtbWFyeSA9IHN1bW1hcnkgPT0gbnVsbCA/IHZvaWQgMCA6IHN1bW1hcnkuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJlZm9yZW1hdGNoXCIpIHRoaXMub3BlbiA9IHRydWU7XG4gICAgaWYgKGlzU3VtbWFyeSAmJiBldmVudC50eXBlID09PSBcImtleWRvd25cIikgYXNCdXR0b24oZXZlbnQpO1xuICAgIGlmIChpc1N1bW1hcnkgJiYgZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSB0aGlzLm9wZW4gPSAhdGhpcy5vcGVuO1xuICB9XG4gIGdldCBvcGVuKCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcIm9wZW5cIik7XG4gIH1cbiAgc2V0IG9wZW4odmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwib3BlblwiLCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBcIm5hbWVcIikgfHwgXCJcIjtcbiAgfVxuICBzZXQgbmFtZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJuYW1lXCIsIHZhbHVlKTtcbiAgfVxufTtcbnZhciBVSFRNTFN1bW1hcnlFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgICB0aGlzLnNsb3QgPSBcInN1bW1hcnlcIjtcbiAgICB0aGlzLnRhYkluZGV4ID0gMDtcbiAgfVxufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtZGV0YWlsc1wiLCBVSFRNTERldGFpbHNFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtc3VtbWFyeVwiLCBVSFRNTFN1bW1hcnlFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxEZXRhaWxzRWxlbWVudCwgVUhUTUxTdW1tYXJ5RWxlbWVudCB9O1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0ZJUkVGT1ggPSBJU19CUk9XU0VSICYmIC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgX2EyO1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIChfYTIgPSBlbC5nZXRBdHRyaWJ1dGUobmFtZSkpICE9IG51bGwgPyBfYTIgOiBudWxsO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIGlmIChhdHRycykgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJzKSkgYXR0cihlbCwga2V5LCB2YWwpO1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcbnZhciBnZXRMYWJlbCA9IChlbCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gZ2V0Um9vdChlbCk7XG4gIGNvbnN0IGxhYmVsID0gYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIpIHx8IFwiXCI7XG4gIGNvbnN0IGxhYmVscyA9ICgoX2EyID0gYXR0cihlbCwgXCJhcmlhLWxhYmVsbGVkYnlcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpLnNwbGl0KC9cXHMrLykpIHx8IFtdO1xuICByZXR1cm4gW1xuICAgIC4uLmxhYmVscy5tYXAoKGlkMikgPT4gcm9vdCA9PSBudWxsID8gdm9pZCAwIDogcm9vdC5xdWVyeVNlbGVjdG9yKGBbaWQ9XCIke2lkMn1cIl1gKSksXG4gICAgLy8gR2V0IGFsbCBsYWJlbGxlZGJ5IGVsZW1lbnRzXG4gICAgLi4uQXJyYXkuZnJvbShlbC5sYWJlbHMgfHwgW10pXG4gICAgLy8gR2V0IGFsbCA8bGFiZWw+IGVsZW1lbnRzXG4gIF0ucmVkdWNlKChhY2MsIGVsMikgPT4ge1xuICAgIHZhciBfYTM7XG4gICAgcmV0dXJuIGFjYyB8fCAoKF9hMyA9IGVsMiA9PSBudWxsID8gdm9pZCAwIDogZWwyLmlubmVyVGV4dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMy50cmltKCkpIHx8IFwiXCI7XG4gIH0sIGxhYmVsKTtcbn07XG5cbi8vIHUtcHJvZ3Jlc3MudHNcbnZhciBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG52YXIgVUhUTUxQcm9ncmVzc0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1sYWJlbGxlZGJ5XCIsIFwidmFsdWVcIiwgXCJtYXhcIl07XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgaGlkZGVuOiBcIlwiIH0pLFxuICAgICAgLy8gU2xvdCBoaWRpbmcgY29udGVudCBhbGxvd3MgbGVnYWN5IGJyb3dzZXIgdG8gZGlzcGxheSBmYWxsYmFjayB0ZXh0XG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGA6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBib3JkZXI6IDFweCBzb2xpZDsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBoZWlnaHQ6IC41ZW07IHdpZHRoOiAxMGVtOyBvdmVyZmxvdzogaGlkZGVuIH1cbiAgICAgICAgOmhvc3Q6OmJlZm9yZSB7IGNvbnRlbnQ6ICcnOyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiAxMDAlOyBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7IHdpZHRoOiB2YXIoLS1wZXJjZW50YWdlLCAwJSk7IHRyYW5zaXRpb246IHdpZHRoIC4ycyB9XG4gICAgICAgIDpob3N0KDpub3QoW3ZhbHVlXSkpIHsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLGN1cnJlbnRDb2xvciAyNSUsIHRyYW5zcGFyZW50IDUwJSwgY3VycmVudENvbG9yIDc1JSkgNTAlLzQwMCUgfVxuICAgICAgICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IG5vLXByZWZlcmVuY2UpIHsgOmhvc3QgeyBhbmltYXRpb246IGluZGV0ZXJtaW5hdGUgMnMgbGluZWFyIGluZmluaXRlIH0gIH1cbiAgICAgICAgQGtleWZyYW1lcyBpbmRldGVybWluYXRlIHsgZnJvbSB7IGJhY2tncm91bmQtcG9zaXRpb24teDogMTAwJSB9IHRvIHsgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAwIH0gfWBcbiAgICAgIClcbiAgICApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGlmIChTS0lQX0FUVFJfQ0hBTkdFKSByZXR1cm47XG4gICAgU0tJUF9BVFRSX0NIQU5HRSA9IHRydWU7XG4gICAgY29uc3Qgcm9sZUltYWdlID0gSVNfSU9TIHx8IElTX0ZJUkVGT1g7XG4gICAgY29uc3QgcGVyY2VudGFnZSA9IE1hdGgubWF4KDAsIE1hdGgucm91bmQodGhpcy5wb3NpdGlvbiAqIDEwMCkpO1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBlcmNlbnRhZ2VcIiwgYCR7cGVyY2VudGFnZX0lYCk7XG4gICAgbGV0IGxhYmVsID0gZ2V0TGFiZWwodGhpcyk7XG4gICAgaWYgKHJvbGVJbWFnZSkgbGFiZWwgPSBgJHtsYWJlbC5yZXBsYWNlKC9cXGQrJSQvLCBcIlwiKX0gJHtwZXJjZW50YWdlfSVgO1xuICAgIGlmIChJU19GSVJFRk9YKSBmb3IgKGNvbnN0IGVsIG9mIHRoaXMubGFiZWxzKSBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIiwgbGFiZWwpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWJ1c3lcIiwgYCR7dGhpcy5wb3NpdGlvbiA9PT0gLTF9YCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtbGFiZWxcIiwgbGFiZWwudHJpbSgpKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1sYWJlbGxlZGJ5XCIsIG51bGwpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXZhbHVlbWF4XCIsIFwiMTAwXCIpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXZhbHVlbWluXCIsIFwiMFwiKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW5vd1wiLCBgJHtwZXJjZW50YWdlfWApO1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIHJvbGVJbWFnZSA/IFwiaW1nXCIgOiBcInByb2dyZXNzYmFyXCIpO1xuICAgIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbiAgfVxuICBnZXQgbGFiZWxzKCkge1xuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5jbG9zZXN0KFwibGFiZWw6bm90KFtmb3JdKVwiKTtcbiAgICBjb25zdCBpZDIgPSB1c2VJZCh0aGlzKTtcbiAgICBpZiAobGFiZWwpIGxhYmVsLmh0bWxGb3IgPSBpZDI7XG4gICAgY29uc3QgZWwgPSBnZXRSb290KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgbGFiZWxbZm9yPVwiJHtpZDJ9XCJdYFxuICAgICk7XG4gICAgcmV0dXJuIGVsO1xuICB9XG4gIGdldCBwb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSA9PT0gbnVsbCA/IC0xIDogTWF0aC5taW4odGhpcy52YWx1ZSAvIHRoaXMubWF4LCAxKTtcbiAgfVxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIGdldE51bWJlcih0aGlzLCBcInZhbHVlXCIpO1xuICB9XG4gIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgIHNldE51bWJlcih0aGlzLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbWF4KCkge1xuICAgIHJldHVybiBnZXROdW1iZXIodGhpcywgXCJtYXhcIikgfHwgMTtcbiAgfVxuICBzZXQgbWF4KG1heCkge1xuICAgIHNldE51bWJlcih0aGlzLCBcIm1heFwiLCBtYXgpO1xuICB9XG59O1xuLy8gUHJldmVudCBDaHJvbWUgRGV2VG9vbHMgd2FybmluZyBhYm91dCA8bGFiZWwgZm9yPVwiXCI+IHBvaW50aW5nIHRvIDx1LXByb2dyZXNzPlxuVUhUTUxQcm9ncmVzc0VsZW1lbnQuZm9ybUFzc29jaWF0ZWQgPSB0cnVlO1xudmFyIGlzTnVtZXJpYyA9ICh2YWx1ZSkgPT4gIU51bWJlci5pc05hTihOdW1iZXIucGFyc2VGbG9hdChgJHt2YWx1ZX1gKSkgJiYgTnVtYmVyLmlzRmluaXRlKE51bWJlcih2YWx1ZSkpO1xudmFyIGdldE51bWJlciA9IChlbCwga2V5KSA9PiB7XG4gIGNvbnN0IHZhbHVlID0gYXR0cihlbCwga2V5KTtcbiAgcmV0dXJuIGlzTnVtZXJpYyh2YWx1ZSkgPyBNYXRoLm1heCgwLCBOdW1iZXIucGFyc2VGbG9hdCh2YWx1ZSkpIDogbnVsbDtcbn07XG52YXIgc2V0TnVtYmVyID0gKGVsLCBrZXksIHZhbCkgPT4ge1xuICBpZiAodmFsID09PSBudWxsIHx8IGlzTnVtZXJpYyh2YWwpKSBhdHRyKGVsLCBrZXksIGAke3ZhbH1gKTtcbiAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBzZXQgbm9uLW51bWVyaWMgJyR7YXR0cn0nOiAnJHt2YWx9J2ApO1xufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtcHJvZ3Jlc3NcIiwgVUhUTUxQcm9ncmVzc0VsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTFByb2dyZXNzRWxlbWVudCB9O1xuIl0sIm5hbWVzIjpbIl9fZGVmUHJvcCIsIl9fZ2V0T3duUHJvcFN5bWJvbHMiLCJfX2hhc093blByb3AiLCJfX3Byb3BJc0VudW0iLCJfX2RlZk5vcm1hbFByb3AiLCJvYmoiLCJrZXkiLCJ2YWx1ZSIsIl9fc3ByZWFkVmFsdWVzIiwiYSIsImIiLCJwcm9wIiwiSVNfQlJPV1NFUiIsIklTX0FORFJPSUQiLCJJU19GSVJFRk9YIiwiSVNfSU9TIiwiX2EiLCJJU19CUk9XU0VSJDUiLCJGT0NVU19PVVRMSU5FIiwiVUhUTUxFbGVtZW50IiwiYXR0ciIsImVsIiwibmFtZSIsImV2ZW50cyIsImFjdGlvbiIsImVsZW1lbnQiLCJyZXN0IiwidHlwZSIsIm9uIiwib2ZmIiwib2JzZXJ2ZXJzIiwibXV0YXRpb25PYnNlcnZlciIsIm9wdGlvbnMiLCJvYnNlcnZlciIsImRldGFpbCIsImFzQnV0dG9uIiwiZXZlbnQiLCJpc0NsaWNrIiwiZ2V0Um9vdCIsIm5vZGUiLCJfYTIiLCJyb290IiwiaWQiLCJ1c2VJZCIsImNyZWF0ZUVsZW1lbnQiLCJ0YWdOYW1lIiwidGV4dDIiLCJhdHRycyIsInZhbCIsImN1c3RvbUVsZW1lbnRzIiwiaW5zdGFuY2UiLCJMSVZFIiwiTElWRV9TUl9GSVgiLCJzcGVhayIsInNldFZhbHVlIiwiaW5wdXQiLCJkYXRhIiwiX2IiLCJwcm90byIsIklTX1BSRVNTIiwiaXNNb3VzZURvd24iLCJFVkVOVFMiLCJFVkVOVF9PTkNFIiwiSVNfRklSRUZPWF9ERVNLVE9QIiwiSVNfTU9CSUxFIiwiRkFMU0UiLCJURVhUUyIsIlVIVE1MQ29tYm9ib3hFbGVtZW50IiwicmVuZGVyIiwic3luY0lucHV0VmFsdWUiLCJfIiwidGFyZ2V0IiwiaXNEaXNhYmxlZCIsIm9uQmx1ciIsIm9uQ2xpY2siLCJvbkZvY3VzIiwib25JbnB1dCIsIm9uS2V5RG93biIsInRhZyIsInRleHQiLCJpc0RhdGEiLCJjb250cm9sIiwic2VsZiIsIl9mb2N1cyIsIl90ZXh0cyIsIml0ZW1zIiwibGlzdCIsIm11bHRpcGxlIiwibGFiZWwiLCJlZGl0cyIsImFkZGVkTm9kZXMiLCJyZW1vdmVkTm9kZXMiLCJzaG91bGRBbm5vdW5jZSIsImFyaWFFeHBhbmRlZCIsImlucHV0TW9kZSIsIm5leHRGb2N1cyIsImlzUmVtb3ZlIiwiX2EzIiwiaWR4Iiwic2VsZWN0IiwicmVtb3ZlIiwiaXRlbTIiLCJvcHRpb24iLCJsYWJlbDIiLCJhcmlhIiwib3B0IiwiaXRlbSIsInN5bmNDbGVhcldpdGhJbnB1dCIsInN5bmNPcHRpb25zV2l0aEl0ZW1zIiwiX3NwZWFrIiwidmFsdWVzIiwiZGlzcGF0Y2hNYXRjaCIsImNoYW5nZSIsImNyZWF0YWJsZSIsInF1ZXJ5IiwibWF0Y2giLCJvIiwiZGlzcGF0Y2hDaGFuZ2UiLCJyZW1vdmFibGUiLCJhZGQiLCJpIiwib25CbHVycmVkIiwieCIsInkiLCJjbGVhciIsInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCIsInJlcGVhdCIsImlzQ29udHJvbCIsImluVGV4dCIsImluZGV4IiwiZm9ybSIsIklTX0JST1dTRVIkNCIsIlNBRkVfTEFCRUxMRURCWSIsIkRJU1BMQVlfQkxPQ0siLCJhdHRhY2hTdHlsZSIsImNzcyIsIkFSSUFfQ09OVFJPTFMiLCJBUklBX1NFTEVDVEVEIiwiVUhUTUxUYWJzRWxlbWVudCIsInF1ZXJ5V2l0aG91dE5lc3RlZCIsImdldFNlbGVjdGVkSW5kZXgiLCJzZXRTZWxlY3RlZCIsIlVIVE1MVGFiTGlzdEVsZW1lbnQiLCJ0YWIiLCJ0YWJzIiwicHJldiIsIm5leHQiLCJTS0lQX0FUVFJfQ0hBTkdFIiwiVUhUTUxUYWJFbGVtZW50IiwicGFuZWxzIiwibmV4dFBhbmVsIiwiZ2V0UGFuZWwiLCJwYW5lbCIsInRhYmxpc3QiLCJ0YWJMaXN0IiwiVUhUTUxUYWJQYW5lbEVsZW1lbnQiLCJpc0ZvY3VzYWJsZSIsImlkMiIsIlFVSUNLX0VWRU5UIiwiZGVib3VuY2UiLCJjYWxsYmFjayIsImRlbGF5IiwidGltZXIiLCJhcmdzIiwiVVVJRCIsIlNDUk9MTEVSIiwiVEFSR0VUUyIsIlRBUkdFVFNfVVBEQVRFIiwidXBkYXRlIiwiUE9TSVRJT04iLCJhbmNob3JQb3NpdGlvbiIsImFuY2hvciIsInBsYWNlIiwiZm9yY2UiLCJwb3NpdGlvbiIsImlzSFRNTEFuY2hvciIsInRhcmdldFciLCJ0YXJnZXRIIiwiYW5jaG9yVyIsImFuY2hvckgiLCJ3aWR0aCIsImhlaWdodCIsInZpZXdXIiwidmlld0giLCJzY3JvbGxYIiwic2Nyb2xsWSIsImFuY2hvclgiLCJhbmNob3JZIiwiY2VudGVyWCIsImNlbnRlclkiLCJoYXNTcGFjZUxlZnQiLCJoYXNTcGFjZVJpZ2h0IiwiaGFzU3BhY2VPdmVyIiwiaGFzU3BhY2VVbmRlciIsImlzVmVydGljYWwiLCJpc1JpZ2h0IiwiaXNVbmRlciIsInZpZXdYIiwidmlld1kiLCJjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyIiwicXVldWUiLCJvbkZyYW1lIiwib25UaW1lciIsIk1VVEFUT1JTIiwib25NdXRhdGlvbiIsImNsYXNzTmFtZSIsImVsZW1zIiwibXV0YXRvciIsIm9uTG9hZGVkIiwicnVuIiwiaXNJbnB1dExpa2UiLCJNQVRPTU8iLCJFTkFCTEVEIiwiYW5hbHl0aWNzIiwibWF0b21vSWQiLCJlbmFibGVkIiwidXJsIiwidGl0bGUiLCJjYXRlZ29yeSIsInYiLCJyZXN1bHRzIiwic2hlZXQiLCJDU1NfQVBQIiwic3R5bGVzIiwiQ1NTX1NUSUNLWSIsIkNTU19UT0dHTEUiLCJDU1NfU0lERUJBUiIsInVzZVRyYW5zaXRpb24iLCJ0b2dnbGVBcHBFeHBhbmRlZCIsImhhbmRsZVRvZ2dsZUNsaWNrIiwic3RvcCIsImxpbmsiLCJjbG9zZVNpZGViYXIiLCJzaWRlYmFyIiwiTUlOX1kiLCJTQ1JPTExfVVAiLCJTVElDSyIsIlNUSUNLX0VMIiwiU1RJQ0tfSCIsIlNUSUNLX1kiLCJTVFVDSyIsIldJTl9IIiwiV0lOX1kiLCJoYW5kbGVNdXRhdGlvbiIsInN0aWNreSIsImhhbmRsZVNjcm9sbCIsIk5FWFRfWSIsIk5FWFRfVVAiLCJnZXRTdGVwcyIsIm5vdyIsIm1heCIsInNob3ciLCJvZmZzZXQiLCJzdGFydCIsImVuZCIsInBhZ2VzIiwicGFnaW5hdGlvbiIsImN1cnJlbnQiLCJ0b3RhbCIsInBhZ2UiLCJDU1NfQlJFQURDUlVNQlMiLCJicmVhZGNydW1icyIsImJyZWFkY3VtYnMiLCJjcnVtYiIsImxlbmd0aCIsIkNTU19ESUFMT0ciLCJESUFMT0dTIiwiaGFuZGxlTW9kYWwiLCJkaWFsb2ciLCJoYW5kbGVDbGljayIsImhhbmRsZUluamVjdCIsImZpcnN0IiwiSVNfQlJPV1NFUiQyIiwiRElTQUJMRUQiLCJTRUxFQ1RFRCIsIlVIVE1MT3B0aW9uRWxlbWVudCIsIkxJVkVfVElNRVIiLCJJTlBVVF9ERUJPVU5DRSIsIkVWRU5UU19JTlBVVCIsIlVIVE1MRGF0YUxpc3RFbGVtZW50IiwiZGlzY29ubmVjdElucHV0IiwiX3ByZXYiLCJzZXR1cElucHV0Iiwic2V0RXhwYW5kZWQiLCJvcGVuIiwiX2MiLCJpc1BvcG92ZXIiLCJpc0lucHV0IiwicmVsYXRlZFRhcmdldCIsImFsdEtleSIsImN0cmxLZXkiLCJzaGlmdEtleSIsIm1ldGFLZXkiLCJpc0VzY2FwZSIsIl9yb290IiwiX2lucHV0IiwiZmlsdGVyIiwiaGlkZGVuIiwidmlzaWJsZSIsIkNTU19GSUVMRCIsIkNTU19WQUxJREFUSU9OUyIsIkNTU19WQUxJREFUSU9OIiwiZ2V0VGV4dCIsInN0eWxlIiwiZmllbGRzIiwidmFsaWRhdGUiLCJmaWVsZCIsImxhYmVscyIsImRlc2NzIiwidmFsaWRzIiwiY29tYm9ib3giLCJ2YWxpZCIsImRlc2MiLCJyZW5kZXJDb21ib2JveCIsInJlbmRlckNvdW50ZXIiLCJyZW5kZXJUZXh0YXJlYVNpemUiLCJ0ZXh0YXJlYSIsImxpbWl0IiwicmVtYWluZGVyIiwibmV4dEludmFsaWQiLCJwcmV2SW52YWxpZCIsIm92ZXIiLCJ1bmRlciIsImhhbmRsZVRvZ2dsZSIsIm5ld1N0YXRlIiwiaGFuZGxlSW5wdXQiLCJoYW5kbGVEYXRhbGlzdFBvc2l0aW9uIiwiaGFuZGxlVmFsZGlhdGlvbiIsIkNTU19GSUVMRFNFVCIsIkFSSUFfREVTQyIsIkFSSUFfSU5WQUxJRCIsImZpZWxkc2V0cyIsImZpZWxkc2V0IiwiaW5wdXRzIiwidmFsaWRJZCIsIkNTU19MT0dPIiwibG9nbyIsImljb24iLCJzdmciLCJpc0RvdCIsImJhY2siLCJDU1NfUE9QT1ZFUiIsIk9QRU5fUE9QT1ZFUlMiLCJoYW5kbGVMaW5rQ2xpY2siLCJjbG9zZSIsInBvcG92ZXIiLCJDU1NfVEFCTEUiLCJ0YWJsZXMiLCJ0YWJsZSIsInRocyIsImdyb3VwIiwiaXNUYm9keSIsInJvdyIsImNlbGwiLCJDU1NfVE9HR0xFR1JPVVAiLCJoYW5kbGVLZXlEb3duIiwibW92ZSIsIkRFU0NSSUJFREJZIiwiRVNDIiwiTEFCRUxMRURCWSIsIlBPU0lUSU9OX0NTU19QUk9QRVJUWSIsIlRIUk9UVExFX0RFTEFZIiwiVE9PTFRJUCIsIkFOQ0hPUiIsIkxBU1RfQ0FMTCIsIlRIUk9UVExFIiwiaGFuZGxlTW92ZSIsIndhaXQiLCJoYW5kbGVNb3ZlVGhyb3R0bGVkIiwiY29udGVudCIsImhhZExhYmVsIiwiaGFzTGFiZWwiLCJJU19CUk9XU0VSJDEiLCJVSFRNTERldGFpbHNFbGVtZW50IiwiaGlkZSIsInVEZXRhaWxzTGlzdCIsInVEZXRhaWxzIiwic3VtbWFyeSIsImlzU3VtbWFyeSIsIlVIVE1MU3VtbWFyeUVsZW1lbnQiLCJnZXRMYWJlbCIsImFjYyIsImVsMiIsIlVIVE1MUHJvZ3Jlc3NFbGVtZW50Iiwicm9sZUltYWdlIiwicGVyY2VudGFnZSIsImdldE51bWJlciIsInNldE51bWJlciIsImlzTnVtZXJpYyJdLCJtYXBwaW5ncyI6ImtDQUFBLElBQUlBLEdBQVksT0FBTyxlQUNuQkMsR0FBc0IsT0FBTyxzQkFDN0JDLEdBQWUsT0FBTyxVQUFVLGVBQ2hDQyxHQUFlLE9BQU8sVUFBVSxxQkFDaENDLEdBQWtCLENBQUNDLEVBQUtDLEVBQUtDLElBQVVELEtBQU9ELEVBQU1MLEdBQVVLLEVBQUtDLEVBQUssQ0FBRSxXQUFZLEdBQU0sYUFBYyxHQUFNLFNBQVUsR0FBTSxNQUFBQyxDQUFLLENBQUUsRUFBSUYsRUFBSUMsQ0FBRyxFQUFJQyxFQUN0SkMsR0FBaUIsQ0FBQ0MsRUFBR0MsSUFBTSxDQUM3QixRQUFTQyxLQUFRRCxJQUFNQSxFQUFJLENBQUEsR0FDckJSLEdBQWEsS0FBS1EsRUFBR0MsQ0FBSSxHQUMzQlAsR0FBZ0JLLEVBQUdFLEVBQU1ELEVBQUVDLENBQUksQ0FBQyxFQUNwQyxHQUFJVixHQUNGLFFBQVNVLEtBQVFWLEdBQW9CUyxDQUFDLEVBQ2hDUCxHQUFhLEtBQUtPLEVBQUdDLENB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
|
|
21
|
+
@keyframes indeterminate { from { background-position-x: 100% } to { background-position-x: 0 } }`))}connectedCallback(){this.attributeChangedCallback()}attributeChangedCallback(){if(ae)return;ae=!0;const t=_s||pn,e=Math.max(0,Math.round(this.position*100));this.style.setProperty("--percentage",`${e}%`);let o=Es(this);if(t&&(o=`${o.replace(/\d+%$/,"")} ${e}%`),pn)for(const n of this.labels)E(n,"aria-label",o);E(this,"aria-busy",`${this.position===-1}`),E(this,"aria-label",o.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"),ae=!1}get labels(){const t=this.closest("label:not([for])"),e=ys(this);return t&&(t.htmlFor=e),mn(this).querySelectorAll(`label[for="${e}"]`)}get position(){return this.value===null?-1:Math.min(this.value/this.max,1)}get value(){return bn(this,"value")}set value(t){gn(this,"value",t)}get max(){return bn(this,"max")||1}set max(t){gn(this,"max",t)}};vn.formAssociated=!0;var _n=t=>!Number.isNaN(Number.parseFloat(`${t}`))&&Number.isFinite(Number(t)),bn=(t,e)=>{const o=E(t,e);return _n(o)?Math.max(0,Number.parseFloat(o)):null},gn=(t,e,o)=>{if(o===null||_n(o))E(t,e,`${o}`);else throw new Error(`Failed to set non-numeric '${E}': '${o}'`)};return ws.define("u-progress",vn),T.UHTMLComboboxElement=rt,T.UHTMLTabElement=Te,T.UHTMLTabListElement=$e,T.UHTMLTabPanelElement=xe,T.UHTMLTabsElement=Se,T.analytics=$o,T.pagination=wi,T.styles=Zn,T.toggleAppExpanded=ko,T.version=Jn,Object.defineProperty(T,Symbol.toStringTag,{value:"Module"}),T}({});
|
|
22
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtY29tYm9ib3gvZGlzdC91LWNvbWJvYm94LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL2Rlc2lnbnN5c3RlbS91dGlscy50cyIsIi4uL2Rlc2lnbnN5c3RlbS9hbmFseXRpY3MvYW5hbHl0aWNzLnRzIiwiLi4vZGVzaWduc3lzdGVtL2FwcC9hcHAtdG9nZ2xlLmpzIiwiLi4vZGVzaWduc3lzdGVtL2FwcC9hcHAtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vcGFnaW5hdGlvbi9wYWdpbmF0aW9uLWhlbHBlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9icmVhZGNydW1icy9icmVhZGNydW1icy1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9kaWFsb2cvZGlhbG9nLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2Vycm9yc3VtbWFyeS9lcnJvcnN1bW1hcnktb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kYXRhbGlzdC9kaXN0L3UtZGF0YWxpc3QuanMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGQvZmllbGQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGRzZXQvZmllbGRzZXQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vbG9nby9sb2dvLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3BvcG92ZXIvcG9wb3Zlci1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90YWJsZS90YWJsZS1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b2dnbGVncm91cC90b2dnbGVncm91cC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b29sdGlwL3Rvb2x0aXAtb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kZXRhaWxzL2Rpc3QvdS1kZXRhaWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtcHJvZ3Jlc3MvZGlzdC91LXByb2dyZXNzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcblxuLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19GSVJFRk9YID0gSVNfQlJPV1NFUiAmJiAvZmlyZWZveC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfSU9TID0gSVNfQlJPV1NFUiAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgRk9DVVNfT1VUTElORSA9IFwib3V0bGluZTogMXB4IGRvdHRlZDsgb3V0bGluZTogNXB4IGF1dG8gSGlnaGxpZ2h0OyBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3JcIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoX2Vycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQyLCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0MikgZWwudGV4dENvbnRlbnQgPSB0ZXh0MjtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIExJVkU7XG52YXIgTElWRV9TUl9GSVggPSAwO1xudmFyIHNwZWFrID0gKHRleHQyKSA9PiB7XG4gIGlmICghTElWRSkge1xuICAgIExJVkUgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIExJVkUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246Zml4ZWQ7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXBcIjtcbiAgICBhdHRyKExJVkUsIFwiYXJpYS1saXZlXCIsIFwiYXNzZXJ0aXZlXCIpO1xuICB9XG4gIGlmICghTElWRS5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoTElWRSk7XG4gIGlmICh0ZXh0MikgTElWRS50ZXh0Q29udGVudCA9IGAke3RleHQyfSR7TElWRV9TUl9GSVgrKyAlIDIgPyBcIlxceEEwXCIgOiBcIlwifWA7XG59O1xudmFyIHNldFZhbHVlID0gKGlucHV0LCBkYXRhLCB0eXBlID0gXCJcIikgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlLCBkYXRhLCBpbnB1dFR5cGU6IHR5cGUgfTtcbiAgY29uc3QgcHJvdG8gPSBIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImJlZm9yZWlucHV0XCIsIGV2ZW50KSk7XG4gIChfYiA9IChfYTIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBcInZhbHVlXCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwoaW5wdXQsIGRhdGEpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiaW5wdXRcIiwgZXZlbnQpKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJjaGFuZ2VcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbn07XG52YXIgSVNfUFJFU1MgPSBmYWxzZTtcbnZhciBpc01vdXNlRG93biA9IChldmVudCkgPT4ge1xuICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gXCJtb3VzZXVwXCIpIElTX1BSRVNTID0gZmFsc2U7XG4gIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSBcIm1vdXNlZG93blwiKSB7XG4gICAgSVNfUFJFU1MgPSB0cnVlO1xuICAgIG9uKGRvY3VtZW50LCBcIm1vdXNldXBcIiwgaXNNb3VzZURvd24sIHsgb25jZTogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gSVNfUFJFU1M7XG59O1xuXG4vLyB1LWNvbWJvYm94LnRzXG52YXIgRVZFTlRTID0gXCJiZWZvcmVpbnB1dCxibHVyLGZvY3VzLGNsaWNrLGlucHV0LGtleWRvd24sbW91c2Vkb3duXCI7XG52YXIgRVZFTlRfT05DRSA9IHsgb25jZTogdHJ1ZSwgcGFzc2l2ZTogdHJ1ZSB9O1xudmFyIElTX0ZJUkVGT1hfREVTS1RPUCA9IElTX0ZJUkVGT1ggJiYgIUlTX0FORFJPSUQ7XG52YXIgSVNfTU9CSUxFID0gSVNfQU5EUk9JRCB8fCBJU19JT1M7XG52YXIgRkFMU0UgPSBcImZhbHNlXCI7XG52YXIgVEVYVFMgPSB7XG4gIGFkZGVkOiBcIkFkZGVkXCIsXG4gIGVtcHR5OiBcIk5vIHNlbGVjdGVkXCIsXG4gIGZvdW5kOiBcIk5hdmlnYXRlIGxlZnQgdG8gZmluZCAlZCBzZWxlY3RlZFwiLFxuICBpbnZhbGlkOiBcIkludmFsaWQgdmFsdWVcIixcbiAgb2Y6IFwib2ZcIixcbiAgcmVtb3ZlOiBcIlByZXNzIHRvIHJlbW92ZVwiLFxuICByZW1vdmVkOiBcIlJlbW92ZWRcIlxufTtcbnZhciBVSFRNTENvbWJvYm94RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9pdGVtID0gXCJcIjtcbiAgICB0aGlzLl9zcGVhayA9IFwiXCI7XG4gICAgdGhpcy5fdGV4dHMgPSBfX3NwcmVhZFZhbHVlcyh7fSwgVEVYVFMpO1xuICAgIHRoaXMuX3ZhbHVlID0gXCJcIjtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAgICAgLy8gQ29udGVudCBzbG90XG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGA6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jazsgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApIH0gLyogTXVzdCBiZSBkaXNwbGF5IGJsb2NrIGluIFNhZmFyaSB0byBhbGxvdyBmb2N1cyBpbnNpZGUgKi9cblx0XHRcdFx0Omhvc3QoOm5vdChbZGF0YS1tdWx0aXBsZV0pKSA6OnNsb3R0ZWQoZGF0YSksXG5cdFx0XHRcdDpob3N0KFtkYXRhLW11bHRpcGxlPVwiZmFsc2VcIl0pIDo6c2xvdHRlZChkYXRhKSB7IGRpc3BsYXk6IG5vbmUgfSAvKiBIaWRlIGRhdGEgaWYgbm90IG11bHRpcGxlICovXG5cdFx0XHRcdDo6c2xvdHRlZChpbnB1dFtpbnB1dG1vZGU9XCJub25lXCJdKSB7IG91dGxpbmU6IG5vbmUgfSAvKiBIaWRlIHRlbXBvcmFyeSBmb3VjcyBvdXRsaW5lIGZsYXNoICovXG5cdFx0XHRcdDo6c2xvdHRlZChkZWwpIHsgdGV4dC1kZWNvcmF0aW9uOiBub25lIH1cblx0XHRcdFx0OjpzbG90dGVkKGRhdGE6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBvaW50ZXItZXZlbnRzOiBub25lIH1cbiAgICAgICAgOjpzbG90dGVkKGRhdGEpOjphZnRlciB7IGNvbnRlbnQ6ICdcXFxcMDBENyc7IGNvbnRlbnQ6ICdcXFxcMDBENycgLyAnJzsgcGFkZGluZy1pbmxpbmU6IC41Y2g7IHBvaW50ZXItZXZlbnRzOiBhdXRvOyBjdXJzb3I6IHBvaW50ZXIgfVxuICAgICAgICA6OnNsb3R0ZWQoZGF0YTpmb2N1cykgeyAke0ZPQ1VTX09VVExJTkV9IH1gXG4gICAgICApXG4gICAgKTtcbiAgfVxuICAvLyBMb2NhbGx5IHN0b3JlIHZhbHVlIHRvIHN0b3JlIHZhbHVlIGJlZm9yZSBpbnB1dC1jbGlja1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoVEVYVFMpLm1hcCgoa2V5KSA9PiBgZGF0YS1zci0ke2tleX1gKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLl9yb290ID0gZ2V0Um9vdCh0aGlzKTtcbiAgICBvbih0aGlzLCBFVkVOVFMsIHRoaXMsIHRydWUpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywge1xuICAgICAgYXR0cmlidXRlRmlsdGVyOiBbXCJ2YWx1ZVwiLCBcImlkXCJdLFxuICAgICAgLy8gUmVzcG9uZCB0byBjaGFuZ2VzIGluIDxkYXRhPiB2YWx1ZSBvciBjaGFuZ2Ugb2YgaWQgZm9yIDxkYXRhbGlzdD4gdG8gcmVjb25uZWN0IHdpdGggaW5wdXRcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxuICAgICAgLy8gUmVzcG9uZCB0byBjaGFuZ2VzIGluIDxkYXRhPiB0ZXh0Q29udGVudFxuICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgc3VidHJlZTogdHJ1ZVxuICAgIH0pO1xuICAgIHNldFRpbWVvdXQocmVuZGVyLCAwLCB0aGlzKTtcbiAgICBzZXRUaW1lb3V0KHN5bmNJbnB1dFZhbHVlLCAwLCB0aGlzKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socHJvcCwgXywgdmFsKSB7XG4gICAgY29uc3QgdGV4dDIgPSBwcm9wLnNwbGl0KFwiZGF0YS1zci1cIilbMV07XG4gICAgaWYgKFRFWFRTW3RleHQyXSkgdGhpcy5fdGV4dHNbdGV4dDJdID0gdmFsIHx8IFRFWFRTW3RleHQyXTtcbiAgfVxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIGZhbHNlKTtcbiAgICBvZmYodGhpcywgRVZFTlRTLCB0aGlzLCB0cnVlKTtcbiAgICB0aGlzLl9pdGVtcyA9IHRoaXMuX2NsZWFyID0gdGhpcy5fZm9jdXMgPSB0aGlzLl9jb250cm9sID0gdm9pZCAwO1xuICAgIHRoaXMuX2xpc3QgPSB0aGlzLl9vcHRpb25zID0gdGhpcy5fcm9vdCA9IHZvaWQgMDtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkgcmV0dXJuO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJlZm9yZWlucHV0XCIpIHRoaXMuX3ZhbHVlID0gKHRhcmdldCA9PSBudWxsID8gdm9pZCAwIDogdGFyZ2V0LnZhbHVlKSB8fCBcIlwiO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJsdXJcIikgb25CbHVyKHRoaXMpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIpIG9uQ2xpY2sodGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImZvY3VzXCIpIG9uRm9jdXModGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImlucHV0XCIpIG9uSW5wdXQodGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgb25LZXlEb3duKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgaXNNb3VzZURvd24oZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcIm11dGF0aW9uXCIpIHJlbmRlcih0aGlzLCBldmVudCk7XG4gIH1cbiAgZ2V0IG11bHRpcGxlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gYXR0cih0aGlzLCBcImRhdGEtbXVsdGlwbGVcIikpICE9IG51bGwgPyBfYTIgOiBGQUxTRSkgIT09IEZBTFNFO1xuICB9XG4gIHNldCBtdWx0aXBsZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJkYXRhLW11bHRpcGxlXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBjcmVhdGFibGUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKChfYTIgPSBhdHRyKHRoaXMsIFwiZGF0YS1jcmVhdGFibGVcIikpICE9IG51bGwgPyBfYTIgOiBGQUxTRSkgIT09IEZBTFNFO1xuICB9XG4gIHNldCBjcmVhdGFibGUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwiZGF0YS1jcmVhdGFibGVcIiwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgZ2V0IGNvbnRyb2woKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpXG4gICAgICB0aGlzLl9jb250cm9sID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIik7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2w7XG4gIH1cbiAgZ2V0IGxpc3QoKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fbGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpXG4gICAgICB0aGlzLl9saXN0ID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwidS1kYXRhbGlzdCxkYXRhbGlzdFwiKTtcbiAgICByZXR1cm4gdGhpcy5fbGlzdDtcbiAgfVxuICBnZXQgY2xlYXIoKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fY2xlYXIpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuaXNDb25uZWN0ZWQpKSB0aGlzLl9jbGVhciA9IHRoaXMucXVlcnlTZWxlY3RvcihcImRlbFwiKTtcbiAgICByZXR1cm4gdGhpcy5fY2xlYXI7XG4gIH1cbiAgZ2V0IGl0ZW1zKCkge1xuICAgIGlmICghdGhpcy5faXRlbXMpIHRoaXMuX2l0ZW1zID0gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImRhdGFcIik7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICB9XG4gIGdldCBvcHRpb25zKCkge1xuICAgIHZhciBfYTIsIF9iO1xuICAgIGlmICghdGhpcy5fb3B0aW9ucykge1xuICAgICAgY29uc3QgdGFnID0gKChfYTIgPSB0aGlzLmxpc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIubm9kZU5hbWUpID09PSBcIlUtREFUQUxJU1RcIiA/IFwidS1vcHRpb25cIiA6IFwib3B0aW9uXCI7XG4gICAgICB0aGlzLl9vcHRpb25zID0gKF9iID0gdGhpcy5saXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cbiAgZ2V0IHZhbHVlcygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuaXRlbXNdLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSk7XG4gIH1cbn07XG52YXIgdGV4dCA9IChlbCkgPT4ge1xuICB2YXIgX2EyO1xuICByZXR1cm4gKChfYTIgPSBlbCA9PSBudWxsID8gdm9pZCAwIDogZWwudGV4dENvbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xufTtcbnZhciBpc0RhdGEgPSAoZWwpID0+IGVsIGluc3RhbmNlb2YgSFRNTERhdGFFbGVtZW50O1xudmFyIGlzRGlzYWJsZWQgPSAoeyBjb250cm9sIH0pID0+IChjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmRpc2FibGVkKSB8fCAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5yZWFkT25seSkgfHwgZmFsc2U7XG52YXIgcmVuZGVyID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTIsIF9iO1xuICBjb25zdCB7IF9mb2N1cywgX3RleHRzLCBpdGVtcywgY29udHJvbCwgbGlzdCwgbXVsdGlwbGUgfSA9IHNlbGY7XG4gIGxldCBsYWJlbCA9IGAke3RleHQoKF9hMiA9IGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wubGFiZWxzKSA9PSBudWxsID8gdm9pZCAwIDogX2EyWzBdKX0ke211bHRpcGxlID8gYCwgJHtpdGVtcy5sZW5ndGggPyBfdGV4dHMuZm91bmQucmVwbGFjZShcIiVkXCIsIGAke2l0ZW1zLmxlbmd0aH1gKSA6IF90ZXh0cy5lbXB0eX1gIDogXCJcIn1gO1xuICBjb25zdCBlZGl0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHsgYWRkZWROb2RlcywgcmVtb3ZlZE5vZGVzIH0gb2YgKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC5kZXRhaWwpIHx8IFtdKSB7XG4gICAgZm9yIChjb25zdCBlbCBvZiBhZGRlZE5vZGVzKSBpZiAoaXNEYXRhKGVsKSkgZWRpdHMudW5zaGlmdChlbCk7XG4gICAgZm9yIChjb25zdCBlbCBvZiByZW1vdmVkTm9kZXMpIGlmIChpc0RhdGEoZWwpKSBlZGl0cy5wdXNoKGVsKTtcbiAgfVxuICBjb25zdCBzaG91bGRBbm5vdW5jZSA9IG11bHRpcGxlID8gZWRpdHMubGVuZ3RoID09PSAxIDogZWRpdHNbMF0gPT09IF9mb2N1cztcbiAgaWYgKF9mb2N1cyAmJiBjb250cm9sICYmIHNob3VsZEFubm91bmNlKSB7XG4gICAgY29uc3QgYXJpYUV4cGFuZGVkID0gYXR0cihjb250cm9sLCBcImFyaWEtZXhwYW5kZWRcIik7XG4gICAgY29uc3QgaW5wdXRNb2RlID0gYXR0cihjb250cm9sLCBcImlucHV0bW9kZVwiKTtcbiAgICBjb25zdCBuZXh0Rm9jdXMgPSBpc0RhdGEoX2ZvY3VzKSA/IGNvbnRyb2wgOiBfZm9jdXM7XG4gICAgY29uc3QgaXNSZW1vdmUgPSAhZWRpdHNbMF0uaXNDb25uZWN0ZWQ7XG4gICAgc2VsZi5fc3BlYWsgPSBgJHtfdGV4dHNbaXNSZW1vdmUgPyBcInJlbW92ZWRcIiA6IFwiYWRkZWRcIl19ICR7dGV4dChlZGl0c1swXSl9LCBgO1xuICAgIGlmIChJU19NT0JJTEUgfHwgX2ZvY3VzID09PSBjb250cm9sKSBzcGVhayhzZWxmLl9zcGVhayk7XG4gICAgaWYgKGNvbnRyb2wgIT09IG5leHRGb2N1cykge1xuICAgICAgYXR0cihjb250cm9sLCBcImFyaWEtZXhwYW5kZWRcIiwgbnVsbCk7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIsIFwibm9uZVwiKTtcbiAgICAgIGxhYmVsID0gXCJcXHhBMFwiO1xuICAgICAgY29udHJvbC5mb2N1cygpO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHZhciBfYTM7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiLCBhcmlhRXhwYW5kZWQpO1xuICAgICAgYXR0cihjb250cm9sLCBcImlucHV0bW9kZVwiLCBpc1JlbW92ZSA/IFwibm9uZVwiIDogaW5wdXRNb2RlKTtcbiAgICAgIChfYTMgPSBuZXh0Rm9jdXMgPT0gbnVsbCA/IHZvaWQgMCA6IG5leHRGb2N1cy5mb2N1cykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMy5jYWxsKG5leHRGb2N1cyk7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIsIGlucHV0TW9kZSk7XG4gICAgICBzZWxmLl9zcGVhayA9IFwiXCI7XG4gICAgICBpZiAoSVNfRklSRUZPWF9ERVNLVE9QKSBvbihzZWxmLCBcImJsdXJcIiwgKCkgPT4gcmVuZGVyKHNlbGYpLCBFVkVOVF9PTkNFKTtcbiAgICAgIGVsc2Ugc2V0VGltZW91dChyZW5kZXIsIDEwMCwgc2VsZik7XG4gICAgfSwgMTAwKTtcbiAgfVxuICBsZXQgaWR4ID0gMDtcbiAgY29uc3Qgc2VsZWN0ID0gc2VsZi5xdWVyeVNlbGVjdG9yKFwic2VsZWN0XCIpO1xuICBjb25zdCByZW1vdmUgPSBpc0Rpc2FibGVkKHNlbGYpID8gXCJcIiA6IGAke190ZXh0cy5yZW1vdmV9LCBgO1xuICBmb3IgKGNvbnN0IGl0ZW0yIG9mIGl0ZW1zKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gc2VsZWN0ID09IG51bGwgPyB2b2lkIDAgOiBzZWxlY3Qub3B0aW9uc1tpZHhdO1xuICAgIGNvbnN0IGxhYmVsMiA9IHRleHQoaXRlbTIpO1xuICAgIGNvbnN0IHZhbHVlID0gaXRlbTIudmFsdWUgfHwgbGFiZWwyO1xuICAgIGNvbnN0IGFyaWEgPSBgJHtzZWxmLl9zcGVha30ke2xhYmVsMn0sICR7cmVtb3ZlfSR7KytpZHh9ICR7X3RleHRzLm9mfSAke2l0ZW1zLmxlbmd0aH1gO1xuICAgIGF0dHIoaXRlbTIsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgICBhdHRyKGl0ZW0yLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgICBhdHRyKGl0ZW0yLCBcInRhYmluZGV4XCIsIFwiLTFcIik7XG4gICAgYXR0cihpdGVtMiwgXCJhcmlhLWxhYmVsXCIsIGFyaWEpO1xuICAgIGlmIChvcHRpb24pIE9iamVjdC5hc3NpZ24ob3B0aW9uLCB7IHRleHRDb250ZW50OiBsYWJlbDIsIHZhbHVlIH0pO1xuICAgIGVsc2Ugc2VsZWN0ID09IG51bGwgPyB2b2lkIDAgOiBzZWxlY3QuYXBwZW5kQ2hpbGQobmV3IE9wdGlvbihsYWJlbDIsIHZhbHVlLCB0cnVlLCB0cnVlKSk7XG4gIH1cbiAgaWYgKHNlbGVjdCkgYXR0cihzZWxlY3QsIFwibXVsdGlwbGVcIiwgbXVsdGlwbGUgPyBcIlwiIDogbnVsbCk7XG4gIGZvciAoY29uc3Qgb3B0IG9mIFsuLi4oc2VsZWN0ID09IG51bGwgPyB2b2lkIDAgOiBzZWxlY3Qub3B0aW9ucykgfHwgW11dLnNsaWNlKGlkeCkpIG9wdC5yZW1vdmUoKTtcbiAgaWYgKCFtdWx0aXBsZSAmJiBpZHggPiAxKVxuICAgIGNvbnNvbGUud2FybihcInUtY29tYm9ib3g6IE11bHRpcGxlIDxkYXRhPiBmb3VuZCBpbiBzaW5nbGUgbW9kZS5cIik7XG4gIGlmIChsaXN0KSBhdHRyKGxpc3QsIFwiYXJpYS1tdWx0aXNlbGVjdGFibGVcIiwgYCR7bXVsdGlwbGV9YCk7XG4gIGlmIChjb250cm9sKSBhdHRyKGNvbnRyb2wsIFwibGlzdFwiLCB1c2VJZChsaXN0KSk7XG4gIGlmIChjb250cm9sKSBhdHRyKGNvbnRyb2wsIFwiYXJpYS1sYWJlbFwiLCBgJHtzZWxmLl9zcGVha30ke2xhYmVsfWApO1xuICBjb25zdCBpdGVtID0gdGV4dChpdGVtc1swXSk7XG4gIGlmIChpdGVtICE9PSBzZWxmLl9pdGVtKSBzeW5jSW5wdXRWYWx1ZShzZWxmKTtcbiAgc2VsZi5faXRlbSA9IGl0ZW07XG4gIHN5bmNDbGVhcldpdGhJbnB1dChzZWxmKTtcbiAgc3luY09wdGlvbnNXaXRoSXRlbXMoc2VsZik7XG4gIChfYiA9IG11dGF0aW9uT2JzZXJ2ZXIoc2VsZikpID09IG51bGwgPyB2b2lkIDAgOiBfYi50YWtlUmVjb3JkcygpO1xufTtcbnZhciBzeW5jQ2xlYXJXaXRoSW5wdXQgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoc2VsZi5jbGVhcikgYXR0cihzZWxmLmNsZWFyLCBcInJvbGVcIiwgXCJidXR0b25cIik7XG4gIGlmIChzZWxmLmNsZWFyKSBzZWxmLmNsZWFyLmhpZGRlbiA9ICEoKF9hMiA9IHNlbGYuY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi52YWx1ZSkgfHwgaXNEaXNhYmxlZChzZWxmKTtcbn07XG52YXIgc3luY09wdGlvbnNXaXRoSXRlbXMgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF9zcGVhaywgb3B0aW9ucyA9IFtdLCB2YWx1ZXMgfSA9IHNlbGY7XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IChfYTIgPSBhdHRyKG9wdCwgXCJ2YWx1ZVwiKSkgIT0gbnVsbCA/IF9hMiA6IHRleHQob3B0KTtcbiAgICBhdHRyKG9wdCwgXCJhcmlhLWxhYmVsXCIsIF9zcGVhayA/IGAke19zcGVha30ke3RleHQob3B0KX1gIDogbnVsbCk7XG4gICAgYXR0cihvcHQsIFwic2VsZWN0ZWRcIiwgdmFsdWVzLmluY2x1ZGVzKHZhbHVlKSA/IFwiXCIgOiBudWxsKTtcbiAgfVxufTtcbnZhciBzeW5jSW5wdXRWYWx1ZSA9IChzZWxmKSA9PiB7XG4gIGNvbnN0IHsgbXVsdGlwbGUsIGNvbnRyb2wsIGl0ZW1zIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9IHRleHQoaXRlbXNbMF0pO1xuICBpZiAoIW11bHRpcGxlICYmIGNvbnRyb2wgJiYgdmFsdWUgIT09IGNvbnRyb2wudmFsdWUpXG4gICAgc2V0VmFsdWUoY29udHJvbCwgdmFsdWUsIHZhbHVlID8gXCJpbnNlcnRUZXh0XCIgOiBcImRlbGV0ZUNvbnRlbnRcIik7XG59O1xudmFyIGRpc3BhdGNoTWF0Y2ggPSAoc2VsZiwgY2hhbmdlID0gdHJ1ZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF90ZXh0cywgb3B0aW9ucyA9IFtdLCBjcmVhdGFibGUsIGNvbnRyb2wsIGl0ZW1zLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgdmFsdWUgPSAoKF9hMiA9IGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBxdWVyeSA9IHZhbHVlLnRvTG93ZXJDYXNlKCkgfHwgbnVsbDtcbiAgbGV0IG1hdGNoID0gWy4uLm9wdGlvbnNdLmZpbmQoXG4gICAgKG9wdCkgPT4gKGF0dHIob3B0LCBcImxhYmVsXCIpIHx8IHRleHQob3B0KSkudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IHF1ZXJ5XG4gICk7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IG1hdGNoIH07XG4gIGlmICghc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImNvbWJvYm94YmVmb3JlbWF0Y2hcIiwgZXZlbnQpKSlcbiAgICBtYXRjaCA9IFsuLi5vcHRpb25zXS5maW5kKChvKSA9PiBvLnNlbGVjdGVkKTtcbiAgaWYgKGNoYW5nZSkge1xuICAgIHN5bmNPcHRpb25zV2l0aEl0ZW1zKHNlbGYpO1xuICAgIGlmIChtYXRjaCkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIG1hdGNoLCBmYWxzZSk7XG4gICAgaWYgKGNyZWF0YWJsZSAmJiB2YWx1ZSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIHsgdmFsdWUgfSwgZmFsc2UpO1xuICAgIGlmICghbXVsdGlwbGUgJiYgIXZhbHVlICYmIGl0ZW1zWzBdKSBkaXNwYXRjaENoYW5nZShzZWxmLCBpdGVtc1swXSk7XG4gICAgZWxzZSBzeW5jSW5wdXRWYWx1ZShzZWxmKTtcbiAgICByZXR1cm4gc3BlYWsoX3RleHRzLmludmFsaWQpO1xuICB9XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIG9wdC5zZWxlY3RlZCA9IG9wdCA9PT0gbWF0Y2g7XG59O1xudmFyIGRpc3BhdGNoQ2hhbmdlID0gKHNlbGYsIGl0ZW0sIHJlbW92YWJsZSA9IHRydWUpID0+IHtcbiAgY29uc3QgeyBjb250cm9sLCBpdGVtcywgbXVsdGlwbGUgfSA9IHNlbGY7XG4gIGNvbnN0IGFkZCA9IGNyZWF0ZUVsZW1lbnQoXCJkYXRhXCIsIGl0ZW0ubGFiZWwgfHwgaXRlbS52YWx1ZSwge1xuICAgIHZhbHVlOiBpdGVtLnZhbHVlXG4gIH0pO1xuICBjb25zdCByZW1vdmUgPSBbLi4uaXRlbXNdLmZpbmQoKGkpID0+IGkudmFsdWUgPT09IGl0ZW0udmFsdWUpO1xuICBjb25zdCBldmVudCA9IHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSwgZGV0YWlsOiByZW1vdmUgfHwgYWRkIH07XG4gIGNvbnN0IHNraXAgPSByZW1vdmUgJiYgIXJlbW92YWJsZTtcbiAgaWYgKHNraXApIHJldHVybiBzeW5jSW5wdXRWYWx1ZShzZWxmKTtcbiAgaWYgKHNlbGYuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJjb21ib2JveGJlZm9yZXNlbGVjdFwiLCBldmVudCkpKSB7XG4gICAgaWYgKCFtdWx0aXBsZSkgZm9yIChjb25zdCBpdGVtMiBvZiBbLi4uaXRlbXNdKSBpdGVtMi5yZW1vdmUoKTtcbiAgICBpZiAocmVtb3ZlKSByZW1vdmUucmVtb3ZlKCk7XG4gICAgZWxzZSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmluc2VydEFkamFjZW50RWxlbWVudChcImJlZm9yZWJlZ2luXCIsIGFkZCk7XG4gICAgc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImNvbWJvYm94YWZ0ZXJzZWxlY3RcIiwgZXZlbnQpKTtcbiAgfVxufTtcbnZhciBvbkZvY3VzID0gKHNlbGYsIHsgdGFyZ2V0IH0pID0+IHtcbiAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBzZWxmLl9mb2N1cyA9IHRhcmdldDtcbiAgc3BlYWsoKTtcbn07XG52YXIgb25CbHVyID0gKHNlbGYpID0+IGlzTW91c2VEb3duKCkgfHwgc2V0VGltZW91dChvbkJsdXJyZWQsIDAsIHNlbGYpO1xudmFyIG9uQmx1cnJlZCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmICghc2VsZi5fZm9jdXMgfHwgc2VsZi5jb250YWlucygoX2EyID0gc2VsZi5fcm9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5hY3RpdmVFbGVtZW50KSkgcmV0dXJuO1xuICBpZiAoIXNlbGYubXVsdGlwbGUpIGRpc3BhdGNoTWF0Y2goc2VsZik7XG4gIHNlbGYuX2ZvY3VzID0gdm9pZCAwO1xufTtcbnZhciBvbkNsaWNrID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIGNvbnN0IHsgY2xpZW50WDogeCwgY2xpZW50WTogeSwgdGFyZ2V0IH0gPSBldmVudDtcbiAgY29uc3QgeyBjbGVhciwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGlmIChjbGVhciA9PSBudWxsID8gdm9pZCAwIDogY2xlYXIuY29udGFpbnModGFyZ2V0KSkge1xuICAgIGlmIChjb250cm9sKSBzZXRWYWx1ZShjb250cm9sLCBcIlwiLCBcImRlbGV0ZUNvbnRlbnRCYWNrd2FyZFwiKTtcbiAgICByZXR1cm4gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpO1xuICB9XG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSBpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChpdGVtLmNvbnRhaW5zKHRhcmdldCkpIHJldHVybiBkaXNwYXRjaENoYW5nZShzZWxmLCBpdGVtKTtcbiAgICBpZiAoeSA+PSB0b3AgJiYgeSA8PSBib3R0b20gJiYgeCA+PSBsZWZ0ICYmIHggPD0gcmlnaHQpIHJldHVybiBpdGVtLmZvY3VzKCk7XG4gIH1cbiAgaWYgKHRhcmdldCA9PT0gc2VsZikgY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpO1xufTtcbnZhciBvbklucHV0ID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgb3B0aW9ucyA9IFtdLCBjb250cm9sLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgdmFsdWUgPSAoKF9hMiA9IGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBpc0NsaWNrID0gZXZlbnQgaW5zdGFuY2VvZiBJbnB1dEV2ZW50ID8gIWV2ZW50LmlucHV0VHlwZSB8fCBldmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0XCIgOiAhIXZhbHVlO1xuICBpZiAoaXNDbGljaykge1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIGlmIChjb250cm9sKSBjb250cm9sLnZhbHVlID0gc2VsZi5fdmFsdWU7XG4gICAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucylcbiAgICAgIGlmIChvcHQudmFsdWUgJiYgb3B0LnZhbHVlID09PSB2YWx1ZSlcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIG9wdCwgbXVsdGlwbGUpO1xuICB9IGVsc2UgaWYgKCFtdWx0aXBsZSkgZGlzcGF0Y2hNYXRjaChzZWxmLCBmYWxzZSk7XG4gIHN5bmNDbGVhcldpdGhJbnB1dChzZWxmKTtcbn07XG52YXIgb25LZXlEb3duID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LnNoaWZ0S2V5KSByZXR1cm47XG4gIGNvbnN0IHsgY2xlYXIsIGNvbnRyb2wsIGl0ZW1zIH0gPSBzZWxmO1xuICBjb25zdCB7IGtleSwgcmVwZWF0LCB0YXJnZXQgfSA9IGV2ZW50O1xuICBjb25zdCBpc0NvbnRyb2wgPSBjb250cm9sICYmIGNvbnRyb2wgPT09IHRhcmdldDtcbiAgY29uc3QgaW5UZXh0ID0gaXNDb250cm9sICYmIChjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLnNlbGVjdGlvbkVuZCk7XG4gIGxldCBpbmRleCA9IGlzQ29udHJvbCA/IGl0ZW1zLmxlbmd0aCA6IFsuLi5pdGVtc10uaW5kZXhPZih0YXJnZXQpO1xuICBpZiAoaXNDb250cm9sICYmIGtleSA9PT0gXCJUYWJcIiAmJiBjbGVhciAmJiAhY2xlYXIuaGlkZGVuKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjbGVhci50YWJJbmRleCA9IC0xO1xuICAgIGNsZWFyLmZvY3VzKCk7XG4gICAgb24oY2xlYXIsIFwiYmx1clwiLCAoKSA9PiBhdHRyKGNsZWFyLCBcInRhYmluZGV4XCIsIG51bGwpLCBFVkVOVF9PTkNFKTtcbiAgfVxuICBpZiAoIWlzQ29udHJvbCAmJiBhc0J1dHRvbihldmVudCkgfHwgaW5kZXggPT09IC0xKSByZXR1cm47XG4gIGlmIChrZXkgPT09IFwiQXJyb3dSaWdodFwiICYmICFpc0NvbnRyb2wpIGluZGV4ICs9IDE7XG4gIGVsc2UgaWYgKGtleSA9PT0gXCJBcnJvd0xlZnRcIiAmJiAhaW5UZXh0KSBpbmRleCAtPSAxO1xuICBlbHNlIGlmIChrZXkgPT09IFwiRW50ZXJcIiAmJiBpc0NvbnRyb2wpIHtcbiAgICBjb25zdCBmb3JtID0gYXR0cihjb250cm9sLCBcImZvcm1cIik7XG4gICAgYXR0cihjb250cm9sLCBcImZvcm1cIiwgXCIjXCIpO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiLCBmb3JtKSk7XG4gICAgcmV0dXJuIGRpc3BhdGNoTWF0Y2goc2VsZik7XG4gIH0gZWxzZSBpZiAoKGtleSA9PT0gXCJCYWNrc3BhY2VcIiB8fCBrZXkgPT09IFwiRGVsZXRlXCIpICYmICFpblRleHQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghcmVwZWF0ICYmIGl0ZW1zW2luZGV4XSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW1zW2luZGV4XSk7XG4gICAgaWYgKGlzQ29udHJvbCkgaW5kZXggLT0gMTtcbiAgfSBlbHNlIHJldHVybiBpc0NvbnRyb2wgfHwgKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuZm9jdXMoKSk7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIChfYTIgPSBpdGVtc1tNYXRoLm1heCgwLCBpbmRleCldIHx8IGNvbnRyb2wpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZm9jdXMoKTtcbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWNvbWJvYm94XCIsIFVIVE1MQ29tYm9ib3hFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxDb21ib2JveEVsZW1lbnQgfTtcbiIsIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFNBRkVfTEFCRUxMRURCWSA9IGAke0lTX0FORFJPSUQgPyBcImRhdGFcIiA6IFwiYXJpYVwifS1sYWJlbGxlZGJ5YDtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgLy8gVW5uYW1lZCBzbG90IGRvZXMgYXV0b21hdGljYWxseSByZW5kZXIgYWxsIHRvcCBlbGVtZW50IG5vZGVzXG4gIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBjc3MpXG4pO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xuXG4vLyB1LXRhYnMudHNcbnZhciBBUklBX0NPTlRST0xTID0gXCJhcmlhLWNvbnRyb2xzXCI7XG52YXIgQVJJQV9TRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xudmFyIFVIVE1MVGFic0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgRElTUExBWV9CTE9DSyk7XG4gIH1cbiAgZ2V0IHRhYkxpc3QoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFibGlzdFwiLCB0aGlzKVswXSB8fCBudWxsO1xuICB9XG4gIGdldCBzZWxlY3RlZEluZGV4KCkge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicyk7XG4gIH1cbiAgc2V0IHNlbGVjdGVkSW5kZXgoaW5kZXgpIHtcbiAgICBzZXRTZWxlY3RlZCh0aGlzLnRhYnNbaW5kZXhdKTtcbiAgfVxuICBnZXQgdGFicygpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJcIiwgdGhpcyk7XG4gIH1cbiAgZ2V0IHBhbmVscygpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJwYW5lbFwiLCB0aGlzKTtcbiAgfVxufTtcbnZhciBVSFRNTFRhYkxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFibGlzdFwiKTtcbiAgICBvbih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCkgdGhpcy5oYW5kbGVFdmVudCgpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG9mZih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LnR5cGUgPT09IFwibXV0YXRpb25cIikge1xuICAgICAgY29uc3QgdGFiID0gdGhpcy50YWJzW01hdGgubWF4KHRoaXMuc2VsZWN0ZWRJbmRleCwgMCldO1xuICAgICAgcmV0dXJuIHRhYiA9PSBudWxsID8gdm9pZCAwIDogdGFiLnNldEF0dHJpYnV0ZShBUklBX1NFTEVDVEVELCBcInRydWVcIik7XG4gICAgfVxuICAgIGNvbnN0IHsga2V5IH0gPSBldmVudDtcbiAgICBjb25zdCB0YWJzID0gWy4uLnRoaXMudGFic107XG4gICAgY29uc3QgcHJldiA9IHRhYnMuZmluZEluZGV4KCh0YWIpID0+IHRhYi5jb250YWlucyhldmVudC50YXJnZXQpKTtcbiAgICBsZXQgbmV4dCA9IHByZXY7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgcHJldiA9PT0gLTEpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSBzZXRTZWxlY3RlZCh0YWJzW3ByZXZdKTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIgJiYgIWFzQnV0dG9uKGV2ZW50KSkge1xuICAgICAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIiB8fCBrZXkgPT09IFwiQXJyb3dSaWdodFwiKVxuICAgICAgICBuZXh0ID0gKHByZXYgKyAxKSAlIHRhYnMubGVuZ3RoO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93VXBcIiB8fCBrZXkgPT09IFwiQXJyb3dMZWZ0XCIpXG4gICAgICAgIG5leHQgPSAocHJldiB8fCB0YWJzLmxlbmd0aCkgLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkVuZFwiKSBuZXh0ID0gdGFicy5sZW5ndGggLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkhvbWVcIikgbmV4dCA9IDA7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiVGFiXCIpIG5leHQgPSBnZXRTZWxlY3RlZEluZGV4KHRhYnMpO1xuICAgICAgZWxzZSByZXR1cm47XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGFic1twcmV2XS50YWJJbmRleCA9IC0xO1xuICAgICAgICB0YWJzW25leHRdLnRhYkluZGV4ID0gMDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGtleSAhPT0gXCJUYWJcIikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0YWJzW25leHRdLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJzKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWRJbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpO1xuICB9XG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4KSB7XG4gICAgc2V0U2VsZWN0ZWQodGhpcy50YWJzW2luZGV4XSk7XG4gIH1cbn07XG52YXIgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xudmFyIFVIVE1MVGFiRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImlkXCIsIEFSSUFfU0VMRUNURUQsIEFSSUFfQ09OVFJPTFNdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUoXG4gICAgICB0aGlzLFxuICAgICAgXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jayB9XCJcbiAgICApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFiXCIpO1xuICAgIHRoaXMudGFiSW5kZXggPSB0aGlzLnNlbGVjdGVkID8gMCA6IC0xO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoIVNLSVBfQVRUUl9DSEFOR0UgJiYgdGhpcy5zZWxlY3RlZCAmJiB0aGlzLnRhYkxpc3QpIHtcbiAgICAgIFNLSVBfQVRUUl9DSEFOR0UgPSB0cnVlO1xuICAgICAgY29uc3QgdGFicyA9IFsuLi50aGlzLnRhYkxpc3QucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpXTtcbiAgICAgIGNvbnN0IHBhbmVscyA9IHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFicGFuZWxcIiwgdGhpcy50YWJzRWxlbWVudCB8fCB0aGlzKTtcbiAgICAgIGNvbnN0IG5leHRQYW5lbCA9IGdldFBhbmVsKHRoaXMsIHBhbmVsc1t0YWJzLmluZGV4T2YodGhpcyldKTtcbiAgICAgIGlmIChuZXh0UGFuZWwpIGF0dHIobmV4dFBhbmVsLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKHRoaXMpKTtcbiAgICAgIHRhYnMuZm9yRWFjaCgodGFiLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBwYW5lbCA9IGdldFBhbmVsKHRhYiwgcGFuZWxzW2luZGV4XSk7XG4gICAgICAgIHRhYi50YWJJbmRleCA9IHRhYiA9PT0gdGhpcyA/IDAgOiAtMTtcbiAgICAgICAgYXR0cih0YWIsIEFSSUFfU0VMRUNURUQsIGAke3RhYiA9PT0gdGhpc31gKTtcbiAgICAgICAgaWYgKHBhbmVsKSBwYW5lbC5oaWRkZW4gPSBwYW5lbCAhPT0gbmV4dFBhbmVsO1xuICAgICAgICBpZiAocGFuZWwpIGF0dHIodGFiLCBBUklBX0NPTlRST0xTLCBwYW5lbC5pZCk7XG4gICAgICB9KTtcbiAgICAgIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYkxpc3QoKSB7XG4gICAgY29uc3QgdGFibGlzdCA9IHRoaXMucGFyZW50RWxlbWVudDtcbiAgICByZXR1cm4gKHRhYmxpc3QgPT0gbnVsbCA/IHZvaWQgMCA6IHRhYmxpc3Qubm9kZU5hbWUpID09PSBcIlUtVEFCTElTVFwiID8gdGFibGlzdCA6IG51bGw7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIEFSSUFfU0VMRUNURUQpID09PSBcInRydWVcIjtcbiAgfVxuICBzZXQgc2VsZWN0ZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIEFSSUFfU0VMRUNURUQsIGAkeyEhdmFsdWV9YCk7XG4gIH1cbiAgLyoqIFJldHJpZXZlcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiBhbiB0YWIgaW4gYSB0YWJsaXN0LiAqL1xuICBnZXQgaW5kZXgoKSB7XG4gICAgY29uc3QgdGFiTGlzdCA9IHRoaXMudGFiTGlzdDtcbiAgICByZXR1cm4gdGFiTGlzdCA/IFsuLi50YWJMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKV0uaW5kZXhPZih0aGlzKSA6IDA7XG4gIH1cbiAgZ2V0IHBhbmVsKCkge1xuICAgIHJldHVybiBnZXRQYW5lbCh0aGlzKTtcbiAgfVxufTtcbnZhciBVSFRNTFRhYlBhbmVsRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImhpZGRlblwiXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFicGFuZWxcIik7XG4gICAgdGhpcy5oaWRkZW4gPSBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicykgPT09IC0xO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLmhpZGRlbiB8fCBpc0ZvY3VzYWJsZSh0aGlzLmZpcnN0Q2hpbGQpKVxuICAgICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIG51bGwpO1xuICAgIGVsc2UgdGhpcy50YWJJbmRleCA9IDA7XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgY29uc3QgY3NzID0gYHUtdGFiWyR7QVJJQV9DT05UUk9MU309XCIke3RoaXMuaWR9XCJdYDtcbiAgICByZXR1cm4gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKGNzcyk7XG4gIH1cbn07XG52YXIgcXVlcnlXaXRob3V0TmVzdGVkID0gKHRhZywgc2VsZikgPT4gc2VsZi5xdWVyeVNlbGVjdG9yQWxsKGAke3RhZ306bm90KDpzY29wZSB1LXRhYnBhbmVsICR7dGFnfSlgKTtcbnZhciBnZXRQYW5lbCA9ICh0YWIsIHBhbmVsKSA9PiB7XG4gIGNvbnN0IGlkMiA9IGF0dHIodGFiLCBBUklBX0NPTlRST0xTKSB8fCB1c2VJZChwYW5lbCk7XG4gIGNvbnN0IGVsID0gZ2V0Um9vdCh0YWIpLmdldEVsZW1lbnRCeUlkKGlkMik7XG4gIHJldHVybiAoZWwgPT0gbnVsbCA/IHZvaWQgMCA6IGVsLm5vZGVOYW1lKSA9PT0gXCJVLVRBQlBBTkVMXCIgPyBlbCA6IG51bGw7XG59O1xudmFyIGdldFNlbGVjdGVkSW5kZXggPSAodGFicykgPT4gWy4uLnRhYnNdLmZpbmRJbmRleCgodGFiKSA9PiBhdHRyKHRhYiwgQVJJQV9TRUxFQ1RFRCkgPT09IFwidHJ1ZVwiKTtcbnZhciBzZXRTZWxlY3RlZCA9ICh0YWIpID0+IHRhYiAmJiBhdHRyKHRhYiwgXCJhcmlhLXNlbGVjdGVkXCIsIFwidHJ1ZVwiKTtcbnZhciBpc0ZvY3VzYWJsZSA9IChlbCkgPT4gZWwgaW5zdGFuY2VvZiBFbGVtZW50ICYmICFlbC5tYXRjaGVzKCc6ZGlzYWJsZWQsW3RhYmluZGV4Xj1cIi1cIl0nKSAmJiBlbC5tYXRjaGVzKFxuICBgW2NvbnRlbnRlZGl0YWJsZV0sW2NvbnRyb2xzXSxbaHJlZl0sW3RhYmluZGV4XSxpbnB1dDpub3QoW3R5cGU9XCJoaWRkZW5cIl0pLHNlbGVjdCx0ZXh0YXJlYSxidXR0b24sc3VtbWFyeSxpZnJhbWVgXG4pO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJzXCIsIFVIVE1MVGFic0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJsaXN0XCIsIFVIVE1MVGFiTGlzdEVsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJcIiwgVUhUTUxUYWJFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtdGFicGFuZWxcIiwgVUhUTUxUYWJQYW5lbEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTFRhYkVsZW1lbnQsIFVIVE1MVGFiTGlzdEVsZW1lbnQsIFVIVE1MVGFiUGFuZWxFbGVtZW50LCBVSFRNTFRhYnNFbGVtZW50IH07XG4iLCJpbXBvcnQgeyBjbHN4IH0gZnJvbSBcImNsc3hcIjtcblxuZXhwb3J0IGNvbnN0IFFVSUNLX0VWRU5UID0geyBjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH07XG5leHBvcnQgY29uc3QgSVNfQlJPV1NFUiA9XG5cdHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiO1xuXG4vLyBUT0RPOiBEb2N1bWVudGF0aW9uIGZvciBwcmV0dHlOdW1iZXJcbmxldCBJTlRMX05VTTogSW50bC5OdW1iZXJGb3JtYXQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcHJldHR5TnVtYmVyKG51bWJlcjogbnVtYmVyIHwgc3RyaW5nKSB7XG5cdGlmICghSU5UTF9OVU0pXG5cdFx0SU5UTF9OVU0gPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXG5cdFx0XHQoSVNfQlJPV1NFUiAmJiBhdHRyKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgXCJsYW5nXCIpKSB8fCBcIm5vXCIsXG5cdFx0KTtcblx0cmV0dXJuIElOVExfTlVNLmZvcm1hdChOdW1iZXIobnVtYmVyKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWJvdW5jZTxUIGV4dGVuZHMgdW5rbm93bltdPihcblx0Y2FsbGJhY2s6ICguLi5hcmdzOiBUKSA9PiB2b2lkLFxuXHRkZWxheTogbnVtYmVyLFxuKSB7XG5cdGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cblx0cmV0dXJuICguLi5hcmdzOiBUKSA9PiB7XG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0XHR0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gY2FsbGJhY2soLi4uYXJncyksIGRlbGF5KTtcblx0fTtcbn1cblxuLyoqXG4gKiBhdHRyXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IGdldCwgc2V0IGFuZCByZW1vdmUgYXR0cmlidXRlc1xuICogQHBhcmFtIGVsIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIG5hbWUgVGhlIGF0dHJpYnV0ZSBuYW1lIHRvIGdldCwgc2V0IG9yIHJlbW92ZSwgb3IgYSBvYmplY3QgdG8gc2V0IG11bHRpcGxlIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB2YWx1ZSBBIHZhbGlkIGF0dHJpYnV0ZSB2YWx1ZSBvciBudWxsIHRvIHJlbW92ZSBhdHRyaWJ1dGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dHIoXG5cdGVsOiBFbGVtZW50LFxuXHRuYW1lOiBzdHJpbmcsXG5cdHZhbHVlPzogc3RyaW5nIHwgbnVsbCxcbik6IHN0cmluZyB8IG51bGwge1xuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKSA/PyBudWxsOyAvLyBGYWxsYmFjayB0byBudWxsIG9ubHkgaWYgZWwgaXMgdW5kZWZpbmVkXG5cdGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuXHRyZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiB1c2VJZFxuICogQHJldHVybiBBIGdlbmVyYXRlZCB1bmlxdWUgSURcbiAqL1xubGV0IGlkID0gMDtcbmNvbnN0IFVVSUQgPSBgJHtEYXRlLm5vdygpLnRvU3RyaW5nKDM2KX0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDUpfWA7XG5leHBvcnQgZnVuY3Rpb24gdXNlSWQoZWw6IEVsZW1lbnQpIHtcblx0aWYgKCFlbC5pZCkgZWwuaWQgPSBgJHtVVUlEfSR7KytpZH1gO1xuXHRyZXR1cm4gZWwuaWQ7XG59XG5cbi8vIEludGVybmFsIGhlbHBlciBmb3Igb24gLyBvZmZcbmNvbnN0IGV2ZW50cyA9IChcblx0YWN0aW9uOiBcImFkZFwiIHwgXCJyZW1vdmVcIixcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Wy4uLnJlc3RdOiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPiwgLy8gU3ByZWF0IHRvIG1ha2UgYSBjb3B5IG9mIHRoZSBhcnJheVxuKTogdm9pZCA9PiB7XG5cdGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuXHRcdHJlc3RbMF0gPSB0eXBlO1xuXHRcdGVsZW1lbnRbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXSguLi5yZXN0KTtcblx0fVxufTtcblxuLyoqXG4gKiBvblxuICogQHBhcmFtIGVsZW1lbnQgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gdHlwZXMgQSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGV2ZW50IHR5cGVzXG4gKiBAcGFyYW0gbGlzdGVuZXIgQW4gZXZlbnQgbGlzdGVuZXIgZnVuY3Rpb24gb3IgbGlzdGVuZXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBvbiA9IChcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Li4ucmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj5cbik6IHZvaWQgPT4ge1xuXHRpZiAoVU5CSU5EICYmIChlbGVtZW50ID09PSB3aW5kb3cgfHwgZWxlbWVudCA9PT0gZG9jdW1lbnQpKVxuXHRcdFVOQklORC5wdXNoKCgpID0+IG9mZihlbGVtZW50LCAuLi5yZXN0KSk7XG5cdGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbn07XG5cbi8qKlxuICogb2ZmXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9mZiA9IChcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Li4ucmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj5cbik6IHZvaWQgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBXaW5kb3cge1xuXHRcdF9tdGRzVW5iaW5kRXZlbnRzPzogTWFwPHN0cmluZywgQXJyYXk8KCkgPT4gdm9pZD4+O1xuXHR9XG59XG5cbi8qKlxuICogb25Mb2FkZWRcbiAqIEBkZXNjcmlwdGlvbiBSdW5zIGEgY2FsbGJhY2sgd2hlbiB3aW5kb3cgaXMgbG9hZGVkIGluIGJyb3dzZXIsIGFuZCBlbnN1cmVzIGV2ZW50cyBhcmUgdW5ib3VuZCBpZiBob3QgcmVsb2FkaW5nXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIHJ1biB3aGVuIHRoZSBwYWdlIGlzIHJlYWR5XG4gKi9cbmxldCBVTkJJTkQ6IEFycmF5PCgpID0+IHZvaWQ+IHwgbnVsbCA9IG51bGw7XG5leHBvcnQgY29uc3Qgb25Mb2FkZWQgPSAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcblx0aWYgKCFJU19CUk9XU0VSKSByZXR1cm47XG5cdGlmICghd2luZG93Ll9tdGRzVW5iaW5kRXZlbnRzKSB3aW5kb3cuX210ZHNVbmJpbmRFdmVudHMgPSBuZXcgTWFwKCk7XG5cblx0Y29uc3QgcnVuID0gKCkgPT5cblx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0Y29uc3Qga2V5ID0gU3RyaW5nKGNhbGxiYWNrKS5yZXBsYWNlKC8oXFxufFxccykvZywgXCJcIik7XG5cdFx0XHR3aW5kb3cuX210ZHNVbmJpbmRFdmVudHM/LmdldChrZXkpPy5mb3JFYWNoKCh1bmJpbmQpID0+IHVuYmluZCgpKTsgLy8gVW5iaW5kIHByZXZpb3VzIGV2ZW50c1xuXHRcdFx0VU5CSU5EID0gW107IC8vIFByZXBhcmUgdG8gbGlzdGVuIGZvciBuZXdseSBib3VuZCBldmVudHNcblx0XHRcdGNhbGxiYWNrKCk7IC8vIFJ1biBiaW5kaW5nXG5cdFx0XHR3aW5kb3cuX210ZHNVbmJpbmRFdmVudHM/LnNldChrZXksIFVOQklORD8uc2xpY2UoMCkpOyAvLyBTdG9yZSBmb3IgbGF0ZXIgdW5iaW5kaW5nXG5cdFx0XHRVTkJJTkQgPSBudWxsOyAvLyBTdG9wIGxpc3RlbmluZyBmb3IgbmV3bHkgYm91bmQgZXZlbnRzXG5cdFx0fSk7XG5cblx0aWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikgcnVuKCk7XG5cdGVsc2Ugb24od2luZG93LCBcImxvYWRcIiwgcnVuKTtcbn07XG5cbi8qKlxuICogU2Nyb2xsZXIgdGFyZ2VzIGhlbHBpbmcgYW5jaG9yUG9zaXRpb25cbiAqL1xuY29uc3QgU0NST0xMRVIgPSBJU19CUk9XU0VSID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSA6IG51bGw7IC8vIFVzZWQgdG8gZW5zdXJlIHdlIGhhdmUgc2Nyb2xsYWJpbGl0eSB1bmRlclxuY29uc3QgVEFSR0VUUyA9IG5ldyBNYXA8RWxlbWVudCwgKCkgPT4gdm9pZD4oKTsgLy8gU3RvcmUgY3VycmVudCBvcGVuIHBvcHBlcnMgYW5kIHRoZWlyIHVwZGF0ZSBmdW5jdGlvbnNcbmNvbnN0IFRBUkdFVFNfVVBEQVRFID0gKCkgPT4ge1xuXHRmb3IgKGNvbnN0IFtfLCB1cGRhdGVdIG9mIFRBUkdFVFMpIHVwZGF0ZSgpO1xufTtcblxuaWYgKFNDUk9MTEVSKSB7XG5cdFNDUk9MTEVSLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO3BhZGRpbmc6MXB4O3RvcDowO2xlZnQ6MHB4XCI7XG5cdG9uKHdpbmRvdywgXCJsb2FkLHJlc2l6ZSxzY3JvbGxcIiwgVEFSR0VUU19VUERBVEUsIFFVSUNLX0VWRU5UKTtcbn1cblxuLyoqXG4gKiBhbmNob3JQb3NpdGlvblxuICogQHBhcmFtIHRhcmdldCBUaGUgRWxlbWVudCB0byBwb3NpdGlvblxuICogQHBhcmFtIGFuY2hvciBUaGUgRWxlbWVudCB0byB1c2UgYXMgYW5jaG9yXG4gKi9cbmNvbnN0IFBPU0lUSU9OID0geyB0b3A6IDAsIHJpZ2h0OiAxLCBib3R0b206IDIsIGxlZnQ6IDMgfTsgLy8gU3BlZWQgdXAgYnkgdXNpbmcgYSBjb25zdCBtYXBcblxuZXhwb3J0IHR5cGUgQW5jaG9yUG9zaXRpb24gPSBrZXlvZiB0eXBlb2YgUE9TSVRJT047XG5cbmV4cG9ydCBmdW5jdGlvbiBhbmNob3JQb3NpdGlvbihcblx0dGFyZ2V0OiBIVE1MRWxlbWVudCxcblx0YW5jaG9yOiBFbGVtZW50IHwgZmFsc2UsXG5cdHBsYWNlPzogc3RyaW5nIHwgbnVtYmVyLFxuXHRmb3JjZT86IGJvb2xlYW4sXG4pIHtcblx0Y29uc3QgcG9zaXRpb24gPVxuXHRcdFBPU0lUSU9OW3BsYWNlIGFzIGtleW9mIHR5cGVvZiBQT1NJVElPTl0gPz9cblx0XHROdW1iZXIocGxhY2UpID8/XG5cdFx0UE9TSVRJT04uYm90dG9tO1xuXG5cdGlmIChhbmNob3IgPT09IGZhbHNlIHx8ICFhbmNob3IuaXNDb25uZWN0ZWQgfHwgIXRhcmdldC5pc0Nvbm5lY3RlZClcblx0XHRyZXR1cm4gVEFSR0VUUy5kZWxldGUodGFyZ2V0KTsgLy8gU3RvcCB3YXRjaGluZyBpZiBhbmNob3IgaXMgcmVtb3ZlZCBmcm9tIERPTVxuXHRpZiAoIVNDUk9MTEVSPy5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoU0NST0xMRVIgfHwgXCJcIik7IC8vIEVuc3VyZSB3ZSBoYXZlIHRoZSBzY3JvbGxlclxuXHRpZiAoIVRBUkdFVFMuaGFzKHRhcmdldCkpXG5cdFx0VEFSR0VUUy5zZXQodGFyZ2V0LCAoKSA9PiBhbmNob3JQb3NpdGlvbih0YXJnZXQsIGFuY2hvciwgcG9zaXRpb24sIGZvcmNlKSk7XG5cblx0Y29uc3QgeyBvZmZzZXRXaWR0aDogdGFyZ2V0Vywgb2Zmc2V0SGVpZ2h0OiB0YXJnZXRIIH0gPSB0YXJnZXQ7XG5cdGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wIH0gPSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdGNvbnN0IGlzSFRNTEFuY2hvciA9IGFuY2hvciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OyAvLyBTVkcgb3IgWE1MIGVsZW1lbnRzIGRvZXMgbm90IGhhdmUgb2Zmc2V0V2lkdGggb3Igb2Zmc2V0SGVpZ2h0XG5cdGNvbnN0IGFuY2hvclcgPSBpc0hUTUxBbmNob3IgPyBhbmNob3Iub2Zmc2V0V2lkdGggOiBhbmNob3IuY2xpZW50V2lkdGg7XG5cdGNvbnN0IGFuY2hvckggPSBpc0hUTUxBbmNob3IgPyBhbmNob3Iub2Zmc2V0SGVpZ2h0IDogYW5jaG9yLmNsaWVudEhlaWdodDtcblxuXHQvLyBHZXQgdmlzdWFsIHZpZXdwb3J0IGluZm9cblx0Y29uc3Qgdmlld1cgPSB3aW5kb3cudmlzdWFsVmlld3BvcnQ/LndpZHRoIHx8IHdpbmRvdy5pbm5lcldpZHRoO1xuXHRjb25zdCB2aWV3SCA9IHdpbmRvdy52aXN1YWxWaWV3cG9ydD8uaGVpZ2h0IHx8IHdpbmRvdy5pbm5lckhlaWdodDtcblx0Y29uc3Qgc2Nyb2xsWCA9IHdpbmRvdy5wYWdlWE9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDtcblx0Y29uc3Qgc2Nyb2xsWSA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuXG5cdGNvbnN0IGFuY2hvclggPSBNYXRoLnJvdW5kKGxlZnQgLSAoYW5jaG9yVyAtIHdpZHRoKSAvIDIpOyAvLyBDb3JyZWN0IGZvciBDU1MgdHJhbnNmb3JtIHNjYWxlXG5cdGNvbnN0IGFuY2hvclkgPSBNYXRoLnJvdW5kKHRvcCAtIChhbmNob3JIIC0gaGVpZ2h0KSAvIDIpOyAvLyBDb3JyZWN0IGZvciBDU1MgdHJhbnNmb3JtIHNjYWxlXG5cdGNvbnN0IGNlbnRlclggPSBNYXRoLm1pbihcblx0XHRNYXRoLm1heCgxMCwgYW5jaG9yWCAtICh0YXJnZXRXIC0gYW5jaG9yVykgLyAyKSxcblx0XHR2aWV3VyAtIHRhcmdldFcgLSAxMCxcblx0KTtcblx0Y29uc3QgY2VudGVyWSA9IE1hdGgubWluKFxuXHRcdE1hdGgubWF4KDEwLCBhbmNob3JZIC0gKHRhcmdldEggLSBhbmNob3JIKSAvIDIpLFxuXHRcdHZpZXdIIC0gdGFyZ2V0SCAtIDEwLFxuXHQpO1xuXG5cdC8vIFVzZSB2aXN1YWwgdmlld3BvcnQgZGltZW5zaW9ucyBmb3Igc3BhY2UgY2FsY3VsYXRpb25zXG5cdGNvbnN0IGhhc1NwYWNlTGVmdCA9IGFuY2hvclggLSB0YXJnZXRXID4gMDtcblx0Y29uc3QgaGFzU3BhY2VSaWdodCA9IGFuY2hvclggKyBhbmNob3JXICsgdGFyZ2V0VyA8IHZpZXdXO1xuXHRjb25zdCBoYXNTcGFjZU92ZXIgPSBhbmNob3JZIC0gdGFyZ2V0SCA+IDA7XG5cdGNvbnN0IGhhc1NwYWNlVW5kZXIgPSBhbmNob3JZICsgYW5jaG9ySCArIHRhcmdldEggPCB2aWV3SDtcblxuXHRjb25zdCBpc1ZlcnRpY2FsID0gcG9zaXRpb24gPT09IFBPU0lUSU9OLnRvcCB8fCBwb3NpdGlvbiA9PT0gUE9TSVRJT04uYm90dG9tO1xuXHRjb25zdCBpc1JpZ2h0ID1cblx0XHQocG9zaXRpb24gPT09IFBPU0lUSU9OLnJpZ2h0ICYmIChmb3JjZSB8fCBoYXNTcGFjZVJpZ2h0KSkgfHwgIWhhc1NwYWNlTGVmdDsgLy8gQWx3YXlzIHBvc2l0aW9uIHJpZ2h0IHdoZW4gbm8gaGFzU3BhY2VMZWZ0LCBhcyBubyBPUyBzY3JvbGxzIGZ1cnRoZXIgbGVmdCB0aGFuIDBcblx0Y29uc3QgaXNVbmRlciA9XG5cdFx0KHBvc2l0aW9uID09PSBQT1NJVElPTi5ib3R0b20gJiYgKGZvcmNlIHx8IGhhc1NwYWNlVW5kZXIpKSB8fCAhaGFzU3BhY2VPdmVyOyAvLyBBbHdheXMgcG9zaXRpb24gdW5kZXIgd2hlbiBubyBoYXNTcGFjZU92ZXIsIGFzIG5vIE9TIHNjcm9sbHMgZnVydGhlciB1cCB0aGFuIDBcblxuXHQvLyBDYWxjdWxhdGUgcG9zaXRpb25zIGluIHZpZXdwb3J0IGNvb3JkaW5hdGVzXG5cdGNvbnN0IHZpZXdYID0gTWF0aC5yb3VuZChcblx0XHRpc1ZlcnRpY2FsID8gY2VudGVyWCA6IGlzUmlnaHQgPyBhbmNob3JYICsgYW5jaG9yVyA6IGFuY2hvclggLSB0YXJnZXRXLFxuXHQpO1xuXHRjb25zdCB2aWV3WSA9IE1hdGgucm91bmQoXG5cdFx0aXNWZXJ0aWNhbCA/IChpc1VuZGVyID8gYW5jaG9yWSArIGFuY2hvckggOiBhbmNob3JZIC0gdGFyZ2V0SCkgOiBjZW50ZXJZLFxuXHQpO1xuXG5cdC8vIFVzZSBhYnNvbHV0ZSBwb3NpdGlvbmluZ1xuXHR0YXJnZXQuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cdHRhcmdldC5zdHlsZS5sZWZ0ID0gYCR7dmlld1ggKyBzY3JvbGxYfXB4YDtcblx0dGFyZ2V0LnN0eWxlLnRvcCA9IGAke3ZpZXdZICsgc2Nyb2xsWX1weGA7XG5cblx0U0NST0xMRVI/LnN0eWxlLnNldFByb3BlcnR5KFxuXHRcdFwidHJhbnNsYXRlXCIsXG5cdFx0YDBweCAke01hdGgucm91bmQoaXNVbmRlciA/IHNjcm9sbFggKyBhbmNob3JZICsgYW5jaG9ySCArIHRhcmdldEggKyAzMCA6IDApfXB4YCxcblx0KTtcbn1cblxuLyoqXG4gKiBTcGVlZCB1cCBNdXRhdGlvbk9ic2VydmVyIGJ5IGRlYm91bmNpbmcgYW5kIG9ubHkgcnVubmluZyB3aGVuIHBhZ2UgaXMgdmlzaWJsZVxuICogQHJldHVybiBuZXcgTXV0YWlvbk9ic2VydmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrOiBNdXRhdGlvbkNhbGxiYWNrKSB7XG5cdGxldCBxdWV1ZSA9IDA7XG5cblx0Y29uc3Qgb25GcmFtZSA9ICgpID0+IHNldFRpbWVvdXQob25UaW1lciwgMjAwKTsgLy8gVXNlIGJvdGggcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGFuZCBzZXRUaW1lb3V0IHRvIGRlYm91bmNlIGFuZCBvbmx5IHJ1biB3aGVuIHZpc2libGVcblx0Y29uc3Qgb25UaW1lciA9ICgpID0+IHtcblx0XHRjYWxsYmFjayhbXSwgb2JzZXJ2ZXIpO1xuXHRcdG9ic2VydmVyLnRha2VSZWNvcmRzKCk7IC8vIENsZWFyIHJlY29yZHMgdG8gYXZvaWQgcnVubmluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuXHRcdHF1ZXVlID0gMDtcblx0fTtcblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG5cdFx0aWYgKCFxdWV1ZSkgcXVldWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUob25GcmFtZSk7XG5cdH0pO1xuXG5cdHJldHVybiBvYnNlcnZlcjtcbn1cblxuLyoqXG4gKiBvbk11dGF0aW9uXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IG9ic2VydmUgbXV0YXRpb25zIG9uIGEgc3BlY2lmaWMgY2xhc3MgbmFtZVxuICogQHBhcmFtIGVsIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgY2xhc3MgbmFtZSB0byBvYnNlcnZlXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIHJ1biB3aGVuIG11dGF0aW9ucyBhcmUgZGV0ZWN0ZWRcbiAqL1xuY29uc3QgTVVUQVRPUlMgPSBuZXcgV2Vha01hcDxFbGVtZW50LCBBcnJheTwoKSA9PiB2b2lkPj4oKTtcbmV4cG9ydCBjb25zdCBvbk11dGF0aW9uID0gPFQgZXh0ZW5kcyBFbGVtZW50Pihcblx0ZWw6IEVsZW1lbnQsXG5cdGNsYXNzTmFtZTogc3RyaW5nLFxuXHRjYWxsYmFjazogKGVsZW1zOiBIVE1MQ29sbGVjdGlvbk9mPFQ+KSA9PiB2b2lkLFxuKSA9PiB7XG5cdGNvbnN0IGVsZW1zID0gZWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpO1xuXHRjb25zdCBtdXRhdG9yID0gTVVUQVRPUlMuZ2V0KGVsKSB8fCBbXTtcblxuXHRpZiAoIW11dGF0b3IubGVuZ3RoKSB7XG5cdFx0TVVUQVRPUlMuc2V0KGVsLCBtdXRhdG9yKTtcblx0XHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKChfLCBvYnNlcnZlcikgPT4ge1xuXHRcdFx0aWYgKGVsLmlzQ29ubmVjdGVkICYmIG11dGF0b3I/Lmxlbmd0aCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIG11dGF0b3IpIGNhbGxiYWNrKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRNVVRBVE9SUy5kZWxldGUoZWwpO1xuXHRcdFx0fVxuXHRcdH0pLm9ic2VydmUoZWwsIHtcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogW1wiY2xhc3NcIiwgXCJoaWRkZW5cIl0sXG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdFx0c3VidHJlZTogdHJ1ZSxcblx0XHR9KTtcblx0fVxuXHRtdXRhdG9yLnB1c2goKCkgPT4gY2FsbGJhY2soZWxlbXMgYXMgSFRNTENvbGxlY3Rpb25PZjxUPikpO1xufTtcblxuLyoqXG4gKiBpc0lucHV0TGlrZVxuICogQGRlc2NyaXB0aW9uIENoZWNrIGlmIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKiBAcGFyYW0gZWwgVGhlIGVsZW1lbnQgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKi9cbmV4cG9ydCBjb25zdCBpc0lucHV0TGlrZSA9IChlbDogdW5rbm93bik6IGVsIGlzIEhUTUxJbnB1dEVsZW1lbnQgPT5cblx0ZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcInZhbGlkaXR5XCIgaW4gZWwgJiZcblx0IShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KTtcblxuLyoqXG4gKiB0b0N1c3RvbUVsZW1lbnRQcm9wc1xuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBjb252ZXJ0IHByb3BzIHRvIGN1c3RvbSBlbGVtZW50IGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSBwcm9wcyBUaGUgcHJvcHMgdG8gY29udmVydFxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBwcm9wc1xuICovXG5jb25zdCBTRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xuZXhwb3J0IGNvbnN0IHRvQ3VzdG9tRWxlbWVudFByb3BzID0gKFxuXHR7IGNsYXNzTmFtZSwgaGlkZGVuLCBvcGVuLCAuLi5yZXN0IH06IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRrbGFzcz86IHN0cmluZyxcbikgPT4ge1xuXHRyZXN0LnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyA9IHRydWU7IC8vIE1ha2UgTmV4dC5qcyBoYXBweVxuXHRpZiAocmVzdFtTRUxFQ1RFRF0gIT09IHVuZGVmaW5lZClcblx0XHRyZXN0W1NFTEVDVEVEXSA9IGAkeyhyZXN0W1NFTEVDVEVEXSB8fCBcImZhbHNlXCIpICE9PSBcImZhbHNlXCJ9YDsgLy8gRW5zdXJlIGFyaWEtc2VsZWN0ZWQgYm9vbGVhbiBpcyBzdHJpbmdcblx0aWYgKGNsYXNzTmFtZSB8fCBrbGFzcykgcmVzdC5jbGFzcyA9IGNsc3goa2xhc3MsIGNsYXNzTmFtZSB8fCBcIlwiKTsgLy8gVXNlIGNsYXNzIGluc3RlYWQgb2YgY2xhc3NOYW1lXG5cdGlmIChoaWRkZW4pIHJlc3QuaGlkZGVuID0gdHJ1ZTsgLy8gRW5zdXJlIGJvb2xlYW4gcHJvcCBiZWhhdmlvdXJcblx0aWYgKG9wZW4pIHJlc3Qub3BlbiA9IHRydWU7IC8vIEVuc3VyZSBib29sZWFuIHByb3AgYmVoYXZpb3VyXG5cdHJldHVybiByZXN0O1xufTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBJU19CUk9XU0VSLCBvbiwgb25Mb2FkZWQsIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19CUkVBRENSVU1CUyA9IGAuJHtzdHlsZXMuYnJlYWRjcnVtYnMuc3BsaXQoXCIgXCIpWzBdfWA7XG5jb25zdCBDU1NfQ0hJUCA9IGAuJHtzdHlsZXMuY2hpcC5zcGxpdChcIiBcIilbMF19YDtcbmNvbnN0IENTU19IRUxQVEVYVCA9IGAuJHtzdHlsZXMuaGVscHRleHQuc3BsaXQoXCIgXCIpWzBdfWA7XG5jb25zdCBDU1NfUEFHSU5BVElPTiA9IGAuJHtzdHlsZXMucGFnaW5hdGlvbi5zcGxpdChcIiBcIilbMF19YDtcbmNvbnN0IENMSUNLUyA9IGBzdW1tYXJ5LHUtc3VtbWFyeSxhLGJ1dHRvbixbcm9sZT1cInRhYlwiXSxbcm9sZT1cImJ1dHRvblwiXWA7XG5jb25zdCBFVkVOVFMgPSBcImNsaWNrLHRvZ2dsZSxzdWJtaXQsY2hhbmdlXCI7XG5jb25zdCBNQVRPTU8gPSBcIm1hdHRpbHN5bmV0Lm1hdG9tby5jbG91ZFwiO1xuXG50eXBlIE1hdG9tbyA9IChcblx0fCBzdHJpbmdcblx0fCBudW1iZXJcblx0fCBib29sZWFuXG5cdHwgKCh0aGlzOiBSZWNvcmQ8c3RyaW5nLCA8VD4oKSA9PiBUPikgPT4gdm9pZClcbilbXTtcbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIFdpbmRvdyB7XG5cdFx0X3BhcT86IE1hdG9tb1tdO1xuXHRcdF9tdG0/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+W107XG5cdFx0X210ZHNUcmFja2luZz86IEFuYWx5dGljc0FjdGlvbnNbXCJpbml0XCJdO1xuXHRcdF9tdGRzVW50cmFjaz86ICgpID0+IHZvaWQ7XG5cdH1cbn1cblxuZXhwb3J0IHR5cGUgQW5hbHl0aWNzQWN0aW9ucyA9IHtcblx0aW5pdDoge1xuXHRcdGVuYWJsZWQ/OiBib29sZWFuIHwgXCJkZWJ1Z1wiO1xuXHR9ICYgKFxuXHRcdHwge1xuXHRcdFx0XHRtYXRvbW9JZDogbnVtYmVyIHwgc3RyaW5nO1xuXHRcdFx0XHRtYXRvbW9UYWdNYW5hZ2VySWQ/OiBuZXZlcjtcblx0XHQgIH1cblx0XHR8IHtcblx0XHRcdFx0bWF0b21vSWQ/OiBuZXZlcjtcblx0XHRcdFx0bWF0b21vVGFnTWFuYWdlcklkOiBzdHJpbmc7XG5cdFx0ICB9XG5cdCk7XG5cdHBhZ2V2aWV3OiB7XG5cdFx0dXJsPzogc3RyaW5nO1xuXHRcdHRpdGxlPzogc3RyaW5nO1xuXHR9O1xuXHRldmVudDoge1xuXHRcdGNhdGVnb3J5OiBzdHJpbmc7XG5cdFx0YWN0aW9uOiBzdHJpbmc7XG5cdFx0bmFtZT86IHN0cmluZztcblx0XHR2YWx1ZT86IG51bWJlcjtcblx0fTtcblx0c2VhcmNoOiB7XG5cdFx0cXVlcnk6IHN0cmluZztcblx0XHRjYXRlZ29yeT86IHN0cmluZztcblx0XHRyZXN1bHRzPzogbnVtYmVyO1xuXHR9O1xuXHRtYXRvbW86IE1hdG9tbztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhbmFseXRpY3M8QWN0aW9uIGV4dGVuZHMga2V5b2YgQW5hbHl0aWNzQWN0aW9ucz4oXG5cdGFjdGlvbjogQWN0aW9uLFxuXHRhcmdzID0ge30gYXMgQW5hbHl0aWNzQWN0aW9uc1tBY3Rpb25dLFxuKSB7XG5cdGlmICghSVNfQlJPV1NFUikgcmV0dXJuO1xuXHRpZiAoIXdpbmRvdy5fcGFxKSB7XG5cdFx0d2luZG93Ll9wYXEgPSBbXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcIkhlYXRtYXBTZXNzaW9uUmVjb3JkaW5nOjpkaXNhYmxlXCJdKTsgLy8gRGlzYWJsZSBoZWF0bWFwcyBieSBkZWZhdWx0IGFzIHRoaXMgcmVxdWlyZSBjb29raWVzXG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJlbmFibGVMaW5rVHJhY2tpbmdcIl0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0VHJhY2tlclVybFwiLCBgaHR0cHM6Ly8ke01BVE9NT30vbWF0b21vLnBocGBdKTtcblx0fVxuXHRpZiAoIXdpbmRvdy5fbXRtKSB7XG5cdFx0d2luZG93Ll9tdG0gPSB3aW5kb3cuX210bSB8fCBbXTsgLy8gUHJlcGFyZSBNYXRvbW8gVGFnIE1hbmFnZXJcblx0XHR3aW5kb3cuX210bS5wdXNoKHsgXCJtdG0uc3RhcnRUaW1lXCI6IERhdGUubm93KCksIGV2ZW50OiBcIm10bS5TdGFydFwiIH0pO1xuXHR9XG5cblx0aWYgKGFjdGlvbiA9PT0gXCJpbml0XCIpIHtcblx0XHR3aW5kb3cuX210ZHNUcmFja2luZyA9IHtcblx0XHRcdGVuYWJsZWQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSAhPT0gXCJsb2NhbGhvc3RcIixcblx0XHRcdC4uLndpbmRvdy5fbXRkc1RyYWNraW5nLFxuXHRcdFx0Li4uYXJncyxcblx0XHR9IGFzIEFuYWx5dGljc0FjdGlvbnNbXCJpbml0XCJdO1xuXHRcdGNvbnN0IHsgZW5hYmxlZCwgbWF0b21vSWQsIG1hdG9tb1RhZ01hbmFnZXJJZCB9ID0gd2luZG93Ll9tdGRzVHJhY2tpbmc7XG5cblx0XHRpZiAobWF0b21vSWQpIHdpbmRvdy5fcGFxLnB1c2goW1wic2V0U2l0ZUlkXCIsIG1hdG9tb0lkXSk7XG5cdFx0aWYgKGVuYWJsZWQpIHtcblx0XHRcdGNvbnN0IHNyYyA9IG1hdG9tb1RhZ01hbmFnZXJJZFxuXHRcdFx0XHQ/IGBodHRwczovL2Nkbi5tYXRvbW8uY2xvdWQvJHtNQVRPTU99L2NvbnRhaW5lcl8ke21hdG9tb1RhZ01hbmFnZXJJZH0uanNgXG5cdFx0XHRcdDogYGh0dHBzOi8vY2RuLm1hdG9tby5jbG91ZC8ke01BVE9NT30vbWF0b21vLmpzYDtcblx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHNjcmlwdFtzcmM9XCIke3NyY31cIl1gKSB8fFxuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZChcblx0XHRcdFx0XHRPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIiksIHtcblx0XHRcdFx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0XHRcdFx0c3JjLFxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdGlmICh3aW5kb3cuX210ZHNUcmFja2luZz8uZW5hYmxlZCA9PT0gZmFsc2UpIHJldHVybjtcblx0aWYgKHdpbmRvdy5fbXRkc1RyYWNraW5nPy5lbmFibGVkID09PSBcImRlYnVnXCIpXG5cdFx0cmV0dXJuIGNvbnNvbGUuaW5mbyhgYW5hbHl0aWNzKFwiJHthY3Rpb259XCIsIGAsIGFyZ3MsIFwiKVwiKTtcblxuXHRpZiAoYWN0aW9uID09PSBcInBhZ2V2aWV3XCIpIHtcblx0XHRjb25zdCB7IHVybCwgdGl0bGUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcInBhZ2V2aWV3XCJdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0Q3VzdG9tVXJsXCIsIHVybCB8fCBsb2NhdGlvbi5ocmVmXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXREb2N1bWVudFRpdGxlXCIsIHRpdGxlIHx8IGRvY3VtZW50LnRpdGxlXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJ0cmFja1BhZ2VWaWV3XCJdKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwiZXZlbnRcIikge1xuXHRcdGNvbnN0IHsgY2F0ZWdvcnksIGFjdGlvbiwgbmFtZSwgdmFsdWUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcImV2ZW50XCJdO1xuXHRcdGNvbnN0IGV2ZW50ID0gW1widHJhY2tFdmVudFwiLCBjYXRlZ29yeSwgYWN0aW9uLCBuYW1lLCB2YWx1ZV07XG5cblx0XHQvLyBXZSBkbyBub3Qgd2FudCB0byB0cmFjayBldmVudHMgd2l0aCBoYXNoIGluIFVSTCBhcyB0aGlzIGNhdXNlcyBoYXJkLXRvLXJlYWQgZGF0YSxcblx0XHQvLyBzbyB0ZW1wb3JhcmlseSByZW1vdmUgdGhlIGhhc2ggcGFydCwgYW5kIGFkZCBpdCBiYWNrIGFmdGVyIHRoZSBldmVudCBpcyBwdXNoZWRcblx0XHRsZXQgdXJsID0gbG9jYXRpb24uaHJlZjtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcblx0XHRcdGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dXJsID0gdGhpcy5nZXRDdXJyZW50VXJsPHN0cmluZz4oKTtcblx0XHRcdH0sXG5cdFx0XSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRDdXN0b21VcmxcIiwgdXJsLnNwbGl0KFwiI1wiKVswXV0pOyAvLyBTa2lwIGhhc2ggcGFydCBvZiBVUkxcblx0XHR3aW5kb3cuX3BhcS5wdXNoKGV2ZW50LmZpbHRlcigodikgPT4gdiAhPT0gdW5kZWZpbmVkKSk7IC8vIFB1c2ggZXZlbnRcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldEN1c3RvbVVybFwiLCB1cmxdKTsgLy8gUmV2ZXJydCB0byBvcmlnaW5hbCBVUkwgd2l0aCBoYXNoXG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcInNlYXJjaFwiKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0cXVlcnksXG5cdFx0XHRjYXRlZ29yeSA9IGZhbHNlLFxuXHRcdFx0cmVzdWx0cyA9IGZhbHNlLFxuXHRcdH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJzZWFyY2hcIl07XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJ0cmFja1NpdGVTZWFyY2hcIiwgcXVlcnksIGNhdGVnb3J5LCByZXN1bHRzXSk7XG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcIm1hdG9tb1wiKSB7XG5cdFx0d2luZG93Ll9wYXEucHVzaChhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJtYXRvbW9cIl0pO1xuXHR9XG59XG5cbmNvbnN0IGhhbmRsZVRyYWNrID0gKGV2ZW50OiBFdmVudCkgPT5cblx0d2luZG93Ll9tdGRzVHJhY2tpbmc/LmVuYWJsZWQgJiYgc2V0VGltZW91dChwcm9jZXNzVHJhY2ssIDAsIGV2ZW50KTsgLy8gTGV0IG90aGVyIGV2ZW50cyBwcm9jZXNzIGZpcnN0XG5cbmNvbnN0IHByb2Nlc3NUcmFjayA9ICh7IHR5cGUsIHRhcmdldCB9OiBFdmVudCkgPT4ge1xuXHRjb25zdCBlbCA9IHR5cGUgPT09IFwiY2xpY2tcIiA/ICh0YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihDTElDS1MpIDogdGFyZ2V0O1xuXHRpZiAoIShlbCBpbnN0YW5jZW9mIEVsZW1lbnQpIHx8IGF0dHIoZWwsIFwiZGF0YS1hbmFseXRpY3NcIikgPT09IFwiaWdub3JlXCIpXG5cdFx0cmV0dXJuO1xuXG5cdGxldCBhY3Rpb24gPSBcImNsaWNrXCI7XG5cdGxldCBjYXRlZ29yeSA9IFwiQnV0dG9uXCI7XG5cdGxldCBuYW1lID0gbGFiZWwoZWwpIHx8IGhlYWRpbmcoZWwpIHx8IGF0dHIoZWwsIFwiZGF0YS10b29sdGlwXCIpIHx8IFwiXCI7XG5cblx0aWYgKHR5cGUgPT09IFwic3VibWl0XCIpIHtcblx0XHRjYXRlZ29yeSA9IFwiRm9ybVwiO1xuXHRcdGFjdGlvbiA9IFwic3VibWl0XCI7XG5cdFx0bmFtZSA9IG5hbWUgfHwgZG9jdW1lbnQudGl0bGU7XG5cdH0gZWxzZSBpZiAodHlwZSA9PT0gXCJ0b2dnbGVcIikge1xuXHRcdGlmICghZWwubWF0Y2hlcyhcImRpYWxvZzptb2RhbFwiKSkgcmV0dXJuOyAvLyBTa2lwIG5vbi1tb2RhbCBkaWFsb2dzXG5cdFx0Y2F0ZWdvcnkgPSBcIkRpYWxvZ1wiO1xuXHRcdGFjdGlvbiA9IFwib3BlblwiO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT09IFwiY2hhbmdlXCIpIHtcblx0XHRjb25zdCB0eXBlID0gYXR0cihlbCwgXCJ0eXBlXCIpO1xuXHRcdGNvbnN0IGdyb3VwID1cblx0XHRcdHR5cGUgPT09IFwiY2hlY2tib3hcIiB8fCB0eXBlID09PSBcInJhZGlvXCIgPyBlbC5jbG9zZXN0KFwiZmllbGRzZXRcIikgOiBudWxsO1xuXG5cdFx0Y2F0ZWdvcnkgPSBcIkZvcm1cIjtcblx0XHRhY3Rpb24gPSBcImNoYW5nZVwiO1xuXHRcdG5hbWUgPVxuXHRcdFx0bGFiZWwoZ3JvdXAgfHwgZWwpIHx8XG5cdFx0XHR0ZXh0KGdyb3VwPy5xdWVyeVNlbGVjdG9yKFwibGVnZW5kXCIpKSB8fFxuXHRcdFx0dGV4dCgoZWwgYXMgSFRNTElucHV0RWxlbWVudCk/LmxhYmVscz8uWzBdKTtcblx0fSBlbHNlIGlmIChhdHRyKGVsLCBcInJvbGVcIikgPT09IFwidGFiXCIpIHtcblx0XHRjYXRlZ29yeSA9IFwiVGFiXCI7XG5cdFx0YWN0aW9uID0gXCJuYXZpZ2F0ZVwiO1xuXHR9IGVsc2UgaWYgKGF0dHIoZWwsIFwicG9wb3ZlcnRhcmdldFwiKSkge1xuXHRcdGlmICghcG9wb3ZlcihlbCk/Lm1hdGNoZXMoXCI6cG9wb3Zlci1vcGVuXCIpKSByZXR1cm47IC8vIFNraXAgaWYgbm90IG9wZW5cblx0XHRjYXRlZ29yeSA9IGVsLmNsb3Nlc3QoQ1NTX0hFTFBURVhUKSA/IFwiSGVscFRleHRcIiA6IFwiUG9wb3ZlclwiO1xuXHRcdGFjdGlvbiA9IFwib3BlblwiO1xuXHR9IGVsc2UgaWYgKGVsLm5vZGVOYW1lLmVuZHNXaXRoKFwiU1VNTUFSWVwiKSkge1xuXHRcdGlmICghKGVsLnBhcmVudEVsZW1lbnQgYXMgSFRNTERldGFpbHNFbGVtZW50KS5vcGVuKSByZXR1cm47IC8vIFNraXAgaWYgbm90IG9wZW5cblx0XHRjYXRlZ29yeSA9IFwiRGV0YWlsc1wiO1xuXHRcdGFjdGlvbiA9IFwib3BlblwiO1xuXHR9IGVsc2UgaWYgKGF0dHIoZWwsIFwiZGF0YS1jb21tYW5kXCIpID09PSBcInRvZ2dsZS1hcHAtZXhwYW5kZWRcIikge1xuXHRcdGNvbnN0IG9wZW4gPSBzdHlsZShlbCwgXCItLW10ZHMtdG9vbHRpcC1wb3NpdGlvblwiKSA9PT0gXCJub25lXCI7XG5cdFx0Y2F0ZWdvcnkgPSBcIlNpZGViYXJcIjtcblx0XHRhY3Rpb24gPSBvcGVuID8gXCJleHBhbmRcIiA6IFwibWluaW1pemVcIjtcblx0XHRuYW1lID0gKG9wZW4gJiYgYXR0cihlbCwgXCJkYXRhLXRvb2x0aXBcIikpIHx8IHRleHQoZWwpO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoQ1NTX0JSRUFEQ1JVTUJTKSkge1xuXHRcdGNhdGVnb3J5ID0gXCJCcmVhZGNydW1ic1wiO1xuXHRcdGFjdGlvbiA9IFwibmF2aWdhdGVcIjtcblx0fSBlbHNlIGlmIChlbC5jbG9zZXN0KENTU19QQUdJTkFUSU9OKSkge1xuXHRcdGNhdGVnb3J5ID0gXCJQYWdpbnRhdGlvblwiO1xuXHRcdGFjdGlvbiA9IFwibmF2aWdhdGVcIjtcblx0fSBlbHNlIGlmIChlbC5jbG9zZXN0KENTU19DSElQKSkge1xuXHRcdGNhdGVnb3J5ID0gXCJDaGlwXCI7XG5cdFx0YWN0aW9uID0gZWwuaGFzQXR0cmlidXRlKFwiZGF0YS1yZW1vdmFibGVcIikgPyBcInJlbW92ZVwiIDogXCJjbGlja1wiO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoXCJ0aFthcmlhLXNvcnRdXCIpKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIlRhYmxlXCI7XG5cdFx0YWN0aW9uID0gXCJzb3J0XCI7XG5cdH0gZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBIVE1MQW5jaG9yRWxlbWVudCkge1xuXHRcdGNhdGVnb3J5ID0gXCJMaW5rXCI7XG5cdFx0YWN0aW9uID0gZWwucHJvdG9jb2wgPT09IFwibWFpbHRvOlwiID8gXCJlbWFpbFwiIDogXCJuYXZpZ2F0ZVwiO1xuXHRcdGlmIChlbC5oYXNBdHRyaWJ1dGUoXCJkb3dubG9hZFwiKSkgYWN0aW9uID0gXCJkb3dubG9hZFwiO1xuXHRcdGVsc2UgaWYgKGVsLmhhc2ggJiYgZWwuaHJlZi5zdGFydHNXaXRoKGxvY2F0aW9uLmhyZWYuc3BsaXQoXCIjXCIpWzBdKSlcblx0XHRcdGFjdGlvbiA9IFwiYW5jaG9yXCI7IC8vIE9ubHkgdHJhY2sgYXMgYW5jaG9yIGlmIHNhbWUgcGFnZVxuXHR9IGVsc2UgaWYgKGVsLmhhc0F0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIikpIHtcblx0XHRpZiAoYXR0cihlbCwgXCJhcmlhLWV4cGFuZGVkXCIpICE9PSBcInRydWVcIikgcmV0dXJuOyAvLyBTa2lwIGlmIG5vdCBvcGVuXG5cdFx0Y2F0ZWdvcnkgPSBcIkV4cGFuZFwiO1xuXHRcdGFjdGlvbiA9IFwib3BlblwiO1xuXHR9XG5cblx0Ly8gUmVzcGVjdCBhdHRyaWJ1dGVzIGFuZCBzZW5kXG5cdGFuYWx5dGljcyhcImV2ZW50XCIsIHtcblx0XHRjYXRlZ29yeTogYXR0cihlbCwgXCJkYXRhLWFuYWx5dGljcy1jYXRlZ29yeVwiKSA/PyBjYXRlZ29yeSxcblx0XHRhY3Rpb246IGF0dHIoZWwsIFwiZGF0YS1hbmFseXRpY3MtYWN0aW9uXCIpID8/IGFjdGlvbixcblx0XHRuYW1lOiBhdHRyKGVsLCBcImRhdGEtYW5hbHl0aWNzLW5hbWVcIikgPz8gbmFtZSxcblx0fSk7XG59O1xuXG4vLyBVdGlsaXRpZXNcbmNvbnN0IHRleHQgPSAoZWw/OiBFbGVtZW50IHwgbnVsbCkgPT4gZWw/LnRleHRDb250ZW50Py50cmltKCkgfHwgXCJcIjtcbmNvbnN0IGxhYmVsID0gKGVsPzogRWxlbWVudCB8IG51bGwpID0+IChlbCAmJiBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIikpIHx8IFwiXCI7XG5jb25zdCBwb3BvdmVyID0gKGVsOiBFbGVtZW50KSA9PlxuXHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhdHRyKGVsLCBcInBvcG92ZXJ0YXJnZXRcIikgfHwgXCJcIik7XG5jb25zdCBzdHlsZSA9IChlbDogRWxlbWVudCwga2V5OiBzdHJpbmcpID0+XG5cdHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKS5nZXRQcm9wZXJ0eVZhbHVlKGtleSk/LnRyaW0oKTtcbmNvbnN0IGhlYWRpbmcgPSAoZWw6IEVsZW1lbnQpID0+IHtcblx0Y29uc3QgYm9keSA9IHRleHQoZWwpO1xuXHRjb25zdCBoZWFkID0gdGV4dChlbC5xdWVyeVNlbGVjdG9yKFwiaDEsaDIsaDMsaDQsaDUsaDZcIikpOyAvLyBOb3RlOiBoZWFkIG1pZ2h0IGJlIGVtcHR5IHN0cmluZyAnJ1xuXHRyZXR1cm4gKGJvZHkuc3RhcnRzV2l0aChoZWFkKSAmJiBoZWFkKSB8fCBib2R5LnNsaWNlKDAsIDEwMCkudHJpbSgpOyAvLyBMaW1pdCB0byAxMDAgY2hhcmFjdGVyc1xufTtcblxub25Mb2FkZWQoKCkgPT4gb24oZG9jdW1lbnQsIEVWRU5UUywgaGFuZGxlVHJhY2ssIFFVSUNLX0VWRU5UKSk7XG4iLCJpZiAoXG5cdHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0d2luZG93LkNTU1N0eWxlU2hlZXQgJiZcblx0ZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzXG4pXG5cdCgoKSA9PiB7XG5cdFx0Y29uc3Qga2V5ID0gXCItLW10ZHMtYXBwLWV4cGFuZGVkXCI7XG5cdFx0Y29uc3Qgc2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXHRcdGNvbnN0IHByZXYgPSAoKSA9PiAhd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk/LmluY2x1ZGVzKFwiZmFsc2VcIik7XG5cblx0XHRkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMucHVzaChzaGVldCk7XG5cdFx0d2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZCA9IChmb3JjZSkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgbmV4dCA9IGZvcmNlID8/ICFwcmV2KCk7XG5cdFx0XHRcdHNoZWV0LnJlcGxhY2VTeW5jPy4oYDpyb290IHsgJHtrZXl9OiB2YXIoJHtrZXl9LS0ke25leHR9KX1gKTtcblx0XHRcdFx0d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgbmV4dCk7XG5cdFx0XHR9IGNhdGNoIChfZXJyKSB7fSAvLyBsb2NhbFN0b3JhZ2UgaXMgZnVsbCBvciByZXBsYWNlU3luYyBpcyBub3Qgc3VwcG9ydGVkXG5cdFx0fTtcblxuXHRcdC8vIFNldCBhbmQgc3RvcmUgaW5pdGlhbCBzdGF0ZVxuXHRcdHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQocHJldigpKTtcblx0fSkoKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBkZWJvdW5jZSwgb24sIG9uTG9hZGVkLCBvbk11dGF0aW9uLCBRVUlDS19FVkVOVCB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IFwiLi9hcHAtdG9nZ2xlXCI7XG5cbmNvbnN0IENTU19BUFAgPSBzdHlsZXMuYXBwLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19TVElDS1kgPSBzdHlsZXMuc3RpY2t5LnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19UT0dHTEUgPSAnW2RhdGEtY29tbWFuZD1cInRvZ2dsZS1hcHAtZXhwYW5kZWRcIl0nO1xuY29uc3QgQ1NTX1NJREVCQVIgPSBgLiR7Q1NTX0FQUH0gPiBkaWFsb2csLiR7Q1NTX0FQUH0gZGlhbG9nIH4gbWFpbmA7XG5cbmNvbnN0IHVzZVRyYW5zaXRpb24gPSAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcblx0aWYgKCFkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKSBjYWxsYmFjaygpO1xuXHRlbHNlIGRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24oY2FsbGJhY2spO1xufTtcblxuZXhwb3J0IGNvbnN0IHRvZ2dsZUFwcEV4cGFuZGVkID0gKGZvcmNlPzogYm9vbGVhbikgPT5cblx0Ly8gQHRzLWV4cGVjdC1lcnJvciB3aW5kb3cubXRkc0FwcFRvZ2dsZSBjb21lcyBmcm9tIGFwcC10b2dnbGUuanNcblx0dXNlVHJhbnNpdGlvbigoKSA9PiB3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkPy4oZm9yY2UpKTtcblxuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlQ2xpY2soeyB0YXJnZXQ6IGVsLCBkZWZhdWx0UHJldmVudGVkOiBzdG9wIH06IEV2ZW50KSB7XG5cdGNvbnN0IGxpbmsgPSAoZWwgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImFcIik7XG5cdGlmIChsaW5rPy5jbG9zZXN0KFwiZGlhbG9nXCIpICYmIGxpbms/LmNsb3Nlc3QoQ1NTX1NJREVCQVIpKVxuXHRcdHJldHVybiBjbG9zZVNpZGViYXIoKTsgLy8gQ2xvc2Ugc2lkZWJhciBpZiBsaW5rIGlzIGNsaWNrZWQgaW5zaWRlIHNpZGViYXJcblxuXHRpZiAoc3RvcCB8fCAhKGVsIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpIHx8ICFlbC5tYXRjaGVzKENTU19UT0dHTEUpKVxuXHRcdHJldHVybjtcblx0Y29uc3QgaXNEZXNrdG9wID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCkucG9zaXRpb24gPT09IFwic3RpY2t5XCI7XG5cblx0aWYgKGlzRGVza3RvcCkgdG9nZ2xlQXBwRXhwYW5kZWQoKTtcblx0ZWxzZVxuXHRcdHVzZVRyYW5zaXRpb24oKCkgPT4ge1xuXHRcdFx0Y29uc3Qgc2lkZWJhciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpYWxvZ0VsZW1lbnQ+KENTU19TSURFQkFSKTtcblx0XHRcdHNpZGViYXI/LnNldEF0dHJpYnV0ZShcImRhdGEtY2xvc2VkYnlcIiwgXCJhbnlcIik7IC8vIEFsbG93IGNsb3NpbmcgYnkgY2xpY2tpbmcgb3V0c2lkZVxuXHRcdFx0c2lkZWJhcj8uc2hvd01vZGFsKCk7XG5cdFx0fSk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlU2lkZWJhcigpIHtcblx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGlhbG9nRWxlbWVudD4oQ1NTX1NJREVCQVIpPy5jbG9zZSgpO1xufVxuXG4vLyBTY3JvbGwgc3RhdGVcbmxldCBNSU5fWSA9IDA7IC8vIE9mZnNldCB0byBhdm9pZCBzY3JvbGwganVtcCB3aGVuIHN0aWNreSBpcyBzZXQgdG8gcmVsYXRpdmVcbmxldCBTQ1JPTExfVVA6IGJvb2xlYW47XG5sZXQgU1RJQ0sgPSAwOyAvLyAtMSA9IHN0aWNrIHRvcCwgMCA9IHJlbGF0aXZlLCAxID0gc3RpY2sgYm90dG9tXG5sZXQgU1RJQ0tfRUw6IEhUTUxFbGVtZW50O1xubGV0IFNUSUNLX0ggPSAwO1xubGV0IFNUSUNLX1kgPSAwO1xubGV0IFNUVUNLID0gZmFsc2U7IC8vIFVzZWQgdG8gZmlndXJlIGlmIG5hdiBpcyBsYXJnZXIgdGhhbiB2aWV3cG9ydFxubGV0IFdJTl9IID0gMDtcbmxldCBXSU5fWSA9IDA7XG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKFtzdGlja3ldOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRTVElDS19FTCA9IHN0aWNreTtcblx0aGFuZGxlU2Nyb2xsKCk7IC8vIFJ1biBvbiBjb25uZWN0XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVNjcm9sbCgpIHtcblx0aWYgKCFTVElDS19FTD8uaXNDb25uZWN0ZWQpIHJldHVybjtcblx0Y29uc3QgTkVYVF9ZID0gd2luZG93LnNjcm9sbFk7XG5cdGNvbnN0IE5FWFRfVVAgPSBORVhUX1kgPCBXSU5fWTtcblx0V0lOX1kgPSBORVhUX1k7XG5cblx0Ly8gT25seSBjYWxjdWxhdGUgaWYgc2Nyb2xsIGRpcmVjdGlvbiBoYXMgY2hhbmdlZFxuXHRpZiAoTkVYVF9VUCAhPT0gU0NST0xMX1VQKSB7XG5cdFx0TUlOX1kgPSAoU1RJQ0tfRUwucGFyZW50RWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIHx8IDApICsgV0lOX1k7XG5cdFx0U0NST0xMX1VQID0gTkVYVF9VUDtcblx0XHRTVElDS19IID0gU1RJQ0tfRUwub2Zmc2V0SGVpZ2h0O1xuXHRcdFNUSUNLX1kgPSBTVElDS19FTC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyBXSU5fWTtcblx0XHRTVFVDSyA9IFNUSUNLX0VMLm9mZnNldEhlaWdodCA8PSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdFx0V0lOX0ggPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdH1cblxuXHRpZiAoU1RJQ0sgPT09IC0xICYmIFNUVUNLKSByZXR1cm47IC8vIEFsbHdheXMgc3RpY2t5IHdoZW4gc2lkZWJhciBpcyBzbWFsbGVyIHRoYW4gdmlld3BvcnRcblx0aWYgKFNUSUNLICE9PSAtMSAmJiAoU1RVQ0sgfHwgKFNDUk9MTF9VUCAmJiBXSU5fWSA8PSBTVElDS19ZKSkpIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwic3RpY2t5XCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgXCIwcHhcIik7XG5cdFx0U1RJQ0sgPSAtMTsgLy8gTm90IHN0aWNraW5nIHRvIHRvcCBhbmQgc2lkZWJhciBpcyBzbWFsbGVyIHRoYW4gdmlld3BvcnQgb3Igc2Nyb2xsaW5nIHVwXG5cdH0gZWxzZSBpZiAoU1RJQ0sgPT09IC0xICYmICFTQ1JPTExfVVApIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwicmVsYXRpdmVcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBgJHtNYXRoLm1heCgwLCBXSU5fWSAtIE1JTl9ZKX1weGApO1xuXHRcdFNUSUNLID0gMDsgLy8gU3RpY2tpbmcgdG8gdG9wIGFuZCBzY3JvbGxpbmcgZG93blxuXHR9IGVsc2UgaWYgKFNUSUNLICE9PSAxICYmICFTQ1JPTExfVVAgJiYgV0lOX1kgKyBXSU5fSCA+PSBTVElDS19ZICsgU1RJQ0tfSCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJzdGlja3lcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBgJHtXSU5fSCAtIFNUSUNLX0h9cHhgKTtcblx0XHRTVElDSyA9IDE7IC8vIE5vdCBzdGlja2luZyB0byBib3R0b20gYW5kIHNjcm9sbGluZyBkb3duXG5cdH0gZWxzZSBpZiAoU1RJQ0sgPT09IDEgJiYgU0NST0xMX1VQKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInJlbGF0aXZlXCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7U1RJQ0tfWSAtIE1JTl9ZfXB4YCk7XG5cdFx0U1RJQ0sgPSAwOyAvLyBTdGlja2luZyB0byBib3R0b20gYW5kIHNjcm9sbGluZyB1cFxuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19TVElDS1ksIGhhbmRsZU11dGF0aW9uKTtcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlVG9nZ2xlQ2xpY2ssIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcInJlc2l6ZVwiLCBkZWJvdW5jZShjbG9zZVNpZGViYXIsIDEwMCksIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcInNjcm9sbFwiLCBoYW5kbGVTY3JvbGwsIFFVSUNLX0VWRU5UKTtcbn0pO1xuIiwiY29uc3QgZ2V0U3RlcHMgPSAoXG5cdG5vdzogbnVtYmVyLFxuXHRtYXg6IG51bWJlcixcblx0c2hvdyA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbikgPT4ge1xuXHRjb25zdCBvZmZzZXQgPSAoc2hvdyAtIDEpIC8gMjtcblx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heChNYXRoLm1pbihub3cgLSBNYXRoLmZsb29yKG9mZnNldCksIG1heCAtIHNob3cgKyAxKSwgMSk7XG5cdGNvbnN0IGVuZCA9IE1hdGgubWluKE1hdGgubWF4KG5vdyArIE1hdGguY2VpbChvZmZzZXQpLCBzaG93KSwgbWF4KTtcblx0Y29uc3QgcGFnZXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBlbmQgKyAxIC0gc3RhcnQgfSwgKF8sIGkpID0+IGkgKyBzdGFydCk7XG5cblx0aWYgKHNob3cgPiA0ICYmIHN0YXJ0ID4gMSkgcGFnZXMuc3BsaWNlKDAsIDIsIDEsIDApO1xuXHRpZiAoc2hvdyA+IDMgJiYgZW5kIDwgbWF4KSBwYWdlcy5zcGxpY2UoLTIsIDIsIDAsIG1heCk7XG5cdHJldHVybiBwYWdlcztcbn07XG5cbmV4cG9ydCBjb25zdCBwYWdpbmF0aW9uID0gKHsgY3VycmVudCA9IDEsIHRvdGFsID0gMTAsIHNob3cgPSA3IH0pID0+ICh7XG5cdHByZXY6IGN1cnJlbnQgPiAxID8gY3VycmVudCAtIDEgOiAwLFxuXHRuZXh0OiBjdXJyZW50IDwgdG90YWwgPyBjdXJyZW50ICsgMSA6IDAsXG5cdHBhZ2VzOiBnZXRTdGVwcyhjdXJyZW50LCB0b3RhbCwgc2hvdykubWFwKChwYWdlLCBpbmRleCkgPT4gKHtcblx0XHRjdXJyZW50OiBwYWdlID09PSBjdXJyZW50ICYmIChcInBhZ2VcIiBhcyBjb25zdCksXG5cdFx0a2V5OiBga2V5LSR7cGFnZX0tJHtpbmRleH1gLFxuXHRcdHBhZ2UsXG5cdH0pKSxcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19CUkVBRENSVU1CUyA9IHN0eWxlcy5icmVhZGNydW1icy5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKGJyZWFkY3J1bWJzOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRmb3IgKGNvbnN0IGJyZWFkY3VtYnMgb2YgYnJlYWRjcnVtYnMpXG5cdFx0YnJlYWRjdW1icy5xdWVyeVNlbGVjdG9yQWxsKFwibGkgYVwiKS5mb3JFYWNoKChjcnVtYiwgaW5kZXgsIHsgbGVuZ3RoIH0pID0+IHtcblx0XHRcdGF0dHIoY3J1bWIsIFwiYXJpYS1jdXJyZW50XCIsIGluZGV4ID09PSBsZW5ndGggLSAxID8gXCJwYWdlXCIgOiBudWxsKTtcblx0XHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19CUkVBRENSVU1CUywgaGFuZGxlTXV0YXRpb24pLFxuKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRhdHRyLFxuXHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyLFxuXHRJU19CUk9XU0VSLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdFFVSUNLX0VWRU5ULFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0RJQUxPRyA9IHN0eWxlcy5kaWFsb2cuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgRElBTE9HUyA9IElTX0JST1dTRVJcblx0PyAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcblx0XHRcdENTU19ESUFMT0csXG5cdFx0KSBhcyBIVE1MQ29sbGVjdGlvbk9mPEhUTUxEaWFsb2dFbGVtZW50Pilcblx0OiBbXTtcblxuY29uc3QgaGFuZGxlTW9kYWwgPSAoKSA9PiB7XG5cdGZvciAoY29uc3QgZGlhbG9nIG9mIERJQUxPR1MpXG5cdFx0aWYgKGRpYWxvZy5pc0Nvbm5lY3RlZCAmJiBkaWFsb2cuc2hvd01vZGFsICYmIGRpYWxvZy5jbG9zZSkge1xuXHRcdFx0aWYgKGRpYWxvZy5tYXRjaGVzKCdbb3Blbl06bm90KFtkYXRhLW1vZGFsPVwiZmFsc2VcIl0pOm5vdCg6bW9kYWwpJykpIHtcblx0XHRcdFx0YXR0cihkaWFsb2csIFwib3BlblwiLCBudWxsKTsgLy8gVXNpbmcgYXR0cmlidXRlIGluc3RlYWQgb2YgLmNsb3NlIHRvIGF2b2lkIGBjbG9zZWAgZXZlbnRcblx0XHRcdFx0ZGlhbG9nLnNob3dNb2RhbCgpO1xuXHRcdFx0fSBlbHNlIGlmIChkaWFsb2cubWF0Y2hlcyhcIjptb2RhbDpub3QoW29wZW5dKVwiKSkge1xuXHRcdFx0XHRhdHRyKGRpYWxvZywgXCJvcGVuXCIsIFwiXCIpOyAvLyBTZXQgYXMgb3BlblxuXHRcdFx0XHRkaWFsb2cuY2xvc2UoKTsgLy8gU28gd2UgY29ycmVjbHR5IGNhbiBjYWxsIC5jbG9zZSwgcmVtb3ZpbmcgPGRpYWxvZz4gZnJvbSAjdG9wLWxheWVyXG5cdFx0XHR9XG5cdFx0fVxufTtcblxuY29uc3QgaGFuZGxlQ2xpY2sgPSAoeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5LCB0YXJnZXQ6IGVsIH06IE1vdXNlRXZlbnQpID0+IHtcblx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTERpYWxvZ0VsZW1lbnQgJiYgYXR0cihlbCwgXCJkYXRhLWNsb3NlZGJ5XCIpID09PSBcImFueVwiKSB7XG5cdFx0Y29uc3QgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfSA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdGNvbnN0IGlzSW5zaWRlID0gdG9wIDw9IHkgJiYgeSA8PSBib3R0b20gJiYgbGVmdCA8PSB4ICYmIHggPD0gcmlnaHQ7XG5cdFx0aWYgKCFpc0luc2lkZSkgcmV0dXJuIGVsLmNsb3NlKCk7XG5cdH1cblx0Y29uc3QgZGlhbG9nID0gKGVsIGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oXCJkaWFsb2dcIik7XG5cdGNvbnN0IGNsb3NlID0gZGlhbG9nICYmIChlbCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKCdbZGF0YS1jb21tYW5kPVwiY2xvc2VcIl0nKTtcblx0aWYgKGNsb3NlKSBkaWFsb2cuY2xvc2UoKTtcbn07XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlQ2xpY2sgYXMgRXZlbnRMaXN0ZW5lciwgUVVJQ0tfRVZFTlQpO1xuXHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKGhhbmRsZU1vZGFsKS5vYnNlcnZlKFxuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHR7XG5cdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFtcIm9wZW5cIl0sXG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdFx0c3VidHJlZTogdHJ1ZSxcblx0XHR9LFxuXHQpO1xufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb24sIG9uTG9hZGVkLCBRVUlDS19FVkVOVCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5mdW5jdGlvbiBoYW5kbGVJbmplY3QoZXZlbnQ6IEV2ZW50ICYgeyBhbmltYXRpb25OYW1lPzogc3RyaW5nIH0pIHtcblx0aWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgIT09IHN0eWxlcy5fZXJyb3JzdW1tYXJ5KSByZXR1cm47XG5cdGNvbnN0IGZpcnN0ID0gKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KT8uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cblx0aWYgKGZpcnN0IGluc3RhbmNlb2YgSFRNTEhlYWRpbmdFbGVtZW50KSB7XG5cdFx0YXR0cihmaXJzdCwgXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuXHRcdGZpcnN0LmZvY3VzKCk7IC8vIEF1dG9mb2N1cyBmaXJzdCBoZWFkaW5nXG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb24oZG9jdW1lbnQsIFwiYW5pbWF0aW9uZW5kXCIsIGhhbmRsZUluamVjdCwgUVVJQ0tfRVZFTlQpKTtcbiIsInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcblxuLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBTQUZFX0xBQkVMTEVEQlkgPSBgJHtJU19BTkRST0lEID8gXCJkYXRhXCIgOiBcImFyaWFcIn0tbGFiZWxsZWRieWA7XG52YXIgRElTUExBWV9CTE9DSyA9IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2sgfVwiO1xudmFyIEZPQ1VTX09VVExJTkUgPSBcIm91dGxpbmU6IDFweCBkb3R0ZWQ7IG91dGxpbmU6IDVweCBhdXRvIEhpZ2hsaWdodDsgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yXCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXR0YWNoU3R5bGUgPSAoZWxlbWVudCwgY3NzKSA9PiBlbGVtZW50LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gIC8vIFVubmFtZWQgc2xvdCBkb2VzIGF1dG9tYXRpY2FsbHkgcmVuZGVyIGFsbCB0b3AgZWxlbWVudCBub2Rlc1xuICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgY3NzKVxuKTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoX2Vycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgTElWRTtcbnZhciBMSVZFX1NSX0ZJWCA9IDA7XG52YXIgc3BlYWsgPSAodGV4dCkgPT4ge1xuICBpZiAoIUxJVkUpIHtcbiAgICBMSVZFID0gY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBMSVZFLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwXCI7XG4gICAgYXR0cihMSVZFLCBcImFyaWEtbGl2ZVwiLCBcImFzc2VydGl2ZVwiKTtcbiAgfVxuICBpZiAoIUxJVkUuaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKExJVkUpO1xuICBpZiAodGV4dCkgTElWRS50ZXh0Q29udGVudCA9IGAke3RleHR9JHtMSVZFX1NSX0ZJWCsrICUgMiA/IFwiXFx4QTBcIiA6IFwiXCJ9YDtcbn07XG52YXIgc2V0VmFsdWUgPSAoaW5wdXQsIGRhdGEsIHR5cGUgPSBcIlwiKSA9PiB7XG4gIHZhciBfYTIsIF9iO1xuICBjb25zdCBldmVudCA9IHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUsIGRhdGEsIGlucHV0VHlwZTogdHlwZSB9O1xuICBjb25zdCBwcm90byA9IEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiYmVmb3JlaW5wdXRcIiwgZXZlbnQpKTtcbiAgKF9iID0gKF9hMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIFwidmFsdWVcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChpbnB1dCwgZGF0YSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJpbnB1dFwiLCBldmVudCkpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImNoYW5nZVwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xufTtcbnZhciBJU19QUkVTUyA9IGZhbHNlO1xudmFyIGlzTW91c2VEb3duID0gKGV2ZW50KSA9PiB7XG4gIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSBcIm1vdXNldXBcIikgSVNfUFJFU1MgPSBmYWxzZTtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2Vkb3duXCIpIHtcbiAgICBJU19QUkVTUyA9IHRydWU7XG4gICAgb24oZG9jdW1lbnQsIFwibW91c2V1cFwiLCBpc01vdXNlRG93biwgeyBvbmNlOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiBJU19QUkVTUztcbn07XG5cbi8vIHUtb3B0aW9uLnRzXG52YXIgRElTQUJMRUQgPSBcImRpc2FibGVkXCI7XG52YXIgU0VMRUNURUQgPSBcInNlbGVjdGVkXCI7XG52YXIgVUhUTUxPcHRpb25FbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW0RJU0FCTEVELCBTRUxFQ1RFRF07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKCFJU19JT1MpIHRoaXMudGFiSW5kZXggPSAtMTtcbiAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKFwicm9sZVwiKSkgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJvcHRpb25cIik7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtZGlzYWJsZWRcIiwgYCR7dGhpcy5kaXNhYmxlZH1gKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1zZWxlY3RlZFwiLCBgJHt0aGlzLnNlbGVjdGVkfWApO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB3aGV0aGVyIHRoZSBvcHRpb24gaW4gdGhlIGxpc3QgYm94IGlzIHRoZSBkZWZhdWx0IGl0ZW0uICovXG4gIGdldCBkZWZhdWx0U2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXNbU0VMRUNURURdO1xuICB9XG4gIHNldCBkZWZhdWx0U2VsZWN0ZWQodmFsdWUpIHtcbiAgICB0aGlzW1NFTEVDVEVEXSA9IHZhbHVlO1xuICB9XG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBESVNBQkxFRCkgIT09IG51bGw7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBESVNBQkxFRCwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgLyoqIFJldHJpZXZlcyBhIHJlZmVyZW5jZSB0byB0aGUgZm9ybSB0aGF0IHRoZSBvYmplY3QgaXMgZW1iZWRkZWQgaW4uICovXG4gIGdldCBmb3JtKCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJmb3JtXCIpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiBhbiBvcHRpb24gaW4gYSBsaXN0IGJveC4gKi9cbiAgZ2V0IGluZGV4KCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLigoX2EyID0gdGhpcy5wYXJlbnRFbGVtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLm9wdGlvbnMpIHx8IFt0aGlzXVxuICAgIF0uaW5kZXhPZih0aGlzKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgYSB2YWx1ZSB0aGF0IHlvdSBjYW4gdXNlIHRvIGltcGxlbWVudCB5b3VyIG93biBsYWJlbCBmdW5jdGlvbmFsaXR5IGZvciB0aGUgb2JqZWN0LiAqL1xuICBnZXQgbGFiZWwoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKF9hMiA9IGF0dHIodGhpcywgXCJsYWJlbFwiKSkgIT0gbnVsbCA/IF9hMiA6IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgbGFiZWwodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwibGFiZWxcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBTRUxFQ1RFRCkgIT09IG51bGw7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBTRUxFQ1RFRCwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSB0ZXh0IHN0cmluZyBzcGVjaWZpZWQgYnkgdGhlIG9wdGlvbiB0YWcuICovXG4gIGdldCB0ZXh0KCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gdGhpcy50ZXh0Q29udGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIH1cbiAgc2V0IHRleHQodGV4dCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB0ZXh0O1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgdmFsdWUgd2hpY2ggaXMgcmV0dXJuZWQgdG8gdGhlIHNlcnZlciB3aGVuIHRoZSBmb3JtIGNvbnRyb2wgaXMgc3VibWl0dGVkLiAqL1xuICBnZXQgdmFsdWUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKF9hMiA9IGF0dHIodGhpcywgXCJ2YWx1ZVwiKSkgIT0gbnVsbCA/IF9hMiA6IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwidmFsdWVcIiwgdmFsdWUpO1xuICB9XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1vcHRpb25cIiwgVUhUTUxPcHRpb25FbGVtZW50KTtcblxuLy8gdS1kYXRhbGlzdC50c1xudmFyIExJVkVfVElNRVI7XG52YXIgSU5QVVRfREVCT1VOQ0UgPSAwO1xudmFyIElTX01PQklMRSA9IElTX0lPUyB8fCBJU19BTkRST0lEO1xudmFyIEVWRU5UUyA9IFwiY2xpY2ssZm9jdXNvdXQsaW5wdXQsa2V5ZG93bixtb3VzZWRvd24sbW91c2V1cFwiO1xudmFyIEVWRU5UU19JTlBVVCA9IFwiZm9jdXMsZm9jdXNpbixibHVyLGZvY3Vzb3V0XCI7XG52YXIgVEVYVFMgPSB7XG4gIHNpbmd1bGFyOiBcIiVkIGhpdFwiLFxuICBwbHVyYWw6IFwiJWQgaGl0c1wiXG59O1xudmFyIFVIVE1MRGF0YUxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3RleHRzID0gX19zcHJlYWRWYWx1ZXMoe30sIFRFWFRTKTtcbiAgICB0aGlzLl92YWx1ZSA9IFwiXCI7XG4gICAgYXR0YWNoU3R5bGUoXG4gICAgICB0aGlzLFxuICAgICAgYCR7RElTUExBWV9CTE9DS31cblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbikgeyBkaXNwbGF5OiBibG9jazsgY3Vyc29yOiBwb2ludGVyIH1cblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbjpmb2N1cykgeyAke0ZPQ1VTX09VVExJTkV9IH1cblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvblthcmlhLWhpZGRlbj1cInRydWVcIl0pLFxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uW2Rpc2FibGVkXSksXG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb25baGlkZGVuXSkgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQgfWBcbiAgICApO1xuICB9XG4gIC8vIFVzZWQgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBhbm5vdW5jZW1lbnRzXG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJpZFwiLCAuLi5PYmplY3Qua2V5cyhURVhUUykubWFwKChrZXkpID0+IGBkYXRhLXNyLSR7a2V5fWApXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLmhpZGRlbiA9IHRydWU7XG4gICAgdGhpcy5fcm9vdCA9IGdldFJvb3QodGhpcyk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJsaXN0Ym94XCIpO1xuICAgIGF0dHIodGhpcywgXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuICAgIG9uKHRoaXMuX3Jvb3QsIFwiZm9jdXNpblwiLCB0aGlzKTtcbiAgICBvbih0aGlzLl9yb290LCBcImZvY3VzXCIsIHRoaXMsIHRydWUpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywge1xuICAgICAgYXR0cmlidXRlRmlsdGVyOiBbXCJkaXNhYmxlZFwiLCBcImhpZGRlblwiLCBcImxhYmVsXCIsIFwidmFsdWVcIl0sXG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG9mZih0aGlzLl9yb290IHx8IHRoaXMsIFwiZm9jdXNcIiwgdGhpcywgdHJ1ZSk7XG4gICAgb2ZmKHRoaXMuX3Jvb3QgfHwgdGhpcywgXCJmb2N1c2luXCIsIHRoaXMpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICAgIGRpc2Nvbm5lY3RJbnB1dCh0aGlzKTtcbiAgICB0aGlzLl9yb290ID0gdm9pZCAwO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBfcHJldiwgbmV4dCkge1xuICAgIGNvbnN0IHRleHQgPSBwcm9wID09IG51bGwgPyB2b2lkIDAgOiBwcm9wLnNwbGl0KFwiZGF0YS1zci1cIilbMV07XG4gICAgY29uc3QgY3NzID0gYGlucHV0W2xpc3Q9XCIke3RoaXMuaWR9XCJdYDtcbiAgICBpZiAoVEVYVFNbdGV4dF0pIHRoaXMuX3RleHRzW3RleHRdID0gbmV4dCB8fCBURVhUU1t0ZXh0XTtcbiAgICBlbHNlIGlmICh0aGlzLl9yb290KSB7XG4gICAgICBpZiAodGhpcy5faW5wdXQpIHNldHVwSW5wdXQodGhpcywgdGhpcy5faW5wdXQpO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiB0aGlzLl9yb290LnF1ZXJ5U2VsZWN0b3JBbGwoY3NzKSlcbiAgICAgICAgc2V0dXBJbnB1dCh0aGlzLCBpbnB1dCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgeyB0YXJnZXQsIHR5cGUgfSA9IGV2ZW50O1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKHR5cGUgPT09IFwiY2xpY2tcIikgb25DbGljayh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiZm9jdXNcIiB8fCB0eXBlID09PSBcImZvY3VzaW5cIikgb25Gb2N1cyh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiYmx1clwiIHx8IHR5cGUgPT09IFwiZm9jdXNvdXRcIikgb25CbHVyKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIG9uS2V5RG93bih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgdGhpcy5jb250YWlucyh0YXJnZXQpKVxuICAgICAgaXNNb3VzZURvd24oZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcIm11dGF0aW9uXCIgfHwgdHlwZSA9PT0gXCJpbnB1dFwiKSB7XG4gICAgICBjbGVhclRpbWVvdXQoSU5QVVRfREVCT1VOQ0UpO1xuICAgICAgSU5QVVRfREVCT1VOQ0UgPSBzZXRUaW1lb3V0KG9uSW5wdXQsIDAsIHRoaXMsIGV2ZW50KTtcbiAgICB9XG4gIH1cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ1LW9wdGlvblwiKTtcbiAgfVxufTtcbnZhciBpc0Rpc2FibGVkID0gKGlucHV0KSA9PiAoaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IGlucHV0LmRpc2FibGVkKSB8fCAoaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IGlucHV0LnJlYWRPbmx5KSB8fCBmYWxzZTtcbnZhciBzZXRFeHBhbmRlZCA9IChzZWxmLCBvcGVuKSA9PiB7XG4gIHZhciBfYTIsIF9iLCBfYztcbiAgaWYgKHNlbGYuaGlkZGVuICE9PSBvcGVuKSByZXR1cm47XG4gIHNlbGYuaGlkZGVuID0gaXNEaXNhYmxlZChzZWxmID09IG51bGwgPyB2b2lkIDAgOiBzZWxmLl9pbnB1dCkgfHwgIW9wZW47XG4gIChfYTIgPSBtdXRhdGlvbk9ic2VydmVyKHNlbGYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRha2VSZWNvcmRzKCk7XG4gIGNvbnN0IGlzUG9wb3ZlciA9IHNlbGYuaXNDb25uZWN0ZWQgJiYgc2VsZi5wb3BvdmVyICYmICgoX2IgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmlzQ29ubmVjdGVkKSAmJiAoKF9jID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYy5wb3BvdmVyVGFyZ2V0RWxlbWVudCkgPT09IHNlbGY7XG4gIGlmIChzZWxmLl9pbnB1dCkgc2V0dXBJbnB1dChzZWxmLCBzZWxmLl9pbnB1dCwgb3Blbik7XG4gIGlmIChpc1BvcG92ZXIpIGF0dHIoc2VsZiwgXCJwb3BvdmVyXCIsIFwibWFudWFsXCIpO1xuICBpZiAoaXNQb3BvdmVyKSBzZWxmLnRvZ2dsZVBvcG92ZXIob3Blbik7XG4gIGlmIChvcGVuKSBvbklucHV0KHNlbGYpO1xufTtcbnZhciBkaXNjb25uZWN0SW5wdXQgPSAoc2VsZikgPT4ge1xuICBpZiAoIXNlbGYuX2lucHV0KSByZXR1cm47XG4gIG9mZihzZWxmLl9pbnB1dCB8fCBzZWxmLCBFVkVOVFNfSU5QVVQsIHNlbGYpO1xuICBvZmYoc2VsZi5fcm9vdCB8fCBzZWxmLCBFVkVOVFMsIHNlbGYpO1xuICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gIHNlbGYuX2lucHV0ID0gdm9pZCAwO1xufTtcbnZhciBzZXR1cElucHV0ID0gKHNlbGYsIGlucHV0LCBvcGVuID0gZmFsc2UpID0+IHtcbiAgaWYgKHNlbGYucG9wb3ZlcikgYXR0cihpbnB1dCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKHNlbGYpKTtcbiAgb24oaW5wdXQsIEVWRU5UU19JTlBVVCwgc2VsZiwgdHJ1ZSk7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1hdXRvY29tcGxldGVcIiwgXCJsaXN0XCIpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtY29udHJvbHNcIiwgdXNlSWQoc2VsZikpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7IUlTX01PQklMRSB8fCBvcGVufWApO1xuICBhdHRyKGlucHV0LCBcImF1dG9jb21wbGV0ZVwiLCBcIm9mZlwiKTtcbiAgYXR0cihpbnB1dCwgXCJyb2xlXCIsIGlzRGlzYWJsZWQoaW5wdXQpID8gbnVsbCA6IFwiY29tYm9ib3hcIik7XG59O1xudmFyIG9uRm9jdXMgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgaXNJbnB1dCA9IGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQ7XG4gIGlmIChpc0lucHV0ICYmIGV2ZW50LmlzVHJ1c3RlZCkgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gIGlmIChzZWxmLl9pbnB1dCAhPT0gZXZlbnQudGFyZ2V0ICYmIGlzSW5wdXQgJiYgZXZlbnQudGFyZ2V0Lmxpc3QgPT09IHNlbGYpIHtcbiAgICBpZiAoc2VsZi5faW5wdXQpIGRpc2Nvbm5lY3RJbnB1dChzZWxmKTtcbiAgICBzZWxmLl9pbnB1dCA9IGV2ZW50LnRhcmdldDtcbiAgICBzZWxmLl9pbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNcIikpO1xuICAgIHNlbGYuX2lucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJmb2N1c2luXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgYXR0cihzZWxmLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKChfYTIgPSBzZWxmLl9pbnB1dC5sYWJlbHMpID09IG51bGwgPyB2b2lkIDAgOiBfYTJbMF0pKTtcbiAgICBvbihzZWxmLl9yb290IHx8IHNlbGYsIEVWRU5UUywgc2VsZik7XG4gICAgc2V0RXhwYW5kZWQoc2VsZiwgYXR0cihzZWxmLl9pbnB1dCwgXCJpbnB1dG1vZGVcIikgIT09IFwibm9uZVwiKTtcbiAgICBzcGVhaygpO1xuICB9XG59O1xudmFyIG9uQmx1ciA9IChzZWxmLCBldmVudCkgPT4ge1xuICBpZiAoIUlTX0FORFJPSUQgJiYgIWlzTW91c2VEb3duKCkgJiYgc2VsZi5faW5wdXQpXG4gICAgc2V0VGltZW91dChvbkJsdXJyZWQsIDAsIHNlbGYpO1xuICBpZiAoZXZlbnQudGFyZ2V0ID09PSBzZWxmLl9pbnB1dCAmJiBldmVudC5pc1RydXN0ZWQpXG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59O1xudmFyIG9uQmx1cnJlZCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSAoKF9hMiA9IHNlbGYuX3Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuYWN0aXZlRWxlbWVudCkgfHwgbnVsbDtcbiAgY29uc3QgaW5wdXQgPSBzZWxmLl9pbnB1dDtcbiAgaWYgKGlucHV0ICYmIGlucHV0ICE9PSByZWxhdGVkVGFyZ2V0ICYmICFzZWxmLmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImJsdXJcIiwgeyByZWxhdGVkVGFyZ2V0IH0pKTtcbiAgICBpbnB1dC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEZvY3VzRXZlbnQoXCJmb2N1c291dFwiLCB7IGJ1YmJsZXM6IHRydWUsIHJlbGF0ZWRUYXJnZXQgfSlcbiAgICApO1xuICAgIGRpc2Nvbm5lY3RJbnB1dChzZWxmKTtcbiAgfVxufTtcbnZhciBvbkNsaWNrID0gKHNlbGYsIHsgdGFyZ2V0IH0pID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKCFzZWxmLl9pbnB1dCB8fCBzZWxmLl9pbnB1dCA9PT0gdGFyZ2V0KSByZXR1cm4gc2V0RXhwYW5kZWQoc2VsZiwgdHJ1ZSk7XG4gIGZvciAoY29uc3Qgb3B0IG9mIHNlbGYub3B0aW9ucylcbiAgICBpZiAob3B0LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgIGlmIChhdHRyKHNlbGYsIFwiYXJpYS1tdWx0aXNlbGVjdGFibGVcIikgIT09IFwidHJ1ZVwiKSB7XG4gICAgICAgIChfYTIgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xuICAgICAgICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2V0VmFsdWUoc2VsZi5faW5wdXQsIG9wdC52YWx1ZSk7XG4gICAgfVxuICBpZiAoSVNfQU5EUk9JRCkgb25CbHVycmVkKHNlbGYpO1xufTtcbnZhciBvbktleURvd24gPSAoc2VsZiwgZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IGtleSwgdGFyZ2V0LCBhbHRLZXksIGN0cmxLZXksIHNoaWZ0S2V5LCBtZXRhS2V5IH0gPSBlO1xuICBjb25zdCBpc0VzY2FwZSA9IGtleSA9PT0gXCJFc2NhcGVcIiB8fCBrZXkgPT09IFwiRXNjXCI7XG4gIGlmIChhbHRLZXkgfHwgY3RybEtleSB8fCBtZXRhS2V5IHx8IHNoaWZ0S2V5IHx8IGtleSA9PT0gXCJUYWJcIikgcmV0dXJuO1xuICBpZiAoaXNFc2NhcGUgJiYgIXNlbGYuaGlkZGVuKSBlID09IG51bGwgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gIHNldEV4cGFuZGVkKHNlbGYsICFpc0VzY2FwZSk7XG4gIGNvbnN0IG9wdGlvbnMgPSBbLi4uc2VsZi5vcHRpb25zXS5maWx0ZXIoXG4gICAgKGVsKSA9PiBhdHRyKGVsLCBcImFyaWEtaGlkZGVuXCIpICE9PSBcInRydWVcIiAmJiBlbC5vZmZzZXRIZWlnaHRcbiAgKTtcbiAgY29uc3QgcHJldiA9IG9wdGlvbnMuaW5kZXhPZih0YXJnZXQpO1xuICBsZXQgbmV4dCA9IC0xO1xuICBpZiAoa2V5ID09PSBcIkFycm93RG93blwiKSBuZXh0ID0gKHByZXYgKyAxKSAlIG9wdGlvbnMubGVuZ3RoO1xuICBpZiAoa2V5ID09PSBcIkFycm93VXBcIikgbmV4dCA9ICh+cHJldiA/IHByZXYgOiBvcHRpb25zLmxlbmd0aCkgLSAxO1xuICBpZiAofnByZXYpIHtcbiAgICBpZiAoa2V5ID09PSBcIkhvbWVcIiB8fCBrZXkgPT09IFwiUGFnZVVwXCIpIG5leHQgPSAwO1xuICAgIGlmIChrZXkgPT09IFwiRW5kXCIgfHwga2V5ID09PSBcIlBhZ2VEb3duXCIpIG5leHQgPSBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgaWYgKGtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICBvcHRpb25zW3ByZXZdLmNsaWNrKCk7XG4gICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuICBpZiAob3B0aW9uc1tuZXh0XSkgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykgb3B0aW9uLnRhYkluZGV4ID0gLTE7XG4gIGlmIChvcHRpb25zW25leHRdKSBlLnByZXZlbnREZWZhdWx0KCk7XG4gIChfYTIgPSBvcHRpb25zW25leHRdIHx8IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKCk7XG4gIGlmICghb3B0aW9uc1tuZXh0XSAmJiBrZXkgPT09IFwiQXJyb3dVcFwiKVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIF9hMztcbiAgICAgIHJldHVybiAoX2EzID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTMuc2V0U2VsZWN0aW9uUmFuZ2UoOTk5LCA5OTkpO1xuICAgIH0pO1xufTtcbnZhciBvbklucHV0ID0gKHNlbGYsIGUpID0+IHtcbiAgY29uc3QgeyBfdGV4dHMsIF9yb290LCBfaW5wdXQsIG9wdGlvbnMgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gKF9pbnB1dCA9PSBudWxsID8gdm9pZCAwIDogX2lucHV0LnZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBmaWx0ZXIgPSAhc2VsZi5oYXNBdHRyaWJ1dGUoXCJkYXRhLW5vZmlsdGVyXCIpO1xuICBjb25zdCBoaWRkZW4gPSBbXTtcbiAgY29uc3QgdmlzaWJsZSA9IFtdO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKSB7XG4gICAgY29uc3QgaGlkZSA9IG9wdC5kaXNhYmxlZCB8fCBvcHQuaGlkZGVuIHx8IGZpbHRlciAmJiAhb3B0LmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmFsdWUpO1xuICAgIChoaWRlID8gaGlkZGVuIDogdmlzaWJsZSkucHVzaChvcHQpO1xuICB9XG4gIGZvciAoY29uc3Qgb3B0IG9mIGhpZGRlbikgYXR0cihvcHQsIFwiYXJpYS1oaWRkZW5cIiwgXCJ0cnVlXCIpO1xuICBmb3IgKGNvbnN0IG9wdCBvZiB2aXNpYmxlKSBhdHRyKG9wdCwgXCJhcmlhLWhpZGRlblwiLCBcImZhbHNlXCIpO1xuICBjb25zdCB0b3RhbCA9IHZpc2libGUubGVuZ3RoO1xuICBjbGVhclRpbWVvdXQoTElWRV9USU1FUik7XG4gIGlmICgoZSA9PSBudWxsID8gdm9pZCAwIDogZS50eXBlKSA9PT0gXCJpbnB1dFwiICYmIHZhbHVlICE9PSBzZWxmLl92YWx1ZSlcbiAgICBMSVZFX1RJTUVSID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gYCR7IXRvdGFsICYmIHNlbGYuaW5uZXJUZXh0LnRyaW0oKSB8fCBgJHtfdGV4dHNbdG90YWwgPT09IDEgPyBcInNpbmd1bGFyXCIgOiBcInBsdXJhbFwiXX1gLnJlcGxhY2UoXCIlZFwiLCBgJHt0b3RhbH1gKX1gO1xuICAgICAgaWYgKCFzZWxmLmhpZGRlbiAmJiAoX3Jvb3QgPT0gbnVsbCA/IHZvaWQgMCA6IF9yb290LmFjdGl2ZUVsZW1lbnQpID09PSBfaW5wdXQpIHNwZWFrKHRleHQpO1xuICAgICAgc2VsZi5fdmFsdWUgPSB2YWx1ZTtcbiAgICB9LCAxZTMpO1xuICBpZiAoSVNfSU9TKVxuICAgIHZpc2libGUuZm9yRWFjaCgob3B0LCBpZHgpID0+IGF0dHIob3B0LCBcInRpdGxlXCIsIGAke2lkeCArIDF9LyR7dG90YWx9YCkpO1xufTtcbmlmIChJU19CUk9XU0VSKVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwibGlzdFwiLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGdldFJvb3QodGhpcykuZ2V0RWxlbWVudEJ5SWQoYXR0cih0aGlzLCBcImxpc3RcIikgfHwgXCJcIik7XG4gICAgfVxuICB9KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtZGF0YWxpc3RcIiwgVUhUTUxEYXRhTGlzdEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTERhdGFMaXN0RWxlbWVudCB9O1xuIiwiaW1wb3J0IHsgVUhUTUxDb21ib2JveEVsZW1lbnQgfSBmcm9tIFwiQHUtZWxlbWVudHMvdS1jb21ib2JveFwiO1xuaW1wb3J0IHsgVUhUTUxEYXRhTGlzdEVsZW1lbnQgfSBmcm9tIFwiQHUtZWxlbWVudHMvdS1kYXRhbGlzdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdGFuY2hvclBvc2l0aW9uLFxuXHRhdHRyLFxuXHRpc0lucHV0TGlrZSxcblx0b24sXG5cdG9uTG9hZGVkLFxuXHRvbk11dGF0aW9uLFxuXHRRVUlDS19FVkVOVCxcblx0dXNlSWQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRklFTEQgPSBzdHlsZXMuZmllbGQuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1ZBTElEQVRJT05TID0gc3R5bGVzLnZhbGlkYXRpb24uc3BsaXQoXCIgXCIpO1xuY29uc3QgQ1NTX1ZBTElEQVRJT04gPSBDU1NfVkFMSURBVElPTlNbMF07XG5cbmNvbnN0IGdldFRleHQgPSAoc3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24sIGtleTogc3RyaW5nKSA9PlxuXHRzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGAtLW10ZHMtdGV4dC0ke2tleX1gKT8uc2xpY2UoMSwgLTEpIHx8IFwiXCI7IC8vIHNsaWNlIHRvIHRyaW0gcXVvdGVzXG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKGZpZWxkczogSFRNTENvbGxlY3Rpb25PZjxFbGVtZW50PiwgdmFsaWRhdGU/OiBib29sZWFuKSB7XG5cdGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKVxuXHRcdGlmIChmaWVsZC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0Y29uc3QgbGFiZWxzOiBIVE1MTGFiZWxFbGVtZW50W10gPSBbXTtcblx0XHRcdGNvbnN0IGRlc2NzOiBFbGVtZW50W10gPSBbXTtcblx0XHRcdGNvbnN0IHZhbGlkczogRWxlbWVudFtdID0gW107XG5cdFx0XHRsZXQgY29tYm9ib3g6IFVIVE1MQ29tYm9ib3hFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdFx0XHRsZXQgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblx0XHRcdGxldCB2YWxpZCA9IHRydWU7XG5cblx0XHRcdGZvciAoY29uc3QgZWwgb2YgZmllbGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpKSB7XG5cdFx0XHRcdGlmIChlbCBpbnN0YW5jZW9mIEhUTUxMYWJlbEVsZW1lbnQpIGxhYmVscy5wdXNoKGVsKTtcblx0XHRcdFx0ZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBVSFRNTENvbWJvYm94RWxlbWVudCkgY29tYm9ib3ggPSBlbDtcblx0XHRcdFx0ZWxzZSBpZiAoaXNJbnB1dExpa2UoZWwpICYmICFlbC5oaWRkZW4pIGlucHV0ID0gZWw7XG5cdFx0XHRcdGVsc2UgaWYgKGVsLmhhc0F0dHJpYnV0ZShcImRhdGEtZGVzY3JpcHRpb25cIikpIGRlc2NzLnB1c2goZWwpO1xuXHRcdFx0XHRlbHNlIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1ZBTElEQVRJT04pKSB7XG5cdFx0XHRcdFx0dmFsaWQgPSBhdHRyKGVsLCBcImRhdGEtY29sb3JcIikgPT09IFwic3VjY2Vzc1wiIHx8ICFlbC5jbGllbnRIZWlnaHQ7IC8vIE9ubHkgc2V0IGludmFsaWQgaWYgVmFsaWRhdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRcdFx0dmFsaWRzLnB1c2goZWwpO1xuXHRcdFx0XHRcdGRlc2NzLnVuc2hpZnQoZWwpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgSFRNTFBhcmFncmFwaEVsZW1lbnQpXG5cdFx0XHRcdFx0ZGVzY3Muc29tZSgoZGVzYykgPT4gZGVzYy5jb250YWlucyhlbCkpIHx8IGRlc2NzLnB1c2goZWwpOyAvLyBPbmx5IGFkZCBpZiBub3QgYWxyZWFkeSBpbnNpZGUgZGVzY3JpcHRpb25cblx0XHRcdH1cblxuXHRcdFx0aWYgKGlucHV0KSB7XG5cdFx0XHRcdGZvciAoY29uc3QgbGFiZWwgb2YgbGFiZWxzKSBsYWJlbC5odG1sRm9yID0gdXNlSWQoaW5wdXQpO1xuXHRcdFx0XHRpZiAodmFsaWRhdGUgJiYgYXR0cihmaWVsZCwgXCJkYXRhLXZhbGlkYXRpb25cIikgPT09IFwiZm9ybVwiKSB7XG5cdFx0XHRcdFx0dmFsaWQgPSBpbnB1dC5tYXRjaGVzKFwiOnZhbGlkXCIpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgZWwgb2YgdmFsaWRzKSBhdHRyKGVsLCBcImhpZGRlblwiLCB2YWxpZCA/IFwiXCIgOiBudWxsKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZW5kZXJDb21ib2JveChjb21ib2JveCk7XG5cdFx0XHRcdHJlbmRlckNvdW50ZXIoaW5wdXQpO1xuXHRcdFx0XHRyZW5kZXJUZXh0YXJlYVNpemUoaW5wdXQpO1xuXHRcdFx0XHRhdHRyKGlucHV0LCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgZGVzY3MubWFwKHVzZUlkKS5qb2luKFwiIFwiKSB8fCBudWxsKTsgLy8gUmVtb3ZlIGlmIGVtcHR5XG5cdFx0XHRcdGF0dHIoaW5wdXQsIFwiYXJpYS1pbnZhbGlkXCIsIGAkeyF2YWxpZH1gKTtcblx0XHRcdH1cblx0XHR9XG59XG5cbi8vIGlPUyBkb2VzIG5vdCBzdXBwb3J0IGZpZWxkLXNpemluZzogY29udGVudCwgc28gd2UgbmVlZCB0byBtYW51YWxseSByZXNpemVcbmZ1bmN0aW9uIHJlbmRlclRleHRhcmVhU2l6ZSh0ZXh0YXJlYTogRWxlbWVudCkge1xuXHRpZiAodGV4dGFyZWEgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG5cdFx0dGV4dGFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXCItLW10ZHMtdGV4dGFyZWEtaGVpZ2h0XCIsIFwiYXV0b1wiKTtcblx0XHR0ZXh0YXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcblx0XHRcdFwiLS1tdGRzLXRleHRhcmVhLWhlaWdodFwiLFxuXHRcdFx0YCR7dGV4dGFyZWEuc2Nyb2xsSGVpZ2h0fXB4YCxcblx0XHQpO1xuXHR9XG59XG5cbi8vIFNldHVwIHRyYW5zbGF0aW9ucyBmcm9tIENTUyBjdXN0b20gcHJvcGVydGllc1xuZnVuY3Rpb24gcmVuZGVyQ29tYm9ib3goZWw6IFVIVE1MQ29tYm9ib3hFbGVtZW50IHwgbnVsbCkge1xuXHRjb25zdCB7IGNvbnRyb2wsIGxpc3QgfSA9IGVsIHx8IHt9O1xuXG5cdGlmIChlbCAmJiBsaXN0ICYmICFlbC5oYXNBdHRyaWJ1dGUoXCJkYXRhLXNyLWFkZGVkXCIpKSB7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLWFkZGVkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtYWRkZWRcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1lbXB0eVwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWVtcHR5XCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItZm91bmRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1mb3VuZFwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLWludmFsaWRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1pbnZhbGlkXCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3Itb2ZcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1vZlwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLXJlbW92ZVwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LXJlbW92ZVwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLXJlbW92ZWRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1yZW1vdmVkXCIpKTtcblx0XHRhdHRyKGxpc3QsIFwiZGF0YS1zci1wbHVyYWxcIiwgZ2V0VGV4dChzdHlsZSwgXCJkYXRhbGlzdC1wbHVyYWxcIikpO1xuXHRcdGF0dHIobGlzdCwgXCJkYXRhLXNyLXNpbmd1bGFyXCIsIGdldFRleHQoc3R5bGUsIFwiZGF0YWxpc3Qtc2luZ3VsYXJcIikpO1xuXHR9XG5cdGlmIChsaXN0ICYmIGNvbnRyb2wgJiYgIWxpc3QuaGFzQXR0cmlidXRlKFwicG9wb3ZlclwiKSkge1xuXHRcdGF0dHIobGlzdCwgXCJwb3BvdmVyXCIsIFwibWFudWFsXCIpO1xuXHRcdGF0dHIoY29udHJvbCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKGxpc3QpKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW5kZXJDb3VudGVyKGlucHV0OiBIVE1MSW5wdXRFbGVtZW50KSB7XG5cdGNvbnN0IGVsID0gaW5wdXQ/Lm5leHRFbGVtZW50U2libGluZztcblx0Y29uc3QgbGltaXQgPSBlbCAmJiBhdHRyKGVsLCBcImRhdGEtY291bnRcIik7XG5cblx0aWYgKGVsICYmIGxpbWl0KSB7XG5cdFx0Y29uc3QgcmVtYWluZGVyID0gTnVtYmVyKGxpbWl0KSAtIGlucHV0LnZhbHVlLmxlbmd0aDtcblx0XHRjb25zdCBuZXh0SW52YWxpZCA9IHJlbWFpbmRlciA8IDA7XG5cdFx0Y29uc3QgcHJldkludmFsaWQgPSBhdHRyKGVsLCBcImFyaWEtbGl2ZVwiKSA9PT0gXCJwb2xpdGVcIjtcblx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsIHx8IGlucHV0KTtcblx0XHRjb25zdCBvdmVyID0gZ2V0VGV4dChzdHlsZSwgXCJjb3VudC1vdmVyXCIpO1xuXHRcdGNvbnN0IHVuZGVyID0gZ2V0VGV4dChzdHlsZSwgXCJjb3VudC11bmRlclwiKTtcblxuXHRcdGlmIChwcmV2SW52YWxpZCAhPT0gbmV4dEludmFsaWQpIHtcblx0XHRcdGF0dHIoZWwsIFwiYXJpYS1saXZlXCIsIG5leHRJbnZhbGlkID8gXCJwb2xpdGVcIiA6IFwib2ZmXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBjc3Mgb2YgQ1NTX1ZBTElEQVRJT05TKSBlbC5jbGFzc0xpc3QudG9nZ2xlKGNzcywgbmV4dEludmFsaWQpO1xuXHRcdH1cblx0XHRlbC50ZXh0Q29udGVudCA9IChuZXh0SW52YWxpZCA/IG92ZXIgOiB1bmRlcikucmVwbGFjZShcblx0XHRcdFwiJWRcIixcblx0XHRcdGAke01hdGguYWJzKHJlbWFpbmRlcil9YCxcblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRvZ2dsZSh7IHRhcmdldDogZWwsIG5ld1N0YXRlIH06IEV2ZW50ICYgeyBuZXdTdGF0ZT86IHN0cmluZyB9KSB7XG5cdGlmIChlbCBpbnN0YW5jZW9mIFVIVE1MRGF0YUxpc3RFbGVtZW50KSB7XG5cdFx0Y29uc3Qgcm9vdCA9IGVsLmdldFJvb3ROb2RlKCkgYXMgU2hhZG93Um9vdCB8IG51bGw7XG5cdFx0Y29uc3QgYW5jaG9yID0gcm9vdD8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG5cdFx0XHRgW3BvcG92ZXJ0YXJnZXQ9XCIke2VsLmlkfVwiXWAsXG5cdFx0KTtcblxuXHRcdGlmIChuZXdTdGF0ZSA9PT0gXCJjbG9zZWRcIikgYW5jaG9yUG9zaXRpb24oZWwsIGZhbHNlKTtcblx0XHRlbHNlIGlmIChhbmNob3IpIHtcblx0XHRcdGVsLnN0eWxlLndpZHRoID0gYCR7YW5jaG9yLmNsaWVudFdpZHRofXB4YDtcblx0XHRcdGFuY2hvclBvc2l0aW9uKGVsLCBhbmNob3IsIGF0dHIoZWwsIFwiZGF0YS1wb3NpdGlvblwiKSA/PyBcImJvdHRvbVwiLCB0cnVlKTtcblx0XHR9XG5cdH1cbn1cbi8vIFVwZGF0ZSB3aGVuIHR5cGluZ1xuZnVuY3Rpb24gaGFuZGxlSW5wdXQoZXZlbnQ6IEV2ZW50KSB7XG5cdGlmIChpc0lucHV0TGlrZShldmVudC50YXJnZXQpKSB7XG5cdFx0cmVuZGVyQ291bnRlcihldmVudC50YXJnZXQpO1xuXHRcdHJlbmRlclRleHRhcmVhU2l6ZShldmVudC50YXJnZXQpO1xuXHRcdGhhbmRsZURhdGFsaXN0UG9zaXRpb24oZXZlbnQpOyAvLyBSZXBvc2l0aW9uIGxpc3QgZGF0YWxpc3QgLy8gVE9ETyBFbmhhbmNlIGJ5IHVzaW5nIHN0eWxlLmJvdHRvbT9cblx0fVxufVxuXG5mdW5jdGlvbiBoYW5kbGVWYWxkaWF0aW9uKGV2ZW50OiBFdmVudCkge1xuXHRjb25zdCBmaWVsZCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihgLiR7Q1NTX0ZJRUxEfWApO1xuXG5cdGlmIChldmVudC50eXBlID09PSBcImludmFsaWRcIiAmJiBmaWVsZCkgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gUHJldmVudCBicm93c2VycyBmcm9tIHNob3dpbmcgZGVmYXVsdCB2YWxpZGF0aW9uIGJ1YmJsZXNcblx0aGFuZGxlTXV0YXRpb24oZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShDU1NfRklFTEQpLCB0cnVlKTsgLy8gVXBkYXRlIHN0YXRlXG59XG5cbi8vIFBvc2l0aW9uIGNvbWJvYm94IHdoZW4gY2hhbmdpbmcgY29udGVudFxuZnVuY3Rpb24gaGFuZGxlRGF0YWxpc3RQb3NpdGlvbih7IHRhcmdldDogZWwgfTogRXZlbnQpIHtcblx0Y29uc3QgbGlzdCA9XG5cdFx0KGVsIGluc3RhbmNlb2YgVUhUTUxDb21ib2JveEVsZW1lbnQgfHwgZWwgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSAmJlxuXHRcdGVsLmxpc3Q7XG5cdGlmIChsaXN0ICYmICFsaXN0Py5oaWRkZW4pIHtcblx0XHRjb25zdCBwb3NpdGlvbiA9IGF0dHIobGlzdCwgXCJkYXRhLXBvc2l0aW9uXCIpID8/IFwiYm90dG9tXCI7XG5cdFx0c2V0VGltZW91dCgoKSA9PiBhbmNob3JQb3NpdGlvbihsaXN0LCBlbCwgcG9zaXRpb24sIHRydWUpLCAxMCk7IC8vIFJlcG9zaXRpb24gbGlzdCBpZiBub3QgaGlkZGVuXG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0ZJRUxELCBoYW5kbGVNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImNvbWJvYm94YmVmb3Jlc2VsZWN0XCIsIGhhbmRsZURhdGFsaXN0UG9zaXRpb24sIFFVSUNLX0VWRU5UKTtcblx0b24oZG9jdW1lbnQsIFwiaW5wdXRcIiwgaGFuZGxlSW5wdXQsIFFVSUNLX0VWRU5UKTtcblx0b24oZG9jdW1lbnQsIFwiaW52YWxpZCxzdWJtaXRcIiwgaGFuZGxlVmFsZGlhdGlvbiwgdHJ1ZSk7IC8vIFVzZSBjYXB0dXJlIGFzIGludmFsaWQgYW5kIHN1Ym1pdCBkb2VzIG5vdCBidWJibGVcblx0b24oZG9jdW1lbnQsIFwidG9nZ2xlXCIsIGhhbmRsZVRvZ2dsZSwgUVVJQ0tfRVZFTlQpOyAvLyBVc2UgY2FwdHVyZSBzaW5jZSB0b2dnbGUgZG9lcyBub3QgYnViYmxlXG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBpc0lucHV0TGlrZSwgb25Mb2FkZWQsIG9uTXV0YXRpb24sIHVzZUlkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19GSUVMRFNFVCA9IHN0eWxlcy5maWVsZHNldC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVkFMSURBVElPTiA9IHN0eWxlcy52YWxpZGF0aW9uLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IEFSSUFfREVTQyA9IFwiYXJpYS1kZXNjcmliZWRieVwiO1xuY29uc3QgQVJJQV9JTlZBTElEID0gXCJhcmlhLWludmFsaWRcIjtcblxuLy8gVXNpbmcgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHRvIGVuc3VyZSBpdCBydW5zIGFmdGVyIGZpZWxkLW9ic2VydmVyXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihmaWVsZHNldHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4pIHtcblx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRmb3IgKGNvbnN0IGZpZWxkc2V0IG9mIGZpZWxkc2V0cylcblx0XHRcdGlmIChmaWVsZHNldC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0XHRjb25zdCBpbnB1dHM6IEhUTUxJbnB1dEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0XHRsZXQgdmFsaWRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdFx0XHRcdGxldCB2YWxpZCA9IHRydWU7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBlbCBvZiBmaWVsZHNldC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikpIHtcblx0XHRcdFx0XHRpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkge1xuXHRcdFx0XHRcdFx0dmFsaWQgPSBhdHRyKGVsLCBcImRhdGEtY29sb3JcIikgPT09IFwic3VjY2Vzc1wiIHx8ICFlbC5jbGllbnRIZWlnaHQ7IC8vIE9ubHkgc2V0IGludmFsaWQgaWYgVmFsaWRhdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRcdFx0XHR2YWxpZElkID0gdXNlSWQoZWwpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoaXNJbnB1dExpa2UoZWwpKSBpbnB1dHMucHVzaChlbCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykge1xuXHRcdFx0XHRcdGNvbnN0IGRlc2MgPSBhdHRyKGlucHV0LCBBUklBX0RFU0MpPy5yZXBsYWNlKHZhbGlkSWQgfHwgXCIjXCIsIFwiXCIpO1xuXG5cdFx0XHRcdFx0YXR0cihpbnB1dCwgQVJJQV9ERVNDLCBgJHt2YWxpZElkIHx8IFwiXCJ9ICR7ZGVzYyB8fCBcIlwifWAudHJpbSgpKTtcblx0XHRcdFx0XHRhdHRyKGlucHV0LCBBUklBX0lOVkFMSUQsIGAkeyF2YWxpZH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRFNFVCwgaGFuZGxlTXV0YXRpb24pLFxuKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfTE9HTyA9IHN0eWxlcy5sb2dvLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oW2xvZ29dOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRpZiAobG9nbz8uaXNDb25uZWN0ZWQgJiYgbG9nbz8uZmlyc3RFbGVtZW50Q2hpbGQgaW5zdGFuY2VvZiBTVkdTVkdFbGVtZW50KSB7XG5cdFx0Zm9yIChjb25zdCBpY29uIG9mIGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvckFsbChcImxpbmtbcmVsfj0naWNvbiddXCIpKVxuXHRcdFx0aWNvbi5zZXRBdHRyaWJ1dGUoXCJyZWxcIiwgXCJkaXNhYmxlZFwiKTsgLy8gRGlzYWJsZSBwcmV2aW91cyBpY29uIChidXQgbm90IHJlbW92ZSBpcyBhcyB0aGlzIG1ha2VzIE5leHQuanMgc2FkKVxuXG5cdFx0Y29uc3Qgc3ZnID0gbG9nby5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRjb25zdCBpc0RvdCA9IGxvZ28/Lmhhc0F0dHJpYnV0ZShcImRhdGEtZW52XCIpO1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoc3ZnKTtcblx0XHRjb25zdCB0ZXh0ID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcImNvbG9yXCIpO1xuXHRcdGNvbnN0IGJhY2sgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1tdGRzLWxvZ28tY29sb3JcIik7XG5cdFx0Y29uc3QgaWNvbiA9IHN2Zy5vdXRlckhUTUxcblx0XHRcdC5yZXBsYWNlKC9cXG4rL2csIFwiIFwiKSAvLyBQcmV2ZW50IGxpbmUgYnJlYWtzXG5cdFx0XHQucmVwbGFjZSgvKGZpbGx8d2lkdGh8aGVpZ2h0fHhtbG5zKT1cIlteXCJdK1wiL2dpLCBcIlwiKVxuXHRcdFx0LnJlcGxhY2UoXCI8c3ZnXCIsIGA8c3ZnIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIGZpbGw9XCIke3RleHR9XCJgKTtcblxuXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoXG5cdFx0XHRPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpLCB7XG5cdFx0XHRcdGhyZWY6IGBkYXRhOmltYWdlL3N2Zyt4bWwsJHtlbmNvZGVVUklDb21wb25lbnQoYDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNTUgNTUnPjxyZWN0IGZpbGw9JyR7aXNEb3QgPyBcIm5vbmVcIiA6IGJhY2t9JyB3aWR0aD0nNTEnIGhlaWdodD0nNTEnIHg9JzInIHk9JzInIHN0cm9rZT0nJHt0ZXh0fScgc3Ryb2tlLWRhc2hhcnJheT0nMC4wOSA2LjM4JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1vcGFjaXR5PScke2lzRG90ID8gMC42IDogMH0nIHN0cm9rZS13aWR0aD0nMi4zJyByeD0nMjUuNScvPjxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg3LjUgNy41KVwiPiR7aWNvbn08L2c+PC9zdmc+YCl9YCxcblx0XHRcdFx0cmVsOiBcImljb25cIixcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19MT0dPLCBoYW5kbGVNdXRhdGlvbikpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGFuY2hvclBvc2l0aW9uLCBhdHRyLCBvbiwgb25Mb2FkZWQsIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19QT1BPVkVSID0gc3R5bGVzLnBvcG92ZXIuc3BsaXQoXCIgXCIpWzBdO1xubGV0IE9QRU5fUE9QT1ZFUlMgPSAwOyAvLyBTcGVlZCB1cCBieSBvbmx5IGNoZWNraW5nIGNsaWNrcyBpZiB3ZSBoYXZlIG9wZW4gcG9wb3ZlcnNcblxuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlKHsgdGFyZ2V0OiBlbCwgbmV3U3RhdGUgfTogRXZlbnQgJiB7IG5ld1N0YXRlPzogc3RyaW5nIH0pIHtcblx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19QT1BPVkVSKSkge1xuXHRcdGNvbnN0IGFuY2hvciA9IChlbC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QpPy5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pihcblx0XHRcdGBbcG9wb3ZlcnRhcmdldD1cIiR7ZWwuaWR9XCJdYCxcblx0XHQpO1xuXG5cdFx0aWYgKG5ld1N0YXRlID09PSBcImNsb3NlZFwiKSB7XG5cdFx0XHRPUEVOX1BPUE9WRVJTIC09IDE7XG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgZmFsc2UpO1xuXHRcdH0gZWxzZSBpZiAoYW5jaG9yKSB7XG5cdFx0XHRPUEVOX1BPUE9WRVJTICs9IDE7XG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgYW5jaG9yLCBhdHRyKGVsLCBcImRhdGEtcG9zaXRpb25cIikgfHwgXCJib3R0b21cIik7XG5cdFx0fVxuXHR9XG59XG5cbi8vIFBvbHlmaWxsIHBvcG92ZXJ0YXJnZXQgZm9yIDxhPiAobm90IHN1cHBvcnRlZCBieSBuYXRpdmUpXG4vLyBhbmQgYXV0b21hdGljYWxseSBhc3N1bWUgcG9wb3ZlcnRhcmdldCBpcyB0aGUgY2xvc2VzdCBwYXJlbnQgcG9wb3ZlclxuLy8gYnV0IHJlc3BlY3QgdGhlIHBvcG92ZXJ0YXJnZXQgYW5kIHBvcG92ZXJ0YXJnZXRhY3Rpb24gYXR0cmlidXRlXG5mdW5jdGlvbiBoYW5kbGVMaW5rQ2xpY2soeyB0YXJnZXQgfTogRXZlbnQpIHtcblx0Y29uc3QgY2xvc2UgPVxuXHRcdE9QRU5fUE9QT1ZFUlMgJiYgKHRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKFwiYSxbcG9wb3ZlcnRhcmdldGFjdGlvbl1cIik7XG5cblx0aWYgKGNsb3NlKSB7XG5cdFx0Y29uc3QgYWN0aW9uID0gYXR0cihjbG9zZSwgXCJwb3BvdmVydGFyZ2V0YWN0aW9uXCIpIHx8IFwidG9nZ2xlXCI7XG5cdFx0Y29uc3Qgb3BlbiA9IGFjdGlvbiA9PT0gXCJzaG93XCIgfHwgKGFjdGlvbiA9PT0gXCJoaWRlXCIgPyBmYWxzZSA6IHVuZGVmaW5lZCk7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXR0cihjbG9zZSwgXCJwb3BvdmVydGFyZ2V0XCIpIHx8IFwiXCIpO1xuXHRcdGNvbnN0IHBvcG92ZXIgPSAodGFyZ2V0IHx8IGNsb3NlKS5jbG9zZXN0PEhUTUxFbGVtZW50PihgLiR7Q1NTX1BPUE9WRVJ9YCk7XG5cblx0XHQvLyBQb3BvdmVyIGNhbiBiZSBkaXNjb25uZXRlZCBieSBjbGljayBoYW5kbGVyIGRlZXBlciBkb3duIGluIHRoZSBET00gdGhyZWUgYmVmb3JlIHJlYWNoaW5nIGRvY3VtZW50XG5cdFx0aWYgKHBvcG92ZXI/LmlzQ29ubmVjdGVkICYmIHBvcG92ZXI/LnRvZ2dsZVBvcG92ZXIpXG5cdFx0XHRwb3BvdmVyLnRvZ2dsZVBvcG92ZXIob3Blbik7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJ0b2dnbGVcIiwgaGFuZGxlVG9nZ2xlLCBRVUlDS19FVkVOVCk7IC8vIFVzZSBjYXB0dXJlIHNpbmNlIHRvZ2dsZSBkb2VzIG5vdCBidWJibGVcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlTGlua0NsaWNrKTsgLy8gQWxsb3cgYDxhPmAgdG8gdXNlIGBwb3BvdmVydGFyZ2V0YCBhcyB3ZWxsXG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfVEFCTEUgPSBzdHlsZXMudGFibGUuc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbih0YWJsZXM6IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTFRhYmxlRWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCB0YWJsZSBvZiB0YWJsZXMpIHtcblx0XHRjb25zdCB0aHM6IHN0cmluZ1tdID0gW107IC8vIEFkZCBkYXRhLXRoPVwiXCIgdG8gZWFjaCBjZWxsIHRvIHN1cHBvcnQgZGF0YS1tb2JpbGUgZGVzaWduc1xuXG5cdFx0YXR0cih0YWJsZSwgXCJyb2xlXCIsIFwidGFibGVcIik7IC8vIEFkZCBoZWxwaW5nIHJvbGU9XCJcIiB0byBlbnN1cmUgc2NyZWVuIHJlYWRlcnMgdW5kZXJzdGFuZCB0aGUgdGFibGUgcmVnYXJkbGVzcyBvZiBDU1MgZGlzcGxheVxuXHRcdGlmICh0YWJsZS5jYXB0aW9uKSBhdHRyKHRhYmxlLmNhcHRpb24sIFwicm9sZVwiLCBcImNhcHRpb25cIik7XG5cdFx0Zm9yIChjb25zdCBncm91cCBvZiBbdGFibGUudEhlYWQsIHRhYmxlLnRGb290LCAuLi50YWJsZS50Qm9kaWVzXSlcblx0XHRcdGlmIChncm91cCkge1xuXHRcdFx0XHRhdHRyKGdyb3VwLCBcInJvbGVcIiwgXCJyb3dncm91cFwiKTtcblx0XHRcdFx0Y29uc3QgaXNUYm9keSA9IGdyb3VwLm5vZGVOYW1lID09PSBcIlRCT0RZXCI7XG5cblx0XHRcdFx0Zm9yIChjb25zdCByb3cgb2YgZ3JvdXAucm93cykge1xuXHRcdFx0XHRcdGF0dHIocm93LCBcInJvbGVcIiwgXCJyb3dcIik7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjZWxsIG9mIHJvdy5jZWxscykge1xuXHRcdFx0XHRcdFx0aWYgKGlzVGJvZHkpIGF0dHIoY2VsbCwgXCJkYXRhLXRoXCIsIHRoc1tjZWxsLmNlbGxJbmRleF0gfHwgXCI6ZW1wdHlcIik7XG5cdFx0XHRcdFx0XHRlbHNlIHRocy5wdXNoKGNlbGwuaW5uZXJUZXh0LnRyaW0oKSk7IC8vIFVzaW5nIGlubmVyVGV4dCB0byBvbmx5IGluY2x1ZGUgdmlzaWJsZSB0ZXh0XG5cdFx0XHRcdFx0XHRpZiAoY2VsbC5ub2RlTmFtZSA9PT0gXCJURFwiKSBhdHRyKGNlbGwsIFwicm9sZVwiLCBcImNlbGxcIik7XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0YXR0cihjZWxsLCBcInJvbGVcIiwgaXNUYm9keSA/IFwicm93aGVhZGVyXCIgOiBcImNvbHVtbmhlYWRlclwiKTtcblx0XHRcdFx0XHRcdFx0YXR0cihjZWxsLCBcInNjb3BlXCIsIGlzVGJvZHkgPyBcInJvd1wiIDogXCJjb2xcIik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19UQUJMRSwgaGFuZGxlTXV0YXRpb24pKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBvbiwgb25Mb2FkZWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1RPR0dMRUdST1VQID0gYC4ke3N0eWxlcy50b2dnbGVncm91cC5zcGxpdChcIiBcIilbMF19YDtcblxuLy8gUHJldmVudCBicm93c2VycyBmcm9tIHNob3dpbmcgZGVmYXVsdCB2YWxpZGF0aW9uIGJ1YmJsZXNcbmZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQ6IEV2ZW50ICYgUGFydGlhbDxLZXlib2FyZEV2ZW50Pikge1xuXHRjb25zdCB7IGtleSwgdGFyZ2V0OiBlbCB9ID0gZXZlbnQ7XG5cdGNvbnN0IGdyb3VwID0gZWwgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIGVsLmNsb3Nlc3QoQ1NTX1RPR0dMRUdST1VQKTtcblxuXHRpZiAoIWdyb3VwKSByZXR1cm47XG5cdGlmIChrZXkgPT09IFwiRW50ZXJcIikgZWwuY2xpY2soKTtcblx0aWYgKGtleT8uc3RhcnRzV2l0aChcIkFycm93XCIpKSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRjb25zdCBpbnB1dHMgPSBncm91cC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpO1xuXHRcdGNvbnN0IGluZGV4ID0gWy4uLmlucHV0c10uaW5kZXhPZihlbCk7XG5cdFx0Y29uc3QgbW92ZSA9IGtleS5tYXRjaCgvQXJyb3coUmlnaHR8RG93bikvKSA/IDEgOiAtMTtcblx0XHRpbnB1dHNbKGlucHV0cy5sZW5ndGggKyBpbmRleCArIG1vdmUpICUgaW5wdXRzLmxlbmd0aF0/LmZvY3VzKCk7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb24oZG9jdW1lbnQsIFwia2V5ZG93blwiLCBoYW5kbGVLZXlEb3duKSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0YW5jaG9yUG9zaXRpb24sXG5cdGF0dHIsXG5cdElTX0JST1dTRVIsXG5cdG9uLFxuXHRvbkxvYWRlZCxcblx0UVVJQ0tfRVZFTlQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBERVNDUklCRURCWSA9IFwiYXJpYS1kZXNjcmliZWRieVwiO1xuY29uc3QgRVNDID0gXCJFc2NhcGVcIjtcbmNvbnN0IExBQkVMTEVEQlkgPSBcImFyaWEtbGFiZWxsZWRieVwiO1xuY29uc3QgUE9TSVRJT05fQ1NTX1BST1BFUlRZID0gXCItLW10ZHMtdG9vbHRpcC1wb3NpdGlvblwiO1xuY29uc3QgVEhST1RUTEVfREVMQVkgPSAzMDA7XG5jb25zdCBUT09MVElQID0gSVNfQlJPV1NFUlxuXHQ/IE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwge1xuXHRcdFx0Y2xhc3NOYW1lOiBzdHlsZXMuX3Rvb2x0aXAsXG5cdFx0XHRpZDogXCJtdGRzLXRvb2x0aXBcIixcblx0XHRcdHBvcG92ZXI6IFwibWFudWFsXCIsXG5cdFx0fSlcblx0OiBudWxsOyAvLyBDcmVhdGUgYSBkdW1teSBlbGVtZW50IHRvIGF2b2lkIG51bGwgY2hlY2tzXG5cbmxldCBBTkNIT1I6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbmxldCBMQVNUX0NBTEwgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5sZXQgVEhST1RUTEU6IG51bWJlciB8IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+ID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlTW92ZSh7IHRhcmdldCwgdHlwZSwga2V5IH06IEV2ZW50ICYgeyBrZXk/OiBzdHJpbmcgfSkge1xuXHRpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIgJiYga2V5ICE9PSBFU0MpIHJldHVybjsgLy8gQWxsb3cgRVNDIGRpc21pc3MgdG8gZm9sbG93IGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvQVJJQS9hcGcvcGF0dGVybnMvdG9vbHRpcC9cblx0Y29uc3Qgd2FpdCA9IExBU1RfQ0FMTCArIFRIUk9UVExFX0RFTEFZIC0gRGF0ZS5ub3coKTtcblx0Y2xlYXJUaW1lb3V0KFRIUk9UVExFKTtcblx0VEhST1RUTEUgPSBzZXRUaW1lb3V0KFxuXHRcdGhhbmRsZU1vdmVUaHJvdHRsZWQsXG5cdFx0TWF0aC5tYXgod2FpdCwgMCksXG5cdFx0a2V5ID09PSBFU0MgPyBudWxsIDogdGFyZ2V0LFxuXHQpO1xufVxuXG4vLyBVc2luZyBhIHRocm90dGxlZCBmdW5jdGlvbiB0byBhdm9pZCBwZXJmb3JtYW5jZSBpc3N1ZXNcbmZ1bmN0aW9uIGhhbmRsZU1vdmVUaHJvdHRsZWQodGFyZ2V0OiBFbGVtZW50IHwgbnVsbCkge1xuXHRMQVNUX0NBTEwgPSBEYXRlLm5vdygpO1xuXG5cdC8vIEJ1aWxkIGFuZCBhcHBlbmQgdG9vbHRpcCBpZiBub3QgZXhpc3Rpbmdcblx0aWYgKCFUT09MVElQIHx8IHRhcmdldCA9PT0gVE9PTFRJUCkgcmV0dXJuOyAvLyBBbGxvdyB0b29sdGlwIHRvIGJlIGhvdmVyZWQsIGZvbGxvd2luZyBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIxLyNjb250ZW50LW9uLWhvdmVyLW9yLWZvY3VzXG5cdGlmICghVE9PTFRJUD8uaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKFRPT0xUSVApOyAvLyBFbnN1cmUgY29ubmVjdGVkXG5cdGxldCBhbmNob3IgPSB0YXJnZXQ/LmNsb3Nlc3Q/LjxFbGVtZW50PihcIltkYXRhLXRvb2x0aXBdXCIpIHx8IG51bGw7XG5cblx0Ly8gTm8gbmVlZCB0byB1cGRhdGVcblx0aWYgKGFuY2hvciA9PT0gQU5DSE9SKSByZXR1cm47XG5cblx0Y29uc3QgY29udGVudCA9IChhbmNob3IgJiYgYXR0cihhbmNob3IsIFwiZGF0YS10b29sdGlwXCIpKSB8fCBcIlwiO1xuXHRjb25zdCBwb3NpdGlvbiA9XG5cdFx0KGFuY2hvciAmJiBhdHRyKGFuY2hvciwgXCJkYXRhLXRvb2x0aXAtcG9zaXRpb25cIikpIHx8XG5cdFx0d2luZG93XG5cdFx0XHQuZ2V0Q29tcHV0ZWRTdHlsZShhbmNob3IgfHwgZG9jdW1lbnQuYm9keSlcblx0XHRcdC5nZXRQcm9wZXJ0eVZhbHVlKFBPU0lUSU9OX0NTU19QUk9QRVJUWSlcblx0XHRcdD8udHJpbSgpIHx8XG5cdFx0XCJ0b3BcIjtcblxuXHRjb25zdCBpc0hpZGRlbiA9XG5cdFx0IWNvbnRlbnQgfHxcblx0XHRjb250ZW50ID09PSBcImZhbHNlXCIgfHxcblx0XHRjb250ZW50ID09PSBcInRydWVcIiB8fFxuXHRcdHBvc2l0aW9uID09PSBcIm5vbmVcIjtcblxuXHRpZiAoaXNIaWRkZW4pIGFuY2hvciA9IG51bGw7IC8vIERvIG5vdCBzaG93IHRvb2x0aXAgaWYgYm9vbGlzaCB2YWx1ZVxuXHRpZiAoYW5jaG9yKSBUT09MVElQLnRleHRDb250ZW50ID0gY29udGVudDsgLy8gT25seSB1cGRhdGUgY29udGVudCBpZiBuZXcgYW5jaG9yXG5cblx0Y29uc3QgaGFkTGFiZWwgPSBBTkNIT1IgJiYgYXR0cihBTkNIT1IsIExBQkVMTEVEQlkpID09PSBUT09MVElQPy5pZDtcblx0Y29uc3QgaGFzTGFiZWwgPVxuXHRcdChhbmNob3IgaW5zdGFuY2VvZiBIVE1MRWxlbWVudFxuXHRcdFx0PyBhbmNob3IuaW5uZXJUZXh0XG5cdFx0XHQ6IGFuY2hvcj8udGV4dENvbnRlbnRcblx0XHQpPy50cmltKCkgfHxcblx0XHRhbmNob3I/Lmhhc0F0dHJpYnV0ZShMQUJFTExFREJZKSB8fFxuXHRcdGFuY2hvcj8uaGFzQXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKTtcblxuXHRBTkNIT1I/LnJlbW92ZUF0dHJpYnV0ZShoYWRMYWJlbCA/IExBQkVMTEVEQlkgOiBERVNDUklCRURCWSk7IC8vIFVubGluayBwcmV2aW91cyBhbmNob3Jcblx0YW5jaG9yUG9zaXRpb24oVE9PTFRJUCwgZmFsc2UpOyAvLyBSZXNldCBhbmNob3IgcG9zaXRpb25cblxuXHRBTkNIT1IgPSBhbmNob3I7IC8vIFN0b3JlIG5ldyBhbmNob3IgLSBtaWdodCBiZSBudWxsIGlmIG5vIG5ldyBhbmNob3Jcblx0aWYgKEFOQ0hPUikgYXR0cihBTkNIT1IsIGhhc0xhYmVsID8gREVTQ1JJQkVEQlkgOiBMQUJFTExFREJZLCBUT09MVElQPy5pZCk7IC8vIFVzZSB0b29sdGlwIGFzIGRlc2NyaXB0aW9uIGlmIGFsbHJlYWR5IGhhcyBsYWJlbFxuXHRpZiAoQU5DSE9SKSBUT09MVElQLmhpZGVQb3BvdmVyKCk7IC8vIEhpZGUgdG9vbHRpcCBzbyBpdCBjYW4gYmUgcGxhY2VkIG9uIHRvcC1sYXllciBvbiBuZXh0IHNob3dcblx0VE9PTFRJUC50b2dnbGVQb3BvdmVyKCEhYW5jaG9yKTtcblx0YW5jaG9yUG9zaXRpb24oVE9PTFRJUCwgYW5jaG9yIHx8IGZhbHNlLCBwb3NpdGlvbik7XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwiYmx1cixmb2N1cyxtb3VzZW91dCxtb3VzZW92ZXJcIiwgaGFuZGxlTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwia2V5ZG93blwiLCBoYW5kbGVNb3ZlLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJibHVyXCIsIGhhbmRsZU1vdmUsIFFVSUNLX0VWRU5UKTtcbn0pO1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG5cbi8vIHUtZGV0YWlscy50c1xudmFyIFVIVE1MRGV0YWlsc0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgLy8gVXNpbmcgdW5kZXJzY29yZSBpbnN0ZWFkIG9mIHByaXZhdGUgZmllbGRzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgIHRoaXMuX2NvbnRlbnQgPSBudWxsO1xuICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBuYW1lOiBcInN1bW1hcnlcIiB9KSxcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgcGFydDogXCJkZXRhaWxzLWNvbnRlbnRcIiB9KSxcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYCR7RElTUExBWV9CTE9DS31cbiAgICAgICAgOjpzbG90dGVkKHUtc3VtbWFyeSkgeyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGJsb2NrIH1cblx0XHRcdFx0OjpzbG90dGVkKHUtc3VtbWFyeSk6OmJlZm9yZSB7IGNvbnRlbnQ6ICcnOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IG1hcmdpbi1pbmxpbmU6IC4wNWVtIC4zMTI1ZW07IGJvcmRlci1ibG9jazogLjMxMjVlbSBzb2xpZCB0cmFuc3BhcmVudDsgYm9yZGVyLWlubGluZS1zdGFydDogLjVlbSBzb2xpZCB9XG5cdFx0XHRcdDo6c2xvdHRlZCh1LXN1bW1hcnlbYXJpYS1leHBhbmRlZD1cInRydWVcIl0pOjpiZWZvcmUgeyByb3RhdGU6IDkwZGVnIH1cblx0XHRcdFx0Omhvc3QgPiBbcGFydD1cImRldGFpbHMtY29udGVudFwiXTpub3QoW2hpZGRlbj1cIlwiXSkgeyBkaXNwbGF5OiBibG9jayB9YFxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcIm9wZW5cIl07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdmFyIF9hMjtcbiAgICB0aGlzLl9jb250ZW50ID0gKF9hMiA9IHRoaXMuc2hhZG93Um9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jaGlsZHJlblsxXTtcbiAgICBvbih0aGlzLl9jb250ZW50LCBcImJlZm9yZW1hdGNoXCIsIHRoaXMpO1xuICAgIG9uKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLl9jb250ZW50KSBvZmYodGhpcy5fY29udGVudCwgXCJiZWZvcmVtYXRjaFwiLCB0aGlzKTtcbiAgICBvZmYodGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIHRoaXMuX2NvbnRlbnQgPSBudWxsO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBwcmV2LCBuZXh0KSB7XG4gICAgY29uc3QgaGlkZSA9IFwib25iZWZvcmVtYXRjaFwiIGluIHRoaXMgPyBcInVudGlsLWZvdW5kXCIgOiB0cnVlO1xuICAgIGNvbnN0IG9wZW4gPSB0aGlzLm9wZW47XG4gICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLmNoaWxkcmVuKVxuICAgICAgaWYgKGVsLm5vZGVOYW1lID09PSBcIlUtU1VNTUFSWVwiKSBhdHRyKGVsLCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7b3Blbn1gKTtcbiAgICBpZiAodGhpcy5fY29udGVudCkge1xuICAgICAgYXR0cih0aGlzLl9jb250ZW50LCBcImFyaWEtaGlkZGVuXCIsIGAkeyFvcGVufWApO1xuICAgICAgdGhpcy5fY29udGVudC5oaWRkZW4gPSBvcGVuID8gZmFsc2UgOiBoaWRlO1xuICAgIH1cbiAgICBpZiAob3BlbiAmJiB0aGlzLm5hbWUpIHtcbiAgICAgIGNvbnN0IHVEZXRhaWxzTGlzdCA9IGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYCR7dGhpcy5ub2RlTmFtZX1bbmFtZT1cIiR7dGhpcy5uYW1lfVwiXWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IHVEZXRhaWxzIG9mIHVEZXRhaWxzTGlzdClcbiAgICAgICAgaWYgKHVEZXRhaWxzICE9PSB0aGlzKSB1RGV0YWlscy5vcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChwcm9wID09PSBcIm9wZW5cIiAmJiBwcmV2ID09PSBudWxsICE9PSAobmV4dCA9PT0gbnVsbCkpXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwidG9nZ2xlXCIpKTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCI6c2NvcGUgPiB1LXN1bW1hcnlcIik7XG4gICAgY29uc3QgaXNTdW1tYXJ5ID0gc3VtbWFyeSA9PSBudWxsID8gdm9pZCAwIDogc3VtbWFyeS5jb250YWlucyhldmVudC50YXJnZXQpO1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmVmb3JlbWF0Y2hcIikgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICBpZiAoaXNTdW1tYXJ5ICYmIGV2ZW50LnR5cGUgPT09IFwia2V5ZG93blwiKSBhc0J1dHRvbihldmVudCk7XG4gICAgaWYgKGlzU3VtbWFyeSAmJiBldmVudC50eXBlID09PSBcImNsaWNrXCIpIHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XG4gIH1cbiAgZ2V0IG9wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwib3BlblwiKTtcbiAgfVxuICBzZXQgb3Blbih2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJvcGVuXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIFwibmFtZVwiKSB8fCBcIlwiO1xuICB9XG4gIHNldCBuYW1lKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcIm5hbWVcIiwgdmFsdWUpO1xuICB9XG59O1xudmFyIFVIVE1MU3VtbWFyeUVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIHRoaXMuc2xvdCA9IFwic3VtbWFyeVwiO1xuICAgIHRoaXMudGFiSW5kZXggPSAwO1xuICB9XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1kZXRhaWxzXCIsIFVIVE1MRGV0YWlsc0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1zdW1tYXJ5XCIsIFVIVE1MU3VtbWFyeUVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTERldGFpbHNFbGVtZW50LCBVSFRNTFN1bW1hcnlFbGVtZW50IH07XG4iLCIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfRklSRUZPWCA9IElTX0JST1dTRVIgJiYgL2ZpcmVmb3gvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBfYTI7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gKF9hMiA9IGVsLmdldEF0dHJpYnV0ZShuYW1lKSkgIT0gbnVsbCA/IF9hMiA6IG51bGw7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIGdldExhYmVsID0gKGVsKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSBnZXRSb290KGVsKTtcbiAgY29uc3QgbGFiZWwgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIikgfHwgXCJcIjtcbiAgY29uc3QgbGFiZWxzID0gKChfYTIgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxsZWRieVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkuc3BsaXQoL1xccysvKSkgfHwgW107XG4gIHJldHVybiBbXG4gICAgLi4ubGFiZWxzLm1hcCgoaWQyKSA9PiByb290ID09IG51bGwgPyB2b2lkIDAgOiByb290LnF1ZXJ5U2VsZWN0b3IoYFtpZD1cIiR7aWQyfVwiXWApKSxcbiAgICAvLyBHZXQgYWxsIGxhYmVsbGVkYnkgZWxlbWVudHNcbiAgICAuLi5BcnJheS5mcm9tKGVsLmxhYmVscyB8fCBbXSlcbiAgICAvLyBHZXQgYWxsIDxsYWJlbD4gZWxlbWVudHNcbiAgXS5yZWR1Y2UoKGFjYywgZWwyKSA9PiB7XG4gICAgdmFyIF9hMztcbiAgICByZXR1cm4gYWNjIHx8ICgoX2EzID0gZWwyID09IG51bGwgPyB2b2lkIDAgOiBlbDIuaW5uZXJUZXh0KSA9PSBudWxsID8gdm9pZCAwIDogX2EzLnRyaW0oKSkgfHwgXCJcIjtcbiAgfSwgbGFiZWwpO1xufTtcblxuLy8gdS1wcm9ncmVzcy50c1xudmFyIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbnZhciBVSFRNTFByb2dyZXNzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWxhYmVsbGVkYnlcIiwgXCJ2YWx1ZVwiLCBcIm1heFwiXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBoaWRkZW46IFwiXCIgfSksXG4gICAgICAvLyBTbG90IGhpZGluZyBjb250ZW50IGFsbG93cyBsZWdhY3kgYnJvd3NlciB0byBkaXNwbGF5IGZhbGxiYWNrIHRleHRcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYDpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGJvcmRlcjogMXB4IHNvbGlkOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGhlaWdodDogLjVlbTsgd2lkdGg6IDEwZW07IG92ZXJmbG93OiBoaWRkZW4gfVxuICAgICAgICA6aG9zdDo6YmVmb3JlIHsgY29udGVudDogJyc7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDEwMCU7IGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsgd2lkdGg6IHZhcigtLXBlcmNlbnRhZ2UsIDAlKTsgdHJhbnNpdGlvbjogd2lkdGggLjJzIH1cbiAgICAgICAgOmhvc3QoOm5vdChbdmFsdWVdKSkgeyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsY3VycmVudENvbG9yIDI1JSwgdHJhbnNwYXJlbnQgNTAlLCBjdXJyZW50Q29sb3IgNzUlKSA1MCUvNDAwJSB9XG4gICAgICAgIEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSkgeyA6aG9zdCB7IGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZSAycyBsaW5lYXIgaW5maW5pdGUgfSAgfVxuICAgICAgICBAa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUgeyBmcm9tIHsgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAxMDAlIH0gdG8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IDAgfSB9YFxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgaWYgKFNLSVBfQVRUUl9DSEFOR0UpIHJldHVybjtcbiAgICBTS0lQX0FUVFJfQ0hBTkdFID0gdHJ1ZTtcbiAgICBjb25zdCByb2xlSW1hZ2UgPSBJU19JT1MgfHwgSVNfRklSRUZPWDtcbiAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCh0aGlzLnBvc2l0aW9uICogMTAwKSk7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcGVyY2VudGFnZVwiLCBgJHtwZXJjZW50YWdlfSVgKTtcbiAgICBsZXQgbGFiZWwgPSBnZXRMYWJlbCh0aGlzKTtcbiAgICBpZiAocm9sZUltYWdlKSBsYWJlbCA9IGAke2xhYmVsLnJlcGxhY2UoL1xcZCslJC8sIFwiXCIpfSAke3BlcmNlbnRhZ2V9JWA7XG4gICAgaWYgKElTX0ZJUkVGT1gpIGZvciAoY29uc3QgZWwgb2YgdGhpcy5sYWJlbHMpIGF0dHIoZWwsIFwiYXJpYS1sYWJlbFwiLCBsYWJlbCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtYnVzeVwiLCBgJHt0aGlzLnBvc2l0aW9uID09PSAtMX1gKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1sYWJlbFwiLCBsYWJlbC50cmltKCkpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWxhYmVsbGVkYnlcIiwgbnVsbCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVtYXhcIiwgXCIxMDBcIik7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVtaW5cIiwgXCIwXCIpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXZhbHVlbm93XCIsIGAke3BlcmNlbnRhZ2V9YCk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgcm9sZUltYWdlID8gXCJpbWdcIiA6IFwicHJvZ3Jlc3NiYXJcIik7XG4gICAgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xuICB9XG4gIGdldCBsYWJlbHMoKSB7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLmNsb3Nlc3QoXCJsYWJlbDpub3QoW2Zvcl0pXCIpO1xuICAgIGNvbnN0IGlkMiA9IHVzZUlkKHRoaXMpO1xuICAgIGlmIChsYWJlbCkgbGFiZWwuaHRtbEZvciA9IGlkMjtcbiAgICBjb25zdCBlbCA9IGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGBsYWJlbFtmb3I9XCIke2lkMn1cIl1gXG4gICAgKTtcbiAgICByZXR1cm4gZWw7XG4gIH1cbiAgZ2V0IHBvc2l0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlID09PSBudWxsID8gLTEgOiBNYXRoLm1pbih0aGlzLnZhbHVlIC8gdGhpcy5tYXgsIDEpO1xuICB9XG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0TnVtYmVyKHRoaXMsIFwidmFsdWVcIik7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgc2V0TnVtYmVyKHRoaXMsIFwidmFsdWVcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBtYXgoKSB7XG4gICAgcmV0dXJuIGdldE51bWJlcih0aGlzLCBcIm1heFwiKSB8fCAxO1xuICB9XG4gIHNldCBtYXgobWF4KSB7XG4gICAgc2V0TnVtYmVyKHRoaXMsIFwibWF4XCIsIG1heCk7XG4gIH1cbn07XG4vLyBQcmV2ZW50IENocm9tZSBEZXZUb29scyB3YXJuaW5nIGFib3V0IDxsYWJlbCBmb3I9XCJcIj4gcG9pbnRpbmcgdG8gPHUtcHJvZ3Jlc3M+XG5VSFRNTFByb2dyZXNzRWxlbWVudC5mb3JtQXNzb2NpYXRlZCA9IHRydWU7XG52YXIgaXNOdW1lcmljID0gKHZhbHVlKSA9PiAhTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUZsb2F0KGAke3ZhbHVlfWApKSAmJiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKHZhbHVlKSk7XG52YXIgZ2V0TnVtYmVyID0gKGVsLCBrZXkpID0+IHtcbiAgY29uc3QgdmFsdWUgPSBhdHRyKGVsLCBrZXkpO1xuICByZXR1cm4gaXNOdW1lcmljKHZhbHVlKSA/IE1hdGgubWF4KDAsIE51bWJlci5wYXJzZUZsb2F0KHZhbHVlKSkgOiBudWxsO1xufTtcbnZhciBzZXROdW1iZXIgPSAoZWwsIGtleSwgdmFsKSA9PiB7XG4gIGlmICh2YWwgPT09IG51bGwgfHwgaXNOdW1lcmljKHZhbCkpIGF0dHIoZWwsIGtleSwgYCR7dmFsfWApO1xuICBlbHNlIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNldCBub24tbnVtZXJpYyAnJHthdHRyfSc6ICcke3ZhbH0nYCk7XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1wcm9ncmVzc1wiLCBVSFRNTFByb2dyZXNzRWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MUHJvZ3Jlc3NFbGVtZW50IH07XG4iXSwibmFtZXMiOlsiX19kZWZQcm9wIiwiX19nZXRPd25Qcm9wU3ltYm9scyIsIl9faGFzT3duUHJvcCIsIl9fcHJvcElzRW51bSIsIl9fZGVmTm9ybWFsUHJvcCIsIm9iaiIsImtleSIsInZhbHVlIiwiX19zcHJlYWRWYWx1ZXMiLCJhIiwiYiIsInByb3AiLCJJU19CUk9XU0VSIiwiSVNfQU5EUk9JRCIsIklTX0ZJUkVGT1giLCJJU19JT1MiLCJfYSIsIklTX0JST1dTRVIkNSIsIkZPQ1VTX09VVExJTkUiLCJVSFRNTEVsZW1lbnQiLCJhdHRyIiwiZWwiLCJuYW1lIiwiZXZlbnRzIiwiYWN0aW9uIiwiZWxlbWVudCIsInJlc3QiLCJ0eXBlIiwib24iLCJvZmYiLCJvYnNlcnZlcnMiLCJtdXRhdGlvbk9ic2VydmVyIiwib3B0aW9ucyIsIm9ic2VydmVyIiwiZGV0YWlsIiwiYXNCdXR0b24iLCJldmVudCIsImlzQ2xpY2siLCJnZXRSb290Iiwibm9kZSIsIl9hMiIsInJvb3QiLCJpZCIsInVzZUlkIiwiY3JlYXRlRWxlbWVudCIsInRhZ05hbWUiLCJ0ZXh0MiIsImF0dHJzIiwidmFsIiwiY3VzdG9tRWxlbWVudHMiLCJpbnN0YW5jZSIsIkxJVkUiLCJMSVZFX1NSX0ZJWCIsInNwZWFrIiwic2V0VmFsdWUiLCJpbnB1dCIsImRhdGEiLCJfYiIsInByb3RvIiwiSVNfUFJFU1MiLCJpc01vdXNlRG93biIsIkVWRU5UUyIsIkVWRU5UX09OQ0UiLCJJU19GSVJFRk9YX0RFU0tUT1AiLCJJU19NT0JJTEUiLCJGQUxTRSIsIlRFWFRTIiwiVUhUTUxDb21ib2JveEVsZW1lbnQiLCJyZW5kZXIiLCJzeW5jSW5wdXRWYWx1ZSIsIl8iLCJ0YXJnZXQiLCJpc0Rpc2FibGVkIiwib25CbHVyIiwib25DbGljayIsIm9uRm9jdXMiLCJvbklucHV0Iiwib25LZXlEb3duIiwidGFnIiwidGV4dCIsImlzRGF0YSIsImNvbnRyb2wiLCJzZWxmIiwiX2ZvY3VzIiwiX3RleHRzIiwiaXRlbXMiLCJsaXN0IiwibXVsdGlwbGUiLCJsYWJlbCIsImVkaXRzIiwiYWRkZWROb2RlcyIsInJlbW92ZWROb2RlcyIsInNob3VsZEFubm91bmNlIiwiYXJpYUV4cGFuZGVkIiwiaW5wdXRNb2RlIiwibmV4dEZvY3VzIiwiaXNSZW1vdmUiLCJfYTMiLCJpZHgiLCJzZWxlY3QiLCJyZW1vdmUiLCJpdGVtMiIsIm9wdGlvbiIsImxhYmVsMiIsImFyaWEiLCJvcHQiLCJpdGVtIiwic3luY0NsZWFyV2l0aElucHV0Iiwic3luY09wdGlvbnNXaXRoSXRlbXMiLCJfc3BlYWsiLCJ2YWx1ZXMiLCJkaXNwYXRjaE1hdGNoIiwiY2hhbmdlIiwiY3JlYXRhYmxlIiwicXVlcnkiLCJtYXRjaCIsIm8iLCJkaXNwYXRjaENoYW5nZSIsInJlbW92YWJsZSIsImFkZCIsImkiLCJvbkJsdXJyZWQiLCJ4IiwieSIsImNsZWFyIiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwicmVwZWF0IiwiaXNDb250cm9sIiwiaW5UZXh0IiwiaW5kZXgiLCJmb3JtIiwiSVNfQlJPV1NFUiQ0IiwiU0FGRV9MQUJFTExFREJZIiwiRElTUExBWV9CTE9DSyIsImF0dGFjaFN0eWxlIiwiY3NzIiwiQVJJQV9DT05UUk9MUyIsIkFSSUFfU0VMRUNURUQiLCJVSFRNTFRhYnNFbGVtZW50IiwicXVlcnlXaXRob3V0TmVzdGVkIiwiZ2V0U2VsZWN0ZWRJbmRleCIsInNldFNlbGVjdGVkIiwiVUhUTUxUYWJMaXN0RWxlbWVudCIsInRhYiIsInRhYnMiLCJwcmV2IiwibmV4dCIsIlNLSVBfQVRUUl9DSEFOR0UiLCJVSFRNTFRhYkVsZW1lbnQiLCJwYW5lbHMiLCJuZXh0UGFuZWwiLCJnZXRQYW5lbCIsInBhbmVsIiwidGFibGlzdCIsInRhYkxpc3QiLCJVSFRNTFRhYlBhbmVsRWxlbWVudCIsImlzRm9jdXNhYmxlIiwiaWQyIiwiUVVJQ0tfRVZFTlQiLCJkZWJvdW5jZSIsImNhbGxiYWNrIiwiZGVsYXkiLCJ0aW1lciIsImFyZ3MiLCJVVUlEIiwiVU5CSU5EIiwib25Mb2FkZWQiLCJydW4iLCJ1bmJpbmQiLCJTQ1JPTExFUiIsIlRBUkdFVFMiLCJUQVJHRVRTX1VQREFURSIsInVwZGF0ZSIsIlBPU0lUSU9OIiwiYW5jaG9yUG9zaXRpb24iLCJhbmNob3IiLCJwbGFjZSIsImZvcmNlIiwicG9zaXRpb24iLCJ0YXJnZXRXIiwidGFyZ2V0SCIsIndpZHRoIiwiaGVpZ2h0IiwiaXNIVE1MQW5jaG9yIiwiYW5jaG9yVyIsImFuY2hvckgiLCJ2aWV3VyIsInZpZXdIIiwic2Nyb2xsWCIsInNjcm9sbFkiLCJhbmNob3JYIiwiYW5jaG9yWSIsImNlbnRlclgiLCJjZW50ZXJZIiwiaGFzU3BhY2VMZWZ0IiwiaGFzU3BhY2VSaWdodCIsImhhc1NwYWNlT3ZlciIsImhhc1NwYWNlVW5kZXIiLCJpc1ZlcnRpY2FsIiwiaXNSaWdodCIsImlzVW5kZXIiLCJ2aWV3WCIsInZpZXdZIiwiY3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlciIsInF1ZXVlIiwib25GcmFtZSIsIm9uVGltZXIiLCJNVVRBVE9SUyIsIm9uTXV0YXRpb24iLCJjbGFzc05hbWUiLCJlbGVtcyIsIm11dGF0b3IiLCJpc0lucHV0TGlrZSIsIkNTU19CUkVBRENSVU1CUyIsInN0eWxlcyIsIkNTU19DSElQIiwiQ1NTX0hFTFBURVhUIiwiQ1NTX1BBR0lOQVRJT04iLCJDTElDS1MiLCJNQVRPTU8iLCJhbmFseXRpY3MiLCJlbmFibGVkIiwibWF0b21vSWQiLCJtYXRvbW9UYWdNYW5hZ2VySWQiLCJzcmMiLCJ1cmwiLCJ0aXRsZSIsImNhdGVnb3J5IiwidiIsInJlc3VsdHMiLCJoYW5kbGVUcmFjayIsInByb2Nlc3NUcmFjayIsImhlYWRpbmciLCJncm91cCIsInBvcG92ZXIiLCJvcGVuIiwic3R5bGUiLCJib2R5IiwiaGVhZCIsInNoZWV0IiwiQ1NTX0FQUCIsIkNTU19TVElDS1kiLCJDU1NfVE9HR0xFIiwiQ1NTX1NJREVCQVIiLCJ1c2VUcmFuc2l0aW9uIiwidG9nZ2xlQXBwRXhwYW5kZWQiLCJoYW5kbGVUb2dnbGVDbGljayIsInN0b3AiLCJsaW5rIiwiY2xvc2VTaWRlYmFyIiwic2lkZWJhciIsIk1JTl9ZIiwiU0NST0xMX1VQIiwiU1RJQ0siLCJTVElDS19FTCIsIlNUSUNLX0giLCJTVElDS19ZIiwiU1RVQ0siLCJXSU5fSCIsIldJTl9ZIiwiaGFuZGxlTXV0YXRpb24iLCJzdGlja3kiLCJoYW5kbGVTY3JvbGwiLCJORVhUX1kiLCJORVhUX1VQIiwiZ2V0U3RlcHMiLCJub3ciLCJtYXgiLCJzaG93Iiwib2Zmc2V0Iiwic3RhcnQiLCJlbmQiLCJwYWdlcyIsInBhZ2luYXRpb24iLCJjdXJyZW50IiwidG90YWwiLCJwYWdlIiwiYnJlYWRjcnVtYnMiLCJicmVhZGN1bWJzIiwiY3J1bWIiLCJsZW5ndGgiLCJDU1NfRElBTE9HIiwiRElBTE9HUyIsImhhbmRsZU1vZGFsIiwiZGlhbG9nIiwiaGFuZGxlQ2xpY2siLCJoYW5kbGVJbmplY3QiLCJmaXJzdCIsIklTX0JST1dTRVIkMiIsIkRJU0FCTEVEIiwiU0VMRUNURUQiLCJVSFRNTE9wdGlvbkVsZW1lbnQiLCJMSVZFX1RJTUVSIiwiSU5QVVRfREVCT1VOQ0UiLCJFVkVOVFNfSU5QVVQiLCJVSFRNTERhdGFMaXN0RWxlbWVudCIsImRpc2Nvbm5lY3RJbnB1dCIsIl9wcmV2Iiwic2V0dXBJbnB1dCIsInNldEV4cGFuZGVkIiwiX2MiLCJpc1BvcG92ZXIiLCJpc0lucHV0IiwicmVsYXRlZFRhcmdldCIsImFsdEtleSIsImN0cmxLZXkiLCJzaGlmdEtleSIsIm1ldGFLZXkiLCJpc0VzY2FwZSIsIl9yb290IiwiX2lucHV0IiwiZmlsdGVyIiwiaGlkZGVuIiwidmlzaWJsZSIsIkNTU19GSUVMRCIsIkNTU19WQUxJREFUSU9OUyIsIkNTU19WQUxJREFUSU9OIiwiZ2V0VGV4dCIsImZpZWxkcyIsInZhbGlkYXRlIiwiZmllbGQiLCJsYWJlbHMiLCJkZXNjcyIsInZhbGlkcyIsImNvbWJvYm94IiwidmFsaWQiLCJkZXNjIiwicmVuZGVyQ29tYm9ib3giLCJyZW5kZXJDb3VudGVyIiwicmVuZGVyVGV4dGFyZWFTaXplIiwidGV4dGFyZWEiLCJsaW1pdCIsInJlbWFpbmRlciIsIm5leHRJbnZhbGlkIiwicHJldkludmFsaWQiLCJvdmVyIiwidW5kZXIiLCJoYW5kbGVUb2dnbGUiLCJuZXdTdGF0ZSIsImhhbmRsZUlucHV0IiwiaGFuZGxlRGF0YWxpc3RQb3NpdGlvbiIsImhhbmRsZVZhbGRpYXRpb24iLCJDU1NfRklFTERTRVQiLCJBUklBX0RFU0MiLCJBUklBX0lOVkFMSUQiLCJmaWVsZHNldHMiLCJmaWVsZHNldCIsImlucHV0cyIsInZhbGlkSWQiLCJDU1NfTE9HTyIsImxvZ28iLCJpY29uIiwic3ZnIiwiaXNEb3QiLCJiYWNrIiwiQ1NTX1BPUE9WRVIiLCJPUEVOX1BPUE9WRVJTIiwiaGFuZGxlTGlua0NsaWNrIiwiY2xvc2UiLCJDU1NfVEFCTEUiLCJ0YWJsZXMiLCJ0YWJsZSIsInRocyIsImlzVGJvZHkiLCJyb3ciLCJjZWxsIiwiQ1NTX1RPR0dMRUdST1VQIiwiaGFuZGxlS2V5RG93biIsIm1vdmUiLCJERVNDUklCRURCWSIsIkVTQyIsIkxBQkVMTEVEQlkiLCJQT1NJVElPTl9DU1NfUFJPUEVSVFkiLCJUSFJPVFRMRV9ERUxBWSIsIlRPT0xUSVAiLCJBTkNIT1IiLCJMQVNUX0NBTEwiLCJUSFJPVFRMRSIsImhhbmRsZU1vdmUiLCJ3YWl0IiwiaGFuZGxlTW92ZVRocm90dGxlZCIsImNvbnRlbnQiLCJoYWRMYWJlbCIsImhhc0xhYmVsIiwiSVNfQlJPV1NFUiQxIiwiVUhUTUxEZXRhaWxzRWxlbWVudCIsImhpZGUiLCJ1RGV0YWlsc0xpc3QiLCJ1RGV0YWlscyIsInN1bW1hcnkiLCJpc1N1bW1hcnkiLCJVSFRNTFN1bW1hcnlFbGVtZW50IiwiZ2V0TGFiZWwiLCJhY2MiLCJlbDIiLCJVSFRNTFByb2dyZXNzRWxlbWVudCIsInJvbGVJbWFnZSIsInBlcmNlbnRhZ2UiLCJnZXROdW1iZXIiLCJzZXROdW1iZXIiLCJpc051bWVyaWMiXSwibWFwcGluZ3MiOiJrQ0FBQSxJQUFJQSxHQUFZLE9BQU8sZUFDbkJDLEdBQXNCLE9BQU8sc0JBQzdCQyxHQUFl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S0FBTSxnQkFBaUIsR0FBRzRYLENBQVUsRUFBRSxFQUMzQzVYLEVBQUssS0FBTSxPQUFRMlgsRUFBWSxNQUFRLGFBQWEsRUFDcER6UCxHQUFtQixFQUN2QixDQUNFLElBQUksUUFBUyxDQUNYLE1BQU05RCxFQUFRLEtBQUssUUFBUSxrQkFBa0IsRUFDdkN3RSxFQUFNckgsR0FBTSxJQUFJLEVBQ3RCLE9BQUk2QyxJQUFPQSxFQUFNLFFBQVV3RSxHQUNoQjFILEdBQVEsSUFBSSxFQUFFLGlCQUN2QixjQUFjMEgsQ0FBRyxJQUNsQixDQUVMLENBQ0UsSUFBSSxVQUFXLENBQ2IsT0FBTyxLQUFLLFFBQVUsS0FBTyxHQUFLLEtBQUssSUFBSSxLQUFLLE1BQVEsS0FBSyxJQUFLLENBQUMsQ0FDdkUsQ0FDRSxJQUFJLE9BQVEsQ0FDVixPQUFPaVAsR0FBVSxLQUFNLE9BQU8sQ0FDbEMsQ0FDRSxJQUFJLE1BQU0xWSxFQUFPLENBQ2YyWSxHQUFVLEtBQU0sUUFBUzNZLENBQUssQ0FDbEMsQ0FDRSxJQUFJLEtBQU0sQ0FDUixPQUFPMFksR0FBVSxLQUFNLEtBQUssR0FBSyxDQUNyQyxDQUNFLElBQUksSUFBSW5JLEVBQUssQ0FDWG9JLEdBQVUsS0FBTSxNQUFPcEksQ0FBRyxDQUM5QixDQUNBLEVBRUFnSSxHQUFxQixlQUFpQixHQUN0QyxJQUFJSyxHQUFhNVksR0FBVSxDQUFDLE9BQU8sTUFBTSxPQUFPLFdBQVcsR0FBR0EsQ0FBSyxFQUFFLENBQUMsR0FBSyxPQUFPLFNBQVMsT0FBT0EsQ0FBSyxDQUFDLEVBQ3BHMFksR0FBWSxDQUFDNVgsRUFBSWYsSUFBUSxDQUMzQixNQUFNQyxFQUFRYSxFQUFLQyxFQUFJZixDQUFHLEVBQzFCLE9BQU82WSxHQUFVNVksQ0FBSyxFQUFJLEtBQUssSUFBSSxFQUFHLE9BQU8sV0FBV0EsQ0FBSyxDQUFDLEVBQUksSUFDcEUsRUFDSTJZLEdBQVksQ0FBQzdYLEVBQUlmLEVBQUswQyxJQUFRLENBQ2hDLEdBQUlBLElBQVEsTUFBUW1XLEdBQVVuVyxDQUFHLEVBQUc1QixFQUFLQyxFQUFJZixFQUFLLEdBQUcwQyxDQUFHLEVBQUUsTUFDckQsT0FBTSxJQUFJLE1BQU0sOEJBQThCNUIsQ0FBSSxPQUFPNEIsQ0FBRyxHQUFHLENBQ3RFLEVBQ0EsT0FBQUMsR0FBZSxPQUFPLGFBQWM2VixFQUFvQiIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsMTAsMTgsMTldfQ==
|