User:Eejit43/scripts/rmtr-helper.js
Appearance
< User:Eejit43 | scripts
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
![]() | This user script seems to have a documentation page at User:Eejit43/scripts/rmtr-helper. |
// <nowiki>
// Note: This script was compiled and minified from TypeScript. For a more readable version, see https://github.com/Eejit43/wikipedia-scripts/blob/main/scripts/rmtr-helper.ts
"use strict";(()=>{var I=`#rmtr-review-result{margin:1em;border:1px solid #a2a9b1;border-radius:2px;background-color:#f5f5f5;padding:2.5%;color:#202122;font-size:.8em}#rmtr-review-header{margin-bottom:.5em;font-weight:700;font-size:1.5em}.rmtr-review-header{margin:.5em 0;font-weight:700;font-size:1em}.rmtr-review-invalid-warning{color:#cd5c5c;font-weight:700}.rmtr-review-request-checkbox{margin:3px 3px 0}.rmtr-review-section-content{margin-left:1em;line-height:1.3}.rmtr-review-section-content li+li{margin-top:.4rem;margin-bottom:.4rem}#rmtr-review-submit{margin-top:.2em}#rmtr-review-loading{display:inline-block;vertical-align:text-bottom;margin-top:-.3em;margin-left:3px;height:1.3em;overflow:hidden;line-height:1.5em}#rmtr-review-loading:after{display:inline-table;animation:rmtr-review-loading .8s steps(10) infinite;content:"\\280b\\a\\2819\\a\\2839\\a\\2838\\a\\283c\\a\\2834\\a\\2826\\a\\2827\\a\\2807\\a\\280f";text-align:left;white-space:pre}@keyframes rmtr-review-loading{to{transform:translateY(-15em)}}
`;mw.loader.using(["mediawiki.util"],()=>{if(mw.config.get("wgPageName")!=="Wikipedia:Requested_moves/Technical_requests")return;mw.util.addCSS(I);let x=mw.config.get("wgNamespaceIds"),k=!1;mw.util.addPortletLink(mw.config.get("skin")==="minerva"?"p-tb":"p-cactions","#","Review move requests","review-rmtr-requests").addEventListener("click",async O=>{O.preventDefault();let L=!0;if(window.addEventListener("beforeunload",o=>{L&&o.preventDefault()}),k)return document.querySelector("#rmtr-review-result")?.scrollIntoView();k=!0;let S=await P(),j=S.revid,N=S.slots.main.content,y=["Uncontroversial technical requests","Requests to revert undiscussed moves","Contested technical requests","Administrator needed"],T=y[2],A=y[3],d={};function M(o){let t=[],n=["[","{"],c=["]","}"],r=!1,s="";for(let i=0;i<o.length;i++){let a=o[i],l=o[i+1];if(a==="|"&&!r||i===o.length-1){a!=="|"&&(s+=a),t.push(s),s="";continue}s+=a,n.some(m=>m===a&&m===l)?r=!0:c.some(m=>m===a&&m===l)&&(r=!1)}let e={};for(let[i,a]of t.entries()){let l=a.split("=").map(m=>m.trim());l.length===1&&l.unshift((i+1).toString()),e[l.shift()]=l.join("=")}return e}for(let o of y){let n=N.split(new RegExp(`={3,} ?${o} ?={3,}`))[1].split(/={3,}/m)[0].trim().match(/(?:\* ?\n)?[ *:]*{{rmassist\/core.+?(?=[ *:]*{{rmassist\/core|$)/gis);if(n)d[o]=n.map(c=>{c=c.trim();let r=M(c.replaceAll(/(?:\* ?\n)?[ *:]*{{rmassist\/core\s*\||}}(?![^\n]*}}).*/gis,""));return r.full=c,r.original=r[1]?.replace(/^\[+/,"").replace(/]+$/,"")??"UNKNOWN",r.destination=r[2]?.replace(/^\[+/,"").replace(/]+$/,"")??"UNKNOWN",r.requester??=r.sig?.match(/\[\[User:(.*?)(\||]])/)?.[1].trim(),delete r[1],delete r[2],r});else{d[o]=[];continue}}await Promise.all(Object.entries(d).map(async([,o])=>{await Promise.all(o.map(async t=>{let n=mw.Title.newFromText(t.original),c=mw.Title.newFromText(t.destination);if(!n)return mw.notify(`Invalid title "${t.original}"!`,{type:"error"});if(!c)return mw.notify(`Invalid title "${t.destination}"!`,{type:"error"});let r=!/[#<>[\]{|}]/.test(t.destination)&&c,s=document.createElement("span");s.classList.add("rmtr-review-invalid-warning"),s.textContent=`Invalid title "${t.destination}"!`;let e=![x.file,x.category].some(u=>n.getNamespaceId()===u||c.getNamespaceId()===u),i=document.createElement("span");i.classList.add("rmtr-review-invalid-warning"),i.textContent=`Warning: original or destination page is in namespace "${c.getNamespaceId()===x.file?"file":"category"}"!`;let a=await new mw.Api().parse(`[[:${t.original}]] \u2192 ${r?`[[:${t.destination}]]`:s.outerHTML} requested by ${t.requester?mw.util.isIPAddress(t.requester)?`[[Special:Contributions/${t.requester}|${t.requester}]]`:`[[User:${t.requester}|${t.requester}]]`:/(\[{2}Special:Contributions\/(.*?)\|\2]{2})/.exec(t.sig)?.[1]??"(unknown)"} with reasoning "${t.reason}"`),l=new DOMParser().parseFromString(a,"text/html"),m=document.createElement("li");m.innerHTML=l.querySelector("div.mw-parser-output").firstElementChild.innerHTML,e||m.append(i),t.element=m}))}));let f=document.createElement("div");f.id="rmtr-review-result";let E=document.createElement("div");E.id="rmtr-review-header",E.textContent="Technical move requests review",f.append(E);for(let[o,[t,n]]of Object.entries(d).entries()){let c=document.createElement("div");c.classList.add("rmtr-review-header"),c.textContent=t,f.append(c);let r=document.createElement("div");if(r.classList.add("rmtr-review-section-content"),n.length===0){let s=document.createElement("div");s.textContent="No requests in this section",r.append(s)}else{let s=document.createElement("ul");for(let[e,i]of n.entries()){let a=i.element,l=document.createElement("input");l.type="checkbox",l.classList.add("rmtr-review-request-checkbox"),l.id=`rmtr-review-remove-request-${o}-${e}`,l.addEventListener("change",()=>{l.checked?(d[t][e].result={remove:!0,reason:R.value},u.style.display="inline",v.disabled=!0):(delete d[t][e].result,u.style.display="none",v.disabled=!1)});let m=document.createElement("label");m.htmlFor=`rmtr-review-remove-request-${o}-${e}`,m.textContent="Remove request",a.append(l),a.append(m);let u=document.createElement("span");u.style.display="none",u.append(document.createTextNode(" as "));let R=document.createElement("select");t==="Contested technical requests"&&(R.value="Contested"),R.addEventListener("change",()=>{d[t][e].result.reason=R.value});let W=["Completed","Contested","Already done","Invalid page name","Incorrect venue","Withdrawn","Stale","Not done"];for(let h of W){let g=document.createElement("option");g.value=h,g.textContent=h,R.append(g)}u.append(R),a.append(u);let v=document.createElement("input");v.type="checkbox",v.classList.add("rmtr-review-request-checkbox"),v.id=`rmtr-review-move-request-${o}-${e}`,v.addEventListener("change",()=>{v.checked?(d[t][e].result={move:!0,section:$.value},p.style.display="inline",l.disabled=!0):(delete d[t][e].result,p.style.display="none",l.disabled=!1)});let C=document.createElement("label");C.htmlFor=`rmtr-review-move-request-${o}-${e}`,C.textContent="Switch section",a.append(v),a.append(C);let p=document.createElement("span");p.style.display="none",p.append(document.createTextNode(" to "));let $=document.createElement("select");$.addEventListener("change",()=>{d[t][e].result.section=$.value});for(let h of y){if(h===t)continue;let g=document.createElement("option");g.selected=h===(t===T?A:T),g.value=h,g.textContent=h,$.append(g)}p.append($),p.append(document.createTextNode(" with reasoning "));let q=document.createElement("input");q.type="text",q.addEventListener("input",()=>{d[t][e].result.reason=q.value}),p.append(q),p.append(document.createTextNode(" (optional, automatically pings requestor and signs)")),a.append(p),s.append(a)}r.append(s)}f.append(r)}let w=document.createElement("button");w.id="rmtr-review-submit",w.textContent="Submit",w.addEventListener("click",async()=>{if((await P()).revid!==j)return mw.notify("An edit conflict occurred, please start over!",{type:"error"});w.disabled=!0,b.style.display="inline-block";let t=N,n={remove:{},move:{},total:0};for(let s of Object.values(d))for(let e of s)if(e.result){if("remove"in e.result)t=t.replace(e.full+`
`,"").replace(e.full,""),e.result.reason in n.remove||(n.remove[e.result.reason]=[]),n.remove[e.result.reason].push(e),n.total++;else if("move"in e.result){let i=y[y.indexOf(e.result.section)+1];t=t.replace(e.full+`
`,"").replace(e.full,""),t=t.replace(new RegExp(`(
?
?(?:={3,} ?${i} ?={3,}|$))`),`
${e.full}${e.result.reason?`
:: ${e.requester&&e.requester.length>0?mw.util.isIPAddress(e.requester)?"":`@[[User:${e.requester}|${e.requester}]] `:""} ${e.result.reason} ~~~~`:""}$1`),e.result.section in n.move||(n.move[e.result.section]=[]),n.move[e.result.section].push(e),n.total++}}if(n.total===0)return w.disabled=!1,b.style.display="none",mw.notify("No changes to make!",{type:"error"});let c=Object.values(d).every(s=>s.every(e=>e.result&&"remove"in e.result)),r=`Handled ${n.total} request${n.total>1?"s":""}: ${Object.entries(n.remove).length>0?`Removed ${Object.entries(n.remove).map(([s,e])=>`${e.map(i=>`[[${i.original}]]`).join(", ")} as ${s.toLowerCase()}`).join(", ")}`:""}${Object.entries(n.move).length>0?`${Object.entries(n.remove).length>0?", ":""}Moved ${Object.entries(n.move).map(([s,e])=>`${e.map(i=>`[[${i.original}]]`).join(", ")} to "${s}"`).join(", ")}`:""}${c?" (no requests remain)":""} (via [[User:Eejit43/scripts/rmtr-helper|script]])`;await new mw.Api().edit(mw.config.get("wgPageName"),()=>({text:t,summary:r})),mw.notify(`Successfully handled ${n.total} requests, reloading...`,{type:"success"}),L=!1,window.location.reload()});let b=document.createElement("span");b.id="rmtr-review-loading",b.style.display="none",w.append(b),f.append(w),mw.util.$content[0].prepend(f),f.scrollIntoView()})});async function P(){return(await new mw.Api().get({action:"query",formatversion:"2",prop:"revisions",rvprop:["content","ids"],rvslots:"main",titles:mw.config.get("wgPageName")})).query.pages[0].revisions[0]}})();
// </nowiki>
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3R5bGVzL3JtdHItaGVscGVyLmNzcyIsICIuLi9zY3JpcHRzL3JtdHItaGVscGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIjcm10ci1yZXZpZXctcmVzdWx0e21hcmdpbjoxZW07Ym9yZGVyOjFweCBzb2xpZCAjYTJhOWIxO2JvcmRlci1yYWRpdXM6MnB4O2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTtwYWRkaW5nOjIuNSU7Y29sb3I6IzIwMjEyMjtmb250LXNpemU6LjhlbX0jcm10ci1yZXZpZXctaGVhZGVye21hcmdpbi1ib3R0b206LjVlbTtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjEuNWVtfS5ybXRyLXJldmlldy1oZWFkZXJ7bWFyZ2luOi41ZW0gMDtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjFlbX0ucm10ci1yZXZpZXctaW52YWxpZC13YXJuaW5ne2NvbG9yOiNjZDVjNWM7Zm9udC13ZWlnaHQ6NzAwfS5ybXRyLXJldmlldy1yZXF1ZXN0LWNoZWNrYm94e21hcmdpbjozcHggM3B4IDB9LnJtdHItcmV2aWV3LXNlY3Rpb24tY29udGVudHttYXJnaW4tbGVmdDoxZW07bGluZS1oZWlnaHQ6MS4zfS5ybXRyLXJldmlldy1zZWN0aW9uLWNvbnRlbnQgbGkrbGl7bWFyZ2luLXRvcDouNHJlbTttYXJnaW4tYm90dG9tOi40cmVtfSNybXRyLXJldmlldy1zdWJtaXR7bWFyZ2luLXRvcDouMmVtfSNybXRyLXJldmlldy1sb2FkaW5ne2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tO21hcmdpbi10b3A6LS4zZW07bWFyZ2luLWxlZnQ6M3B4O2hlaWdodDoxLjNlbTtvdmVyZmxvdzpoaWRkZW47bGluZS1oZWlnaHQ6MS41ZW19I3JtdHItcmV2aWV3LWxvYWRpbmc6YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtdGFibGU7YW5pbWF0aW9uOnJtdHItcmV2aWV3LWxvYWRpbmcgLjhzIHN0ZXBzKDEwKSBpbmZpbml0ZTtjb250ZW50OlwiXFwyODBiXFxhXFwyODE5XFxhXFwyODM5XFxhXFwyODM4XFxhXFwyODNjXFxhXFwyODM0XFxhXFwyODI2XFxhXFwyODI3XFxhXFwyODA3XFxhXFwyODBmXCI7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOnByZX1Aa2V5ZnJhbWVzIHJtdHItcmV2aWV3LWxvYWRpbmd7dG97dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTE1ZW0pfX1cbiIsICJpbXBvcnQgdHlwZSB7IEFwaVF1ZXJ5UmV2aXNpb25zUGFyYW1zIH0gZnJvbSAndHlwZXMtbWVkaWF3aWtpL2FwaV9wYXJhbXMnO1xuaW1wb3J0IHR5cGUgeyBQYWdlUmV2aXNpb25zUmVzdWx0IH0gZnJvbSAnLi4vZ2xvYmFsLXR5cGVzJztcbmltcG9ydCBjc3NDb250ZW50IGZyb20gJy4uL3N0eWxlcy9ybXRyLWhlbHBlci5jc3MnIHdpdGggeyB0eXBlOiAnY3NzJyB9O1xuXG5tdy5sb2FkZXIudXNpbmcoWydtZWRpYXdpa2kudXRpbCddLCAoKSA9PiB7XG4gICAgaWYgKG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSAhPT0gJ1dpa2lwZWRpYTpSZXF1ZXN0ZWRfbW92ZXMvVGVjaG5pY2FsX3JlcXVlc3RzJykgcmV0dXJuO1xuXG4gICAgbXcudXRpbC5hZGRDU1MoY3NzQ29udGVudCk7XG5cbiAgICBjb25zdCBuYW1lc3BhY2VzID0gbXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VJZHMnKTtcblxuICAgIGxldCBkaXNwbGF5ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGxpbmsgPSBtdy51dGlsLmFkZFBvcnRsZXRMaW5rKFxuICAgICAgICBtdy5jb25maWcuZ2V0KCdza2luJykgPT09ICdtaW5lcnZhJyA/ICdwLXRiJyA6ICdwLWNhY3Rpb25zJyxcbiAgICAgICAgJyMnLFxuICAgICAgICAnUmV2aWV3IG1vdmUgcmVxdWVzdHMnLFxuICAgICAgICAncmV2aWV3LXJtdHItcmVxdWVzdHMnLFxuICAgICkhO1xuXG4gICAgbGluay5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGxldCBzaG91bGRTdG9wVGFiQ2xvc3VyZSA9IHRydWU7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChzaG91bGRTdG9wVGFiQ2xvc3VyZSkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGRpc3BsYXllZCkgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNybXRyLXJldmlldy1yZXN1bHQnKT8uc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgZWxzZSBkaXNwbGF5ZWQgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHBhZ2VSZXZpc2lvbiA9IGF3YWl0IGdldFBhZ2VSZXZpc2lvbigpO1xuXG4gICAgICAgIGNvbnN0IHJldklkID0gcGFnZVJldmlzaW9uLnJldmlkO1xuICAgICAgICBjb25zdCBwYWdlQ29udGVudCA9IHBhZ2VSZXZpc2lvbi5zbG90cy5tYWluLmNvbnRlbnQ7XG5cbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBbXG4gICAgICAgICAgICAnVW5jb250cm92ZXJzaWFsIHRlY2huaWNhbCByZXF1ZXN0cycsXG4gICAgICAgICAgICAnUmVxdWVzdHMgdG8gcmV2ZXJ0IHVuZGlzY3Vzc2VkIG1vdmVzJyxcbiAgICAgICAgICAgICdDb250ZXN0ZWQgdGVjaG5pY2FsIHJlcXVlc3RzJyxcbiAgICAgICAgICAgICdBZG1pbmlzdHJhdG9yIG5lZWRlZCcsXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgZGVmYXVsdE1vdmVTZWN0aW9uID0gc2VjdGlvbnNbMl07XG4gICAgICAgIGNvbnN0IGZhbGxiYWNrRGVmYXVsdE1vdmVTZWN0aW9uID0gc2VjdGlvbnNbM107XG5cbiAgICAgICAgaW50ZXJmYWNlIFJlcXVlc3Qge1xuICAgICAgICAgICAgc2lnOiBzdHJpbmc7XG4gICAgICAgICAgICByZXF1ZXN0ZXI/OiBzdHJpbmc7XG4gICAgICAgICAgICByZWFzb246IHN0cmluZztcbiAgICAgICAgICAgIGZ1bGw6IHN0cmluZztcbiAgICAgICAgICAgIG9yaWdpbmFsOiBzdHJpbmc7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogc3RyaW5nO1xuICAgICAgICAgICAgZWxlbWVudDogSFRNTExJRWxlbWVudDtcbiAgICAgICAgICAgIHJlc3VsdD86IFJlcXVlc3RSZXN1bHRNb3ZlIHwgUmVxdWVzdFJlc3VsdFJlbW92ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGludGVyZmFjZSBSZXF1ZXN0UmVzdWx0TW92ZSB7XG4gICAgICAgICAgICBtb3ZlOiBib29sZWFuO1xuICAgICAgICAgICAgc2VjdGlvbjogc3RyaW5nO1xuICAgICAgICAgICAgcmVhc29uPzogc3RyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaW50ZXJmYWNlIFJlcXVlc3RSZXN1bHRSZW1vdmUge1xuICAgICAgICAgICAgcmVtb3ZlOiBib29sZWFuO1xuICAgICAgICAgICAgcmVhc29uOiBzdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhbGxSZXF1ZXN0czogUmVjb3JkPHN0cmluZywgUmVxdWVzdFtdPiA9IHt9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQYXJzZXMgdGhlIHBhcmFtZXRlcnMgb2YgYSBnaXZlbiBXaWtpdGV4dCB0ZW1wbGF0ZS5cbiAgICAgICAgICogQHBhcmFtIHRlbXBsYXRlIFRoZSB0ZW1wbGF0ZSB0byBwYXJzZS5cbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGVtcGxhdGVQYXJhbWV0ZXJzKHRlbXBsYXRlOiBzdHJpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IHJhd1BhcmFtZXRlcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgICAgIGNvbnN0IGlnbm9yZWRTdGFydFN5bWJvbHMgPSBbJ1snLCAneyddO1xuICAgICAgICAgICAgY29uc3QgaWdub3JlZEVuZFN5bWJvbHMgPSBbJ10nLCAnfSddO1xuXG4gICAgICAgICAgICBsZXQgaW5zaWRlTGlua09yVGVtcGxhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBjdXJyZW50VGV4dCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGVtcGxhdGUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hhcmFjdGVyID0gdGVtcGxhdGVbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRDaGFyYWN0ZXI6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRlbXBsYXRlW2luZGV4ICsgMV07XG5cbiAgICAgICAgICAgICAgICBpZiAoKGNoYXJhY3RlciA9PT0gJ3wnICYmICFpbnNpZGVMaW5rT3JUZW1wbGF0ZSkgfHwgaW5kZXggPT09IHRlbXBsYXRlLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJhY3RlciAhPT0gJ3wnKSBjdXJyZW50VGV4dCArPSBjaGFyYWN0ZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgcmF3UGFyYW1ldGVycy5wdXNoKGN1cnJlbnRUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQgPSAnJztcblxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCArPSBjaGFyYWN0ZXI7XG5cbiAgICAgICAgICAgICAgICBpZiAoaWdub3JlZFN0YXJ0U3ltYm9scy5zb21lKChzeW1ib2wpID0+IHN5bWJvbCA9PT0gY2hhcmFjdGVyICYmIHN5bWJvbCA9PT0gbmV4dENoYXJhY3RlcikpIGluc2lkZUxpbmtPclRlbXBsYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpZ25vcmVkRW5kU3ltYm9scy5zb21lKChzeW1ib2wpID0+IHN5bWJvbCA9PT0gY2hhcmFjdGVyICYmIHN5bWJvbCA9PT0gbmV4dENoYXJhY3RlcikpIGluc2lkZUxpbmtPclRlbXBsYXRlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4gPSB7fTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIHBhcmFtZXRlcl0gb2YgcmF3UGFyYW1ldGVycy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGxpdFBhcmFtZXRlciA9IHBhcmFtZXRlci5zcGxpdCgnPScpLm1hcCgodmFsdWUpID0+IHZhbHVlLnRyaW0oKSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3BsaXRQYXJhbWV0ZXIubGVuZ3RoID09PSAxKSBzcGxpdFBhcmFtZXRlci51bnNoaWZ0KChpbmRleCArIDEpLnRvU3RyaW5nKCkpO1xuXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyc1tzcGxpdFBhcmFtZXRlci5zaGlmdCgpIV0gPSBzcGxpdFBhcmFtZXRlci5qb2luKCc9Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXJzO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uQ29udGVudCA9IHBhZ2VDb250ZW50XG4gICAgICAgICAgICAgICAgLnNwbGl0KG5ldyBSZWdFeHAoYD17Myx9ID8ke3NlY3Rpb259ID89ezMsfWApKVsxXVxuICAgICAgICAgICAgICAgIC5zcGxpdCgvPXszLH0vbSlbMF1cbiAgICAgICAgICAgICAgICAudHJpbSgpO1xuXG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkUmVxdWVzdHMgPSBzZWN0aW9uQ29udGVudC5tYXRjaCgvKD86XFwqID9cXG4pP1sgKjpdKnt7cm1hc3Npc3RcXC9jb3JlLis/KD89WyAqOl0qe3tybWFzc2lzdFxcL2NvcmV8JCkvZ2lzKTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoZWRSZXF1ZXN0cylcbiAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0c1tzZWN0aW9uXSA9IG1hdGNoZWRSZXF1ZXN0cy5tYXAoKHJlcXVlc3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3QudHJpbSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBwYXJzZVRlbXBsYXRlUGFyYW1ldGVycyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QucmVwbGFjZUFsbCgvKD86XFwqID9cXG4pP1sgKjpdKnt7cm1hc3Npc3RcXC9jb3JlXFxzKlxcfHx9fSg/IVteXFxuXSp9fSkuKi9naXMsICcnKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmZ1bGwgPSByZXF1ZXN0O1xuXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMub3JpZ2luYWwgPSBwYXJhbWV0ZXJzWzFdPy5yZXBsYWNlKC9eXFxbKy8sICcnKS5yZXBsYWNlKC9dKyQvLCAnJykgPz8gJ1VOS05PV04nO1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmRlc3RpbmF0aW9uID0gcGFyYW1ldGVyc1syXT8ucmVwbGFjZSgvXlxcWysvLCAnJykucmVwbGFjZSgvXSskLywgJycpID8/ICdVTktOT1dOJztcblxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLnJlcXVlc3RlciA/Pz0gcGFyYW1ldGVycy5zaWc/Lm1hdGNoKC9cXFtcXFtVc2VyOiguKj8pKFxcfHxdXSkvKT8uWzFdLnRyaW0oKTtcblxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFyYW1ldGVyc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhcmFtZXRlcnNbMl07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnMgYXMgdW5rbm93biBhcyBSZXF1ZXN0O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWxsUmVxdWVzdHNbc2VjdGlvbl0gPSBbXTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoYWxsUmVxdWVzdHMpLm1hcChhc3luYyAoWywgcmVxdWVzdHNdKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzLm1hcChhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXdPbGRUaXRsZSA9IG13LlRpdGxlLm5ld0Zyb21UZXh0KHJlcXVlc3Qub3JpZ2luYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXdOZXdUaXRsZSA9IG13LlRpdGxlLm5ld0Zyb21UZXh0KHJlcXVlc3QuZGVzdGluYXRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW13T2xkVGl0bGUpIHJldHVybiBtdy5ub3RpZnkoYEludmFsaWQgdGl0bGUgXCIke3JlcXVlc3Qub3JpZ2luYWx9XCIhYCwgeyB0eXBlOiAnZXJyb3InIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtd05ld1RpdGxlKSByZXR1cm4gbXcubm90aWZ5KGBJbnZhbGlkIHRpdGxlIFwiJHtyZXF1ZXN0LmRlc3RpbmF0aW9ufVwiIWAsIHsgdHlwZTogJ2Vycm9yJyB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWRUaXRsZSA9ICEvWyM8PltcXF17fH1dLy50ZXN0KHJlcXVlc3QuZGVzdGluYXRpb24pICYmIG13TmV3VGl0bGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludmFsaWRUaXRsZVdhcm5pbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkVGl0bGVXYXJuaW5nLmNsYXNzTGlzdC5hZGQoJ3JtdHItcmV2aWV3LWludmFsaWQtd2FybmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZFRpdGxlV2FybmluZy50ZXh0Q29udGVudCA9IGBJbnZhbGlkIHRpdGxlIFwiJHtyZXF1ZXN0LmRlc3RpbmF0aW9ufVwiIWA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkTmFtZXNwYWNlID0gIVtuYW1lc3BhY2VzLmZpbGUsIG5hbWVzcGFjZXMuY2F0ZWdvcnldLnNvbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWVzcGFjZSkgPT4gbXdPbGRUaXRsZS5nZXROYW1lc3BhY2VJZCgpID09PSBuYW1lc3BhY2UgfHwgbXdOZXdUaXRsZS5nZXROYW1lc3BhY2VJZCgpID09PSBuYW1lc3BhY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnZhbGlkTmFtZXNwYWNlV2FybmluZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWROYW1lc3BhY2VXYXJuaW5nLmNsYXNzTGlzdC5hZGQoJ3JtdHItcmV2aWV3LWludmFsaWQtd2FybmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZE5hbWVzcGFjZVdhcm5pbmcudGV4dENvbnRlbnQgPSBgV2FybmluZzogb3JpZ2luYWwgb3IgZGVzdGluYXRpb24gcGFnZSBpcyBpbiBuYW1lc3BhY2UgXCIke213TmV3VGl0bGUuZ2V0TmFtZXNwYWNlSWQoKSA9PT0gbmFtZXNwYWNlcy5maWxlID8gJ2ZpbGUnIDogJ2NhdGVnb3J5J31cIiFgO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRXaWtpdGV4dCA9IGF3YWl0IG5ldyBtdy5BcGkoKS5wYXJzZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgW1s6JHtyZXF1ZXN0Lm9yaWdpbmFsfV1dIFx1MjE5MiAke3ZhbGlkVGl0bGUgPyBgW1s6JHtyZXF1ZXN0LmRlc3RpbmF0aW9ufV1dYCA6IGludmFsaWRUaXRsZVdhcm5pbmcub3V0ZXJIVE1MfSByZXF1ZXN0ZWQgYnkgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5yZXF1ZXN0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbXcudXRpbC5pc0lQQWRkcmVzcyhyZXF1ZXN0LnJlcXVlc3RlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGBbW1NwZWNpYWw6Q29udHJpYnV0aW9ucy8ke3JlcXVlc3QucmVxdWVzdGVyfXwke3JlcXVlc3QucmVxdWVzdGVyfV1dYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYFtbVXNlcjoke3JlcXVlc3QucmVxdWVzdGVyfXwke3JlcXVlc3QucmVxdWVzdGVyfV1dYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoLyhcXFt7Mn1TcGVjaWFsOkNvbnRyaWJ1dGlvbnNcXC8oLio/KVxcfFxcMl17Mn0pLy5leGVjKHJlcXVlc3Quc2lnKT8uWzFdID8/ICcodW5rbm93biknKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2l0aCByZWFzb25pbmcgXCIke3JlcXVlc3QucmVhc29ufVwiYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRIdG1sID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhwYXJzZWRXaWtpdGV4dCwgJ3RleHQvaHRtbCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RWxlbWVudC5pbm5lckhUTUwgPSBwYXJzZWRIdG1sLnF1ZXJ5U2VsZWN0b3IoJ2Rpdi5tdy1wYXJzZXItb3V0cHV0JykhLmZpcnN0RWxlbWVudENoaWxkIS5pbm5lckhUTUwhO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkTmFtZXNwYWNlKSByZXF1ZXN0RWxlbWVudC5hcHBlbmQoaW52YWxpZE5hbWVzcGFjZVdhcm5pbmcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmVsZW1lbnQgPSByZXF1ZXN0RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG91dHB1dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgb3V0cHV0RWxlbWVudC5pZCA9ICdybXRyLXJldmlldy1yZXN1bHQnO1xuXG4gICAgICAgIGNvbnN0IGhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBoZWFkZXIuaWQgPSAncm10ci1yZXZpZXctaGVhZGVyJztcbiAgICAgICAgaGVhZGVyLnRleHRDb250ZW50ID0gJ1RlY2huaWNhbCBtb3ZlIHJlcXVlc3RzIHJldmlldyc7XG5cbiAgICAgICAgb3V0cHV0RWxlbWVudC5hcHBlbmQoaGVhZGVyKTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtzZWN0aW9uSW5kZXgsIFtzZWN0aW9uLCByZXF1ZXN0c11dIG9mIE9iamVjdC5lbnRyaWVzKGFsbFJlcXVlc3RzKS5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25IZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHNlY3Rpb25IZWFkZXIuY2xhc3NMaXN0LmFkZCgncm10ci1yZXZpZXctaGVhZGVyJyk7XG4gICAgICAgICAgICBzZWN0aW9uSGVhZGVyLnRleHRDb250ZW50ID0gc2VjdGlvbjtcblxuICAgICAgICAgICAgb3V0cHV0RWxlbWVudC5hcHBlbmQoc2VjdGlvbkhlYWRlcik7XG5cbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25Db250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBzZWN0aW9uQ29udGVudC5jbGFzc0xpc3QuYWRkKCdybXRyLXJldmlldy1zZWN0aW9uLWNvbnRlbnQnKTtcblxuICAgICAgICAgICAgaWYgKHJlcXVlc3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vUmVxdWVzdHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBub1JlcXVlc3RzLnRleHRDb250ZW50ID0gJ05vIHJlcXVlc3RzIGluIHRoaXMgc2VjdGlvbic7XG5cbiAgICAgICAgICAgICAgICBzZWN0aW9uQ29udGVudC5hcHBlbmQobm9SZXF1ZXN0cyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RzTGlzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3VsJyk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtyZXF1ZXN0SW5kZXgsIHJlcXVlc3RdIG9mIHJlcXVlc3RzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0RWxlbWVudCA9IHJlcXVlc3QuZWxlbWVudDtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVSZXF1ZXN0Q2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0Q2hlY2tib3gudHlwZSA9ICdjaGVja2JveCc7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RDaGVja2JveC5jbGFzc0xpc3QuYWRkKCdybXRyLXJldmlldy1yZXF1ZXN0LWNoZWNrYm94Jyk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RDaGVja2JveC5pZCA9IGBybXRyLXJldmlldy1yZW1vdmUtcmVxdWVzdC0ke3NlY3Rpb25JbmRleH0tJHtyZXF1ZXN0SW5kZXh9YDtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdENoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdmVSZXF1ZXN0Q2hlY2tib3guY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFJlcXVlc3RzW3NlY3Rpb25dW3JlcXVlc3RJbmRleF0ucmVzdWx0ID0geyByZW1vdmU6IHRydWUsIHJlYXNvbjogcmVtb3ZlUmVxdWVzdERyb3Bkb3duLnZhbHVlIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdEV4dHJhSW5wdXRzLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uQ2hlY2tib3guZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgYWxsUmVxdWVzdHNbc2VjdGlvbl1bcmVxdWVzdEluZGV4XS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdEV4dHJhSW5wdXRzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkNoZWNrYm94LmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZVJlcXVlc3RMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RMYWJlbC5odG1sRm9yID0gYHJtdHItcmV2aWV3LXJlbW92ZS1yZXF1ZXN0LSR7c2VjdGlvbkluZGV4fS0ke3JlcXVlc3RJbmRleH1gO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0TGFiZWwudGV4dENvbnRlbnQgPSAnUmVtb3ZlIHJlcXVlc3QnO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RFbGVtZW50LmFwcGVuZChyZW1vdmVSZXF1ZXN0Q2hlY2tib3gpO1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RWxlbWVudC5hcHBlbmQocmVtb3ZlUmVxdWVzdExhYmVsKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVSZXF1ZXN0RXh0cmFJbnB1dHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RFeHRyYUlucHV0cy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RFeHRyYUlucHV0cy5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyBhcyAnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlUmVxdWVzdERyb3Bkb3duID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uID09PSAnQ29udGVzdGVkIHRlY2huaWNhbCByZXF1ZXN0cycpIHJlbW92ZVJlcXVlc3REcm9wZG93bi52YWx1ZSA9ICdDb250ZXN0ZWQnO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0RHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgKGFsbFJlcXVlc3RzW3NlY3Rpb25dW3JlcXVlc3RJbmRleF0ucmVzdWx0IGFzIFJlcXVlc3RSZXN1bHRSZW1vdmUpLnJlYXNvbiA9IHJlbW92ZVJlcXVlc3REcm9wZG93bi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlUmVxdWVzdERyb3Bkb3duT3B0aW9ucyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb21wbGV0ZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlc3RlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQWxyZWFkeSBkb25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdJbnZhbGlkIHBhZ2UgbmFtZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAnSW5jb3JyZWN0IHZlbnVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdXaXRoZHJhd24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1N0YWxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdOb3QgZG9uZScsXG4gICAgICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgcmVtb3ZlUmVxdWVzdERyb3Bkb3duT3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uRWxlbWVudC52YWx1ZSA9IG9wdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQudGV4dENvbnRlbnQgPSBvcHRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3REcm9wZG93bi5hcHBlbmQob3B0aW9uRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0RXh0cmFJbnB1dHMuYXBwZW5kKHJlbW92ZVJlcXVlc3REcm9wZG93bik7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEVsZW1lbnQuYXBwZW5kKHJlbW92ZVJlcXVlc3RFeHRyYUlucHV0cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3dpdGNoU2VjdGlvbkNoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkNoZWNrYm94LnR5cGUgPSAnY2hlY2tib3gnO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uQ2hlY2tib3guY2xhc3NMaXN0LmFkZCgncm10ci1yZXZpZXctcmVxdWVzdC1jaGVja2JveCcpO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uQ2hlY2tib3guaWQgPSBgcm10ci1yZXZpZXctbW92ZS1yZXF1ZXN0LSR7c2VjdGlvbkluZGV4fS0ke3JlcXVlc3RJbmRleH1gO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uQ2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN3aXRjaFNlY3Rpb25DaGVja2JveC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFsbFJlcXVlc3RzW3NlY3Rpb25dW3JlcXVlc3RJbmRleF0ucmVzdWx0IGFzIFJlcXVlc3RSZXN1bHRNb3ZlKSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogc3dpdGNoU2VjdGlvbkRyb3Bkb3duLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0Q2hlY2tib3guZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgYWxsUmVxdWVzdHNbc2VjdGlvbl1bcmVxdWVzdEluZGV4XS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdENoZWNrYm94LmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN3aXRjaFNlY3Rpb25MYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25MYWJlbC5odG1sRm9yID0gYHJtdHItcmV2aWV3LW1vdmUtcmVxdWVzdC0ke3NlY3Rpb25JbmRleH0tJHtyZXF1ZXN0SW5kZXh9YDtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkxhYmVsLnRleHRDb250ZW50ID0gJ1N3aXRjaCBzZWN0aW9uJztcblxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RWxlbWVudC5hcHBlbmQoc3dpdGNoU2VjdGlvbkNoZWNrYm94KTtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEVsZW1lbnQuYXBwZW5kKHN3aXRjaFNlY3Rpb25MYWJlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMuYXBwZW5kKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcgdG8gJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN3aXRjaFNlY3Rpb25Ecm9wZG93biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcpO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgKGFsbFJlcXVlc3RzW3NlY3Rpb25dW3JlcXVlc3RJbmRleF0ucmVzdWx0IGFzIFJlcXVlc3RSZXN1bHRNb3ZlKS5zZWN0aW9uID0gc3dpdGNoU2VjdGlvbkRyb3Bkb3duLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBzZWN0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbiA9PT0gc2VjdGlvbikgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQuc2VsZWN0ZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9PT0gKHNlY3Rpb24gPT09IGRlZmF1bHRNb3ZlU2VjdGlvbiA/IGZhbGxiYWNrRGVmYXVsdE1vdmVTZWN0aW9uIDogZGVmYXVsdE1vdmVTZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQudmFsdWUgPSBvcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25FbGVtZW50LnRleHRDb250ZW50ID0gb3B0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRHJvcGRvd24uYXBwZW5kKG9wdGlvbkVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzLmFwcGVuZChzd2l0Y2hTZWN0aW9uRHJvcGRvd24pO1xuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cy5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyB3aXRoIHJlYXNvbmluZyAnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3dpdGNoU2VjdGlvblJlYXNvbmluZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25SZWFzb25pbmcudHlwZSA9ICd0ZXh0JztcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvblJlYXNvbmluZy5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIChhbGxSZXF1ZXN0c1tzZWN0aW9uXVtyZXF1ZXN0SW5kZXhdLnJlc3VsdCBhcyBSZXF1ZXN0UmVzdWx0UmVtb3ZlKS5yZWFzb24gPSBzd2l0Y2hTZWN0aW9uUmVhc29uaW5nLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMuYXBwZW5kKHN3aXRjaFNlY3Rpb25SZWFzb25pbmcpO1xuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cy5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyAob3B0aW9uYWwsIGF1dG9tYXRpY2FsbHkgcGluZ3MgcmVxdWVzdG9yIGFuZCBzaWducyknKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEVsZW1lbnQuYXBwZW5kKHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHNMaXN0LmFwcGVuZChyZXF1ZXN0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2VjdGlvbkNvbnRlbnQuYXBwZW5kKHJlcXVlc3RzTGlzdCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG91dHB1dEVsZW1lbnQuYXBwZW5kKHNlY3Rpb25Db250ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN1Ym1pdEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICBzdWJtaXRCdXR0b24uaWQgPSAncm10ci1yZXZpZXctc3VibWl0JztcbiAgICAgICAgc3VibWl0QnV0dG9uLnRleHRDb250ZW50ID0gJ1N1Ym1pdCc7XG4gICAgICAgIHN1Ym1pdEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1BhZ2VSZXZpc2lvbiA9IGF3YWl0IGdldFBhZ2VSZXZpc2lvbigpO1xuXG4gICAgICAgICAgICBpZiAobmV3UGFnZVJldmlzaW9uLnJldmlkICE9PSByZXZJZCkgcmV0dXJuIG13Lm5vdGlmeSgnQW4gZWRpdCBjb25mbGljdCBvY2N1cnJlZCwgcGxlYXNlIHN0YXJ0IG92ZXIhJywgeyB0eXBlOiAnZXJyb3InIH0pO1xuXG4gICAgICAgICAgICBzdWJtaXRCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgbG9hZGluZ1NwaW5uZXIuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xuXG4gICAgICAgICAgICBsZXQgZW5kUmVzdWx0ID0gcGFnZUNvbnRlbnQ7XG5cbiAgICAgICAgICAgIGludGVyZmFjZSBBbGxDaGFuZ2VzIHtcbiAgICAgICAgICAgICAgICByZW1vdmU6IFJlY29yZDxzdHJpbmcsIFJlcXVlc3RbXT47XG4gICAgICAgICAgICAgICAgbW92ZTogUmVjb3JkPHN0cmluZywgUmVxdWVzdFtdPjtcbiAgICAgICAgICAgICAgICB0b3RhbDogbnVtYmVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VzOiBBbGxDaGFuZ2VzID0geyByZW1vdmU6IHt9LCBtb3ZlOiB7fSwgdG90YWw6IDAgfTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIE9iamVjdC52YWx1ZXMoYWxsUmVxdWVzdHMpKVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiBzZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVxdWVzdC5yZXN1bHQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICgncmVtb3ZlJyBpbiByZXF1ZXN0LnJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kUmVzdWx0ID0gZW5kUmVzdWx0LnJlcGxhY2UocmVxdWVzdC5mdWxsICsgJ1xcbicsICcnKS5yZXBsYWNlKHJlcXVlc3QuZnVsbCwgJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVxdWVzdC5yZXN1bHQucmVhc29uIGluIGNoYW5nZXMucmVtb3ZlKSkgY2hhbmdlcy5yZW1vdmVbcmVxdWVzdC5yZXN1bHQucmVhc29uXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy5yZW1vdmVbcmVxdWVzdC5yZXN1bHQucmVhc29uXS5wdXNoKHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy50b3RhbCsrO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCdtb3ZlJyBpbiByZXF1ZXN0LnJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VjdGlvblRpdGxlQWZ0ZXIgPSBzZWN0aW9uc1tzZWN0aW9ucy5pbmRleE9mKHJlcXVlc3QucmVzdWx0LnNlY3Rpb24pICsgMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFJlc3VsdCA9IGVuZFJlc3VsdC5yZXBsYWNlKHJlcXVlc3QuZnVsbCArICdcXG4nLCAnJykucmVwbGFjZShyZXF1ZXN0LmZ1bGwsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFJlc3VsdCA9IGVuZFJlc3VsdC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBSZWdFeHAoYChcXG4/XFxuPyg/Oj17Myx9ID8ke3NlY3Rpb25UaXRsZUFmdGVyfSA/PXszLH18JCkpYCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYFxcbiR7cmVxdWVzdC5mdWxsfSR7cmVxdWVzdC5yZXN1bHQucmVhc29uID8gYFxcbjo6ICR7cmVxdWVzdC5yZXF1ZXN0ZXIgJiYgcmVxdWVzdC5yZXF1ZXN0ZXIubGVuZ3RoID4gMCA/IChtdy51dGlsLmlzSVBBZGRyZXNzKHJlcXVlc3QucmVxdWVzdGVyKSA/ICcnIDogYEBbW1VzZXI6JHtyZXF1ZXN0LnJlcXVlc3Rlcn18JHtyZXF1ZXN0LnJlcXVlc3Rlcn1dXSBgKSA6ICcnfSAke3JlcXVlc3QucmVzdWx0LnJlYXNvbn0gfn5+fmAgOiAnJ30kMWAsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVxdWVzdC5yZXN1bHQuc2VjdGlvbiBpbiBjaGFuZ2VzLm1vdmUpKSBjaGFuZ2VzLm1vdmVbcmVxdWVzdC5yZXN1bHQuc2VjdGlvbl0gPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy5tb3ZlW3JlcXVlc3QucmVzdWx0LnNlY3Rpb25dLnB1c2gocmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLnRvdGFsKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLnRvdGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc3VibWl0QnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbG9hZGluZ1NwaW5uZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgICByZXR1cm4gbXcubm90aWZ5KCdObyBjaGFuZ2VzIHRvIG1ha2UhJywgeyB0eXBlOiAnZXJyb3InIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBub1JlbWFpbmluZyA9IE9iamVjdC52YWx1ZXMoYWxsUmVxdWVzdHMpLmV2ZXJ5KChzZWN0aW9uKSA9PlxuICAgICAgICAgICAgICAgIHNlY3Rpb24uZXZlcnkoKHJlcXVlc3QpID0+IHJlcXVlc3QucmVzdWx0ICYmICdyZW1vdmUnIGluIHJlcXVlc3QucmVzdWx0KSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IGVkaXRTdW1tYXJ5ID0gYEhhbmRsZWQgJHtjaGFuZ2VzLnRvdGFsfSByZXF1ZXN0JHtjaGFuZ2VzLnRvdGFsID4gMSA/ICdzJyA6ICcnfTogJHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhjaGFuZ2VzLnJlbW92ZSkubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICA/IGBSZW1vdmVkICR7T2JqZWN0LmVudHJpZXMoY2hhbmdlcy5yZW1vdmUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKFtyZWFzb24sIHBhZ2VzXSkgPT4gYCR7cGFnZXMubWFwKChwYWdlKSA9PiBgW1ske3BhZ2Uub3JpZ2luYWx9XV1gKS5qb2luKCcsICcpfSBhcyAke3JlYXNvbi50b0xvd2VyQ2FzZSgpfWApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCcsICcpfWBcbiAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgfSR7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hhbmdlcy5tb3ZlKS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgID8gYCR7T2JqZWN0LmVudHJpZXMoY2hhbmdlcy5yZW1vdmUpLmxlbmd0aCA+IDAgPyAnLCAnIDogJyd9TW92ZWQgJHtPYmplY3QuZW50cmllcyhjaGFuZ2VzLm1vdmUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKFtkZXN0aW5hdGlvbiwgcGFnZXNdKSA9PiBgJHtwYWdlcy5tYXAoKHBhZ2UpID0+IGBbWyR7cGFnZS5vcmlnaW5hbH1dXWApLmpvaW4oJywgJyl9IHRvIFwiJHtkZXN0aW5hdGlvbn1cImApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCcsICcpfWBcbiAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgfSR7bm9SZW1haW5pbmcgPyAnIChubyByZXF1ZXN0cyByZW1haW4pJyA6ICcnfSAodmlhIFtbVXNlcjpFZWppdDQzL3NjcmlwdHMvcm10ci1oZWxwZXJ8c2NyaXB0XV0pYDtcblxuICAgICAgICAgICAgYXdhaXQgbmV3IG13LkFwaSgpLmVkaXQobXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLCAoKSA9PiAoeyB0ZXh0OiBlbmRSZXN1bHQsIHN1bW1hcnk6IGVkaXRTdW1tYXJ5IH0pKTtcblxuICAgICAgICAgICAgbXcubm90aWZ5KGBTdWNjZXNzZnVsbHkgaGFuZGxlZCAke2NoYW5nZXMudG90YWx9IHJlcXVlc3RzLCByZWxvYWRpbmcuLi5gLCB7IHR5cGU6ICdzdWNjZXNzJyB9KTtcblxuICAgICAgICAgICAgc2hvdWxkU3RvcFRhYkNsb3N1cmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBsb2FkaW5nU3Bpbm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgbG9hZGluZ1NwaW5uZXIuaWQgPSAncm10ci1yZXZpZXctbG9hZGluZyc7XG4gICAgICAgIGxvYWRpbmdTcGlubmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgICAgc3VibWl0QnV0dG9uLmFwcGVuZChsb2FkaW5nU3Bpbm5lcik7XG5cbiAgICAgICAgb3V0cHV0RWxlbWVudC5hcHBlbmQoc3VibWl0QnV0dG9uKTtcblxuICAgICAgICBtdy51dGlsLiRjb250ZW50WzBdLnByZXBlbmQob3V0cHV0RWxlbWVudCk7XG5cbiAgICAgICAgb3V0cHV0RWxlbWVudC5zY3JvbGxJbnRvVmlldygpO1xuICAgIH0pO1xufSk7XG5cbi8qKlxuICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCBhIHdpa2kgcGFnZSdzIGxhdGVzdCByZXZpc2lvbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0UGFnZVJldmlzaW9uKCkge1xuICAgIHJldHVybiAoXG4gICAgICAgIChhd2FpdCBuZXcgbXcuQXBpKCkuZ2V0KHtcbiAgICAgICAgICAgIGFjdGlvbjogJ3F1ZXJ5JyxcbiAgICAgICAgICAgIGZvcm1hdHZlcnNpb246ICcyJyxcbiAgICAgICAgICAgIHByb3A6ICdyZXZpc2lvbnMnLFxuICAgICAgICAgICAgcnZwcm9wOiBbJ2NvbnRlbnQnLCAnaWRzJ10sXG4gICAgICAgICAgICBydnNsb3RzOiAnbWFpbicsXG4gICAgICAgICAgICB0aXRsZXM6IG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSxcbiAgICAgICAgfSBzYXRpc2ZpZXMgQXBpUXVlcnlSZXZpc2lvbnNQYXJhbXMpKSBhcyBQYWdlUmV2aXNpb25zUmVzdWx0XG4gICAgKS5xdWVyeSEucGFnZXNbMF0ucmV2aXNpb25zWzBdO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7O21CQUFBLElBQUFBLEVBQUE7RUNJQSxHQUFHLE9BQU8sTUFBTSxDQUFDLGdCQUFnQixFQUFHLElBQU0sQ0FDdEMsR0FBSSxHQUFHLE9BQU8sSUFBSSxZQUFZLElBQU0sK0NBQWdELE9BRXBGLEdBQUcsS0FBSyxPQUFPQyxDQUFVLEVBRXpCLElBQU1DLEVBQWEsR0FBRyxPQUFPLElBQUksZ0JBQWdCLEVBRTdDQyxFQUFZLEdBRUgsR0FBRyxLQUFLLGVBQ2pCLEdBQUcsT0FBTyxJQUFJLE1BQU0sSUFBTSxVQUFZLE9BQVMsYUFDL0MsSUFDQSx1QkFDQSxzQkFDSixFQUVLLGlCQUFpQixRQUFTLE1BQU9DLEdBQVUsQ0FDNUNBLEVBQU0sZUFBZSxFQUVyQixJQUFJQyxFQUF1QixHQUszQixHQUpBLE9BQU8saUJBQWlCLGVBQWlCRCxHQUFVLENBQzNDQyxHQUFzQkQsRUFBTSxlQUFlLENBQ25ELENBQUMsRUFFR0QsRUFBVyxPQUFPLFNBQVMsY0FBYyxxQkFBcUIsR0FBRyxlQUFlLEVBQy9FQSxFQUFZLEdBRWpCLElBQU1HLEVBQWUsTUFBTUMsRUFBZ0IsRUFFckNDLEVBQVFGLEVBQWEsTUFDckJHLEVBQWNILEVBQWEsTUFBTSxLQUFLLFFBRXRDSSxFQUFXLENBQ2IscUNBQ0EsdUNBQ0EsK0JBQ0Esc0JBQ0osRUFFTUMsRUFBcUJELEVBQVMsQ0FBQyxFQUMvQkUsRUFBNkJGLEVBQVMsQ0FBQyxFQXdCdkNHLEVBQXlDLENBQUMsRUFNaEQsU0FBU0MsRUFBd0JDLEVBQWtCLENBQy9DLElBQU1DLEVBQTBCLENBQUMsRUFFM0JDLEVBQXNCLENBQUMsSUFBSyxHQUFHLEVBQy9CQyxFQUFvQixDQUFDLElBQUssR0FBRyxFQUUv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TyxFQUFFLFNBQVMsT0FBTyxRQUFRQSxFQUFRLElBQUksRUFDdkYsSUFBSSxDQUFDLENBQUNPLEVBQWFGLENBQUssSUFBTSxHQUFHQSxFQUFNLElBQUtDLEdBQVMsS0FBS0EsRUFBSyxRQUFRLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxRQUFRQyxDQUFXLEdBQUcsRUFDN0csS0FBSyxJQUFJLENBQUMsR0FDZixFQUNWLEdBQUdMLEVBQWMsd0JBQTBCLEVBQUUscURBRTdDLE1BQU0sSUFBSSxHQUFHLElBQUksRUFBRSxLQUFLLEdBQUcsT0FBTyxJQUFJLFlBQVksRUFBRyxLQUFPLENBQUUsS0FBTUgsRUFBVyxRQUFTSSxDQUFZLEVBQUUsRUFFdEcsR0FBRyxPQUFPLHdCQUF3QkgsRUFBUSxLQUFLLDBCQUEyQixDQUFFLEtBQU0sU0FBVSxDQUFDLEVBRTdGN0QsRUFBdUIsR0FFdkIsT0FBTyxTQUFTLE9BQU8sQ0FDM0IsQ0FBQyxFQUVELElBQU0yRCxFQUFpQixTQUFTLGNBQWMsTUFBTSxFQUNwREEsRUFBZSxHQUFLLHNCQUNwQkEsRUFBZSxNQUFNLFFBQVUsT0FFL0JELEVBQWEsT0FBT0MsQ0FBYyxFQUVsQ3JCLEVBQWMsT0FBT29CLENBQVksRUFFakMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxFQUFFLFFBQVFwQixDQUFhLEVBRXpDQSxFQUFjLGVBQWUsQ0FDakMsQ0FBQyxDQUNMLENBQUMsRUFLRCxlQUFlcEMsR0FBa0IsQ0FDN0IsT0FDSyxNQUFNLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxDQUNwQixPQUFRLFFBQ1IsY0FBZSxJQUNmLEtBQU0sWUFDTixPQUFRLENBQUMsVUFBVyxLQUFLLEVBQ3pCLFFBQVMsT0FDVCxPQUFRLEdBQUcsT0FBTyxJQUFJLFlBQVksQ0FDdEMsQ0FBbUMsR0FDckMsTUFBTyxNQUFNLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FDakMiLAogICJuYW1lcyI6IFsicm10cl9oZWxwZXJfZGVmYXVsdCIsICJybXRyX2hlbHBlcl9kZWZhdWx0IiwgIm5hbWVzcGFjZXMiLCAiZGlzcGxheWVkIiwgImV2ZW50IiwgInNob3VsZFN0b3BUYWJDbG9zdXJlIiwgInBhZ2VSZXZpc2lvbiIsICJnZXRQYWdlUmV2aXNpb24iLCAicmV2SWQiLCAicGFnZUNvbnRlbnQiLCAic2VjdGlvbnMiLCAiZGVmYXVsdE1vdmVTZWN0aW9uIiwgImZhbGxiYWNrRGVmYXVsdE1vdmVTZWN0aW9uIiwgImFsbFJlcXVlc3RzIiwgInBhcnNlVGVtcGxhdGVQYXJhbWV0ZXJzIiwgInRlbXBsYXRlIiwgInJhd1BhcmFtZXRlcnMiLCAiaWdub3JlZFN0YXJ0U3ltYm9scyIsICJpZ25vcmVkRW5kU3ltYm9scyIsICJpbnNpZGVMaW5rT3JUZW1wbGF0ZSIsICJjdXJyZW50VGV4dCIsICJpbmRleCIsICJjaGFyYWN0ZXIiLCAibmV4dENoYXJhY3RlciIsICJzeW1ib2wiLCAicGFyYW1ldGVycyIsICJwYXJhbWV0ZXIiLCAic3BsaXRQYXJhbWV0ZXIiLCAidmFsdWUiLCAic2VjdGlvbiIsICJtYXRjaGVkUmVxdWVzdHMiLCAicmVxdWVzdCIsICJyZXF1ZXN0cyIsICJtd09sZFRpdGxlIiwgIm13TmV3VGl0bGUiLCAidmFsaWRUaXRsZSIsICJpbnZhbGlkVGl0bGVXYXJuaW5nIiwgInZhbGlkTmFtZXNwYWNlIiwgIm5hbWVzcGFjZSIsICJpbnZhbGlkTmFtZXNwYWNlV2FybmluZyIsICJwYXJzZWRXaWtpdGV4dCIsICJwYXJzZWRIdG1sIiwgInJlcXVlc3RFbGVtZW50IiwgIm91dHB1dEVsZW1lbnQiLCAiaGVhZGVyIiwgInNlY3Rpb25JbmRleCIsICJzZWN0aW9uSGVhZGVyIiwgInNlY3Rpb25Db250ZW50IiwgIm5vUmVxdWVzdHMiLCAicmVxdWVzdHNMaXN0IiwgInJlcXVlc3RJbmRleCIsICJyZW1vdmVSZXF1ZXN0Q2hlY2tib3giLCAicmVtb3ZlUmVxdWVzdERyb3Bkb3duIiwgInJlbW92ZVJlcXVlc3RFeHRyYUlucHV0cyIsICJzd2l0Y2hTZWN0aW9uQ2hlY2tib3giLCAicmVtb3ZlUmVxdWVzdExhYmVsIiwgInJlbW92ZVJlcXVlc3REcm9wZG93bk9wdGlvbnMiLCAib3B0aW9uIiwgIm9wdGlvbkVsZW1lbnQiLCAic3dpdGNoU2VjdGlvbkRyb3Bkb3duIiwgInN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cyIsICJzd2l0Y2hTZWN0aW9uTGFiZWwiLCAic3dpdGNoU2VjdGlvblJlYXNvbmluZyIsICJzdWJtaXRCdXR0b24iLCAibG9hZGluZ1NwaW5uZXIiLCAiZW5kUmVzdWx0IiwgImNoYW5nZXMiLCAic2VjdGlvblRpdGxlQWZ0ZXIiLCAibm9SZW1haW5pbmciLCAiZWRpdFN1bW1hcnkiLCAicmVhc29uIiwgInBhZ2VzIiwgInBhZ2UiLCAiZGVzdGluYXRpb24iXQp9Cg==